1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#!/usr/bin/env bash
# Sync mail with mbsync and index new messages with notmuch,
# showing progress via a dialog gauge.
DIALOGRC=$(mktemp)
NOTMUCH_LOG=$(mktemp)
TITLE="[ SYNCING MAIL]"
export DIALOGRC
trap 'rm -f "$DIALOGRC" "$NOTMUCH_LOG"' EXIT # Clean up everything on exit
cat << 'EOF' > "$DIALOGRC"
use_shadow = ON
use_colors = ON
screen_color = (WHITE,BLACK,OFF)
dialog_color = (WHITE,BLACK,ON)
title_color = (YELLOW,BLACK,ON)
gauge_color = (GREEN,BLACK,ON)
border_color = (CYAN,BLACK,ON)
border2_color = (BLUE,BLACK,ON)
shadow_color = (BLACK,BLACK,ON)
# Active buttons: magenta emphasis, matching Base16 base0E
button_active_color = (MAGENTA,BLACK,ON)
button_key_active_color = (MAGENTA,BLACK,ON)
button_label_active_color = (MAGENTA,BLACK,ON)
# Inactive buttons: cyan secondary emphasis, matching Base16 base0C
button_inactive_color = (CYAN,BLACK,OFF)
button_key_inactive_color = (CYAN,BLACK,OFF)
button_label_inactive_color = (CYAN,BLACK,OFF)
EOF
# Run the sync and indexing progress bar
(
# mbsync phase
script -q -e -c "mbsync -a" /dev/null | awk -v RS='\r' '
{
c_str = ""
b_str = ""
for(i=1; i<=NF; i++) {
if ($i == "C:") c_str = $(i+1)
if ($i == "B:") b_str = $(i+1)
}
if (b_str != "") {
split(b_str, arr, "/")
if (arr[2] > 0) {
percent = int((arr[1] / arr[2]) * 100)
printf "XXX\n%d\nSyncing | Channel: %s | Mailbox: %s\nXXX\n", percent, c_str, b_str
}
}
fflush()
}'
# notmuch phase
printf "XXX\n100\nIndexing new mail with notmuch...\nXXX\n"
notmuch new > "$NOTMUCH_LOG" 2>&1
) | dialog --title "$TITLE" --gauge "Initializing..." 8 80 0
# Format the captured notmuch output into a single clean line
CLEAN_OUT=$(tr '\n' ' ' < "$NOTMUCH_LOG" | sed 's/ */ /g')
# Display final results and wait for user input
dialog --title "$TITLE" --msgbox "Done!\n$CLEAN_OUT" 8 80
clear
|