[climacs-cvs] CVS climacs

dmurray dmurray at common-lisp.net
Tue May 16 21:08:08 UTC 2006


Update of /project/climacs/cvsroot/climacs
In directory clnet:/tmp/cvs-serv24606

Modified Files:
	search-commands.lisp 
Log Message:
Preliminary addition of some extra options for isearch:
C-j (appends a #\Newline to the search string)
C-w (appends the word after point)
C-y (appends the remainder of the line after point)
M-y (appends the most recent kill)
Still work to be done, but useful even now.


--- /project/climacs/cvsroot/climacs/search-commands.lisp	2006/05/14 20:35:44	1.3
+++ /project/climacs/cvsroot/climacs/search-commands.lisp	2006/05/16 21:08:08	1.4
@@ -28,6 +28,13 @@
 
 (in-package :climacs-gui)
 
+(defun display-string (string)
+  (with-output-to-string (result)
+    (loop for char across string
+	  do (cond ((graphic-char-p char) (princ char result))
+		((char= char #\Space) (princ char result))
+		(t (prin1 char result))))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; 
 ;;; String search
@@ -107,7 +114,7 @@
                                 (- (offset mark2) (length string))
                                 (+ (offset mark2) (length string)))))
       (display-message "~:[Failing ~;~]Isearch~:[ backward~;~]: ~A"
-		       success forwardp string)
+		       success forwardp (display-string string))
       (push (make-instance 'isearch-state
                            :search-string string
                            :search-mark mark
@@ -133,18 +140,60 @@
 	 'search-table
 	 '((#\r :control)))
 
-(define-command (com-isearch-append-char :name t :command-table isearch-climacs-table) ()
+(defun isearch-append-char (char)
   (let* ((pane (current-window))
          (states (isearch-states pane))
          (string (concatenate 'string
                               (search-string (first states))
-                              (string *current-gesture*)))
+                              (string char)))
          (mark (clone-mark (search-mark (first states))))
          (forwardp (search-forward-p (first states))))
     (unless forwardp
       (incf (offset mark)))
     (isearch-from-mark pane mark string forwardp)))
 
+(define-command (com-isearch-append-char :name t :command-table isearch-climacs-table) ()
+  (isearch-append-char *current-gesture*))
+
+(define-command (com-isearch-append-newline :name t :command-table isearch-climacs-table) ()
+  (isearch-append-char #\Newline))
+
+(defun isearch-append-text (movement-function)
+  (let* ((pane (current-window))
+	 (states (isearch-states pane))
+	 (buffer (buffer pane))
+	 (point (point pane))
+	 (start (clone-mark point))
+	 (mark (clone-mark (search-mark (first states))))
+	 (forwardp (search-forward-p (first states))))
+    (funcall movement-function point)
+    (let ((string (concatenate 'string
+			       (search-string (first states))
+			       (buffer-substring buffer
+						 (offset start)
+						 (offset point)))))
+      (unless forwardp
+	(incf (offset mark)))
+      (isearch-from-mark pane mark string forwardp))))
+
+(define-command (com-isearch-append-word :name t :command-table isearch-climacs-table) ()
+  (isearch-append-text #'forward-word))
+
+(define-command (com-isearch-append-line :name t :command-table isearch-climacs-table) ()
+  (isearch-append-text #'end-of-line))
+
+(define-command (com-isearch-append-kill :name t :command-table isearch-climacs-table) ()
+  (let* ((pane (current-window))
+	 (states (isearch-states pane))
+	 (string (concatenate 'string
+			      (search-string (first states))
+			      (kill-ring-yank *kill-ring*)))
+	 (mark (clone-mark (search-mark (first states))))
+	 (forwardp (search-forward-p (first states))))
+    (unless forwardp
+      (incf (offset mark)))
+    (isearch-from-mark pane mark string forwardp)))
+
 (define-command (com-isearch-delete-char :name t :command-table isearch-climacs-table) ()
   (let* ((pane (current-window)))
     (cond ((null (second (isearch-states pane)))
@@ -164,7 +213,7 @@
                           (length (search-string state)))))
 	     (display-message "Isearch~:[ backward~;~]: ~A"
 			      (search-forward-p state)
-			      (search-string state)))))))
+			      (display-string (search-string state))))))))
 
 (define-command (com-isearch-search-forward :name t :command-table isearch-climacs-table) ()
   (let* ((pane (current-window))
@@ -200,6 +249,10 @@
 (isearch-set-key '(#\Backspace) 'com-isearch-delete-char)
 (isearch-set-key '(#\s :control) 'com-isearch-search-forward)
 (isearch-set-key '(#\r :control) 'com-isearch-search-backward)
+(isearch-set-key '(#\j :control) 'com-isearch-append-newline)
+(isearch-set-key '(#\w :control) 'com-isearch-append-word)
+(isearch-set-key '(#\y :control) 'com-isearch-append-line)
+(isearch-set-key '(#\y :meta) 'com-isearch-append-kill)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; 




More information about the Climacs-cvs mailing list