diff --git a/CMakeLists.txt b/CMakeLists.txt index 6dd8d82f0..836f4f16e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -246,6 +246,7 @@ if(APPLE) src/detection/displayserver/displayserver_apple.c src/modules/terminalfont_apple.c src/util/apple/cfdict_helpers.c + src/util/apple/osascript.m ) elseif(ANDROID) list(APPEND LIBFASTFETCH_SRC @@ -333,6 +334,7 @@ if(APPLE) PRIVATE "-framework CoreGraphics" PRIVATE "-framework OpenGL" PRIVATE "-framework OpenCL" + PRIVATE "-framework Cocoa" ) endif() diff --git a/src/modules/terminalfont_apple.c b/src/modules/terminalfont_apple.c index f748e7a47..d7454a302 100644 --- a/src/modules/terminalfont_apple.c +++ b/src/modules/terminalfont_apple.c @@ -3,6 +3,7 @@ #include "common/font.h" #include "common/io.h" #include "common/library.h" +#include "util/apple/osascript.h" #include "terminalfont.h" #include @@ -106,11 +107,36 @@ static void printIterm2(FFinstance* instance) #endif } +static void printAppleTerminal(FFinstance* instance) +{ + FFstrbuf fontName; + ffStrbufInit(&fontName); + if(!ffOsascript("tell application \"Terminal\" to font name of window frontmost", &fontName)) + { + ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.terminalFont, "osascript failed"); + return; + } + + FFstrbuf fontSize; + ffStrbufInit(&fontSize); + ffOsascript("tell application \"Terminal\" to font size of window frontmost", &fontSize); + + FFfont font; + ffFontInitValues(&font, fontName.chars, fontSize.chars); + ffPrintTerminalFontResult(instance, fontName.chars, &font); + ffFontDestroy(&font); + + ffStrbufDestroy(&fontName); + ffStrbufDestroy(&fontSize); +} + bool ffPrintTerminalFontPlatform(FFinstance* instance, const FFTerminalShellResult* shellInfo) { bool success = true; if(ffStrbufIgnCaseCompS(&shellInfo->terminalProcessName, "iterm.app") == 0) printIterm2(instance); + else if(ffStrbufIgnCaseCompS(&shellInfo->terminalProcessName, "Apple_Terminal") == 0) + printAppleTerminal(instance); else success = false; return success; diff --git a/src/util/apple/osascript.h b/src/util/apple/osascript.h new file mode 100644 index 000000000..2c9fe8306 --- /dev/null +++ b/src/util/apple/osascript.h @@ -0,0 +1,10 @@ +#pragma once + +#ifndef FASTFETCH_INCLUDED_osascript +#define FASTFETCH_INCLUDED_osascript + +#include "fastfetch.h" + +bool ffOsascript(const char* input, FFstrbuf* result); + +#endif diff --git a/src/util/apple/osascript.m b/src/util/apple/osascript.m new file mode 100644 index 000000000..363a50d12 --- /dev/null +++ b/src/util/apple/osascript.m @@ -0,0 +1,17 @@ +#include "osascript.h" + +#import +#import +#import + +bool ffOsascript(const char* input, FFstrbuf* result) { + NSString* appleScript = [NSString stringWithUTF8String: input]; + NSAppleScript* script = [[NSAppleScript alloc] initWithSource:appleScript]; + NSDictionary* errInfo = nil; + NSAppleEventDescriptor* descriptor = [script executeAndReturnError:&errInfo]; + if (errInfo) + return false; + + ffStrbufSetS(result, [[descriptor stringValue] cStringUsingEncoding:NSUTF8StringEncoding]); + return true; +}