@@ -576,6 +576,25 @@ static bool getTerminalVersionZed(FFstrbuf* exe, FFstrbuf* version)
576
576
return true;
577
577
}
578
578
579
+ static bool getTerminalVersionGhostty (FFstrbuf * exe , FFstrbuf * version )
580
+ {
581
+ const char * env = getenv ("TERM_PROGRAM_VERSION" );
582
+ if (env )
583
+ {
584
+ ffStrbufAppendS (version , env );
585
+ // 1.1.3-arch1
586
+ ffStrbufSubstrBeforeFirstC (version , '-' );
587
+ if (version -> length > 0 ) return true;
588
+ }
589
+
590
+ if (!getExeVersionRaw (exe , version )) return false;
591
+ // Ghostty 1.1.3-arch1\n\nVersion\n...
592
+ ffStrbufSubstrBeforeFirstC (version , '\n' ); // Ghostty 1.1.3-arch1
593
+ ffStrbufSubstrAfterFirstC (version , ' ' ); // 1.1.3-arch1, only Arch Linux has the suffix '-arch1'
594
+ ffStrbufSubstrBeforeFirstC (version , '-' ); // 1.1.3
595
+ return version -> length > 0 ;
596
+ }
597
+
579
598
#ifndef _WIN32
580
599
static bool getTerminalVersionKitty (FFstrbuf * exe , FFstrbuf * version )
581
600
{
@@ -873,6 +892,9 @@ bool fftsGetTerminalVersion(FFstrbuf* processName, FF_MAYBE_UNUSED FFstrbuf* exe
873
892
if (ffStrbufStartsWithIgnCaseS (processName , "zed" ))
874
893
return getTerminalVersionZed (exe , version );
875
894
895
+ if (ffStrbufStartsWithIgnCaseS (processName , "ghostty" ))
896
+ return getTerminalVersionGhostty (exe , version );
897
+
876
898
#if __HAIKU__
877
899
if (ffStrbufEqualS (processName , "Terminal" ))
878
900
return ffGetFileVersion (exe -> chars , version );
0 commit comments