cmd-modeはMS-DOSのバッチファイル(拡張子が.bat)や、Windows NT コマンドスクリプトファイル(拡張子が.cmd)等を編集する為の、Emacsのメジャーモードです。
Revision | 047d43ae2ba07951585ed13fa160ba5c8cb22270 (tree) |
---|---|
Time | 2012-08-26 14:09:59 |
Author | Tadamegu Furukawa <tarancho@user...> |
Commiter | Tadamegu Furukawa |
@@ -1,484 +1,722 @@ | ||
1 | -;; -*- Mode: Emacs-Lisp ; coding: sjis-dos -*- | |
2 | -;; | |
3 | -;; Copyright 2001 by Tadamegu Furukawa.[tfuruka1@nifty.com] | |
4 | -;; | |
5 | -;; MS-DOSのバッチファイル及びWindows NTのコマンドスクリプトを編集する | |
6 | -;; 為のへなちょこモードです。%が沢山あって、何がなんだかわからないバッ | |
7 | -;; チファイルを読み易くする目的で作成したので、基本的にfont-lock以外の | |
8 | -;; 機能は殆どありません。しかもemacs 20.7 "Meadow-1.14 (AWSAKA:62)" で | |
9 | -;; しか試していません(これ以外で使用される事を想定していません)。 | |
10 | -;; | |
11 | -;; .emacsの何処かに以下を追加してください。拡張子がcmd又はbatのファイ | |
12 | -;; ルを開くと自動でcmd-modeになります。 | |
13 | -;; | |
14 | -;; (autoload 'cmd-mode "cmd-mode" "CMD mode." t) | |
15 | -;; (setq auto-mode-alist (append '(("\\.\\(cmd\\|bat\\)$" . cmd-mode)) | |
16 | -;; auto-mode-alist)) | |
17 | -;; | |
18 | -;; | |
19 | -;; $Id: cmd-mode.el,v 1.3 2001/09/11 12:39:03 tfuruka1 Exp $ | |
20 | -;; $Log: cmd-mode.el,v $ | |
21 | -;; Revision 1.3 2001/09/11 12:39:03 tfuruka1 | |
22 | -;; ●メニューをつけてみた。 | |
23 | -;; ●任意のラベルへジャンプする機能を追加。 | |
24 | -;; | |
25 | -;; Revision 1.2 2001/08/31 13:25:50 tfuruka1 | |
26 | -;; ●SETの環境変数にキーワード文字列が含まれていると、色付けが変になる問題 | |
27 | -;; を修正 | |
28 | -;; ●SET /A の時に演算子の一部を環境変数として、間違えて色付けする問題を | |
29 | -;; 修正 | |
30 | -;; | |
31 | -;; Revision 1.1 2001/08/28 13:14:43 tfuruka1 | |
32 | -;; Initial revision | |
33 | -;; | |
34 | - | |
35 | -;; (replace-regexp "[\t ]+$" "") | |
36 | - | |
37 | -(defconst cmd-mode-revision-number "$Revision: 1.3 $" "cmd-modeのRevision") | |
38 | - | |
39 | -;;; *** メニューバー | |
40 | -(defvar cmd-menu-bar (make-sparse-keymap "cmd-mode-menu") "メニュー") | |
41 | -(defvar cmd-submenu-jump (make-sparse-keymap "cmd-mode-submenu-jump") | |
42 | - "ポップアップメニュー(ジャンプ)") | |
43 | - | |
44 | -;;; *** hook | |
45 | -(defvar cmd-mode-hook nil | |
46 | - "cmd-modeを作成するタイミングで呼ばれる hook です。") | |
47 | -(defvar cmd-help-mode-hook nil | |
48 | - "cmd-help-modeを作成するタイミングで呼ばれる hook です。") | |
49 | - | |
50 | -;;; *** 外部コマンド | |
51 | -(defvar cmd-help-command "help" | |
52 | - "helpコマンドのコマンド名。Windows NT系以外には存在しません。") | |
53 | - | |
54 | -;;; *** buffer関係 | |
55 | -(defvar cmd-temp-buf " *cmd-temp-buf*" "作業用の隠しバッファ") | |
56 | -(defvar cmd-help-buf-base-name "*cmd-help " "ヘルプバッファのベース名") | |
57 | - | |
58 | -;;; *** regexp | |
59 | -(defvar cmd-full-size-space-etc-pattern "\\( +\\)" | |
60 | - "所謂「全角の空白」の正規表現") | |
61 | -(defvar cmd-tab-pattern "\\(\t+\\)" "TAB文字の正規表現") | |
62 | -(defvar cmd-comment-pattern "^[ \t]*\\(@*\\)\\(rem\\)\\([\t ].*$\\|$\\)" | |
63 | - "コメント行の正規表現") | |
64 | -(defvar cmd-variable-pattern | |
65 | - (concat "\\(%\\(" ;最初の文字が% | |
66 | - "\\*\\|" ;%* の場合 | |
67 | - "~[^0-9 \n]+[0-9a-z]\\|" ;~f1 等 | |
68 | - "[^%\n -龠]+%\\|" ;通常の環境変数 | |
69 | - "[0-9a-z]\\b\\|" ;%1 等 | |
70 | - "%[0-9a-z]?" ;%% 等 | |
71 | - "\\)\\)") | |
72 | - "環境変数の展開の正規表現 | |
73 | - | |
74 | -想定しているパターンは以下の通りです。 | |
75 | - | |
76 | -例 意味 | |
77 | ------------ ----------------------- | |
78 | -%* すべての引数を参照する | |
79 | -%~fi, %~dp1 バッチパラメータ(%n)及びFOR変数参照の置換 | |
80 | -%文字列% 通常の環境変数の参照 | |
81 | -%1, %i バッチパラメータ(%n)及びFOR変数参照 | |
82 | -%%, %%1, %%i %そのもの、バッチパラメータ(%n)及びFOR変数参照(バッチ | |
83 | - ファイル内で使用した場合)") | |
84 | -(defvar cmd-const-pattern | |
85 | - "\\(^[ \t]*@\\|nul\\|:eof\\|&&\\||\\|\\^\\|&[12]?\\|[,;]\\)" | |
86 | - "条件付き処理記号等の正規表現") | |
87 | -(defvar cmd-set-pattern | |
88 | - (concat "\\b" | |
89 | - "\\(set\\b\\)\\([ \t]+/a\\)*" | |
90 | - "\\(\\([ \t]+[_A-Za-z-][_A-Za-z0-9-]*\\)*\\)" | |
91 | - "\\([-+/\\*]\\|\\W\\)*") | |
92 | - "SETコマンドの正規表現") | |
93 | -(defvar cmd-label-pattern "^[ \t]*\\(:[:A-Za-z0-9_-]+\\)" | |
94 | - "ラベルの正規表現") | |
95 | -(defvar cmd-redirect-pattern | |
96 | - (concat "\\(" | |
97 | - "[12]?>>?\\|" ;1> 2> 1>> 2>> > >> | |
98 | - "<[12]?" ;<1 <2 < | |
99 | - "\\)") | |
100 | - "リダイレクトの正規表現") | |
101 | -(defvar cmd-option-pattern | |
102 | - (concat "\\b" | |
103 | - (regexp-opt | |
104 | - '( | |
105 | - ;; if | |
106 | - "not" "exist" "defined" "errorlevel" "cmdextversion" | |
107 | - "equ" "neq" "lss" "leq" "gtr" "geq" | |
108 | - ;; for | |
109 | - "eol" "skip" "delims" "tokens" "in" "do") t) "\\b") | |
110 | - "IF文等のオプションの正規表現") | |
111 | -(defvar cmd-command-pattern | |
112 | - (concat "\\b" | |
113 | - (regexp-opt '("assoc" "break" "call" "cd" "chdir" "cls" | |
114 | - "color" "copy" "date" "del" "dir" "echo" | |
115 | - "echo." "endlocal" "erase" "exit" "for" | |
116 | - "ftype" "goto" "if" "md" "mkdir" "move" "path" | |
117 | - "pause" "popd" "prompt" "pushd" "rd" "ren" | |
118 | - "rename" "rmdir" "setlocal" "shift" "start" | |
119 | - "time" "title" "type" "ver" "verify" "vol" ) | |
120 | - t) "\\b") | |
121 | - "コマンドの正規表現 | |
122 | - | |
123 | -コマンドは内部コマンドのみです。Windows NTのHELPコマンドで一覧表示され | |
124 | -るコマンドから、外部コマンド(*.exe, *.com)を除いたものです。但し、SET | |
125 | -と REM は他で定義していますので、ここでは除いています。また、ECHO は | |
126 | -ECHO. も含めています") | |
127 | - | |
128 | -;; font-lockの設定 | |
129 | -(defvar cmd-font-lock-keywords | |
130 | - (list | |
131 | - ;; コメント | |
132 | - (list cmd-comment-pattern | |
133 | - '(1 font-lock-constant-face) ;行頭の@ | |
134 | - '(2 font-lock-keyword-face) ;rem | |
135 | - '(3 font-lock-comment-face) ;コメント文字 | |
136 | - ) | |
137 | - ;; SET | |
138 | - (list cmd-set-pattern | |
139 | - '(1 font-lock-keyword-face) ;SET | |
140 | - '(3 font-lock-type-face) ;環境変数名 | |
141 | - ) | |
142 | - ;; ラベル | |
143 | - (list cmd-label-pattern | |
144 | - '(1 (cons font-lock-function-name-face '(underline)))) | |
145 | - ;; リダイレクト記号 | |
146 | - (list cmd-redirect-pattern 1 font-lock-warning-face) | |
147 | - ;; 環境変数の参照 | |
148 | - (list cmd-variable-pattern 1 font-lock-variable-name-face) | |
149 | - ;; 内部コマンド | |
150 | - (list cmd-command-pattern 1 font-lock-keyword-face) | |
151 | - ;;条件付き処理記号等 | |
152 | - (list cmd-const-pattern 1 font-lock-constant-face) | |
153 | - ;; IF文とFOR文のオプション等 | |
154 | - (list cmd-option-pattern 1 font-lock-builtin-face) | |
155 | - ;; 全角スペース | |
156 | - (list cmd-full-size-space-etc-pattern '(1 '(underline))) | |
157 | - ;; TAB文字 | |
158 | - (list cmd-tab-pattern '(1 '(highlight))) | |
159 | - ) | |
160 | - "cmd-mode, cmd-help-modeで使用するfont-lockの設定です。 | |
161 | -詳細はfont-lock-defaultsを参照してください。") | |
162 | - | |
163 | -(defun cmd-mode-version () | |
164 | - "cmd-modeのVersion表示" | |
165 | - (interactive) | |
166 | - (message | |
167 | - (concat "cmd-mode " cmd-mode-revision-number))) | |
168 | - | |
169 | -(defun cmd-help (arg) | |
170 | - "helpコマンドを実行して、結果を表示します。 | |
171 | -この関数は、Windows NT系以外では、動作しません。 | |
172 | - | |
173 | -※Windows \\(9[58]\\|Me\\)でも動作するように作ったつもりだったんですが、 | |
174 | -見事に動作しません。 | |
175 | -" | |
176 | - (interactive | |
177 | - (list (let* ((command (current-word)) | |
178 | - (input (read-string | |
179 | - (format "コマンド%s: " | |
180 | - (if (string-equal command "") | |
181 | - "" | |
182 | - (format "(%s)" command)))))) | |
183 | - (if (string-equal input "") | |
184 | - (if (string-equal command "") | |
185 | - "help" | |
186 | - command) | |
187 | - input)))) | |
188 | - | |
189 | - (let* ((case-fold-search t) | |
190 | - (cmd-help-buffer (format "%s%s*" | |
191 | - cmd-help-buf-base-name (downcase arg))) | |
192 | - (comspec (getenv "ComSpec")) | |
193 | - (cmd-help-arg | |
194 | - (cond | |
195 | - ((string-match "cmd\\.exe$" comspec) | |
196 | - (list "\\/c" cmd-help-command | |
197 | - (if (string-equal arg "help") "" arg))) | |
198 | - ((string-match "command\\.com$" comspec) | |
199 | - (if (string-equal arg "help") | |
200 | - (error "コマンドを入力してください") | |
201 | - (list "\\/c" arg "\\/?"))) | |
202 | - (t | |
203 | - (error (concat "WindowsXX以外では動作しません ComSpec=" comspec))))) | |
204 | - ) | |
205 | - (set-buffer (get-buffer-create cmd-help-buffer)) | |
206 | - (setq buffer-read-only nil) | |
207 | - (erase-buffer) | |
208 | - (apply (function call-process) comspec nil t nil cmd-help-arg) | |
209 | - (goto-char (point-min)) | |
210 | - (display-buffer cmd-help-buffer) | |
211 | - (cmd-help-mode) | |
212 | - ) | |
213 | - ) | |
214 | -(defun cmd-help-mode-exit () | |
215 | - "cmd-help-modeを終了します。" | |
216 | - (interactive) | |
217 | - (if (eq major-mode 'cmd-help-mode) | |
218 | - (kill-buffer (current-buffer))) | |
219 | - ) | |
220 | - | |
221 | -(defun cmd-help-mode () | |
222 | - "cmd-helpから呼び出されます。 | |
223 | - | |
224 | -●ヘルプコマンドを実行し、結果を表示します。 | |
225 | - \\[cmd-help] | |
226 | - | |
227 | -●cmd-help-modeを終了します。 | |
228 | - \\[cmd-help-mode-exit] | |
229 | -" | |
230 | - (interactive) | |
231 | - (kill-all-local-variables) | |
232 | - ;;モード名の設定と、モードラインのモード名フィールドの設定 | |
233 | - (setq major-mode 'cmd-help-mode | |
234 | - mode-name "cmd-help" | |
235 | - buffer-auto-save-file-name nil ;自動保存しない | |
236 | - buffer-read-only t ;読み込み専用 | |
237 | - ) | |
238 | - ;; キーマップの設定 | |
239 | - (setq cmd-help-local-map (make-keymap)) | |
240 | - ;; キーの割り当て | |
241 | - (define-key cmd-help-local-map "\C-ch" 'cmd-help) | |
242 | - (define-key cmd-help-local-map "\C-m" 'cmd-help) | |
243 | - (define-key cmd-help-local-map " " 'cmd-help) | |
244 | - (define-key cmd-help-local-map "q" 'cmd-help-mode-exit) | |
245 | - (define-key cmd-help-local-map "Q" 'cmd-help-mode-exit) | |
246 | - (define-key cmd-help-local-map "n" 'next-line) | |
247 | - (define-key cmd-help-local-map "p" 'previous-line) | |
248 | - | |
249 | - (use-local-map cmd-help-local-map) ; ローカルマップの使用宣言 | |
250 | - | |
251 | - ;; フォントロックの設定 | |
252 | - (make-local-variable 'font-lock-defaults) | |
253 | - (setq font-lock-defaults | |
254 | - '((cmd-font-lock-keywords) t t)) | |
255 | - (font-lock-mode t) | |
256 | - | |
257 | - (run-hooks 'cmd-help-mode-hook) | |
258 | - ) | |
259 | - | |
260 | -(defun cmd-right-trim-region (start end) | |
261 | - "リージョンで指定された範囲の行末の空白文字を削除します。" | |
262 | - (interactive "r") | |
263 | - (save-excursion | |
264 | - (goto-char start) | |
265 | - (while (re-search-forward "[\t ]+$" end t) | |
266 | - (replace-match "")))) | |
267 | - | |
268 | -(defun cmd-exec () | |
269 | - "バッファの内容を(必要であれば)ファイルに保存し、保存したファイル | |
270 | -を実行する。かなり手抜きをしています。" | |
271 | - (interactive) | |
272 | - (save-buffer) | |
273 | - (shell-command (buffer-file-name)) | |
274 | - ) | |
275 | - | |
276 | -(defun cmd-recenter () | |
277 | - "カレント位置を中央に配置した後、余分な行末のスペースを削除する" | |
278 | - (interactive) | |
279 | - (recenter) | |
280 | - (cmd-right-trim-region (point-min) (point-max))) | |
281 | - | |
282 | -(defun cmd-next-label () | |
283 | - "次のラベルへ跳ぶ" | |
284 | - (interactive) | |
285 | - (if (re-search-forward cmd-label-pattern nil t) | |
286 | - (goto-char (match-end 0)))) | |
287 | -(defun cmd-prev-label () | |
288 | - "前のラベルへ跳ぶ" | |
289 | - (interactive) | |
290 | - (if (re-search-backward cmd-label-pattern nil t) | |
291 | - (goto-char (match-beginning 0)))) | |
292 | - | |
293 | -(defun cmd-fill-paragraph () | |
294 | - "コメント行等の行詰めを行います。かなり手抜きをしています(こんな事を | |
295 | -して良いのだろうか)。" | |
296 | - (interactive) | |
297 | - (save-excursion | |
298 | - (let ((case-fold-search t) ;大文字・小文字を区別しない | |
299 | - (cmd-rem-regexp | |
300 | - "\\([\t ]*@?\\(rem\\|echo\\)\\)\\([ \t].*$\\|$\\)") | |
301 | - rem-begin | |
302 | - rem-end | |
303 | - rem-paragraph | |
304 | - match-str | |
305 | - (cmd-fill-column fill-column) | |
306 | - (current-buffer (buffer-name)) | |
307 | - ) | |
308 | - (beginning-of-line) | |
309 | - (if (looking-at cmd-rem-regexp) | |
310 | - (progn | |
311 | - (setq match-str (buffer-substring | |
312 | - (match-beginning 1) (match-end 1)) | |
313 | - rem-begin (point)) | |
314 | - (message "cmd-fill-paragraph【%s】" match-str) | |
315 | - (while (not (bobp)) | |
316 | - (forward-line -1) | |
317 | - (if (looking-at (concat match-str "\\([\t ]\\|$\\)")) | |
318 | - (setq rem-begin (point)) | |
319 | - (goto-char (point-min)))) | |
320 | - | |
321 | - (goto-char rem-begin) | |
322 | - (setq cmd-rem-regexp | |
323 | - (concat "\\(" | |
324 | - "\\(^" match-str "[^\n]*\n\\)+" | |
325 | - "\\(^" match-str "[^\n]*\\)?\\|" | |
326 | - "^" match-str ".*$\\)")) | |
327 | - (if (looking-at cmd-rem-regexp) | |
328 | - (progn | |
329 | - (setq rem-end (match-end 0) | |
330 | - rem-paragraph (buffer-substring rem-begin rem-end)) | |
331 | - (set-buffer (get-buffer-create cmd-temp-buf)) | |
332 | - (erase-buffer) | |
333 | - (insert rem-paragraph) | |
334 | - (indented-text-mode) | |
335 | - | |
336 | - (goto-char (point-min)) | |
337 | - (while (re-search-forward | |
338 | - (concat "^" match-str " ?") nil t) | |
339 | - (replace-match "")) | |
340 | - | |
341 | - (setq fill-column (- cmd-fill-column (length match-str))) | |
342 | - (goto-char (point-min)) | |
343 | - (while (not (eobp)) | |
344 | - (fill-paragraph nil) | |
345 | - (forward-paragraph)) | |
346 | - | |
347 | - (goto-char (point-min)) | |
348 | - (while (not (eobp)) | |
349 | - (beginning-of-line) | |
350 | - (insert (concat match-str | |
351 | - (if (looking-at "$") "" " "))) | |
352 | - (beginning-of-line) | |
353 | - (if (looking-at "[ \t]*@?echo$") | |
354 | - (progn | |
355 | - (end-of-line); | |
356 | - (insert "."))) | |
357 | - (forward-line 1)) | |
358 | - | |
359 | - (goto-char (point-max)) | |
360 | - (beginning-of-line) | |
361 | - (if (looking-at (concat match-str "$")) | |
362 | - (replace-match "")) | |
363 | - | |
364 | - (cmd-right-trim-region (point-min) (point-max)) | |
365 | - | |
366 | - (setq rem-paragraph | |
367 | - (buffer-substring (point-min) (point-max))) | |
368 | - (kill-buffer cmd-temp-buf) | |
369 | - (set-buffer current-buffer) | |
370 | - (delete-region rem-begin rem-end) | |
371 | - (insert rem-paragraph) | |
372 | - (message "done.") | |
373 | - ) | |
374 | - (progn | |
375 | - (ding) | |
376 | - (error "cmd-fill-paragraph【バグでしょう】"))) | |
377 | - ) | |
378 | - (message "cmd-fill-paragraph: 行頭が REM 又は ECHO ではありません") | |
379 | - ) | |
380 | - ) | |
381 | - ) | |
382 | - ) | |
383 | - | |
384 | -(defun cmd-goto-label () | |
385 | - "指定したラベルへジャンプします。 | |
386 | - | |
387 | -ラベルはミニバッファから補完入力できます。ミニバッファには、現在のカー | |
388 | -ソルの下の文字列がデフォルト表示されます。(既存のラベルの何れかに一致 | |
389 | -する場合) | |
390 | -" | |
391 | - (interactive) | |
392 | - (let ((label-alist '()) | |
393 | - (label nil)) | |
394 | - (save-excursion | |
395 | - (goto-char (point-min)) | |
396 | - (while (re-search-forward | |
397 | - "^[ \t]*:\\([:A-Za-z0-9_-]+\\)\\([\t ]\\|$\\)" nil t) | |
398 | - (setq label-alist (cons (list (buffer-substring (match-beginning 1) | |
399 | - (match-end 1))) | |
400 | - label-alist)))) | |
401 | - (if (not label-alist) | |
402 | - (error "ラベルが見つかりません")) | |
403 | - (setq label (completing-read "Label:" label-alist nil t | |
404 | - (if (assoc (current-word) label-alist) | |
405 | - (current-word) ""))) | |
406 | - (when (and label (not (string= label ""))) | |
407 | - (set-mark (point)) ;マークを付ける | |
408 | - (goto-char (point-min)) | |
409 | - (re-search-forward (concat "^[\t ]*:" label "\\([ \t]\\|$\\)")) | |
410 | - ) | |
411 | - ) | |
412 | - ) | |
413 | - | |
414 | -(defun cmd-mode () | |
415 | - "MS-DOSのバッチファイルやWindows NT のコマンドスクリプトファイルを編 | |
416 | -集する為のへなちゃこもーどです。 | |
417 | - | |
418 | -●バッファを保存後、保存したファイルを実行する | |
419 | - \\[cmd-exec] | |
420 | - | |
421 | -●コマンドのヘルプを表示する。 | |
422 | - \\[cmd-help] | |
423 | - | |
424 | -●指定したラベルへジャンプ | |
425 | - \\[cmd-goto-label] | |
426 | - | |
427 | -●現在のカーソル位置を画面の中央に配置し、行末の余分な空白文字を削除 | |
428 | - する。 | |
429 | - \\[cmd-recenter] | |
430 | - | |
431 | -●コメント行等(REM or ECHO)の行詰めを行なう。 | |
432 | - \\[cmd-fill-paragraph] | |
433 | - | |
434 | -●前のラベルへ | |
435 | - \\[cmd-prev-label] | |
436 | - | |
437 | -●次のラベルへ | |
438 | - \\[cmd-next-label] | |
439 | -" | |
440 | - (interactive) | |
441 | - (kill-all-local-variables) | |
442 | - ;;モード名の設定と、モードラインのモード名フィールドの設定 | |
443 | - (setq major-mode 'cmd-mode | |
444 | - mode-name "CMDとBAT") | |
445 | - ;; キーマップの設定 | |
446 | - (setq cmd-local-map (make-keymap)) | |
447 | - ;; キーの割り当て | |
448 | - (define-key cmd-local-map "\C-c\C-c" 'cmd-exec) | |
449 | - (define-key cmd-local-map "\C-cg" 'cmd-goto-label) | |
450 | - (define-key cmd-local-map "\C-ch" 'cmd-help) | |
451 | - (define-key cmd-local-map "\C-l" 'cmd-recenter) | |
452 | - (define-key cmd-local-map "\eq" 'cmd-fill-paragraph) | |
453 | - (define-key cmd-local-map "\e\C-a" 'cmd-prev-label) | |
454 | - (define-key cmd-local-map "\e\C-e" 'cmd-next-label) | |
455 | - | |
456 | - ;; メニューバーの作成 | |
457 | - (define-key cmd-submenu-jump [sub-goto-label] | |
458 | - '("任意のラベル..." . cmd-goto-label)) | |
459 | - (define-key cmd-submenu-jump [sub-next-label] | |
460 | - '("次のラベル" . cmd-next-label)) | |
461 | - (define-key cmd-submenu-jump [sub-prev-label] | |
462 | - '("前のラベル" . cmd-prev-label)) | |
463 | - | |
464 | - (define-key cmd-local-map [menu-bar cmd] (cons mode-name cmd-menu-bar)) | |
465 | - (define-key cmd-menu-bar [submenu-jump] (cons "ジャンプ" cmd-submenu-jump)) | |
466 | - (define-key cmd-menu-bar [sep-1] '("--")) | |
467 | - (define-key cmd-menu-bar [help] '("ヘルプ..." . cmd-help)) | |
468 | - (define-key cmd-menu-bar [sep-2] '("--")) | |
469 | - (define-key cmd-menu-bar [recenter] '("行末の空白文字削除" . cmd-recenter)) | |
470 | - (define-key cmd-menu-bar [fill] '("コメントの行詰め" . cmd-fill-paragraph)) | |
471 | - (define-key cmd-menu-bar [exec] '("実行" . cmd-exec)) | |
472 | - | |
473 | - (use-local-map cmd-local-map) ; ローカルマップの使用宣言 | |
474 | - | |
475 | - ;; font-lockの設定 | |
476 | - (make-local-variable 'font-lock-defaults) | |
477 | - (setq font-lock-defaults | |
478 | - '((cmd-font-lock-keywords) t t)) | |
479 | - (font-lock-mode t) | |
480 | - | |
481 | - (run-hooks 'cmd-mode-hook) | |
482 | -) | |
483 | - | |
484 | -;; end here. | |
1 | +;;; cmd-mode.el --- Edit of MS Windows cmd and bat files | |
2 | +;; | |
3 | +;; Copyright (C) 2001-2005 by Tadamegu Furukawa. <tfuruka1 at nifty dot com> | |
4 | +;; | |
5 | +;; Author: Tadamegu Furukawa <tfuruka1 at nifty dot com> | |
6 | +;; Maintainer: Lennart Borgman <lennart dot borgman dot 073 at student dot lu dot se> | |
7 | +;; Created: 2001-08-28 | |
8 | +;; Version: 1.4 | |
9 | +;; Keywords: | |
10 | +;; | |
11 | +;; | |
12 | +;; Kindly translated to English 2005 by Kenichi Handa after an inquiry | |
13 | +;; by Lennart Borgman. | |
14 | + | |
15 | +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
16 | +;; | |
17 | +;; This file is not part of GNU Emacs. | |
18 | + | |
19 | + | |
20 | +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
21 | +;; | |
22 | +;;; Commentary: | |
23 | +;; | |
24 | +;; MS-DOSのバッチファイル及びWindows NTのコマンドスクリプトを編集する | |
25 | +;; 為のへなちょこモードです。%が沢山あって、何がなんだかわからないバッ | |
26 | +;; チファイルを読み易くする目的で作成したので、基本的にfont-lock以外の | |
27 | +;; 機能は殆どありません。しかもemacs 20.7 "Meadow-1.14 (AWSAKA:62)" で | |
28 | +;; しか試していません(これ以外で使用される事を想定していません)。 | |
29 | +;; | |
30 | +;; Tiny mode for editing batch files of MS-DOS and command scripts of | |
31 | +;; Windows NT. The purpose is to improve the readablity of those | |
32 | +;; files that contains many `%' and are difficult to read. So, | |
33 | +;; basically this provides only a proper font-lock setting. This | |
34 | +;; program has been tested for Emacs 20.7 "Meadow-1.14 (AWSAKA:62) | |
35 | +;; (the other versions of Emacsen are out of my focus). | |
36 | +;; | |
37 | +;; It has now been tested also on Emacs 21.3 and 22.0.50 on W2k. | |
38 | + | |
39 | + | |
40 | + | |
41 | +;; .emacsの何処かに以下を追加してください。拡張子がcmd又はbatのファイ | |
42 | +;; ルを開くと自動でcmd-modeになります。 | |
43 | +;; | |
44 | + | |
45 | +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
46 | +;; | |
47 | +;;; Usage: | |
48 | +;; | |
49 | +;; Please input the following code somewhere in your .emacs. Then, | |
50 | +;; cmd-mode is automatically activated when you open a file whose | |
51 | +;; extention is "cmd" or "bat". | |
52 | + | |
53 | +;; (autoload 'cmd-mode "cmd-mode" "CMD mode." t) | |
54 | +;; (setq auto-mode-alist (append '(("\\.\\(cmd\\|bat\\)$" . cmd-mode)) | |
55 | +;; auto-mode-alist)) | |
56 | + | |
57 | + | |
58 | +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
59 | +;; | |
60 | +;;; History: | |
61 | +;; | |
62 | +;;;;;;;;;;;;;;;;; What is this: | |
63 | +;; $Id: cmd-mode.el,v 1.1 2005/07/18 14:38:50 Administrator Exp $ | |
64 | +;; $Log: cmd-mode.el,v $ | |
65 | +;; Revision 1.1 2005/07/18 14:38:50 Administrator | |
66 | +;; *** empty log message *** | |
67 | +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
68 | + | |
69 | +;; Revision 1.4 2005/10/18 | |
70 | +;; | |
71 | +;; o Translation to English. (Kenichi Handa) | |
72 | +;; o Changed set-mark to push-mark. (Lennart Borgman) | |
73 | + | |
74 | + | |
75 | +;; Revision 1.3 2001/09/11 12:39:03 tfuruka1 | |
76 | +;; | |
77 | +;; ●メニューをつけてみた。 | |
78 | +;; o Add menu. | |
79 | +;; | |
80 | +;; ●任意のラベルへジャンプする機能を追加。 | |
81 | +;; o Add a facility to jump to any label. | |
82 | + | |
83 | + | |
84 | +;; Revision 1.2 2001/08/31 13:25:50 tfuruka1 | |
85 | +;; | |
86 | +;; ●SETの環境変数にキーワード文字列が含まれていると、色付けが変になる問題 | |
87 | +;; を修正 | |
88 | +;; o Fix the problme of incorrect coloring in the case that an | |
89 | +;; environment varialbe of SET contains a keyword string. | |
90 | +;; | |
91 | +;; ●SET /A の時に演算子の一部を環境変数として、間違えて色付けする問題を | |
92 | +;; 修正 | |
93 | +;; o FIx the problem of incorrectly coloring a part of operand in SET | |
94 | +;; /A as an environment variable in | |
95 | + | |
96 | +;; Revision 1.1 2001/08/28 13:14:43 tfuruka1 | |
97 | +;; | |
98 | +;; o Initial version. | |
99 | + | |
100 | + | |
101 | + | |
102 | +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
103 | +;;; Code: | |
104 | + | |
105 | + | |
106 | +;; Added by L Borgman: | |
107 | +(require 'font-lock) | |
108 | + | |
109 | +;; (replace-regexp "[\t ]+$" "") | |
110 | + | |
111 | +(defconst cmd-mode-revision-number "1.4" "cmd-mode.el version number.") | |
112 | + | |
113 | +;;; *** メニューバー | |
114 | +;;; *** menu bar | |
115 | +(defvar cmd-menu-bar (make-sparse-keymap "cmd-mode-menu") | |
116 | + ;; "メニュー" | |
117 | + "Menu bar entry.") | |
118 | +(defvar cmd-submenu-jump (make-sparse-keymap "cmd-mode-submenu-jump") | |
119 | + ;; "ポップアップメニュー(ジャンプ)" | |
120 | + "Popup menu for jump.") | |
121 | + | |
122 | +;;; *** hook | |
123 | +(defvar cmd-mode-hook nil | |
124 | + ;; "cmd-modeを作成するタイミングで呼ばれる hook です。" | |
125 | + "Hook called when `cmd-mode' is entered.") | |
126 | +(defvar cmd-help-mode-hook nil | |
127 | + ;; "cmd-help-modeを作成するタイミングで呼ばれる hook です。" | |
128 | + "Hook called when `cmd-help-mode' is entered.") | |
129 | + | |
130 | +;;; *** 外部コマンド | |
131 | +;;; *** External command | |
132 | +(defvar cmd-help-command "help" | |
133 | + ;; "helpコマンドのコマンド名。Windows NT系以外には存在しません。" | |
134 | + "Name of `help' command. It exists only on Windows NT.") | |
135 | + | |
136 | +;;; *** buffer関係 | |
137 | +;;; *** Buffer related things. | |
138 | +(defvar cmd-temp-buf " *cmd-temp-buf*" | |
139 | + ;; "作業用の隠しバッファ" | |
140 | + "Hidden buffer for work.") | |
141 | +(defvar cmd-help-buf-base-name "*cmd-help " | |
142 | + ;; "ヘルプバッファのベース名" | |
143 | + "Base name of help buffer.") | |
144 | + | |
145 | +;;; *** regexp | |
146 | +(defvar cmd-full-size-space-etc-pattern "\\( +\\)" | |
147 | + ;; "所謂「全角の空白」の正規表現" | |
148 | + "Regular expression for fullwidth space sequence.") | |
149 | +(defvar cmd-tab-pattern "\\(\t+\\)" | |
150 | + ;; "TAB文字の正規表現" | |
151 | + "Regular expression for TAB character sequence.") | |
152 | +(defvar cmd-comment-pattern "^[ \t]*\\(@*\\)\\(rem\\)\\([\t ].*$\\|$\\)" | |
153 | + ;; "コメント行の正規表現" | |
154 | + "Regular expression for a comment line.") | |
155 | +(defvar cmd-variable-pattern | |
156 | + (concat "\\(" | |
157 | + "%\\(" ;最初の文字が% the first char is `%' | |
158 | + "\\*" ;%* の場合 in case of "%*" | |
159 | + "\\|" | |
160 | + "~[^0-9 \n]+[0-9a-z]" ;~f1 等 e.g. ~f1 | |
161 | + "\\|" | |
162 | + "[0-9a-z]\\b" ;%1 等 e.g. %1 | |
163 | + "\\|" | |
164 | + "[^%\n -龠]+%" ;通常の環境変数 normal env. var. | |
165 | + "\\|" | |
166 | + "%[0-9a-z]" ;%% 等 e.g. %$ | |
167 | + "\\)" | |
168 | + "\\)") | |
169 | +;; "環境変数の展開の正規表現 | |
170 | + | |
171 | +;; 想定しているパターンは以下の通りです。 | |
172 | + | |
173 | +;; 例 意味 | |
174 | +;; ----------- ----------------------- | |
175 | +;; %* すべての引数を参照する | |
176 | +;; %~fi, %~dp1 バッチパラメータ(%n)及びFOR変数参照の置換 | |
177 | +;; %文字列% 通常の環境変数の参照 | |
178 | +;; %1, %i バッチパラメータ(%n)及びFOR変数参照 | |
179 | +;; %%, %%1, %%i %そのもの、バッチパラメータ(%n)及びFOR変数参照(バッチ | |
180 | +;; ファイル内で使用した場合)" | |
181 | + "Regular expression for expanding an environment variable. | |
182 | + | |
183 | +The following patterns are concerned. | |
184 | + | |
185 | +example meaning | |
186 | +------- ------- | |
187 | +%* refer to all of the arguments | |
188 | +%~f1, %~dp1 replacement for batch parameter (%n) and FOR variable reference | |
189 | +%STRING% normal reference of an environment variable | |
190 | +%1, %i batch parameter (%n) and FOR variable reference | |
191 | +%%, %%1, %%i % itself, batch parameter (%n) and FOR variable reference | |
192 | + (when used in a batch file)" | |
193 | +) | |
194 | +(defvar cmd-const-pattern | |
195 | + "\\(^[ \t]*@\\|nul\\|:eof\\|&&\\||\\|\\^\\|&[12]?\\|[,;]\\)" | |
196 | + ;; "条件付き処理記号等の正規表現" | |
197 | + "Regular expression for conditional symbols.") | |
198 | +(defvar cmd-set-pattern | |
199 | + (concat "\\b" | |
200 | + "\\(set\\b\\)\\([ \t]+/a\\)*" | |
201 | + "\\(\\([ \t]+[_A-Za-z-][_A-Za-z0-9-]*\\)*\\)" | |
202 | + "\\([-+/\\*]\\|\\W\\)*") | |
203 | + ;; "SETコマンドの正規表現" | |
204 | + "Regular expression for SET command.") | |
205 | +(defvar cmd-label-pattern "^[ \t]*\\(:[:A-Za-z0-9_-]+\\)" | |
206 | + ;; "ラベルの正規表現" | |
207 | + "Regular expression for a label.") | |
208 | +(defvar cmd-redirect-pattern | |
209 | + (concat "\\(" | |
210 | + "[12]?>>?" ;1> 2> 1>> 2>> > >> | |
211 | + "\\|" | |
212 | + "<[12]?" ;<1 <2 < | |
213 | + "\\|" | |
214 | + "2>&1" | |
215 | + "\\|" | |
216 | + "1>&2" | |
217 | + "\\)") | |
218 | + ;; "リダイレクトの正規表現" | |
219 | + "Regular expression for redirection.") | |
220 | +(defvar cmd-option-pattern | |
221 | + (concat "\\b" | |
222 | + (regexp-opt | |
223 | + '( | |
224 | + ;; if | |
225 | + "not" "exist" "defined" "errorlevel" "cmdextversion" | |
226 | + "equ" "neq" "lss" "leq" "gtr" "geq" | |
227 | + ;; for | |
228 | + "eol" "skip" "delims" "tokens" "in" "do") t) "\\b") | |
229 | + ;; "IF文等のオプションの正規表現" | |
230 | + "Regular expression for options to a statement like IF.") | |
231 | +(defvar cmd-command-pattern | |
232 | + (concat "\\b" | |
233 | + (regexp-opt '("assoc" "break" "call" "cd" "chdir" "cls" | |
234 | + "color" "copy" "date" "del" "dir" "echo" | |
235 | + "echo." "endlocal" "erase" "exit" "for" | |
236 | + "ftype" "goto" "if" "md" "mkdir" "move" "path" | |
237 | + "pause" "popd" "prompt" "pushd" "rd" "ren" | |
238 | + "rename" "rmdir" "setlocal" "shift" "start" | |
239 | + "time" "title" "type" "ver" "verify" "vol" ) | |
240 | + t) "\\b") | |
241 | +;; "コマンドの正規表現 | |
242 | + | |
243 | +;; コマンドは内部コマンドのみです。Windows NTのHELPコマンドで一覧表示され | |
244 | +;; るコマンドから、外部コマンド(*.exe, *.com)を除いたものです。但し、SET | |
245 | +;; と REM は他で定義していますので、ここでは除いています。また、ECHO は | |
246 | +;; ECHO. も含めています" | |
247 | + | |
248 | + "Regular expression for internal commands. | |
249 | + | |
250 | +Only internal commands. Actually they are commands listed by | |
251 | +HELP command of Windows NT (such external commands as *.ext and | |
252 | +*.com are excluded). SET and REM are also excluded because they | |
253 | +are defined in the other place. As for ECHO, ECHO. is included | |
254 | +too.") | |
255 | + | |
256 | +;; font-lockの設定 | |
257 | +;; Setting for font-lock. | |
258 | +(defvar cmd-font-lock-keywords | |
259 | + (list | |
260 | + ;; コメント | |
261 | + ;; command | |
262 | + (list cmd-comment-pattern | |
263 | + '(1 font-lock-constant-face) ;行頭の@ @ at bol | |
264 | + '(2 font-lock-keyword-face) ;rem | |
265 | + '(3 font-lock-comment-face) ;コメント文字 command character | |
266 | + ) | |
267 | + ;; SET | |
268 | + (list cmd-set-pattern | |
269 | + '(1 font-lock-keyword-face) ;SET | |
270 | + '(3 font-lock-type-face) ;環境変数名 name of env. var. | |
271 | + ) | |
272 | + ;; ラベル | |
273 | + ;; label | |
274 | + (list cmd-label-pattern | |
275 | + '(1 (cons font-lock-function-name-face '(underline)))) | |
276 | + ;; リダイレクト記号 | |
277 | + ;; redirect symbol | |
278 | + (list cmd-redirect-pattern 1 font-lock-warning-face) | |
279 | + ;; 環境変数の参照 | |
280 | + ;; reference of environment variable | |
281 | + (list cmd-variable-pattern 1 font-lock-variable-name-face) | |
282 | + ;; 内部コマンド | |
283 | + ;; internal command | |
284 | + (list cmd-command-pattern 1 font-lock-keyword-face) | |
285 | + ;;条件付き処理記号等 | |
286 | + ;; e.g. conditional symbols | |
287 | + (list cmd-const-pattern 1 font-lock-constant-face) | |
288 | + ;; IF文とFOR文のオプション等 | |
289 | + ;; e.g. options of IF and FOR | |
290 | + (list cmd-option-pattern 1 font-lock-builtin-face) | |
291 | + ;; 全角スペース | |
292 | + ;; fullwidth space | |
293 | + (list cmd-full-size-space-etc-pattern '(1 '(underline))) | |
294 | + ;; TAB文字 | |
295 | + ;; TAB character | |
296 | + (list cmd-tab-pattern '(1 '(highlight))) | |
297 | + ) | |
298 | +;; "cmd-mode, cmd-help-modeで使用するfont-lockの設定です。 | |
299 | +;; 詳細はfont-lock-defaultsを参照してください。" | |
300 | + "Setting for font-lock used in `cmd-mode' and `cmd-help-mode'. | |
301 | +See `font-lock-defaults' for detail.") | |
302 | + | |
303 | +(defun cmd-mode-version () | |
304 | + ;; "cmd-modeのVersion表示" | |
305 | + "Show the version of `cmd-mode'." | |
306 | + (interactive) | |
307 | + (message | |
308 | + (concat "cmd-mode version " cmd-mode-revision-number))) | |
309 | + | |
310 | +(defun cmd-help (arg) | |
311 | +;; "helpコマンドを実行して、結果を表示します。 | |
312 | +;; この関数は、Windows NT系以外では、動作しません。 | |
313 | + | |
314 | +;; ※Windows \\(9[58]\\|Me\\)でも動作するように作ったつもりだったんですが、 | |
315 | +;; 見事に動作しません。" | |
316 | + "Execute help command and show the result. | |
317 | +This functinos works only on Windows NT. | |
318 | + | |
319 | +Implementers note: I intended that this work also on Windows | |
320 | +\\(9[58]\\|Me\\), but actually failed. | |
321 | +Argument ARG is the command to describe." | |
322 | + (interactive | |
323 | + (list (let* ((command (current-word)) | |
324 | + (input (read-string | |
325 | + (format "Help for command%s: " ;; "コマンド%s: " | |
326 | + (if (string-equal command "") | |
327 | + "" | |
328 | + (format " (%s)" command)))))) | |
329 | + (if (string-equal input "") | |
330 | + (if (string-equal command "") | |
331 | + "help" | |
332 | + command) | |
333 | + input)))) | |
334 | + | |
335 | + (let* ((case-fold-search t) | |
336 | + (cmd-help-buffer (format "%s%s*" | |
337 | + cmd-help-buf-base-name (downcase arg))) | |
338 | + (comspec (getenv "ComSpec")) | |
339 | + (cmd-help-arg | |
340 | + (cond | |
341 | + ((string-match "cmd\\.exe$" comspec) | |
342 | + (list "\\/c" cmd-help-command | |
343 | + (if (string-equal arg "help") "" arg))) | |
344 | + ((string-match "command\\.com$" comspec) | |
345 | + (if (string-equal arg "help") | |
346 | + (error "Insert command" ;; "コマンドを入力してください" | |
347 | + ) | |
348 | + (list "\\/c" arg "\\/?"))) | |
349 | + (t | |
350 | + (error (concat "Work only on WindowsXX ComSpec=" | |
351 | + ;;"WindowsXX以外では動作しません ComSpec=" | |
352 | + comspec))))) | |
353 | + ) | |
354 | + (set-buffer (get-buffer-create cmd-help-buffer)) | |
355 | + (setq buffer-read-only nil) | |
356 | + (erase-buffer) | |
357 | + (apply (function call-process) comspec nil t nil cmd-help-arg) | |
358 | + (goto-char (point-min)) | |
359 | + (display-buffer cmd-help-buffer) | |
360 | + (cmd-help-mode) | |
361 | + )) | |
362 | + | |
363 | +(defun cmd-help-mode-exit () | |
364 | + ;; "cmd-help-modeを終了します。" | |
365 | + "Terminate `cmd-help-mode'." | |
366 | + (interactive) | |
367 | + (if (eq major-mode 'cmd-help-mode) | |
368 | + (kill-buffer (current-buffer))) | |
369 | + ) | |
370 | + | |
371 | +(defun cmd-help-mode () | |
372 | +;; "cmd-helpから呼び出されます。 | |
373 | + | |
374 | +;; ●ヘルプコマンドを実行し、結果を表示します。 | |
375 | +;; \\[cmd-help] | |
376 | + | |
377 | +;; ●cmd-help-modeを終了します。 | |
378 | +;; \\[cmd-help-mode-exit]" | |
379 | + | |
380 | + "Mode for `cmd-help'. | |
381 | + | |
382 | +o Execute help command and show the result. | |
383 | + \\[cmd-help] | |
384 | + | |
385 | +o Terminate `cmd-help-mode'. | |
386 | + \\[cmd-help-mode-exit]" | |
387 | + (interactive) | |
388 | + (kill-all-local-variables) | |
389 | + ;;モード名の設定と、モードラインのモード名フィールドの設定 | |
390 | + ;; Setting the mode name and the mode-name field of the mode-line. | |
391 | + (setq major-mode 'cmd-help-mode | |
392 | + mode-name "cmd-help" | |
393 | + buffer-auto-save-file-name nil ;自動保存しない suppresss auto saving | |
394 | + buffer-read-only t ;読み込み専用 for read only | |
395 | + ) | |
396 | + ;; キーマップの設定 | |
397 | + ;; Setting keymap. | |
398 | + (setq cmd-help-local-map (make-keymap)) | |
399 | + ;; キーの割り当て | |
400 | + ;; Assigning keys | |
401 | + (define-key cmd-help-local-map "\C-ch" 'cmd-help) | |
402 | + (define-key cmd-help-local-map "\C-m" 'cmd-help) | |
403 | + (define-key cmd-help-local-map " " 'cmd-help) | |
404 | + (define-key cmd-help-local-map "q" 'cmd-help-mode-exit) | |
405 | + (define-key cmd-help-local-map "Q" 'cmd-help-mode-exit) | |
406 | + (define-key cmd-help-local-map "n" 'next-line) | |
407 | + (define-key cmd-help-local-map "p" 'previous-line) | |
408 | + | |
409 | + ;; ローカルマップの使用宣言 | |
410 | + ;; Declare to use of the local map | |
411 | + (use-local-map cmd-help-local-map) | |
412 | + | |
413 | + ;; フォントロックの設定 | |
414 | + ;; Setting for font-lock | |
415 | + (make-local-variable 'font-lock-defaults) | |
416 | + (setq font-lock-defaults | |
417 | + '((cmd-font-lock-keywords) t t)) | |
418 | + (font-lock-mode t) | |
419 | + | |
420 | + (run-hooks 'cmd-help-mode-hook) | |
421 | + ) | |
422 | + | |
423 | +(defun cmd-right-trim-region (start end) | |
424 | + ;; "リージョンで指定された範囲の行末の空白文字を削除します。" | |
425 | + "Delete space characters at the end of line of the specified region. | |
426 | +Region is between START and END." | |
427 | + (interactive "r") | |
428 | + (save-excursion | |
429 | + (goto-char start) | |
430 | + (while (re-search-forward "[\t ]+$" end t) | |
431 | + (replace-match "")))) | |
432 | + | |
433 | +(defun cmd-exec () | |
434 | +;; "バッファの内容を(必要であれば)ファイルに保存し、保存したファイル | |
435 | +;; を実行する。かなり手抜きをしています。" | |
436 | + | |
437 | + "Save the buffer (if necessary) and execute it. | |
438 | +corner-cutting work." | |
439 | + (interactive) | |
440 | + (save-buffer) | |
441 | + (shell-command (buffer-file-name)) | |
442 | + ) | |
443 | + | |
444 | +(defun cmd-recenter () | |
445 | + ;; "カレント位置を中央に配置した後、余分な行末のスペースを削除する" | |
446 | + "Set the point to the center, and delete extra spaces at the end of line." | |
447 | + (interactive) | |
448 | + (recenter) | |
449 | + (cmd-right-trim-region (point-min) (point-max))) | |
450 | + | |
451 | +(defun cmd-next-label () | |
452 | + ;; "次のラベルへ跳ぶ" | |
453 | + "Jump to the next label." | |
454 | + (interactive) | |
455 | + (if (re-search-forward cmd-label-pattern nil t) | |
456 | + (goto-char (match-end 0)))) | |
457 | +(defun cmd-prev-label () | |
458 | + ;; "前のラベルへ跳ぶ" | |
459 | + "Jump to the previous label." | |
460 | + (interactive) | |
461 | + (if (re-search-backward cmd-label-pattern nil t) | |
462 | + (goto-char (match-beginning 0)))) | |
463 | + | |
464 | +(defun cmd-fill-paragraph () | |
465 | +;; "コメント行等の行詰めを行います。かなり手抜きをしています(こんな事を | |
466 | +;; して良いのだろうか)。" | |
467 | + | |
468 | + "Fill comment lines. | |
469 | +Fairly corner-cutting (is it allowed to do this kind of thing?)." | |
470 | + (interactive) | |
471 | + (save-excursion | |
472 | + (let (;;大文字・小文字を区別しない | |
473 | + ;;Ignore case | |
474 | + (case-fold-search t) | |
475 | + (cmd-rem-regexp | |
476 | + "\\([\t ]*@?\\(rem\\|echo\\)\\)\\([ \t].*$\\|$\\)") | |
477 | + rem-begin | |
478 | + rem-end | |
479 | + rem-paragraph | |
480 | + match-str | |
481 | + (cmd-fill-column fill-column) | |
482 | + (current-buffer (buffer-name)) | |
483 | + ) | |
484 | + (beginning-of-line) | |
485 | + (if (looking-at cmd-rem-regexp) | |
486 | + (progn | |
487 | + (setq match-str (buffer-substring | |
488 | + (match-beginning 1) (match-end 1)) | |
489 | + rem-begin (point)) | |
490 | + (message ;; "cmd-fill-paragraph【%s】" | |
491 | + "cmd-fill-paragraph [%s]" match-str) | |
492 | + (while (not (bobp)) | |
493 | + (forward-line -1) | |
494 | + (if (looking-at (concat match-str "\\([\t ]\\|$\\)")) | |
495 | + (setq rem-begin (point)) | |
496 | + (goto-char (point-min)))) | |
497 | + | |
498 | + (goto-char rem-begin) | |
499 | + (setq cmd-rem-regexp | |
500 | + (concat "\\(" | |
501 | + "\\(^" match-str "[^\n]*\n\\)+" | |
502 | + "\\(^" match-str "[^\n]*\\)?\\|" | |
503 | + "^" match-str ".*$\\)")) | |
504 | + (if (looking-at cmd-rem-regexp) | |
505 | + (progn | |
506 | + (setq rem-end (match-end 0) | |
507 | + rem-paragraph (buffer-substring rem-begin rem-end)) | |
508 | + (set-buffer (get-buffer-create cmd-temp-buf)) | |
509 | + (erase-buffer) | |
510 | + (insert rem-paragraph) | |
511 | + (indented-text-mode) | |
512 | + | |
513 | + (goto-char (point-min)) | |
514 | + (while (re-search-forward | |
515 | + (concat "^" match-str " ?") nil t) | |
516 | + (replace-match "")) | |
517 | + | |
518 | + (setq fill-column (- cmd-fill-column (length match-str))) | |
519 | + (goto-char (point-min)) | |
520 | + (while (not (eobp)) | |
521 | + (fill-paragraph nil) | |
522 | + (forward-paragraph)) | |
523 | + | |
524 | + (goto-char (point-min)) | |
525 | + (while (not (eobp)) | |
526 | + (beginning-of-line) | |
527 | + (insert (concat match-str | |
528 | + (if (looking-at "$") "" " "))) | |
529 | + (beginning-of-line) | |
530 | + (if (looking-at "[ \t]*@?echo$") | |
531 | + (progn | |
532 | + (end-of-line); | |
533 | + (insert "."))) | |
534 | + (forward-line 1)) | |
535 | + | |
536 | + (goto-char (point-max)) | |
537 | + (beginning-of-line) | |
538 | + (if (looking-at (concat match-str "$")) | |
539 | + (replace-match "")) | |
540 | + | |
541 | + (cmd-right-trim-region (point-min) (point-max)) | |
542 | + | |
543 | + (setq rem-paragraph | |
544 | + (buffer-substring (point-min) (point-max))) | |
545 | + (kill-buffer cmd-temp-buf) | |
546 | + (set-buffer current-buffer) | |
547 | + (delete-region rem-begin rem-end) | |
548 | + (insert rem-paragraph) | |
549 | + (message "done.") | |
550 | + ) | |
551 | + (progn | |
552 | + (ding) | |
553 | + (error ;; "cmd-fill-paragraph【バグでしょう】" | |
554 | + "cmd-fill-paragraph [seems like a bug]"))) | |
555 | + ) | |
556 | + (message | |
557 | + ;;"cmd-fill-paragraph: 行頭が REM 又は ECHO ではありません" | |
558 | + "cmd-fill-paragraph: The line doesn't start with REM nor ECHO.") | |
559 | + ) | |
560 | + ) | |
561 | + ) | |
562 | + ) | |
563 | + | |
564 | +(defun cmd-goto-label () | |
565 | +;; "指定したラベルへジャンプします。 | |
566 | + | |
567 | +;; ラベルはミニバッファから補完入力できます。ミニバッファには、現在のカー | |
568 | +;; ソルの下の文字列がデフォルト表示されます。(既存のラベルの何れかに一致 | |
569 | +;; する場合)" | |
570 | + | |
571 | + "Jump to the specified label. | |
572 | + | |
573 | +Label can be completed at the mini-buffer. A word at the cursor | |
574 | +position is shown as default (if it matches one of existing | |
575 | +labels)." | |
576 | + (interactive) | |
577 | + (let ((label-alist '()) | |
578 | + (label nil)) | |
579 | + (save-excursion | |
580 | + (goto-char (point-min)) | |
581 | + (while (re-search-forward | |
582 | + "^[ \t]*:\\([:A-Za-z0-9_-]+\\)\\([\t ]\\|$\\)" nil t) | |
583 | + (setq label-alist (cons (list (buffer-substring (match-beginning 1) | |
584 | + (match-end 1))) | |
585 | + label-alist)))) | |
586 | + (if (not label-alist) | |
587 | + (error ;; "ラベルが見つかりません" | |
588 | + "No label found")) | |
589 | + (setq label (completing-read "Label:" label-alist nil t | |
590 | + (if (assoc (current-word) label-alist) | |
591 | + (current-word) ""))) | |
592 | + (when (and label (not (string= label ""))) | |
593 | + (push-mark (point)) ;マークを付ける Set mark | |
594 | + (goto-char (point-min)) | |
595 | + (re-search-forward (concat "^[\t ]*:" label "\\([ \t]\\|$\\)")) | |
596 | + ) | |
597 | + ) | |
598 | + ) | |
599 | + | |
600 | +(defun cmd-mode () | |
601 | +;; "MS-DOSのバッチファイルやWindows NT のコマンドスクリプトファイルを編 | |
602 | +;; 集する為のへなちゃこもーどです。 | |
603 | + | |
604 | +;; ●バッファを保存後、保存したファイルを実行する | |
605 | +;; \\[cmd-exec] | |
606 | + | |
607 | +;; ●コマンドのヘルプを表示する。 | |
608 | +;; \\[cmd-help] | |
609 | + | |
610 | +;; ●指定したラベルへジャンプ | |
611 | +;; \\[cmd-goto-label] | |
612 | + | |
613 | +;; ●現在のカーソル位置を画面の中央に配置し、行末の余分な空白文字を削除 | |
614 | +;; する。 | |
615 | +;; \\[cmd-recenter] | |
616 | + | |
617 | +;; ●コメント行等(REM or ECHO)の行詰めを行なう。 | |
618 | +;; \\[cmd-fill-paragraph] | |
619 | + | |
620 | +;; ●前のラベルへ | |
621 | +;; \\[cmd-prev-label] | |
622 | + | |
623 | +;; ●次のラベルへ | |
624 | +;; \\[cmd-next-label]" | |
625 | + | |
626 | + "Tiny mode for editing batch files (MS-DOS) and command scripts (Windows NT). | |
627 | + | |
628 | +* Save buffer and execute it. | |
629 | + | |
630 | + \\[cmd-exec] | |
631 | + | |
632 | +* Show help of a command. | |
633 | + \\[cmd-help] | |
634 | + | |
635 | +* Jump to the specified label. | |
636 | + \\[cmd-goto-label] | |
637 | + | |
638 | +* Set the point to the center, and delete extra spaces at the end | |
639 | + of line. | |
640 | + \\[cmd-recenter] | |
641 | + | |
642 | +* Fill comment lines (e.g REM, ECHO). | |
643 | + \\[cmd-fill-paragraph] | |
644 | + | |
645 | +* Jump to the previous label. | |
646 | + \\[cmd-prev-label] | |
647 | + | |
648 | +* Jump to the next label. | |
649 | + \\[cmd-next-label]" | |
650 | + (interactive) | |
651 | + (kill-all-local-variables) | |
652 | + ;;モード名の設定と、モードラインのモード名フィールドの設定 | |
653 | + ;; Setting the mode name and the mode-name field of the mode-line. | |
654 | + (setq major-mode 'cmd-mode | |
655 | + ;;mode-name "CMDとBAT") | |
656 | + mode-name "CMD") | |
657 | + ;; キーマップの設定 | |
658 | + ;; Setting keymap. | |
659 | + (setq cmd-local-map (make-keymap)) | |
660 | + ;; キーの割り当て | |
661 | + ;; Assigning keys | |
662 | + (define-key cmd-local-map "\C-c\C-c" 'cmd-exec) | |
663 | + (define-key cmd-local-map "\C-cg" 'cmd-goto-label) | |
664 | + (define-key cmd-local-map "\C-ch" 'cmd-help) | |
665 | + (define-key cmd-local-map "\C-l" 'cmd-recenter) | |
666 | + ;;(define-key cmd-local-map "\eq" 'cmd-fill-paragraph) | |
667 | + (define-key cmd-local-map "\M-q" 'cmd-fill-paragraph) | |
668 | + ;;(define-key cmd-local-map "\e\C-a" 'cmd-prev-label) | |
669 | + (define-key cmd-local-map "\M-\C-a" 'cmd-prev-label) | |
670 | + ;;(define-key cmd-local-map "\e\C-e" 'cmd-next-label) | |
671 | + (define-key cmd-local-map "\M-\C-e" 'cmd-next-label) | |
672 | + | |
673 | + ;; メニューバーの作成 | |
674 | + ;; Create the menu bar. | |
675 | + (define-key cmd-submenu-jump [sub-goto-label] | |
676 | + '(;; "任意のラベル..." | |
677 | + "Specified label" . cmd-goto-label)) | |
678 | + (define-key cmd-submenu-jump [sub-next-label] | |
679 | + '(;; "次のラベル" | |
680 | + "Next label" . cmd-next-label)) | |
681 | + (define-key cmd-submenu-jump [sub-prev-label] | |
682 | + '(;; "前のラベル" | |
683 | + "Previous label" . cmd-prev-label)) | |
684 | + | |
685 | + (define-key cmd-local-map [menu-bar cmd] (cons mode-name cmd-menu-bar)) | |
686 | + (define-key cmd-menu-bar [submenu-jump] (cons "Jump" ;; "ジャンプ" | |
687 | + cmd-submenu-jump)) | |
688 | + (define-key cmd-menu-bar [sep-1] '("--")) | |
689 | + (define-key cmd-menu-bar [help] '("Help" ;; "ヘルプ..." | |
690 | + . cmd-help)) | |
691 | + (define-key cmd-menu-bar [sep-2] '("--")) | |
692 | + (define-key cmd-menu-bar [recenter] '("Delete trailing spaces" | |
693 | + ;; "行末の空白文字削除" | |
694 | + . cmd-recenter)) | |
695 | + (define-key cmd-menu-bar [fill] '("Fill comments" ;; "コメントの行詰め" | |
696 | + . cmd-fill-paragraph)) | |
697 | + (define-key cmd-menu-bar [exec] '("実行" . cmd-exec)) | |
698 | + | |
699 | + ;; ローカルマップの使用宣言 | |
700 | + ;; Declare to use of the local map | |
701 | + (use-local-map cmd-local-map) | |
702 | + | |
703 | + ;; font-lockの設定 | |
704 | + ;; Setting for font-lock. | |
705 | + (make-local-variable 'font-lock-defaults) | |
706 | + (setq font-lock-defaults | |
707 | + '((cmd-font-lock-keywords) t t)) | |
708 | + (font-lock-mode t) | |
709 | + | |
710 | + (run-hooks 'cmd-mode-hook) | |
711 | +) | |
712 | + | |
713 | +;; Added by L Borgman | |
714 | +(provide 'cmd-mode) | |
715 | + | |
716 | +;;; cmd-mode.el ends here | |
717 | + | |
718 | +;;; | |
719 | +;;; Local Variables; | |
720 | +;;; coding: shift_jis-dos | |
721 | +;;; mode: Emacs-Lisp | |
722 | +;;; End: |
@@ -1,313 +1,315 @@ | ||
1 | -\def\lang{jp} %-*- mode: texinfo; coding: sjis-dos -*- | |
2 | -\input texinfo | |
3 | -@c $Id: cmd-mode.texinfo,v 1.4 2001/09/11 12:47:43 tfuruka1 Exp $ | |
4 | -@c $Log: cmd-mode.texinfo,v $ | |
5 | -@c Revision 1.4 2001/09/11 12:47:43 tfuruka1 | |
6 | -@c 誤記訂正(まだあるかも・・・) | |
7 | -@c | |
8 | -@c Revision 1.3 2001/09/11 12:40:27 tfuruka1 | |
9 | -@c cmd-goto-label の記述を追加。 | |
10 | -@c | |
11 | -@c Revision 1.2 2001/09/02 04:35:10 tfuruka1 | |
12 | -@c 取りあえず、最低限の事を記述したつもり。 | |
13 | -@c | |
14 | -@c Revision 1.1 2001/08/30 14:06:05 tfuruka1 | |
15 | -@c Initial revision | |
16 | -@c | |
17 | - | |
18 | -@c %**start of header | |
19 | -@setfilename cmd.info | |
20 | -@settitle cmd-mode | |
21 | -@iftex | |
22 | -@afourpaper | |
23 | -@end iftex | |
24 | -@c %**end of header | |
25 | -@setchapternewpage on | |
26 | -@titlepage | |
27 | -@title cmd-mode | |
28 | -@subtitle バッチファイルを編集するへなちょこモード | |
29 | -@subtitle このファイルの $Revision: 1.4 $ | |
30 | -@author tfuruka1@@nifty.com | |
31 | -@author @copyright 2001 by Tadamegu Furukawa | |
32 | -@end titlepage | |
33 | - | |
34 | -@node Top, intro, (dir), (dir) | |
35 | -@comment node-name, next, previous, up | |
36 | - | |
37 | -@ifinfo | |
38 | -infoを書くほどのモードではないのだが・・・因みにこのinfoもへなちょこです。 | |
39 | -@flushright | |
40 | -$Revision: 1.4 $ | |
41 | -@end flushright | |
42 | -@end ifinfo | |
43 | - | |
44 | -@menu | |
45 | -* Intro:: はじめに | |
46 | -* Outline:: 概要 | |
47 | -* Installation:: インストール | |
48 | -* Details:: 詳細な説明 | |
49 | -* Lisp variables:: カスタマイズ変数一覧 | |
50 | -* Copying:: 取り扱い | |
51 | -@end menu | |
52 | - | |
53 | -@node Intro, Outline, top, top | |
54 | -@comment node-name, next, previous, up | |
55 | - | |
56 | -@chapter はじめに | |
57 | - | |
58 | -cmd-modeは、その名の通り、Windows NTのコマンドスクリプトファイル(拡張子 | |
59 | -が@code{cmd})やMS-DOSのバッチファイル(拡張子が@code{BAT})をEmacs上で編集 | |
60 | -するためのメジャーモードです。 | |
61 | - | |
62 | -既に、誰かが作っていると思うのですが、自分では探せなかったので、へなちょ | |
63 | -こなモードを作成しました。自分で使うのが目的だったので、動作確認は、 | |
64 | - | |
65 | -「GNU Emacs 20.7.1/Mule 4.1 (葵)/Meadow-1.14 (AWSAKA:62)」 | |
66 | - | |
67 | -でしか行っていません。また、一部の機能は、環境変数@code{ComSpec}を使用し | |
68 | -ますので、Windowsでしか動作しません。 | |
69 | - | |
70 | -@node Outline, Installation, Intro, top | |
71 | -@comment node-name, next, previous, up | |
72 | -@chapter 概要 | |
73 | - | |
74 | -cmd-modeは、へなちょこなので、大した事はできませんが、以下のような事が出 | |
75 | -来ます。 | |
76 | - | |
77 | -@itemize @bullet | |
78 | -@item | |
79 | -色がつく | |
80 | - | |
81 | -実はこれが、いちばんの目的です。@code{%}が沢山あって、「何処迄が環境変数なの | |
82 | -か判らない」といった事が解消されます(多分)。 | |
83 | - | |
84 | -@item | |
85 | -連続したコメント行の行詰めができる | |
86 | - | |
87 | -目的その2です。ですが、凄い手抜きをして実現しています(こんな事をしても | |
88 | -良いのだろうか)。 | |
89 | - | |
90 | -@item | |
91 | -カーソル位置のコマンドのヘルプを引ける | |
92 | - | |
93 | -おまけです。Windows NT/2000でしか動きません。一応、Windows 95/98/Meでも | |
94 | -動作するように作ったつもりなのですが、見事に動作しませんでした。私は | |
95 | -Windows NTしか使用していないので、ほったらかしにしています@footnote{「俺 | |
96 | -が直してやる」という奇特な方がおられましたら、連絡をください。}。 | |
97 | - | |
98 | -@item | |
99 | -編集中のファイルを実行できる | |
100 | - | |
101 | -おまけその2です。凄い手抜きをしています。 | |
102 | - | |
103 | -@item | |
104 | -その他 | |
105 | - | |
106 | -その他ちまちました機能があるかもしれません。 | |
107 | - | |
108 | -@end itemize | |
109 | - | |
110 | -因みに、この章のタイトルは「概要」ですが、書いている内容は「全て」かもし | |
111 | -れません@code{(^^;)} | |
112 | - | |
113 | -@node Installation, Details, Outline, top | |
114 | -@comment node-name, next, previous, up | |
115 | - | |
116 | -@chapter インストール | |
117 | - | |
118 | -@section cmd-modeのインストール | |
119 | - | |
120 | -@file{~/.emacs}のどこかに、下の2項目を加えます。 | |
121 | - | |
122 | -@lisp | |
123 | -(autoload 'cmd-mode "cmd-mode" "CMD mode." t) | |
124 | -(setq auto-mode-alist (append '(("\\.\\(cmd\\|bat\\)$" . cmd-mode)) | |
125 | - auto-mode-alist)) | |
126 | -@end lisp | |
127 | - | |
128 | -次に@file{cmd-mode.el}をおくディレクトリをload-path に加えるか、 | |
129 | -@file{cmd-mode.el}をload-pathに指定されているディレクトリに置いてくださ | |
130 | -い。 | |
131 | - | |
132 | -以上の設定により、拡張子が @code{.cmd}または@code{.bat}であるファイルを | |
133 | -編集すると自動的にcmd-modeがロードされます。 | |
134 | - | |
135 | -@section infoのインストール | |
136 | - | |
137 | -これが読めているという事は、infoのインストールが終わっているという事のよ | |
138 | -うな気がするのですが・・・ | |
139 | - | |
140 | -@enumerate | |
141 | -@item | |
142 | -cmd.infoファイルを@code{INFOPATH}に設定されているディレクトリにコピーし | |
143 | -てください。 | |
144 | - | |
145 | -@item | |
146 | -そのディレクトリの@file{dir}ファイルに以下の記述を追加してください。 | |
147 | - | |
148 | -@example | |
149 | -* cmd: (cmd.info). へなちょこcmd-modeの説明書 | |
150 | -@end example | |
151 | - | |
152 | -@end enumerate | |
153 | - | |
154 | -@node details, lisp variables, Installation, Top | |
155 | -@comment node-name, next, previous, up | |
156 | -@chapter 詳細 | |
157 | - | |
158 | -この章ではcmd-modeで出来る事の詳細を説明します。 | |
159 | - | |
160 | -@section 色がつく | |
161 | -特に何をするでもなく、拡張子が@file{.cmd},@file{.bat}のファイルを編集す | |
162 | -ると、キーワードに色がつきます。色付けのパターンが気に入らない場合は、 | |
163 | -@xref{lisp variables}の@code{*-pattern}と@code{cmd-font-lock-keywords}を | |
164 | -カスタマイズしてください。 | |
165 | - | |
166 | -@section コメント行の行詰め | |
167 | - | |
168 | -コメント行内にカーソルがある状態で@kbd{M-q}を押下すると、コメント行の行 | |
169 | -詰めを行います。関数名は以下の通りです。 | |
170 | -@defun cmd-fill-paragraph | |
171 | -コメント行等の行詰めを行います。かなり手抜きをしています(こんな事をして | |
172 | -良いのだろうか)。 | |
173 | -@end defun | |
174 | - | |
175 | -@section ヘルプをひく | |
176 | - | |
177 | -@kbd{C-c h}を押下すると、カーソルの下の文字列のヘルプを引く事が出来ます。 | |
178 | -ミニバッファにカーソルの下の文字列がデフォルト表示されますので、そのまま | |
179 | -で良い場合はRETを押下します。その他のヘルプを引く場合は、ミニバッファに | |
180 | -任意のコマンドを入力後、RETを押下します。関数名は以下の通りです。 | |
181 | -@defun cmd-help (arg) | |
182 | -helpコマンドを実行して、結果を表示します。この関数は、Windows NT系以外で | |
183 | -は、動作しません。 | |
184 | - | |
185 | -※Windows \\(9[58]\\|Me\\)でも動作するように作ったつもりだったんですが、 | |
186 | -見事に動作しません。 | |
187 | -@end defun | |
188 | - | |
189 | -@defun cmd-help-mode-exit | |
190 | -@kbd{q}を押下すると、cmd-help-modeを終了します。 | |
191 | -@end defun | |
192 | - | |
193 | -@section その他ちまちました機能 | |
194 | -@defun cmd-mode-version | |
195 | -cmd-modeのVersionを表示します。@kbd{M-x cmd-mode-version} | |
196 | -@end defun | |
197 | - | |
198 | -@defun cmd-exec | |
199 | -@kbd{C-c C-c}を押下すると、バッファの内容を(必要であれば)ファイルに保 | |
200 | -存し、保存したファイルを実行します。かなり手抜きをしています。当然の事な | |
201 | -がら、この機能はWindows係でしか動作しません。 | |
202 | -@end defun | |
203 | - | |
204 | -@defun cmd-recenter | |
205 | -@kbd{C-l}を押下すると、カレント位置を中央に配置した後、余分な(余分と思 | |
206 | -われる)行末のスペースを削除します。 | |
207 | -@end defun | |
208 | - | |
209 | -@defun cmd-next-label | |
210 | -@kbd{M-C-e}で次のラベルへ跳びます。 | |
211 | -@end defun | |
212 | - | |
213 | -@defun cmd-prev-label | |
214 | -@kbd{M-C-a}で前のラベルへ跳びます。 | |
215 | -@end defun | |
216 | - | |
217 | -@defun cmd-goto-label | |
218 | -@kbd{C-c g}で、指定したラベルへジャンプします。ラベルはミニバッファから | |
219 | -補完入力できます。ミニバッファには、現在のカーソルの下の文字列がデフォル | |
220 | -ト表示されます。(既存のラベルの何れかに一致する場合) | |
221 | -@end defun | |
222 | - | |
223 | -@node lisp variables, Copying, details, Top | |
224 | -@comment node-name, next, previous, up | |
225 | -@chapter カスタマイズ変数一覧 | |
226 | - | |
227 | -@defvar cmd-mode-hook | |
228 | -cmd-modeを作成するタイミングで呼ばれる hook です。 | |
229 | -@end defvar | |
230 | - | |
231 | -@defvar cmd-help-mode-hook | |
232 | -cmd-help-modeを作成するタイミングで呼ばれる hook です。 | |
233 | -@end defvar | |
234 | - | |
235 | -@defvar cmd-help-command | |
236 | -helpコマンドのコマンド名。Windows NT系以外には存在しません。 | |
237 | -@end defvar | |
238 | - | |
239 | -@defvar cmd-temp-buf | |
240 | -作業用の隠しバッファ | |
241 | -@end defvar | |
242 | - | |
243 | -@defvar cmd-help-buf-base-name | |
244 | -ヘルプバッファのベース名 | |
245 | -@end defvar | |
246 | - | |
247 | -@defvar cmd-full-size-space-etc-pattern | |
248 | -所謂「全角の空白」の正規表現。 | |
249 | -@end defvar | |
250 | - | |
251 | -@defvar cmd-tab-pattern | |
252 | -TAB文字の正規表現 | |
253 | -@end defvar | |
254 | - | |
255 | -@defvar cmd-comment-pattern | |
256 | -コメント行の正規表現 | |
257 | -@end defvar | |
258 | - | |
259 | -@defvar cmd-variable-pattern | |
260 | -環境変数の展開の正規表現 | |
261 | -@end defvar | |
262 | - | |
263 | -@defvar cmd-const-pattern | |
264 | -条件付き処理記号等のような予約語の正規表現 | |
265 | -@end defvar | |
266 | - | |
267 | -@defvar cmd-set-pattern | |
268 | -SETコマンドの正規表現 | |
269 | -@end defvar | |
270 | - | |
271 | -@defvar cmd-label-pattern | |
272 | -ラベルの正規表現 | |
273 | -@end defvar | |
274 | - | |
275 | -@defvar cmd-redirect-pattern | |
276 | -リダイレクト記号の正規表現 | |
277 | -@end defvar | |
278 | - | |
279 | -@defvar cmd-option-pattern | |
280 | -IF文やFOR文等のオプションの正規表現 | |
281 | -@end defvar | |
282 | - | |
283 | -@defvar cmd-command-pattern | |
284 | -コマンドの正規表現 | |
285 | - | |
286 | -コマンドは内部コマンドのみです。Windows NTのHELPコマンドで一覧表示され | |
287 | -るコマンドから、外部コマンド(*.exe, *.com)を除いたものです。但し、SET | |
288 | -と REM は他で定義していますので、ここでは除いています。また、ECHO は | |
289 | -ECHO. も含めています | |
290 | -@end defvar | |
291 | - | |
292 | -@defvar cmd-font-lock-keywords | |
293 | -cmd-mode, cmd-help-modeで使用するfont-lockの設定です。 | |
294 | -詳細はemacsのfont-lock-defaultsを参照してください。 | |
295 | - | |
296 | -@code{*-pattern}の値を変更した場合、この値も合わせて変更しなければならな | |
297 | -い事もあります。 | |
298 | -@end defvar | |
299 | - | |
300 | -@node Copying, , lisp variables, Top | |
301 | -@comment node-name, next, previous, up | |
302 | -@chapter 取り扱い | |
303 | - | |
304 | -本プログラムはフリーソフトウェアです。本プログラムを使用して生じたいかな | |
305 | -る結果に対しても作者は責任を負わないこととします。 | |
306 | - | |
307 | -質問、苦情、バグ報告、改良案等は、以下のメールアドレスへお願いします。 | |
308 | -@flushright | |
309 | -Tadamegu Furukawa <tfuruka1@@nifty.com> | |
310 | -@end flushright | |
311 | - | |
312 | -@contents | |
313 | -@bye | |
1 | +\def\lang{jp} %-*- mode: texinfo; coding: sjis-dos -*- | |
2 | +\input texinfo | |
3 | +@c $Id: cmd-mode.texinfo,v 1.4 2001/09/11 12:47:43 tfuruka1 Exp $ | |
4 | +@c $Log: cmd-mode.texinfo,v $ | |
5 | +@c Revision 1.4 2001/09/11 12:47:43 tfuruka1 | |
6 | +@c 誤記訂正(まだあるかも・・・) | |
7 | +@c | |
8 | +@c Revision 1.3 2001/09/11 12:40:27 tfuruka1 | |
9 | +@c cmd-goto-label の記述を追加。 | |
10 | +@c | |
11 | +@c Revision 1.2 2001/09/02 04:35:10 tfuruka1 | |
12 | +@c 取りあえず、最低限の事を記述したつもり。 | |
13 | +@c | |
14 | +@c Revision 1.1 2001/08/30 14:06:05 tfuruka1 | |
15 | +@c Initial revision | |
16 | +@c | |
17 | + | |
18 | +@c %**start of header | |
19 | +@setfilename cmd-mode.info | |
20 | +@settitle cmd-mode | |
21 | +@iftex | |
22 | +@afourpaper | |
23 | +@end iftex | |
24 | +@c %**end of header | |
25 | +@setchapternewpage on | |
26 | +@titlepage | |
27 | +@title cmd-mode | |
28 | +@subtitle バッチファイルを編集するへなちょこモード | |
29 | +@subtitle Revision: 1.4 | |
30 | +@author tfuruka1(at)nifty.com | |
31 | +@author @copyright 2001 by Tadamegu Furukawa | |
32 | +@end titlepage | |
33 | + | |
34 | +@node Top, intro, (dir), (dir) | |
35 | +@comment node-name, next, previous, up | |
36 | + | |
37 | +@ifinfo | |
38 | +infoを書くほどのモードではないのだが・・・因みにこのinfoもへなちょこです。 | |
39 | +@flushright | |
40 | +Revision: 1.4 | |
41 | +@end flushright | |
42 | +@end ifinfo | |
43 | + | |
44 | +@menu | |
45 | +* Intro:: はじめに | |
46 | +* Outline:: 概要 | |
47 | +* Installation:: インストール | |
48 | +* Details:: 詳細な説明 | |
49 | +* Lisp variables:: カスタマイズ変数一覧 | |
50 | +* Copying:: 取り扱い | |
51 | +@end menu | |
52 | + | |
53 | +@node Intro, Outline, top, top | |
54 | +@comment node-name, next, previous, up | |
55 | + | |
56 | +@chapter はじめに | |
57 | + | |
58 | +cmd-modeは、その名の通り、Windows NTのコマンドスクリプトファイル(拡張子 | |
59 | +が@code{cmd})やMS-DOSのバッチファイル(拡張子が@code{BAT})をEmacs上で編集 | |
60 | +するためのメジャーモードです。 | |
61 | + | |
62 | +既に、誰かが作っていると思うのですが、自分では探せなかったので、へなちょ | |
63 | +こなモードを作成しました。自分で使うのが目的だったので、動作確認は、 | |
64 | + | |
65 | +「GNU Emacs 20.7.1/Mule 4.1 (葵)/Meadow-1.14 (AWSAKA:62)」 | |
66 | + | |
67 | +でしか行っていません(2012.8.26追記 「GNU Emacs 24.1.1」での動作を確認済 | |
68 | +み)。また、一部の機能は、環境変数@code{ComSpec}を使用しますので、 | |
69 | +Windowsでしか動作しません。 | |
70 | + | |
71 | +@node Outline, Installation, Intro, top | |
72 | +@comment node-name, next, previous, up | |
73 | +@chapter 概要 | |
74 | + | |
75 | +cmd-modeは、へなちょこなので、大した事はできませんが、以下のような事が出 | |
76 | +来ます。 | |
77 | + | |
78 | +@itemize @bullet | |
79 | +@item | |
80 | +色がつく | |
81 | + | |
82 | +実はこれが、いちばんの目的です。@code{%}が沢山あって、「何処迄が環境変数なの | |
83 | +か判らない」といった事が解消されます(多分)。 | |
84 | + | |
85 | +@item | |
86 | +連続したコメント行の行詰めができる | |
87 | + | |
88 | +目的その2です。ですが、凄い手抜きをして実現しています(こんな事をしても | |
89 | +良いのだろうか)。 | |
90 | + | |
91 | +@item | |
92 | +カーソル位置のコマンドのヘルプを引ける | |
93 | + | |
94 | +おまけです。Windows NT/2000でしか動きません。一応、Windows 95/98/Meでも | |
95 | +動作するように作ったつもりなのですが、見事に動作しませんでした。私は | |
96 | +Windows NTしか使用していないので、ほったらかしにしています@footnote{「俺 | |
97 | +が直してやる」という奇特な方がおられましたら、連絡をください。}。 | |
98 | + | |
99 | +@item | |
100 | +編集中のファイルを実行できる | |
101 | + | |
102 | +おまけその2です。凄い手抜きをしています。 | |
103 | + | |
104 | +@item | |
105 | +その他 | |
106 | + | |
107 | +その他ちまちました機能があるかもしれません。 | |
108 | + | |
109 | +@end itemize | |
110 | + | |
111 | +因みに、この章のタイトルは「概要」ですが、書いている内容は「全て」かもし | |
112 | +れません@code{(^^;)} | |
113 | + | |
114 | +@node Installation, Details, Outline, top | |
115 | +@comment node-name, next, previous, up | |
116 | + | |
117 | +@chapter インストール | |
118 | + | |
119 | +@section cmd-modeのインストール | |
120 | + | |
121 | +@file{~/.emacs}(現在は@file{~/.emacs.d/init.el}が主流)のどこかに、下の | |
122 | +2項目を加えます。 | |
123 | + | |
124 | +@lisp | |
125 | +(autoload 'cmd-mode "cmd-mode" "CMD mode." t) | |
126 | +(setq auto-mode-alist (append '(("\\.\\(cmd\\|bat\\)$" . cmd-mode)) | |
127 | + auto-mode-alist)) | |
128 | +@end lisp | |
129 | + | |
130 | +次に@file{cmd-mode.el}をおくディレクトリをload-path に加えるか、 | |
131 | +@file{cmd-mode.el}をload-pathに指定されているディレクトリに置いてくださ | |
132 | +い。 | |
133 | + | |
134 | +以上の設定により、拡張子が @code{.cmd}または@code{.bat}であるファイルを | |
135 | +編集すると自動的にcmd-modeがロードされます。 | |
136 | + | |
137 | +@section infoのインストール | |
138 | + | |
139 | +これが読めているという事は、infoのインストールが終わっているという事のよ | |
140 | +うな気がするのですが・・・ | |
141 | + | |
142 | +@enumerate | |
143 | +@item | |
144 | +cmd.infoファイルを@code{INFOPATH}に設定されているディレクトリにコピーし | |
145 | +てください。 | |
146 | + | |
147 | +@item | |
148 | +そのディレクトリの@file{dir}ファイルに以下の記述を追加してください。 | |
149 | + | |
150 | +@example | |
151 | +* cmd: (cmd-mode.info). へなちょこcmd-modeの説明書 | |
152 | +@end example | |
153 | + | |
154 | +@end enumerate | |
155 | + | |
156 | +@node details, lisp variables, Installation, Top | |
157 | +@comment node-name, next, previous, up | |
158 | +@chapter 詳細 | |
159 | + | |
160 | +この章ではcmd-modeで出来る事の詳細を説明します。 | |
161 | + | |
162 | +@section 色がつく | |
163 | +特に何をするでもなく、拡張子が@file{.cmd},@file{.bat}のファイルを編集す | |
164 | +ると、キーワードに色がつきます。色付けのパターンが気に入らない場合は、 | |
165 | +@xref{lisp variables}の@code{*-pattern}と@code{cmd-font-lock-keywords}を | |
166 | +カスタマイズしてください。 | |
167 | + | |
168 | +@section コメント行の行詰め | |
169 | + | |
170 | +コメント行内にカーソルがある状態で@kbd{M-q}を押下すると、コメント行の行 | |
171 | +詰めを行います。関数名は以下の通りです。 | |
172 | +@defun cmd-fill-paragraph | |
173 | +コメント行等の行詰めを行います。かなり手抜きをしています(こんな事をして | |
174 | +良いのだろうか)。 | |
175 | +@end defun | |
176 | + | |
177 | +@section ヘルプをひく | |
178 | + | |
179 | +@kbd{C-c h}を押下すると、カーソルの下の文字列のヘルプを引く事が出来ます。 | |
180 | +ミニバッファにカーソルの下の文字列がデフォルト表示されますので、そのまま | |
181 | +で良い場合はRETを押下します。その他のヘルプを引く場合は、ミニバッファに | |
182 | +任意のコマンドを入力後、RETを押下します。関数名は以下の通りです。 | |
183 | +@defun cmd-help (arg) | |
184 | +helpコマンドを実行して、結果を表示します。この関数は、Windows NT系以外で | |
185 | +は、動作しません。 | |
186 | + | |
187 | +※Windows \\(9[58]\\|Me\\)でも動作するように作ったつもりだったんですが、 | |
188 | +見事に動作しません。 | |
189 | +@end defun | |
190 | + | |
191 | +@defun cmd-help-mode-exit | |
192 | +@kbd{q}を押下すると、cmd-help-modeを終了します。 | |
193 | +@end defun | |
194 | + | |
195 | +@section その他ちまちました機能 | |
196 | +@defun cmd-mode-version | |
197 | +cmd-modeのVersionを表示します。@kbd{M-x cmd-mode-version} | |
198 | +@end defun | |
199 | + | |
200 | +@defun cmd-exec | |
201 | +@kbd{C-c C-c}を押下すると、バッファの内容を(必要であれば)ファイルに保 | |
202 | +存し、保存したファイルを実行します。かなり手抜きをしています。当然の事な | |
203 | +がら、この機能はWindows係でしか動作しません。 | |
204 | +@end defun | |
205 | + | |
206 | +@defun cmd-recenter | |
207 | +@kbd{C-l}を押下すると、カレント位置を中央に配置した後、余分な(余分と思 | |
208 | +われる)行末のスペースを削除します。 | |
209 | +@end defun | |
210 | + | |
211 | +@defun cmd-next-label | |
212 | +@kbd{M-C-e}で次のラベルへ跳びます。 | |
213 | +@end defun | |
214 | + | |
215 | +@defun cmd-prev-label | |
216 | +@kbd{M-C-a}で前のラベルへ跳びます。 | |
217 | +@end defun | |
218 | + | |
219 | +@defun cmd-goto-label | |
220 | +@kbd{C-c g}で、指定したラベルへジャンプします。ラベルはミニバッファから | |
221 | +補完入力できます。ミニバッファには、現在のカーソルの下の文字列がデフォル | |
222 | +ト表示されます。(既存のラベルの何れかに一致する場合) | |
223 | +@end defun | |
224 | + | |
225 | +@node lisp variables, Copying, details, Top | |
226 | +@comment node-name, next, previous, up | |
227 | +@chapter カスタマイズ変数一覧 | |
228 | + | |
229 | +@defvar cmd-mode-hook | |
230 | +cmd-modeを作成するタイミングで呼ばれる hook です。 | |
231 | +@end defvar | |
232 | + | |
233 | +@defvar cmd-help-mode-hook | |
234 | +cmd-help-modeを作成するタイミングで呼ばれる hook です。 | |
235 | +@end defvar | |
236 | + | |
237 | +@defvar cmd-help-command | |
238 | +helpコマンドのコマンド名。Windows NT系以外には存在しません。 | |
239 | +@end defvar | |
240 | + | |
241 | +@defvar cmd-temp-buf | |
242 | +作業用の隠しバッファ | |
243 | +@end defvar | |
244 | + | |
245 | +@defvar cmd-help-buf-base-name | |
246 | +ヘルプバッファのベース名 | |
247 | +@end defvar | |
248 | + | |
249 | +@defvar cmd-full-size-space-etc-pattern | |
250 | +所謂「全角の空白」の正規表現。 | |
251 | +@end defvar | |
252 | + | |
253 | +@defvar cmd-tab-pattern | |
254 | +TAB文字の正規表現 | |
255 | +@end defvar | |
256 | + | |
257 | +@defvar cmd-comment-pattern | |
258 | +コメント行の正規表現 | |
259 | +@end defvar | |
260 | + | |
261 | +@defvar cmd-variable-pattern | |
262 | +環境変数の展開の正規表現 | |
263 | +@end defvar | |
264 | + | |
265 | +@defvar cmd-const-pattern | |
266 | +条件付き処理記号等のような予約語の正規表現 | |
267 | +@end defvar | |
268 | + | |
269 | +@defvar cmd-set-pattern | |
270 | +SETコマンドの正規表現 | |
271 | +@end defvar | |
272 | + | |
273 | +@defvar cmd-label-pattern | |
274 | +ラベルの正規表現 | |
275 | +@end defvar | |
276 | + | |
277 | +@defvar cmd-redirect-pattern | |
278 | +リダイレクト記号の正規表現 | |
279 | +@end defvar | |
280 | + | |
281 | +@defvar cmd-option-pattern | |
282 | +IF文やFOR文等のオプションの正規表現 | |
283 | +@end defvar | |
284 | + | |
285 | +@defvar cmd-command-pattern | |
286 | +コマンドの正規表現 | |
287 | + | |
288 | +コマンドは内部コマンドのみです。Windows NTのHELPコマンドで一覧表示され | |
289 | +るコマンドから、外部コマンド(*.exe, *.com)を除いたものです。但し、SET | |
290 | +と REM は他で定義していますので、ここでは除いています。また、ECHO は | |
291 | +ECHO. も含めています | |
292 | +@end defvar | |
293 | + | |
294 | +@defvar cmd-font-lock-keywords | |
295 | +cmd-mode, cmd-help-modeで使用するfont-lockの設定です。 | |
296 | +詳細はemacsのfont-lock-defaultsを参照してください。 | |
297 | + | |
298 | +@code{*-pattern}の値を変更した場合、この値も合わせて変更しなければならな | |
299 | +い事もあります。 | |
300 | +@end defvar | |
301 | + | |
302 | +@node Copying, , lisp variables, Top | |
303 | +@comment node-name, next, previous, up | |
304 | +@chapter 取り扱い | |
305 | + | |
306 | +本プログラムはフリーソフトウェアです。本プログラムを使用して生じたいかな | |
307 | +る結果に対しても作者は責任を負わないこととします。 | |
308 | + | |
309 | +質問、苦情、バグ報告、改良案等は、以下のメールアドレスへお願いします。 | |
310 | +@flushright | |
311 | +Tadamegu Furukawa <tfuruka1(at)nifty.com> | |
312 | +@end flushright | |
313 | + | |
314 | +@contents | |
315 | +@bye |
@@ -1,30 +1,23 @@ | ||
1 | 1 | # -*- mode: makefile; coding: sjis-unix; -*- |
2 | -# Time-stamp: <2001-09-04 22:54:58 tfuruka1> | |
2 | +# Time-stamp: <2012-08-26 14:02:21 tfuruka1> | |
3 | 3 | # |
4 | 4 | # cmd-modeのmakefileです |
5 | 5 | # |
6 | -# $Id: makefile,v 1.2 2004/07/17 16:01:12 tfuruka1 Exp $ | |
7 | -# $Log: makefile,v $ | |
8 | -# Revision 1.2 2004/07/17 16:01:12 tfuruka1 | |
9 | -# とりあえず保存 | |
10 | -# | |
11 | -# Revision 1.1 2001/08/15 13:01:45 tfuruka1 | |
12 | -# Initial revision | |
13 | -# | |
14 | -# | |
15 | 6 | SHELL=/bin/sh |
16 | -EMACS=/usr/local/meadow/1.14/bin/meadowNT.exe | |
17 | -DIST=d:/ProgramFiles/Adobe/Acrobat4.0/Distillr/AcroDist.exe | |
7 | +EMACS=/usr/local/emacs/bin/emacs.exe | |
8 | +DVIPDFMX=/usr/local/bin/dvipdfmx.exe | |
18 | 9 | |
19 | 10 | BASENAME=cmd-mode |
20 | -INFONAME=cmd.info | |
11 | +INFONAME=cmd-mode.info | |
21 | 12 | |
22 | -TARGET=/usr/local/meadow/site-lisp/$(BASENAME).el | |
23 | -INFOTGT=/usr/local/meadow/site-info/$(INFONAME) | |
13 | +# ここは完全に私個人用の環境に異存していますので、適切に書換えて下さい。 | |
14 | +TARGET=~/.emacs.d/local/lisp/furukawa/$(BASENAME).el | |
15 | +INFOTGT=~/.emacs.d/local/info/$(INFONAME) | |
24 | 16 | |
25 | 17 | OBJ=$(BASENAME).el |
26 | 18 | GZFILE = $(BASENAME).tar.gz |
27 | 19 | |
20 | +# 以降については、多分修正は不要だと思います。 | |
28 | 21 | install : $(TARGET) $(INFOTGT) $(BASENAME).pdf |
29 | 22 | |
30 | 23 | $(TARGET) : $(OBJ) |
@@ -38,17 +31,17 @@ $(INFONAME) : $(BASENAME).texinfo | ||
38 | 31 | $(EMACS) -batch $(BASENAME).texinfo -e texinfo-format-buffer \ |
39 | 32 | -e basic-save-buffer |
40 | 33 | |
41 | -$(BASENAME).pdf : $(BASENAME).ps | |
42 | - $(DIST) $(PWD)/$(BASENAME).ps | |
34 | +$(BASENAME).pdf : $(BASENAME).dvi | |
35 | + $(DVIPDFMX) $(BASENAME).dvi | |
43 | 36 | |
44 | -$(BASENAME).ps : $(BASENAME).texinfo | |
45 | - jtex $(BASENAME).texinfo | |
46 | - texindex $(BASENAME).?? | |
47 | - jtex $(BASENAME).texinfo | |
48 | - dvipsk -R600 -Pdl $(BASENAME).dvi | |
37 | +$(BASENAME).dvi : $(BASENAME).texinfo | |
38 | + ptex $(BASENAME).texinfo | |
39 | + #↓?? だと cmd-mode.elもヒットしてしまうので… | |
40 | + texindex $(BASENAME).[!e][!l] | |
41 | + ptex $(BASENAME).texinfo | |
49 | 42 | |
50 | 43 | clean : |
51 | - rm -f *.*~ | |
44 | + rm -f *.*~ *.bak | |
52 | 45 | rm -f makefile~ |
53 | 46 | rm -f $(BASENAME).aux |
54 | 47 | rm -f $(BASENAME).cp |
@@ -68,5 +61,7 @@ clean : | ||
68 | 61 | rm -f $(BASENAME).vr |
69 | 62 | rm -f $(BASENAME).vrs |
70 | 63 | rm -f ../$(GZFILE) |
64 | +clean-all : clean | |
65 | + rm -fr *.pdf *.info | |
71 | 66 | tar : clean |
72 | - (cd ..; tar cvzf $(GZFILE) $(BASENAME)) | |
67 | + (cd ..; tar cvzf $(GZFILE) $(BASENAME) --exclude .git) |
@@ -1,71 +1,76 @@ | ||
1 | --*- mode: text; coding: sjis-dos -*- | |
2 | -$Id: readme.1st,v 1.1 2004/07/17 16:03:59 tfuruka1 Exp $ | |
3 | -$Name: $ | |
4 | - | |
5 | -cmd-modeはMS-DOSのバッチファイルや、Windows NT コマンドスクリプトファ | |
6 | -イルを編集する為の、Emacsのメジャーモードです。 | |
7 | - | |
8 | -●アーカイブに含まれるファイル | |
9 | - | |
10 | - cmd-mode.dvi cmd-mode.texinfoをTeXでコンパイルして生々したdvi | |
11 | - ファイル | |
12 | - cmd-mode.el cmd-mode本体 | |
13 | - cmd-mode.pdf cmd-mode.dviをpsに変換後、更にpdfに変換したファ | |
14 | - イル | |
15 | - cmd-mode.texinfo texinfoファイルのソース | |
16 | - cmd.info cmd-mode.texinfoをtexinfoでフォーマットしたファ | |
17 | - イル | |
18 | - readme.1st このファイル | |
19 | - | |
20 | - | |
21 | -●動作環境 | |
22 | - | |
23 | - - FSF版の GNU Emacs 20.7/Mule 4.1 以降(多分、Emacs 20以降であ | |
24 | - れば、大丈夫だと思いますが、私は20.7でしか動作確認を行ってい | |
25 | - ません。 | |
26 | - 因みに私が確認した環境は以下の通りです。 | |
27 | - | |
28 | - (emacs-version) "GNU Emacs 20.7.1 (i386-*-nt4.0.1381) of Wed | |
29 | - Apr 11 2001 on DELL" | |
30 | - | |
31 | - mule-version "4.1 (葵)" | |
32 | - | |
33 | - (Meadow-version) "Meadow-1.14 (AWSAKA:62)" | |
34 | - | |
35 | -●インストール | |
36 | - | |
37 | - `~/.emacs'のどこかに、下の2項目を加えます。 | |
38 | - | |
39 | - (autoload 'cmd-mode "cmd-mode" "CMD mode." t) | |
40 | - (setq auto-mode-alist (append '(("\\.\\(cmd\\|bat\\)$" . cmd-mode)) | |
41 | - auto-mode-alist)) | |
42 | - | |
43 | - 次に`cmd-mode.el'をおくディレクトリをload-path に加えるか、 | |
44 | - `cmd-mode.el' をload-pathに指定されているディレクトリに置いてくださ | |
45 | - い。 | |
46 | - | |
47 | - 以上の設定により、拡張子が `.cmd'または`.bat'であるファイルを編集す | |
48 | - ると自動的にcmd-modeがロードされます。 | |
49 | - | |
50 | - infoのインストール | |
51 | - ================== | |
52 | - | |
53 | - 1. cmd.infoファイルを`INFOPATH'に設定されているディレクトリにコピー | |
54 | - してください。 | |
55 | - | |
56 | - 2. そのディレクトリの`dir'ファイルに以下の記述を追加してください。 | |
57 | - | |
58 | - * cmd: (cmd.info). へなちょこcmd-modeの説明書 | |
59 | - | |
60 | -●更新履歴 | |
61 | - | |
62 | - Revision: 1.3 | |
63 | - ・ 任意のラベルへジャンプできる関数を追加。 | |
64 | - ・ メニューを付けてみました。 | |
65 | - | |
66 | - Revision: 1.2 | |
67 | - ・ 取りあえず公開。 | |
68 | - | |
69 | --- | |
70 | -Tadamegu Furukawa <tfuruka1@nifty.com> | |
71 | -http://www.vector.co.jp/authors/VA001687/ | |
1 | +-*- mode: text; coding: sjis-dos -*- | |
2 | + | |
3 | +cmd-modeはMS-DOSのバッチファイルや、Windows NT コマンドスクリプトファイ | |
4 | +ルを編集する為の、Emacsのメジャーモードです。 | |
5 | + | |
6 | +●アーカイブに含まれるファイル | |
7 | + | |
8 | + cmd-mode.el cmd-mode本体 | |
9 | + cmd-mode.pdf cmd-mode.texinfoをTeXでコンパイルして生々したdvi | |
10 | + ファイルをpdfに変換したファイル | |
11 | + cmd-mode.texinfo texinfoファイルのソース | |
12 | + cmd-mode.info cmd-mode.texinfoをtexinfoでフォーマットしたファ | |
13 | + イル | |
14 | + readme.1st このファイル | |
15 | + | |
16 | +●動作環境 | |
17 | + | |
18 | + - FSF版の GNU Emacs 20.7/Mule 4.1 以降(多分、Emacs 20以降であ | |
19 | + れば、大丈夫だと思いますが、私は20.7でしか動作確認を行ってい | |
20 | + ません。 | |
21 | + 因みに私が確認した環境は以下の通りです。 | |
22 | + | |
23 | + (emacs-version) "GNU Emacs 20.7.1 (i386-*-nt4.0.1381) of Wed | |
24 | + Apr 11 2001 on DELL" | |
25 | + | |
26 | + mule-version "4.1 (葵)" | |
27 | + | |
28 | + (Meadow-version) "Meadow-1.14 (AWSAKA:62)" | |
29 | + | |
30 | + -- 2012.8.26 追記: 以下の環境で動作確認 | |
31 | + (emacs-version) "GNU Emacs 24.1.1 (i386-mingw-nt5.1.2600) | |
32 | + of 2012-06-10 on MARVIN" | |
33 | + | |
34 | +●インストール | |
35 | + | |
36 | + `~/.emacs' (現在は `~/.emacs.d/init.el' が主流)のどこかに、下の2項目 | |
37 | + を加えます。 | |
38 | + | |
39 | + (autoload 'cmd-mode "cmd-mode" "CMD mode." t) | |
40 | + (setq auto-mode-alist (append '(("\\.\\(cmd\\|bat\\)$" . cmd-mode)) | |
41 | + auto-mode-alist)) | |
42 | + | |
43 | + 次に`cmd-mode.el'をおくディレクトリをload-path に加えるか、 | |
44 | + `cmd-mode.el' をload-pathに指定されているディレクトリに置いてくださ | |
45 | + い。 | |
46 | + | |
47 | + 以上の設定により、拡張子が `.cmd'または`.bat'であるファイルを編集す | |
48 | + ると自動的にcmd-modeがロードされます。 | |
49 | + | |
50 | + infoのインストール | |
51 | + ================== | |
52 | + | |
53 | + 1. cmd.infoファイルを`INFOPATH'に設定されているディレクトリにコピー | |
54 | + してください。 | |
55 | + | |
56 | + 2. そのディレクトリの`dir'ファイルに以下の記述を追加してください。 | |
57 | + | |
58 | + * cmd: (cmd-mode.info). へなちょこcmd-modeの説明書 | |
59 | + | |
60 | +●更新履歴 | |
61 | + | |
62 | + Revision: 1.4 | |
63 | + ・ Translation to English. (Kenichi Handa) | |
64 | + ・ Changed set-mark to push-mark. (Lennart Borgman) | |
65 | + ・ その他細かい修正 | |
66 | + | |
67 | + Revision: 1.3 | |
68 | + ・ 任意のラベルへジャンプできる関数を追加。 | |
69 | + ・ メニューを付けてみました。 | |
70 | + | |
71 | + Revision: 1.2 | |
72 | + ・ 取りあえず公開。 | |
73 | + | |
74 | +-- | |
75 | +Tadamegu Furukawa <tfuruka1 at nifty.com> | |
76 | +http://www.vector.co.jp/authors/VA001687/ |