mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-18 22:05:25 -05:00
commit
c7a149a7ea
6 changed files with 57 additions and 21 deletions
|
|
@ -51,6 +51,12 @@
|
|||
* Point values in `line-height`, `letter-spacing`,
|
||||
`horizontal-letter-offset` and `vertical-letter-offset` are now
|
||||
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
|
||||
|
|
|
|||
19
client.c
19
client.c
|
|
@ -69,7 +69,10 @@ print_usage(const char *prog_name)
|
|||
int
|
||||
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];
|
||||
|
||||
|
|
@ -135,7 +138,7 @@ main(int argc, char *const *argv)
|
|||
struct stat st;
|
||||
if (stat(optarg, &st) < 0 || !(st.st_mode & S_IFDIR)) {
|
||||
fprintf(stderr, "error: %s: not a directory\n", optarg);
|
||||
return EXIT_FAILURE;
|
||||
return ret;
|
||||
}
|
||||
custom_cwd = optarg;
|
||||
break;
|
||||
|
|
@ -144,7 +147,7 @@ main(int argc, char *const *argv)
|
|||
case 'w':
|
||||
if (sscanf(optarg, "%ux%u", &width, &height) != 2 || width == 0 || height == 0) {
|
||||
fprintf(stderr, "error: invalid window-size-pixels: %s\n", optarg);
|
||||
return EXIT_FAILURE;
|
||||
return ret;
|
||||
}
|
||||
size_type = 0; // CONF_SIZE_PX
|
||||
break;
|
||||
|
|
@ -152,7 +155,7 @@ main(int argc, char *const *argv)
|
|||
case 'W':
|
||||
if (sscanf(optarg, "%ux%u", &width, &height) != 2 || width == 0 || height == 0) {
|
||||
fprintf(stderr, "error: invalid window-size-chars: %s\n", optarg);
|
||||
return EXIT_FAILURE;
|
||||
return ret;
|
||||
}
|
||||
size_type = 1; // CONF_SIZE_CELLS
|
||||
break;
|
||||
|
|
@ -187,7 +190,7 @@ main(int argc, char *const *argv)
|
|||
"-d,--log-level: %s: argument must be one of %s\n",
|
||||
optarg,
|
||||
log_level_string_hint());
|
||||
return EXIT_FAILURE;
|
||||
return ret;
|
||||
}
|
||||
log_level = lvl;
|
||||
break;
|
||||
|
|
@ -202,7 +205,7 @@ main(int argc, char *const *argv)
|
|||
log_colorize = LOG_COLORIZE_ALWAYS;
|
||||
else {
|
||||
fprintf(stderr, "%s: argument must be one of 'never', 'always' or 'auto'\n", optarg);
|
||||
return EXIT_FAILURE;
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -215,7 +218,7 @@ main(int argc, char *const *argv)
|
|||
return EXIT_SUCCESS;
|
||||
|
||||
case '?':
|
||||
return EXIT_FAILURE;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -373,6 +376,8 @@ main(int argc, char *const *argv)
|
|||
int exit_code;
|
||||
ssize_t rcvd = recv(fd, &exit_code, sizeof(exit_code), 0);
|
||||
|
||||
LOG_INFO("exit-code=%d", exit_code);
|
||||
|
||||
if (rcvd == -1 && errno == EINTR)
|
||||
xassert(aborted);
|
||||
else if (rcvd != sizeof(exit_code))
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ the foot command line
|
|||
|
||||
*-C*,*--check-config*
|
||||
Verify configuration and then exit with 0 if ok, otherwise exit
|
||||
with 1.
|
||||
with 230 (see *EXIT STATUS*).
|
||||
|
||||
*-f*,*--font*=_FONT_
|
||||
Comma separated list of fonts to use, in fontconfig format (see
|
||||
|
|
@ -136,6 +136,13 @@ the foot command line
|
|||
*-v*,*--version*
|
||||
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
|
||||
|
||||
The following keyboard shortcuts are available.
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ mode.
|
|||
|
||||
Running it without arguments will open a new terminal window (hosted
|
||||
in the foot server), with your default shell. The exit code will be
|
||||
that of the terminal (thus, *footclient* does not exit until the
|
||||
terminal has terminated).
|
||||
that of the terminal. I.e *footclient* does not exit until the
|
||||
terminal has terminated.
|
||||
|
||||
# OPTIONS
|
||||
|
||||
|
|
@ -74,6 +74,20 @@ terminal has terminated).
|
|||
*-v*,*--version*
|
||||
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
|
||||
|
||||
*foot*(1)
|
||||
|
|
|
|||
22
main.c
22
main.c
|
|
@ -151,7 +151,10 @@ print_pid(const char *pid_file, bool *unlink_at_exit)
|
|||
int
|
||||
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
|
||||
* don't pass this on to programs launched by us */
|
||||
|
|
@ -242,7 +245,7 @@ main(int argc, char *const *argv)
|
|||
struct stat st;
|
||||
if (stat(optarg, &st) < 0 || !(st.st_mode & S_IFDIR)) {
|
||||
fprintf(stderr, "error: %s: not a directory\n", optarg);
|
||||
return EXIT_FAILURE;
|
||||
return ret;
|
||||
}
|
||||
custom_cwd = optarg;
|
||||
break;
|
||||
|
|
@ -274,7 +277,7 @@ main(int argc, char *const *argv)
|
|||
unsigned width, height;
|
||||
if (sscanf(optarg, "%ux%u", &width, &height) != 2 || width == 0 || height == 0) {
|
||||
fprintf(stderr, "error: invalid window-size-pixels: %s\n", optarg);
|
||||
return EXIT_FAILURE;
|
||||
return ret;
|
||||
}
|
||||
|
||||
conf_size_type = CONF_SIZE_PX;
|
||||
|
|
@ -287,7 +290,7 @@ main(int argc, char *const *argv)
|
|||
unsigned width, height;
|
||||
if (sscanf(optarg, "%ux%u", &width, &height) != 2 || width == 0 || height == 0) {
|
||||
fprintf(stderr, "error: invalid window-size-chars: %s\n", optarg);
|
||||
return EXIT_FAILURE;
|
||||
return ret;
|
||||
}
|
||||
|
||||
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",
|
||||
optarg,
|
||||
log_level_string_hint());
|
||||
return EXIT_FAILURE;
|
||||
return ret;
|
||||
}
|
||||
log_level = lvl;
|
||||
break;
|
||||
|
|
@ -347,7 +350,7 @@ main(int argc, char *const *argv)
|
|||
log_colorize = LOG_COLORIZE_ALWAYS;
|
||||
else {
|
||||
fprintf(stderr, "%s: argument must be one of 'never', 'always' or 'auto'\n", optarg);
|
||||
return EXIT_FAILURE;
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -364,7 +367,7 @@ main(int argc, char *const *argv)
|
|||
return EXIT_SUCCESS;
|
||||
|
||||
case '?':
|
||||
return EXIT_FAILURE;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -464,7 +467,7 @@ main(int argc, char *const *argv)
|
|||
struct renderer *renderer = NULL;
|
||||
struct terminal *term = 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;
|
||||
char *_cwd = NULL;
|
||||
|
|
@ -533,7 +536,8 @@ main(int argc, char *const *argv)
|
|||
break;
|
||||
}
|
||||
|
||||
ret = aborted || tll_length(wayl->terms) == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
if (aborted || tll_length(wayl->terms) == 0)
|
||||
ret = EXIT_SUCCESS;
|
||||
|
||||
out:
|
||||
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) {
|
||||
LOG_ERR("failed to instantiate new terminal");
|
||||
client_send_exit_code(client, -1);
|
||||
client_send_exit_code(client, -26);
|
||||
instance_destroy(instance, -1);
|
||||
goto shutdown;
|
||||
}
|
||||
|
|
@ -497,7 +497,7 @@ server_destroy(struct server *server)
|
|||
tll_length(server->clients));
|
||||
|
||||
tll_foreach(server->clients, it) {
|
||||
client_send_exit_code(it->item, 1);
|
||||
client_send_exit_code(it->item, -26);
|
||||
client_destroy(it->item);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue