diff -purN emacsy-0.3.21-4a1a/build-aux/pre-inst-env.in emacsy-0.3.23-c250/build-aux/pre-inst-env.in
--- emacsy-0.3.21-4a1a/build-aux/pre-inst-env.in	1970-01-01 01:00:00.000000000 +0100
+++ emacsy-0.3.23-c250/build-aux/pre-inst-env.in	1970-01-01 01:00:00.000000000 +0100
@@ -1,5 +1,23 @@
 #! @BASH@
 
+# Emacsy --- An embeddable Emacs-like library using  GNU Guile.
+# Copyright (C) 2019 Jan Nieuwenhuizen <janneke@gnu.org>
+#
+# This file is part of Emacsy.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
 # Usage: ./pre-inst-env COMMAND ARG...
 #
 # Run COMMAND in a pre-installation environment.  Typical use is
diff -purN emacsy-0.3.21-4a1a/configure emacsy-0.3.23-c250/configure
--- emacsy-0.3.21-4a1a/configure	1970-01-01 01:00:00.000000000 +0100
+++ emacsy-0.3.23-c250/configure	1970-01-01 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Emacsy 0.3.21-4a1a.
+# Generated by GNU Autoconf 2.69 for Emacsy 0.3.23-c250.
 #
 # Report bugs to <guile-user@gnu.org>.
 #
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='Emacsy'
 PACKAGE_TARNAME='emacsy'
-PACKAGE_VERSION='0.3.21-4a1a'
-PACKAGE_STRING='Emacsy 0.3.21-4a1a'
+PACKAGE_VERSION='0.3.23-c250'
+PACKAGE_STRING='Emacsy 0.3.23-c250'
 PACKAGE_BUGREPORT='guile-user@gnu.org'
 PACKAGE_URL=''
 
@@ -1358,7 +1358,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures Emacsy 0.3.21-4a1a to adapt to many kinds of systems.
+\`configure' configures Emacsy 0.3.23-c250 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1428,7 +1428,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of Emacsy 0.3.21-4a1a:";;
+     short | recursive ) echo "Configuration of Emacsy 0.3.23-c250:";;
    esac
   cat <<\_ACEOF
 
@@ -1560,7 +1560,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-Emacsy configure 0.3.21-4a1a
+Emacsy configure 0.3.23-c250
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1838,7 +1838,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by Emacsy $as_me 0.3.21-4a1a, which was
+It was created by Emacsy $as_me 0.3.23-c250, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2702,7 +2702,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='emacsy'
- VERSION='0.3.21-4a1a'
+ VERSION='0.3.23-c250'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -14329,7 +14329,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by Emacsy $as_me 0.3.21-4a1a, which was
+This file was extended by Emacsy $as_me 0.3.23-c250, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -14386,7 +14386,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-Emacsy config.status 0.3.21-4a1a
+Emacsy config.status 0.3.23-c250
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -purN emacsy-0.3.21-4a1a/doc/api.texi emacsy-0.3.23-c250/doc/api.texi
--- emacsy-0.3.21-4a1a/doc/api.texi	1970-01-01 01:00:00.000000000 +0100
+++ emacsy-0.3.23-c250/doc/api.texi	1970-01-01 01:00:00.000000000 +0100
@@ -1,5 +1,16 @@
 @c Generated by doc-snarf, do not edit.
 
+@c Copyright (C) 2012, 2013 Shane Celis <shane.celis@gmail.com>
+@c Copyright (C) 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+
+@c Permission is granted to copy, distribute and/or modify this document
+@c under the terms of the GNU Free Documentation License, Version 1.3 or
+@c any later version published by the Free Software Foundation; with no
+@c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
+@c copy of the license is included in the section entitled ``GNU Free
+@c Documentation License''.
+
+
 @c snarfed from emacsy/emacsy.c:32
 
 @node C Api
@@ -835,47 +846,47 @@ Emacs' concepts of buffer, window, and m
 the model, view, and controller respectively---the MVC pattern.
 
 
-@c snarfed from emacsy/buffer.scm:50
+@c snarfed from emacsy/buffer.scm:78
 @defmac with-buffer @dots{}
 A convenience macro to work with a given buffer.
 @end defmac
 
-@c snarfed from emacsy/buffer.scm:64
+@c snarfed from emacsy/buffer.scm:92
 @defmac save-excursion @dots{}
 A convenience macro to do some work
 @end defmac
 
-@c snarfed from emacsy/buffer.scm:82
+@c snarfed from emacsy/buffer.scm:108
 @deftp {Class} <buffer>
 
 @end deftp
 
-@c snarfed from emacsy/buffer.scm:87
+@c snarfed from emacsy/buffer.scm:113
 @defvar before-buffer-change-hook
 
 @end defvar
 
-@c snarfed from emacsy/buffer.scm:90
+@c snarfed from emacsy/buffer.scm:116
 @defvar after-buffer-change-hook
 
 @end defvar
 
-@c snarfed from emacsy/buffer.scm:96
+@c snarfed from emacsy/buffer.scm:122
 @defvar buffer-stack
 
 @end defvar
 
-@c snarfed from emacsy/buffer.scm:99
+@c snarfed from emacsy/buffer.scm:125
 @defvar last-buffer
 
 @end defvar
 
-@c snarfed from emacsy/buffer.scm:102
+@c snarfed from emacsy/buffer.scm:128
 @defvar aux-buffer
 
 @end defvar
 
-@c snarfed from emacsy/buffer.scm:105
+@c snarfed from emacsy/buffer.scm:131
 @deffn {Scheme Procedure} buffer-name
 Buffer's have a name, and there is always a current buffer or it's
 false.  Note that methods do not work as easily with optional
@@ -883,112 +894,117 @@ arguments.  It seems best to define each
 number of arguments as shown below.
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:112
+@c snarfed from emacsy/buffer.scm:138
 @deffn {Scheme Procedure} buffer-name (buffer <buffer>)
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:116
+@c snarfed from emacsy/buffer.scm:142
 @deffn {Scheme Procedure} set-buffer-name! name
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:120
+@c snarfed from emacsy/buffer.scm:146
 @deffn {Scheme Procedure} set-buffer-name! name (buffer <buffer>)
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:124
+@c snarfed from emacsy/buffer.scm:150
 @deffn {Scheme Procedure} buffer-modified?
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:128
+@c snarfed from emacsy/buffer.scm:154
 @deffn {Scheme Procedure} buffer-modified-tick
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:132
+@c snarfed from emacsy/buffer.scm:158
 @deffn {Scheme Procedure} write (obj <buffer>) port
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:139
+@c snarfed from emacsy/buffer.scm:165
 @deffn {Scheme Procedure} current-local-map
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:143
+@c snarfed from emacsy/buffer.scm:169
 @deffn {Scheme Procedure} use-local-map keymap
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:147
+@c snarfed from emacsy/buffer.scm:173
 @deffn {Scheme Procedure} buffer-list
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:151
+@c snarfed from emacsy/buffer.scm:177
 @deffn {Scheme Procedure} current-buffer
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:155
+@c snarfed from emacsy/buffer.scm:181
 @deffn {Scheme Procedure} add-buffer! buffer
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:159
+@c snarfed from emacsy/buffer.scm:185
 @deffn {Scheme Procedure} remove-buffer! buffer
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:163
+@c snarfed from emacsy/buffer.scm:195
 @deffn {Interactive Procedure} next-buffer  #:optional (incr 1)
 @kindex next-buffer  #:optional (incr 1)
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:167
+@c snarfed from emacsy/buffer.scm:199
 @deffn {Interactive Procedure} prev-buffer  #:optional (incr 1)
 @kindex prev-buffer  #:optional (incr 1)
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:171
+@c snarfed from emacsy/buffer.scm:203
 @deffn {Scheme Procedure} set-buffer! buffer
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:175
+@c snarfed from emacsy/buffer.scm:207
 This is scary, we will override it when we have <text-buffer>.
 
-@c snarfed from emacsy/buffer.scm:180
-@deffn {Interactive Procedure} other-buffer  #:optional (count 1)
-@kindex other-buffer  #:optional (count 1)
+@c snarfed from emacsy/buffer.scm:212
+@deffn {Scheme Procedure} other-buffer!  #:optional (incr 1)
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:202
+@c snarfed from emacsy/buffer.scm:239
 @defvar switch-to-buffer
 
 @end defvar
 
-@c snarfed from emacsy/buffer.scm:205
+@c snarfed from emacsy/buffer.scm:242
 @deffn {Scheme Procedure} local-var-ref symbol
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:212
+@c snarfed from emacsy/buffer.scm:249
 @deffn {Scheme Procedure} local-var-set! symbol value
 
 @end deffn
 
-@c snarfed from emacsy/buffer.scm:216
+@c snarfed from emacsy/buffer.scm:253
 @defvar local-var
 
 @end defvar
 
+@c snarfed from emacsy/buffer.scm:257
+@deffn {Scheme Procedure} emacsy-mode-line
+
+method
+@end deffn
+
 @node Mru-stack
 @subsection Mru-stack
 
@@ -1321,73 +1337,83 @@ may override these, for efficiency or ot
 @end deffn
 
 @c snarfed from emacsy/text.scm:302
+@deffn {Scheme Procedure} buffer:set-mark (buffer <buffer>) pos
+
+@end deffn
+
+@c snarfed from emacsy/text.scm:306
+@deffn {Scheme Procedure} buffer:mark (buffer <buffer>)
+
+@end deffn
+
+@c snarfed from emacsy/text.scm:310
 @subsection Editing for Gap Buffer
 
-@c snarfed from emacsy/text.scm:313
+@c snarfed from emacsy/text.scm:321
 @var{<text-buffer>} inherits from buffer and implements the simplest
 text editing for the Gap Buffer.
 
-@c snarfed from emacsy/text.scm:321
+@c snarfed from emacsy/text.scm:329
 @deffn {Scheme Procedure} buffer:buffer-string (buffer <text-buffer>)
 
 @end deffn
 
-@c snarfed from emacsy/text.scm:325
+@c snarfed from emacsy/text.scm:333
 @deffn {Scheme Procedure} buffer:goto-char (buffer <text-buffer>) pos
 
 @end deffn
 
-@c snarfed from emacsy/text.scm:329
+@c snarfed from emacsy/text.scm:337
 @deffn {Scheme Procedure} buffer:point (buffer <text-buffer>)
 
 @end deffn
 
-@c snarfed from emacsy/text.scm:333
+@c snarfed from emacsy/text.scm:341
 @deffn {Scheme Procedure} buffer:point-min (buffer <text-buffer>)
 
 @end deffn
 
-@c snarfed from emacsy/text.scm:337
+@c snarfed from emacsy/text.scm:345
 @deffn {Scheme Procedure} buffer:point-max (buffer <text-buffer>)
 
 @end deffn
 
-@c snarfed from emacsy/text.scm:341
+@c snarfed from emacsy/text.scm:349
 @deffn {Scheme Procedure} buffer:set-mark (buffer <text-buffer>) pos
 
 @end deffn
 
-@c snarfed from emacsy/text.scm:345
+@c snarfed from emacsy/text.scm:353
 @deffn {Scheme Procedure} buffer:mark (buffer <text-buffer>)
 
 @end deffn
 
-@c snarfed from emacsy/text.scm:349
+@c snarfed from emacsy/text.scm:357
 @deffn {Scheme Procedure} buffer:char-before (buffer <text-buffer>) point
 
 @end deffn
 
-@c snarfed from emacsy/text.scm:353
+@c snarfed from emacsy/text.scm:361
 @deffn {Scheme Procedure} buffer:char-after (buffer <text-buffer>) pos
 
 @end deffn
 
-@c snarfed from emacsy/text.scm:357
+@c snarfed from emacsy/text.scm:365
 @deffn {Scheme Procedure} buffer:insert-string (buffer <text-buffer>) string
 
 @end deffn
 
-@c snarfed from emacsy/text.scm:361
+@c snarfed from emacsy/text.scm:369
 @deffn {Scheme Procedure} buffer:insert-char (buffer <text-buffer>) char
 
 @end deffn
 
-@c snarfed from emacsy/text.scm:365
+@c snarfed from emacsy/text.scm:373
 @deffn {Scheme Procedure} buffer:delete-char (buffer <text-buffer>) n
 
 @end deffn
 
-@c snarfed from emacsy/text.scm:369
+@c snarfed from emacsy/text.scm:377
 @deffn {Scheme Procedure} buffer:delete-region (buffer <text-buffer>) start end
 
 @end deffn
@@ -1399,174 +1425,194 @@ offers @verb{|TAB|} completion and histo
 inherits from the @var{<text-buffer>}.
 
 
-@c snarfed from emacsy/minibuffer.scm:57
+@c snarfed from emacsy/minibuffer.scm:60
 @deftp {Class} <minibuffer>
 
 @end deftp
 
-@c snarfed from emacsy/minibuffer.scm:61
+@c snarfed from emacsy/minibuffer.scm:64
 @defvar minibuffer-local-map
 We define a keymap with all the typical self-insert-commands that
 would be expected in an editable buffer
 @c .\todo{This should probably be defined in the buffer module since it is general.}
 @end defvar
 
-@c snarfed from emacsy/minibuffer.scm:70
+@c snarfed from emacsy/minibuffer.scm:73
 @defvar minibuffer
 
 @end defvar
 
-@c snarfed from emacsy/minibuffer.scm:73
+@c snarfed from emacsy/minibuffer.scm:76
 @defvar emacsy-display-minibuffer?
 
 @end defvar
 
-@c snarfed from emacsy/minibuffer.scm:77
+@c snarfed from emacsy/minibuffer.scm:80
 @defvar ticks-per-second
 
 @end defvar
 
-@c snarfed from emacsy/minibuffer.scm:87
+@c snarfed from emacsy/minibuffer.scm:90
 @defvar minibuffer-history
 
 @end defvar
 
-@c snarfed from emacsy/minibuffer.scm:96
+@c snarfed from emacsy/minibuffer.scm:99
 When we show the minibuffer, we'll show the prompt, the contents (user
 editable), and the minibuffer-message if applicable.
 
-@c snarfed from emacsy/minibuffer.scm:100
+@c snarfed from emacsy/minibuffer.scm:103
 @deffn {Scheme Procedure} buffer:buffer-string (buffer <minibuffer>)
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:103
+@c snarfed from emacsy/minibuffer.scm:106
 @deffn {Scheme Procedure} minibuffer-contents  #:optional (buffer minibuffer)
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:107
+@c snarfed from emacsy/minibuffer.scm:110
 @deffn {Scheme Procedure} delete-minibuffer-contents  #:optional (buffer minibuffer)
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:143
+@c snarfed from emacsy/minibuffer.scm:146
 @deffn {Scheme Procedure} minibuffer-message string . args
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:147
+@c snarfed from emacsy/minibuffer.scm:150
 @subsection read-from-minibuffer
 
-@c snarfed from emacsy/minibuffer.scm:150
+@c snarfed from emacsy/minibuffer.scm:153
 history can be #f, a symbol, or a <cursor-list>.
 
-@c snarfed from emacsy/minibuffer.scm:248
+@c snarfed from emacsy/minibuffer.scm:251
 @deffn {Scheme Procedure} try-completion string collection  #:optional (predicate (const #t))
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:252
+@c snarfed from emacsy/minibuffer.scm:255
 @deffn {Scheme Procedure} all-completions string collection  #:optional (predicate (const #t))
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:256
+@c snarfed from emacsy/minibuffer.scm:259
 @deffn {Scheme Procedure} collection->completer collection  #:optional (predicate (const #t))
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:266
+@c snarfed from emacsy/minibuffer.scm:269
 @deffn {Scheme Procedure} completing-read prompt collection  #:key predicate (const #t) (require-match? #f) (initial-input #f) (history (what-command-am-i?)) (to-string #f)
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:296
+@c snarfed from emacsy/minibuffer.scm:299
 @deffn {Scheme Procedure} apropos-module rgx module
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:300
+@c snarfed from emacsy/minibuffer.scm:303
 @deffn {Scheme Procedure} command-completion-function text cont?
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:318
-We want to be able to look up filenames.
-
 @c snarfed from emacsy/minibuffer.scm:321
+We want to be able to look up file names.
+
+@c snarfed from emacsy/minibuffer.scm:324
+@deffn {Scheme Procedure} expand-file-name file-name
+
+@end deffn
+
+@c snarfed from emacsy/minibuffer.scm:335
 @deffn {Scheme Procedure} files-in-dir dirname
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:377
+@c snarfed from emacsy/minibuffer.scm:382
+@deffn {Scheme Procedure} canonize-file-name name
+
+@end deffn
+
+@c snarfed from emacsy/minibuffer.scm:401
 @deffn {Scheme Procedure} read-file-name prompt  #:key dir default-file-name initial predicate history
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:392
+@c snarfed from emacsy/minibuffer.scm:417
+@defvar default-directory
+
+@end defvar
+
+@c snarfed from emacsy/minibuffer.scm:420
+@defvar file-name-completion-function
+
+@end defvar
+
+@c snarfed from emacsy/minibuffer.scm:424
 @subsection Minibuffer History
 
-@c snarfed from emacsy/minibuffer.scm:395
+@c snarfed from emacsy/minibuffer.scm:427
 @deffn {Scheme Procedure} make-history  #:optional (list (quote )) (index #f)
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:401
+@c snarfed from emacsy/minibuffer.scm:433
 @deffn {Scheme Procedure} history-insert! history value
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:405
+@c snarfed from emacsy/minibuffer.scm:437
 @deffn {Scheme Procedure} history-ref history
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:409
+@c snarfed from emacsy/minibuffer.scm:441
 @deffn {Scheme Procedure} history-set! history value
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:413
+@c snarfed from emacsy/minibuffer.scm:445
 @deffn {Interactive Procedure} exit-minibuffer
 @kindex exit-minibuffer
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:417
+@c snarfed from emacsy/minibuffer.scm:450
 @deffn {Interactive Procedure} minibuffer-complete
 @kindex minibuffer-complete
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:421
+@c snarfed from emacsy/minibuffer.scm:454
 @deffn {Interactive Procedure} next-match
 @kindex next-match
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:425
+@c snarfed from emacsy/minibuffer.scm:458
 @deffn {Interactive Procedure} previous-match
 @kindex previous-match
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:429
+@c snarfed from emacsy/minibuffer.scm:462
 @deffn {Interactive Procedure} minibuffer-complete-word
 @kindex minibuffer-complete-word
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:433
+@c snarfed from emacsy/minibuffer.scm:466
 @deffn {Interactive Procedure} minibuffer-completion-help
 @kindex minibuffer-completion-help
 
 @end deffn
 
-@c snarfed from emacsy/minibuffer.scm:437
+@c snarfed from emacsy/minibuffer.scm:470
 Some commands for manipulating the minibuffer history.
 
-@c snarfed from emacsy/minibuffer.scm:440
+@c snarfed from emacsy/minibuffer.scm:473
 @deffn {Interactive Procedure} previous-history-element  #:optional (n 1)
 @kindex previous-history-element  #:optional (n 1)
 
@@ -1579,124 +1625,111 @@ Now we're going to put in place some cor
 Emacsy an Emacs-like library.
 
 
-@c snarfed from emacsy/core.scm:71
+@c snarfed from emacsy/core.scm:72
 @defvar global-map
 We need a global keymap.
 @end defvar
 
-@c snarfed from emacsy/core.scm:74
+@c snarfed from emacsy/core.scm:75
 @defvar special-event-map
 
 @end defvar
 
-@c snarfed from emacsy/core.scm:77
+@c snarfed from emacsy/core.scm:78
 @defvar emacsy-quit-application?
 
 @end defvar
 
-@c snarfed from emacsy/core.scm:86
+@c snarfed from emacsy/core.scm:87
 @defvar messages
 
 @end defvar
 
-@c snarfed from emacsy/core.scm:95
+@c snarfed from emacsy/core.scm:96
 @defvar emacsy-send-mouse-movement-events?
 Sometimes we may want to track the motion events generated by a mouse.
 We don't do this all the time because it seems unnecessarily taxing.
 @end defvar
 
-@c snarfed from emacsy/core.scm:102
+@c snarfed from emacsy/core.scm:103
 @deffn {Scheme Procedure} current-active-maps
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:107
+@c snarfed from emacsy/core.scm:108
 @deffn {Scheme Procedure} universal-argument-ref
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:111
+@c snarfed from emacsy/core.scm:112
 @deffn {Scheme Procedure} universal-argument-pop!
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:115
+@c snarfed from emacsy/core.scm:116
 @deffn {Scheme Procedure} universal-argument-push! arg
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:119
+@c snarfed from emacsy/core.scm:120
 @deffn {Interactive Procedure} switch-to-buffer  #:optional buffer
 @kindex switch-to-buffer  #:optional buffer
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:171
+@c snarfed from emacsy/core.scm:172
 @deffn {Scheme Procedure} emacsy-echo-area
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:175
+@c snarfed from emacsy/core.scm:176
 @deffn {Scheme Procedure} current-message
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:179
+@c snarfed from emacsy/core.scm:180
 @deffn {Scheme Procedure} emacsy-message . args
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:186
+@c snarfed from emacsy/core.scm:187
 @deffn {Scheme Procedure} clear-echo-area
 When the minibuffer is entered, we want to clear the echo-area.
 Because the echo-area is defined in core, it seems best to deal with
 it in core rather than placing echo-area handling code in minibuffer.
 @end deffn
 
-@c snarfed from emacsy/core.scm:192
+@c snarfed from emacsy/core.scm:193
 @deffn {Scheme Procedure} emacsy-message-or-echo-area
 These are most of the C API calls.
 @end deffn
 
-@c snarfed from emacsy/core.scm:196
-@deffn {Scheme Procedure} emacsy-mode-line
-
-method
-@end deffn
-
-@c snarfed from emacsy/core.scm:201
-@deffn {Scheme Procedure} emacsy-mode-line (buffer <buffer>)
-
-method
-XXX this should be moved into the (emacsy buffer) module.
-@end deffn
-
-@c snarfed from emacsy/core.scm:207
+@c snarfed from emacsy/core.scm:197
 @deffn {Scheme Procedure} emacsy-minibuffer-point
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:211
+@c snarfed from emacsy/core.scm:201
 @deffn {Scheme Procedure} emacsy-run-hook hook . args
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:217
+@c snarfed from emacsy/core.scm:207
 @deffn {Scheme Procedure} emacsy-terminate
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:221
+@c snarfed from emacsy/core.scm:211
 @deffn {Scheme Procedure} emacsy-tick
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:275
+@c snarfed from emacsy/core.scm:265
 @deffn {Scheme Procedure} emacsy-initialize interactive?
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:279
+@c snarfed from emacsy/core.scm:269
 @deffn {Interactive Procedure} eval-expression  #:optional epression
 @kindex eval-expression  #:optional epression
 There is one command that I consider fundamental for an Emacs-like
@@ -1706,20 +1739,20 @@ it may have Emacs-like key bindings, but
 command is [[eval-expression]].  Let's write it.
 @end deffn
 
-@c snarfed from emacsy/core.scm:291
+@c snarfed from emacsy/core.scm:281
 @deffn {Interactive Procedure} execute-extended-command  #:optional (n 1)
 @kindex execute-extended-command  #:optional (n 1)
 The second fundamental command is [[execute-extended-command]] invoked
 with @verb{|M-x|}.
 @end deffn
 
-@c snarfed from emacsy/core.scm:296
+@c snarfed from emacsy/core.scm:286
 @deffn {Interactive Procedure} quit-application
 @kindex quit-application
 
 @end deffn
 
-@c snarfed from emacsy/core.scm:300
+@c snarfed from emacsy/core.scm:290
 @deffn {Interactive Procedure} universal-argument
 @kindex universal-argument
 This [[universal-argument]] command is written using a different style
@@ -1732,19 +1765,25 @@ instance, if the minibuffer were written
 invoke recursive minibuffers.
 @end deffn
 
-@c snarfed from emacsy/core.scm:311
+@c snarfed from emacsy/core.scm:301
 @deffn {Interactive Procedure} load-file  #:optional file-name
 @kindex load-file  #:optional file-name
 We want to be able to load a scheme file.
 @c todo {We should have aread-filename procedure.}
 @end deffn
 
-@c snarfed from emacsy/core.scm:406
+@c snarfed from emacsy/core.scm:396
 The *scratch* buffer.
 
-@c snarfed from emacsy/core.scm:415
+@c snarfed from emacsy/core.scm:404
 Override kill-buffer; make sure the buffer list does not become empty.
 
+@c snarfed from emacsy/core.scm:417
+@deffn {Interactive Procedure} find-file  #:optional file-name
+@kindex find-file  #:optional file-name
+
+@end deffn
+
 @node Advice
 @section Advice
 
@@ -1910,6 +1949,15 @@ has references to other windows, you wil
 
 @end deffn
 
+@c snarfed from emacsy/window.scm:242
+Cycling order for recenter-top-bottom.
+
+@c snarfed from emacsy/window.scm:247
+@deffn {Interactive Procedure} recenter-top-bottom  #:optional arg
+@kindex recenter-top-bottom  #:optional arg
+
+@end deffn
+
 @node Help
 @section Help
 
diff -purN emacsy-0.3.21-4a1a/doc/emacsy.info emacsy-0.3.23-c250/doc/emacsy.info
--- emacsy-0.3.21-4a1a/doc/emacsy.info	1970-01-01 01:00:00.000000000 +0100
+++ emacsy-0.3.23-c250/doc/emacsy.info	1970-01-01 01:00:00.000000000 +0100
@@ -20,7 +20,7 @@ File: emacsy.info,  Node: Top,  Next: Pr
 Emacsy
 ******
 
-This document describes Emacsy version 0.3.21-4a1a, An embeddable
+This document describes Emacsy version 0.3.23-c250, An embeddable
 Emacs-like library using GNU Guile.
 
 * Menu:
@@ -1816,7 +1816,7 @@ model, view, and controller respectively
 
    This is scary, we will override it when we have <text-buffer>.
 
- -- Interactive Procedure: other-buffer #:optional (count 1)
+ -- Scheme Procedure: other-buffer! #:optional (incr 1)
 
  -- Variable: switch-to-buffer
 
@@ -1826,6 +1826,10 @@ model, view, and controller respectively
 
  -- Variable: local-var
 
+ -- Scheme Procedure: emacsy-mode-line
+
+     method
+
 * Menu:
 
 * Mru-stack::
@@ -1973,6 +1977,10 @@ UI buffer may override these, for effici
 
  -- Scheme Procedure: buffer:end-of-line (buffer <buffer>) n
 
+ -- Scheme Procedure: buffer:set-mark (buffer <buffer>) pos
+
+ -- Scheme Procedure: buffer:mark (buffer <buffer>)
+
 5.10.1 Editing for Gap Buffer
 -----------------------------
 
@@ -2064,13 +2072,21 @@ history can be #f, a symbol, or a <curso
 
  -- Scheme Procedure: command-completion-function text cont?
 
-   We want to be able to look up filenames.
+   We want to be able to look up file names.
+
+ -- Scheme Procedure: expand-file-name file-name
 
  -- Scheme Procedure: files-in-dir dirname
 
+ -- Scheme Procedure: canonize-file-name name
+
  -- Scheme Procedure: read-file-name prompt #:key dir default-file-name
           initial predicate history
 
+ -- Variable: default-directory
+
+ -- Variable: file-name-completion-function
+
 5.11.2 Minibuffer History
 -------------------------
 
@@ -2146,14 +2162,6 @@ Emacsy an Emacs-like library.
  -- Scheme Procedure: emacsy-message-or-echo-area
      These are most of the C API calls.
 
- -- Scheme Procedure: emacsy-mode-line
-
-     method
-
- -- Scheme Procedure: emacsy-mode-line (buffer <buffer>)
-
-     method XXX this should be moved into the (emacsy buffer) module.
-
  -- Scheme Procedure: emacsy-minibuffer-point
 
  -- Scheme Procedure: emacsy-run-hook hook . args
@@ -2195,6 +2203,8 @@ Emacsy an Emacs-like library.
    Override kill-buffer; make sure the buffer list does not become
 empty.
 
+ -- Interactive Procedure: find-file #:optional file-name
+
 
 File: emacsy.info,  Node: Advice,  Next: Window,  Prev: Core,  Up: Api
 
@@ -2286,6 +2296,10 @@ you can, but you aren’t required to.
 
  -- Interactive Procedure: other-window #:optional (count 1)
 
+   Cycling order for recenter-top-bottom.
+
+ -- Interactive Procedure: recenter-top-bottom #:optional arg
+
 
 File: emacsy.info,  Node: Help,  Next: Self-doc,  Prev: Window,  Up: Api
 
@@ -3044,27 +3058,30 @@ Programming Index
 * buffer-stack:                          Buffer.              (line  27)
 * buffer-string:                         Text.                (line   8)
 * buffer:beginning-of-line:              Text.                (line 102)
-* buffer:buffer-string:                  Text.                (line 112)
+* buffer:buffer-string:                  Text.                (line 116)
 * buffer:buffer-string <1>:              Minibuffer.          (line  27)
-* buffer:char-after:                     Text.                (line 128)
-* buffer:char-before:                    Text.                (line 126)
+* buffer:char-after:                     Text.                (line 132)
+* buffer:char-before:                    Text.                (line 130)
 * buffer:current-column:                 Text.                (line 100)
-* buffer:delete-char:                    Text.                (line 134)
-* buffer:delete-region:                  Text.                (line 136)
+* buffer:delete-char:                    Text.                (line 138)
+* buffer:delete-region:                  Text.                (line 140)
 * buffer:end-of-line:                    Text.                (line 104)
-* buffer:goto-char:                      Text.                (line 114)
-* buffer:insert-char:                    Text.                (line 132)
-* buffer:insert-string:                  Text.                (line 130)
+* buffer:goto-char:                      Text.                (line 118)
+* buffer:insert-char:                    Text.                (line 136)
+* buffer:insert-string:                  Text.                (line 134)
 * buffer:line-length:                    Text.                (line  98)
-* buffer:mark:                           Text.                (line 124)
-* buffer:point:                          Text.                (line 116)
-* buffer:point-max:                      Text.                (line 120)
-* buffer:point-min:                      Text.                (line 118)
-* buffer:set-mark:                       Text.                (line 122)
+* buffer:mark:                           Text.                (line 108)
+* buffer:mark <1>:                       Text.                (line 128)
+* buffer:point:                          Text.                (line 120)
+* buffer:point-max:                      Text.                (line 124)
+* buffer:point-min:                      Text.                (line 122)
+* buffer:set-mark:                       Text.                (line 106)
+* buffer:set-mark <1>:                   Text.                (line 126)
 * call-blockable:                        Block.               (line  16)
 * call-interactively:                    Command.             (line  80)
 * called-interactively?:                 Command.             (line  82)
 * canonize-event!:                       Event.               (line  53)
+* canonize-file-name:                    Minibuffer.          (line  64)
 * change-counter:                        The Simplest Application Ever.
                                                               (line 118)
 * char-after:                            Text.                (line  30)
@@ -3089,6 +3106,7 @@ Programming Index
 * current-window:                        Window.              (line  22)
 * decr-counter:                          The Simplest Application Ever.
                                                               (line 106)
+* default-directory:                     Minibuffer.          (line  69)
 * default-klecl-maps:                    KLECL.               (line  65)
 * define-key:                            Keymap.              (line  62)
 * defining-kbd-macro?:                   Kbd-Macro.           (line  12)
@@ -3114,21 +3132,20 @@ Programming Index
 * emacsy-echo-area:                      Core.                (line  33)
 * emacsy-event:                          KLECL.               (line  36)
 * emacsy-event-unread:                   KLECL.               (line  50)
-* emacsy-initialize:                     Core.                (line  64)
+* emacsy-initialize:                     Core.                (line  56)
 * emacsy-interactive?:                   KLECL.               (line  17)
 * emacsy-key-event:                      KLECL.               (line  38)
 * emacsy-message:                        Core.                (line  37)
 * emacsy-message-or-echo-area:           Core.                (line  45)
-* emacsy-minibuffer-point:               Core.                (line  56)
-* emacsy-mode-line:                      Core.                (line  48)
-* emacsy-mode-line <1>:                  Core.                (line  52)
+* emacsy-minibuffer-point:               Core.                (line  48)
+* emacsy-mode-line:                      Buffer.              (line  81)
 * emacsy-mouse-event:                    KLECL.               (line  42)
 * emacsy-quit-application?:              Core.                (line  14)
 * emacsy-ran-undefined-command?:         KLECL.               (line  31)
-* emacsy-run-hook:                       Core.                (line  58)
+* emacsy-run-hook:                       Core.                (line  50)
 * emacsy-send-mouse-movement-events?:    Core.                (line  18)
-* emacsy-terminate:                      Core.                (line  60)
-* emacsy-tick:                           Core.                (line  62)
+* emacsy-terminate:                      Core.                (line  52)
+* emacsy-tick:                           Core.                (line  54)
 * emacsy_initialize:                     Embedder's API.      (line   9)
 * emacsy_initialize <1>:                 C Api.               (line   9)
 * emacsy_key_event:                      Embedder's API.      (line  12)
@@ -3143,17 +3160,20 @@ Programming Index
 * emacsy_tick <1>:                       C Api.               (line  20)
 * end-of-buffer:                         Text.                (line  18)
 * end-of-line:                           Text.                (line  40)
-* eval-expression:                       Core.                (line  66)
+* eval-expression:                       Core.                (line  58)
 * event->kbd:                            Event.               (line  55)
 * event->kbd <1>:                        Event.               (line  58)
 * event-queue:                           KLECL.               (line  13)
 * exchange-point-and-mark:               Text.                (line  28)
-* execute-extended-command:              Core.                (line  73)
+* execute-extended-command:              Core.                (line  65)
 * execute-temporal-kbd-macro:            Kbd-Macro.           (line  34)
 * executing-kbd-macro?:                  Kbd-Macro.           (line  16)
 * executing-temporal-kbd-macro-hook:     Kbd-Macro.           (line  20)
-* exit-minibuffer:                       Minibuffer.          (line  76)
-* files-in-dir:                          Minibuffer.          (line  60)
+* exit-minibuffer:                       Minibuffer.          (line  84)
+* expand-file-name:                      Minibuffer.          (line  60)
+* file-name-completion-function:         Minibuffer.          (line  71)
+* files-in-dir:                          Minibuffer.          (line  62)
+* find-file:                             Core.                (line  89)
 * forward-char:                          Text.                (line  34)
 * forward-delete-char:                   Text.                (line  71)
 * forward-line:                          Text.                (line  56)
@@ -3169,9 +3189,9 @@ Programming Index
 * glutMainLoop:                          The Simplest Application Ever.
                                                               (line  32)
 * goto-char:                             Text.                (line  32)
-* history-insert!:                       Minibuffer.          (line  70)
-* history-ref:                           Minibuffer.          (line  72)
-* history-set!:                          Minibuffer.          (line  74)
+* history-insert!:                       Minibuffer.          (line  78)
+* history-ref:                           Minibuffer.          (line  80)
+* history-set!:                          Minibuffer.          (line  82)
 * in-what-command:                       Command.             (line  44)
 * incr-counter:                          The Simplest Application Ever.
                                                               (line 103)
@@ -3202,7 +3222,7 @@ Programming Index
 * last-command:                          Command.             (line  48)
 * last-command-event:                    KLECL.               (line  25)
 * last-kbd-macro:                        Kbd-Macro.           (line  14)
-* load-file:                             Core.                (line  89)
+* load-file:                             Core.                (line  81)
 * load_module_error:                     C Api.               (line  46)
 * load_module_try:                       C Api.               (line  39)
 * local-var:                             Buffer.              (line  79)
@@ -3211,7 +3231,7 @@ Programming Index
 * lookup-key:                            Keymap.              (line  56)
 * lookup-key-entry?:                     Keymap.              (line  74)
 * lookup-key?:                           Keymap.              (line  59)
-* make-history:                          Minibuffer.          (line  68)
+* make-history:                          Minibuffer.          (line  76)
 * make-keymap:                           Keymap.              (line  67)
 * mark:                                  Text.                (line  20)
 * mark-whole-buffer:                     Text.                (line  26)
@@ -3219,9 +3239,9 @@ Programming Index
 * message:                               KLECL.               (line  67)
 * messages:                              Core.                (line  16)
 * minibuffer:                            Minibuffer.          (line  16)
-* minibuffer-complete:                   Minibuffer.          (line  78)
-* minibuffer-complete-word:              Minibuffer.          (line  84)
-* minibuffer-completion-help:            Minibuffer.          (line  86)
+* minibuffer-complete:                   Minibuffer.          (line  86)
+* minibuffer-complete-word:              Minibuffer.          (line  92)
+* minibuffer-completion-help:            Minibuffer.          (line  94)
 * minibuffer-contents:                   Minibuffer.          (line  29)
 * minibuffer-history:                    Minibuffer.          (line  22)
 * minibuffer-local-map:                  Minibuffer.          (line  12)
@@ -3248,8 +3268,8 @@ Programming Index
 * mru-remove!:                           Mru-stack.           (line  13)
 * mru-set!:                              Mru-stack.           (line  17)
 * next-buffer:                           Buffer.              (line  63)
-* next-match:                            Minibuffer.          (line  80)
-* other-buffer:                          Buffer.              (line  71)
+* next-match:                            Minibuffer.          (line  88)
+* other-buffer!:                         Buffer.              (line  71)
 * other-window:                          Window.              (line  63)
 * point:                                 Text.                (line  10)
 * point-max:                             Text.                (line  16)
@@ -3257,19 +3277,20 @@ Programming Index
 * post-command-hook:                     KLECL.               (line  29)
 * pre-command-hook:                      KLECL.               (line  27)
 * prev-buffer:                           Buffer.              (line  65)
-* previous-history-element:              Minibuffer.          (line  90)
-* previous-match:                        Minibuffer.          (line  82)
+* previous-history-element:              Minibuffer.          (line  98)
+* previous-match:                        Minibuffer.          (line  90)
 * primitive-command-loop:                KLECL.               (line  80)
 * primitives_init:                       The Simplest Application Ever.
                                                               (line  91)
-* quit-application:                      Core.                (line  77)
+* quit-application:                      Core.                (line  69)
 * quit-key?:                             KLECL.               (line  61)
 * re-search-backward:                    Text.                (line  49)
 * re-search-forward:                     Text.                (line  46)
 * read-event:                            KLECL.               (line  55)
 * read-event-hook:                       KLECL.               (line  15)
-* read-file-name:                        Minibuffer.          (line  62)
+* read-file-name:                        Minibuffer.          (line  66)
 * read-key:                              KLECL.               (line  57)
+* recenter-top-bottom:                   Window.              (line  67)
 * register-interactive:                  Command.             (line  66)
 * register-kbd-converter:                Event.               (line  49)
 * remove-buffer!:                        Buffer.              (line  61)
@@ -3306,7 +3327,7 @@ Programming Index
 * this-interactive-command:              Command.             (line  54)
 * ticks-per-second:                      Minibuffer.          (line  20)
 * try-completion:                        Minibuffer.          (line  41)
-* universal-argument:                    Core.                (line  79)
+* universal-argument:                    Core.                (line  71)
 * universal-argument-pop!:               Core.                (line  27)
 * universal-argument-push!:              Core.                (line  29)
 * universal-argument-ref:                Core.                (line  25)
@@ -3357,12 +3378,13 @@ Keyboard command Index
 * describe-variable #:optional symbol:   Help.                (line   7)
 * end-of-buffer #:optional arg:          Text.                (line  19)
 * end-of-line #:optional (n 1):          Text.                (line  41)
-* eval-expression #:optional epression:  Core.                (line  67)
+* eval-expression #:optional epression:  Core.                (line  59)
 * exchange-point-and-mark:               Text.                (line  29)
-* execute-extended-command #:optional (n 1): Core.            (line  74)
+* execute-extended-command #:optional (n 1): Core.            (line  66)
 * execute-temporal-kbd-macro #:optional (kbd-macro last-kbd-macro): Kbd-Macro.
                                                               (line  36)
-* exit-minibuffer:                       Minibuffer.          (line  77)
+* exit-minibuffer:                       Minibuffer.          (line  85)
+* find-file #:optional file-name:        Core.                (line  90)
 * forward-char #:optional (n 1):         Text.                (line  35)
 * forward-delete-char #:optional (n 1):  Text.                (line  72)
 * forward-line #:optional (n 1):         Text.                (line  57)
@@ -3378,25 +3400,25 @@ Keyboard command Index
 * kmacro-end-and-call-macro:             Kbd-Macro.           (line  31)
 * kmacro-end-macro:                      Kbd-Macro.           (line  29)
 * kmacro-start-macro:                    Kbd-Macro.           (line  27)
-* load-file #:optional file-name:        Core.                (line  90)
+* load-file #:optional file-name:        Core.                (line  82)
 * mark-whole-buffer:                     Text.                (line  27)
-* minibuffer-complete:                   Minibuffer.          (line  79)
-* minibuffer-complete-word:              Minibuffer.          (line  85)
-* minibuffer-completion-help:            Minibuffer.          (line  87)
+* minibuffer-complete:                   Minibuffer.          (line  87)
+* minibuffer-complete-word:              Minibuffer.          (line  93)
+* minibuffer-completion-help:            Minibuffer.          (line  95)
 * move-beginning-of-line #:optional (n 1): Text.              (line  43)
 * move-end-of-line #:optional (n 1):     Text.                (line  45)
 * next-buffer #:optional (incr 1):       Buffer.              (line  64)
-* next-match:                            Minibuffer.          (line  81)
-* other-buffer #:optional (count 1):     Buffer.              (line  72)
+* next-match:                            Minibuffer.          (line  89)
 * other-window #:optional (count 1):     Window.              (line  64)
 * prev-buffer #:optional (incr 1):       Buffer.              (line  66)
-* previous-history-element #:optional (n 1): Minibuffer.      (line  91)
-* previous-match:                        Minibuffer.          (line  83)
-* quit-application:                      Core.                (line  78)
+* previous-history-element #:optional (n 1): Minibuffer.      (line  99)
+* previous-match:                        Minibuffer.          (line  91)
+* quit-application:                      Core.                (line  70)
 * re-search-backward regex #:optional (bound #f) (no-error? #f) (repeat 1): Text.
                                                               (line  51)
 * re-search-forward regex #:optional (bound #f) (no-error? #f) (repeat 1): Text.
                                                               (line  48)
+* recenter-top-bottom #:optional arg:    Window.              (line  68)
 * self-insert-command #:optional (n 1):  Text.                (line  65)
 * set-mark-command #:optional arg:       Text.                (line  25)
 * split-window #:optional (window (selected-window)) (size 0.5) (side (quote below)): Window.
@@ -3404,7 +3426,7 @@ Keyboard command Index
 * split-window-below #:optional (size 0.5): Window.           (line  57)
 * split-window-right #:optional (size 0.5): Window.           (line  59)
 * switch-to-buffer #:optional buffer:    Core.                (line  32)
-* universal-argument:                    Core.                (line  80)
+* universal-argument:                    Core.                (line  72)
 
 
 File: emacsy.info,  Node: Concept Index,  Prev: Keyboard command Index,  Up: Top
@@ -3463,26 +3485,26 @@ Node: Block49425
 Node: KLECL51206
 Node: Kbd-Macro54538
 Node: Buffer55590
-Node: Mru-stack57793
-Node: Text58733
-Node: Minibuffer62656
-Node: Core65247
-Node: Advice68355
-Node: Window69249
-Node: Help71234
-Node: Self-doc71458
-Node: Contributing72579
-Node: Building from Git72979
-Node: Running Emacsy From the Source Tree73830
-Node: The Perfect Setup74283
-Node: Coding Style75065
-Node: Submitting Patches76159
-Node: Acknowledgments77835
-Node: Resources78027
-Node: GNU Free Documentation License78482
-Node: Programming Index103841
-Node: Keyboard command Index129044
-Node: Concept Index134240
+Node: Mru-stack57841
+Node: Text58781
+Node: Minibuffer62818
+Node: Core65585
+Node: Advice68570
+Node: Window69464
+Node: Help71555
+Node: Self-doc71779
+Node: Contributing72900
+Node: Building from Git73300
+Node: Running Emacsy From the Source Tree74151
+Node: The Perfect Setup74604
+Node: Coding Style75386
+Node: Submitting Patches76480
+Node: Acknowledgments78156
+Node: Resources78348
+Node: GNU Free Documentation License78803
+Node: Programming Index104162
+Node: Keyboard command Index129876
+Node: Concept Index135145
 
 End Tag Table
 
Binary files emacsy-0.3.21-4a1a/doc/emacsy.pdf and emacsy-0.3.23-c250/doc/emacsy.pdf differ
diff -purN emacsy-0.3.21-4a1a/doc/hello-emacsy.texi emacsy-0.3.23-c250/doc/hello-emacsy.texi
--- emacsy-0.3.21-4a1a/doc/hello-emacsy.texi	1970-01-01 01:00:00.000000000 +0100
+++ emacsy-0.3.23-c250/doc/hello-emacsy.texi	1970-01-01 01:00:00.000000000 +0100
@@ -1,5 +1,16 @@
 @c Generated by doc-snarf, do not edit.
 
+@c Copyright (C) 2012, 2013 Shane Celis <shane.celis@gmail.com>
+@c Copyright (C) 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+
+@c Permission is granted to copy, distribute and/or modify this document
+@c under the terms of the GNU Free Documentation License, Version 1.3 or
+@c any later version published by the Free Software Foundation; with no
+@c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
+@c copy of the license is included in the section entitled ``GNU Free
+@c Documentation License''.
+
+
 @c snarfed from example/hello-emacsy.c:23
 
 Let's exercise these functions in a minimal FreeGLUT program we'll call
@@ -147,38 +158,38 @@ them with the Scheme runtime.
 Locate the @file{hello-emacsy.scm} Guile initialization and load it.
 @end deftypefn
 
-@c snarfed from example/hello-emacsy.scm:1
+@c snarfed from example/hello-emacsy.scm:20
 We generate the file @file{example/hello-emacsy.c.x} by running the
 command: @code{guile-snarf example/hello-emacsy.c}.  Emacsy can now
 access and alter the application's internal state.
 
-@c snarfed from example/hello-emacsy.scm:11
+@c snarfed from example/hello-emacsy.scm:30
 @deffn {Interactive Procedure} incr-counter  #:optional (n (universal-argument-pop!))
 @kindex incr-counter  #:optional (n (universal-argument-pop!))
 
 @end deffn
 
-@c snarfed from example/hello-emacsy.scm:15
+@c snarfed from example/hello-emacsy.scm:34
 @deffn {Interactive Procedure} decr-counter  #:optional (n (universal-argument-pop!))
 @kindex decr-counter  #:optional (n (universal-argument-pop!))
 
 @end deffn
 
-@c snarfed from example/hello-emacsy.scm:19
+@c snarfed from example/hello-emacsy.scm:38
 @deffn {Scheme Procedure} global-map
 Bind @var{inc-counter} to @code{=}.
 @end deffn
 
-@c snarfed from example/hello-emacsy.scm:21
+@c snarfed from example/hello-emacsy.scm:40
 @deffn {Scheme Procedure} global-map
 Bind @var{inc-counter} to @code{-}.
 @end deffn
 
-@c snarfed from example/hello-emacsy.scm:30
+@c snarfed from example/hello-emacsy.scm:49
 Let's implement another command that will ask the user for a number to
 set the counter to.
 
-@c snarfed from example/hello-emacsy.scm:34
+@c snarfed from example/hello-emacsy.scm:53
 @deffn {Interactive Procedure} change-counter
 @kindex change-counter
 Now we can hit @verb{|M-x change-counter|} and we'll be prompted for
@@ -186,12 +197,12 @@ the new value we want.  There we have it
 application ever more @emph{Emacs-y}.
 @end deffn
 
-@c snarfed from example/hello-emacsy.scm:42
+@c snarfed from example/hello-emacsy.scm:61
 We can add commands easily by changing and reloading the file.  But
 we can do better.  Let's start a REPL we can connect to.
 @file{example/hello-emacsy.scm}.
 
-@c snarfed from example/hello-emacsy.scm:47
+@c snarfed from example/hello-emacsy.scm:66
 @example
 (use-modules (system repl server))
 (spawn-server)
diff -purN emacsy-0.3.21-4a1a/doc/images/README emacsy-0.3.23-c250/doc/images/README
--- emacsy-0.3.21-4a1a/doc/images/README	1970-01-01 01:00:00.000000000 +0100
+++ emacsy-0.3.23-c250/doc/images/README	1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +1,31 @@
                                                               -*- org -*-
 #+TITLE: Emacsy
 
-Images and artwork
+These images
+
+child-window-diagram.graffle
+child-window-diagram.pdf
+emacsy-logo.pdf
+emacsy-logo.png
+minimal-emacsy-example.png
+minimal-emacsy-figure.pdf
+screenshot-small.png
+screenshot.png
+the-garden-1.png
+the-garden-2.png
+the-garden-3.png
+the-garden-4.png
+the-garden-5.png
+the-garden-6.png
+the-garden-7.png
+the-garden-8.png
+the-garden.pdf
+the-garden.png
+window-diagram.graffle
+window-diagram.pdf
+
+are
+
 Copyright (C) 2012, 2013 Shane Celis <shane.celis@gmail.com>
 CC-BY-SA 3.0 -- Creative Commons Attribution-ShareAlike 3.0
 
diff -purN emacsy-0.3.21-4a1a/doc/stamp-vti emacsy-0.3.23-c250/doc/stamp-vti
--- emacsy-0.3.21-4a1a/doc/stamp-vti	1970-01-01 01:00:00.000000000 +0100
+++ emacsy-0.3.23-c250/doc/stamp-vti	1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +1,4 @@
 @set UPDATED 29 June 2019
 @set UPDATED-MONTH June 2019
-@set EDITION 0.3.21-4a1a
-@set VERSION 0.3.21-4a1a
+@set EDITION 0.3.23-c250
+@set VERSION 0.3.23-c250
diff -purN emacsy-0.3.21-4a1a/doc/version.texi emacsy-0.3.23-c250/doc/version.texi
--- emacsy-0.3.21-4a1a/doc/version.texi	1970-01-01 01:00:00.000000000 +0100
+++ emacsy-0.3.23-c250/doc/version.texi	1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +1,4 @@
 @set UPDATED 29 June 2019
 @set UPDATED-MONTH June 2019
-@set EDITION 0.3.21-4a1a
-@set VERSION 0.3.21-4a1a
+@set EDITION 0.3.23-c250
+@set VERSION 0.3.23-c250
diff -purN emacsy-0.3.21-4a1a/emacsy/core.scm emacsy-0.3.23-c250/emacsy/core.scm
--- emacsy-0.3.21-4a1a/emacsy/core.scm	1970-01-01 01:00:00.000000000 +0100
+++ emacsy-0.3.23-c250/emacsy/core.scm	1970-01-01 01:00:00.000000000 +0100
@@ -521,6 +521,8 @@
     buffer))
 
 ;;.
+(define-interactive (find-file #:optional file-name))
+
 (define-interactive (find-file #:optional (file-name (read-file-name "Find file: ")))
   (catch #t
     (lambda _
diff -purN emacsy-0.3.21-4a1a/Makefile.am emacsy-0.3.23-c250/Makefile.am
--- emacsy-0.3.21-4a1a/Makefile.am	1970-01-01 01:00:00.000000000 +0100
+++ emacsy-0.3.23-c250/Makefile.am	1970-01-01 01:00:00.000000000 +0100
@@ -204,12 +204,28 @@ dist_doc_DATA = doc/emacsy.pdf
 endif
 
 DOC_SNARF = $(top_builddir)/pre-inst-env $(GUILD) doc-snarf
+define DOC_SNARF_HEADER
+@c Generated by doc-snarf, do not edit.
+
+@c Copyright (C) 2012, 2013 Shane Celis <shane.celis@gmail.com>
+@c Copyright (C) 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+
+@c Permission is granted to copy, distribute and/or modify this document
+@c under the terms of the GNU Free Documentation License, Version 1.3 or
+@c any later version published by the Free Software Foundation; with no
+@c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
+@c copy of the license is included in the section entitled ``GNU Free
+@c Documentation License''.
+
+endef
+export DOC_SNARF_HEADER
+
 doc-snarf:
 	@$(MAKE) --quiet doc-snarf-hello-emacsy > doc/hello-emacsy.texi
 	@$(MAKE) --quiet doc-snarf-api > doc/api.texi
 
 doc-snarf-hello-emacsy:
-	@echo @c Generated by doc-snarf, do not edit.
+	@echo "$$DOC_SNARF_HEADER"
 	@for i in				\
                 example/hello-emacsy.c		\
 	; do					\
@@ -228,7 +244,7 @@ doc-snarf-hello-emacsy:
 	done
 
 doc-snarf-api:
-	@echo @c Generated by doc-snarf, do not edit.
+	@echo "$$DOC_SNARF_HEADER"
 	@for i in				\
                 emacsy/emacsy.c			\
 	; do					\
diff -purN emacsy-0.3.21-4a1a/Makefile.in emacsy-0.3.23-c250/Makefile.in
--- emacsy-0.3.21-4a1a/Makefile.in	1970-01-01 01:00:00.000000000 +0100
+++ emacsy-0.3.23-c250/Makefile.in	1970-01-01 01:00:00.000000000 +0100
@@ -2069,12 +2069,28 @@ uninstall-am: uninstall-binPROGRAMS unin
 
 %.c.x: %.c
 	$(AM_V_GEN) $(guile_snarf) -o "$@" $(GUILE_CFLAGS) "$<"
+define DOC_SNARF_HEADER
+@c Generated by doc-snarf, do not edit.
+
+@c Copyright (C) 2012, 2013 Shane Celis <shane.celis@gmail.com>
+@c Copyright (C) 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+
+@c Permission is granted to copy, distribute and/or modify this document
+@c under the terms of the GNU Free Documentation License, Version 1.3 or
+@c any later version published by the Free Software Foundation; with no
+@c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
+@c copy of the license is included in the section entitled ``GNU Free
+@c Documentation License''.
+
+endef
+export DOC_SNARF_HEADER
+
 doc-snarf:
 	@$(MAKE) --quiet doc-snarf-hello-emacsy > doc/hello-emacsy.texi
 	@$(MAKE) --quiet doc-snarf-api > doc/api.texi
 
 doc-snarf-hello-emacsy:
-	@echo @c Generated by doc-snarf, do not edit.
+	@echo "$$DOC_SNARF_HEADER"
 	@for i in				\
                 example/hello-emacsy.c		\
 	; do					\
@@ -2093,7 +2109,7 @@ doc-snarf-hello-emacsy:
 	done
 
 doc-snarf-api:
-	@echo @c Generated by doc-snarf, do not edit.
+	@echo "$$DOC_SNARF_HEADER"
 	@for i in				\
                 emacsy/emacsy.c			\
 	; do					\
diff -purN emacsy-0.3.21-4a1a/todo.org emacsy-0.3.23-c250/todo.org
--- emacsy-0.3.21-4a1a/todo.org	1970-01-01 01:00:00.000000000 +0100
+++ emacsy-0.3.23-c250/todo.org	1970-01-01 01:00:00.000000000 +0100
@@ -33,15 +33,15 @@
    name))) (lambda () ((variable-ref var)))))
 
   - [ ] Come up with a way to export commands so that one can indicate
-    what modules one wants to use.  
+    what modules one wants to use.
 
-    1. Let the user do it by creating their own modules.  
+    1. Let the user do it by creating their own modules.
 
        Nice idea because it requires no new infrastructure.  Might
        encourage the proliferation of new modules.
 
-    2. Let the user export certain symbols as commands.  Pretty much 
-       like a new kind of public interface.  
+    2. Let the user export certain symbols as commands.  Pretty much
+       like a new kind of public interface.
 
        Requires some infrastructure.  Possibly want to use this
        generally to collect up all kinds of other things.  So far I've
@@ -66,16 +66,16 @@
    (resolve-interface '(that-module) #:select (@ (that-module) commands))
 
    (resolve-interface '(that-module %command)
-       
+
    (use-modules ((that-module) #:select (@commands))
-       
+
 
   - [ ] rename read-file-name to EITHER read-filename OR
     read-filename-from-minibuffer
   - [ ] have backtraces go to logs
   - [X] Rethink the commands. Can't we keep them as simple lambdas?
-    Do we have to wrap them?  
-    
+    Do we have to wrap them?
+
     Also, when the user provides the symbol of a function, let's
     create a trampoline to that function.  Otherwise, if they provide
     a lambda, run that lambda.
@@ -94,7 +94,7 @@
   - [ ] Should (emacsy window) always be loaded but default to not
     supporting multiple windows?
 
-  - [ ] 
+  - [ ]
 
   - [ ] get rid of noise in emacsy (noise?) log noise?
   - [ ] Change define-cmd to define-command
@@ -108,9 +108,9 @@
     the split between builtin commands in shell and regular commands.
     God, this is going to be COOL!
 
-    
+
   - [X] make debugging work in emacsy
-    Getting better with debug-on-error?  
+    Getting better with debug-on-error?
   - [ ] fix kill of all buffers bug
   - [X] add universal argument C-u
   - [ ] clear the echo area once other messages start to come.
@@ -137,7 +137,7 @@
   - Note: the noweb filter docs2comments does not work with noweb's line pragmas
   - how to do [[https://github.com/davexunit/gnumaku/blob/rebirth/gnumaku/coroutine.scm][coroutines]] in guile
   - [ ] How do syscalls work when Emacsy is in batch mode?
-    
+
     Populate event buffer from file handle?  Are syscalls even required
     if we're not in interactive mode?
   - [X] In order to terminate potential rogue coroutines, I could set
@@ -184,7 +184,7 @@ ticks."
   (cosignal 'interrupt foreground-cid))
 
 (define (cosignal sig cid)
-  ((cid->resume cid) 'signal   
+  ((cid->resume cid) 'signal
 (case sig
     ((kill)
      (lambda () (coexit -1)))
@@ -211,3 +211,9 @@ cid <-> coroutine
 
 Does suspend happen inside or outside the coroutine?  Signals happened
 from outside the process in unix.
+* legalese
+Copyright © 2012, 2013 Shane Celis <shane.celis@gmail.com>
+
+  Copying and distribution of this file, with or without modification,
+  are permitted in any medium without royalty provided the copyright
+  notice and this notice are preserved.
