diff options
| -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.  | 
