]> git.eshelyaron.com Git - emacs.git/commitdiff
Make ERC use completion-at-point
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 26 Apr 2011 13:50:09 +0000 (10:50 -0300)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 26 Apr 2011 13:50:09 +0000 (10:50 -0300)
* lisp/erc/erc.el (erc-mode-map): Use completion-at-point.
(erc-mode): Tell completion-at-point to obey erc-complete-functions.
(erc-complete-word-at-point): New function.
(erc-complete-word): Make it obsolete.
* lisp/erc/erc-pcomplete.el (erc-pcompletions-at-point): New function.
(pcomplete): Use it.
* lisp/erc/erc-dcc.el (erc-dcc-chat-mode-map): Use completion-at-point.
(erc-dcc-chat-mode): Tell completion-at-point to obey
erc-complete-functions.
* lisp/erc/erc-button.el (erc-button-next-function): New function extracted from
erc-button-next.
(button, erc-button-next): Use it.

lisp/erc/ChangeLog
lisp/erc/erc-button.el
lisp/erc/erc-dcc.el
lisp/erc/erc-pcomplete.el
lisp/erc/erc.el

index 6ff50756f1bb6d52e4e4eeda77d4a35f9029ee1e..b5b36693dd2b35ce34b489875324d0b258e278c9 100644 (file)
@@ -1,3 +1,18 @@
+2011-04-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * erc.el (erc-mode-map): Use completion-at-point.
+       (erc-mode): Tell completion-at-point to obey erc-complete-functions.
+       (erc-complete-word-at-point): New function.
+       (erc-complete-word): Make it obsolete.
+       * erc-pcomplete.el (erc-pcompletions-at-point): New function.
+       (pcomplete): Use it.
+       * erc-dcc.el (erc-dcc-chat-mode-map): Use completion-at-point.
+       (erc-dcc-chat-mode): Tell completion-at-point to obey
+       erc-complete-functions.
+       * erc-button.el (erc-button-next-function): New function extracted from
+       erc-button-next.
+       (button, erc-button-next): Use it.
+
 2011-03-07  Chong Yidong  <cyd@stupidchicken.com>
 
        * Version 23.3 released.
index 0b11c3bee2dfcb3b68961faf09911380e0ed4157..3a897347dea3ab64e56a71b133e9fe5085312e67 100644 (file)
   "This mode buttonizes all messages according to `erc-button-alist'."
   ((add-hook 'erc-insert-modify-hook 'erc-button-add-buttons 'append)
    (add-hook 'erc-send-modify-hook 'erc-button-add-buttons 'append)
-   (add-hook 'erc-complete-functions 'erc-button-next)
+   (add-hook 'erc-complete-functions 'erc-button-next-function)
    (add-hook 'erc-mode-hook 'erc-button-setup))
   ((remove-hook 'erc-insert-modify-hook 'erc-button-add-buttons)
    (remove-hook 'erc-send-modify-hook 'erc-button-add-buttons)
-   (remove-hook 'erc-complete-functions 'erc-button-next)
+   (remove-hook 'erc-complete-functions 'erc-button-next-function)
    (remove-hook 'erc-mode-hook 'erc-button-setup)
    (when (featurep 'xemacs)
      (dolist (buffer (erc-buffer-list))
@@ -427,21 +427,28 @@ call it with the value of the `erc-data' text property."
       (error "Function %S is not bound" fun))
     (apply fun data)))
 
+(defun erc-button-next-function ()
+  "Pseudo completion function that actually jumps to the next button.
+For use on `completion-at-point-functions'."
+  (let ((here (point)))
+    (when (< here (erc-beg-of-input-line))
+      (lambda ()
+        (while (and (get-text-property here 'erc-callback)
+                    (not (= here (point-max))))
+          (setq here (1+ here)))
+        (while (and (not (get-text-property here 'erc-callback))
+                    (not (= here (point-max))))
+          (setq here (1+ here)))
+        (if (< here (point-max))
+            (goto-char here)
+          (error "No next button"))
+        t))))
+
 (defun erc-button-next ()
   "Go to the next button in this buffer."
   (interactive)
-  (let ((here (point)))
-    (when (< here (erc-beg-of-input-line))
-      (while (and (get-text-property here 'erc-callback)
-                  (not (= here (point-max))))
-        (setq here (1+ here)))
-      (while (and (not (get-text-property here 'erc-callback))
-                  (not (= here (point-max))))
-        (setq here (1+ here)))
-      (if (< here (point-max))
-          (goto-char here)
-        (error "No next button"))
-      t)))
+  (let ((f (erc-button-next-function)))
+    (if f (funcall f))))
 
 (defun erc-button-previous ()
   "Go to the previous button in this buffer."
index 88f0fe605f8e4365e142540df74a797557b96724..19e1801e03c674ac7b2797e8c3a3ddaf6adc169a 100644 (file)
@@ -1094,7 +1094,7 @@ Possible values are: ask, auto, ignore."
 (defvar erc-dcc-chat-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map (kbd "RET") 'erc-send-current-line)
-    (define-key map "\t" 'erc-complete-word)
+    (define-key map "\t" 'completion-at-point)
     map)
   "Keymap for `erc-dcc-mode'.")
 
@@ -1102,7 +1102,8 @@ Possible values are: ask, auto, ignore."
   "Major mode for wasting time via DCC chat."
   (setq mode-line-process '(":%s")
         erc-send-input-line-function 'erc-dcc-chat-send-input-line
-        erc-default-recipients '(dcc)))
+        erc-default-recipients '(dcc))
+  (add-hook 'completion-at-point-functions 'erc-complete-word-at-point nil t))
 
 (defun erc-dcc-chat-send-input-line (recipient line &optional force)
   "Send LINE to the remote end.
index 355770c5dcce59d77919398692533a9fe62cfb4c..48c260c19fcb435dcb251fb9a14232633954c7a9 100644 (file)
@@ -64,10 +64,16 @@ the most recent speakers are listed first."
 (define-erc-module pcomplete Completion
   "In ERC Completion mode, the TAB key does completion whenever possible."
   ((add-hook 'erc-mode-hook 'pcomplete-erc-setup)
-   (add-hook 'erc-complete-functions 'erc-pcomplete)
+   (add-hook 'erc-complete-functions 'erc-pcompletions-at-point)
    (erc-buffer-list #'pcomplete-erc-setup))
   ((remove-hook 'erc-mode-hook 'pcomplete-erc-setup)
-   (remove-hook 'erc-complete-functions 'erc-pcomplete)))
+   (remove-hook 'erc-complete-functions 'erc-pcompletions-at-point)))
+
+(defun erc-pcompletions-at-point ()
+  "ERC completion data from pcomplete.
+for use on `completion-at-point-function'."
+  (when (> (point) (erc-beg-of-input-line))
+    (pcomplete-completions-at-point)))
 
 (defun erc-pcomplete ()
   "Complete the nick before point."
index 110ee8d1c3f6fb5e82f0b824d550d6de99ac4321..e2228a4330309d7084e75c6d5ba423acffa0d19a 100644 (file)
@@ -1110,7 +1110,7 @@ which the local user typed."
     (define-key map "\C-c\C-u" 'erc-kill-input)
     (define-key map "\C-c\C-x" 'erc-quit-server)
     (define-key map "\M-\t" 'ispell-complete-word)
-    (define-key map "\t" 'erc-complete-word)
+    (define-key map "\t" 'completion-at-point)
 
     ;; Suppress `font-lock-fontify-block' key binding since it
     ;; destroys face properties.
@@ -1447,7 +1447,8 @@ Defaults to the server buffer."
   (set (make-local-variable 'paragraph-separate)
        (concat "\C-l\\|\\(^" (regexp-quote (erc-prompt)) "\\)"))
   (set (make-local-variable 'paragraph-start)
-       (concat "\\(" (regexp-quote (erc-prompt)) "\\)")))
+       (concat "\\(" (regexp-quote (erc-prompt)) "\\)"))
+  (add-hook 'completion-at-point-functions 'erc-complete-word-at-point nil t))
 
 ;; activation
 
@@ -3803,13 +3804,10 @@ This places `point' just after the prompt, or at the beginning of the line."
        (setq erc-input-ring-index nil))
     (kill-line)))
 
-(defun erc-complete-word ()
-  "Complete the word before point.
+(defun erc-complete-word-at-point ()
+  (run-hook-with-args-until-success 'erc-complete-functions))
 
-This function uses `erc-complete-functions'."
-  (interactive)
-  (unless (run-hook-with-args-until-success 'erc-complete-functions)
-    (beep)))
+(define-obsolete-function-alias 'erc-complete-word 'completion-at-point "24.1")
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;