emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/haskell-mode 4f8cea6e93 1/3: hoogle: colorize hoogle cli o


From: ELPA Syncer
Subject: [nongnu] elpa/haskell-mode 4f8cea6e93 1/3: hoogle: colorize hoogle cli output using haskell-mode font-lock
Date: Sat, 4 Mar 2023 05:00:15 -0500 (EST)

branch: elpa/haskell-mode
commit 4f8cea6e937d5c4846c46361884e57b2e3d5ae14
Author: jao <jao@gnu.org>
Commit: jao <jao@gnu.org>

    hoogle: colorize hoogle cli output using haskell-mode font-lock
    
    It's been a long time since hoogle command line interface lost the ability 
to
    output ANSI colors (see https://github.com/ndmitchell/hoogle/issues/133).
    
    This patch makes haskell-hoogle to use emacs font lock to fontify its 
output,
    with a custom flag to opt out.
---
 haskell-hoogle.el | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/haskell-hoogle.el b/haskell-hoogle.el
index 86835b7f7e..42476501d1 100644
--- a/haskell-hoogle.el
+++ b/haskell-hoogle.el
@@ -27,6 +27,7 @@
 ;;; Code:
 
 (require 'ansi-color)
+(require 'view)
 (require 'haskell-mode)
 (require 'haskell-utils)
 
@@ -58,6 +59,11 @@ If nil, use the Hoogle web-site."
           (const :tag "fp-complete" "https://www.stackage.org/lts/hoogle?q=%s";)
           string))
 
+(defcustom haskell-hoogle-colorize-with-haskell-mode t
+  "Whether to use haskell-mode to colorize hoogles's CLI output."
+  :group 'haskell
+  :type 'boolean)
+
 ;;;###autoload
 (defun haskell-hoogle (query &optional info)
   "Do a Hoogle search for QUERY.
@@ -73,10 +79,21 @@ is asked to show extra info for the items matching QUERY.."
                           (if info " -i " "")
                           " --color " (shell-quote-argument query)))
          (output (shell-command-to-string command)))
-    (with-help-window "*hoogle*"
-      (with-current-buffer standard-output
-        (insert output)
-        (ansi-color-apply-on-region (point-min) (point-max)))))))
+      (with-help-window "*hoogle*"
+        (with-current-buffer standard-output
+          (if haskell-hoogle-colorize-with-haskell-mode
+              (let ((outs (ansi-color-filter-apply output)))
+                (delay-mode-hooks (haskell-mode))
+                (if info
+                    (let ((lns (split-string output "\n" t " ")))
+                      (insert (car lns) "\n\n")
+                      (dolist (ln (cdr lns)) (insert "-- " ln "\n")))
+                  (insert outs)
+                  (forward-line -1)
+                  (when (looking-at-p "^plus more results") (insert "\n-- ")))
+              (view-mode))
+          (insert output)
+          (ansi-color-apply-on-region (point-min) (point-max))))))))
 
 ;;;###autoload
 (defalias 'hoogle 'haskell-hoogle)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]