Introduce a function to CC Mode which displays the current function name

Remove an erroneous interactive specification from two functions.

* lisp/progmodes/cc-cmds.el (c-display-defun-name): New command.
(c-defun-name, c-cpp-define-name): Remove interactive specification.

* lisp/progmodes/cc-mode.el (c-mode-base-map): Add binding C-c C-z for the new
command.

* doc/misc/cc-mode.texi (Other Commands): Add documentation for the new
command.
This commit is contained in:
Alan Mackenzie 2017-11-03 19:45:17 +00:00
parent 383abc8898
commit a0d30d6369
3 changed files with 32 additions and 3 deletions

View file

@ -1760,6 +1760,7 @@ file. For commands that you can use to view the effect of your changes,
see @ref{Indentation Commands} and @ref{Filling and Breaking}. see @ref{Indentation Commands} and @ref{Filling and Breaking}.
For details of the @ccmode{} style system, see @ref{Styles}. For details of the @ccmode{} style system, see @ref{Styles}.
@item @kbd{C-c :} (@code{c-scope-operator}) @item @kbd{C-c :} (@code{c-scope-operator})
@kindex C-c : @kindex C-c :
@findex c-scope-operator @findex c-scope-operator
@ -1768,6 +1769,18 @@ In C++, it is also sometimes desirable to insert the double-colon scope
operator without performing the electric behavior of colon insertion. operator without performing the electric behavior of colon insertion.
@kbd{C-c :} does just this. @kbd{C-c :} does just this.
@item @kbd{C-c C-z} (@code{c-display-defun-name})
@kindex C-c C-z
@findex c-display-defun-name
@findex display-defun-name (c-)
Display the current function name, if any, in the minibuffer.
Additionally, if a prefix argument is given, push the function name to
the kill ring. If there is no current function,
@code{c-display-defun-name} does nothing. In Emacs, you can use this
command in the middle of an interactive search if you set the
customizable option @code{isearch-allow-scoll} to non-@code{nil}.
@xref{Not Exiting Isearch,,,emacs, GNU Emacs Manual}.
@item @kbd{C-c C-\} (@code{c-backslash-region}) @item @kbd{C-c C-\} (@code{c-backslash-region})
@kindex C-c C-\ @kindex C-c C-\
@findex c-backslash-region @findex c-backslash-region

View file

@ -1821,7 +1821,6 @@ the open-parenthesis that starts a defun; see `beginning-of-defun'."
"Return the name of the current defun, or NIL if there isn't one. "Return the name of the current defun, or NIL if there isn't one.
\"Defun\" here means a function, or other top level construct \"Defun\" here means a function, or other top level construct
with a brace block." with a brace block."
(interactive)
(c-save-buffer-state (c-save-buffer-state
(beginning-of-defun-function end-of-defun-function (beginning-of-defun-function end-of-defun-function
where pos name-end case-fold-search) where pos name-end case-fold-search)
@ -2048,6 +2047,23 @@ with a brace block."
(eq (char-after) ?\{) (eq (char-after) ?\{)
(cons (point-min) (point-max)))))))) (cons (point-min) (point-max))))))))
(defun c-display-defun-name (&optional arg)
"Display the name of the current CC mode defun and the position in it.
With a prefix arg, push the name onto the kill ring too."
(interactive "P")
(save-restriction
(widen)
(c-save-buffer-state ((name (c-defun-name))
(limits (c-declaration-limits t))
(point-bol (c-point 'bol)))
(when name
(message "%s. Line %s/%s." name
(1+ (count-lines (car limits) point-bol))
(count-lines (car limits) (cdr limits)))
(if arg (kill-new name))
(sit-for 3 t)))))
(put 'c-display-defun-name 'isearch-scroll t)
(defun c-mark-function () (defun c-mark-function ()
"Put mark at end of the current top-level declaration or macro, point at beginning. "Put mark at end of the current top-level declaration or macro, point at beginning.
If point is not inside any then the closest following one is If point is not inside any then the closest following one is
@ -2092,7 +2108,6 @@ function does not require the declaration to contain a brace block."
(defun c-cpp-define-name () (defun c-cpp-define-name ()
"Return the name of the current CPP macro, or NIL if we're not in one." "Return the name of the current CPP macro, or NIL if we're not in one."
(interactive)
(let (case-fold-search) (let (case-fold-search)
(save-excursion (save-excursion
(and c-opt-cpp-macro-define-start (and c-opt-cpp-macro-define-start

View file

@ -389,7 +389,8 @@ control). See \"cc-mode.el\" for more info."
;;(define-key c-mode-base-map "\C-c\C-v" 'c-version) ;;(define-key c-mode-base-map "\C-c\C-v" 'c-version)
;; (define-key c-mode-base-map "\C-c\C-y" 'c-toggle-hungry-state) Commented out by ACM, 2005-11-22. ;; (define-key c-mode-base-map "\C-c\C-y" 'c-toggle-hungry-state) Commented out by ACM, 2005-11-22.
(define-key c-mode-base-map "\C-c\C-w" 'c-subword-mode) (define-key c-mode-base-map "\C-c\C-w" 'c-subword-mode)
(define-key c-mode-base-map "\C-c\C-k" 'c-toggle-comment-style)) (define-key c-mode-base-map "\C-c\C-k" 'c-toggle-comment-style)
(define-key c-mode-base-map "\C-c\C-z" 'c-display-defun-name))
;; We don't require the outline package, but we configure it a bit anyway. ;; We don't require the outline package, but we configure it a bit anyway.
(cc-bytecomp-defvar outline-level) (cc-bytecomp-defvar outline-level)