mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-12 05:34:01 -04:00
Merge branch 'master' into scroll-damage-performance
This commit is contained in:
commit
598ac4bcd0
14 changed files with 138 additions and 10 deletions
|
|
@ -12,6 +12,8 @@
|
||||||
|
|
||||||
* User configurable key- and mouse bindings. See `man 5 foot` and the
|
* User configurable key- and mouse bindings. See `man 5 foot` and the
|
||||||
example `footrc` (https://codeberg.org/dnkl/foot/issues/1)
|
example `footrc` (https://codeberg.org/dnkl/foot/issues/1)
|
||||||
|
* **startup-mode** option to `footrc`, that lets you control the
|
||||||
|
initial window mode: _windowed_, _maximized_ or _fullscreen_.
|
||||||
|
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
|
||||||
28
client.c
28
client.c
|
|
@ -33,6 +33,8 @@ print_usage(const char *prog_name)
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("Options:\n");
|
printf("Options:\n");
|
||||||
printf(" -t,--term=TERM value to set the environment variable TERM to (foot)\n"
|
printf(" -t,--term=TERM value to set the environment variable TERM to (foot)\n"
|
||||||
|
" --maximized start in maximized mode\n"
|
||||||
|
" --fullscreen start in fullscreen mode\n"
|
||||||
" --login-shell start shell as a login shell\n"
|
" --login-shell start shell as a login shell\n"
|
||||||
" -s,--server-socket=PATH path to the server UNIX domain socket (default=$XDG_RUNTIME_DIR/foot-$XDG_SESSION_ID.sock)\n"
|
" -s,--server-socket=PATH path to the server UNIX domain socket (default=$XDG_RUNTIME_DIR/foot-$XDG_SESSION_ID.sock)\n"
|
||||||
" -l,--log-colorize=[never|always|auto] enable/disable colorization of log output on stderr\n"
|
" -l,--log-colorize=[never|always|auto] enable/disable colorization of log output on stderr\n"
|
||||||
|
|
@ -48,6 +50,8 @@ main(int argc, char *const *argv)
|
||||||
|
|
||||||
static const struct option longopts[] = {
|
static const struct option longopts[] = {
|
||||||
{"term", required_argument, 0, 't'},
|
{"term", required_argument, 0, 't'},
|
||||||
|
{"maximized", no_argument, 0, 'm'},
|
||||||
|
{"fullscreen", no_argument, 0, 'F'},
|
||||||
{"login-shell", no_argument, 0, 'L'},
|
{"login-shell", no_argument, 0, 'L'},
|
||||||
{"server-socket", required_argument, 0, 's'},
|
{"server-socket", required_argument, 0, 's'},
|
||||||
{"log-colorize", optional_argument, NULL, 'l'},
|
{"log-colorize", optional_argument, NULL, 'l'},
|
||||||
|
|
@ -60,6 +64,8 @@ main(int argc, char *const *argv)
|
||||||
const char *server_socket_path = NULL;
|
const char *server_socket_path = NULL;
|
||||||
enum log_colorize log_colorize = LOG_COLORIZE_AUTO;
|
enum log_colorize log_colorize = LOG_COLORIZE_AUTO;
|
||||||
bool login_shell = false;
|
bool login_shell = false;
|
||||||
|
bool maximized = false;
|
||||||
|
bool fullscreen = false;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
int c = getopt_long(argc, argv, ":t:s:l::hv", longopts, NULL);
|
int c = getopt_long(argc, argv, ":t:s:l::hv", longopts, NULL);
|
||||||
|
|
@ -75,6 +81,16 @@ main(int argc, char *const *argv)
|
||||||
login_shell = true;
|
login_shell = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ',':
|
||||||
|
maximized = true;
|
||||||
|
fullscreen = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'F':
|
||||||
|
fullscreen = true;
|
||||||
|
maximized = false;
|
||||||
|
break;
|
||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
server_socket_path = optarg;
|
server_socket_path = optarg;
|
||||||
break;
|
break;
|
||||||
|
|
@ -177,6 +193,8 @@ main(int argc, char *const *argv)
|
||||||
/* Calculate total length */
|
/* Calculate total length */
|
||||||
total_len += sizeof(cwd_len) + cwd_len;
|
total_len += sizeof(cwd_len) + cwd_len;
|
||||||
total_len += sizeof(term_len) + term_len;
|
total_len += sizeof(term_len) + term_len;
|
||||||
|
total_len += sizeof(uint8_t); /* maximized */
|
||||||
|
total_len += sizeof(uint8_t); /* fullscreen */
|
||||||
total_len += sizeof(uint8_t); /* login_shell */
|
total_len += sizeof(uint8_t); /* login_shell */
|
||||||
total_len += sizeof(argc);
|
total_len += sizeof(argc);
|
||||||
|
|
||||||
|
|
@ -207,6 +225,16 @@ main(int argc, char *const *argv)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (send(fd, &(uint8_t){maximized}, sizeof(uint8_t), 0) != sizeof(uint8_t)) {
|
||||||
|
LOG_ERRNO("failed to send maximized");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (send(fd, &(uint8_t){fullscreen}, sizeof(uint8_t), 0) != sizeof(uint8_t)) {
|
||||||
|
LOG_ERRNO("failed to send fullscreen");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
if (send(fd, &(uint8_t){login_shell}, sizeof(uint8_t), 0) != sizeof(uint8_t)) {
|
if (send(fd, &(uint8_t){login_shell}, sizeof(uint8_t), 0) != sizeof(uint8_t)) {
|
||||||
LOG_ERRNO("failed to send login-shell");
|
LOG_ERRNO("failed to send login-shell");
|
||||||
goto err;
|
goto err;
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ _arguments \
|
||||||
'(-c --config)'{-c,--config}'[path to configuration file (XDG_CONFIG_HOME/footrc)]:config:_files' \
|
'(-c --config)'{-c,--config}'[path to configuration file (XDG_CONFIG_HOME/footrc)]:config:_files' \
|
||||||
'(-f --font)'{-f,--font}'[font name and style in fontconfig format (monospace)]:font:->fonts' \
|
'(-f --font)'{-f,--font}'[font name and style in fontconfig format (monospace)]:font:->fonts' \
|
||||||
'(-t --term)'{-t,--term}'[value to set the environment variable TERM to (foot)]:term:->terms' \
|
'(-t --term)'{-t,--term}'[value to set the environment variable TERM to (foot)]:term:->terms' \
|
||||||
|
'--maximized[start in maximized mode]' \
|
||||||
|
'--fullscreen[start in fullscreen mode]' \
|
||||||
'--login-shell[start shell as a login shell]' \
|
'--login-shell[start shell as a login shell]' \
|
||||||
'(-g --geometry)'{-g,--geometry}'[window WIDTHxHEIGHT, in pixels (700x50)]:geometry:()' \
|
'(-g --geometry)'{-g,--geometry}'[window WIDTHxHEIGHT, in pixels (700x50)]:geometry:()' \
|
||||||
'(-s --server)'{-s,--server}'[run as server; open terminals by running footclient]:server:_files' \
|
'(-s --server)'{-s,--server}'[run as server; open terminals by running footclient]:server:_files' \
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@
|
||||||
_arguments \
|
_arguments \
|
||||||
-s \
|
-s \
|
||||||
'(-t --term)'{-t,--term}'[value to set the environment variable TERM to (foot)]:term:->terms' \
|
'(-t --term)'{-t,--term}'[value to set the environment variable TERM to (foot)]:term:->terms' \
|
||||||
|
'--maximized[start in maximized mode]' \
|
||||||
|
'--fullscreen[start in fullscreen mode]' \
|
||||||
'--login-shell[start shell as a login shell]' \
|
'--login-shell[start shell as a login shell]' \
|
||||||
'(-s --server-socket)'{-s,--server-socket}'[override the default path to the foot server socket (XDG_RUNTIME_DIR/foot.sock)]:server:_files' \
|
'(-s --server-socket)'{-s,--server-socket}'[override the default path to the foot server socket (XDG_RUNTIME_DIR/foot.sock)]:server:_files' \
|
||||||
'(-l --log-colorize)'{-l,--log-colorize}'[enable or disable colorization of log output on stderr]:logcolor:(never always auto)' \
|
'(-l --log-colorize)'{-l,--log-colorize}'[enable or disable colorization of log output on stderr]:logcolor:(never always auto)' \
|
||||||
|
|
|
||||||
18
config.c
18
config.c
|
|
@ -226,7 +226,7 @@ parse_section_main(const char *key, const char *value, struct config *conf,
|
||||||
unsigned x, y;
|
unsigned x, y;
|
||||||
if (sscanf(value, "%ux%u", &x, &y) != 2) {
|
if (sscanf(value, "%ux%u", &x, &y) != 2) {
|
||||||
LOG_ERR(
|
LOG_ERR(
|
||||||
"%s: %d: expected PAD_XxPAD_Y, where both are positive integers: %s",
|
"%s:%d: expected PAD_XxPAD_Y, where both are positive integers: %s",
|
||||||
path, lineno, value);
|
path, lineno, value);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -235,6 +235,21 @@ parse_section_main(const char *key, const char *value, struct config *conf,
|
||||||
conf->pad_y = y;
|
conf->pad_y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (strcmp(key, "startup-mode") == 0) {
|
||||||
|
if (strcmp(value, "windowed") == 0)
|
||||||
|
conf->startup_mode = STARTUP_WINDOWED;
|
||||||
|
else if (strcmp(value, "maximized") == 0)
|
||||||
|
conf->startup_mode = STARTUP_MAXIMIZED;
|
||||||
|
else if (strcmp(value, "fullscreen") == 0)
|
||||||
|
conf->startup_mode = STARTUP_FULLSCREEN;
|
||||||
|
else {
|
||||||
|
LOG_ERR(
|
||||||
|
"%s:%d: expected either 'windowed', 'maximized' or 'fullscreen'",
|
||||||
|
path, lineno);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else if (strcmp(key, "font") == 0) {
|
else if (strcmp(key, "font") == 0) {
|
||||||
char *copy = strdup(value);
|
char *copy = strdup(value);
|
||||||
for (const char *font = strtok(copy, ","); font != NULL; font = strtok(NULL, ",")) {
|
for (const char *font = strtok(copy, ","); font != NULL; font = strtok(NULL, ",")) {
|
||||||
|
|
@ -816,6 +831,7 @@ config_load(struct config *conf, const char *conf_path)
|
||||||
.height = 500,
|
.height = 500,
|
||||||
.pad_x = 2,
|
.pad_x = 2,
|
||||||
.pad_y = 2,
|
.pad_y = 2,
|
||||||
|
.startup_mode = STARTUP_WINDOWED,
|
||||||
.fonts = tll_init(),
|
.fonts = tll_init(),
|
||||||
.scrollback_lines = 1000,
|
.scrollback_lines = 1000,
|
||||||
|
|
||||||
|
|
|
||||||
1
config.h
1
config.h
|
|
@ -15,6 +15,7 @@ struct config {
|
||||||
unsigned height;
|
unsigned height;
|
||||||
unsigned pad_x;
|
unsigned pad_x;
|
||||||
unsigned pad_y;
|
unsigned pad_y;
|
||||||
|
enum { STARTUP_WINDOWED, STARTUP_MAXIMIZED, STARTUP_FULLSCREEN } startup_mode;
|
||||||
|
|
||||||
tll(char *) fonts;
|
tll(char *) fonts;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,14 @@ execute (instead of the shell).
|
||||||
*-t*,*--term*=_TERM_
|
*-t*,*--term*=_TERM_
|
||||||
Value to set the environment variable *TERM* to. Default: *foot*.
|
Value to set the environment variable *TERM* to. Default: *foot*.
|
||||||
|
|
||||||
|
*--maximized*
|
||||||
|
Start in maximized mode. If both *--maximized* and *--fullscreen*
|
||||||
|
are specified, the _last_ one takes precedence.
|
||||||
|
|
||||||
|
*--fullscreen*
|
||||||
|
Start in fullscreen mode. If both *--maximized* and *--fullscreen*
|
||||||
|
are specified, the _last_ one takes precedence.
|
||||||
|
|
||||||
*--login-shell*
|
*--login-shell*
|
||||||
Start a login shell, by prepending a '-' to argv[0].
|
Start a login shell, by prepending a '-' to argv[0].
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,10 @@ in this order:
|
||||||
Padding between border and glyphs, in pixels, on the form
|
Padding between border and glyphs, in pixels, on the form
|
||||||
_XxY_ (-padding). Default: _2x2_.
|
_XxY_ (-padding). Default: _2x2_.
|
||||||
|
|
||||||
|
*startup-mode*
|
||||||
|
Initial window mode: *windowed*, *maximized* or
|
||||||
|
*fullscreen*. Default: _windowed_.
|
||||||
|
|
||||||
*shell*
|
*shell*
|
||||||
Executable to launch. Typically a shell. Default: _$SHELL_ if set,
|
Executable to launch. Typically a shell. Default: _$SHELL_ if set,
|
||||||
otherwise the user's default shell (as specified in
|
otherwise the user's default shell (as specified in
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,14 @@ execute (instead of the shell).
|
||||||
*-t*,*--term*=_TERM_
|
*-t*,*--term*=_TERM_
|
||||||
Value to set the environment variable _TERM_ to. Default: _foot_.
|
Value to set the environment variable _TERM_ to. Default: _foot_.
|
||||||
|
|
||||||
|
*--maximized*
|
||||||
|
Start in maximized mode. If both *--maximized* and *--fullscreen*
|
||||||
|
are specified, the _last_ one takes precedence.
|
||||||
|
|
||||||
|
*--fullscreen*
|
||||||
|
Start in fullscreen mode. If both *--maximized* and *--fullscreen*
|
||||||
|
are specified, the _last_ one takes precedence.
|
||||||
|
|
||||||
*--login-shell*
|
*--login-shell*
|
||||||
Start a login shell, by prepending a '-' to argv[0].
|
Start a login shell, by prepending a '-' to argv[0].
|
||||||
|
|
||||||
|
|
|
||||||
1
footrc
1
footrc
|
|
@ -4,6 +4,7 @@
|
||||||
# scrollback=1000
|
# scrollback=1000
|
||||||
# geometry=700x500
|
# geometry=700x500
|
||||||
# pad=2x2
|
# pad=2x2
|
||||||
|
# startup-mode=windowed
|
||||||
# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd)
|
# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd)
|
||||||
# term=foot
|
# term=foot
|
||||||
# login-shell=no
|
# login-shell=no
|
||||||
|
|
|
||||||
23
main.c
23
main.c
|
|
@ -46,6 +46,8 @@ print_usage(const char *prog_name)
|
||||||
" -c,--config=PATH load configuration from PATH (XDG_CONFIG_HOME/footrc)\n"
|
" -c,--config=PATH load configuration from PATH (XDG_CONFIG_HOME/footrc)\n"
|
||||||
" -f,--font=FONT comma separated list of fonts in fontconfig format (monospace)\n"
|
" -f,--font=FONT comma separated list of fonts in fontconfig format (monospace)\n"
|
||||||
" -t,--term=TERM value to set the environment variable TERM to (foot)\n"
|
" -t,--term=TERM value to set the environment variable TERM to (foot)\n"
|
||||||
|
" --maximized start in maximized mode\n"
|
||||||
|
" --fullscreen start in fullscreen mode\n"
|
||||||
" --login-shell start shell as a login shell\n"
|
" --login-shell start shell as a login shell\n"
|
||||||
" -g,--geometry=WIDTHxHEIGHT set initial width and height\n"
|
" -g,--geometry=WIDTHxHEIGHT set initial width and height\n"
|
||||||
" -s,--server[=PATH] run as a server (use 'footclient' to start terminals).\n"
|
" -s,--server[=PATH] run as a server (use 'footclient' to start terminals).\n"
|
||||||
|
|
@ -142,6 +144,8 @@ main(int argc, char *const *argv)
|
||||||
{"geometry", required_argument, NULL, 'g'},
|
{"geometry", required_argument, NULL, 'g'},
|
||||||
{"server", optional_argument, NULL, 's'},
|
{"server", optional_argument, NULL, 's'},
|
||||||
{"hold", no_argument, NULL, 'H'},
|
{"hold", no_argument, NULL, 'H'},
|
||||||
|
{"maximized", no_argument, NULL, 'm'},
|
||||||
|
{"fullscreen", no_argument, NULL, 'F'},
|
||||||
{"presentation-timings", no_argument, NULL, 'P'}, /* Undocumented */
|
{"presentation-timings", no_argument, NULL, 'P'}, /* Undocumented */
|
||||||
{"print-pid", required_argument, NULL, 'p'},
|
{"print-pid", required_argument, NULL, 'p'},
|
||||||
{"log-colorize", optional_argument, NULL, 'l'},
|
{"log-colorize", optional_argument, NULL, 'l'},
|
||||||
|
|
@ -161,6 +165,8 @@ main(int argc, char *const *argv)
|
||||||
const char *conf_server_socket_path = NULL;
|
const char *conf_server_socket_path = NULL;
|
||||||
bool presentation_timings = false;
|
bool presentation_timings = false;
|
||||||
bool hold = false;
|
bool hold = false;
|
||||||
|
bool maximized = false;
|
||||||
|
bool fullscreen = false;
|
||||||
bool unlink_pid_file = false;
|
bool unlink_pid_file = false;
|
||||||
const char *pid_file = NULL;
|
const char *pid_file = NULL;
|
||||||
enum log_colorize log_colorize = LOG_COLORIZE_AUTO;
|
enum log_colorize log_colorize = LOG_COLORIZE_AUTO;
|
||||||
|
|
@ -232,6 +238,16 @@ main(int argc, char *const *argv)
|
||||||
hold = true;
|
hold = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'm':
|
||||||
|
maximized = true;
|
||||||
|
fullscreen = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'F':
|
||||||
|
fullscreen = true;
|
||||||
|
maximized = false;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'p':
|
case 'p':
|
||||||
pid_file = optarg;
|
pid_file = optarg;
|
||||||
break;
|
break;
|
||||||
|
|
@ -306,6 +322,10 @@ main(int argc, char *const *argv)
|
||||||
free(conf.server_socket_path);
|
free(conf.server_socket_path);
|
||||||
conf.server_socket_path = strdup(conf_server_socket_path);
|
conf.server_socket_path = strdup(conf_server_socket_path);
|
||||||
}
|
}
|
||||||
|
if (maximized)
|
||||||
|
conf.startup_mode = STARTUP_MAXIMIZED;
|
||||||
|
else if (fullscreen)
|
||||||
|
conf.startup_mode = STARTUP_FULLSCREEN;
|
||||||
conf.presentation_timings = presentation_timings;
|
conf.presentation_timings = presentation_timings;
|
||||||
conf.hold_at_exit = hold;
|
conf.hold_at_exit = hold;
|
||||||
|
|
||||||
|
|
@ -342,8 +362,7 @@ main(int argc, char *const *argv)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (!as_server && (term = term_init(
|
if (!as_server && (term = term_init(
|
||||||
&conf, fdm, wayl, conf.term, conf.login_shell,
|
&conf, fdm, wayl, "foot", cwd, argc, argv,
|
||||||
"foot", cwd, argc, argv,
|
|
||||||
&term_shutdown_cb, &shutdown_ctx)) == NULL) {
|
&term_shutdown_cb, &shutdown_ctx)) == NULL) {
|
||||||
free(cwd);
|
free(cwd);
|
||||||
goto out;
|
goto out;
|
||||||
|
|
|
||||||
25
server.c
25
server.c
|
|
@ -42,6 +42,7 @@ struct client {
|
||||||
size_t idx;
|
size_t idx;
|
||||||
} buffer;
|
} buffer;
|
||||||
|
|
||||||
|
struct config conf;
|
||||||
struct terminal *term;
|
struct terminal *term;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -69,6 +70,11 @@ client_destroy(struct client *client)
|
||||||
}
|
}
|
||||||
|
|
||||||
free(client->buffer.data);
|
free(client->buffer.data);
|
||||||
|
|
||||||
|
/* TODO: clone server conf completely, so that we can just call
|
||||||
|
* conf_destroy() here */
|
||||||
|
free(client->conf.term);
|
||||||
|
|
||||||
free(client);
|
free(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -218,6 +224,12 @@ fdm_client(struct fdm *fdm, int fd, int events, void *data)
|
||||||
goto shutdown;
|
goto shutdown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CHECK_BUF(sizeof(uint8_t));
|
||||||
|
const uint8_t maximized = *(const uint8_t *)p; p += sizeof(maximized);
|
||||||
|
|
||||||
|
CHECK_BUF(sizeof(uint8_t));
|
||||||
|
const uint8_t fullscreen = *(const uint8_t *)p; p += sizeof(fullscreen);
|
||||||
|
|
||||||
CHECK_BUF(sizeof(uint8_t));
|
CHECK_BUF(sizeof(uint8_t));
|
||||||
const uint8_t login_shell = *(const uint8_t *)p; p += sizeof(login_shell);
|
const uint8_t login_shell = *(const uint8_t *)p; p += sizeof(login_shell);
|
||||||
|
|
||||||
|
|
@ -244,9 +256,18 @@ fdm_client(struct fdm *fdm, int fd, int events, void *data)
|
||||||
|
|
||||||
#undef CHECK_BUF
|
#undef CHECK_BUF
|
||||||
|
|
||||||
|
client->conf = *server->conf;
|
||||||
|
client->conf.term = strlen(term_env) > 0
|
||||||
|
? strdup(term_env) : strdup(server->conf->term);
|
||||||
|
client->conf.login_shell = login_shell;
|
||||||
|
|
||||||
|
if (maximized)
|
||||||
|
client->conf.startup_mode = STARTUP_MAXIMIZED;
|
||||||
|
else if (fullscreen)
|
||||||
|
client->conf.startup_mode = STARTUP_FULLSCREEN;
|
||||||
|
|
||||||
client->term = term_init(
|
client->term = term_init(
|
||||||
server->conf, server->fdm, server->wayl,
|
&client->conf, server->fdm, server->wayl,
|
||||||
strlen(term_env) > 0 ? term_env : server->conf->term, login_shell,
|
|
||||||
"footclient", cwd, argc, argv, &term_shutdown_handler, client);
|
"footclient", cwd, argc, argv, &term_shutdown_handler, client);
|
||||||
|
|
||||||
if (client->term == NULL) {
|
if (client->term == NULL) {
|
||||||
|
|
|
||||||
23
terminal.c
23
terminal.c
|
|
@ -13,6 +13,7 @@
|
||||||
#include <sys/timerfd.h>
|
#include <sys/timerfd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <linux/input-event-codes.h>
|
#include <linux/input-event-codes.h>
|
||||||
|
#include <xdg-shell.h>
|
||||||
|
|
||||||
#define LOG_MODULE "terminal"
|
#define LOG_MODULE "terminal"
|
||||||
#define LOG_ENABLE_DBG 0
|
#define LOG_ENABLE_DBG 0
|
||||||
|
|
@ -615,8 +616,7 @@ load_fonts_from_conf(const struct terminal *term, const struct config *conf,
|
||||||
|
|
||||||
struct terminal *
|
struct terminal *
|
||||||
term_init(const struct config *conf, struct fdm *fdm, struct wayland *wayl,
|
term_init(const struct config *conf, struct fdm *fdm, struct wayland *wayl,
|
||||||
const char *term_env, bool login_shell, const char *foot_exe,
|
const char *foot_exe, const char *cwd, int argc, char *const *argv,
|
||||||
const char *cwd, int argc, char *const *argv,
|
|
||||||
void (*shutdown_cb)(void *data, int exit_code), void *shutdown_data)
|
void (*shutdown_cb)(void *data, int exit_code), void *shutdown_data)
|
||||||
{
|
{
|
||||||
int ptmx = -1;
|
int ptmx = -1;
|
||||||
|
|
@ -800,9 +800,26 @@ term_init(const struct config *conf, struct fdm *fdm, struct wayland *wayl,
|
||||||
/* Let the Wayland backend know we exist */
|
/* Let the Wayland backend know we exist */
|
||||||
tll_push_back(wayl->terms, term);
|
tll_push_back(wayl->terms, term);
|
||||||
|
|
||||||
|
switch (conf->startup_mode) {
|
||||||
|
case STARTUP_WINDOWED:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STARTUP_MAXIMIZED:
|
||||||
|
xdg_toplevel_set_maximized(term->window->xdg_toplevel);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STARTUP_FULLSCREEN:
|
||||||
|
xdg_toplevel_set_fullscreen(term->window->xdg_toplevel, NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Start the slave/client */
|
/* Start the slave/client */
|
||||||
if ((term->slave = slave_spawn(term->ptmx, argc, term->cwd, argv, term_env, conf->shell, login_shell)) == -1)
|
if ((term->slave = slave_spawn(
|
||||||
|
term->ptmx, argc, term->cwd, argv,
|
||||||
|
conf->term, conf->shell, conf->login_shell)) == -1)
|
||||||
|
{
|
||||||
goto err;
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return term;
|
return term;
|
||||||
|
|
|
||||||
|
|
@ -432,8 +432,7 @@ struct terminal {
|
||||||
struct config;
|
struct config;
|
||||||
struct terminal *term_init(
|
struct terminal *term_init(
|
||||||
const struct config *conf, struct fdm *fdm, struct wayland *wayl,
|
const struct config *conf, struct fdm *fdm, struct wayland *wayl,
|
||||||
const char *term_env, bool login_shell, const char *foot_exe,
|
const char *foot_exe, const char *cwd, int argc, char *const *argv,
|
||||||
const char *cwd, int argc, char *const *argv,
|
|
||||||
void (*shutdown_cb)(void *data, int exit_code), void *shutdown_data);
|
void (*shutdown_cb)(void *data, int exit_code), void *shutdown_data);
|
||||||
|
|
||||||
bool term_shutdown(struct terminal *term);
|
bool term_shutdown(struct terminal *term);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue