wlt: add --term, --login, --palette and --sb-size
These terminal options are simply copied from kmscon and behave the same way. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
parent
e5e81a0b4c
commit
038aac7fd5
@ -28,6 +28,7 @@
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <paths.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@ -197,6 +198,7 @@ static void print_help()
|
||||
"Usage:\n"
|
||||
"\t%1$s [options]\n"
|
||||
"\t%1$s -h [options]\n"
|
||||
"\t%1$s -l [options] -- /bin/sh [sh-arguments]\n"
|
||||
"\n"
|
||||
"You can prefix boolean options with \"no-\" to negate it. If an argument is\n"
|
||||
"given multiple times, only the last argument matters if not otherwise stated.\n"
|
||||
@ -207,6 +209,22 @@ static void print_help()
|
||||
"\t --debug [off] Enable debug mode\n"
|
||||
"\t --silent [off] Suppress notices and warnings\n"
|
||||
"\n"
|
||||
"Terminal Options:\n"
|
||||
"\t-l, --login [/bin/sh]\n"
|
||||
"\t Start the given login process instead\n"
|
||||
"\t of the default process; all arguments\n"
|
||||
"\t following '--' will be be parsed as\n"
|
||||
"\t argv to this process. No more options\n"
|
||||
"\t after '--' will be parsed so use it at\n"
|
||||
"\t the end of the argument string\n"
|
||||
"\t-t, --term <TERM> [xterm-256color]\n"
|
||||
"\t Value of the TERM environment variable\n"
|
||||
"\t for the child process\n"
|
||||
"\t --palette <name> [default]\n"
|
||||
"\t Select the used color palette\n"
|
||||
"\t --sb-size <num> [1000]\n"
|
||||
"\t Size of the scrollback-buffer in lines\n"
|
||||
"\n"
|
||||
"Keyboard Shortcuts and Grabs:\n"
|
||||
"\t --grab-scroll-up <grab> [<Shift>Up]\n"
|
||||
"\t Shortcut to scroll up\n"
|
||||
@ -258,6 +276,31 @@ static int aftercheck_help(struct conf_option *opt, int argc, char **argv,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char *def_argv[] = { NULL, "-i", NULL };
|
||||
|
||||
static int aftercheck_login(struct conf_option *opt, int argc, char **argv,
|
||||
int idx)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* parse "--login [...] -- args" arguments */
|
||||
if (wlt_conf.login) {
|
||||
if (idx >= argc) {
|
||||
fprintf(stderr, "Arguments for --login missing\n");
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
wlt_conf.argv = &argv[idx];
|
||||
ret = argc - idx;
|
||||
} else {
|
||||
def_argv[0] = getenv("SHELL") ? : _PATH_BSHELL;
|
||||
wlt_conf.argv = def_argv;
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct conf_grab def_grab_scroll_up = {
|
||||
.mods = SHL_SHIFT_MASK,
|
||||
.keysym = XKB_KEY_Up,
|
||||
@ -283,10 +326,17 @@ struct conf_option options[] = {
|
||||
CONF_OPTION_BOOL('v', "verbose", NULL, &wlt_conf.verbose, false),
|
||||
CONF_OPTION_BOOL(0, "debug", aftercheck_debug, &wlt_conf.debug, false),
|
||||
CONF_OPTION_BOOL(0, "silent", NULL, &wlt_conf.silent, false),
|
||||
|
||||
CONF_OPTION_BOOL('l', "login", aftercheck_login, &wlt_conf.login, false),
|
||||
CONF_OPTION_STRING('t', "term", NULL, &wlt_conf.term, "xterm-256color"),
|
||||
CONF_OPTION_STRING(0, "palette", NULL, &wlt_conf.palette, NULL),
|
||||
CONF_OPTION_UINT(0, "sb-size", NULL, &wlt_conf.sb_size, 1000),
|
||||
|
||||
CONF_OPTION_GRAB(0, "grab-scroll-up", NULL, &wlt_conf.grab_scroll_up, &def_grab_scroll_up),
|
||||
CONF_OPTION_GRAB(0, "grab-scroll-down", NULL, &wlt_conf.grab_scroll_down, &def_grab_scroll_down),
|
||||
CONF_OPTION_GRAB(0, "grab-page-up", NULL, &wlt_conf.grab_page_up, &def_grab_page_up),
|
||||
CONF_OPTION_GRAB(0, "grab-page-down", NULL, &wlt_conf.grab_page_down, &def_grab_page_down),
|
||||
|
||||
CONF_OPTION_STRING(0, "font-engine", NULL, &wlt_conf.font_engine, "pango"),
|
||||
CONF_OPTION_UINT(0, "font-size", NULL, &wlt_conf.font_size, 12),
|
||||
CONF_OPTION_STRING(0, "font-name", NULL, &wlt_conf.font_name, "monospace"),
|
||||
|
@ -46,6 +46,17 @@ struct wlt_conf_t {
|
||||
/* disable notices and warnings */
|
||||
bool silent;
|
||||
|
||||
/* custom login process */
|
||||
bool login;
|
||||
/* argv for login process */
|
||||
char **argv;
|
||||
/* TERM value */
|
||||
char *term;
|
||||
/* color palette */
|
||||
char *palette;
|
||||
/* terminal scroll-back buffer size */
|
||||
unsigned int sb_size;
|
||||
|
||||
/* scroll-up grab */
|
||||
struct conf_grab *grab_scroll_up;
|
||||
/* scroll-down grab */
|
||||
|
@ -364,12 +364,14 @@ int wlt_terminal_new(struct wlt_terminal **out, struct wlt_window *wnd)
|
||||
log_error("cannot create tsm-screen object");
|
||||
goto err_font;
|
||||
}
|
||||
tsm_screen_set_max_sb(term->scr, wlt_conf.sb_size);
|
||||
|
||||
ret = tsm_vte_new(&term->vte, term->scr, vte_event, term, log_llog);
|
||||
if (ret) {
|
||||
log_error("cannot create tsm-vte object");
|
||||
goto err_scr;
|
||||
}
|
||||
tsm_vte_set_palette(term->vte, wlt_conf.palette);
|
||||
|
||||
ret = kmscon_pty_new(&term->pty, pty_input, term);
|
||||
if (ret) {
|
||||
@ -378,6 +380,14 @@ int wlt_terminal_new(struct wlt_terminal **out, struct wlt_window *wnd)
|
||||
}
|
||||
kmscon_pty_set_term(term->pty, "xterm-256color");
|
||||
|
||||
ret = kmscon_pty_set_term(term->pty, wlt_conf.term);
|
||||
if (ret)
|
||||
goto err_pty;
|
||||
|
||||
ret = kmscon_pty_set_argv(term->pty, wlt_conf.argv);
|
||||
if (ret)
|
||||
goto err_pty;
|
||||
|
||||
ret = ev_eloop_new_fd(term->eloop, &term->pty_fd,
|
||||
kmscon_pty_get_fd(term->pty),
|
||||
EV_READABLE, pty_event, term);
|
||||
|
Loading…
x
Reference in New Issue
Block a user