diff --git a/src/gemini-viewer.lisp b/src/gemini-viewer.lisp index d41d562..b28fe12 100644 --- a/src/gemini-viewer.lisp +++ b/src/gemini-viewer.lisp @@ -47,6 +47,7 @@ (db-utils:with-ready-database (:connect nil) (request new-url)))))) (ui:ask-string-input #'on-input-complete + :priority program-events:+minimum-event-priority+ :prompt (format nil (_ "Redirects to ~s, follows redirect? [y/N] ") diff --git a/src/main.lisp b/src/main.lisp index 4ee051d..a44448f 100644 --- a/src/main.lisp +++ b/src/main.lisp @@ -87,6 +87,11 @@ etc.) happened" (defun reset-timeline-pagination () (ui:reset-timeline-pagination)) +(defun load-gemini-url (url) + (let* ((refresh-event (make-instance 'program-events:gemini-request-event + :url url))) + (program-events:push-event refresh-event))) + (defun load-configuration-files () (swconf:load-config-file swconf:+shared-conf-filename+) (swconf:load-config-file swconf:+conf-filename+)) @@ -117,9 +122,7 @@ etc.) happened" (client:init) (client:authorize) (if command-line:*gemini-url* - (progn - (gemini-viewer:request *gemini-url*) - (ui:focus-to-message-window)) + (load-gemini-url command-line:*gemini-url*) (progn (let ((program-events:*process-events-immediately* t)) (when command-line:*start-timeline* diff --git a/src/package.lisp b/src/package.lisp index db3701e..1a91eaf 100644 --- a/src/package.lisp +++ b/src/package.lisp @@ -1194,6 +1194,7 @@ :report-status-event :add-crypto-data-event :poll-vote-event + :gemini-request-event :function-event :dispatch-program-events :add-pagination-status-event diff --git a/src/program-events.lisp b/src/program-events.lisp index bc8c408..c7d5e10 100644 --- a/src/program-events.lisp +++ b/src/program-events.lisp @@ -179,8 +179,10 @@ set the payload of this events with the user provided string.")) (defmethod initialize-instance :after ((object ask-user-input-string-event) - &key &allow-other-keys) - (setf (priority object) (truncate (/ +standard-event-priority+ 2)))) + &key (forced-priority nil) &allow-other-keys) + (if forced-priority + (setf (priority object) forced-priority) + (setf (priority object) (truncate (/ +standard-event-priority+ 2))))) (defmethod process-event ((object ask-user-input-string-event)) (with-accessors ((prompt prompt) @@ -190,6 +192,7 @@ object) (setf (point-tracker:prompt specials:*command-window*) prompt) + (command-window:remove-messages specials:*command-window*) (setf complete:*complete-function* complete-fn) (command-window:set-string-mode specials:*command-window*) (command-window:set-history-most-recent specials:*command-window* prompt) @@ -887,6 +890,17 @@ (tui:with-notify-errors (api-client:poll-vote poll-id choices)))) +(defclass gemini-request-event (program-event) + ((url + :initform nil + :initarg :url + :accessor url))) + +(defmethod process-event ((object gemini-request-event)) + (with-accessors ((url url)) object + (ui:focus-to-message-window) + (gemini-viewer:request url))) + (defclass function-event (program-event) ()) (defmethod process-event ((object function-event)) diff --git a/src/ui-goodies.lisp b/src/ui-goodies.lisp index 71e8758..62c4278 100644 --- a/src/ui-goodies.lisp +++ b/src/ui-goodies.lisp @@ -142,15 +142,17 @@ (defun ask-string-input (on-input-complete-fn &key + (priority nil) (initial-value nil) (prompt +default-command-prompt+) (complete-fn #'complete:directory-complete)) (flet ((thread-fn () (let ((event (make-instance 'ask-user-input-string-event - :initial-value initial-value - :complete-fn complete-fn - :prompt prompt - :payload (box:dbox nil)))) + :forced-priority priority + :initial-value initial-value + :complete-fn complete-fn + :prompt prompt + :payload (box:dbox nil)))) (with-accessors ((lock lock) (condition-variable condition-variable)) event (push-event event)