GNU bug report logs -
#29083
CC Mode 5.32.99 (C/l); M-x c-defun-mode doesn't show anything
Previous Next
Reported by: Felip Moll <lipixx <at> gmail.com>
Date: Tue, 31 Oct 2017 15:42:02 UTC
Severity: normal
Done: Alan Mackenzie <acm <at> muc.de>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 29083 in the body.
You can then email your comments to 29083 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
help-debbugs <at> gnu.org
:
bug#29083
; Package
debbugs.gnu.org
.
(Tue, 31 Oct 2017 15:42:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Felip Moll <lipixx <at> gmail.com>
:
New bug report received and forwarded. Copy sent to
help-debbugs <at> gnu.org
.
(Tue, 31 Oct 2017 15:42:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
When inspecting a C code file, I pressed M-x c-defun-mode in order emacs
to show me in which function I was, but nothing happened.
Emacs : GNU Emacs 25.3.1 (x86_64-redhat-linux-gnu)
of 2017-09-15
Package: CC Mode 5.32.99 (C/l)
Buffer Style: gnu
c-emacs-features: (pps-extended-state col-0-paren posix-char-classes
gen-string-delim gen-comment-delim syntax-properties 1-bit)
current state:
==============
(setq
c-basic-offset 2
c-comment-only-line-offset '(0 . 0)
c-indent-comment-alist '((anchored-comment column . 0) (end-block
space . 1) (cpp-end-block space . 2))
c-indent-comments-syntactically-p nil
c-block-comment-prefix ""
c-comment-prefix-regexp '((pike-mode . "//+!?\\|\\**") (awk-mode .
"#+") (other . "//+\\|\\**"))
c-doc-comment-style '((java-mode . javadoc) (pike-mode . autodoc)
(c-mode . gtkdoc))
c-cleanup-list '(scope-operator)
c-hanging-braces-alist '((substatement-open before after)
(arglist-cont-nonempty))
c-hanging-colons-alist nil
c-hanging-semi&comma-criteria '(c-semi&comma-inside-parenlist)
c-backslash-column 48
c-backslash-max-column 72
c-special-indent-hook '(c-gnu-impose-minimum)
c-label-minimum-indentation 1
c-offsets-alist '((inexpr-class . +)
(inexpr-statement . +)
(lambda-intro-cont . +)
(inlambda . c-lineup-inexpr-block)
(template-args-cont c-lineup-template-args +)
(incomposition . +)
(inmodule . +)
(innamespace . +)
(inextern-lang . +)
(composition-close . 0)
(module-close . 0)
(namespace-close . 0)
(extern-lang-close . 0)
(composition-open . 0)
(module-open . 0)
(namespace-open . 0)
(extern-lang-open . 0)
(objc-method-call-cont c-lineup-ObjC-method-call-colons
c-lineup-ObjC-method-call +)
(objc-method-args-cont . c-lineup-ObjC-method-args)
(objc-method-intro . [0])
(friend . 0)
(cpp-define-intro c-lineup-cpp-define +)
(cpp-macro-cont . +)
(cpp-macro . [0])
(inclass . +)
(stream-op . c-lineup-streamop)
(arglist-cont-nonempty c-lineup-gcc-asm-reg c-lineup-arglist)
(arglist-cont c-lineup-gcc-asm-reg 0)
(comment-intro c-lineup-knr-region-comment c-lineup-comment)
(catch-clause . 0)
(else-clause . 0)
(do-while-closure . 0)
(access-label . -)
(case-label . 0)
(substatement . +)
(statement-case-intro . +)
(statement . 0)
(brace-entry-open . 0)
(brace-list-entry . 0)
(brace-list-intro . +)
(brace-list-close . 0)
(block-close . 0)
(block-open . 0)
(inher-cont . c-lineup-multi-inher)
(inher-intro . +)
(member-init-cont . c-lineup-multi-inher)
(member-init-intro . +)
(annotation-var-cont . +)
(annotation-top-cont . 0)
(topmost-intro . 0)
(knr-argdecl . 0)
(func-decl-cont . +)
(inline-close . 0)
(class-close . 0)
(class-open . 0)
(defun-block-intro . +)
(defun-close . 0)
(defun-open . 0)
(c . c-lineup-C-comments)
(string . c-lineup-dont-change)
(topmost-intro-cont first c-lineup-topmost-intro-cont
c-lineup-gnu-DEFUN-intro-cont)
(brace-list-open . +)
(inline-open . 0)
(arglist-close . c-lineup-arglist)
(arglist-intro . c-lineup-arglist-intro-after-paren)
(statement-cont . +)
(statement-case-open . +)
(label . 0)
(substatement-label . 0)
(substatement-open . +)
(knr-argdecl-intro . 5)
(statement-block-intro . +)
)
c-buffer-is-cc-mode 'c-mode
c-tab-always-indent t
c-syntactic-indentation t
c-syntactic-indentation-in-macros t
c-ignore-auto-fill '(string cpp code)
c-auto-align-backslashes t
c-backspace-function 'backward-delete-char-untabify
c-delete-function 'delete-char
c-electric-pound-behavior nil
c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "gnu"))
c-enable-xemacs-performance-kludge-p nil
c-old-style-variable-behavior nil
defun-prompt-regexp nil
tab-width 8
comment-column 32
parse-sexp-ignore-comments t
parse-sexp-lookup-properties t
auto-fill-function nil
comment-multi-line t
comment-start-skip "\\(//+\\|/\\*+\\)\\s *"
fill-prefix nil
fill-column 70
paragraph-start "[ ]*\\(//+\\|\\**\\)[ ]*$\\|^\f"
adaptive-fill-mode t
adaptive-fill-regexp "[ ]*\\(//+\\|\\**\\)[ ]*\\([
]*\\([-–!|#%;>*·•‣⁃◦]+[ ]*\\)*\\)"
)
Information forwarded
to
bug-cc-mode <at> gnu.org
:
bug#29083
; Package
cc-mode
.
(Tue, 31 Oct 2017 17:13:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 29083 <at> debbugs.gnu.org (full text, mbox):
Report reassigned to cc-mode:
Felip Moll wrote:
> When inspecting a C code file, I pressed M-x c-defun-mode in order emacs
> to show me in which function I was, but nothing happened.
>
> Emacs : GNU Emacs 25.3.1 (x86_64-redhat-linux-gnu)
> of 2017-09-15
> Package: CC Mode 5.32.99 (C/l)
> Buffer Style: gnu
> c-emacs-features: (pps-extended-state col-0-paren posix-char-classes
> gen-string-delim gen-comment-delim syntax-properties 1-bit)
>
> current state:
> ==============
> (setq
> c-basic-offset 2
> c-comment-only-line-offset '(0 . 0)
> c-indent-comment-alist '((anchored-comment column . 0) (end-block
> space . 1) (cpp-end-block space . 2))
> c-indent-comments-syntactically-p nil
> c-block-comment-prefix ""
> c-comment-prefix-regexp '((pike-mode . "//+!?\\|\\**") (awk-mode .
> "#+") (other . "//+\\|\\**"))
> c-doc-comment-style '((java-mode . javadoc) (pike-mode . autodoc)
> (c-mode . gtkdoc))
> c-cleanup-list '(scope-operator)
> c-hanging-braces-alist '((substatement-open before after)
> (arglist-cont-nonempty))
> c-hanging-colons-alist nil
> c-hanging-semi&comma-criteria '(c-semi&comma-inside-parenlist)
> c-backslash-column 48
> c-backslash-max-column 72
> c-special-indent-hook '(c-gnu-impose-minimum)
> c-label-minimum-indentation 1
> c-offsets-alist '((inexpr-class . +)
> (inexpr-statement . +)
> (lambda-intro-cont . +)
> (inlambda . c-lineup-inexpr-block)
> (template-args-cont c-lineup-template-args +)
> (incomposition . +)
> (inmodule . +)
> (innamespace . +)
> (inextern-lang . +)
> (composition-close . 0)
> (module-close . 0)
> (namespace-close . 0)
> (extern-lang-close . 0)
> (composition-open . 0)
> (module-open . 0)
> (namespace-open . 0)
> (extern-lang-open . 0)
> (objc-method-call-cont c-lineup-ObjC-method-call-colons
> c-lineup-ObjC-method-call +)
> (objc-method-args-cont . c-lineup-ObjC-method-args)
> (objc-method-intro . [0])
> (friend . 0)
> (cpp-define-intro c-lineup-cpp-define +)
> (cpp-macro-cont . +)
> (cpp-macro . [0])
> (inclass . +)
> (stream-op . c-lineup-streamop)
> (arglist-cont-nonempty c-lineup-gcc-asm-reg c-lineup-arglist)
> (arglist-cont c-lineup-gcc-asm-reg 0)
> (comment-intro c-lineup-knr-region-comment c-lineup-comment)
> (catch-clause . 0)
> (else-clause . 0)
> (do-while-closure . 0)
> (access-label . -)
> (case-label . 0)
> (substatement . +)
> (statement-case-intro . +)
> (statement . 0)
> (brace-entry-open . 0)
> (brace-list-entry . 0)
> (brace-list-intro . +)
> (brace-list-close . 0)
> (block-close . 0)
> (block-open . 0)
> (inher-cont . c-lineup-multi-inher)
> (inher-intro . +)
> (member-init-cont . c-lineup-multi-inher)
> (member-init-intro . +)
> (annotation-var-cont . +)
> (annotation-top-cont . 0)
> (topmost-intro . 0)
> (knr-argdecl . 0)
> (func-decl-cont . +)
> (inline-close . 0)
> (class-close . 0)
> (class-open . 0)
> (defun-block-intro . +)
> (defun-close . 0)
> (defun-open . 0)
> (c . c-lineup-C-comments)
> (string . c-lineup-dont-change)
> (topmost-intro-cont first c-lineup-topmost-intro-cont
> c-lineup-gnu-DEFUN-intro-cont)
> (brace-list-open . +)
> (inline-open . 0)
> (arglist-close . c-lineup-arglist)
> (arglist-intro . c-lineup-arglist-intro-after-paren)
> (statement-cont . +)
> (statement-case-open . +)
> (label . 0)
> (substatement-label . 0)
> (substatement-open . +)
> (knr-argdecl-intro . 5)
> (statement-block-intro . +)
> )
> c-buffer-is-cc-mode 'c-mode
> c-tab-always-indent t
> c-syntactic-indentation t
> c-syntactic-indentation-in-macros t
> c-ignore-auto-fill '(string cpp code)
> c-auto-align-backslashes t
> c-backspace-function 'backward-delete-char-untabify
> c-delete-function 'delete-char
> c-electric-pound-behavior nil
> c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "gnu"))
> c-enable-xemacs-performance-kludge-p nil
> c-old-style-variable-behavior nil
> defun-prompt-regexp nil
> tab-width 8
> comment-column 32
> parse-sexp-ignore-comments t
> parse-sexp-lookup-properties t
> auto-fill-function nil
> comment-multi-line t
> comment-start-skip "\\(//+\\|/\\*+\\)\\s *"
> fill-prefix nil
> fill-column 70
> paragraph-start "[ ]*\\(//+\\|\\**\\)[ ]*$\\|^\f"
> adaptive-fill-mode t
> adaptive-fill-regexp "[ ]*\\(//+\\|\\**\\)[ ]*\\([
> ]*\\([-–!|#%;>*·•‣⁃◦]+[ ]*\\)*\\)"
> )
Information forwarded
to
bug-cc-mode <at> gnu.org
:
bug#29083
; Package
cc-mode
.
(Tue, 31 Oct 2017 17:45:01 GMT)
Full text and
rfc822 format available.
Message #11 received at 29083 <at> debbugs.gnu.org (full text, mbox):
Hello, Felip.
On Tue, Oct 31, 2017 at 13:43:43 +0100, Felip Moll wrote:
> When inspecting a C code file, I pressed M-x c-defun-mode in order emacs
> to show me in which function I was, but nothing happened.
Yes, thanks for the report.
The bug here seems to be that c-defun-mode is interactive, when it
merely returns the function name rather than displaying it. You really
need a function calling c-defun-name, which then displays it. Here is
what I use. You're welcome to adapt it to do what you need:
(eval-after-load "cc-mode"
'(progn
(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)))))
(define-key c-mode-base-map "\C-cn" 'c-display-defun-name)
(put 'c-display-defun-name 'isearch-scroll t)))
[ Version information an CC Mode dump snipped, but appreciated. ]
--
Alan Mackenzie (Nuremberg, Germany).
Information forwarded
to
bug-cc-mode <at> gnu.org
:
bug#29083
; Package
cc-mode
.
(Tue, 31 Oct 2017 17:55:01 GMT)
Full text and
rfc822 format available.
Message #14 received at 29083 <at> debbugs.gnu.org (full text, mbox):
Hi Alan,
This is great. It works and I understand the issue.
Just to know, is there any plan to change it to non-interactive and
provide such an interactive command in CC Mode?
BR
Felip M
--
Felip Moll Marquès
Computer Science Engineer
E-Mail - lipixx <at> gmail.com
WebPage - http://lipix.ciutadella.es
2017-10-31 18:38 GMT+01:00 Alan Mackenzie <acm <at> muc.de>:
> Hello, Felip.
>
> On Tue, Oct 31, 2017 at 13:43:43 +0100, Felip Moll wrote:
>> When inspecting a C code file, I pressed M-x c-defun-mode in order emacs
>> to show me in which function I was, but nothing happened.
>
> Yes, thanks for the report.
>
> The bug here seems to be that c-defun-mode is interactive, when it
> merely returns the function name rather than displaying it. You really
> need a function calling c-defun-name, which then displays it. Here is
> what I use. You're welcome to adapt it to do what you need:
>
> (eval-after-load "cc-mode"
> '(progn
> (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)))))
> (define-key c-mode-base-map "\C-cn" 'c-display-defun-name)
> (put 'c-display-defun-name 'isearch-scroll t)))
>
> [ Version information an CC Mode dump snipped, but appreciated. ]
>
> --
> Alan Mackenzie (Nuremberg, Germany).
Information forwarded
to
bug-cc-mode <at> gnu.org
:
bug#29083
; Package
cc-mode
.
(Tue, 31 Oct 2017 20:26:02 GMT)
Full text and
rfc822 format available.
Message #17 received at 29083 <at> debbugs.gnu.org (full text, mbox):
Hello again, Felip.
On Tue, Oct 31, 2017 at 18:54:01 +0100, Felip Moll wrote:
> Hi Alan,
> This is great. It works and I understand the issue.
> Just to know, is there any plan to change it to non-interactive and
> provide such an interactive command in CC Mode?
Yes, I will definitely be removing the interactive specification.
As for providing a proper interactive command, perhaps you could help me
along by commenting on my function c-display-defun-name. It is merely,
at present, my own personal function. What is it missing, what does it
have which it possibly shouldn't?
I will have to document it in the CC Mode manual, too.
> BR
> Felip M
> --
> Felip Moll Marquès
> Computer Science Engineer
> E-Mail - lipixx <at> gmail.com
> WebPage - http://lipix.ciutadella.es
--
Alan Mackenzie (Nuremberg, Germany).
Reply sent
to
Alan Mackenzie <acm <at> muc.de>
:
You have taken responsibility.
(Fri, 03 Nov 2017 20:10:02 GMT)
Full text and
rfc822 format available.
Notification sent
to
Felip Moll <lipixx <at> gmail.com>
:
bug acknowledged by developer.
(Fri, 03 Nov 2017 20:10:02 GMT)
Full text and
rfc822 format available.
Message #22 received at 29083-done <at> debbugs.gnu.org (full text, mbox):
Hello, Felip.
On Tue, Oct 31, 2017 at 13:43:43 +0100, Felip Moll wrote:
> When inspecting a C code file, I pressed M-x c-defun-mode in order emacs
> to show me in which function I was, but nothing happened.
I've committed the fix to the three canonical places, namely the
standalone CC Mode project, XEmacs, and Emacs's savannah repository,
branch emacs-26.
The key sequence for the new command c-display-defun-name is C-c C-z.
Giving it a prefix arg (with C-u) also pushes the function name onto the
kill ring. You can also use this command in the middle of an
interactive search if you have set (or customised) isearch-allow-scroll
to a non-nil value.
I'm closing this bug now.
If you want any help to incorporate the fix into Emacs 25.3, please send
me private mail.
> Emacs : GNU Emacs 25.3.1 (x86_64-redhat-linux-gnu)
> of 2017-09-15
> Package: CC Mode 5.32.99 (C/l)
> Buffer Style: gnu
> c-emacs-features: (pps-extended-state col-0-paren posix-char-classes
> gen-string-delim gen-comment-delim syntax-properties 1-bit)
[ .... ]
--
Alan Mackenzie (Nuremberg, Germany).
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Sat, 02 Dec 2017 12:24:09 GMT)
Full text and
rfc822 format available.
This bug report was last modified 7 years and 262 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.