Commit Graph

316 Commits (0882dbbad025f9f4f072f8a30564f417b37aa935)

Author SHA1 Message Date
Manos Pitsidianakis b946b61cf1
terminal/cells.rs: remove unused variables 4 years ago
Manos Pitsidianakis eca1921a8a
collection: add update_flags() method
On NewFlags events, the threads in Collection were not being updated, so
if an envelope's seen status was toggled the thread's unseen count was
  not updated, and thus not reflected in the UI even though the
  envelope's new flags event was registered properly.
4 years ago
Manos Pitsidianakis a6a30f3adb
conf/accounts.rs return Result on init() 4 years ago
Manos Pitsidianakis 688a798fa2
XDGNotifications: increase rate limiting
3 notifications evenly spread per second did not make any sense.
Increase it to 1000 and see if it's ok
4 years ago
Manos Pitsidianakis 6bdd9b07bb
bin: remove unwrap from timer thread 4 years ago
Manos Pitsidianakis ca11c8e474
Remove useless debug prints 4 years ago
Manos Pitsidianakis 9fb86ab2f2
components: create layouts module in utilities 4 years ago
Manos Pitsidianakis 0169025d50
build.rs: add proc-macro to generate Override structs for configuration 4 years ago
Manos Pitsidianakis 02c881ac00
Add save-attachment option for entire message as eml 4 years ago
Manos Pitsidianakis d7e4bd9379
conf: set default override value to None 4 years ago
Manos Pitsidianakis cecd33eb5e
SVGScreenshotFilter: make svg smaller and fix grapheme cluster textLength inaccuracies 4 years ago
Manos Pitsidianakis 58ddfae9a7
execute.rs: fix missing space parsers 4 years ago
Manos Pitsidianakis fe655e679c
Fix rustfmt suggestions 4 years ago
Manos Pitsidianakis 0618e62ab6
Add optional feature to save SVG screenshot 4 years ago
Manos Pitsidianakis bc0189ffa1
Spawn workers on demand 4 years ago
Manos Pitsidianakis 55948dd7c2
Use BTreeSet instead of HashSet in copy_area()
I kind of forgot about BTreeSets, and kept a separate HashSet and sorted
index of the set's keys.
4 years ago
Manos Pitsidianakis e97cf98b3b
Add `view` subcommand
Add subcommand to view standalone e-mail files in meli's pager without
instantiating any accounts.
4 years ago
Manos Pitsidianakis 7dc8a87a62
Prevent sub overflow in EnvelopeView 4 years ago
Manos Pitsidianakis 05c6c19889
src/conf.rs: Remove debug! prints 4 years ago
Manos Pitsidianakis 9f30cd6bbc
state.rs: send AccountStatusChange 4 years ago
Manos Pitsidianakis 1241b6073f
Clear tags before applying new ones in NewFlags 4 years ago
Manos Pitsidianakis ca9d4fde58
Discard EnvelopeRename event if envelope is missing from Collection 4 years ago
Manos Pitsidianakis f3d5edfe14
Add copy/move to other account operations 4 years ago
Manos Pitsidianakis c07185a3aa
regexp: add priority field to regular expressions 4 years ago
Manos Pitsidianakis 465c78e903
Add Cell::keep_attrs() method 4 years ago
Manos Pitsidianakis 4bc8ff2ce9
Use structopt for command line parsing 4 years ago
Manos Pitsidianakis a17f0b4fd4
listing: rework MailListingTrait
split redraw_list() to redraw_threads_list() and redraw_envelope_list()
4 years ago
Manos Pitsidianakis 9edef4ecd2
ui: add attachment_tree() func in MailView
Split ascii attachment tree generation into a function in MailView
4 years ago
Manos Pitsidianakis 6458ccb860
meli: update nom dependency to 5.1.1 4 years ago
Manos Pitsidianakis 6ec249dd7f
melib: update nom dependency from 3.2.0 to 5.1.1
That was hecking exhausting
4 years ago
Manos Pitsidianakis 3e31c46a74
Add "regexp" feature, format text with regexps
`regexp` feature uses the pcre2 library to enable the user to define
regular expressions for matching text and applying text formatting to
the matches. An example from the theme configuration I used to test
this:

  [terminal.themes.win95.text_format_regexps]
  "listing.subject" = { "\\[[^\\]]*\\]" = { attrs = "Bold" } }
  "listing.from" = { "\\<[^\\>]*\\>(?:(?:\\s*$)|(?=,))" = { attrs = "Italics" } }

  [terminal.themes.win95.text_format_regexps."pager.envelope.body"]
  "^>.*$" = { attrs = "Italics" }
  "\\d+\\s?(?:(?:[KkMmTtGg]?[Bb])|(?:[KkMmTtGg][Bb]?)(?=\\s))" = { attrs = "Bold | Underline" }
4 years ago
Manos Pitsidianakis ef0f269fbf
terminal: add FormatTag, text format tags
FormatTag describes a set of attributes, colors that exist in a
tag_table field of CellBuffer. The field of tag_associations contains
the hash of a tag and the {start,end} index of the cells that have this
attribute. A tag can thus be used many times.

An example of use is

    let t = self.pager.insert_tag(FormatTag {
        attrs: Attr::ITALICS,
        ..Default::default()
    });
    debug!("FormatTag hash = {}", t);
    let (width, height) = self.pager.size();
    for i in 0..height {
      if self.pager.content[(0, i)].ch() == '>' {
        self.pager.set_tag(t, (0, i), (width.saturating_sub(1), i));
      }
    }

This will set reply lines in text as italics.

This feature interface is not used anywhere yet.
4 years ago
Manos Pitsidianakis 5366888dff
Add samples/ directory with config and themes 4 years ago
Manos Pitsidianakis de03b106f3
themes: Add support for Color/Attribute aliases
Add aliases to avoid repetition of raw values when defining new themes.
Aliases are strings starting with "$" and must be defined in the
`color_aliases` and `attr_aliases` fields of a theme.
4 years ago
Manos Pitsidianakis eca8a30c3f
themes: Add Theme struct
Wrap HashMap<Cow<'static, str>, ThemeAttributeInner> into a struct, in
order to add more fields in the future.
4 years ago
Manos Pitsidianakis fa96a4e905
themes: add support for optional field theme value links
Theme attribute values can refer to another theme key instead of
defining a value. Add support for optionally defining the theme key's
field by appending a ".fg" or ".bg" suffix to the link's key.
4 years ago
Manos Pitsidianakis 9c0ee76ff4
themes: Rename Theme struct to Themes 4 years ago
Manos Pitsidianakis 049175e743
pager: fix filter invocation and ansi parsing 4 years ago
Manos Pitsidianakis bee1baedb2
themes: add indentation level color keys
Add theme keys for the indentation level colors in ThreadView
4 years ago
Manos Pitsidianakis 6ceed3cae9
sqlite3: move module to melib 4 years ago
Manos Pitsidianakis 960d660786
Add #[ignore] to test_parser() 4 years ago
Manos Pitsidianakis 9703b39a40
Add execute command parser to improve suggestions
Add grammar for execute commands and parser to identify possible next
tokens for the user's execute command input.

The grammar is given as a sequence of Tokens in each command's
definition. The parser parses the user's input according to this
grammar, and returns the tokens that could come next, if any.
4 years ago
Manos Pitsidianakis fad8820868
Make serde default for manual_refresh = false 4 years ago
Manos Pitsidianakis 12feca9c97
terminal/ansi: add attribute support
Add attribute escape sequence support in terminal::ansi, which handles
converting strings with ansi escape sequences into meli's internal
terminal structures in order to incorporate them into the UI.
4 years ago
Manos Pitsidianakis e4a1ab8a09
Fix rustfmt suggestions 4 years ago
Manos Pitsidianakis b8261ee36a
Overhaul input thread
Remove raw/non raw distinction.

Use a pipe for input thread commands and poll stdin/pipe for events
4 years ago
Manos Pitsidianakis 839c1b1eb5
bin.rs: remove useless #[macro_use] 4 years ago
Manos Pitsidianakis bd404e6937
Execute user shell commands with /bin/sh
Execute user provided command invocations $CMD such as `editor_cmd` with
`/bin/sh` as `/bin/sh -c "$CMD"

Previously, user commands were split by whitespace which must trigger
erroneous behavior if quotes are involved.
4 years ago
Manos Pitsidianakis bfff0e4feb
conf: add options for logging
Add options for log file location and maximum log level. Also add
manpage entries for these options in `meli.conf.5`
4 years ago
Manos Pitsidianakis 608ef9a946
conf: warn on invalid mailbox name conf 4 years ago
Manos Pitsidianakis ab30733ce7
SegmentTree: add update() method 4 years ago
Manos Pitsidianakis c2980f5dcf
RateLimit: add test 4 years ago
Manos Pitsidianakis 3573423169
PosixTimer: rearm timer only when calling rearm() 4 years ago
Manos Pitsidianakis 1717aa7845
bin: use self-pipe in signal handler
send_timeout() isn't signal safe, and might block.
4 years ago
Manos Pitsidianakis 7990b71c19
StatusBar: recognize readline shortcuts in Execute mode 4 years ago
Manos Pitsidianakis 295577f9d7
Fix invalid theme keys in ThreadListing 4 years ago
Manos Pitsidianakis a86c1cbb26
listing: redraw on EnvelopeUpdate events 4 years ago
Manos Pitsidianakis c5fe511d95
notmuch: don't remove tags from tag_index
When removing a tag, we shouldn't also remove it from the tag index.
4 years ago
Manos Pitsidianakis a6af7fc0d3
listing.rs: don't create unnecessary operation 4 years ago
Manos Pitsidianakis 8648b229ad
Add AccountHash to RefreshEvent
Different accounts might have same inboxes with same MailboxHashes. Use
the hash of the account's name to differentiate.
4 years ago
Manos Pitsidianakis eb701695f7
Remove fnv crate 4 years ago
Manos Pitsidianakis 3ea1ce5454
errors: add `source` field to MeliError 4 years ago
Manos Pitsidianakis d405aa9797
Show last worker thread heartbeat on status page 4 years ago
Manos Pitsidianakis c8391983ee
Refactor OfflineListing
Move offline status drawing to OfflineListing
4 years ago
Manos Pitsidianakis d580b25415
themes: overwrite only explicit key attributes
If user config file overwrites a single attribute and not the others,
for example only bg:

  "mail.listing.tag_default" = { bg = "Blue" }

The other attributes, in this case fg and attrs revert to the default
values of ThemeAttributeInner and not the default value for the key
"mail.listing.tag_default". As a result the above expands to:

  "mail.listing.tag_default" = { fg = Color::Default, bg = "Blue", attrs
  = Attr::Default }

This commit keeps the key value defaults, so the above should expand to:

  "mail.listing.tag_default" = { fg = default_theme["mail.listing.tag_default"].fg, bg = "Blue", attrs
  = default_theme["mail.listing.tag_default"].attrs }
5 years ago
Manos Pitsidianakis 18dcf15e1e
Add open_mailbox shortcut for sidebar 5 years ago
Manos Pitsidianakis d8135674df
themes: add {even,odd}_unseen, {even,odd}_selected, {even,odd}_highlighted
Suggested in #21
5 years ago
Manos Pitsidianakis e633434b93
themes: Fix invalid attribute links panic in is_cyclic
Attribute links are not checked for validity in theme validation, and an
invalid link would cause a panic in is_cyclic.

This commit improves the theme validation errors by printing if the
error lies in a theme key or a link.
5 years ago
Manos Pitsidianakis 4930d1b46c
Add Italics, Blink, Dim and Hidden text attributes
Text attributes have been rewritten as bit flags, so for example instead of
"BoldUnderline" you'd have to define "Bold | Underline" in your theme
settings.

Requested in #21
5 years ago
Manos Pitsidianakis e9a935dbf7
melib: add search method in mail backends 5 years ago
Manos Pitsidianakis 3d7b9ff7cb
Move Query to melib 5 years ago
Manos Pitsidianakis fd60be482f
Open sidebar for mailbox navigation with Left/Right arrow keys
Left/Right arrow keys change focus between the sidebar and mailbox
listing. If focused on sidebar, move arrow keys to select mailbox and
open with 'Enter'. Press Right arrow key to return to mailbox listing.

- Mailbox focused:
  +--+-------------+
  |~ |=============|
  |~ |=============|
  |  |=============|
  |~ |=============|
  |~ |=============|
  +--+-------------+
- Press `Left` arrow key
- Menu focused:
  +--------+-------+
  |~~~~    |=======|
  |~~      |=======|
  |        |=======|
  |~~~     |=======|
  |~~~~    |=======|
  +--------+-------+
- Press `Right` arrow key to return
5 years ago
Manos Pitsidianakis 840005022c
themes: add default tag theme attribute
The theme attribute key is "mail.listing.tag_default"
5 years ago
Manos Pitsidianakis e034f4dd52
view.rs: fix redrawing errors 5 years ago
Manos Pitsidianakis a3903ea2cb
Show Cc in default headers in mail view 5 years ago
Manos Pitsidianakis 4c32bf450d
Add {un,}subscribe mailbox operations
Concerns #17
5 years ago
Manos Pitsidianakis 9ff54f236b
Add conf_override! macro
conf_override! wraps struct definitions and defines a secondary Override
struct that wraps each field in an Option. The macro mailbox_settings!
is used to select settings from an account & mailbox index. If a user defines an overriding setting, the macro returns the override instead of the immediately next in the hierarchy setting.

The selection is done for a specific field as follows:

  if per-folder override is defined, return per-folder override
    else if per-account override is defined, return per-account override
      else return global setting field value.
5 years ago
Manos Pitsidianakis a8c1016f37
Add various logic checks 5 years ago
Manos Pitsidianakis 1811fb51cb
Fix unused imports/code compiler warnings 5 years ago
Manos Pitsidianakis b7175c2400
Fix compiler error in --no-default-features build 5 years ago
Manos Pitsidianakis 84d7e4c034
Small documentation fixes 5 years ago
Manos Pitsidianakis 31d90e1d87
Add managesieve.rs 5 years ago
Manos Pitsidianakis 651dda67cf
Respect autoload mailbox setting 5 years ago
Manos Pitsidianakis 106dae3334
Add config overrides to mailbox filter
If per-folder config filter is defined, it overrides the app-wide
filter.
5 years ago
Manos Pitsidianakis a3600c0cd2
Add `filter` option in mail list
Filter mail in mail list.

Example:
[listing]
filter = "not flags:seen" # show only unseen messages
5 years ago
Manos Pitsidianakis 9d20fd5576
Save forked processes for reaping 5 years ago
Manos Pitsidianakis 6c76db2063
Add delete, copy actions for envelopes 5 years ago
Manos Pitsidianakis 2a9059f9b4
Add add-attachment from pipe, default_header_values 5 years ago
Manos Pitsidianakis 63467a3c45
Check ComponentId equality on Composer::kill() 5 years ago
Manos Pitsidianakis 63af2a688a
Detect breaks on write_string_to_grid 5 years ago
Manos Pitsidianakis f10cc954e7
Don't dump mail on Account drop 5 years ago
Manos Pitsidianakis a94bb1e27a
Show float notification on refresh cmd 5 years ago
Manos Pitsidianakis 670485e8c7
compose: clear bounds of compose area properly 5 years ago
Manos Pitsidianakis 7b631beb0a
Don't panic in WorkController::drop 5 years ago
Manos Pitsidianakis ca51077f53
imap: Add support for untagged FETCH (FLAG.. messages
IDLE connection can get untagged "* FETCH (FLAGS ({flag_list))" messages
if any client has changed flags. Support this refresh event.
5 years ago
Manos Pitsidianakis 53fa3d03da
Notify embedded terminal on embedded process exit
When an embedded process exits the main process receives a SIGCHLD. The
check on whether the embedded process is alive is done on input, so
forward an input of '\0' to get the embedded terminal to notice its
child is dead.
5 years ago
Manos Pitsidianakis 126b65817e
Forward input on input/rawinput switch
Input thread listens on stdin input and forwards the input to the main
process. When an embedded terminal is launched within the main process,
the input thread is asked to switch to raw input, that is to send the
parsed input and the raw bytes to the main process in order to get them
forwarded to the embedded terminal. The switch happens by calling
get_events and get_events_raw.

When the input thread receives an InputCommand::{No,}Raw, it has already
received an input event, since the `select!` is within the
stdin events for loop. (There's no way to `select` on blocking iterators
or raw fds, which is unfortunate.).

This commit forwards the input to the next function instead of dropping
it.
5 years ago
Manos Pitsidianakis 7807f565ec
Clear input thread channel on restore()
The channel may contain Kill commands that will cause the new thread to
exit immediately.
5 years ago
Manos Pitsidianakis 65666e6695
Fix double call of restore_input
restore_input is called in State::rcv_event on arrival of a fork
finished event:

```
            UIEvent::Fork(ForkType::Finished) => {
                self.switch_to_main_screen();
                self.switch_to_alternate_screen();
                self.context.restore_input();
                return;
            }
```

So there shouldn't be an extra call here.
5 years ago
Manos Pitsidianakis bae083cc8f
Rename Filter action to search 5 years ago