
I realized today that the behavior of killWord from XMonad.Prompt is surprising to me. In particular, when you iterate killWord, it deletes first a word, then a space, then the next word, then the next space, and so on. I (an emacs user) expect killWord to delete a word AND any whitespace that happens to come before it. (Hmm... I tested with vim and it seems that 'dw' deletes a word along with any TRAILING whitespace. So emacs and vim differ here... but the point is that killWord emulates neither.)
Vim in insert mode acts like Emacs if you hit ^W, which, I think is more relevant here, since you're in "insert mode" when using XPrompt (just like when you use ex-mode in Vim after hitting ':') and there's no "command mode."
diff -rN old-XMonadContrib/XMonad/Prompt.hs new-XMonadContrib/XMonad/Prompt.hs 525,528c525 < delNextWord w = < case w of < ' ':x -> x < word -> snd . break isSpace $ word ---
delNextWord = snd . break isSpace . dropWhile isSpace
Thoughts?
As others have said, dropping in a parameter for isSpace would be nice, or at least making it something like:
liftM2 (||) isSpace (=='/')
One of my reasons for switching to zsh was that when I had punched in a long path and made a mistake in the last segment of it, I might hit ^W, but then bash deletes the entire path with no possibility of undo! zsh only deletes up to the '/', which I prefer greatly. Cheers, Aleks