public inbox for guile-emacs@sourceware.org
 help / color / mirror / Atom feed
* guile-emacs-0.4 released
@ 2000-05-24  0:46 Keisuke Nishida
  2000-05-24  1:53 ` Mikael Djurfeldt
  0 siblings, 1 reply; 5+ messages in thread
From: Keisuke Nishida @ 2000-05-24  0:46 UTC (permalink / raw)
  To: guile-emacs; +Cc: guile

Hello,

I'm releasing Guile Emacs 0.4:

  http://download.sourceforge.net/gemacs/guile-emacs-0.4.tar.gz (2.5MB)

This version of Guile Emacs includes the initial support of
scheme-apropos and scheme-describe commands.  A preliminary manual is
also included.  Now Guile Emacs package contains a whole C source code
to build instead of providing a patch.  You have to install GNU Emacs
20.6 before installing Guille Emacs.  You also need GOOPS as well as
Guile core.

Everything is not so cool, though.  I'll work on this further,
especially on Guile's docstring supports.

Thanks,
Keisuke Nishida

\f
* Changes in Guile Emacs 0.4

** An preliminary manual has been written.

See doc/guile-emacs.info.

** Installation changes

*** The source package now contains a complete C source files.

We no longer distribute a patch to GNU Emacs.  Instead, we retrieved
C code from GNU Emacs 20.6 and include them in the distribution so that
the user can build Guile Emacs easily.  See README for new contents.

We don't include Emacs Lisp files in this package, so the user still
have to install GNU Emacs before installing Guile Emacs.  See INSTALL.

*** The default command name of Guile Emacs is now guile-emacs.

The following files and directories are installed by default:

  /usr/local/bin/guile-emacs
  /usr/local/share/guile-emacs/lisp/*
  /usr/local/share/guile-emacs/scheme/*
  /usr/local/share/guile-emacs/site-scheme/

This allows the user to use both emacs and guile-emacs at the same time.

*** Guile Emacs sets up %load-path and other stuff automatically.

You no longer need to write ~/.emacs.scm by yourself.
You can still write it if you want.

*** GOOPS is now required in addition to the Guile core.

Guile Emacs now treats Emacs objects in terms of object oriented
programming by using GOOPS.  See "Emacs programming changes" below.

** User interface changes

*** (emacs-user) is the default module for ~/.emacs.scm and Scheme evaluation.

Emacs selects (emacs-user) as the current module before loading ~/.emacs.scm.

When you evaluate a Scheme expression, Emacs tries to choose the
current module by looking for a (define-module ...) form in the
current buffer.  If there isn't any, Emacs chooses (emacs-user).

*** Guile Emacs reads a string from minibuffer for the default input port.

If you type (read), for example, a prompt "Scheme input: " is displayed
in the minibuffer, and you can give an input string.  The original input
port is saved as `terminal-input-port'.

*** Guile Emacs displays a buffer for the default output port.

If you type (display "Hello, world!"), for example, a buffer " *Scheme
Output*" is displayed and the output goes there.  The buffer name can be
changed by the customizable variable `scheme-output-buffer'.  If you set
this to nil, the output will go to the *Messages* buffer.  The original
output port is saved as `terminal-output-port'.

*** Guile Emacs displays a buffer in case of an error.

If an error occurs in Scheme programs, a buffer " *Scheme Error*" is
displayed along with the error message and a backtrace.  The buffer
name can be changed by the customizable variable `scheme-error-buffer'.
If you set this to nil, the buffer will not be displayed.

*** Command line option --debug-init turns on Guile's debug features.

You can always turn on the debug features by putting the following lines
in your ~/.guile or ~/.emacs.scm:

  (use-modules (ice-9 debug))

** Guile Scheme mode changes

*** New commands `scheme-eval-buffer' and `scheme-load-file'.

*** New commands `scheme-apropos' and `scheme-describe'.

Scheme version of apropos and describe commands.  See the manual for details.

*** New commands `scheme-switch-to-lisp-mode' and `lisp-switch-to-scheme-mode'.

If you type `C-c C-t' in Scheme mode, you can switch to Lisp mode,
and vice versa.

*** New variable `guile-scheme-font-lock-keywords'.

This is specialized for Guile Scheme mode.

** Guile C mode changes

*** New file lisp/guile-c.el.

This file includes some commands that help programmers write Guile C code.
More stuff will come later on.

** Emacs programming changes

*** Guile Emacs now treats Emacs objects as GOOPS objects.

The following classes are defined:

  <emacs-object>
    Abstract class to represent Emacs objects.  All Emacs objects (but
    some exceptions) are instances of subclasses of this class.

  <emacs-cons>
  <emacs-symbol>
  <emacs-string>
  <emacs-marker>
  <emacs-overlay>
  <emacs-vector>
  <emacs-buffer>
  <emacs-window>
  <emacs-frame>
  <emacs-process>
  <emacs-subr>
  <emacs-compiled>
  <emacs-char-table>
  <emacs-bool-vector>
  <emacs-window-configuration>
    Subclasses for each type.

If you want to convert an instance of these classes into an equivalent
Scheme object (if any), you can use a procedure `%lisp->scheme'.

An instance of <emacs-cons> is displayed like this:

  $(foo . bar)

An instance of <emacs-string> is displayed like this:

  $"Hello, world!"

An instance of <emacs-symbol> is displayed like this:

  $user-full-name

Other objects are displayed like this:

  #<emacs-hoge xxx>

*** New procedures `%lisp-eval', `%lisp-apply', and `%lisp-funcall'.

These procedures evaluate the argument(s) by the Lisp evaluator and
return an emacs-object (i.e., an instance of subclasses of <emacs-object>).
The old procedures `lisp-eval' and `lisp-apply' have been removed.

*** Lisp functions `scheme-apply' and `scmref-to-lisp' are removed.

scheme-eval does all job that we want.

*** Lisp variable is now an instance of <lisp-variable>.

If you import a lisp variable, it returns a GOOPS object:

  (import-lisp-variable user-full-name)

  user-full-name => #<lisp-variable user-full-name>

In order to get an emacs-object, use `lisp-value' or the special syntax
mentioned below.

*** New syntax (emacs dollar).

Putting a dollar mark ($) before the variable name, you can get/set an
emacs-object of a lisp variable:

  (use-modules (emacs dollar))

  (set! $user-full-name "hello")
  $user-full-name => $"hello"

*** Emacs special forms like `save-excursion' are imported as procedures.

This means you must either wrap the body forms in a lambda or use the
new `begin-...' macros in module `(emacs macro)'.  For details, see
the Commentary section of that module.

*** Some Emacs functions are imported as procedures with setters.

You need to make the following changes in your Scheme programs:

(set-buffer-modified?! FLAG)    -->  (set! (buffer-modified?) FLAG)
(set-syntax-table TABLE)        -->  (set! (syntax-table) TABLE)
(set-keymap-parent MAP PARENT)  -->  (set! (keymap-parent MAP) PARENT)

** Miscellaneous changes

*** Scheme Compact Dictionary format.

We use this dictionary format to manage docstrings.
doc/scd.txt describes the format.  tools/guile-scd.pl generates a
dictionary from guile-core/libguile/*.c.  scheme/utils/scd.scm is
the access program in Scheme.

*** tools/hierarchy.scm

This file generates a diagram of GOOPS's class hierarchy.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: guile-emacs-0.4 released
  2000-05-24  0:46 guile-emacs-0.4 released Keisuke Nishida
@ 2000-05-24  1:53 ` Mikael Djurfeldt
  2000-05-24 12:51   ` Keisuke Nishida
  0 siblings, 1 reply; 5+ messages in thread
From: Mikael Djurfeldt @ 2000-05-24  1:53 UTC (permalink / raw)
  To: Keisuke Nishida; +Cc: djurfeldt

This is great!

Thanks!

Just a small preliminary comment:

Keisuke Nishida <kxn30@po.cwru.edu> writes:

>   $user-full-name

Since `$' is valid Scheme symbol syntax, could you instead use some
free hash-syntax (#...)?

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: guile-emacs-0.4 released
  2000-05-24  1:53 ` Mikael Djurfeldt
@ 2000-05-24 12:51   ` Keisuke Nishida
  2000-05-24 13:10     ` Mikael Djurfeldt
  0 siblings, 1 reply; 5+ messages in thread
From: Keisuke Nishida @ 2000-05-24 12:51 UTC (permalink / raw)
  To: Mikael Djurfeldt; +Cc: guile-emacs

Mikael Djurfeldt <mdj@mdj.nada.kth.se> writes:

> >   $user-full-name
> 
> Since `$' is valid Scheme symbol syntax, could you instead use some
> free hash-syntax (#...)?

You have to use (use-syntax ...) to activate this syntax, so it doesn't
break existing programs, but anyway, I'll change it so to use #^....

(Probably not to use such a syntax is the best, but I don't have any
good idea for now.  We can think about it again when Guile-based Emacs
becomes available.)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: guile-emacs-0.4 released
  2000-05-24 12:51   ` Keisuke Nishida
@ 2000-05-24 13:10     ` Mikael Djurfeldt
  2000-05-24 13:23       ` Keisuke Nishida
  0 siblings, 1 reply; 5+ messages in thread
From: Mikael Djurfeldt @ 2000-05-24 13:10 UTC (permalink / raw)
  To: Keisuke Nishida; +Cc: djurfeldt

Keisuke Nishida <kxn30@po.cwru.edu> writes:

> Mikael Djurfeldt <mdj@mdj.nada.kth.se> writes:
> 
> > >   $user-full-name
> > 
> > Since `$' is valid Scheme symbol syntax, could you instead use some
> > free hash-syntax (#...)?
> 
> You have to use (use-syntax ...) to activate this syntax, so it doesn't
> break existing programs, but anyway, I'll change it so to use #^....

Hmm... I'm not sure I understand what you mean.

If you use the #^-syntax, you only need to use `read-hash-extend'.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: guile-emacs-0.4 released
  2000-05-24 13:10     ` Mikael Djurfeldt
@ 2000-05-24 13:23       ` Keisuke Nishida
  0 siblings, 0 replies; 5+ messages in thread
From: Keisuke Nishida @ 2000-05-24 13:23 UTC (permalink / raw)
  To: Mikael Djurfeldt; +Cc: guile-emacs

Mikael Djurfeldt <mdj@mdj.nada.kth.se> writes:

> If you use the #^-syntax, you only need to use `read-hash-extend'.

Oh, that's great!  I didn't know that.  I'll use it by default.

Thanks!

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2000-05-24 13:23 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-05-24  0:46 guile-emacs-0.4 released Keisuke Nishida
2000-05-24  1:53 ` Mikael Djurfeldt
2000-05-24 12:51   ` Keisuke Nishida
2000-05-24 13:10     ` Mikael Djurfeldt
2000-05-24 13:23       ` Keisuke Nishida

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).