X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-filter.el;h=1249dd71253285f35a9f6673dad2ee0fd77c558d;hb=HEAD;hp=7f739be9c46af00980ce0f6b19446673c767d26d;hpb=c74f3e5a51cedcb5784a6ea5c6e912a2f43e8e06;p=elisp%2Friece.git diff --git a/lisp/riece-filter.el b/lisp/riece-filter.el index 7f739be..1249dd7 100644 --- a/lisp/riece-filter.el +++ b/lisp/riece-filter.el @@ -19,8 +19,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Code: @@ -41,9 +41,7 @@ (format "riece-handle-default-%03d-message" base-number)))) (if (and function (symbol-function function)) - (riece-funcall-ignore-errors (if (symbolp function) - (symbol-name function) - (format "numeric-reply-%d" number)) + (riece-funcall-ignore-errors (symbol-name function) function prefix number name (riece-decode-coding-string string))))) @@ -58,19 +56,15 @@ (let ((function (intern-soft (concat "riece-handle-" message "-message"))) (hook (intern (concat "riece-" message "-hook"))) (after-hook (intern (concat "riece-after-" message "-hook")))) - (unless (riece-ignore-errors (if (symbolp hook) - (symbol-name hook) - (format "%s-hook" message)) - (run-hook-with-args-until-success hook prefix string)) + (unless (riece-funcall-ignore-errors (symbol-name hook) + #'run-hook-with-args-until-success + hook prefix string) (if function - (riece-funcall-ignore-errors (if (symbolp function) - (symbol-name function) - (format "message-%s" message)) + (riece-funcall-ignore-errors (symbol-name function) function prefix string)) - (riece-ignore-errors (if (symbolp after-hook) - (symbol-name after-hook) - (format "%s-after-hook" message)) - (run-hook-with-args-until-success after-hook prefix string))))) + (riece-funcall-ignore-errors (symbol-name after-hook) + #'run-hook-with-args-until-success + after-hook prefix string)))) (defsubst riece-chomp-string (string) (if (string-match "\r\\'" string) @@ -82,31 +76,39 @@ (set-buffer (process-buffer process)) (goto-char (point-max)) (insert input) - (goto-char riece-read-point) - (beginning-of-line) - (while (looking-at ".*\n") ;the input line is finished - (save-excursion - (if (looking-at - ":\\([^ ]+\\) +\\([0-5][0-9][0-9]\\) +\\([^ ]+\\) +\\(.*\\)") - (riece-handle-numeric-reply - (match-string 1) ;prefix - (string-to-number (match-string 2)) ;number - (match-string 3) ;name - (riece-chomp-string (match-string 4))) ;reply string - (if (looking-at "\\(:\\([^ ]+\\) +\\)?\\([^ ]+\\) +\\(.*\\)") - (riece-handle-message - (match-string 2) ;optional prefix - (match-string 3) ;command - (riece-chomp-string (match-string 4))) ;params & trailing - (if riece-debug - (message "Weird message from server: %s" - (buffer-substring (point) (progn - (end-of-line) - (point)))))))) - (forward-line)) - (unless riece-debug - (delete-region (point-min) (point))) - (setq riece-read-point (point)))) + (unless riece-filter-running + (unwind-protect + (progn + (setq riece-filter-running t) + (goto-char riece-read-point) + (beginning-of-line) + (while (looking-at ".*\n") ;the input line is finished + (save-excursion + (if (looking-at + ":\\([^ ]+\\) +\\([0-5][0-9][0-9]\\) +\\([^ ]+\\)\ + +\\(.*\\)") + (riece-handle-numeric-reply + (match-string 1) ;prefix + (string-to-number (match-string 2)) ;number + (match-string 3) ;name + (riece-chomp-string (match-string 4))) ;reply string + (if (looking-at "\\(:\\([^ ]+\\) +\\)?\\([^ ]+\\) +\\(.*\\)") + (riece-handle-message + (match-string 2) ;optional prefix + (match-string 3) ;command + (riece-chomp-string (match-string 4)) + ;params & trailing + ) + (if riece-debug + (message "Weird message from server: %s" + (buffer-substring (point) (progn + (end-of-line) + (point)))))))) + (forward-line)) + (unless riece-debug + (delete-region (point-min) (point))) + (setq riece-read-point (point))) + (setq riece-filter-running nil))))) (eval-when-compile (autoload 'riece-exit "riece"))