* user-controlled load-path extension: load-dir @ 2011-03-01 20:32 Ted Zlatanov 2011-03-03 21:07 ` Dimitri Fontaine 0 siblings, 1 reply; 64+ messages in thread From: Ted Zlatanov @ 2011-03-01 20:32 UTC (permalink / raw) To: emacs-devel Sorry if this has been discussed before. I don't recall such a discussion and the search terms are too generic. I think it's useful to load on startup any .el files placed in a particular directory (if the user approves the directory). For example, if the user sets `load-dir' to '("~/.emacs.d/load"), ~/.emacs.d/load/*.el will be loaded on startup. The `load-path' is not involved, this would be a straight `eval' call. `load-dir' is just a name suggestion. This can be done on the user side, of course, but if Emacs had a built-in facility to do it, enabling and controlling Emacs configurations in a modular way would be easier, especially for new users. Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-01 20:32 user-controlled load-path extension: load-dir Ted Zlatanov @ 2011-03-03 21:07 ` Dimitri Fontaine 2011-03-04 9:55 ` Julien Danjou 0 siblings, 1 reply; 64+ messages in thread From: Dimitri Fontaine @ 2011-03-03 21:07 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Ted Zlatanov <tzz@lifelogs.com> writes: > I think it's useful to load on startup any .el files placed in a > particular directory (if the user approves the directory). For example, > if the user sets `load-dir' to '("~/.emacs.d/load"), > ~/.emacs.d/load/*.el will be loaded on startup. The `load-path' is not > involved, this would be a straight `eval' call. The same way we have user-init-file, I too would welcome Emacs to offer a default user-load-path that's known to be e.g. ~/.emacs.d/load.d. That would allow third party elisp code to just drop a file in there and have users all set to use a new facility. For example, I would use that for el-get and bootstrapping it into the user's setup would become easier, and would allo to avoid having to edit user-init-file. Regards, -- dim ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-03 21:07 ` Dimitri Fontaine @ 2011-03-04 9:55 ` Julien Danjou 2011-03-04 17:18 ` Tom Tromey 0 siblings, 1 reply; 64+ messages in thread From: Julien Danjou @ 2011-03-04 9:55 UTC (permalink / raw) To: Dimitri Fontaine; +Cc: Ted Zlatanov, emacs-devel [-- Attachment #1: Type: text/plain, Size: 575 bytes --] On Thu, Mar 03 2011, Dimitri Fontaine wrote: > The same way we have user-init-file, I too would welcome Emacs to offer > a default user-load-path that's known to be e.g. ~/.emacs.d/load.d. > That would allow third party elisp code to just drop a file in there and > have users all set to use a new facility. Especially if Emacs was able to build and load an autoload file for the files placed in that directory. The user would have *nothing* to do to use a new feature. Not even touching its `user-init-file'. -- Julien Danjou ❱ http://julien.danjou.info [-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --] ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 9:55 ` Julien Danjou @ 2011-03-04 17:18 ` Tom Tromey 2011-03-04 18:04 ` Ted Zlatanov 2011-03-04 18:37 ` Dimitri Fontaine 0 siblings, 2 replies; 64+ messages in thread From: Tom Tromey @ 2011-03-04 17:18 UTC (permalink / raw) To: Dimitri Fontaine; +Cc: Ted Zlatanov, emacs-devel Julien> Especially if Emacs was able to build and load an autoload file for the Julien> files placed in that directory. The user would have *nothing* to do to Julien> use a new feature. Not even touching its `user-init-file'. package.el does this, more or less. It doesn't just load all files, but does some version and dependency checks. But, e.g., it is trivial for el-get to be supplied as a package. This feature is enabled by default in Emacs 24. Tom ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 17:18 ` Tom Tromey @ 2011-03-04 18:04 ` Ted Zlatanov 2011-03-04 18:37 ` Dimitri Fontaine 1 sibling, 0 replies; 64+ messages in thread From: Ted Zlatanov @ 2011-03-04 18:04 UTC (permalink / raw) To: emacs-devel On Fri, 04 Mar 2011 10:18:03 -0700 Tom Tromey <tromey@redhat.com> wrote: Julien> Especially if Emacs was able to build and load an autoload file for the Julien> files placed in that directory. The user would have *nothing* to do to Julien> use a new feature. Not even touching its `user-init-file'. Tom> package.el does this, more or less. It doesn't just load all files, but Tom> does some version and dependency checks. But, e.g., it is trivial for Tom> el-get to be supplied as a package. This feature is enabled by default Tom> in Emacs 24. OK, but there's no general facility to do this. If I want to bundle up some code and load it on startup, I have to modify the load-path and my startup .emacs right now (which encourages monolithic configurations and other bad practices). I don't think package.el should be required to do this kind of modularization. As far as el-get, I guess it could be made into a package, but it's a package manager and has to work in cases where package.el is not available or the user doesn't want to use it. I don't think el-get is the only use for the general load-dir facility, in any case. Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 17:18 ` Tom Tromey 2011-03-04 18:04 ` Ted Zlatanov @ 2011-03-04 18:37 ` Dimitri Fontaine 2011-03-04 19:35 ` Tom Tromey 1 sibling, 1 reply; 64+ messages in thread From: Dimitri Fontaine @ 2011-03-04 18:37 UTC (permalink / raw) To: Tom Tromey; +Cc: Ted Zlatanov, emacs-devel Tom Tromey <tromey@redhat.com> writes: > package.el does this, more or less. It doesn't just load all files, but > does some version and dependency checks. But, e.g., it is trivial for > el-get to be supplied as a package. This feature is enabled by default > in Emacs 24. Would it be accepted, though? If yes, I'd better go begin those FSF paperwork. Regards, -- dim ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 18:37 ` Dimitri Fontaine @ 2011-03-04 19:35 ` Tom Tromey 2011-03-04 19:45 ` Dimitri Fontaine 0 siblings, 1 reply; 64+ messages in thread From: Tom Tromey @ 2011-03-04 19:35 UTC (permalink / raw) To: Dimitri Fontaine; +Cc: Ted Zlatanov, emacs-devel Tom> package.el does this, more or less. It doesn't just load all files, but Tom> does some version and dependency checks. But, e.g., it is trivial for Tom> el-get to be supplied as a package. This feature is enabled by default Tom> in Emacs 24. Dimitri> Would it be accepted, though? If yes, I'd better go begin those FSF Dimitri> paperwork. Suppose Emacs did add a "load all the files in a directory" feature. You would tell your users "download this and install it here". Or you would supply some elisp on a web page for them to eval, and this elisp would do the downloading. Well, you can do the exact same things with a package. You don't need it to be in elpa.gnu.org. Tom ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 19:35 ` Tom Tromey @ 2011-03-04 19:45 ` Dimitri Fontaine 2011-03-04 19:54 ` Ted Zlatanov 2011-03-04 20:08 ` Tom Tromey 0 siblings, 2 replies; 64+ messages in thread From: Dimitri Fontaine @ 2011-03-04 19:45 UTC (permalink / raw) To: Tom Tromey; +Cc: Ted Zlatanov, emacs-devel Tom Tromey <tromey@redhat.com> writes: > Suppose Emacs did add a "load all the files in a directory" feature. > You would tell your users "download this and install it here". > Or you would supply some elisp on a web page for them to eval, and this > elisp would do the downloading. > > Well, you can do the exact same things with a package. You don't need > it to be in elpa.gnu.org. What el-get currently does not do is editing any user's file. What's proposed in this thread is a way for el-get to bootstrap itself in a user's setup without having to edit the user's init file. Now, this would be answered by a known user's default load-path. Julien and Ted where adding to it actual loading then autoloads, I would live without those. Regards, -- dim ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 19:45 ` Dimitri Fontaine @ 2011-03-04 19:54 ` Ted Zlatanov 2011-03-04 20:21 ` Dimitri Fontaine ` (2 more replies) 2011-03-04 20:08 ` Tom Tromey 1 sibling, 3 replies; 64+ messages in thread From: Ted Zlatanov @ 2011-03-04 19:54 UTC (permalink / raw) To: emacs-devel On Fri, 04 Mar 2011 20:45:45 +0100 Dimitri Fontaine <dim@tapoueh.org> wrote: DF> What's proposed in this thread is a way for el-get to bootstrap DF> itself in a user's setup without having to edit the user's init DF> file. s/el-get/any Emacs Lisp code/ The only reason I can think why this would not be acceptable is security. Otherwise this makes a lot of sense. For security I would propose checksumming any code in the load-dir and when new files are added or existing files are changed, query the user and store a file checksum in an alist. I'm willing to make this facility a package that users can install. But I think it's better to put it in the Emacs core so it's available by default and without special action from the user beyond enabling a single variable. I feel strongly it would enhance Emacs to provide this. Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 19:54 ` Ted Zlatanov @ 2011-03-04 20:21 ` Dimitri Fontaine 2011-03-04 20:25 ` Chad Brown 2011-03-04 20:26 ` Chad Brown 2 siblings, 0 replies; 64+ messages in thread From: Dimitri Fontaine @ 2011-03-04 20:21 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Ted Zlatanov <tzz@lifelogs.com> writes: > The only reason I can think why this would not be acceptable is > security. Otherwise this makes a lot of sense. My answer there would be to just add to load-path, but have no automatic mechanism to load the files in there or register the autoloads. Having a known place where to download el-get.el and being able to tell user to just (require 'el-get) is all I want here. Regards, -- dim ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 19:54 ` Ted Zlatanov 2011-03-04 20:21 ` Dimitri Fontaine @ 2011-03-04 20:25 ` Chad Brown 2011-03-04 20:46 ` Ted Zlatanov 2011-03-04 20:26 ` Chad Brown 2 siblings, 1 reply; 64+ messages in thread From: Chad Brown @ 2011-03-04 20:25 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1107 bytes --] On Mar 4, 2011, at 11:54 AM, Ted Zlatanov wrote: > > The only reason I can think why this would not be acceptable is > security. Otherwise this makes a lot of sense. > > For security I would propose checksumming any code in the load-dir and > when new files are added or existing files are changed, query the user > and store a file checksum in an alist. This would have to happen the first time the user loaded any package, or you have no security. If you do this the first time the user has loaded any package, you have removed the `automatically' part of your proposed system, which is the only real advantage it has. The only way your proposal seems (to me) to be an improvement is if we train users to ignore the security questions and just always click on `I agree'. I hope you agree that that isn't a good idea. Modern users have been trained to expect `Extensions' and `Add-Ons', and don't seem to mind picking from a list (for things like FireFox, a very large list with many overlapping choices). I think that's a better user model to follow. I hope that helps, *Chad [-- Attachment #2: Type: text/html, Size: 1492 bytes --] ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 20:25 ` Chad Brown @ 2011-03-04 20:46 ` Ted Zlatanov 2011-03-05 19:24 ` Chad Brown 0 siblings, 1 reply; 64+ messages in thread From: Ted Zlatanov @ 2011-03-04 20:46 UTC (permalink / raw) To: emacs-devel On Fri, 4 Mar 2011 12:25:22 -0800 Chad Brown <yandros@MIT.EDU> wrote: CB> On Mar 4, 2011, at 11:54 AM, Ted Zlatanov wrote: >> >> The only reason I can think why this would not be acceptable is >> security. Otherwise this makes a lot of sense. >> >> For security I would propose checksumming any code in the load-dir and >> when new files are added or existing files are changed, query the user >> and store a file checksum in an alist. CB> This would have to happen the first time the user loaded any package, CB> or you have no security. If you do this the first time the user has CB> loaded any package, you have removed the `automatically' part of your CB> proposed system, which is the only real advantage it has. No. This query is only for Lisp code placed in the load-dir, not for packages in general. So you'd have the query as part of the el-get installation for instance and it wouldn't show up again. Compare with Mac OS X which does this for new applications you've downloaded from the net, alerting the very first time. CB> The only way your proposal seems (to me) to be an improvement is if we CB> train users to ignore the security questions and just always click on CB> I agree'. I hope you agree that that isn't a good idea. It's not a good idea, but it's not what I'm describing either. This query should show up very rarely, not all the time. It's meant for bootstrapping and for user code. If more than one file needs to be approved the user could use `Y' instead of `y', but in any case the query would be very rare. CB> Modern users have been trained to expect `Extensions' and `Add-Ons', CB> and don't seem to mind picking from a list (for things like FireFox, a CB> very large list with many overlapping choices). I think that's a CB> better user model to follow. Let's take an example. I have 10 pieces of code related to Emacs I want to load. Do I have to explicitly list them in my .emacs? Or can I just put them in a directory? The former is twice the work since I have to put them in some directory anyhow and puts the synchronization burden on me. So I can write some Lisp to do the discovery and load them automatically... which is what I'm offering for everyone's benefit (with some security features). I already do this for myself so I can propose a patch or a package quickly :) Package management is not what I'm proposing. The package manager *installation* would write a bootstrapper piece of code that has to be approved *once*. So while the load-dir is useful for installing el-get, I don't think el-get is the only reason to adopt it. Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 20:46 ` Ted Zlatanov @ 2011-03-05 19:24 ` Chad Brown 0 siblings, 0 replies; 64+ messages in thread From: Chad Brown @ 2011-03-05 19:24 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel On Mar 4, 2011, at 12:46 PM, Ted Zlatanov wrote: > No. This query is only for Lisp code placed in the load-dir, not for > packages in general. So you'd have the query as part of the el-get > installation for instance and it wouldn't show up again. Compare with > Mac OS X which does this for new applications you've downloaded from the > net, alerting the very first time. If the user has to go through a set of steps to install and activate a package, how isn't that what ELPA does? As I'm understanding you, any magic directory is either no less work for the user or has unforgivable security issues. What am I missing? *Chad ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 19:54 ` Ted Zlatanov 2011-03-04 20:21 ` Dimitri Fontaine 2011-03-04 20:25 ` Chad Brown @ 2011-03-04 20:26 ` Chad Brown 2 siblings, 0 replies; 64+ messages in thread From: Chad Brown @ 2011-03-04 20:26 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1107 bytes --] On Mar 4, 2011, at 11:54 AM, Ted Zlatanov wrote: > > The only reason I can think why this would not be acceptable is > security. Otherwise this makes a lot of sense. > > For security I would propose checksumming any code in the load-dir and > when new files are added or existing files are changed, query the user > and store a file checksum in an alist. This would have to happen the first time the user loaded any package, or you have no security. If you do this the first time the user has loaded any package, you have removed the `automatically' part of your proposed system, which is the only real advantage it has. The only way your proposal seems (to me) to be an improvement is if we train users to ignore the security questions and just always click on `I agree'. I hope you agree that that isn't a good idea. Modern users have been trained to expect `Extensions' and `Add-Ons', and don't seem to mind picking from a list (for things like FireFox, a very large list with many overlapping choices). I think that's a better user model to follow. I hope that helps, *Chad [-- Attachment #2: Type: text/html, Size: 1492 bytes --] ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 19:45 ` Dimitri Fontaine 2011-03-04 19:54 ` Ted Zlatanov @ 2011-03-04 20:08 ` Tom Tromey 2011-03-04 20:24 ` Dimitri Fontaine 1 sibling, 1 reply; 64+ messages in thread From: Tom Tromey @ 2011-03-04 20:08 UTC (permalink / raw) To: Dimitri Fontaine; +Cc: Ted Zlatanov, emacs-devel Dimitri> What el-get currently does not do is editing any user's file. What's Dimitri> proposed in this thread is a way for el-get to bootstrap itself in a Dimitri> user's setup without having to edit the user's init file. Yes, my proposal accomplishes that. There are two problems here. The first problem is, how does the user ever get el-get.el? Do they download it from a web site? Do you have some installer elisp on a web site to eval (this is what I did with ELPA)? Etc. Whatever the answer is to that problem, there is a similar package.el-based answer. E.g., if you have some elisp on your web site to download and install el-get.el, just write different elisp (untested): (let ((buffer (url-retrieve-synchronously "the url/el-get.el"))) (with-current-buffer buffer ;; strip the headers (re-search-forward "^$" nil 'move) (forward-char) (delete-region (point-min) (point)) (package-install-from-buffer (package-buffer-info) 'single)) (kill-buffer buffer)) If users just download your file by hand, then they just do that and then M-x package-install-file. The second problem is, how does el-get.el get activated? If el-get.el is an ordinary package, in the package.el sense, then in Emacs 24 it will just work with zero changes to the user's init file. Autoloads will be extracted, etc. You can make it do any el-get-specific activation quite easily using an autoload comment. Tom ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 20:08 ` Tom Tromey @ 2011-03-04 20:24 ` Dimitri Fontaine 2011-03-04 21:17 ` Tom Tromey 0 siblings, 1 reply; 64+ messages in thread From: Dimitri Fontaine @ 2011-03-04 20:24 UTC (permalink / raw) To: Tom Tromey; +Cc: Ted Zlatanov, emacs-devel Tom Tromey <tromey@redhat.com> writes: > Whatever the answer is to that problem, there is a similar > package.el-based answer. > > E.g., if you have some elisp on your web site to download and install > el-get.el, just write different elisp (untested): Here's the code to copy paste and run to install el-get currently. (url-retrieve "https://github.com/dimitri/el-get/raw/master/el-get-install.el" (lambda (s) (end-of-buffer) (eval-print-last-sexp))) > (package-install-from-buffer (package-buffer-info) 'single)) I can see your point about el-get being a package even if not included in ELPA by default, now that package.el is part of Emacs24. That leaves any user of Emacs23 with no solution though. I will consider that at some point I guess, but currently el-get allows you to get package.el in emacs23 :) Regards, -- dim ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 20:24 ` Dimitri Fontaine @ 2011-03-04 21:17 ` Tom Tromey 2011-03-04 21:33 ` Dimitri Fontaine 0 siblings, 1 reply; 64+ messages in thread From: Tom Tromey @ 2011-03-04 21:17 UTC (permalink / raw) To: Dimitri Fontaine; +Cc: Ted Zlatanov, emacs-devel Dimitri> I can see your point about el-get being a package even if not Dimitri> included in ELPA by default, now that package.el is part of Dimitri> Emacs24. That leaves any user of Emacs23 with no solution Dimitri> though. I will consider that at some point I guess, but Dimitri> currently el-get allows you to get package.el in emacs23 :) If somebody added the feature you want to Emacs, presumably it would only be in Emacs 24, leaving you in the same situation. Or maybe the proposal is to put it into Emacs 23. But then we might as well just put package.el into Emacs 23. Tom ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 21:17 ` Tom Tromey @ 2011-03-04 21:33 ` Dimitri Fontaine 2011-03-04 21:37 ` Tom Tromey 2011-03-05 3:18 ` Ted Zlatanov 0 siblings, 2 replies; 64+ messages in thread From: Dimitri Fontaine @ 2011-03-04 21:33 UTC (permalink / raw) To: Tom Tromey; +Cc: Ted Zlatanov, emacs-devel Tom Tromey <tromey@redhat.com> writes: > If somebody added the feature you want to Emacs, presumably it would > only be in Emacs 24, leaving you in the same situation. Point. I would still prefer to depend on user-load-path or something, it strikes me as more general: you don't have to edit existing scripts. Regards, -- dim ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 21:33 ` Dimitri Fontaine @ 2011-03-04 21:37 ` Tom Tromey 2011-03-05 3:18 ` Ted Zlatanov 1 sibling, 0 replies; 64+ messages in thread From: Tom Tromey @ 2011-03-04 21:37 UTC (permalink / raw) To: Dimitri Fontaine; +Cc: Ted Zlatanov, emacs-devel Dimitri> Point. I would still prefer to depend on user-load-path or something, Dimitri> it strikes me as more general: you don't have to edit existing scripts. Now you're just looking for reasons to avoid it :) Tom ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-04 21:33 ` Dimitri Fontaine 2011-03-04 21:37 ` Tom Tromey @ 2011-03-05 3:18 ` Ted Zlatanov 2011-03-05 19:11 ` Chad Brown 2011-03-06 7:21 ` Mike Mattie 1 sibling, 2 replies; 64+ messages in thread From: Ted Zlatanov @ 2011-03-05 3:18 UTC (permalink / raw) To: emacs-devel On Fri, 04 Mar 2011 22:33:35 +0100 Dimitri Fontaine <dim@tapoueh.org> wrote: DF> Tom Tromey <tromey@redhat.com> writes: >> If somebody added the feature you want to Emacs, presumably it would >> only be in Emacs 24, leaving you in the same situation. DF> Point. I would still prefer to depend on user-load-path or something, DF> it strikes me as more general: you don't have to edit existing scripts. Tom is talking about one thing (package management) and we're talking about another (generic Lisp snippet management). Sure, you can do the latter with the former, but it's a long stretch and is fighting the user. Look, if I just want to put a file with (setq myvar xyz) or the el-get initialization, or whatever in the user-load-path, why do I have to make a package out of it? By analogy consider some of the software that lets you put a snippet in a conf.d directory, obviously implying that this is convenient for the user. This is just a sampling from my machine: apache2 newer crons (/etc/cron.d) AppArmor Grub libpaper sudo logrotate rsyslog modprobe sane PAM Why not provide the same level of convenience in Emacs? Other than security, what's the argument against it? We all understand the benefits of modularization made easy, right? Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-05 3:18 ` Ted Zlatanov @ 2011-03-05 19:11 ` Chad Brown 2011-03-06 7:21 ` Mike Mattie 1 sibling, 0 replies; 64+ messages in thread From: Chad Brown @ 2011-03-05 19:11 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 325 bytes --] On Mar 4, 2011, at 7:18 PM, Ted Zlatanov wrote: > > By analogy consider some of the software that lets you put a snippet in > a conf.d directory, obviously implying that this is convenient for the > user. This is just a sampling from my machine: Those are all machine-wide configurations. For that, use site-lisp. *Chad [-- Attachment #2: Type: text/html, Size: 639 bytes --] ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-05 3:18 ` Ted Zlatanov 2011-03-05 19:11 ` Chad Brown @ 2011-03-06 7:21 ` Mike Mattie 2011-03-07 16:24 ` Ted Zlatanov 1 sibling, 1 reply; 64+ messages in thread From: Mike Mattie @ 2011-03-06 7:21 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 2180 bytes --] On Fri, Mar 04, 2011 at 09:18:22PM -0600, Ted Zlatanov wrote: > On Fri, 04 Mar 2011 22:33:35 +0100 Dimitri Fontaine <dim@tapoueh.org> wrote: > > DF> Tom Tromey <tromey@redhat.com> writes: > >> If somebody added the feature you want to Emacs, presumably it would > >> only be in Emacs 24, leaving you in the same situation. > > DF> Point. I would still prefer to depend on user-load-path or something, > DF> it strikes me as more general: you don't have to edit existing scripts. > > Tom is talking about one thing (package management) and we're talking > about another (generic Lisp snippet management). Sure, you can do the > latter with the former, but it's a long stretch and is fighting the > user. Look, if I just want to put a file with > > (setq myvar xyz) > > or the el-get initialization, or whatever in the user-load-path, why do > I have to make a package out of it? > > By analogy consider some of the software that lets you put a snippet in > a conf.d directory, obviously implying that this is convenient for the > user. This is just a sampling from my machine: > > apache2 > newer crons (/etc/cron.d) > AppArmor > Grub > libpaper > sudo > logrotate > rsyslog > modprobe > sane > PAM > > Why not provide the same level of convenience in Emacs? Other than > security, what's the argument against it? We all understand the > benefits of modularization made easy, right? > > Ted > > There are ways to solve the problem you are looking at without wiring more logic into Emacs. Use the .emacs file as a more sophisticated loader for a complex configuration when necessary. I have done this with my Grail project (on EmacsWiki), as has tidyconfig. I would look at these solutions first before proposing code that has to be wired into the bootstrap codepath. There are a number of issues a reliable loader should address: how does it handle errors ? how does it handle --batch ? how does it handle --daemon ? how simple,transparent,debuggable is the loader code ? I have not seen any code so far in your proposal unless I accidentally skipped or deleted a message with it. [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-06 7:21 ` Mike Mattie @ 2011-03-07 16:24 ` Ted Zlatanov 2011-03-07 17:18 ` Chad Brown ` (2 more replies) 0 siblings, 3 replies; 64+ messages in thread From: Ted Zlatanov @ 2011-03-07 16:24 UTC (permalink / raw) To: emacs-devel On Sat, 5 Mar 2011 11:11:34 -0800 Chad Brown <yandros@MIT.EDU> wrote: CB> On Mar 4, 2011, at 7:18 PM, Ted Zlatanov wrote: >> >> By analogy consider some of the software that lets you put a snippet in >> a conf.d directory, obviously implying that this is convenient for the >> user. This is just a sampling from my machine: CB> Those are all machine-wide configurations. For that, use site-lisp. Bazaar has a plugins directory; files in it are automatically activated, as an example of a user-level facility like this. Anyhow, my point is that placing a file in a directory is inherently more modular and convenient to the user than augmenting a single file. Do you disagree? CB> If the user has to go through a set of steps to install and activate a CB> package, how isn't that what ELPA does? They are not packages, they are snippets of code. ELPA requires far more structure and many more steps. For what I'm proposing, a lot less work is required (just a y/n prompt the first time a snippet is found to ensure it's not placed there maliciously). On Sat, 5 Mar 2011 23:21:51 -0800 Mike Mattie <codermattie@gmail.com> wrote: MM> There are ways to solve the problem you are looking at without wiring more MM> logic into Emacs. Use the .emacs file as a more sophisticated loader for a MM> complex configuration when necessary. I can and do, sure. I don't think it creates a nice user experience. MM> I have done this with my Grail project (on EmacsWiki), as has tidyconfig. MM> I would look at these solutions first before proposing code that has to MM> be wired into the bootstrap codepath. Thanks for pointing those out. Would Grail or tidyconfig work as a core option on startup (meaning the user doesn't have to install a package, just customize a boolean)? Do they handle signing the snippets the first time they are found? Can you give us a comparison of them and any other similar solutions you know? They have to be GPL and assigned to Emacs to be included. MM> There are a number of issues a reliable loader should address: MM> how does it handle errors ? MM> how does it handle --batch ? MM> how does it handle --daemon ? MM> how simple,transparent,debuggable is the loader code ? MM> I have not seen any code so far in your proposal unless I accidentally MM> skipped or deleted a message with it. I can write the code but haven't seen the need for actual code yet (I could have just comitted some code to Emacs instead, but find that option to be antisocial). I'd rather use something that already exists such as Grail or tidyconfig that you kindly pointed out. If you could tell us how any potential solutions can help answer the questions above, that would be wonderful. I can look at any solutions and evaluate them if you like. To answer your questions from my perspective, IMHO a loader should work like package.el. IOW, whenever and however package.el is loaded currently, this loader we're discussing should also be loaded, since it's effectively a package manager but with snippets instead of packages. Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-07 16:24 ` Ted Zlatanov @ 2011-03-07 17:18 ` Chad Brown 2011-03-07 17:59 ` Ted Zlatanov 2011-03-08 17:36 ` Dimitri Fontaine 2011-03-07 17:52 ` Stefan Monnier 2011-03-08 0:47 ` Mike Mattie 2 siblings, 2 replies; 64+ messages in thread From: Chad Brown @ 2011-03-07 17:18 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel On Mar 7, 2011, at 8:24 AM, Ted Zlatanov wrote: > Bazaar has a plugins directory; files in it are automatically activated, > as an example of a user-level facility like this. Anyhow, my point is > that placing a file in a directory is inherently more modular and > convenient to the user than augmenting a single file. Do you disagree? My point is that the user must take an explicit step to do either, and that placing a file in a magic directory and then answering questions about it (both steps are required) is significantly less convenient and equally or less modular than running an installer command. So, yes, I do disagree. What you call `augmenting a single file' can be done with a simple, user-fiendly lisp command. The simple combination of el-get and package.el is much of the way there today. > CB> If the user has to go through a set of steps to install and activate a > CB> package, how isn't that what ELPA does? > > They are not packages, they are snippets of code. ELPA requires far > more structure and many more steps. For what I'm proposing, a lot less > work is required (just a y/n prompt the first time a snippet is found to > ensure it's not placed there maliciously). > [...] from my perspective, IMHO a loader should work > like package.el. IOW, whenever and however package.el is loaded > currently, this loader we're discussing should also be loaded, since > it's effectively a package manager but with snippets instead of > packages. I think that you're conflating package.el with the (still developing) policy concerning the management of the `official' central archive for it once it's included by default. You say that you want something that `should work like package.el', but I don't see where you say what your problem with package.el is except to imply that you think some sort of overhead will be too high. I honestly doubt that there is a lot more effort required to create something that works with package.el than there is to make a snippet that works automatically with just a simple mechanical checksum test. Put another way: I doubt that the overhead is likely to be too high for anyone who's actually creating something that wants to be shared automatically. Put another another way, I think that the snippet of code that can't be a package or in site-lisp but that several users want to share and use automatically is really unlikely to exist. Maybe you could take a look at package.el start with http://tromey.com/elpa/faq.html and describe what you think is too much effort? Package.el will be included with emacs, can be (is being?) developed to make it more user-friendly, and doesn't have the security issues of the magic directory. *Chad ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-07 17:18 ` Chad Brown @ 2011-03-07 17:59 ` Ted Zlatanov 2011-03-08 17:36 ` Dimitri Fontaine 1 sibling, 0 replies; 64+ messages in thread From: Ted Zlatanov @ 2011-03-07 17:59 UTC (permalink / raw) To: emacs-devel On Mon, 7 Mar 2011 09:18:44 -0800 Chad Brown <yandros@MIT.EDU> wrote: CB> On Mar 7, 2011, at 8:24 AM, Ted Zlatanov wrote: >> Bazaar has a plugins directory; files in it are automatically activated, >> as an example of a user-level facility like this. Anyhow, my point is >> that placing a file in a directory is inherently more modular and >> convenient to the user than augmenting a single file. Do you disagree? CB> My point is that the user must take an explicit step to do either, and CB> that placing a file in a magic directory and then answering questions CB> about it (both steps are required) is significantly less convenient CB> and equally or less modular than running an installer command. CB> So, yes, I do disagree. What you call `augmenting a single file' can CB> be done with a simple, user-fiendly lisp command. The simple CB> combination of el-get and package.el is much of the way there today. Again you're talking about package installation. I want to create $LOAD_DIR/000-keys.el and have it loaded on startup. I don't want it installed, managed, or wrapped. This mechanism will facilitate bootstrapping el-get, for instance, but it will also enable users to manage their configurations better. CB> I think that you're conflating package.el with the (still developing) CB> policy concerning the management of the `official' central archive for CB> it once it's included by default. You say that you want something that CB> `should work like package.el', but I don't see where you say what your CB> problem with package.el is except to imply that you think some sort of CB> overhead will be too high. I was talking about the mechanics as far as Matt's questions: how it behaves on --batch, etc. I was not suggesting it should do what package.el does in terms of functionality. I don't have a problem with package.el. I just don't want to have to create a package in order to have a modular snippet as I described above. Why can't the two coexist? CB> I honestly doubt that there is a lot more effort required to create CB> something that works with package.el than there is to make a snippet CB> that works automatically with just a simple mechanical checksum CB> test. Put another way: I doubt that the overhead is likely to be too CB> high for anyone who's actually creating something that wants to be CB> shared automatically. Put another another way, I think that the CB> snippet of code that can't be a package or in site-lisp but that CB> several users want to share and use automatically is really unlikely CB> to exist. Who said anything about sharing? I want to break down my .emacs for example; why can't I do it by putting 8 files in a directory instead of writing (load...) 8 times in my .emacs? Here's that portion of my current .emacs: (load "tzz.emacs.start.el") (load "tzz.emacs.functions.el") (load "tzz.emacs.libraries.el") (load "tzz.emacs.colors.el") (load "tzz.emacs.options.el") (load "tzz.emacs.keys.el") (load "tzz.emacs.custom.el") (load "tzz.emacs.skeletons.el") I want, instead, to customize load-dir to ~/emacs.d/conf.d and put those 8 files in it. Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-07 17:18 ` Chad Brown 2011-03-07 17:59 ` Ted Zlatanov @ 2011-03-08 17:36 ` Dimitri Fontaine 2011-03-08 18:30 ` Chad Brown 1 sibling, 1 reply; 64+ messages in thread From: Dimitri Fontaine @ 2011-03-08 17:36 UTC (permalink / raw) To: Chad Brown; +Cc: Ted Zlatanov, emacs-devel Chad Brown <yandros@MIT.EDU> writes: > Put another another way, I think that the > snippet of code that can't be a package or in site-lisp but that > several users want to share and use automatically is really unlikely > to exist. Ever heard about emacswiki? What do you think the chances are that authors of snippets and scripts shared over at emacswiki get to package them to ELPA? My take is very very very low, low enough that I wrote el-get just so that I don't have to take the chance. Regards, -- dim ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-08 17:36 ` Dimitri Fontaine @ 2011-03-08 18:30 ` Chad Brown 0 siblings, 0 replies; 64+ messages in thread From: Chad Brown @ 2011-03-08 18:30 UTC (permalink / raw) To: Dimitri Fontaine; +Cc: Emacs development discussions On Mar 8, 2011, at 9:36 AM, Dimitri Fontaine wrote: > Chad Brown <yandros@MIT.EDU> writes: >> Put another another way, I think that the >> snippet of code that can't be a package or in site-lisp but that >> several users want to share and use automatically is really unlikely >> to exist. > > Ever heard about emacswiki? I think that you haven't been following the conversation closely enough to understand what ``share and use automatically'' means. The `automatically' part of that sentence is important. It turns out that what Ted really wants is a way to load all the elisp files in a directory without listing them explicitly. The entire security, package, and downloader discussion (in which I suggested using el-get) was a side-effect of premature overgeneralization. I hope that helps, *Chad ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-07 16:24 ` Ted Zlatanov 2011-03-07 17:18 ` Chad Brown @ 2011-03-07 17:52 ` Stefan Monnier 2011-03-07 20:39 ` PJ Weisberg 2011-03-08 0:47 ` Mike Mattie 2 siblings, 1 reply; 64+ messages in thread From: Stefan Monnier @ 2011-03-07 17:52 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel > They are not packages, they are snippets of code. ELPA requires far > more structure and many more steps. For what I'm proposing, a lot less > work is required (just a y/n prompt the first time a snippet is found to > ensure it's not placed there maliciously). There's no reason why package.el can't accept any random elisp file. Stefan ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-07 17:52 ` Stefan Monnier @ 2011-03-07 20:39 ` PJ Weisberg 2011-03-08 2:46 ` Stefan Monnier 0 siblings, 1 reply; 64+ messages in thread From: PJ Weisberg @ 2011-03-07 20:39 UTC (permalink / raw) To: Stefan Monnier; +Cc: Ted Zlatanov, emacs-devel On 3/7/11, Stefan Monnier <monnier@iro.umontreal.ca> wrote: >> They are not packages, they are snippets of code. ELPA requires far >> more structure and many more steps. For what I'm proposing, a lot less >> work is required (just a y/n prompt the first time a snippet is found to >> ensure it's not placed there maliciously). > > There's no reason why package.el can't accept any random elisp file. I think this proposal is really about code snippets that people would otherwise just cut and paste into their .emacs file. The average user's .emacs often winds up containing mostly code they found somewhere and use without really understanding it. Dropping each snippit in its own file would be a big help if the user ever did need to debug some problem with his init, or if he decided one day to actually learn elisp. (I din't know if the security/hash thing is really necessary. If the attacker already has write access to your home directory, how much worse can it get?) -PJ ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-07 20:39 ` PJ Weisberg @ 2011-03-08 2:46 ` Stefan Monnier 2011-03-08 10:26 ` Ted Zlatanov 0 siblings, 1 reply; 64+ messages in thread From: Stefan Monnier @ 2011-03-08 2:46 UTC (permalink / raw) To: PJ Weisberg; +Cc: Ted Zlatanov, emacs-devel > I think this proposal is really about code snippets that people would > otherwise just cut and paste into their .emacs file. The average > user's .emacs often winds up containing mostly code they found > somewhere and use without really understanding it. Dropping each > snippit in its own file would be a big help if the user ever did need > to debug some problem with his init, or if he decided one day to > actually learn elisp. I'm far from convinced it's better for people to drop random chunks of configuration into separate files rather than all in the .emacs file. If you're talking about downloading random files containing configuration code (so the user doesn't have to create a file, inventing a file name for it), then maybe that could make sense, but I haven't seen such files very much, and I suspect many of them could easily be turned either into themes or into packages installable via package.el. Stefan ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-08 2:46 ` Stefan Monnier @ 2011-03-08 10:26 ` Ted Zlatanov 2011-03-08 17:14 ` Chong Yidong ` (2 more replies) 0 siblings, 3 replies; 64+ messages in thread From: Ted Zlatanov @ 2011-03-08 10:26 UTC (permalink / raw) To: emacs-devel On Mon, 07 Mar 2011 21:46:10 -0500 Stefan Monnier <monnier@iro.umontreal.ca> wrote: >> I think this proposal is really about code snippets that people would >> otherwise just cut and paste into their .emacs file. The average >> user's .emacs often winds up containing mostly code they found >> somewhere and use without really understanding it. Dropping each >> snippit in its own file would be a big help if the user ever did need >> to debug some problem with his init, or if he decided one day to >> actually learn elisp. SM> I'm far from convinced it's better for people to drop random chunks of SM> configuration into separate files rather than all in the .emacs file. It's not "better," it's what people already do. Emacs would just make it easier than the current situation, which is to drop a file plus edit the .emacs every time a file is added or deleted. What other choice is there to modularize .emacs? SM> If you're talking about downloading random files containing SM> configuration code (so the user doesn't have to create a file, inventing SM> a file name for it), then maybe that could make sense, but I haven't SM> seen such files very much, and I suspect many of them could easily be SM> turned either into themes or into packages installable via package.el. Obviously that works for package managers like el-get. OK, let's say I have the 8 files I listed earlier (tzz.emacs.*.el). I want to load them modularly. So I put them in the load-dir. Do I have to make 8 packages? And every time I update one of those files, do I have to repackage it with a new version? That seems workable but tedious compared to the code proposed by Ben Key and Evans Winner. If you're against including the load-dir in the core and enabling it by default, how about making it a GNU ELPA package so it's easily installable? On Tue, 8 Mar 2011 01:14:37 -0600 Ben Key <bkey76@gmail.com> wrote: BK> I am attaching to this message a quick implementation of this feature I BK> threw together in about an hour. I am not familiar with the Emacs package BK> mechanism but I am certain that this could be converted to an Emacs package BK> without too much work thus making it easier to install. On Tue, 08 Mar 2011 02:58:03 -0700 Evans Winner <ego111@gmail.com> wrote: EW> For what it's worth, this is the thing I have in my .emacs. EW> It does what I want it to, which is just to allow me to EW> break my .emacs into various not-excessively-long files EW> organized by subject, like email config, org-mode config and EW> so-forth. Thanks for your code. Both of your solutions are similar to what I would like to use, but Mike Mattie's concerns about startup behavior (mainly for daemon mode, for --batch mode, and when there are errors) are valid. The recursion behavior should probably not be the default by parallel with other such systems I listed, e.g. /etc/rc.d and Bazaar's plugins directory. It's easy enough to make it optional or to write a snippet that loads a specific subdirectory. The argument I have against recursion is that it's hard to tell at a glance what's going to get loaded. It seems no one thinks prompting about new or changed files in the load-dir is worthwhile, so never mind about that part of my proposal. Thanks Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-08 10:26 ` Ted Zlatanov @ 2011-03-08 17:14 ` Chong Yidong 2011-03-08 18:47 ` Ted Zlatanov 2011-03-08 20:59 ` Stefan Monnier 2011-03-09 6:03 ` Mike Mattie 2 siblings, 1 reply; 64+ messages in thread From: Chong Yidong @ 2011-03-08 17:14 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Ted Zlatanov <tzz@lifelogs.com> writes: > If you're against including the load-dir in the core and enabling it by > default, how about making it a GNU ELPA package so it's easily > installable? It's a bit too trivial to be a package. Just to be specific: are you simply asking for a function to iterates through the files in a directory loading them? Or is it more complicated than that? ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-08 17:14 ` Chong Yidong @ 2011-03-08 18:47 ` Ted Zlatanov 2011-03-08 19:23 ` Julien Danjou 0 siblings, 1 reply; 64+ messages in thread From: Ted Zlatanov @ 2011-03-08 18:47 UTC (permalink / raw) To: emacs-devel On Tue, 08 Mar 2011 12:14:52 -0500 Chong Yidong <cyd@stupidchicken.com> wrote: CY> Ted Zlatanov <tzz@lifelogs.com> writes: >> If you're against including the load-dir in the core and enabling it by >> default, how about making it a GNU ELPA package so it's easily >> installable? CY> It's a bit too trivial to be a package. CY> Just to be specific: are you simply asking for a function to iterates CY> through the files in a directory loading them? Or is it more CY> complicated than that? I'm asking for a defcustom, e.g. `load-dir', *in the Emacs core* which, when set to a list of directories, will tell Emacs to load all the files in the directory without recursion. The default should be nil. This should not require .emacs modifications. I suggested packaging it as an alternative in case it was not allowed in the Emacs core. I realize it seems trivial but it's really convenient for managing snippets, ELisp files, and modularizing .emacs. On Tue, 8 Mar 2011 10:30:14 -0800 Chad Brown <yandros@MIT.EDU> wrote: CB> It turns out that what Ted really wants is a way to load all the elisp CB> files in a directory without listing them explicitly. The entire CB> security, package, and downloader discussion (in which I suggested CB> using el-get) was a side-effect of premature overgeneralization. If this makes it into Emacs, the effect for Dimitri's el-get will be to simplify the installer and make it Just Work, without modifying the load-path. In fact installing any ELisp .el file *manually* will be simpler. Helping el-get was the reason I started this thread, but I have selfish reasons too: it would make my life much easier. el-get may choose to use this facility directly as well (to manage EmacsWiki recipes, for instance), but I don't know Dimitri's plans and it already manages recipes in subdirectories. Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-08 18:47 ` Ted Zlatanov @ 2011-03-08 19:23 ` Julien Danjou 2011-03-09 2:54 ` Stefan Monnier 0 siblings, 1 reply; 64+ messages in thread From: Julien Danjou @ 2011-03-08 19:23 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 545 bytes --] On Tue, Mar 08 2011, Ted Zlatanov wrote: > I'm asking for a defcustom, e.g. `load-dir', *in the Emacs core* which, > when set to a list of directories, will tell Emacs to load all the files > in the directory without recursion. The default should be nil. This > should not require .emacs modifications. Hum, I'd like to have that defcustom (or another one) to have a directory where Emacs would not stupidly load the file, but build an autoload file for them and load that one. -- Julien Danjou ❱ http://julien.danjou.info [-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --] ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-08 19:23 ` Julien Danjou @ 2011-03-09 2:54 ` Stefan Monnier 2011-03-09 19:57 ` Chong Yidong 0 siblings, 1 reply; 64+ messages in thread From: Stefan Monnier @ 2011-03-09 2:54 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel >> I'm asking for a defcustom, e.g. `load-dir', *in the Emacs core* which, >> when set to a list of directories, will tell Emacs to load all the files >> in the directory without recursion. The default should be nil. This >> should not require .emacs modifications. > Hum, I'd like to have that defcustom (or another one) to have a > directory where Emacs would not stupidly load the file, but build an > autoload file for them and load that one. That would make more sense, indeed. That's also closer to what package.el (w|sh)ould do with random .el files. Stefan ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-09 2:54 ` Stefan Monnier @ 2011-03-09 19:57 ` Chong Yidong 0 siblings, 0 replies; 64+ messages in thread From: Chong Yidong @ 2011-03-09 19:57 UTC (permalink / raw) To: Stefan Monnier; +Cc: Ted Zlatanov, emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: >> Hum, I'd like to have that defcustom (or another one) to have a >> directory where Emacs would not stupidly load the file, but build an >> autoload file for them and load that one. > > That would make more sense, indeed. That's also closer to what > package.el (w|sh)ould do with random .el files. If said random .el file follows the Emacs Lisp file conventions, and has a `;; Version: XX.XX.XX' line in its header section, it's already a valid package. M-x package-install-file will do the right thing. ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-08 10:26 ` Ted Zlatanov 2011-03-08 17:14 ` Chong Yidong @ 2011-03-08 20:59 ` Stefan Monnier 2011-03-08 21:38 ` Ted Zlatanov 2011-03-09 6:03 ` Mike Mattie 2 siblings, 1 reply; 64+ messages in thread From: Stefan Monnier @ 2011-03-08 20:59 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel >>> I think this proposal is really about code snippets that people would >>> otherwise just cut and paste into their .emacs file. The average >>> user's .emacs often winds up containing mostly code they found >>> somewhere and use without really understanding it. Dropping each >>> snippit in its own file would be a big help if the user ever did need >>> to debug some problem with his init, or if he decided one day to >>> actually learn elisp. SM> I'm far from convinced it's better for people to drop random chunks of SM> configuration into separate files rather than all in the .emacs file. > It's not "better," it's what people already do. I must be missing something. I see two different things on the web: packages on the one hand and Elisp configuration chunks on the other. The first come in files you can download, the other comes in <pre>...</pre> elements in HTML pages which you can copy&paste. My claim is that the first can be better handled by package.el or themes and the other works just fine in .emacs. > Emacs would just make it easier than the current situation, which is > to drop a file plus edit the .emacs every time a file is added or > deleted. If you drop the file with package.el you don't need to edit the .emacs correspondingly. > want to load them modularly. So I put them in the load-dir. Do I have > to make 8 packages? And every time I update one of those files, do I > have to repackage it with a new version? That seems workable but > tedious compared to the code proposed by Ben Key and Evans Winner. If you're really talking about configuration code rather than packages, then I tend to assume that people whose .emacs is so large as to need modularization can figure out which kind of modularization they want and implement (or copy&paste) the corresponding loop to load the various files. I'm not even sure why you'd want to "modularize" in this way: my .emacs was fairly large but splitting it into separate files never seemed like a good way to help, since I'd then have to figure out how to make C-s and M-/ find matches in neighboring files. Instead I "split" it with outline-minor-mode. > If you're against including the load-dir in the core and enabling it by > default, how about making it a GNU ELPA package so it's easily > installable? Such a package would be perfectly acceptable, yes. Stefan ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-08 20:59 ` Stefan Monnier @ 2011-03-08 21:38 ` Ted Zlatanov 2011-03-09 7:06 ` Jan D. 0 siblings, 1 reply; 64+ messages in thread From: Ted Zlatanov @ 2011-03-08 21:38 UTC (permalink / raw) To: emacs-devel On Tue, 08 Mar 2011 15:59:51 -0500 Stefan Monnier <monnier@IRO.UMontreal.CA> wrote: >>>> I think this proposal is really about code snippets that people would >>>> otherwise just cut and paste into their .emacs file. The average >>>> user's .emacs often winds up containing mostly code they found >>>> somewhere and use without really understanding it. Dropping each >>>> snippit in its own file would be a big help if the user ever did need >>>> to debug some problem with his init, or if he decided one day to >>>> actually learn elisp. SM> I'm far from convinced it's better for people to drop random chunks of SM> configuration into separate files rather than all in the .emacs file. >> It's not "better," it's what people already do. SM> I must be missing something. I see two different things on the web: SM> packages on the one hand and Elisp configuration chunks on the other. SM> The first come in files you can download, the other comes in SM> <pre>...</pre> elements in HTML pages which you can copy&paste. SM> My claim is that the first can be better handled by package.el or themes SM> and the other works just fine in .emacs. There is a third class: streams (or snippets) of code I don't want to keep inside my .emacs because I don't like to make it big. There are some users who will use and enjoy this functionality, even if other users won't. As I proposed it, it will be off by default so it only benefits those who enable it and won't harm those who don't. This kind of modularization doesn't make it to the web as much because it's usually specific to the user's needs. Here are some examples: http://www.emacswiki.org/emacs/JoelAdamson#toc5 http://www.io.com/~jimm/emacs_tips.html#my-dot-emacs http://www.emacswiki.org/emacs/DotEmacsModular https://github.com/technomancy/emacs-starter-kit http://www.emacswiki.org/emacs/InitSplit http://stackoverflow.com/questions/2079095/how-to-modularize-an-emacs-configuration It's a common need as you can see. In the Emacs core it will be easier to enable it, that's all. Otherwise the instructions have to be "install package load-dir, THEN do the rest" which is a bit more work, requires a network connection, etc. >> want to load them modularly. So I put them in the load-dir. Do I have >> to make 8 packages? And every time I update one of those files, do I >> have to repackage it with a new version? That seems workable but >> tedious compared to the code proposed by Ben Key and Evans Winner. SM> If you're really talking about configuration code rather than packages, SM> then I tend to assume that people whose .emacs is so large as to need SM> modularization can figure out which kind of modularization they want and SM> implement (or copy&paste) the corresponding loop to load the various files. Yes, but you're assuming managing configuration modules in monolithic Emacs Lisp is the best way. Give us something simple and easy to manage the loop at the filesystem level, so we don't have to write it ourselves. SM> I'm not even sure why you'd want to "modularize" in this way: my .emacs SM> was fairly large but splitting it into separate files never seemed like SM> a good way to help, since I'd then have to figure out how to make C-s SM> and M-/ find matches in neighboring files. Instead I "split" it with SM> outline-minor-mode. For me it works better. I like small files; outline-minor-mode and folding-mode don't work for me. I suspect I'm not the only one. See the URLs above for a list of similar needs. >> If you're against including the load-dir in the core and enabling it by >> default, how about making it a GNU ELPA package so it's easily >> installable? SM> Such a package would be perfectly acceptable, yes. I'll work with Ben Key to do this in a package if you and Chong Yidong reject this functionality from the Emacs core. Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-08 21:38 ` Ted Zlatanov @ 2011-03-09 7:06 ` Jan D. 2011-03-09 7:17 ` Christoph Scholtes 2011-03-09 21:57 ` Mike Mattie 0 siblings, 2 replies; 64+ messages in thread From: Jan D. @ 2011-03-09 7:06 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Ted Zlatanov skrev 2011-03-08 22:38: > On Tue, 08 Mar 2011 15:59:51 -0500 Stefan Monnier<monnier@IRO.UMontreal.CA> wrote: > > SM> If you're really talking about configuration code rather than packages, > SM> then I tend to assume that people whose .emacs is so large as to need > SM> modularization can figure out which kind of modularization they want and > SM> implement (or copy&paste) the corresponding loop to load the various files. > > Yes, but you're assuming managing configuration modules in monolithic > Emacs Lisp is the best way. Give us something simple and easy to manage > the loop at the filesystem level, so we don't have to write it > ourselves. > > SM> I'm not even sure why you'd want to "modularize" in this way: my .emacs > SM> was fairly large but splitting it into separate files never seemed like > SM> a good way to help, since I'd then have to figure out how to make C-s > SM> and M-/ find matches in neighboring files. Instead I "split" it with > SM> outline-minor-mode. > > For me it works better. I like small files; outline-minor-mode and > folding-mode don't work for me. I suspect I'm not the only one. See > the URLs above for a list of similar needs. > As others have said, I was also suprised that dropping a .el-fil in ~/emacs.d didn't load it by default. My emacs is quite big and I'd love to split it up. Another thing I really would like is for customize to save its stuff in its own file and not in my .emacs. With a load-dir this would be trivial. There is a real need an packages isn't it. Its like wanting a rowing boat and told to use the latest battle ship instead. Jan D. ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-09 7:06 ` Jan D. @ 2011-03-09 7:17 ` Christoph Scholtes 2011-03-09 10:01 ` Jan Djärv 2011-03-09 21:57 ` Mike Mattie 1 sibling, 1 reply; 64+ messages in thread From: Christoph Scholtes @ 2011-03-09 7:17 UTC (permalink / raw) To: emacs-devel; +Cc: tzz, jan.h.d On 3/9/2011 12:06 AM, Jan D. wrote: > Another thing I really would like is for customize to > save its stuff in its own file and not in my .emacs. With a load-dir > this would be trivial. How about this: (setq custom-file "~/.emacs.d/init-custom.el") (load custom-file) See documentation (C-h v custom-file) for details. Christoph ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-09 7:17 ` Christoph Scholtes @ 2011-03-09 10:01 ` Jan Djärv 2011-03-09 15:42 ` `custom-file' and init-file [was: user-controlled load-path extension: load-dir] Drew Adams 2011-03-09 17:29 ` user-controlled load-path extension: load-dir Stephen J. Turnbull 0 siblings, 2 replies; 64+ messages in thread From: Jan Djärv @ 2011-03-09 10:01 UTC (permalink / raw) To: Christoph Scholtes; +Cc: tzz, emacs-devel Christoph Scholtes skrev 2011-03-09 08.17: > On 3/9/2011 12:06 AM, Jan D. wrote: > >> Another thing I really would like is for customize to >> save its stuff in its own file and not in my .emacs. With a load-dir >> this would be trivial. > > How about this: > > (setq custom-file "~/.emacs.d/init-custom.el") > (load custom-file) > Yes, but this is missing the point. I can make an load-dir feature in .emacs too. It is having this in emacs core, working without extra user work that is the point. Jan D. ^ permalink raw reply [flat|nested] 64+ messages in thread
* `custom-file' and init-file [was: user-controlled load-path extension: load-dir] 2011-03-09 10:01 ` Jan Djärv @ 2011-03-09 15:42 ` Drew Adams 2011-03-09 17:54 ` `custom-file' and init-file Stephen J. Turnbull 2011-03-09 21:19 ` `custom-file' and init-file [was: user-controlled load-path extension: load-dir] Evans Winner 2011-03-09 17:29 ` user-controlled load-path extension: load-dir Stephen J. Turnbull 1 sibling, 2 replies; 64+ messages in thread From: Drew Adams @ 2011-03-09 15:42 UTC (permalink / raw) To: emacs-devel > >> Another thing I really would like is for customize to > >> save its stuff in its own file and not in my .emacs. With > >> a load-dir this would be trivial. > > > > How about this: > > (setq custom-file "~/.emacs.d/init-custom.el") > > (load custom-file) > > It is having this in emacs core, working without extra > user work that is the point. My impression is that many Emacs (most?) users are unaware of `custom-file'. That's too bad, IMO. I think Emacs should use a separate custom file _by default_ (empty initially), and thus, by default, keep separate (a) the direct user editing and (b) the automatic modifications done by Customize. I would be in favor of having `custom-file' default to ~/.emacs-custom.el or ~/.emacs.d/user-custom.el or something. By itself, that wouldn't clue users in. A separate question would be whether to also have an (almost) empty `.emacs' by default, containing just an explicit load of `custom-file'. I'd say yes. Even if we did not provide a (nearly empty) init file and an (empty) `custom-file' by default, documenting the use of `custom-file' at the same place where we document `.emacs' (node `Init File') would be helpful, IMO. Even just adding a cross reference there plus a brief mention of `custom-file' would be helpful. Today, the `custom-file' doc is buried in the Customization section, with no mention in the init-file section. If users did have a default init file and `custom-file' (the former loading the latter, the latter being empty), then they would more easily keep separate their own Lisp customizations from any customizations made by Customize. Mixing the two is error prone (hence the warning comment we insert today). Users would be free to add their own Lisp customizations before or after the load of `custom-file'. They would also be free to define `custom-file' conditionally in the init file. And they could remove the load of `custom-file' altogether or move it to some other file that gets loaded (i.e. move the load away from the top level). IOW, they could do everything they do today. The only changes would be that by _default_: 1. Users would have an init file (~/.emacs). 2. The init file would just load `custom-file' (explicitly). Otherwise it would be empty. 3. `custom-file' would default to ~/.emacs-custom.el or ~/.emacs.d/user-custom.el or similar (TBD). Except for #3, I've suggested something similar before (thread "always put Customizations in `custom-file', never in `user-init-file', http://lists.gnu.org/archive/html/emacs-devel/2007-12/msg00567.html). At that time, some were in favor, a few were opposed. Richard turned it down in favor of fixing bugs for Emacs 22. XEmacs apparently already has something like this (see the thread). A variant of what's proposed above would be to not have a default init file with an explicit load of `custom-file', but to just load `custom-file' automatically after the init file if it is not loaded before then. This was discussed in the thread as well. That too would be OK by me. (See the thread for details.) The discussion in that thread also dealt with the possibility of automigrating existing Customize customizations from .emacs to `custom-file'. Leaving out migration altogether - or at least making it optional (on-demand) - would perhaps lead us to an easier consensus about using `custom-file' by default. Perhaps this topic is worth revisiting? ^ permalink raw reply [flat|nested] 64+ messages in thread
* `custom-file' and init-file 2011-03-09 15:42 ` `custom-file' and init-file [was: user-controlled load-path extension: load-dir] Drew Adams @ 2011-03-09 17:54 ` Stephen J. Turnbull 2011-03-09 21:19 ` `custom-file' and init-file [was: user-controlled load-path extension: load-dir] Evans Winner 1 sibling, 0 replies; 64+ messages in thread From: Stephen J. Turnbull @ 2011-03-09 17:54 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel Drew Adams writes: > I would be in favor of having `custom-file' default to > ~/.emacs-custom.el or ~/.emacs.d/user-custom.el or something. FWIW, XEmacs uses the following scheme. (1) The startup code automatically loads custom-file, if non-nil and it exists, *after* loading the init file, if that exists. (custom-file will be loaded if init file doesn't exist.) (2) custom-file defaults to (the equivalent of) .emacs.d/custom.el. Note that the custom file does not need to be on the load-path since it has its own location variable, so the name conflict doesn't cause a problem. I've not heard of a real issue about the name in 15 years of use of this scheme. My own experience is that it's only an issue if I'm working on lisp/custom.el, in which case it's often prompted by some problem with ~/.xemacs/custom.el, and then the buffer name conflict is mildly annoying. > By itself, that wouldn't clue users in. A separate question would > be whether to also have an (almost) empty `.emacs' by default, > containing just an explicit load of `custom-file'. I'd say yes. Note that having a explicit load would require either a conditional or that custom-file exist. The XEmacs scheme makes this set of issues moot. The only real problem with the XEmacs scheme is that some people have init files that depend on the custom file. In that case the remedy is somewhat ugly but effective. Add (load custom-file) (add-hook 'after-init-hook `(lambda () (setq custom-file ,custom-file))) (setq custom-file nil) early enough. ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: `custom-file' and init-file [was: user-controlled load-path extension: load-dir] 2011-03-09 15:42 ` `custom-file' and init-file [was: user-controlled load-path extension: load-dir] Drew Adams 2011-03-09 17:54 ` `custom-file' and init-file Stephen J. Turnbull @ 2011-03-09 21:19 ` Evans Winner 2011-03-09 21:39 ` `custom-file' and init-file [was: user-controlled load-pathextension: load-dir] Drew Adams 2011-03-10 2:52 ` `custom-file' and init-file [was: user-controlled load-path extension: load-dir] Stephen J. Turnbull 1 sibling, 2 replies; 64+ messages in thread From: Evans Winner @ 2011-03-09 21:19 UTC (permalink / raw) To: emacs-devel ,------ Drew Adams wrote ------ | By itself, that wouldn't clue users in. A separate | question would be whether to also have an (almost) | empty `.emacs' by default, containing just an explicit | load of `custom-file'. I'd say yes. Out of curiosity, would this complicate the process of Emacs installation? Is the idea that the first time a user runs Emacs, it checks to see if there is a .emacs in (getenv "HOME"), and if not, creates it? Would that complicate things for system administrators? Presumably they should use site-init.el, but I know some add some kind of simple .emacs file to the user account creation routine. By the way, for the default location of the custom file, I would suggest ~/.emacs.d. Right now my ~/.emacs.d is filled with things put there by elpa, predictive, org-mode, rcirc, my bookmarks file is there. I used to put my own one-off third-party libraries there, but I gave up and now put them in ~/emacs. I also put my own hacks in ~/.emacs-local and use the `load-dir' function I posted to load all that. Anyway, the convention seems to be that things auto-generated by Emacs and such things belong in ~/.emacs.d. | Users would be free to add their own Lisp | customizations before or after the load of | `custom-file'. I think this is important. I only use the customize interface, really, when I don't understand something well enough to handle it in my .emacs. Actually, there's not much left in my custom file now, because I tend to move things out of it to my own init routines as soon as I do understand something. I like to feel like I know what is going on, and like I can change things just by typing in a buffer, instead of fiddling with the customize interface. The result, and I can't be alone in this, is that I make the call to load the custom file at the beginning of my .emacs, so that if I happen to have defined something twice by mistake (or because I am too lazy to fix it) the result will be whatever I have defined in my .emacs. ^ permalink raw reply [flat|nested] 64+ messages in thread
* RE: `custom-file' and init-file [was: user-controlled load-pathextension: load-dir] 2011-03-09 21:19 ` `custom-file' and init-file [was: user-controlled load-path extension: load-dir] Evans Winner @ 2011-03-09 21:39 ` Drew Adams 2011-03-10 2:52 ` `custom-file' and init-file [was: user-controlled load-path extension: load-dir] Stephen J. Turnbull 1 sibling, 0 replies; 64+ messages in thread From: Drew Adams @ 2011-03-09 21:39 UTC (permalink / raw) To: 'Evans Winner', emacs-devel > | By itself, that wouldn't clue users in. A separate > | question would be whether to also have an (almost) > | empty `.emacs' by default, containing just an explicit > | load of `custom-file'. I'd say yes. > > Out of curiosity, would this complicate the process of Emacs > installation? Dunno. Don't think so. > Is the idea that the first time a user runs > Emacs, it checks to see if there is a .emacs in (getenv > "HOME"), and if not, creates it? Yes. That is one possibility. (Of course, emacs -Q would act as now: ignore any init file.) > Would that complicate things for system administrators? Dunno. Why would it? > Presumably they should > use site-init.el, but I know some add some kind of simple > .emacs file to the user account creation routine. Well if the sysadmins give their users a standard (for their organization) default .emacs, then that would be used, no? IOW, presumably they or the user would put that file in the user's $HOME, so it would be picked up by Emacs - same as now. I don't see anything changing here. > By the way, for the default location of the custom file, I > would suggest ~/.emacs.d. Sounds good to me. But see also the other possibility discussed in the referenced thread and mentioned again today by Stephen: we autoload `custom-file' after the .emacs, etc. Either way is fine with me, and there are no doubt other possibilities. The basic idea is to give the user a `custom-file' by default (empty), and have Emacs automatically load it. Users would still have control over whether and when to load it. Customizations by Customize would always go to the `custom-file', unless `custom-file' raises an error. (Or is some particular value - see the thread for other possibilities here.) The point is that we would make sure that users would still have the possibility of not using `custom-file' at all and thus having Customize write to .emacs instead. That just would not be the default behavior. ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: `custom-file' and init-file [was: user-controlled load-path extension: load-dir] 2011-03-09 21:19 ` `custom-file' and init-file [was: user-controlled load-path extension: load-dir] Evans Winner 2011-03-09 21:39 ` `custom-file' and init-file [was: user-controlled load-pathextension: load-dir] Drew Adams @ 2011-03-10 2:52 ` Stephen J. Turnbull 1 sibling, 0 replies; 64+ messages in thread From: Stephen J. Turnbull @ 2011-03-10 2:52 UTC (permalink / raw) To: Evans Winner; +Cc: emacs-devel Evans Winner writes: > Out of curiosity, would this complicate the process of Emacs > installation? That depends on whether the recommendation to use a separate custom-file is strong enough to put in an automatic "migration" process. XEmacs did that; many users went to the trouble of acknowledging its convenience, but other users suffered data loss while converting .emacs to XEmacs conventions. That said, such data loss is rather unlikely for Emacs users (the problem occurs if the init file signals while loading; this is unlikely in Emacs -- few users mess with installing a new Emacs while their .emacs is non-working! -- but is somewhat likely if you load an .emacs designed for Emacs into XEmacs). > Is the idea that the first time a user runs > Emacs, it checks to see if there is a .emacs in (getenv > "HOME"), and if not, creates it? In Drew's scheme, that would probably be the way to go. (This is very safe compared to "migrating" an existing .emacs.) In the XEmacs scheme (which normally loads custom-file after the init file), it's unnecessary. > Would that complicate things for system administrators? Slightly. Probably not a big deal though. The .emacs file is explicitly for users to customize, so system administrators should not count on it being present or on it containing particular code. That's what the site init and default files are for. > The result, and I can't be alone in this, is that I make the > call to load the custom file at the beginning of my .emacs, > so that if I happen to have defined something twice by > mistake (or because I am too lazy to fix it) the result will > be whatever I have defined in my .emacs. This requires a bit of extra one-time effort in the XEmacs scheme (which implicitly loads custom-file after the init file). We consider it worth it because of the convenience and transparency of the process for almost all users. Since the snippet used is entirely generic, it could be wrapped up in a function `load-custom-file-now' or similar. ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-09 10:01 ` Jan Djärv 2011-03-09 15:42 ` `custom-file' and init-file [was: user-controlled load-path extension: load-dir] Drew Adams @ 2011-03-09 17:29 ` Stephen J. Turnbull 2011-03-09 18:18 ` Ted Zlatanov 1 sibling, 1 reply; 64+ messages in thread From: Stephen J. Turnbull @ 2011-03-09 17:29 UTC (permalink / raw) To: Jan Djärv; +Cc: Christoph Scholtes, tzz, emacs-devel Jan Djärv writes: > Christoph Scholtes skrev 2011-03-09 08.17: > > On 3/9/2011 12:06 AM, Jan D. wrote: > > > >> Another thing I really would like is for customize to > >> save its stuff in its own file and not in my .emacs. With a load-dir > >> this would be trivial. > > How about this: > > (setq custom-file "~/.emacs.d/init-custom.el") > > (load custom-file) > Yes, but this is missing the point. I can make an load-dir feature > in .emacs too. It is having this in emacs core, working without > extra user work that is the point. Yeah, except that as proposed you'll have to enable it in the init file anyway since it's off by default. It's also not entirely trivial, as experience in XEmacs shows that the decision about whether to load such things (specifically custom-file) *before* or *after* the user init file is a delicate one. I can only imagine that a load-dir would very likely be the source of numerous bugs as some snippets conflict with or depend on others but the automatic loader gets them in the wrong order. Note also that .d directories generally use some convention (such as file names starting with fixed width integers) that ensure that snippets sort in the right order. More modern systems use (please sit down, you're in for a shock) full-blown dependency systems (requires, provides, conflicts, etc) in the snippets, which avoids the need to maintain explicit order in favor of a partial order. ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-09 17:29 ` user-controlled load-path extension: load-dir Stephen J. Turnbull @ 2011-03-09 18:18 ` Ted Zlatanov 2011-03-09 19:33 ` Stephen J. Turnbull 0 siblings, 1 reply; 64+ messages in thread From: Ted Zlatanov @ 2011-03-09 18:18 UTC (permalink / raw) To: emacs-devel On Thu, 10 Mar 2011 02:29:02 +0900 "Stephen J. Turnbull" <stephen@xemacs.org> wrote: SJT> I can only imagine that a load-dir would very likely be the source SJT> of numerous bugs as some snippets conflict with or depend on others SJT> but the automatic loader gets them in the wrong order. We're just adding a mechanism for easy personal code deployment and modularization, not a cure for broken code. If there's a load order conflict the user will have to figure it out, just like putting loads in the wrong order in the .emacs file. SJT> Note also that .d directories generally use some convention (such as SJT> file names starting with fixed width integers) that ensure that SJT> snippets sort in the right order. I'm sure users can use that (I will). But they can also specify the order with explicit loads if that's what they need. SJT> More modern systems use (please sit down, you're in for a shock) SJT> full-blown dependency systems (requires, provides, conflicts, etc) SJT> in the snippets, which avoids the need to maintain explicit order SJT> in favor of a partial order. That's, again, overengineering the problem (as Mark Twain put it, "with all the modern inconveniences"). Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-09 18:18 ` Ted Zlatanov @ 2011-03-09 19:33 ` Stephen J. Turnbull 2011-03-09 19:57 ` Ted Zlatanov 0 siblings, 1 reply; 64+ messages in thread From: Stephen J. Turnbull @ 2011-03-09 19:33 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Ted Zlatanov writes: > On Thu, 10 Mar 2011 02:29:02 +0900 "Stephen J. Turnbull" <stephen@xemacs.org> wrote: > > SJT> I can only imagine that a load-dir would very likely be the source > SJT> of numerous bugs as some snippets conflict with or depend on others > SJT> but the automatic loader gets them in the wrong order. > > We're just adding a mechanism for easy personal code deployment and > modularization, not a cure for broken code. There's no broken code here, just code not engineered with automatic loading in mind. Ie, it's the idea of automatically loading random snippets that is broken: it's a mechanism for speeding up the mess, as Robert Townsend put it. I don't think that belongs in core, but rather should be an individually maintained function, tuned to each person's requirements. As for easy personal code deployment and modularization, there's nothing that says that deployment and modularization requires implementation as separate files, and in fact using separate files for most things that you would do in an init file is an annoyance as Stefan points out. Stefan's recommendation of using outline minor mode easily scales to a 100kB file for me in other contexts, I imagine it would work fine for the init file. While I admit YMMV as a user, from the point of view of Emacs maintainers this blows away the load-dir idea in terms of maintainability of Emacs core. Note that the good reasons for using separate files (assuming you use an editor that supports things like outline minor mode -- you do, don't you?<wink>) are not really compatible with automatic installation and loading. They're things like lazy loading and optional loading to avoid memory bloat and namespace pollution. Lazy loading could be a win (somebody mentioned autoloading instead of automatic loading at init time), therefore, but guess what? that requires reading code and deciding where to put autoload cookies. > SJT> Note also that .d directories generally use some convention (such as > SJT> file names starting with fixed width integers) that ensure that > SJT> snippets sort in the right order. > > I'm sure users can use that (I will). But they can also specify the > order with explicit loads if that's what they need. Neither of those is easy or automatic. To the extent that such are needed, people are going to have to sit down and read code to figure out what the problems are. That's precisely what the system is supposed to avoid. Note that you also have a problem that such explicitly loaded files will often need to be moved out of the load-dir, as they won't be designed to be idempotent. Mostly not a problem, of course, and therefore all the more annoying and confusing when it does arise. > SJT> More modern systems use (please sit down, you're in for a shock) > SJT> full-blown dependency systems (requires, provides, conflicts, etc) > SJT> in the snippets, which avoids the need to maintain explicit order > SJT> in favor of a partial order. > > That's, again, overengineering the problem (as Mark Twain put it, "with > all the modern inconveniences"). Well, no, it's not. The problem in question is maintaining a .d directory without requiring the user to have a clue. If Stefan and Yidong could get away with "Ted Z says that's overengineering so we ain't gonna touch it", it might be worth putting this in core. But my recommendation to them is "snippet conflicts are going to be a persistent annoyance in the long term; let Ted Z and Jan D maintain a package and deal with the PEBKACs and RFEs." ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-09 19:33 ` Stephen J. Turnbull @ 2011-03-09 19:57 ` Ted Zlatanov 2011-03-10 3:20 ` Stephen J. Turnbull 0 siblings, 1 reply; 64+ messages in thread From: Ted Zlatanov @ 2011-03-09 19:57 UTC (permalink / raw) To: emacs-devel On Thu, 10 Mar 2011 04:33:16 +0900 "Stephen J. Turnbull" <stephen@xemacs.org> wrote: SJT> Ted Zlatanov writes: >> On Thu, 10 Mar 2011 02:29:02 +0900 "Stephen J. Turnbull" <stephen@xemacs.org> wrote: >> SJT> I can only imagine that a load-dir would very likely be the source SJT> of numerous bugs as some snippets conflict with or depend on others SJT> but the automatic loader gets them in the wrong order. >> >> We're just adding a mechanism for easy personal code deployment and >> modularization, not a cure for broken code. SJT> There's no broken code here, just code not engineered with automatic SJT> loading in mind. By your logic out-of-order startup scripts in /etc/rc.d should be managed with an external system because simple shell scripts are not engineered with automatic loading in mind. Sometimes things really are independent and you have to trust the user. SJT> Ie, it's the idea of automatically loading random snippets that is SJT> broken: it's a mechanism for speeding up the mess, as Robert SJT> Townsend put it. I don't think that belongs in core, but rather SJT> should be an individually maintained function, tuned to each SJT> person's requirements. OK, thank you for your opinion. SJT> As for easy personal code deployment and modularization, there's SJT> nothing that says that deployment and modularization requires SJT> implementation as separate files, and in fact using separate files for SJT> most things that you would do in an init file is an annoyance as SJT> Stefan points out. Stefan's recommendation of using outline minor SJT> mode easily scales to a 100kB file for me in other contexts, I imagine SJT> it would work fine for the init file. While I admit YMMV as a user, SJT> from the point of view of Emacs maintainers this blows away the SJT> load-dir idea in terms of maintainability of Emacs core. OK. What reasons do you have to NOT include the load-dir functionality in the core if it's disabled by default and must be consciously enabled? That you're happy without it? SJT> Note that the good reasons for using separate files (assuming you use SJT> an editor that supports things like outline minor mode -- you do, SJT> don't you?<wink>) are not really compatible with automatic SJT> installation and loading. They're things like lazy loading and SJT> optional loading to avoid memory bloat and namespace pollution. Lazy SJT> loading could be a win (somebody mentioned autoloading instead of SJT> automatic loading at init time), therefore, but guess what? that SJT> requires reading code and deciding where to put autoload cookies. For me those reasons are modularization and easy code deployment on a personal level. I think I've been clear on that and wonder how you determined your reasons were the good ones. SJT> Note also that .d directories generally use some convention (such as SJT> file names starting with fixed width integers) that ensure that SJT> snippets sort in the right order. >> >> I'm sure users can use that (I will). But they can also specify the >> order with explicit loads if that's what they need. SJT> Neither of those is easy or automatic. To the extent that such are SJT> needed, people are going to have to sit down and read code to figure SJT> out what the problems are. That's precisely what the system is SJT> supposed to avoid. Who said load-dir is supposed to avoid problems? As with the earlier comment about broken code, if you screw up your configuration layout in any form, you go and fix it. Emacs should indicate where the error happened, but beyond that it's a user issue. SJT> Note that you also have a problem that such explicitly loaded files SJT> will often need to be moved out of the load-dir, as they won't be SJT> designed to be idempotent. Mostly not a problem, of course, and SJT> therefore all the more annoying and confusing when it does arise. Sorry, I don't follow. Can you give a specific example? SJT> More modern systems use (please sit down, you're in for a shock) SJT> full-blown dependency systems (requires, provides, conflicts, etc) SJT> in the snippets, which avoids the need to maintain explicit order SJT> in favor of a partial order. >> >> That's, again, overengineering the problem (as Mark Twain put it, "with >> all the modern inconveniences"). SJT> Well, no, it's not. The problem in question is maintaining a .d SJT> directory without requiring the user to have a clue. NO IT'S NOT! Why are you assuming you must treat the user like an idiot who doesn't know he put a file in a directory and can't figure out load dependencies? If the user wants hand-holding, he will use Customize and package.el and el-get and all the other marvels of the modern age. I prefer not to, for my own snippets I will write. SJT> If Stefan and Yidong could get away with "Ted Z says that's SJT> overengineering so we ain't gonna touch it", it might be worth SJT> putting this in core. But my recommendation to them is "snippet SJT> conflicts are going to be a persistent annoyance in the long term; SJT> let Ted Z and Jan D maintain a package and deal with the PEBKACs SJT> and RFEs." OK, got it. Thanks. Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-09 19:57 ` Ted Zlatanov @ 2011-03-10 3:20 ` Stephen J. Turnbull 2011-03-10 5:01 ` Ted Zlatanov 0 siblings, 1 reply; 64+ messages in thread From: Stephen J. Turnbull @ 2011-03-10 3:20 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Ted Zlatanov writes: > SJT> There's no broken code here, just code not engineered with automatic > SJT> loading in mind. > > By your logic out-of-order startup scripts in /etc/rc.d should be > managed with an external system because simple shell scripts are not > engineered with automatic loading in mind. Yes. That's what all of the GNU/Linux distros actually do. IIRC, NetBSD does as well, as does Mac OS X (nee FreeBSD), and *BSD is quite a bit farther to the "user responsibility" side of the field than GNU/Linux distros are. Some use a total order maintained mostly by hand, some use a partial ordering mechanism based on require/conflict/ provides. I'm not talking theory, I'm talking a decade of practice. > OK. What reasons do you have to NOT include the load-dir functionality > in the core if it's disabled by default and must be consciously enabled? > That you're happy without it? No. I maintain an Emacs, and I really don't want a feature that I am sure will cause some users pain, but I intend to disclaim responsibility for. I've made that mistake a couple of times, and the minor convenience it would provide to experienced users like you just doesn't offset the user pain and maintainer embarrassment. > For me those reasons are modularization and easy code deployment on a > personal level. I think I've been clear on that and wonder how you > determined your reasons were the good ones. My definition of "good" is pretty strict here. That is, "the need is sufficiently great, and the problem sufficiently difficult for users to solve on their own that it's appropriate to introduce new problems." The use of outline-minor-mode introduces no new problems so the hurdle is low for it. Since Emacs doesn't have per-function autoloads, optional loading and autoloading clear a substantially higher hurdle. load-dir, OTOH, is easy to implement, and will be even easier to install as a package. "Sorry, you're not tall enough to ride this ride." > Who said load-dir is supposed to avoid problems? As with the earlier > comment about broken code, if you screw up your configuration layout in > any form, you go and fix it. Emacs should indicate where the error > happened, but beyond that it's a user issue. But here *Emacs is screwing up the configuration* by automatically downloading and installing code, at least according to several advocates' proposals. Again, *this is not theory*. This is based on more than a decade of experience with such systems in XEmacs. Users do *not* view this as "oh, I messed up again". They view it as "if Emacs is not going to do it right, it should tell me to do it myself." > Sorry, I don't follow [the argument about non-idempotent configs]. > Can you give a specific example? Hooks written as lambdas, which will be added several times. > SJT> If Stefan and Yidong could get away with "Ted Z says that's > SJT> overengineering so we ain't gonna touch it", it might be worth > SJT> putting this in core. But my recommendation to them is "snippet > SJT> conflicts are going to be a persistent annoyance in the long term; > SJT> let Ted Z and Jan D maintain a package and deal with the PEBKACs > SJT> and RFEs." > > OK, got it. Thanks. You're welcome. ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-10 3:20 ` Stephen J. Turnbull @ 2011-03-10 5:01 ` Ted Zlatanov 2011-03-10 7:08 ` Stephen J. Turnbull 0 siblings, 1 reply; 64+ messages in thread From: Ted Zlatanov @ 2011-03-10 5:01 UTC (permalink / raw) To: emacs-devel On Thu, 10 Mar 2011 12:20:53 +0900 "Stephen J. Turnbull" <stephen@xemacs.org> wrote: SJT> Ted Zlatanov writes: >> For me those reasons are modularization and easy code deployment on a >> personal level. I think I've been clear on that and wonder how you >> determined your reasons were the good ones. SJT> My definition of "good" is pretty strict here. That is, "the need is SJT> sufficiently great, and the problem sufficiently difficult for users SJT> to solve on their own that it's appropriate to introduce new SJT> problems." There's a lot of "daddy knows best" packed in your definition, isn't there? I find your "users will feel pain and the maintainer will suffer embarassment" emotional arguments unappealing and somewhat patronizing, personally. >> Who said load-dir is supposed to avoid problems? As with the earlier >> comment about broken code, if you screw up your configuration layout in >> any form, you go and fix it. Emacs should indicate where the error >> happened, but beyond that it's a user issue. SJT> But here *Emacs is screwing up the configuration* by automatically SJT> downloading and installing code, at least according to several SJT> advocates' proposals. I have not advocated such a thing and am against it; if I implied otherwise I apologize for the misunderstanding. el-get's *bootstrap* may reside in the load-dir, but all the packages it manages won't. SJT> Again, *this is not theory*. This is based on more than a decade SJT> of experience with such systems in XEmacs. Users do *not* view SJT> this as "oh, I messed up again". They view it as "if Emacs is not SJT> going to do it right, it should tell me to do it myself." I view it as "I enabled the load-dir feature, maybe I should understand it." You keep insisting on holding the user's hand. FWIW XEmacs rewrote and broke my .emacs without prompting last time I had to use it to debug a Gnus problem, so I'm pessimistic about the way it holds the user's hand. Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-10 5:01 ` Ted Zlatanov @ 2011-03-10 7:08 ` Stephen J. Turnbull 2011-03-10 13:15 ` Ted Zlatanov 0 siblings, 1 reply; 64+ messages in thread From: Stephen J. Turnbull @ 2011-03-10 7:08 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Ted Zlatanov writes: > There's a lot of "daddy knows best" packed in your definition, isn't > there? Of course. That's what a maintainer does, make these kinds of decisions about what's best for everybody. That is the point of view I'm taking, not trying to evaluate the feature on its own terms. > I have not advocated [automatically installing and loading code] > and am against it; if I implied otherwise I apologize for the > misunderstanding. el-get's *bootstrap* may reside in the load-dir, > but all the packages it manages won't. From the maintainer's point of view, this is *not about you*. You have restrained requirements for the feature, yes. How do you propose to impose *your* restraints on *others* who want additional features, though? > SJT> Again, *this is not theory*. This is based on more than a decade > SJT> of experience with such systems in XEmacs. Users do *not* view > SJT> this as "oh, I messed up again". They view it as "if Emacs is not > SJT> going to do it right, it should tell me to do it myself." > > I view it as "I enabled the load-dir feature, maybe I should understand > it." Again, how do you propose to get all other users to view it that way? If this is only for you, you already know how to do it. Obviously, you expect this to be used by many people. It needs to meet their expectations as well as yours, or it's a bad idea to maintain it in core. It is my opinion, based on experience, that requests for more automation will come up over and over again. Similarly, requests for support when code that users throw into the pot conflicts with code already there will come up over and over again. I don't think this feature is worth inducing those requests, that's all. > You keep insisting on holding the user's hand. No. I'm anticipating what *some* users are going to expect of it, based on experience with maintaining similar features. I wouldn't hold the user's hand in this case, I'd simply insist that the feature be provided as a package. Then helping them with their misconceptions (and statistically speaking, there will be a certain fraction of users who misunderstand) is my privilege as core maintainer, not my responsibility. Putting it in core makes it the other way around, and that will suck for Stefan and Yidong IMO. > FWIW XEmacs rewrote and broke my .emacs without prompting last time I > had to use it to debug a Gnus problem, so I'm pessimistic about the way > it holds the user's hand. Bingo! That's exactly the result of the kind of feature creep I'm worred about here, that I described as a mistake, which I now regret not opposing more vehemently at the time, and which I am still not in a position to unilaterally roll back. And whatever happened to your "I enabled it, I should understand it" view? XEmacs was supposed to be a drop-in replacement for Emacs; you shouldn't be surprised that it uses .emacs as its init file and its custom-file if it finds it and custom-file isn't explicitly set, just like Emacs does. If you had spent the time to think about the implications of what you were doing, I should think that "xemacs -q"[1] would be the obvious thing to use to debug Gnus. After all, the person who reported the bug certainly wasn't using *your* .emacs in *her* XEmacs. But that's not the way you think about it, clearly. And guess what? You're right not to think about it that way, just as the users who won't think so carefully about a trivial feature like load-dir are right for them. Life is too short. Footnotes: [1] Which causes both user-init-file and custom-file to be nil, so no accesses, let alone writes, to .emacs would occur. ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-10 7:08 ` Stephen J. Turnbull @ 2011-03-10 13:15 ` Ted Zlatanov 2011-03-11 2:10 ` Stephen J. Turnbull 0 siblings, 1 reply; 64+ messages in thread From: Ted Zlatanov @ 2011-03-10 13:15 UTC (permalink / raw) To: emacs-devel On Thu, 10 Mar 2011 16:08:15 +0900 "Stephen J. Turnbull" <stephen@xemacs.org> wrote: SJT> Ted Zlatanov writes: >> I have not advocated [automatically installing and loading code] >> and am against it; if I implied otherwise I apologize for the >> misunderstanding. el-get's *bootstrap* may reside in the load-dir, >> but all the packages it manages won't. SJT> From the maintainer's point of view, this is *not about you*. You SJT> have restrained requirements for the feature, yes. How do you propose SJT> to impose *your* restraints on *others* who want additional features, SJT> though? By making the feature an optional, off-by-default loader and nothing more. >> I view it as "I enabled the load-dir feature, maybe I should understand >> it." SJT> Again, how do you propose to get all other users to view it that way? SJT> If this is only for you, you already know how to do it. Obviously, SJT> you expect this to be used by many people. It needs to meet their SJT> expectations as well as yours, or it's a bad idea to maintain it in SJT> core. I think you're arguing that the feature will be misinterpreted and misused. I disagree and can't find a way to agree with you; I still think it's simple enough that it won't cause the kind of mismatched expectations that lead to unwanted behavior and bug reports. >> You keep insisting on holding the user's hand. SJT> No. I'm anticipating what *some* users are going to expect of it, SJT> based on experience with maintaining similar features. I wouldn't SJT> hold the user's hand in this case, I'd simply insist that the feature SJT> be provided as a package. Then helping them with their misconceptions SJT> (and statistically speaking, there will be a certain fraction of users SJT> who misunderstand) is my privilege as core maintainer, not my SJT> responsibility. Putting it in core makes it the other way around, and SJT> that will suck for Stefan and Yidong IMO. While I disagree about the consequences you think it will have, I'm proposing it before committing code exactly so the maintainers can make up their mind. I think we've both stated our case clearly at this point. Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-10 13:15 ` Ted Zlatanov @ 2011-03-11 2:10 ` Stephen J. Turnbull 0 siblings, 0 replies; 64+ messages in thread From: Stephen J. Turnbull @ 2011-03-11 2:10 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Ted Zlatanov writes: > While I disagree about the consequences you think it will have, I'm > proposing it before committing code exactly so the maintainers can make > up their mind. I think we've both stated our case clearly at this point. Yup. ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-09 7:06 ` Jan D. 2011-03-09 7:17 ` Christoph Scholtes @ 2011-03-09 21:57 ` Mike Mattie 2011-03-10 7:08 ` Jan Djärv 1 sibling, 1 reply; 64+ messages in thread From: Mike Mattie @ 2011-03-09 21:57 UTC (permalink / raw) To: Jan D.; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1999 bytes --] On Wed, Mar 09, 2011 at 08:06:16AM +0100, Jan D. wrote: > Ted Zlatanov skrev 2011-03-08 22:38: > > On Tue, 08 Mar 2011 15:59:51 -0500 Stefan Monnier<monnier@IRO.UMontreal.CA> wrote: > > > > SM> If you're really talking about configuration code rather than packages, > > SM> then I tend to assume that people whose .emacs is so large as to need > > SM> modularization can figure out which kind of modularization they want and > > SM> implement (or copy&paste) the corresponding loop to load the various files. > > > > Yes, but you're assuming managing configuration modules in monolithic > > Emacs Lisp is the best way. Give us something simple and easy to manage > > the loop at the filesystem level, so we don't have to write it > > ourselves. > > > > SM> I'm not even sure why you'd want to "modularize" in this way: my .emacs > > SM> was fairly large but splitting it into separate files never seemed like > > SM> a good way to help, since I'd then have to figure out how to make C-s > > SM> and M-/ find matches in neighboring files. Instead I "split" it with > > SM> outline-minor-mode. > > > > For me it works better. I like small files; outline-minor-mode and > > folding-mode don't work for me. I suspect I'm not the only one. See > > the URLs above for a list of similar needs. > > > > As others have said, I was also suprised that dropping a .el-fil in > ~/emacs.d didn't load it by default. My emacs is quite big and I'd love > to split it up. Another thing I really would like is for customize to > save its stuff in its own file and not in my .emacs. With a load-dir > this would be trivial. > > There is a real need an packages isn't it. Its like wanting a rowing > boat and told to use the latest battle ship instead. Can you take a look at Grail http://www.emacswiki.org/emacs/Grail and see if that meets your needs ? If you want to modularize your configuration it is explicity designed to do so. > > Jan D. > [-- Attachment #2: Type: application/pgp-signature, Size: 0 bytes --] ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-09 21:57 ` Mike Mattie @ 2011-03-10 7:08 ` Jan Djärv 0 siblings, 0 replies; 64+ messages in thread From: Jan Djärv @ 2011-03-10 7:08 UTC (permalink / raw) To: Mike Mattie; +Cc: emacs-devel Mike Mattie skrev 2011-03-09 22.57: > On Wed, Mar 09, 2011 at 08:06:16AM +0100, Jan D. wrote: >> >> There is a real need an packages isn't it. Its like wanting a rowing >> boat and told to use the latest battle ship instead. > > Can you take a look at Grail http://www.emacswiki.org/emacs/Grail and see if > that meets your needs ? If you want to modularize your configuration it is > explicity designed to do so. > Still not part of the core, and also too complicated. Jan D. ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-08 10:26 ` Ted Zlatanov 2011-03-08 17:14 ` Chong Yidong 2011-03-08 20:59 ` Stefan Monnier @ 2011-03-09 6:03 ` Mike Mattie 2011-03-09 7:20 ` Jan D. 2 siblings, 1 reply; 64+ messages in thread From: Mike Mattie @ 2011-03-09 6:03 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 4261 bytes --] On Tue, Mar 08, 2011 at 04:26:32AM -0600, Ted Zlatanov wrote: > On Mon, 07 Mar 2011 21:46:10 -0500 Stefan Monnier <monnier@iro.umontreal.ca> wrote: > > >> I think this proposal is really about code snippets that people would > >> otherwise just cut and paste into their .emacs file. The average > >> user's .emacs often winds up containing mostly code they found > >> somewhere and use without really understanding it. Dropping each > >> snippit in its own file would be a big help if the user ever did need > >> to debug some problem with his init, or if he decided one day to > >> actually learn elisp. > > SM> I'm far from convinced it's better for people to drop random chunks of > SM> configuration into separate files rather than all in the .emacs file. > > It's not "better," it's what people already do. Emacs would just make > it easier than the current situation, which is to drop a file plus edit > the .emacs every time a file is added or deleted. What other choice is > there to modularize .emacs? > > SM> If you're talking about downloading random files containing > SM> configuration code (so the user doesn't have to create a file, inventing > SM> a file name for it), then maybe that could make sense, but I haven't > SM> seen such files very much, and I suspect many of them could easily be > SM> turned either into themes or into packages installable via package.el. > > Obviously that works for package managers like el-get. > > OK, let's say I have the 8 files I listed earlier (tzz.emacs.*.el). I > want to load them modularly. So I put them in the load-dir. Do I have > to make 8 packages? And every time I update one of those files, do I > have to repackage it with a new version? That seems workable but > tedious compared to the code proposed by Ben Key and Evans Winner. > > If you're against including the load-dir in the core and enabling it by > default, how about making it a GNU ELPA package so it's easily > installable? > > On Tue, 8 Mar 2011 01:14:37 -0600 Ben Key <bkey76@gmail.com> wrote: > > BK> I am attaching to this message a quick implementation of this feature I > BK> threw together in about an hour. I am not familiar with the Emacs package > BK> mechanism but I am certain that this could be converted to an Emacs package > BK> without too much work thus making it easier to install. > > On Tue, 08 Mar 2011 02:58:03 -0700 Evans Winner <ego111@gmail.com> wrote: > > EW> For what it's worth, this is the thing I have in my .emacs. > EW> It does what I want it to, which is just to allow me to > EW> break my .emacs into various not-excessively-long files > EW> organized by subject, like email config, org-mode config and > EW> so-forth. > > Thanks for your code. Both of your solutions are similar to what I > would like to use, but Mike Mattie's concerns about startup behavior > (mainly for daemon mode, for --batch mode, and when there are errors) > are valid. The recursion behavior should probably not be the default by > parallel with other such systems I listed, e.g. /etc/rc.d and Bazaar's > plugins directory. It's easy enough to make it optional or to write a > snippet that loads a specific subdirectory. The argument I have against > recursion is that it's hard to tell at a glance what's going to get > loaded. I have thought alot about your proposal for automatic loading so that it is not necessary to edit anything, just drop a file in. There is some real appeal for that kind of a feature ... but it is hard to implement. By hard to implement I mean really hard. Just because a file is opened and written to, it is not necessarily ready to load. I hit C-x s alot when tweaking files ... Even if I hacked some kind of inotify support to watch a directory for IO activity I would never know when to actually load it. If you can somehow signal when a collection is ready for re-scanning I can see an implementation ... > > It seems no one thinks prompting about new or changed files in the > load-dir is worthwhile, so never mind about that part of my proposal. I don't discount your idea, it's just hard to make a really reliable implementation IMHO. > > Thanks > Ted > > [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-09 6:03 ` Mike Mattie @ 2011-03-09 7:20 ` Jan D. 2011-03-09 23:44 ` Mike Mattie 0 siblings, 1 reply; 64+ messages in thread From: Jan D. @ 2011-03-09 7:20 UTC (permalink / raw) To: Mike Mattie; +Cc: Ted Zlatanov, emacs-devel Mike Mattie skrev 2011-03-09 07:03: > I have thought alot about your proposal for automatic loading so that it > is not necessary to edit anything, just drop a file in. There is some > real appeal for that kind of a feature ... but it is hard to implement. > > By hard to implement I mean really hard. Just because a file is opened > and written to, it is not necessarily ready to load. I hit C-x s alot > when tweaking files ... > > Even if I hacked some kind of inotify support to watch a directory for > IO activity I would never know when to actually load it. > > If you can somehow signal when a collection is ready for re-scanning > I can see an implementation ... > It can't be hard, there are tons of programs that already have this feature. Some have inotify style loading, other just load at startup. I would expect load at startup and then with a command (M-x load-load-dir or some such). Jan D. ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-09 7:20 ` Jan D. @ 2011-03-09 23:44 ` Mike Mattie 0 siblings, 0 replies; 64+ messages in thread From: Mike Mattie @ 2011-03-09 23:44 UTC (permalink / raw) To: Jan D.; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1073 bytes --] On Wed, Mar 09, 2011 at 08:20:49AM +0100, Jan D. wrote: > Mike Mattie skrev 2011-03-09 07:03: > > > I have thought alot about your proposal for automatic loading so that it > > is not necessary to edit anything, just drop a file in. There is some > > real appeal for that kind of a feature ... but it is hard to implement. > > > > By hard to implement I mean really hard. Just because a file is opened > > and written to, it is not necessarily ready to load. I hit C-x s alot > > when tweaking files ... > > > > Even if I hacked some kind of inotify support to watch a directory for > > IO activity I would never know when to actually load it. > > > > If you can somehow signal when a collection is ready for re-scanning > > I can see an implementation ... > > > > It can't be hard, there are tons of programs that already have this > feature. Some have inotify style loading, other just load at startup. > I would expect load at startup and then with a command (M-x > load-load-dir or some such). That I can do. > > Jan D. > > > [-- Attachment #2: Type: application/pgp-signature, Size: 0 bytes --] ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-07 16:24 ` Ted Zlatanov 2011-03-07 17:18 ` Chad Brown 2011-03-07 17:52 ` Stefan Monnier @ 2011-03-08 0:47 ` Mike Mattie 2011-03-08 10:37 ` Ted Zlatanov 2 siblings, 1 reply; 64+ messages in thread From: Mike Mattie @ 2011-03-08 0:47 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 5562 bytes --] On Mon, Mar 07, 2011 at 10:24:58AM -0600, Ted Zlatanov wrote: > On Sat, 5 Mar 2011 11:11:34 -0800 Chad Brown <yandros@MIT.EDU> wrote: > > CB> On Mar 4, 2011, at 7:18 PM, Ted Zlatanov wrote: > >> > >> By analogy consider some of the software that lets you put a snippet in > >> a conf.d directory, obviously implying that this is convenient for the > >> user. This is just a sampling from my machine: > > CB> Those are all machine-wide configurations. For that, use site-lisp. > > Bazaar has a plugins directory; files in it are automatically activated, > as an example of a user-level facility like this. Anyhow, my point is > that placing a file in a directory is inherently more modular and > convenient to the user than augmenting a single file. Do you disagree? > > CB> If the user has to go through a set of steps to install and activate a > CB> package, how isn't that what ELPA does? > > They are not packages, they are snippets of code. ELPA requires far > more structure and many more steps. For what I'm proposing, a lot less > work is required (just a y/n prompt the first time a snippet is found to > ensure it's not placed there maliciously). > This whole security thing is a real non-issue. There is no security in Emacs, it (Emacs) simply uses the underlying system security model. What is really at issue is whether the user _trusts_ the code. Trying to address security issues in a software system that has no security API/model leads to some skewed thinking, and I am not just splitting hairs. Thinking in terms of trust leads to better reasoning. > On Sat, 5 Mar 2011 23:21:51 -0800 Mike Mattie <codermattie@gmail.com> wrote: > > MM> There are ways to solve the problem you are looking at without wiring more > MM> logic into Emacs. Use the .emacs file as a more sophisticated loader for a > MM> complex configuration when necessary. > > I can and do, sure. I don't think it creates a nice user experience. > > MM> I have done this with my Grail project (on EmacsWiki), as has tidyconfig. > MM> I would look at these solutions first before proposing code that has to > MM> be wired into the bootstrap codepath. > > Thanks for pointing those out. Would Grail or tidyconfig work as a core > option on startup (meaning the user doesn't have to install a package, > just customize a boolean)? Do they handle signing the snippets the > first time they are found? Can you give us a comparison of them and any > other similar solutions you know? They have to be GPL and assigned to > Emacs to be included. I doubt Grail would be included in-tree. Maybe I am wrong, but I get that vibe. I would certianly need to convert some recursive functions to iterative versions before even bringing Grail to the table. I have been maturing Grail out-of-tree to ensure the code is robust, designed well, and is targetted at typical user needs. > > MM> There are a number of issues a reliable loader should address: > > MM> how does it handle errors ? > > MM> how does it handle --batch ? > > MM> how does it handle --daemon ? > > MM> how simple,transparent,debuggable is the loader code ? > > MM> I have not seen any code so far in your proposal unless I accidentally > MM> skipped or deleted a message with it. > > I can write the code but haven't seen the need for actual code yet (I > could have just comitted some code to Emacs instead, but find that > option to be antisocial). > > I'd rather use something that already exists such as Grail or tidyconfig > that you kindly pointed out. If you could tell us how any potential > solutions can help answer the questions above, that would be wonderful. > I can look at any solutions and evaluate them if you like. I can only speak for grail, but Grail essentially Handles the load-path issue. When it comes to load-path Grail is comprehensive. What grail does not do is automatically load code from a given directory. Directories that grail looks for are added to load-path when they exist. Grail looks for files such as keys.el commands.el, user.el and does load those when found. They are assumed to be user created files. When snippets are collected in a directory such as dist/elisp, or local/elisp, the user is expected to place a require or similar command in one of these recognized files to actually load the snippet/whatever at the start. As far as error-handling goes grail does shine a bit in that errors within a file are trapped, meaning that mistakes in one file does not cause the entire configuration to abort leading to a --debug-init situtation. In this regard Grail is extremely robust. I will be updating the documentation of Grail extensively over the next couple few days to describe it's use, usefulness, limitations etc .. I will send you a mail off-list when I have articulated Grail properly. > > To answer your questions from my perspective, IMHO a loader should work > like package.el. IOW, whenever and however package.el is loaded > currently, this loader we're discussing should also be loaded, since > it's effectively a package manager but with snippets instead of > packages. I am seriously considering how to add the kind of functionality you want to Grail. I would like to add it to broaden the usefullness of Grail. I do not like the idea of hacking another load-path 'ish variable into Emacs when simply adding elisp to manage load-path is an option. Two similar variables is simply bad design. > > Ted > > [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-08 0:47 ` Mike Mattie @ 2011-03-08 10:37 ` Ted Zlatanov 2011-03-09 6:26 ` Mike Mattie 0 siblings, 1 reply; 64+ messages in thread From: Ted Zlatanov @ 2011-03-08 10:37 UTC (permalink / raw) To: emacs-devel On Mon, 7 Mar 2011 16:47:27 -0800 Mike Mattie <codermattie@gmail.com> wrote: MM> As far as error-handling goes grail does shine a bit in that errors within MM> a file are trapped, meaning that mistakes in one file does not cause the MM> entire configuration to abort leading to a --debug-init situtation. In this MM> regard Grail is extremely robust. That sounds useful indeed. MM> I am seriously considering how to add the kind of functionality you want to MM> Grail. I would like to add it to broaden the usefullness of Grail. I do not MM> like the idea of hacking another load-path 'ish variable into Emacs when simply MM> adding elisp to manage load-path is an option. Two similar variables is simply MM> bad design. Maybe you could provide separate packages: grail-loader, grail-load-dir (the snippets directory), and grail-modules (the current Grail modules like keys.el). Then users can choose which layout they prefer and still get the benefit of a safe loader. Or perhaps grail-load-dir can simply be part of grail-loader. Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-08 10:37 ` Ted Zlatanov @ 2011-03-09 6:26 ` Mike Mattie 2011-03-09 11:26 ` Ted Zlatanov 0 siblings, 1 reply; 64+ messages in thread From: Mike Mattie @ 2011-03-09 6:26 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1782 bytes --] On Tue, Mar 08, 2011 at 04:37:37AM -0600, Ted Zlatanov wrote: > On Mon, 7 Mar 2011 16:47:27 -0800 Mike Mattie <codermattie@gmail.com> wrote: > > MM> As far as error-handling goes grail does shine a bit in that errors within > MM> a file are trapped, meaning that mistakes in one file does not cause the > MM> entire configuration to abort leading to a --debug-init situtation. In this > MM> regard Grail is extremely robust. > > That sounds useful indeed. > > MM> I am seriously considering how to add the kind of functionality you want to > MM> Grail. I would like to add it to broaden the usefullness of Grail. I do not > MM> like the idea of hacking another load-path 'ish variable into Emacs when simply > MM> adding elisp to manage load-path is an option. Two similar variables is simply > MM> bad design. > > Maybe you could provide separate packages: grail-loader, grail-load-dir > (the snippets directory), and grail-modules (the current Grail modules > like keys.el). Then users can choose which layout they prefer and still > get the benefit of a safe loader. Or perhaps grail-load-dir can simply > be part of grail-loader. I have been reading this thread very carefully and have given the snippets proposal alot of thought. I am willing to add a snippets directory like functionality. I would require the user to execute a command to signal to grail that the user has placed a new file in the snippets directory. BTW, Grail does allow you to change the layout, by creating a grail-cfg.el file in USER_ELISP (see the Grail page for the meaning of that variable). grail-cfg.el is loaded if it exists right after the default tree is defined in defvar's and before the heavy lifting is done in terms of loading. > > Ted > > [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: user-controlled load-path extension: load-dir 2011-03-09 6:26 ` Mike Mattie @ 2011-03-09 11:26 ` Ted Zlatanov 0 siblings, 0 replies; 64+ messages in thread From: Ted Zlatanov @ 2011-03-09 11:26 UTC (permalink / raw) To: emacs-devel On Tue, 8 Mar 2011 22:26:01 -0800 Mike Mattie <codermattie@gmail.com> wrote: MM> I have been reading this thread very carefully and have given the MM> snippets proposal alot of thought. I am willing to add a snippets MM> directory like functionality. I would require the user to execute a MM> command to signal to grail that the user has placed a new file in the MM> snippets directory. MM> BTW, Grail does allow you to change the layout, by creating a MM> grail-cfg.el file in USER_ELISP (see the Grail page for the meaning of MM> that variable). grail-cfg.el is loaded if it exists right after the MM> default tree is defined in defvar's and before the heavy lifting is done MM> in terms of loading. I think Grail brings too much functionality for the proposal in this discussion, after looking at its pieces. Ben Key's implementation is closer to the simplicity I was hoping for. That's not to say Grail is not useful, I just don't think that it is the right solution here. Ted ^ permalink raw reply [flat|nested] 64+ messages in thread
end of thread, other threads:[~2011-03-11 2:10 UTC | newest] Thread overview: 64+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-03-01 20:32 user-controlled load-path extension: load-dir Ted Zlatanov 2011-03-03 21:07 ` Dimitri Fontaine 2011-03-04 9:55 ` Julien Danjou 2011-03-04 17:18 ` Tom Tromey 2011-03-04 18:04 ` Ted Zlatanov 2011-03-04 18:37 ` Dimitri Fontaine 2011-03-04 19:35 ` Tom Tromey 2011-03-04 19:45 ` Dimitri Fontaine 2011-03-04 19:54 ` Ted Zlatanov 2011-03-04 20:21 ` Dimitri Fontaine 2011-03-04 20:25 ` Chad Brown 2011-03-04 20:46 ` Ted Zlatanov 2011-03-05 19:24 ` Chad Brown 2011-03-04 20:26 ` Chad Brown 2011-03-04 20:08 ` Tom Tromey 2011-03-04 20:24 ` Dimitri Fontaine 2011-03-04 21:17 ` Tom Tromey 2011-03-04 21:33 ` Dimitri Fontaine 2011-03-04 21:37 ` Tom Tromey 2011-03-05 3:18 ` Ted Zlatanov 2011-03-05 19:11 ` Chad Brown 2011-03-06 7:21 ` Mike Mattie 2011-03-07 16:24 ` Ted Zlatanov 2011-03-07 17:18 ` Chad Brown 2011-03-07 17:59 ` Ted Zlatanov 2011-03-08 17:36 ` Dimitri Fontaine 2011-03-08 18:30 ` Chad Brown 2011-03-07 17:52 ` Stefan Monnier 2011-03-07 20:39 ` PJ Weisberg 2011-03-08 2:46 ` Stefan Monnier 2011-03-08 10:26 ` Ted Zlatanov 2011-03-08 17:14 ` Chong Yidong 2011-03-08 18:47 ` Ted Zlatanov 2011-03-08 19:23 ` Julien Danjou 2011-03-09 2:54 ` Stefan Monnier 2011-03-09 19:57 ` Chong Yidong 2011-03-08 20:59 ` Stefan Monnier 2011-03-08 21:38 ` Ted Zlatanov 2011-03-09 7:06 ` Jan D. 2011-03-09 7:17 ` Christoph Scholtes 2011-03-09 10:01 ` Jan Djärv 2011-03-09 15:42 ` `custom-file' and init-file [was: user-controlled load-path extension: load-dir] Drew Adams 2011-03-09 17:54 ` `custom-file' and init-file Stephen J. Turnbull 2011-03-09 21:19 ` `custom-file' and init-file [was: user-controlled load-path extension: load-dir] Evans Winner 2011-03-09 21:39 ` `custom-file' and init-file [was: user-controlled load-pathextension: load-dir] Drew Adams 2011-03-10 2:52 ` `custom-file' and init-file [was: user-controlled load-path extension: load-dir] Stephen J. Turnbull 2011-03-09 17:29 ` user-controlled load-path extension: load-dir Stephen J. Turnbull 2011-03-09 18:18 ` Ted Zlatanov 2011-03-09 19:33 ` Stephen J. Turnbull 2011-03-09 19:57 ` Ted Zlatanov 2011-03-10 3:20 ` Stephen J. Turnbull 2011-03-10 5:01 ` Ted Zlatanov 2011-03-10 7:08 ` Stephen J. Turnbull 2011-03-10 13:15 ` Ted Zlatanov 2011-03-11 2:10 ` Stephen J. Turnbull 2011-03-09 21:57 ` Mike Mattie 2011-03-10 7:08 ` Jan Djärv 2011-03-09 6:03 ` Mike Mattie 2011-03-09 7:20 ` Jan D. 2011-03-09 23:44 ` Mike Mattie 2011-03-08 0:47 ` Mike Mattie 2011-03-08 10:37 ` Ted Zlatanov 2011-03-09 6:26 ` Mike Mattie 2011-03-09 11:26 ` Ted Zlatanov
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git 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).