1
0
Fork 0

- improved opening net command, gemini and also kami address can be opened.

This commit is contained in:
cage 2022-01-23 14:55:05 +01:00
parent 496c624ee7
commit a3a68a7486
6 changed files with 46 additions and 45 deletions

View File

@ -137,8 +137,6 @@
;; global keymap ;; global keymap
(define-key "M-k >" #'kami-open-url)
(define-key "q" #'quit) ; here we are calling the custom (define-key "q" #'quit) ; here we are calling the custom
; function defined above ; function defined above
(define-key "C-a" #'show-about-window) (define-key "C-a" #'show-about-window)
@ -155,7 +153,7 @@
(define-key "!" #'gemini-search) (define-key "!" #'gemini-search)
(define-key ">" #'open-gemini-address) (define-key ">" #'open-net-address)
(define-key "M-c" #'open-chats-list-window) (define-key "M-c" #'open-chats-list-window)

View File

@ -1,5 +1,7 @@
(in-package :kami) (in-package :kami)
(a:define-constant +kami-scheme+ "np" :test #'string=)
(a:define-constant +download-buffer+ (expt 2 24) :test #'=) (a:define-constant +download-buffer+ (expt 2 24) :test #'=)
(a:define-constant +octect-type+ '(unsigned-byte 8) :test #'equalp) (a:define-constant +octect-type+ '(unsigned-byte 8) :test #'equalp)

View File

@ -8,5 +8,6 @@
(:local-nicknames (:9p :purgatory) (:local-nicknames (:9p :purgatory)
(:a :alexandria)) (:a :alexandria))
(:export (:export
:+kami-scheme+
:generate-filesystem-window-handlers :generate-filesystem-window-handlers
:iri->filesystem-window-handlers)) :iri->filesystem-window-handlers))

View File

@ -80,7 +80,7 @@
(ui:close-open-message-link-window)) (ui:close-open-message-link-window))
(cond (cond
((string= gemini-constants:+gemini-scheme+ scheme) ((string= gemini-constants:+gemini-scheme+ scheme)
(db:insert-in-history (ui:gemini-open-url-prompt) url) (db:insert-in-history (ui:open-url-prompt) url)
(db:gemlog-mark-as-seen url) (db:gemlog-mark-as-seen url)
(gemini-viewer:ensure-just-one-stream-rendering) (gemini-viewer:ensure-just-one-stream-rendering)
(gemini-viewer:load-gemini-url url (gemini-viewer:load-gemini-url url

View File

@ -2740,7 +2740,8 @@
:chat-create-new :chat-create-new
:chat-list-go-up :chat-list-go-up
:chat-list-go-down :chat-list-go-down
:gemini-open-url-prompt :open-url-prompt
:open-net-address
:open-gemini-address :open-gemini-address
:gemini-history-back :gemini-history-back
:gemini-view-source :gemini-view-source
@ -2805,7 +2806,7 @@
:load-script-file :load-script-file
:view-user-avatar :view-user-avatar
:open-file-explorer :open-file-explorer
:kami-open-url :open-kami-address
:file-explorer-expand-path :file-explorer-expand-path
:file-explorer-close-path :file-explorer-close-path
:file-explorer-rename-path :file-explorer-rename-path

View File

@ -1895,23 +1895,30 @@ mot recent updated to least recent"
;;;; gemini ;;;; gemini
(defun gemini-open-url-prompt () (defun open-url-prompt ()
"This is used when opening gemini link too, see: "This is used when opening gemini link too, see:
open-message-link-window:open-message-link" open-message-link-window:open-message-link"
(_ "Open Gemini url: ")) (_ "Open url: "))
(defun open-gemini-address () (defun open-net-address ()
"Ask for a gemini address and try to load it" "Ask for an internet address and try to load it.
Currently the only recognized protocols are gemini and kami."
(flet ((on-input-complete (url) (flet ((on-input-complete (url)
(gemini-viewer:load-gemini-url (trim-blanks url) (let ((trimmed-url (trim-blanks url)))
:use-cached-file-if-exists t (if (text-utils:string-starts-with-p kami:+kami-scheme+ trimmed-url)
:priority program-events:+maximum-event-priority+))) (open-kami-address trimmed-url)
(open-gemini-address trimmed-url)))))
(let ((prompt (gemini-open-url-prompt))) (let ((prompt (open-url-prompt)))
(ask-string-input #'on-input-complete (ask-string-input #'on-input-complete
:prompt prompt :prompt prompt
:complete-fn (complete:make-complete-gemini-iri-fn prompt))))) :complete-fn (complete:make-complete-gemini-iri-fn prompt)))))
(defun open-gemini-address (url)
(gemini-viewer:load-gemini-url url
:use-cached-file-if-exists t
:priority program-events:+maximum-event-priority+))
(defun gemini-history-back () (defun gemini-history-back ()
"Reopen a previous visited gemini address" "Reopen a previous visited gemini address"
(push-event (make-instance 'gemini-back-event))) (push-event (make-instance 'gemini-back-event)))
@ -2208,8 +2215,8 @@ gemini page the program is rendering."
:prompt (format nil (_ "Insert certificate key file: ")) :prompt (format nil (_ "Insert certificate key file: "))
:complete-fn #'complete:directory-complete))) :complete-fn #'complete:directory-complete)))
(on-cert-key-path-input-complete (key-path) (on-cert-key-path-input-complete (key-path)
(let ((prompt-history (gemini-open-url-prompt)) (let ((prompt-history (open-url-prompt))
(prompt (_ "Insert the gemini IRI where where credential are valid: "))) (prompt (_ "Insert the gemini address where where credential are valid: ")))
(when (file-valid-p key-path) (when (file-valid-p key-path)
(setf cert-key-file key-path) (setf cert-key-file key-path)
(ui:ask-string-input #'on-valid-uri-complete (ui:ask-string-input #'on-valid-uri-complete
@ -2294,7 +2301,7 @@ gemini page the program is rendering."
(push-event event))) (push-event event)))
(defun generate-latest-visited-url () (defun generate-latest-visited-url ()
(let ((history (remove-duplicates (db:history-prompt->values (gemini-open-url-prompt)) (let ((history (remove-duplicates (db:history-prompt->values (open-url-prompt))
:test #'string=))) :test #'string=)))
(with-output-to-string (stream) (with-output-to-string (stream)
(format stream (gemini-parser:geminize-h1 (_ "Latest visited addresses~2%"))) (format stream (gemini-parser:geminize-h1 (_ "Latest visited addresses~2%")))
@ -2420,33 +2427,25 @@ printed, on the main window."
(filesystem-tree-window:init actual-root) (filesystem-tree-window:init actual-root)
(focus-to-filesystem-explorer-window)))) (focus-to-filesystem-explorer-window))))
(defun kami-open-url-prompt () (defun open-kami-address (url)
(_ "Open kami url: ")) (with-enqueued-process ()
(tui:with-notify-errors
(defun kami-open-url () (let ((handlers (kami:iri->filesystem-window-handlers url)))
(flet ((on-input-complete (url) (if handlers
(with-enqueued-process () (let* ((path (uri:path (iri:iri-parse url)))
(tui:with-notify-errors (path-to-dir-p (fs:path-referencing-dir-p path))
(let ((handlers (kami:iri->filesystem-window-handlers url))) (init-path (if path-to-dir-p
(if handlers path
(let* ((path (uri:path (iri:iri-parse url))) (fs:parent-dir-path path))))
(path-to-dir-p (fs:path-referencing-dir-p path)) (filesystem-tree-window:init init-path handlers)
(init-path (if path-to-dir-p (if path-to-dir-p
path (focus-to-filesystem-explorer-window)
(fs:parent-dir-path path)))) (progn
(filesystem-tree-window:init init-path handlers) (%file-explorer-download-path path)
(if path-to-dir-p (file-explorer-close-path))))
(focus-to-filesystem-explorer-window) (error-message (format nil
(progn (_ "~s is not a valid kami address")
(%file-explorer-download-path path) url)))))))
(file-explorer-close-path))))
(error-message (format nil
(_ "~s is not a valid kami address")
url))))))))
(let ((prompt (kami-open-url-prompt)))
(ask-string-input #'on-input-complete
:prompt prompt
:complete-fn (complete:make-complete-gemini-iri-fn prompt)))))
(defun file-explorer-expand-path () (defun file-explorer-expand-path ()
(when-let* ((win *filesystem-explorer-window*) (when-let* ((win *filesystem-explorer-window*)