Mercurial > emacs
comparison lisp/emulation/cua-rect.el @ 56902:8d62e1b62c44
* emulation/cua-rect.el (cua--overlay-keymap): New keymap for
highlight overlays; allow using RET when cursor is over a button.
(cua--highlight-rectangle): Use it.
(cua--rectangle-set-corners): Don't move backwards at eol.
(cua--forward-line): Don't move into void after eob.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Fri, 03 Sep 2004 12:33:54 +0000 |
parents | 77bbb90bd021 |
children | 47e923e70073 3219f94257bc |
comparison
equal
deleted
inserted
replaced
56901:8090066a536d | 56902:8d62e1b62c44 |
---|---|
62 (defvar cua--last-killed-rectangle nil) | 62 (defvar cua--last-killed-rectangle nil) |
63 | 63 |
64 ;; List of overlays used to display current rectangle. | 64 ;; List of overlays used to display current rectangle. |
65 (defvar cua--rectangle-overlays nil) | 65 (defvar cua--rectangle-overlays nil) |
66 (make-variable-buffer-local 'cua--rectangle-overlays) | 66 (make-variable-buffer-local 'cua--rectangle-overlays) |
67 | |
68 (defvar cua--overlay-keymap | |
69 (let ((map (make-sparse-keymap))) | |
70 (define-key map "\r" 'cua-rotate-rectangle))) | |
67 | 71 |
68 (defvar cua--virtual-edges-debug nil) | 72 (defvar cua--virtual-edges-debug nil) |
69 | 73 |
70 ;; Per-buffer CUA mode undo list. | 74 ;; Per-buffer CUA mode undo list. |
71 (defvar cua--undo-list nil) | 75 (defvar cua--undo-list nil) |
272 mp (cua--rectangle-top) mc (cua--rectangle-left)))) | 276 mp (cua--rectangle-top) mc (cua--rectangle-left)))) |
273 (goto-char mp) | 277 (goto-char mp) |
274 (move-to-column mc) | 278 (move-to-column mc) |
275 (set-mark (point)) | 279 (set-mark (point)) |
276 (goto-char pp) | 280 (goto-char pp) |
281 ;; Move cursor inside rectangle, except if char at rigth edge is a tab. | |
277 (if (and (if (cua--rectangle-right-side) | 282 (if (and (if (cua--rectangle-right-side) |
278 (= (move-to-column pc) (- pc tab-width)) | 283 (and (= (move-to-column pc) (- pc tab-width)) |
284 (not (eolp))) | |
279 (> (move-to-column pc) pc)) | 285 (> (move-to-column pc) pc)) |
280 (not (bolp))) | 286 (not (bolp))) |
281 (backward-char 1)) | 287 (backward-char 1)) |
282 )) | 288 )) |
283 | 289 |
284 ;;; Rectangle resizing | 290 ;;; Rectangle resizing |
285 | 291 |
286 (defun cua--forward-line (n) | 292 (defun cua--forward-line (n) |
287 ;; Move forward/backward one line. Returns t if movement. | 293 ;; Move forward/backward one line. Returns t if movement. |
288 (= (forward-line n) 0)) | 294 (let ((pt (point))) |
295 (and (= (forward-line n) 0) | |
296 ;; Deal with end of buffer | |
297 (or (not (eobp)) | |
298 (goto-char pt))))) | |
289 | 299 |
290 (defun cua--rectangle-resized () | 300 (defun cua--rectangle-resized () |
291 ;; Refresh state after resizing rectangle | 301 ;; Refresh state after resizing rectangle |
292 (setq cua--buffer-and-point-before-command nil) | 302 (setq cua--buffer-and-point-before-command nil) |
293 (cua--rectangle-insert-col 0) | 303 (cua--rectangle-insert-col 0) |
841 (setq old (cdr old))) | 851 (setq old (cdr old))) |
842 (setq overlay (make-overlay s e))) | 852 (setq overlay (make-overlay s e))) |
843 (overlay-put overlay 'before-string bs) | 853 (overlay-put overlay 'before-string bs) |
844 (overlay-put overlay 'after-string as) | 854 (overlay-put overlay 'after-string as) |
845 (overlay-put overlay 'face rface) | 855 (overlay-put overlay 'face rface) |
856 (overlay-put overlay 'keymap cua--overlay-keymap) | |
846 (setq new (cons overlay new)))))) | 857 (setq new (cons overlay new)))))) |
847 ;; Trim old trailing overlays. | 858 ;; Trim old trailing overlays. |
848 (mapcar (function delete-overlay) old) | 859 (mapcar (function delete-overlay) old) |
849 (setq cua--rectangle-overlays (nreverse new)))) | 860 (setq cua--rectangle-overlays (nreverse new)))) |
850 | 861 |