110 lines
3.0 KiB
Plaintext
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
|
|
|