logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

mpick — advanced message filter

Authors

       Leah Neukirchen <leah@vuxu.org>
       Duncan Overbruck <mail@duncano.de>

Description

mpick prints all matching messages.

       If  used interactively, mpick will default to the current sequence.  Otherwise, mpick will read filenames
       from the standard input.

       The options are as follows:

       -Ffile
               Read expression from file and only show matching messages, see “TESTS”.  file,

       -T      Include whole thread.

       -ttest
               Only show messages matching the expression test, see “TESTS”.

       -v      Print how many messages were tested and picked to standard error.

Examples

       You can pick mails to move them into another maildir.

             mv$(mlist./INBOX | mpick-t'from=~"@github"')./github/cur

       Or you can use mpick to pick mails from the current sequence.

             mpick-t'subject=~~"mblaze"' | mscan

       A more advanced mpick expression to pick mails in a certain time span, which are flagged  as  replied  or
       not seen.

             mpick -t 'date >= "2016-01-01" && date < "2017-01-01" && (replied || !seen)'

       And to find other mblaze users.

             mpick-t'"User-Agent"=~~"mblaze"' | mscan

Exit Status

       The mpick utility exits 0 on success, and >0 if an error occurs.

License

mpick is in the public domain.

       To  the  extent  possible  under  law,  the  creator of this work has waived all copyright and related or
       neighboring rights to this work.

       http://creativecommons.org/publicdomain/zero/1.0/

Debian                                            July 30, 2020                                         MPICK(1)

Name

       mpick — advanced message filter

See Also

lr(1), mailx(1)

Synopsis

mpick [-Ffile] [-T] [-v] [-ttest] [msgs...]

Tests

mpick tests are given by the following EBNF:

       <expr>     ::= <expr> ? <expr> : <expr>  -- ternary operator
                    | <expr> || <expr>  -- disjunction
                    | <expr> && <expr>  -- conjunction
                    | ! <expr>          -- negation
                    | ( <expr> )
                    | <expr> "|"  <str> -- pipe current mail to command
                    | <expr> ">>" <str> -- append current mail to file
                    | <expr> ">"  <str> -- write current mail to file
                    | <flagprop>
                    | <timeprop> <numop> <dur>
                    | <numprop> <numop> <num>
                    | <hdrprop> <decodeop> <strop> <str>
                    | <strprop> <strop> <str>
                    | prune             -- do not match further messages in thread
                    | print             -- always true value
                    | skip              -- always false value
                    | <let>
                    | <ident>

       <flagprop> ::= child | draft | flagged | info | new | parent | passed
                    | replied  | seen | selected | trashed

       <timeprop> ::= atime | ctime | mtime | date

       <numprop>  ::= depth | kept | replies | index | size | total

       <numop>    ::= <= | < | >= | > | == | = | !=

       <dur>      ::= "./path"          -- mtime of relative path
                    | "/path"           -- mtime of absolute path
                    | "YYYY-MM-DD HH:MM:SS"
                    | "YYYY-MM-DD"      -- at midnight
                    | "HH:MM:SS"        -- today
                    | "HH:MM"           -- today
                    | "-[0-9]+d"        -- n days ago at midnight
                    | "-[0-9]+h"        -- n hours before now
                    | "-[0-9]+m"        -- n minutes before now
                    | "-[0-9]+s"        -- n seconds before now
                    | [0-9]+            -- absolute epoch time

       <num>      ::= [0-9]+ ( c        -- *1
                             | b        -- *512
                             | k        -- *1024
                             | M        -- *1024*1024
                             | G        -- *1024*1024*1024
                             | T )?     -- *1024*1024*1024*1024
                    | cur               -- index of cur message

       <hdrprop>  ::= from | to | subject | <str>

       <decodeop> ::= . addr          -- match address parts
                    | . disp          -- match address display parts
                    |                 -- empty matches raw headers

       <strprop>  ::= path

       <strop>    ::= == | = | !=       -- string (in)equality
                    | ===    | !===     -- case insensitive string (in)equality
                    | ~~     | !~~      -- glob (fnmatch)
                    | ~~~    | !~~~     -- case insensitive glob (fnmatch)
                    | =~     | !=~ | !~ -- POSIX Extended Regular Expressions
                    | =~~    | !=~~     -- case insensitive POSIX Extended Regular Expressions

       <str>      ::= " ([^"] | "")+ "  -- use "" for a single " inside "
                    | $[A-Za-z0-9_]+    -- environment variable

       -- let expressions evaluate the expression following the `in` keyword,
       -- the bindings are lazily evaluated.
       <let>      ::= { let <ident> = <scope> } in <scope>

       -- Inside the scope previously defined idents are replaced with expressions
       <scope>    ::= <expr>

       <ident>    ::= [A-Za-z_][A-Za-z0-9_]+

See Also