summaryrefslogtreecommitdiffstats
path: root/2019/talks/10.md
blob: b48bf9a12553f5fab2a1c8bb04704205a2f5a3a9 (plain) (blame)
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

```org
#+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:
```