コード例 #1
0
ファイル: vis-prompt.c プロジェクト: 5paceToast/vis
static const char *prompt_esc(Vis *vis, const char *keys, const Arg *arg) {
	Win *prompt = vis->win;
	if (view_cursors_multiple(prompt->view)) {
		view_cursors_clear(prompt->view);
	} else {
		prompt_restore(prompt);
		prompt_hide(prompt);
	}
	return keys;
}
コード例 #2
0
ファイル: vis-prompt.c プロジェクト: 5paceToast/vis
static const char *prompt_enter(Vis *vis, const char *keys, const Arg *arg) {
	Win *prompt = vis->win;
	View *view = prompt->view;
	Text *txt = prompt->file->text;
	Win *win = prompt->parent;
	char *cmd = NULL;

	Filerange range = view_selection_get(view);
	if (!text_range_valid(&range))
		range = text_object_line(txt, view_cursor_get(view));
	if (text_range_valid(&range))
		cmd = text_bytes_alloc0(txt, range.start, text_range_size(&range));

	if (!win || !cmd) {
		vis_info_show(vis, "Prompt window invalid\n");
		prompt_restore(prompt);
		prompt_hide(prompt);
		free(cmd);
		return keys;
	}

	size_t len = strlen(cmd);
	if (len > 0 && cmd[len-1] == '\n')
		cmd[len-1] = '\0';

	bool lastline = (range.end == text_size(txt));

	prompt_restore(prompt);
	if (vis_prompt_cmd(vis, cmd)) {
		prompt_hide(prompt);
		if (!lastline) {
			text_delete(txt, range.start, text_range_size(&range));
			text_appendf(txt, "%s\n", cmd);
		}
	} else {
		vis->win = prompt;
		vis->mode = &vis_modes[VIS_MODE_INSERT];
	}
	free(cmd);
	vis_draw(vis);
	return keys;
}
コード例 #3
0
ファイル: prompt.c プロジェクト: deters/openbox
static void prompt_run_callback(ObPrompt *self, gint result)
{
    prompt_ref(self);
    if (self->func) {
        gboolean clean = self->func(self, self->focus->result, self->data);
        if (clean && self->cleanup)
            self->cleanup(self, self->data);
    }
    prompt_hide(self);
    prompt_unref(self);
}
コード例 #4
0
ファイル: vis-prompt.c プロジェクト: 5paceToast/vis
static const char *prompt_backspace(Vis *vis, const char *keys, const Arg *arg) {
	Win *prompt = vis->win;
	Text *txt = prompt->file->text;
	size_t size = text_size(txt);
	size_t pos = view_cursor_get(prompt->view);
	char c;
	if (pos == size && (pos == 1 || (size >= 2 && text_byte_get(txt, size-2, &c) && c == '\n'))) {
		prompt_restore(prompt);
		prompt_hide(prompt);
	} else {
		vis_operator(vis, VIS_OP_DELETE);
		vis_motion(vis, VIS_MOVE_CHAR_PREV);
	}
	return keys;
}
コード例 #5
0
ファイル: prompt.c プロジェクト: deters/openbox
void prompt_unref(ObPrompt *self)
{
    if (self && --self->ref == 0) {
        gint i;

        if (self->mapped)
            prompt_hide(self);

        prompt_list = g_list_remove(prompt_list, self);

        obt_keyboard_context_unref(self->ic);

        for (i = 0; i < self->n_buttons; ++i) {
            window_remove(self->button[i].window);
            XDestroyWindow(obt_display, self->button[i].window);
        }

        XDestroyWindow(obt_display, self->msg.window);
        XDestroyWindow(obt_display, self->super.window);
        g_slice_free(ObPrompt, self);
    }
}