From cf09f6d63672d7cf0aac921d042f74d434595031 Mon Sep 17 00:00:00 2001 From: Justin Bender Date: Sun, 12 Jan 2025 04:22:04 -0500 Subject: [PATCH] Adding $EDITOR check for open Allowing for users to set the $EDITOR variable and use it to open a file instead of the default on mac --- src/os/open.zig | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/src/os/open.zig b/src/os/open.zig index f6dc7ca2a..c71b10ef8 100644 --- a/src/os/open.zig +++ b/src/os/open.zig @@ -19,27 +19,12 @@ pub fn open( url: []const u8, ) !void { const cmd: OpenCommand = switch (builtin.os.tag) { - .linux => .{ .child = std.process.Child.init( - &.{ "xdg-open", url }, - alloc, - ) }, - + .linux => try determineOpenCommandLinux(alloc, url), .windows => .{ .child = std.process.Child.init( &.{ "rundll32", "url.dll,FileProtocolHandler", url }, alloc, ) }, - - .macos => .{ - .child = std.process.Child.init( - switch (typ) { - .text => &.{ "open", "-t", url }, - .unknown => &.{ "open", url }, - }, - alloc, - ), - .wait = true, - }, - + .macos => try determineOpenCommandMacOS(alloc, typ, url), .ios => return error.Unimplemented, else => @compileError("unsupported OS"), }; @@ -73,6 +58,33 @@ pub fn open( } } +fn determineOpenCommandLinux(alloc: Allocator, url: []const u8) !OpenCommand { + const editor = std.process.getEnvVarOptional("EDITOR") orelse return .{ .child = std.process.Child.init( + &.{ "xdg-open", url }, + alloc, + ) }; + + return .{ .child = std.process.Child.init( + &.{ editor, url }, + alloc, + ) }; +} + +fn determineOpenCommandMacOS(alloc: Allocator, typ: Type, url: []const u8) !OpenCommand { + const editor = std.process.getEnvVarOptional("EDITOR") orelse return .{ .child = std.process.Child.init( + switch (typ) { + .text => &.{ "open", "-t", url }, + .unknown => &.{ "open", url }, + }, + alloc, + ) }; + + return .{ .child = std.process.Child.init( + &.{ editor, url }, + alloc, + ) }; +} + const OpenCommand = struct { child: std.process.Child, wait: bool = false,