浏览代码

IRC link descriptions now much better/cleaner.

Phil Jackson 17 年之前
父节点
当前提交
3fbe1e698f
共有 2 个文件被更改,包括 43 次插入32 次删除
  1. 6 0
      ChangeLog
  2. 37 32
      org-irc.el

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+2008-02-27  Phil Jackson  <phil@shellarchive.co.uk>
+
+	* org-irc.el (org-irc-erc-store-link): Links now have
+	descriptions. The cpltxt and link variables are no longer directly
+	set.
+
 2008-02-27  Carsten Dominik  <dominik@science.uva.nl>
 2008-02-27  Carsten Dominik  <dominik@science.uva.nl>
 
 
 	* org-publish.el (org-publish-current-project): Fixed another
 	* org-publish.el (org-publish-current-project): Fixed another

+ 37 - 32
org-irc.el

@@ -4,7 +4,7 @@
 ;;
 ;;
 ;; Author: Philip Jackson <emacs@shellarchive.co.uk>
 ;; Author: Philip Jackson <emacs@shellarchive.co.uk>
 ;; Keywords: erc, irc, link, org
 ;; Keywords: erc, irc, link, org
-;; Version: 1.0
+;; Version: 1.1
 ;;
 ;;
 ;; This file is part of GNU Emacs.
 ;; This file is part of GNU Emacs.
 ;;
 ;;
@@ -28,8 +28,10 @@
 ;; Link to an IRC session. Only ERC has been implemented at the
 ;; Link to an IRC session. Only ERC has been implemented at the
 ;; moment.
 ;; moment.
 ;;
 ;;
-;; Please configure the variable `org-default-extensions' to ensure that
-;; this extension will be loaded.
+;; Place org-irc.el in your load path and add this to your
+;; .emacs:
+;;
+;; (require 'org-irc)
 ;;
 ;;
 ;; Please note that at the moment only ERC is supported. Other clients
 ;; Please note that at the moment only ERC is supported. Other clients
 ;; shouldn't be diffficult to add though.
 ;; shouldn't be diffficult to add though.
@@ -49,8 +51,6 @@
 ;;
 ;;
 ;;; Code:
 ;;; Code:
 
 
-(require 'org-irc)
-
 (defvar org-irc-client 'erc
 (defvar org-irc-client 'erc
   "The IRC client to act on")
   "The IRC client to act on")
 (defvar org-irc-link-to-logs nil
 (defvar org-irc-link-to-logs nil
@@ -95,50 +95,55 @@ something IRC related"
 (defun org-irc-erc-get-line-from-log (erc-line)
 (defun org-irc-erc-get-line-from-log (erc-line)
   "Find the most suitable line to link to from the erc logs. If
   "Find the most suitable line to link to from the erc logs. If
 the user is on the erc-prompt then search backward for the first
 the user is on the erc-prompt then search backward for the first
-non-blank line, otherwise return the current line."
+non-blank line, otherwise return the current line. The result is
+a cons of the filename and search string."
   (erc-save-buffer-in-logs)
   (erc-save-buffer-in-logs)
   (with-current-buffer (find-file-noselect (erc-current-logfile))
   (with-current-buffer (find-file-noselect (erc-current-logfile))
     (goto-char (point-max))
     (goto-char (point-max))
-    (concat
-     "file:" (abbreviate-file-name
-              buffer-file-name)
+    (list
+     (abbreviate-file-name buffer-file-name)
      ;; can we get a '::' part?
      ;; can we get a '::' part?
-     (if (equal erc-line (erc-prompt))
+     (if (string= erc-line (erc-prompt))
          (progn
          (progn
            (goto-char (point-at-bol))
            (goto-char (point-at-bol))
            (when (search-backward-regexp "^[^ 	]" nil t)
            (when (search-backward-regexp "^[^ 	]" nil t)
-             (concat "::" (buffer-substring-no-properties
-                           (point-at-bol)
-                           (point-at-eol)))))
+             (buffer-substring-no-properties (point-at-bol)
+                                             (point-at-eol))))
          (when (search-backward erc-line nil t)
          (when (search-backward erc-line nil t)
-           (concat "::" (buffer-substring-no-properties
-                         (point-at-bol)
-                         (point-at-eol))))))))
+           (buffer-substring-no-properties (point-at-bol)
+                                           (point-at-eol)))))))
 
 
 (defun org-irc-erc-store-link ()
 (defun org-irc-erc-store-link ()
-  "Return an org compatible file:/ link which links to a log file
-of the current ERC session"
+  "Depending on the variable `org-irc-link-to-logs' store either
+a link to the log file for the current session or an irc: link to
+the session itself."
   (if org-irc-link-to-logs
   (if org-irc-link-to-logs
-      (let ((erc-line (buffer-substring-no-properties
-                       (point-at-bol) (point-at-eol))))
+      (let* ((erc-line (buffer-substring-no-properties
+                        (point-at-bol) (point-at-eol)))
+             (parsed-line (org-irc-erc-get-line-from-log erc-line)))
         (if (erc-logging-enabled nil)
         (if (erc-logging-enabled nil)
             (progn
             (progn
-              (setq cpltxt (org-irc-erc-get-line-from-log erc-line))
+              (org-store-link-props
+               :type "file"
+               :description (concat "'" (cadr parsed-line)
+                                    "' from an IRC conversation")
+               :link (concat "file:" (car parsed-line) "::"
+                             (cadr parsed-line)))
               t)
               t)
             (error "This ERC session is not being logged")))
             (error "This ERC session is not being logged")))
-      (let ((link (org-irc-get-erc-link)))
-        (if link
+      (let* ((link-text (org-irc-get-erc-link))
+             (link (org-irc-parse-link link-text)))
+        (if link-text
             (progn
             (progn
-              (setq cpltxt (concat "irc:/" link))
-              (org-make-link cpltxt)
-              (setq link (org-irc-parse-link link))
-              (org-store-link-props :type "irc"
-                                    :server (car (car link))
-                                    :port (or (cadr (pop link))
-                                              erc-default-port)
-                                    :nick (pop link))
+              (org-store-link-props
+               :type "irc"
+               :link (org-make-link "irc:/" link-text)
+               :description (concat "irc session '" link-text "'")
+               :server (car (car link))
+               :port (or (cadr (pop link)) erc-default-port)
+               :nick (pop link))
               t)
               t)
-            (error "Failed to create (non-log) ERC link")))))
+            (error "Failed to create ('irc:/' style) ERC link")))))
 
 
 (defun org-irc-get-erc-link ()
 (defun org-irc-get-erc-link ()
   "Return an org compatible irc:/ link from an ERC buffer"
   "Return an org compatible irc:/ link from an ERC buffer"