YaTeX の auto-fill-mode と 物理行移動
Emacs(Meadow)はキーの↑と↓が標準で論理行移動になっている。TeXなんかで長い文章を書くと、↑と↓を押すととんでもなく遠くに飛ばされることになる。YaTeXではそれの回避のためか、自動で改行を入れる仕様になってる。しかし、部分的な修正をすると右側がそろってなくて激しく気持ち悪い。かといって書き足すたびに整形(C-j だっけ?)させるのもめんどくさすぎる。
はっきり言って、文章の途中に改行なんてやってられん。
まず、YaTeXの自動Fill機能を切る。.emacsに以下を追加。
(add-hook ' yatex-mode-hook '( lambda () (auto-fill-mode -1) ) )
これでyatex-modeで自動改行がされなくなる。
つぎに、物理行移動。物理行移動ができるようになるemacs-lispはふたつある。
今はMeadow3を使っているのだけれど、どうも昔から使っていたKomatsuさんのphysical-line.elはMeadow3と相性が悪いみたい。C-eがC-nになる。ソースを追いかけて修正するのも嫌なので、Kamedaさんの方を採用。
ただ、モード名、ファイル名ともに「physical-line」、とKomatsuさんのものと完全にかぶる。一応昔の環境も残しておきたいので、
physical-line.el→physical-line-kameda.el
と変更。そして、physical-line-kameda.elの最後の行を
-(provide 'physical-line) +(provide 'physical-line-kameda)
としてる。これを有効にするには、.emacsで
(require 'physical-line-kameda) (setq-default physical-line-mode t)
とするだけ。で実際につかうと、カーソルキーの↑と↓で動きません。どうも、キーのハンドラ名がC-n(C-p)と↓(↑)が違うらしい。
キー名と、実行されるハンドラ名はこうなってた。
- C-n:next-line
- C-p:previous-line
- [down]:next-line-nomark
- [up]:previous-line-nomark
キーハンドラは、M-x describe-key で見られます。
Kamedaさんphysical-lineはnext-lineで実行される関数リストにadviceで加えられているらしい。なので、[down][up]に下のように割り当て直してみた、
(global-set-key [up] 'previous-line) (global-set-key [down] 'next-line)
なんでか動かない。ということで、physical-line-kameda.elでnext-line-nomarkとprevious-line-nomarkが飛んできたら、同じようにphysical-lineで動くように登録してみる。ファイルの中に「advice」というセクションがあるのでそこに
(defadvice next-line-nomark (around physical-line-next-line activate) (if (and physical-line-mode (or (interactive-p) (memq this-command physical-line-active-command-list ) );or );and (physical-line-next-line arg) ad-do-it );if );defadvice (defadvice previous-line-nomark (around physical-line-previous-line activate) (if (and physical-line-mode (or (interactive-p) (memq this-command physical-line-active-command-list ) ) ) (physical-line-previous-line arg) ad-do-it ) )
と追加。emacs-lispとかよく分かってないので、adviceのところをコピって登録ハンドラ名を変えただけ。もっといい方法がある気がするけど、まあ、いいや。
これで晴れて、YaTeXで自動改行されずに、物理行移動がカーソルキーで移動できるようになります。