Am Mi., 28. Nov. 2018 um 09:58 Uhr schrieb Michael Albinus < michael.albinus@gmx.de>: > Philipp Stephani writes: > > Hi Phillipp, > > > I've noticed that the temporary directory code in flymake-proc has > > issues with remote filenames. For example: > > > > $ emacs -Q -batch -l flymake-proc --eval='(print > (flymake-proc-create-temp-with-folder-structure "/:/dir" nil))' > > > > "/tmp/:/dir" > > > > Clearly that's not what was intended. Rather, this should create the > > directory structure on the remote machine. > > I don't understand. "/:/dir" is not a remote file name, it is a quoted > file name. See (info "(emacs) Quoted File Names") for a description. > > Could you pls explain what you want to achieve? This would help to > understand your problem. > > Sorry for being imprecise. Yes, I mean quoted filenames. (It's possible that the issue also arises for true remote filenames, but I haven't checked.) You can easily reproduce user-facing problems. Assuming you have some binary installed that would check Java files using the legacy backend: $ touch /tmp/{a,b}.java $ emacs -Q -eval '(progn (add-hook (quote prog-mode-hook) (quote flymake-mode)) (ediff "/:/tmp/a.java" "/:/tmp/b.java"))' And Emacs immediately hangs because it runs into the endless loop. Stacktrace in this case is Debugger entered--Lisp error: (quit) display-warning((flymake flymake-proc) "Failed to delete dir /, error ignored" :error "*Flymake log*") flymake--log-1(1 flymake-proc "Failed to delete dir %s, error ignored" "/") flymake-proc--safe-delete-directory("/") flymake-proc--delete-temp-directory("/tmp/:/tmp/") flymake-proc-simple-java-cleanup() #f(compiled-function () #)() flymake-proc-legacy-flymake(#f(compiled-function (&rest args) #)) flymake--run-backend(flymake-proc-legacy-flymake) #f(compiled-function (backend) #)(flymake-proc-legacy-flymake) run-hook-wrapped(#f(compiled-function (backend) #) flymake-proc-legacy-flymake) flymake-start((post-command) nil) #f(compiled-function () #)() set-window-buffer(nil #) switch-to-buffer(#) ediff-setup-windows-multiframe-compare(# # nil #) ediff-setup-windows-multiframe(# # nil #) ediff-setup-windows-default(# # nil #) ediff-setup-windows(# # nil #) ediff-setup(# "/:/tmp/a.java" # "/:/tmp/b.java" nil nil nil ((ediff-job-name . ediff-files)) nil) ediff-files-internal("/:/tmp/a.java" "/:/tmp/b.java" nil nil ediff-files) ediff("/:/tmp/a.java" "/:/tmp/b.java") (progn (add-hook (quote prog-mode-hook) (quote flymake-mode)) (ediff "/:/tmp/a.java" "/:/tmp/b.java")) eval((progn (add-hook (quote prog-mode-hook) (quote flymake-mode)) (ediff "/:/tmp/a.java" "/:/tmp/b.java"))) command-line-1(("-f" "toggle-debug-on-quit" "-eval" "(progn (add-hook (quote prog-mode-hook) (quote flymake-mode)) (ediff \"/:/tmp/a.java\" \"/:/tmp/b.java\"))")) command-line() normal-top-level()