From 826423c7d7cc4f9965269466fe1de046ba9e2e0f Mon Sep 17 00:00:00 2001 From: cage <cage@invalid> Date: Fri, 4 Mar 2022 14:33:55 +0100 Subject: [PATCH] - added command to copy a link to clipboard. --- README.org | 10 +++++--- README.txt | 9 +++++-- etc/init.lisp | 2 ++ quick_quicklisp.sh.in | 57 ++++++++++++++++++++++--------------------- src/package.lisp | 1 + src/ui-goodies.lisp | 8 ++++++ tinmop.asd | 1 + 7 files changed, 55 insertions(+), 33 deletions(-) diff --git a/README.org b/README.org index 8ddeb03..d2b02b6 100644 --- a/README.org +++ b/README.org @@ -55,9 +55,8 @@ All the dependencies above should be available using the package manager of your distribution (~apt~, ~yum~ etc). ** Lisp Libraries - - alexandria; - - cl-ppcre; + - cl-ppcre-unicode; - tooter; - croatoan; - osicat; @@ -79,7 +78,12 @@ manager of your distribution (~apt~, ~yum~ etc). - cl-html5-parser; - unix-opts; - crypto-shortcuts; - - drakma. + - drakma; + - usocket; + - cffi; + - babel; + - percent-encoding; + - trivial-clipboard. All these libraries will be downloaded, compiled and installed by the script ~quick_quicklisp.sh~, see below. diff --git a/README.txt b/README.txt index b8e7de3..a454a53 100644 --- a/README.txt +++ b/README.txt @@ -100,7 +100,7 @@ Table of Contents ────────────────── • alexandria; - • cl-ppcre; + • cl-ppcre-unicode; • tooter; • croatoan; • osicat; @@ -122,7 +122,12 @@ Table of Contents • cl-html5-parser; • unix-opts; • crypto-shortcuts; - • drakma. + • drakma; + • usocket; + • cffi; + • babel; + • percent-encoding; + • trivial-clipboard. All these libraries will be downloaded, compiled and installed by the script `quick_quicklisp.sh', see below. diff --git a/etc/init.lisp b/etc/init.lisp index 3f1b447..1f57d14 100644 --- a/etc/init.lisp +++ b/etc/init.lisp @@ -595,6 +595,8 @@ (define-key "C-J" #'open-message-link-perform-opening *open-message-link-keymap*) +(define-key "C-c" #'copy-link-to-clipboard *open-message-link-keymap*) + (define-key "up" #'open-message-link-go-up *open-message-link-keymap*) (define-key "down" #'open-message-link-go-down *open-message-link-keymap*) diff --git a/quick_quicklisp.sh.in b/quick_quicklisp.sh.in index b536ffb..d506ba1 100644 --- a/quick_quicklisp.sh.in +++ b/quick_quicklisp.sh.in @@ -115,34 +115,35 @@ install_dependency () { # --eval "(ql:quickload \"swank\")" \ <- note the '\' # --eval "(sb-ext:quit)"; <- keep this line as latest @LISP_COMPILER@ \ - --eval "(ql:quickload \"alexandria\")" \ - --eval "(ql:quickload \"cl-ppcre-unicode\")" \ - --eval "(ql:quickload \"tooter\")" \ - --eval "(ql:quickload \"croatoan\")" \ - --eval "(ql:quickload \"osicat\")" \ - --eval "(ql:quickload \"cl-spark\")" \ - --eval "(ql:quickload \"access\")" \ - --eval "(ql:quickload \"sqlite\")" \ - --eval "(ql:quickload \"sxql\")" \ - --eval "(ql:quickload \"sxql-composer\")" \ - --eval "(ql:quickload \"marshal\")" \ - --eval "(ql:quickload \"bordeaux-threads\")" \ - --eval "(ql:quickload \"log4cl\")" \ - --eval "(ql:quickload \"local-time\")" \ - --eval "(ql:quickload \"cl-colors2\")" \ - --eval "(ql:quickload \"cl-i18n\")" \ - --eval "(ql:quickload \"clunit2\")" \ - --eval "(ql:quickload \"esrap\")" \ - --eval "(ql:quickload \"ieee-floats\")" \ - --eval "(ql:quickload \"parse-number\")" \ - --eval "(ql:quickload \"cl-html5-parser\")" \ - --eval "(ql:quickload \"unix-opts\")" \ - --eval "(ql:quickload \"crypto-shortcuts\")" \ - --eval "(ql:quickload \"drakma\")" \ - --eval "(ql:quickload \"usocket\")" \ - --eval "(ql:quickload \"cffi\")" \ - --eval "(ql:quickload \"babel\")" \ - --eval "(ql:quickload \"percent-encoding\")" \ + --eval "(ql:quickload \"alexandria\")" \ + --eval "(ql:quickload \"cl-ppcre-unicode\")" \ + --eval "(ql:quickload \"tooter\")" \ + --eval "(ql:quickload \"croatoan\")" \ + --eval "(ql:quickload \"osicat\")" \ + --eval "(ql:quickload \"cl-spark\")" \ + --eval "(ql:quickload \"access\")" \ + --eval "(ql:quickload \"sqlite\")" \ + --eval "(ql:quickload \"sxql\")" \ + --eval "(ql:quickload \"sxql-composer\")" \ + --eval "(ql:quickload \"marshal\")" \ + --eval "(ql:quickload \"bordeaux-threads\")" \ + --eval "(ql:quickload \"log4cl\")" \ + --eval "(ql:quickload \"local-time\")" \ + --eval "(ql:quickload \"cl-colors2\")" \ + --eval "(ql:quickload \"cl-i18n\")" \ + --eval "(ql:quickload \"clunit2\")" \ + --eval "(ql:quickload \"esrap\")" \ + --eval "(ql:quickload \"ieee-floats\")" \ + --eval "(ql:quickload \"parse-number\")" \ + --eval "(ql:quickload \"cl-html5-parser\")" \ + --eval "(ql:quickload \"unix-opts\")" \ + --eval "(ql:quickload \"crypto-shortcuts\")" \ + --eval "(ql:quickload \"drakma\")" \ + --eval "(ql:quickload \"usocket\")" \ + --eval "(ql:quickload \"cffi\")" \ + --eval "(ql:quickload \"babel\")" \ + --eval "(ql:quickload \"percent-encoding\")" \ + --eval "(ql:quickload \"trivial-clipboard\")" \ --eval "(sb-ext:quit)" } diff --git a/src/package.lisp b/src/package.lisp index 215dee4..a57b510 100644 --- a/src/package.lisp +++ b/src/package.lisp @@ -2709,6 +2709,7 @@ :open-next-visible-link :go-to-next-link :go-to-previous-link + :copy-link-to-clipboard :close-open-message-link-window :open-message-link-window-scroll-begin :open-message-link-window-scroll-end diff --git a/src/ui-goodies.lisp b/src/ui-goodies.lisp index 8624b89..a62487f 100644 --- a/src/ui-goodies.lisp +++ b/src/ui-goodies.lisp @@ -1357,6 +1357,14 @@ This makes sense only for gemini file stream, if not this command performs the s 'open-message-link-perform-opening'" (%open-message-link-perform-opening t)) +(defun copy-link-to-clipboard () + "Copy the selected link address to clipboard" + (when-let* ((selected-line (line-oriented-window:selected-row *open-message-link-window*)) + (url (line-oriented-window:normal-text selected-line))) + (with-notify-errors + (trivial-clipboard:text url) + (info-message (_ "Address copied to clipboard"))))) + (defun close-open-message-link-window () (when-window-shown (*open-message-link-window*) (when (message-window:display-gemini-text-p *open-message-link-window*) diff --git a/tinmop.asd b/tinmop.asd index 3b92a64..fc998f5 100644 --- a/tinmop.asd +++ b/tinmop.asd @@ -51,6 +51,7 @@ :usocket :babel :percent-encoding + :trivial-clipboard :uiop) :components ((:file "package") (:file "idn")