[[!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:
```