90 lines
3.4 KiB
EmacsLisp
90 lines
3.4 KiB
EmacsLisp
;; -*-Emacs-Lisp-*-
|
|
;; WOOL Interactive mode
|
|
;; Copyright (C) 1992 Mike Fletcher
|
|
;; gt0293b@prism.gatech.edu, fletch@cad.gatech.edu,
|
|
;; ccastmf@prism.gatech.edu
|
|
|
|
;;; File: wool-mode.el
|
|
;;; Description: WOOL interactive editing mode for Epoch & GWM
|
|
;;; Author: Mike Fletcher <gt0293b@prism.gatech.edu>
|
|
;;; Idea taken from: Lisp interaction mode from std. distribution
|
|
;;; First created: May 26, 1992
|
|
;;; Last Modified: May 26, 1992
|
|
;;; Version: 1.0
|
|
|
|
;; 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 1, 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 GNU Emacs; see the file COPYING. If not, write to
|
|
;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
;; WOOL interaction mode is for use with Epoch and the GWM window
|
|
;; manager. It provides functionallity similar to the builtin
|
|
;; lisp-interaction-mode of Emacs for GWM WOOL code. Basically the
|
|
;; only change was making a new function (gwm-eval-last-sexp) to grab
|
|
;; the last sexp and send it to GWM by way of the 'GWM_EXECUTE' X
|
|
;; property. See the GWM manual for more details on GWM and WOOL.
|
|
|
|
(if (not (boundp 'emacs-lisp-mode-map)) ; Need to make sure standard
|
|
(load-library "lisp-mode")) ; lisp mode stuff has been loaded
|
|
|
|
(defvar wool-interaction-mode-map ()
|
|
"Keymap for WOOL interaction mode.")
|
|
|
|
(if wool-interaction-mode-map ; If need to bind keys
|
|
()
|
|
(setq wool-interaction-mode-map (make-sparse-keymap))
|
|
(lisp-mode-commands wool-interaction-mode-map)
|
|
(define-key wool-interaction-mode-map "\n" 'gwm-eval-last-sexp))
|
|
|
|
(defun gwm-eval-last-sexp (arg)
|
|
"Sends sexp before point to GWM via the GWM_EXECUTE property of the
|
|
window. Output is sent to stderr of the GWM process."
|
|
(interactive "P")
|
|
(copy-to-register 24
|
|
(let ((stab (syntax-table)))
|
|
(unwind-protect
|
|
(save-excursion
|
|
(set-syntax-table emacs-lisp-mode-syntax-table)
|
|
(forward-sexp -1)
|
|
(point))
|
|
(set-syntax-table stab)))
|
|
(point) ())
|
|
(epoch::set-property "GWM_EXECUTE" (get-register 24)))
|
|
|
|
(defun wool-interaction-mode ()
|
|
"Major mode for typing and evaluating WOOL code for the GWM window
|
|
manager. Mostly a direct rip off of Lisp-interaction mode from the
|
|
Emacs distribution. Only works under Epoch.
|
|
|
|
Commands:
|
|
Same as Lisp-interaction mode, except LFD sends the current sexp to
|
|
GWM to be executed (by means of the GWM_EXECUTE property).
|
|
\\{wool-interaction-mode-map}"
|
|
|
|
(interactive)
|
|
(if (boundp 'epoch::version) ; See if running under epoch
|
|
(progn
|
|
(kill-all-local-variables)
|
|
(use-local-map wool-interaction-mode-map)
|
|
(set-syntax-table emacs-lisp-mode-syntax-table)
|
|
(setq major-mode 'wool-interaction-mode)
|
|
(setq mode-name "WOOL Interaction")
|
|
(lisp-mode-variables ())
|
|
(run-hooks 'wool-interaction-mode-hook))
|
|
(message "Sorry, need to be running Epoch to work.")))
|
|
|
|
(defun gwm-buffer ()
|
|
"Opens up a new buffer named *GWM* in WOOL interaction mode."
|
|
(interactive)
|
|
(switch-to-buffer (get-buffer-create "*GWM*"))
|
|
(wool-interaction-mode))
|