* What's the right way to define a custom info path. [not found] <1139248550.294947690.1448466260727.JavaMail.root@spooler5n-g27.priv.proxad.net> @ 2015-11-25 15:45 ` pierre.techoueyres 2015-11-25 18:02 ` Eli Zaretskii 0 siblings, 1 reply; 6+ messages in thread From: pierre.techoueyres @ 2015-11-25 15:45 UTC (permalink / raw) To: help-gnu-emacs ** The context - I'm working on Windows 7 (but I think the Windows version is not important) with Emacs 24.5.1. - My Emacs is installed on c:/programmes/emacs (c:/programmes is a custom directory, not the standard Program Files which contains spaces). - I installed some packages with package.el : - org-plus-contrib - ecb - I extracted some packages from git versions on ~/.emacs.d/site-lisp : - tramp - cedet All packages have info files. ** My attempts I tried to setup everything properly to have Info display the right version of all manuals : - tramp in c:/programmes/emacs/share/emacs/24.5.50/lisp/net/ is superseded by the one in ~/.emacs.d/site-lisp/emacs-tramp an the info manual retrieved is the right one. - cedet in ~/.emacs.d/site-lisp/cedet is loaded before the one in c:/programmes/emacs an so on for the info manual - packages cedet superseded the one in emacs-core and Info display the latest manual ** what I've in my init.el First I've disabled autoexec of package initialize with `(setq package-enable-at-startup nil)' (this is needed to allow loading of custom cedet). Then I've added tramp's install dir to my load-path. Then defined a custom-file to ~/.emacs.d/custom.el Then add to my load-path cedet install dir and load the cedet-devel-load file which initialize everything. Then call package-initialize, and *after* load my custom-file. ** My problems First I tried to setup the Info-path with the custom variable `Info-default-directory-list' but that doesn't work, because of package-activate-1 which call info-initialize so the customization of Info-default-directory-list is done too late. And worse it's not correctly initialized !!! Next I try using `Info-directory-list' but to do so I must require info and call info-initialize in my init.el and I prefer to avoid that. Then I looked at `Info-additional-directory-list' which has the same problem as `Info-default-directory-list'. ** What I think should be done. 1) `Info-default-directory-list' should be correctly initialized for the emacs w32. 1) To do that env.el should provide an `w32-substitute-env-vars' to allow replacement of %var% strings with the corresponding env vars. 2) The defcustom of Info-default-directory-list should call (substitute-env-vars configure-info-directory) instead of configure-info-directory directly. 2) `package-activate-1' should not require info nor use `info-initialize'. Instead it should add info paths on `Info-default-directory-list' or `Info-additional-directory-list' (maybe the later). ** My questions Have I do something wrong with my config ? Should I set an INFOPATH env var with absolutes paths ? If the answer of the previous questions is : No, should I open bugs ? Sorry for the really long message and the poor english. ** Some patches #+BEGIN_SRC ediff 3 files changed, 46 insertions(+), 5 deletions(-) lisp/emacs-lisp/package.el | 9 +++++---- lisp/info.el | 2 +- lisp/w32-fns.el | 40 ++++++++++++++++++++++++++++++++++++++++ modified lisp/emacs-lisp/package.el @@ -690,10 +690,11 @@ package-activate-1 loaded-files-list)))) ;; Add info node. (when (file-exists-p (expand-file-name "dir" pkg-dir)) - ;; FIXME: not the friendliest, but simple. - (require 'info) - (info-initialize) - (push pkg-dir Info-directory-list)) + (unless (member pkg-dir Info-default-directory-list) + (push pkg-dir Info-default-directory-list)) + (when (and (bound-and-true-p Info-directory-list) + (not (member pkg-dir Info-directory-list))) + (push pkg-dir Info-directory-list))) (push name package-activated-list) ;; Don't return nil. t)) modified lisp/info.el @@ -186,7 +186,7 @@ Info-default-directory-list (or (and (featurep 'ns) (let ((dir (expand-file-name "../info" data-directory))) (if (file-directory-p dir) dir))) - configure-info-directory))) + (substitute-env-vars configure-info-directory)))) (prefixes ;; Directory trees in which to look for info subdirectories (prune-directory-list '("/usr/local/" "/usr/" "/opt/" "/"))) modified lisp/w32-fns.el @@ -340,4 +340,44 @@ w32-append-code-lines (delete-matching-lines "^$\\|^;") (save-buffers-kill-emacs t)) +\f +;;;; Support for environment variables +(defconst w32-env--substitute-vars-regexp + "%\\(?:\\(?1:[[:alnum:]_\-]+\\)%\\|%\\)") + +(defun w32-substitute-env-vars (string &optional when-undefined) + "Substitute environment variables referred to in STRING. +`%FOO%' where FOO is an environment variable name means to substitute +the value of that variable. The variable name should be terminated +with a character not a letter, digit or underscore; otherwise, enclose +the entire variable name in braces. For instance, in `ab%cd-x%', +`%cd-x%' is treated as an environment variable. + +If WHEN-DEFINED is nil, references to undefined environment variables +are replaced by the empty string; if it is a function, the function is called +with the variable name as argument and should return the text with which +to replace it or nil to leave it unchanged. +If it is non-nil and not a function, references to undefined variables are +left unchanged. + +Use `%%' to insert a single percent sign." + (let ((start 0)) + (while (string-match w32-env--substitute-vars-regexp string start) + (cond ((match-beginning 1) + (let* ((var (match-string 1 string)) + (value (getenv var))) + (if (and (null value) + (if (functionp when-undefined) + (null (setq value (funcall when-undefined var))) + when-undefined)) + (setq start (match-end 0)) + (setq string (replace-match (or value "") t t string) + start (+ (match-beginning 0) (length value)))))) + (t + (setq string (replace-match "%" t t string) + start (+ (match-beginning 0) 1))))) + string)) + +(defalias 'substitute-env-vars 'w32-substitute-env-vars)) + ;;; w32-fns.el ends here #+END_SRC ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: What's the right way to define a custom info path. 2015-11-25 15:45 ` What's the right way to define a custom info path pierre.techoueyres @ 2015-11-25 18:02 ` Eli Zaretskii 2015-11-25 19:54 ` Pierre Téchoueyres 2015-11-25 19:54 ` Pierre Téchoueyres 0 siblings, 2 replies; 6+ messages in thread From: Eli Zaretskii @ 2015-11-25 18:02 UTC (permalink / raw) To: help-gnu-emacs > Date: Wed, 25 Nov 2015 16:45:07 +0100 (CET) > From: pierre.techoueyres@free.fr > > ** My problems > First I tried to setup the Info-path with the custom variable `Info-default-directory-list' but that doesn't work, because of package-activate-1 which call info-initialize so the customization of Info-default-directory-list is done too late. And worse it's not correctly initialized !!! > > > Next I try using `Info-directory-list' but to do so I must require info and call info-initialize in my init.el and I prefer to avoid that. > > Then I looked at `Info-additional-directory-list' which has the same problem as `Info-default-directory-list'. > > ** What I think should be done. > 1) `Info-default-directory-list' should be correctly initialized for the emacs w32. > 1) To do that env.el should provide an `w32-substitute-env-vars' to allow replacement of %var% strings with the corresponding env vars. > 2) The defcustom of Info-default-directory-list should call (substitute-env-vars configure-info-directory) instead of configure-info-directory directly. > > 2) `package-activate-1' should not require info nor use `info-initialize'. Instead it should add info paths on `Info-default-directory-list' or `Info-additional-directory-list' (maybe the later). > > ** My questions > Have I do something wrong with my config ? Should I set an INFOPATH env var with absolutes paths ? > If the answer of the previous questions is : No, should I open bugs ? The way to set this up correctly is to define the INFOPATH environment variable (outside Emacs) which mentions the directories with Info files in the proper order. The Emacs is supposed to automatically pick up the directories from INFOPATH, and you should be able to read your manuals without any further problems. You are instead trying to futz with Emacs variables that are not supposed to do that well. I suggest to save yourself a lot of trouble and go via INFOPATH. > ** My questions > Have I do something wrong with my config ? Should I set an INFOPATH env var with absolutes paths ? Yes to INFOPATH. > If the answer of the previous questions is : No, should I open bugs ? No, there's no bug here, AFAICT. If you want to set up Info-directory-list or Info-additional-directory-list, you must load info.elc first. (But again, I don't recommend going that way.) ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: What's the right way to define a custom info path. 2015-11-25 18:02 ` Eli Zaretskii @ 2015-11-25 19:54 ` Pierre Téchoueyres 2015-11-25 19:54 ` Pierre Téchoueyres 1 sibling, 0 replies; 6+ messages in thread From: Pierre Téchoueyres @ 2015-11-25 19:54 UTC (permalink / raw) To: help-gnu-emacs First, thanks for the answer. I note that the recommended way to setup info is to use INFOPATH. But, just for my knowledge, I would ask you about one or two things below. Eli Zaretskii wrote: >> ... >> ** My questions >> Have I do something wrong with my config ? Should I set an INFOPATH >> env var with absolutes paths ? If the answer of the previous questions >> is : No, should I open bugs ? > > The way to set this up correctly is to define the INFOPATH environment > variable (outside Emacs) which mentions the directories with Info > files in the proper order. The Emacs is supposed to automatically > pick up the directories from INFOPATH, and you should be able to read > your manuals without any further problems. > > You are instead trying to futz with Emacs variables that are not > supposed to do that well. I suggest to save yourself a lot of trouble > and go via INFOPATH. > >> ** My questions >> Have I do something wrong with my config ? Should I set an INFOPATH >> env var with absolutes paths ? > > Yes to INFOPATH. > >> If the answer of the previous questions is : No, should I open bugs ? > > No, there's no bug here, AFAICT. If you want to set up > Info-directory-list or Info-additional-directory-list, you must load > info.elc first. (But again, I don't recommend going that way.) But these two variables could be modified with the custom machinery, and so without requiring info[.elc] aren't they ? But I understand your advice that doing that is discouraged. Second, the default value for Info-default-directory-list (as computed by the defcustom in info.el) is ("%emacs_dir/info") on my windows install. Is this the expected behaviour ? this value is obviously overridden by info- initialize and become, in my install, ("c:/programmes/emacs/info"). Again is this the expected behaviour ? Third, in the windows patform (substitute-env-vars "%emacs_dir%") doesn't produce "c:/programmes/emacs" as I expected. But (substitute-env-vars "$emacs_dir") do the expansion. Is this the expected behaviour ? Is it that we should not offer a version that performs primary processing ? Thanks agin for your answers. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: What's the right way to define a custom info path. 2015-11-25 18:02 ` Eli Zaretskii 2015-11-25 19:54 ` Pierre Téchoueyres @ 2015-11-25 19:54 ` Pierre Téchoueyres 2015-11-25 20:24 ` Eli Zaretskii 1 sibling, 1 reply; 6+ messages in thread From: Pierre Téchoueyres @ 2015-11-25 19:54 UTC (permalink / raw) To: help-gnu-emacs First, thanks for the answer. I note that the recommended way to setup info is to use INFOPATH. But, just for my knowledge, I would ask you about one or two things below. Eli Zaretskii wrote: >> ... >> ** My questions >> Have I do something wrong with my config ? Should I set an INFOPATH >> env var with absolutes paths ? If the answer of the previous questions >> is : No, should I open bugs ? > > The way to set this up correctly is to define the INFOPATH environment > variable (outside Emacs) which mentions the directories with Info > files in the proper order. The Emacs is supposed to automatically > pick up the directories from INFOPATH, and you should be able to read > your manuals without any further problems. > > You are instead trying to futz with Emacs variables that are not > supposed to do that well. I suggest to save yourself a lot of trouble > and go via INFOPATH. > >> ** My questions >> Have I do something wrong with my config ? Should I set an INFOPATH >> env var with absolutes paths ? > > Yes to INFOPATH. > >> If the answer of the previous questions is : No, should I open bugs ? > > No, there's no bug here, AFAICT. If you want to set up > Info-directory-list or Info-additional-directory-list, you must load > info.elc first. (But again, I don't recommend going that way.) But these two variables could be modified with the custom machinery, and so without requiring info[.elc] aren't they ? But I understand your advice that doing that is discouraged. Second, the default value for Info-default-directory-list (as computed by the defcustom in info.el) is ("%emacs_dir/info") on my windows install. Is this the expected behaviour ? this value is obviously overridden by info- initialize and become, in my install, ("c:/programmes/emacs/info"). Again is this the expected behaviour ? Third, in the windows patform (substitute-env-vars "%emacs_dir%") doesn't produce "c:/programmes/emacs" as I expected. But (substitute-env-vars "$emacs_dir") do the expansion. Is this the expected behaviour ? Is it that we should not offer a version that performs primary processing ? Thanks agin for your answers. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: What's the right way to define a custom info path. 2015-11-25 19:54 ` Pierre Téchoueyres @ 2015-11-25 20:24 ` Eli Zaretskii 2015-11-25 22:13 ` Pierre Téchoueyres 0 siblings, 1 reply; 6+ messages in thread From: Eli Zaretskii @ 2015-11-25 20:24 UTC (permalink / raw) To: help-gnu-emacs > From: Pierre Téchoueyres <pierre.techoueyres@free.fr> > Date: Wed, 25 Nov 2015 20:54:25 +0100 > > > No, there's no bug here, AFAICT. If you want to set up > > Info-directory-list or Info-additional-directory-list, you must load > > info.elc first. (But again, I don't recommend going that way.) > > But these two variables could be modified with the custom machinery, and so > without requiring info[.elc] aren't they ? Yes, you could do that. But I interpreted your message as a request to set them up in Lisp, not via Custom. > But I understand your advice that doing that is discouraged. No, it's not discouraged. It just is harder to set up correctly, whereas the semantics of INFOPATH is simple. > Second, the default value for Info-default-directory-list (as computed by > the defcustom in info.el) is ("%emacs_dir/info") on my windows install. Is > this the expected behaviour ? Yes. That value is never used. > this value is obviously overridden by info- > initialize and become, in my install, ("c:/programmes/emacs/info"). > Again is this the expected behaviour ? Yes. > Third, in the windows patform (substitute-env-vars "%emacs_dir%") doesn't > produce "c:/programmes/emacs" as I expected. But (substitute-env-vars > "$emacs_dir") do the expansion. Is this the expected behaviour ? Yes. substitute-env-vars supports the Unix style of environment variables. > Is it that we should not offer a version that performs primary > processing ? We could, but why bother? When info loads, it recomputes the value according to where Emacs was installed. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: What's the right way to define a custom info path. 2015-11-25 20:24 ` Eli Zaretskii @ 2015-11-25 22:13 ` Pierre Téchoueyres 0 siblings, 0 replies; 6+ messages in thread From: Pierre Téchoueyres @ 2015-11-25 22:13 UTC (permalink / raw) To: help-gnu-emacs Eli Zaretskii wrote: >> From: Pierre Téchoueyres <pierre.techoueyres@free.fr> >> Date: Wed, 25 Nov 2015 20:54:25 +0100 >> >> > No, there's no bug here, AFAICT. If you want to set up >> > Info-directory-list or Info-additional-directory-list, you must load >> > info.elc first. (But again, I don't recommend going that way.) >> >> But these two variables could be modified with the custom machinery, and >> so without requiring info[.elc] aren't they ? > > Yes, you could do that. But I interpreted your message as a request > to set them up in Lisp, not via Custom. > I've tried both aproaches. First with customize, but I found that package initialization discarded what I had set. I expected that package init and customize have well worked together. >> But I understand your advice that doing that is discouraged. > > No, it's not discouraged. It just is harder to set up correctly, > whereas the semantics of INFOPATH is simple. I'll try this tomorrow. But I guess I should set all info dir, even the ones installed by packages. I must check that. > >> Second, the default value for Info-default-directory-list (as computed by >> the defcustom in info.el) is ("%emacs_dir/info") on my windows install. >> Is this the expected behaviour ? > > Yes. That value is never used. > >> this value is obviously overridden by info- >> initialize and become, in my install, ("c:/programmes/emacs/info"). >> Again is this the expected behaviour ? > > Yes. > >> Third, in the windows patform (substitute-env-vars "%emacs_dir%") doesn't >> produce "c:/programmes/emacs" as I expected. But (substitute-env-vars >> "$emacs_dir") do the expansion. Is this the expected behaviour ? > > Yes. substitute-env-vars supports the Unix style of environment > variables. > >> Is it that we should not offer a version that performs primary >> processing ? > > We could, but why bother? When info loads, it recomputes the value > according to where Emacs was installed. To offer a substitute-env-vars with windows style ? ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-11-25 22:13 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <1139248550.294947690.1448466260727.JavaMail.root@spooler5n-g27.priv.proxad.net> 2015-11-25 15:45 ` What's the right way to define a custom info path pierre.techoueyres 2015-11-25 18:02 ` Eli Zaretskii 2015-11-25 19:54 ` Pierre Téchoueyres 2015-11-25 19:54 ` Pierre Téchoueyres 2015-11-25 20:24 ` Eli Zaretskii 2015-11-25 22:13 ` Pierre Téchoueyres
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).