
The current "allow_markup" setting will simply strip any markup from the final notification, which includes formatting elements. On top of that, literal [<>&..] symbols are not quoted before are being passed onto pango in several places, resulting in stray error messages. This patch fixes allow_markup to correctly strip markup only from the incoming notification, not from the format. You might also want to treat incoming messages as literal text (supplied by un-aware programs), in which case you need to properly quote the text before it's processed by pango. A new setting is introduced, called "plain_text", which forces incoming messages to be treated literally. allow_markup/plain_text are complimentary to each other. The new rule actions allow to narrow down the handling to a specific block, achieving notification Zen. The following is done in this patch: - Fix ruleset initialization in config.def.h. - Introduce new allow_markup/plain_text actions in the rules. - Fix handling of allow_markup to strip markup from summary/body only, preserving format's markup. - Fix broken string functions (string_replace_all didn't handle recursive replacements correctly). - Fix quoting of other literal fields (icon name/appname). - Fix handling of ignore_newline as well (applied only on summary/body). - Dunstrc update with the same previous defaults.
37 lines
813 B
C
37 lines
813 B
C
/* copyright 2013 Sascha Kruse and contributors (see LICENSE for licensing information) */
|
|
#pragma once
|
|
|
|
#include <glib.h>
|
|
|
|
#include "dunst.h"
|
|
#include "notification.h"
|
|
|
|
typedef struct _rule_t {
|
|
char *name;
|
|
/* filters */
|
|
char *appname;
|
|
char *summary;
|
|
char *body;
|
|
char *icon;
|
|
char *category;
|
|
int msg_urgency;
|
|
|
|
/* actions */
|
|
int timeout;
|
|
int urgency;
|
|
int allow_markup;
|
|
int plain_text;
|
|
char *new_icon;
|
|
char *fg;
|
|
char *bg;
|
|
const char *format;
|
|
const char *script;
|
|
} rule_t;
|
|
|
|
extern GSList *rules;
|
|
|
|
void rule_init(rule_t * r);
|
|
void rule_apply(rule_t * r, notification * n);
|
|
void rule_apply_all(notification * n);
|
|
bool rule_matches_notification(rule_t * r, notification * n);
|