1
0
Fork 0

- [gui] used IRI's fragment as regex search.

This commit is contained in:
cage 2023-05-16 19:14:55 +02:00
parent 1ce69366de
commit 32ea984845
3 changed files with 40 additions and 21 deletions

View File

@ -363,6 +363,13 @@
(fetch-favicon parsed-url)))
(swconf:gemini-default-favicon)))))))
(defun fragment->regex (fragment)
(when (and fragment
(swconf:config-gemini-fragment-as-regex-p))
(if (text-utils:percent-encoded-p fragment)
(text-utils:percent-decode fragment)
fragment)))
(defun request-stream-gemini-document-thread (wrapper-object host
port path query fragment favicon
gemini-format-p
@ -489,13 +496,11 @@
(setf (stream-status wrapper-object) :completed)
(when (and fragment
(swconf:config-gemini-fragment-as-regex-p))
(let* ((regex (if (text-utils:percent-encoded-p fragment)
(text-utils:percent-decode fragment)
fragment))
(priority program-events:+standard-event-priority+)
(event (make-instance 'program-events:search-message-gemini-fragment-event
:priority priority
:payload regex)))
(when-let* ((regex (fragment->regex fragment))
(priority program-events:+standard-event-priority+)
(event (make-instance 'program-events:search-message-gemini-fragment-event
:priority priority
:payload regex)))
(program-events:push-event event))))
(t
(os-utils:open-resource-with-external-program support-file nil)))

View File

@ -165,7 +165,16 @@
(ev:with-enqueued-process-and-unblock ()
(set-bookmark-button-false main-window)))
(ev:with-enqueued-process-and-unblock ()
(set-gemlog-toolbar-button-appearance main-window iri))))
(set-gemlog-toolbar-button-appearance main-window iri))
(ev:with-enqueued-process-and-unblock ()
(a:when-let* ((fragment (uri:fragment (iri:iri-parse iri)))
(regexp (gemini-viewer::fragment->regex fragment)))
(setf (gui:text (client-search-frame::entry (search-frame main-window)))
regexp)
(funcall (client-search-frame::start-search-clsr (search-frame main-window)
(gemtext-widget main-window)
nil)
nil)))))
(defun set-gemlog-toolbar-button-appearance (main-window iri)
(if (comm:make-request :gemini-gemlog-subscribed-p 1 iri)

View File

@ -24,6 +24,21 @@
:initarg :counter
:accessor counter)))
(defun start-search-clsr (search-frame gemtext-widget case-sensitive)
(lambda (e)
(declare (ignore e))
(loop for match in (matches search-frame) do
(gui:tag-delete gemtext-widget (gui:match-tag-name match)))
(let ((tags (gui:search-all-text gemtext-widget
(gui:text (entry search-frame))
:case-insensitive
case-sensitive)))
(setf (matches search-frame) (nreverse tags)))
(loop for match in (matches search-frame) do
(gui:tag-configure gemtext-widget
(gui:match-tag-name match)
:background (gui:cget gemtext-widget
:highlightbackground)))))
(defun init-window (main-window)
(let* ((frame (make-instance 'search-frame :master main-window))
(gemtext-widget (client-main-window::gemtext-widget main-window))
@ -50,19 +65,9 @@
(button-close (_ "end searching")))
(gui:bind (entry frame)
#$<KeyPress-Return>$
(lambda (e)
(declare (ignore e))
(loop for match in (matches frame) do
(gui:tag-delete gemtext-widget (gui:match-tag-name match)))
(let ((tags (gui:search-all-text gemtext-widget
(gui:text (entry frame))
:case-insensitive
(not (gui:value case-sensitive-checkbox)))))
(setf (matches frame) (nreverse tags)))
(loop for match in (matches frame) do
(gui:tag-configure gemtext-widget
(gui:match-tag-name match)
:background (gui:cget gemtext-widget :highlightbackground)))))
(start-search-clsr frame
gemtext-widget
(not (gui:value case-sensitive-checkbox))))
(setf (gui:command (button-next frame))
(lambda ()
(when (matches frame)