Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: clear to end of display

On Mar 18, 10:55pm, Danny Dulai wrote:
} Subject: Re: clear to end of display
} On 03/18/00, Bart Schaefer said:
} >What's the problem with having a clear-eol after the prompt?
} Well, I have a prompt that displays the time and my login/host in the upper
} right of the screen.

If it's always in the upper right, you might try printing it with a
TRAPALRM() function rather than putting it in the prompt.  Time values
in the prompt don't get updated until after the next call to precmd(),
but by setting a TMOUT value you can have it updated almost as often
as you like (though I wouldn't recommend more often than about every
10 seconds or it'll interfere with your typing).  I update the time
in my xterm title bar that way, with a 60-second TMOUT.

} when the prompt is on the first two lines of the
} terminal, the line the prompt is on gets cleared to eol, and overwrites
} some of my prompt in the upper right. I have hacks in there so that clear,
} ^L, and reset, do an echo twice to move the cursor down two lines, but I
} was hoping to avoid that.

Try putting a cursor-up cursor-down movement in a %{...%} block at the
beginning of your prompt.  That should force the prompt to be no higher
than the second line without needing to hack any zle widgets.  E.g. in
3.1.6+ with an 80-column xterm:

PS1="%{"$'\e7\e[1A\e[1B\e[1;1H'%E$'\e[1;72H'"%D{%I:%M:%S}"$'\e8'"%}%m%# "

} Also, the reason eod is annoying me is due to uneccessary clears on a
} transparent terminal that cause it to slightly flicker. I know this is the
} fault of the terminal program, but its a fault I'd like to work around,
} since it can't be fixed very easily.

Here's a trick that should work ...

Copy your transparent terminal's termcap or terminfo entry to another
name and remove the clear-eod capability.  Suppose the names are `trans'
for the original and `trans_no_ceod' for the edited copy.  Then do:

precmd() { TERM=trans_no_ceod }
preexec() { export TERM=trans }

This hides the clear-eod from zsh while the prompt is printing, without
hiding it from other commands that run.  If you're using a termcap-based
system, you should be able to use the TERMCAP variable instead, and just
insert and delete the `cd=' capability without changing TERM.

Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com

Messages sorted by: Reverse Date, Date, Thread, Author