[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
updating buffer window while accepting minibuffer input
From: |
Buchs, Kevin J. |
Subject: |
updating buffer window while accepting minibuffer input |
Date: |
Wed, 16 Jul 2014 16:12:57 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 |
This is a follow-up to "regexp nirvana - near miss" (thanks Drew for
giving me this programming burden ;-). I'm wanting to traverse a list of
buffer positions according to minibuffer keystrokes and have the
referenced buffer position update (and eventually highlight) much like
isearch-*. I'm stuck on the buffer position not actually updating
whilest I am in the midst of (read-minibuffer-input). I have spent about
two hours delving into how isearch works and came out without a clue as
to how it actually gets minibuffer reading activated. So, I'm seeking
help. Code follows signature.
Kevin Buchs Research Computer Services Phone: 507-538-5459
Mayo Clinic 200 1st. St SW Rochester, MN 55905
http://mayoclinic.org http://facebook.com/MayoClinic
http://youtube.com/MayoClinic http://twitter.com/MayoClinic
(defun regexpneg-fwd ()
(interactive)
;; Move to next match
(if (< regexpneg-pointer (1- (length regexpneg-list)))
(progn
(set-buffer regexpneg-buffer)
(setq regexpneg-pointer (1+ regexpneg-pointer))
(goto-char (nth regexpneg-pointer regexpneg-list))
(recenter 5)
(message "buffer: %S, position: %d, pointer: %d"
(current-buffer) (point) regexpneg-pointer))))
(defun regexpneg-rev ()
(interactive)
;; Move to prior match
(unless (= regexpneg-pointer 0)
(set-buffer regexpneg-buffer)
(setq regexpneg-pointer (1- regexpneg-pointer))
(goto-char (nth regexpneg-pointer regexpneg-list))
(recenter 5)
(message "buffer: %S, position: %d, pointer: %d"
(current-buffer) (point) regexpneg-pointer)))
(defun regexpneg (part negpart)
"Search for regexp part, not followed by regexp negpart; You can
advance in search hits with C-s or SPACE. Reverse with C-r or DEL"
(interactive)
(let (
(point-start (point))
(subsetnotlist '()))
;; Save a reference to current buffer
(setq regexpneg-buffer (current-buffer))
;; Search for 'part' - return list of locations =
regexpneg-list
(setq regexpneg-list '())
(while (re-search-forward part nil t)
(setq regexpneg-list (append regexpneg-list
(list (match-beginning 0)))))
;; Search for 'part'+'negpart' - return list of locations =
subsetnotlist
(goto-char point-start)
(while (re-search-forward (concat part negpart) nil t)
(setq subsetnotlist (append subsetnotlist (list
(match-beginning 0)))))
;; Delete members of subsetnotlist from regexpneg-list
(dolist (var subsetnotlist)
(delq var regexpneg-list))
;; Check for keymap or create it
(unless (keymapp 'regexpneg-keymap)
(setq regexpneg-keymap (make-sparse-keymap))
(define-key regexpneg-keymap "\C-s" 'regexpneg-fwd)
(define-key regexpneg-keymap " " 'regexpneg-fwd)
(define-key regexpneg-keymap "\C-r" 'regexpneg-rev)
(define-key regexpneg-keymap "DEL" 'regexpneg-rev)
(define-key regexpneg-keymap "\C-j" 'exit-minibuffer)
(define-key regexpneg-keymap "\C-m" 'exit-minibuffer))
;; Set index-pointer
(setq regexpneg-pointer 0)
;; Move to first match
(goto-char (nth regexpneg-pointer regexpneg-list))
(message "buffer: %S, position: %d, pointer: %d"
(current-buffer) (point) regexpneg-pointer)
;; Show minibuffer for further options
(setq resp (read-from-minibuffer
"REN: fwd=C-s,SPACE; rev=C-r,DEL; exit=C-j,C-m: " nil
regexpneg-keymap))
(message "got response '%s'" resp)))
- updating buffer window while accepting minibuffer input,
Buchs, Kevin J. <=