NeoMutt  2022-04-29-249-gaae397
Teaching an old dog new tricks
DOXYGEN
helpbar.c File Reference

Help Bar. More...

#include "config.h"
#include <stddef.h>
#include <stdbool.h>
#include <stdio.h>
#include "private.h"
#include "mutt/lib.h"
#include "config/lib.h"
#include "core/lib.h"
#include "gui/lib.h"
#include "lib.h"
#include "color/lib.h"
#include "menu/lib.h"
#include "keymap.h"
+ Include dependency graph for helpbar.c:

Go to the source code of this file.

Functions

static bool make_help (char *buf, size_t buflen, const char *txt, enum MenuType menu, int op)
 Create one entry for the Help Bar. More...
 
static char * compile_help (char *buf, size_t buflen, enum MenuType menu, const struct Mapping *items)
 Create the text for the help menu. More...
 
static int helpbar_recalc (struct MuttWindow *win)
 Recalculate the display of the Help Bar - Implements MuttWindow::recalc() -. More...
 
static int helpbar_repaint (struct MuttWindow *win)
 Redraw the Help Bar - Implements MuttWindow::repaint() -. More...
 
static int helpbar_binding_observer (struct NotifyCallback *nc)
 Notification that a Key Binding has changed - Implements observer_t -. More...
 
static int helpbar_color_observer (struct NotifyCallback *nc)
 Notification that a Color has changed - Implements observer_t -. More...
 
static int helpbar_config_observer (struct NotifyCallback *nc)
 Notification that a Config Variable has changed - Implements observer_t -. More...
 
static int helpbar_window_observer (struct NotifyCallback *nc)
 Notification that a Window has changed - Implements observer_t -. More...
 
struct MuttWindowhelpbar_new (void)
 Create the Help Bar Window. More...
 

Detailed Description

Help Bar.

Authors
  • Richard Russon

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 helpbar.c.

Function Documentation

◆ make_help()

static bool make_help ( char *  buf,
size_t  buflen,
const char *  txt,
enum MenuType  menu,
int  op 
)
static

Create one entry for the Help Bar.

Parameters
bufBuffer for the result
buflenLength of buffer
txtText part, e.g. "delete"
menuCurrent Menu, e.g. MENU_PAGER
opOperation, e.g. OP_DELETE
Return values
trueThe keybinding exists

This will return something like: "d:delete"

Definition at line 92 of file helpbar.c.

93{
94 char tmp[128] = { 0 };
95
96 if (km_expand_key(tmp, sizeof(tmp), km_find_func(menu, op)) ||
97 km_expand_key(tmp, sizeof(tmp), km_find_func(MENU_GENERIC, op)))
98 {
99 snprintf(buf, buflen, "%s:%s", tmp, txt);
100 return true;
101 }
102
103 buf[0] = '\0';
104 return false;
105}
struct Keymap * km_find_func(enum MenuType mtype, int func)
Find a function's mapping in a Menu.
Definition: keymap.c:956
int km_expand_key(char *s, size_t len, struct Keymap *map)
Get the key string bound to a Keymap.
Definition: keymap.c:928
@ MENU_GENERIC
Generic selection list.
Definition: type.h:45
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ compile_help()

static char * compile_help ( char *  buf,
size_t  buflen,
enum MenuType  menu,
const struct Mapping items 
)
static

Create the text for the help menu.

Parameters
bufBuffer for the result
buflenLength of buffer
menuCurrent Menu, e.g. MENU_PAGER
itemsMap of functions to display in the Help Bar
Return values
ptrBuffer containing result

Definition at line 115 of file helpbar.c.

117{
118 char *pbuf = buf;
119
120 for (int i = 0; items[i].name && (buflen > 2); i++)
121 {
122 if (!make_help(pbuf, buflen, _(items[i].name), menu, items[i].value))
123 continue;
124
125 const size_t len = mutt_str_len(pbuf);
126 pbuf += len;
127 buflen -= len;
128
129 *pbuf++ = ' ';
130 *pbuf++ = ' ';
131 buflen -= 2;
132 }
133 return buf;
134}
static bool make_help(char *buf, size_t buflen, const char *txt, enum MenuType menu, int op)
Create one entry for the Help Bar.
Definition: helpbar.c:92
#define _(a)
Definition: message.h:28
size_t mutt_str_len(const char *a)
Calculate the length of a string, safely.
Definition: string.c:567
static unsigned char * pbuf
Cached PGP data packet.
Definition: pgppacket.c:38
const char * name
String value.
Definition: mapping.h:33
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ helpbar_new()

struct MuttWindow * helpbar_new ( void  )

Create the Help Bar Window.

Return values
ptrNew Window
Note
The Window can be freed with mutt_window_free().

Definition at line 333 of file helpbar.c.

334{
338 win->state.visible = cs_subset_bool(NeoMutt->sub, "help");
339
340 win->recalc = helpbar_recalc;
342
343 win->wdata = helpbar_wdata_new();
345
350 return win;
351}
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
Definition: helpers.c:73
static int helpbar_color_observer(struct NotifyCallback *nc)
Notification that a Color has changed - Implements observer_t -.
Definition: helpbar.c:229
static int helpbar_binding_observer(struct NotifyCallback *nc)
Notification that a Key Binding has changed - Implements observer_t -.
Definition: helpbar.c:200
static int helpbar_window_observer(struct NotifyCallback *nc)
Notification that a Window has changed - Implements observer_t -.
Definition: helpbar.c:286
static int helpbar_config_observer(struct NotifyCallback *nc)
Notification that a Config Variable has changed - Implements observer_t -.
Definition: helpbar.c:258
static int helpbar_recalc(struct MuttWindow *win)
Recalculate the display of the Help Bar - Implements MuttWindow::recalc() -.
Definition: helpbar.c:142
static int helpbar_repaint(struct MuttWindow *win)
Redraw the Help Bar - Implements MuttWindow::repaint() -.
Definition: helpbar.c:179
void helpbar_wdata_free(struct MuttWindow *win, void **ptr)
Free Helpbar Window data - Implements MuttWindow::wdata_free() -.
Definition: wdata.c:47
struct HelpbarWindowData * helpbar_wdata_new(void)
Create new Window data for the Helpbar.
Definition: wdata.c:39
bool notify_observer_add(struct Notify *notify, enum NotifyType type, observer_t callback, void *global_data)
Add an observer to an object.
Definition: notify.c:189
struct MuttWindow * mutt_window_new(enum WindowType type, enum MuttWindowOrientation orient, enum MuttWindowSize size, int cols, int rows)
Create a new Window.
Definition: mutt_window.c:181
@ WT_HELP_BAR
Help Bar containing list of useful key bindings.
Definition: mutt_window.h:96
@ MUTT_WIN_ORIENT_VERTICAL
Window uses all available vertical space.
Definition: mutt_window.h:38
#define MUTT_WIN_SIZE_UNLIMITED
Use as much space as possible.
Definition: mutt_window.h:52
@ MUTT_WIN_SIZE_FIXED
Window has a fixed size.
Definition: mutt_window.h:47
@ NT_WINDOW
MuttWindow has changed, NotifyWindow, EventWindow.
Definition: notify_type.h:55
@ NT_CONFIG
Config has changed, NotifyConfig, EventConfig.
Definition: notify_type.h:43
@ NT_COLOR
Colour has changed, NotifyColor, EventColor.
Definition: notify_type.h:41
@ NT_BINDING
Key binding has changed, NotifyBinding, EventBinding.
Definition: notify_type.h:40
struct MuttWindow * RootWindow
Parent of all Windows.
Definition: rootwin.c:104
int(* repaint)(struct MuttWindow *win)
Definition: mutt_window.h:182
struct WindowState state
Current state of the Window.
Definition: mutt_window.h:127
void * wdata
Private data.
Definition: mutt_window.h:145
struct Notify * notify
Notifications: NotifyWindow, EventWindow.
Definition: mutt_window.h:138
int(* recalc)(struct MuttWindow *win)
Definition: mutt_window.h:171
void(* wdata_free)(struct MuttWindow *win, void **ptr)
Definition: mutt_window.h:160
Container for Accounts, Notifications.
Definition: neomutt.h:37
struct Notify * notify
Notifications handler.
Definition: neomutt.h:38
struct ConfigSubset * sub
Inherited config items.
Definition: neomutt.h:39
bool visible
Window is visible.
Definition: mutt_window.h:59
+ Here is the call graph for this function:
+ Here is the caller graph for this function: