"Preprocess text selector response contained in STRING.
This involes decoding the character representation, and clearing
away CRs and any terminating period."
- (elpher-decode (replace-regexp-in-string "\n\.\n$" "\n"
+ (elpher-decode (replace-regexp-in-string "\n\\.\n$" "\n"
(replace-regexp-in-string "\r" "" string))))
;; Text rendering
(defconst elpher-url-regex
- "\\([a-zA-Z]+\\)://\\([a-zA-Z0-9.\-]*[a-zA-Z0-9\-]\\|\[[a-zA-Z0-9:]+\]\\)\\(:[0-9]+\\)?\\(/\\([0-9a-zA-Z\-_~?/@|:.%#=&]*[0-9a-zA-Z\-_~?/@|#]\\)?\\)?"
+ "\\([a-zA-Z]+\\)://\\([a-zA-Z0-9.-]*[a-zA-Z0-9-]\\|\\[[a-zA-Z0-9:]+\\]\\)\\(:[0-9]+\\)?\\(/\\([0-9a-zA-Z_~?/@|:.%#=&-]*[0-9a-zA-Z_~?/@|#-]\\)?\\)?"
"Regexp used to locate and buttinofy URLs in text files loaded by elpher.")
(defun elpher-buttonify-urls (string)
"Insert a plain non-preformatted TEXT-LINE into a text/gemini document.
This function uses Emacs' auto-fill to wrap text sensibly to a maximum
width defined by elpher-gemini-max-fill-width."
- (string-match "\\(^[ \t]*\\)\\(\*[ \t]+\\|>[ \t]*\\)?" text-line)
+ (string-match "\\(^[ \t]*\\)\\(\\*[ \t]+\\|>[ \t]*\\)?" text-line)
(let* ((line-prefix (match-string 2 text-line))
(processed-text-line
(if line-prefix
(cond ((string-prefix-p "*" line-prefix)
(concat
- (replace-regexp-in-string "\*"
+ (replace-regexp-in-string "\\*"
elpher-gemini-bullet-string
(match-string 0 text-line))
(substring text-line (match-end 0))))
;; Use elpher to open gopher, finger and gemini links
(when (boundp 'browse-url-default-handlers)
(add-to-list 'browse-url-default-handlers
- '("^\\(gopher\\|finger\\|gemini\\)://" . browse-url-elpher)))
+ '("^\\(gopher\\|finger\\|gemini\\)://" . browse-url-elpher))))
+
+(with-eval-after-load "thingatpt"
;; Register "gemini://" as a URI scheme so `browse-url' does the right thing
(add-to-list 'thing-at-point-uri-schemes "gemini://"))
"Go to a particular site read from the minibuffer, initialized with the current URL."
(interactive)
(let ((address (elpher-page-address elpher-current-page)))
- (if (elpher-address-special-p address)
- (error "Command invalid for this page")
- (let ((url (read-string "Gopher or Gemini URL: " (elpher-address-to-url address))))
- (elpher-visit-page (elpher-make-page url (elpher-address-from-url url)))))))
+ (let ((url (read-string "Gopher or Gemini URL: "
+ (unless (elpher-address-special-p address)
+ (elpher-address-to-url address)))))
+ (elpher-visit-page (elpher-make-page url (elpher-address-from-url url))))))
(defun elpher-visit-gemini-numbered-link (n)
"Visit link designated by a number."