* bug#50508: 27.2; find-function ignore find-function-source-path
@ 2021-09-10 12:13 Thierry Volpiatto
2021-09-11 13:31 ` Lars Ingebrigtsen
0 siblings, 1 reply; 7+ messages in thread
From: Thierry Volpiatto @ 2021-09-10 12:13 UTC (permalink / raw)
To: 50508
Hello,
according its docstring, find-function should honor
find-function-source-path but it doesn't, here from emacs -Q:
(let ((find-function-source-path '("/home/thierry/tmp/emacs/lisp/emacs-lisp/")))
(find-function 'find-function))
Jump to the definition of find-function in /usr/local/share/.../find-func.el.gz
However find-library-name is using it:
(let ((find-function-source-path '("/home/thierry/tmp/emacs/lisp/emacs-lisp/")))
(find-library-name "find-func"))
;; => "/home/thierry/tmp/emacs/lisp/emacs-lisp/find-func.el"
So either it is a bug or I misunderstand something.
Thanks.
In GNU Emacs 27.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30, cairo version 1.15.10)
of 2021-03-25 built on IPadS340
Windowing system distributor 'The X.Org Foundation', version 11.0.12008000
System Description: Linux Mint 19.3
Recent messages:
[mu4e] Indexing... processed 0, updated 0
[mu4e] Indexing completed; processed 0, updated 0, cleaned-up 0
Imenu indexing buffers...done
Mark set [2 times]
Saving file /home/thierry/.emacs.d/save-scratch.el...
Wrote /home/thierry/.emacs.d/save-scratch.el
Mark set [2 times]
"/home/thierry/tmp/emacs/lisp/emacs-lisp/find-func.el"
Auto-saving...
Mark set [2 times]
Configured using:
'configure CFLAGS=-O8 --without-dbus --without-gconf
--without-gsettings --with-mailutils --with-cairo'
Configured features:
XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM GLIB NOTIFY INOTIFY ACL
LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON
PDUMPER LCMS2 GMP
Important settings:
value of $LANG: fr_FR.UTF-8
locale-coding-system: utf-8-unix
Major mode: Ilisp
Minor modes in effect:
global-undo-tree-mode: t
undo-tree-mode: t
global-ligature-mode: t
ligature-mode: t
psession-mode: t
psession-savehist-mode: t
global-git-gutter-mode: t
display-time-mode: t
winner-mode: t
show-paren-mode: t
helm-epa-mode: t
helm-descbinds-mode: t
helm-adaptive-mode: t
helm-mode: t
shell-dirtrack-mode: t
helm-popup-tip-mode: t
async-bytecomp-package-mode: t
dired-async-mode: t
minibuffer-depth-indicate-mode: t
override-global-mode: t
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
mouse-wheel-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-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: t
Load-path shadows:
/home/thierry/.emacs.d/elpa/async-20210823.528/async-bytecomp hides /usr/local/share/emacs/site-lisp/emacs-async/async-bytecomp
/home/thierry/.emacs.d/elpa/async-20210823.528/async hides /usr/local/share/emacs/site-lisp/emacs-async/async
/home/thierry/.emacs.d/elpa/async-20210823.528/async-pkg hides /usr/local/share/emacs/site-lisp/emacs-async/async-pkg
/home/thierry/.emacs.d/elpa/async-20210823.528/smtpmail-async hides /usr/local/share/emacs/site-lisp/emacs-async/smtpmail-async
/home/thierry/.emacs.d/elpa/async-20210823.528/dired-async hides /usr/local/share/emacs/site-lisp/emacs-async/dired-async
/home/thierry/.emacs.d/elpa/async-20210823.528/async-autoloads hides /usr/local/share/emacs/site-lisp/emacs-async/async-autoloads
/home/thierry/.emacs.d/elpa/seq-2.22/seq hides /usr/local/share/emacs/27.2/lisp/emacs-lisp/seq
Features:
(shadow mail-extr epa-mail face-remap emacsbug helm-command eieio-opt
speedbar sb-image ezimage dframe help-fns radix-tree add-log which-func
image-file w3m-symbol w3m-filter w3m-form w3m-cookie w3m-tabmenu
w3m-session w3m-search helm-w3m w3m-bookmark w3m doc-view jka-compr
image-mode exif timezone w3m-hist w3m-fb bookmark-w3m w3m-ems
w3m-favicon w3m-image tab-line w3m-proc w3m-util addressbook-bookmark
mu4e-config org-mu4e mu4e-contrib mu4e-patch mu4e mu4e-org mu4e-view
gnus-art mm-uu mml2015 mm-view mml-smime smime dig gnus-sum gnus-group
gnus-undo gnus-start gnus-cloud nnimap nnmail mail-source utf7 netrc
nnoo gnus-spec gnus-int gnus-range gnus-win mu4e-main mu4e-headers
mu4e-lists mu4e-compose mu4e-draft mu4e-actions smtpmail sendmail
mu4e-search mu4e-bookmarks mu4e-mark mu4e-message shr svg dom flow-fill
hl-line mu4e-contacts mu4e-update mu4e-folders mu4e-server mu4e-context
mu4e-vars mu4e-helpers ido mu4e-meta helm-ring helm-x-files
helm-for-files helm-bookmark bookmark pp tramp-archive tramp-gvfs dbus
em-unix em-term term disp-table ehelp em-script em-prompt em-ls em-hist
em-pred em-glob em-dirs esh-var em-cmpl em-basic em-banner em-alias
esh-mode eshell esh-cmd esh-ext esh-opt esh-proc esh-io esh-arg
esh-module esh-groups esh-util esh-toggle helm-ls-git vc vc-dispatcher
make-mode sh-script smie executable conf-mode vc-git diff-mode
bug-reference naquadah-theme view solar cal-dst holidays hol-loaddefs
tv-utils undo-tree diff rx ligature rainbow-mode color psession frameset
log-view pcvs-util pcmpl-git cl-indent ffap autocrypt-message message
rmc puny rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse
rfc2231 mailabbrev gmm-utils mailheader autocrypt-gnus gnus nnheader
gnus-util rmail rmail-loaddefs rfc2047 rfc2045 text-property-search
mail-utils mm-util mail-prsvr autocrypt-mu4e autocrypt ietf-drums
config-w3m git-gutter mule-util appt diary-lib diary-loaddefs gud
pcomplete-extension pcmpl-unix pcmpl-gnu iterator wdired dired-extension
org-config ob-gnuplot org-crypt net-utils time pcase all-the-icons
all-the-icons-faces data-material data-weathericons data-octicons
data-fileicons data-faicons data-alltheicons winner w3m-wget wget
thingatpt wget-sysdep autotest-mode autoconf-mode paren woman man ediff
ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init
ediff-util init-helm helm-fd epa derived epg epg-config helm-epa
helm-misc helm-imenu imenu helm-elisp-package helm-find helm-org org ob
ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-footnote org-src
ob-comint org-pcomplete org-list org-faces org-entities noutline outline
org-version ob-emacs-lisp ob-core ob-eval org-table ol org-keys
org-compat advice org-macs org-loaddefs cal-menu calendar cal-loaddefs
helm-external helm-net xml url url-proxy url-privacy url-expand
url-methods url-history url-cookie url-domsuf url-util mailcap
isearch-light helm-descbinds cus-edit wid-edit helm-ipython helm-elisp
helm-eval edebug backtrace find-func helm-info python tramp-sh
helm-adaptive helm-mode helm-files filenotify tramp tramp-loaddefs
trampver tramp-integration files-x tramp-compat shell pcomplete
parse-time iso8601 time-date ls-lisp helm-buffers helm-occur helm-tags
helm-locate helm-grep wgrep-helm wgrep grep compile comint ansi-color
ring helm-regexp format-spec helm-utils helm-help helm-types
helm-extensions-autoloads helm-config helm-autoloads helm async-bytecomp
helm-global-bindings helm-easymenu helm-source helm-multi-match helm-lib
dired-async dired-aux dired dired-loaddefs async popup diminish cl-extra
help-mode mb-depth server edmacro kmacro avoid cus-start cus-load
use-package use-package-ensure use-package-delight use-package-diminish
use-package-bind-key bind-key easy-mmode use-package-core info w3m-load
package easymenu browse-url url-handlers url-parse auth-source cl-seq
eieio eieio-core cl-macs eieio-loaddefs password-cache json subr-x map
url-vars seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib
tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type
mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode
lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
timer select scroll-bar mouse jit-lock font-lock syntax facemenu
font-core term/tty-colors frame minibuffer cl-generic cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european
ethiopic indian cyrillic chinese composite charscript charprop
case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote threads inotify lcms2
dynamic-setting font-render-setting cairo move-toolbar gtk x-toolkit x
multi-tty make-network-process emacs)
Memory information:
((conses 16 606804 343184)
(symbols 48 38186 3)
(strings 32 158341 27907)
(string-bytes 1 5050526)
(vectors 16 81276)
(vector-slots 8 1203338 169776)
(floats 8 1751 947)
(intervals 56 13168 2111)
(buffers 1000 134))
<#secure method=pgpmime mode=sign>
--
Thierry
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#50508: 27.2; find-function ignore find-function-source-path
2021-09-10 12:13 bug#50508: 27.2; find-function ignore find-function-source-path Thierry Volpiatto
@ 2021-09-11 13:31 ` Lars Ingebrigtsen
2021-09-11 16:29 ` Thierry Volpiatto
0 siblings, 1 reply; 7+ messages in thread
From: Lars Ingebrigtsen @ 2021-09-11 13:31 UTC (permalink / raw)
To: Thierry Volpiatto; +Cc: 50508
Thierry Volpiatto <thievol@posteo.net> writes:
> according its docstring, find-function should honor
> find-function-source-path but it doesn't, here from emacs -Q:
>
> (let ((find-function-source-path '("/home/thierry/tmp/emacs/lisp/emacs-lisp/")))
> (find-function 'find-function))
> Jump to the definition of find-function in /usr/local/share/.../find-func.el.gz
>
> However find-library-name is using it:
>
> (let ((find-function-source-path '("/home/thierry/tmp/emacs/lisp/emacs-lisp/")))
> (find-library-name "find-func"))
> ;; => "/home/thierry/tmp/emacs/lisp/emacs-lisp/find-func.el"
>
> So either it is a bug or I misunderstand something.
I'm not a sure whether it's a bug or not, but the functions certainly
don't work the way they're documented. There's a lot of functions
involved here, but it looks like this has been broken for many years
(since before Emacs 25.1, at least).
Currently the implementation basically just looks a load-history, so
this is wrong:
---
The library where FUNCTION is defined is searched for in
‘find-function-source-path’, if non-nil, otherwise in ‘load-path’.
---
That is, it doesn't do any searching at all, as far as I can tell.
`find-library-name', on the other hand, does search.
There's several different issues here.
1) If the function is defined, say, with `M-: (defun foo ())'
then `find-function-library' will return nil (which is correct), which
means that `find-function-search-for-symbol' will give up immediately.
But it's hard to say what it should do otherwise -- look in all .el
files in the load path to find it? This is what it's documented to do:
---
If the file where FUNCTION is defined is not known, then it is
searched for in `find-function-source-path' if non-nil, otherwise
in `load-path'."
---
This functionality was apparently lost in this change
commit 2cd6a032aa501a3964be9d222e65bb44ba9960f7
Author: Richard M. Stallman <rms@gnu.org>
AuthorDate: Mon Jun 29 17:23:25 1998 +0000
or... well, I'm not sure, but it stopped doing regexp searches through
all .el files at some point, and instead just uses the load history.
I think fixing this isn't... useful.
2) If the function was defined in a .el file (as this bug report
describes), then Emacs knows the name of the library. But it doesn't
then use `find-library-name' to locate the library, but just uses
load-history. Fixing this is pretty easy -- just use
`find-library-name' and use that instead of the value from
`load-history'.
Anybody else have any insights here?
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#50508: 27.2; find-function ignore find-function-source-path
2021-09-11 13:31 ` Lars Ingebrigtsen
@ 2021-09-11 16:29 ` Thierry Volpiatto
2021-09-13 7:48 ` Lars Ingebrigtsen
0 siblings, 1 reply; 7+ messages in thread
From: Thierry Volpiatto @ 2021-09-11 16:29 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: 50508
[-- Attachment #1: Type: text/plain, Size: 542 bytes --]
Lars Ingebrigtsen <larsi@gnus.org> writes:
> 2) If the function was defined in a .el file (as this bug report
> describes), then Emacs knows the name of the library. But it doesn't
> then use `find-library-name' to locate the library, but just uses
> load-history. Fixing this is pretty easy -- just use
> `find-library-name' and use that instead of the value from
> `load-history'.
Yes, this is working fine, it is what I am using actually.
https://github.com/emacs-helm/helm/blob/master/helm-lib.el#L1230
--
Thierry
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 686 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#50508: 27.2; find-function ignore find-function-source-path
2021-09-11 16:29 ` Thierry Volpiatto
@ 2021-09-13 7:48 ` Lars Ingebrigtsen
2021-09-13 15:24 ` Thierry Volpiatto
0 siblings, 1 reply; 7+ messages in thread
From: Lars Ingebrigtsen @ 2021-09-13 7:48 UTC (permalink / raw)
To: Thierry Volpiatto; +Cc: 50508
Thierry Volpiatto <thievol@posteo.net> writes:
> Lars Ingebrigtsen <larsi@gnus.org> writes:
>
>> 2) If the function was defined in a .el file (as this bug report
>> describes), then Emacs knows the name of the library. But it doesn't
>> then use `find-library-name' to locate the library, but just uses
>> load-history. Fixing this is pretty easy -- just use
>> `find-library-name' and use that instead of the value from
>> `load-history'.
>
> Yes, this is working fine, it is what I am using actually.
> https://github.com/emacs-helm/helm/blob/master/helm-lib.el#L1230
I'm just wondering whether it makes sense to fix 2) if we're not fixing
1), and I don't think fixing 1) is a good idea (it'd make the function
massively slower).
Instead I'm wondering whether we should just fix the doc strings here to
not mention `find-function-source-path' in `find-function' (etc), so
that the doc string matches the implementation, and instead mention
`find-library-name' (in the doc string) for your use case.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#50508: 27.2; find-function ignore find-function-source-path
2021-09-13 7:48 ` Lars Ingebrigtsen
@ 2021-09-13 15:24 ` Thierry Volpiatto
2021-09-14 11:45 ` Lars Ingebrigtsen
0 siblings, 1 reply; 7+ messages in thread
From: Thierry Volpiatto @ 2021-09-13 15:24 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: 50508
[-- Attachment #1: Type: text/plain, Size: 1412 bytes --]
Lars Ingebrigtsen <larsi@gnus.org> writes:
> Thierry Volpiatto <thievol@posteo.net> writes:
>
>> Lars Ingebrigtsen <larsi@gnus.org> writes:
>>
>>> 2) If the function was defined in a .el file (as this bug report
>>> describes), then Emacs knows the name of the library. But it doesn't
>>> then use `find-library-name' to locate the library, but just uses
>>> load-history. Fixing this is pretty easy -- just use
>>> `find-library-name' and use that instead of the value from
>>> `load-history'.
>>
>> Yes, this is working fine, it is what I am using actually.
>> https://github.com/emacs-helm/helm/blob/master/helm-lib.el#L1230
>
> I'm just wondering whether it makes sense to fix 2) if we're not fixing
> 1), and I don't think fixing 1) is a good idea (it'd make the function
> massively slower).
>
> Instead I'm wondering whether we should just fix the doc strings here to
> not mention `find-function-source-path' in `find-function' (etc), so
> that the doc string matches the implementation, and instead mention
> `find-library-name' (in the doc string) for your use case.
Yes sure, that's ok for me, I was just surprized to not be able to
let-bound `find-function-source-path` and run find-function just after
with the expected effect described in docstring, once you know it, you
can just write a function using `find-library-name` like I did.
Thanks.
--
Thierry
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 686 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#50508: 27.2; find-function ignore find-function-source-path
2021-09-13 15:24 ` Thierry Volpiatto
@ 2021-09-14 11:45 ` Lars Ingebrigtsen
2021-09-14 17:24 ` Thierry Volpiatto
0 siblings, 1 reply; 7+ messages in thread
From: Lars Ingebrigtsen @ 2021-09-14 11:45 UTC (permalink / raw)
To: Thierry Volpiatto; +Cc: 50508
Thierry Volpiatto <thievol@posteo.net> writes:
> Yes sure, that's ok for me, I was just surprized to not be able to
> let-bound `find-function-source-path` and run find-function just after
> with the expected effect described in docstring, once you know it, you
> can just write a function using `find-library-name` like I did.
Yup. So I've now updated the documentation here, and I've also renamed
the variable to find-library-source-path (but kept the old name as an
obsolete variable alias).
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-09-14 17:24 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-09-10 12:13 bug#50508: 27.2; find-function ignore find-function-source-path Thierry Volpiatto
2021-09-11 13:31 ` Lars Ingebrigtsen
2021-09-11 16:29 ` Thierry Volpiatto
2021-09-13 7:48 ` Lars Ingebrigtsen
2021-09-13 15:24 ` Thierry Volpiatto
2021-09-14 11:45 ` Lars Ingebrigtsen
2021-09-14 17:24 ` Thierry Volpiatto
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.