summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtyom Bologov <aartaka@protonmail.com>2023-12-01 14:49:19 +0400
committerAndre A. Gomes <andremegafone@gmail.com>2023-12-11 10:51:55 +0200
commit3ea674963ae524923e36445bdbcc09f1b1922601 (patch)
tree771415b6cbeca87b561d5fea90688889049e8d6c
parent2c99ac60ab1a1cae9ce1cf5c824afbd3304b4845 (diff)
renderer/gtk(context-source): Parse the existing contexts.
-rw-r--r--source/renderer/gtk.lisp21
1 files changed, 18 insertions, 3 deletions
diff --git a/source/renderer/gtk.lisp b/source/renderer/gtk.lisp
index d5bce4476..fef71f444 100644
--- a/source/renderer/gtk.lisp
+++ b/source/renderer/gtk.lisp
@@ -2313,11 +2313,26 @@ As a second value, return the current buffer index starting from 0."
WebKit-specific."
(webkit:webkit-web-view-reload-bypass-cache (gtk-object buffer)))
+(defun list-existing-contexts ()
+ (loop for dir in (uiop:subdirectories
+ (files:expand (make-instance 'nyxt:nyxt-data-directory)))
+ ;; PATHNAME-DIRECTORY returns a list on most implementations (UIOP
+ ;; relies on that, at least), even though the standard doesn't mandate
+ ;; it.
+ for dirname = (alex:lastcar (uiop:ensure-list (pathname-directory dir)))
+ when (uiop:string-suffix-p dirname "web-context")
+ collect (subseq dirname
+ 0
+ (- (length dirname) (length "web-context/")))))
+
(define-class context-source (prompter:source)
((prompter:name "Context list")
- (prompter:constructor (sort (delete-duplicates (append (mapcar #'context-name (buffer-list))
- (list +internal+ +default+))
- :test 'equal)
+ (prompter:constructor (sort (delete-duplicates
+ (append
+ (mapcar #'context-name (buffer-list))
+ (list +internal+ +default+)
+ (list-existing-contexts))
+ :test 'equal)
'string<)))
(:export-class-name-p t))