Subject: bug#11476: 23.1; which-func-cleanup-function call and documentation mismatch

From: Jack Duthen <[email-masked]>
Date: Tue, 15 May 2012 17:07:13 +0200

--text follows this line--

Please write in English if possible, because the Emacs maintainers
usually do not have translators to read other languages for them.

Your bug report will be posted to the [email-masked] mailing list,
and to the gnu.emacs.bug news group.

Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:

Hi!

I'm using "which-func" and I find it very convenient!

I tried to use a customized "which-func-cleanup-function"
and found that its doc string says:
  "Function to transform a string before displaying it in the mode line.
The function is called with one argument, the string to display..."

It seems that the argument given to "which-func-cleanup-function"
can also be a list with one string.

Using this test function:

;;; -------------------
;;; To help see the bug
(defun jd-test-which-func-cleanup-function (fun-name)
  (message "Type of fun-name '%s' is %s" fun-name (type-of fun-name))
  (when (consp fun-name)
    (message "Type of (car fun-name) '%s' is %s" (car fun-name)
(type-of (car fun-name))))
  (setq jd-ielm-fun-name fun-name)          ; to explore it using ielm
  fun-name)

;;; (setq which-func-cleanup-function 'jd-test-which-func-cleanup-function)
;;; (setq which-func-cleanup-function ())
;;; -------------------

I got the messages (while editing the file "which-func.el"):
Type of fun-name '(which-function)' is cons
Type of (car fun-name) 'which-function' is string

So, either the doc string of "which-func-cleanup-function" is wrong,
either "which-function" should return the "car" of the value it returns.

Since the code of "which-function" is not that simple, I can't clearly
and surely tell which one is wrong and fix the bug by myself.

I noticed that the function "which-function" contains the following lines:
    ;; Try using add-log support.
    (when (null name)
      (setq name (add-log-current-defun)))

And it seems that "add-log-current-defun" returns a string.
So, maybe, "which-function" should return the "car" of "name"
when it is a list.

Can you fix it?

)jack(

If Emacs crashed, and you have the Emacs process in the gdb debugger,
please include the output from the following gdb commands:
    `bt full' and `xbacktrace'.
If you would like to further debug the crash, please read the file
/usr/share/emacs/23.1/etc/DEBUG for instructions.

In GNU Emacs 23.1.1 (i686-pc-linux-gnu, GTK+ Version 2.22.0)
 of 2011-03-04 on roseapple, modified by Debian
Windowing system distributor `The X.Org Foundation', version 11.0.10900000
configured using `configure  '--build=i686-linux-gnu'
'--host=i686-linux-gnu' '--prefix=/usr' '--sharedstatedir=/var/lib'
'--libexecdir=/usr/lib' '--localstatedir=/var/lib'
'--infodir=/usr/share/info' '--mandir=/usr/share/man' '--with-pop=yes'
'--enable-locallisppath=/etc/emacs23:/etc/emacs:/usr/local/share/emacs/23.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/23.1/site-lisp:/usr/share/emacs/site-lisp:/usr/share/emacs/23.1/leim'
'--with-x=yes' '--with-x-toolkit=gtk' '--with-toolkit-scroll-bars'
'build_alias=i686-linux-gnu' 'host_alias=i686-linux-gnu'
'CFLAGS=-DDEBIAN -g -O2' 'LDFLAGS=-g' 'CPPFLAGS=''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: fr_FR.utf8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default-enable-multibyte-characters: t

Major mode: Emacs-Lisp

Minor modes in effect:
  diff-auto-refine-mode: t
  eldoc-mode: t
  which-function-mode: t
  show-paren-mode: t
  recentf-mode: t
  desktop-save-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  global-auto-composition-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: (only . t)

Recent input:
C-v C-u C-v C-u C-v <help-echo> <help-echo> <help-echo>
<down-mouse-1> <mouse-1> C-x b <return> M-x b u r r
<tab> <backspace> <tab> <return> C-x b j M-p <return>
<switch-frame> <switch-frame> <switch-frame> <switch-frame>
<help-echo> <help-echo> <down-mouse-5> <mouse-5> <double-down-mouse-5>
<double-mouse-5> <down-mouse-5> <mouse-5> <down-mouse-1>
<mouse-1> C-s C-w C-w C-w C-w C-x o C-s C-s C-s <down-mouse-1>
<mouse-1> C-s C-w C-r C-r C-r C-r C-r C-r C-r C-r C-r
C-r C-r C-r C-u C-u M-v <down-mouse-4> <mouse-4> <down-mouse-4>
<mouse-4> <down-mouse-4> <mouse-4> <down-mouse-1> <mouse-1>
C-h f <return> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> M-w M-: C-y <return> <down-mouse-5>
<mouse-5> <down-mouse-1> <mouse-movement> <mouse-movement>
<drag-mouse-1> <down-mouse-5> <mouse-5> <down-mouse-5>
<mouse-5> <down-mouse-1> <mouse-1> C-x C-e <down-mouse-1>
<mouse-1> C-x C-e <down-mouse-1> <mouse-1> C-x b <return>
C-x b j <tab> M-p <return> <help-echo> <down-mouse-1>
<mouse-1> M-d e x p l o r e M-f M-f <M-backspace> u
s i n g <down-mouse-1> <mouse-1> SPC h e l p C-x C-s
C-p - - - - - C-x C-s <help-echo> <down-mouse-1> <mouse-1>
C-h f <return> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> M-w <switch-frame> C-v C-v C-v C-v
C-v M-: C-y <return> C-u M-v C-u M-v M-: M-p <return>
<switch-frame> C-x o <help-echo> <down-mouse-1> <mouse-2>
<help-echo> <down-mouse-5> <mouse-5> <down-mouse-5>
<mouse-5> <down-mouse-5> <mouse-5> <down-mouse-5> <mouse-5>
<down-mouse-5> <mouse-5> <double-down-mouse-5> <double-mouse-5>
<down-mouse-5> <mouse-5> <down-mouse-5> <mouse-5> <down-mouse-5>
<mouse-5> <down-mouse-5> <mouse-5> <down-mouse-5> <mouse-5>
<switch-frame> <up> <up> <up> <up> <up> <right> <left>
<down> <down> <down> <down> <down> <switch-frame> C-x
C-g M-x M-p <return> C-x o q <down-mouse-1> <mouse-movement>
<mouse-1> C-M-x <down-mouse-1> <mouse-1> C-M-b C-M-SPC
M-w C-x o M-: C-y <return> M-: M-p C-e C-b C-M-b C-b
C-k ( ) ) <return> <down-mouse-5> <mouse-5> <down-mouse-5>
<mouse-5> <down-mouse-5> <mouse-5> <down-mouse-5> <mouse-5>
<down-mouse-4> <mouse-4> <down-mouse-5> <mouse-5> <help-echo>
<down-mouse-1> <mouse-1> C-s C-w C-x o C-s C-s C-s
C-s C-s C-s C-s C-s C-s C-s C-s C-s C-s C-s C-a <help-echo>
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo>
<menu-bar> <help-menu> <send-emacs-bug-report>

Recent messages:
uncompressing add-log.el.gz...done
Note: file is write protected
jd-test-which-func-cleanup-function
Mark set
jd-test-which-func-cleanup-function
Type of fun-name '(which-function)' is cons
Type of (car fun-name) 'which-function' is string
nil
Mark saved where search started [2 times]
/usr/bin/mail is not an executable.  Setting mail-interactive to t.