aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--aerc/.config/aerc/aerc.conf44
-rw-r--r--aerc/.config/aerc/binds.conf123
-rwxr-xr-xaerc/.config/aerc/filters/colorize143
3 files changed, 310 insertions, 0 deletions
diff --git a/aerc/.config/aerc/aerc.conf b/aerc/.config/aerc/aerc.conf
new file mode 100644
index 0000000..d88f887
--- /dev/null
+++ b/aerc/.config/aerc/aerc.conf
@@ -0,0 +1,44 @@
+#
+# aerc main configuration
+
+[ui]
+mouse-enabled=true
+new-message-bell=true
+
+[viewer]
+#
+# Specifies the pager to use when displaying emails. Note that some filters
+# may add ANSI codes to add color to rendered emails, so you may want to use a
+# pager which supports ANSI codes.
+#
+# Default: less -R
+pager=less -R
+
+[filters]
+#
+# Filters allow you to pipe an email body through a shell command to render
+# certain emails differently, e.g. highlighting them with ANSI escape codes.
+#
+# The first filter which matches the email's mimetype will be used, so order
+# them from most to least specific.
+#
+# You can also match on non-mimetypes, by prefixing with the header to match
+# against (non-case-sensitive) and a comma, e.g. subject,text will match a
+# subject which contains "text". Use header,~regex to match against a regex.
+# subject,~^\[PATCH=colordiff
+text/plain=sed 's/^>\+.*/\x1b[36m&\x1b[0m/'
+text/plain=awk -f ~/.config/aerc/filters/colorize
+text/html=pandoc -f html -t plain
+# image/*=catimg -w $(tput cols) -
+
+[triggers]
+new-email=exec notify-send "New email from %n" "%s"
+
+[compose::review]
+<C-r> = :choose \
+ -o a approved "header X-Sourcehut-Patchset-Update APPROVED" \
+ -o R Rejected "header X-Sourcehut-Patchset-Update REJECTED" \
+ -o r needs-revision "header X-Sourcehut-Patchset-Update NEEDS_REVISION" \
+ -o s superseded "header X-Sourcehut-Patchset-Update SUPERSEDED" \
+ -o A Applied "header X-Sourcehut-Patchset-Update APPLIED" \
+ <Enter>
diff --git a/aerc/.config/aerc/binds.conf b/aerc/.config/aerc/binds.conf
new file mode 100644
index 0000000..99464ac
--- /dev/null
+++ b/aerc/.config/aerc/binds.conf
@@ -0,0 +1,123 @@
+# Binds are of the form <key sequence> = <command to run>
+# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>"
+# If you wish to bind #, you can wrap the key sequence in quotes: "#" = quit
+<C-p> = :prev-tab<Enter>
+<C-n> = :next-tab<Enter>
+<C-t> = :term<Enter>
+
+[messages]
+q = :quit<Enter>
+
+j = :next<Enter>
+<Down> = :next<Enter>
+<C-d> = :next 50%<Enter>
+<C-f> = :next 100%<Enter>
+<PgDn> = :next 100%<Enter>
+
+k = :prev<Enter>
+<Up> = :prev<Enter>
+<C-u> = :prev 50%<Enter>
+<C-b> = :prev 100%<Enter>
+<PgUp> = :prev 100%<Enter>
+
+g = :select 0<Enter>
+G = :select -1<Enter>
+
+J = :next-folder<Enter>
+K = :prev-folder<Enter>
+H = :collapse-folder<Enter>
+L = :expand-folder<Enter>
+
+v = :mark -t<Enter>
+V = :mark -v<Enter>
+
+T = :toggle-threads<Enter>
+
+<Enter> = :view<Enter>
+d = :prompt 'Really delete this message?' 'delete-message'<Enter>
+D = :delete<Enter>
+A = :archive flat<Enter>
+
+C = :compose<Enter>
+
+rr = :reply -a<Enter>
+rq = :reply -aq<Enter>
+Rr = :reply<Enter>
+Rq = :reply -q<Enter>
+
+c = :cf<space>
+$ = :term<space>
+! = :term<space>
+| = :pipe<space>
+
+/ = :search<space>
+\ = :filter<space>
+n = :next-result<Enter>
+N = :prev-result<Enter>
+<Esc> = :clear<Enter>
+
+[view]
+/ = :toggle-key-passthrough<Enter>/
+q = :close<Enter>
+O = :open<Enter>
+S = :save<space>
+| = :pipe<space>
+D = :delete<Enter>
+A = :archive flat<Enter>
+
+f = :forward<Enter>
+rr = :reply -a<Enter>
+rq = :reply -aq<Enter>
+Rr = :reply<Enter>
+Rq = :reply -q<Enter>
+
+H = :toggle-headers<Enter>
+<C-k> = :prev-part<Enter>
+<C-j> = :next-part<Enter>
+J = :next<Enter>
+K = :prev<Enter>
+
+[view::passthrough]
+$noinherit = true
+$ex = <C-x>
+<Esc> = :toggle-key-passthrough<Enter>
+
+[compose]
+# Keybindings used when the embedded terminal is not selected in the compose
+# view
+$ex = <C-x>
+<C-k> = :prev-field<Enter>
+<C-j> = :next-field<Enter>
+<tab> = :next-field<Enter>
+
+[compose::editor]
+# Keybindings used when the embedded terminal is selected in the compose view
+$noinherit = true
+$ex = <C-x>
+<C-k> = :prev-field<Enter>
+<C-j> = :next-field<Enter>
+<C-p> = :prev-tab<Enter>
+<C-n> = :next-tab<Enter>
+
+[compose::review]
+y = :send<Enter>
+n = :abort<Enter>
+p = :postpone<Enter>
+q = :choose -o d discard abort -o p postpone postpone<Enter>
+e = :edit<Enter>
+a = :attach<space>
+d = :detach<space>
+<C-r> = :choose \
+ -o a approved "header X-Sourcehut-Patchset-Update APPROVED" \
+ -o R Rejected "header X-Sourcehut-Patchset-Update REJECTED" \
+ -o r needs-revision "header X-Sourcehut-Patchset-Update NEEDS_REVISION" \
+ -o s superseded "header X-Sourcehut-Patchset-Update SUPERSEDED" \
+ -o A Applied "header X-Sourcehut-Patchset-Update APPLIED" \
+ <Enter>
+
+[terminal]
+$noinherit = true
+$ex = <C-x>
+
+<C-p> = :prev-tab<Enter>
+<C-n> = :next-tab<Enter>
diff --git a/aerc/.config/aerc/filters/colorize b/aerc/.config/aerc/filters/colorize
new file mode 100755
index 0000000..381e24a
--- /dev/null
+++ b/aerc/.config/aerc/filters/colorize
@@ -0,0 +1,143 @@
+#!/usr/bin/awk -f
+# Copyright (c) 2022 Robin Jarry
+
+BEGIN {
+
+ url = "\033[38;5;166m" # orange
+ header = "\033[38;5;132m" # purple
+ signature = "\033[38;5;132m" # purple
+ diff_meta = "\033[1;38;5;239m" # bold white
+ diff_chunk = "\033[38;5;109m" # cyan
+ diff_add = "\033[38;5;106m" # green
+ diff_del = "\033[38;5;124m" # red
+ quote_1 = "\033[38;5;66m" # blue
+ quote_2 = "\033[38;5;172m" # yellow
+ quote_3 = "\033[38;5;132m" # purple
+ quote_4 = "\033[38;5;88m" # pink
+ quote_x = "\033[38;5;245m" # gray
+ reset = "\033[0m"
+
+ # state
+ in_diff = 0
+ in_signature = 0
+ in_headers = 0
+ in_body = 0
+ # patterns
+ header_pattern = @/^[A-Z][[:alnum:]-]+:/
+ url_pattern = @/[a-z]{2,6}:\/\/[[:graph:]]+|(mailto:)?[[:alnum:]_\+\.~\/-]*[[:alnum:]_]@[[:lower:]][[:alnum:]\.-]*[[:lower:]]/
+}
+function color_quote(line) {
+ level = 0
+ quotes = ""
+ while (line ~ /^>/) {
+ level += 1
+ quotes = quotes ">"
+ line = substr(line, 2)
+ while (line ~ /^ /) {
+ quotes = quotes " "
+ line = substr(line, 2)
+ }
+ }
+ if (level == 1) {
+ color = quote_1
+ } else if (level == 2) {
+ color = quote_2
+ } else if (level == 3) {
+ color = quote_3
+ } else if (level == 4) {
+ color = quote_4
+ } else {
+ color = quote_x
+ }
+ if (line ~ /^\+/) {
+ return color quotes diff_add line reset
+ } else if (line ~ /^-/) {
+ return color quotes diff_del line reset
+ }
+ gsub(url_pattern, url "&" color, line)
+ return color quotes line reset
+}
+{
+ # Strip carriage returns from line
+ sub(/\r$/, "")
+
+ if (in_diff) {
+ if ($0 ~ /^-- ?$/) {
+ in_signature = 1
+ in_diff = 0
+ in_headers = 0
+ in_body = 0
+ $0 = signature $0 reset
+ } else if ($0 ~ /^@@ /) {
+ $0 = diff_chunk $0 reset
+ } else if ($0 ~ /^(diff --git|index|---|\+\+\+) /) {
+ $0 = diff_meta $0 reset
+ } else if ($0 ~ /^\+/) {
+ $0 = diff_add $0 reset
+ } else if ($0 ~ /^-/) {
+ $0 = diff_del $0 reset
+ }
+ } else if (in_signature) {
+ gsub(url_pattern, url "&" signature)
+ $0 = signature $0 reset
+ } else if (in_headers) {
+ if ($0 ~ /^$/) {
+ in_signature = 0
+ in_diff = 0
+ in_headers = 0
+ in_body = 1
+ } else {
+ sub(header_pattern, header "&" reset)
+ gsub(url_pattern, url "&" reset)
+ }
+ } else if (in_body) {
+ if ($0 ~ /^>/) {
+ $0 = color_quote($0)
+ } else if ($0 ~ /^diff --git /) {
+ in_signature = 0
+ in_diff = 1
+ in_headers = 0
+ in_body = 0
+ $0 = diff_meta $0 reset
+ } else if ($0 ~ /^-- ?$/) {
+ in_signature = 1
+ in_diff = 0
+ in_headers = 0
+ in_body = 0
+ $0 = signature $0 reset
+ } else {
+ gsub(url_pattern, url "&" reset)
+ }
+ } else if ($0 ~ /^diff --git /) {
+ in_signature = 0
+ in_diff = 1
+ in_headers = 0
+ in_body = 0
+ $0 = diff_meta $0 reset
+ } else if ($0 ~ /^-- ?$/) {
+ in_signature = 1
+ in_diff = 0
+ in_headers = 0
+ in_body = 0
+ $0 = signature $0 reset
+ } else if ($0 ~ header_pattern) {
+ in_signature = 0
+ in_diff = 0
+ in_headers = 1
+ in_body = 0
+ sub(header_pattern, header "&" reset)
+ gsub(url_pattern, url "&" reset)
+ } else {
+ in_signature = 0
+ in_diff = 0
+ in_headers = 0
+ in_body = 1
+ if ($0 ~ /^>/) {
+ $0 = color_quote($0)
+ } else {
+ gsub(url_pattern, url "&" reset)
+ }
+ }
+
+ print
+}