Subject: 27.2; XDG_DATA_HOME evaluation in move-file-to-trash

From: Thierry Volpiatto <[email-masked]>
Date: Thu, 15 Apr 2021 10:05:04 +0200

In `move-file-to-trash` there is this code:

    (or (getenv "XDG_DATA_HOME")
        "~/.local/share")

If XDG_DATA_HOME is not set getenv returns nil and that's fine, if
XDG_DATA_HOME is set to a file path this path is returned and it's fine
as well, however if user follow recommendations of
https://specifications.freedesktop.org/basedir-spec/latest/ar01s03.html
and set XDG_DATA_HOME to "$HOME/.local/share" then the above block will
return this value from getenv which is wrong, `substitute-in-file-name`
should be used here.

    (setenv "XDG_DATA_HOME" "$HOME/.local/share")
    (or (getenv "XDG_DATA_HOME")
         "~/.local/share")
    ==> "$HOME/.local/share"
    (substitute-in-file-name
     (or (getenv "XDG_DATA_HOME")
         "~/.local/share"))
    ==> /home/you/.local/share

Not far after in the code tou have this block that attempt to create the
trash directory:

    ;; Ensure that the trash directory exists; otherwise, create it.
    (with-file-modes #o700
      (unless (file-exists-p trash-files-dir)
        (make-directory trash-files-dir t))
      (unless (file-exists-p trash-info-dir)
        (make-directory trash-info-dir t)))

which expand to (make-directory "$HOME/.local/share" t)

In GNU Emacs 27.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30, cairo version 1.15.10)
 of 2021-03-25 built on IPadS340
Windowing system distributor 'The X.Org Foundation', version 11.0.12008000
System Description: Linux Mint 19.3

Recent messages:
Mark set [3 times]
Auto-saving...done
Mark set [2 times]
Auto-saving...done
Send this bug report to the Emacs maintainers? (y or n) y
Quit
Mark set [2 times]
Message modified; kill anyway? (y or n) y
[mu4e] Switch to Posteo
[mu4e] Switched context to Posteo

Configured using:
 'configure CFLAGS=-O8 --without-dbus --without-gconf
 --without-gsettings --with-mailutils --with-cairo'

Configured features:
XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM GLIB NOTIFY INOTIFY ACL
LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON
PDUMPER LCMS2 GMP

Important settings:
  value of $LANG: fr_FR.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Ilisp

Minor modes in effect:
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  global-undo-tree-mode: t
  undo-tree-mode: t
  global-ligature-mode: t
  ligature-mode: t
  psession-mode: t
  psession-savehist-mode: t
  global-git-gutter-mode: t
  eldoc-in-minibuffer-mode: t
  display-time-mode: t
  winner-mode: t
  show-paren-mode: t
  helm-epa-mode: t
  helm-descbinds-mode: t
  override-global-mode: t
  helm-adaptive-mode: t
  helm-mode: t
  shell-dirtrack-mode: t
  helm-popup-tip-mode: t
  async-bytecomp-package-mode: t
  dired-async-mode: t
  minibuffer-depth-indicate-mode: t
  straight-use-package-mode: t
  straight-package-neutering-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(epa-mail autocrypt-mu4e addressbook-bookmark mu4e-config org-mu4e
mu4e-patch mu4e-contrib eshell esh-cmd esh-ext esh-opt esh-proc esh-io
esh-arg esh-module esh-groups esh-util mu4e mu4e-org mu4e-main mu4e-view
mu4e-view-gnus gnus-art mm-uu mml2015 mm-view mml-smime smime dig
mu4e-view-common mu4e-headers mu4e-compose mu4e-context mu4e-draft
mu4e-actions ido rfc2368 smtpmail mu4e-mark mu4e-proc mu4e-utils
mu4e-lists mu4e-message flow-fill hl-line mu4e-vars mu4e-meta helm-ring
shadow sort autocrypt-message autocrypt mail-extr emacsbug sendmail
tabify pulse view helm-dabbrev magit-extras face-remap magit-bookmark
magit-submodule magit-obsolete magit-blame magit-stash magit-reflog
magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote
magit-commit magit-sequence magit-notes magit-worktree magit-tag
magit-merge magit-branch magit-reset magit-files magit-refs magit-status
magit magit-repos magit-apply magit-wip magit-log which-func magit-diff
git-commit log-edit add-log magit-core magit-autorevert autorevert
magit-margin magit-transient magit-process with-editor magit-mode
transient magit-git magit-section smerge-mode ol-eww eww mm-url
url-queue ol-rmail ol-mhe ol-irc ol-info ol-gnus nnir gnus-sum shr svg
dom gnus-group gnus-undo gnus-start gnus-cloud nnimap nnmail mail-source
utf7 netrc nnoo gnus-spec gnus-int gnus-range message rmc puny rfc822
mml mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
gmm-utils mailheader gnus-win gnus nnheader gnus-util rmail
rmail-loaddefs rfc2047 rfc2045 ietf-drums mail-utils mm-util mail-prsvr
ol-docview doc-view jka-compr image-mode exif ol-bibtex bibtex ol-bbdb
ol-w3m ox-texinfo ox-odt rng-loc rng-uri rng-parse rng-match rng-dt
rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex
ox-icalendar ox-html table ox-ascii ox-publish ox org-element avl-tree
generator helm-x-files helm-for-files helm-bookmark bookmark
text-property-search pp magit-utils crm image-file eieio-opt speedbar
sb-image ezimage dframe help-fns radix-tree helm-command tramp-archive
tramp-gvfs dbus bug-reference texinfo naquadah-theme solar cal-dst
holidays hol-loaddefs tv-utils undo-tree diff undo-tree-autoloads rx
ligature ligature-autoloads boxquote rect rainbow-mode-autoloads
psession frameset wgrep-helm wgrep grep compile wgrep-autoloads log-view
pcvs-util pcmpl-git pcmpl-git-autoloads toc-org-autoloads cl-indent ffap
markdown-toc-autoloads markdown-mode-autoloads autocrypt-autoloads
config-w3m w3m-autoloads git-gutter git-gutter-autoloads mule-util appt
diary-lib diary-loaddefs gud anaconda-mode xref project pythonic f dash
s anaconda-mode-autoloads pythonic-autoloads f-autoloads s-autoloads
eldoc-eval emamux-autoloads magit-autoloads git-commit-autoloads
with-editor-autoloads transient-autoloads dash-autoloads
pcomplete-extension pcmpl-unix pcmpl-gnu iterator iedit-autoloads
ledger-mode-autoloads wdired dired-extension org-config ob-gnuplot
org-crypt net-utils time pcase all-the-icons all-the-icons-faces
data-material data-weathericons data-octicons data-fileicons
data-faicons data-alltheicons all-the-icons-autoloads winner w3m-wget
wget thingatpt wget-sysdep autotest-mode autoconf-mode paren woman man
ediff ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init
ediff-util init-helm helm-fd epa derived epg epg-config helm-epa
helm-misc helm-imenu imenu helm-elisp-package package url-handlers
helm-find helm-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp
org-macro org-footnote org-src ob-comint org-pcomplete org-list
org-faces org-entities noutline outline org-version ob-emacs-lisp
ob-core ob-eval org-table ol org-keys org-compat org-macs org-loaddefs
cal-menu calendar cal-loaddefs helm-external helm-net browse-url xml url
url-proxy url-privacy url-expand url-methods url-history url-cookie
url-domsuf url-util url-parse url-vars mailcap isearch-light
helm-descbinds helm-ls-git vc-git diff-mode vc vc-dispatcher
helm-ipython helm-elisp helm-eval edebug backtrace find-func helm-info
python tramp-sh use-package-bind-key bind-key popup helm-adaptive
diminish helm-mode helm-files filenotify tramp tramp-loaddefs trampver
tramp-integration files-x tramp-compat shell pcomplete comint ansi-color
ring parse-time iso8601 time-date ls-lisp auth-source password-cache
json map helm-buffers helm-occur helm-tags helm-locate helm-grep
helm-regexp format-spec helm-utils helm-help helm-types
use-package-diminish cus-edit wid-edit helm-extensions-autoloads
helm-config helm-autoloads helm easy-mmode async-bytecomp
helm-global-bindings helm-easymenu helm-source eieio eieio-core
eieio-loaddefs helm-multi-match helm-lib dired-async advice dired-aux
dired dired-loaddefs async emms-autoloads finder-inf use-package-core
popup-autoloads diminish-autoloads mb-depth server edmacro kmacro avoid
cus-start cus-load use-package-autoloads bind-key-autoloads
straight-autoloads info cl-seq cl-extra help-mode easymenu seq byte-opt
straight subr-x cl-macs gv bytecomp byte-compile cconv cl-loaddefs
cl-lib tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar
dnd fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode elisp-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core term/tty-colors frame minibuffer cl-generic
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite charscript charprop
case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote threads inotify lcms2
dynamic-setting font-render-setting cairo move-toolbar gtk x-toolkit x
multi-tty make-network-process emacs)

Memory information:
((conses 16 649069 319435)
 (symbols 48 44038 53)
 (strings 32 196654 33273)
 (string-bytes 1 6313668)
 (vectors 16 85685)
 (vector-slots 8 1839586 200322)
 (floats 8 1943 870)
 (intervals 56 18271 9156)
 (buffers 1000 117))
<#secure method=pgpmime mode=sign>

-- 
Thierry