diff options
Diffstat (limited to 'elisp')
-rw-r--r-- | elisp/geiser-edit.el | 33 | ||||
-rw-r--r-- | elisp/geiser-imenu.el | 43 | ||||
-rw-r--r-- | elisp/geiser-mode.el | 2 | ||||
-rw-r--r-- | elisp/geiser-reload.el | 1 |
4 files changed, 14 insertions, 65 deletions
diff --git a/elisp/geiser-edit.el b/elisp/geiser-edit.el index 750ccef..165e0fc 100644 --- a/elisp/geiser-edit.el +++ b/elisp/geiser-edit.el @@ -97,32 +97,28 @@ or following links in error buffers.") geiser-edit--def-re* (regexp-quote (format "%s" thing)))) +(defun geiser-edit--find-def (symbol) + (save-excursion + (goto-char (point-min)) + (when (or (re-search-forward (geiser-edit--def-re symbol) nil t) + (re-search-forward (geiser-edit--def-re* symbol) nil t)) + (cons (match-beginning 0) (match-string-no-properties 0))))) + (defsubst geiser-edit--symbol-re (thing) (format "\\_<%s\\_>" (regexp-quote (format "%s" thing)))) (defun geiser-edit--goto-location (symbol line col pos) - (goto-char (point-min)) - (cond ((numberp line) (forward-line (max 0 (1- line)))) + (cond ((numberp line) + (goto-char (point-min)) + (forward-line (max 0 (1- line)))) ((numberp pos) (goto-char pos))) (if (not col) - (when (or (re-search-forward (geiser-edit--def-re symbol) nil t) - (re-search-forward (geiser-edit--def-re* symbol) nil t) - (re-search-forward (geiser-edit--symbol-re symbol) nil t)) - (goto-char (match-beginning 0))) + (when-let (pos (car (geiser-edit--find-def symbol))) + (goto-char pos)) (beginning-of-line) (forward-char col) (cons (current-buffer) (point)))) -(defun geiser-edit--try-imenu (symbol no-error) - (let* ((s (format "%s" symbol)) - (imenu-auto-rescan t) - (item (assoc s (imenu--make-index-alist t)))) - (unless (or item no-error) - (error "Couldn't find location for '%s'" s)) - (when item - (imenu item) - (cons (current-buffer) (point))))) - (defun geiser-edit--try-edit-location (symbol loc &optional method no-error) (let ((symbol (or (geiser-edit--location-name loc) symbol)) (file (geiser-edit--location-file loc)) @@ -131,9 +127,8 @@ or following links in error buffers.") (pos (geiser-edit--location-char loc))) (when file (geiser-edit--visit-file file (or method geiser-edit-symbol-method))) - (if (or file line col pos) - (geiser-edit--goto-location symbol line col pos) - (geiser-edit--try-imenu symbol no-error)))) + (or (geiser-edit--goto-location symbol line col pos) + (error "Couldn't find location for symbol at point")))) (defsubst geiser-edit--try-edit (symbol ret &optional method no-error) (geiser-edit--try-edit-location symbol diff --git a/elisp/geiser-imenu.el b/elisp/geiser-imenu.el deleted file mode 100644 index 9573a6b..0000000 --- a/elisp/geiser-imenu.el +++ /dev/null @@ -1,43 +0,0 @@ -;;; geiser-imenu.el -- Tweaks to imenu configuration -*- lexical-binding: t; -*- - -;; Copyright (c) 2022 Jose Antonio Ortega Ruiz - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the Modified BSD License. You should -;; have received a copy of the license along with this program. If -;; not, see <http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5>. - -;; Start date: Wed Oct 12, 2022 01:43 - - -(require 'geiser-impl) - -(require 'imenu) -(require 'scheme) - -(defvar geiser-imenu-generic-expression - (mapcar (lambda (e) - `(,(car e) - ,(concat "^\\(?: *\\)" (substring (cadr e) 1)) - ,@(cddr e))) - scheme-imenu-generic-expression)) - -(defvar geiser-imenu--nested-defs nil) -(geiser-impl--register-local-variable - 'geiser-imenu--nested-defs 'nested-definitions nil - "A flag indicating whether this implementation accepts nested definitions. -For instance, R6%S library forms will contain them.") - -(defun geiser-imenu-declare-nested-definitions (impl) - "Declare IMPL as one that accepts nested definitions." - (add-to-list 'geiser-imenu--nested-definition-impls impl)) - -(defun geiser-imenu-setup (activate) - "Adjust imenu for the current implementation." - (setq-local imenu-generic-expression - (if (and activate geiser-imenu--nested-defs) - geiser-imenu-generic-expression - scheme-imenu-generic-expression))) - -(provide 'geiser-imenu) -;;; geiser-imenu.el ends here diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el index 1bfe98d..eebb1ef 100644 --- a/elisp/geiser-mode.el +++ b/elisp/geiser-mode.el @@ -14,7 +14,6 @@ (require 'geiser-repl) (require 'geiser-capf) -(require 'geiser-imenu) (require 'geiser-menu) (require 'geiser-doc) (require 'geiser-compile) @@ -388,7 +387,6 @@ interacting with the Geiser REPL is at your disposal. (setq geiser-autodoc-mode-string "/A") (setq geiser-smart-tab-mode-string "/T") (geiser-capf-setup geiser-mode) - (geiser-imenu-setup geiser-mode) (when geiser-mode-autodoc-p (geiser-autodoc-mode (if geiser-mode 1 -1))) (when geiser-mode-smart-tab-p diff --git a/elisp/geiser-reload.el b/elisp/geiser-reload.el index 431304c..bd4d1a3 100644 --- a/elisp/geiser-reload.el +++ b/elisp/geiser-reload.el @@ -24,7 +24,6 @@ (defmacro geiser--features-list () (quote '( geiser-mode - geiser-imenu geiser-repl geiser-capf geiser-doc |