]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emulation/cua-rect.el (cua-rectangle-mark-mode): New minor mode.
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 16 Dec 2013 02:24:08 +0000 (21:24 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 16 Dec 2013 02:24:08 +0000 (21:24 -0500)
(cua--deactivate-rectangle): Don't deactivate the mark.
(cua-set-rectangle-mark): Don't set mark-active since
cua--activate-rectangle already does it for us.
(cua--rectangle-highlight-for-redisplay): Unhighlight a previous
non-rectangular region.

* lisp/emulation/cua-base.el (cua-repeat-replace-region):
Use with-current-buffer.

* lisp/net/gnutls.el: Use cl-lib.
(gnutls-negotiate): `mapcan' -> cl-mapcan.

etc/NEWS
lisp/ChangeLog
lisp/emulation/cua-base.el
lisp/emulation/cua-rect.el
lisp/net/gnutls.el
lisp/rect.el

index cfb883e445beb87a619a3cc6fb949758a21fdf3a..ad385f4d373b97634fa5476a97cb23a8cecf6242 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -254,11 +254,12 @@ You can pick the name of the function and the variables with `C-x 4 a'.
 * Changes in Specialized Modes and Packages in Emacs 24.4
 
 ** CUA-mode
-CUA-mode was changed to make use of delete-selection-mode and
+*** CUA-mode was changed to make use of delete-selection-mode and
 shift-select-mode.  So you can now enable it independently from
 transient-mark-mode, delete-selection-mode, and shift-select-mode.
 As a result, cua-highlight-region-shift-only is obsolete
 (you can disable transient-mark-mode to get the same result).
+*** CUA's rectangles can now be used via `cua-rectangle-mark-mode'.
 
 ** `delete-selection-mode' can be used without transient-mark-mode.
 
index 0eabdf86ffafc8a95024f4ab168816ec6f790574..f4a42c6f4c096609be3eba32ec6a52d3d73710ce 100644 (file)
@@ -1,3 +1,18 @@
+2013-12-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * emulation/cua-rect.el (cua-rectangle-mark-mode): New minor mode.
+       (cua--deactivate-rectangle): Don't deactivate the mark.
+       (cua-set-rectangle-mark): Don't set mark-active since
+       cua--activate-rectangle already does it for us.
+       (cua--rectangle-highlight-for-redisplay): Unhighlight a previous
+       non-rectangular region.
+
+       * emulation/cua-base.el (cua-repeat-replace-region):
+       Use with-current-buffer.
+
+       * net/gnutls.el: Use cl-lib.
+       (gnutls-negotiate): `mapcan' -> cl-mapcan.
+
 2013-12-14  Teodor Zlatanov  <tzz@lifelogs.com>
 
        * emacs-lisp/package.el (package-built-in-p): Support both
index 24149a33c89b9bc95830cdd94f6fee7d506e4c9f..4a158087d128f5c0a0163463a7ebd28a46912b79 100644 (file)
@@ -971,9 +971,8 @@ replaced by typing text over it and replaces it with the same stretch
 of text."
   (interactive "P")
   (when cua--last-deleted-region-pos
-    (save-excursion
+    (with-current-buffer (car cua--last-deleted-region-pos)
       (save-restriction
-       (set-buffer (car cua--last-deleted-region-pos))
        (widen)
        ;; Find the text that replaced the region via the undo list.
        (let ((ul buffer-undo-list)
index 71578031cba1dd13611f90a16c19ca7c103aa0d1..4e0782c870b743dcdb1b8a9cc20ad155627a0687 100644 (file)
@@ -78,7 +78,7 @@
       (push (list 'apply 0 s e
                  'cua--rect-undo-handler
                  (copy-sequence cua--rectangle) t s e)
-         buffer-undo-list))))
+            buffer-undo-list))))
 
 (defun cua--rect-undo-handler (rect on s e)
   (if (setq on (not on))
              'cua--rect-undo-handler rect on s e)
        buffer-undo-list))
 
+;;;###autoload
+(define-minor-mode cua-rectangle-mark-mode
+  "Toggle the region as rectangular.
+Activates the region if needed.  Only lasts until the region is deactivated."
+  :keymap cua--rectangle-keymap
+  (cond
+   (cua-rectangle-mark-mode
+    (add-hook 'deactivate-mark-hook
+              (lambda () (cua-rectangle-mark-mode -1)))
+    (add-hook 'post-command-hook #'cua--rectangle-post-command nil t)
+    (cua-set-rectangle-mark))
+   (t
+    (cua--deactivate-rectangle)
+    (remove-hook 'post-command-hook #'cua--rectangle-post-command t))))
+
 ;;; Rectangle geometry
 
 (defun cua--rectangle-top (&optional val)
@@ -708,8 +723,7 @@ If command is repeated at same position, delete the rectangle."
                    killed-rectangle "")))))
 
 (defun cua--activate-rectangle ()
-  ;; Turn on rectangular marking mode by disabling transient mark mode
-  ;; and manually handling highlighting from a post command hook.
+  ;; Set cua--rectangle to indicate we're marking a rectangle.
   ;; Be careful if we are already marking a rectangle.
   (setq cua--rectangle
         (if (and cua--last-rectangle
@@ -725,7 +739,7 @@ If command is repeated at same position, delete the rectangle."
 
 (defun cua--deactivate-rectangle ()
   ;; This is used to clean up after `cua--activate-rectangle'.
-  (mapc (function delete-overlay) cua--rectangle-overlays)
+  (mapc #'delete-overlay cua--rectangle-overlays)
   (setq cua--last-rectangle (cons (current-buffer)
                                   (cons (point) ;; cua-save-point
                                         cua--rectangle))
@@ -733,7 +747,10 @@ If command is repeated at same position, delete the rectangle."
         cua--rectangle-overlays nil
         cua--status-string nil
         cua--mouse-last-pos nil)
-  (deactivate-mark))
+  ;; FIXME: This call to cua-rectangle-mark-mode is a workaround.
+  ;; Deactivation can happen in various different ways, and we
+  ;; currently don't handle them all in a coherent way.
+  (if cua-rectangle-mark-mode (cua-rectangle-mark-mode -1)))
 
 (defun cua--highlight-rectangle ()
   ;; This function is used to highlight the rectangular region.
@@ -879,7 +896,6 @@ With prefix argument, activate previous rectangle if possible."
           (push-mark nil nil t)))
     (cua--activate-rectangle)
     (cua--rectangle-set-corners)
-    (setq mark-active t)
     (if cua-enable-rectangle-auto-help
         (cua-help-for-rectangle t))))
 
@@ -1385,7 +1401,7 @@ With prefix arg, indent to that column."
   (if (not cua--rectangle) (apply orig args)
     ;; When cua--rectangle is active, just don't highlight at all, since we
     ;; already do it elsewhere.
-    ))
+    (funcall redisplay-unhighlight-region-function (nth 3 args))))
 
 (defun cua--rectangle-region-extract (orig &optional delete)
   (cond
index 5bf9adc2b531e8c86bd73ecc007a641632deb90e..e9ba6288b6f1308984ac89a5e28c383ff2c1874d 100644 (file)
@@ -35,7 +35,7 @@
 
 ;;; Code:
 
-(eval-when-compile (require 'cl-lib))
+(require 'cl-lib)
 
 (defgroup gnutls nil
   "Emacs interface to the GnuTLS library."
@@ -210,7 +210,7 @@ defaults to GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT."
                              t)
                             ;; if a list, look for hostname matches
                             ((listp gnutls-verify-error)
-                             (mapcan
+                             (cl-mapcan
                               (lambda (check)
                                 (when (string-match (car check) hostname)
                                   (cdr check)))
index be29517e0879ce950494bf644937580a85fa9742..cece0950880be1edaeec6454e31599eaa1afa4c1 100644 (file)
@@ -418,9 +418,6 @@ with a prefix argument, prompt for START-AT and FORMAT."
 ;; - lots of commands handle the region without paying attention to its
 ;;   rectangular shape.
 
-(add-hook 'deactivate-mark-hook
-          (lambda () (rectangle-mark-mode -1)))
-
 (add-function :around redisplay-highlight-region-function
               #'rectangle--highlight-for-redisplay)
 (add-function :around redisplay-unhighlight-region-function
@@ -443,6 +440,8 @@ with a prefix argument, prompt for START-AT and FORMAT."
 Activates the region if needed.  Only lasts until the region is deactivated."
   nil nil nil
   (when rectangle-mark-mode
+    (add-hook 'deactivate-mark-hook
+              (lambda () (rectangle-mark-mode -1)))
     (unless (region-active-p)
       (push-mark)
       (activate-mark))))