[beirc-cvs] CVS beirc
afuchs
afuchs at common-lisp.net
Thu Mar 16 00:01:46 UTC 2006
Update of /project/beirc/cvsroot/beirc
In directory clnet:/tmp/cvs-serv17189
Modified Files:
application.lisp receivers.lisp
Log Message:
Add /{Previous,Next} Highlighted Message commands
* commands are bound to shift-prior and shift-next respectively.
* also fix the nick->hostmask translator to generate hostmask only
when the user has a known hostname, otherwise generate a nickname
mask
--- /project/beirc/cvsroot/beirc/application.lisp 2006/03/12 09:48:57 1.53
+++ /project/beirc/cvsroot/beirc/application.lisp 2006/03/16 00:01:46 1.54
@@ -294,6 +294,14 @@
(when (message-directed-to-me-p message)
(incf (messages-directed-to-me receiver)))
(incf (all-unseen-messages receiver)))
+ (when (and (slot-boundp receiver 'pane) (pane receiver))
+ (let* ((pane (actual-application-pane (pane receiver)))
+ (current-insert-position (bounding-rectangle-height pane)))
+ (when (and (not (eql current-insert-position
+ (first (positions-mentioning-user receiver))))
+ (message-directed-to-me-p message))
+ (push current-insert-position
+ (positions-mentioning-user receiver)))))
(queue-event (frame-top-level-sheet frame)
(make-instance 'foo-event :sheet frame :receiver receiver))
nil)
@@ -392,6 +400,30 @@
(irc:part connection channel))))
(remove-receiver receiver *application-frame*))
+(macrolet ((define-highlighted-message-jumper (com-name keystroke next-pos-form fallback-position)
+ `(define-beirc-command (,com-name :name t :keystroke ,keystroke) ()
+ (let* ((pane (actual-application-pane (pane (current-receiver *application-frame*))))
+ (next-y-position ,next-pos-form)
+ (bottom (max 0 (- (bounding-rectangle-height pane)
+ (bounding-rectangle-height (sheet-parent pane)))))
+ (top 0))
+ (scroll-extent pane 0 (if next-y-position
+ (min next-y-position bottom)
+ (progn
+ (beep)
+ (funcall ,fallback-position bottom top))))))))
+ (define-highlighted-message-jumper com-previous-highlighted-message (:prior :shift)
+ (find-if (lambda (position)
+ (< position (bounding-rectangle-min-y (pane-viewport-region pane))))
+ (positions-mentioning-user (current-receiver *application-frame*)))
+ (lambda (bottom top) (declare (ignore bottom)) top))
+ (define-highlighted-message-jumper com-next-highlighted-message (:next :shift)
+ (loop for (this prev . rest) on (positions-mentioning-user (current-receiver *application-frame*))
+ until (null prev)
+ if (<= prev (bounding-rectangle-min-y (pane-viewport-region pane)) this)
+ do (return this))
+ (lambda (bottom top) (declare (ignore top)) bottom)))
+
(define-beirc-command (com-remove-inactive-queries :name t) ()
(let ((receivers-to-close nil))
(maphash (lambda (name receiver)
@@ -734,7 +766,10 @@
(declare (ignore object))
(presentation-subtypep context-type 'hostmask)))
(object)
- (format nil "*!*@~A" (irc:hostname (irc:find-user (current-connection *application-frame*) object))))
+ (let ((hostname (irc:hostname (irc:find-user (current-connection *application-frame*) object))))
+ (if (zerop (length hostname))
+ (format nil "~A!*@*" object)
+ (format nil "*!*@~A" hostname))))
(define-beirc-command (com-join :name t) ((channel 'channel :prompt "channel"))
(raise-receiver (intern-receiver channel (current-connection *application-frame*)
--- /project/beirc/cvsroot/beirc/receivers.lisp 2006/03/12 09:48:57 1.22
+++ /project/beirc/cvsroot/beirc/receivers.lisp 2006/03/16 00:01:46 1.23
@@ -14,6 +14,7 @@
(title :reader title :initarg :title)
(last-visited :accessor last-visited :initform 0)
(incomplete-input :accessor incomplete-input :initform "")
+ (positions-mentioning-user :accessor positions-mentioning-user :initform nil)
(pane :reader pane)
(tab-pane :accessor tab-pane)))
More information about the Beirc-cvs
mailing list