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