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

Re: get the number of active jobs to show in the prompt?

On Oct 3,  5:35pm, Vincent Lefevre wrote:
} Subject: Re: get the number of active jobs to show in the prompt?
} On Wed, Oct 03, 2001 at 15:11:04 +0000, Bart Schaefer wrote:
} > There are two issues:  One, I think it's a bad idea in the first place
} > because its potentially very disruptive to the interactive experience.
} > Imagine how you'd feel using, say, "vi" if it were to exit in the middle
} > of you typing a sentence and then start up again with the text you were
} > editing possibly shifted to another part of the screen.
} But this is not caused by calling a function when the prompt is
} redisplayed. This is caused by the NOTIFY option. And any user
} can disable it.

I'm addressing your original question, which, paraphrased, was, "Is there
a way to force the prompt to be recomputed rather than just redisplayed
when I'm notified that a job has exited?  And I want `setopt notify'."

If notify isn't involved, precmd is already sufficient.  If notify is
involved, then the fact that the prompt could change length and that the
current "prompt level" could need to change from PS2 or deeper back to
PS1, leads to all the objections that have been raised.

} Perhaps I could disable NOTIFY when zle is active and use TRAPCLD with
} zle -M in this case. Is it possible? For instance with a setopt nonotify
} in precmd and a setopt notify in preexec?

Unfortunately, installing a TRAPCLD handler forces `notify' to behave as
if it were on, even if it's actually off.  I reported this to zsh-workers

} > It's another matter if this happens on an explicit user action -- you
} > could create your own widget that would redraw the prompt, and bind it
} > to ctrl-L or something.
} How can I do that (to rebuild the prompt when clear-screen is called)?

Basically the same way I did it in push-line-at-random:

    function redraw-prompt {
	local nested=${(%):-%_}
	# zle .clear-screen	# You may or may not want this
	if [[ -n $nested ]]
	    zle .push-line-or-edit
	    zle .push-input
	    zle .send-break	# Force new prompt; sorry about beeping
    # Pick one:
    # zle -N clear-screen redraw-prompt
    # zle -N redraw-prompt; bindkey '^L' redraw-prompt

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

Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net   

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