mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-04-09 08:21:01 -04:00
commit
c7a149a7ea
6 changed files with 57 additions and 21 deletions
|
|
@ -51,6 +51,12 @@
|
||||||
* Point values in `line-height`, `letter-spacing`,
|
* Point values in `line-height`, `letter-spacing`,
|
||||||
`horizontal-letter-offset` and `vertical-letter-offset` are now
|
`horizontal-letter-offset` and `vertical-letter-offset` are now
|
||||||
rounded, not truncated, when translated to pixel values.
|
rounded, not truncated, when translated to pixel values.
|
||||||
|
* Foot’s exit code is now -26/230 when foot itself failed to launch
|
||||||
|
(due to invalid command line options, client application/shell not
|
||||||
|
found etc). Footclient’s exit code is -36/220 when it itself fails
|
||||||
|
to launch (e.g. bad command line option) and -26/230 when the foot
|
||||||
|
server failed to instantiate a new window
|
||||||
|
(https://codeberg.org/dnkl/foot/issues/466).
|
||||||
|
|
||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
|
||||||
19
client.c
19
client.c
|
|
@ -69,7 +69,10 @@ print_usage(const char *prog_name)
|
||||||
int
|
int
|
||||||
main(int argc, char *const *argv)
|
main(int argc, char *const *argv)
|
||||||
{
|
{
|
||||||
int ret = EXIT_FAILURE;
|
/* Custom exit code, to enable users to differentiate between foot
|
||||||
|
* itself failing, and the client application failiing */
|
||||||
|
static const int foot_exit_failure = -36;
|
||||||
|
int ret = foot_exit_failure;
|
||||||
|
|
||||||
const char *const prog_name = argv[0];
|
const char *const prog_name = argv[0];
|
||||||
|
|
||||||
|
|
@ -135,7 +138,7 @@ main(int argc, char *const *argv)
|
||||||
struct stat st;
|
struct stat st;
|
||||||
if (stat(optarg, &st) < 0 || !(st.st_mode & S_IFDIR)) {
|
if (stat(optarg, &st) < 0 || !(st.st_mode & S_IFDIR)) {
|
||||||
fprintf(stderr, "error: %s: not a directory\n", optarg);
|
fprintf(stderr, "error: %s: not a directory\n", optarg);
|
||||||
return EXIT_FAILURE;
|
return ret;
|
||||||
}
|
}
|
||||||
custom_cwd = optarg;
|
custom_cwd = optarg;
|
||||||
break;
|
break;
|
||||||
|
|
@ -144,7 +147,7 @@ main(int argc, char *const *argv)
|
||||||
case 'w':
|
case 'w':
|
||||||
if (sscanf(optarg, "%ux%u", &width, &height) != 2 || width == 0 || height == 0) {
|
if (sscanf(optarg, "%ux%u", &width, &height) != 2 || width == 0 || height == 0) {
|
||||||
fprintf(stderr, "error: invalid window-size-pixels: %s\n", optarg);
|
fprintf(stderr, "error: invalid window-size-pixels: %s\n", optarg);
|
||||||
return EXIT_FAILURE;
|
return ret;
|
||||||
}
|
}
|
||||||
size_type = 0; // CONF_SIZE_PX
|
size_type = 0; // CONF_SIZE_PX
|
||||||
break;
|
break;
|
||||||
|
|
@ -152,7 +155,7 @@ main(int argc, char *const *argv)
|
||||||
case 'W':
|
case 'W':
|
||||||
if (sscanf(optarg, "%ux%u", &width, &height) != 2 || width == 0 || height == 0) {
|
if (sscanf(optarg, "%ux%u", &width, &height) != 2 || width == 0 || height == 0) {
|
||||||
fprintf(stderr, "error: invalid window-size-chars: %s\n", optarg);
|
fprintf(stderr, "error: invalid window-size-chars: %s\n", optarg);
|
||||||
return EXIT_FAILURE;
|
return ret;
|
||||||
}
|
}
|
||||||
size_type = 1; // CONF_SIZE_CELLS
|
size_type = 1; // CONF_SIZE_CELLS
|
||||||
break;
|
break;
|
||||||
|
|
@ -187,7 +190,7 @@ main(int argc, char *const *argv)
|
||||||
"-d,--log-level: %s: argument must be one of %s\n",
|
"-d,--log-level: %s: argument must be one of %s\n",
|
||||||
optarg,
|
optarg,
|
||||||
log_level_string_hint());
|
log_level_string_hint());
|
||||||
return EXIT_FAILURE;
|
return ret;
|
||||||
}
|
}
|
||||||
log_level = lvl;
|
log_level = lvl;
|
||||||
break;
|
break;
|
||||||
|
|
@ -202,7 +205,7 @@ main(int argc, char *const *argv)
|
||||||
log_colorize = LOG_COLORIZE_ALWAYS;
|
log_colorize = LOG_COLORIZE_ALWAYS;
|
||||||
else {
|
else {
|
||||||
fprintf(stderr, "%s: argument must be one of 'never', 'always' or 'auto'\n", optarg);
|
fprintf(stderr, "%s: argument must be one of 'never', 'always' or 'auto'\n", optarg);
|
||||||
return EXIT_FAILURE;
|
return ret;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -215,7 +218,7 @@ main(int argc, char *const *argv)
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
return EXIT_FAILURE;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -373,6 +376,8 @@ main(int argc, char *const *argv)
|
||||||
int exit_code;
|
int exit_code;
|
||||||
ssize_t rcvd = recv(fd, &exit_code, sizeof(exit_code), 0);
|
ssize_t rcvd = recv(fd, &exit_code, sizeof(exit_code), 0);
|
||||||
|
|
||||||
|
LOG_INFO("exit-code=%d", exit_code);
|
||||||
|
|
||||||
if (rcvd == -1 && errno == EINTR)
|
if (rcvd == -1 && errno == EINTR)
|
||||||
xassert(aborted);
|
xassert(aborted);
|
||||||
else if (rcvd != sizeof(exit_code))
|
else if (rcvd != sizeof(exit_code))
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ the foot command line
|
||||||
|
|
||||||
*-C*,*--check-config*
|
*-C*,*--check-config*
|
||||||
Verify configuration and then exit with 0 if ok, otherwise exit
|
Verify configuration and then exit with 0 if ok, otherwise exit
|
||||||
with 1.
|
with 230 (see *EXIT STATUS*).
|
||||||
|
|
||||||
*-f*,*--font*=_FONT_
|
*-f*,*--font*=_FONT_
|
||||||
Comma separated list of fonts to use, in fontconfig format (see
|
Comma separated list of fonts to use, in fontconfig format (see
|
||||||
|
|
@ -136,6 +136,13 @@ the foot command line
|
||||||
*-v*,*--version*
|
*-v*,*--version*
|
||||||
Show the version number and quit.
|
Show the version number and quit.
|
||||||
|
|
||||||
|
# EXIT STATUS
|
||||||
|
|
||||||
|
Foot will exit with code 230 if there is a failure in foot itself.
|
||||||
|
|
||||||
|
In all other cases, the exit code is that of the client application
|
||||||
|
(i.e. the shell).
|
||||||
|
|
||||||
# KEYBOARD SHORTCUTS
|
# KEYBOARD SHORTCUTS
|
||||||
|
|
||||||
The following keyboard shortcuts are available.
|
The following keyboard shortcuts are available.
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,8 @@ mode.
|
||||||
|
|
||||||
Running it without arguments will open a new terminal window (hosted
|
Running it without arguments will open a new terminal window (hosted
|
||||||
in the foot server), with your default shell. The exit code will be
|
in the foot server), with your default shell. The exit code will be
|
||||||
that of the terminal (thus, *footclient* does not exit until the
|
that of the terminal. I.e *footclient* does not exit until the
|
||||||
terminal has terminated).
|
terminal has terminated.
|
||||||
|
|
||||||
# OPTIONS
|
# OPTIONS
|
||||||
|
|
||||||
|
|
@ -74,6 +74,20 @@ terminal has terminated).
|
||||||
*-v*,*--version*
|
*-v*,*--version*
|
||||||
Show the version number and quit
|
Show the version number and quit
|
||||||
|
|
||||||
|
# EXIT STATUS
|
||||||
|
|
||||||
|
Footlient will exit with code 220 if there is a failure in footclient
|
||||||
|
itself (for example, the server socket does not exist).
|
||||||
|
|
||||||
|
If *-N*,*--no-wait* is used, footclient exits with code 0 as soon as
|
||||||
|
the foot server has been instructed to open a new window.
|
||||||
|
|
||||||
|
If not, footclient may also exit with code 230. This indicates a
|
||||||
|
failure in the foot server.
|
||||||
|
|
||||||
|
In all other cases the exit code is that of the client application
|
||||||
|
(i.e. the shell).
|
||||||
|
|
||||||
# SEE ALSO
|
# SEE ALSO
|
||||||
|
|
||||||
*foot*(1)
|
*foot*(1)
|
||||||
|
|
|
||||||
22
main.c
22
main.c
|
|
@ -151,7 +151,10 @@ print_pid(const char *pid_file, bool *unlink_at_exit)
|
||||||
int
|
int
|
||||||
main(int argc, char *const *argv)
|
main(int argc, char *const *argv)
|
||||||
{
|
{
|
||||||
int ret = EXIT_FAILURE;
|
/* Custom exit code, to enable users to differentiate between foot
|
||||||
|
* itself failing, and the client application failiing */
|
||||||
|
static const int foot_exit_failure = -26;
|
||||||
|
int ret = foot_exit_failure;
|
||||||
|
|
||||||
/* Startup notifications; we don't support it, but must ensure we
|
/* Startup notifications; we don't support it, but must ensure we
|
||||||
* don't pass this on to programs launched by us */
|
* don't pass this on to programs launched by us */
|
||||||
|
|
@ -242,7 +245,7 @@ main(int argc, char *const *argv)
|
||||||
struct stat st;
|
struct stat st;
|
||||||
if (stat(optarg, &st) < 0 || !(st.st_mode & S_IFDIR)) {
|
if (stat(optarg, &st) < 0 || !(st.st_mode & S_IFDIR)) {
|
||||||
fprintf(stderr, "error: %s: not a directory\n", optarg);
|
fprintf(stderr, "error: %s: not a directory\n", optarg);
|
||||||
return EXIT_FAILURE;
|
return ret;
|
||||||
}
|
}
|
||||||
custom_cwd = optarg;
|
custom_cwd = optarg;
|
||||||
break;
|
break;
|
||||||
|
|
@ -274,7 +277,7 @@ main(int argc, char *const *argv)
|
||||||
unsigned width, height;
|
unsigned width, height;
|
||||||
if (sscanf(optarg, "%ux%u", &width, &height) != 2 || width == 0 || height == 0) {
|
if (sscanf(optarg, "%ux%u", &width, &height) != 2 || width == 0 || height == 0) {
|
||||||
fprintf(stderr, "error: invalid window-size-pixels: %s\n", optarg);
|
fprintf(stderr, "error: invalid window-size-pixels: %s\n", optarg);
|
||||||
return EXIT_FAILURE;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
conf_size_type = CONF_SIZE_PX;
|
conf_size_type = CONF_SIZE_PX;
|
||||||
|
|
@ -287,7 +290,7 @@ main(int argc, char *const *argv)
|
||||||
unsigned width, height;
|
unsigned width, height;
|
||||||
if (sscanf(optarg, "%ux%u", &width, &height) != 2 || width == 0 || height == 0) {
|
if (sscanf(optarg, "%ux%u", &width, &height) != 2 || width == 0 || height == 0) {
|
||||||
fprintf(stderr, "error: invalid window-size-chars: %s\n", optarg);
|
fprintf(stderr, "error: invalid window-size-chars: %s\n", optarg);
|
||||||
return EXIT_FAILURE;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
conf_size_type = CONF_SIZE_CELLS;
|
conf_size_type = CONF_SIZE_CELLS;
|
||||||
|
|
@ -332,7 +335,7 @@ main(int argc, char *const *argv)
|
||||||
"-d,--log-level: %s: argument must be one of %s\n",
|
"-d,--log-level: %s: argument must be one of %s\n",
|
||||||
optarg,
|
optarg,
|
||||||
log_level_string_hint());
|
log_level_string_hint());
|
||||||
return EXIT_FAILURE;
|
return ret;
|
||||||
}
|
}
|
||||||
log_level = lvl;
|
log_level = lvl;
|
||||||
break;
|
break;
|
||||||
|
|
@ -347,7 +350,7 @@ main(int argc, char *const *argv)
|
||||||
log_colorize = LOG_COLORIZE_ALWAYS;
|
log_colorize = LOG_COLORIZE_ALWAYS;
|
||||||
else {
|
else {
|
||||||
fprintf(stderr, "%s: argument must be one of 'never', 'always' or 'auto'\n", optarg);
|
fprintf(stderr, "%s: argument must be one of 'never', 'always' or 'auto'\n", optarg);
|
||||||
return EXIT_FAILURE;
|
return ret;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -364,7 +367,7 @@ main(int argc, char *const *argv)
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
return EXIT_FAILURE;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -464,7 +467,7 @@ main(int argc, char *const *argv)
|
||||||
struct renderer *renderer = NULL;
|
struct renderer *renderer = NULL;
|
||||||
struct terminal *term = NULL;
|
struct terminal *term = NULL;
|
||||||
struct server *server = NULL;
|
struct server *server = NULL;
|
||||||
struct shutdown_context shutdown_ctx = {.term = &term, .exit_code = EXIT_FAILURE};
|
struct shutdown_context shutdown_ctx = {.term = &term, .exit_code = foot_exit_failure};
|
||||||
|
|
||||||
const char *cwd = custom_cwd;
|
const char *cwd = custom_cwd;
|
||||||
char *_cwd = NULL;
|
char *_cwd = NULL;
|
||||||
|
|
@ -533,7 +536,8 @@ main(int argc, char *const *argv)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = aborted || tll_length(wayl->terms) == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
if (aborted || tll_length(wayl->terms) == 0)
|
||||||
|
ret = EXIT_SUCCESS;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
free(_cwd);
|
free(_cwd);
|
||||||
|
|
|
||||||
4
server.c
4
server.c
|
|
@ -312,7 +312,7 @@ fdm_client(struct fdm *fdm, int fd, int events, void *data)
|
||||||
|
|
||||||
if (instance->terminal == NULL) {
|
if (instance->terminal == NULL) {
|
||||||
LOG_ERR("failed to instantiate new terminal");
|
LOG_ERR("failed to instantiate new terminal");
|
||||||
client_send_exit_code(client, -1);
|
client_send_exit_code(client, -26);
|
||||||
instance_destroy(instance, -1);
|
instance_destroy(instance, -1);
|
||||||
goto shutdown;
|
goto shutdown;
|
||||||
}
|
}
|
||||||
|
|
@ -497,7 +497,7 @@ server_destroy(struct server *server)
|
||||||
tll_length(server->clients));
|
tll_length(server->clients));
|
||||||
|
|
||||||
tll_foreach(server->clients, it) {
|
tll_foreach(server->clients, it) {
|
||||||
client_send_exit_code(it->item, 1);
|
client_send_exit_code(it->item, -26);
|
||||||
client_destroy(it->item);
|
client_destroy(it->item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue