From 6648ac73321ea964c9882c4d4e391e0460c1a855 Mon Sep 17 00:00:00 2001 From: "martin f. krafft" Date: Thu, 23 May 2024 13:40:48 +0200 Subject: [PATCH 1/1] replace identical files with symlinks --- .config/neomutt/append-header | 76 +------------ .config/neomutt/bgview | 181 +------------------------------ .config/neomutt/bgview-delay | 181 +------------------------------ .config/neomutt/bgview-fifo | 181 +------------------------------ .config/neomutt/remove-header | 76 +------------ .config/neomutt/replace-header | 76 +------------ .config/neomutt/supersede-header | 76 +------------ 7 files changed, 7 insertions(+), 840 deletions(-) mode change 100755 => 120000 .config/neomutt/append-header mode change 100755 => 120000 .config/neomutt/bgview mode change 100755 => 120000 .config/neomutt/bgview-delay mode change 100755 => 120000 .config/neomutt/bgview-fifo mode change 100755 => 120000 .config/neomutt/remove-header mode change 100755 => 120000 .config/neomutt/replace-header mode change 100755 => 120000 .config/neomutt/supersede-header diff --git a/.config/neomutt/append-header b/.config/neomutt/append-header deleted file mode 100755 index ab7444b..0000000 --- a/.config/neomutt/append-header +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh -# -# edit-header - helper script to append/replace/remove headers with mutt -# -# Based on an idea by David Champion -# -# Copyright © 2008 martin f. krafft -# Released under the terms of the Artistic Licence 2.0 -# -set -eu - -if [ ! -x "$(command -v formail)" ]; then - echo E: formail not installed. >&2 - exit 1 -fi - -header="${1:-}" -if [ -z "$header" ]; then - echo "E: no header specified" >&2 - exit 1 -fi - -get_header_contents() -{ - local contents - printf "Enter ${1:-header} contents: " >/dev/tty - read contents &2 - exit 1 - ;; - -esac - -echo "set my_editor=\"\$editor\"" -echo "set my_filter=\"$editor\"" -echo -n "push '" -echo -n "set editor=\"\$my_filter\"" -echo -n "" -echo -n "set editor=\"\$my_editor\"" -echo -n "unset my_filter" -echo -n "unset my_editor" -echo "'" diff --git a/.config/neomutt/append-header b/.config/neomutt/append-header new file mode 120000 index 0000000..5cc745f --- /dev/null +++ b/.config/neomutt/append-header @@ -0,0 +1 @@ +edit-header \ No newline at end of file diff --git a/.config/neomutt/bgview b/.config/neomutt/bgview deleted file mode 100755 index 37f40ad..0000000 --- a/.config/neomutt/bgview +++ /dev/null @@ -1,180 +0,0 @@ -#!/bin/sh - -#exec 2>> /tmp/bgrun.stderr -#set -x - -SELF="${0##*/}" - -TEMPDIR= -TEMPRUNDIR=.tempdir-run.d -cleanup() { - if [ -d $TEMPRUNDIR ]; then - local TEMPDIR; TEMPDIR="$PWD" - notify_output - cd / - rm -rf "$TEMPDIR" - fi - trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 -} -trap cleanup 1 2 3 4 5 6 7 8 10 11 12 13 14 15 - -enter_tempdir() { - if [ -d $TEMPRUNDIR ]; then - return - - else - if [ -z "${TMPDIR:-}" ]; then - TMPDIR=/tmp - fi - for i in $LOGNAME volatile; do - if [ -d "${TMPDIR}/$i" ]; then - TMPDIR="${TMPDIR}/$i" - break - fi - done - cd $(mktemp -dp "$TMPDIR" mutt.XXXXXXXXXX) - mkdir $TEMPRUNDIR - fi -} - -notify() { - if [ -x "$(command -v awesome-client)" ]; then - local stdout stderr escaped output - stdout="${2:-}" - stderr="${3:-}" - for i in stdout stderr; do - if eval test -s $TEMPRUNDIR/output.$i; then - escaped=$(eval sed -e 's,\",\\\",g' $TEMPRUNDIR/output.$i) - output="${output:+$output -}${i}: -$escaped" - fi - done - [ -n "${escaped:-}" ] || return - awesome-client <<-_eof - local naughty = require("naughty") - naughty.notify({ preset = naughty.config.presets.low, - title = "${1:-Output from mutt/$SELF}", - text = [[$output]] - }) - _eof - fi -} - -notify_output() { - [ -d $TEMPRUNDIR ] || return - local stdout stderr anything - - for i in stdout stderr; do - if [ -s "$TEMPRUNDIR/output.$i" ]; then - eval $i="'$TEMPRUNDIR/output.$i'" - else - eval $i=/dev/null - fi - done - - notify "Output from mutt/$SELF" $stdout $stderr -} - -guess_extension() { - python3 -c "import mimetypes; print(mimetypes.guess_extension('$1'))" -} - -get_file() { - local t - if [ -z "$1" ]; then - t=$(mktemp -p "$PWD" tmp.XXXXXXXXXX$(guess_extension "$MIMETYPE")) - cat > "$t" - echo "$t" - else - t="$(echo -n ${1##*/} | sed -re 's![^[:alnum:],.@%^+=_-]!_!gi')" - ln "$1" "$t" 2>/dev/null || cp "$1" "$t" - echo "$PWD/$t" - fi -} - -MIMETYPE= FILENAME= VIEWER= DELAY=1 -state= -for arg in "$@"; do - case "$state/$arg" in - - (/-t) state=t;; - (t/*) MIMETYPE="$arg"; state=;; - - (/-f) state=f;; - (f/*) FILENAME="$arg"; state=;; - - (/-d) state=d;; - (d/*) DELAY="$arg"; state=;; - - (/-v) state=v;; - (v/*) VIEWER="$arg"; state=;; - - (*) - echo >&2 "E: Invalid argument: $i" - exit 1 - ;; - - esac -done - -launch_viewer() { - local filename; filename="$1" - if [ -z "$VIEWER" ]; then - [ -n "${2:-}" ] && filename="${2}:${1}" - run-mailcap "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr - else - $VIEWER "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr - fi -} - -case "$SELF" in - (bgview) - # make a copy of the file, then launch a shell process in the background - # to divert to run-mailcap, after which the temporary directory gets - # cleaned up. - enter_tempdir - FILE="$(get_file "$FILENAME")" - ( - ts=$(($(date +%s) + $DELAY)) - launch_viewer "$FILE" "$MIMETYPE" - while [ $(date +%s) -lt $ts ]; do sleep 1; done - cleanup - ) & - trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 - ;; - (bgview-fifo) - # hack to stay around until the viewer has read the file: make a fifo and - # wait for the cat process to finish writing to it, which means that it - # must have been consumed on the other end. - enter_tempdir - FILE="$(get_file "$FILENAME")" - FIFO="fifo-${FILE##*/}" - mkfifo "$FIFO" - cat "$FILE" > "$FIFO" & - # For some reason, we do have to write a tempfile and cannot seem to - # redirect stdin directly to the fifo, i.e. this does not work instead of - # the previous three lines: - ## cat > "$FIFO" & - launch_viewer "$FIFO" "$MIMETYPE" - wait - cleanup - ;; - (bgview-delay) - # hack to stay around until the file hasn't been accessed for a few - # seconds, so that we can clean up. This is for cases when the FIFO method - # doesn't work, because e.g. Firefox randomly chooses it needs to read - # HTML files twice. - enter_tempdir - FILE="$(get_file "$FILENAME")" - touch "$FILE" - (launch_viewer "$FILE" "$MIMETYPE") & - ( - while [ $(($(stat -c%X "$FILE") + $DELAY)) -gt $(date +%s) ]; do - sleep 1 - done - cleanup - ) & - trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 - ;; -esac diff --git a/.config/neomutt/bgview b/.config/neomutt/bgview new file mode 120000 index 0000000..b07e7aa --- /dev/null +++ b/.config/neomutt/bgview @@ -0,0 +1 @@ +bgrun \ No newline at end of file diff --git a/.config/neomutt/bgview-delay b/.config/neomutt/bgview-delay deleted file mode 100755 index 37f40ad..0000000 --- a/.config/neomutt/bgview-delay +++ /dev/null @@ -1,180 +0,0 @@ -#!/bin/sh - -#exec 2>> /tmp/bgrun.stderr -#set -x - -SELF="${0##*/}" - -TEMPDIR= -TEMPRUNDIR=.tempdir-run.d -cleanup() { - if [ -d $TEMPRUNDIR ]; then - local TEMPDIR; TEMPDIR="$PWD" - notify_output - cd / - rm -rf "$TEMPDIR" - fi - trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 -} -trap cleanup 1 2 3 4 5 6 7 8 10 11 12 13 14 15 - -enter_tempdir() { - if [ -d $TEMPRUNDIR ]; then - return - - else - if [ -z "${TMPDIR:-}" ]; then - TMPDIR=/tmp - fi - for i in $LOGNAME volatile; do - if [ -d "${TMPDIR}/$i" ]; then - TMPDIR="${TMPDIR}/$i" - break - fi - done - cd $(mktemp -dp "$TMPDIR" mutt.XXXXXXXXXX) - mkdir $TEMPRUNDIR - fi -} - -notify() { - if [ -x "$(command -v awesome-client)" ]; then - local stdout stderr escaped output - stdout="${2:-}" - stderr="${3:-}" - for i in stdout stderr; do - if eval test -s $TEMPRUNDIR/output.$i; then - escaped=$(eval sed -e 's,\",\\\",g' $TEMPRUNDIR/output.$i) - output="${output:+$output -}${i}: -$escaped" - fi - done - [ -n "${escaped:-}" ] || return - awesome-client <<-_eof - local naughty = require("naughty") - naughty.notify({ preset = naughty.config.presets.low, - title = "${1:-Output from mutt/$SELF}", - text = [[$output]] - }) - _eof - fi -} - -notify_output() { - [ -d $TEMPRUNDIR ] || return - local stdout stderr anything - - for i in stdout stderr; do - if [ -s "$TEMPRUNDIR/output.$i" ]; then - eval $i="'$TEMPRUNDIR/output.$i'" - else - eval $i=/dev/null - fi - done - - notify "Output from mutt/$SELF" $stdout $stderr -} - -guess_extension() { - python3 -c "import mimetypes; print(mimetypes.guess_extension('$1'))" -} - -get_file() { - local t - if [ -z "$1" ]; then - t=$(mktemp -p "$PWD" tmp.XXXXXXXXXX$(guess_extension "$MIMETYPE")) - cat > "$t" - echo "$t" - else - t="$(echo -n ${1##*/} | sed -re 's![^[:alnum:],.@%^+=_-]!_!gi')" - ln "$1" "$t" 2>/dev/null || cp "$1" "$t" - echo "$PWD/$t" - fi -} - -MIMETYPE= FILENAME= VIEWER= DELAY=1 -state= -for arg in "$@"; do - case "$state/$arg" in - - (/-t) state=t;; - (t/*) MIMETYPE="$arg"; state=;; - - (/-f) state=f;; - (f/*) FILENAME="$arg"; state=;; - - (/-d) state=d;; - (d/*) DELAY="$arg"; state=;; - - (/-v) state=v;; - (v/*) VIEWER="$arg"; state=;; - - (*) - echo >&2 "E: Invalid argument: $i" - exit 1 - ;; - - esac -done - -launch_viewer() { - local filename; filename="$1" - if [ -z "$VIEWER" ]; then - [ -n "${2:-}" ] && filename="${2}:${1}" - run-mailcap "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr - else - $VIEWER "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr - fi -} - -case "$SELF" in - (bgview) - # make a copy of the file, then launch a shell process in the background - # to divert to run-mailcap, after which the temporary directory gets - # cleaned up. - enter_tempdir - FILE="$(get_file "$FILENAME")" - ( - ts=$(($(date +%s) + $DELAY)) - launch_viewer "$FILE" "$MIMETYPE" - while [ $(date +%s) -lt $ts ]; do sleep 1; done - cleanup - ) & - trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 - ;; - (bgview-fifo) - # hack to stay around until the viewer has read the file: make a fifo and - # wait for the cat process to finish writing to it, which means that it - # must have been consumed on the other end. - enter_tempdir - FILE="$(get_file "$FILENAME")" - FIFO="fifo-${FILE##*/}" - mkfifo "$FIFO" - cat "$FILE" > "$FIFO" & - # For some reason, we do have to write a tempfile and cannot seem to - # redirect stdin directly to the fifo, i.e. this does not work instead of - # the previous three lines: - ## cat > "$FIFO" & - launch_viewer "$FIFO" "$MIMETYPE" - wait - cleanup - ;; - (bgview-delay) - # hack to stay around until the file hasn't been accessed for a few - # seconds, so that we can clean up. This is for cases when the FIFO method - # doesn't work, because e.g. Firefox randomly chooses it needs to read - # HTML files twice. - enter_tempdir - FILE="$(get_file "$FILENAME")" - touch "$FILE" - (launch_viewer "$FILE" "$MIMETYPE") & - ( - while [ $(($(stat -c%X "$FILE") + $DELAY)) -gt $(date +%s) ]; do - sleep 1 - done - cleanup - ) & - trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 - ;; -esac diff --git a/.config/neomutt/bgview-delay b/.config/neomutt/bgview-delay new file mode 120000 index 0000000..b07e7aa --- /dev/null +++ b/.config/neomutt/bgview-delay @@ -0,0 +1 @@ +bgrun \ No newline at end of file diff --git a/.config/neomutt/bgview-fifo b/.config/neomutt/bgview-fifo deleted file mode 100755 index 37f40ad..0000000 --- a/.config/neomutt/bgview-fifo +++ /dev/null @@ -1,180 +0,0 @@ -#!/bin/sh - -#exec 2>> /tmp/bgrun.stderr -#set -x - -SELF="${0##*/}" - -TEMPDIR= -TEMPRUNDIR=.tempdir-run.d -cleanup() { - if [ -d $TEMPRUNDIR ]; then - local TEMPDIR; TEMPDIR="$PWD" - notify_output - cd / - rm -rf "$TEMPDIR" - fi - trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 -} -trap cleanup 1 2 3 4 5 6 7 8 10 11 12 13 14 15 - -enter_tempdir() { - if [ -d $TEMPRUNDIR ]; then - return - - else - if [ -z "${TMPDIR:-}" ]; then - TMPDIR=/tmp - fi - for i in $LOGNAME volatile; do - if [ -d "${TMPDIR}/$i" ]; then - TMPDIR="${TMPDIR}/$i" - break - fi - done - cd $(mktemp -dp "$TMPDIR" mutt.XXXXXXXXXX) - mkdir $TEMPRUNDIR - fi -} - -notify() { - if [ -x "$(command -v awesome-client)" ]; then - local stdout stderr escaped output - stdout="${2:-}" - stderr="${3:-}" - for i in stdout stderr; do - if eval test -s $TEMPRUNDIR/output.$i; then - escaped=$(eval sed -e 's,\",\\\",g' $TEMPRUNDIR/output.$i) - output="${output:+$output -}${i}: -$escaped" - fi - done - [ -n "${escaped:-}" ] || return - awesome-client <<-_eof - local naughty = require("naughty") - naughty.notify({ preset = naughty.config.presets.low, - title = "${1:-Output from mutt/$SELF}", - text = [[$output]] - }) - _eof - fi -} - -notify_output() { - [ -d $TEMPRUNDIR ] || return - local stdout stderr anything - - for i in stdout stderr; do - if [ -s "$TEMPRUNDIR/output.$i" ]; then - eval $i="'$TEMPRUNDIR/output.$i'" - else - eval $i=/dev/null - fi - done - - notify "Output from mutt/$SELF" $stdout $stderr -} - -guess_extension() { - python3 -c "import mimetypes; print(mimetypes.guess_extension('$1'))" -} - -get_file() { - local t - if [ -z "$1" ]; then - t=$(mktemp -p "$PWD" tmp.XXXXXXXXXX$(guess_extension "$MIMETYPE")) - cat > "$t" - echo "$t" - else - t="$(echo -n ${1##*/} | sed -re 's![^[:alnum:],.@%^+=_-]!_!gi')" - ln "$1" "$t" 2>/dev/null || cp "$1" "$t" - echo "$PWD/$t" - fi -} - -MIMETYPE= FILENAME= VIEWER= DELAY=1 -state= -for arg in "$@"; do - case "$state/$arg" in - - (/-t) state=t;; - (t/*) MIMETYPE="$arg"; state=;; - - (/-f) state=f;; - (f/*) FILENAME="$arg"; state=;; - - (/-d) state=d;; - (d/*) DELAY="$arg"; state=;; - - (/-v) state=v;; - (v/*) VIEWER="$arg"; state=;; - - (*) - echo >&2 "E: Invalid argument: $i" - exit 1 - ;; - - esac -done - -launch_viewer() { - local filename; filename="$1" - if [ -z "$VIEWER" ]; then - [ -n "${2:-}" ] && filename="${2}:${1}" - run-mailcap "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr - else - $VIEWER "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr - fi -} - -case "$SELF" in - (bgview) - # make a copy of the file, then launch a shell process in the background - # to divert to run-mailcap, after which the temporary directory gets - # cleaned up. - enter_tempdir - FILE="$(get_file "$FILENAME")" - ( - ts=$(($(date +%s) + $DELAY)) - launch_viewer "$FILE" "$MIMETYPE" - while [ $(date +%s) -lt $ts ]; do sleep 1; done - cleanup - ) & - trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 - ;; - (bgview-fifo) - # hack to stay around until the viewer has read the file: make a fifo and - # wait for the cat process to finish writing to it, which means that it - # must have been consumed on the other end. - enter_tempdir - FILE="$(get_file "$FILENAME")" - FIFO="fifo-${FILE##*/}" - mkfifo "$FIFO" - cat "$FILE" > "$FIFO" & - # For some reason, we do have to write a tempfile and cannot seem to - # redirect stdin directly to the fifo, i.e. this does not work instead of - # the previous three lines: - ## cat > "$FIFO" & - launch_viewer "$FIFO" "$MIMETYPE" - wait - cleanup - ;; - (bgview-delay) - # hack to stay around until the file hasn't been accessed for a few - # seconds, so that we can clean up. This is for cases when the FIFO method - # doesn't work, because e.g. Firefox randomly chooses it needs to read - # HTML files twice. - enter_tempdir - FILE="$(get_file "$FILENAME")" - touch "$FILE" - (launch_viewer "$FILE" "$MIMETYPE") & - ( - while [ $(($(stat -c%X "$FILE") + $DELAY)) -gt $(date +%s) ]; do - sleep 1 - done - cleanup - ) & - trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 - ;; -esac diff --git a/.config/neomutt/bgview-fifo b/.config/neomutt/bgview-fifo new file mode 120000 index 0000000..b07e7aa --- /dev/null +++ b/.config/neomutt/bgview-fifo @@ -0,0 +1 @@ +bgrun \ No newline at end of file diff --git a/.config/neomutt/remove-header b/.config/neomutt/remove-header deleted file mode 100755 index ab7444b..0000000 --- a/.config/neomutt/remove-header +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh -# -# edit-header - helper script to append/replace/remove headers with mutt -# -# Based on an idea by David Champion -# -# Copyright © 2008 martin f. krafft -# Released under the terms of the Artistic Licence 2.0 -# -set -eu - -if [ ! -x "$(command -v formail)" ]; then - echo E: formail not installed. >&2 - exit 1 -fi - -header="${1:-}" -if [ -z "$header" ]; then - echo "E: no header specified" >&2 - exit 1 -fi - -get_header_contents() -{ - local contents - printf "Enter ${1:-header} contents: " >/dev/tty - read contents &2 - exit 1 - ;; - -esac - -echo "set my_editor=\"\$editor\"" -echo "set my_filter=\"$editor\"" -echo -n "push '" -echo -n "set editor=\"\$my_filter\"" -echo -n "" -echo -n "set editor=\"\$my_editor\"" -echo -n "unset my_filter" -echo -n "unset my_editor" -echo "'" diff --git a/.config/neomutt/remove-header b/.config/neomutt/remove-header new file mode 120000 index 0000000..5cc745f --- /dev/null +++ b/.config/neomutt/remove-header @@ -0,0 +1 @@ +edit-header \ No newline at end of file diff --git a/.config/neomutt/replace-header b/.config/neomutt/replace-header deleted file mode 100755 index ab7444b..0000000 --- a/.config/neomutt/replace-header +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh -# -# edit-header - helper script to append/replace/remove headers with mutt -# -# Based on an idea by David Champion -# -# Copyright © 2008 martin f. krafft -# Released under the terms of the Artistic Licence 2.0 -# -set -eu - -if [ ! -x "$(command -v formail)" ]; then - echo E: formail not installed. >&2 - exit 1 -fi - -header="${1:-}" -if [ -z "$header" ]; then - echo "E: no header specified" >&2 - exit 1 -fi - -get_header_contents() -{ - local contents - printf "Enter ${1:-header} contents: " >/dev/tty - read contents &2 - exit 1 - ;; - -esac - -echo "set my_editor=\"\$editor\"" -echo "set my_filter=\"$editor\"" -echo -n "push '" -echo -n "set editor=\"\$my_filter\"" -echo -n "" -echo -n "set editor=\"\$my_editor\"" -echo -n "unset my_filter" -echo -n "unset my_editor" -echo "'" diff --git a/.config/neomutt/replace-header b/.config/neomutt/replace-header new file mode 120000 index 0000000..5cc745f --- /dev/null +++ b/.config/neomutt/replace-header @@ -0,0 +1 @@ +edit-header \ No newline at end of file diff --git a/.config/neomutt/supersede-header b/.config/neomutt/supersede-header deleted file mode 100755 index ab7444b..0000000 --- a/.config/neomutt/supersede-header +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh -# -# edit-header - helper script to append/replace/remove headers with mutt -# -# Based on an idea by David Champion -# -# Copyright © 2008 martin f. krafft -# Released under the terms of the Artistic Licence 2.0 -# -set -eu - -if [ ! -x "$(command -v formail)" ]; then - echo E: formail not installed. >&2 - exit 1 -fi - -header="${1:-}" -if [ -z "$header" ]; then - echo "E: no header specified" >&2 - exit 1 -fi - -get_header_contents() -{ - local contents - printf "Enter ${1:-header} contents: " >/dev/tty - read contents &2 - exit 1 - ;; - -esac - -echo "set my_editor=\"\$editor\"" -echo "set my_filter=\"$editor\"" -echo -n "push '" -echo -n "set editor=\"\$my_filter\"" -echo -n "" -echo -n "set editor=\"\$my_editor\"" -echo -n "unset my_filter" -echo -n "unset my_editor" -echo "'" diff --git a/.config/neomutt/supersede-header b/.config/neomutt/supersede-header new file mode 120000 index 0000000..5cc745f --- /dev/null +++ b/.config/neomutt/supersede-header @@ -0,0 +1 @@ +edit-header \ No newline at end of file -- 2.39.5