Use xterm-color instead of ansi-color, if possible
[elpher.git] / elpher.el
index 87fe007..cd9869c 100644 (file)
--- a/elpher.el
+++ b/elpher.el
 (require 'url-util)
 (require 'subr-x)
 (require 'dns)
-(require 'ansi-color)
 (require 'nsm)
 (require 'gnutls)
 
+;;; ANSI colors or XTerm colors
+
+(or (require 'xterm-color nil t)
+    (require 'ansi-color))
+
+(defalias 'elpher-color-filter-apply
+  (if (fboundp 'xterm-color-filter)
+      (lambda (s)
+       (let ((xterm-color-render nil))
+         (xterm-color-filter s)))
+    'ansi-color-filter-apply)
+  "A function to filter out ANSI escape sequences.")
+(defalias 'elpher-color-apply
+  (if (fboundp 'xterm-color-filter)
+      'xterm-color-filter
+    'ansi-color-apply)
+  "A function to apply ANSI escape sequences.")
 
 ;;; Global constants
 ;;
@@ -936,7 +952,7 @@ If ADDRESS is not supplied or nil the record is rendered as an
     (if type-map-entry
         (let* ((margin-code (elt type-map-entry 2))
                (face (elt type-map-entry 3))
-               (filtered-display-string (ansi-color-filter-apply display-string))
+               (filtered-display-string (elpher-color-filter-apply display-string))
                (page (elpher-make-page filtered-display-string address)))
           (elpher-insert-margin margin-code)
           (insert-text-button filtered-display-string
@@ -1001,8 +1017,8 @@ If ADDRESS is not supplied or nil the record is rendered as an
   "Perform any desired processing of STRING prior to display as text.
 Currently includes buttonifying URLs and processing ANSI escape codes."
   (elpher-buttonify-urls (if elpher-filter-ansi-from-text
-                             (ansi-color-filter-apply string)
-                           (ansi-color-apply string))))
+                             (elpher-color-filter-apply string)
+                           (elpher-color-apply string))))
 
 (defun elpher-render-text (data &optional _mime-type-string)
   "Render DATA as text.  MIME-TYPE-STRING is unused."
@@ -1354,7 +1370,7 @@ treatment that a separate function is warranted."
       (insert elpher-gemini-link-string)
       (if type-map-entry
           (let* ((face (elt type-map-entry 3))
-                 (filtered-display-string (ansi-color-filter-apply display-string))
+                 (filtered-display-string (elpher-color-filter-apply display-string))
                  (page (elpher-make-page filtered-display-string address)))
             (insert-text-button filtered-display-string
                                 'face face
@@ -2197,8 +2213,8 @@ that there are no buffers for history items so many of the buffer
 menu commands won't work on them."
     (setq tabulated-list-format
          (vector '("T" 1 t)
-                 '("URL" 40 t)
-                 '("Name" 30 t))
+                 '("Name" 30 t)
+                 '("URL" 40 t))
          tabulated-list-sort-key nil)
     ;; Collect info for each buffer we're interested in.
     (let (entries)
@@ -2222,25 +2238,25 @@ list established by `elpher-menu-refresh'. See
   (list (current-buffer)
        (cond ((eq major-mode 'elpher-mode)
               (vector "G"
-                      (or (elpher-address-to-url
-                           (elpher-page-address elpher-current-page))
-                          "none")
                       (or (elpher-find-title)
                           (elpher-page-display-string elpher-current-page)
-                          (buffer-name))))
+                          (buffer-name))
+                      (or (elpher-address-to-url
+                           (elpher-page-address elpher-current-page))
+                          "none")))
              ((eq major-mode 'gemini-mode)
               (vector "E"
+                      (or (elpher-page-display-string elpher-current-page)
+                          (buffer-name))
                       (or (elpher-address-to-url
                            (elpher-page-address elpher-current-page))
-                          "none")
-                      (or (elpher-page-display-string elpher-current-page)
-                          (buffer-name))))
+                          "none")))
              ((eq major-mode 'eww-mode)
               (vector "W"
-                      (or (eww-current-url)
-                          "none")
                       (or (plist-get eww-data :title)
-                          (buffer-name)))))))
+                          (buffer-name))
+                      (or (eww-current-url)
+                          "none"))))))
 
 (defun elpher-menu-refresh-history ()
   "Return current entries for `elpher-menu-refresh'.
@@ -2267,9 +2283,9 @@ list established by `elpher-menu-refresh'. See
                     (if (cdr pair)
                         (list (car pair)
                               (vector "G"
+                                      (or (elpher-page-display-string (cdr pair)) "?")
                                       (or (elpher-address-to-url
-                                           (elpher-page-address (cdr pair))) "none")
-                                      (or (elpher-page-display-string (cdr pair)) "?")))
+                                           (elpher-page-address (cdr pair))) "none")))
                       separator))
                   (cons (cons (current-buffer) elpher-current-page)
                         (mapcar (lambda (page)
@@ -2280,10 +2296,10 @@ list established by `elpher-menu-refresh'. See
           ;; No history means a list of one item. Add a separator.
           (list (list (current-buffer)
                       (vector "E"
-                              (or (elpher-address-to-url
-                                   (elpher-page-address elpher-current-page)))
                               (or (elpher-page-display-string elpher-current-page)
-                                  (buffer-name))))
+                                  (buffer-name))
+                              (or (elpher-address-to-url
+                                   (elpher-page-address elpher-current-page)))))
                 separator))
           ((eq major-mode 'eww-mode)
           ;; A pair is (BUFFER-OR-DATA . PAGE) where BUFFER-OR-DTA is
@@ -2292,14 +2308,14 @@ list established by `elpher-menu-refresh'. See
           ;; what function to call. Add the separator at the end.
            (nconc (cons (list (current-buffer)
                               (vector "W"
-                                      (or (plist-get eww-data :url) "none")
-                                      (or (plist-get eww-data :title) "none")))
+                                      (or (plist-get eww-data :title) "none")
+                                      (or (plist-get eww-data :url) "none")))
                         (mapcar (lambda (data)
                                   (list
                                    (list (current-buffer) 'eww-restore-history data)
                                    (vector "W"
-                                           (or (plist-get data :url) "none")
-                                           (or (plist-get data :title) "none"))))
+                                           (or (plist-get data :title) "none")
+                                           (or (plist-get data :url) "none"))))
                                 eww-history))
                   (list separator))))))