[mcclim-cvs] CVS mcclim/Drei

thenriksen thenriksen at common-lisp.net
Tue Nov 14 10:31:37 UTC 2006


Update of /project/mcclim/cvsroot/mcclim/Drei
In directory clnet:/tmp/cvs-serv10285

Modified Files:
	basic-commands.lisp core-commands.lisp editing.lisp 
	packages.lisp 
Log Message:
Create object deletion/killing functions.


--- /project/mcclim/cvsroot/mcclim/Drei/basic-commands.lisp	2006/11/08 01:15:33	1.1
+++ /project/mcclim/cvsroot/mcclim/Drei/basic-commands.lisp	2006/11/14 10:31:37	1.2
@@ -371,13 +371,9 @@
   "Delete the object after point.
 With a numeric argument, kill that many objects 
 after (or before, if negative) point."
-  (let* ((point *current-point*)
-	 (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)))
+   (if killp
+      (forward-kill-object *current-point* count)
+      (forward-delete-object *current-point* count)))
 
 (define-command (com-backward-delete-object :name t :command-table deletion-table)
     ((count 'integer :prompt "Number of Objects")
@@ -385,13 +381,9 @@
   "Delete the object before point.
 With a numeric argument, kills that many objects 
 before (or after, if negative) point."
-  (let* ((point *current-point*)
-	 (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)))
+  (if killp
+      (backward-kill-object *current-point* count)
+      (backward-delete-object *current-point* count)))
 
 ;; We require somewhat special behavior from Kill Line, so define a
 ;; new function and use that to implement the Kill Line command.
--- /project/mcclim/cvsroot/mcclim/Drei/core-commands.lisp	2006/11/14 08:02:27	1.2
+++ /project/mcclim/cvsroot/mcclim/Drei/core-commands.lisp	2006/11/14 10:31:37	1.3
@@ -428,7 +428,7 @@
                                          'string))))
       (insert-sequence *current-point* line)
       (insert-object *current-point* #\Newline))
-    (com-backward-delete-object 1 nil)))
+    (backward-delete-object *current-point*)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; 
--- /project/mcclim/cvsroot/mcclim/Drei/editing.lisp	2006/11/08 01:15:33	1.1
+++ /project/mcclim/cvsroot/mcclim/Drei/editing.lisp	2006/11/14 10:31:37	1.2
@@ -196,7 +196,64 @@
 ;;; 
 ;;; Object editing
 
+(defun forward-delete-object (mark &optional (count 1) limit-action)
+  "Kill `count' objects beginning from `mark'."
+  (let ((offset (offset mark)))
+    (handler-case (progn (forward-object mark count)
+                         (delete-region offset mark))
+      (invalid-motion ()
+        (when limit-action
+          (funcall limit-action mark (offset mark)
+                   count "object" nil))))))
+
+(defun backward-delete-object (mark &optional (count 1) limit-action)
+  "Kill `count' objects backwards beginning from `mark'."
+  (let ((offset (offset mark)))
+    (handler-case (progn (backward-object mark count)
+                         (delete-region offset mark))
+      (invalid-motion ()
+        (when limit-action
+          (funcall limit-action mark (offset mark)
+                   (- count) "object" nil))))))
+
+(defun forward-kill-object (mark &optional (count 1) concatenate-p limit-action)
+  "Kill `count' objects beginning from `mark'."
+  (let ((start (offset mark)))
+    (handler-case (progn (forward-object mark count)
+                         (if concatenate-p
+                             (if (plusp count)
+                                 (kill-ring-concatenating-push
+                                  *kill-ring* (region-to-sequence start mark))
+                                 (kill-ring-reverse-concatenating-push
+                                  *kill-ring* (region-to-sequence start mark)))
+                             (kill-ring-standard-push
+                              *kill-ring* (region-to-sequence start mark)))
+                         (delete-region start mark))
+      (invalid-motion ()
+        (when limit-action
+          (funcall limit-action mark (offset mark)
+                   (- count) "object" nil))))))
+
+(defun backward-kill-object (mark &optional (count 1) concatenate-p limit-action)
+  "Kill `count' objects backwards beginning from `mark'."
+  (let ((start (offset mark)))
+    (handler-case (progn (forward-object mark count)
+                         (if concatenate-p
+                             (if (plusp count)
+                                 (kill-ring-concatenating-push
+                                  *kill-ring* (region-to-sequence start mark))
+                                 (kill-ring-reverse-concatenating-push
+                                  *kill-ring* (region-to-sequence start mark)))
+                             (kill-ring-standard-push
+                              *kill-ring* (region-to-sequence start mark)))
+                         (delete-region start mark))
+      (invalid-motion ()
+        (when limit-action
+          (funcall limit-action mark (offset mark)
+                   (- count) "object" nil))))))
+
 (defun transpose-objects (mark)
+  "Transpose two objects at `mark'."
   (unless (beginning-of-buffer-p mark)
     (when (end-of-line-p mark)
       (backward-object mark))
--- /project/mcclim/cvsroot/mcclim/Drei/packages.lisp	2006/11/14 07:59:05	1.4
+++ /project/mcclim/cvsroot/mcclim/Drei/packages.lisp	2006/11/14 10:31:37	1.5
@@ -329,7 +329,11 @@
 (defpackage :drei-editing
   (:use :clim-lisp :drei-base :drei-buffer
         :drei-syntax :drei-motion :drei :drei-kill-ring)
-  (:export #:transpose-objects
+  (:export #:forward-delete-object
+           #:backward-delete-object
+           #:forward-kill-object
+           #:backward-kill-object
+           #:transpose-objects
            
            ;; Lines
            #:forward-delete-line #:backward-delete-line




More information about the Mcclim-cvs mailing list