*/
#include <errno.h>
+#include <paths.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
"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"
"\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"
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,
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"),
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) {
}
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);