Package: emacs;
Reported by: kevin.legouguec <at> gmail.com (Kévin Le Gouguec)
Date: Mon, 10 Dec 2018 21:03:01 UTC
Severity: wishlist
Merged with 31586
Found in versions 26.1, 27.0.50
Done: Lars Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: kevin.legouguec <at> gmail.com (Kévin Le Gouguec) To: 33697 <at> debbugs.gnu.org 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))
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.