sakito - Emacsがすきすぎる

2011-03-13Emacs 23.3 の変更点メモ このエントリーを含むブックマーク

2011年3月10日に Emacs 23.3 が リリースされました。誰か書いているかもしれないけど 23.2 からの主な変更点をメモしておきます。

勘違いとかあるかもしれないけど、とりあえず。

全ての変更点を確認したい場合は C-h n もしくは M-x help n で確認できます。

  • 初期設定だとバックアップファイルが user-emacs-directory(.emacs.d)以下に保存されるようになった
  • user-emacs-directory(.emacs.d)の初期パーミッションが umask を無視して 700 で生成される
  • python.el に python-remove-cwd-from-path が追加され nil に設定するとカレントディレクトリを sys.path に追加する
  • VC に新しいコマンドが増えた
  • log-edit.el を利用する時、バッファに追加のマーク用の文字がでるようになった。いくつかの SCM/VCS では有用
  • lmenu.el と cl-compat.el が obsolete になった
  • smie.el が標準パッケージに追加。プログラミング言語用のモードとか作り易くなる
  • Emacs Lisp で e とか pi が obsolete になり float-e や float-pi に変更

2011-02-06Emacsで改行文字やタブ文字等を検索置換する このエントリーを含むブックマーク

何人か知らない人にであったので自分の覚え書きも含めて書いておきます。

Emacs で改行やタブを検索や置換する場合は「C-q」もしくは「M-x quoted-insert」を利用します。C-qをprefixとして出る主な文字を以下に表にしてみます。

以下の表の見方ですが、「C-i」と書いてある物は「C-q C-i」で出る文字。「Tab」等はTabキーの事です。

キー出る文字補足
C-gベル(¥a)^G
C-h後退(¥b)^H
C-i水平タブ(¥t)
Tab水平タブ(¥t)
C-j改行(LF,¥n)
改行改行(LF,¥n)
C-k垂直タブ(¥v)^K
C-l書式送り(¥f)改ページとして利用されます
C-m復帰(CR,¥r)^M
C-ESCエスケープ(¥e)^[
C-[エスケープ(¥e)^[
C-?抹消^?

全部を知りたければ http://ja.wikipedia.org/wiki/ASCII を見れば表があります。

2010-11-09Emacs のカレンダーを設定する このエントリーを含むブックマーク

M-x calendar でカレンダーが起動するのですが、デフォルトだと祝日とか表示できてないので設定してみます。

基本的には「Emacs のカレンダーに日本の祝日を設定する - http://rubikitch.com/に移転しました」に書いてあるままで良いです。

祝日設定ファイルは以下にあります。

http://www.meadowy.org/meadow/netinstall/browser/branches/3.00/pkginfo/japanese-holidays/japanese-holidays.el

Emacs 23 では以下のように設定すればよいです。以下のは obsolute な部分を置換してあります。

(require 'calendar)
;; キーの設定
(define-key calendar-mode-map "f" 'calendar-forward-day)
(define-key calendar-mode-map "n" 'calendar-forward-day)
(define-key calendar-mode-map "b" 'calendar-backward-day)
;; 祝日をマークする
(setq calendar-mark-holidays-flag t)
(require 'japanese-holidays)
(setq calendar-holidays
      (append japanese-holidays holiday-local-holidays holiday-other-holidays))
;; 今日をマークする
(add-hook 'today-visible-calendar-hook 'calendar-mark-today)
;; 日曜日をマークにする
(setq calendar-weekend-marker 'diary)
(add-hook 'today-visible-calendar-hook 'calendar-mark-weekend)
(add-hook 'today-invisible-calendar-hook 'calendar-mark-weekend)

2010-06-20Emacs で小指を痛めないための工夫 このエントリーを含むブックマーク

Emacs 使いの多くは Ctr キーを小指で押すようです。SKK などを利用しているユーザの場合は Shift キーも小指で押しているようです。

このような運指のため、 Emacs 使いの多くは小指を痛めがちです。

小指を痛めない工夫は必要です。

運指その物を根源的に変えてしまうのが場合によっては良かもしれません。とりあえずソフトウェア的にキー配列を変えることで、運指を変えてみます。

小指を痛めないように親指で Ctr や Shift を押せるようにしてしまいます。

工夫の種類

「親指 Ctr」
「英数」キー、「カナ」キー、「無変換」キー、「変換」キー等を Ctr キーに割り当てることで親指で Ctr を押せるようにします。
マウス Ctr」
多ボタンマウスであるならば、親指ボタン等がありますので、親指ボタンに Ctr キーを割り当てればマウスを使う人は便利でしょう。
「SandS」
スペースキーにシフトキーの機能も持たせます。

必要に応じて設定します。

設定するためのソフト

マウス Ctr」はマウスドライバで設定することになります。

「親指 Ctr」、「SandS」は以下のソフトを利用すれば設定可能です。

Windows の場合

Mac の場合

Linux の場合

KeyRemap4MacBook での設定

KeyRemap4MacBook をとりあえずインストールして、再起動して、システム環境設定にて設定します。

「親指 Ctr」は以下を設定します。

  • EISUU to Control_L(+ When you type Shift+EISUU only, send Escape) (+ When you type EISUU only, send EISUU)
  • KANA to Control_L(+ When you type KANA only, send KANA)

「SandS」は以下を設定します。

  • Remap Space Key -> Space to Shift_L (SandS)

好みによって多少変えても良いでしょう。

あとは慣れると小指をほとんど酷使しなくなります。

人のキーボードが使えなくなったり、無闇に変なスペースを入れてしまったりする副作用がありますので、気をつける必要があります。

2010-03-13Mercurial の merge を Emacs で このエントリーを含むブックマーク

GUIEmacs で merge を実施するための設定をします。 emacscliet を利用します。

.emacs.d/init.el(Emacs21以前の人は .emacs.el) に以下のように設定します。

(require 'server)
(unless (server-running-p) (server-start))
(setq server-visit-hook
      '(lambda () 
         (raise-frame (selected-frame))
         (x-focus-frame (selected-frame))))

elscreen を利用している人は elscreen-server(ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-server-0.2.0.tar.gz)も設定しておくと便利です。

(require 'elscreen-server)

.hgrc 等に emacsclient を呼ぶための設定をします。

[merge-tools]
emacsclient.args = --eval "(ediff-merge-with-ancestor \"$local\" \"$other\" \"$base\" nil \"$output\")"

これで hg merge したり、hg up で merge が発生したときに Emacs を emacscliet 経由で呼びます。

Terminal 内の Emacs を利用する場合は .hgrc を以下のように設定すると良いです。

[merge-tools]
emacs.args = --eval "(ediff-merge-with-ancestor \"$local\" \"$other\" \"$base\" nil \"$output\")"

ediff-merge-with-ancestor が呼ばれます。

n キーで下の差分、p キーで上の差分、a で左側を反映、b で右側を反映、q で現在の変更を保存して終了、? で help の表示非表示切り替え、になります。

merge するファイルが多数あっても q で終了すると次の merge に移行します。

操作は ediff と同じになります。

ediff のコントロールウィンドウがうざい人は以下を .emacs.d/init.el に設定しておくと良いでしょう。

;; ediff の操作用小ウィンドウを新規 frame にしない
(setq ediff-window-setup-function 'ediff-setup-windows-plain)