aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorStefan Monnier2011-05-11 23:25:58 -0300
committerStefan Monnier2011-05-11 23:25:58 -0300
commit488086f4dd22b95c37cf23bd4d1d9cc190aaf6b8 (patch)
tree00dc155dc1d3a3d538f46070947885ebe20ea11d /lisp
parent9820ccdf510351c2850218be8fd6402c5ada9805 (diff)
downloademacs-488086f4dd22b95c37cf23bd4d1d9cc190aaf6b8.tar.gz
emacs-488086f4dd22b95c37cf23bd4d1d9cc190aaf6b8.zip
* lisp/net/rcirc.el: Add support for SSL/TLS connections.
(rcirc-server-alist): New field `encryption'. (rcirc): Check `encryption' settings. (rcirc-connect): New arg `encryption'. Use open-network-stream. Merge make-local-variable into `set'. (rcirc--connection-open-p): New function. (rcirc-send-string, rcirc-clean-up-buffer): Use it to handle case where the process is not a network process (e.g. running gnutls-cli). (set-rcirc-decode-coding-system, set-rcirc-encode-coding-system): Make rcirc-(en|de)code-coding-system local here. (rcirc-mode): Merge make-local-variable into `set'. (rcirc-parent-buffer): Make permanent buffer-local. (rcirc-multiline-minor-mode): Don't do it here. (rcirc-switch-to-server-buffer): Don't switch to a random buffer if there's no server buffer.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog38
-rw-r--r--lisp/net/rcirc.el160
2 files changed, 108 insertions, 90 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index b0ed7bf12bd..40e9b00cd33 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,21 @@
12011-05-12 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * net/rcirc.el: Add support for SSL/TLS connections.
4 (rcirc-server-alist): New field `encryption'.
5 (rcirc): Check `encryption' settings.
6 (rcirc-connect): New arg `encryption'. Use open-network-stream.
7 Merge make-local-variable into `set'.
8 (rcirc--connection-open-p): New function.
9 (rcirc-send-string, rcirc-clean-up-buffer): Use it to handle case where
10 the process is not a network process (e.g. running gnutls-cli).
11 (set-rcirc-decode-coding-system, set-rcirc-encode-coding-system):
12 Make rcirc-(en|de)code-coding-system local here.
13 (rcirc-mode): Merge make-local-variable into `set'.
14 (rcirc-parent-buffer): Make permanent buffer-local.
15 (rcirc-multiline-minor-mode): Don't do it here.
16 (rcirc-switch-to-server-buffer): Don't switch to a random buffer if
17 there's no server buffer.
18
12011-05-11 Glenn Morris <rgm@gnu.org> 192011-05-11 Glenn Morris <rgm@gnu.org>
2 20
3 * newcomment.el (comment-kill): Prefix "unused" local. 21 * newcomment.el (comment-kill): Prefix "unused" local.
@@ -9,8 +27,8 @@
9 27
102011-05-10 Leo Liu <sdl.web@gmail.com> 282011-05-10 Leo Liu <sdl.web@gmail.com>
11 29
12 * bookmark.el (bookmark-bmenu-mode-map): Bind 30 * bookmark.el (bookmark-bmenu-mode-map):
13 bookmark-bmenu-search to `/'. 31 Bind bookmark-bmenu-search to `/'.
14 32
15 * mail/footnote.el: Convert to utf-8 encoding. 33 * mail/footnote.el: Convert to utf-8 encoding.
16 (footnote-unicode-string, footnote-unicode-regexp): New variable. 34 (footnote-unicode-string, footnote-unicode-regexp): New variable.
@@ -38,8 +56,8 @@
38 56
392011-05-09 Chong Yidong <cyd@stupidchicken.com> 572011-05-09 Chong Yidong <cyd@stupidchicken.com>
40 58
41 * progmodes/compile.el (compilation-start): Run 59 * progmodes/compile.el (compilation-start):
42 compilation-filter-hook for the async case too. 60 Run compilation-filter-hook for the async case too.
43 (compilation-filter-hook): Doc fix. 61 (compilation-filter-hook): Doc fix.
44 62
452011-05-09 Deniz Dogan <deniz@dogan.se> 632011-05-09 Deniz Dogan <deniz@dogan.se>
@@ -56,8 +74,8 @@
56 74
572011-05-09 Chong Yidong <cyd@stupidchicken.com> 752011-05-09 Chong Yidong <cyd@stupidchicken.com>
58 76
59 * progmodes/compile.el (compilation-error-regexp-alist-alist): Fix 77 * progmodes/compile.el (compilation-error-regexp-alist-alist):
60 the ant regexp to handle end-line and end-column info from jikes. 78 Fix the ant regexp to handle end-line and end-column info from jikes.
61 Re-introduce maven regexp. Give the ruby-Test::Unit regexp a 79 Re-introduce maven regexp. Give the ruby-Test::Unit regexp a
62 higher priority to avoid clobbering by gnu. 80 higher priority to avoid clobbering by gnu.
63 81
@@ -68,16 +86,16 @@
68 86
692011-05-08 Ralph Schleicher <rs@ralph-schleicher.de> 872011-05-08 Ralph Schleicher <rs@ralph-schleicher.de>
70 88
71 * progmodes/perl-mode.el (perl-imenu-generic-expression): Only 89 * progmodes/perl-mode.el (perl-imenu-generic-expression):
72 match variables declared via `my' or `our' (Bug#8261). 90 Only match variables declared via `my' or `our' (Bug#8261).
73 91
74 * net/browse-url.el (browse-url-of-dired-file): Allow browsing of 92 * net/browse-url.el (browse-url-of-dired-file): Allow browsing of
75 special file names `.' and `..' (Bug#8259). 93 special file names `.' and `..' (Bug#8259).
76 94
772011-05-08 Chong Yidong <cyd@stupidchicken.com> 952011-05-08 Chong Yidong <cyd@stupidchicken.com>
78 96
79 * progmodes/grep.el (grep-mode-font-lock-keywords): Remove 97 * progmodes/grep.el (grep-mode-font-lock-keywords):
80 buffer-changing entries. 98 Remove buffer-changing entries.
81 (grep-filter): New function. 99 (grep-filter): New function.
82 (grep-mode): Add it to compilation-filter-hook. 100 (grep-mode): Add it to compilation-filter-hook.
83 101
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index 148c9b7b297..206ebc8997c 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -55,7 +55,10 @@
55 :group 'applications) 55 :group 'applications)
56 56
57(defcustom rcirc-server-alist 57(defcustom rcirc-server-alist
58 '(("irc.freenode.net" :channels ("#rcirc"))) 58 '(("irc.freenode.net" :channels ("#rcirc")
59 ;; Don't use the TLS port by default, in case gnutls is not available.
60 ;; :port 7000 :encryption tls
61 ))
59 "An alist of IRC connections to establish when running `rcirc'. 62 "An alist of IRC connections to establish when running `rcirc'.
60Each element looks like (SERVER-NAME PARAMETERS). 63Each element looks like (SERVER-NAME PARAMETERS).
61 64
@@ -95,14 +98,22 @@ used.
95 98
96VALUE must be a list of strings describing which channels to join 99VALUE must be a list of strings describing which channels to join
97when connecting to this server. If absent, no channels will be 100when connecting to this server. If absent, no channels will be
98connected to automatically." 101connected to automatically.
102
103`:encryption'
104
105VALUE must be `plain' (the default) for unencrypted connections, or `tls'
106for connections using SSL/TLS."
99 :type '(alist :key-type string 107 :type '(alist :key-type string
100 :value-type (plist :options ((:nick string) 108 :value-type (plist :options
101 (:port integer) 109 ((:nick string)
102 (:user-name string) 110 (:port integer)
103 (:password string) 111 (:user-name string)
104 (:full-name string) 112 (:password string)
105 (:channels (repeat string))))) 113 (:full-name string)
114 (:channels (repeat string))
115 (:encryption (choice (const tls)
116 (const plain))))))
106 :group 'rcirc) 117 :group 'rcirc)
107 118
108(defcustom rcirc-default-port 6667 119(defcustom rcirc-default-port 6667
@@ -441,10 +452,14 @@ If ARG is non-nil, instead prompt for connection parameters."
441 (plist-get server-plist 452 (plist-get server-plist
442 :channels) 453 :channels)
443 " ")) 454 " "))
444 "[, ]+" t))) 455 "[, ]+" t))
456 (encryption
457 (intern (completing-read "Encryption (default plain): "
458 '("plain" "tls")
459 nil t nil nil "plain"))))
445 (rcirc-connect server port nick user-name 460 (rcirc-connect server port nick user-name
446 rcirc-default-full-name 461 rcirc-default-full-name
447 channels password)) 462 channels password encryption))
448 ;; connect to servers in `rcirc-server-alist' 463 ;; connect to servers in `rcirc-server-alist'
449 (let (connected-servers) 464 (let (connected-servers)
450 (dolist (c rcirc-server-alist) 465 (dolist (c rcirc-server-alist)
@@ -456,7 +471,8 @@ If ARG is non-nil, instead prompt for connection parameters."
456 (full-name (or (plist-get (cdr c) :full-name) 471 (full-name (or (plist-get (cdr c) :full-name)
457 rcirc-default-full-name)) 472 rcirc-default-full-name))
458 (channels (plist-get (cdr c) :channels)) 473 (channels (plist-get (cdr c) :channels))
459 (password (plist-get (cdr c) :password))) 474 (password (plist-get (cdr c) :password))
475 (encryption (plist-get (cdr c) :encryption)))
460 (when server 476 (when server
461 (let (connected) 477 (let (connected)
462 (dolist (p (rcirc-process-list)) 478 (dolist (p (rcirc-process-list))
@@ -465,7 +481,7 @@ If ARG is non-nil, instead prompt for connection parameters."
465 (if (not connected) 481 (if (not connected)
466 (condition-case e 482 (condition-case e
467 (rcirc-connect server port nick user-name 483 (rcirc-connect server port nick user-name
468 full-name channels password) 484 full-name channels password encryption)
469 (quit (message "Quit connecting to %s" server))) 485 (quit (message "Quit connecting to %s" server)))
470 (with-current-buffer (process-buffer connected) 486 (with-current-buffer (process-buffer connected)
471 (setq connected-servers 487 (setq connected-servers
@@ -498,7 +514,7 @@ If ARG is non-nil, instead prompt for connection parameters."
498 514
499;;;###autoload 515;;;###autoload
500(defun rcirc-connect (server &optional port nick user-name 516(defun rcirc-connect (server &optional port nick user-name
501 full-name startup-channels password) 517 full-name startup-channels password encryption)
502 (save-excursion 518 (save-excursion
503 (message "Connecting to %s..." server) 519 (message "Connecting to %s..." server)
504 (let* ((inhibit-eol-conversion) 520 (let* ((inhibit-eol-conversion)
@@ -511,7 +527,9 @@ If ARG is non-nil, instead prompt for connection parameters."
511 (user-name (or user-name rcirc-default-user-name)) 527 (user-name (or user-name rcirc-default-user-name))
512 (full-name (or full-name rcirc-default-full-name)) 528 (full-name (or full-name rcirc-default-full-name))
513 (startup-channels startup-channels) 529 (startup-channels startup-channels)
514 (process (make-network-process :name server :host server :service port-number))) 530 (process (open-network-stream
531 server nil server port-number
532 :type (or encryption 'plain))))
515 ;; set up process 533 ;; set up process
516 (set-process-coding-system process 'raw-text 'raw-text) 534 (set-process-coding-system process 'raw-text 'raw-text)
517 (switch-to-buffer (rcirc-generate-new-buffer-name process nil)) 535 (switch-to-buffer (rcirc-generate-new-buffer-name process nil))
@@ -519,32 +537,23 @@ If ARG is non-nil, instead prompt for connection parameters."
519 (rcirc-mode process nil) 537 (rcirc-mode process nil)
520 (set-process-sentinel process 'rcirc-sentinel) 538 (set-process-sentinel process 'rcirc-sentinel)
521 (set-process-filter process 'rcirc-filter) 539 (set-process-filter process 'rcirc-filter)
522 (make-local-variable 'rcirc-process) 540
523 (setq rcirc-process process) 541 (set (make-local-variable 'rcirc-process) process)
524 (make-local-variable 'rcirc-server) 542 (set (make-local-variable 'rcirc-server) server)
525 (setq rcirc-server server) 543 (set (make-local-variable 'rcirc-server-name) server) ; Update when we get 001 response.
526 (make-local-variable 'rcirc-server-name) 544 (set (make-local-variable 'rcirc-buffer-alist) nil)
527 (setq rcirc-server-name server) ; update when we get 001 response 545 (set (make-local-variable 'rcirc-nick-table)
528 (make-local-variable 'rcirc-buffer-alist) 546 (make-hash-table :test 'equal))
529 (setq rcirc-buffer-alist nil) 547 (set (make-local-variable 'rcirc-nick) nick)
530 (make-local-variable 'rcirc-nick-table) 548 (set (make-local-variable 'rcirc-process-output) nil)
531 (setq rcirc-nick-table (make-hash-table :test 'equal)) 549 (set (make-local-variable 'rcirc-startup-channels) startup-channels)
532 (make-local-variable 'rcirc-nick) 550 (set (make-local-variable 'rcirc-last-server-message-time)
533 (setq rcirc-nick nick) 551 (current-time))
534 (make-local-variable 'rcirc-process-output) 552
535 (setq rcirc-process-output nil) 553 (set (make-local-variable 'rcirc-timeout-timer) nil)
536 (make-local-variable 'rcirc-startup-channels) 554 (set (make-local-variable 'rcirc-user-disconnect) nil)
537 (setq rcirc-startup-channels startup-channels) 555 (set (make-local-variable 'rcirc-user-authenticated) nil)
538 (make-local-variable 'rcirc-last-server-message-time) 556 (set (make-local-variable 'rcirc-connecting) t)
539 (setq rcirc-last-server-message-time (current-time))
540 (make-local-variable 'rcirc-timeout-timer)
541 (setq rcirc-timeout-timer nil)
542 (make-local-variable 'rcirc-user-disconnect)
543 (setq rcirc-user-disconnect nil)
544 (make-local-variable 'rcirc-user-authenticated)
545 (setq rcirc-user-authenticated nil)
546 (make-local-variable 'rcirc-connecting)
547 (setq rcirc-connecting t)
548 557
549 (add-hook 'auto-save-hook 'rcirc-log-write) 558 (add-hook 'auto-save-hook 'rcirc-log-write)
550 559
@@ -722,11 +731,14 @@ Function is called with PROCESS, COMMAND, SENDER, ARGS and LINE.")
722 (mapconcat 'identity (cdr args) " ") 731 (mapconcat 'identity (cdr args) " ")
723 (not (member response rcirc-responses-no-activity)))) 732 (not (member response rcirc-responses-no-activity))))
724 733
734(defun rcirc--connection-open-p (process)
735 (memq (process-status process) '(run open)))
736
725(defun rcirc-send-string (process string) 737(defun rcirc-send-string (process string)
726 "Send PROCESS a STRING plus a newline." 738 "Send PROCESS a STRING plus a newline."
727 (let ((string (concat (encode-coding-string string rcirc-encode-coding-system) 739 (let ((string (concat (encode-coding-string string rcirc-encode-coding-system)
728 "\n"))) 740 "\n")))
729 (unless (eq (process-status process) 'open) 741 (unless (rcirc--connection-open-p process)
730 (error "Network connection to %s is not open" 742 (error "Network connection to %s is not open"
731 (process-name process))) 743 (process-name process)))
732 (rcirc-debug process string) 744 (rcirc-debug process string)
@@ -878,12 +890,12 @@ IRC command completion is performed only if '/' is the first input char."
878(defun set-rcirc-decode-coding-system (coding-system) 890(defun set-rcirc-decode-coding-system (coding-system)
879 "Set the decode coding system used in this channel." 891 "Set the decode coding system used in this channel."
880 (interactive "zCoding system for incoming messages: ") 892 (interactive "zCoding system for incoming messages: ")
881 (setq rcirc-decode-coding-system coding-system)) 893 (set (make-local-variable 'rcirc-decode-coding-system) coding-system))
882 894
883(defun set-rcirc-encode-coding-system (coding-system) 895(defun set-rcirc-encode-coding-system (coding-system)
884 "Set the encode coding system used in this channel." 896 "Set the encode coding system used in this channel."
885 (interactive "zCoding system for outgoing messages: ") 897 (interactive "zCoding system for outgoing messages: ")
886 (setq rcirc-encode-coding-system coding-system)) 898 (set (make-local-variable 'rcirc-encode-coding-system) coding-system))
887 899
888(defvar rcirc-mode-map 900(defvar rcirc-mode-map
889 (let ((map (make-sparse-keymap))) 901 (let ((map (make-sparse-keymap)))
@@ -948,27 +960,18 @@ This number is independent of the number of lines in the buffer.")
948 (setq major-mode 'rcirc-mode) 960 (setq major-mode 'rcirc-mode)
949 (setq mode-line-process nil) 961 (setq mode-line-process nil)
950 962
951 (make-local-variable 'rcirc-input-ring) 963 (set (make-local-variable 'rcirc-input-ring)
952 (setq rcirc-input-ring (make-ring rcirc-input-ring-size)) 964 (make-ring rcirc-input-ring-size))
953 (make-local-variable 'rcirc-server-buffer) 965 (set (make-local-variable 'rcirc-server-buffer) (process-buffer process))
954 (setq rcirc-server-buffer (process-buffer process)) 966 (set (make-local-variable 'rcirc-target) target)
955 (make-local-variable 'rcirc-target) 967 (set (make-local-variable 'rcirc-topic) nil)
956 (setq rcirc-target target) 968 (set (make-local-variable 'rcirc-last-post-time) (current-time))
957 (make-local-variable 'rcirc-topic) 969 (set (make-local-variable 'fill-paragraph-function) 'rcirc-fill-paragraph)
958 (setq rcirc-topic nil) 970 (set (make-local-variable 'rcirc-recent-quit-alist) nil)
959 (make-local-variable 'rcirc-last-post-time) 971 (set (make-local-variable 'rcirc-current-line) 0)
960 (setq rcirc-last-post-time (current-time)) 972
961 (make-local-variable 'fill-paragraph-function) 973 (set (make-local-variable 'rcirc-short-buffer-name) nil)
962 (setq fill-paragraph-function 'rcirc-fill-paragraph) 974 (set (make-local-variable 'rcirc-urls) t)
963 (make-local-variable 'rcirc-recent-quit-alist)
964 (setq rcirc-recent-quit-alist nil)
965 (make-local-variable 'rcirc-current-line)
966 (setq rcirc-current-line 0)
967
968 (make-local-variable 'rcirc-short-buffer-name)
969 (setq rcirc-short-buffer-name nil)
970 (make-local-variable 'rcirc-urls)
971 (setq use-hard-newlines t)
972 975
973 ;; setup for omitting responses 976 ;; setup for omitting responses
974 (setq buffer-invisibility-spec '()) 977 (setq buffer-invisibility-spec '())
@@ -978,28 +981,23 @@ This number is independent of the number of lines in the buffer.")
978 ?. 'font-lock-keyword-face))) 981 ?. 'font-lock-keyword-face)))
979 (make-vector 3 glyph))) 982 (make-vector 3 glyph)))
980 983
981 (make-local-variable 'rcirc-decode-coding-system)
982 (make-local-variable 'rcirc-encode-coding-system)
983 (dolist (i rcirc-coding-system-alist) 984 (dolist (i rcirc-coding-system-alist)
984 (let ((chan (if (consp (car i)) (caar i) (car i))) 985 (let ((chan (if (consp (car i)) (caar i) (car i)))
985 (serv (if (consp (car i)) (cdar i) ""))) 986 (serv (if (consp (car i)) (cdar i) "")))
986 (when (and (string-match chan (or target "")) 987 (when (and (string-match chan (or target ""))
987 (string-match serv (rcirc-server-name process))) 988 (string-match serv (rcirc-server-name process)))
988 (setq rcirc-decode-coding-system (if (consp (cdr i)) (cadr i) (cdr i)) 989 (set (make-local-variable 'rcirc-decode-coding-system)
989 rcirc-encode-coding-system (if (consp (cdr i)) (cddr i) (cdr i)))))) 990 (if (consp (cdr i)) (cadr i) (cdr i)))
991 (set (make-local-variable 'rcirc-encode-coding-system)
992 (if (consp (cdr i)) (cddr i) (cdr i))))))
990 993
991 ;; setup the prompt and markers 994 ;; setup the prompt and markers
992 (make-local-variable 'rcirc-prompt-start-marker) 995 (set (make-local-variable 'rcirc-prompt-start-marker) (point-max-marker))
993 (setq rcirc-prompt-start-marker (make-marker)) 996 (set (make-local-variable 'rcirc-prompt-end-marker) (point-max-marker))
994 (set-marker rcirc-prompt-start-marker (point-max))
995 (make-local-variable 'rcirc-prompt-end-marker)
996 (setq rcirc-prompt-end-marker (make-marker))
997 (set-marker rcirc-prompt-end-marker (point-max))
998 (rcirc-update-prompt) 997 (rcirc-update-prompt)
999 (goto-char rcirc-prompt-end-marker) 998 (goto-char rcirc-prompt-end-marker)
1000 (make-local-variable 'overlay-arrow-position) 999
1001 (setq overlay-arrow-position (make-marker)) 1000 (set (make-local-variable 'overlay-arrow-position) (make-marker))
1002 (set-marker overlay-arrow-position nil)
1003 1001
1004 ;; if the user changes the major mode or kills the buffer, there is 1002 ;; if the user changes the major mode or kills the buffer, there is
1005 ;; cleanup work to do 1003 ;; cleanup work to do
@@ -1095,7 +1093,7 @@ Logfiles are kept in `rcirc-log-directory'."
1095 (let ((buffer (current-buffer))) 1093 (let ((buffer (current-buffer)))
1096 (rcirc-clear-activity buffer) 1094 (rcirc-clear-activity buffer)
1097 (when (and (rcirc-buffer-process) 1095 (when (and (rcirc-buffer-process)
1098 (eq (process-status (rcirc-buffer-process)) 'open)) 1096 (rcirc--connection-open-p (rcirc-buffer-process)))
1099 (with-rcirc-server-buffer 1097 (with-rcirc-server-buffer
1100 (setq rcirc-buffer-alist 1098 (setq rcirc-buffer-alist
1101 (rassq-delete-all buffer rcirc-buffer-alist))) 1099 (rassq-delete-all buffer rcirc-buffer-alist)))
@@ -1222,6 +1220,8 @@ Create the buffer if it doesn't exist."
1222 (concat command " :" args))))))) 1220 (concat command " :" args)))))))
1223 1221
1224(defvar rcirc-parent-buffer nil) 1222(defvar rcirc-parent-buffer nil)
1223(make-variable-buffer-local 'rcirc-parent-buffer)
1224(put 'rcirc-parent-buffer 'permanent-local t)
1225(defvar rcirc-window-configuration nil) 1225(defvar rcirc-window-configuration nil)
1226(defun rcirc-edit-multiline () 1226(defun rcirc-edit-multiline ()
1227 "Move current edit to a dedicated buffer." 1227 "Move current edit to a dedicated buffer."
@@ -1257,8 +1257,6 @@ Create the buffer if it doesn't exist."
1257 :keymap rcirc-multiline-minor-mode-map 1257 :keymap rcirc-multiline-minor-mode-map
1258 :global nil 1258 :global nil
1259 :group 'rcirc 1259 :group 'rcirc
1260 (make-local-variable 'rcirc-parent-buffer)
1261 (put 'rcirc-parent-buffer 'permanent-local t)
1262 (setq fill-column rcirc-max-message-length)) 1260 (setq fill-column rcirc-max-message-length))
1263 1261
1264(defun rcirc-multiline-minor-submit () 1262(defun rcirc-multiline-minor-submit ()
@@ -1842,6 +1840,8 @@ Uninteresting lines are those whose responses are listed in
1842(defun rcirc-switch-to-server-buffer () 1840(defun rcirc-switch-to-server-buffer ()
1843 "Switch to the server buffer associated with current channel buffer." 1841 "Switch to the server buffer associated with current channel buffer."
1844 (interactive) 1842 (interactive)
1843 (unless (buffer-live-p rcirc-server-buffer)
1844 (error "No such buffer"))
1845 (switch-to-buffer rcirc-server-buffer)) 1845 (switch-to-buffer rcirc-server-buffer))
1846 1846
1847(defun rcirc-jump-to-first-unread-line () 1847(defun rcirc-jump-to-first-unread-line ()