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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
[[!meta title="notmuch new(s) - David Bremner"]]
[[!meta copyright="Copyright © 2019 David Bremner"]]
[[!template id=vid
src="https://mirror.csclub.uwaterloo.ca/emacsconf/2019/emacsconf-2019-10-notmuch-news--bremner.webm"
type="video/webm"]]
### Download
- [Video](https://mirror.csclub.uwaterloo.ca/emacsconf/2019/emacsconf-2019-10-notmuch-news--bremner.webm) (1080p)
### Notes
```
#+TITLE: Notmuch New(s)
#+AUTHOR: David Bremner
#+PROPERTY: header-args:sh :results output :session demo :output session
* What is notmuch?
** A tool(kit) for indexing and searching mail
#+begin_src dot :file ecosystem.pdf
digraph ecosystem {
size = "4,3"
margin=0
graph [fontsize=20]
node [fontsize=20]
edge [fontsize=20]
gmime
xapian
notmuch_cli [shape=record,style=filled, color=yellow,label="notmuch CLI"]
libnotmuch [style=filled,color=gold]
subgraph cluster_clients {
style=filled;
color=cadetblue3;
label="Mail user agents";
node [shape=record, style=filled, color=white];
notmuch_emacs [label="notmuch-emacs",color=yellow]
alot
bower
astroid
notmuch_web [label="notmuch-web"]
noservice
neomutt
notmuch_vim [label="notmuch-vim", color=lightyellow]
notmuch_mutt [label="notmuch-mutt", color=lightyellow]
}
subgraph cluster_tools {
style=filled;
color=darkolivegreen2;
label="tools";
node [shape=record, style=filled, color=white];
afew
nmbug [color=yellow]
notmuch_report [label="notmuch-report"] [color=yellow]
}
subgraph cluster_bindings {
label="Bindings"
style=filled;
color=lightyellow;
node [shape=record, style=filled, color=white];
ruby_notmuch [label="ruby", color=yellow]
python_notmuch [label="python", color=yellow]
notmuch_go [label="go"]
notmuch_rust [label="rust"]
}
neomutt -> libnotmuch
astroid -> libnotmuch
alot->python_notmuch
notmuch_emacs->notmuch_cli
notmuch_mutt->notmuch_cli
notmuch_vim->ruby_notmuch
bower -> notmuch_cli
noservice->notmuch_cli
nmbug->notmuch_cli
notmuch_report-> python_notmuch
python_notmuch->libnotmuch
ruby_notmuch->libnotmuch
notmuch_go ->libnotmuch
notmuch_rust ->libnotmuch
notmuch_web->notmuch_cli
notmuch_cli->libnotmuch
afew->python_notmuch
libnotmuch->xapian
libnotmuch->gmime
{
edge [style="invisible",arrowhead="none"]
notmuch_emacs->astroid
notmuch_emacs->neomutt
notmuch_emacs->notmuch_vim
notmuch_emacs->alot
notmuch_emacs->bower
bower->notmuch_vim
bower->astroid
notmuch_web->noservice
}
}
#+end_src
** Emacs interface(s) to notmuch
(notmuch-search "from:floris subject:cffi")
(notmuch-tree "from:floris subject:cffi")
#+RESULTS:
* What is new?
** Search Improvements
*** separate message body indexing
(notmuch-search "body:emacsconf and not subject:emacsconf")
*** user defined headers, e.g. =List-Id=
#+begin_src sh
notmuch config set header.List List-Id
notmuch reindex date:1month..
#+end_src
(notmuch-search "List:notmuch date:1month..")
** Cryptography Support
- (optional) indexing cleartext of encrypted e-mails
- (optional) caching of session keys
#+begin_example
┌───────────────┬───────┬──────┬─────────┬──────┐
│ │ false │ auto │ nostash │ true │
├───────────────┼───────┼──────┼─────────┼──────┤
│Index cleart‐ │ │ X │ X │ X │
│ext using │ │ │ │ │
│stashed ses‐ │ │ │ │ │
│sion keys │ │ │ │ │
├───────────────┼───────┼──────┼─────────┼──────┤
│Index cleart‐ │ │ │ X │ X │
│ext using se‐ │ │ │ │ │
│cret keys │ │ │ │ │
├───────────────┼───────┼──────┼─────────┼──────┤
│Stash session │ │ │ │ X │
│keys │ │ │ │ │
├───────────────┼───────┼──────┼─────────┼──────┤
│Delete stashed │ X │ │ │ │
│session keys │ │ │ │ │
│on reindex │ │ │ │ │
└───────────────┴───────┴──────┴─────────┴──────┘
#+end_example
- indexing, searching, rendering /protected Subjects/
- sent by Enigmail and K-9 mail
** Support for gzipped mail files
(notmuch-show "id:1319286098.13821.57.camel@pc-jirka")
#+begin_src sh
bigfile=$(notmuch search --output=files id:1319286098.13821.57.camel@pc-jirka)
ls -lh ${bigfile}
gzip -9 ${bigfile}
notmuch new
#+end_src
#+begin_src sh
gunzip ${bigfile}
notmuch new
#+end_src
* What is next?
** notmuch-emacs improvements
- better docs?
- more asynch things
- convenience features, e.g. jump to parent messages
** Updating python bindings
- based on CFFI
- more /Pythonic/
- less broken with Python >= 3.6
** Protected Headers Support
- authoring protected headers
* Cleanup this buffer
#+begin_src elisp
(org-babel-remove-result-one-or-many 't)
#+end_src
* Configuration
# Local Variables:
# org-confirm-babel-evaluate: nil
# End:
```
|