Update of /project/climacs/cvsroot/climacs In directory common-lisp.net:/tmp/cvs-serv30622
Modified Files: text-syntax.lisp gui.lisp esa.lisp Log Message: Mainly numeric argument additions. Altered numeric argument reading to accept negative arguments, and made consequent changes to commands (e.g. com-self-insert now accepts numeric arguments, com-forward-object goes backwards with negative prefix argument etc.). Also, ensure initial *scratch* buffer is on application buffer list Date: Sat Aug 6 22:51:20 2005 Author: dmurray
Index: climacs/text-syntax.lisp diff -u climacs/text-syntax.lisp:1.8 climacs/text-syntax.lisp:1.9 --- climacs/text-syntax.lisp:1.8 Wed Jul 20 11:41:06 2005 +++ climacs/text-syntax.lisp Sat Aug 6 22:51:19 2005 @@ -148,11 +148,7 @@ (incf pos1)) (t nil))))))))
- - -(defgeneric beginning-of-paragraph (mark text-syntax)) - -(defmethod beginning-of-paragraph (mark (syntax text-syntax)) +(defmethod backward-paragraph (mark (syntax text-syntax)) (with-slots (paragraphs) syntax (let ((pos1 (index-of-mark-after-offset paragraphs (offset mark)))) (when (> pos1 0) @@ -161,9 +157,7 @@ (offset (element* paragraphs (- pos1 2))) (offset (element* paragraphs (1- pos1)))))))))
-(defgeneric end-of-paragraph (mark text-syntax)) - -(defmethod end-of-paragraph (mark (syntax text-syntax)) +(defmethod forward-paragraph (mark (syntax text-syntax)) (with-slots (paragraphs) syntax (let ((pos1 (index-of-mark-after-offset paragraphs @@ -176,18 +170,14 @@ (offset (element* paragraphs (1+ pos1))) (offset (element* paragraphs pos1))))))))
- - (defgeneric backward-expression (mark text-syntax)) - - (defmethod backward-expression (mark (syntax text-syntax)) + (defmethod backward-sentence (mark (syntax text-syntax)) (with-slots (sentence-beginnings) syntax (let ((pos1 (index-of-mark-after-offset sentence-beginnings (offset mark)))) (when (> pos1 0) (setf (offset mark) (offset (element* sentence-beginnings (1- pos1)))))))) - (defgeneric forward-expression (mark text-syntax))
- (defmethod forward-expression (mark (syntax text-syntax)) + (defmethod forward-sentence (mark (syntax text-syntax)) (with-slots (sentence-endings) syntax (let ((pos1 (index-of-mark-after-offset sentence-endings
Index: climacs/gui.lisp diff -u climacs/gui.lisp:1.170 climacs/gui.lisp:1.171 --- climacs/gui.lisp:1.170 Fri Aug 5 14:40:56 2005 +++ climacs/gui.lisp Sat Aug 6 22:51:19 2005 @@ -66,7 +66,9 @@ (make-pane 'climacs-info-pane :master-pane extended-pane :width 900))) - (setf (windows *application-frame*) (list extended-pane)) + (setf (windows *application-frame*) (list extended-pane) + (buffers *application-frame*) (list (buffer extended-pane))) + (vertically () (scrolling () extended-pane) @@ -200,8 +202,8 @@ (insert-object point char)) (insert-object point char))))
-(define-command com-self-insert () - (insert-character *current-gesture*)) +(define-command com-self-insert ((count 'integer)) + (loop repeat count do (insert-character *current-gesture*)))
(define-named-command com-beginning-of-line () (beginning-of-line (point (current-window)))) @@ -209,8 +211,25 @@ (define-named-command com-end-of-line () (end-of-line (point (current-window))))
-(define-named-command com-delete-object ((count 'integer :prompt "Number of Objects")) - (delete-range (point (current-window)) count)) +(define-named-command com-delete-object ((count 'integer :prompt "Number of Objects") + (killp 'boolean :prompt "Kill?")) + (let* ((point (point (current-window))) + (mark (clone-mark point))) + (forward-object mark count) + (when killp + (kill-ring-standard-push *kill-ring* + (region-to-sequence point mark))) + (delete-region point mark))) + +(define-named-command com-backward-delete-object ((count 'integer :prompt "Number of Objects") + (killp 'boolean :prompt "Kill?")) + (let* ((point (point (current-window))) + (mark (clone-mark point))) + (backward-object mark count) + (when killp + (kill-ring-standard-push *kill-ring* + (region-to-sequence mark point))) + (delete-region mark point)))
(define-named-command com-zap-to-object () (let* ((item (handler-case (accept 't :prompt "Zap to Object") @@ -238,9 +257,6 @@ (search-forward item-mark item) (delete-range current-point (- (offset item-mark) current-offset))))
-(define-named-command com-backward-delete-object ((count 'integer :prompt "Number of Objects")) - (delete-range (point (current-window)) (- count))) - (define-named-command com-transpose-objects () (let* ((point (point (current-window)))) (unless (beginning-of-buffer-p point) @@ -311,7 +327,9 @@ (unless (or (eq (previous-command win) 'com-previous-line) (eq (previous-command win) 'com-next-line)) (setf (slot-value win 'goal-column) (column-number point))) - (previous-line point (slot-value win 'goal-column) numarg))) + (if (plusp numarg) + (previous-line point (slot-value win 'goal-column) numarg) + (next-line point (slot-value win 'goal-column) (- numarg)))))
(define-named-command com-next-line ((numarg 'integer :prompt "How many lines?")) (let* ((win (current-window)) @@ -319,7 +337,9 @@ (unless (or (eq (previous-command win) 'com-previous-line) (eq (previous-command win) 'com-next-line)) (setf (slot-value win 'goal-column) (column-number point))) - (next-line point (slot-value win 'goal-column) numarg))) + (if (plusp numarg) + (next-line point (slot-value win 'goal-column) numarg) + (previous-line point (slot-value win 'goal-column) (- numarg)))))
(define-named-command com-open-line ((numarg 'integer :prompt "How many lines?")) (open-line (point (current-window)) numarg)) @@ -329,7 +349,15 @@ (let* ((pane (current-window)) (point (point pane)) (mark (offset point))) - (cond ((or numargp (> numarg 1)) + (cond ((= 0 numarg) + (beginning-of-line point)) + ((< numarg 0) + (loop repeat (- numarg) + until (beginning-of-buffer-p point) + do (beginning-of-line point) + until (beginning-of-buffer-p point) + do (backward-object point))) + ((or numargp (> numarg 1)) (loop repeat numarg until (end-of-buffer-p point) do (end-of-line point) @@ -348,7 +376,9 @@ (delete-region mark point))))
(define-named-command com-forward-word ((count 'integer :prompt "Number of words")) - (forward-word (point (current-window)) count)) + (if (plusp count) + (forward-word (point (current-window)) count) + (backward-word (point (current-window)) (- count))))
(define-named-command com-backward-word ((count 'integer :prompt "Number of words")) (backward-word (point (current-window)) count)) @@ -392,7 +422,9 @@ (mark (mark pane))) (unless (eq (previous-command pane) 'com-mark-word) (setf (offset mark) (offset point))) - (forward-word mark count))) + (if (plusp count) + (forward-word mark count) + (backward-word mark (- count)))))
(define-named-command com-backward-delete-word ((count 'integer :prompt "Number of words")) (backward-delete-word (point (current-window)) count)) @@ -1197,17 +1229,21 @@ (setf (offset dabbrev-expansion-mark) offset)))) (move)))))))) -(define-named-command com-backward-paragraph () +(define-named-command com-backward-paragraph ((count 'integer :prompt "Number of paragraphs")) (let* ((pane (current-window)) (point (point pane)) (syntax (syntax (buffer pane)))) - (backward-paragraph point syntax))) + (if (plusp count) + (loop repeat count do (backward-paragraph point syntax)) + (loop repeat (- count) do (forward-paragraph point syntax)))))
-(define-named-command com-forward-paragraph () +(define-named-command com-forward-paragraph ((count 'integer :prompt "Number of paragraphs")) (let* ((pane (current-window)) (point (point pane)) (syntax (syntax (buffer pane)))) - (forward-paragraph point syntax))) + (if (plusp count) + (loop repeat count do (forward-paragraph point syntax)) + (loop repeat (- count) do (backward-paragraph point syntax)))))
(define-named-command com-mark-paragraph ((count 'integer :prompt "Number of paragraphs")) (let* ((pane (current-window)) @@ -1216,20 +1252,28 @@ (syntax (syntax (buffer pane)))) (unless (eq (previous-command pane) 'com-mark-paragraph) (setf (offset mark) (offset point)) - (backward-paragraph point syntax)) - (loop repeat count do (forward-paragraph mark syntax)))) + (if (plusp count) + (backward-paragraph point syntax) + (forward-paragraph point syntax))) + (if (plusp count) + (loop repeat count do (forward-paragraph mark syntax)) + (loop repeat (- count) do (backward-paragraph mark syntax)))))
-(define-named-command com-backward-sentence () +(define-named-command com-backward-sentence ((count 'integer :prompt "Number of sentences")) (let* ((pane (current-window)) (point (point pane)) (syntax (syntax (buffer pane)))) - (backward-sentence point syntax))) + (if (plusp count) + (loop repeat count do (backward-sentence point syntax)) + (loop repeat (- count) do (forward-sentence point syntax)))))
-(define-named-command com-forward-sentence () +(define-named-command com-forward-sentence ((count 'integer :prompt "Number of sentences")) (let* ((pane (current-window)) (point (point pane)) (syntax (syntax (buffer pane)))) - (forward-sentence point syntax))) + (if (plusp count) + (loop repeat count do (forward-sentence point syntax)) + (loop repeat (- count) do (backward-sentence point syntax)))))
(defun forward-page (mark &optional (count 1)) (loop repeat count @@ -1240,7 +1284,9 @@ (define-named-command com-forward-page ((count 'integer :prompt "Number of pages")) (let* ((pane (current-window)) (point (point pane))) - (forward-page point count))) + (if (plusp count) + (forward-page point count) + (backward-page point count))))
(defun backward-page (mark &optional (count 1)) (loop repeat count @@ -1252,7 +1298,9 @@ (define-named-command com-backward-page ((count 'integer :prompt "Number of pages")) (let* ((pane (current-window)) (point (point pane))) - (backward-page point count))) + (if (plusp count) + (backward-page point count) + (forward-page point count))))
(define-named-command com-count-lines-page () (let* ((pane (current-window)) @@ -1309,28 +1357,29 @@ (asdf:operate 'asdf:load-op :climacs))
(define-named-command com-backward-expression ((count 'integer :prompt "Number of expressions")) - (declare (ignore count)) (let* ((pane (current-window)) (point (point pane)) (syntax (syntax (buffer pane)))) - (backward-expression point syntax))) + (if (plusp count) + (loop repeat count do (backward-expression point syntax)) + (loop repeat (- count) do (forward-expression point syntax)))))
(define-named-command com-forward-expression ((count 'integer :prompt "Number of expresssions")) - (declare (ignore count)) (let* ((pane (current-window)) (point (point pane)) (syntax (syntax (buffer pane)))) - (forward-expression point syntax))) + (if (plusp count) + (loop repeat count do (forward-expression point syntax)) + (loop repeat (- count) do (backward-expression point syntax)))))
(define-named-command com-mark-expression ((count 'integer :prompt "Number of expressions")) - (declare (ignore count)) (let* ((pane (current-window)) (point (point pane)) (mark (mark pane)) (syntax (syntax (buffer pane)))) (unless (eq (previous-command pane) 'com-mark-expression) (setf (offset mark) (offset point))) - (forward-expression mark syntax))) + (loop repeat count do (forward-expression mark syntax))))
(define-named-command com-eval-defun () (let* ((pane (current-window)) @@ -1338,17 +1387,21 @@ (syntax (syntax (buffer pane)))) (eval-defun point syntax)))
-(define-named-command com-beginning-of-definition () +(define-named-command com-beginning-of-definition ((count 'integer :prompt "Number of definitions")) (let* ((pane (current-window)) (point (point pane)) (syntax (syntax (buffer pane)))) - (beginning-of-definition point syntax))) + (if (plusp count) + (loop repeat count do (beginning-of-definition point syntax)) + (loop repeat (- count) do (end-of-definition point syntax)))))
-(define-named-command com-end-of-definition () +(define-named-command com-end-of-definition ((count 'integer :prompt "Number of definitions")) (let* ((pane (current-window)) (point (point pane)) (syntax (syntax (buffer pane)))) - (end-of-definition point syntax))) + (if (plusp count) + (loop repeat count do (end-of-definition point syntax)) + (loop repeat (- count) do (beginning-of-definition point syntax)))))
(define-named-command com-mark-definition () (let* ((pane (current-window)) @@ -1409,9 +1462,9 @@ (dead-escape-set-key (remove :meta gesture) command)))
(loop for code from (char-code #\Space) to (char-code #~) - do (global-set-key (code-char code) 'com-self-insert)) + do (global-set-key (code-char code) `(com-self-insert ,*numeric-argument-marker*)))
-(global-set-key #\Newline 'com-self-insert) +(global-set-key #\Newline `(com-self-insert ,*numeric-argument-marker*)) (global-set-key #\Tab 'com-indent-line) (global-set-key '(#\i :control) 'com-indent-line) (global-set-key '(#: :shift :meta) `(com-eval-expression ,*numeric-argument-p*)) @@ -1420,7 +1473,7 @@ (global-set-key '(#\b :control) `(com-backward-object ,*numeric-argument-marker*)) (global-set-key '(#\a :control) 'com-beginning-of-line) (global-set-key '(#\e :control) 'com-end-of-line) -(global-set-key '(#\d :control) `(com-delete-object ,*numeric-argument-marker*)) +(global-set-key '(#\d :control) `(com-delete-object ,*numeric-argument-marker* ,*numeric-argument-p*)) (global-set-key '(#\p :control) `(com-previous-line ,*numeric-argument-marker*)) (global-set-key '(#\l :control) 'com-full-redisplay) (global-set-key '(#\n :control) `(com-next-line ,*numeric-argument-marker*)) @@ -1430,8 +1483,8 @@ (global-set-key '(#\Space :control) 'com-set-mark) (global-set-key '(#\y :control) 'com-yank) (global-set-key '(#\w :control) 'com-kill-region) -(global-set-key '(#\e :meta) 'com-forward-sentence) -(global-set-key '(#\a :meta) 'com-backward-sentence) +(global-set-key '(#\e :meta) `(com-forward-sentence ,*numeric-argument-marker*)) +(global-set-key '(#\a :meta) `(com-backward-sentence ,*numeric-argument-marker*)) (global-set-key '(#@ :meta :control :shift) `(com-mark-expression ,*numeric-argument-marker*)) (global-set-key '(#\f :meta) `(com-forward-word ,*numeric-argument-marker*)) (global-set-key '(#\b :meta) `(com-backward-word ,*numeric-argument-marker*)) @@ -1453,8 +1506,8 @@ (global-set-key '(#\Backspace :meta) `(com-backward-kill-word ,*numeric-argument-marker*)) (global-set-key '(#@ :meta :shift) `(com-mark-word ,*numeric-argument-marker*)) (global-set-key '(#/ :meta) 'com-dabbrev-expand) -(global-set-key '(#{ :meta :shift) 'com-backward-paragraph) -(global-set-key '(#} :meta :shift) 'com-forward-paragraph) +(global-set-key '(#{ :meta :shift) `(com-backward-paragraph ,*numeric-argument-marker*)) +(global-set-key '(#} :meta :shift) `(com-forward-paragraph ,*numeric-argument-marker*)) (global-set-key '(#\h :meta) `(com-mark-paragraph ,*numeric-argument-marker*)) (global-set-key '(#\s :control) 'com-isearch-mode-forward) (global-set-key '(#\r :control) 'com-isearch-mode-backward) @@ -1474,8 +1527,8 @@ (global-set-key '(:next) 'com-page-down) (global-set-key '(:home :control) 'com-beginning-of-buffer) (global-set-key '(:end :control) 'com-end-of-buffer) -(global-set-key #\Rubout `(com-delete-object ,*numeric-argument-marker*)) -(global-set-key #\Backspace `(com-backward-delete-object ,*numeric-argument-marker*)) +(global-set-key #\Rubout `(com-delete-object ,*numeric-argument-marker* ,*numeric-argument-p*)) +(global-set-key #\Backspace `(com-backward-delete-object ,*numeric-argument-marker* ,*numeric-argument-p*))
(global-set-key '(:insert) 'com-toggle-overwrite-mode) (global-set-key '(#~ :meta :shift) 'com-not-modified) @@ -1483,8 +1536,8 @@ (global-set-key '(#\b :control :meta) `(com-backward-expression ,*numeric-argument-marker*)) (global-set-key '(#\f :control :meta) `(com-forward-expression ,*numeric-argument-marker*)) (global-set-key '(#\x :control :meta) 'com-eval-defun) -(global-set-key '(#\a :control :meta) 'com-beginning-of-definition) -(global-set-key '(#\e :control :meta) 'com-end-of-definition) +(global-set-key '(#\a :control :meta) `(com-beginning-of-definition ,*numeric-argument-marker*)) +(global-set-key '(#\e :control :meta) `(com-end-of-definition ,*numeric-argument-marker*)) (global-set-key '(#\h :control :meta) 'com-mark-definition) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;
Index: climacs/esa.lisp diff -u climacs/esa.lisp:1.12 climacs/esa.lisp:1.13 --- climacs/esa.lisp:1.12 Mon Aug 1 23:42:28 2005 +++ climacs/esa.lisp Sat Aug 6 22:51:20 2005 @@ -143,39 +143,65 @@ (t (unread-gesture gesture :stream stream))))
+(define-gesture-name universal-argument :keyboard (#\u :control)) + +(define-gesture-name meta-minus :keyboard (#- :meta)) + (defun read-numeric-argument (&key (stream *standard-input*)) + "Reads gestures returning two values: prefix-arg and whether prefix given. +Accepts: EITHER C-u, optionally followed by other C-u's, optionally followed +by a minus sign, optionally followed by decimal digits; +OR An optional M-minus, optionally followed by M-decimal-digits. +You cannot mix C-u and M-digits. +C-u gives a numarg of 4. Additional C-u's multiply by 4 (e.g. C-u C-u C-u = 64). +After C-u you can enter decimal digits, possibly preceded by a minus (but not +a plus) sign. C-u 3 4 = 34, C-u - 3 4 = -34. Note that C-u 3 - prints 3 '-'s. +M-1 M-2 = 12. M-- M-1 M-2 = -12. As a special case, C-u - and M-- = -1. +In the absence of a prefix arg returns 1 (and nil)." (let ((gesture (esa-read-gesture))) (cond ((event-matches-gesture-name-p - gesture - `(:keyboard #\u ,(make-modifier-state :control))) + gesture 'universal-argument) (let ((numarg 4)) (loop for gesture = (esa-read-gesture) while (event-matches-gesture-name-p - gesture - `(:keyboard #\u ,(make-modifier-state :control))) + gesture 'universal-argument) do (setf numarg (* 4 numarg)) finally (esa-unread-gesture gesture stream)) - (let ((gesture (esa-read-gesture))) + (let ((gesture (esa-read-gesture)) + (sign +1)) + (when (and (characterp gesture) + (char= gesture #-)) + (setf gesture (esa-read-gesture) + sign -1)) (cond ((and (characterp gesture) (digit-char-p gesture 10)) - (setf numarg (- (char-code gesture) (char-code #\0))) + (setf numarg (digit-char-p gesture 10)) (loop for gesture = (esa-read-gesture) while (and (characterp gesture) (digit-char-p gesture 10)) do (setf numarg (+ (* 10 numarg) - (- (char-code gesture) (char-code #\0)))) + (digit-char-p gesture 10))) finally (esa-unread-gesture gesture stream) - (return (values numarg t)))) + (return (values (* numarg sign) t)))) (t (esa-unread-gesture gesture stream) - (values numarg t)))))) - ((meta-digit gesture) - (let ((numarg (meta-digit gesture))) + (values (if (minusp sign) -1 numarg) t)))))) + ((or (meta-digit gesture) + (event-matches-gesture-name-p + gesture 'meta-minus)) + (let ((numarg 0) + (sign +1)) + (cond ((meta-digit gesture) + (setf numarg (meta-digit gesture))) + (t (setf sign -1))) (loop for gesture = (esa-read-gesture) while (meta-digit gesture) do (setf numarg (+ (* 10 numarg) (meta-digit gesture))) finally (esa-unread-gesture gesture stream) - (return (values numarg t))))) + (return (values (if (and (= sign -1) (= numarg 0)) + -1 + (* sign numarg)) + t))))) (t (esa-unread-gesture gesture stream) (values 1 nil)))))