YaTeX の auto-fill-mode と 物理行移動

EmacsMeadow)はキーの↑と↓が標準で論理行移動になっている。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で自動改行されずに、物理行移動がカーソルキーで移動できるようになります。