Skip to content

Instantly share code, notes, and snippets.

@nkh
Created October 25, 2022 12:31
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save nkh/df503e5142d66b2bf4a1ce68e0f90496 to your computer and use it in GitHub Desktop.
Save nkh/df503e5142d66b2bf4a1ce68e0f90496 to your computer and use it in GitHub Desktop.
tmsu sc-im interface for bash
L=({A..Z})
ToAA() { AA= ; local i=$1 ; (($i == 0)) && AA='@' ; while ((i)) ; do AA="${L[((--i % 26))]}$AA" ; ((i /= 26)) ; done ; }
st()
{
cat <<EOF
color "type=DEFAULT fg=WHITE bg=DEFAULT_COLOR"
color "type=HEADINGS fg=CYAN bg=BLACK bold=0"
color "type=HEADINGS_ODD fg=CYAN bg=BLACK bold=0"
color "type=CELL_SELECTION bg=CYAN fg=WHITE bold=0"
color "type=CELL_SELECTION_SC bg=CYAN fg=WHITE"
color "type=STRG fg=WHITE bg=DEFAULT_COLOR bold=0"
freeze A
format A 30 0 0
cellcolor A0 "bg=BLACK fg=YELLOW bold=1"
# leftstring A0 = "+/- to change"
goto B1
EOF
readarray -t all_tags < <(tmsu tags -1 --name=never $PWD/* | sed -e '/^$/d' | sort -u)
column=1
for tag in "${all_tags[@]}"
do
((column++)) ; ToAA $column ; ((tag_length = ${#tag} + 2)) ; echo -e "format $AA $tag_length 0 0\nlabel ${AA}0 = \"$tag\""
done
readarray -t files_and_tags < <(shopt -s dotglob ; tmsu tags $PWD/* 2>&-)
declare -A lookup
row=0
for file_and_tag in "${files_and_tags[@]}"
do
((row++))
declare -A file_tags=()
file_tag_array=($file_and_tag)
for tag in "${file_tag_array[@]:1}" ; do file_tags[$tag]="$tag" ; done
file="${file_tag_array%%:}"
echo "leftstring A$row = \"${file##*/}\""
column=1
for tag in "${all_tags[@]}"
do
((column++)) ; ToAA $column
lu_tag="> let $AA$row = 1"
lookup[$lu_tag]="tmsu tag $file $tag"
lu_untag="> let $AA$row = 0"
lookup[$lu_untag]="tmsu untag $file $tag"
[[ -n "${file_tags[$tag]}" ]] && { echo "cellcolor $AA$row \"fg=BLACK bg=WHITE\"" ; echo "let $AA$row = 1" ; } || echo "let $AA$row = 0"
done
done
declare -p lookup &>"$1"
}
mkdir -p /tmp/ftl/
scim_tmsu_file="$(mktemp /tmp/ftl/scim_tmsu_XXXXXXX)"
st "${scim_tmsu_file}_lookup" | tee "${scim_tmsu_file}_original.sc" >"${scim_tmsu_file}_new.sc"
sc-im "${scim_tmsu_file}_new.sc"
source "${scim_tmsu_file}_lookup"
while read -r tmsu_diff
do
tmsu_diff=$(echo $tmsu_diff | tr -d '\n')
# echo "<${lookup["$tmsu_diff"]}>"
${lookup["$tmsu_diff"]}
done < <(diff "${scim_tmsu_file}_original.sc" "${scim_tmsu_file}_new.sc" | rg "> let")
rm "${scim_tmsu_file}_lookup" "${scim_tmsu_file}_original.sc" "${scim_tmsu_file}_new.sc"
# vim: set filetype=bash :
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment