degesch: fix binding to our own fns from inputrc
This commit is contained in:
parent
dc248b8840
commit
a1c4a1ef3a
20
degesch.c
20
degesch.c
|
@ -186,6 +186,7 @@ free_terminal (void)
|
||||||
struct input
|
struct input
|
||||||
{
|
{
|
||||||
struct input_vtable *vtable; ///< Virtual methods
|
struct input_vtable *vtable; ///< Virtual methods
|
||||||
|
void (*add_functions) (void *); ///< Define functions for binding
|
||||||
void *user_data; ///< User data for callbacks
|
void *user_data; ///< User data for callbacks
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -461,6 +462,9 @@ input_rl_start (void *input, const char *program_name)
|
||||||
rl_attempted_completion_function = app_readline_completion;
|
rl_attempted_completion_function = app_readline_completion;
|
||||||
|
|
||||||
hard_assert (self->prompt != NULL);
|
hard_assert (self->prompt != NULL);
|
||||||
|
// The inputrc is read before any callbacks are called, so we need to
|
||||||
|
// register all functions that our user may want to map up front
|
||||||
|
self->super.add_functions (self->super.user_data);
|
||||||
rl_callback_handler_install (self->prompt, on_readline_input);
|
rl_callback_handler_install (self->prompt, on_readline_input);
|
||||||
|
|
||||||
self->prompt_shown = 1;
|
self->prompt_shown = 1;
|
||||||
|
@ -2056,6 +2060,7 @@ app_context_init (struct app_context *self)
|
||||||
free (encoding);
|
free (encoding);
|
||||||
|
|
||||||
self->input = input_new ();
|
self->input = input_new ();
|
||||||
|
self->input->user_data = self;
|
||||||
str_vector_init (&self->pending_input);
|
str_vector_init (&self->pending_input);
|
||||||
str_init (&self->input_buffer);
|
str_init (&self->input_buffer);
|
||||||
|
|
||||||
|
@ -11830,10 +11835,10 @@ on_start_paste_mode (int count, int key, void *user_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bind_common_keys (struct app_context *ctx)
|
input_add_functions (void *user_data)
|
||||||
{
|
{
|
||||||
struct input *self = ctx->input;
|
struct app_context *ctx = user_data;
|
||||||
#define XX(...) CALL_ (self, register_fn, __VA_ARGS__, ctx);
|
#define XX(...) CALL_ (ctx->input, register_fn, __VA_ARGS__, ctx);
|
||||||
XX ("previous-buffer", "Previous buffer", on_previous_buffer)
|
XX ("previous-buffer", "Previous buffer", on_previous_buffer)
|
||||||
XX ("next-buffer", "Next buffer", on_next_buffer)
|
XX ("next-buffer", "Next buffer", on_next_buffer)
|
||||||
XX ("goto-buffer", "Go to buffer", on_goto_buffer)
|
XX ("goto-buffer", "Go to buffer", on_goto_buffer)
|
||||||
|
@ -11847,7 +11852,12 @@ bind_common_keys (struct app_context *ctx)
|
||||||
XX ("insert-attribute", "mIRC formatting", on_insert_attribute)
|
XX ("insert-attribute", "mIRC formatting", on_insert_attribute)
|
||||||
XX ("start-paste-mode", "Bracketed paste", on_start_paste_mode)
|
XX ("start-paste-mode", "Bracketed paste", on_start_paste_mode)
|
||||||
#undef XX
|
#undef XX
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bind_common_keys (struct app_context *ctx)
|
||||||
|
{
|
||||||
|
struct input *self = ctx->input;
|
||||||
CALL_ (self, bind_control, 'p', "previous-buffer");
|
CALL_ (self, bind_control, 'p', "previous-buffer");
|
||||||
CALL_ (self, bind_control, 'n', "next-buffer");
|
CALL_ (self, bind_control, 'n', "next-buffer");
|
||||||
|
|
||||||
|
@ -12064,8 +12074,9 @@ app_editline_init (struct input_el *self)
|
||||||
el_wset (self->editline, EL_ADDFN,
|
el_wset (self->editline, EL_ADDFN,
|
||||||
L"complete", L"Complete word", on_editline_complete);
|
L"complete", L"Complete word", on_editline_complete);
|
||||||
|
|
||||||
bind_common_keys (g_ctx);
|
|
||||||
struct input *input = &self->super;
|
struct input *input = &self->super;
|
||||||
|
input->add_functions (input->user_data);
|
||||||
|
bind_common_keys (g_ctx);
|
||||||
|
|
||||||
// Move native history commands
|
// Move native history commands
|
||||||
CALL_ (input, bind_meta, 'p', "ed-prev-history");
|
CALL_ (input, bind_meta, 'p', "ed-prev-history");
|
||||||
|
@ -12825,6 +12836,7 @@ main (int argc, char *argv[])
|
||||||
|
|
||||||
// Initialize input so that we can switch to new buffers
|
// Initialize input so that we can switch to new buffers
|
||||||
refresh_prompt (&ctx);
|
refresh_prompt (&ctx);
|
||||||
|
ctx.input->add_functions = input_add_functions;
|
||||||
CALL_ (ctx.input, start, argv[0]);
|
CALL_ (ctx.input, start, argv[0]);
|
||||||
toggle_bracketed_paste (true);
|
toggle_bracketed_paste (true);
|
||||||
reset_autoaway (&ctx);
|
reset_autoaway (&ctx);
|
||||||
|
|
Loading…
Reference in New Issue