Skip to content

Commit 931f380

Browse files
committed
"F" and "M-." work for Scheme
* le-scheme.el (lispy--scheme-goto-symbol): New defun. * lispy.el (lispy-goto-symbol): Update the interactive part, the input should always be a string. Call `lispy--scheme-goto-symbol'.
1 parent d99feee commit 931f380

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

le-scheme.el

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@
3434
(declare-function geiser-eval--send/wait "geiser-eval")
3535
(declare-function geiser-eval--retort-error "geiser-eval")
3636
(declare-function geiser-mode "geiser-mode")
37+
(declare-function geiser-edit--try-edit "geiser-edit")
38+
39+
(defun lispy--scheme-goto-symbol (symbol)
40+
"Opens a new window visiting the definition of SYMBOL."
41+
(let* ((symbol (make-symbol symbol))
42+
(cmd `(:eval (:ge symbol-location ',symbol)))
43+
(marker (point-marker)))
44+
(condition-case err
45+
(progn (geiser-edit--try-edit symbol (geiser-eval--send/wait cmd))
46+
(when marker (ring-insert find-tag-marker-ring marker)))
47+
(error
48+
(error (error-message-string err))))))
3749

3850
(defun lispy--eval-scheme (str)
3951
"Eval STR as Scheme code."

lispy.el

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2659,12 +2659,12 @@ Sexp is obtained by exiting list ARG times."
26592659
(declare-function slime-edit-definition "ext:slime")
26602660
(declare-function lispy--clojure-resolve "le-clojure")
26612661
(declare-function lispy--clojure-jump "le-clojure")
2662+
(declare-function lispy--scheme-goto-symbol "le-scheme")
26622663
(defun lispy-goto-symbol (symbol)
2663-
"Go to definition of SYMBOL."
2664-
(interactive (list (let ((str (thing-at-point 'symbol)))
2665-
(if str
2666-
(intern str)
2667-
(lispy--current-function)))))
2664+
"Go to definition of SYMBOL.
2665+
SYMBOL is a string."
2666+
(interactive (list (or (thing-at-point 'symbol)
2667+
(lispy--current-function))))
26682668
(let (rsymbol)
26692669
(deactivate-mark)
26702670
(ring-insert find-tag-marker-ring (point-marker))
@@ -2707,7 +2707,10 @@ Sexp is obtained by exiting list ARG times."
27072707
(lispy--back-to-paren))
27082708
((eq major-mode 'lisp-mode)
27092709
(require 'slime)
2710-
(slime-edit-definition symbol))))
2710+
(slime-edit-definition symbol))
2711+
((eq major-mode 'scheme-mode)
2712+
(require 'geiser)
2713+
(lispy--scheme-goto-symbol symbol))))
27112714
;; in case it's hidden in an outline
27122715
(lispy--ensure-visible))
27132716

0 commit comments

Comments
 (0)