[beirc-cvs] CVS update: beirc/application.lisp beirc/presentations.lisp beirc/receivers.lisp
Andreas Fuchs
afuchs at common-lisp.net
Tue Sep 27 20:53:42 UTC 2005
Update of /project/beirc/cvsroot/beirc
In directory common-lisp.net:/tmp/cvs-serv2856
Modified Files:
application.lisp presentations.lisp receivers.lisp
Log Message:
Add nickname tab completion using complete-input and a custom
completion function.
Date: Tue Sep 27 22:53:41 2005
Author: afuchs
Index: beirc/application.lisp
diff -u beirc/application.lisp:1.13 beirc/application.lisp:1.14
--- beirc/application.lisp:1.13 Mon Sep 26 12:52:05 2005
+++ beirc/application.lisp Tue Sep 27 22:53:41 2005
@@ -352,6 +352,9 @@
(define-beirc-command (com-names :name t) ()
(irc:names (current-connection *application-frame*) (target)))
+(define-beirc-command (com-away :name t) ((reason 'mumble :prompt "reason"))
+ (irc:away (current-connection *application-frame*) reason))
+
(define-beirc-command (com-quit :name t) ((reason 'mumble :prompt "reason"))
(when (current-connection *application-frame*)
(disconnect *application-frame* reason))
Index: beirc/presentations.lisp
diff -u beirc/presentations.lisp:1.2 beirc/presentations.lisp:1.3
--- beirc/presentations.lisp:1.2 Sun Sep 25 17:48:32 2005
+++ beirc/presentations.lisp Tue Sep 27 22:53:41 2005
@@ -14,14 +14,54 @@
;;; mumble
+(defun split-input-line (so-far)
+ (multiple-value-bind (word subseq-index)
+ (split-sequence:split-sequence #\Space so-far
+ :from-end t
+ :remove-empty-subseqs nil
+ :count 1)
+ (values (first word)
+ (if (= 0 subseq-index)
+ ""
+ (concatenate 'string (subseq so-far 0 subseq-index) " ")))))
+
+(defun nickname-completer (so-far mode)
+ (multiple-value-bind (word prefix) (split-input-line so-far)
+ (labels ((prefixify (word)
+ (if (zerop (length prefix))
+ (concatenate 'string word ": ")
+ (concatenate 'string prefix word " "))))
+ (multiple-value-bind (string success object nmatches possibilities)
+ (complete-from-possibilities word
+ (if (not (null (current-channel)))
+ (hash-alist
+ (irc:users
+ (irc:find-channel
+ (current-connection *application-frame*)
+ (current-channel))))
+ nil)
+ '()
+ :action mode
+ :value-key #'cdr)
+ (values (prefixify string)
+ success object nmatches (mapcar (lambda (possibility)
+ (cons (prefixify (car possibility))
+ (cdr possibility)))
+ possibilities))))))
+
+;; FIXME/FIXMCCLIM: :possibility-printer is ignored in current
+;; McCLIM's COMPLETE-INPUT implementation.
+#+(or)
+(defun nickname-completion-printer (string object stream)
+ (declare (ignore string))
+ (present (irc:name object) 'nickname :stream stream))
+
(define-presentation-method accept ((type mumble) *standard-input* (view textual-view) &key)
- (with-output-to-string (bag)
- (loop
- (let ((c (peek-char nil)))
- (cond ((char= c #\newline)
- (return))
- (t
- (write-char (read-char) bag)))))))
+ (let ((*completion-gestures* '(#\Tab)))
+ (nth-value 2
+ (complete-input *standard-input* 'nickname-completer
+ #+(or):possibility-printer #+(or) 'nickname-competion-printer
+ :allow-any-input t))))
;;; nicknames
Index: beirc/receivers.lisp
diff -u beirc/receivers.lisp:1.6 beirc/receivers.lisp:1.7
--- beirc/receivers.lisp:1.6 Mon Sep 26 12:52:05 2005
+++ beirc/receivers.lisp Tue Sep 27 22:53:41 2005
@@ -170,6 +170,7 @@
irc:irc-rpl_whoisuser-message
irc:irc-rpl_whoischannels-message
irc:irc-rpl_whoisserver-message
+ irc:irc-rpl_whoisidentified-message
irc:irc-err_nosuchnick-message))
(macrolet ((define-ignore-message-types (&rest mtypes)
More information about the Beirc-cvs
mailing list