summaryrefslogblamecommitdiffstats
path: root/2019/talks/10.md
blob: b48bf9a12553f5fab2a1c8bb04704205a2f5a3a9 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13












                                                                                                                 
      
















































































































































































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