1
0
Fork 0

- [gemini] added feature: open local directory.

This commit is contained in:
cage 2021-03-27 10:21:19 +01:00
parent 57776623aa
commit 6a82f892a1
3 changed files with 50 additions and 15 deletions

View File

@ -126,6 +126,13 @@
(nix:eloop () 0))
(nix:closedir ,dir)))))
(defun collect-children (parent-dir)
(let ((all-paths ()))
(fs:do-directory (path) parent-dir
(push path all-paths))
(setf all-paths (sort all-paths #'string<))
all-paths))
(defun search-matching-file (root-directory &key (name ".*"))
"Scan a filesystem saving files that match the provided criteria,
does not follow symlinks."

View File

@ -278,7 +278,10 @@
:strip-extension
:add-extension
:do-directory
:collect-children
:search-matching-file
:regular-file-p
:dirp
:split-path-elements
:path-last-element
:path-first-element

View File

@ -1013,21 +1013,46 @@
keybindings:*gemini-message-keymap*)
(when give-focus-to-message-window-p
(ui:focus-to-message-window))
(if (gemini-client:absolute-gemini-url-p url)
(gemini-viewer:request url :use-cached-file-if-exists use-cached-file-if-exists)
(let* ((file-string (fs:slurp-file url))
(parent-dir (fs:parent-dir-path url))
(parsed (gemini-parser:parse-gemini-file file-string))
(links (gemini-parser:sexp->links parsed
nil
nil
parent-dir
:comes-from-local-file t))
(text (gemini-parser:sexp->text parsed
gemini-client:*gemini-page-theme*)))
(gemini-viewer:maybe-initialize-metadata window)
(refresh-gemini-message-window links file-string text nil)
(windows:draw window)))))))
(cond
((gemini-client:absolute-gemini-url-p url)
(gemini-viewer:request url :use-cached-file-if-exists use-cached-file-if-exists))
((fs:dirp url)
(let* ((all-paths (fs:collect-children url))
(raw-text (with-output-to-string (stream)
(write-sequence (gemini-parser:geminize-h1
(format nil
(_ "Index of local directory ~a~2%")
url))
stream)
(loop for path in all-paths do
(format stream
"~a~%"
(gemini-parser:make-gemini-link path path)))))
(parsed (gemini-parser:parse-gemini-file raw-text))
(links (gemini-parser:sexp->links parsed
nil
nil
""
:comes-from-local-file t))
(text (gemini-parser:sexp->text parsed
gemini-client:*gemini-page-theme*)))
(gemini-viewer:maybe-initialize-metadata window)
(refresh-gemini-message-window links raw-text text nil)
(windows:draw window)))
(t
(let* ((file-string (fs:slurp-file url))
(parent-dir (fs:parent-dir-path url))
(parsed (gemini-parser:parse-gemini-file file-string))
(links (gemini-parser:sexp->links parsed
nil
nil
parent-dir
:comes-from-local-file t))
(text (gemini-parser:sexp->text parsed
gemini-client:*gemini-page-theme*)))
(gemini-viewer:maybe-initialize-metadata window)
(refresh-gemini-message-window links file-string text nil)
(windows:draw window))))))))
(defclass gemini-back-event (program-event) ())