;;; Guile object channel
-;; Copyright (C) 2001 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2006 Free Software Foundation, Inc.
-;; 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 2, or (at your option)
-;; any later version.
+;; This library is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU Lesser General Public
+;; License as published by the Free Software Foundation; either
+;; version 2.1 of the License, or (at your option) any later version.
;;
-;; This program is distributed in the hope that it will be useful,
+;; This library 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.
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; Lesser General Public License for more details.
;;
-;; You should have received a copy of the GNU General Public License
-;; along with this program; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; You should have received a copy of the GNU Lesser General Public
+;; License along with this library; if not, write to the Free Software
+;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+;;; Commentary:
+
+;; Now you can use Guile's modules in Emacs Lisp like this:
+;;
+;; (guile-import current-module)
+;; (guile-import module-ref)
+;;
+;; (setq assq (module-ref (current-module) 'assq))
+;; => ("<guile>" %%1%% . "#<primitive-procedure assq>")
+;;
+;; (guile-use-modules (ice-9 documentation))
+;;
+;; (object-documentation assq)
+;; =>
+;; " - primitive: assq key alist
+;; - primitive: assv key alist
+;; - primitive: assoc key alist
+;; Fetches the entry in ALIST that is associated with KEY. To decide
+;; whether the argument KEY matches a particular entry in ALIST,
+;; `assq' compares keys with `eq?', `assv' uses `eqv?' and `assoc'
+;; uses `equal?'. If KEY cannot be found in ALIST (according to
+;; whichever equality predicate is in use), then `#f' is returned.
+;; These functions return the entire alist entry found (i.e. both the
+;; key and the value)."
+;;
+;; Probably we can use GTK in Emacs Lisp. Can anybody try it?
+;;
+;; I have also implemented Guile Scheme mode and Scheme Interaction mode.
+;; Just put the following lines in your ~/.emacs:
+;;
+;; (require 'guile-scheme)
+;; (setq initial-major-mode 'scheme-interaction-mode)
+;;
+;; Currently, the following commands are available:
+;;
+;; M-TAB guile-scheme-complete-symbol
+;; M-C-x guile-scheme-eval-define
+;; C-x C-e guile-scheme-eval-last-sexp
+;; C-c C-b guile-scheme-eval-buffer
+;; C-c C-r guile-scheme-eval-region
+;; C-c : guile-scheme-eval-expression
+;;
+;; I'll write more commands soon, or if you want to hack, please take
+;; a look at the following files:
+;;
+;; guile-core/ice-9/channel.scm ;; object channel
+;; guile-core/emacs/guile.el ;; object adapter
+;; guile-core/emacs/guile-emacs.scm ;; Guile <-> Emacs channels
+;; guile-core/emacs/guile-scheme.el ;; Guile Scheme mode
+;;
+;; As always, there are more than one bugs ;)
;;; Code:
-(define-module (ice-9 channel))
+(define-module (ice-9 channel)
+ :export (make-object-channel
+ channel-open
+ channel-print-value
+ channel-print-token))
;;;
;;; Channel type
(define make-channel (record-constructor channel-type))
-(define-public (make-object-channel printer)
+(define (make-object-channel printer)
(make-channel (current-input-port)
(current-output-port)
printer
;;; Channel
;;;
-(define-public (channel-open ch)
+(define (channel-open ch)
(let ((stdin (channel-stdin ch))
(stdout (channel-stdout ch))
(printer (channel-printer ch))
(list key (apply format #f (cadr args) (caddr args))))
(loop))))))))
-(define-public (channel-print-value ch val)
+(define (channel-print-value ch val)
(format (channel-stdout ch) "value = ~S\n" val))
-(define-public (channel-print-token ch val)
+(define (channel-print-token ch val)
(let* ((token (symbol-append (gensym "%%") '%%))
(pair (cons token (object->string val))))
(format (channel-stdout ch) "token = ~S\n" pair)
(if (defined? 'object->string)
object->string
(lambda (x) (format #f "~S" x))))
+
+;;; channel.scm ends here