ラベル emacs の投稿を表示しています。 すべての投稿を表示
ラベル emacs の投稿を表示しています。 すべての投稿を表示

2011年7月5日火曜日

emacs で「Ricty (リクティ)フォント」を使う?

で「IPAフォント」を使っていたが、漢字はともかく、英数字がどうもいまいちという感であった。
そんな時、
というフォントを見つけた。このフォントは英字フォント「Inconsolata」とIPAフォントの派生バージョンである「Migu 1M」を合成したものである。
ライセンスの都合上、完成品ではなく、「FontForge」で合成する環境を提供している。何れにせよ、両フォントとも等幅フォントで、英字と漢字は「1:2」の幅に固定なので、なる程、プログラミングには使い易いかもしれない。

しかし、私は、どうせ emacs でしか使わないので、わざわざ合成しなくても「Inconsolata」と「Migu 1M」をそのまま使えば良い。
という記事にも「Inconsolata」と漢字のフォントを emacs で使用する事例が紹介されているので、これを真似る事とした。
  • ~/.emacs

(set-default-font "Inconsolata-9")
(set-face-font 'variable-pitch "Inconsolata-9")
(set-fontset-font (frame-parameter nil 'font)
                  'japanese-jisx0208
                  '("Migu-1M-regular" . "jisx0208")
                  )
記事のほうは「Inconsolata-11」となっていたが、少し大きめに感じたので、「Inconsolata-9」と少し小さくした。
これは、英数字も漢字も共に評判の良いフォントなので、かなり見栄えが良くなったし、色々なところで、表示のズレがあったが、これもほとんど解消されて、快適である。

2011年5月11日水曜日

emacs TRAMP で、リモート・サーバを sudo で接続する

emacs の 「TRAMP」は大変便利なので、かなり以前から使っていたが、バージョンが「2.1」になってから、多段接続するためのメソッド「multi」が廃止となってしまった。
やりたい事は、
ローカルマシン -> ssh -> リモートサーバ -> sudo
ということで、TRAMPの「2.0」では、以下のようにすればよかった。
/multi:ssh:foo@remote:sudo:root@localhost:/...
これは、例えば、リモートサーバ側に emacs がインストールされておらず、かつ、root で作業したい場合、とても便利だった。

そこで、TRAMPのマニュアル「5.9 Connecting to a remote host using multiple hops」や、色々検索して調べてみたところ、
tramp-default-proxies-alist
に多段接続する条件を追加するらしい。設定方法は、 
(add-to-list 'tramp-default-proxies-alist
                  '("ホスト" "ユーザ" "接続方法")) 
「ホスト」、「ユーザ」には正規表現が使用でき、「nil」を指定すれば、すべての場合にマッチする。
つまり、「/メソッド:ユーザ@ホスト]とした場合、「接続方法」で記述した方法で一旦接続した後に、指定された方法で接続を行なう。
例えば、
(add-to-list 'tramp-default-proxies-alist
                  '("host2" "foo" "/ssh:foo@host1"))
とした場合、
/ssh:foo@host2:/...
に接続すれば、
ローカルマシン -> ssh -> foo@host1 -> ssh -> foo@host2
という経路で接続できる。これば、「host2」へ直接接続できない場合などで有効だが、これならば、ssh の設定でもできる。
  • ~foo/.ssh/config
Host host2
  ProxyCommand ssh foo@host1 nc %h %p
これで、「ssh host2」とすれば、
ローカルマシン -> ssh -> foo@host1 -> nc -> foo@host2
となる。この場合、踏み台にする「host1」から「host2」への接続に「nc」コマンドを使うので負荷も少ない。
ただし、「host1」への接続が、ユーザ「foo」でない場合は、この方法は使いずらい。「host1」から「host2」へは同じユーザで接続するからである。(「nc」を sudo で別ユーザで起動すればできるのかなぁ?)
とにかく、TRAMP では、リモートサーバで sudo (主に root)で作業する事に専念する事とした。したがって、
  • ~/.emacs 
(add-to-list 'tramp-default-proxies-alist
             '(nil "\\`root\\'" "/ssh:%h:"))
(add-to-list 'tramp-default-proxies-alist
             '("localhost" nil nil))
(add-to-list 'tramp-default-proxies-alist
             '((regexp-quote (system-name)) nil nil))
という設定を行なった。
最初の設定は、とにかく、ユーザが「root」なら、まず、ssh で指定ホスト(「%h」で置き換わる)に接続する。
2番目の設定は、ホスト名が「localhost」なら何もしない。
さらに、3番目の設定は、ホスト名がローカルマシンのホスト名なら、やはり、何もしない。
したがって、
/sudo:host1:/...
ならば、
ローカルマシン -> ssh -> host1 -> sudo
 と接続できる。「/sudo」メソッドでユーザ名を省略すると「root」が想定される。
また、
/sudo:localhost:/...
/sudo:myhost@mydomain.co.jp:/..
などとすれば、ローカルマシンで「sudo」が実行される。ちなみに「/sudo::/...」と、ユーザ名、ホスト名共に省略すると、「root@自ホスト名.自ドメイン名」が想定されるので、3番目の設定が、これに対応したものでもある。
ただし、3番目の設定は、emacs のバージョンが「21」ではエラーとなってしまうので注意が必要である。
まあ、横着せずに、ローカルマシンでも、リモートサーバでも、ホスト名はしっかり記述すれば良いのであるが…。

2011年3月15日火曜日

cygwin emacs 23.3

Cygwin の emacs が、「23.3」にバージョンアップした。
以前、「cygwin coreutils と emacs dired」で、ls の日本語形式の場合、dired の動作が変であったが、「23.3」にバージョンアップしたら、なぜか直ってしまった…?。

したがって、emacs を起動する alias は、
alias e='export SHELL; env LANG=ja_JP.UTF-8 emacs &'
に戻した。

2011年2月28日月曜日

emacs popwin.el その2

「popwin.el」が
ということなので、早速適用した。
今回、対話コマンドが色々と追加になっていたので、以下のキーバインドを設定した。
(global-set-key "\C-xp" 'popwin:display-buffer)
(global-set-key "\C-xP" 'popwin:display-last-buffer)
これで、閉じてしまったポップアップウィンドウを、素早く元に戻せる。

2011年2月25日金曜日

emacs で「IPAフォント」を使う

前に、
 で「MS ゴシック」を使い始めたが、やはり、マイクロソフトのフォントは見栄えが良くないので、「IPAフォント」
 を使うこととした。使うのは等幅フォントだが、「4書体パック(Ver.003.02)」をダウンロードし、以下、
  • IPAゴシック
  • IPA Pゴシック
  • IPA明朝
  • IPA P明朝
の4つのフォントをインストールする。
次に、Cygwin-X でTrueTypeフォントを参照する設定を行なう。
$ cd ~/.fonts
$ ln -s /c/WINDOWS/Fonts/ipag.ttf
$ ln -s /c/WINDOWS/Fonts/ipapg.ttf
$ ln -s /c/WINDOWS/Fonts/ipam.ttf
$ ln -s /c/WINDOWS/Fonts/ipapm.ttf
 これで、Cygwin-X を再起動し、「.emacs」は前回と同様に、

(set-face-attribute 'default nil
                     :family "IPA明朝"
                     :height 90)
(set-fontset-font "fontset-default"
                     'japanese-jisx0208
                     '("IPA明朝" . "jisx0208-sjis"))
とすれば良い。


半角、全角混りだと、若干ずれる場合があるようだが、概ね見やすくて良い。
しばらくは、これで使ってみろ事とする。

2011年2月15日火曜日

emacs popwin.el

ということで、「popwin.el」 を使ってみることとした。

・~/.emacs

;
; popwin
;
(require 'popwin)
(setq display-buffer-function 'popwin:display-buffer)
(setq popwin:special-display-config '(
                                      ("*Help*")
                                      ("*Completions*" :noselect t)
                                      ("*compilatoin*" :noselect t)
                                      ("*Occur*")
                                      ("*Kill Ring*")
                                      ))
デフォルトの他に「browse-kill-ring」のバッファ「*Kill Ring*」もポップアップしたいので、デフォルトのバッファも含め、「popwin:special-display-config」に設定した。
また、「*Completions*」(補完候補)は「lcomp.el」 で自動的に閉じるようにしていたが、「lcomp.el」をやめ、「popwin.el」に切替えることとした。
「*Help*」はともかく、「*Kill Ring*」は使用後に元も戻るので、これは大満足である。
「*Occur*」は、一つ選択すると元に戻ってしまうので、これは微妙…、でも、このほうがいいかな。

2011年1月31日月曜日

emacs で「MS ゴシック」を使う

現在、Cygwin-X 上で使用している Emacs 23 で使用しているフォントは、「東雲 ビットマップフォントファミリー」の12ドット(東雲-12)である。

・~/.Xresources
Emacs.Fontset-0: -shinonome-gothic-medium-r-normal--12-*-*-*-*-*-fontset-12
Emacs.font:      fontset-12
X-Windowの起動時に、「xrdb -load ~/.Xresources」とすれば、Cygwin-X の Emacs だけでなく、他のホストより起動した Emacs も東雲フォントが設定される。

しかし、Cygwin-X Emacs で「東雲-12」フォントを使っていると、どうしても、半角/全角混りの場合、特に空白文字があったりすると、上下のカラム位置がずれる。表や、先日の「emacs calfw.el」でも、そこが不満であった。

確かに、東雲フォントは綺麗なので、とても気に入っているのだが、 Cygwin-X 上の Emacs では、どちらかといえば、コーディングより、howm などで文章作成が主体であるので、できれば、ずれないほうが良い。

そこで、Cygwin-X 上の Emacs では、「MS ゴシック (9ポイント)」を使うこととした。設定方法は、色々ググってみたところ、以下のようにするのが簡単で良いようだ。

(set-face-attribute 'default nil
            :family "MS ゴシック"
            :height 90)
(set-fontset-font "fontset-default"
            'japanese-jisx0208
            '("MS ゴシック" . "jisx0208-sjis"))
「~/.Xresources」の設定は、そのままとしておき、他のホストより起動した Emacs は東雲フォントを使う。
実際、他のホスト、とは、ほとんど Linux系で、Emacs のバージョンもまだ「21」だったりするので、「東雲フォント」のほうが良いというか、多分、「MS ゴシック」は使えないのでは、と思う。まあ、それ以前に「MS ゴシック」を使いたいとは思わないが…。

・ 2/3 追記
タブがなぜか2倍の文字幅で表示されるので、ちょっと見づらい。そこで、
(setq-default tab-width 4)
としたが、「untabify」すると、タブが半角の空白文字で4文字になってしまうので、これまた都合が悪い。結局、
(setq-default indent-tabs-mode nil)
として、インデントではタブを使用しない、という設定にした。
現在、「howm」では、保存時に自動的に「untabify」するようにしているので、このほうが都合が良い。

2011年1月24日月曜日

emacs calfw.el その3

calfw.el を使い始めて、howmとの連携もまあまあ満足できる感じだ。
私の場合、howm のディレクトリを複数切替えて使ったり、また howm をCVSで管理し、このCVSリポジトリを複数マシンで Dropbox を使用して共有したりしている。
そこで、howm ディレクトリを切り替えたり、CVSでアップデートした事により diary ファイルの内容が変ったと時、カレンダーの表示が変らないのである。「r (cfw:refresh-calendar-buffer)」コマンドでも変化しない。

・calfw-howm.el

(defun cfw:install-howm-schedules ()
  (interactive)
  "howmスケジュールからデータを取って表示する。"
  (add-to-list 'cfw:contents-functions 'cfw:howm-schedule-period-to-calendar)
  (add-hook 'howm-after-save-hook 'cfw:howm-schedule-cache-clear)
  (add-to-list 'howm-menu-allow 'cfw:howm-schedule-inline)
  )
「howm-after-save-hook」に「cfw:howm-schedule-cache-clear」が設定されているので、howm で普通に予定を書き込んだ場合は、キャッシュがクリアされ、あらためて予定がカレンダーに読み込まれ、その予定がカレンダーに表示される。

そこで、「r (cfw:refresh-calendar-buffer)」コマンドを実行する時に、常に「cfw:howm-schedule-cache-clear」を実行する事とした。

・~/.emacs

(defadvice cfw:refresh-calendar-buffer (before refresh-calendar activate)
  (cfw:howm-schedule-cache-clear))
これで、「r (cfw:refresh-calendar-buffer)」コマンドを実行すれば、常に最新のスケジュールがカレンダーに表示される事となる。

2011年1月20日木曜日

emacs calfw.el その2

前日
で、大きなカレンダーを表示できるようにしたが、やっぱり、予定も入力したいので、やはり
で紹介されている emacs-lisp をちょっと修正した。

・ ~/.emacs
(require 'calfw)

(defvar my-howm-schedule-page "Jan  8, 2008")
(defun my-cfw-open-schedule-buffer ()
  (interactive)
  (let*
      ((date (cfw:cursor-to-nearest-date))
       (howm-items
        (howm-folder-grep
         howm-directory
         (regexp-quote my-howm-schedule-page))))
    (cond
     ((null howm-items) ; create
      (howm-create-file-with-title my-howm-schedule-page nil nil nil nil))
     (t
      (howm-view-open-item (car howm-items))))
    (goto-char (point-max))
    (unless (bolp) (insert "\n"))
    (insert
     (format "%s [%04d-%02d-%02d 00:00]@ "
             (calendar-date-string date t t)
             (calendar-extract-year date)
             (calendar-extract-month date)
             (calendar-extract-day date)))))

(add-hook 'howm-menu-hook
          '(lambda ()
             (local-set-key "k" 'calendar)
             (require 'calfw-howm)
             (cfw:install-howm-schedules)
             (local-set-key "Y" 'cfw:open-howm-calendar)
             (define-key cfw:howm-schedule-map (kbd "i") 'my-cfw-open-schedule-buffer)
             ))
「my-howm-schedule-page」に設定している「Jan  8, 2008」は、現在の「diary」ファイルの先頭に入っている日付である。一応、これで、 「diary」ファイルを検索して挿入することができる。

形式は、「diary-insert-entry」で入る日付と、howm風日付の両方入れる。
Jan 20, 2011 [2011-01-20 00:00]@ ■
時間は、とりあえず「00:00」としておく。

これで、calfw と howm と calendar を連携できた、かな?。

2011年1月19日水曜日

emacs calfw.el

emacs のカレンダーコンポーネント calfw.el を使ってみた。
howm とも連携できる、との事だが、元々、標準の calendar と連携して使っていたので、とりあえず、標準の calendar の補助的なものとして使ってみる。

・ ~/.emacs

;
; howmメニューからカレンダーを起動する
;
(require 'calfw)
(add-hook 'howm-menu-hook
          '(lambda ()
             (local-set-key "k" 'calendar)
             (require 'calfw-howm)
             (cfw:install-howm-schedules)
             (local-set-key "Y" 'cfw:open-howm-calendar)
         ))
(setq howm-default-key-table
      (append '(("k" calendar t t)) howm-default-key-table))
(setq howm-default-key-table
      (append '(("Y" cfw:open-howm-calendar t t)) howm-default-key-table))
(howm-set-keymap)
キーバインドは「Y」とした。
プロポーショナル・フォントなので、ちょっとズレるが、まあ、良いだろう。


howm のスケジュールを取り込め、日付をクリックすれば、howm を検索してくれるので、標準の calendar との連携で行なっていた事と同じことができる。
標準の calendar との連携は、他には、「calendar から howm風の日付入力」、 も行なっており、予定の入力も、calendar の標準機能(diary-insert-entry)を使用している(同時にhowm風の日付も入力する)。
「calfw から予定を入力」ができれば、howm風の日付も自動で入力できるようになりそうだが、標準の calendar との連携もあるので、もう少し様子を見てからとしたい。

2011年1月3日月曜日

cygwin coreutils と emacs dired

cygwin の coreutils が 8.5-2 から 8.8-1 へバージョンアップした。
ところが、これにより、ls コマンドの出力形式が、
-rwxrwxrwx  1 iizu Local 24498 2011-01-03 20:44 .emacs
から、
-rwxrwxrwx 1 iizu Local 24498 1月   3 20:44 .emacs
と変った。つまり、月日が日本語形式になった。日のほうは、数字(day-of-month)だけだが…。
しかし、emacs の dired で一部のファイル名が認識できなくなった。
これは ls コマンドの出力形式が変ったために、ファイル名を取り出すパターンマッチングに失敗しているようだ。
-rwxrwx---  1 iizu Local    38 12月 19  2003 .profile
上記のように、月が 10 ~12 と2桁なら認識するが、1~9月の1桁だと認識しない。
このファイル名を認識するパターンは、「directory-listing-before-filename-regexp」という変数で定義されている。

・/usr/share/emacs/23.2/lisp/files.el
(defvar directory-listing-before-filename-regexp
  (let* ((l "\\([A-Za-z]\\|[^\0-\177]\\)")
  ...
     ;; Japanese MS-Windows ls-lisp has one-digit months, and
     ;; omits the Kanji characters after month and day-of-month.
     ;; On Mac OS X 10.3, the date format in East Asian locales is
     ;; day-of-month digits followed by month digits.
     (mm "[ 0-1]?[0-9]")
     (east-asian
      (concat "\\(" mm l "?" s dd l "?" s "+"
          "\\|" dd s mm s "+" "\\)"
          "\\(" HH:MM "\\|" yyyy l "?" "\\)")))
月の数字のパターンは、1桁でも良いようになっているようだが、実際にはなぜかマッチしない。
他に何か理由があるのか、今の所不明である。
解決方法として、
  1. coreutils を 8.5-2 に戻す。
  2. directory-listing-before-filename-regexp を修正する。
  3. 環境変数 LANG を非日本語にする。
の3つが考えられるが、1の方法は cygwin の更新を setup でチェックする時、毎回 coreutils を 8.5-2 に戻す設定をしなければならないので、少々面倒である。
また、2の方法は、files.el を直接書き直しても、修正が反映されなかった。
そこで、3の方法で回避する。現在、emacs を起動する時、「.bashrc」で、

・.bashrc
alias e='export SHELL; env LANG=ja_JP.UTF-8 emacs &'
という alias を定義して起動している。これを、
alias e='export SHELL; env LANG=C emacs &'
と変更した。これにより、ls のコマンドの出力が
-rwxrwxrwx  1 iizu Local 24498 Jan  3 20:44 .emacs
と英語形式になるので dired でもちゃんとファイル名が認識される。
ファイル名が日本語であっても、環境変数 LANG に関係無く正しく表示されるので、当分、これでやってみる事とする。

(2011年3月15日 追記)
emacs が 23.3 にバージョンアップしたところ、上記の問題は解決した。→「cygwin emacs 23.3」

2011年1月1日土曜日

howm バージョンアップ

howm が1年ぶりにバージョンアップした。
上記URLから「howm-1.3.9.tar.gz」をダウンロードし、展開し、ビルドする。
$ tar xvfz howm-1.3.9.tar.gz
$ cd howm-1.3.9
$ ./configure
$ make
$ make install
ほとんど変更が無いとの事なので、ビルドもインストール後の動作も特に問題無し。
howm は、cygwin 上の emacs でのみ使用しているが、cygwin でも問題無し。
今は、自宅のPCをバージョンアップしたが、あと、会社と外出先のPCもバージョンアップする必要あり。

1/3 追記
emacs-24でのバグ修正で、ちょいバージョンアップ