Annotation of OpenXM_contrib/gnuplot/gnuplot.el, Revision 1.1.1.1
1.1 maekawa 1: ;;
2: ;; $Id: gnuplot.el,v 1.4 1993/09/27 17:08:18 alex Exp $
3: ;;
4: ;;
5: ;
6: ; gnu-plot.el - Definitions of GNU-PLOT mode for emacs editor.
7: ;
8: ; Author: Gershon Elber
9: ; Computer Science Dept.
10: ; University of Utah
11: ; Date: Tue May 14 1991
12: ; Copyright (c) 1991, 1992, Gershon Elber
13: ;
14: ; This file defines an environment to run edit and execute GNU-PLOT programs.
15: ; Such a program should have a '.gp' extension in order it to be in
16: ; gnu-plot-mode major mode. Two new functions are provided to communicate
17: ; between the editted file and the plotting program:
18: ; 1. send-line-to-gnu-plot - sends a single line to the plotting program for
19: ; execution. The line sent is the line the cursor is on,
20: ; Bounded to Meta-E by default.
21: ; 2. send-region-to-gnu-plot - sends the region from the current mark
22: ; (mark-marker) to current position (point-marker) to the plotting program.
23: ; This function is convenient for sending a large block of commands.
24: ; Bounded to Meta-R by default.
25: ; Both functions checks for existance of a buffer named gnu-plot-program
26: ; and a process named "gnu-plot" hooked to it, and will restart a new process
27: ; or buffer if none exists. The program to execute as process "gnu-plot" is
28: ; defined by the gnu-plot-program constant below.
29: ;
30:
31: (defvar gnu-plot-program "gnuplot"
32: "*The executable to run for gnu-plot-program buffer.")
33:
34: (defvar gnu-plot-echo-program t
35: "*Control echo of executed commands to gnu-plot-program buffer.")
36:
37: (defvar gnu-plot-mode-map nil "")
38: (if gnu-plot-mode-map
39: ()
40: (setq gnu-plot-mode-map (make-sparse-keymap))
41: (define-key gnu-plot-mode-map "\M-e" 'send-line-to-gnu-plot)
42: (define-key gnu-plot-mode-map "\M-r" 'send-region-to-gnu-plot))
43:
44: ;;;
45: ;;; Define the gnu-plot-mode
46: ;;;
47: (defun gnu-plot-mode ()
48: "Major mode for editing and executing GNU-PLOT files.
49:
50: see send-line-to-gnu-plot and send-region-to-gnu-plot for more."
51: (interactive)
52: (use-local-map gnu-plot-mode-map)
53: (setq major-mode 'gnu-plot-mode)
54: (setq mode-name "Gnu-Plot")
55: (run-hooks 'gnu-plot-mode-hook))
56:
57: ;;;
58: ;;; Define send-line-to-gnu-plot - send from current cursor position to next
59: ;;; semicolin detected.
60: ;;;
61: (defun send-line-to-gnu-plot ()
62: "Sends one line of code from current buffer to the GNU-PLOT program.
63:
64: Use to execute a line in the GNU-PLOT plotting program. The line sent is
65: the line the cursor (point) is on.
66:
67: The GNU-PLOT plotting program buffer name is gnu-plot-program and the
68: process name is 'gnu-plot'. If none exists, a new one is created.
69:
70: The name of the gnu-plot program program to execute is stored in
71: gnu-plot-program variable and may be changed."
72: (interactive)
73: (if (equal major-mode 'gnu-plot-mode)
74: (progn
75: (make-gnu-plot-buffer) ; In case we should start a new one.
76: (beginning-of-line)
77: (let ((start-mark (point-marker)))
78: (next-line 1)
79: (let* ((crnt-buffer (buffer-name))
80: (end-mark (point-marker))
81: (string-copy (buffer-substring start-mark end-mark)))
82: (switch-to-buffer-other-window (get-buffer "gnu-plot-program"))
83: (end-of-buffer)
84: (if gnu-plot-echo-program
85: (insert string-copy))
86: (set-marker (process-mark (get-process "gnu-plot")) (point-marker))
87: (if (not (pos-visible-in-window-p))
88: (recenter 3))
89: (switch-to-buffer-other-window (get-buffer crnt-buffer))
90: (process-send-region "gnu-plot" start-mark end-mark)
91: (goto-char end-mark))))
92: (message "Should be invoked in gnu-plot-mode only.")))
93:
94: ;;;
95: ;;; Define send-region-to-gnu-plot - send from current cursor position to
96: ;;; current marker.
97: ;;;
98: (defun send-region-to-gnu-plot ()
99: "Sends a region of code from current buffer to the GNU-PLOT program.
100:
101: When this function is invoked on an GNU-PLOT file it send the region
102: from current point to current mark to the gnu-plot plotting program.
103:
104: The GNU-PLOT plotting program buffer name is gnu-plot-program and the
105: process name is 'gnu-plot'. If none exists, a new one is created.
106:
107: The name of the gnu-plot program program to execute is stored in
108: gnu-plot-program variable and may be changed."
109: (interactive)
110: (if (equal major-mode 'gnu-plot-mode)
111: (progn
112: (make-gnu-plot-buffer) ; In case we should start a new one.
113: (copy-region-as-kill (mark-marker) (point-marker))
114: (let ((crnt-buffer (buffer-name)))
115: (switch-to-buffer-other-window (get-buffer "gnu-plot-program"))
116: (end-of-buffer)
117: (if gnu-plot-echo-program
118: (yank))
119: (set-marker (process-mark (get-process "gnu-plot")) (point-marker))
120: (if (not (pos-visible-in-window-p))
121: (recenter 3))
122: (switch-to-buffer-other-window (get-buffer crnt-buffer))
123: (process-send-region "gnu-plot" (mark-marker) (point-marker))))
124: (message "Should be invoked in gnu-plot-mode only.")))
125:
126: ;;;
127: ;;; Switch to "gnu-plot-program" buffer if exists. If not, creates one and
128: ;;; execute the program defined by gnu-plot-program.
129: ;;;
130: (defun make-gnu-plot-buffer ()
131: "Switch to gnu-plot-program buffer or create one if none exists"
132: (interactive)
133: (if (get-buffer "gnu-plot-program")
134: (if (not (get-process "gnu-plot"))
135: (progn
136: (message "Starting GNU-PLOT plotting program...")
137: (start-process "gnu-plot" "gnu-plot-program" gnu-plot-program)
138: (process-send-string "gnu-plot" "\n")
139: (message "Done.")))
140: (progn
141: (message "Starting GNU-PLOT plotting program...")
142: (start-process "gnu-plot" "gnu-plot-program" gnu-plot-program)
143: (process-send-string "gnu-plot" "\n")
144: (message "Done."))))
145:
146: ;;;
147: ;;; Autoload gnu-plot-mode on any file with gp extension.
148: ;;;
149: (setq auto-mode-alist (append '(("\\.gp$" . gnu-plot-mode))
150: auto-mode-alist))
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>