Let the terminal bells ring out
muxup.com
muxup.com
function preexec() {
lrn_timer=${timer:-$SECONDS}
lrn_command="$1"
}
lrn_timer=0
function precmd() {
[[ -v lrn_timer ]] || return # preexec() doesn't set timer if no command run (e.g. from ^C before running)
timer_show=$(($SECONDS - $lrn_timer))
unset lrn_timer
# 10 is the notification threshold in seconds
if (( ${timer_show} > 10 )); then
terminal-notifier -sound default -message "Exit $? in ${timer_show}s: $lrn_command"
fi
}
(Based on https://gist.github.com/petethepig/2d29e8b7e2ebc808bfe760b63...)What I do in these situations (assuming the job is still in the foreground, and can be interrupted), is suspend the task with ctrl+z and resume with `fg`, chaining it with some other command:
fg; notify-send "done"
This uses the "job control" feature of `bash`, so it requires no extra setup. Your approach has the simple advantage however, that once it's set up, it just works, automatically.It makes life far easier when you see people post useful snippets(like wolfgang42's), but don't want to have to mangle them in to your already messy monolithic function.
¹ https://zsh.sourceforge.io/Doc/Release/Functions.html#Hook-F...
² https://zsh.sourceforge.io/Doc/Release/User-Contributions.ht...
(I think PROMPT_COMMAND will take an array of functions in later versions of Bash)
(I apparently knew this when I wrote the above code, since on closer inspection it doesn’t actually match the gist my comments claim it came from, but I have to admit I had since forgotten it.)
I do actually have something installed in my env, I think, that might trigger those functions automatically if they exist, now that I think about it...
bash> v PROMPT_COMMAND
PROMPT_COMMAND is an indexed array variable
declare -a PROMPT_COMMAND=([0]=$'__bp_precmd_invoke_cmd\nmcfly_prompt_command;_direnv_hook\n:' [1]="__bp_interactive_mode")
(pretty sure that this broke when I tried to force it to be a pure array instead of a 2 element array with the first as a concatenation of functions... unfortunately)("v" is a "view/show" function I wrote that allows me to see the definition of anything; https://github.com/pmarreck/dotfiles/blob/80a392470f8eddd70e... )
$ dpkg-query -S "$(which notify-send)"
libnotify-bin: /usr/bin/notify-send
The README for https://github.com/nowrep/notify-desktop says “It's basically clone of notify-send from libnotify” so I assume that would also work, but I don’t know your system.The original Teletype bell in a Model 15 Teletype is a 3-inch gong with a satisfying "bong" sound. That was intended to be heard across a room of noisy machines. There's also a little end of line bell for typists, but that's not loud.
What would the machine do if a mischievous prankster ran a program that endlessly outputted ASCII BEL characters in a tight loop?
The later ASCII machines don't have the big gong, just a smaller bell.
However, Konsole has a way better solution for the presented problem: it has been possible to "monitor for (in)activity for a long time. It is also now possible to monitor for process termination, which you can (un)check anytime if you decide that you need to be notified.
These features are very convenient, much better than having to hack a solution using the bell in my opinion.
So, not a bell (remember that noisy awfulness whenever you held backspace for a bit too long and it spammed useless warnings that there is nothing to delete)
> makes it easy to configure behaviour based on the duration of a command and
Glad the article was edited, it's indeed way more reasonable than having the mental overhead to add ;bell every time (though notifications have a benefit that you can add a payload that tells you which command finished and how long it took without having to switch back)
https://twitter.com/ViolenceWorks/status/1335382435031252992...
Control-a inputs byte value 1, control-b 2 and so on.
BEL is mapped to value 7 in ascii, thus C-g.
Note control-space usually does input a NUL (0) in most terminals.
This explanation is over-simplified though. In practice, different systems have used different techniques to derive control codes from key chords. I have a more detailed article about this at https://susam.net/blog/control-escape-meta-tricks.html if anyone is interested to read it.
Cases don't have the speakers anymore, but boards fortunately still have the port.
It beeps nicely with BEL or with invalid input.
https://dlcdnets.asus.com/pub/ASUS/mb/LGA1700/ROG_MAXIMUS_Z7...
With an alias for notification
# Attach to an existing tmux or a launch new tmux.
[ -n "$STY$TMUX$INSIDE_EMACS" ] || tmux at || tmux
Source: https://github.com/susam/dotfiles/blob/main/shrc#L381