Generic_Window_Manager/contrib/emacs-mode/emacs-mode.readme

110 lines
3.0 KiB
Plaintext

Date: Wed, 26 Jan 1994 12:25:34 +0100
Return-Path: owner-gwmtalk@sophia.inria.fr
From: Sven Wischnowsky <oberon@cs.tu-berlin.de>
Message-Id: <199401261125.AA00332@mail.cs.tu-berlin.de>
To: geroahde@w250zrz.zrz.TU-Berlin.DE
Cc: gwm-talk@mirsa.inria.fr
In-Reply-To: <9401241755.AA22923@w250zrz.zrz.TU-Berlin.DE> (message from Gero Guenther on Mon, 24 Jan 94 18:55:29 +0100)
Subject: Re: gwm support for emacs-19.22
No-Reply-To: oberon@cs.tu-berlin.de
Content-Length: 6754
Gero Guenther wrote:
> Hello folks,
>
> are there patches available for emacs-19.22
> to support the wool-interaction-mode and the other comunication with
> gwm I know from epoch?
>
> I lost the account with my addr on the mailinglist for gwm so please
> respond with email or put me on the mailinglist again before
> responding.
>
Well, not exactly...
My solution to this problem was to patch gwm. Below is a patch for the
gwm.c file (version 1.7o) which adds two new options:
-I: this one makes gwm read its stdin (and, of course, evaluate it)
-P: together with -I makes gwm print a simple prompt showing the
number of currently open parentheses
COLAS NOTE: these patches has been added in the current version...
The rest is simple, something like this (in emacs):
(defvar gwm-proc nil)
(defvar gwm-buf nil)
(if (not gwm-proc)
(let ((b (generate-new-buffer "*gwm*"))
(ob (current-buffer))
(m (copy-keymap lisp-mode-map)))
(set-buffer b)
(use-local-map m)
(local-set-key "\C-j" 'gwm-send)
(set-buffer ob)
(setq gwm-buf b)
(setq gwm-proc (start-process "gwm"
b
(if (string-equal system-type
"usg-unix-v")
"/home/pub/bin/sol2/gwm"
"/home/pub/bin/sun4/gwm")
"-I"))
(process-kill-without-query gwm-proc)
(set-process-filter gwm-proc 'gwm-filter)
(set-process-sentinel gwm-proc 'gwm-sentinel)))
(defun gwm-filter (p s)
(let ((ob (current-buffer)))
(unwind-protect
(let ((i 0) (l (length s)) (p (point)))
(set-buffer zg-buf)
(insert s)
(if (string-match "\012--emacs-exec:\012\\(.*\\)\012--end" s)
(eval-region (+ p (match-beginning 1))
(+ p (match-end 1))))))
(set-buffer ob)))
(defun gwm-sentinel (process message)
(setq gwm-proc (start-process "gwm"
gwm-buf
(if (string-equal system-type
"usg-unix-v")
"/home/pub/bin/sol2/gwm"
"/home/pub/bin/sun4/gwm")
"-I"))
(process-kill-without-query gwm-proc)
(set-process-filter gwm-proc 'gwm-filter)
(set-process-sentinel gwm-proc 'gwm-sentinel))
(defun gwm-exec (s)
(interactive "Sgwm: ")
(send-string gwm-proc (concat s "\n")))
(defun gwm-send ()
(interactive)
(let ((op (point))
(stab (syntax-table)))
(set-syntax-table emacs-lisp-mode-syntax-table)
(forward-sexp -1)
(gwm-exec (buffer-substring (point) op))
(goto-char op)
(insert "\n")
(set-syntax-table stab)))
The filter function allows you to execute emacs code from gwm:
(defun eval-emacs (s)
(print "\n--emacs-exec:\n" s "\n--end\n"))
Hope this helps...
Bye
Sven