NeoMutt  2021-02-05-666-ge300cd
Teaching an old dog new tricks
DOXYGEN
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 driver_tags_free (struct TagList *list)
 Free tags from a header. More...
 
char * driver_tags_get (struct TagList *list)
 Get tags. More...
 
char * driver_tags_get_transformed (struct TagList *list)
 Get transformed tags. More...
 
char * driver_tags_get_transformed_for (struct TagList *list, const char *name)
 Get transformed tag for a tag name from a header. More...
 
char * driver_tags_get_with_hidden (struct TagList *list)
 Get tags with hiddens. More...
 
bool driver_tags_replace (struct TagList *list, char *tags)
 Replace all tags. More...
 
void driver_tags_add (struct TagList *list, char *tag)
 Add a tag to header. More...
 

Variables

struct HashTableTagTransforms
 Lookup table of alternative tag names. More...
 

Detailed Description

Driver based email tags.

Authors
  • Mehdi Abaakouk

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   
)

◆ driver_tags_free()

void driver_tags_free ( struct TagList *  list)

Free tags from a header.

Parameters
[in]listList of tags

Free the whole tags structure

Definition at line 107 of file tags.c.

108 {
109  if (!list)
110  return;
111 
112  struct Tag *np = STAILQ_FIRST(list);
113  struct Tag *next = NULL;
114  while (np)
115  {
116  next = STAILQ_NEXT(np, entries);
117  FREE(&np->name);
118  FREE(&np->transformed);
119  FREE(&np);
120  np = next;
121  }
122  STAILQ_INIT(list);
123 }
LinkedList Tag Element.
Definition: tags.h:37
char * name
Tag name.
Definition: tags.h:39
#define STAILQ_INIT(head)
Definition: queue.h:372
#define STAILQ_NEXT(elm, field)
Definition: queue.h:400
#define FREE(x)
Definition: memory.h:40
char * transformed
Transformed name.
Definition: tags.h:40
#define STAILQ_FIRST(head)
Definition: queue.h:350
+ Here is the caller graph for this function:

◆ driver_tags_get()

char* driver_tags_get ( struct TagList *  list)

Get tags.

Parameters
[in]listList of tags
Return values
ptrString list of tags

Return a new allocated string containing all tags separated by space

Definition at line 145 of file tags.c.

146 {
147  return driver_tags_getter(list, false, false, NULL);
148 }
static char * driver_tags_getter(struct TagList *head, bool show_hidden, bool show_transformed, const char *filter)
Get transformed tags.
Definition: tags.c:49
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ driver_tags_get_transformed()

char* driver_tags_get_transformed ( struct TagList *  list)

Get transformed tags.

Parameters
[in]listList of tags
Return values
ptrString list of tags

Return a new allocated string containing all tags separated by space with transformation

Definition at line 133 of file tags.c.

134 {
135  return driver_tags_getter(list, false, true, NULL);
136 }
static char * driver_tags_getter(struct TagList *head, bool show_hidden, bool show_transformed, const char *filter)
Get transformed tags.
Definition: tags.c:49
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ driver_tags_get_transformed_for()

char* driver_tags_get_transformed_for ( struct TagList *  head,
const char *  name 
)

Get transformed tag for a tag name from a header.

Parameters
[in]headList of tags
[in]nameTag to transform
Return values
ptrString tag

Return a new allocated string containing all tags separated by space even the hiddens.

Definition at line 172 of file tags.c.

173 {
174  return driver_tags_getter(head, true, true, name);
175 }
char * name
Tag name.
Definition: tags.h:39
static char * driver_tags_getter(struct TagList *head, bool show_hidden, bool show_transformed, const char *filter)
Get transformed tags.
Definition: tags.c:49
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ driver_tags_get_with_hidden()

char* driver_tags_get_with_hidden ( struct TagList *  list)

Get tags with hiddens.

Parameters
[in]listList of tags
Return values
ptrString list of tags

Return a new allocated string containing all tags separated by space even the hiddens.

Definition at line 158 of file tags.c.

159 {
160  return driver_tags_getter(list, true, false, NULL);
161 }
static char * driver_tags_getter(struct TagList *head, bool show_hidden, bool show_transformed, const char *filter)
Get transformed tags.
Definition: tags.c:49
+ 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 *  head,
char *  tags 
)

Replace all tags.

Parameters
[in]headList 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 186 of file tags.c.

187 {
188  if (!head)
189  return false;
190 
191  driver_tags_free(head);
192 
193  if (tags)
194  {
195  struct ListHead hsplit = STAILQ_HEAD_INITIALIZER(hsplit);
196  mutt_list_str_split(&hsplit, tags, ' ');
197  struct ListNode *np = NULL;
198  STAILQ_FOREACH(np, &hsplit, entries)
199  {
200  driver_tags_add(head, np->data);
201  }
202  mutt_list_clear(&hsplit);
203  }
204  return true;
205 }
void driver_tags_add(struct TagList *list, char *new_tag)
Add a tag to header.
Definition: tags.c:81
void driver_tags_free(struct TagList *list)
Free tags from a header.
Definition: tags.c:107
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:247
#define STAILQ_FOREACH(var, head, field)
Definition: queue.h:352
char * data
String.
Definition: list.h:36
#define STAILQ_HEAD_INITIALIZER(head)
Definition: queue.h:324
void mutt_list_clear(struct ListHead *h)
Free a list, but NOT its strings.
Definition: list.c:167
A List node for strings.
Definition: list.h:34
+ 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 *  list,
char *  new_tag 
)

Add a tag to header.

Parameters
[in]listList 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 81 of file tags.c.

82 {
83  char *new_tag_transformed = mutt_hash_find(TagTransforms, new_tag);
84 
85  struct Tag *tn = mutt_mem_calloc(1, sizeof(struct Tag));
86  tn->name = new_tag;
87  tn->hidden = false;
88  if (new_tag_transformed)
89  tn->transformed = mutt_str_dup(new_tag_transformed);
90 
91  /* filter out hidden tags */
92  const struct Slist *c_hidden_tags =
93  cs_subset_slist(NeoMutt->sub, "hidden_tags");
94  if (c_hidden_tags)
95  if (mutt_list_find(&c_hidden_tags->head, new_tag))
96  tn->hidden = true;
97 
98  STAILQ_INSERT_TAIL(list, tn, entries);
99 }
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:354
void * mutt_mem_calloc(size_t nmemb, size_t size)
Allocate zeroed memory on the heap.
Definition: memory.c:50
LinkedList Tag Element.
Definition: tags.h:37
char * name
Tag name.
Definition: tags.h:39
char * mutt_str_dup(const char *str)
Copy a string, safely.
Definition: string.c:370
#define STAILQ_INSERT_TAIL(head, elm, field)
Definition: queue.h:389
String list.
Definition: slist.h:46
Container for Accounts, Notifications.
Definition: neomutt.h:36
struct ListHead head
Definition: slist.h:48
struct ListNode * mutt_list_find(const struct ListHead *h, const char *data)
Find a string in a List.
Definition: list.c:102
bool hidden
Tag should be hidden.
Definition: tags.h:41
struct HashTable * TagTransforms
Lookup table of alternative tag names.
Definition: tags.c:37
const struct Slist * cs_subset_slist(const struct ConfigSubset *sub, const char *name)
Get a string-list config item by name.
Definition: helpers.c:268
struct ConfigSubset * sub
Inherited config items.
Definition: neomutt.h:39
char * transformed
Transformed name.
Definition: tags.h:40
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ TagTransforms

struct HashTable* TagTransforms

Lookup table of alternative tag names.

Definition at line 37 of file tags.c.