1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-05-27 02:16:22 +02:00

20900, adapted: promptcr workaround

This commit is contained in:
Peter Stephenson 2005-03-03 10:29:22 +00:00
parent b456dfcfba
commit a50c752448
2 changed files with 31 additions and 9 deletions

View File

@ -1,3 +1,9 @@
2005-03-03 Peter Stephenson <pws@csr.com>
* from Wayne, adapted: 20900: another way of preventing
text without a newline from being overwritten by the prompt.
(Originally suggested by Karl Chen in 20896.)
2005-03-02 Clint Adams <clint@zsh.org>
* 20906: Completion/Unix/Command/_make: patch from

View File

@ -1667,15 +1667,31 @@ sect(How do I prevent the prompt overwriting output when there is no newline?)
% echo -n foo
%
)
and the tt(foo) has been overwritten by the prompt tt(%). The answer is
simple: put tt(unsetopt promptcr) in your tt(.zshrc). The option \
tt(PROMPT_CR),
to print a carriage return before a new prompt, is set by default because
a prompt at the right hand side (mytt($RPROMPT), mytt($RPS1)) will not appear
in the right place, and multi-line editing will be confused about the line
position, unless the line starts in the left hand column. Apart from
tt(PROMPT_CR), you can force this to happen by putting a newline in the
prompt (see question link(3.13)(313) for that).
and the tt(foo) has been overwritten by the prompt tt(%). The reason this
happens is that the option tt(PROMPT_CR) is enabled by default, and it
outputs a carriage return before the prompt in order to ensure that the
line editor knows what column it is in (this is needed to position the
right-side prompt correctly (mytt($RPROMPT), mytt($RPS1)) and to avoid screen
corruption when performing line editing). If you add tt(unsetopt promptcr)
to your tt(.zshrc), you will see any partial output, but your screen may
look weird until you press return or refresh the screen.
Another solution for many terminals is to define a precmd function that
outputs a screen-width of spaces, like this:
verb(
function precmd {
echo -n ${(l:$COLUMNS:::):-}
}
)
(Explanation: an empty parameter expansion is padded out to the number of
columns on the screen.) That precmd function will only bump the screen
down to a new line if there was output on the prompt line, otherwise the
extra spaces get removed by the tt(PROMPT_CR) action. Although this
typically looks fine it may result in the preceding spaces being included
when you select a line of text with the mouse.
One final alternative is to put a newline in your prompt -- see question
link(3.13)(313) for that.
sect(What's wrong with cut and paste on my xterm?)