Added join as a client command.
[lurk.git] / lurk.el
diff --git a/lurk.el b/lurk.el
index 8967094..ad4b1e2 100644 (file)
--- a/lurk.el
+++ b/lurk.el
@@ -452,6 +452,13 @@ portion of the source component of the message, as LURK doesn't use this.")
       (goto-char (point-max))
       (line-beginning-position))))
 
+(defun lurk-scroll-windows-to-last-line ()
+  (with-current-buffer "*lurk*"
+    (dolist (window (get-buffer-window-list))
+      (if (>= (window-point window) (lurk--start-of-final-line))
+          (with-selected-window window
+            (recenter -1))))))
+
 (defun lurk-display-string (context prefix &rest strings)
   (with-current-buffer "*lurk*"
     (save-excursion
@@ -480,11 +487,8 @@ portion of the source component of the message, as LURK doesn't use this.")
                        'face (lurk-get-context-facelist context)
                        'read-only t
                        'context context
-                       'invisible context-atom))))))
-    (dolist (window (get-buffer-window-list))
-      (if (>= (window-point window) (lurk--start-of-final-line))
-          (with-selected-window window
-            (recenter -1))))))
+                       'invisible context-atom)))))))
+  (lurk-scroll-windows-to-last-line))
 
 (defun lurk-display-message (from to text)
   (let ((context (if (eq 'channel (lurk-get-context-type to))
@@ -543,7 +547,8 @@ portion of the source component of the message, as LURK doesn't use this.")
                (remove-from-invisibility-spec this-context-atom)
              (add-to-invisibility-spec this-context-atom)))))
      lurk-context-facelists)
-    (force-window-update "*lurk*")))
+    (force-window-update "*lurk*"))
+  (lurk-scroll-windows-to-last-line))
 
 (defun lurk-zoom-out ()
   (with-current-buffer "*lurk*"
@@ -552,7 +557,8 @@ portion of the source component of the message, as LURK doesn't use this.")
        (let ((this-context-atom (if this-context (intern this-context) nil)))
          (remove-from-invisibility-spec this-context-atom)))
      lurk-context-facelists)
-    (force-window-update "*lurk*")))
+    (force-window-update "*lurk*"))
+  (lurk-scroll-windows-to-last-line))
 
 (defconst lurk-url-regex
   (rx (:
@@ -844,6 +850,7 @@ in which case they match anything.")
     ("HEADER" "Toggle display of header." lurk-command-header lurk-boolean-completions)
     ("CONNECT" "Connect to an IRC network." lurk-command-connect lurk-network-completions)
     ("NETWORKS" "List known IRC networks." lurk-command-networks)
+    ("JOIN" "Join one or more channels." lurk-command-join)
     ("TOPIC" "Set topic for current channel." lurk-command-topic)
     ("ME" "Display action." lurk-command-me)
     ("VERSION" "Request version of another user's client via CTCP." lurk-command-version)
@@ -920,6 +927,12 @@ in which case they match anything.")
                            " " (number-to-string port) "]")))
   (lurk-display-notice nil "(Modify the `lurk-networks' variable to add more.)"))
 
+(defun lurk-command-join (params)
+  (if params
+      (dolist (channel params)
+        (lurk-send-msg (lurk-msg nil nil "JOIN" channel)))
+    (lurk-display-notice nil "Usage: /join channel [channel2 ...]")))
+
 (defun lurk-command-part (params)
   (let ((channel (if params (car params) lurk-current-context)))
     (if channel