NeoMutt  2024-03-23-23-gec7045
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
status.c
Go to the documentation of this file.
1
35#include "config.h"
36#include <stdbool.h>
37#include <stdio.h>
38#include "mutt/lib.h"
39#include "config/lib.h"
40#include "core/lib.h"
41#include "status.h"
42#include "expando/lib.h"
43#include "index/lib.h"
44#include "menu/lib.h"
45#include "postpone/lib.h"
46#include "globals.h"
47#include "mutt_mailbox.h"
48#include "mutt_thread.h"
49#include "muttlib.h"
50#include "mview.h"
51
52void status_f(const struct ExpandoNode *node, void *data, MuttFormatFlags flags,
53 int max_cols, struct Buffer *buf);
54
56
64static char *get_sort_str(char *buf, size_t buflen, enum SortType method)
65{
66 snprintf(buf, buflen, "%s%s%s", (method & SORT_REVERSE) ? "reverse-" : "",
67 (method & SORT_LAST) ? "last-" : "",
69 return buf;
70}
71
76{
78 struct Menu *menu;
79};
80
84void status_r(const struct ExpandoNode *node, void *data, MuttFormatFlags flags,
85 int max_cols, struct Buffer *buf)
86{
87 const struct MbTable *c_status_chars = cs_subset_mbtable(NeoMutt->sub, "status_chars");
88 if (!c_status_chars || !c_status_chars->len)
89 return;
90
91 const struct MenuStatusLineData *msld = data;
92 const struct IndexSharedData *shared = msld->shared;
93 const struct Mailbox *m = shared->mailbox;
94
95 size_t i = 0;
96
97 if (m)
98 {
99 i = shared->attach_msg ? 3 :
100 ((m->readonly || m->dontwrite) ? 2 :
101 (m->changed ||
102 /* deleted doesn't necessarily mean changed in IMAP */
103 (m->type != MUTT_IMAP && m->msg_deleted)) ?
104 1 :
105 0);
106 }
107
108 if (i >= c_status_chars->len)
109 buf_addstr(buf, c_status_chars->chars[0]);
110 else
111 buf_addstr(buf, c_status_chars->chars[i]);
112}
113
117void status_D(const struct ExpandoNode *node, void *data, MuttFormatFlags flags,
118 int max_cols, struct Buffer *buf)
119{
120 const struct MenuStatusLineData *msld = data;
121 const struct IndexSharedData *shared = msld->shared;
122 const struct Mailbox *m = shared->mailbox;
123
124 // If there's a descriptive name, use it. Otherwise, use %f
125 if (m && m->name)
126 {
127 const char *s = m->name;
128 buf_strcpy(buf, s);
129 return;
130 }
131
132 status_f(node, data, flags, max_cols, buf);
133}
134
138void status_f(const struct ExpandoNode *node, void *data, MuttFormatFlags flags,
139 int max_cols, struct Buffer *buf)
140{
141 const struct MenuStatusLineData *msld = data;
142 const struct IndexSharedData *shared = msld->shared;
143 const struct Mailbox *m = shared->mailbox;
144
145 char tmp[128] = { 0 };
146
147 if (m && m->compress_info && (m->realpath[0] != '\0'))
148 {
149 mutt_str_copy(tmp, m->realpath, sizeof(tmp));
150 mutt_pretty_mailbox(tmp, sizeof(tmp));
151 }
152 else if (m && (m->type == MUTT_NOTMUCH) && m->name)
153 {
154 mutt_str_copy(tmp, m->name, sizeof(tmp));
155 }
156 else if (m && !buf_is_empty(&m->pathbuf))
157 {
158 mutt_str_copy(tmp, mailbox_path(m), sizeof(tmp));
159 mutt_pretty_mailbox(tmp, sizeof(tmp));
160 }
161 else
162 {
163 mutt_str_copy(tmp, _("(no mailbox)"), sizeof(tmp));
164 }
165
166 buf_strcpy(buf, tmp);
167}
168
172long status_M_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
173{
174 const struct MenuStatusLineData *msld = data;
175 const struct IndexSharedData *shared = msld->shared;
176 const struct Mailbox *m = shared->mailbox;
177
178 return m ? m->vcount : 0;
179}
180
184long status_m_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
185{
186 const struct MenuStatusLineData *msld = data;
187 const struct IndexSharedData *shared = msld->shared;
188 const struct Mailbox *m = shared->mailbox;
189
190 return m ? m->msg_count : 0;
191}
192
196long status_n_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
197{
198 const struct MenuStatusLineData *msld = data;
199 const struct IndexSharedData *shared = msld->shared;
200 const struct Mailbox *m = shared->mailbox;
201
202 return m ? m->msg_new : 0;
203}
204
208long status_o_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
209{
210 const struct MenuStatusLineData *msld = data;
211 const struct IndexSharedData *shared = msld->shared;
212 const struct Mailbox *m = shared->mailbox;
213
214 return m ? (m->msg_unread - m->msg_new) : 0;
215}
216
220long status_d_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
221{
222 const struct MenuStatusLineData *msld = data;
223 const struct IndexSharedData *shared = msld->shared;
224 const struct Mailbox *m = shared->mailbox;
225
226 return m ? m->msg_deleted : 0;
227}
228
232long status_F_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
233{
234 const struct MenuStatusLineData *msld = data;
235 const struct IndexSharedData *shared = msld->shared;
236 const struct Mailbox *m = shared->mailbox;
237
238 return m ? m->msg_flagged : 0;
239}
240
244long status_t_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
245{
246 const struct MenuStatusLineData *msld = data;
247 const struct IndexSharedData *shared = msld->shared;
248 const struct Mailbox *m = shared->mailbox;
249
250 return m ? m->msg_tagged : 0;
251}
252
256long status_p_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
257{
258 const struct MenuStatusLineData *msld = data;
259 const struct IndexSharedData *shared = msld->shared;
260 struct Mailbox *m = shared->mailbox;
261
262 return mutt_num_postponed(m, false);
263}
264
268long status_b_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
269{
270 const struct MenuStatusLineData *msld = data;
271 const struct IndexSharedData *shared = msld->shared;
272 struct Mailbox *m = shared->mailbox;
273
275}
276
280long status_l_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
281{
282 const struct MenuStatusLineData *msld = data;
283 const struct IndexSharedData *shared = msld->shared;
284 const struct Mailbox *m = shared->mailbox;
285 if (!m)
286 return 0;
287
288 return m->size;
289}
290
294void status_l(const struct ExpandoNode *node, void *data, MuttFormatFlags flags,
295 int max_cols, struct Buffer *buf)
296{
297 const struct MenuStatusLineData *msld = data;
298 const struct IndexSharedData *shared = msld->shared;
299 const struct Mailbox *m = shared->mailbox;
300
301 char tmp[128] = { 0 };
302
303 const off_t num = m ? m->size : 0;
304 mutt_str_pretty_size(tmp, sizeof(tmp), num);
305 buf_strcpy(buf, tmp);
306}
307
311void status_T(const struct ExpandoNode *node, void *data, MuttFormatFlags flags,
312 int max_cols, struct Buffer *buf)
313{
314 const enum UseThreads c_use_threads = mutt_thread_style();
315 const char *s = get_use_threads_str(c_use_threads);
316 buf_strcpy(buf, s);
317}
318
322void status_s(const struct ExpandoNode *node, void *data, MuttFormatFlags flags,
323 int max_cols, struct Buffer *buf)
324{
325 char tmp[128] = { 0 };
326
327 const enum SortType c_sort = cs_subset_sort(NeoMutt->sub, "sort");
328 const char *s = get_sort_str(tmp, sizeof(tmp), c_sort);
329 buf_strcpy(buf, s);
330}
331
335void status_S(const struct ExpandoNode *node, void *data, MuttFormatFlags flags,
336 int max_cols, struct Buffer *buf)
337{
338 char tmp[128] = { 0 };
339
340 const enum SortType c_sort_aux = cs_subset_sort(NeoMutt->sub, "sort_aux");
341 const char *s = get_sort_str(tmp, sizeof(tmp), c_sort_aux);
342 buf_strcpy(buf, s);
343}
344
348long status_P_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
349{
350 const struct MenuStatusLineData *msld = data;
351 const struct Menu *menu = msld->menu;
352 if (!menu)
353 return 0;
354
355 if (menu->top + menu->page_len >= menu->max)
356 return 100;
357
358 return (100 * (menu->top + menu->page_len)) / menu->max;
359}
360
364void status_P(const struct ExpandoNode *node, void *data, MuttFormatFlags flags,
365 int max_cols, struct Buffer *buf)
366{
367 const struct MenuStatusLineData *msld = data;
368 const struct Menu *menu = msld->menu;
369 if (!menu)
370 return;
371
372 char tmp[128] = { 0 };
373
374 char *cp = NULL;
375 if (menu->top + menu->page_len >= menu->max)
376 {
377 cp = menu->top ?
378 /* L10N: Status bar message: the end of the list emails is visible in the index */
379 _("end") :
380 /* L10N: Status bar message: all the emails are visible in the index */
381 _("all");
382 }
383 else
384 {
385 int count = (100 * (menu->top + menu->page_len)) / menu->max;
386 /* L10N: Status bar, percentage of way through index.
387 `%d` is the number, `%%` is the percent symbol.
388 They may be reordered, or space inserted, if you wish. */
389 snprintf(tmp, sizeof(tmp), _("%d%%"), count);
390 cp = tmp;
391 }
392
393 buf_strcpy(buf, cp);
394}
395
399void status_h(const struct ExpandoNode *node, void *data, MuttFormatFlags flags,
400 int max_cols, struct Buffer *buf)
401{
402 const char *s = ShortHostname;
403 buf_strcpy(buf, s);
404}
405
409long status_L_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
410{
411 const struct MenuStatusLineData *msld = data;
412 const struct IndexSharedData *shared = msld->shared;
413 const struct MailboxView *mailbox_view = shared->mailbox_view;
414 if (!mailbox_view)
415 return 0;
416
417 return mailbox_view->vsize;
418}
419
423void status_L(const struct ExpandoNode *node, void *data, MuttFormatFlags flags,
424 int max_cols, struct Buffer *buf)
425{
426 const struct MenuStatusLineData *msld = data;
427 const struct IndexSharedData *shared = msld->shared;
428 const struct MailboxView *mailbox_view = shared->mailbox_view;
429
430 char tmp[128] = { 0 };
431
432 const off_t num = mailbox_view ? mailbox_view->vsize : 0;
433 mutt_str_pretty_size(tmp, sizeof(tmp), num);
434 buf_strcpy(buf, tmp);
435}
436
440long status_R_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
441{
442 const struct MenuStatusLineData *msld = data;
443 const struct IndexSharedData *shared = msld->shared;
444 const struct Mailbox *m = shared->mailbox;
445
446 return m ? (m->msg_count - m->msg_unread) : 0;
447}
448
452long status_u_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
453{
454 const struct MenuStatusLineData *msld = data;
455 const struct IndexSharedData *shared = msld->shared;
456 const struct Mailbox *m = shared->mailbox;
457
458 return m ? m->msg_unread : 0;
459}
460
464void status_v(const struct ExpandoNode *node, void *data, MuttFormatFlags flags,
465 int max_cols, struct Buffer *buf)
466{
467 const char *s = mutt_make_version();
468 buf_strcpy(buf, s);
469}
470
474void status_V(const struct ExpandoNode *node, void *data, MuttFormatFlags flags,
475 int max_cols, struct Buffer *buf)
476{
477 const struct MenuStatusLineData *msld = data;
478 const struct IndexSharedData *shared = msld->shared;
479 const struct MailboxView *mailbox_view = shared->mailbox_view;
480
481 const char *s = mview_has_limit(mailbox_view) ? mailbox_view->pattern : "";
482 buf_strcpy(buf, s);
483}
484
495void menu_status_line(struct Buffer *buf, struct IndexSharedData *shared,
496 struct Menu *menu, int max_cols, const struct Expando *exp)
497{
498 struct MenuStatusLineData data = { shared, menu };
499
500 expando_render(exp, StatusRenderData, &data, MUTT_FORMAT_NO_FLAGS, max_cols, buf);
501}
502
508const struct ExpandoRenderData StatusRenderData[] = {
509 // clang-format off
526 { ED_GLOBAL, ED_GLO_SORT, status_s, NULL },
533 { -1, -1, NULL, NULL },
534 // clang-format on
535};
bool buf_is_empty(const struct Buffer *buf)
Is the Buffer empty?
Definition: buffer.c:308
size_t buf_addstr(struct Buffer *buf, const char *s)
Add a string to a Buffer.
Definition: buffer.c:243
size_t buf_strcpy(struct Buffer *buf, const char *s)
Copy a string into a Buffer.
Definition: buffer.c:412
void mutt_pretty_mailbox(char *buf, size_t buflen)
Shorten a mailbox path using '~' or '='.
Definition: muttlib.c:475
struct MbTable * cs_subset_mbtable(const struct ConfigSubset *sub, const char *name)
Get a Multibyte table config item by name.
Definition: helpers.c:120
short cs_subset_sort(const struct ConfigSubset *sub, const char *name)
Get a sort config item by name.
Definition: helpers.c:267
Convenience wrapper for the config headers.
Convenience wrapper for the core headers.
static const char * mailbox_path(const struct Mailbox *m)
Get the Mailbox's path string.
Definition: mailbox.h:223
@ MUTT_NOTMUCH
'Notmuch' (virtual) Mailbox type
Definition: mailbox.h:51
@ MUTT_IMAP
'IMAP' Mailbox type
Definition: mailbox.h:50
@ ED_MENU
Menu ED_MEN_ ExpandoDataMenu.
Definition: domain.h:48
@ ED_GLOBAL
Global ED_GLO_ ExpandoDataGlobal.
Definition: domain.h:44
@ ED_INDEX
Index ED_IND_ ExpandoDataIndex.
Definition: domain.h:46
Parse Expando string.
int expando_render(const struct Expando *exp, const struct ExpandoRenderData *rdata, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Render an Expando + data into a string.
Definition: expando.c:109
char * ShortHostname
Short version of the hostname.
Definition: globals.c:39
Global variables.
long status_p_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of postponed messages - Implements ExpandoRenderData::get_number -.
Definition: status.c:256
long status_b_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of mailboxes with new mail - Implements ExpandoRenderData::get_number -.
Definition: status.c:268
long status_R_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of read messages - Implements ExpandoRenderData::get_number -.
Definition: status.c:440
long status_d_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of deleted messages - Implements ExpandoRenderData::get_number -.
Definition: status.c:220
long status_o_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of old messages - Implements ExpandoRenderData::get_number -.
Definition: status.c:208
long status_t_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of tagged messages - Implements ExpandoRenderData::get_number -.
Definition: status.c:244
long status_n_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of new messages - Implements ExpandoRenderData::get_number -.
Definition: status.c:196
long status_m_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of messages in the mailbox - Implements ExpandoRenderData::get_number -.
Definition: status.c:184
long status_F_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of flagged messages - Implements ExpandoRenderData::get_number -.
Definition: status.c:232
long status_P_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Percentage through index - Implements ExpandoRenderData::get_number -.
Definition: status.c:348
long status_u_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of unread messages - Implements ExpandoRenderData::get_number -.
Definition: status.c:452
long status_M_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of messages - Implements ExpandoRenderData::get_number -.
Definition: status.c:172
long status_l_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Size of the current mailbox - Implements ExpandoRenderData::get_number -.
Definition: status.c:280
long status_L_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Size of the messages - Implements ExpandoRenderData::get_number -.
Definition: status.c:409
void status_r(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Status: Modified/read-only flag - Implements ExpandoRenderData::get_string -.
Definition: status.c:84
void status_V(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Status: Active limit pattern - Implements ExpandoRenderData::get_string -.
Definition: status.c:474
void status_h(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Status: Local hostname - Implements ExpandoRenderData::get_string -.
Definition: status.c:399
void status_v(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Status: Version string - Implements ExpandoRenderData::get_string -.
Definition: status.c:464
void status_f(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Status: pathname of the mailbox - Implements ExpandoRenderData::get_string -.
Definition: status.c:138
void status_l(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Status: Size of the current mailbox - Implements ExpandoRenderData::get_string -.
Definition: status.c:294
void status_D(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Status: Description of the mailbox - Implements ExpandoRenderData::get_string -.
Definition: status.c:117
void status_L(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Status: Size of the messages - Implements ExpandoRenderData::get_string -.
Definition: status.c:423
void status_T(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Status: Current threading mode - Implements ExpandoRenderData::get_string -.
Definition: status.c:311
void status_s(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Status: Sorting mode - Implements ExpandoRenderData::get_string -.
Definition: status.c:322
void status_P(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Status: Percentage through index - Implements ExpandoRenderData::get_string -.
Definition: status.c:364
void status_S(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Status: Aux sorting method - Implements ExpandoRenderData::get_string -.
Definition: status.c:335
GUI manage the main index (list of emails)
@ ED_IND_LIMIT_COUNT
Mailbox.vcount.
Definition: shared_data.h:59
@ ED_IND_MAILBOX_PATH
Mailbox.pathbuf, Mailbox.name.
Definition: shared_data.h:62
@ ED_IND_DELETED_COUNT
Mailbox.msg_deleted.
Definition: shared_data.h:56
@ ED_IND_NEW_COUNT
Mailbox.msg_new.
Definition: shared_data.h:65
@ ED_IND_MAILBOX_SIZE
Mailbox.size.
Definition: shared_data.h:63
@ ED_IND_LIMIT_PATTERN
MailboxView.pattern.
Definition: shared_data.h:60
@ ED_IND_READ_COUNT
Mailbox.msg_count, Mailbox.msg_unread.
Definition: shared_data.h:69
@ ED_IND_POSTPONED_COUNT
mutt_num_postponed()
Definition: shared_data.h:67
@ ED_IND_FLAGGED_COUNT
Mailbox.msg_flagged.
Definition: shared_data.h:58
@ ED_IND_MESSAGE_COUNT
Mailbox.msg_count.
Definition: shared_data.h:64
@ ED_IND_OLD_COUNT
Mailbox.msg_unread, Mailbox.msg_new.
Definition: shared_data.h:66
@ ED_IND_READONLY
Mailbox.readonly, Mailbox.dontwrite.
Definition: shared_data.h:68
@ ED_IND_UNREAD_COUNT
Mailbox.msg_unread.
Definition: shared_data.h:71
@ ED_IND_TAGGED_COUNT
Mailbox.msg_tagged.
Definition: shared_data.h:70
@ ED_IND_LIMIT_SIZE
MailboxView.vsize.
Definition: shared_data.h:61
@ ED_IND_DESCRIPTION
Mailbox.name.
Definition: shared_data.h:57
@ ED_IND_UNREAD_MAILBOXES
Mailbox, mutt_mailbox_check()
Definition: shared_data.h:72
const char * mutt_map_get_name(int val, const struct Mapping *map)
Lookup a string for a constant.
Definition: mapping.c:42
GUI present the user with a selectable list.
@ ED_MEN_PERCENTAGE
Menu.top, ...
Definition: lib.h:68
Convenience wrapper for the library headers.
#define _(a)
Definition: message.h:28
size_t mutt_str_copy(char *dest, const char *src, size_t dsize)
Copy a string into a buffer (guaranteeing NUL-termination)
Definition: string.c:630
int mutt_mailbox_check(struct Mailbox *m_cur, CheckStatsFlags flags)
Check all all Mailboxes for new mail.
Definition: mutt_mailbox.c:168
Mailbox helper functions.
const char * get_use_threads_str(enum UseThreads value)
Convert UseThreads enum to string.
Definition: mutt_thread.c:101
enum UseThreads mutt_thread_style(void)
Which threading style is active?
Definition: mutt_thread.c:83
Create/manipulate threading in emails.
UseThreads
Which threading style is active, $use_threads.
Definition: mutt_thread.h:97
const char * mutt_make_version(void)
Generate the NeoMutt version string.
Definition: muttlib.c:893
void mutt_str_pretty_size(char *buf, size_t buflen, size_t num)
Display an abbreviated size, like 3.4K.
Definition: muttlib.c:1101
Some miscellaneous functions.
bool mview_has_limit(const struct MailboxView *mv)
Is a limit active?
Definition: mview.c:439
View of a Mailbox.
#define MUTT_MAILBOX_CHECK_NO_FLAGS
No flags are set.
Definition: mxapi.h:53
Postponed Emails.
int mutt_num_postponed(struct Mailbox *m, bool force)
Return the number of postponed messages.
Definition: postpone.c:70
#define MUTT_FORMAT_NO_FLAGS
No flags are set.
Definition: render.h:33
uint8_t MuttFormatFlags
Flags for expando_render(), e.g. MUTT_FORMAT_FORCESUBJ.
Definition: render.h:32
const struct Mapping SortMethods[]
Sort methods for '$sort' for the index.
Definition: mutt_config.c:89
#define SORT_MASK
Mask for the sort id.
Definition: sort2.h:70
#define SORT_LAST
Sort thread by last-X, e.g. received date.
Definition: sort2.h:72
SortType
Methods for sorting.
Definition: sort2.h:34
#define SORT_REVERSE
Reverse the order of the sort.
Definition: sort2.h:71
const struct ExpandoRenderData StatusRenderData[]
Callbacks for Status Expandos.
Definition: status.c:55
static char * get_sort_str(char *buf, size_t buflen, enum SortType method)
Get the sort method as a string.
Definition: status.c:64
void menu_status_line(struct Buffer *buf, struct IndexSharedData *shared, struct Menu *menu, int max_cols, const struct Expando *exp)
Create the status line.
Definition: status.c:495
GUI display a user-configurable status line.
String manipulation buffer.
Definition: buffer.h:36
Basic Expando Node.
Definition: node.h:67
Parsed Expando trees.
Definition: expando.h:41
Data shared between Index, Pager and Sidebar.
Definition: shared_data.h:37
struct Mailbox * mailbox
Current Mailbox.
Definition: shared_data.h:41
bool attach_msg
Are we in "attach message" mode?
Definition: shared_data.h:46
struct MailboxView * mailbox_view
Current Mailbox view.
Definition: shared_data.h:40
View of a Mailbox.
Definition: mview.h:40
struct Menu * menu
Needed for pattern compilation.
Definition: mview.h:47
off_t vsize
Size (in bytes) of the messages shown.
Definition: mview.h:41
char * pattern
Limit pattern string.
Definition: mview.h:42
A mailbox.
Definition: mailbox.h:79
int vcount
The number of virtual messages.
Definition: mailbox.h:99
bool changed
Mailbox has been modified.
Definition: mailbox.h:110
char * realpath
Used for duplicate detection, context comparison, and the sidebar.
Definition: mailbox.h:81
int msg_new
Number of new messages.
Definition: mailbox.h:92
int msg_count
Total number of messages.
Definition: mailbox.h:88
enum MailboxType type
Mailbox type.
Definition: mailbox.h:102
char * name
A short name for the Mailbox.
Definition: mailbox.h:82
struct Buffer pathbuf
Path of the Mailbox.
Definition: mailbox.h:80
int msg_deleted
Number of deleted messages.
Definition: mailbox.h:93
bool dontwrite
Don't write the mailbox on close.
Definition: mailbox.h:111
off_t size
Size of the Mailbox.
Definition: mailbox.h:84
int msg_flagged
Number of flagged messages.
Definition: mailbox.h:90
void * compress_info
Compressed mbox module private data.
Definition: mailbox.h:121
bool readonly
Don't allow changes to the mailbox.
Definition: mailbox.h:116
int msg_tagged
How many messages are tagged?
Definition: mailbox.h:94
int msg_unread
Number of unread messages.
Definition: mailbox.h:89
Multibyte character table.
Definition: mbtable.h:36
int len
Number of characters.
Definition: mbtable.h:38
char ** chars
The array of multibyte character strings.
Definition: mbtable.h:39
Data for creating a Menu line.
Definition: status.c:76
struct IndexSharedData * shared
Data shared between Index, Pager and Sidebar.
Definition: status.c:77
struct Menu * menu
Current Menu.
Definition: status.c:78
Definition: lib.h:79
int top
Entry that is the top of the current page.
Definition: lib.h:90
int max
Number of entries in the menu.
Definition: lib.h:81
int page_len
Number of entries per screen.
Definition: lib.h:84
Container for Accounts, Notifications.
Definition: neomutt.h:41
struct ConfigSubset * sub
Inherited config items.
Definition: neomutt.h:45
@ ED_GLO_SORT
Value of $sort.
Definition: uid.h:40
@ ED_GLO_VERSION
NeoMutt version.
Definition: uid.h:43
@ ED_GLO_USE_THREADS
Value of $use_threads.
Definition: uid.h:42
@ ED_GLO_HOSTNAME
Local hostname.
Definition: uid.h:35
@ ED_GLO_SORT_AUX
Value of $sort_aux.
Definition: uid.h:41