Function: context-menu-region
context-menu-region is a byte-compiled function defined in
mouse.el.gz.
Signature
(context-menu-region MENU CLICK)
Documentation
Populate MENU with region commands.
This function has :around advice: context-menu-region@magit-section-mode.
Source Code
;; Defined in /usr/src/emacs/lisp/mouse.el.gz
(defun context-menu-region (menu click)
"Populate MENU with region commands."
(define-key-after menu [separator-region] menu-bar-separator)
(when (and mark-active (not buffer-read-only))
(define-key-after menu [cut]
'(menu-item "Cut" kill-region
:help
"Cut (kill) text in region between mark and current position")))
(when mark-active
(define-key-after menu [copy]
;; ns-win.el said: Substitute a Copy function that works better
;; under X (for GNUstep).
`(menu-item "Copy" ,(if (featurep 'ns)
'ns-copy-including-secondary
'kill-ring-save)
:help "Copy text in region between mark and current position"
:keys ,(if (featurep 'ns)
"\\[ns-copy-including-secondary]"
"\\[kill-ring-save]"))))
(when (and (or (gui-backend-selection-exists-p 'CLIPBOARD)
(if (featurep 'ns) ; like paste-from-menu
(cdr yank-menu)
kill-ring))
(not buffer-read-only))
(define-key-after menu [paste]
`(menu-item "Paste" mouse-yank-at-click
:help "Paste (yank) text most recently cut/copied")))
(when (and (cdr yank-menu) (not buffer-read-only))
(let ((submenu (make-sparse-keymap (propertize "Paste from Kill Menu")))
(i 0))
(dolist (item (reverse yank-menu))
(when (consp item)
(define-key submenu
(vector (intern (format "kill-%d" (setq i (1+ i)))))
`(menu-item ,(cadr item)
,(lambda () (interactive)
(mouse-yank-from-menu click (car item)))))))
(define-key-after menu (if (featurep 'ns) [select-paste] [paste-from-menu])
`(menu-item ,(if (featurep 'ns) "Select and Paste" "Paste from Kill Menu")
,submenu
:help "Choose a string from the kill ring and paste it"))))
(when (and mark-active (not buffer-read-only))
(define-key-after menu [clear]
'(menu-item "Clear" delete-active-region
:help
"Delete text in region between mark and current position")))
(let ((submenu (make-sparse-keymap (propertize "Select"))))
(define-key-after submenu [mark-whole-buffer]
`(menu-item "All"
,(lambda (e) (interactive "e") (mark-thing-at-mouse e 'buffer))
:help "Mark the whole buffer for a subsequent cut/copy"))
(with-current-buffer (window-buffer (posn-window (event-end click)))
(when (let* ((pos (posn-point (event-end click)))
(char (when pos (char-after pos))))
(or (and char (eq (syntax-class-to-char
(syntax-class (syntax-after pos)))
?\"))
(nth 3 (save-excursion (syntax-ppss pos)))))
(define-key-after submenu [mark-string]
`(menu-item "String"
,(lambda (e) (interactive "e") (mark-thing-at-mouse e 'string))
:help "Mark the string at click for a subsequent cut/copy"))))
(define-key-after submenu [mark-line]
`(menu-item "Line"
,(lambda (e) (interactive "e") (mark-thing-at-mouse e 'line))
:help "Mark the line at click for a subsequent cut/copy"))
(when (region-active-p)
(define-key-after submenu [mark-none]
`(menu-item "None"
,(lambda (_e) (interactive "e") (deactivate-mark))
:help "Deactivate the region")))
(define-key-after menu [select-region]
`(menu-item "Select" ,submenu)))
menu)