mirror of https://github.com/djcb/mu.git
mu/mu4e: implement mu4e-compose-complete-max
Allow limiting number of contacts for auto-completion to a specific number; defaulting to 2000.
This commit is contained in:
parent
ffce3dda21
commit
836bfc9062
|
@ -304,7 +304,7 @@ using ContactSet = std::set<std::reference_wrapper<const Contact>,
|
|||
ContactLessThan>;
|
||||
|
||||
void
|
||||
ContactsCache::for_each(const EachContactFunc& each_contact) const
|
||||
ContactsCache::for_each(const EachContactFunc& each_contact, size_t max_num) const
|
||||
{
|
||||
std::lock_guard<std::mutex> l_{priv_->mtx_};
|
||||
|
||||
|
@ -316,8 +316,13 @@ ContactsCache::for_each(const EachContactFunc& each_contact) const
|
|||
for (const auto& item : priv_->contacts_)
|
||||
sorted.emplace(item.second);
|
||||
|
||||
for (const auto& ci : sorted)
|
||||
// sadly, there's no set::resize
|
||||
size_t n{};
|
||||
for (const auto& ci : sorted) {
|
||||
if (max_num > 0 && n++ >= max_num)
|
||||
break;
|
||||
each_contact(ci);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
@ -142,9 +142,10 @@ public:
|
|||
/**
|
||||
* Invoke some callable for each contact, in order of rank.
|
||||
*
|
||||
* @param each_contact
|
||||
* @param each_contact function invoked for each contact
|
||||
* @param max_num stop after at most so many contacts, or 0 for no limit
|
||||
*/
|
||||
void for_each(const EachContactFunc& each_contact) const;
|
||||
void for_each(const EachContactFunc& each_contact, size_t max_num=0) const;
|
||||
|
||||
private:
|
||||
struct Private;
|
||||
|
|
|
@ -228,7 +228,8 @@ Server::Private::make_command_map()
|
|||
ArgMap{{":personal", ArgInfo{Type::Symbol, false, "only personal contacts"}},
|
||||
{":after",
|
||||
ArgInfo{Type::String, false, "only contacts seen after time_t string"}},
|
||||
{":tstamp", ArgInfo{Type::String, false, "return changes since tstamp"}}},
|
||||
{":tstamp", ArgInfo{Type::String, false, "return changes since tstamp"}},
|
||||
{":maxnum", ArgInfo{Type::Number, false, "max number of contacts to return"}}},
|
||||
"get contact information",
|
||||
[&](const auto& params) { contacts_handler(params); }});
|
||||
cmap.emplace(
|
||||
|
|
|
@ -56,6 +56,17 @@ time-based restriction."
|
|||
:type 'string
|
||||
:group 'mu4e-compose)
|
||||
|
||||
(defcustom mu4e-compose-complete-max 2000
|
||||
"Consider only the top-n contacts.
|
||||
After considering the other
|
||||
constraints (`mu4e-compose-complete-addresses' and
|
||||
`mu4e-compose-complete-only-after'), pick only the highest-ranked n.
|
||||
|
||||
This reduce start-up time and memory usage. Set to nil for no
|
||||
limits."
|
||||
:type 'string
|
||||
:group 'mu4e-compose)
|
||||
|
||||
;; names and mail-addresses can be mapped onto their canonical
|
||||
;; counterpart. use the customizeable function
|
||||
;; mu4e-canonical-contact-function to do that. below the identity
|
||||
|
@ -293,6 +304,7 @@ nothing."
|
|||
(mu4e--server-contacts
|
||||
mu4e-compose-complete-only-personal
|
||||
mu4e-compose-complete-only-after
|
||||
mu4e-compose-complete-max
|
||||
mu4e--contacts-tstamp)))
|
||||
|
||||
(provide 'mu4e-contacts)
|
||||
|
|
|
@ -441,17 +441,21 @@ The result is delivered to the function registered as
|
|||
:decrypt ,(and decrypt t)
|
||||
:docid ,docid)))
|
||||
|
||||
(defun mu4e--server-contacts (personal after tstamp)
|
||||
"Ask for contacts with PERSONAL AFTER TSTAMP.
|
||||
S-expression (:contacts (<list>) :tstamp \"<tstamp>\") is expected in
|
||||
response. If PERSONAL is non-nil, only get personal contacts, if
|
||||
AFTER is non-nil, get only contacts seen AFTER (the time_t
|
||||
value)."
|
||||
(defun mu4e--server-contacts (personal after maxnum tstamp)
|
||||
"Ask for contacts with PERSONAL AFTER MAXNUM TSTAMP.
|
||||
|
||||
S-expression (:contacts (<list>) :tstamp \"<tstamp>\")
|
||||
is expected in response.
|
||||
|
||||
If PERSONAL is non-nil, only get personal contacts, if AFTER is
|
||||
non-nil, get only contacts seen AFTER (the time_t value). If MAX is non-nil,
|
||||
get at most MAX contacts."
|
||||
(mu4e--server-call-mu
|
||||
`(contacts
|
||||
:personal ,(and personal t)
|
||||
:after ,(or after nil)
|
||||
:tstamp ,(or tstamp nil))))
|
||||
:tstamp ,(or tstamp nil)
|
||||
:maxnum ,(or maxnum nil))))
|
||||
|
||||
(defun mu4e--server-find (query threads sortfield sortdir maxnum skip-dups
|
||||
include-related)
|
||||
|
|
Loading…
Reference in New Issue