NeoMutt  2023-03-22
Teaching an old dog new tricks
DOXYGEN
browse.c
Go to the documentation of this file.
1
29#include "config.h"
30#include <stdbool.h>
31#include <stdint.h>
32#include <stdio.h>
33#include "mutt/lib.h"
34#include "config/lib.h"
35#include "core/lib.h"
36#include "lib.h"
37#include "browser/lib.h"
38#include "format_flags.h"
39#include "mdata.h"
40#include "muttlib.h"
41
55const char *group_index_format_str(char *buf, size_t buflen, size_t col, int cols,
56 char op, const char *src, const char *prec,
57 const char *if_str, const char *else_str,
58 intptr_t data, MuttFormatFlags flags)
59{
60 char fn[128], fmt[128];
61 struct Folder *folder = (struct Folder *) data;
62
63 switch (op)
64 {
65 case 'C':
66 snprintf(fmt, sizeof(fmt), "%%%sd", prec);
67 snprintf(buf, buflen, fmt, folder->num + 1);
68 break;
69
70 case 'd':
71 if (folder->ff->nd->desc)
72 {
73 char *desc = mutt_str_dup(folder->ff->nd->desc);
74 const char *const c_newsgroups_charset = cs_subset_string(NeoMutt->sub, "newsgroups_charset");
75 const char *const c_charset = cs_subset_string(NeoMutt->sub, "charset");
76 if (c_newsgroups_charset)
77 mutt_ch_convert_string(&desc, c_newsgroups_charset, c_charset, MUTT_ICONV_HOOK_FROM);
79
80 snprintf(fmt, sizeof(fmt), "%%%ss", prec);
81 snprintf(buf, buflen, fmt, desc);
82 FREE(&desc);
83 }
84 else
85 {
86 snprintf(fmt, sizeof(fmt), "%%%ss", prec);
87 snprintf(buf, buflen, fmt, "");
88 }
89 break;
90
91 case 'f':
92 mutt_str_copy(fn, folder->ff->name, sizeof(fn));
93 snprintf(fmt, sizeof(fmt), "%%%ss", prec);
94 snprintf(buf, buflen, fmt, fn);
95 break;
96
97 case 'M':
98 snprintf(fmt, sizeof(fmt), "%%%sc", prec);
99 if (folder->ff->nd->deleted)
100 snprintf(buf, buflen, fmt, 'D');
101 else
102 snprintf(buf, buflen, fmt, folder->ff->nd->allowed ? ' ' : '-');
103 break;
104
105 case 'N':
106 snprintf(fmt, sizeof(fmt), "%%%sc", prec);
107 if (folder->ff->nd->subscribed)
108 snprintf(buf, buflen, fmt, ' ');
109 else
110 snprintf(buf, buflen, fmt, folder->ff->has_new_mail ? 'N' : 'u');
111 break;
112
113 case 'n':
114 {
115 const bool c_mark_old = cs_subset_bool(NeoMutt->sub, "mark_old");
116 if (c_mark_old && (folder->ff->nd->last_cached >= folder->ff->nd->first_message) &&
117 (folder->ff->nd->last_cached <= folder->ff->nd->last_message))
118 {
119 snprintf(fmt, sizeof(fmt), "%%%sd", prec);
120 snprintf(buf, buflen, fmt, folder->ff->nd->last_message - folder->ff->nd->last_cached);
121 }
122 else
123 {
124 snprintf(fmt, sizeof(fmt), "%%%sd", prec);
125 snprintf(buf, buflen, fmt, folder->ff->nd->unread);
126 }
127 break;
128 }
129
130 case 's':
131 if (flags & MUTT_FORMAT_OPTIONAL)
132 {
133 if (folder->ff->nd->unread != 0)
134 {
135 mutt_expando_format(buf, buflen, col, cols, if_str,
136 group_index_format_str, data, flags);
137 }
138 else
139 {
140 mutt_expando_format(buf, buflen, col, cols, else_str,
141 group_index_format_str, data, flags);
142 }
143 }
144 else
145 {
146 snprintf(fmt, sizeof(fmt), "%%%sd", prec);
147 snprintf(buf, buflen, fmt, folder->ff->nd->unread);
148 }
149 break;
150 }
151 return src;
152}
Select a Mailbox from a list.
const char * cs_subset_string(const struct ConfigSubset *sub, const char *name)
Get a string config item by name.
Definition: helpers.c:317
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
Definition: helpers.c:73
Convenience wrapper for the config headers.
Convenience wrapper for the core headers.
Flags to control mutt_expando_format()
#define MUTT_FORMAT_OPTIONAL
Allow optional field processing.
Definition: format_flags.h:33
uint8_t MuttFormatFlags
Flags for mutt_expando_format(), e.g. MUTT_FORMAT_FORCESUBJ.
Definition: format_flags.h:29
void mutt_expando_format(char *buf, size_t buflen, size_t col, int cols, const char *src, format_t callback, intptr_t data, MuttFormatFlags flags)
Expand expandos (x) in a string -.
Definition: muttlib.c:778
const char * group_index_format_str(char *buf, size_t buflen, size_t col, int cols, char op, const char *src, const char *prec, const char *if_str, const char *else_str, intptr_t data, MuttFormatFlags flags)
Format a string for the newsgroup menu - Implements format_t -.
Definition: browse.c:55
int mutt_mb_filter_unprintable(char **s)
Replace unprintable characters.
Definition: mbyte.c:421
#define FREE(x)
Definition: memory.h:43
int mutt_ch_convert_string(char **ps, const char *from, const char *to, uint8_t flags)
Convert a string between encodings.
Definition: charset.c:752
#define MUTT_ICONV_HOOK_FROM
apply charset-hooks to fromcode
Definition: charset.h:72
Convenience wrapper for the library headers.
char * mutt_str_dup(const char *str)
Copy a string, safely.
Definition: string.c:250
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:652
Some miscellaneous functions.
Notmuch-specific Mailbox data.
Key value store.
char * name
Name of file/dir/mailbox.
Definition: lib.h:81
bool has_new_mail
true if mailbox has "new mail"
Definition: lib.h:84
struct NntpMboxData * nd
Extra NNTP data.
Definition: lib.h:99
A folder/dir in the browser.
Definition: lib.h:64
int num
Number in the index.
Definition: lib.h:66
struct FolderFile * ff
File / Dir / Mailbox.
Definition: lib.h:65
Container for Accounts, Notifications.
Definition: neomutt.h:37
struct ConfigSubset * sub
Inherited config items.
Definition: neomutt.h:39
anum_t last_cached
Definition: mdata.h:39
bool deleted
Definition: mdata.h:44
bool allowed
Definition: mdata.h:43
anum_t last_message
Definition: mdata.h:37
char * desc
Description of newsgroup.
Definition: mdata.h:35
anum_t unread
Definition: mdata.h:40
anum_t first_message
Definition: mdata.h:36
bool subscribed
Definition: mdata.h:41