Rewrite Python filters in awk
This commit is contained in:
parent
0647ea6483
commit
6e61f58d86
5 changed files with 54 additions and 59 deletions
|
@ -69,7 +69,7 @@ editor=
|
||||||
# You can also match on non-mimetypes, by prefixing with the header to match
|
# 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
|
# 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 which contains "text". Use header,~regex to match against a regex.
|
||||||
subject,~^\[PATCH=@SHAREDIR@/filters/hldiff.py
|
subject,~^\[PATCH=@SHAREDIR@/filters/hldiff
|
||||||
text/*=@SHAREDIR@/filters/plaintext.py
|
text/*=@SHAREDIR@/filters/plaintext
|
||||||
#text/html=@SHAREDIR@/filters/html
|
#text/html=@SHAREDIR@/filters/html
|
||||||
#image/*=catimg -w $(tput cols) -
|
#image/*=catimg -w $(tput cols) -
|
||||||
|
|
39
contrib/hldiff
Executable file
39
contrib/hldiff
Executable file
|
@ -0,0 +1,39 @@
|
||||||
|
#!/bin/awk -f
|
||||||
|
BEGIN {
|
||||||
|
bright = "\x1B[1m"
|
||||||
|
red = "\x1B[31m"
|
||||||
|
green = "\x1B[32m"
|
||||||
|
cyan = "\x1B[36m"
|
||||||
|
reset = "\x1B[0m"
|
||||||
|
|
||||||
|
hit_diff = 0
|
||||||
|
}
|
||||||
|
{
|
||||||
|
if (hit_diff == 0) {
|
||||||
|
if ($0 ~ /^diff /) {
|
||||||
|
hit_diff = 1;
|
||||||
|
print bright $0 reset
|
||||||
|
} else if ($0 ~ /^ .*\|.*(\+|-)/) {
|
||||||
|
left = substr($0, 0, index($0, "|")-1)
|
||||||
|
right = substr($0, index($0, "|"))
|
||||||
|
gsub(/-+/, red "&" reset, right)
|
||||||
|
gsub(/\++/, green "&" reset, right)
|
||||||
|
print left right
|
||||||
|
} else {
|
||||||
|
print $0
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ($0 ~ /^-/) {
|
||||||
|
print red $0 reset
|
||||||
|
} else if ($0 ~ /^+/) {
|
||||||
|
print green $0 reset
|
||||||
|
} else if ($0 ~ /^ /) {
|
||||||
|
print $0
|
||||||
|
} else if ($0 ~ /^@@ (-[0-9]+,[0-9]+ \+[0-9]+,[0-9]+) @@.*/) {
|
||||||
|
sub(/^@@ (-[0-9]+,[0-9]+ \+[0-9]+,[0-9]+) @@/, cyan "&" reset)
|
||||||
|
print $0
|
||||||
|
} else {
|
||||||
|
print bright $0 reset
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,37 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
from colorama import Fore, Style
|
|
||||||
import sys
|
|
||||||
import re
|
|
||||||
|
|
||||||
stat_re = re.compile(r'(| \d+ )(\+*)(\-*)')
|
|
||||||
lines_re = re.compile(r'@@ (-\d+,\d+ \+\d+,\d+) @@')
|
|
||||||
|
|
||||||
sys.stdin.reconfigure(encoding='utf-8', errors='ignore')
|
|
||||||
patch = sys.stdin.read().replace("\r\n", "\n")
|
|
||||||
|
|
||||||
hit_diff = False
|
|
||||||
for line in patch.split("\n"):
|
|
||||||
if line.startswith("diff "):
|
|
||||||
hit_diff = True
|
|
||||||
print(f"{Style.BRIGHT}{line}{Style.RESET_ALL}")
|
|
||||||
continue
|
|
||||||
if hit_diff:
|
|
||||||
if line.startswith("-"):
|
|
||||||
print(f"{Fore.RED}{line}{Style.RESET_ALL}")
|
|
||||||
elif line.startswith("+"):
|
|
||||||
print(f"{Fore.GREEN}{line}{Style.RESET_ALL}")
|
|
||||||
elif line.startswith(" "):
|
|
||||||
print(line)
|
|
||||||
else:
|
|
||||||
if line.startswith("@@"):
|
|
||||||
line = lines_re.sub(f"{Fore.CYAN}@@ \\1 @@{Style.RESET_ALL}",
|
|
||||||
line)
|
|
||||||
print(line)
|
|
||||||
else:
|
|
||||||
print(f"{Style.BRIGHT}{line}{Style.RESET_ALL}")
|
|
||||||
else:
|
|
||||||
if line.startswith(" ") and "|" in line and ("+" in line or "-" in line):
|
|
||||||
line = stat_re.sub(
|
|
||||||
f'\\1{Fore.GREEN}\\2{Fore.RED}\\3{Style.RESET_ALL}',
|
|
||||||
line)
|
|
||||||
print(line)
|
|
13
contrib/plaintext
Executable file
13
contrib/plaintext
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/awk -f
|
||||||
|
BEGIN {
|
||||||
|
dim = "\x1B[2m"
|
||||||
|
cyan = "\x1B[36m"
|
||||||
|
reset = "\x1B[0m"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
if ($0 ~ /On .*, .* wrote:/ || $0 ~ />+/) {
|
||||||
|
print dim cyan $0 reset
|
||||||
|
} else {
|
||||||
|
print $0
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,20 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
from colorama import Fore, Style
|
|
||||||
import sys
|
|
||||||
import re
|
|
||||||
|
|
||||||
# TODO: Wrap text to terminal width?
|
|
||||||
|
|
||||||
# TODO: I guess this might vary from MUA to MUA. I've definitely seen localized
|
|
||||||
# versions in the wild
|
|
||||||
quote_prefix_re = re.compile(r"On .*, .* wrote:")
|
|
||||||
quote_re = re.compile(r">+")
|
|
||||||
|
|
||||||
sys.stdin.reconfigure(encoding='utf-8', errors='ignore')
|
|
||||||
mail = sys.stdin.read().replace("\r\n", "\n")
|
|
||||||
|
|
||||||
for line in mail.split("\n"):
|
|
||||||
if quote_re.match(line) or quote_prefix_re.match(line):
|
|
||||||
print(f"{Style.DIM}{Fore.CYAN}{line}{Style.RESET_ALL}")
|
|
||||||
else:
|
|
||||||
print(line)
|
|
Loading…
Reference in a new issue