From ad1f12980cae77280a49ac1e6ef5d386f355b0f2 Mon Sep 17 00:00:00 2001 From: Krzysztof Drewniak Date: Sun, 13 Nov 2011 14:56:05 -0600 Subject: [PATCH 1/3] Repalce the current-input string in menu.lisp with a vector with a fill-pointer. --- menu.lisp | 25 ++++++++++++------------- 1 files changed, 12 insertions(+), 13 deletions(-) diff --git a/menu.lisp b/menu.lisp index dc8a3c8..c0b511b 100644 --- a/menu.lisp +++ b/menu.lisp @@ -54,7 +54,8 @@ m))) (defstruct menu-state - table prompt selected view-start view-end current-input) + table prompt selected view-start view-end + (current-input (make-array 10 :element-type 'character :adjustable t :fill-pointer 0))) (defun bound-check-menu (menu) "Adjust the menu view and selected item based @@ -85,34 +86,36 @@ on current view and new selection." (values (menu-state-view-start menu) (menu-state-view-end menu))))))))) +;;TODO: Refactor these? + (defun menu-up (menu) - (setf (menu-state-current-input menu) "") + (setf (fill-pointer (menu-state-current-input menu)) 0) (decf (menu-state-selected menu)) (bound-check-menu menu)) (defun menu-down (menu) - (setf (menu-state-current-input menu) "") + (setf (fill-pointer (menu-state-current-input menu)) 0) (incf (menu-state-selected menu)) (bound-check-menu menu)) (defun menu-scroll-up (menu) - (setf (menu-state-current-input menu) "") + (setf (fill-pointer (menu-state-current-input menu)) 0) (decf (menu-state-selected menu) *menu-scrolling-step*) (bound-check-menu menu)) (defun menu-scroll-down (menu) - (setf (menu-state-current-input menu) "") + (setf (fill-pointer (menu-state-current-input menu)) 0) (incf (menu-state-selected menu) *menu-scrolling-step*) (bound-check-menu menu)) (defun menu-page-up (menu) - (setf (menu-state-current-input menu) "") + (setf (fill-pointer (menu-state-current-input menu)) 0) (decf (menu-state-selected menu) *menu-maximum-height*) (let ((*menu-scrolling-step* *menu-maximum-height*)) (bound-check-menu menu))) (defun menu-page-down (menu) - (setf (menu-state-current-input menu) "") + (setf (fill-pointer (menu-state-current-input menu)) 0) (incf (menu-state-selected menu) *menu-maximum-height*) (let ((*menu-scrolling-step* *menu-maximum-height*)) (bound-check-menu menu))) @@ -145,10 +148,7 @@ 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 (menu-state-current-input menu) - (concatenate 'string - (menu-state-current-input menu) - (string input-char))) + (vector-push-extend input-char (menu-state-current-input menu)) (do* ((cur-pos 0 (1+ cur-pos)) (rest-elem (menu-state-table menu) (cdr rest-elem)) @@ -185,7 +185,6 @@ 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) :view-end (if menu-require-scrolling (+ initial-selection *menu-maximum-height*) @@ -208,7 +207,7 @@ See *menu-map* for menu bindings." (incf highlight)) (unless (= (length menu-options) (menu-state-view-end menu)) (setf strings (nconc strings '("...")))) - (unless (string= (menu-state-current-input menu) "") + (unless (= (fill-pointer (menu-state-current-input menu)) 0) (setf strings (cons (format nil "Search: ~a" (menu-state-current-input menu)) -- 1.7.4.1