fix bugs in mode initializations

* mode initializers should call text-mode-init to register ccallback
  for s->offset and s->top_offset, and other generic stuff.
* this is error prone, should simplify this with base_mode property and
  keep unmapped windows lingering to get rid of ModeSavedData handlers
This commit is contained in:
Charlie Gordon 2014-01-15 15:54:27 +00:00
commit 51477bbc8b
6 changed files with 17 additions and 27 deletions

11
hex.c
View file

@ -153,11 +153,8 @@ static int binary_mode_init(EditState *s, ModeSavedData *saved_data)
QEFont *font;
QEStyleDef style;
int num_width;
int ret;
ret = text_mode_init(s, saved_data);
if (ret)
return ret;
text_mode_init(s, saved_data);
/* get typical number width */
get_style(s, &style, s->default_style);
@ -178,11 +175,7 @@ static int binary_mode_init(EditState *s, ModeSavedData *saved_data)
static int hex_mode_init(EditState *s, ModeSavedData *saved_data)
{
int ret;
ret = text_mode_init(s, saved_data);
if (ret)
return ret;
text_mode_init(s, saved_data);
s->disp_width = 16;
s->hex_mode = 1;

2
html.c
View file

@ -786,6 +786,8 @@ int gxml_mode_init(EditState *s,
{
HTMLState *hs = s->mode_data;
/* XXX: should register callbacks for s->offset and s->top_offset? */
if (!saved_data) {
memset(s, 0, SAVED_DATA_SIZE);
s->insert = 1;

7
list.c
View file

@ -81,22 +81,19 @@ void list_toggle_selection(EditState *s)
static int list_mode_init(EditState *s, __unused__ ModeSavedData *saved_data)
{
text_mode_init(s, saved_data);
s->wrap = WRAP_TRUNCATE;
s->get_colorized_line = list_get_colorized_line;
return 0;
}
static void list_mode_close(__unused__ EditState *s)
{
}
static int list_init(void)
{
memcpy(&list_mode, &text_mode, sizeof(ModeDef));
list_mode.name = "list";
list_mode.mode_probe = NULL;
list_mode.mode_init = list_mode_init;
list_mode.mode_close = list_mode_close;
list_mode.mode_flags = MODEF_NOCMD;
qe_register_mode(&list_mode);

7
mpeg.c
View file

@ -140,14 +140,12 @@ static int mpeg_backward_offset(EditState *s, int offset)
static int mpeg_mode_init(EditState *s, ModeSavedData *saved_data)
{
int ret;
ret = text_mode_init(s, saved_data);
if (ret)
return ret;
text_mode_init(s, saved_data);
s->hex_mode = 1;
s->hex_nibble = 0;
s->wrap = WRAP_TRUNCATE;
return 0;
}
@ -167,7 +165,6 @@ static ModeDef mpeg_mode = {
.name = "mpeg",
.mode_probe = mpeg_mode_probe,
.mode_init = mpeg_mode_init,
.mode_close = NULL,
.text_display = mpeg_display,
.text_backward_offset = mpeg_backward_offset,
.write_char = hex_write_char,

11
shell.c
View file

@ -1654,16 +1654,19 @@ static void shell_write_char(EditState *e, int c)
} else {
/* Should dispatch as in fundamental mode */
switch (c) {
case 4:
case KEY_CTRL('d'):
do_delete_char(e, NO_ARG);
break;
// Do not do this: it is useless and causes infinite recursion
//case 9:
// do_tab(e, 1);
// break;
case 11:
case KEY_CTRL('k'):
do_kill_line(e, 1);
break;
case KEY_CTRL('y'):
do_yank(e);
break;
case KEY_BS:
case KEY_DEL:
do_backspace(e, NO_ARG);
@ -1895,9 +1898,9 @@ static CmdDef shell_global_commands[] = {
static int shell_mode_init(EditState *s, __unused__ ModeSavedData *saved_data)
{
text_mode_init(s, saved_data);
s->tab_size = 8;
s->wrap = WRAP_TRUNCATE;
set_colorize_func(s, NULL);
s->get_colorized_line = shell_get_colorized_line;
s->interactive = 1;
return 0;
@ -1905,9 +1908,9 @@ static int shell_mode_init(EditState *s, __unused__ ModeSavedData *saved_data)
static int pager_mode_init(EditState *s, __unused__ ModeSavedData *saved_data)
{
text_mode_init(s, saved_data);
s->tab_size = 8;
s->wrap = WRAP_TRUNCATE;
set_colorize_func(s, NULL);
s->get_colorized_line = shell_get_colorized_line;
return 0;
}

View file

@ -23,11 +23,9 @@
static int unihex_mode_init(EditState *s, ModeSavedData *saved_data)
{
int ret, c, maxc, offset, max_offset;
int c, maxc, offset, max_offset;
ret = text_mode_init(s, saved_data);
if (ret)
return ret;
text_mode_init(s, saved_data);
/* Compute max width of character in hex dump (limit to first 64K) */
maxc = 0xFF;