[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
通常のテキストを編集する時に,章のタイトルだけを表示したいとか,特定の単語だけを 強調表示したいということがあります.
そこで,ここでは,テキストの強調表示や一部を隠す機能などを紹介します.
テキストを編集するためのモードなどは 33. テキスト編集のためのモード/機能 (2007/12/26) にあります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
章の名前だけを一覧表示することで,文章のアウトラインを掴むことができる.
Meadow Memo Wiki の何でもアウトラインモード がとても詳しいので,そちらも参考にどうぞ.
何章にも及ぶような,長い文章を書いていると,そのままでは全体の中で今の章がどうい う位置付けにあるか分かりません.
また,全体を見渡しにくいために,前後との関係も見えにくいものです.
このページは texinfo という形式で書いて,そのファイルを HTML に変換して作成して います.
通常は,スクリーンショット のように表示されています.これでは どのような章分けになっていて,今どこを書いているのかが分かりません.
しかし,アウトラインモードでは スクリーンショット のように章 のタイトルだけが表示されるため,全体を見渡すことができます.
Emacs には 2 種類のアウトラインモードがあります. 1 つはメジャーモードとして動く 「 outline-mode 」で,もう一つはマイナーモードとして動く「 outline-minor-mode 」 です.
使い分けとしては,単純なテキストを書く場合には「 outline-mode 」,他のメジャーモー ドと組み合わせて使う場合には「 outline-minor-mode 」となります.
アウトラインモードの機能を知るためにも,どのような流れで機能が実現されているかを 知っておくと,とても便利です.
2 種類とも基本的な動作は同じで,単純なので,ここで紹介しておきます.
決して難しいことではないので,ざっと概要を把握してください.
outline-regexp という変数に章や節を表す文字が設定されています.各行を章のタイト ルとみなすかみなさないかを決定する条件が設定されているわけです.
アウトラインモードは,バッファからこの文字を検索し,その文字が行にあれば,その行 を章や節のタイトルであると考えます
また,この outline-regexp に設定される文字はモードにより異なります.
outline-regexp に一致する文字が見付かっても,それが章なのか節なのか,それとももっ と小さいレベルなのかは分かりません.
そこで, 変数 outline-level に設定された関数により,どのレベルなのかを判断します.
この outline-level に設定された関数はモードにより異なります.
章構造を Meadow が判断すると,後はユーザからの入力で所定の動作をします.例えば, 本文を隠し,タイトルだけを表示といったことを行います.
両方とも標準機能ですので,特にインストールや設定等は不要です.
まずは,メジャーモードとして機能する outline-mode の使い方を説明します.
この機能を使うためには,M-x outline-mode とします.
後は普通にテキストを入力します.ただし,
* 1 章 SKK .....本文 ** 1-1 SKK について *** 1-1-1 SKK の歴史
のように行頭に * がある行は章とみなされます.
M-x outline-mode とすると,メニューには Show と Hide というメニューが追加さ れるので,上のように書いて適当に触ってみると,どんな動作をするか分かってくると思 います.
次にマイナーモードとして機能するアウトラインモードを紹介します.
この機能を使うためには,M-x outline-minor-mode とします.他は基本的に, 「 outline-mode 」と同じです.
ただし,「*」を章の目印とみなすかどうかはモードにより異なります.これは, 「 outline-regexp 」で定義されてますので,各モードで M-x help-for-help v outline-regexp として確認してください.
デフォルトのキーバインドは C-c @ C-a のように正気とは思えないキーバインド になっています.この C-c @ の部分は
(setq outline-minor-mode-prefix "\M-")
|
のようにメタキーなどに変更できるので,適当に変更するのがお勧めです.
しかし, outline は慣れてないせいか非常に使いにくい.文章を隠そうと思ってもキー が出てこない.そんな私は texinfo-mode で
(defun texinfo-return-key (arg) (interactive "P") (let (pos) (setq pos (point)) (beginning-of-line) (if (re-search-forward "^\\(@node\\|@chapter\\|@[sub]*section\\)" (line-end-position) t) (if (= (line-end-position) (next-overlay-change (point))) (if arg (show-all) (show-entry)) (if arg (hide-body) (hide-entry)) (beginning-of-line)) (goto-char pos) (newline-and-indent) ))) (define-key texinfo-mode-map "\C-m" 'texinfo-return-key) |
のように,タイトル部分で RET を入力すると,本文を開いたり閉じたりして,通常 時には改行を入力するようにしています.C-u があれば,すべての本文を開いたり, 閉じたりしてくれます.
ただし,本文を閉じているか開いているかは overlay の開始位置を見ているだけなので, overlay を用いて改行などを表示させていると誤動作します.
35.1.1 階層を正常に判断させる方法 (2005/03/25) 35.1.2 階層を任意に判断させる ― outline-level (2005/03/25) 35.1.3 アウトラインモードの表示・非表示を切り替え (2005/03/25)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
アウトラインモードでは全体の概要を表示させることができます.そのために,指定され た条件から,各章のレベルを判断しています.
outline の基本は
* 1. Meadow の歴史 ** 1.1 Emacs *** 1.1.1 動作条件
という構造でした.つまり,章や節は「*」で始まり,「*」の数がその深さを表わしてい ます.
上の例なら,「* 1. Meadow の歴史」がレベル 1 の深さ,「** 1.1 Emacs 」がレベル 2 の深さで,深さ 1 の下にあるということです.
で,この考え方は,他のモードでも継承されています.つまり,章,節を表わす文字は下 層に行くほど長くなる必要があるのです.
この章や節を探している変数は「 outline-regexp 」です.デフォルトは「 [*\^L]+ 」で すが,普通はモードにより上書きされています.このため,自分で設定する場合には各モー ドのフックに設定する必要があります.
ただし,先程説明したように,下層ほど長くなる必要があります.そのため, HTML で使 うために,
(add-hook 'yahtml-mode-hook '(lambda () (setq outline-regexp " |
としても,「
(add-hook 'yahtml-mode-hook '(lambda () (setq outline-regexp "<\\(h1\\|h2>\\|h3>.\\|h4>..\\|h5>...\\|h6>....\\)") (outline-minor-mode t))) |
などとする必要があります.
これをきちんとやって階層を認識できるようにしておくと,アウトラインモードだけでな く ee を使う時などに非常に便利になります.
もちろん,outline-level の関数を自作するという方法もあります.しかし,これは関数 を書く必要があるため,少し難しいでしょう.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
関数を書く必要がありますが,アウトラインの階層を自分好みに判断させることができる.
デフォルトでは,アウトラインの階層は,一致した箇所の文字の長さで判断されます.し かし,その得られた結果が必ずしも適当とは限りません.
自分の好みに合わせた階層になるように,Emacs に正しく判断させることができます.
アウトラインの階層は, outline-level という関数で定義します.
例えば, outline-mode では
(defun outline-level () "Return the depth to which a statement is nested in the outline. Point must be at the beginning of a header line. This is actually the number of characters that `outline-regexp' matches." (save-excursion (looking-at outline-regexp) (- (match-end 0) (match-beginning 0)))) |
となっています.これは,一致した文字の長さをそのまま階層のレベルとしています.つ まり, outline-regexp で指定した正規表現に一致した文字数が 1 文字であれば,階層 1 にな りますし, 2 文字であれば階層 2 になるわけです.
で,この階層の数字が小さいものが,一番上の階層になり,数字の大きいものは,下の階 層と見なされます.
さて,詳しいことに入る前に簡単に outline-level の動作を掴んでおきましょう.
outline-level が動く場合,まず outline-regexp で検索を行い,カーソルは階層を表す 文字の付近にあります.
したがって,階層を表す文字を取りたければ
(defun outline-level () (interactive) (let ((str nil)) (looking-at outline-regexp) (setq str (buffer-substring-no-properties (match-beginning 0) (match-end 0))) |
という風にすることでできます.
後は,この文字に従って,
(defun outline-level-html () (interactive) (let ((str nil)) (looking-at outline-regexp) (setq str (buffer-substring-no-properties (match-beginning 0) (match-end 0))) (cond ((string-match "h1" str) ;; 階層 1 を返す 1) ((string-match "h2" str) 2) ((string-match "h3" str) 3) ((string-match "h4" str) 4) (t 100) ))) |
といった具合に,文字に応じた階層をちゃんと返すように作ってやればいいわけです.
outline-level は作ったら終わりではありません.使う必要があります. outline-level はモード毎に異なるので, hook を利用します.
そのため,まず使用したい モードの hook を探します.そして,そ の hook を利用して,
(add-hook 'html-mode-hook '(lambda () (setq outline-level (function (lambda () (save-excursion (let ((str nil)) (looking-at outline-regexp) (setq str (buffer-substring-no-properties (match-beginning 0) (match-end 0))) (cond ((string-match "h1" str) ;; 階層 1 を返す 1) ((string-match "h2" str) 2) ((string-match "h3" str) 3) ((string-match "h4" str) 4) )))))))) |
という風に指定します.
うぅむ,分かりにくい...
Wiki の何でもアウトラインモード に様々な設定例がありますので,そちらも参考にするとい いでしょう.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
アウトラインモードで現在カーソルがある行のノードをワンキーで表示したり,非表示に したりできる.
アウトラインモードでは表示や非表示を切り替えるのに別々のキー入力が必要で混乱して しまいます.
1つの関数で,現在カーソルがある部分が表示されている状態であれば非表示に,非表示で あれば表示にすることができます.
使用していませんので,インストールが必要です.
fold-dwim.el をダウンロードしてロードパスの通ったところへ置きます.
以下を .emacs に追加します.
(autoload 'fold-dwim-toggle "fold-dwim" "try to show any hidden text at the cursor" t) (autoload 'fold-dwim-hide-all "fold-dwim" "hide all folds in the buffer" t) (autoload 'fold-dwim-show-all "fold-dwim" "show all folds in the buffer" t) |
まず,outline-minor-mode か outline-mode にしておきます.そして,適当なところへカー ソルを移動し,M-x fold-dwim-toggle を実行します.すると,現在位置のノードを 非表示にできます.再度実行すると,隠した部分を表示させることができます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
テキストの任意の箇所だけを表示することができる.その結果,その部分だけが,すべて のようになるため,各種のコマンドを実行しても他に影響を及ぼさない.
長い文章などを書いていると,全体を表示していることにあまり意味が無くなります.
それよりはむしろ今編集している部分だけを表示できた方が M-> などでの移動も 便利になります.
リージョンで指定した範囲だけを表示できます.
このコマンドを実行すると,その部分だけがバッファの全てであると見なされる.そのた め,何らかのコマンド(置換など)を実行しても,表示されている部分だけを対象とできる.
標準機能ですのでインストールなどは不要です.
リージョンで指定した範囲だけを表示するのがナロイングと呼ばれる機能です.
まずリージョンを選択し,C-x n n とします.これで,リージョンの範囲内だけが 表示され,それ以外は表示されなくなります.こうしておくと,ナロイングされた範囲だ けで置換や検索ができますし,見通しもよく編集しやすくなります.
もちろん保存はファイル全体が保存されます.決してデータが消えた訳ではありません.
逆に戻すのは C-x n w でできます.
また,ページ単位でのナロイングもできます.C-x n p です.ページとは, page-delimiter で区切られた範囲であり,デフォルトでは "\C-l"(コントロール +L , C-q C-l で入力できます) です.ただし,モードによっては page-delimiter の値 は変更されます.
さらに, Emacs lisp では C-x n d とすると,今カーソルがある関数 (defun) の みがナロイングされます.
ただし,このコマンドは扱いなれていないと,面喰らうためデフォルトでは無効になって います.そのため,C-x n n としてもナロイングされず,確認を求められます.特 に問題はないので, y と答えてください.
35.2.1 ナロイングを入れ子に使う ― narrow-stack (2005/03/25) 35.2.2 ページ単位のナロイングを便利に (2005/03/25) 35.2.3 カーソル移動でページ移動を行う (2005/03/25) 35.2.4 pages-directory を便利にしよう (2005/03/30)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
通常,ナロイングは何回か繰り返しても,一番最初に戻る.これを,順番に戻っていくこ とを可能にする.
ある範囲を選択し,C-x n n でその範囲だけを表示させます.
次に,その表示されている範囲の中でまた,C-x n n とし,ナロイングを実行しま す.さらに,,,と何回かナロイングを実行したとします.
この状態で C-x n w とすると,いきなりすべての範囲が表示されてしまいます.
C-x n w で一つ前のナロイングの状態に戻すことができるようになります.
インストール済みです.普通にナロイングを使ってみてください.
My Emacs Contributions よりダウン ロードし,ロードパスの通ったところへ置きます.
以下を .emacs に追加します.
(require 'narrow-stack) (narrow-stack-mode) |
何回かナロイングを実行した後で,C-x n w として解除すると,ナロイングの状態 が一つ前に戻るようになります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ページ単位のナロイングを拡張し,ページのリストなどを表示できるようにする.
C-x n p でページ単位のナロイングができることを紹介しました.しかし,次のペー ジへ行くためには,一度 C-x n w で解除する必要があり面倒です.
次のページや前のページに簡単に移動できるようになります.
また,ページのリストなどを表示できますので,全体を把握できます.
設定済みです.
標準で付属していますので,インストールは不要です.
以下を .emacs に追加します.
(require 'page-ext) |
以下のような機能が追加されます.
ページの一覧とは
==== Pages Directory: use `C-c C-c' to go to page under cursor. ==== @chapter Meadow の便利な標準機能 @section 関数への引数 - C-u @section 様々な補完機能 @subsection 定型句の登録 - abbrev-mode @subsubsection abbrev を補完入力 - abbrev-complete @subsubsection 勝手に abbrev を展開しないようにする
という風に現在のページの一覧を表示してくれます.そして,カーソルを適当なページに 合わせて C-c C-c とすると,指定したページにジャンプすることができます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ページ単位のナロイングをした状態で,バッファの先頭や末尾にカーソルを移動し,上や 下にカーソルを移動するだけで,前後のページに移動できます.
C-x n p でページ単位のナロイングをして,次のページへ行くためには一度解除した り,C-x C-p C-n のようにする必要があり少し面倒です.
バッファの末尾にカーソルを移動して,下カーソルキーを2度入力するだけで,次のペー ジに移動できるようになります.
これにより,とても簡単にページ間移動ができるようになります.
設定済みですので,そのままで利用できます.
以下を .emacs に追加します.
(defadvice next-line (around next-line-page activate) (if (and (not (eq major-mode 'Info-mode)) (= (save-excursion (end-of-line) (point)) (point-max)) (not (= (point-max) (save-excursion (save-restriction (widen) (point-max)))))) ;; すぐにページを変えずに, 2 回連続で移動させた時のみ ;; ペーシを変える (if (eq last-command 'next-line) (narrow-to-page 0)) ad-do-it)) (defadvice previous-line (around previous-line-page activate) (if (and (not (eq major-mode 'Info-mode)) (= (save-excursion (beginning-of-line) (point)) (point-min)) (not (= (point-min) (save-excursion (save-restriction (widen) (point-min)))))) ;; すぐにページを変えずに, 2 回連続で移動させた時のみ ;; ペーシを変える (if (eq last-command 'previous-line) (progn (narrow-to-page -1) (goto-char (- (point-max) 1)) )) ad-do-it)) |
C-x n p でページ単位のナロイングにして,バッファの末尾にカーソルを移動しま す.そして,下カーソルキーを2度入力すると,次のページに移動できます.
バッファの先頭で上カーソルキーを2度入力すると,前のページに移動できます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
pages-directory でページの一覧を表示できますが,タイトルだけしか表示されません. そこで,ここでカーソルを移動するだけで,該当ページを表示させることができます.
M-x pages-directory はページの一覧が表示できて,とても便利な機能です.しか し,ページのタイトルだけですので,どのようなページなのか詳細は分かりません.
また,C-x n p としてページ単位で表示していると,他のページの情報は表示され ません.そのため,すべてのページ情報を表示するためには,一度,C-x n w をして から,実行する必要があり不便です.
常に全ページの情報を表示するようにできます.
また,カーソル移動だけで,該当ページを別ウィンドウに表示させることができます.
設定済みです.
以下を .emacs に追加すると,M-x pages-directory を実行した時に常に全ページ の情報を表示できます.
(defadvice pages-directory (around widen activate) (save-restriction (widen) ad-do-it)) |
以下を .emacs に追加すると,C-c C-c で移動した時に消すことができます.つい でに,RET でもジャンプできるようにしています.
(defadvice pages-directory-goto (around kill-pages-directory activate) (let ((cbuf (current-buffer))) ad-do-it (kill-buffer cbuf) (delete-other-windows))) (define-key pages-directory-map "\C-m" 'pages-directory-goto) |
以下を .emacs に追加すると,pages-directory のバッファでカーソルを移動させるだけ で,該当部分を表示できます.
(defun pages-directory-view (&optional next) "Go to the corresponding line in the pages buffer." (interactive) (if (or (not pages-buffer) (not (buffer-name pages-buffer))) (other-window 1)) (if next (forward-line 1) (forward-line -1)) (if (or (not pages-buffer) (not (buffer-name pages-buffer))) (progn (setq pages-buffer nil pages-pos-list nil) (error "Buffer in which pages were found is deleted"))) (beginning-of-line) (let* ((pages-number (1- (count-lines (point-min) (point)))) (pos (nth pages-number pages-pos-list)) (end-of-directory-p (eobp)) (narrowing-p pages-directory-buffer-narrowing-p)) (pop-to-buffer pages-buffer) (widen) (if end-of-directory-p (goto-char (point-max)) (goto-char (marker-position pos))) (if narrowing-p (narrow-to-page))) (if (or (not pages-buffer) (not (buffer-name pages-buffer))) (other-window 1)) ) (defun pages-directory-view-next () (interactive) (pages-directory-view t)) (define-key pages-directory-map '[up] 'pages-directory-view) (define-key pages-directory-map '[down] 'pages-directory-view-next) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
auto-fill-mode では自動的に指定した長さで行を折り返します.しかし,折り返した後で 編集すると,長すぎる行ができてしまいます.この Elisp は指定した長さを超えた部分だ けを強調表示します.
(setq highlight-beyond-fill-column-face 'highlight-beyond-fill-column-my-face)
のように auto-fill-mode で指定した長さを超えた部分のみ強調して表示 してくれます.
入手先は ですので,ここからダウンロードして,ロードパスの通ったところへ置きます.
以下を参考に設定します.
;; フェイスの設定.他にあればそれを使ってもいい (defface highlight-beyond-fill-column-my-face '((((class color) (background dark)) (:foreground "DarkSeaGreen2" :bold t)) (((class color) (background light)) (:foreground "ForestGreen" :bold t)) (t ())) "*Face used by highlight-beyond-fill-column") (setq highlight-beyond-fill-column-face 'highlight-beyond-fill-column-my-face) ;; highlight-beyond-fill を使うモードを指定 (setq highlight-beyond-fill-column-in-modes '("emacs-lisp-mode" "texinfo-mode" "lisp-interaction-mode")) (require 'highlight-beyond-fill-column) |
上記で指定したモードでは自動的にオンになりますので,特に何もしなくても勝手に色が 付きます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
指定した文字に色を付けることで,編集しているテキストを編集しやすいように見せるこ とができる.
モードによっては,フォントロックにより色が付けられます.しかし,それはあらかじめ 決められた限られたキーワードに限られます.この関数だけ強調したいなどといったこと はできません.
指定した正規表現に一致する文字のみを強調表示することができます.
To emacs or not to emacs から highlight-regexp.el をダウンロードし,ロードパスの通ったところへ置きます.
Meadow 2.00 には同等の機能を持つ hi-lock.el が附属しています.説明は 「35.5 特定の行に色をつける ― hi-lock (2004/03/07)」にあります.
以下を.emacs に追加します.
(require 'highlight-regexp) |
設定をすると,以下のキーバインドが追加されます.
例えば,C-chs カーソルとすると
カーソル
のように表示されます.フェイスは「 secondary-selection 」なので,これを
(set-face-foreground 'secondary-selection "black")
|
という風に変更できます.
35.4.1 isearch で検索中の単語をハイライト (2004/01/14)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
isearch で検索中の単語を強調表示することができます. isearch を終了しても色は消え ません.
isearch で検索すると,一致する文字がすべて強調表示されます.しかし,その色は isearch を終了すると消えてしまいます.
isearch で検索中の単語を強調表示することができます.
以下を.emacs に追加します.
(require 'hi-lock) (defun highlight-isearch-word () (interactive) (let ((case-fold-search isearch-case-fold-search)) (isearch-exit) (hi-lock-face-buffer-isearch (if (and (featurep 'migemo) migemo-isearch-enable-p) (migemo-get-pattern isearch-string) isearch-string)))) (defun hi-lock-face-buffer-isearch (regexp) (interactive) (let ((face (hi-lock-read-face-name))) (or (facep face) (setq face 'rwl-yellow)) (unless hi-lock-mode (hi-lock-mode)) (hi-lock-set-pattern (list regexp (list 0 (list 'quote face) t))))) (define-key isearch-mode-map (kbd "C-l") 'highlight-isearch-word) |
isearch で検索し,この検索語に色をつけておきたいなと思ったら,C-l とします. そうすると,フェイスを聞かれますので,好きなフェイスを選びます.
これで検索中の単語に指定したフェイスにより強調表示されます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
特定の行を強調して表示したいということがあります.例えば,章名や関数宣言の部分な どです.これらの行の背景色などを変えることができたら便利だと思いませんか?
Meadow にはそんな Elisp が附属しています. hi-lock.el です.
使い方は簡単.まず,M-x hi-lock-modeとします.これで,準備は完了です.
そして,M-x highlight-regexp とし,正規表現を入力します.そうすると,入力 した正規表現に一致する文字を含む行全体のフェイスを変えることができます.
このフェイスはM-x unhighlight-regexpで消すことができます (この時入力する正 規表現は自動的に作成されます) .
これでは,行全体のフェイスが変わってしまいますが,M-x highlight-phraseとす ると,一致した文字だけを変えることもできます.
ただし,ファイルを保存すると,フェイスの変更は消えてしまいます.これは,M-x hi-lock-write-interactive-patterns とすることで,保存することもできます.
サンプルは hi-lock.el になります.これを開くと,
のようになります.
hi-lock.el の設定サンプルは以下.なくても動きます.
;; 起動時から hi-lock を有効にする (hi-lock-mode 1) (define-key hi-lock-map "\C-z\C-h" 'highlight-lines-matching-regexp) (define-key hi-lock-map "\C-zi" 'hi-lock-find-patterns) (define-key hi-lock-map "\C-zh" 'highlight-regexp) (define-key hi-lock-map "\C-zp" 'highlight-phrase) (define-key hi-lock-map "\C-zr" 'unhighlight-regexp) (define-key hi-lock-map "\C-zb" 'hi-lock-write-interactive-patterns)) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
メールやテキストファイルで間違いを指摘する場合,どうしますか? 一つの方法は
第一条 : ロボットは他のロボットに危害を加えてはならない. ^^^^^^^^ これは「人間」のはず.
といった風に書くことでしょう.しかし,これは,環境によっては,位置がずれますし,結構面倒 です (emacs にはこんな下線を引くための under.el がありますが,,,) .
そこで,
第一条 : ロボットは他の [ロボット/人間;だよね?] に危害を加えてはならない.
と書けば分かりやすい,というのが真鵺道 (まぬえど) という校正手法であり,その手法を Emacs で簡単に真鵺道による校正を行うことができる Lisp が manued です.
使うためには, 真鵺 道よりダウンロードし,解凍します.そして,ディレクトリ毎, site-lisp 下へコピーし ておきます (manued.el さえ,あれば動きます) .
そして,.emacs に以下を追加します.
(autoload 'manued-minor-mode "manued" "manuscript editing mode" t) |
これで,利用できます.始めて使う場合には, tutorial/Japanese/manued.tut を開き, M-x manued-minor-modeとします.これで,基本的な操作を学ぶことができます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
フェイスを変更して,その結果を保存するとエラーになる環境もあるようです.原因はよ く分からない...
Meadow はテキストエディタを核としていますので,基本的には文字色などの情報のないテ キストだけを扱います.
余談ですが, Emacs lisp で色がつくじゃないか,という意見もあるかもしれません.あれ はある条件に当て嵌まる文字を Meadow が強調して表示しているだけで,そういう情報がテ キストファイルに埋め込まれているわけではありません.したがって,別の設定を持つ Meadow で見ると見た目が変わります.
そこで,テキストファイルに任意の色を付けたりしたいということがあります.
ワープロのように,テキストに任意の色,フェイス,センタリングなどを指定できます. また,その結果を保存することもできます.
これを使ってファイルを編集し,保存すると特殊な形式で保存されます.例えば,
Content-Type: text/enriched Text-Width: 70red 赤字でセンタリング
のように保存されます.このファイルを Meadow で見ると
赤字でセンタリング
のように見えますが,普通のエディタなどで見ると上の用に見えます.そのため,プログ ラムのソースファイルや Elisp のファイルなどで利用することはできません.
そのため,普通は text-mode と組み合わせて使います.
標準で付属していますので,不要です.設定も必要ありません.
Meadow には enriched-mode のサンプルテキストが付属しています. 「 e:/unix/Meadow2/2.00b2/etc/enriched.doc 」にありますので,普通にC-x C-f で開いてみてください.
フォントが太字や斜体になっていたり (フォント設定が正しければ) ,色が変わっていると 思います.
まず適当なファイルを作ります.拡張子が「 txt 」のテキストファイルがいいでしょう. 作ったら,そのファイルを開きます.ファイルを開いて,「 text-mode 」になっていない ようなら,M-x text-modeとして,「 text-mode 」にしておくといいでしょう.
そして,M-x enriched-mode とします.
これで,「エンリッチモード」になりました.これはマイナーモードですので,他のモー ドと組み合わせて使うことができます.
それでは,適当に文字を書いてみてください.そして,それをリージョンで選択します. 次に,Ctrl+ マウスの右ボタン を押すとメニューが出ます.そのメニューの中に 「 Text Properties 」というメニューがありますので,これを選びます.すると,スクリー ンショットのようなメニューが出ます.
ここでは, Foreground Color を選び,「 Other... 」を選択します.そうすると,ミニバッ ファにカーソルが移動しますので,適当な色を選択します.ここでは,「 red 」を選択し ておきます.
すると,リージョン内の文字が赤色に変わります.こんな風に,リージョンで選択して, メニューを選択していくと,色などを変えることができるのです.
同じメニューはメニューの Edit にもありますので,そこから選択することもできます.
他に利用できるメニューは以下の通りです.ついでに,キーボードでの操作も上げておき ます.
デフォルトではM-gでメニューが表示される.多くの人は変えていると思いますけ ど...
これで保存するとエラーになってしまうかもしれません.
M-x facemenu-set-foreground
M-x facemenu-set-background
いろいろと試してみると,楽しいでしょう.
enriched-mode を試してみると,不思議なことに気付かれたかもしれません.
例えば,
長い文章を書いている時には,リターンキー を使って,適当に折り返していきます.しかし,再 編集すると右端が揃わ なくなってしまいます.というこ とで, M-q を使って,折り返しをやり なおさせるのですが, enriched-mode ではうまく 折り返しのやり直しができないんです.
という文章があったとします.改行キーで適当に折り返しながら,編集をしたところ右端 が揃わなくなったという,よくある例です.
右端を揃えたいなと思ったら,普通は,M-qとしてやればできますが, enriched-mode では変化しません.
これは, enriched-mode が 2 種類の改行を使い分けているためです. 2 種類の改行とは「ハー ド改行」と「ソフト改行」です.
「ハード改行」とは,空行 (改行だけの行) を含む改行のことです. enriched-mode で見る と,空行なんてないように見えますが,普通のテキストエディタで見ると,RETで 改行したところはすべて空行ができています.例えば,上の例を普通のテキストエディタ で見ると, 1 行おきに文が書いてあることを確認できます.
この「ハード改行」は段落の区切りやリストの項目など,そこで改行することに意味があ る改行として使われます.したがって,M-q としても詰め込まれることがないので す.
つまり,RETやC-oを押したということは,「そこで文のまとまりが切れるの で,くっつけたりしては駄目」と言っていることになるのです.
逆に「ソフト改行」は「別に意味はないけど,右端に来たから見易いように改行しておこ う」というものです.M-qで詰め込んだ際にできる改行やM-x auto-fill-modeで挿入される改行など,RETを入力しなくても改行されるものが該 当します.
普通のテキストと違い, 2 種類の改行に少し気をつけていないと,とまどうことになりま す.
ということで, enriched-mode では見た目だけのために改行を入れずに, auto-fill-mode とM-q(fill-paragraph) を活用しましょう.
ソフト改行であれば,M-qで改行をやり直すことができます.しかし,この行だけ は右端まで行っても折り返して欲しくない時があります.
そんな時は,メニューの「 Justification → Unfilled 」を選びます.これで,この行は自 動的に折り返されることはありません.逆に「 Justification → Full 」を選ぶと,折り返 すようになります.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |