[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#33697: 26.1; file-truename messes with match data
From: |
Kévin Le Gouguec |
Subject: |
bug#33697: 26.1; file-truename messes with match data |
Date: |
Mon, 10 Dec 2018 22:02:09 +0100 |
Hi,
I set frame-title-format so that it displays the basename of the current
project's root folder for the active buffer. However, my $HOME is under
version control; I do not want this particular "project" to show up in
the frame's title.
Here is the code that I use:
(require 'subr-x)
(defun my/project-name ()
(when-let* ((project (project-current))
(root (car (project-roots project))))
(when (not (file-equal-p root "~"))
(file-name-nondirectory (string-trim-right root "/")))))
(setq frame-title-format
'(:eval
(let ((project (my/project-name)))
(concat (when project (format "[%s] " project)) "%b"))))
After adding the above to my .emacs, I started experiencing weird
failures with query-replace. I managed to reproduce this with emacs -Q:
- evaluate the above
- move to the beginning of *scratch*
- M-% a RET b RET
⇒ perform-replace: Args out of range: #<buffer *scratch*>, 0, 2
(point has moved after the first match)
I dug a bit and file-equal-p calls file-truename, whose first (cond …)
ends up calling string-match. Although I did not delve much longer and
could be wrong, I imagine that query-replace finds the first match,
moves point to it, leaves the minibuffer; this causes frame-title-format
to be evaluated; file-equal-p calls file-truename, the global match data
is updated, then perform-replace gets confused about what to do.
Wrapping the (cond …) with (save-match-data …) solves the issue for me
(as does wrapping my/project-name). I do not know if this is the
preferred way to address this; I do not even know if this is a "bug" (as
in, nobody said file-equal-p does *not* modify match data).
Thank you for your time.
In GNU Emacs 26.1 (build 1, x86_64-suse-linux-gnu, X toolkit, Xaw3d scroll bars)
Windowing system distributor 'The X.Org Foundation', version 11.0.12003000
Recent messages:
Loading /home/peniblec/.emacs-custom.el (source)...
Loading diff-hl-flydiff...done
Loading elec-pair...done
Loading page-break-lines...done
Loading icomplete...done
Loading mb-depth...done
Loading /home/peniblec/.emacs-custom.el (source)...done
Global key bindings for ‘rg’ enabled with prefix: C-c s
Loading quail/latin-ltx...done
For information about GNU Emacs and the GNU system, type C-h C-a.
Configured using:
'configure --disable-build-details --without-pop --with-mailutils
--without-hesiod --with-gameuser=:games --with-kerberos
--with-kerberos5 --with-file-notification=inotify --with-modules
--enable-autodepend --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --datadir=/usr/share --localstatedir=/var
--sharedstatedir=/var/lib --libexecdir=/usr/lib
--enable-locallisppath=/usr/share/emacs/26.1/site-lisp:/usr/share/emacs/site-lisp
--with-x --with-xim --with-sound --with-xpm --with-jpeg --with-tiff
--with-gif --with-png --with-rsvg --with-dbus --with-xft --without-gpm
--with-x-toolkit=lucid --with-toolkit-scroll-bars
--x-includes=/usr/include --x-libraries=/usr/lib64:/usr/share/X11
--without-libotf --without-m17n-flt --build=x86_64-suse-linux
'CFLAGS=-O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong
-funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection
-g -D_GNU_SOURCE -DGDK_DISABLE_DEPRECATION_WARNINGS
-DGLIB_DISABLE_DEPRECATION_WARNINGS -pipe -Wno-pointer-sign
-Wno-unused-variable -Wno-unused-label -fno-optimize-sibling-calls
-fno-PIE -DSYSTEM_PURESIZE_EXTRA=55000 -DSITELOAD_PURESIZE_EXTRA=10000
' LDFLAGS=-Wl,-O2'
Configured features:
XAW3D XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND DBUS GSETTINGS NOTIFY
ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE XFT ZLIB TOOLKIT_SCROLL_BARS
LUCID X11 MODULES THREADS LIBSYSTEMD
Important settings:
value of $LC_CTYPE: en_US.UTF-8
value of $LANG: en_US.UTF-8
value of $XMODIFIERS: @im=local
locale-coding-system: utf-8-unix
Major mode: Lisp Interaction
Minor modes in effect:
minibuffer-depth-indicate-mode: t
icomplete-mode: t
global-page-break-lines-mode: t
page-break-lines-mode: t
electric-pair-mode: t
diff-hl-flydiff-mode: t
global-diff-hl-mode: t
diff-auto-refine-mode: t
show-paren-mode: t
delete-selection-mode: t
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-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:
/home/peniblec/.emacs.d/elpa/soap-client-3.1.5/soap-inspect hides
/usr/share/emacs/26.1/lisp/net/soap-inspect
/home/peniblec/.emacs.d/elpa/soap-client-3.1.5/soap-client hides
/usr/share/emacs/26.1/lisp/net/soap-client
Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
format-spec rfc822 mml mml-sec epa derived epg gnus-util rmail
rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils vc-git vc-bzr vc-src vc-sccs vc-svn vc-cvs
vc-rcs project delight advice eighters-theme quail cl-extra help-mode rg
rg-ibuffer rg-result wgrep-rg wgrep s rg-header rg-compat subr-x
ibuf-ext ibuffer ibuffer-loaddefs grep compile comint ansi-color ring
edmacro kmacro disp-table mb-depth icomplete page-break-lines elec-pair
diff-hl-flydiff diff diff-hl vc-dir ewoc vc vc-dispatcher diff-mode
easy-mmode cus-start pcase cus-load finder-inf info package easymenu
epg-config url-handlers url-parse auth-source cl-seq eieio eieio-core
cl-macs eieio-loaddefs password-cache url-vars seq byte-opt gv bytecomp
byte-compile cconv cl-loaddefs cl-lib paren ispell time-date mule-util
delsel lpr 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 menu-bar
rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core term/tty-colors frame 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 minibuffer
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 dbusbind inotify
dynamic-setting system-font-setting font-render-setting x-toolkit x
multi-tty make-network-process emacs)
Memory information:
((conses 16 174446 11163)
(symbols 48 27255 1)
(miscs 40 122 131)
(strings 32 52826 2044)
(string-bytes 1 1447365)
(vectors 16 26324)
(vector-slots 8 633140 10178)
(floats 8 76 334)
(intervals 56 323 0)
(buffers 992 12))
- bug#33697: 26.1; file-truename messes with match data,
Kévin Le Gouguec <=