Show
Ignore:
Timestamp:
04/07/07 15:49:28 (2 years ago)
Author:
miyoshi
Message:

Sync up with Emacs CVS HEAD.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lisp/erc/erc.el

    r4190 r4200  
    6767;;; Code: 
    6868 
    69 (defconst erc-version-string "Version 5.2 stable pre-release
     69(defconst erc-version-string "Version 5.2
    7070  "ERC version.  This is used by function `erc-version'.") 
    7171 
     
    325325(defcustom erc-connect-pre-hook '(erc-initialize-log-marker) 
    326326  "Hook called just before `erc' calls `erc-connect'. 
    327 Functions are run in the buffer-to-be." 
     327Functions are passed a buffer as the first argument." 
    328328  :group 'erc-hooks 
    329329  :type 'hook) 
     
    393393  "Finds the USER corresponding to NICK in the current server's 
    394394`erc-server-users' hash table." 
    395   (with-current-buffer (process-buffer erc-server-process) 
     395  (erc-with-server-buffer 
    396396    (gethash (erc-downcase nick) erc-server-users))) 
    397397 
     
    400400 
    401401Adds USER with nickname NICK to the `erc-server-users' hash table." 
    402   (with-current-buffer (process-buffer erc-server-process) 
     402  (erc-with-server-buffer 
    403403    (puthash (erc-downcase nick) user erc-server-users))) 
    404404 
     
    411411 
    412412See also: `erc-remove-user'." 
    413   (with-current-buffer (process-buffer erc-server-process) 
     413  (erc-with-server-buffer 
    414414    (remhash (erc-downcase nick) erc-server-users))) 
    415415 
     
    422422  (let ((nick (erc-server-user-nickname user))) 
    423423    (setf (erc-server-user-nickname user) new-nick) 
    424     (with-current-buffer (process-buffer erc-server-process) 
     424    (erc-with-server-buffer 
    425425      (remhash (erc-downcase nick) erc-server-users) 
    426426      (puthash (erc-downcase new-nick) user erc-server-users)) 
     
    515515(defun erc-get-server-nickname-list () 
    516516  "Returns a list of known nicknames on the current server." 
    517     (if (erc-server-process-alive) 
    518         (with-current-buffer (erc-server-buffer) 
    519           (let (nicks) 
    520             (when (hash-table-p erc-server-users) 
    521               (maphash (lambda (n user) 
    522                          (setq nicks 
    523                                (cons (erc-server-user-nickname user) 
    524                                      nicks))) 
    525                        erc-server-users) 
    526               nicks))))) 
     517  (erc-with-server-buffer 
     518    (let (nicks) 
     519      (when (hash-table-p erc-server-users) 
     520        (maphash (lambda (n user) 
     521                   (setq nicks 
     522                         (cons (erc-server-user-nickname user) 
     523                               nicks))) 
     524                 erc-server-users) 
     525        nicks)))) 
    527526 
    528527(defun erc-get-channel-nickname-list () 
     
    539538(defun erc-get-server-nickname-alist () 
    540539  "Returns an alist of known nicknames on the current server." 
    541     (if (erc-server-process-alive) 
    542         (with-current-buffer (erc-server-buffer) 
    543           (let (nicks) 
    544             (when (hash-table-p erc-server-users) 
    545               (maphash (lambda (n user) 
    546                          (setq nicks 
    547                                (cons (cons (erc-server-user-nickname user) nil) 
    548                                      nicks))) 
    549                        erc-server-users) 
    550               nicks))))) 
     540  (erc-with-server-buffer 
     541    (let (nicks) 
     542      (when (hash-table-p erc-server-users) 
     543        (maphash (lambda (n user) 
     544                   (setq nicks 
     545                         (cons (cons (erc-server-user-nickname user) nil) 
     546                               nicks))) 
     547                 erc-server-users) 
     548        nicks)))) 
    551549 
    552550(defun erc-get-channel-nickname-alist () 
     
    12941292    (error 
    12951293     "You should only run `erc-once-with-server-event' in a server buffer")) 
    1296   (let ((fun (erc-gensym)) 
     1294  (let ((fun (make-symbol "fun")) 
    12971295        (hook (erc-get-hook event))) 
    12981296     (put fun 'erc-original-buffer (current-buffer)) 
     
    13171315When FORMS execute, the current buffer is the server buffer associated with the 
    13181316connection over which the data was received that triggered EVENT." 
    1319   (let ((fun (erc-gensym)) 
     1317  (let ((fun (make-symbol "fun")) 
    13201318        (hook (erc-get-hook event))) 
    13211319     (fset fun `(lambda (proc parsed) 
     
    13711369  "Return non-nil if NICK is online." 
    13721370  (interactive "sNick: ") 
    1373   (with-current-buffer (erc-server-buffer) 
     1371  (erc-with-server-buffer 
    13741372    (let ((erc-online-p 'unknown)) 
    13751373      (erc-once-with-server-event 
     
    14211419  "Return the value of `erc-active-buffer' for the current server. 
    14221420Defaults to the server buffer." 
    1423   (with-current-buffer (erc-server-buffer) 
     1421  (erc-with-server-buffer 
    14241422    (if (buffer-live-p erc-active-buffer) 
    14251423        erc-active-buffer 
     
    16041602 
    16051603\(fn (TARGET [PROCESS]) BODY...)" 
    1606   (let ((buf (erc-gensym)) 
    1607         (proc (erc-gensym)) 
    1608         (target (erc-gensym)) 
    1609         (process (erc-gensym))) 
     1604  (let ((buf (make-symbol "buf")) 
     1605        (proc (make-symbol "proc")) 
     1606        (target (make-symbol "target")) 
     1607        (process (make-symbol "process"))) 
    16101608    `(let* ((,target ,(car spec)) 
    16111609            (,process ,(cadr spec)) 
     
    16171615                      (if (and ,target ,proc) 
    16181616                          (erc-get-buffer ,target ,proc)))))) 
    1619        (when ,buf 
     1617       (when (buffer-live-p ,buf) 
    16201618         (with-current-buffer ,buf 
    16211619           ,@body))))) 
     
    16721670nil." 
    16731671  ;; Make the evaluation have the correct order 
    1674   (let ((pre (erc-gensym)) 
    1675         (pro (erc-gensym))) 
     1672  (let ((pre (make-symbol "pre")) 
     1673        (pro (make-symbol "pro"))) 
    16761674    `(let ((,pro ,process) 
    16771675           (,pre ,pred)) 
     
    17561754 
    17571755(defvar erc-away nil 
    1758   "Non-nil indicates that we are away.") 
     1756  "Non-nil indicates that we are away. 
     1757 
     1758Use `erc-away-time' to access this if you might be in a channel 
     1759buffer rather than a server buffer.") 
    17591760(make-variable-buffer-local 'erc-away) 
    17601761 
     
    18141815  '(set 
    18151816    :greedy t 
    1816     (const :tag "Set away status automatically" autoaway) 
    1817     (const :tag "Join channels automatically" autojoin) 
    1818     (const :tag "Buttonize URLs, nicknames, and other text" button) 
    1819     (const 
    1820      :tag 
    1821      "Mark unidentified users on freenode and other servers supporting CAPAB" 
    1822      capab-identify) 
    1823     (const :tag "Wrap long lines" fill) 
    1824     (const :tag "Launch an identd server on port 8113" identd) 
    1825     (const :tag "Highlight or remove IRC control characters" 
     1817    (const :tag "autoaway: Set away status automatically" autoaway) 
     1818    (const :tag "autojoin: Join channels automatically" autojoin) 
     1819    (const :tag "button: Buttonize URLs, nicknames, and other text" button) 
     1820    (const :tag "capab: Mark unidentified users on servers supporting CAPAB" 
     1821           capab-identify) 
     1822    (const :tag "completion: Complete nicknames and commands (programmable)" 
     1823           completion) 
     1824    (const :tag "hecomplete: Complete nicknames and commands (old)" hecomplete) 
     1825    (const :tag "fill: Wrap long lines" fill) 
     1826    (const :tag "identd: Launch an identd server on port 8113" identd) 
     1827    (const :tag "irccontrols: Highlight or remove IRC control characters" 
    18261828           irccontrols) 
    1827     (const :tag "Save buffers in logs" log) 
    1828     (const :tag "Highlight pals, fools, and other keywords" match) 
    1829     (const :tag "Display a menu in ERC buffers" menu) 
    1830     (const :tag "Detect netsplits" netsplit) 
    1831     (const :tag "Don't display non-IRC commands after evaluation" 
     1829    (const :tag "log: Save buffers in logs" log) 
     1830    (const :tag "match: Highlight pals, fools, and other keywords" match) 
     1831    (const :tag "menu: Display a menu in ERC buffers" menu) 
     1832    (const :tag "netsplit: Detect netsplits" netsplit) 
     1833    (const :tag "noncommands: Don't display non-IRC commands after evaluation" 
    18321834           noncommands) 
    1833     (const :tag "Notify when the online status of certain users changes" 
     1835    (const :tag 
     1836           "notify: Notify when the online status of certain users changes" 
    18341837           notify) 
    1835     (const :tag "Complete nicknames and commands (programmable)" 
    1836            completion) 
    1837     (const :tag "Complete nicknames and commands (old)" hecomplete) 
    1838     (const :tag "Process CTCP PAGE requests from IRC" page) 
    1839     (const :tag "Make displayed lines read-only" readonly) 
    1840     (const :tag "Replace text in messages" replace) 
    1841     (const :tag "Enable an input history" ring) 
    1842     (const :tag "Scroll to the bottom of the buffer" scrolltobottom) 
    1843     (const :tag "Identify to Nickserv (IRC Services) automatically" 
     1838    (const :tag "page: Process CTCP PAGE requests from IRC" page) 
     1839    (const :tag "readonly: Make displayed lines read-only" readonly) 
     1840    (const :tag "replace: Replace text in messages" replace) 
     1841    (const :tag "ring: Enable an input history" ring) 
     1842    (const :tag "scrolltobottom: Scroll to the bottom of the buffer" 
     1843           scrolltobottom) 
     1844    (const :tag "services: Identify to Nickserv (IRC Services) automatically" 
    18441845           services) 
    1845     (const :tag "Convert smileys to pretty icons" smiley) 
    1846     (const :tag "Play sounds when you receive CTCP SOUND requests" 
     1846    (const :tag "smiley: Convert smileys to pretty icons" smiley) 
     1847    (const :tag "sound: Play sounds when you receive CTCP SOUND requests" 
    18471848           sound) 
    1848     (const :tag "Add timestamps to messages" stamp) 
    1849     (const :tag "Check spelling" spelling) 
    1850     (const :tag "Track channel activity in the mode-line" track) 
    1851     (const :tag "Truncate buffers to a certain size" truncate) 
    1852     (const :tag "Translate morse code in messages" unmorse) 
     1849    (const :tag "stamp: Add timestamps to messages" stamp) 
     1850    (const :tag "spelling: Check spelling" spelling) 
     1851    (const :tag "track: Track channel activity in the mode-line" track) 
     1852    (const :tag "truncate: Truncate buffers to a certain size" truncate) 
     1853    (const :tag "unmorse: Translate morse code in messages" unmorse) 
    18531854    (repeat :tag "Others" :inline t symbol)) 
    18541855  :group 'erc) 
     
    19031904(defun erc-open (&optional server port nick full-name 
    19041905                           connect passwd tgt-list channel process) 
    1905   "ERC is a powerful, modular, and extensible IRC client. 
    1906  
    1907 Connect to SERVER on PORT as NICK with FULL-NAME. 
     1906  "Connect to SERVER on PORT as NICK with FULL-NAME. 
    19081907 
    19091908If CONNECT is non-nil, connect to the server.  Otherwise assume 
     
    19701969    ;; last invitation channel 
    19711970    (setq erc-invitation nil) 
    1972     ;; away flag 
    1973     ;; Should only be used in session-buffers 
    1974     (setq erc-away (let ((serverbuf (erc-server-buffer))) 
    1975                      (and serverbuf (with-current-buffer serverbuf erc-away)))) 
    19761971    ;; Server channel list 
    19771972    (setq erc-channel-list ()) 
     
    19881983          (when erc-log-p 
    19891984            (get-buffer-create (concat "*ERC-DEBUG: " server "*")))) 
    1990     (erc-determine-parameters server port nick full-name) 
    1991  
    1992     ;; Saving log file on exit 
    1993     (run-hooks 'erc-connect-pre-hook) 
    1994  
    1995     (when connect 
    1996       (erc-server-connect erc-session-server erc-session-port)) 
    1997     (erc-update-mode-line) 
    1998     (set-marker erc-insert-marker (point)) 
     1985    ;; set up prompt 
    19991986    (unless continued-session 
    20001987      (goto-char (point-max)) 
    20011988      (insert "\n")) 
    2002     (set-marker (process-mark erc-server-process) (point)) 
    20031989    (if continued-session 
    20041990        (goto-char old-point) 
     
    20061992      (erc-display-prompt) 
    20071993      (goto-char (point-max))) 
     1994 
     1995    (erc-determine-parameters server port nick full-name) 
     1996 
     1997    ;; Saving log file on exit 
     1998    (run-hook-with-args 'erc-connect-pre-hook buffer) 
     1999 
     2000    (when connect 
     2001      (erc-server-connect erc-session-server erc-session-port buffer)) 
     2002    (erc-update-mode-line) 
    20082003 
    20092004    ;; Now display the buffer in a window as per user wishes. 
     
    20172012    buffer)) 
    20182013 
    2019 (defun erc-initialize-log-marker () 
    2020   "Initialize the `erc-last-saved-position' marker to a sensible position." 
     2014(defun erc-initialize-log-marker (buffer) 
     2015  "Initialize the `erc-last-saved-position' marker to a sensible position. 
     2016BUFFER is the current buffer." 
     2017  (with-current-buffer buffer 
    20212018    (setq erc-last-saved-position (make-marker)) 
    20222019    (move-marker erc-last-saved-position 
    2023                  (1- (marker-position erc-insert-marker)))) 
     2020                 (1- (marker-position erc-insert-marker))))) 
    20242021 
    20252022;; interactive startup 
     
    21212118                  password 
    21222119                  (full-name (erc-compute-full-name))) 
    2123   "Select connection parameters and run ERC. 
    2124 Non-interactively, it takes keyword arguments 
     2120  "ERC is a powerful, modular, and extensible IRC client. 
     2121This function is the main entry point for ERC. 
     2122 
     2123It permits you to select connection parameters, and then starts ERC. 
     2124 
     2125Non-interactively, it takes the keyword arguments 
    21252126   (server (erc-compute-server)) 
    21262127   (port   (erc-compute-port)) 
     
    21332134   (erc :server \"irc.freenode.net\" :full-name \"Harry S Truman\") 
    21342135 
    2135 server and full-name will be set to those values, whereas 
     2136then the server and full-name will be set to those values, whereas 
    21362137`erc-compute-port', `erc-compute-nick' and `erc-compute-full-name' will 
    21372138be invoked for the values of the other parameters." 
     
    21392140  (erc-open server port nick full-name t password)) 
    21402141 
     2142;;;###autoload 
    21412143(defalias 'erc-select 'erc) 
    21422144 
     
    24292431This function relies on the erc-parsed text-property being 
    24302432present." 
    2431   (let ((prop-val (get-text-property position 'erc-parsed))) 
     2433  (let ((prop-val (erc-get-parsed-vector position))) 
    24322434    (and prop-val (member (erc-response.command prop-val) list)))) 
    24332435 
     
    25872589         (erc-make-notice (format "Now ignoring %s" user)) 
    25882590         'active) 
    2589         (with-current-buffer (erc-server-buffer) 
    2590           (add-to-list 'erc-ignore-list user))) 
    2591     (if (null (with-current-buffer (erc-server-buffer) erc-ignore-list)) 
     2591        (erc-with-server-buffer (add-to-list 'erc-ignore-list user))) 
     2592    (if (null (erc-with-server-buffer erc-ignore-list)) 
    25922593        (erc-display-line (erc-make-notice "Ignore list is empty") 'active) 
    25932594      (erc-display-line (erc-make-notice "Ignore list:") 'active) 
     
    25952596                (erc-display-line (erc-make-notice item) 
    25962597                                  'active)) 
    2597             (with-current-buffer (erc-server-buffer) erc-ignore-list)))) 
     2598            (erc-with-server-buffer erc-ignore-list)))) 
    25982599  t) 
    25992600 
    26002601(defun erc-cmd-UNIGNORE (user) 
    26012602  "Remove the user specified in USER from the ignore list." 
    2602   (let ((ignored-nick (car (with-current-buffer (erc-server-buffer) 
     2603  (let ((ignored-nick (car (erc-with-server-buffer 
    26032604                             (erc-member-ignore-case (regexp-quote user) 
    26042605                                                     erc-ignore-list))))) 
     
    26152616       (erc-make-notice (format "No longer ignoring %s" user)) 
    26162617       'active) 
    2617       (with-current-buffer (erc-server-buffer) 
     2618      (erc-with-server-buffer 
    26182619        (setq erc-ignore-list (delete ignored-nick erc-ignore-list))))) 
    26192620  t) 
     
    26742675  ;; on all server buffers. 
    26752676  (erc-with-all-buffers-of-server nil 
    2676    #'erc-server-buffer-p 
    2677    (erc-cmd-AWAY line))) 
     2677    #'erc-open-server-buffer-p 
     2678    (erc-cmd-AWAY line))) 
    26782679(put 'erc-cmd-GAWAY 'do-not-parse-args t) 
    26792680 
     
    28672868(defun erc-cmd-IDLE (nick) 
    28682869  "Show the length of time NICK has been idle." 
    2869   (let ((serverbuf (erc-server-buffer)) 
    2870         (origbuf (current-buffer)) 
     2870  (let ((origbuf (current-buffer)) 
    28712871        symlist) 
    2872     (with-current-buffer serverbuf 
     2872    (erc-with-server-buffer 
    28732873      (add-to-list 'symlist 
    28742874                   (cons (erc-once-with-server-event 
     
    30283028  "Change current nickname to NICK." 
    30293029  (erc-log (format "cmd: NICK: %s (erc-bad-nick: %S)" nick erc-bad-nick)) 
    3030   (let ((nicklen (cdr (assoc "NICKLEN" (with-current-buffer (erc-server-buffer) 
    3031                                     erc-server-parameters))))) 
     3030  (let ((nicklen (cdr (assoc "NICKLEN" (erc-with-server-buffer 
     3031                                        erc-server-parameters))))) 
    30323032    (and nicklen (> (length nick) (string-to-number nicklen)) 
    30333033         (erc-display-message 
     
    31683168    (let* ((s (match-string 1 reason)) 
    31693169           (buffer (erc-server-buffer)) 
    3170            (reason (funcall erc-quit-reason (if (equal s "") nil s)))) 
     3170           (reason (funcall erc-quit-reason (if (equal s "") nil s))) 
     3171           server-proc) 
    31713172      (with-current-buffer (if (and buffer 
    31723173                                    (bufferp buffer)) 
     
    31763177        (setq erc-server-quitting t) 
    31773178        (erc-set-active-buffer (erc-server-buffer)) 
     3179        (setq server-proc erc-server-process) 
    31783180        (erc-server-send (format "QUIT :%s" reason))) 
    3179       (run-hook-with-args 'erc-quit-hook erc-server-process
     3181      (run-hook-with-args 'erc-quit-hook server-proc
    31803182      (when erc-kill-queries-on-quit 
    3181         (erc-kill-query-buffers erc-server-process))) 
     3183        (erc-kill-query-buffers server-proc)) 
     3184      ;; if the process has not been killed within 4 seconds, kill it 
     3185      (run-at-time 4 nil 
     3186                   (lambda (proc) 
     3187                     (when (and (processp proc) 
     3188                                (memq (process-status proc) '(run open))) 
     3189                       (delete-process proc))) 
     3190                   server-proc)) 
    31823191    t) 
    31833192   (t nil))) 
     
    31903199(defun erc-cmd-GQUIT (reason) 
    31913200  "Disconnect from all servers at once with the same quit REASON." 
    3192   (erc-with-all-buffers-of-server nil #'(lambda () 
    3193                                           (and (erc-server-buffer-p) 
    3194                                                (erc-server-process-alive))) 
     3201  (erc-with-all-buffers-of-server nil #'erc-open-server-buffer-p 
    31953202                                  (erc-cmd-QUIT reason))) 
    31963203 
     
    32003207(defun erc-cmd-RECONNECT () 
    32013208  "Try to reconnect to the current IRC server." 
    3202   (setq erc-server-reconnect-count 0) 
    3203   (erc-server-reconnect) 
     3209  (let ((buffer (or (erc-server-buffer) (current-buffer))) 
     3210        (process nil)) 
     3211    (with-current-buffer (if (bufferp buffer) buffer (current-buffer)) 
     3212      (setq erc-server-quitting nil) 
     3213      (setq erc-server-reconnecting t) 
     3214      (setq erc-server-reconnect-count 0) 
     3215      (setq process (get-buffer-process (erc-server-buffer))) 
     3216      (if process 
     3217          (delete-process process) 
     3218        (erc-server-reconnect)) 
     3219      (setq erc-server-reconnecting nil))) 
    32043220  t) 
    32053221 
     
    33743390              erc-channel-banlist nil) 
    33753391        ;; fetch the ban list then callback 
    3376         (with-current-buffer (erc-server-buffer) 
     3392        (erc-with-server-buffer 
    33773393          (erc-once-with-server-event 
    33783394           368 
     
    34443460        (setq erc-server-367-functions 'erc-banlist-store) 
    34453461      ;; fetch the ban list then callback 
    3446       (with-current-buffer (erc-server-buffer) 
     3462      (erc-with-server-buffer 
    34473463        (erc-once-with-server-event 
    34483464         368 
     
    37383754    buf)) 
    37393755 
    3740 (defcustom erc-auto-query nil 
     3756(defcustom erc-auto-query 'bury 
    37413757  "If non-nil, create a query buffer each time you receive a private message. 
    37423758 
     
    38123828    (let ((newnick (nth 1 erc-default-nicks)) 
    38133829          (nicklen (cdr (assoc "NICKLEN" 
    3814                                (with-current-buffer (erc-server-buffer) 
     3830                               (erc-with-server-buffer 
    38153831                                 erc-server-parameters))))) 
    38163832      (setq erc-bad-nick t) 
     
    41024118 
    41034119Set user modes and run `erc-after-connect' hook." 
    4104   (unless erc-server-connected ; only once per session 
    4105     (let ((server (or erc-server-announced-name (erc-response.sender parsed))) 
    4106           (nick (car (erc-response.command-args parsed )))) 
    4107       (setq erc-server-connected t) 
    4108       (erc-update-mode-line) 
    4109       (erc-set-initial-user-mode nick) 
    4110       (erc-server-setup-periodical-server-ping) 
    4111       (run-hook-with-args 'erc-after-connect server nick)))) 
    4112  
    4113 (defun erc-set-initial-user-mode (nick) 
    4114   "If `erc-user-mode' is non-nil for NICK, set the user modes." 
    4115   (when erc-user-mode 
    4116     (let ((mode (if (functionp erc-user-mode) 
    4117                     (funcall erc-user-mode) 
    4118                   erc-user-mode))) 
    4119       (when (stringp mode) 
    4120         (erc-log (format "changing mode for %s to %s" nick mode)) 
    4121         (erc-server-send (format "MODE %s %s" nick mode)))))) 
     4120  (with-current-buffer (process-buffer proc) 
     4121    (unless erc-server-connected ; only once per session 
     4122      (let ((server (or erc-server-announced-name 
     4123                        (erc-response.sender parsed))) 
     4124            (nick (car (erc-response.command-args parsed))) 
     4125            (buffer (process-buffer proc))) 
     4126        (setq erc-server-connected t) 
     4127        (erc-update-mode-line) 
     4128        (erc-set-initial-user-mode nick buffer) 
     4129        (erc-server-setup-periodical-ping buffer) 
     4130        (run-hook-with-args 'erc-after-connect server nick))))) 
     4131 
     4132(defun erc-set-initial-user-mode (nick buffer) 
     4133  "If `erc-user-mode' is non-nil for NICK, set the user modes. 
     4134The server buffer is given by BUFFER." 
     4135  (with-current-buffer buffer 
     4136    (when erc-user-mode 
     4137      (let ((mode (if (functionp erc-user-mode) 
     4138                      (funcall erc-user-mode) 
     4139                    erc-user-mode))) 
     4140        (when (stringp mode) 
     4141          (erc-log (format "changing mode for %s to %s" nick mode)) 
     4142          (erc-server-send (format "MODE %s %s" nick mode))))))) 
    41224143 
    41234144(defun erc-display-error-notice (parsed string) 
     
    43464367        (cond 
    43474368         (away-p 
    4348           (erc-with-all-buffers-of-server proc nil 
    4349                                           (setq erc-away (current-time)))) 
     4369          (setq erc-away (current-time))) 
    43504370         (t 
    43514371          (let ((away-time erc-away)) 
    43524372            ;; away must be set to NIL BEFORE sending anything to prevent 
    43534373            ;; an infinite recursion 
    4354             (erc-with-all-buffers-of-server proc nil 
    4355                                             (setq erc-away nil)) 
     4374            (setq erc-away nil) 
    43564375            (save-excursion 
    43574376              (set-buffer (erc-active-buffer)) 
     
    50385057(defun erc-set-current-nick (nick) 
    50395058  "Set the current nickname to NICK." 
    5040   (with-current-buffer (or (erc-server-buffer) 
    5041                            (current-buffer)) 
     5059  (with-current-buffer (if (buffer-live-p (erc-server-buffer)) 
     5060                           (erc-server-buffer) 
     5061                         (current-buffer)) 
    50425062    (setq erc-server-current-nick nick))) 
    50435063 
     
    51205140match, returns that regexp." 
    51215141  (catch 'found 
    5122     (dolist (ignored (with-current-buffer (erc-server-buffer) erc-ignore-list)) 
     5142    (dolist (ignored (erc-with-server-buffer erc-ignore-list)) 
    51235143      (if (string-match ignored spec) 
    51245144          (throw 'found ignored))))) 
     
    56745694        user)))) 
    56755695 
    5676 (defun erc-away-p () 
    5677   "Return t if the current ERC process is set away." 
    5678   (save-excursion 
    5679     (and (erc-server-buffer-live-p) 
    5680          (set-buffer (process-buffer erc-server-process)) 
    5681         erc-away))) 
     5696(defun erc-away-time () 
     5697  "Return non-nil if the current ERC process is set away. 
     5698 
     5699In particular, the time that we were set away is returned. 
     5700See `current-time' for details on the time format." 
     5701  (erc-with-server-buffer erc-away)) 
    56825702 
    56835703;; Mode line handling 
     
    57075727Only used starting in Emacs 21. 
    57085728 
     5729Set this to nil if you do not want the header line to be 
     5730displayed. 
     5731 
    57095732See `erc-mode-line-format' for which characters are can be used." 
    57105733  :group 'erc-mode-line-and-header 
    5711   :type 'string) 
     5734  :set (lambda (sym val) 
     5735         (set sym val) 
     5736         (when (fboundp 'erc-update-mode-line) 
     5737           (erc-update-mode-line nil))) 
     5738  :type '(choice (const :tag "Disabled" nil) 
     5739                 string)) 
    57125740 
    57135741(defcustom erc-header-line-uses-help-echo-p t 
     
    57355763(defcustom erc-common-server-suffixes 
    57365764  '(("openprojects.net$" . "OPN") 
    5737     ("freenode.net$" . "OPN")) 
     5765    ("freenode.net$" . "freenode") 
     5766    ("oftc.net$" . "OFTC")) 
    57385767  "Alist of common server name suffixes. 
    57395768This variable is used in mode-line display to save screen 
     
    57875816  "Return a formatted `erc-mode-line-away-status-format' 
    57885817if `erc-away' is non-nil." 
    5789   (let ((a (when (erc-server-buffer-live-p) 
    5790              (with-current-buffer (process-buffer erc-server-process) 
    5791                erc-away)))) 
     5818  (let ((a (erc-away-time))) 
    57925819    (if a 
    57935820        (format-time-string erc-mode-line-away-status-format a) 
     
    58145841(defun erc-format-lag-time () 
    58155842  "Return the estimated lag time to server, `erc-server-lag'." 
    5816   (let ((lag (when (erc-server-buffer-live-p) 
    5817                (with-current-buffer (process-buffer erc-server-process) 
    5818                  erc-server-lag)))) 
     5843  (let ((lag (erc-with-server-buffer erc-server-lag))) 
    58195844    (cond (lag (format "lag:%.0f" lag)) 
    58205845          (t "")))) 
     
    61386163              nick user host channel 
    61396164              (if (not (string= reason "")) 
    6140                   (format ": %s" reason) 
     6165                  (format ": %s" 
     6166                          (erc-replace-regexp-in-string "%" "%%" reason)) 
    61416167                ""))))) 
    61426168 
     
    62336259  (text-property-not-all (point-min) (point-max) 'erc-parsed nil)) 
    62346260 
     6261(defun erc-restore-text-properties () 
     6262  "Restore the property 'erc-parsed for the region." 
     6263  (let ((parsed-posn (erc-find-parsed-property))) 
     6264    (put-text-property 
     6265     (point-min) (point-max) 
     6266     'erc-parsed (when parsed-posn (erc-get-parsed-vector parsed-posn))))) 
     6267 
    62356268(defun erc-get-parsed-vector (point) 
    62366269  "Return the whole parsed vector on POINT." 
     
    62646297                 (and (string-equal erc-session-server host) 
    62656298                      (= erc-session-port port) 
    6266                       erc-server-connected 
    6267                       (eq (erc-server-buffer) (current-buffer)))))))) 
     6299                      (erc-open-server-buffer-p))))))) 
    62686300    (with-current-buffer (or server-buffer (current-buffer)) 
    62696301      (if (and server-buffer channel)