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

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

[nongnu] elpa/geiser-guile 9ff3140 083/284: Guile: backtrace buttonizati


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-guile 9ff3140 083/284: Guile: backtrace buttonization.
Date: Sun, 1 Aug 2021 18:29:21 -0400 (EDT)

branch: elpa/geiser-guile
commit 9ff314036298b6267fbba3b403ec934ce2d45f36
Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
Commit: Jose Antonio Ortega Ruiz <jao@gnu.org>

    Guile: backtrace buttonization.
---
 elisp/geiser-guile.el | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/elisp/geiser-guile.el b/elisp/geiser-guile.el
index 44a4e9f..ed2a555 100644
--- a/elisp/geiser-guile.el
+++ b/elisp/geiser-guile.el
@@ -121,6 +121,44 @@ This function uses `geiser-guile-init-file' if it exists."
     (save-excursion (skip-syntax-backward "^-()>") (point))))
 
 
+;;; Error display
+(defvar geiser-guile--file-cache (make-hash-table :test 'equal))
+
+(defun geiser-guile--resolve-file (file)
+  (when (and (stringp file) (not (string-equal file "unknown file")))
+    (if (file-name-absolute-p file) file
+      (or (gethash file geiser-guile--file-cache)
+          (puthash file
+                   (geiser-eval--send/result `(:eval ((:ge find-file) ,file)))
+                   geiser-guile--file-cache)))))
+
+(defconst geiser-guile--file-rx
+  "^In \\([^\n:]+\\):\n *\\([[:digit:]]+\\|\\?\\):")
+
+(defun geiser-guile--find-files ()
+  (save-excursion
+    (while (re-search-forward geiser-guile--file-rx nil t)
+      (let ((file (match-string 1))
+            (beg (match-beginning 1))
+            (end (match-end 1))
+            (line (string-to-number (or (match-string 2) "0"))))
+        (let ((file (geiser-guile--resolve-file file)))
+          (when file
+            (geiser-edit--make-link beg end file line 0)))))))
+
+(defun geiser-guile-display-error (module key msg)
+  (when key
+    (insert "Error: ")
+    (geiser--insert-with-face (format "%s" key) 'bold)
+    (newline 2))
+  (when msg
+    (let ((p (point)))
+      (insert msg)
+      (goto-char p)
+      (geiser-guile--find-files)))
+  t)
+
+
 ;;; Trying to ascertain whether a buffer is Guile Scheme:
 
 (defun geiser-guile-guess ()



reply via email to

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