Bingo, thanks so much! The only change I have made is to comment out the "zle .send-break" in the fake-accept-line() so that the content of the line is not echoed back on hitting down. There are issues with slightly more complex management though. "test 111" "test 222" then there's no more "test 222" in the buffer. Also "test 123" "test 789" alter "test 123" to "test 123456" (on "test 789") gives "test 123" still. But still, the basics you have provided will be a great help to myself, my coming from a much longer history of IRC usage than bash/zsh usage :) P.S. I'm basing the behaviour on Irssi. P.P.S. I stuck this in the wiki - http://zshwiki.org/home/zle/ircclientlikeinput