Most of the time the output of a
command ends with the newline character. But sometimes it does not, so the next shell
prompt is printed in the same line together with the
output.
Example:
root@hostname [~] # echo -n hello
helloroot@hostname [~]
#
I've always
found that very annoying.
Now, I could just add a "\n" at the beginning of
the the PS1 variable, but most of the time that will print one extra line I dont
need.
Is it possible to know whether the last
command's output ended with a newline or
not?
/>
Solution:
/>(Thanks to
Dennis)
PS1='$(printf "%$((`tput
cols`-1))s\r")\u@\h [\w]\$ '
Answer
I've been experimenting with the following to emulate the feature from
zsh
in
Bash:
$ unset PROMPT_SP; for ((i =
1; i <= $COLUMNS + 52; i++ )); do PROMPT_SP+=' '; done
$
PS1='\[\e[7m%\e[m\]${PROMPT_SP: -$COLUMNS+1}\015$
'
It issues a reverse
video percent sign, followed by a bunch of spaces to make it wrap to the next line, then
a carriage return, followed by a dollar sign and a space. You can add prompt escapes
after the "\015" to customize your prompt.
Using
this depends on how your terminal handles right margin line wrapping (automatic
margins). The length of PROMPT_SP is arbitrary, but should be at least 80 or whatever
your usual terminal width is. You may need to hard-code that value if $COLUMNS isn't set
yet by the time the for
loop is run in
~/.bashrc
. You may want shopt -s
if it's not already set.
checkwinsize
Comments
Post a Comment