• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

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

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

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


コミットメタ情報

リビジョンcf7472c8646ae887a57173de7b15ef673c18cad7 (tree)
日時2001-09-11 21:39:03
作者tfuruka1 <tfuruka1>
コミッターtfuruka1

ログメッセージ

●メニューをつけてみた。
●任意のラベルへジャンプする機能を追加。

変更サマリ

差分

--- a/cmd-mode.el
+++ b/cmd-mode.el
@@ -16,8 +16,12 @@
1616 ;; auto-mode-alist))
1717 ;;
1818 ;;
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 $
2020 ;; $Log: cmd-mode.el,v $
21+;; Revision 1.3 2001/09/11 12:39:03 tfuruka1
22+;; ●メニューをつけてみた。
23+;; ●任意のラベルへジャンプする機能を追加。
24+;;
2125 ;; Revision 1.2 2001/08/31 13:25:50 tfuruka1
2226 ;; ●SETの環境変数にキーワード文字列が含まれていると、色付けが変になる問題
2327 ;; を修正
@@ -30,7 +34,12 @@
3034
3135 ;; (replace-regexp "[\t ]+$" "")
3236
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+ "ポップアップメニュー(ジャンプ)")
3443
3544 ;;; *** hook
3645 (defvar cmd-mode-hook nil
@@ -372,6 +381,36 @@ ECHO.
372381 )
373382 )
374383
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+
375414 (defun cmd-mode ()
376415 "MS-DOSのバッチファイルやWindows NT のコマンドスクリプトファイルを編
377416 集する為のへなちゃこもーどです。
@@ -382,6 +421,9 @@ ECHO.
382421 ●コマンドのヘルプを表示する。
383422 \\[cmd-help]
384423
424+●指定したラベルへジャンプ
425+ \\[cmd-goto-label]
426+
385427 ●現在のカーソル位置を画面の中央に配置し、行末の余分な空白文字を削除
386428 する。
387429 \\[cmd-recenter]
@@ -404,12 +446,30 @@ ECHO.
404446 (setq cmd-local-map (make-keymap))
405447 ;; キーの割り当て
406448 (define-key cmd-local-map "\C-c\C-c" 'cmd-exec)
449+ (define-key cmd-local-map "\C-cg" 'cmd-goto-label)
407450 (define-key cmd-local-map "\C-ch" 'cmd-help)
408451 (define-key cmd-local-map "\C-l" 'cmd-recenter)
409452 (define-key cmd-local-map "\eq" 'cmd-fill-paragraph)
410453 (define-key cmd-local-map "\e\C-a" 'cmd-prev-label)
411454 (define-key cmd-local-map "\e\C-e" 'cmd-next-label)
412455
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+
413473 (use-local-map cmd-local-map) ; ローカルマップの使用宣言
414474
415475 ;; font-lockの設定