diff options
author | jao <jao@gnu.org> | 2020-07-19 22:41:22 +0100 |
---|---|---|
committer | jao <jao@gnu.org> | 2020-07-19 22:41:22 +0100 |
commit | 847d2ad4c6da462c26c50af1ef7d9cd697f3a5d2 (patch) | |
tree | 29cdda38fe12e399e36830bd25bd7ac5cb83011e | |
parent | 02e228f312483fc78af1c2a1e93f706f774788fa (diff) | |
download | geiser-847d2ad4c6da462c26c50af1ef7d9cd697f3a5d2.tar.gz geiser-847d2ad4c6da462c26c50af1ef7d9cd697f3a5d2.tar.bz2 |
scheme and autotools removals
The plan is to have geiser-core contain only, well, the elisp core
engine. The autotools scafolding is no really worth it, so it's gone
too (and in the process, i'll look younger).
-rw-r--r-- | AUTHORS | 37 | ||||
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | HACKING | 26 | ||||
-rw-r--r-- | INSTALL | 115 | ||||
-rw-r--r-- | Makefile.am | 59 | ||||
l--------- | NEWS.org | 1 | ||||
-rw-r--r-- | README.elpa | 40 | ||||
-rw-r--r-- | THANKS | 46 | ||||
-rwxr-xr-x | autogen.sh | 5 | ||||
-rw-r--r-- | bin/Makefile.am | 15 | ||||
-rwxr-xr-x | bin/geiser-racket.sh | 24 | ||||
-rw-r--r-- | configure.ac | 32 | ||||
-rw-r--r-- | doc/makefile (renamed from doc/Makefile.am) | 22 | ||||
-rw-r--r-- | elisp/Makefile.am | 42 | ||||
-rw-r--r-- | elisp/geiser-install.el.in | 5 | ||||
-rw-r--r-- | elisp/geiser-version.el.in | 20 | ||||
-rw-r--r-- | elisp/geiser.el | 13 | ||||
-rw-r--r-- | license (renamed from COPYING) | 0 | ||||
-rw-r--r-- | makefile | 23 | ||||
-rw-r--r-- | news.org (renamed from NEWS) | 0 | ||||
-rw-r--r-- | readme.org (renamed from README.org) | 25 |
21 files changed, 53 insertions, 503 deletions
diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index b583db1..0000000 --- a/AUTHORS +++ /dev/null @@ -1,37 +0,0 @@ -Jose A. Ortega Ruiz <jao@gnu.org> designed and implemented Geiser and -is its active maintainer. For more boring details about him, see -<http://jao.io>. - -Daniel J. Leslie implemented and maintains Geiser's support for -Chicken. - -Peter Feigl implemented and maintins Geiser's support for GNU/MIT -Scheme, Chibi and Chez. - -Contributors: - -Michael Wilber -Diogo F. S. Ramos -Jonas Rodrigues -Ray Racine -Nick Parker -Darren Hoo -Ludovic Courtès -Alex Kost -Mario Rodas -Christoph Egger -Chunyang Xu -Fice T -Syohei Yoshida -Mario Domenech -Chaos Eternal -Peter Wang -John Whitbeck -Ziyi Yan -George D. Plymale II -Jordan Brown -Edwin Whatkeys -Alexander Konstantinov -Aaron Marks - -See also <https://gitlab.com/jaor/geiser/graphs/master>. diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index 09d790c..0000000 --- a/ChangeLog +++ /dev/null @@ -1,6 +0,0 @@ -## The contents of this file will be generated during 'make dist' by the -## shell command: - - git log --summary --stat - -# which you can run using 'sh ChangeLog' diff --git a/HACKING b/HACKING deleted file mode 100644 index 5be4cb2..0000000 --- a/HACKING +++ /dev/null @@ -1,26 +0,0 @@ -## How to support a new Scheme implementation - -Geiser works by running an instance of a REPL, or remotely connecting -to one, and evaluating the scheme code it sees there. Then, every time -it needs to perform some operation (like, say, printing autodoc, -jumping to a source location or expanding a macro), it asks the -running scheme instance for that information. - -So supporting a new scheme usually means writing a small scheme -library that provides that information on demand, and then some -standard elisp functions that invoke the procedures in that -library. - -To see what elisp functions one needs to implement, just execute the -command `M-x geiser-implementation-help` inside emacs with a recent -version of geiser installed. And then take a look at, say, -geiser-guile.el or geiser-racket.el for examples of how those -functions are implemented for concrete schemes (those are the most -featureful implementations we have, so perhaps it's easier to begin -with something like geiser-chicken.el or geiser-chibi.el). - -Not all schemes can provide introspective information to implement all -the functionality that geiser tries to offer. That is okay: you can -leave as many functions unimplemented as you see fit (there is even an -explicit list of unsupported features), and geiser will still know how -to use the ones that are implemented. diff --git a/INSTALL b/INSTALL deleted file mode 100644 index c17c059..0000000 --- a/INSTALL +++ /dev/null @@ -1,115 +0,0 @@ -Installing Geiser. ------------------- - -Geiser is usable from its source tree, with no configuration -whatsoever, or can be installed from ELPA with `M-x install-package' -is Marmalade is in your list of archives. You can also (byte) compile -and install it with the usual configure/make/make install dance. - -* From ELPA - -Add Marmalade to your `package-archives' list: - - (require 'package) - (add-to-list 'package-archives - '("marmalade" . "http://marmalade-repo.org/packages/")) - (package-initialize) - -and run `M-x install-package RET geiser`. You can also use -http://download.savannah.gnu.org/releases/geiser/packages as a repo, -or download directly the package from there and use M-x -package-install-file. - -* In place - - Extract the tarball or clone the git repository anywhere in your - file system. Let's call that place <path-to-geiser>. - - In your .emacs: - - (load-file "<path-to-geiser>/elisp/geiser.el") - -* Byte-compiled - - Create a build directory, `build', say: - $ cd <path-to-geiser> - $ mkdir build; cd build - - Configure and make: - $ ../configure && make - - Now, you can use the byte-compiled Geiser in place by adding to - your .emacs: - - (load "<path-to-geiser>/build/elisp/geiser-load") - - or, alternatively, install it with: - - $ make install - - (you might need to get root access, depending on your installation - directory) and, instead of the above load forms, require - 'geiser-install (not 'geiser, mind you) in your emacs - initialization file: - - (require 'geiser-install) - -* Chicken Addendum - These steps are necessary to fully support Chicken Scheme, but are - not required for any other scheme. - - - Install the necessary support eggs: - $ chicken-install -s apropos chicken-doc - - Update the Chicken documentation database: - $ cd `csi -p '(chicken-home)'` - $ curl http://3e8.org/pub/chicken-doc/chicken-doc-repo.tgz | sudo tar zx - - You're ready to go! - -* Gambit Addendum - These steps are necessary to fully support all Gambit Scheme functionalities, - but are not required for any other scheme. - - # SETUP : - 1 - clone the last version of gambit and of this repo - 2 - configure gambit using --enable-rtlib-debug-source to activate autodoc - ``` bash - $ cd ~/ - $ git clone "the gambit repo address" - $ cd gambit - $ ./configure --enable-single-host --enable-debug --enable-rtlib-debug-source - $ make bootstrap - $ make bootclean - $ make -j - $ make install - ``` - 3 - put a link to geiser/elisp/geiser.el in your init file - in your init file paste : - ``` elisp - (load-file "~/geiser/elisp/geiser.el") - ``` - (the path is your path to geiser.el.) - - # setup REMOTE CONNECT TO A GAMBIT REPL - 1 - you need to enable the gambit/geiser module - ( if you can't, substitute the command below - with the PS: at the end of the readme ) - ``` bash - $ mkdir ~/gambit/lib/gambit/geiser - $ cp ~/geiser/geiser-module/* ~/gambit/lib/geiser/ - ``` - 2 - now that you have the module you start gsi with it and using the -:d@ - ``` bash - $ gsi -:d gambit/geiser - - ``` - 3 - you can now open emacs and write - ``` - M-x geiser-connect gambit - ``` - Enjoy ! - -By the way, if you are unable to use gambit modules, -open gsi with the gambit.scm file -located in geiser/scheme/gambit/geiser/gambit.scm - -something like : gsi -:d@ ~/geiser/scheme/gambit/geiser/gambit.scm - - -Geiser's makefile accepts also all those other standard autotools -targets that you've come to know and love and that are documented -in virtually all boilerplate INSTALL files out there. diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index 6e1b49b..0000000 --- a/Makefile.am +++ /dev/null @@ -1,59 +0,0 @@ -SUBDIRS = . elisp scheme bin doc - -EXTRA_DIST = THANKS README.org README.elpa - -README: README.org - cp $(top_srcdir)/README.org README - -dist-hook: - $(SHELL) $(top_srcdir)/ChangeLog > $(top_distdir)/ChangeLog - -elpa_name = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION) -elpa_dir = $(abs_top_builddir)/$(elpa_name) -elpa_slogan = "GNU Emacs and Scheme talk to each other" -geiser_el = $(elpa_dir)/geiser.el -bin_dir = $(elpa_dir)/bin -scheme_dir = $(elpa_dir)/scheme - -elpa: README.elpa info - rm -rf $(elpa_dir) - $(mkdir_p) $(elpa_dir) - - echo '(define-package "geiser" "$(PACKAGE_VERSION)" $(elpa_slogan))' \ - > $(elpa_dir)/geiser-pkg.el - - $(INSTALL_DATA) $(abs_top_srcdir)/elisp/*.el \ - $(elpa_dir) - - $(mkdir_p) $(scheme_dir)/chez/geiser - $(mkdir_p) $(scheme_dir)/guile/geiser - $(mkdir_p) $(scheme_dir)/gambit/geiser - $(mkdir_p) $(scheme_dir)/racket/geiser - $(mkdir_p) $(scheme_dir)/chicken/geiser - $(mkdir_p) $(scheme_dir)/chibi/geiser - $(mkdir_p) $(scheme_dir)/mit/geiser - $(INSTALL_DATA) $(abs_top_srcdir)/scheme/chez/geiser/* \ - $(scheme_dir)/chez/geiser - $(INSTALL_DATA) $(abs_top_srcdir)/scheme/guile/geiser/* \ - $(scheme_dir)/guile/geiser - $(INSTALL_DATA) $(abs_top_srcdir)/scheme/gambit/geiser/* \ - $(scheme_dir)/gambit/geiser - $(INSTALL_DATA) $(abs_top_srcdir)/scheme/racket/geiser/* \ - $(scheme_dir)/racket/geiser - $(INSTALL_DATA) $(abs_top_srcdir)/scheme/chibi/geiser/* \ - $(scheme_dir)/chibi/geiser - $(INSTALL_DATA) $(abs_top_srcdir)/scheme/chicken/geiser/* \ - $(scheme_dir)/chicken/geiser - $(INSTALL_DATA) $(abs_top_srcdir)/scheme/mit/geiser/* \ - $(scheme_dir)/mit/geiser - - $(INSTALL_DATA) $(srcdir)/doc/geiser.info $(elpa_dir) - (cd $(elpa_dir) && install-info --dir=dir geiser.info 2>/dev/null) - - $(INSTALL_DATA) $(top_srcdir)/README.elpa $(elpa_dir)/README - - $(mkdir_p) $(bin_dir) - $(INSTALL) $(top_srcdir)/bin/geiser-racket.sh $(bin_dir) - - rm -f $(elpa_name).tar - tar cf $(elpa_name).tar $(elpa_name) diff --git a/NEWS.org b/NEWS.org deleted file mode 120000 index 3d70ee3..0000000 --- a/NEWS.org +++ /dev/null @@ -1 +0,0 @@ -NEWS
\ No newline at end of file diff --git a/README.elpa b/README.elpa deleted file mode 100644 index a2d717a..0000000 --- a/README.elpa +++ /dev/null @@ -1,40 +0,0 @@ -Geiser is a generic Emacs/Scheme interaction mode, featuring an -enhanced REPL and a set of minor modes improving Emacs' basic scheme -major mode. - -Geiser supports Guile, Chicken, Chibi, MIT-Scheme, Gambit, Racket, and Chez. - -Main functionalities: - - - Evaluation of forms in the namespace of the current module. - - - Macro expansion. - - - File/module loading. - - - Namespace-aware identifier completion (including local bindings, - names visible in the current module, and module names). - - - Autodoc: the echo area shows information about the signature of - the procedure/macro around point automatically. - - - Jump to definition of identifier at point. - - - Direct access to documentation, including docstrings (when the - implementation provides them) and user manuals. - - - Listings of identifiers exported by a given module (Guile). - - - Listings of callers/callees of procedures (Guile). - - - Rudimentary support for debugging (list of - evaluation/compilation error in an Emacs' compilation-mode - buffer). - - - Support for inline images in schemes, such as Racket, that treat - them as first order values. - -See http://www.nongnu.org/geiser/ for the full manual in HTML form, or -the the info manual installed by this package. - -Author: http://jao.io @@ -1,46 +0,0 @@ -Dan Leslie, with the help of his three-months old daughter Freija, -proved there's a smidgen of sense in this madness by adding support -for Chicken to version 0.7 of Geiser, several years after it was born. - -Andy Wingo, Geiser's first user, has been a continuous source of -encouragement and suggestions, and keeps improving Guile and heeding -my feature requests. - -The nice thing about collaborating with Andreas Rottmann over all -these years is that he will not only make your project better with -insightful comments and prodding: he'll send you patches galore too. - -Ludovic Courtès, #geiser's citizen no. 1, joined the fun after a -while, and has since then been a continuous source of encouragement, -ideas and bug reports. - -Michael Wilber convinced me that image support for Racket was not only -fun, but easy, with the best argument: actual code! - -Daniel Hackney and Grant Rettke created the first ELPA packages for -Geiser and taught me to fish. - -Diogo F. S. Ramos is Geiser's most indefatigable user and bug -reporter, and the mailing list has been a far less lonely place since -he came. - -Aleix Conchillo has been my favourite spammer, beta tester and patch -sender during more years and for more projects than i can remember. - -Eduardo Cavazos' contagious enthusiasm has helped in many ways to keep -Geiser alive, and he's become its best evangelist in R6RS circles. - -Alex Kost has contributed with many bug reports and improved Geiser -with several patches. - -Eli Barzilay took the time to play with an early alpha and made many -valuable suggestions, besides answering all my 'how do you in PLT' -questions. - -Matthew Flatt, Robby Findler and the rest of the PLT team did not only -answer my inquiries, but provided almost instant fixes to the few -issues i found. - -Thanks also to the PLT and Guile communities, for showing me that -Geiser was not only possible, but a pleasure to hack on. And to the -Slime hackers, who led the way. diff --git a/autogen.sh b/autogen.sh deleted file mode 100755 index 781eabd..0000000 --- a/autogen.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -[ -f elisp/geiser.el ] || exit 1 - -autoreconf -Wall -i diff --git a/bin/Makefile.am b/bin/Makefile.am deleted file mode 100644 index 9f6ee2b..0000000 --- a/bin/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -EXTRA_DIST = geiser-racket.sh -dist_bin_SCRIPTS = geiser-racket -noinst_SCRIPTS = geiser-racket-noinst - -CLEANFILES = $(dist_bin_SCRIPTS) $(noinst_SCRIPTS) - -geiser-racket: $(srcdir)/geiser-racket.sh - @sed -e "s|top=\".*\"|top=$(datarootdir)/geiser|" \ - $(srcdir)/geiser-racket.sh >$@ - @chmod +x $@ - -geiser-racket-noinst: $(srcdir)/geiser-racket.sh - @sed -e "s|top=\".*\"|top=$(abs_top_srcdir)/scheme|" \ - $(srcdir)/geiser-racket.sh >$@ - @chmod +x $@ diff --git a/bin/geiser-racket.sh b/bin/geiser-racket.sh deleted file mode 100755 index 4ac7712..0000000 --- a/bin/geiser-racket.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -#| -topdir=$(dirname $0) -elpa_scheme=$topdir/scheme -in_scheme=$topdir/../scheme -top=$(if [ -d $elpa_scheme ]; then echo $elpa_scheme; else echo $in_scheme; fi) -exec racket -i -S "$top/racket" -l errortrace -cu "$0" ${1+"$@"} -|# - -#lang racket/base - -(require (lib "cmdline.rkt")) -(require geiser/server) - -(define port (make-parameter 0)) -(define host (make-parameter #f (lambda (h) (and (string? h) h)))) - -(command-line - "run-racket.sh" (current-command-line-arguments) - (once-each - (("-n" "--hostname") n "Network hostname, or #f for all interfaces" (host n)) - (("-p" "--port") p "Geiser server port" (port (string->number p))))) - -(printf "Geiser server running at port ~a~%" (start-geiser (port) (host))) diff --git a/configure.ac b/configure.ac deleted file mode 100644 index b1fd3c3..0000000 --- a/configure.ac +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2018, 2020 Jose A Ortega Ruiz. -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -AC_INIT([Geiser],[0.12],[geiser-users@nongnu.org],geiser) -AC_CONFIG_SRCDIR([elisp/geiser.el]) -AM_INIT_AUTOMAKE - -AC_PROG_MAKE_SET -AC_PROG_INSTALL -AC_PROG_MKDIR_P -AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, no) - -AM_PATH_LISPDIR - -AC_CONFIG_FILES([ -Makefile -elisp/Makefile -elisp/geiser-version.el -elisp/geiser-load.el -scheme/Makefile -bin/Makefile -doc/Makefile -]) - -AC_OUTPUT diff --git a/doc/Makefile.am b/doc/makefile index 863c2df..1d3bb63 100644 --- a/doc/Makefile.am +++ b/doc/makefile @@ -1,4 +1,4 @@ -# Copyright (C) 2010 Jose Antonio Ortega Ruiz +# Copyright (C) 2010, 2020 Jose Antonio Ortega Ruiz # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without @@ -8,22 +8,8 @@ # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# SUBDIRS = img -SUFFIXES = .html - -info_TEXINFOS = geiser.texi -geiser_TEXINFOS = \ - macros.texi \ - top.texi \ - intro.texi \ - install.texi \ - repl.texi \ - parens.texi \ - cheat.texi \ - thanks.texi \ - index.texi - -output_dir=$(top_builddir)/doc/html +top_srcdir=.. +output_dir=html web: rm -f $(output_dir)/*.html @@ -36,5 +22,3 @@ web: $(top_srcdir)/doc/web.texi cp $(top_srcdir)/doc/geiser.css ${output_dir} cp -r $(top_srcdir)/doc/img ${output_dir} - -EXTRA_DIST = dir diff --git a/elisp/Makefile.am b/elisp/Makefile.am deleted file mode 100644 index 3d09946..0000000 --- a/elisp/Makefile.am +++ /dev/null @@ -1,42 +0,0 @@ -EXTRA_DIST = geiser-install.el.in geiser-load.el.in - -dist_lisp_LISP = \ - geiser-autodoc.el \ - geiser-base.el \ - geiser-company.el \ - geiser-compile.el \ - geiser-completion.el \ - geiser-connection.el \ - geiser-custom.el \ - geiser-debug.el \ - geiser-doc.el \ - geiser-edit.el \ - geiser.el \ - geiser-eval.el \ - geiser-guile.el \ - geiser-image.el \ - geiser-impl.el \ - geiser-log.el \ - geiser-menu.el \ - geiser-mit.el \ - geiser-mode.el \ - geiser-racket.el \ - geiser-gambit.el \ - geiser-chicken.el \ - geiser-chez.el \ - geiser-chibi.el \ - geiser-popup.el \ - geiser-reload.el \ - geiser-repl.el \ - geiser-syntax.el \ - geiser-xref.el \ - geiser-version.el - -lisp_LISP = geiser-install.el -noinst_LISP = geiser-load.el - -CLEANFILES = geiser-install.el geiser-load.el - -geiser-install.el: $(srcdir)/geiser.el $(srcdir)/geiser-install.el.in - @sed -e "s|@SCHEME_DIR[@]|$(datarootdir)/geiser|" \ - $(srcdir)/geiser-install.el.in >$@ diff --git a/elisp/geiser-install.el.in b/elisp/geiser-install.el.in deleted file mode 100644 index da9f28f..0000000 --- a/elisp/geiser-install.el.in +++ /dev/null @@ -1,5 +0,0 @@ -(require 'geiser) - -(setq geiser-scheme-dir "@SCHEME_DIR@") - -(provide 'geiser-install) diff --git a/elisp/geiser-version.el.in b/elisp/geiser-version.el.in deleted file mode 100644 index f5a1348..0000000 --- a/elisp/geiser-version.el.in +++ /dev/null @@ -1,20 +0,0 @@ -;;; geiser-version.el.in -- geiser's version - -;; Copyright (C) 2009 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>. - - - -(defvar geiser-version-string "@PACKAGE_STRING@" - "Geiser's version as a string.") - -(defun geiser-version () - "Echoes Geiser's version." - (interactive) - (message "%s" geiser-version-string)) - -(provide 'geiser-version) diff --git a/elisp/geiser.el b/elisp/geiser.el index 837fb24..eb5e975 100644 --- a/elisp/geiser.el +++ b/elisp/geiser.el @@ -1,6 +1,6 @@ ;;; geiser.el --- GNU Emacs and Scheme talk to each other -;; Copyright (C) 2009, 2010, 2011, 2012, 2013, 2015, 2018 Jose Antonio Ortega Ruiz +;; Copyright (C) 2009, 2010, 2011, 2012, 2013, 2015, 2018, 2020 Jose Antonio Ortega Ruiz ;; URL: http://www.nongnu.org/geiser/ ;; This program is free software; you can redistribute it and/or @@ -157,14 +157,7 @@ geiser-debug geiser-faces geiser-mode - geiser-guile - geiser-gambit geiser-image - geiser-racket - geiser-chicken - geiser-chez - geiser-chibi - geiser-mit geiser-implementation geiser-xref)) @@ -173,10 +166,8 @@ ;;;###autoload (add-hook 'scheme-mode-hook 'geiser-mode--maybe-activate) -;;;###autoload -(add-to-list 'auto-mode-alist '("\\.rkt\\'" . scheme-mode)) - + (provide 'geiser) ;;; geiser.el ends here diff --git a/makefile b/makefile new file mode 100644 index 0000000..ebddc0d --- /dev/null +++ b/makefile @@ -0,0 +1,23 @@ +elpa_name = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION) +elpa_dir = $(elpa_name) +elpa_slogan = "GNU Emacs and Scheme talk to each other" +geiser_el = $(elpa_dir)/geiser.el +bin_dir = $(elpa_dir)/bin +scheme_dir = $(elpa_dir)/scheme + +elpa: info + rm -rf $(elpa_dir) + mkdir -p $(elpa_dir) + + echo '(define-package "geiser" "$(PACKAGE_VERSION)" $(elpa_slogan))' \ + > $(elpa_dir)/geiser-pkg.el + + cp $(abs_top_srcdir)/elisp/*.el $(elpa_dir) + + cp doc/geiser.info $(elpa_dir) + (cd $(elpa_dir) && install-info --dir=dir geiser.info 2>/dev/null) + + cp readme.org $(elpa_dir)/README + + rm -f $(elpa_name).tar + tar cf $(elpa_name).tar $(elpa_name) @@ -247,3 +247,28 @@ - =M-g n=, =M-g p=, =C-x `= for error navigation. - =q= to bury buffer. +* How to support a new scheme implementation + Geiser works by running an instance of a REPL, or remotely connecting + to one, and evaluating the scheme code it sees there. Then, every time + it needs to perform some operation (like, say, printing autodoc, + jumping to a source location or expanding a macro), it asks the + running scheme instance for that information. + + So supporting a new scheme usually means writing a small scheme + library that provides that information on demand, and then some + standard elisp functions that invoke the procedures in that + library. + + To see what elisp functions one needs to implement, just execute the + command `M-x geiser-implementation-help` inside emacs with a recent + version of geiser installed. And then take a look at, say, + geiser-guile.el or geiser-racket.el for examples of how those + functions are implemented for concrete schemes (those are the most + featureful implementations we have, so perhaps it's easier to begin + with something like geiser-chicken.el or geiser-chibi.el). + + Not all schemes can provide introspective information to implement all + the functionality that geiser tries to offer. That is okay: you can + leave as many functions unimplemented as you see fit (there is even an + explicit list of unsupported features), and geiser will still know how + to use the ones that are implemented. |