diff --git a/src/main.sh b/src/main.sh index 2e40163..44f6c83 100755 --- a/src/main.sh +++ b/src/main.sh @@ -14,16 +14,19 @@ set -eu # tools . "sh/tools.sh" +# history +. "sh/history.sh" + __notmuch_search() { $NOTMUCH search "$*" \ - | sed "s/^thread:\([[:xdigit:]]\+\)\s\+\([^[]\+\)\s\+\[\([^]]\+\)\]\([^;]*\); \(.*\) (\([^(]*\))$/${COLDATE}\2${RESET}\t${COLCNTS}\3${RESET}\t${COLFROM}\4${RESET}\t${COLSUBJ}\5${RESET}\t${COLTAGS}\6${RESET}\t\1/" \ + | sed "s/^thread:\([[:xdigit:]]\+\)\s\+\([^[]\+\)\s\+\[\([^]]\+\)\]\([^;]*\); \(.*\) (\([^(]*\))$/${COLDATE}\2${COLRESET}\t${COLCNTS}\3${COLRESET}\t${COLFROM}\4${COLRESET}\t${COLSUBJ}\5${COLRESET}\t${COLTAGS}\6${COLRESET}\t\1/" \ | column -s "$(printf '\t')" -t -l 3 -R 1,2 } __notmuch_thread() { $NOTMUCH show thread:"$1" \ | awk "$AWK_THREADOVERVIEW" \ - | sed "s/^\(\S*\)\t\([^\t]*\)\t\(.*\) (\([^()]*\)) (\([^()]*\))$/${COLFROM}\3${RESET}\t${COLSUBJ}\2${RESET}\t${COLDATE}\4${RESET}\t${COLTAGS}\5${RESET}\t\1/" + | sed "s/^\(\S*\)\t\([^\t]*\)\t\(.*\) (\([^()]*\)) (\([^()]*\))$/${COLFROM}\3${COLRESET}\t${COLSUBJ}\2${COLRESET}\t${COLDATE}\4${COLRESET}\t${COLTAGS}\5${COLRESET}\t\1/" } __notmuch_list_tags() { @@ -34,6 +37,7 @@ __notmuch_list_address() { $NOTMUCH address '*' } + if [ "${1:-}" = "--preview-thread" ]; then shift thread="$1" @@ -56,6 +60,7 @@ fi # FZF default configs FZF_DEFAULT_PREVIEW_WINDOW="right,80,border-line,wrap-word" +FZF_ALTERNATE_PREVIEW_WINDOW="bottom,80%,border-line,wrap-word" FZF_DEFAULT_THREAD_LINE="{1} {3} ({4})" if [ "${1:-}" = "--show-thread" ]; then @@ -74,7 +79,7 @@ if [ "${1:-}" = "--show-thread" ]; then --bind='page-up:preview-half-page-up,page-down:preview-half-page-down' \ --bind="enter:" \ --bind="ctrl-h,backward-eof:abort" \ - --bind="alt-/:change-preview-window(right,90%,border-line,wrap-word|$FZF_DEFAULT_PREVIEW_WINDOW)" \ + --bind="alt-/:change-preview-window($FZF_ALTERNATE_PREVIEW_WINDOW|$FZF_DEFAULT_PREVIEW_WINDOW)" \ --preview="$0 --preview-message {5}" \ --preview-window="$FZF_DEFAULT_PREVIEW_WINDOW" || true) exit @@ -87,11 +92,13 @@ CMD_SEARCH_TAG="tag-" ADDRESS_TO="to-" ADDRESS_FROM="from-" CMD_SEARCH_ADDRESS="address-" +CMD_EDIT_QUERY="edit-query" while true; do nmquery="${nmquery:-tag:inbox}" + [ "$(tail -1 "$NMFHIST")" = "$nmquery" ] || echo "$nmquery" >> "$NMFHIST" cmd=$(__notmuch_search "$nmquery" | fzf \ - --header="$nmquery" --footer="FOOTER" \ + --header="Query: $nmquery" \ --ansi \ --tiebreak=index \ --reverse \ @@ -104,10 +111,11 @@ while true; do --bind="alt-S:print($CMD_SEARCH_ADDRESS$ADDRESS_FROM$APPEND)+accept" \ --bind="alt-r:print($CMD_SEARCH_ADDRESS$ADDRESS_TO$NWSRCH)+accept" \ --bind="alt-R:print($CMD_SEARCH_ADDRESS$ADDRESS_TO$APPEND)+accept" \ + --bind="alt-q:print($CMD_EDIT_QUERY)+accept" \ --bind='alt-j:preview-down,alt-k:preview-up' \ --bind='page-up:preview-half-page-up,page-down:preview-half-page-down' \ --bind="enter,ctrl-l:execute:$0 --show-thread {4}" \ - --bind="alt-/:change-preview-window(right,90%,border-line,wrap-word|$FZF_DEFAULT_PREVIEW_WINDOW)" \ + --bind="alt-/:change-preview-window($FZF_ALTERNATE_PREVIEW_WINDOW|$FZF_DEFAULT_PREVIEW_WINDOW)" \ --preview="$0 --preview-thread {4}" \ --preview-window="$FZF_DEFAULT_PREVIEW_WINDOW" | head -1 || true) [ -n "$cmd" ] || exit 0 @@ -152,6 +160,19 @@ while true; do ;; esac ;; + $CMD_EDIT_QUERY*) + nmquery=$(fzf \ + --ansi \ + --tac \ + --margin='20%' \ + --query="$nmquery" \ + --disabled \ + --print-query \ + --prompt="Query: " \ + --bind='focus:replace-query' \ + --border=double \ + --border-label='Query history' < "$NMFHIST" | head -1 || true) + ;; *) ;; esac diff --git a/src/sh/theme.sh b/src/sh/theme.sh index 93ae6fb..47aee9c 100644 --- a/src/sh/theme.sh +++ b/src/sh/theme.sh @@ -5,9 +5,9 @@ if [ ! "${THEME_LOADED:-}" ]; then COLFROM="$(printf '\033[38;5;208m')" COLSUBJ="$(printf '\033[38;5;179m\033[3m')" COLTAGS="$(printf '\033[38;5;106m\033[2m')" - RESET="$(printf '\033[0m')" + COLRESET="$(printf '\033[0m')" - export COLDATE COLCNTS COLFROM COLSUBJ COLTAGS + export COLDATE COLCNTS COLFROM COLSUBJ COLTAGS COLRESET export THEME_LOADED=1 fi