From 1af9f1f98a178992f83663cde19d334edf8c8fd7 Mon Sep 17 00:00:00 2001 From: cage Date: Wed, 17 May 2023 18:24:11 +0200 Subject: [PATCH] - [GUI] added configuration directive to emphasize text wrappend in asterisk. --- etc/default-theme.conf | 8 ++++ etc/gui.conf | 4 ++ etc/shared.conf | 8 ++-- src/gui/client/client-configuration.lisp | 51 +++++++++++++++++++++++- src/gui/client/main-window.lisp | 22 +++++++++- src/package.lisp | 6 ++- 6 files changed, 91 insertions(+), 8 deletions(-) diff --git a/etc/default-theme.conf b/etc/default-theme.conf index 57bfa84..7b82ec5 100644 --- a/etc/default-theme.conf +++ b/etc/default-theme.conf @@ -688,3 +688,11 @@ gopher-window.line.prefix.search = "🔎 " gopher-window.line.prefix.foreground = cyan gopher-window.line.prefix.attribute = bold + +######################### +# ⚠ EXPERIMENTAL ZONE ⚠ # +######################### + +#emphasize text wrapped in asterisk *like this* + +emphasize-text = yes diff --git a/etc/gui.conf b/etc/gui.conf index 56eb794..8bca3b2 100644 --- a/etc/gui.conf +++ b/etc/gui.conf @@ -212,3 +212,7 @@ keybinding.up = "U" keybinding.bookmark.toggle = "Control-d" keybinding.bookmark.show = "Control-b" + +# emphasize text + +emphasize.wrapped.asterisk = yes \ No newline at end of file diff --git a/etc/shared.conf b/etc/shared.conf index 6125c1d..0cd2504 100644 --- a/etc/shared.conf +++ b/etc/shared.conf @@ -229,6 +229,10 @@ open "^((gemini://)|(\\.)|(/)).+gmi$" with "tinmop" open "^((gemini://)|(\\.)|(/)).+sh$" with "tinmop" open ".gpub$" with "tinmop" +gemini.images.montage.geometry = "640x480" + +gemini.images.montage.tile = "1" + ######################### # ⚠ EXPERIMENTAL ZONE ⚠ # ######################### @@ -242,7 +246,3 @@ experimental.gemini.iri.fragment.regex = no # Use gemini favicon? # see gemini://mozz.us/files/rfc_gemini_favicon.gmi gemini.fetch.favicon = no - -gemini.images.montage.geometry = "640x480" - -gemini.images.montage.tile = "1" diff --git a/src/gui/client/client-configuration.lisp b/src/gui/client/client-configuration.lisp index 62108a1..12d84c4 100644 --- a/src/gui/client/client-configuration.lisp +++ b/src/gui/client/client-configuration.lisp @@ -44,7 +44,10 @@ bookmark toggle show - select) + select + emphasize + wrapped + asterisk) (defun load-config-file (&optional (virtual-filepath +client-conf-filename+) (perform-missing-value-check nil)) @@ -114,6 +117,45 @@ (gen-font-configuration +key-text+) +(defun font-text-bold () + (gui-goodies:make-font (access:accesses *client-configuration* + swconf:+key-gemini+ + +key-text+ + +key-font+) + (access:accesses *client-configuration* + swconf:+key-gemini+ + +key-text+ + +key-size+) + "bold" + nil + nil)) + +(defun font-text-italic () + (gui-goodies:make-font (access:accesses *client-configuration* + swconf:+key-gemini+ + +key-text+ + +key-font+) + (access:accesses *client-configuration* + swconf:+key-gemini+ + +key-text+ + +key-size+) + nil + "italic" + nil)) + +(defun font-text-underlined () + (gui-goodies:make-font (access:accesses *client-configuration* + swconf:+key-gemini+ + +key-text+ + +key-font+) + (access:accesses *client-configuration* + swconf:+key-gemini+ + +key-text+ + +key-size+) + nil + nil + t)) + (gen-font-configuration swconf:+key-link+) (gen-font-configuration swconf:+key-quote+) @@ -321,3 +363,10 @@ swconf:+key-main-window+ +key-select+ swconf:+key-foreground+)))) + +(defun emphasize-wrapped-asterisk-p () + (let ((value (access:accesses *client-configuration* + +key-emphasize+ + +key-wrapped+ + +key-asterisk+))) + (not (swconf:false-value-p value)))) diff --git a/src/gui/client/main-window.lisp b/src/gui/client/main-window.lisp index bd411cb..0a9de98 100644 --- a/src/gui/client/main-window.lisp +++ b/src/gui/client/main-window.lisp @@ -497,6 +497,18 @@ #'download-background-callback) (gui:popup popup-menu x y))))) +(defmethod maybe-re-emphatize-lines (gemtext-widget from to) + (when (client-configuration:emphasize-wrapped-asterisk-p) + (let ((matches (gui:search-all-text gemtext-widget + "\\*[^*]+\\*" + :start-index from + :end-index to))) + (loop for match in matches do + (gui:tag-configure gemtext-widget + (gui:match-tag-name match) + :font (client-configuration:font-text-bold)) + (gui:tag-raise gemtext-widget (gui:match-tag-name match)))))) + (defun collect-ir-lines (request-iri main-window lines) (with-accessors ((ir-lines ir-lines) (ir-rendered-lines ir-rendered-lines) @@ -636,7 +648,10 @@ (:text (vector-push-extend (ir-line line) ir-rendered-lines) (incf render-line-count) - (render-line :text (a:last-elt ir-rendered-lines) render-line-count)) + (render-line :text (a:last-elt ir-rendered-lines) render-line-count) + (maybe-re-emphatize-lines gemtext-widget + `(:line ,render-line-count :char 0) + `(:line ,render-line-count :char :end))) (:h1 (push-prefixed (gui-conf:gemini-h1-prefix) line) (incf render-line-count) @@ -652,7 +667,10 @@ (:li (push-prefixed (gui-conf:gemini-bullet-prefix) line) (incf render-line-count) - (render-line :li (a:last-elt ir-rendered-lines) render-line-count)) + (render-line :li (a:last-elt ir-rendered-lines) render-line-count) + (maybe-re-emphatize-lines gemtext-widget + `(:line ,render-line-count :char 0) + `(:line ,render-line-count :char :end))) (:quote (push-prefixed (gui-conf:gemini-quote-prefix) line) (incf render-line-count) diff --git a/src/package.lisp b/src/package.lisp index 05b92de..b82c029 100644 --- a/src/package.lisp +++ b/src/package.lisp @@ -3257,6 +3257,9 @@ :gemini-default-favicon :gemini-fetch-favicon-p :gemini-text-font-configuration + :font-text-underlined + :font-text-bold + :font-text-italic :gemini-link-font-configuration :gemini-quote-font-configuration :gemini-h1-font-configuration @@ -3294,7 +3297,8 @@ :config-gemtext-padding :config-keybinding-bookmark-toggle :config-keybinding-bookmark-show - :main-window-select-colors)) + :main-window-select-colors + :emphasize-wrapped-asterisk-p)) (defpackage :client-os-utils (:use