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月23日日曜日

Firefox Text Link

ページ内のリンクされていないURI文字列を、ダブルクリックすると、そのURIを開いてくれるアドオン
が、1年ぶりにバージョンアップした。Thunderbird 3.1にも対応している。
このアドオンは以前から使っていたが、一時期、Thunderbirdでバージョンが合わなくなり、使うのをやめようかと思ったが、やはり、このアドオンはとても便利なので、このバージョンアップを機に、また使うこととした。

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 との連携もあるので、もう少し様子を見てからとしたい。

Dropquest 2011

Dropboxが容量を1GB増やすことができるゲーム
を実施している。
ノーヒントでやると、とても解けないが、攻略ガイドがある。
これは英語版で、日本語版が、
である。
実際に、このガイド通りにやると、本当に 1GB 増えた!。
一気に 1GB 増えるのではなく、ステップごとに、少しずつ増えてる。


以前もキャンペーンでちょこっと増えているので、現在はトータルで 3.63GB である。

2011年1月17日月曜日

Firefox Fasterfox Lite

前回、
でお掃除するようにしたが、今回は、
でスピードアップをしてみた。このアドオンをインストール後、


というように、パイプラインを有効にすると、速くなるとのことである。
まだ、ちゃんと測定はしていないが、何となく速くなったような気がする…。

2011年1月12日水曜日

サイボウズの掲示板の更新をメールで通知する

我が社のサイボウズ・オフィス6は、社外からはアクセスできない。
スケジュールはともかく、掲示板は、全社の重要なものは、総務の人が全社員に同じ内容をメールしてくれるが、その他諸々は社内にいないと分らない。
そこで、掲示板の更新を検知して、掲示板の内容をメールで送信するようにしてみた。

まず、 サイボウズはユーザー認証もあり、掲示板などの更新はどのようにして取得するのか。そこで、以下のPerlモジュールを調べてみた。
ユーザー認証はオーケーだったが、肝心の「externalAPINotify」はアクセスできない(そんなページは無い、というエラーになる)。多分、同じバージョン6でも、色々違いがあるようだ。

そこで、リマインダーの挙動を調べてみたところ、「RMDigest」というページを参照して掲示板の更新の有無を取得している、ということが分った。

・ http://サイボウズのサーバ/cgi-bin/cbag/ag.cgi?page=RMDigest  (ユーザー認証略)
ほげほげ さんの最新情報(16 時 54 分更新)
掲示板,"page=BulletinView&bid=2243&gid=3628","テスト","テストです。",1
NOERROR
<font size=-1>サイボウズ(R) Office Version 6.6...(以下略)...
そこで、前述の「WWW::CybozuOffice6」を修正して、「RMDigest」を取得できるようにしてみた。
use WWW::CybozuOffice6;

$office6 = WWW::CybozuOffice6->new(url   => 'http://サイボウズのサーバ/cgi-bin/cbag/ag.cgi',
                   user  => 'ユーザ名',
                   pass  => 'パスワード');

print $office6->RMDigest,"\n";
これにより、
掲示板,"page=BulletinView&bid=2243&gid=3628","テスト","テストです。",1
の行の有無をチェックし、もしあれば、2番目のフィールドが掲示板本文の参照先なので(3番目はタイトル、4番目は本文の先頭部分)、これを取得すれば良い。

use WWW::CybozuOffice6;

$office6 = WWW::CybozuOffice6->new(url   => 'http://サイボウズのサーバ/cgi-bin/cbag/ag.cgi',
                   user  => 'ユーザ名',
                   pass  => 'パスワード');

$office6->_request("page=BulletinView&bid=2243&gid=3628");
print $office6->response->content;;
_request」メソッドも、複数のパラメータを受け付けるように修正した(元々は「page=...」のみ)。
当然、HTMLが取得できるので、「w3m」コマンドの「-dump」オプションでテキスト化し、それをメールで送信すれば良い。

これらの一連の処理をスクリプト化し、これを cron で定期的に実行する(現在は 20分間隔)。
今のところ、問題なく、メールで送信されている。

2011年1月11日火曜日

Firefox Click&Clean

Firefox は超便利で、もはや無くては生きていけない体になってしまったが、起動がとても重いし、長く使っていると、やはり、重くなる。
そこで、適宜、データを削除して少しでも軽くしたいが、以下のような記事を見た。
以前は、「SQLite Optimizer」というアドオンを使って、Firefox のデータベース(SQLite)を最適化していたが、これも非常に重く、JavaScript の実行がなかなか終了せず、警告ダイアログが表示される始末である。

記事にある、「Click&Clean」を使うと、「CCleaner」と連携できる。しかも、「CCleaner」には、Firefox のデータベース(SQLite)を最適化するオプションがあるので、「Click&Clean」の設定により、Firefox の終了時に「CCleaner」を起動するようにした。


あとは「CCleaner」では、一時ファイルとデータベース(SQLite)を最適化を削除するように設定した。


「Click&Clean」自体にもキャッシュや履歴を削除する機能があるし、すべてのタブを閉じる、といった機能もあり、中々便利そうである。

また、 「SQLite Optimizer」や「RAMBack」などのアドオンは削除した。Firefox のアドオンはなるべく数を減らしたい今日この頃である…。

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でのバグ修正で、ちょいバージョンアップ