@@ -483,6 +483,61 @@ static void detectHaikuTerminal(FFTerminalFontResult* terminalFont) {
483483}
484484#endif
485485
486+ static void detectKmscon (FFTerminalFontResult * terminalFont , const FFTerminalResult * terminal ) {
487+ FF_STRBUF_AUTO_DESTROY cmdline = ffStrbufCreate ();
488+ FF_STRBUF_AUTO_DESTROY cmdlinePath = ffStrbufCreateF ("/proc/%u/cmdline" , terminal -> pid );
489+ if (!ffAppendFileBuffer (cmdlinePath .chars , & cmdline )) {
490+ ffStrbufAppendF (& terminalFont -> error , "Failed to open %s" , cmdlinePath .chars );
491+ return ;
492+ }
493+
494+ // Search for --configdir in NUL-separated cmdline
495+ const char * configdir = NULL ;
496+ const char * p = cmdline .chars ;
497+ const char * end = cmdline .chars + cmdline .length ;
498+ while (p < end ) {
499+ if (ffStrEquals (p , "--configdir" )) {
500+ p += strlen ("--configdir" ) + 1 ; // skip NUL
501+ if (p < end ) {
502+ configdir = p ;
503+ }
504+ break ;
505+ }
506+ p += strlen (p ) + 1 ; // skip to next NUL-terminated token
507+ }
508+
509+ // Build config file path
510+ FF_STRBUF_AUTO_DESTROY configPath = ffStrbufCreate ();
511+ if (configdir && ffStrSet (configdir )) {
512+ ffStrbufAppendS (& configPath , configdir );
513+ ffStrbufAppendS (& configPath , "/kmscon.conf" );
514+ } else {
515+ ffStrbufAppendS (& configPath , FASTFETCH_TARGET_DIR_ETC "/kmscon/kmscon.conf" );
516+ }
517+
518+ FF_STRBUF_AUTO_DESTROY fontName = ffStrbufCreate ();
519+ FF_STRBUF_AUTO_DESTROY fontSize = ffStrbufCreate ();
520+
521+ if (!ffParsePropFileValues (configPath .chars , 2 , (FFpropquery []) {
522+ { "font-name=" , & fontName },
523+ { "font-size=" , & fontSize },
524+ })) {
525+ ffStrbufAppendF (& terminalFont -> error , "Couldn't read kmscon config: %s" , configPath .chars );
526+ return ;
527+ }
528+
529+ if (fontName .length == 0 ) {
530+ ffStrbufAppendF (& terminalFont -> error , "Couldn't find font-name in %s" , configPath .chars );
531+ return ;
532+ }
533+
534+ if (fontSize .length == 0 ) {
535+ ffStrbufSetStatic (& fontSize , "16" );
536+ }
537+
538+ ffFontInitValues (& terminalFont -> font , fontName .chars , fontSize .chars );
539+ }
540+
486541bool
487542#ifdef __ANDROID__
488543ffDetectTerminalFontPlatformLinux
@@ -538,6 +593,8 @@ ffDetectTerminalFontPlatform
538593 detectFromConfigFile ("termite/config" , "font =" , terminalFont );
539594 } else if (ffStrbufIgnCaseEqualS (& terminal -> processName , "rxvt ") || ffStrbufIgnCaseEqualS (& terminal -> processName , "urxvt ") || ffStrbufIgnCaseEqualS(&terminal->processName, " urxvtd ")) {
540595 detectUrxvt (terminalFont );
596+ } else if (ffStrbufIgnCaseEqualS (& terminal -> processName , "kmscon ")) {
597+ detectKmscon (terminalFont , terminal );
541598 } else {
542599 return false;
543600 }
0 commit comments