Generic_Window_Manager/contrib/gwm-buffer/gwm-buffer.el

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))