From: Bart Schaefer <schaefer@brasslantern.com>
To: zsh-users@sunsite.dk
Subject: Re: preexec hook: possible enhancement?
Date: Sat, 08 Sep 2007 10:20:50 -0700 [thread overview]
Message-ID: <070908102050.ZM32110@torch.brasslantern.com> (raw)
In-Reply-To: <200709051905.l85J5cHX003985@pws-pc.ntlworld.com>
On Sep 5, 8:05pm, Peter Stephenson wrote:
}
} I doubt if there's much joy there... debug traps are called before/after
} every command, including in precmd and preexec, so probably far too
} often.
My thought was to create a TRAPDEBUG function in preexec, and delete it
again in precmd. Or at least set/clear a variable in those places so
that the function can become an effective no-op when not executing a
pipeline from zle.
} The only argument to a TRAPDEBUG function is the signal number, which
} is meaningless in this case anyway.
I think you mean the *line* number? What signal's number would it be?
(The argument passed to TRAPDEBUG ought to be documented somewhere, but
is not as far as I can tell.)
The following appears to work for me; the command is printed only if it
runs for at least 1 second, which seems reasonable. Obviously this is
pretty expensive -- the shell has the information this is digging out of
/proc/*/stat, it just doesn't put it anywhere that TRAPDEBUG can get it.
find_fg_job() {
emulate -L zsh
local x j t
reply=()
# Find the TTY of the current shell
j=( $(</proc/$$/stat) )
t=$j[7]
# Return if no TTY
(( $t )) || return 1
# Find any other job in the foreground on this TTY
for x in /proc/<->/stat
do
j=()
# Process might exit between glob and file read,
# so suppress error messages ...
j=( $(<$x) ) 2>/dev/null
# ... and skip this if we can't read it
(( $#j )) || continue
# This test skips any sub-shell intermediaries
[[ $j[2] == "(zsh)" ]] && continue
# Not this shell and on this TTY and in foreground
if (( $j[5] != $$ && $j[7] == $t && $j[5] == $j[8] ))
then
reply=( ${(ps:\0:)"$(</proc/$j[1]/cmdline)"} )
return 0
fi
done
return 1
}
print_fg_job() {
find_fg_job || return
print -u2 "$reply" # REPLACE THIS WITH TAB TITLE CHANGE
}
setopt DEBUG_BEFORE_CMD
TRAPDEBUG() {
if [[ -n $DEBUG_FG ]]
then
# Background and disown to suppress job control
{ sleep 1; print_fg_job } &!
fi
}
preexec() { DEBUG_FG="$*" }
precmd() {
unset DEBUG_FG
print -u2 "$0" # REPLACE THIS WITH TAB TITLE CHANGE
}
next prev parent reply other threads:[~2007-09-13 15:03 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-05 16:34 Matthew Wozniski
2007-09-05 17:14 ` Bart Schaefer
2007-09-05 19:05 ` Peter Stephenson
2007-09-05 21:11 ` Matthew Wozniski
2007-09-08 17:20 ` Bart Schaefer [this message]
2007-09-05 19:32 ` Stephane Chazelas
-- strict thread matches above, loose matches on Subject: below --
2013-08-30 1:12 mailcap configuration in zsh can't open .bk files vinurs
2013-08-30 2:59 ` Phil Pennock
2013-08-30 3:27 ` shawn wilson
2013-08-30 8:29 ` Peter Stephenson
2013-08-30 17:10 ` Bart Schaefer
2013-09-01 17:11 ` Peter Stephenson
2013-09-02 1:28 ` vinurs
2013-09-02 13:46 ` Peter Stephenson
2013-09-02 17:45 ` Bart Schaefer
2010-08-20 15:35 Synchronous vs. Asynchronous Bart Schaefer
2010-08-20 15:45 ` Peter Stephenson
2010-08-20 17:36 ` Bart Schaefer
2010-08-21 18:41 ` Peter Stephenson
2010-08-21 22:31 ` Vincent Lefevre
2010-08-22 5:02 ` Bart Schaefer
2010-08-22 5:42 ` Bart Schaefer
2010-08-22 17:53 ` Peter Stephenson
[not found] <1209745744.25440.ezmlm@sunsite.dk>
2008-05-02 17:39 ` Zsh hangs sometimes? Kamil Jońca
2008-05-02 22:44 ` Peter Stephenson
2008-05-03 11:35 ` Bart Schaefer
2008-05-04 12:13 ` Peter Stephenson
2008-05-04 17:00 ` Bart Schaefer
2008-05-04 18:14 ` Peter Stephenson
2008-05-04 20:00 ` Bart Schaefer
2008-05-05 11:54 ` Aaron Davies
2007-09-02 15:43 fg jobs info Atom Smasher
2007-09-02 17:59 ` Bart Schaefer
2007-09-03 7:38 ` Stephane Chazelas
2007-09-03 15:58 ` Bart Schaefer
2007-09-03 16:31 ` Matthew Wozniski
2007-09-04 11:16 ` Atom Smasher
2007-09-04 15:31 ` Bart Schaefer
2007-09-04 20:38 ` Peter Stephenson
2007-09-04 20:45 ` Peter Stephenson
2007-09-05 9:02 ` Atom Smasher
2007-09-05 9:28 ` Peter Stephenson
2007-09-05 11:21 ` Miek Gieben
2007-09-05 11:34 ` Matthew Wozniski
2007-09-05 11:36 ` Miek Gieben
2007-09-05 11:34 ` Atom Smasher
2007-09-05 11:40 ` Frank Terbeck
2007-09-05 12:18 ` Miek Gieben
2007-09-05 15:30 ` Bart Schaefer
2007-09-05 15:55 ` Peter Stephenson
2007-03-31 20:51 Documentation of colon in parameter expansion Miciah Dashiel Butler Masters
2007-04-01 17:53 ` Bart Schaefer
2007-04-01 18:26 ` Peter Stephenson
2006-10-06 15:07 Move command line options to start of line Peter Stephenson
2006-10-07 2:55 ` Bart Schaefer
2006-10-07 6:20 ` Andrey Borzenkov
2006-10-07 12:02 ` Peter Stephenson
2006-10-07 12:39 ` Bart Schaefer
2006-10-07 17:21 ` Dan Nelson
2006-10-07 17:36 ` Peter Stephenson
2006-09-04 8:43 Solved, but now a new twist (was: Double Evaluation Question (not in FAQ)) Com MN PG P E B Consultant 3
2006-09-04 18:24 ` Bart Schaefer
2006-09-07 17:53 ` Peter Stephenson
[not found] <schaefer@brasslantern.com>
2006-07-30 6:29 ` Rebinding a widget within a keymap Bart Schaefer
2006-07-30 17:18 ` Peter Stephenson
2006-07-30 17:46 ` Bart Schaefer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=070908102050.ZM32110@torch.brasslantern.com \
--to=schaefer@brasslantern.com \
--cc=zsh-users@sunsite.dk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).