From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: "Garreau\, Alexandre" Newsgroups: gmane.emacs.devel 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 Message-ID: <87va5km6h3.fsf_-_@portable.galex-713.eu> References: <87woq0sf4a.fsf@portable.galex-713.eu> <87h8h4tblg.fsf@tcd.ie> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Trace: blaine.gmane.org 1540871788 5411 195.159.176.226 (30 Oct 2018 03:56:28 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 30 Oct 2018 03:56:28 +0000 (UTC) User-Agent: Gnus (5.13), GNU Emacs 25.1.1 (i686-pc-linux-gnu, GTK+ Version 3.22.11) of 2017-09-15, modified by Debian Cc: emacs-devel To: "Basil L. Contovounesios" Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Oct 30 04:56:23 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gHL8h-0001Jh-Il for ged-emacs-devel@m.gmane.org; Tue, 30 Oct 2018 04:56:23 +0100 Original-Received: from localhost ([::1]:50573 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gHLAn-0007JU-U7 for ged-emacs-devel@m.gmane.org; Mon, 29 Oct 2018 23:58:33 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:59984) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gHLAE-0007JM-0u for emacs-devel@gnu.org; Mon, 29 Oct 2018 23:57:58 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gHLAB-00035v-04 for emacs-devel@gnu.org; Mon, 29 Oct 2018 23:57:57 -0400 Original-Received: from portable.galex-713.eu ([2a00:5884:8305::1]:59996) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gHLA9-00034k-Er for emacs-devel@gnu.org; Mon, 29 Oct 2018 23:57:54 -0400 Original-Received: from localhost ([::1] helo=portable.galex-713.eu) by portable.galex-713.eu with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1gHLA1-0000ki-4v; Tue, 30 Oct 2018 04:57:46 +0100 PGP-FINGERPRINT: E109 9988 4197 D7CB B0BC 5C23 8DEB 24BA 867D 3F7F Accept-Language: fr, en, eo, it, br In-Reply-To: <87h8h4tblg.fsf@tcd.ie> (Basil L. Contovounesios's message of "Tue, 30 Oct 2018 02:25:15 +0000") X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:5884:8305::1 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:230797 Archived-At: 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=E2=80=99t know it! It=E2=80=99s pretty handy and I don=E2=80=99t= understand why it isn=E2=80=99t more advertised (though I can=E2=80=99t judge formally as I f= orgot how I learnt `call-process'). I wouldn=E2=80=99t have thought to it either (as s= how the other followup of my OP). > "Garreau, Alexandre" 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 =E2=80=9Cxdg-settings get default-url-scheme-handl= er=E2=80=9D. >> Maybe among other xdg stuff, such as localization language, or=E2=80=A6 = 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 =E2=80=9Cor=E2=80=9D f= irst time, anyway it wouldn=E2=80=99t have worked if the program wasn=E2=80=99t here, = as it would have, as you said, =E2=80=9Ccaused other issues=E2=80=9D, while xdg-user-di= r 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=E2=80=99t use the command xdg-user-dir per se, as I usu= ally 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=E2=80=A6 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=E2=80=99s 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=E2=80=99s 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=E2=80=99s just broken and by default wrongly put downl= oaded 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=E2=80=99s loaded on= ce at first emacs startup and kept for further sessions: it may not be up-to-date but it=E2=80=99d be faster, with no load overhead, and anyway th= at value isn=E2=80=99t 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=E2=80=99s awesome: replacing .emacs.d with something following xdg= (why not .config/emacs/?) so to cleanse home, I=E2=80=99ve dreamt it (I also dre= amt of an =E2=80=9Cexternal=E2=80=9D customization method for defcustom where i= t 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=E2=80=99s one).