Update of /project/climacs/cvsroot/climacs In directory common-lisp.net:/tmp/cvs-serv32127
Modified Files: base.lisp gui.lisp kill-ring.lisp syntax.lisp Log Message: Added and altered various commands.
#\Page added to whitespacep for non-sbcl Added com-not-modified (M-~), com-set-fill-column (C-x f), com-kill-word (M-d), com-backward-kill-word (M-Backspace), com-backward-sentence (M-a), com-forward-sentence (M-e_, com-forward-page (C-x ]), com-backward-page (C-x [), com-count-lines-page (C-x l), com-beginning-of-definition (M-C-a), com-end-of-definition (M-C-e), com-mark-definition (M-C-h). Changed com-goto-line to be 1-based, not 0-based. Renamed com-cut-out -> com-kill-region, com-copy-out -> com-copy-region, com-beginning-of-paragraph -> com-backward-paragraph, com-end-of-paragraph -> com-forward-paragraph. Date: Fri Aug 5 14:40:57 2005 Author: dmurray
Index: climacs/base.lisp diff -u climacs/base.lisp:1.40 climacs/base.lisp:1.41 --- climacs/base.lisp:1.40 Fri Aug 5 00:07:44 2005 +++ climacs/base.lisp Fri Aug 5 14:40:55 2005 @@ -186,7 +186,7 @@ "A predicate to ensure that an object is a whitespace character." (and (characterp obj) #+sbcl (sb-impl::whitespacep obj) - #-sbcl (member obj '(#\Space #\Tab #\Newline)))) + #-sbcl (member obj '(#\Space #\Tab #\Newline #\Page))))
(defun forward-to-word-boundary (mark) "Move the mark forward to the beginning of the next word."
Index: climacs/gui.lisp diff -u climacs/gui.lisp:1.169 climacs/gui.lisp:1.170 --- climacs/gui.lisp:1.169 Thu Aug 4 03:10:45 2005 +++ climacs/gui.lisp Fri Aug 5 14:40:56 2005 @@ -130,15 +130,6 @@
(defvar *kill-ring* (make-instance 'kill-ring :max-size 7))
-(defun meta-digit (gesture) - (position gesture - '((#\0 :meta) (#\1 :meta) (#\2 :meta) (#\3 :meta) (#\4 :meta) - (#\5 :meta) (#\6 :meta) (#\7 :meta) (#\8 :meta) (#\9 :meta)) - :test #'event-matches-gesture-name-p)) - -(defun substitute-numeric-argument-p (command numargp) - (substitute numargp *numeric-argument-p* command :test #'eq)) - (defmethod execute-frame-command :around ((frame climacs) command) (handler-case (with-undo ((buffer (current-window))) @@ -171,6 +162,14 @@ (with-slots (overwrite-mode) (current-window) (setf overwrite-mode (not overwrite-mode))))
+(define-named-command com-not-modified () + (setf (needs-saving (buffer (current-window))) nil)) + +(define-named-command com-set-fill-column ((column 'integer :prompt "Column Number:")) + (if (> column 1) + (setf (auto-fill-column (current-window)) column) + (progn (beep) (display-message "Set Fill Column requires an explicit argument.")))) + (defun possibly-fill-line () (let* ((pane (current-window)) (buffer (buffer pane))) @@ -357,6 +356,36 @@ (define-named-command com-delete-word ((count 'integer :prompt "Number of words")) (delete-word (point (current-window)) count))
+(define-named-command com-kill-word ((count 'integer :prompt "Number of words")) + (let* ((pane (current-window)) + (point (point pane)) + (mark (offset point))) + (loop repeat count + until (end-of-buffer-p point) + do (forward-word point)) + (unless (mark= point mark) + (if (eq (previous-command pane) 'com-kill-word) + (kill-ring-concatenating-push *kill-ring* + (region-to-sequence mark point)) + (kill-ring-standard-push *kill-ring* + (region-to-sequence mark point))) + (delete-region mark point)))) + +(define-named-command com-backward-kill-word ((count 'integer :prompt "Number of words")) + (let* ((pane (current-window)) + (point (point pane)) + (mark (offset point))) + (loop repeat count + until (end-of-buffer-p point) + do (backward-word point)) + (unless (mark= point mark) + (if (eq (previous-command pane) 'com-backward-kill-word) + (kill-ring-reverse-concatenating-push *kill-ring* + (region-to-sequence mark point)) + (kill-ring-standard-push *kill-ring* + (region-to-sequence mark point))) + (delete-region mark point)))) + (define-named-command com-mark-word ((count 'integer :prompt "Number of words")) (let* ((pane (current-window)) (point (point pane)) @@ -435,9 +464,9 @@ (begin-mark (clone-mark point)) (end-mark (clone-mark point))) (unless (eql (object-before begin-mark) #\Newline) - (beginning-of-paragraph begin-mark syntax)) + (backward-paragraph begin-mark syntax)) (unless (eql (object-after end-mark) #\Newline) - (end-of-paragraph end-mark syntax)) + (forward-paragraph end-mark syntax)) (do-buffer-region (object offset buffer (offset begin-mark) (offset end-mark)) (when (eql object #\Newline) @@ -718,10 +747,10 @@ m) do (end-of-line mark) until (end-of-buffer-p mark) - repeat (handler-case (accept 'integer :prompt "Goto Line") + repeat (1- (handler-case (accept 'integer :prompt "Goto Line") (error () (progn (beep) (display-message "Not a valid line number") - (return-from com-goto-line nil)))) + (return-from com-goto-line nil))))) do (incf (offset mark)) (end-of-line mark) finally (beginning-of-line mark) @@ -882,14 +911,14 @@ (insert-sequence (point (current-window)) (kill-ring-yank *kill-ring*)))
;; Destructively cut a given buffer region into the kill-ring -(define-named-command com-cut-out () +(define-named-command com-kill-region () (let ((pane (current-window))) (kill-ring-standard-push *kill-ring* (region-to-sequence (mark pane) (point pane))) (delete-region (mark pane) (point pane))))
;; Non destructively copies in buffer region to the kill ring -(define-named-command com-copy-out () +(define-named-command com-copy-region () (let ((pane (current-window))) (kill-ring-standard-push *kill-ring* (region-to-sequence (point pane) (mark pane)))))
@@ -1168,17 +1197,17 @@ (setf (offset dabbrev-expansion-mark) offset)))) (move)))))))) -(define-named-command com-beginning-of-paragraph () +(define-named-command com-backward-paragraph () (let* ((pane (current-window)) (point (point pane)) (syntax (syntax (buffer pane)))) - (beginning-of-paragraph point syntax))) + (backward-paragraph point syntax)))
-(define-named-command com-end-of-paragraph () +(define-named-command com-forward-paragraph () (let* ((pane (current-window)) (point (point pane)) (syntax (syntax (buffer pane)))) - (end-of-paragraph point syntax))) + (forward-paragraph point syntax)))
(define-named-command com-mark-paragraph ((count 'integer :prompt "Number of paragraphs")) (let* ((pane (current-window)) @@ -1187,8 +1216,55 @@ (syntax (syntax (buffer pane)))) (unless (eq (previous-command pane) 'com-mark-paragraph) (setf (offset mark) (offset point)) - (beginning-of-paragraph point syntax)) - (dotimes (i count) (end-of-paragraph mark syntax)))) + (backward-paragraph point syntax)) + (loop repeat count do (forward-paragraph mark syntax)))) + +(define-named-command com-backward-sentence () + (let* ((pane (current-window)) + (point (point pane)) + (syntax (syntax (buffer pane)))) + (backward-sentence point syntax))) + +(define-named-command com-forward-sentence () + (let* ((pane (current-window)) + (point (point pane)) + (syntax (syntax (buffer pane)))) + (forward-sentence point syntax))) + +(defun forward-page (mark &optional (count 1)) + (loop repeat count + unless (search-forward mark (coerce (list #\Newline #\Page) 'vector)) + do (end-of-buffer mark) + (loop-finish))) + +(define-named-command com-forward-page ((count 'integer :prompt "Number of pages")) + (let* ((pane (current-window)) + (point (point pane))) + (forward-page point count))) + +(defun backward-page (mark &optional (count 1)) + (loop repeat count + when (search-backward mark (coerce (list #\Newline #\Page) 'vector)) + do (forward-object mark) + else do (beginning-of-buffer mark) + (loop-finish))) + +(define-named-command com-backward-page ((count 'integer :prompt "Number of pages")) + (let* ((pane (current-window)) + (point (point pane))) + (backward-page point count))) + +(define-named-command com-count-lines-page () + (let* ((pane (current-window)) + (point (point pane)) + (start (clone-mark point)) + (end (clone-mark point))) + (backward-page start) + (forward-page end) + (let ((total (number-of-lines-in-region start end)) + (before (number-of-lines-in-region start point)) + (after (number-of-lines-in-region point end))) + (display-message "Page has ~A lines (~A + ~A)" total before after))))
(define-named-command com-eval-expression ((insertp 'boolean :prompt "Insert?")) (let* ((*package* (find-package :climacs-gui)) @@ -1262,6 +1338,28 @@ (syntax (syntax (buffer pane)))) (eval-defun point syntax)))
+(define-named-command com-beginning-of-definition () + (let* ((pane (current-window)) + (point (point pane)) + (syntax (syntax (buffer pane)))) + (beginning-of-definition point syntax))) + +(define-named-command com-end-of-definition () + (let* ((pane (current-window)) + (point (point pane)) + (syntax (syntax (buffer pane)))) + (end-of-definition point syntax))) + +(define-named-command com-mark-definition () + (let* ((pane (current-window)) + (point (point pane)) + (mark (mark pane)) + (syntax (syntax (buffer pane)))) + (unless (eq (previous-command pane) 'com-mark-definition) + (beginning-of-definition point syntax) + (setf (offset mark) (offset point))) + (end-of-definition mark syntax))) + (define-named-command com-package () (let* ((pane (current-window)) (syntax (syntax (buffer pane))) @@ -1331,9 +1429,9 @@ (global-set-key '(#\t :control) 'com-transpose-objects) (global-set-key '(#\Space :control) 'com-set-mark) (global-set-key '(#\y :control) 'com-yank) -(global-set-key '(#\w :control) 'com-cut-out) -(global-set-key '(#\e :meta) `(com-forward-expression ,*numeric-argument-marker*)) -(global-set-key '(#\a :meta) `(com-backward-expression ,*numeric-argument-marker*)) +(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 '(#@ :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*)) @@ -1343,7 +1441,7 @@ (global-set-key '(#\c :meta) 'com-capitalize-word) (global-set-key '(#\y :meta) 'com-rotate-yank) (global-set-key '(#\z :meta) 'com-zap-to-character) -(global-set-key '(#\w :meta) 'com-copy-out) +(global-set-key '(#\w :meta) 'com-copy-region) (global-set-key '(#\v :control) 'com-page-down) (global-set-key '(#\v :meta) 'com-page-up) (global-set-key '(#< :shift :meta) 'com-beginning-of-buffer) @@ -1351,12 +1449,12 @@ (global-set-key '(#\m :meta) 'com-back-to-indentation) (global-set-key '(#^ :shift :meta) 'com-delete-indentation) (global-set-key '(#\q :meta) 'com-fill-paragraph) -(global-set-key '(#\d :meta) `(com-delete-word ,*numeric-argument-marker*)) -(global-set-key '(#\Backspace :meta) `(com-backward-delete-word ,*numeric-argument-marker*)) +(global-set-key '(#\d :meta) `(com-kill-word ,*numeric-argument-marker*)) +(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 '(#\a :control :meta) 'com-beginning-of-paragraph) -(global-set-key '(#\e :control :meta) 'com-end-of-paragraph) +(global-set-key '(#{ :meta :shift) 'com-backward-paragraph) +(global-set-key '(#} :meta :shift) 'com-forward-paragraph) (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) @@ -1380,11 +1478,14 @@ (global-set-key #\Backspace `(com-backward-delete-object ,*numeric-argument-marker*))
(global-set-key '(:insert) 'com-toggle-overwrite-mode) +(global-set-key '(#~ :meta :shift) 'com-not-modified)
(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 '(#\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 '(#\h :control :meta) 'com-mark-definition) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; C-x command table @@ -1405,13 +1506,16 @@ (c-x-set-key '(#\3) 'com-split-window-horizontally) (c-x-set-key '(#\b) 'com-switch-to-buffer) (c-x-set-key '(#\f :control) 'com-find-file) +(c-x-set-key '(#\f) `(com-set-fill-column ,*numeric-argument-marker*)) (c-x-set-key '(#\h) 'com-mark-whole-buffer) (c-x-set-key '(#\i) 'com-insert-file) (c-x-set-key '(#\k) 'com-kill-buffer) -(c-x-set-key '(#\l :control) 'com-load-file) (c-x-set-key '(#\o) 'com-other-window) (c-x-set-key '(#\r) 'com-redo) (c-x-set-key '(#\u) 'com-undo) +(c-x-set-key '(#]) `(com-forward-page ,*numeric-argument-marker*)) +(c-x-set-key '(#[) `(com-backward-page ,*numeric-argument-marker*)) +(c-x-set-key '(#\l) 'com-count-lines-page) (c-x-set-key '(#\s :control) 'com-save-buffer) (c-x-set-key '(#\t :control) 'com-transpose-lines) (c-x-set-key '(#\w :control) 'com-write-buffer)
Index: climacs/kill-ring.lisp diff -u climacs/kill-ring.lisp:1.6 climacs/kill-ring.lisp:1.7 --- climacs/kill-ring.lisp:1.6 Sun Feb 27 19:52:01 2005 +++ climacs/kill-ring.lisp Fri Aug 5 14:40:56 2005 @@ -74,6 +74,11 @@ of the current contents of the top of the kill ring. If the kill ring is empty the a new entry is pushed."))
+(defgeneric kill-ring-reverse-concatenating-push (kr vector) + (:documentation "Concatenates the contents of vector onto the front +of the current contents of the top of the kill ring. If the kill ring +is empty a new entry is pushed.")) + (defgeneric kill-ring-yank (kr &optional reset) (:documentation "Returns the vector of objects currently pointed to by the cursor. If reset is T, a call to @@ -128,6 +133,15 @@ (pop-start chain) vector)))) (reset-yank-position kr)) + +(defmethod kill-ring-reverse-concatenating-push ((kr kill-ring) vector) + (let ((chain (kill-ring-chain kr))) + (if (zerop (kill-ring-length kr)) + (push-start chain vector) + (push-start chain + (concatenate 'vector + vector + (pop-start chain))))))
(defmethod kill-ring-yank ((kr kill-ring) &optional (reset NIL)) (if reset (reset-yank-position kr))
Index: climacs/syntax.lisp diff -u climacs/syntax.lisp:1.54 climacs/syntax.lisp:1.55 --- climacs/syntax.lisp:1.54 Thu Aug 4 03:10:45 2005 +++ climacs/syntax.lisp Fri Aug 5 14:40:56 2005 @@ -55,6 +55,18 @@
(defgeneric eval-defun (mark syntax))
+(defgeneric beginning-of-definition (mark syntax)) + +(defgeneric end-of-definition (mark syntax)) + +(defgeneric backward-paragraph (mark syntax)) + +(defgeneric forward-paragraph (mark syntax)) + +(defgeneric backward-sentence (mark syntax)) + +(defgeneric forward-sentence (mark syntax)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; Commenting @@ -208,6 +220,24 @@ (error 'no-such-operation))
(defmethod eval-defun (mark syntax) + (error 'no-such-operation)) + +(defmethod beginning-of-defintion (mark syntax) + (error 'no-such-operation)) + +(defmethod end-of-definition (mark syntax) + (error 'no-such-operation)) + +(defmethod backward-paragraph (mark syntax) + (error 'no-such-operation)) + +(defmethod forward-paragraph (mark syntax) + (error 'no-such-operation)) + +(defmethod backward-sentence (mark syntax) + (error 'no-such-operation)) + +(defmethod forward-sentence (mark syntax) (error 'no-such-operation))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;