arch-string-in-menu.patch" Content-Transfer-Encoding: quoted-printable =46rom a1050dd268e3f3e23a41960a5fb44b7b7e680e94 Mon Sep 17 00:00:00 2001 From: Morgan Veyret Date: Mon, 23 Feb 2009 19:36:54 +0100 Subject: [PATCH 08/14] Added display of regex search string in menu. Replaced *current-menu-input* global variable with a current-input field in menu-state struct. --- menu.lisp | 34 +++++++++++++++++++--------------- 1 files changed, 19 insertions(+), 15 deletions(-) diff --git a/menu.lisp b/menu.lisp index c114de9..1567714 100644 --- a/menu.lisp +++ b/menu.lisp @@ -54,10 +54,8 @@ (define-key m (kbd "RET") 'menu-finish) m))) =20 -(defvar *current-menu-input* nil) - (defstruct menu-state - table prompt selected view-start view-end) + table prompt selected view-start view-end current-input) =20 (defun menu-scrolling-required-p (menu) (and *menu-maximum-height* @@ -106,33 +104,33 @@ on current view and new selection." *menu-scrolling-step*)))))))) =20 (defun menu-up (menu) - (setf *current-menu-input* "") + (setf (menu-state-current-input menu) "") (decf (menu-state-selected menu)) (bound-check-menu menu)) =20 (defun menu-down (menu) - (setf *current-menu-input* "") + (setf (menu-state-current-input menu) "") (incf (menu-state-selected menu)) (bound-check-menu menu)) =20 (defun menu-scroll-up (menu) - (setf *current-menu-input* "") + (setf (menu-state-current-input menu) "") (decf (menu-state-selected menu) *menu-scrolling-step*) (bound-check-menu menu)) =20 (defun menu-scroll-down (menu) - (setf *current-menu-input* "") + (setf (menu-state-current-input menu) "") (incf (menu-state-selected menu) *menu-scrolling-step*) (bound-check-menu menu)) =20 (defun menu-page-up (menu) - (setf *current-menu-input* "") + (setf (menu-state-current-input menu) "") (decf (menu-state-selected menu) *menu-maximum-height*) (let ((*menu-scrolling-step* *menu-maximum-height*)) (bound-check-menu menu))) =20 (defun menu-page-down (menu) - (setf *current-menu-input* "") + (setf (menu-state-current-input menu) "") (incf (menu-state-selected menu) *menu-maximum-height*) (let ((*menu-scrolling-step* *menu-maximum-height*)) (bound-check-menu menu))) @@ -165,20 +163,20 @@ backspace or F9), return it otherwise return nil" long as the user types lower-case characters." (let ((input-char (get-input-char key-seq))) (when input-char - (setf *current-menu-input* + (setf (menu-state-current-input menu) (concatenate 'string - *current-menu-input* + (menu-state-current-input menu) (string input-char))) (do* ((cur-pos 0 (1+ cur-pos)) (rest-elem (menu-state-table menu) (cdr rest-elem)) (cur-elem (car rest-elem) (car rest-elem)) (cur-elem-name (menu-element-name cur-elem) (menu-element-name cur-el= em)) - (current-input-length (length *current-menu-input*)) - (match-regex (ppcre:create-scanner *current-menu-input* + (current-input-length (length (menu-state-current-input menu))) + (match-regex (ppcre:create-scanner (menu-state-current-input menu) :case-insensitive-mode - (string=3D (string-downcase *current-menu-input*) - *current-menu-input*)))) + (string=3D (string-downcase (menu-state-current-input menu)) + (menu-state-current-input menu))))) ((not cur-elem)) (when (and (>=3D (length cur-elem-name) current-input-length) (ppcre:scan match-regex cur-elem-name)) @@ -209,6 +207,7 @@ See *menu-map* for menu bindings." (menu (make-menu-state :table table :prompt prompt + :current-input "" :view-start (if menu-require-scrolling initial-selection 0) @@ -236,6 +235,9 @@ See *menu-map* for menu bindings." (cons "..." view-text))) (unless (=3D (length menu-options) (menu-s= tate-view-end menu)) (setf view-text (append view-text '("...= ")))) + (unless (string=3D (menu-state-current-inp= ut menu) "") + (setf view-text + (cons (format nil "Search: ~a" (me= nu-state-current-input menu)) view-text))) (when prompt (setf view-text (cons prompt view-text))) @@ -243,6 +245,8 @@ See *menu-map* for menu bindings." (menu-highlight (+ (- (menu-state-selected menu) (menu-state-view-start menu)) (if prompt 1 0) + (if (string=3D (menu-state-current-i= nput menu) "") + 0 1) (if (=3D 0 (menu-state-view-start me= nu)) 0 1)))) (echo-string-list screen menu-text menu-highlight)) (multiple-value-bind (action key-seq) (read-from-keymap (l= ist *menu-map*)) --=20 1.7.4