branch: externals/show-font
commit a65e7a242ac4fe5d2b775a3b48222ed3598f9997
Author: Protesilaos Stavrou <[email protected]>
Commit: Protesilaos Stavrou <[email protected]>
Add more helpers to check for installed fonts
Now we have an OS-agnostic backend in the form of 'x-family-fonts' and
one that works on Linux via fc-list. My goal is to have an OS-agnostic
implementation of the latter or, at least, have a function that does
the right thing on each platform.
---
show-font.el | 35 +++++++++++++++++++++++------------
1 file changed, 23 insertions(+), 12 deletions(-)
diff --git a/show-font.el b/show-font.el
index 5f9a31f4dc..c722cb6e0c 100644
--- a/show-font.el
+++ b/show-font.el
@@ -33,7 +33,6 @@
;;; Code:
;; TODO 2024-08-24: Offer option to install missing font.
-;; TODO 2024-08-27: Make this package work with other operating systems.
(eval-when-compile (require 'cl-lib))
@@ -183,19 +182,31 @@ matched against the output of the `fc-scan' executable."
(car (split-string output ","))
output)))
-(defun show-font--get-installed-fonts (&optional attribute)
- "Get list of font families available on the system.
-With optional ATTRIBUTE use it instead of \"family\"."
+(defun show-font--get-installed-font-families (&optional full)
+ "Return list of installed font families names.
+With optional FULL, return the full XLFD representation instead."
+ (mapcar
+ (lambda (font)
+ (if full
+ (aref font 6)
+ (format "%s" (aref font 0))))
+ (x-family-fonts)))
+
+(defun show-font-installed-p (family)
+ "Return non-nil if font family FAMILY is installed on the system.
+FAMILY is a string like those of `show-font--get-installed-font-families'."
+ (member family (show-font--get-installed-font-families)))
+
+(defun show-font--get-installed-font-files ()
+ "Get list of font files available on the system."
(unless (executable-find "fc-list")
(error "Cannot find `fc-list' executable; will not find installed fonts"))
- (process-lines
- "fc-list"
- "-f"
- (format "%%{%s}\n" (or attribute "file"))))
-
-(defun show-font--installed-p (file)
- "Return non-nil if font FILE is installed on the system."
- (member file (show-font--get-installed-fonts)))
+ ;; TODO 2024-09-06: Make this work with other font backends.
+ (process-lines "fc-list" "-f" (format "%%{%s}\n" "file")))
+
+(defun show-font-installed-file-p (file)
+ "Return non-nil if FILE is among `show-font--get-installed-font-files'."
+ (member file (show-font--get-installed-font-files)))
;; TODO 2024-09-06: Maybe we can rewrite `show-font--get-pangram' in some
smart way to do this:
;;