add iterm2 shell integration
This commit is contained in:
112
.iterm2/imgcat
Executable file
112
.iterm2/imgcat
Executable file
@@ -0,0 +1,112 @@
|
||||
#!/bin/bash
|
||||
|
||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
||||
# only accepts ESC backslash for ST.
|
||||
function print_osc() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\033Ptmux;\033\033]"
|
||||
else
|
||||
printf "\033]"
|
||||
fi
|
||||
}
|
||||
|
||||
# More of the tmux workaround described above.
|
||||
function print_st() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\a\033\\"
|
||||
else
|
||||
printf "\a"
|
||||
fi
|
||||
}
|
||||
|
||||
# print_image filename inline base64contents print_filename
|
||||
# filename: Filename to convey to client
|
||||
# inline: 0 or 1
|
||||
# base64contents: Base64-encoded contents
|
||||
# print_filename: If non-empty, print the filename
|
||||
# before outputting the image
|
||||
function print_image() {
|
||||
print_osc
|
||||
printf '1337;File='
|
||||
if [[ -n "$1" ]]; then
|
||||
printf 'name='`printf "%s" "$1" | base64`";"
|
||||
fi
|
||||
|
||||
VERSION=$(base64 --version 2>&1)
|
||||
if [[ "$VERSION" =~ fourmilab ]]; then
|
||||
BASE64ARG=-d
|
||||
elif [[ "$VERSION" =~ GNU ]]; then
|
||||
BASE64ARG=-di
|
||||
else
|
||||
BASE64ARG=-D
|
||||
fi
|
||||
|
||||
printf "%s" "$3" | base64 $BASE64ARG | wc -c | awk '{printf "size=%d",$1}'
|
||||
printf ";inline=$2"
|
||||
printf ":"
|
||||
printf "%s" "$3"
|
||||
print_st
|
||||
printf '\n'
|
||||
if [[ -n "$4" ]]; then
|
||||
echo $1
|
||||
fi
|
||||
}
|
||||
|
||||
function error() {
|
||||
echo "ERROR: $*" 1>&2
|
||||
}
|
||||
|
||||
function show_help() {
|
||||
echo "Usage: imgcat [-p] filename ..." 1>& 2
|
||||
echo " or: cat filename | imgcat" 1>& 2
|
||||
}
|
||||
|
||||
## Main
|
||||
|
||||
if [ -t 0 ]; then
|
||||
has_stdin=f
|
||||
else
|
||||
has_stdin=t
|
||||
fi
|
||||
|
||||
# Show help if no arguments and no stdin.
|
||||
if [ $has_stdin = f -a $# -eq 0 ]; then
|
||||
show_help
|
||||
exit
|
||||
fi
|
||||
|
||||
# Look for command line flags.
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-h|--h|--help)
|
||||
show_help
|
||||
exit
|
||||
;;
|
||||
-p|--p|--print)
|
||||
print_filename=1
|
||||
;;
|
||||
-*)
|
||||
error "Unknown option flag: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
if [ -r "$1" ] ; then
|
||||
has_stdin=f
|
||||
print_image "$1" 1 "$(base64 < "$1")" "$print_filename"
|
||||
else
|
||||
error "imgcat: $1: No such file or directory"
|
||||
exit 2
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# Read and print stdin
|
||||
if [ $has_stdin = t ]; then
|
||||
print_image "" 1 "$(cat | base64)" ""
|
||||
fi
|
||||
|
||||
exit 0
|
||||
68
.iterm2/imgls
Executable file
68
.iterm2/imgls
Executable file
@@ -0,0 +1,68 @@
|
||||
#!/bin/bash
|
||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
||||
# only accepts ESC backslash for ST.
|
||||
function print_osc() {
|
||||
if [ x"$TERM" = "xscreen" ] ; then
|
||||
printf "\033Ptmux;\033\033]"
|
||||
else
|
||||
printf "\033]"
|
||||
fi
|
||||
}
|
||||
|
||||
# More of the tmux workaround described above.
|
||||
function print_st() {
|
||||
if [ x"$TERM" = "xscreen" ] ; then
|
||||
printf "\a\033\\"
|
||||
else
|
||||
printf "\a"
|
||||
fi
|
||||
}
|
||||
|
||||
function list_file() {
|
||||
fn=$1
|
||||
dims=$(php -r 'if (!is_file($argv[1])) exit(1); $a = getimagesize($argv[1]); if ($a==FALSE) exit(1); else { echo $a[0] . "x" .$a[1]; exit(0); }' "$fn")
|
||||
rc=$?
|
||||
if [[ $rc == 0 ]] ; then
|
||||
print_osc
|
||||
printf '1337;File=name='`echo -n "$fn" | base64`";"
|
||||
wc -c "$fn" | awk '{printf "size=%d",$1}'
|
||||
printf ";inline=1;height=3;width=3;preserveAspectRatio=true"
|
||||
printf ":"
|
||||
base64 < "$fn"
|
||||
print_st
|
||||
if [ x"$TERM" == "xscreen" ] ; then
|
||||
# This works in plain-old tmux but does the wrong thing in iTerm2's tmux
|
||||
# integration mode. tmux doesn't know that the cursor moves when the
|
||||
# image code is sent, while iTerm2 does. I had to pick one, since
|
||||
# integration mode is undetectable, so I picked the failure mode that at
|
||||
# least produces useful output (there is just too much whitespace in
|
||||
# integration mode). This could be fixed by not moving the cursor while
|
||||
# in integration mode. A better fix would be for tmux to interpret the
|
||||
# image sequence, though.
|
||||
#
|
||||
# tl;dr: If you use tmux in integration mode, replace this with the printf
|
||||
# from the else clause.
|
||||
printf '\033[4C\033[Bx'
|
||||
else
|
||||
printf '\033[A'
|
||||
fi
|
||||
echo -n "$dims "
|
||||
ls -ld "$fn"
|
||||
else
|
||||
ls -ld "$fn"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
for fn in *
|
||||
do
|
||||
list_file "$fn"
|
||||
done < <(ls -ls)
|
||||
else
|
||||
for fn in "$@"
|
||||
do
|
||||
list_file "$fn"
|
||||
done
|
||||
fi
|
||||
|
||||
71
.iterm2/it2attention
Executable file
71
.iterm2/it2attention
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
|
||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
||||
# only accepts ESC backslash for ST.
|
||||
function print_osc() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\033Ptmux;\033\033]"
|
||||
else
|
||||
printf "\033]"
|
||||
fi
|
||||
}
|
||||
|
||||
# More of the tmux workaround described above.
|
||||
function print_st() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\a\033\\"
|
||||
else
|
||||
printf "\a"
|
||||
fi
|
||||
}
|
||||
|
||||
function show_help() {
|
||||
echo "Usage:" 1>& 2
|
||||
echo " $(basename $0) start" 1>& 2
|
||||
echo " Begin bouncing the dock icon if another app is active" 1>& 2
|
||||
echo " $(basename $0) stop" 1>& 2
|
||||
echo " Stop bouncing the dock icon if another app is active" 1>& 2
|
||||
echo " $(basename $0) fireworks" 1>& 2
|
||||
echo " Show an explosion animation at the cursor" 1>& 2
|
||||
}
|
||||
|
||||
function start_bounce() {
|
||||
print_osc
|
||||
printf "1337;RequestAttention=1"
|
||||
print_st
|
||||
}
|
||||
|
||||
function stop_bounce() {
|
||||
print_osc
|
||||
printf "1337;RequestAttention=0"
|
||||
print_st
|
||||
}
|
||||
|
||||
function fireworks() {
|
||||
print_osc
|
||||
printf "1337;RequestAttention=fireworks"
|
||||
print_st
|
||||
}
|
||||
|
||||
## Main
|
||||
if [[ $# == 0 ]]
|
||||
then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ $1 == start ]]
|
||||
then
|
||||
start_bounce
|
||||
elif [[ $1 == stop ]]
|
||||
then
|
||||
stop_bounce
|
||||
elif [[ $1 == fireworks ]]
|
||||
then
|
||||
fireworks
|
||||
else
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
88
.iterm2/it2check
Executable file
88
.iterm2/it2check
Executable file
@@ -0,0 +1,88 @@
|
||||
#!/bin/bash
|
||||
# Make sure stdin and stdout are a tty.
|
||||
if [ ! -t 0 ] ; then
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -t 1 ] ; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Save the tty's state.
|
||||
saved_stty=$(stty -g)
|
||||
|
||||
# Trap ^C to fix the tty.
|
||||
trap ctrl_c INT
|
||||
|
||||
function ctrl_c() {
|
||||
stty "$saved_stty"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Read some bytes from stdin. Pass the number of bytes to read as the first argument.
|
||||
function read_bytes()
|
||||
{
|
||||
numbytes=$1
|
||||
dd bs=1 count=$numbytes 2>/dev/null
|
||||
}
|
||||
|
||||
function read_dsr() {
|
||||
# Reading response to DSR.
|
||||
dsr=""
|
||||
spam=$(read_bytes 2)
|
||||
byte=$(read_bytes 1)
|
||||
while [ "${byte}" != "n" ]; do
|
||||
dsr=${dsr}${byte}
|
||||
byte=$(read_bytes 1)
|
||||
done
|
||||
echo ${dsr}
|
||||
}
|
||||
|
||||
# Extract the terminal name from DSR 1337
|
||||
function terminal {
|
||||
echo -n "$1" | sed -e 's/ .*//'
|
||||
}
|
||||
|
||||
# Extract the version number from DSR 1337
|
||||
function version {
|
||||
echo -n "$1" | sed -e 's/.* //'
|
||||
}
|
||||
|
||||
# Enter raw mode and turn off echo so the terminal and I can chat quietly.
|
||||
stty -echo -icanon raw
|
||||
|
||||
# Support for the extension first appears in this version of iTerm2:
|
||||
MIN_VERSION=2.9.20160304
|
||||
if [ $# -eq 1 ]; then
|
||||
MIN_VERSION=$1
|
||||
fi
|
||||
|
||||
# Send iTerm2-proprietary code. Other terminals ought to ignore it (but are
|
||||
# free to use it respectfully). The response won't start with a 0 so we can
|
||||
# distinguish it from the response to DSR 5. It should contain the terminal's
|
||||
# name followed by a space followed by its version number and be terminated
|
||||
# with an n.
|
||||
echo -n '[1337n'
|
||||
|
||||
# Report device status. Responds with esc [ 0 n. All terminals support this. We
|
||||
# do this because if the terminal will not respond to iTerm2's custom escape
|
||||
# sequence, we can still read from stdin without blocking indefinitely.
|
||||
echo -n '[5n'
|
||||
|
||||
version_string=$(read_dsr)
|
||||
if [ "${version_string}" != "0" -a "${version_string}" != "3" ]; then
|
||||
# Already read DSR 1337. Read DSR 5 and throw it away.
|
||||
dsr=$(read_dsr)
|
||||
else
|
||||
# Terminal didn't respond to the DSR 1337. The response we read is from DSR 5.
|
||||
version_string=""
|
||||
fi
|
||||
|
||||
# Restore the terminal to cooked mode.
|
||||
stty "$saved_stty"
|
||||
|
||||
# Extract the terminal name and version number from the response.
|
||||
version=$(version "${version_string}")
|
||||
term=$(terminal "${version_string}")
|
||||
|
||||
# Check if they match what we're looking for. This becomes the return code of the script.
|
||||
test "$term" = ITERM2 -a \( "$version" \> "$MIN_VERSION" -o "$version" = "$MIN_VERSION" \)
|
||||
78
.iterm2/it2copy
Executable file
78
.iterm2/it2copy
Executable file
@@ -0,0 +1,78 @@
|
||||
#!/bin/bash
|
||||
|
||||
trap clean_up EXIT
|
||||
trap clean_up INT
|
||||
|
||||
inosc=0
|
||||
|
||||
function clean_up() {
|
||||
if [[ $inosc == 1 ]]
|
||||
then
|
||||
print_st
|
||||
fi
|
||||
}
|
||||
|
||||
function show_help() {
|
||||
echo "Usage: $(basename $0)" 1>& 2
|
||||
echo " Copies to clipboard from standard input" 1>& 2
|
||||
echo " $(basename $0) filename" 1>& 2
|
||||
echo " Copies to clipboard from file" 1>& 2
|
||||
}
|
||||
|
||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
||||
# only accepts ESC backslash for ST.
|
||||
function print_osc() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\033Ptmux;\033\033]"
|
||||
else
|
||||
printf "\033]"
|
||||
fi
|
||||
}
|
||||
|
||||
# More of the tmux workaround described above.
|
||||
function print_st() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\a\033\\"
|
||||
else
|
||||
printf "\a"
|
||||
fi
|
||||
}
|
||||
|
||||
# Look for command line flags.
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-h|--h|--help)
|
||||
show_help
|
||||
exit
|
||||
;;
|
||||
-*)
|
||||
error "Unknown option flag: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
if [ -r "$1" ] ; then
|
||||
data=$(base64 < "$1")
|
||||
print_osc
|
||||
inosc=1
|
||||
printf '1337;Copy=:%s' "$data"
|
||||
print_st
|
||||
inosc=0
|
||||
exit 0
|
||||
else
|
||||
error "it2copy: $1: No such file or directory"
|
||||
exit 2
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
data=$(base64)
|
||||
print_osc
|
||||
inosc=1
|
||||
printf '1337;Copy=:%s' "$data"
|
||||
print_st
|
||||
inosc=0
|
||||
|
||||
18
.iterm2/it2dl
Executable file
18
.iterm2/it2dl
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: $(basename $0) file ..."
|
||||
exit 1
|
||||
fi
|
||||
for fn in "$@"
|
||||
do
|
||||
if [ -r "$fn" ] ; then
|
||||
[ -d "$fn" ] && { echo "$fn is a directory"; continue; }
|
||||
printf '\033]1337;File=name='`echo -n "$fn" | base64`";"
|
||||
wc -c "$fn" | awk '{printf "size=%d",$1}'
|
||||
printf ":"
|
||||
base64 < "$fn"
|
||||
printf '\a'
|
||||
else
|
||||
echo File $fn does not exist or is not readable.
|
||||
fi
|
||||
done
|
||||
99
.iterm2/it2getvar
Executable file
99
.iterm2/it2getvar
Executable file
@@ -0,0 +1,99 @@
|
||||
#!/bin/bash
|
||||
|
||||
function ctrl_c() {
|
||||
stty "$saved_stty"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
||||
# only accepts ESC backslash for ST.
|
||||
function print_osc() {
|
||||
if [[ $TERM == screen* ]] ; then printf "\033Ptmux;\033\033]"
|
||||
else
|
||||
printf "\033]" >& 2
|
||||
fi
|
||||
}
|
||||
|
||||
# More of the tmux workaround described above.
|
||||
function print_st() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\a\033\\" >& 2
|
||||
else
|
||||
printf "\a" >& 2
|
||||
fi
|
||||
}
|
||||
|
||||
function show_help() {
|
||||
echo "Usage:" 1>& 2
|
||||
echo " $(basename $0) name" 1>& 2
|
||||
}
|
||||
|
||||
# Read some bytes from stdin. Pass the number of bytes to read as the first argument.
|
||||
function read_bytes() {
|
||||
numbytes=$1
|
||||
dd bs=1 count=$numbytes 2>/dev/null
|
||||
}
|
||||
|
||||
# read_until c
|
||||
# Returns bytes read from stdin up to but not including the fist one equal to c
|
||||
function read_until() {
|
||||
result=""
|
||||
while :
|
||||
do
|
||||
b=$(read_bytes 1)
|
||||
if [[ $b == $1 ]]
|
||||
then
|
||||
echo "$result"
|
||||
return
|
||||
fi
|
||||
result="$result$b"
|
||||
done
|
||||
}
|
||||
|
||||
## Main
|
||||
if [[ $# != 1 ]]
|
||||
then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! test -t 1
|
||||
then
|
||||
echo "Standard error not a terminal"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Save the tty's state.
|
||||
saved_stty=$(stty -g)
|
||||
|
||||
# Trap ^C to fix the tty.
|
||||
trap ctrl_c INT
|
||||
|
||||
# Enter raw mode and turn off echo so the terminal and I can chat quietly.
|
||||
stty -echo -icanon raw
|
||||
|
||||
print_osc
|
||||
printf "1337;ReportVariable=%s" "$(printf "%s" "$1" | base64)" >& 2
|
||||
print_st
|
||||
|
||||
VERSION=$(base64 --version 2>&1)
|
||||
if [[ "$VERSION" =~ fourmilab ]]; then
|
||||
BASE64ARG=-d
|
||||
elif [[ "$VERSION" =~ GNU ]]; then
|
||||
BASE64ARG=-di
|
||||
else
|
||||
BASE64ARG=-D
|
||||
fi
|
||||
|
||||
ignore=$(read_bytes 1)
|
||||
name=$(read_until )
|
||||
re='^]1337;ReportVariable=(.*)'
|
||||
if [[ $name =~ $re ]]
|
||||
then
|
||||
printf "%s" $(base64 $BASE64ARG <<< ${BASH_REMATCH[1]})
|
||||
exit 0
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
116
.iterm2/it2setcolor
Executable file
116
.iterm2/it2setcolor
Executable file
@@ -0,0 +1,116 @@
|
||||
#!/bin/bash
|
||||
open=0
|
||||
|
||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
||||
# only accepts ESC backslash for ST.
|
||||
function print_osc() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\033Ptmux;\033\033]"
|
||||
else
|
||||
printf "\033]"
|
||||
fi
|
||||
}
|
||||
|
||||
# More of the tmux workaround described above.
|
||||
function print_st() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\a\033\\"
|
||||
else
|
||||
printf "\a"
|
||||
fi
|
||||
}
|
||||
|
||||
# set_color key rgb
|
||||
function set_color() {
|
||||
print_osc
|
||||
printf '1337;SetColors=%s=%s' "$1" "$2"
|
||||
print_st
|
||||
}
|
||||
|
||||
function error() {
|
||||
echo "ERROR: $*" 1>&2
|
||||
}
|
||||
|
||||
function show_help() {
|
||||
if [ $open = 1 ]; then
|
||||
print_st
|
||||
fi
|
||||
echo "Usage"
|
||||
echo ""
|
||||
echo "1) To set a specific color to an RGB value:"
|
||||
echo " it2setcolor name color [name color...]" 1>& 2
|
||||
echo "For example:"
|
||||
echo " it2setcolor fg fff"
|
||||
echo ""
|
||||
echo "name is one of:"
|
||||
echo " fg bg bold link selbg selfg curbg curfg underline tab"
|
||||
echo " black red green yellow blue magenta cyan white"
|
||||
echo " br_black br_red br_green br_yellow br_blue br_magenta br_cyan br_white"
|
||||
echo ""
|
||||
echo "color is of the format:"
|
||||
echo " RGB (three hex digits, like fff)"
|
||||
echo " RRGGBB (six hex digits, like f0f0f0)"
|
||||
echo " cs:RGB (cs is a color space name)"
|
||||
echo " cs:RRGGBB (cs is a color space name)"
|
||||
echo ""
|
||||
echo " The color space names accepted in the color are:"
|
||||
echo " srgb (sRGB, the default if none is specified)"
|
||||
echo " rgb (Apple's old device-independent colorspace)"
|
||||
echo " p3 (Apple's fancy large-gamut colorspace)"
|
||||
echo ""
|
||||
echo "2) To switch to a named color preset:"
|
||||
echo " it2setcolor preset name"
|
||||
echo "For example:"
|
||||
echo " it2setcolor preset 'Light Background'"
|
||||
echo ""
|
||||
echo "3) To reset the current tab's color to the system default:"
|
||||
echo " it2setcolor tab default"
|
||||
}
|
||||
|
||||
# Show help if no arguments and no stdin.
|
||||
if [ $# -eq 0 ]; then
|
||||
show_help
|
||||
exit
|
||||
fi
|
||||
|
||||
# Look for command line flags.
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-h|--h|--help)
|
||||
show_help
|
||||
exit
|
||||
;;
|
||||
-*)
|
||||
error "Unknown option flag: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
if [ $# -lt 2 ]; then
|
||||
show_help
|
||||
exit
|
||||
fi
|
||||
if [ $open = 0 ]; then
|
||||
open=1
|
||||
print_osc
|
||||
printf '1337;SetColors='
|
||||
else
|
||||
printf ","
|
||||
fi
|
||||
# name is not checked for validity because we'd like this to work with future colors, too.
|
||||
printf "%s=%s" "$1" "$2"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ $open = 1 ]; then
|
||||
print_st
|
||||
else
|
||||
show_help
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
||||
121
.iterm2/it2setkeylabel
Executable file
121
.iterm2/it2setkeylabel
Executable file
@@ -0,0 +1,121 @@
|
||||
#!/bin/bash
|
||||
|
||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
||||
# only accepts ESC backslash for ST.
|
||||
function print_osc() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\033Ptmux;\033\033]"
|
||||
else
|
||||
printf "\033]"
|
||||
fi
|
||||
}
|
||||
|
||||
# More of the tmux workaround described above.
|
||||
function print_st() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\a\033\\"
|
||||
else
|
||||
printf "\a"
|
||||
fi
|
||||
}
|
||||
|
||||
function show_help() {
|
||||
echo "Usage:" 1>& 2
|
||||
echo " $(basename $0) set Fn Label" 1>& 2
|
||||
echo " Where n is a value from 1 to 20" 1>& 2
|
||||
echo " $(basename $0) push [name]" 1>& 2
|
||||
echo " Saves the current labels with an optional name. Resets labels to their default value, unless name begins with a "." character." 1>& 2
|
||||
echo " $(basename $0) pop [name]" 1>& 2
|
||||
echo " If name is given, all key labels up to and including the one with the matching name are popped." 1>& 2
|
||||
echo "" 1>& 2
|
||||
echo "Example:" 1>& 2
|
||||
echo "#!/bin/bash" 1>& 2
|
||||
echo "# Wrapper script for mc that sets function key labels" 1>& 2
|
||||
echo "NAME=mc_\$RANDOM" 1>& 2
|
||||
echo "# Save existing labels" 1>& 2
|
||||
echo "$(basename $0) push \$NAME" 1>& 2
|
||||
echo "$(basename $0) set F1 Help" 1>& 2
|
||||
echo "$(basename $0) set F2 Menu" 1>& 2
|
||||
echo "$(basename $0) set F3 View" 1>& 2
|
||||
echo "$(basename $0) set F4 Edit" 1>& 2
|
||||
echo "$(basename $0) set F5 Copy" 1>& 2
|
||||
echo "$(basename $0) set F6 Move" 1>& 2
|
||||
echo "$(basename $0) set F7 Mkdir" 1>& 2
|
||||
echo "$(basename $0) set F8 Del" 1>& 2
|
||||
echo "$(basename $0) set F9 Menu" 1>& 2
|
||||
echo "$(basename $0) set F10 Quit" 1>& 2
|
||||
echo "$(basename $0) set F11 Menu" 1>& 2
|
||||
echo "$(basename $0) set F13 View" 1>& 2
|
||||
echo "$(basename $0) set F14 Edit" 1>& 2
|
||||
echo "$(basename $0) set F15 Copy" 1>& 2
|
||||
echo "$(basename $0) set F16 Move" 1>& 2
|
||||
echo "$(basename $0) set F17 Find" 1>& 2
|
||||
echo "mc" 1>& 2
|
||||
echo "# Restore labels to their previous state" 1>& 2
|
||||
echo "$(basename $0) pop \$NAME" 1>& 2
|
||||
}
|
||||
|
||||
## Main
|
||||
if [[ $# == 0 ]]
|
||||
then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ $1 == set ]]
|
||||
then
|
||||
if [[ $# != 3 ]]
|
||||
then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
print_osc
|
||||
printf "1337;SetKeyLabel=%s=%s" "$2" "$3"
|
||||
print_st
|
||||
elif [[ $1 == push ]]
|
||||
then
|
||||
if [[ $# == 1 ]]
|
||||
then
|
||||
print_osc
|
||||
printf "1337;PushKeyLabels"
|
||||
print_st
|
||||
elif [[ $# == 2 ]]
|
||||
then
|
||||
if [[ $2 == "" ]]
|
||||
then
|
||||
echo "Name must not be empty" 1>& 2
|
||||
exit 1
|
||||
fi
|
||||
print_osc
|
||||
printf "1337;PushKeyLabels=%s" "$2"
|
||||
print_st
|
||||
else
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
elif [[ $1 == pop ]]
|
||||
then
|
||||
if [[ $# == 1 ]]
|
||||
then
|
||||
print_osc
|
||||
printf "1337;PopKeyLabels"
|
||||
print_st
|
||||
elif [[ $# == 2 ]]
|
||||
then
|
||||
if [[ $2 == "" ]]
|
||||
then
|
||||
echo "Name must not be empty" 1>& 2
|
||||
exit 1
|
||||
fi
|
||||
print_osc
|
||||
printf "1337;PopKeyLabels=%s" "$2"
|
||||
print_st
|
||||
else
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
98
.iterm2/it2ul
Executable file
98
.iterm2/it2ul
Executable file
@@ -0,0 +1,98 @@
|
||||
#!/bin/bash
|
||||
|
||||
trap clean_up EXIT
|
||||
_STTY=$(stty -g) ## Save current terminal setup
|
||||
stty -echo ## Turn off echo
|
||||
|
||||
function clean_up() {
|
||||
stty "$_STTY" ## Restore terminal settings
|
||||
}
|
||||
|
||||
function show_help() {
|
||||
echo "Usage: $(basename $0) [destination [tar flags]]" 1>& 2
|
||||
echo " If given, the destination specifies the directory to place downloaded files."
|
||||
echo " Further options are passed through to tar. See your system's manpage for tar for details."
|
||||
}
|
||||
|
||||
function bad_input() {
|
||||
echo "Bad input: %1" 1>& 2
|
||||
exit 1
|
||||
}
|
||||
|
||||
function die() {
|
||||
echo "Fatal error: $1" 1>& 2
|
||||
exit 1
|
||||
}
|
||||
|
||||
function read_base64_stanza() {
|
||||
value=""
|
||||
while read line;
|
||||
do
|
||||
if [ "$line" == "" ]; then
|
||||
break
|
||||
fi
|
||||
printf "%s" "$line"
|
||||
done
|
||||
}
|
||||
|
||||
function decode() {
|
||||
VERSION=$(base64 --version 2>&1)
|
||||
if [[ "$VERSION" =~ fourmilab ]]; then
|
||||
BASE64ARG=-d
|
||||
elif [[ "$VERSION" =~ GNU ]]; then
|
||||
BASE64ARG=-di
|
||||
else
|
||||
BASE64ARG=-D
|
||||
fi
|
||||
|
||||
base64 "$BASE64ARG" <<< "$1"
|
||||
}
|
||||
|
||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
||||
# only accepts ESC backslash for ST.
|
||||
function print_osc() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\033Ptmux;\033\033]"
|
||||
else
|
||||
printf "\033]"
|
||||
fi
|
||||
}
|
||||
|
||||
# More of the tmux workaround described above.
|
||||
function print_st() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\a\033\\"
|
||||
else
|
||||
printf "\a"
|
||||
fi
|
||||
}
|
||||
|
||||
function send_request_for_upload() {
|
||||
print_osc
|
||||
printf '1337;RequestUpload=format=tgz' ""
|
||||
print_st
|
||||
}
|
||||
|
||||
location="$PWD"
|
||||
if [[ $# > 0 ]]
|
||||
then
|
||||
location="$1"
|
||||
shift
|
||||
fi
|
||||
|
||||
send_request_for_upload
|
||||
read status
|
||||
|
||||
if [[ $status == ok ]]
|
||||
then
|
||||
data=$(read_base64_stanza)
|
||||
clean_up
|
||||
decode "$data" | tar -x -z -C "$location" -f - $* 1>& 2
|
||||
elif [[ $status == abort ]]
|
||||
then
|
||||
echo "Upload aborted" 1>& 2
|
||||
else
|
||||
die "Unknown status: $status" 1>& 2
|
||||
fi
|
||||
|
||||
104
.iterm2/it2universion
Executable file
104
.iterm2/it2universion
Executable file
@@ -0,0 +1,104 @@
|
||||
#!/bin/bash
|
||||
|
||||
# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
|
||||
# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
|
||||
# only accepts ESC backslash for ST.
|
||||
function print_osc() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\033Ptmux;\033\033]"
|
||||
else
|
||||
printf "\033]"
|
||||
fi
|
||||
}
|
||||
|
||||
# More of the tmux workaround described above.
|
||||
function print_st() {
|
||||
if [[ $TERM == screen* ]] ; then
|
||||
printf "\a\033\\"
|
||||
else
|
||||
printf "\a"
|
||||
fi
|
||||
}
|
||||
|
||||
function show_help() {
|
||||
echo "Usage:" 1>& 2
|
||||
echo " $(basename $0) set 8" 1>& 2
|
||||
echo " $(basename $0) set 9" 1>& 2
|
||||
echo " $(basename $0) push [name]" 1>& 2
|
||||
echo " Saves the current version with an optional name." 1>& 2
|
||||
echo " $(basename $0) pop [name]" 1>& 2
|
||||
echo " If name is given, all versions up to and including the one with the matching name are popped." 1>& 2
|
||||
}
|
||||
|
||||
function set_version() {
|
||||
print_osc
|
||||
printf "1337;UnicodeVersion=$1"
|
||||
print_st
|
||||
}
|
||||
|
||||
function push_version() {
|
||||
print_osc
|
||||
printf "1337;UnicodeVersion=push $1"
|
||||
print_st
|
||||
}
|
||||
|
||||
function pop_version() {
|
||||
print_osc
|
||||
printf "1337;UnicodeVersion=pop $1"
|
||||
print_st
|
||||
}
|
||||
|
||||
## Main
|
||||
if [[ $# == 0 ]]
|
||||
then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ $1 == set ]]
|
||||
then
|
||||
if [[ $# != 2 ]]
|
||||
then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
set_version $2
|
||||
elif [[ $1 == push ]]
|
||||
then
|
||||
if [[ $# == 1 ]]
|
||||
then
|
||||
push_version ""
|
||||
elif [[ $# == 2 ]]
|
||||
then
|
||||
if [[ $2 == "" ]]
|
||||
then
|
||||
echo "Name must not be empty" 1>& 2
|
||||
exit 1
|
||||
fi
|
||||
push_version "$2"
|
||||
else
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
elif [[ $1 == pop ]]
|
||||
then
|
||||
if [[ $# == 1 ]]
|
||||
then
|
||||
pop_version ""
|
||||
elif [[ $# == 2 ]]
|
||||
then
|
||||
if [[ $2 == "" ]]
|
||||
then
|
||||
echo "Name must not be empty" 1>& 2
|
||||
exit 1
|
||||
fi
|
||||
pop_version "$2"
|
||||
else
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user