[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

13. いろいろなモード (2004/02/02)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=misc%20mode"
"MeadowMemo/いろいろなモード"へのコメント(無し)
検索全文Elisp


この章で紹介していること

他のモードについては以下を参考にしてください.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

13.1 メジャーモード (2004/01/27)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=major%20mode"
"MeadowMemo/メジャーモード"へのコメント(無し)
検索全文Elisp

メジャーモードのみ紹介します.

13.1.1 楽譜を書くモード― abc-mode (2004/01/27)  
13.1.2 組み込みシステム用言語モード― ada-mode (2004/01/27)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

13.1.1 楽譜を書くモード― abc-mode (2004/01/27)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=abc-mode"
"MeadowMemo/楽譜を書くモード―abc-mode"へのコメント(無し)
検索全文Elisp

要約

楽譜を書くためのモードの紹介.コマンドが入っていれば, Postscript や midi への変換も できる.

情報源
何が問題なのか?
何ができるのか?

X:1
T:Notes
M:C
L:1/4
K:C
C, D, E, F,|G, A, B, C|D E F G|A B c d|e f g a|b c' d' e'|f' g' a' b'|]

abc により楽譜を簡単に出力できる

のように出力できます.

インストール方法

abc-mode.el をダウンロードしロードパスの通ったところへ置きます.

設定方法

以下を.emacs に追加します.

 
(autoload 'abc-mode "abc-mode" "Major Mode for ABC files" t)
(add-to-list 'auto-mode-alist '("\\.abc\\'" . abc-mode))

詳しい使い方

拡張子が abc のファイルを開くと abc-mode になります. abc2ps などのコマンドが入ってい れば,C-c C-cで Postscript へ変換できます.

メニューも追加されますので,これをいじるだけでも使うことができます.

うまく動かない

Windows だと変換しようとしてもうまくいかないかもしれません.どうもパスが「\」で渡っ ているためのようです.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

13.1.2 組み込みシステム用言語モード― ada-mode (2004/01/27)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=ada-mode"
"MeadowMemo/組み込みシステム用言語モード―ada-mode"へのコメント(無し)
検索全文Elisp
要約

組み込みシステム用のモード ada-mode の紹介.

何ができるのか?

Ada という言語用のモード.

詳しいことは調べてもらうとして,簡単に紹介すると,

1974 年にアメリカ国防総省の要請で 1974 年から開発が始められた言語.もともとは戦略機 器制御プログラムとして開発されたもの.ベースは PASCAL であり,リアルタイム制御機能 やオブジェクト指向などが組み込まれた.名前は世界初のプログラマと言われる Ada Augusta の名前を取って名付けられた.

例えば, Hello world は以下のようになります.

 
 with Text_IO; use Text_IO;

 procedure Hello is
 begin
    Put_Line ("Hello, world");
 end Hello;

インストール方法

標準で付属しています.

設定方法

特に必要ありません.

詳しい使い方

拡張子が adb (Ada Body) や ads (Ada Spec) のファイルを開くと ada-mode になります.

後はメニューが出ますので,それを参考にして使うといいです.

ヘッダの自動記入やプロジェクトの作成などなど様々な機能があります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

13.2 マイナーモード (2004/02/02)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=minor%20mode"
"MeadowMemo/マイナーモード"へのコメント(無し)
検索全文Elisp

ここではマイナーモードを紹介します.

13.2.1 数引数モード ― auto-arg-mode (2004/01/27)  
13.2.2 読み込み専用ファイルの扱い (2004/02/02)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

13.2.1 数引数モード ― auto-arg-mode (2004/01/27)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=auto-arg-mode"
"MeadowMemo/数引数モード―auto-arg-mode"へのコメント(2007/12/28)
検索全文Elisp
要約

C-u 21 C-f を 21 C-f のように簡単に入力できるようにする

何が問題なのか?

C-u 10 C-f など C-u 数字 をつけてコマンドを入力すると,そのコマンド を指定した回数だけ実行することができます.

しかし,頻繁に使うのであれば,C-uを何度も入力するのは面倒です.

何ができるのか?

C-u 21 C-f を 21 C-f のように簡単に入力できるようになります.

インストール方法

同等のもの (autoarg.el) が標準で付属していますので,そのまま使えばいいです.

設定方法

不要です.

詳しい使い方

M-x autoarg-mode でオンになります.これで,21 C-f とするだけで, C-u 21 C-f と同じ動作になります.

数字の入力は 21 SPC でできます.

うまく動かない

日本語入力との相性はよくありません. SKK だと,10 a で 10 個「あ」が出ます し,期待通りに動いているように見えます.しかし,日本語入力モードで SPC は 入力できません。

また, Windows の IME がオンになっていると,ほとんど動作しません.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

13.2.2 読み込み専用ファイルの扱い (2004/02/02)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=readonly%20buffer"
"MeadowMemo/読み込み専用ファイルの扱い"へのコメント(無し)
検索全文Elisp

Windows で読み込み専用にされたファイルは Meadow 上でも読み込み専用となり編集する ことができません.この場合,読み込み専用でない普通のファイルと同じように扱われて もうれしくありません.むしろファイル内容を見るということに特化したモードになって くれた方がうれしいでしょう.

そこで,.emacs に以下を追加します.そうすると,読み込み専用のファイルでは view-mode となりSPCによるスクロールなどが可能になります.

 
;; read-only なファイルは view-mode で見る
(setq view-read-only t)

また,読み込み専用を解除するには,モードラインにある「%%」を左クリックするか, C-x C-qM-x toggle-read-only を利用します.

13.2.2.1 読み込み専用ファイルのモード ― readonly (2004/02/02)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

13.2.2.1 読み込み専用ファイルのモード ― readonly (2004/02/02)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=readonly"
"MeadowMemo/読み込み専用ファイルのモード―readonly"へのコメント(無し)
検索全文Elisp
要約

読み込み専用ファイルのためにモードを提供する.

何ができるのか?

読み込み専用ファイルのためのモードです.

インストール方法

readonly.el をダウ ンロードし,ロードパスの通ったところへ置きます.

設定方法

以下を.emacs に追加します.

 
(require 'readonly)

詳しい使い方

読み込み専用ファイルを開くだけです.eで読み込み専用属性の解除,SPCで スクロール,s で isearch などができます.

うまく動かない

view-read-only は nil にしておきましょう.

コメント

個人的には view-read-only で十分かな.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

13.3 複数のメジャーモードを使う (2004/01/27)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=multi%20major"
"MeadowMemo/複数のメジャーモードを使う"へのコメント(無し)
検索全文Elisp

Meadow は必ず何らかのメジャーモードになると説明しました.例えば,*scratch*バッファ なら, lisp-interaction-mode ,テキストなら text-mode になります.しかし,実際の 編集では,こんなに簡単に切り分けられるものではありません.例えば,テキスト中に lisp のサンプルを書きたいなどということはよくあります.しかし, Meadow では利用 できるメジャーモードは 1 つですので,テキストモードと他のモードを手動で切り替え たりしながら使うことになります.

そこで,ここでは,複数のメジャーモードを利用するための Elisp を紹介します.

2 種類紹介しますが, mmm-mode の方が機能も豊富で使いやすくお勧めです.

13.3.1 複数のメジャーモードを共存 ― mmm-mode (2003/07/01)  
13.3.2 複数のメジャーモードを切り替える ― multi-mode (2003/06/17)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

13.3.1 複数のメジャーモードを共存 ― mmm-mode (2003/07/01)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=mmm-mode"
"MeadowMemo/複数のメジャーモードを共存―mmm-mode"へのコメント(2007/12/28)
検索全文Elisp

などということがあります.しかし, C のサンプルソースを書くために, c-mode にすると, C を書くにはいいですが, HTML を書くためにはまたモードを戻す必要があります.

そうなると,今度は C の色が消えてしまい, C のソースが見辛くなってしまいます.

そこで, mmm-mode という複数のメジャーモードを使うための Elisp があります.これを使 うと,特定の範囲は c-mode ,それ以外は HTML のモードにすることができます.

使うためには,mmm-modeからダウン ロードし,解凍します.そして, bash を起動し,

cd mmm-mode
EMACS=meadow ./configure
make

として,コンパイルをします.

これができなければ, dired で開いて拡張子が el のファイルにmでマークをつけて, Bとしてコンパイルしてもかまいません.

後は,フォルダごと site-lisp へ移動します.

そして,以下の設定を追加します.

 
;; mmm-mode
(require 'mmm-mode)
(setq mmm-global-mode 'maybe)
;; 色設定.これは,好みで.色をつけたくないなら nil にします.
(set-face-background 'mmm-default-submode-face "navy")

これで,M-x mmm-mode-onとすると, mmm-mode になります.

ある範囲をあるモードにしたい場合には,その範囲をリージョンで選択して,C-c % C-r(M-x mmm-ify-region) とします.そうすると,その範囲が指定したモードに なります (背景色は「 mmm-default-submode-face 」で設定できます) .

このモードはリージョンを選択し,C-c % C-k(M-x mmm-clear-current-region) とすると消すことができます.

ただ,この方法では,そのモードにするために,毎回リージョンを選択しないといけない ので,かなり面倒です.

そこで, mmm-mode には自動でモードを変更する場所を探し,適当なモードにするための 仕組みがあります.

例えば, HTML に CSS を挿入する場合を例に取ります (ただし,実際にするためには css-mode が必要) .

HTML 中に CSS を書く場合,

<STYLE type=text/css>
<!--
body {
        color: #ffffff;
        background-color: #282828;
}

div.day, p, dl, th, td, ul, div.version, address {
        color: white;
}
-->
</STYLE>

といった風に 「<STYLE 」で始まり「</STYLE>」で終わります.だったら,この間を 「 css-mode 」に設定してくれれば便利ですね.

そのための設定例は,以下のようになります.これを上記の設定に続けて書いておくと, HTML を開いた時に,該当箇所を探して,「 css-mode 」にしてくれます.

一応,設定の説明をすると,「 embedded-css 」の部分は名前です.好きな名前をつければ いいです.「:submode 」の後の「 css-mode 」が使用するモードです.そのまま, 「 css-mode 」を使うという意味です.

そして,「:front 」と「:back 」の正規表現で開始位置と終了位置を指定します.正規 表現でなくても,「</style>」みたいに単に文字だけでもいいです.

そして,「 mmm-add-mode-ext-class 」の行が,拡張子が「 html 」のファイルでこの 「 embedded-css 」という設定を使うという意味になります.

 
(mmm-add-classes
 '((embedded-css
    :submode css-mode
    :front "<style[^>]*>"
    :back "</style>")))

(mmm-add-mode-ext-class nil "\\.html?\\'" 'embedded-css)

これで,ファイルを開いた時に,「<style 」と「</style>」を検索し,その間を css-mode にしてくれます.ファイルを開いた後で, CSS を追加した場合には css-mode には なりません.その場合には,C-c % C-b(M-x mmm-parse-buffer) や C-c % C-g(M-x mmm-parse-region) を使って,再認識させる必要があります.

このモードを消す場合には,M-x mmm-clear-all-regions(すべて消す) や M-x mmm-clear-current-region を使います.

同じようなものですが,設定サンプルです.

 
;; html + php
(mmm-add-classes
 '((html-php
    :submode php-mode
    :front "<\\?\\(php\\)?"
    :back "\\?>")))
(mmm-add-mode-ext-class nil "\\.php?\\'" 'html-php)

;; texinfo + lisp
(mmm-add-classes
 '((texi-elisp
    :submode emacs-lisp-mode
    :front "@lisp"
    :back "@end lisp"
    :insert ((?t texi-elisp nil @ "@lisp"
                 @ "\n" _ "\n" @ "@end lisp" @))
    )))
(mmm-add-mode-ext-class nil "\\.texi?\\'" 'texi-elisp)

この texi-elisp の「 insert 」は新規追加時に使います. mmm-mode になっていれば, C-c % hで新規に作成できるものが一覧表示されます.例えば,上の例ような設定 をして, texi-mode でC-c % hとすると,

Available MMM Mode Insertion Commands:
Key             Inserts
---             -------

C-c % /         universal
C-c % t         texi-elisp

という風に表示されます.つまり,「:insert ((?t texi-elisp 」の部分までで,「 t 」と いうキーバインドで,「 texi-elisp 」というものを挿入するという設定になるわけです.

そして,「@」以降が実際に挿入される文字です.「\n 」は改行です.この例だと,

@lisp

@end lisp

という文字が挿入されます.頻繁に使うモードはこんな風に定義しておくと楽になります.

また,C-c % /で,任意のモードを追加することができます (ただし,補完入力はできません) .



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

13.3.2 複数のメジャーモードを切り替える ― multi-mode (2003/06/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=multi-mode"
"MeadowMemo/複数のメジャーモードを切り替える―multi-mode"へのコメント(2007/12/28)
検索全文Elisp

mmm-mode は非常に便利なのですが,使うまでの設定が少し面倒です.そこで,よりも簡単 なものを紹介します.ただ,その分使い勝手は劣ります.

その Elisp は multi-mode といいます.これは,文字通り,複数のモードを使うための Elisp です. mmm-mode とは,モードの切り替え方法が異なります.

mmm-mode の場合は,バッファがあるメジャーモードになっていて,一部の部分でだけ別の メジャーモードを使います.したがって,バッファ全体のモードは固定です.

一方, multi-mode は,カーソルがある文字を通過した時点で,バッファ全体のメジャーモー ドを変えます.編集する分には便利ですが,あまりスマートな方法ではありません.

使うためには,まず multi-mode.elを ダウンロードし,ロードパスの通ったところへ置きます.

そして,以下の設定例を参考に設定します.別のモードで使うためには,その都度,モー ドを作る必要があります.

 
(autoload 'multi-mode
  "multi-mode"
  "Allowing multiple major modes in a buffer."
  t)

;; まずはモードを作る.
;; この例では,「/*」を通過すると, fundamental-mode になる
;; 「/*」を通過すると, c-mode になる.
(defun multi-c-fundamental-mode () (interactive)
  (multi-mode 1
              'c-mode
              '("/*" fundamental-mode)
              ;;  '("/*" fundamental-mode my-fundamental-setup)
              ;; という風に実行する関数を設定することもできる.
              '("*/" c-mode)))

(setq auto-mode-alist
      (cons '("\\.[ch]$" . multi-c-fundamental-mode)
            auto-mode-alist)


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]