NeoMutt  2025-12-11-911-gd8d604
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
module.c
Go to the documentation of this file.
1
22
28
29#include "config.h"
30#include <stdbool.h>
31#include <stddef.h>
32#include "mutt/lib.h"
33#include "config/lib.h"
34#include "core/lib.h"
35#include "color/lib.h"
36#include "curs_lib.h"
37#include "module_data.h"
38#include "mutt_curses.h"
39#include "mutt_logging.h"
40#include "mutt_window.h"
41#include "rootwin.h"
42#include "terminal.h"
43
44extern struct ConfigDef GuiVars[];
45
49static void log_gui(void)
50{
52
53 const char *term = mutt_str_getenv("TERM");
54 const char *color_term = mutt_str_getenv("COLORTERM");
55 bool true_color = false;
56#ifdef NEOMUTT_DIRECT_COLORS
57 true_color = true;
58#endif
59
60 mutt_debug(LL_DEBUG1, "GUI:\n");
61 mutt_debug(LL_DEBUG1, " Curses: %s\n", curses_version());
62 mutt_debug(LL_DEBUG1, " COLORS=%d\n", COLORS);
63 mutt_debug(LL_DEBUG1, " COLOR_PAIRS=%d\n", COLOR_PAIRS);
64 mutt_debug(LL_DEBUG1, " TERM=%s\n", NONULL(term));
65 mutt_debug(LL_DEBUG1, " COLORTERM=%s\n", NONULL(color_term));
66 mutt_debug(LL_DEBUG1, " True color support: %s\n", true_color ? "YES" : "NO");
67 if (mod_data->root_window)
68 {
69 mutt_debug(LL_DEBUG1, " Screen: %dx%d\n", mod_data->root_window->state.cols,
70 mod_data->root_window->state.rows);
71 }
72}
73
77static bool gui_init(struct NeoMutt *n)
78{
79 struct GuiModuleData *mod_data = MUTT_MEM_CALLOC(1, struct GuiModuleData);
81
82 mod_data->notify = notify_new();
83 notify_set_parent(mod_data->notify, n->notify);
84
85 return true;
86}
87
91static bool gui_config_define_variables(struct NeoMutt *n, struct ConfigSet *cs)
92{
94}
95
99static bool gui_gui_init(struct NeoMutt *n)
100{
102
103 /* check whether terminal status is supported (must follow curses init) */
104 mod_data->ts_supported = mutt_ts_capability();
106 log_gui();
107
109 clear();
110
114
115 return true;
116}
117
121static void gui_gui_cleanup(struct NeoMutt *n)
122{
124 rootwin_cleanup(mod_data);
125
126 mutt_endwin();
127}
128
132static bool gui_cleanup(struct NeoMutt *n, void *data)
133{
134 struct GuiModuleData *mod_data = data;
135
136 notify_free(&mod_data->notify);
137
138 FREE(&mod_data);
139 return true;
140}
141
145const struct Module ModuleGui = {
147 "gui",
148 gui_init,
149 NULL, // config_define_types
151 NULL, // commands_register
155};
Color and attribute parsing.
@ MT_COLOR_NORMAL
Plain text.
Definition color.h:53
Convenience wrapper for the config headers.
bool cs_register_variables(const struct ConfigSet *cs, struct ConfigDef vars[])
Register a set of config items.
Definition set.c:290
Convenience wrapper for the core headers.
void mutt_endwin(void)
Shutdown curses.
Definition curs_lib.c:153
GUI miscellaneous curses (window drawing) routines.
const struct Module ModuleGui
Module for the Gui library.
Definition module.c:145
int log_disp_curses(time_t stamp, const char *file, int line, const char *function, enum LogLevel level, const char *format,...)
Display a log line in the message line - Implements log_dispatcher_t -.
#define mutt_debug(LEVEL,...)
Definition logging2.h:91
struct ConfigDef GuiVars[]
Config definitions for the Gui library.
Definition config.c:37
static bool gui_gui_init(struct NeoMutt *n)
Initialise the GUI - Implements Module::gui_init()
Definition module.c:99
static bool gui_cleanup(struct NeoMutt *n, void *data)
Clean up a Module - Implements Module::cleanup()
Definition module.c:132
static bool gui_config_define_variables(struct NeoMutt *n, struct ConfigSet *cs)
Define the Config Variables - Implements Module::config_define_variables()
Definition module.c:91
static void log_gui(void)
Log info about the GUI.
Definition module.c:49
static bool gui_init(struct NeoMutt *n)
Initialise a Module - Implements Module::init()
Definition module.c:77
static void gui_gui_cleanup(struct NeoMutt *n)
Clean up the GUI - Implements Module::gui_cleanup()
Definition module.c:121
Gui private Module data.
int log_dispatcher_t MuttLogger
@ LL_DEBUG1
Log at debug level 1.
Definition logging2.h:45
#define FREE(x)
Free memory and set the pointer to NULL.
Definition memory.h:68
#define MUTT_MEM_CALLOC(n, type)
Definition memory.h:52
@ MODULE_ID_GUI
ModuleGui, Graphical code
Definition module_api.h:45
Convenience wrapper for the library headers.
void log_queue_set_max_size(int size)
Set a upper limit for the queue length.
Definition logging.c:319
void log_queue_flush(log_dispatcher_t disp)
Replay the log queue.
Definition logging.c:353
struct Notify * notify_new(void)
Create a new notifications handler.
Definition notify.c:62
void notify_set_parent(struct Notify *notify, struct Notify *parent)
Set the parent notification handler.
Definition notify.c:95
void notify_free(struct Notify **ptr)
Free a notification handler.
Definition notify.c:75
const char * mutt_str_getenv(const char *name)
Get an environment variable.
Definition string.c:731
const struct AttrColor * mutt_curses_set_color_by_id(enum ColorId cid)
Set the colour and attributes by the Colour ID.
Definition mutt_curses.c:79
Define wrapper functions around Curses.
void mutt_resize_screen(void)
Update NeoMutt's opinion about the window size.
Definition resize.c:76
NeoMutt Logging.
Window management.
void neomutt_set_module_data(struct NeoMutt *n, enum ModuleId id, void *data)
Set the private data for a Module.
Definition neomutt.c:677
void * neomutt_get_module_data(struct NeoMutt *n, enum ModuleId id)
Get the private data for a Module.
Definition neomutt.c:663
void rootwin_cleanup(struct GuiModuleData *mod_data)
Free all the default Windows.
Definition rootwin.c:211
Root Window.
#define NONULL(x)
Definition string2.h:44
Container for lots of config items.
Definition set.h:251
Gui private Module data.
Definition module_data.h:32
bool ts_supported
Terminal Setting is supported.
Definition module_data.h:43
struct MuttWindow * root_window
Parent of all Windows.
Definition module_data.h:41
struct Notify * notify
Notifications.
Definition module_data.h:33
struct WindowState state
Current state of the Window.
Container for Accounts, Notifications.
Definition neomutt.h:41
struct Notify * notify
Notifications handler.
Definition neomutt.h:45
short cols
Number of columns, can be MUTT_WIN_SIZE_UNLIMITED.
Definition mutt_window.h:60
short rows
Number of rows, can be MUTT_WIN_SIZE_UNLIMITED.
Definition mutt_window.h:61
bool mutt_ts_capability(void)
Check terminal capabilities.
Definition terminal.c:81
Set the terminal title/icon.