aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorRichard M. Stallman <[email protected]>1993-06-17 04:17:21 +0000
committerRichard M. Stallman <[email protected]>1993-06-17 04:17:21 +0000
commit2877eac209714f8e2100b1adc6c0775b6a2566f1 (patch)
tree528252891b1d31e7d2e7dfa7fdeabc6aaea31e26 /lisp
parent8f9dc2ed1cdb0aa44cf7f57e17c1cd327db1b84f (diff)
(mouse-menu-choose-yank): New function. Put it in the edit menu.
(yank-menu-length): New variable.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/menu-bar.el27
1 files changed, 27 insertions, 0 deletions
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index ca16bd9e18..0f174f1fab 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -104,6 +104,33 @@
(and (boundp 'pending-undo-list)
pending-undo-list)
buffer-undo-list)))
+
+(defvar yank-menu-length 100
+ "*Maximum length of an item in the menu for \
+\\[mouse-menu-choose-yank].")
+
+(defun mouse-menu-choose-yank (event)
+ "Pop up a menu of the kill-ring for selection with the mouse.
+The kill-ring-yank-pointer is moved to the selected element.
+A subsequent \\[yank] yanks the choice just selected."
+ (interactive "e")
+ (let* ((count 0)
+ (menu (mapcar (lambda (string)
+ (if (> (length string) yank-menu-length)
+ (setq string (substring string
+ 0 yank-menu-length)))
+ (prog1 (cons string count)
+ (setq count (1+ count))))
+ kill-ring)))
+ (rotate-yank-pointer (x-popup-menu event
+ (list "Yank Menu"
+ (cons "Pick Selection" menu))))
+ (if (interactive-p)
+ (message "The next yank will insert the selected text.")
+ (current-kill 0))))
+
+(define-key menu-bar-edit-menu [choose-selection]
+ '("Choose Pasting Selection" . mouse-menu-choose-yank))
(define-key global-map [menu-bar buffer] '("Buffers" . mouse-menu-bar-buffers))