NeoMutt  2025-12-11-769-g906513
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
expando_status.c
Go to the documentation of this file.
1
28
34
35#include "config.h"
36#include <stdbool.h>
37#include <stdio.h>
38#include <sys/types.h>
39#include "mutt/lib.h"
40#include "config/lib.h"
41#include "email/lib.h"
42#include "core/lib.h"
43#include "gui/lib.h"
44#include "expando_status.h"
45#include "expando/lib.h"
46#include "menu/lib.h"
47#include "postpone/lib.h"
48#include "globals.h"
49#include "mutt_mailbox.h"
50#include "muttlib.h"
51#include "shared_data.h"
52#include "version.h"
53
54static void index_mailbox_path(const struct ExpandoNode *node, void *data,
55 MuttFormatFlags flags, struct Buffer *buf);
56
57extern const struct Mapping SortMethods[];
58
64static void get_sort_str(struct Buffer *buf, enum EmailSortType method)
65{
66 if (method & SORT_REVERSE)
67 buf_addstr(buf, "reverse-");
68 if (method & SORT_LAST)
69 buf_addstr(buf, "last-");
71}
72
76static void global_config_sort(const struct ExpandoNode *node, void *data,
77 MuttFormatFlags flags, struct Buffer *buf)
78{
79 const enum EmailSortType c_sort = cs_subset_sort(NeoMutt->sub, "sort");
80 get_sort_str(buf, c_sort);
81}
82
86static void global_config_sort_aux(const struct ExpandoNode *node, void *data,
87 MuttFormatFlags flags, struct Buffer *buf)
88{
89 const enum EmailSortType c_sort_aux = cs_subset_sort(NeoMutt->sub, "sort_aux");
90 get_sort_str(buf, c_sort_aux);
91}
92
96static void global_config_use_threads(const struct ExpandoNode *node, void *data,
97 MuttFormatFlags flags, struct Buffer *buf)
98{
99 const enum UseThreads c_use_threads = mutt_thread_style();
100 const char *s = get_use_threads_str(c_use_threads);
101 buf_strcpy(buf, s);
102}
103
107static void global_hostname(const struct ExpandoNode *node, void *data,
108 MuttFormatFlags flags, struct Buffer *buf)
109{
110 const char *s = ShortHostname;
111 buf_strcpy(buf, s);
112}
113
117static void global_version(const struct ExpandoNode *node, void *data,
118 MuttFormatFlags flags, struct Buffer *buf)
119{
120 const char *s = mutt_make_version();
121 buf_strcpy(buf, s);
122}
123
127static long index_deleted_count_num(const struct ExpandoNode *node, void *data,
128 MuttFormatFlags flags)
129{
130 const struct MenuStatusLineData *msld = data;
131 const struct IndexSharedData *shared = msld->shared;
132 const struct Mailbox *m = shared->mailbox;
133
134 return m ? m->msg_deleted : 0;
135}
136
140static void index_description(const struct ExpandoNode *node, void *data,
141 MuttFormatFlags flags, struct Buffer *buf)
142{
143 const struct MenuStatusLineData *msld = data;
144 const struct IndexSharedData *shared = msld->shared;
145 const struct Mailbox *m = shared->mailbox;
146
147 // If there's a descriptive name, use it. Otherwise, use %f
148 if (m && m->name)
149 {
150 const char *s = m->name;
151 buf_strcpy(buf, s);
152 return;
153 }
154
155 index_mailbox_path(node, data, flags, buf);
156}
157
161static long index_flagged_count_num(const struct ExpandoNode *node, void *data,
162 MuttFormatFlags flags)
163{
164 const struct MenuStatusLineData *msld = data;
165 const struct IndexSharedData *shared = msld->shared;
166 const struct Mailbox *m = shared->mailbox;
167
168 return m ? m->msg_flagged : 0;
169}
170
174static long index_limit_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
175{
176 const struct MenuStatusLineData *msld = data;
177 const struct IndexSharedData *shared = msld->shared;
178 const struct Mailbox *m = shared->mailbox;
179
180 return m ? m->vcount : 0;
181}
182
186static void index_limit_pattern(const struct ExpandoNode *node, void *data,
187 MuttFormatFlags flags, struct Buffer *buf)
188{
189 const struct MenuStatusLineData *msld = data;
190 const struct IndexSharedData *shared = msld->shared;
191 const struct MailboxView *mailbox_view = shared->mailbox_view;
192
193 const char *s = mview_has_limit(mailbox_view) ? mailbox_view->pattern : "";
194 buf_strcpy(buf, s);
195}
196
200static void index_limit_size(const struct ExpandoNode *node, void *data,
201 MuttFormatFlags flags, struct Buffer *buf)
202{
203 const struct MenuStatusLineData *msld = data;
204 const struct IndexSharedData *shared = msld->shared;
205 const struct MailboxView *mailbox_view = shared->mailbox_view;
206
207 const off_t num = mailbox_view ? mailbox_view->vsize : 0;
208 mutt_str_pretty_size(buf, num);
209}
210
214static long index_limit_size_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
215{
216 const struct MenuStatusLineData *msld = data;
217 const struct IndexSharedData *shared = msld->shared;
218 const struct MailboxView *mailbox_view = shared->mailbox_view;
219 if (!mailbox_view)
220 return 0;
221
222 return mailbox_view->vsize;
223}
224
228static void index_mailbox_path(const struct ExpandoNode *node, void *data,
229 MuttFormatFlags flags, struct Buffer *buf)
230{
231 const struct MenuStatusLineData *msld = data;
232 const struct IndexSharedData *shared = msld->shared;
233 const struct Mailbox *m = shared->mailbox;
234
235 if (m && m->compress_info && (m->realpath[0] != '\0'))
236 {
237 buf_strcpy(buf, m->realpath);
238 pretty_mailbox(buf);
239 }
240 else if (m && (m->type == MUTT_NOTMUCH) && m->name)
241 {
242 buf_strcpy(buf, m->name);
243 }
244 else if (m && !buf_is_empty(&m->pathbuf))
245 {
246 buf_strcpy(buf, mailbox_path(m));
247 pretty_mailbox(buf);
248 }
249 else
250 {
251 buf_strcpy(buf, _("(no mailbox)"));
252 }
253}
254
258static void index_mailbox_size(const struct ExpandoNode *node, void *data,
259 MuttFormatFlags flags, struct Buffer *buf)
260{
261 const struct MenuStatusLineData *msld = data;
262 const struct IndexSharedData *shared = msld->shared;
263 const struct Mailbox *m = shared->mailbox;
264
265 const off_t num = m ? m->size : 0;
266 mutt_str_pretty_size(buf, num);
267}
268
272static long index_mailbox_size_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
273{
274 const struct MenuStatusLineData *msld = data;
275 const struct IndexSharedData *shared = msld->shared;
276 const struct Mailbox *m = shared->mailbox;
277 if (!m)
278 return 0;
279
280 return m->size;
281}
282
286static long index_message_count_num(const struct ExpandoNode *node, void *data,
287 MuttFormatFlags flags)
288{
289 const struct MenuStatusLineData *msld = data;
290 const struct IndexSharedData *shared = msld->shared;
291 const struct Mailbox *m = shared->mailbox;
292
293 return m ? m->msg_count : 0;
294}
295
299static long index_new_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
300{
301 const struct MenuStatusLineData *msld = data;
302 const struct IndexSharedData *shared = msld->shared;
303 const struct Mailbox *m = shared->mailbox;
304
305 return m ? m->msg_new : 0;
306}
307
311static long index_old_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
312{
313 const struct MenuStatusLineData *msld = data;
314 const struct IndexSharedData *shared = msld->shared;
315 const struct Mailbox *m = shared->mailbox;
316
317 return m ? (m->msg_unread - m->msg_new) : 0;
318}
319
323static long index_postponed_count_num(const struct ExpandoNode *node,
324 void *data, MuttFormatFlags flags)
325{
326 const struct MenuStatusLineData *msld = data;
327 const struct IndexSharedData *shared = msld->shared;
328 struct Mailbox *m = shared->mailbox;
329
330 return mutt_num_postponed(m, false);
331}
332
336static void index_readonly(const struct ExpandoNode *node, void *data,
337 MuttFormatFlags flags, struct Buffer *buf)
338{
339 const struct MbTable *c_status_chars = cs_subset_mbtable(NeoMutt->sub, "status_chars");
340 if (!c_status_chars || !c_status_chars->len)
341 return;
342
343 const struct MenuStatusLineData *msld = data;
344 const struct IndexSharedData *shared = msld->shared;
345 const struct Mailbox *m = shared->mailbox;
346
347 int i = STATUS_CHAR_UNCHANGED;
348
349 if (m)
350 {
351 if (shared->attach_msg)
353 else if (m->readonly || m->dontwrite)
355 else if (m->changed || ((m->type != MUTT_IMAP) && m->msg_deleted)) /* deleted doesn't necessarily mean changed in IMAP */
357 else
359 }
360
361 if (i >= c_status_chars->len)
362 buf_addstr(buf, c_status_chars->chars[STATUS_CHAR_UNCHANGED]);
363 else
364 buf_addstr(buf, c_status_chars->chars[i]);
365}
366
370static long index_read_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
371{
372 const struct MenuStatusLineData *msld = data;
373 const struct IndexSharedData *shared = msld->shared;
374 const struct Mailbox *m = shared->mailbox;
375
376 return m ? (m->msg_count - m->msg_unread) : 0;
377}
378
382static long index_tagged_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
383{
384 const struct MenuStatusLineData *msld = data;
385 const struct IndexSharedData *shared = msld->shared;
386 const struct Mailbox *m = shared->mailbox;
387
388 return m ? m->msg_tagged : 0;
389}
390
394static long index_unread_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
395{
396 const struct MenuStatusLineData *msld = data;
397 const struct IndexSharedData *shared = msld->shared;
398 const struct Mailbox *m = shared->mailbox;
399
400 return m ? m->msg_unread : 0;
401}
402
406static long index_unread_mailboxes_num(const struct ExpandoNode *node,
407 void *data, MuttFormatFlags flags)
408{
409 const struct MenuStatusLineData *msld = data;
410 const struct IndexSharedData *shared = msld->shared;
411 struct Mailbox *m = shared->mailbox;
412
414}
415
419static void menu_percentage(const struct ExpandoNode *node, void *data,
420 MuttFormatFlags flags, struct Buffer *buf)
421{
422 const struct MenuStatusLineData *msld = data;
423 const struct Menu *menu = msld->menu;
424 if (!menu)
425 return;
426
427 if (menu->top + menu->page_len >= menu->max)
428 {
429 const char *s = menu->top ?
430 /* L10N: Status bar message: the end of the list emails is visible in the index */
431 _("end") :
432 /* L10N: Status bar message: all the emails are visible in the index */
433 _("all");
434 buf_strcpy(buf, s);
435 }
436 else
437 {
438 int count = (100 * (menu->top + menu->page_len)) / menu->max;
439 /* L10N: Status bar, percentage of way through index.
440 `%d` is the number, `%%` is the percent symbol.
441 They may be reordered, or space inserted, if you wish. */
442 buf_printf(buf, _("%d%%"), count);
443 }
444}
445
449static long menu_percentage_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
450{
451 const struct MenuStatusLineData *msld = data;
452 const struct Menu *menu = msld->menu;
453 if (!menu)
454 return 0;
455
456 if (menu->top + menu->page_len >= menu->max)
457 return 100;
458
459 return (100 * (menu->top + menu->page_len)) / menu->max;
460}
461
468 // clang-format off
492 { -1, -1, NULL, NULL },
493 // clang-format on
494};
int buf_printf(struct Buffer *buf, const char *fmt,...)
Format a string overwriting a Buffer.
Definition buffer.c:161
bool buf_is_empty(const struct Buffer *buf)
Is the Buffer empty?
Definition buffer.c:291
size_t buf_addstr(struct Buffer *buf, const char *s)
Add a string to a Buffer.
Definition buffer.c:226
size_t buf_strcpy(struct Buffer *buf, const char *s)
Copy a string into a Buffer.
Definition buffer.c:395
struct MbTable * cs_subset_mbtable(const struct ConfigSubset *sub, const char *name)
Get a Multibyte table config item by name.
Definition helpers.c:119
short cs_subset_sort(const struct ConfigSubset *sub, const char *name)
Get a sort config item by name.
Definition helpers.c:266
Convenience wrapper for the config headers.
#define SORT_MASK
Mask for the sort id.
Definition sort.h:39
#define SORT_LAST
Sort thread by last-X, e.g. received date.
Definition sort.h:41
#define SORT_REVERSE
Reverse the order of the sort.
Definition sort.h:40
Convenience wrapper for the core headers.
static const char * mailbox_path(const struct Mailbox *m)
Get the Mailbox's path string.
Definition mailbox.h:213
@ MUTT_NOTMUCH
'Notmuch' (virtual) Mailbox type
Definition mailbox.h:50
@ MUTT_IMAP
'IMAP' Mailbox type
Definition mailbox.h:49
@ 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
Structs that make up an email.
EmailSortType
Methods for sorting Emails.
Definition sort.h:53
Parse Expando string.
const struct ExpandoRenderCallback StatusRenderCallbacks[]
Callbacks for Status Expandos.
const struct Mapping SortMethods[]
Sort methods for '$sort' for the index.
Definition mutt_config.c:77
static void get_sort_str(struct Buffer *buf, enum EmailSortType method)
Get the sort method as a string.
static void global_hostname(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Status: Local hostname - Implements get_string_t -.
static void global_version(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Status: Version string - Implements get_string_t -.
GUI display a user-configurable status line.
@ STATUS_CHAR_UNCHANGED
Mailbox is unchanged.
@ STATUS_CHAR_READ_ONLY
Mailbox is read-only.
@ STATUS_CHAR_NEED_RESYNC
Mailbox has been changed and needs to be resynchronized.
@ STATUS_CHAR_ATTACH
Mailbox opened in attach-message mode.
char * ShortHostname
Short version of the hostname.
Definition globals.c:36
Global variables.
static long index_deleted_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of deleted messages - Implements get_number_t -.
static long index_tagged_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of tagged messages - Implements get_number_t -.
static long index_limit_size_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Size of the messages - Implements get_number_t -.
static long index_old_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of old messages - Implements get_number_t -.
static long index_limit_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of messages - Implements get_number_t -.
static long index_new_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of new messages - Implements get_number_t -.
static long index_mailbox_size_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Size of the current mailbox - Implements get_number_t -.
static long index_postponed_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of postponed messages - Implements get_number_t -.
static long index_unread_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of unread messages - Implements get_number_t -.
static long index_unread_mailboxes_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of mailboxes with new mail - Implements get_number_t -.
static long index_flagged_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of flagged messages - Implements get_number_t -.
static long menu_percentage_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Percentage through index - Implements get_number_t -.
static long index_message_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of messages in the mailbox - Implements get_number_t -.
static long index_read_count_num(const struct ExpandoNode *node, void *data, MuttFormatFlags flags)
Status: Number of read messages - Implements get_number_t -.
static void global_config_sort(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Status: Sorting mode - Implements get_string_t -.
static void global_config_sort_aux(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Status: Aux sorting method - Implements get_string_t -.
static void index_limit_size(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Status: Size of the messages - Implements get_string_t -.
static void global_hostname(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Compose: Hostname - Implements get_string_t -.
Definition expando.c:81
static void index_mailbox_path(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Status: pathname of the mailbox - Implements get_string_t -.
static void menu_percentage(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Status: Percentage through index - Implements get_string_t -.
static void global_version(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Compose: Version - Implements get_string_t -.
Definition expando.c:91
static void index_description(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Status: Description of the mailbox - Implements get_string_t -.
static void index_readonly(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Status: Modified/read-only flag - Implements get_string_t -.
static void index_mailbox_size(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Status: Size of the current mailbox - Implements get_string_t -.
static void index_limit_pattern(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Status: Active limit pattern - Implements get_string_t -.
static void global_config_use_threads(const struct ExpandoNode *node, void *data, MuttFormatFlags flags, struct Buffer *buf)
Status: Current threading mode - Implements get_string_t -.
Convenience wrapper for the gui headers.
const char * get_use_threads_str(enum UseThreads value)
Convert UseThreads enum to string.
Definition thread.c:97
enum UseThreads mutt_thread_style(void)
Which threading style is active?
Definition thread.c:79
UseThreads
Which threading style is active, $use_threads.
Definition thread.h:96
Data shared between Index, Pager and Sidebar.
@ 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:69
Convenience wrapper for the library headers.
#define _(a)
Definition message.h:28
int mutt_mailbox_check(struct Mailbox *m_cur, CheckStatsFlags flags)
Check all all Mailboxes for new mail.
Mailbox helper functions.
int mutt_str_pretty_size(struct Buffer *buf, size_t num)
Display an abbreviated size, like 3.4K.
Definition muttlib.c:935
void pretty_mailbox(struct Buffer *buf)
Shorten a mailbox path using '~' or '='.
Definition muttlib.c:428
Some miscellaneous functions.
bool mview_has_limit(const struct MailboxView *mv)
Is a limit active?
Definition mview.c:436
#define MUTT_MAILBOX_CHECK_NO_FLAGS
No flags are set.
Definition mxapi.h:49
Postponed Emails.
int mutt_num_postponed(struct Mailbox *m, bool force)
Return the number of postponed messages.
Definition postpone.c:63
uint8_t MuttFormatFlags
Flags for expando_render(), e.g. MUTT_FORMAT_FORCESUBJ.
Definition render.h:32
String manipulation buffer.
Definition buffer.h:36
Basic Expando Node.
Definition node.h:67
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
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:78
int vcount
The number of virtual messages.
Definition mailbox.h:98
bool changed
Mailbox has been modified.
Definition mailbox.h:109
char * realpath
Used for duplicate detection, context comparison, and the sidebar.
Definition mailbox.h:80
int msg_new
Number of new messages.
Definition mailbox.h:91
int msg_count
Total number of messages.
Definition mailbox.h:87
enum MailboxType type
Mailbox type.
Definition mailbox.h:101
char * name
A short name for the Mailbox.
Definition mailbox.h:81
struct Buffer pathbuf
Path of the Mailbox.
Definition mailbox.h:79
int msg_deleted
Number of deleted messages.
Definition mailbox.h:92
bool dontwrite
Don't write the mailbox on close.
Definition mailbox.h:110
off_t size
Size of the Mailbox.
Definition mailbox.h:83
int msg_flagged
Number of flagged messages.
Definition mailbox.h:89
void * compress_info
Compressed mbox module private data.
Definition mailbox.h:120
bool readonly
Don't allow changes to the mailbox.
Definition mailbox.h:115
int msg_tagged
How many messages are tagged?
Definition mailbox.h:93
int msg_unread
Number of unread messages.
Definition mailbox.h:88
Mapping between user-readable string and a constant.
Definition mapping.h:33
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.
struct IndexSharedData * shared
Data shared between Index, Pager and Sidebar.
struct Menu * menu
Current Menu.
Definition lib.h:80
int top
Entry that is the top of the current page.
Definition lib.h:92
int max
Number of entries in the menu.
Definition lib.h:82
int page_len
Number of entries per screen.
Definition lib.h:85
Container for Accounts, Notifications.
Definition neomutt.h:41
struct ConfigSubset * sub
Inherited config items.
Definition neomutt.h:49
@ ED_GLO_CONFIG_USE_THREADS
Value of $use_threads.
Definition uid.h:36
@ ED_GLO_CONFIG_SORT
Value of $sort.
Definition uid.h:34
@ ED_GLO_VERSION
NeoMutt version.
Definition uid.h:42
@ ED_GLO_CONFIG_SORT_AUX
Value of $sort_aux.
Definition uid.h:35
@ ED_GLO_HOSTNAME
Local hostname.
Definition uid.h:37
const char * mutt_make_version(void)
Generate the NeoMutt version string.
Definition version.c:293
Display version and copyright about NeoMutt.