Dragging and dropping a file onto a Terminal window doesn’t escape the path under zsh 5.2

terminalzsh

Under OS X you can drag and drop a file from the Finder (or anywhere else) onto a Terminal window and the file’s path will be inserted as if you had typed it in. Recently, filenames with spaces have stopped being handled correctly: if the file path contained spaces before, the Terminal would get a version enclosed in double quotes or else with each space preceded by a backslash. Now the entire file path is just dumped in, and if it contains any spaces then I have to go back and escape them myself.

I have played around with the “shells open with” setting and it seems that the correct escaping happens when the shell is /bin/bash (GNU bash 3.2.57(1)-release) or /bin/zsh (zsh 5.0.8) but not when the shell is my manually-installed /usr/local/bin/zsh (zsh 5.2). I’m on OS X 10.11.2.

Was there a change in zsh that could have messed up dragging and dropping in Terminal? Or is Terminal itself using some kind of whitelist of shells that doesn’t include my zsh?

Edit: I installed zsh 5.0.8 at /usr/local/bin/zsh and filenames are escaped properly for that shell. It seems that some change to zsh between versions 5.0.8 and 5.2 made this stop working.

Best Answer

This behavior seems to be caused by zsh’s bracketed paste feature, which is on by default as of version 5.1. I found that if I added

unset zle_bracketed_paste

to my zshrc then dropping files onto Terminal works correctly with zsh 5.2.

(This blog post mentions bracketed-paste-magic, which seems like it could be used to support dropping files without turning off the entire bracketed paste feature. I think you would need to write code to make that happen, though; simply turning on bracketed-paste-magic didn’t fix my problem.)