• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

cmd-modeはMS-DOSのバッチファイル(拡張子が.bat)や、Windows NT コマンドスクリプトファイル(拡張子が.cmd)等を編集する為の、Emacsのメジャーモードです。


コミットメタ情報

リビジョン047d43ae2ba07951585ed13fa160ba5c8cb22270 (tree)
日時2012-08-26 14:09:59
作者Tadamegu Furukawa <tarancho@user...>
コミッターTadamegu Furukawa

ログメッセージ

  • 以下の修正をマージ(以下に記載はありませんが、括弧が不足している不具合も
    ありました)
    • Translation to English. (Kenichi Handa)
    • Changed set-mark to push-mark. (Lennart Borgman)
  • 最新(ではないかもしれないが)の環境に合せてmakefile等を修正。

変更サマリ

差分

--- a/cmd-mode.el
+++ b/cmd-mode.el
@@ -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:
--- a/cmd-mode.texinfo
+++ b/cmd-mode.texinfo
@@ -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
--- a/makefile
+++ b/makefile
@@ -1,30 +1,23 @@
11 # -*- 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>
33 #
44 # cmd-modeのmakefileです
55 #
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-#
156 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
189
1910 BASENAME=cmd-mode
20-INFONAME=cmd.info
11+INFONAME=cmd-mode.info
2112
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)
2416
2517 OBJ=$(BASENAME).el
2618 GZFILE = $(BASENAME).tar.gz
2719
20+# 以降については、多分修正は不要だと思います。
2821 install : $(TARGET) $(INFOTGT) $(BASENAME).pdf
2922
3023 $(TARGET) : $(OBJ)
@@ -38,17 +31,17 @@ $(INFONAME) : $(BASENAME).texinfo
3831 $(EMACS) -batch $(BASENAME).texinfo -e texinfo-format-buffer \
3932 -e basic-save-buffer
4033
41-$(BASENAME).pdf : $(BASENAME).ps
42- $(DIST) $(PWD)/$(BASENAME).ps
34+$(BASENAME).pdf : $(BASENAME).dvi
35+ $(DVIPDFMX) $(BASENAME).dvi
4336
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
4942
5043 clean :
51- rm -f *.*~
44+ rm -f *.*~ *.bak
5245 rm -f makefile~
5346 rm -f $(BASENAME).aux
5447 rm -f $(BASENAME).cp
@@ -68,5 +61,7 @@ clean :
6861 rm -f $(BASENAME).vr
6962 rm -f $(BASENAME).vrs
7063 rm -f ../$(GZFILE)
64+clean-all : clean
65+ rm -fr *.pdf *.info
7166 tar : clean
72- (cd ..; tar cvzf $(GZFILE) $(BASENAME))
67+ (cd ..; tar cvzf $(GZFILE) $(BASENAME) --exclude .git)
--- a/readme.1st
+++ b/readme.1st
@@ -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/