cmd-modeはMS-DOSのバッチファイル(拡張子が.bat)や、Windows NT コマンドスクリプトファイル(拡張子が.cmd)等を編集する為の、Emacsのメジャーモードです。
Revision | cf7472c8646ae887a57173de7b15ef673c18cad7 (tree) |
---|---|
Time | 2001-09-11 21:39:03 |
Author | tfuruka1 <tfuruka1> |
Commiter | tfuruka1 |
●メニューをつけてみた。
●任意のラベルへジャンプする機能を追加。
@@ -16,8 +16,12 @@ | ||
16 | 16 | ;; auto-mode-alist)) |
17 | 17 | ;; |
18 | 18 | ;; |
19 | -;; $Id: cmd-mode.el,v 1.2 2001/08/31 13:25:50 tfuruka1 Exp $ | |
19 | +;; $Id: cmd-mode.el,v 1.3 2001/09/11 12:39:03 tfuruka1 Exp $ | |
20 | 20 | ;; $Log: cmd-mode.el,v $ |
21 | +;; Revision 1.3 2001/09/11 12:39:03 tfuruka1 | |
22 | +;; ●メニューをつけてみた。 | |
23 | +;; ●任意のラベルへジャンプする機能を追加。 | |
24 | +;; | |
21 | 25 | ;; Revision 1.2 2001/08/31 13:25:50 tfuruka1 |
22 | 26 | ;; ●SETの環境変数にキーワード文字列が含まれていると、色付けが変になる問題 |
23 | 27 | ;; を修正 |
@@ -30,7 +34,12 @@ | ||
30 | 34 | |
31 | 35 | ;; (replace-regexp "[\t ]+$" "") |
32 | 36 | |
33 | -(defconst cmd-mode-revision-number "$Revision: 1.2 $" "cmd-modeのRevision") | |
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 | + "ポップアップメニュー(ジャンプ)") | |
34 | 43 | |
35 | 44 | ;;; *** hook |
36 | 45 | (defvar cmd-mode-hook nil |
@@ -372,6 +381,36 @@ ECHO. | ||
372 | 381 | ) |
373 | 382 | ) |
374 | 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 | + | |
375 | 414 | (defun cmd-mode () |
376 | 415 | "MS-DOSのバッチファイルやWindows NT のコマンドスクリプトファイルを編 |
377 | 416 | 集する為のへなちゃこもーどです。 |
@@ -382,6 +421,9 @@ ECHO. | ||
382 | 421 | ●コマンドのヘルプを表示する。 |
383 | 422 | \\[cmd-help] |
384 | 423 | |
424 | +●指定したラベルへジャンプ | |
425 | + \\[cmd-goto-label] | |
426 | + | |
385 | 427 | ●現在のカーソル位置を画面の中央に配置し、行末の余分な空白文字を削除 |
386 | 428 | する。 |
387 | 429 | \\[cmd-recenter] |
@@ -404,12 +446,30 @@ ECHO. | ||
404 | 446 | (setq cmd-local-map (make-keymap)) |
405 | 447 | ;; キーの割り当て |
406 | 448 | (define-key cmd-local-map "\C-c\C-c" 'cmd-exec) |
449 | + (define-key cmd-local-map "\C-cg" 'cmd-goto-label) | |
407 | 450 | (define-key cmd-local-map "\C-ch" 'cmd-help) |
408 | 451 | (define-key cmd-local-map "\C-l" 'cmd-recenter) |
409 | 452 | (define-key cmd-local-map "\eq" 'cmd-fill-paragraph) |
410 | 453 | (define-key cmd-local-map "\e\C-a" 'cmd-prev-label) |
411 | 454 | (define-key cmd-local-map "\e\C-e" 'cmd-next-label) |
412 | 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 | + | |
413 | 473 | (use-local-map cmd-local-map) ; ローカルマップの使用宣言 |
414 | 474 | |
415 | 475 | ;; font-lockの設定 |