Since we require meson 1.3(.2), we can modernize the usage a bit,
as well as improve some logic
- use / instead of join_paths
- use option.allowed() instead of !option.disable()
- use cxx.get_supported_arguments
- use fs.copyfile instead of configure_file
- show a summary at the end of the configuration
Support a configuration function, with the system-configuration.
Update docs.
Add a tests for language, using the configuration to see if we support
it.
Let guile handle the message-map (with weak-hash-table), so we avoid the
cleanup race.
Better handle the fd handling (and avoid calling gc() each time when
we're nearing the limit)
Move the various seq_ functions, as well as std::(stable_)sort,
std::accumulate, std::transform, std::find, std::find_if to their C++20
std::ranges counterparts.
Support "system" properties, i.e., library versions, whether
language-detection, scm is supported.
Make these more generic (with display strings), so we can handle them
more automatic int mu-cmd-info.
With the ~--eval~ option you can evaluate an expression in mu/scm
environment. For example:
$ mu scm --eval \
'(format #t "found ~d match(es)\n" (length (mfind "hello")))'
found 7173 match(es)
Add command-line parameter and implement.
Some of the tests were using (mfind "") to find messages, but since some
messages don't have dates the order is implicitly defined by the directory
order. This usually works, but not always (i.e. guix).
So let's make the behavior deterministic.
Fixes#2888
Some methods that returned lists would return ~#f~ when there were no
results (e.g., to, from, cc, bcc, references, labels); however, it's
nicer to return an empty list instead, which what we now do. Technically a
breaking change, but justified while we are still 'experimental'.
Add a method personal? to check if some string looks like a personal address;
add docs / tests as well.
Rename the all-labels method into simply 'labels'
Make some define* into define-method, for consistency.
For the list building, using cons is much faster. So traverse the results
_backwards_, and then cons gives us the right order.
Don't eval when creating the list, but do so lazily (when requested in the
message, in mu-scm.scm)
Implement message->alist; i.e. to convert the mu4e-style plist into an idiomatic
alist. Add it as a message slot, initializing it lazily.
Update the message accessors to use the alist.
Add tests, docs.
Implement accessing the MIME-parts + docs + test.
Implement saving attachments to file.
Implement creating messages from files.
Refactor / rename functions to be more uniform.
Replace the iso-date->time-t and v.v. functions with something more
customizable. Add more tests.
Use some (internal for now) %preferences variable for the defaults. TBD... maybe
should become a fluid?
SCM exception are "non-local exits", which mean that c++ objects don't get their
DTOR called when leaving the scope.... this break RAII, leaks mem etc.
So instead, we avoid SCM exceptions (where we can), and throw C++ exceptions,
and only use SCM-expections in the catch block.
Implement support for "header" and "body" procedures, with require loading the
message file from disk, and create a foreign object for the message.
We keep those alive in a vector, and hook up a finalizer.
Update docs & tests as well.