summaryrefslogtreecommitdiff
path: root/elisp
diff options
context:
space:
mode:
Diffstat (limited to 'elisp')
-rw-r--r--elisp/geiser-autodoc.el2
-rw-r--r--elisp/geiser-base.el28
-rw-r--r--elisp/geiser-capf.el3
-rw-r--r--elisp/geiser-compile.el2
-rw-r--r--elisp/geiser-completion.el2
-rw-r--r--elisp/geiser-connection.el19
-rw-r--r--elisp/geiser-custom.el26
-rw-r--r--elisp/geiser-debug.el2
-rw-r--r--elisp/geiser-doc.el52
-rw-r--r--elisp/geiser-edit.el24
-rw-r--r--elisp/geiser-eval.el4
-rw-r--r--elisp/geiser-image.el6
-rw-r--r--elisp/geiser-impl.el10
-rw-r--r--elisp/geiser-log.el2
-rw-r--r--elisp/geiser-menu.el2
-rw-r--r--elisp/geiser-mode.el2
-rw-r--r--elisp/geiser-popup.el2
-rw-r--r--elisp/geiser-reload.el54
-rw-r--r--elisp/geiser-repl.el54
-rw-r--r--elisp/geiser-syntax.el2
-rw-r--r--elisp/geiser-table.el2
-rw-r--r--elisp/geiser-xref.el7
-rw-r--r--elisp/geiser.el6
23 files changed, 174 insertions, 139 deletions
diff --git a/elisp/geiser-autodoc.el b/elisp/geiser-autodoc.el
index 67d3213..e22c9d4 100644
--- a/elisp/geiser-autodoc.el
+++ b/elisp/geiser-autodoc.el
@@ -1,4 +1,4 @@
-;;; geiser-autodoc.el -- autodoc mode -*- lexical-binding: t; -*-
+;;; geiser-autodoc.el --- Autodoc mode -*- lexical-binding: t; -*-
;; Copyright (C) 2009, 2010, 2011, 2012, 2015, 2016, 2021, 2022 Jose Antonio Ortega Ruiz
diff --git a/elisp/geiser-base.el b/elisp/geiser-base.el
index 6d6277f..4194da5 100644
--- a/elisp/geiser-base.el
+++ b/elisp/geiser-base.el
@@ -1,14 +1,16 @@
-;;; geiser-base.el --- shared bits -*- lexical-binding: t -*-
+;;; geiser-base.el --- Shared bits -*- lexical-binding: t -*-
-;; Copyright (C) 2009, 2010, 2012, 2013, 2015, 2016, 2019 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2009, 2010, 2012, 2013, 2015, 2016, 2019, 2024 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>.
-;; Settings and vars shared by all geiser modules, including little
-;; utilities and emacsen compatibility bits.
+;;; Commentary:
+
+;; Settings and variables shared by all geiser modules, including
+;; little utilities and emacsen compatibility bits.
;;; Code:
@@ -16,15 +18,14 @@
(require 'ring)
-(eval-after-load "ring"
- '(when (not (fboundp 'ring-member))
- (defun ring-member (ring item)
- (catch 'found
- (dotimes (ind (ring-length ring))
- (when (equal item (ring-ref ring ind))
- (throw 'found ind)))))))
+(unless (fboundp 'ring-member)
+ (defun ring-member (ring item)
+ (catch 'found
+ (dotimes (ind (ring-length ring))
+ (when (equal item (ring-ref ring ind))
+ (throw 'found ind))))))
-(when (not (fboundp 'looking-at-p))
+(unless (fboundp 'looking-at-p)
(defsubst looking-at-p (regexp)
(with-no-warnings
(let ((inhibit-changing-match-data t))
@@ -66,12 +67,11 @@
(insert str)
(put-text-property p (point) 'face face)))
-
(defmacro geiser--save-msg (&rest body)
(let ((msg (make-symbol "msg")))
`(let ((,msg (current-message)))
,@body
- (message ,msg))))
+ (message "%s" ,msg))))
(put 'geiser--save-msg 'lisp-indent-function 0)
diff --git a/elisp/geiser-capf.el b/elisp/geiser-capf.el
index 542cac7..a3c47a3 100644
--- a/elisp/geiser-capf.el
+++ b/elisp/geiser-capf.el
@@ -1,4 +1,4 @@
-;;; geiser-capf.el -- Setup for Geiser's CAPFs -*- lexical-binding: t; -*-
+;;; geiser-capf.el --- Setup for Geiser's CAPFs -*- lexical-binding: t; -*-
;; Copyright (c) 2022 Jose Antonio Ortega Ruiz
@@ -10,6 +10,7 @@
;; Start date: Sat Apr 23, 2022 18:39
+;;; Code:
(require 'geiser-autodoc)
(require 'geiser-impl)
diff --git a/elisp/geiser-compile.el b/elisp/geiser-compile.el
index 3897499..9458f4d 100644
--- a/elisp/geiser-compile.el
+++ b/elisp/geiser-compile.el
@@ -1,4 +1,4 @@
-;;; geiser-compile.el -- compile/load scheme files -*- lexical-binding: t; -*-
+;;; geiser-compile.el --- Compile/load scheme files -*- lexical-binding: t; -*-
;; Copyright (C) 2009-2013, 2016, 2018, 2021-2022 Jose Antonio Ortega Ruiz
diff --git a/elisp/geiser-completion.el b/elisp/geiser-completion.el
index 584e9e0..f68b8fa 100644
--- a/elisp/geiser-completion.el
+++ b/elisp/geiser-completion.el
@@ -1,4 +1,4 @@
-;;; geiser-completion.el -- tab completion -*- lexical-binding: t; -*-
+;;; geiser-completion.el --- Tab completion -*- lexical-binding: t; -*-
;; Copyright (C) 2009-2012, 2018, 2020-2022 Jose Antonio Ortega Ruiz
diff --git a/elisp/geiser-connection.el b/elisp/geiser-connection.el
index b7d312e..68fd412 100644
--- a/elisp/geiser-connection.el
+++ b/elisp/geiser-connection.el
@@ -1,6 +1,6 @@
-;;; geiser-connection.el -- talking to a scheme process -*- lexical-binding: t; -*-
+;;; geiser-connection.el --- Talking to a scheme process -*- lexical-binding: t; -*-
-;; Copyright (C) 2009-2011, 2013, 2021-2022 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2009-2011, 2013, 2021-2022, 2025 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
@@ -202,7 +202,20 @@
(debugging (geiser-con--has-entered-debugger con answer)))
(condition-case err
(let ((start (string-match "((\\(?:result)?\\|error\\) " answer)))
- (or (and start (car (read-from-string answer start)))
+ (or (and start
+ (progn
+ (let ((extra-output (substring answer 0 start)))
+ (unless (string-blank-p extra-output)
+ (geiser-log--warn "Extra output (before): %s"
+ (string-trim extra-output))))
+ (let* ((ret (read-from-string answer start))
+ (extra-output (substring answer (cdr ret))))
+ (unless (string-blank-p extra-output)
+ ;; Usually, the extra output is just the return value
+ ;; being echoed by the REPL, and not worth noting.
+ (geiser-log--debug "Extra output (after): %s"
+ (string-trim extra-output)))
+ (car ret))))
`((error (key . retort-syntax))
(output . ,answer)
(debug . ,debugging))))
diff --git a/elisp/geiser-custom.el b/elisp/geiser-custom.el
index 4b42d91..f9b05a7 100644
--- a/elisp/geiser-custom.el
+++ b/elisp/geiser-custom.el
@@ -1,6 +1,6 @@
;;; geiser-custom.el -- customization utilities -*- lexical-binding: t; -*-
-;; Copyright (C) 2009, 2010, 2012 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2009, 2010, 2012, 2024 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
@@ -31,6 +31,10 @@
:group 'faces)
(defmacro geiser-custom--defface (face def group doc)
+ "Utility macro to define geiser.
+This is a very simple macro ensuring all geiser faces follow a common
+naming pattern and are added to a common group besides the one provided
+in the macro arguments."
(declare (doc-string 4) (indent 1))
(let ((face (intern (format "geiser-font-lock-%s" face))))
`(defface ,face (face-default-spec ,def)
@@ -43,18 +47,24 @@
(defvar geiser-custom--memoized-vars nil)
(defun geiser-custom--memoize (name)
- ;; FIXME: Why not build this list with mapatoms, filtering on a "\\`'geiser-"
+ ;; Why not build this list with mapatoms, filtering on a "\\`'geiser-"
;; prefix and checking that it's a `defcustom', so we don't need
- ;; `geiser-custom--defcustom'?
+ ;; `geiser-custom--defcustom'? Because implementation-specific modules using
+ ;; geiser may use similarly named custom variables that are, for some reason
+ ;; or another, not meant to partake in the geiser-reload mechanism, and we
+ ;; don't know their names.
(add-to-list 'geiser-custom--memoized-vars name))
(defmacro geiser-custom--defcustom (name &rest body)
"Like `defcustom' but also put NAME on an internal list.
-That list is used by `geiser-reload' to preserve the values
-of the listed variables. It is not used for anything else."
- ;; FIXME Remembering the value like this is not actually
- ;; necessary. Evaluating `defcustom' always preserves the
- ;; existing value, if any.
+That list is used by `geiser-reload' to preserve the values of the
+listed variables. It is not used for anything else.
+
+Note that, even though defcustom preserves the existing value of a
+variable if it's already defined, geiser-reload unloads all geiser
+features and therefore undefines all defined variables: we keep this
+list of values around to be able to restore them after loading
+a (presumably) new version of geiser after that unloading."
(declare (doc-string 3) (debug (name body)) (indent 2))
`(progn
(geiser-custom--memoize ',name)
diff --git a/elisp/geiser-debug.el b/elisp/geiser-debug.el
index 88f1e72..c5e30a9 100644
--- a/elisp/geiser-debug.el
+++ b/elisp/geiser-debug.el
@@ -1,4 +1,4 @@
-;;; geiser-debug.el -- displaying debug and eval info -*- lexical-binding: t; -*-
+;;; geiser-debug.el --- Displaying debug and eval info -*- lexical-binding: t; -*-
;; Copyright (C) 2009-2016, 2020-2022 Jose Antonio Ortega Ruiz
diff --git a/elisp/geiser-doc.el b/elisp/geiser-doc.el
index de18d9f..5d1d04b 100644
--- a/elisp/geiser-doc.el
+++ b/elisp/geiser-doc.el
@@ -1,6 +1,6 @@
-;;; geiser-doc.el -- accessing scheme-provided documentation -*- lexical-binding: t; -*-
+;;; geiser-doc.el --- Accessing scheme-provided documentation -*- lexical-binding: t; -*-
-;; Copyright (C) 2009-2016, 2021-2022 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2009-2016, 2021-2022, 2024 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
@@ -149,14 +149,14 @@ value if the default action should be skipped.")
(let ((link (button-get button 'geiser-link)))
(when link (geiser-doc--follow-link link))))
-(define-button-type 'geiser-doc--button
+(define-button-type 'geiser-doc
'action 'geiser-doc--button-action
'follow-link t)
(defun geiser-doc--make-module-button (beg end module impl)
(let ((link (geiser-doc--make-link nil module impl))
(help (format "Help for module %s" module)))
- (make-text-button beg end :type 'geiser-doc--button
+ (make-text-button beg end :type 'geiser-doc
'face 'geiser-font-lock-doc-link
'geiser-link link
'help-echo help)))
@@ -171,12 +171,18 @@ value if the default action should be skipped.")
(if target (format "%s in " target) "")
(or module "<unknown>"))))
(insert-text-button text
- :type 'geiser-doc--button
+ :type 'geiser-doc
'face 'geiser-font-lock-doc-link
'geiser-link link
'help-echo help)))
-(defun geiser-doc-goto-source ()
+(define-button-type 'geiser-doc-source
+ 'action 'geiser-doc-goto-source
+ 'face 'geiser-font-lock-doc-button
+ 'help-echo "Go to definition"
+ 'follow-link t)
+
+(defun geiser-doc-goto-source (&rest _)
"Go to the definition of this item."
(interactive)
(when-let (link geiser-doc--buffer-link)
@@ -185,7 +191,13 @@ value if the default action should be skipped.")
(geiser-edit-symbol target nil (point-marker))
(geiser-edit-module (geiser-doc--link-module link))))))
-(defun geiser-doc-goto-manual ()
+(define-button-type 'geiser-doc-manual
+ 'action 'geiser-doc-goto-manual
+ 'face 'geiser-font-lock-doc-button
+ 'help-echo "Look up in Scheme manual"
+ 'follow-link t)
+
+(defun geiser-doc-goto-manual (&rest _)
"Go to the manual for this item."
(interactive)
(when-let (link geiser-doc--buffer-link)
@@ -194,29 +206,11 @@ value if the default action should be skipped.")
(impl (geiser-doc--link-impl link)))
(geiser-doc--external-help impl (or tm mod) mod))))
-(defun geiser-doc--xbutton-action (button)
- (let ((k (button-get button 'x-kind)))
- (cond ((eq 'source k) (geiser-doc-goto-source))
- ((eq 'manual k) (geiser-doc-goto-manual)))))
-
-(define-button-type 'geiser-doc--xbutton
- 'action 'geiser-doc--xbutton-action
- 'face 'geiser-font-lock-doc-button
- 'follow-link t)
-
-(defun geiser-doc--insert-xbutton (&optional manual)
- (let ((label (if manual "[manual]" "[source]"))
- (help (if manual "Look up in Scheme manual" "Go to definition")))
- (insert-text-button label
- :type 'geiser-doc--xbutton
- 'help-echo help
- 'x-kind (if manual 'manual 'source))))
-
-(defun geiser-doc--insert-xbuttons (impl)
+(defun geiser-doc--insert-doc-buttons (impl)
(when (geiser-impl--method 'external-help impl)
- (geiser-doc--insert-xbutton t)
+ (insert-text-button "[manual]" :type 'geiser-doc-manual)
(insert " "))
- (geiser-doc--insert-xbutton))
+ (insert-text-button "[source]" :type 'geiser-doc-source))
(defun geiser-doc--insert-nav-button (next)
(let* ((lnk (if next (geiser-doc--history-next-link)
@@ -269,7 +263,7 @@ value if the default action should be skipped.")
(defun geiser-doc--insert-footer (impl)
(newline 2)
- (geiser-doc--insert-xbuttons impl)
+ (geiser-doc--insert-doc-buttons impl)
(let* ((prev (and (geiser-doc--history-previous-p) 8))
(nxt (and (geiser-doc--history-next-p) 10))
(len (max 1 (- (window-width)
diff --git a/elisp/geiser-edit.el b/elisp/geiser-edit.el
index df4231c..0d47cbe 100644
--- a/elisp/geiser-edit.el
+++ b/elisp/geiser-edit.el
@@ -1,6 +1,6 @@
-;;; geiser-edit.el -- scheme edit locations -*- lexical-binding: t; -*-
+;;; geiser-edit.el --- Scheme edit locations -*- lexical-binding: t; -*-
-;; Copyright (C) 2009, 2010, 2012, 2013, 2019-2023 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2009, 2010, 2012, 2013, 2019-2024 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
@@ -36,8 +36,16 @@
"How the new buffer is opened when invoking \\[geiser-edit-symbol-at-point]
or following links in error buffers.")
+(defgroup geiser-edit nil
+ "Customizations for scheme buffers and information about them."
+ :group 'geiser)
+
(geiser-custom--defface error-link
- 'link geiser-debug "links in error buffers")
+ 'link geiser-edit "links in error buffers")
+
+(geiser-custom--defcustom geiser-insert-actual-lambda t
+ "Whether geiser-insert-lambda should insert \"λ\" or \"lambda\"."
+ :type 'boolean)
;;; Auxiliary functions:
@@ -156,7 +164,7 @@ or following links in error buffers.")
;;; Links
-(define-button-type 'geiser-edit--button
+(define-button-type 'geiser-edit
'action 'geiser-edit--button-action
'face 'geiser-font-lock-error-link
'follow-link t)
@@ -168,7 +176,7 @@ or following links in error buffers.")
(defun geiser-edit--make-link (beg end file line col &optional method)
(make-button beg end
- :type 'geiser-edit--button
+ :type 'geiser-edit
'geiser-method method
'geiser-location
(geiser-edit--make-location 'error file line col)
@@ -202,7 +210,7 @@ or following links in error buffers.")
(while (> n 0)
(let ((b (ignore-errors (funcall nxt 1))))
(unless b (setq n 0))
- (when (and b (eq (button-type b) 'geiser-edit--button))
+ (when (and b (eq (button-type b) 'geiser-edit))
(setq n (- n 1))
(when (<= n 0)
(setq found t)
@@ -298,10 +306,6 @@ With prefix, asks for the symbol to locate."
(when marker (xref-push-marker-stack marker))
t)))
-(geiser-custom--defcustom geiser-insert-actual-lambda t
- "Whether geiser-insert-lambda should insert \"λ\" or \"lambda\"."
- :type 'boolean)
-
(defun geiser-insert-lambda (&optional full)
"Insert λ or lambda at point. With prefix, inserts (λ ()) or (lambda ()).
diff --git a/elisp/geiser-eval.el b/elisp/geiser-eval.el
index 5e4c566..8f58c25 100644
--- a/elisp/geiser-eval.el
+++ b/elisp/geiser-eval.el
@@ -1,4 +1,4 @@
-;;; geiser-eval.el -- sending scheme code for evaluation -*- lexical-binding: t; -*-
+;;; geiser-eval.el --- Sending scheme code for evaluation -*- lexical-binding: t; -*-
;; Copyright (C) 2009, 2010, 2011, 2012, 2013, 2015, 2021, 2023 Jose Antonio Ortega Ruiz
@@ -9,6 +9,8 @@
;; Start date: Sat Feb 07, 2009 22:35
+;;; Commentary:
+
;; Functions, building on top of geiser-connection, to evaluate scheme
;; code.
diff --git a/elisp/geiser-image.el b/elisp/geiser-image.el
index 62cb970..8476954 100644
--- a/elisp/geiser-image.el
+++ b/elisp/geiser-image.el
@@ -1,4 +1,4 @@
-;;; geiser-image.el -- support for image display -*- lexical-binding: t; -*-
+;;; geiser-image.el --- Support for image display -*- lexical-binding: t; -*-
;; Copyright (c) 2012, 2015 Jose Antonio Ortega Ruiz
@@ -76,13 +76,13 @@ images in `geiser-image--cache-dir'."
(let ((file (button-get button 'geiser-image-file)))
(when (file-exists-p file) (geiser-image--display file))))
-(define-button-type 'geiser-image--button
+(define-button-type 'geiser-image
'action 'geiser-image--button-action
'follow-link t)
(defun geiser-image--insert-button (file)
(insert-text-button "[image]"
- :type 'geiser-image--button
+ :type 'geiser-image
'face 'geiser-font-lock-image-button
'geiser-image-file file
'help-echo "Click to display image"))
diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el
index 3034cb3..e4b33d6 100644
--- a/elisp/geiser-impl.el
+++ b/elisp/geiser-impl.el
@@ -1,6 +1,6 @@
-;;; geiser-impl.el -- generic support for scheme implementations -*- lexical-binding: t; -*-
+;;; geiser-impl.el --- Generic support for scheme implementations -*- lexical-binding: t; -*-
-;; Copyright (C) 2009-2010, 2012-2013, 2015-2016, 2019, 2021-2022 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2009-2010, 2012-2013, 2015-2016, 2019, 2021-2022, 2025 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
@@ -143,9 +143,9 @@ in order to determine its scheme flavour."
(push (cons impl file) geiser-impl--load-files)))
;;;###autoload
-(progn ;Copy the whole def to the autoloads file.
-(defun geiser-activate-implementation (impl)
- (add-to-list 'geiser-active-implementations impl)))
+(progn ;Copy the whole def to the autoloads file.
+ (defun geiser-activate-implementation (impl)
+ (add-to-list 'geiser-active-implementations impl)))
(defsubst geiser-deactivate-implementation (impl)
(setq geiser-active-implementations
diff --git a/elisp/geiser-log.el b/elisp/geiser-log.el
index ead748f..fcd2e1a 100644
--- a/elisp/geiser-log.el
+++ b/elisp/geiser-log.el
@@ -1,4 +1,4 @@
-;;; geiser-log.el -- logging utilities -*- lexical-binding: t; -*-
+;;; geiser-log.el --- Logging utilities -*- lexical-binding: t; -*-
;; Copyright (C) 2009, 2010, 2012, 2019, 2021, 2022 Jose Antonio Ortega Ruiz
diff --git a/elisp/geiser-menu.el b/elisp/geiser-menu.el
index 9492f3c..afc0353 100644
--- a/elisp/geiser-menu.el
+++ b/elisp/geiser-menu.el
@@ -1,4 +1,4 @@
-;;; geiser-menu.el -- menu and keymaps definition -*- lexical-binding: t; -*-
+;;; geiser-menu.el --- Menu and keymaps definition -*- lexical-binding: t; -*-
;; Copyright (c) 2010, 2012 Jose Antonio Ortega Ruiz
diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el
index df8493a..c8a9e0d 100644
--- a/elisp/geiser-mode.el
+++ b/elisp/geiser-mode.el
@@ -1,4 +1,4 @@
-;;; geiser-mode.el -- minor mode for scheme buffers -*- lexical-binding: t; -*-
+;;; geiser-mode.el --- Minor mode for scheme buffers -*- lexical-binding: t; -*-
;; Copyright (C) 2009-2017, 2020, 2022, 2024 Jose Antonio Ortega Ruiz
diff --git a/elisp/geiser-popup.el b/elisp/geiser-popup.el
index c838dd7..bfd5055 100644
--- a/elisp/geiser-popup.el
+++ b/elisp/geiser-popup.el
@@ -1,4 +1,4 @@
-;;; geiser-popup.el -- popup windows -*- lexical-binding: t; -*-
+;;; geiser-popup.el --- Popup windows -*- lexical-binding: t; -*-
;; Copyright (C) 2009, 2010, 2012, 2013 Jose Antonio Ortega Ruiz
diff --git a/elisp/geiser-reload.el b/elisp/geiser-reload.el
index 678e374..25560c6 100644
--- a/elisp/geiser-reload.el
+++ b/elisp/geiser-reload.el
@@ -1,4 +1,4 @@
-;;; geiser-reload.el -- unload/load geiser packages -*- lexical-binding: t; -*-
+;;; geiser-reload.el --- Unload/load geiser packages -*- lexical-binding: t; -*-
;; Copyright (C) 2009, 2010, 2012, 2020, 2021, 2022, 2024 Jose Antonio Ortega Ruiz
@@ -21,36 +21,36 @@
;;; Reload:
-(defmacro geiser--features-list ()
- (quote '(
- geiser-mode
- geiser-repl
- geiser-capf
- geiser-doc
- geiser-xref
- geiser-compile
- geiser-debug
- geiser-completion
- geiser-autodoc
- geiser-edit
- geiser-eval
- geiser-connection
- geiser-syntax
- geiser-menu
- geiser-inf
- geiser-impl
- geiser-image
- geiser-custom
- geiser-log
- geiser-popup
- geiser-base
- geiser
- )))
+(defconst geiser--features-list
+ '(
+ geiser-mode
+ geiser-repl
+ geiser-capf
+ geiser-doc
+ geiser-xref
+ geiser-compile
+ geiser-debug
+ geiser-edit
+ geiser-completion
+ geiser-autodoc
+ geiser-eval
+ geiser-connection
+ geiser-syntax
+ geiser-menu
+ geiser-inf
+ geiser-impl
+ geiser-image
+ geiser-custom
+ geiser-log
+ geiser-popup
+ geiser-base
+ geiser
+ ))
(defun geiser-unload ()
"Unload all Geiser modules."
(interactive)
- (let ((fs (geiser--features-list)))
+ (let ((fs geiser--features-list))
(unload-feature 'geiser-reload t)
(dolist (f fs)
(when (featurep f) (unload-feature f t)))
diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el
index 698a394..b8df566 100644
--- a/elisp/geiser-repl.el
+++ b/elisp/geiser-repl.el
@@ -521,7 +521,7 @@ will be set up using `geiser-connect-local' when a REPL is started.")
(forward-line)
(when (> (point) geiser-repl--last-output-start)
(set-marker geiser-repl--last-output-start (point)))))
- (> (- geiser-repl--last-output-end geiser-repl--last-output-start) 2)))
+ (>= (- geiser-repl--last-output-end geiser-repl--last-output-start) 2)))
(defun geiser-repl--treat-output-region ()
(with-silent-modifications
@@ -803,17 +803,21 @@ If SAVE-HISTORY is non-nil, save CMD in the REPL history."
;;; geiser-repl-autoeval-mode minor mode:
-(defun geiser-repl--autoeval-paren-function ()
- (let* ((data (show-paren--default))
- (here (nth 0 data))
- (there (nth 2 data))
- (mismatch (nth 4 data)))
- (if (and here
- (eq 0 (geiser-repl--nesting-level))
- (not mismatch)
- (> here there))
- (geiser-repl--send-input))
- data))
+(defun geiser-repl--autoeval-paren-function (show-paren-enabled)
+ (lambda ()
+ (let* ((data (show-paren--default))
+ (here (nth 0 data))
+ (there (nth 2 data))
+ (mismatch (nth 4 data)))
+ (if (and (= (point) (point-max))
+ here
+ (eq 0 (geiser-repl--nesting-level))
+ (not mismatch)
+ (> here there))
+ (progn (geiser-repl--send-input)
+ ;; Don't highlight if we're doing an autoeval.
+ nil)
+ (and show-paren-enabled data)))))
(defvar-local geiser-repl-autoeval-mode-string " E"
"Modeline indicator for geiser-repl-autoeval-mode")
@@ -825,20 +829,19 @@ Non-null prefix argument turns on the mode.
Null prefix argument turns off the mode.
When Autoeval mode is enabled, balanced S-expressions are automatically
-evaluated without having to press ENTER.
-
-This mode may cause issues with structural editing modes such as paredit."
+evaluated without having to press ENTER."
:init-value nil
:lighter geiser-repl-autoeval-mode-string
:group 'geiser-repl
- (if (boundp 'show-paren-data-function)
- (if geiser-repl-autoeval-mode
- (progn (show-paren-local-mode 1)
- (setq-local show-paren-delay geiser-repl-autoeval-mode-delay)
- (setq-local show-paren-data-function
- 'geiser-repl--autoeval-paren-function))
- (setq-local show-paren-data-function 'show-paren--default)))
+ (if geiser-repl-autoeval-mode
+ (let ((show-paren-enabled show-paren-mode))
+ (progn (show-paren-local-mode 1)
+ (setq-local show-paren-delay geiser-repl-autoeval-mode-delay)
+ (setq-local show-paren-data-function
+ (geiser-repl--autoeval-paren-function
+ show-paren-enabled))))
+ (setq-local show-paren-data-function 'show-paren--default))
(when (called-interactively-p nil)
(message "Geiser Autoeval %s"
(if geiser-repl-autoeval-mode "enabled" "disabled"))))
@@ -849,7 +852,12 @@ This mode may cause issues with structural editing modes such as paredit."
(defun geiser-repl--superparen-function ()
(when (char-equal (char-before) geiser-repl-superparen-character)
(delete-char -1)
- (insert-char ?\) (geiser-repl--nesting-level))))
+ (let ((level (geiser-repl--nesting-level)))
+ (if (memq nil (mapcar (lambda (idx)
+ (= (char-after idx) ?\)))
+ (number-sequence (point) (- (+ (point) level) 1))))
+ (insert-char ?\) level)
+ (forward-char level)))))
(defvar-local geiser-repl-superparen-mode-string " S"
"Modeline indicator for geiser-repl-superparen-mode")
diff --git a/elisp/geiser-syntax.el b/elisp/geiser-syntax.el
index dbbf9e5..af750fb 100644
--- a/elisp/geiser-syntax.el
+++ b/elisp/geiser-syntax.el
@@ -1,4 +1,4 @@
-;;; geiser-syntax.el -- utilities for parsing scheme syntax -*- lexical-binding: t; -*-
+;;; geiser-syntax.el --- Utilities for parsing scheme syntax -*- lexical-binding: t; -*-
;; Copyright (C) 2009-2016, 2019-2022 Jose Antonio Ortega Ruiz
diff --git a/elisp/geiser-table.el b/elisp/geiser-table.el
index 619d563..dc3925b 100644
--- a/elisp/geiser-table.el
+++ b/elisp/geiser-table.el
@@ -1,4 +1,4 @@
-;;; geiser-table.el -- table creation -*- lexical-binding: t; -*-
+;;; geiser-table.el --- Table creation -*- lexical-binding: t; -*-
;; Copyright (C) 2009, 2010, 2012 Jose Antonio Ortega Ruiz
diff --git a/elisp/geiser-xref.el b/elisp/geiser-xref.el
index 0726d62..aa64f17 100644
--- a/elisp/geiser-xref.el
+++ b/elisp/geiser-xref.el
@@ -1,4 +1,4 @@
-;;; geiser-xref.el -- utilities for cross-referencing -*- lexical-binding: t; -*-
+;;; geiser-xref.el --- Utilities for cross-referencing -*- lexical-binding: t; -*-
;; Copyright (C) 2009, 2010, 2012, 2022 Jose Antonio Ortega Ruiz
@@ -24,6 +24,7 @@
;;; Customization:
+
(defgroup geiser-xref nil
"Options for cross-referencing commands."
:group 'geiser)
@@ -60,7 +61,7 @@
;;; Ref button:
-(define-button-type 'geiser-xref--button
+(define-button-type 'geiser-xref
'action 'geiser-xref--button-action
'face 'geiser-font-lock-xref-link
'follow-link t)
@@ -84,7 +85,7 @@
(insert " - ")
(if (stringp file)
(insert-text-button signature-txt
- :type 'geiser-xref--button
+ :type 'geiser-xref
'location location
'name (car signature)
'help-echo (format "%s in %s"
diff --git a/elisp/geiser.el b/elisp/geiser.el
index 837a9d5..a7aabb9 100644
--- a/elisp/geiser.el
+++ b/elisp/geiser.el
@@ -13,7 +13,7 @@
;; Homepage: https://gitlab.com/emacs-geiser/
;; Package-Requires: ((emacs "27.1") (project "0.8.1"))
;; SPDX-License-Identifier: BSD-3-Clause
-;; Version: 0.30
+;; Version: 0.31.1
;;; Commentary:
@@ -54,7 +54,8 @@
;;; Locations:
;;;###autoload
-(defconst geiser-elisp-dir (file-name-directory load-file-name)
+(defconst geiser-elisp-dir
+ (file-name-directory (or load-file-name buffer-file-name))
"Directory containing Geiser's Elisp files.")
@@ -108,6 +109,7 @@
(custom-add-load group (symbol-name group))
(custom-add-load 'geiser (symbol-name group)))
'(geiser
+ geiser-edit
geiser-repl
geiser-autodoc
geiser-doc