]> git.eshelyaron.com Git - emacs.git/commitdiff
Rcirc update from Ryan Yeske
authorMiles Bader <miles@gnu.org>
Mon, 21 Aug 2006 05:37:27 +0000 (05:37 +0000)
committerMiles Bader <miles@gnu.org>
Mon, 21 Aug 2006 05:37:27 +0000 (05:37 +0000)
2006-08-20  Ryan Yeske  <rcyeske@gmail.com>

   * lisp/net/rcirc.el (rcirc-show-maximum-output): New var.
   (rcirc-buffer-process): If no buffer argument is supplied, use
   current-buffer.
   (rcirc-complete-nick): Complete to the last completed nick first.
   (rcirc-mode): Preserve the value of `rcirc-urls' across
   connections.  Setup scroll function.
   (rcirc-scroll-to-bottom): New function.
   (rcirc-print): Use nick syntax around regexp work.  Notice
   dim-nicks speaking only if they say our nick.
   (rcirc-update-activity-string): Do not show the modeline indicator
   if there are no live rcirc processes.
   (rcirc-cmd-ignore): Ignore case.
   (rcirc-browse-url-at-point): Fix off-by-one error.

Revision: emacs@sv.gnu.org/emacs--devo--0--patch-403

lisp/ChangeLog
lisp/net/rcirc.el

index dbc4b75d738250b4ccdb60e38a80933e43c7ee5a..f39afc16d73a2620f7b21ed1c8a654841c22503b 100644 (file)
@@ -1,3 +1,19 @@
+2006-08-20  Ryan Yeske  <rcyeske@gmail.com>
+
+       * net/rcirc.el (rcirc-show-maximum-output): New var.
+       (rcirc-buffer-process): If no buffer argument is supplied, use
+       current-buffer.
+       (rcirc-complete-nick): Complete to the last completed nick first.
+       (rcirc-mode): Preserve the value of `rcirc-urls' across
+       connections.  Setup scroll function.
+       (rcirc-scroll-to-bottom): New function.
+       (rcirc-print): Use nick syntax around regexp work.  Notice
+       dim-nicks speaking only if they say our nick.
+       (rcirc-update-activity-string): Do not show the modeline indicator
+       if there are no live rcirc processes.
+       (rcirc-cmd-ignore): Ignore case.
+       (rcirc-browse-url-at-point): Fix off-by-one error.
+
 2006-08-20  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * progmodes/python.el: Remove * in defcustom docstrings.
index 1f051ffa9f26c3553d0ea8823caf6a18b728abd9..c34ac7dcf787cbb57ffcfc557d58e5324b9f9921 100644 (file)
@@ -40,6 +40,8 @@
 ;; Open a new irc connection with:
 ;; M-x irc RET
 
+;;; Todo:
+
 ;;; Code:
 
 (require 'ring)
@@ -140,6 +142,10 @@ number.     If zero or nil, no truncating is done."
                 (integer :tag "Number of lines"))
   :group 'rcirc)
 
+(defcustom rcirc-show-maximum-output t
+  "*If non-nil, scroll buffer to keep the point at the bottom of
+the window.")
+
 (defcustom rcirc-authinfo nil
   "List of authentication passwords.
 Each element of the list is a list with a SERVER-REGEXP string
@@ -297,6 +303,7 @@ and the cdr part is used for encoding."
 
 (defvar rcirc-urls nil
   "List of urls seen in the current buffer.")
+(put 'rcirc-urls 'permanent-local t)
 
 (defvar rcirc-keepalive-seconds 60
   "Number of seconds between keepalive pings.
@@ -539,7 +546,10 @@ Function is called with PROCESS, COMMAND, SENDER, ARGS and LINE.")
 (defun rcirc-buffer-process (&optional buffer)
   "Return the process associated with channel BUFFER.
 With no argument or nil as argument, use the current buffer."
-  (get-buffer-process (or buffer rcirc-server-buffer)))
+  (get-buffer-process (if buffer
+                         (with-current-buffer buffer
+                           rcirc-server-buffer)
+                       rcirc-server-buffer)))
 
 (defun rcirc-server-name (process)
   "Return PROCESS server name, given by the 001 response."
@@ -601,10 +611,11 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
 
 (defvar rcirc-nick-completions nil)
 (defvar rcirc-nick-completion-start-offset nil)
+
 (defun rcirc-complete-nick ()
   "Cycle through nick completions from list of nicks in channel."
   (interactive)
-  (if (eq last-command 'rcirc-complete-nick)
+  (if (eq last-command this-command)
       (setq rcirc-nick-completions
             (append (cdr rcirc-nick-completions)
                     (list (car rcirc-nick-completions))))
@@ -626,9 +637,10 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
                                          rcirc-target))))))
   (let ((completion (car rcirc-nick-completions)))
     (when completion
+      (rcirc-put-nick-channel (rcirc-buffer-process) completion rcirc-target)
       (delete-region (+ rcirc-prompt-end-marker
-                        rcirc-nick-completion-start-offset)
-                     (point))
+                       rcirc-nick-completion-start-offset)
+                    (point))
       (insert (concat completion
                       (if (= (+ rcirc-prompt-end-marker
                                 rcirc-nick-completion-start-offset)
@@ -709,7 +721,6 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
   (make-local-variable 'rcirc-short-buffer-name)
   (setq rcirc-short-buffer-name nil)
   (make-local-variable 'rcirc-urls)
-  (setq rcirc-urls nil)
   (setq use-hard-newlines t)
 
   (make-local-variable 'rcirc-decode-coding-system)
@@ -742,6 +753,9 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
   (make-local-variable 'kill-buffer-hook)
   (add-hook 'kill-buffer-hook 'rcirc-kill-buffer-hook)
 
+  (make-local-variable 'window-scroll-functions)
+  (add-hook 'window-scroll-functions 'rcirc-scroll-to-bottom)
+
   ;; add to buffer list, and update buffer abbrevs
   (when target                         ; skip server buffer
     (let ((buffer (current-buffer)))
@@ -1144,6 +1158,15 @@ is found by looking up RESPONSE in `rcirc-response-formats'."
 (make-variable-buffer-local 'rcirc-last-sender)
 (defvar rcirc-gray-toggle nil)
 (make-variable-buffer-local 'rcirc-gray-toggle)
+
+(defun rcirc-scroll-to-bottom (window display-start)
+  "Scroll window to show maximum output if `rcirc-show-maximum-output' is
+non-nil."
+  (when rcirc-show-maximum-output
+    (with-selected-window window
+      (when (>= (window-point) rcirc-prompt-end-marker)
+       (recenter -1)))))
+
 (defun rcirc-print (process sender response target text &optional activity)
   "Print TEXT in the buffer associated with TARGET.
 Format based on SENDER and RESPONSE.  If ACTIVITY is non-nil,
@@ -1240,16 +1263,19 @@ record activity."
        ;; record modeline activity
        (when activity
          (let ((nick-match
-                (string-match (concat "\\b"
-                                      (regexp-quote (rcirc-nick process))
-                                      "\\b")
-                              text)))
+                (with-syntax-table rcirc-nick-syntax-table              
+                  (string-match (concat "\\b"
+                                        (regexp-quote (rcirc-nick process))
+                                        "\\b")
+                                text))))
            (when (if rcirc-ignore-buffer-activity-flag
                      ;; - Always notice when our nick is mentioned
                      nick-match
-                   ;; - Never bother us if a dim-nick spoke
-                   (not (and rcirc-dim-nick-regexp sender
-                             (string-match rcirc-dim-nick-regexp sender))))
+                   ;; - unless our nick is mentioned, don't bother us
+                   ;; - with dim-nicks
+                   (or nick-match
+                       (not (and rcirc-dim-nick-regexp sender
+                                 (string-match rcirc-dim-nick-regexp sender)))))
              (rcirc-record-activity
               (current-buffer)
               (when (or nick-match (and (not (rcirc-channel-p rcirc-target))
@@ -1504,18 +1530,20 @@ activity.  Only run if the buffer is not visible and
         (lopri (car pair))
         (hipri (cdr pair)))
     (setq rcirc-activity-string
-         (if (or hipri lopri)
-             (concat "-"
-                     (and hipri "[")
-                     (rcirc-activity-string hipri)
-                     (and hipri lopri ",")
-                     (and lopri
-                          (concat "("
-                                  (rcirc-activity-string lopri)
-                                  ")"))
-                     (and hipri "]")
-                     "-")
-           "-[]-"))))
+         (cond ((or hipri lopri)
+                (concat "-"
+                        (and hipri "[")
+                        (rcirc-activity-string hipri)
+                        (and hipri lopri ",")
+                        (and lopri
+                             (concat "("
+                                     (rcirc-activity-string lopri)
+                                     ")"))
+                        (and hipri "]")
+                        "-"))
+               ((not (null (rcirc-process-list)))
+                "-[]-")
+               (t "")))))
 
 (defun rcirc-activity-string (buffers)
   (mapconcat (lambda (b)
@@ -1771,7 +1799,7 @@ nicks when no NICK is given.  When listing ignored nicks, the
 ones added to the list automatically are marked with an asterisk."
   (interactive "sToggle ignoring of nick: ")
   (when (not (string= "" nick))
-    (if (member nick rcirc-ignore-list)
+    (if (member-ignore-case nick rcirc-ignore-list)
        (setq rcirc-ignore-list (delete nick rcirc-ignore-list))
       (setq rcirc-ignore-list (cons nick rcirc-ignore-list))))
   (rcirc-print process (rcirc-nick process) "IGNORE" target 
@@ -1800,6 +1828,7 @@ ones added to the list automatically are marked with an asterisk."
                       "://")
                  "www.")
              (1+ (char "-a-zA-Z0-9_."))
+             (1+ (char "-a-zA-Z0-9_"))
              (optional ":" (1+ (char "0-9"))))
             (and (1+ (char "-a-zA-Z0-9_."))
                  (or ".com" ".net" ".org")
@@ -1823,7 +1852,7 @@ ones added to the list automatically are marked with an asterisk."
 (defun rcirc-browse-url-at-point (point)
   "Send URL at point to `browse-url'."
   (interactive "d")
-  (let ((beg (previous-single-property-change point 'mouse-face))
+  (let ((beg (previous-single-property-change (1+ point) 'mouse-face))
        (end (next-single-property-change point 'mouse-face)))
     (browse-url (buffer-substring-no-properties beg end))))