unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Garreau\, Alexandre" <galex-713@galex-713.eu>
To: "Basil L. Contovounesios" <contovob@tcd.ie>
Cc: emacs-devel <emacs-devel@gnu.org>
Subject: xdg.el and eww custom load [Was: Re: Automatically set eww-download-directory according xdg dir]
Date: Tue, 30 Oct 2018 04:57:44 +0100	[thread overview]
Message-ID: <87va5km6h3.fsf_-_@portable.galex-713.eu> (raw)
In-Reply-To: <87h8h4tblg.fsf@tcd.ie> (Basil L. Contovounesios's message of "Tue, 30 Oct 2018 02:25:15 +0000")

On 2018/10/30 at 02:25, Basil L. Contovounesios wrote:
> I think the simplest (often too simple) way to synchronously get process
> output without using the shell is via the function process-lines:
>
>   (car (process-lines "xdg-user-dir" "DOWNLOAD"))

Oh I didn’t know it!  It’s pretty handy and I don’t understand why it
isn’t more advertised (though I can’t judge formally as I forgot how I
learnt `call-process').  I wouldn’t have thought to it either (as show
the other followup of my OP).

> "Garreau, Alexandre" <galex-713@galex-713.eu> writes:
>> Or should, instead, a xdg.el file be created where to put variables (or
>> functions) referring to correct (and up-to-date) names of XDG variables:
>> desktop, download, templates, publicshare, documents, music, pictures,
>> and videos, and maybe “xdg-settings get default-url-scheme-handler”.
>> Maybe among other xdg stuff, such as localization language, or… dunno
>> yet, but there must be things to get.
>
> FWIW, Emacs 26 includes the file lisp/xdg.el, which provides, amongst
> other things, the function xdg-user-dir:
>
>   (require 'xdg)
>   (xdg-user-dir "DOWNLOAD")

Then that could be used (sorry to have forgotten the “or” first time,
anyway it wouldn’t have worked if the program wasn’t here, as it would
have, as you said, “caused other issues”, while xdg-user-dir returns nil
if no config file to read):

#+BEGIN_SRC emacs-lisp
  (defcustom eww-download-directory
    (or (xdg-user-dir "DOWNLOAD") "~/Downloads/")
    "Directory where files will downloaded."
    :version "24.4"
    :require 'xdg
    :group 'eww
    :type 'string)
#+END_SRC

I find sad it doesn’t use the command xdg-user-dir per se, as I usually
prefer to always use the highest level interface, in case lower level
was changed.  But, if a that much complete xdg implementation use that,
it must be as much standard… and anyway it saves time (which may be not
that much important as it will lazily load it only once per session).

It is also sad it takes a (especially *uppercase*, yuck) string as an
argument, instead of a symbol.  That’s lower-level and avoid further
processing (be it `symbol-name', an assoc-list or raw strings), but
sound a lot less lispy to me: it’s like if xdg shell command syntax had
began to intrusivly delve into emacs lisp!

> But you wouldn't want to use this to set the value of
> eww-download-directory in its defcustom declaration

Why so? otherwise it’s just broken and by default wrongly put downloaded
files in the wrong dir, might create it, or fail.

> as that would slow down or potentially cause other issues when loading
> eww.el.  It would also need to handle the case where xdg-user-dir is
> not found in exec-path.

Maybe then using the *variable* xdg-user-dirs: if `xdg-user-dir' already
have been called once, it will lazily use what it already stored in this
variable, instead of rereading, so the I/O will stay constant.

Maybe it should be loaded earlier in emacs startup?  But I guess either
it is already the case, either it has been deemed too much for emacs
startup speed: then I guess lazily making eww one of the applications
that might trigger its first-time load in the session is acceptable, as
it is so to save emacs initial startup time.

Or, rather, maybe there should exist some facilities in custom.el so
that xdg-user-dirs becomes a saved custom option, so it’s loaded once at
first emacs startup and kept for further sessions: it may not be
up-to-date but it’d be faster, with no load overhead, and anyway that
value isn’t meant to change much in time (however that might confuse
some users if they ran emacs before to change their xdg dir settings).

> See also the following thread for some discussion of XDG support:
> https://lists.gnu.org/archive/html/emacs-devel/2018-05/msg00081.html

Wow that’s awesome: replacing .emacs.d with something following xdg (why
not .config/emacs/?) so to cleanse home, I’ve dreamt it (I also dreamt
of an “external” customization method for defcustom where it would go
get its default or saved custom values from external non-elisp files
instead (or exteral programs), such as the xdg ones), but procrastinated
to suggest it.  He did it.

Strangly, the thread is about adding it to ELPA, but nowadays as you
tell it it is in mainline emacs 27, and not in ELPA: from the sources I
cloned, I tried to load it, and it worked out of the box, so it would
especially be useful in ELPA as it would right away provide it to older
emacsen (like mine, debian’s one).



  reply	other threads:[~2018-10-30  3:57 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-29 19:54 Automatically set eww-download-directory according xdg dir Garreau, Alexandre
2018-10-29 20:08 ` `call-process', to a string [Was: Re: Automatically set eww-download-directory according xdg dir] Garreau, Alexandre
2018-10-29 20:37   ` `with-temp-buffer', `with-output-to-string': `with-temp-buffer-to-string' / `with-current-buffer-to-string' [Was: Re: `call-process', to a string] Garreau, Alexandre
2018-10-30  2:26     ` Basil L. Contovounesios
2018-10-30  2:25   ` `call-process', to a string [Was: Re: Automatically set eww-download-directory according xdg dir] Basil L. Contovounesios
2018-10-30  3:59     ` `call-process', to a string Garreau, Alexandre
2018-10-30  7:19     ` `call-process', to a string [Was: Re: Automatically set eww-download-directory according xdg dir] Eli Zaretskii
2018-10-30 10:21       ` `call-process', to a string Garreau, Alexandre
2018-10-30 11:10         ` Eli Zaretskii
2018-10-30 11:32           ` Garreau, Alexandre
2018-10-30 12:32             ` Eli Zaretskii
2018-10-30 13:46               ` Garreau, Alexandre
2018-10-31 12:44       ` `call-process', to a string [Was: Re: Automatically set eww-download-directory according xdg dir] Basil L. Contovounesios
2018-10-30  6:57   ` Eli Zaretskii
2018-10-30  2:25 ` Automatically set eww-download-directory according xdg dir Basil L. Contovounesios
2018-10-30  3:57   ` Garreau, Alexandre [this message]
2018-10-31 12:41     ` xdg.el and eww custom load [Was: Re: Automatically set eww-download-directory according xdg dir] Basil L. Contovounesios
2018-10-31 22:52       ` Garreau, Alexandre
2018-11-01 14:29         ` Basil L. Contovounesios
2018-11-01 14:56           ` xdg.el and eww custom load Garreau, Alexandre
2018-11-01 18:54             ` Basil L. Contovounesios
2018-10-30  7:16   ` Automatically set eww-download-directory according xdg dir Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87va5km6h3.fsf_-_@portable.galex-713.eu \
    --to=galex-713@galex-713.eu \
    --cc=contovob@tcd.ie \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).