diff options
Diffstat (limited to 'lisp/progmodes/prog-mode.el')
-rw-r--r-- | lisp/progmodes/prog-mode.el | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el index d88d3505586..a8b608b018a 100644 --- a/lisp/progmodes/prog-mode.el +++ b/lisp/progmodes/prog-mode.el @@ -41,8 +41,25 @@ :type 'hook :options '(flyspell-prog-mode abbrev-mode flymake-mode display-line-numbers-mode - prettify-symbols-mode) - :group 'prog-mode) + prettify-symbols-mode)) + +(defun prog-context-menu (menu) + (when (featurep 'xref) + (define-key-after menu [prog-separator] menu-bar-separator + 'mark-whole-buffer) + (define-key-after menu [xref-find-def] + '(menu-item "Find Definition" xref-find-definitions-at-mouse + :visible (save-excursion + (mouse-set-point last-input-event) + (xref-backend-identifier-at-point (xref-find-backend))) + :help "Find definition of function or variable") + 'prog-separator) + (define-key-after menu [xref-pop] + '(menu-item "Back Definition" xref-pop-marker-stack + :visible (not (xref-marker-stack-empty-p)) + :help "Back to the position of the last search") + 'xref-find-def)) + menu) (defvar prog-mode-map (let ((map (make-sparse-keymap))) @@ -166,8 +183,7 @@ on the symbol." :version "25.1" :type '(choice (const :tag "Never unprettify" nil) (const :tag "Unprettify when point is inside" t) - (const :tag "Unprettify when point is inside or at right edge" right-edge)) - :group 'prog-mode) + (const :tag "Unprettify when point is inside or at right edge" right-edge))) (defun prettify-symbols--post-command-hook () (cl-labels ((get-prop-as-list @@ -251,6 +267,7 @@ support it." "Major mode for editing programming language source code." (setq-local require-final-newline mode-require-final-newline) (setq-local parse-sexp-ignore-comments t) + (add-hook 'context-menu-functions 'prog-context-menu 10 t) ;; Any programming language is always written left to right. (setq bidi-paragraph-direction 'left-to-right)) |