NeoMutt  2025-12-11-435-g4ac674
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
tags.h File Reference

Driver based email tags. More...

#include <stdbool.h>
#include "mutt/lib.h"
+ Include dependency graph for tags.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  Tag
 LinkedList Tag Element. More...
 

Functions

 STAILQ_HEAD (TagList, Tag)
 
void tag_free (struct Tag **ptr)
 Free a Tag.
 
struct Tagtag_new (void)
 Create a new Tag.
 
void driver_tags_free (struct TagList *tl)
 Free tags from a header.
 
void driver_tags_get (struct TagList *tl, struct Buffer *tags)
 Get tags all tags separated by space.
 
void driver_tags_get_transformed (struct TagList *tl, struct Buffer *tags)
 Get transformed tags separated by space.
 
void driver_tags_get_transformed_for (struct TagList *tl, const char *name, struct Buffer *tags)
 Get transformed tags for a tag name separated by space.
 
void driver_tags_get_with_hidden (struct TagList *tl, struct Buffer *tags)
 Get all tags, also hidden ones, separated by space.
 
bool driver_tags_replace (struct TagList *tl, const char *tags)
 Replace all tags.
 
void driver_tags_add (struct TagList *tl, char *tag)
 Add a tag to header.
 
void driver_tags_init (struct EmailModuleData *md)
 Initialize structures used for tags.
 
void driver_tags_cleanup (struct EmailModuleData *md)
 Deinitialize structures used for tags.
 

Detailed Description

Driver based email tags.

Authors
  • Mehdi Abaakouk
  • Richard Russon
  • Pietro Cerutti
  • Dennis Schön

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file tags.h.

Function Documentation

◆ STAILQ_HEAD()

STAILQ_HEAD ( TagList ,
Tag  )

◆ tag_free()

void tag_free ( struct Tag ** ptr)

Free a Tag.

Parameters
ptrTag to free

Definition at line 46 of file tags.c.

47{
48 if (!ptr || !*ptr)
49 return;
50
51 struct Tag *tag = *ptr;
52 FREE(&tag->name);
53 FREE(&tag->transformed);
54
55 FREE(ptr);
56}
#define FREE(x)
Free memory and set the pointer to NULL.
Definition memory.h:68
LinkedList Tag Element.
Definition tags.h:41
char * transformed
Transformed name.
Definition tags.h:43
char * name
Tag name.
Definition tags.h:42
+ Here is the caller graph for this function:

◆ tag_new()

struct Tag * tag_new ( void )

Create a new Tag.

Return values
ptrNew Tag

Definition at line 62 of file tags.c.

63{
64 return MUTT_MEM_CALLOC(1, struct Tag);
65}
#define MUTT_MEM_CALLOC(n, type)
Definition memory.h:52
+ Here is the caller graph for this function:

◆ driver_tags_free()

void driver_tags_free ( struct TagList * tl)

Free tags from a header.

Parameters
[in]tlList of tags

Free the whole tags structure

Definition at line 132 of file tags.c.

133{
134 if (!tl)
135 return;
136
137 struct Tag *tag = STAILQ_FIRST(tl);
138 struct Tag *next = NULL;
139 while (tag)
140 {
141 next = STAILQ_NEXT(tag, entries);
142 tag_free(&tag);
143 tag = next;
144 }
145 STAILQ_INIT(tl);
146}
#define STAILQ_INIT(head)
Definition queue.h:410
#define STAILQ_FIRST(head)
Definition queue.h:388
#define STAILQ_NEXT(elm, field)
Definition queue.h:439
void tag_free(struct Tag **ptr)
Free a Tag.
Definition tags.c:46
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ driver_tags_get()

void driver_tags_get ( struct TagList * tl,
struct Buffer * tags )

Get tags all tags separated by space.

Parameters
[in]tlList of tags
[out]tagsString list of tags
Note
Hidden tags are not returned. Use driver_tags_get_with_hidden() for that.

Definition at line 165 of file tags.c.

166{
167 driver_tags_getter(tl, false, false, NULL, tags);
168}
void driver_tags_getter(struct TagList *tl, bool show_hidden, bool show_transformed, const char *filter, struct Buffer *tags)
Get transformed tags separated by space.
Definition tags.c:75
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ driver_tags_get_transformed()

void driver_tags_get_transformed ( struct TagList * tl,
struct Buffer * tags )

Get transformed tags separated by space.

Parameters
[in]tlList of tags
[out]tagsString list of tags

Definition at line 153 of file tags.c.

154{
155 driver_tags_getter(tl, false, true, NULL, tags);
156}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ driver_tags_get_transformed_for()

void driver_tags_get_transformed_for ( struct TagList * tl,
const char * name,
struct Buffer * tags )

Get transformed tags for a tag name separated by space.

Parameters
[in]tlList of tags
[in]nameTag to transform
[out]tagsString list of tags
Note
Will also return hidden tags.

Definition at line 188 of file tags.c.

189{
190 driver_tags_getter(tl, true, true, name, tags);
191}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ driver_tags_get_with_hidden()

void driver_tags_get_with_hidden ( struct TagList * tl,
struct Buffer * tags )

Get all tags, also hidden ones, separated by space.

Parameters
[in]tlList of tags
[out]tagsString list of tags

Definition at line 175 of file tags.c.

176{
177 driver_tags_getter(tl, true, false, NULL, tags);
178}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ driver_tags_replace()

bool driver_tags_replace ( struct TagList * tl,
const char * tags )

Replace all tags.

Parameters
[in]tlList of tags
[in]tagsstring of all tags separated by space
Return values
falseNo changes are made
trueTags are updated

Free current tags structures and replace it by new tags

Definition at line 202 of file tags.c.

203{
204 if (!tl)
205 return false;
206
208
209 if (tags)
210 {
211 struct ListHead hsplit = STAILQ_HEAD_INITIALIZER(hsplit);
212 mutt_list_str_split(&hsplit, tags, ' ');
213 struct ListNode *np = NULL;
214 STAILQ_FOREACH(np, &hsplit, entries)
215 {
216 driver_tags_add(tl, np->data);
217 }
218 mutt_list_clear(&hsplit);
219 }
220 return true;
221}
void mutt_list_clear(struct ListHead *h)
Free a list, but NOT its strings.
Definition list.c:166
size_t mutt_list_str_split(struct ListHead *head, const char *src, char sep)
Split a string into a list using a separator char.
Definition list.c:246
#define STAILQ_HEAD_INITIALIZER(head)
Definition queue.h:324
#define STAILQ_FOREACH(var, head, field)
Definition queue.h:390
A List node for strings.
Definition list.h:37
char * data
String.
Definition list.h:38
void driver_tags_add(struct TagList *tl, char *new_tag)
Add a tag to header.
Definition tags.c:105
void driver_tags_free(struct TagList *tl)
Free tags from a header.
Definition tags.c:132
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ driver_tags_add()

void driver_tags_add ( struct TagList * tl,
char * new_tag )

Add a tag to header.

Parameters
[in]tlList of tags
[in]new_tagString representing the new tag

Add a tag to the header tags

Note
The ownership of the string is passed to the TagList structure

Definition at line 105 of file tags.c.

106{
108 ASSERT(md);
109
110 char *new_tag_transformed = mutt_hash_find(md->tag_transforms, new_tag);
111
112 struct Tag *tag = tag_new();
113 tag->name = new_tag;
114 tag->hidden = false;
115 tag->transformed = mutt_str_dup(new_tag_transformed);
116
117 /* filter out hidden tags */
118 const struct Slist *c_hidden_tags = cs_subset_slist(NeoMutt->sub, "hidden_tags");
119 if (c_hidden_tags)
120 if (mutt_list_find(&c_hidden_tags->head, new_tag))
121 tag->hidden = true;
122
123 STAILQ_INSERT_TAIL(tl, tag, entries);
124}
const struct Slist * cs_subset_slist(const struct ConfigSubset *sub, const char *name)
Get a string-list config item by name.
Definition helpers.c:242
void * mutt_hash_find(const struct HashTable *table, const char *strkey)
Find the HashElem data in a Hash Table element using a key.
Definition hash.c:364
struct ListNode * mutt_list_find(const struct ListHead *h, const char *data)
Find a string in a List.
Definition list.c:103
@ MODULE_ID_EMAIL
ModuleEmail, Email code
Definition module_api.h:64
char * mutt_str_dup(const char *str)
Copy a string, safely.
Definition string.c:257
void * neomutt_get_module_data(struct NeoMutt *n, enum ModuleId id)
Get the private data for a Module.
Definition neomutt.c:585
#define STAILQ_INSERT_TAIL(head, elm, field)
Definition queue.h:427
#define ASSERT(COND)
Definition signal2.h:59
Email private Module data.
Definition module_data.h:32
struct HashTable * tag_transforms
Hash Table: "inbox" -> "i" - Alternative tag names.
Definition module_data.h:44
Container for Accounts, Notifications.
Definition neomutt.h:41
struct ConfigSubset * sub
Inherited config items.
Definition neomutt.h:49
String list.
Definition slist.h:37
struct ListHead head
List containing values.
Definition slist.h:38
bool hidden
Tag should be hidden.
Definition tags.h:44
struct Tag * tag_new(void)
Create a new Tag.
Definition tags.c:62
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ driver_tags_init()

void driver_tags_init ( struct EmailModuleData * md)

Initialize structures used for tags.

Parameters
mdPrivate Module data

Definition at line 235 of file tags.c.

236{
239
242}
static void tags_deleter(int type, void *obj, intptr_t data)
Free our hash table data - Implements hash_hdata_free_t -.
Definition tags.c:226
struct HashTable * mutt_hash_new(size_t num_elems, HashFlags flags)
Create a new Hash Table (with string keys)
Definition hash.c:261
void mutt_hash_set_destructor(struct HashTable *table, hash_hdata_free_t fn, intptr_t fn_data)
Set the destructor for a Hash Table.
Definition hash.c:303
#define MUTT_HASH_STRDUP_KEYS
make a copy of the keys
Definition hash.h:113
#define MUTT_HASH_STRCASECMP
use strcasecmp() to compare keys
Definition hash.h:112
struct HashTable * tag_formats
Hash Table: "inbox" -> "GI" - Tag format strings.
Definition module_data.h:43
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ driver_tags_cleanup()

void driver_tags_cleanup ( struct EmailModuleData * md)

Deinitialize structures used for tags.

Parameters
mdPrivate Module data

Definition at line 248 of file tags.c.

249{
252}
void mutt_hash_free(struct HashTable **ptr)
Free a hash table.
Definition hash.c:459
+ Here is the call graph for this function:
+ Here is the caller graph for this function: