mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-15 00:06:09 +03:00
Merge pull request #881 from mitchellh/unknown-cmd
termio/exec: fall back to default command if specified command not found
This commit is contained in:
@ -278,6 +278,16 @@ palette: Palette = .{},
|
|||||||
/// - SHELL environment variable
|
/// - SHELL environment variable
|
||||||
/// - passwd entry (user information)
|
/// - passwd entry (user information)
|
||||||
///
|
///
|
||||||
|
/// The command is the path to only the binary to run. This cannot
|
||||||
|
/// also contain arguments, because Ghostty does not perform any
|
||||||
|
/// shell string parsing. To provide additional arguments, use the
|
||||||
|
/// "command-arg" configuration (repeated for multiple arguments).
|
||||||
|
///
|
||||||
|
/// If you're using the `ghostty` CLI there is also a shortcut
|
||||||
|
/// to run a command with argumens directly: you can use the `-e`
|
||||||
|
/// flag. For example: `ghostty -e fish --with --custom --args`.
|
||||||
|
/// This is just shorthand for specifying "command" and
|
||||||
|
/// "command-arg" in the configuration.
|
||||||
command: ?[]const u8 = null,
|
command: ?[]const u8 = null,
|
||||||
|
|
||||||
/// A single argument to pass to the command. This can be repeated to
|
/// A single argument to pass to the command. This can be repeated to
|
||||||
|
@ -722,13 +722,28 @@ const Subprocess = struct {
|
|||||||
const alloc = arena.allocator();
|
const alloc = arena.allocator();
|
||||||
|
|
||||||
// Determine the path to the binary we're executing
|
// Determine the path to the binary we're executing
|
||||||
|
const default_path = switch (builtin.os.tag) {
|
||||||
|
.windows => "cmd.exe",
|
||||||
|
else => "sh",
|
||||||
|
};
|
||||||
const path = try Command.expandPath(
|
const path = try Command.expandPath(
|
||||||
alloc,
|
alloc,
|
||||||
opts.full_config.command orelse switch (builtin.os.tag) {
|
opts.full_config.command orelse default_path,
|
||||||
.windows => "cmd.exe",
|
) orelse path: {
|
||||||
else => "sh",
|
// If we had a command specified, try to at least fall
|
||||||
},
|
// back to a default value like "sh" so that Ghostty
|
||||||
) orelse return error.CommandNotFound;
|
// launches.
|
||||||
|
if (opts.full_config.command) |command| {
|
||||||
|
log.warn("unable to find command, fallbacking back to default command={s}", .{command});
|
||||||
|
if (try Command.expandPath(
|
||||||
|
alloc,
|
||||||
|
default_path,
|
||||||
|
)) |path| break :path path;
|
||||||
|
}
|
||||||
|
|
||||||
|
log.warn("unable to find default command to launch, exiting", .{});
|
||||||
|
return error.CommandNotFound;
|
||||||
|
};
|
||||||
|
|
||||||
// On macOS, we launch the program as a login shell. This is a Mac-specific
|
// On macOS, we launch the program as a login shell. This is a Mac-specific
|
||||||
// behavior (see other terminals). Terminals in general should NOT be
|
// behavior (see other terminals). Terminals in general should NOT be
|
||||||
|
Reference in New Issue
Block a user