Mercurial > emacs
annotate lisp/vmsproc.el @ 93762:46d39c0f7bf9
(uniscribe_shape): Increase items buffer size.
Give up if glyph indices not supported. Use uniscribe obtained
ABC widths for individual metrics. Map glyph clusters back to
characters using fClusterStart flag. Return number of glyphs
produced, not chars processed.
author | Jason Rumney <jasonr@gnu.org> |
---|---|
date | Sun, 06 Apr 2008 01:04:45 +0000 |
parents | 107ccd98fa12 |
children | 606f2d163a64 ee5932bf781d |
rev | line source |
---|---|
86503
2c08ad76fc1f
* progmodes/cperl-mode.el (compilation-error-regexp-alist): Pacify
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85478
diff
changeset
|
1 ;; -*- no-byte-compile: t -*- |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
657
diff
changeset
|
2 ;;; vmsproc.el --- run asynchronous VMS subprocesses under Emacs |
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
657
diff
changeset
|
3 |
74442 | 4 ;; Copyright (C) 1986, 2001, 2002, 2003, 2004, 2005, |
79721 | 5 ;; 2006, 2007, 2008 Free Software Foundation, Inc. |
841 | 6 |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
657
diff
changeset
|
7 ;; Author: Mukesh Prasad |
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
657
diff
changeset
|
8 ;; Maintainer: FSF |
812
485e82a8acb5
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
807
diff
changeset
|
9 ;; Keywords: vms |
656
d74e65773062
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
35
diff
changeset
|
10 |
35 | 11 ;; This file is part of GNU Emacs. |
12 | |
13 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
14 ;; it under the terms of the GNU General Public License as published by | |
78236
9355f9b7bbff
Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents:
75347
diff
changeset
|
15 ;; the Free Software Foundation; either version 3, or (at your option) |
35 | 16 ;; any later version. |
17 | |
18 ;; GNU Emacs is distributed in the hope that it will be useful, | |
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 ;; GNU General Public License for more details. | |
22 | |
23 ;; You should have received a copy of the GNU General Public License | |
14169 | 24 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
64091 | 25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
26 ;; Boston, MA 02110-1301, USA. | |
35 | 27 |
38412
253f761ad37b
Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents:
14169
diff
changeset
|
28 ;;; Commentary: |
253f761ad37b
Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents:
14169
diff
changeset
|
29 |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
657
diff
changeset
|
30 ;;; Code: |
35 | 31 |
32 (defvar display-subprocess-window nil | |
14015
51621fd8598f
(display-subprocess-window): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
841
diff
changeset
|
33 "If non-nil, the subprocess window is displayed whenever input is received.") |
35 | 34 |
35 (defvar command-prefix-string "$ " | |
36 "String to insert to distinguish commands entered by user.") | |
37 | |
38 (defvar subprocess-running nil) | |
64683
d8a052666f20
(subprocess-buf): Declare to quieten compiler.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64682
diff
changeset
|
39 (defvar subprocess-buf nil) |
d8a052666f20
(subprocess-buf): Declare to quieten compiler.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64682
diff
changeset
|
40 |
64682
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
41 (defvar command-mode-map |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
42 (let ((map (make-sparse-keymap))) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
43 (define-key map "\C-m" 'command-send-input) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
44 (define-key map "\C-u" 'command-kill-line) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
45 map)) |
35 | 46 |
47 (defun subprocess-input (name str) | |
74263
2f0f8ada392a
(subprocess-input, start-subprocess, subprocess-command, command-send-input,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
48 "Handle input from a subprocess. Called by Emacs." |
35 | 49 (if display-subprocess-window |
50 (display-buffer subprocess-buf)) | |
64683
d8a052666f20
(subprocess-buf): Declare to quieten compiler.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64682
diff
changeset
|
51 (with-current-buffer subprocess-buf |
35 | 52 (goto-char (point-max)) |
64683
d8a052666f20
(subprocess-buf): Declare to quieten compiler.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64682
diff
changeset
|
53 (insert str ?\n))) |
35 | 54 |
55 (defun subprocess-exit (name) | |
56 "Called by Emacs upon subprocess exit." | |
57 (setq subprocess-running nil)) | |
58 | |
59 (defun start-subprocess () | |
74263
2f0f8ada392a
(subprocess-input, start-subprocess, subprocess-command, command-send-input,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
60 "Spawn an asynchronous subprocess with output redirected to |
35 | 61 the buffer *COMMAND*. Within this buffer, use C-m to send |
62 the last line to the subprocess or to bring another line to | |
63 the end." | |
64 (if subprocess-running | |
65 (return t)) | |
66 (setq subprocess-buf (get-buffer-create "*COMMAND*")) | |
64682
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
67 (with-current-buffer subprocess-buf |
35 | 68 (use-local-map command-mode-map)) |
69 (setq subprocess-running (spawn-subprocess 1 'subprocess-input | |
70 'subprocess-exit)) | |
71 ;; Initialize subprocess so it doesn't panic and die upon | |
72 ;; encountering the first error. | |
73 (and subprocess-running | |
74 (send-command-to-subprocess 1 "ON SEVERE_ERROR THEN CONTINUE"))) | |
75 | |
76 (defun subprocess-command-to-buffer (command buffer) | |
77 "Execute COMMAND and redirect output into BUFFER." | |
78 (let (cmd args) | |
79 (setq cmd (substring command 0 (string-match " " command))) | |
80 (setq args (substring command (string-match " " command))) | |
81 (call-process cmd nil buffer nil "*dcl*" args))) | |
64682
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
82 ;; BUGS: only the output up to the end of the first image activation is trapped. |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
83 ;; (if (not subprocess-running) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
84 ;; (start-subprocess)) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
85 ;; (with-current-buffer buffer |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
86 ;; (let ((output-filename (concat "SYS$SCRATCH:OUTPUT-FOR-" |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
87 ;; (getenv "USER") ".LISTING"))) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
88 ;; (while (file-exists-p output-filename) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
89 ;; (delete-file output-filename)) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
90 ;; (define-logical-name "SYS$OUTPUT" (concat output-filename "-NEW")) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
91 ;; (send-command-to-subprocess 1 command) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
92 ;; (send-command-to-subprocess 1 (concat |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
93 ;; "RENAME " output-filename |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
94 ;; "-NEW " output-filename)) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
95 ;; (while (not (file-exists-p output-filename)) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
96 ;; (sleep-for 1)) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
97 ;; (define-logical-name "SYS$OUTPUT" nil) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
98 ;; (insert-file output-filename) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
99 ;; (delete-file output-filename)))) |
35 | 100 |
101 (defun subprocess-command () | |
74263
2f0f8ada392a
(subprocess-input, start-subprocess, subprocess-command, command-send-input,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
102 "Start asynchronous subprocess if not running and switch to its window." |
35 | 103 (interactive) |
104 (if (not subprocess-running) | |
105 (start-subprocess)) | |
106 (and subprocess-running | |
107 (progn (pop-to-buffer subprocess-buf) (goto-char (point-max))))) | |
108 | |
109 (defun command-send-input () | |
74263
2f0f8ada392a
(subprocess-input, start-subprocess, subprocess-command, command-send-input,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
110 "If at last line of buffer, send the current line to |
2f0f8ada392a
(subprocess-input, start-subprocess, subprocess-command, command-send-input,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
111 the spawned subprocess. Otherwise bring back current |
35 | 112 line to the last line for resubmission." |
113 (interactive) | |
114 (beginning-of-line) | |
64682
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
115 (let ((current-line (buffer-substring (point) (line-end-position)))) |
35 | 116 (if (eobp) |
117 (progn | |
118 (if (not subprocess-running) | |
119 (start-subprocess)) | |
120 (if subprocess-running | |
121 (progn | |
122 (beginning-of-line) | |
123 (send-command-to-subprocess 1 current-line) | |
124 (if command-prefix-string | |
125 (progn (beginning-of-line) (insert command-prefix-string))) | |
85478
786d3a985758
* term/x-win.el (x-gtk-stock-map, icon-map-list)
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
126 (forward-line 1)))) |
35 | 127 ;; else -- if not at last line in buffer |
64682
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
128 (goto-char (point-max)) |
35 | 129 (backward-char) |
85478
786d3a985758
* term/x-win.el (x-gtk-stock-map, icon-map-list)
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
130 (forward-line 1) |
64682
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
131 (insert |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
132 (if (compare-strings command-prefix-string nil nil |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
133 current-line 0 (length command-prefix-string)) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
134 (substring current-line (length command-prefix-string)) |
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
135 current-line))))) |
35 | 136 |
64682
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
137 (defun command-kill-line () |
74263
2f0f8ada392a
(subprocess-input, start-subprocess, subprocess-command, command-send-input,
Juanma Barranquero <lekktu@gmail.com>
parents:
68651
diff
changeset
|
138 "Kill the current line. Used in command mode." |
35 | 139 (interactive) |
140 (beginning-of-line) | |
141 (kill-line)) | |
142 | |
143 (define-key esc-map "$" 'subprocess-command) | |
657
fec3f9a1e3e5
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
656
diff
changeset
|
144 |
85478
786d3a985758
* term/x-win.el (x-gtk-stock-map, icon-map-list)
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
145 (provide 'vmsproc) |
786d3a985758
* term/x-win.el (x-gtk-stock-map, icon-map-list)
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
146 |
64682
ddfb3e6e7046
Avoid end-of-buffer. Clean up.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64091
diff
changeset
|
147 ;; arch-tag: 600b2512-f903-4887-bcd2-e76b306f5b66 |
657
fec3f9a1e3e5
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
656
diff
changeset
|
148 ;;; vmsproc.el ends here |