Init
This commit is contained in:
commit
7e17c4aeb6
|
@ -0,0 +1,56 @@
|
||||||
|
===============================================================================
|
||||||
|
TIINT tmux for ii
|
||||||
|
===============================================================================
|
||||||
|
|
||||||
|
A tmux "client" for use with suckless' IRC It.
|
||||||
|
|
||||||
|
Simple script that'll make tmux windows for IRC channels with two panes:
|
||||||
|
- one for tail'ing the output
|
||||||
|
- one for getting user input
|
||||||
|
|
||||||
|
It's pretty POSIX, and'll run on both GNU and BSD systems.
|
||||||
|
|
||||||
|
It also kinda supports notifications, see CONFIG below.
|
||||||
|
|
||||||
|
|
||||||
|
----------------------------------------
|
||||||
|
USAGE
|
||||||
|
----------------------------------------
|
||||||
|
It can make a window for a single channel; windows for every channel in a
|
||||||
|
server; or windows for all channels under all servers of an irc root.
|
||||||
|
|
||||||
|
$ tiint -i $IRC_ROOT
|
||||||
|
$ tiint -s $SERVER_ROOT
|
||||||
|
$ tiint -c $CHANNEL_PATH
|
||||||
|
|
||||||
|
Personally I do:
|
||||||
|
$ tiint -i ~/chat/irc/
|
||||||
|
or
|
||||||
|
$ tiint -c ~/chat/irc/irc.freenode.net/#hase
|
||||||
|
|
||||||
|
|
||||||
|
----------------------------------------
|
||||||
|
INSTALL
|
||||||
|
----------------------------------------
|
||||||
|
Just put `tiint` and `loop_input.sh` in your path.
|
||||||
|
If you want notifications, put in `diff_monitor.sh` too.
|
||||||
|
|
||||||
|
|
||||||
|
----------------------------------------
|
||||||
|
CONFIG
|
||||||
|
----------------------------------------
|
||||||
|
There's no "config", but you can edit the script if you want. It's lightweight
|
||||||
|
and you can do whatever probably.
|
||||||
|
|
||||||
|
What you might be interested in doing is enabling notifications (uncomment
|
||||||
|
the line that calls "diff_monitor" in `tiint`), then configuring your
|
||||||
|
preferred notifcation method (zenity, beeping, whatever) by editing the
|
||||||
|
"notify" function of `diff_monitor.sh`.
|
||||||
|
|
||||||
|
|
||||||
|
----------------------------------------
|
||||||
|
BORING STUFF
|
||||||
|
----------------------------------------
|
||||||
|
License is CC-0
|
||||||
|
Author is Jaidyn Ann <jadedctrl@teknik.io>
|
||||||
|
Sauce is at https://git.xwx.moe/tiint
|
|
@ -0,0 +1,56 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# name: diff_notify.sh
|
||||||
|
# desc: monitor a file for changes; then notify the user when it changes
|
||||||
|
# by default it makes your PC beep a couple times
|
||||||
|
# lisc: cc0
|
||||||
|
|
||||||
|
# FILEPATH -> SHA256_HASH
|
||||||
|
# get a file's hash, using the proper program
|
||||||
|
function file_hash {
|
||||||
|
local file="$1"
|
||||||
|
local hash="$(sha256sum "$file" 2>/dev/null | awk '{print $1}' 2>/dev/null)"
|
||||||
|
if test -z "$hash"; then
|
||||||
|
hash="$(sha256 -q "$file" 2>/dev/null)"
|
||||||
|
fi
|
||||||
|
echo "$hash"
|
||||||
|
}
|
||||||
|
|
||||||
|
# NIL -> NIL
|
||||||
|
# beeps even on systems without the beep command
|
||||||
|
function true_beep {
|
||||||
|
if beep 2>/dev/null; then printf '\007\n'; fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# FILEPATH -> NIL
|
||||||
|
# monitor a file for changes 'till death, notify the user when it changes
|
||||||
|
function monitor_file {
|
||||||
|
local file="$1"
|
||||||
|
local old_hash="$(file_hash "$file")"
|
||||||
|
local new_hash="$old_hash"
|
||||||
|
echo "monitoring $file"
|
||||||
|
while test 1 -eq 1; do
|
||||||
|
old_hash="$new_hash"
|
||||||
|
new_hash="$(file_hash "$file")"
|
||||||
|
if test "$old_hash" != "$new_hash"; then
|
||||||
|
notify "$file" "$(tail -1 "$file")"
|
||||||
|
fi
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# HEADER MESSAGE -> ??
|
||||||
|
# notify the user *somehow*-- depending on what's uncommented
|
||||||
|
function notify {
|
||||||
|
local header="$1"
|
||||||
|
local message="$2"
|
||||||
|
## As you can tell, there are a bunch of ways to be notified. =w=
|
||||||
|
# notify-send "$header" "$message"
|
||||||
|
# zenity --notification --text="$header"
|
||||||
|
# mpv ~/.notification.ogg
|
||||||
|
true_beep; true_beep
|
||||||
|
}
|
||||||
|
|
||||||
|
# INVOCATION
|
||||||
|
# ==================
|
||||||
|
FILE="$1"
|
||||||
|
monitor_file "$FILE"
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# name: loop_in
|
||||||
|
# desc: literally just keeps reading input to the given file, invoking itself
|
||||||
|
|
||||||
|
# FILEPATH -> NIL
|
||||||
|
# output user input to given file
|
||||||
|
function input_to_file {
|
||||||
|
file="$1"
|
||||||
|
printf '%s > ' "$file"
|
||||||
|
read message
|
||||||
|
echo "$message" >> "$OUTFILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# INVOCATION
|
||||||
|
# ==================
|
||||||
|
|
||||||
|
OUTFILE="$1"
|
||||||
|
while test 1 -eq 1; do
|
||||||
|
input_to_file "$OUTFILE"
|
||||||
|
done
|
|
@ -0,0 +1,59 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# name: tiint.sh
|
||||||
|
# desc: a simple script for setting up a tmux session for your `ii` stuff
|
||||||
|
# can run on servers, channels, or irc roots
|
||||||
|
# just opens up `tail` on outfile and reads to infile
|
||||||
|
# main: jaidyn ann <jadedctrl@teknik.io>
|
||||||
|
# lisc: CC0 i guess
|
||||||
|
|
||||||
|
|
||||||
|
# CHANNEL_PATH -> NIL
|
||||||
|
# makes a new tmux window for the channel at given path; one pane for tailing
|
||||||
|
# it, one for user input with loop_in.sh
|
||||||
|
function make_channel_window {
|
||||||
|
channel="$1"
|
||||||
|
tmux neww tail -f ${channel}/out
|
||||||
|
tmux splitw -p 10 diff_notify.sh ${channel}/out
|
||||||
|
tmux splitw -p 10 loop_in.sh ${channel}/in
|
||||||
|
}
|
||||||
|
|
||||||
|
# SERVER_PATH -> NIL
|
||||||
|
# make tmux windows for all channels at a given server path
|
||||||
|
function make_server_windows {
|
||||||
|
server="$1"
|
||||||
|
cd "$server"
|
||||||
|
for channel in ./#*; do
|
||||||
|
make_channel_window "$(basename "$channel")"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# IRC_PATH -> NIL
|
||||||
|
# make tmux windows for all servers and channels at a given IRC root
|
||||||
|
function make_irc_windows {
|
||||||
|
ircroot="$1"
|
||||||
|
cd "$ircroot"
|
||||||
|
for server in ./*; do
|
||||||
|
if test -d "$server"; then
|
||||||
|
make_server_windows "$server"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# INVOCATION
|
||||||
|
# ==================
|
||||||
|
|
||||||
|
function help {
|
||||||
|
echo "usage: $(basename "$0") -i IRC_PATH"
|
||||||
|
echo " $(basename "$0") -s SERVER_PATH"
|
||||||
|
echo " $(basename "$0") -c CHANNEL_PATH"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
while getopts 'i:s:c:h' c; do
|
||||||
|
case "$c" in
|
||||||
|
h) help; exit 2 ;;
|
||||||
|
i) make_irc_windows "$OPTARG" ;;
|
||||||
|
s) make_server_windows "$OPTARG" ;;
|
||||||
|
c) make_channel_window "$OPTARG" ;;
|
||||||
|
esac
|
||||||
|
done
|
Ŝarĝante…
Reference in New Issue