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
|
||||
/// - 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,
|
||||
|
||||
/// A single argument to pass to the command. This can be repeated to
|
||||
|
@ -722,13 +722,28 @@ const Subprocess = struct {
|
||||
const alloc = arena.allocator();
|
||||
|
||||
// Determine the path to the binary we're executing
|
||||
const path = try Command.expandPath(
|
||||
alloc,
|
||||
opts.full_config.command orelse switch (builtin.os.tag) {
|
||||
const default_path = switch (builtin.os.tag) {
|
||||
.windows => "cmd.exe",
|
||||
else => "sh",
|
||||
},
|
||||
) orelse return error.CommandNotFound;
|
||||
};
|
||||
const path = try Command.expandPath(
|
||||
alloc,
|
||||
opts.full_config.command orelse default_path,
|
||||
) orelse path: {
|
||||
// If we had a command specified, try to at least fall
|
||||
// back to a default value like "sh" so that Ghostty
|
||||
// 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
|
||||
// behavior (see other terminals). Terminals in general should NOT be
|
||||
|
Reference in New Issue
Block a user