diff --git a/etc/NEWS b/etc/NEWS index cfb883e445b..ad385f4d373 100644 --- 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. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0eabdf86ffa..f4a42c6f4c0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,18 @@ +2013-12-16 Stefan Monnier + + * 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 * emacs-lisp/package.el (package-built-in-p): Support both diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el index 24149a33c89..4a158087d12 100644 --- a/lisp/emulation/cua-base.el +++ b/lisp/emulation/cua-base.el @@ -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) diff --git a/lisp/emulation/cua-rect.el b/lisp/emulation/cua-rect.el index 71578031cba..4e0782c870b 100644 --- a/lisp/emulation/cua-rect.el +++ b/lisp/emulation/cua-rect.el @@ -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)) @@ -89,6 +89,21 @@ '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 diff --git a/lisp/net/gnutls.el b/lisp/net/gnutls.el index 5bf9adc2b53..e9ba6288b6f 100644 --- a/lisp/net/gnutls.el +++ b/lisp/net/gnutls.el @@ -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))) diff --git a/lisp/rect.el b/lisp/rect.el index be29517e087..cece0950880 100644 --- a/lisp/rect.el +++ b/lisp/rect.el @@ -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))))