mirror of https://codeberg.org/cage/tinmop/
- added bookmarking of gopher addresses.
This commit is contained in:
parent
60f33d81a9
commit
6481a323f7
|
@ -766,6 +766,12 @@
|
||||||
|
|
||||||
(define-key "b" #'gemini-history-back *gopher-keymap*)
|
(define-key "b" #'gemini-history-back *gopher-keymap*)
|
||||||
|
|
||||||
|
(define-key "C-b a" #'bookmark-gopher-page *gopher-keymap*)
|
||||||
|
|
||||||
|
(define-key "C-b s" #'display-bookmark *gopher-keymap*)
|
||||||
|
|
||||||
|
(define-key "C-b d" #'delete-gemini-bookmark *gopher-keymap*)
|
||||||
|
|
||||||
;;;; hooks
|
;;;; hooks
|
||||||
|
|
||||||
;; this module will install an hook to rewrite urls; By default it
|
;; this module will install an hook to rewrite urls; By default it
|
||||||
|
|
|
@ -27,6 +27,16 @@
|
||||||
:accessor page-type
|
:accessor page-type
|
||||||
:documentation "The type of the page , 0,1,2,i etc.")))
|
:documentation "The type of the page , 0,1,2,i etc.")))
|
||||||
|
|
||||||
|
(defun gopher-window-p (w)
|
||||||
|
(typep w 'gopher-window))
|
||||||
|
|
||||||
|
(defun current-gopher-url ()
|
||||||
|
(when (gopher-window-p specials:*gopher-window*)
|
||||||
|
(a:when-let* ((metadata (message-window:metadata specials:*message-window*))
|
||||||
|
(history (gemini-viewer:gemini-metadata-history metadata))
|
||||||
|
(link (a:last-elt history)))
|
||||||
|
link)))
|
||||||
|
|
||||||
(defmethod refresh-config :after ((object gopher-window))
|
(defmethod refresh-config :after ((object gopher-window))
|
||||||
(refresh-config-colors object swconf:+key-gopher-window+)
|
(refresh-config-colors object swconf:+key-gopher-window+)
|
||||||
(let* ((height (win-height *message-window*))
|
(let* ((height (win-height *message-window*))
|
||||||
|
|
|
@ -75,25 +75,29 @@
|
||||||
|
|
||||||
(defun open-message-link (url enqueue)
|
(defun open-message-link (url enqueue)
|
||||||
(tui-utils:with-notify-errors
|
(tui-utils:with-notify-errors
|
||||||
(let* ((parsed (iri:iri-parse url))
|
(if (text-utils:string-starts-with-p gopher-parser:+gopher-scheme+ url)
|
||||||
(scheme (uri:scheme parsed))
|
(multiple-value-bind (host port type selector)
|
||||||
(decoded-path (percent-decode url)))
|
(gopher-parser:parse-iri url)
|
||||||
(when (and (not enqueue)
|
(gopher-window::make-request host port type selector))
|
||||||
(swconf:close-link-window-after-select-p))
|
(let* ((parsed (iri:iri-parse url))
|
||||||
(ui:close-open-message-link-window))
|
(scheme (uri:scheme parsed))
|
||||||
(cond
|
(decoded-path (percent-decode url)))
|
||||||
((string= gemini-constants:+gemini-scheme+ scheme)
|
(when (and (not enqueue)
|
||||||
(db:insert-in-history (ui:open-url-prompt) url)
|
(swconf:close-link-window-after-select-p))
|
||||||
(db:gemlog-mark-as-seen url)
|
(ui:close-open-message-link-window))
|
||||||
(gemini-viewer:ensure-just-one-stream-rendering)
|
(cond
|
||||||
(gemini-viewer:load-gemini-url url
|
((string= gemini-constants:+gemini-scheme+ scheme)
|
||||||
:give-focus-to-message-window t
|
(db:insert-in-history (ui:open-url-prompt) url)
|
||||||
:enqueue enqueue
|
(db:gemlog-mark-as-seen url)
|
||||||
:use-cached-file-if-exists t))
|
(gemini-viewer:ensure-just-one-stream-rendering)
|
||||||
((fs:dirp decoded-path)
|
(gemini-viewer:load-gemini-url url
|
||||||
(ui:open-file-explorer decoded-path))
|
:give-focus-to-message-window t
|
||||||
(t
|
:enqueue enqueue
|
||||||
(os-utils:open-resource-with-external-program decoded-path nil))))))
|
:use-cached-file-if-exists t))
|
||||||
|
((fs:dirp decoded-path)
|
||||||
|
(ui:open-file-explorer decoded-path))
|
||||||
|
(t
|
||||||
|
(os-utils:open-resource-with-external-program decoded-path nil)))))))
|
||||||
|
|
||||||
(defclass open-links-window ()
|
(defclass open-links-window ()
|
||||||
((links
|
((links
|
||||||
|
|
|
@ -2292,6 +2292,8 @@
|
||||||
(:a :alexandria))
|
(:a :alexandria))
|
||||||
(:export
|
(:export
|
||||||
:gopher-window
|
:gopher-window
|
||||||
|
:gopher-window-p
|
||||||
|
:current-gopher-url
|
||||||
:go-to-next-link
|
:go-to-next-link
|
||||||
:go-to-previous-link
|
:go-to-previous-link
|
||||||
:open-menu-link
|
:open-menu-link
|
||||||
|
@ -2908,6 +2910,7 @@
|
||||||
:ask-input-on-tofu-error
|
:ask-input-on-tofu-error
|
||||||
:import-gemini-certificate
|
:import-gemini-certificate
|
||||||
:bookmark-gemini-page
|
:bookmark-gemini-page
|
||||||
|
:bookmark-gopher-page
|
||||||
:display-bookmark
|
:display-bookmark
|
||||||
:delete-gemini-bookmark
|
:delete-gemini-bookmark
|
||||||
:display-latest-visited-urls
|
:display-latest-visited-urls
|
||||||
|
|
|
@ -1124,6 +1124,7 @@
|
||||||
(refresh-gemini-message-window links page-data ir-text nil)
|
(refresh-gemini-message-window links page-data ir-text nil)
|
||||||
(ui:open-gemini-toc)
|
(ui:open-gemini-toc)
|
||||||
(ui:open-gemini-message-link-window :give-focus nil :enqueue t)
|
(ui:open-gemini-message-link-window :give-focus nil :enqueue t)
|
||||||
|
(ui:focus-to-message-window)
|
||||||
(windows:draw window)))))
|
(windows:draw window)))))
|
||||||
|
|
||||||
(defclass gemini-request-event (program-event)
|
(defclass gemini-request-event (program-event)
|
||||||
|
|
|
@ -2577,6 +2577,34 @@ gemini page the program is rendering."
|
||||||
:prompt (format nil (_ "Insert certificate file: "))
|
:prompt (format nil (_ "Insert certificate file: "))
|
||||||
:complete-fn #'complete:directory-complete))))
|
:complete-fn #'complete:directory-complete))))
|
||||||
|
|
||||||
|
(defun bookmark-gopher-page ()
|
||||||
|
(cond
|
||||||
|
((not (gopher-window:gopher-window-p specials:*gopher-window*))
|
||||||
|
(error-message (_ "The window is not displaying a gopher document")))
|
||||||
|
((not (gopher-window:current-gopher-url))
|
||||||
|
(error-message (_ "This page can not be added to bookmarks")))
|
||||||
|
(t
|
||||||
|
(let* ((link (gopher-window:current-gopher-url))
|
||||||
|
(description (_ "No description")))
|
||||||
|
(labels ((on-description-completed (new-description)
|
||||||
|
(if (text-utils:string-empty-p new-description)
|
||||||
|
(error-message (_ "Empty description"))
|
||||||
|
(progn
|
||||||
|
(setf description new-description)
|
||||||
|
(ui:ask-string-input #'on-section-completed
|
||||||
|
:prompt (format nil (_ "Insert bookmark section: "))
|
||||||
|
:complete-fn #'complete:bookmark-section-complete))))
|
||||||
|
(on-section-completed (section)
|
||||||
|
(db-utils:with-ready-database (:connect nil)
|
||||||
|
(db:bookmark-add db:+bookmark-gemini-type-entry+
|
||||||
|
link
|
||||||
|
:section section
|
||||||
|
:description description))
|
||||||
|
(notify (format nil (_ "Added ~s in bookmark") link))))
|
||||||
|
(ui:ask-string-input #'on-description-completed
|
||||||
|
:prompt (format nil (_ "Insert bookmark description: "))
|
||||||
|
:initial-value description))))))
|
||||||
|
|
||||||
(defun bookmark-gemini-page ()
|
(defun bookmark-gemini-page ()
|
||||||
(cond
|
(cond
|
||||||
((not (message-window:gemini-window-p))
|
((not (message-window:gemini-window-p))
|
||||||
|
|
Loading…
Reference in New Issue