NeoMutt  2023-11-03-107-g582dc1
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
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
57const char *group_index_format_str(char *buf, size_t buflen, size_t col, int cols,
58 char op, const char *src, const char *prec,
59 const char *if_str, const char *else_str,
60 intptr_t data, MuttFormatFlags flags)
61{
62 char fn[128], fmt[128];
63 struct Folder *folder = (struct Folder *) data;
64 bool optional = (flags & MUTT_FORMAT_OPTIONAL);
65
66 switch (op)
67 {
68 case 'a':
69 if (!optional)
70 {
71 snprintf(fmt, sizeof(fmt), "%%%sd", prec);
72 snprintf(buf, buflen, fmt, folder->ff->notify_user);
73 }
74 else
75 {
76 if (folder->ff->notify_user == 0)
77 optional = false;
78 }
79 break;
80
81 case 'C':
82 snprintf(fmt, sizeof(fmt), "%%%sd", prec);
83 snprintf(buf, buflen, fmt, folder->num + 1);
84 break;
85
86 case 'd':
87 if (folder->ff->nd->desc)
88 {
89 char *desc = mutt_str_dup(folder->ff->nd->desc);
90 const char *const c_newsgroups_charset = cs_subset_string(NeoMutt->sub, "newsgroups_charset");
91 if (c_newsgroups_charset)
92 mutt_ch_convert_string(&desc, c_newsgroups_charset, cc_charset(), MUTT_ICONV_HOOK_FROM);
94
95 snprintf(fmt, sizeof(fmt), "%%%ss", prec);
96 snprintf(buf, buflen, fmt, desc);
97 FREE(&desc);
98 }
99 else
100 {
101 snprintf(fmt, sizeof(fmt), "%%%ss", prec);
102 snprintf(buf, buflen, fmt, "");
103 }
104 break;
105
106 case 'f':
107 mutt_str_copy(fn, folder->ff->name, sizeof(fn));
108 snprintf(fmt, sizeof(fmt), "%%%ss", prec);
109 snprintf(buf, buflen, fmt, fn);
110 break;
111
112 case 'M':
113 snprintf(fmt, sizeof(fmt), "%%%sc", prec);
114 if (folder->ff->nd->deleted)
115 snprintf(buf, buflen, fmt, 'D');
116 else
117 snprintf(buf, buflen, fmt, folder->ff->nd->allowed ? ' ' : '-');
118 break;
119
120 case 'N':
121 snprintf(fmt, sizeof(fmt), "%%%sc", prec);
122 if (folder->ff->nd->subscribed)
123 snprintf(buf, buflen, fmt, ' ');
124 else
125 snprintf(buf, buflen, fmt, folder->ff->has_new_mail ? 'N' : 'u');
126 break;
127
128 case 'n':
129 {
130 const bool c_mark_old = cs_subset_bool(NeoMutt->sub, "mark_old");
131 if (c_mark_old && (folder->ff->nd->last_cached >= folder->ff->nd->first_message) &&
132 (folder->ff->nd->last_cached <= folder->ff->nd->last_message))
133 {
134 snprintf(fmt, sizeof(fmt), "%%%sd", prec);
135 snprintf(buf, buflen, fmt, folder->ff->nd->last_message - folder->ff->nd->last_cached);
136 }
137 else
138 {
139 snprintf(fmt, sizeof(fmt), "%%%sd", prec);
140 snprintf(buf, buflen, fmt, folder->ff->nd->unread);
141 }
142 break;
143 }
144
145 case 'p':
146 if (!optional)
147 {
148 snprintf(fmt, sizeof(fmt), "%%%sd", prec);
149 snprintf(buf, buflen, fmt, folder->ff->poll_new_mail);
150 }
151 else
152 {
153 if (folder->ff->poll_new_mail == 0)
154 optional = false;
155 }
156 break;
157
158 case 's':
159 if (optional)
160 {
161 if (folder->ff->nd->unread != 0)
162 {
163 mutt_expando_format(buf, buflen, col, cols, if_str,
164 group_index_format_str, data, flags);
165 }
166 else
167 {
168 mutt_expando_format(buf, buflen, col, cols, else_str,
169 group_index_format_str, data, flags);
170 }
171 }
172 else
173 {
174 snprintf(fmt, sizeof(fmt), "%%%sd", prec);
175 snprintf(buf, buflen, fmt, folder->ff->nd->unread);
176 }
177 break;
178 }
179 return src;
180}
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:292
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
Definition: helpers.c:48
Convenience wrapper for the config headers.
const char * cc_charset(void)
Get the cached value of $charset.
Definition: config_cache.c:115
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:739
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:57
int mutt_mb_filter_unprintable(char **s)
Replace unprintable characters.
Definition: mbyte.c:419
#define FREE(x)
Definition: memory.h:45
int mutt_ch_convert_string(char **ps, const char *from, const char *to, uint8_t flags)
Convert a string between encodings.
Definition: charset.c:826
#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:251
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:653
Some miscellaneous functions.
Notmuch-specific Mailbox data.
Key value store.
char * name
Name of file/dir/mailbox.
Definition: lib.h:86
bool has_new_mail
true if mailbox has "new mail"
Definition: lib.h:89
bool poll_new_mail
Check mailbox for new mail.
Definition: lib.h:101
bool notify_user
User will be notified of new mail.
Definition: lib.h:100
struct NntpMboxData * nd
Extra NNTP data.
Definition: lib.h:103
A folder/dir in the browser.
Definition: lib.h:69
int num
Number in the index.
Definition: lib.h:71
struct FolderFile * ff
File / Dir / Mailbox.
Definition: lib.h:70
Container for Accounts, Notifications.
Definition: neomutt.h:41
struct ConfigSubset * sub
Inherited config items.
Definition: neomutt.h:45
anum_t last_cached
Definition: mdata.h:40
bool deleted
Definition: mdata.h:45
bool allowed
Definition: mdata.h:44
anum_t last_message
Definition: mdata.h:38
char * desc
Description of newsgroup.
Definition: mdata.h:36
anum_t unread
Definition: mdata.h:41
anum_t first_message
Definition: mdata.h:37
bool subscribed
Definition: mdata.h:42