emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/org/org-irc.el,v


From: Carsten Dominik
Subject: [Emacs-diffs] Changes to emacs/lisp/org/org-irc.el,v
Date: Sun, 27 Apr 2008 18:33:41 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Carsten Dominik <cdominik>      08/04/27 18:33:39

Index: org-irc.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/org/org-irc.el,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- org-irc.el  22 Mar 2008 05:55:07 -0000      1.1
+++ org-irc.el  27 Apr 2008 18:33:38 -0000      1.2
@@ -1,13 +1,13 @@
 ;;; org-irc.el --- Store links to IRC sessions
-
+;;
 ;; Copyright (C) 2008  Free Software Foundation, Inc.
-
+;;
 ;; Author: Philip Jackson <address@hidden>
 ;; Keywords: erc, irc, link, org
-;; Version: 1.3
-
+;; Version: 6.02b
+;;
 ;; This file is part of GNU Emacs.
-
+;;
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation; either version 3, or (at your option)
@@ -25,15 +25,16 @@
 
 ;;; Commentary:
 
-;; Link to an IRC session. Only ERC has been implemented at the
-;; moment.
+;; This file implements links to an IRC session from within Org-mode.
+;; Org-mode loads this module by default - if this is not what you want,
+;; configure the variable `org-modules'.
 ;;
-;; This file is loaded by default whenever org.el is loaded.  Please
-;; customize the variable `org-default-extensions' to select extensions
-;; you would like to use, and to deselect those which you don't want.
+;; Please customize the variable `org-default-extensions' to select
+;; extensions you would like to use, and to deselect those which you don't
+;; want.
 ;;
 ;; Please note that at the moment only ERC is supported. Other clients
-;; shouldn't be diffficult to add though.
+;; shouldn't be difficult to add though.
 ;;
 ;; Then set `org-irc-link-to-logs' to non-nil if you would like a
 ;; file:/ type link to be created to the current line in the logs or
@@ -51,27 +52,34 @@
 ;;; Code:
 
 (require 'org)
-(require 'erc)
-(require 'erc-log)
+
+;; Declare the function fomr ERC that we use.
+(declare-function erc-current-logfile "erc-log" (&optional buffer))
+(declare-function erc-prompt "erc" ())
+(declare-function erc-default-target "erc" ())
+(declare-function erc-channel-p "erc" (channel))
+(declare-function erc-buffer-filter "erc" (predicate &optional proc))
+(declare-function erc-server-buffer "erc" ())
+(declare-function erc-get-server-nickname-list "erc" ())
+(declare-function erc-cmd-JOIN "erc" (channel &optional key))
 
 (defvar org-irc-client 'erc
-  "The IRC client to act on")
+  "The IRC client to act on.")
 (defvar org-irc-link-to-logs nil
-  "non-nil will store a link to the logs, nil will store an irc: style link")
+  "Non-nil will store a link to the logs, nil will store an irc: style link.")
 
 (defvar erc-default-port) ; dynamically scoped from erc.el
 (defvar erc-session-port) ; dynamically scoped form erc-backend.el
-(defvar erc-server-announced-name) ; dynamically scoped form erc-backend.el
+(defvar erc-session-server) ; dynamically scoped form erc-backend.el
 
 ;; Generic functions/config (extend these for other clients)
 
-(add-to-list 'org-store-link-functions
-             'org-irc-store-link)
+(add-to-list 'org-store-link-functions 'org-irc-store-link)
 
 (org-add-link-type "irc" 'org-irc-visit nil)
 
 (defun org-irc-visit (link)
-  "Dispatch to the correct visit function based on the client"
+  "Parse LINK and dispatch to the correct function based on the client found."
   (let ((link (org-irc-parse-link link)))
     (cond
       ((eq org-irc-client 'erc)
@@ -80,26 +88,28 @@
        (error "erc only known client")))))
 
 (defun org-irc-parse-link (link)
-  "Get a of irc link attributes where `link' looks like
-server:port/chan/user (port, chan and user being optional)."
+  "Parse an IRC LINK and return the attributes found.
+Parse a LINK that looks like server:port/chan/user (port, chan
+and user being optional) and return any or the port, channel or user
+attributes that are found."
   (let* ((parts (split-string link "/" t))
          (len (length parts)))
     (when (or (< len 1) (> len 3))
-      (error "Failed to parse link needed 1-3 parts, got %d." len))
+      (error "Failed to parse link needed 1-3 parts, got %d" len))
     (setcar parts (split-string (car parts) ":" t))
     parts))
 
 ;;;###autoload
 (defun org-irc-store-link ()
-  "Dispatch to the appropreate function to store a link to
-something IRC related"
+  "Dispatch to the appropriate function to store a link to an IRC session."
   (cond
     ((eq major-mode 'erc-mode)
      (org-irc-erc-store-link))))
 
 (defun org-irc-elipsify-description (string &optional after)
-  "Strip starting and ending whitespace and replace any chars
-that appear after the value in `after' with '...'"
+  "Remove unnecessary white space from STRING and add ellipses if necessary.
+Strip starting and ending white space from STRING and replace any
+chars that the value AFTER with '...'"
   (let* ((after (number-to-string (or after 30)))
          (replace-map (list (cons "^[ \t]*" "")
                             (cons "[ \t]*$" "")
@@ -114,11 +124,12 @@
 ;; ERC specific functions
 
 (defun org-irc-erc-get-line-from-log (erc-line)
-  "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
-non-blank line, otherwise return the current line. The result is
-a cons of the filename and search string."
+  "Find the best line to link to from the ERC logs given ERC-LINE as a start.
+If the user is on the ERC-prompt then search backward for the
+first non-blank line, otherwise return the current line.  The
+result is a cons of the filename and search string."
   (erc-save-buffer-in-logs)
+  (require 'erc-log)
   (with-current-buffer (find-file-noselect (erc-current-logfile))
     (goto-char (point-max))
     (list
@@ -135,9 +146,11 @@
                                            (point-at-eol)))))))
 
 (defun org-irc-erc-store-link ()
-  "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
+  "Store a link to the IRC log file or the session itself.
+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."
+  (require 'erc-log)
   (if org-irc-link-to-logs
       (let* ((erc-line (buffer-substring-no-properties
                         (point-at-bol) (point-at-eol)))
@@ -162,15 +175,17 @@
                :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)
+               :port (or (string-to-number (cadr (pop link))) erc-default-port)
                :nick (pop link))
               t)
             (error "Failed to create ('irc:/' style) ERC link")))))
 
 (defun org-irc-get-erc-link ()
-  "Return an org compatible irc:/ link from an ERC buffer"
-  (let ((link (concat erc-server-announced-name ":"
-                      (number-to-string erc-session-port))))
+  "Return an org compatible irc:/ link from an ERC buffer."
+  (let* ((session-port (if (numberp erc-session-port)
+                           (number-to-string erc-session-port)
+                           erc-session-port))
+          (link (concat erc-session-server ":" session-port)))
     (concat link "/"
             (if (and (erc-default-target)
                      (erc-channel-p (erc-default-target))
@@ -180,10 +195,24 @@
                   (concat (erc-default-target) "/" nick))
                 (erc-default-target)))))
 
+(defun org-irc-get-current-erc-port ()
+  "Return the current port as a number.
+Return the current port number or, if none is set, return the ERC
+default."
+  (cond
+    ((stringp erc-session-port)
+     (string-to-number erc-session-port))
+    ((numberp erc-session-port)
+     erc-session-port)
+    (t
+     erc-default-port)))
+
 (defun org-irc-visit-erc (link)
-  "Visit an ERC buffer based on criteria from the followed link"
+  "Visit an ERC buffer based on criteria found in LINK."
+  (require 'erc)
+  (require 'erc-log)
   (let* ((server (car (car link)))
-         (port (or (cadr (pop link)) erc-default-port))
+         (port (or (string-to-number (cadr (pop link))) erc-default-port))
          (server-buffer)
          (buffer-list
           (erc-buffer-filter
@@ -192,8 +221,8 @@
                (and tmp-server-buf
                     (with-current-buffer tmp-server-buf
                       (and
-                       (string= erc-session-port port)
-                       (string= erc-server-announced-name server)
+                       (eq (org-irc-get-current-erc-port) port)
+                       (string= erc-session-server server)
                        (setq server-buffer tmp-server-buf)))))))))
     (if buffer-list
         (let ((chan-name (pop link)))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]