tags 32201 + patch quit John Shahid writes: > > (add-hook 'buffer-list-update-hook > (lambda () > (setenv "GOPATH" gopath)))))) > The problem seems to happen when all of the suddent 'find-file' will > start openning weird files. For example, if I'm currently viewing > "~/foo/bar.txt" and use 'C-x C-f' the default file name will be > "~/foo/~jvshahid/foo/bar.txt". After some debugging it turns out that > the following will happen which cause the match-data to be corrupted: > > 1. find-file calls abbreviate-file-name > 2. abbreviate-file-name calls (expand-file-name "~") > 3. expand-file-name runs the buffer-list-update-hook (unknown why) > 4. the hook will use setenv which messes up the match-data > 5. abbreviate-file-name resumes and use the incorrect match-data and return an invalid path > > I don't know why '3' is happening. buffer-list-update-hook gets called by get-buffer-create and kill-buffer; it seems plausible that some file name handlers would use make-temp-buffer which calls both of those. Anyway, I don't think setenv should be changed, rather abbreviate-file-name should save-match-data around the expand-file-name call. After all, today you happened to use setenv in a hook, tomorrow someone will use another match-data modifying function. Here's the patch (intended for emacs-26):