simplified edit_set_mode API, display mode in bufed

This commit is contained in:
Charlie Gordon 2013-12-27 01:54:12 +00:00
commit 7759a1467a
5 changed files with 39 additions and 24 deletions

25
bufed.c
View file

@ -66,13 +66,28 @@ static void build_bufed_list(EditState *s)
*flagp++ = '%';
}
*flagp = '\0';
eb_printf(b, " %-2s%-20s", flags, hs->items.items[i]->str);
eb_printf(b, " %-2s%-16s", flags, hs->items.items[i]->str);
if (b1) {
char path[MAX_FILENAME_SIZE];
const char *mode;
EditState *e;
/* CG: should also display mode */
eb_printf(b, " %-10s %10d %s",
b1->charset->name, b1->total_size,
if (b1->saved_data) {
mode = b1->saved_data->mode->name;
} else {
mode = "none";
for (e = qs->first_window; e != NULL; e = e->next_window) {
if (e->b == b1) {
if (e->mode) {
mode = e->mode->name;
break;
}
}
}
}
eb_printf(b, " %10d %-8s %-8s %s",
b1->total_size, b1->charset->name, mode,
make_user_path(path, sizeof(path), b1->filename));
}
eb_printf(b, "\n");
@ -191,7 +206,7 @@ static void do_list_buffers(EditState *s, int argval)
width = qs->width / 5;
e = insert_window_left(b, width, WF_MODELINE);
edit_set_mode(e, &bufed_mode, NULL);
edit_set_mode(e, &bufed_mode);
bs = e->mode_data;
if (argval != NO_ARG) {

View file

@ -557,7 +557,7 @@ void do_dired(EditState *s)
width = qs->width / 5;
e = insert_window_left(b, width, WF_MODELINE);
edit_set_mode(e, &dired_mode, NULL);
edit_set_mode(e, &dired_mode);
index = dired_find_target(e, target);
e->offset = eb_goto_pos(e->b, index + DIRED_HEADER, 0);

24
qe.c
View file

@ -1607,7 +1607,7 @@ static int reload_buffer(EditState *s, EditBuffer *b, FILE *f1)
}
}
static void edit_set_mode_file(EditState *s, ModeDef *m,
static void edit_set_mode_full(EditState *s, ModeDef *m,
ModeSavedData *saved_data, FILE *f1)
{
int size, data_count;
@ -1698,9 +1698,9 @@ static void edit_set_mode_file(EditState *s, ModeDef *m,
qe_free(&saved_data);
}
void edit_set_mode(EditState *s, ModeDef *m, ModeSavedData *saved_data)
void edit_set_mode(EditState *s, ModeDef *m)
{
edit_set_mode_file(s, m, saved_data, NULL);
edit_set_mode_full(s, m, NULL, NULL);
}
void do_set_mode(EditState *s, const char *name)
@ -1709,7 +1709,7 @@ void do_set_mode(EditState *s, const char *name)
m = find_mode(name);
if (m)
edit_set_mode(s, m, NULL);
edit_set_mode(s, m);
else
put_status(s, "No mode %s", name);
}
@ -1744,7 +1744,7 @@ void do_next_mode(EditState *s)
break;
if (!m->mode_probe
|| m->mode_probe(&probe_data) > 0) {
edit_set_mode(s, m, 0);
edit_set_mode(s, m);
break;
}
}
@ -4480,7 +4480,7 @@ void switch_to_buffer(EditState *s, EditBuffer *b)
b1->saved_data = s->mode->mode_save_data(s);
}
/* now we can close the mode */
edit_set_mode(s, NULL, NULL);
edit_set_mode(s, NULL);
}
/* now we can switch ! */
@ -4508,7 +4508,7 @@ void switch_to_buffer(EditState *s, EditBuffer *b)
mode = &text_mode; /* default mode */
/* open it ! */
edit_set_mode(s, mode, saved_data);
edit_set_mode_full(s, mode, saved_data, NULL);
}
}
@ -4829,7 +4829,7 @@ void do_completion(EditState *s)
h = (h1 * 3) / 4;
e = edit_new(b, (w1 - w) / 2, (h1 - h) / 2, w, h, WF_POPUP);
/* set list mode */
edit_set_mode(e, &list_mode, NULL);
edit_set_mode(e, &list_mode);
do_refresh(e);
completion_popup_window = e;
}
@ -5058,7 +5058,7 @@ void minibuffer_edit(const char *input, const char *prompt,
s = edit_new(b, 0, qs->screen->height - qs->status_height,
qs->screen->width, qs->status_height, 0);
/* Should insert at end of window list */
edit_set_mode(s, &minibuffer_mode, NULL);
edit_set_mode(s, &minibuffer_mode);
s->prompt = qe_strdup(prompt);
s->minibuf = 1;
s->bidir = 0;
@ -5133,7 +5133,7 @@ void show_popup(EditBuffer *b)
h = (h1 * 3) / 4;
s = edit_new(b, (w1 - w) / 2, (h1 - h) / 2, w, h, WF_POPUP);
edit_set_mode(s, &less_mode, NULL);
edit_set_mode(s, &less_mode);
s->wrap = WRAP_TRUNCATE;
popup_saved_active = qs->active_window;
@ -5459,7 +5459,7 @@ static void do_load1(EditState *s, const char *filename1,
selected_mode = probe_mode(s, S_IFREG, buf, 0, 0);
/* XXX: avoid loading file */
if (selected_mode)
edit_set_mode(s, selected_mode, NULL);
edit_set_mode(s, selected_mode);
return;
} else {
mode = st.st_mode;
@ -5490,7 +5490,7 @@ static void do_load1(EditState *s, const char *filename1,
eb_set_charset(b, detect_charset(buf, buf_size));
/* now we can set the mode */
edit_set_mode_file(s, selected_mode, NULL, f);
edit_set_mode_full(s, selected_mode, NULL, f);
do_load_qerc(s, s->b->filename);
if (access(b->filename, W_OK)) {

2
qe.h
View file

@ -1553,7 +1553,7 @@ void do_split_window(EditState *s, int horiz);
void edit_display(QEmacsState *qs);
void edit_invalidate(EditState *s);
void display_mode_line(EditState *s);
void edit_set_mode(EditState *s, ModeDef *m, ModeSavedData *saved_data);
void edit_set_mode(EditState *s, ModeDef *m);
/* loading files */
void do_exit_qemacs(EditState *s, int argval);

View file

@ -1498,7 +1498,7 @@ static void do_shell(EditState *s, int force)
return;
switch_to_buffer(s, b);
edit_set_mode(s, &shell_mode, NULL);
edit_set_mode(s, &shell_mode);
put_status(s, "Press C-o to toggle between shell/edit mode");
}
@ -1523,7 +1523,7 @@ static void do_man(EditState *s, const char *arg)
b->flags |= BF_READONLY;
switch_to_buffer(s, b);
edit_set_mode(s, &pager_mode, NULL);
edit_set_mode(s, &pager_mode);
}
static void do_ssh(EditState *s, const char *arg)
@ -1543,7 +1543,7 @@ static void do_ssh(EditState *s, const char *arg)
return;
switch_to_buffer(s, b);
edit_set_mode(s, &shell_mode, NULL);
edit_set_mode(s, &shell_mode);
put_status(s, "Press C-o to toggle between shell/edit mode");
}
@ -1707,7 +1707,7 @@ static void do_compile(EditState *e, const char *cmd)
/* XXX: try to split window if necessary */
switch_to_buffer(e, b);
/* XXX: pager_mode for colorized output, text mode should support color buffer */
edit_set_mode(e, &pager_mode, NULL);
edit_set_mode(e, &pager_mode);
set_error_offset(b, 0);
}