emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r112717: * lisp/sort.el (delete-dupli


From: Sam Steingold
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r112717: * lisp/sort.el (delete-duplicate-lines): Accept an optional `keep-blanks'
Date: Fri, 24 May 2013 14:39:21 -0400
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 112717
committer: Sam Steingold <address@hidden>
branch nick: trunk
timestamp: Fri 2013-05-24 14:39:21 -0400
message:
  * lisp/sort.el (delete-duplicate-lines): Accept an optional `keep-blanks'
  argument (before the `interactive' argument).
modified:
  etc/NEWS
  lisp/ChangeLog
  lisp/sort.el
=== modified file 'etc/NEWS'
--- a/etc/NEWS  2013-05-24 10:43:31 +0000
+++ b/etc/NEWS  2013-05-24 18:39:21 +0000
@@ -264,10 +264,12 @@
   name and arguments.  Useful to trace the value of (current-buffer) or
   (point) when the function is invoked.
 
-** New command `delete-duplicate-lines' has two types of operation:
-when its arg ADJACENT is non-nil (when called interactively with C-u C-u)
+** New command `delete-duplicate-lines' has new types of operation:
+When its arg ADJACENT is non-nil (when called interactively with C-u C-u)
 it works like the utility `uniq'.  Otherwise by default it deletes
 duplicate lines everywhere in the region without regard to adjacency.
+When it arg KEEP-BLANKS is non-nil (when called interactively with C-u C-u 
C-u),
+duplicate blank lines are preserved.
 
 ** New `cycle-spacing' command allows cycling between having just one
 space, no spaces, or reverting to the original spacing.  Like

=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-05-24 17:42:23 +0000
+++ b/lisp/ChangeLog    2013-05-24 18:39:21 +0000
@@ -1,3 +1,8 @@
+2013-05-24  Sam Steingold  <address@hidden>
+
+       * sort.el (delete-duplicate-lines): Accept an optional `keep-blanks'
+       argument (before the `interactive' argument).
+
 2013-05-24  Stefan Monnier  <address@hidden>
 
        * image-mode.el (image-mode-winprops): Add winprops to

=== modified file 'lisp/sort.el'
--- a/lisp/sort.el      2013-01-02 16:13:04 +0000
+++ b/lisp/sort.el      2013-05-24 18:39:21 +0000
@@ -568,7 +568,8 @@
       (insert (car ll)))))
 
 ;;;###autoload
-(defun delete-duplicate-lines (beg end &optional reverse adjacent interactive)
+(defun delete-duplicate-lines (beg end &optional reverse adjacent keep-blanks
+                               interactive)
   "Delete duplicate lines in the region between BEG and END.
 
 If REVERSE is nil, search and delete duplicates forward keeping the first
@@ -582,6 +583,9 @@
 this is more efficient in performance and memory usage than when ADJACENT
 is nil that uses additional memory to remember previous lines.
 
+If KEEP-BLANKS is non-nil (when called interactively with three C-u prefixes),
+duplicate blank lines are preserved.
+
 When called from Lisp and INTERACTIVE is omitted or nil, return the number
 of deleted duplicate lines, do not print it; if INTERACTIVE is t, the
 function behaves in all respects as if it had been called interactively."
@@ -591,6 +595,7 @@
      (list (region-beginning) (region-end)
           (equal current-prefix-arg '(4))
           (equal current-prefix-arg '(16))
+          (equal current-prefix-arg '(64))
           t)))
   (let ((lines (unless adjacent (make-hash-table :weakness 'key :test 'equal)))
        line prev-line
@@ -605,14 +610,16 @@
               (and (< (point) end) (not (eobp))))
        (setq line (buffer-substring-no-properties
                    (line-beginning-position) (line-end-position)))
-       (if (if adjacent (equal line prev-line) (gethash line lines))
-           (progn
-             (delete-region (progn (forward-line 0) (point))
-                            (progn (forward-line 1) (point)))
-             (if reverse (forward-line -1))
-             (setq count (1+ count)))
-         (if adjacent (setq prev-line line) (puthash line t lines))
-         (forward-line (if reverse -1 1)))))
+        (if (and keep-blanks (string= "" line))
+            (forward-line 1)
+          (if (if adjacent (equal line prev-line) (gethash line lines))
+              (progn
+                (delete-region (progn (forward-line 0) (point))
+                               (progn (forward-line 1) (point)))
+                (if reverse (forward-line -1))
+                (setq count (1+ count)))
+            (if adjacent (setq prev-line line) (puthash line t lines))
+            (forward-line (if reverse -1 1))))))
     (set-marker beg nil)
     (set-marker end nil)
     (when interactive


reply via email to

[Prev in Thread] Current Thread [Next in Thread]