Hatena::ブログ(Diary)

技術日記@kiwanami

2011-01-07

Emacsでカレンダーコンポーネントを作った

(2011/07/25 追記: 設定方法などについては最新の記事を参照してください→ [emacs][ui] Emacs用カレンダー calfw v1.2 リリース - 技術日記@kiwanami)

Emacsで使えるカレンダーが必要だったので作りました。

(追記 2011/01/08 ical連携の設定に足りないところがありましたので修正いたしました。また、Emacs22ではpeccuさんの所の追加設定を参照してみてください。 → CarbonEmacsでかるふわ使っちゃうよ!(ぺっくブログミラー@peccul))

こんな感じ

完成までには近所の人たちから、「カレンダーなら壁に掛かってるだろう」とか、「Google Calendarという無料のカレンダーがありまして」とか、「カレンダーならiPadにもあります」とか、幾多の助言を頂きました。ありがとう。分かってます。自分だって、2年前にPythonで作ったり、雑誌の特集でも実装した自覚もあります。でも自分にとって納得いくものがなかったので作りたかったんです。後悔はしていません。

あらすじ

使い方

インストール

カレンダーの基本機能についてはEmacs本体(手元では23.1で試しています)があれば十分です。日本用の祝日を表示させるために japanese-holiday.el を入れておくと便利です。japanese-holidayについては以下のサイトなどを参照してください。

自分の所では以下のように書いています。

(add-hook 'calendar-load-hook
          (lambda ()
            (require 'japanese-holidays)
            (setq calendar-holidays
                  (append japanese-holidays local-holidays other-holidays))))

カレンダー本体 calfw.el については auto-install.elで以下の式を評価して入れるか、ダウンロードしてload-pathの場所に置いてください。

;; auto-installを使う場合
(auto-install-from-url "https://github.com/kiwanami/emacs-calfw/raw/master/calfw.el")

ダウンロード

手元では安定して動いていますが、今後インタフェースや追加のビューを実装しようと思っています。しばらく変化すると思いますが、区切りの良いときにリリース報告をしていきたいと思っています。

開発はgithubにて行っていますので、興味ある方は clone しておくと便利かも知れません。

単純なカレンダー表示

まず、単純な使い方について説明します。

以下のコードを評価すると今月のカレンダーが表示されます。

(require 'calfw) ; 初回一度だけ
(cfw:open-calendar-buffer) ; カレンダー表示

起動した画面(動作確認用データ)

単純に起動すると何も表示されずに寂しいかも知れません。そんなときは動作確認用の予定がありますので、以下のコードを実行して2011年1月に移動してみてください。

(cfw:contents-debug-data) ; 動作確認用データを表示するようにする
キーバインド

カレンダーの中では以下のようなキーバインドが使えます。

日付移動
→, C-f, l 次の日へ
←, C-b, h 前の日へ
↑, C-p, k 前の週へ
↓, C-n, j 次の週へ
C-a, ^ 週の頭へ
C-e, $ 週末へ
[home] 月の初めへ
[end] 月末へ
[PgUp], < 前の月へ
[PgDown], > 次の月へ
t 今日へ
g 日付指定移動 (YYYY/MM/DD)
操作
r 表示更新

これらは cfw:calendar-mode-map で定義されていますので、カスタマイズすることが出来ます。

機能

このカレンダーの表示内容や機能について簡単に説明します。

  • 表示について
    • 通常のグレゴリオ暦で表示(calendar.elと同じ)
    • Emacs標準の holiday.el から祝日を取得
      • japanese-holiday.elを入れることによって日本の祝日に対応
    • 今日とフォーカスのある日付をハイライト(オーバーレイでハイライト
    • 日々の予定を並べて表示
      • 予定の件数が表示されるのでスペースが小さくても何かあることは分かる
    • 期間予定の表示
      • 期間が重複していたらある程度無駄がないように積み重ねる
    • 日付に注釈を表示
      • 月齢六曜、参考情報(今日は何の日とか)を表示できる

calfw.el はそれなりにかっこいい見た目と、他のアプリケーションから使いやすいような設計(VBなどにあるカレンダーコンポーネントなどのイメージ)を目指して作りました。このあたりの詳細な設計や拡張方法などについてはまた別エントリでやると思います。


アプリケーションとの連携

calfw.el はただのカレンダーコンポーネントですので、このままではあまりうれしくありません。他のアプリケーションのビューとして使うことによって便利になります。そもそも、今回ご紹介する howmGoogle Calendar との連携がやりたくて作りました。

howmとの連携

howmのスケジュールやTODOをカレンダー内に表示することが出来ます。まず以下の追加プログラムインストールします。(同じディレクトリにあります)

最小限の連携コードは以下のようです。

(追記 2011/01/11 howmロード前に評価されないようにしました。@litzerさんありがとうございます。)

(eval-after-load "howm-menu"
  '(progn
    (require 'calfw-howm)
    (cfw:install-howm-schedules)
    (define-key howm-mode-map (kbd "M-C") 'cfw:open-howm-calendar)
))

これで、howm-mode使用時(howmのメニューなど)で M-C でhowmのカレンダーを表示することが出来ます。

また、予定のある日付でEnterキーを押すと、日付でhowmの記事を検索します。ここから予定の編集などが出来ます。

qでカレンダーバッファを終了(kill-buffer)します。

HowmとElscreenの連携を使っている人は、バインド先のコマンドはこちらの方が良いかもしれません。

(define-key howm-mode-map (kbd "M-C") 'cfw:elscreen-open-howm-calendar)

こちらは新しいスクリーンを作成してそちらでカレンダーを表示します。

さらに、howmのメニューファイルに以下の行を追加すると、そこにカレンダーを表示させます。

%here%(cfw:howm-schedule-inline)

この場合、以下のような画面になります。

Howmのメニューに表示!

さらに、このカレンダー内部では前述の日付移動のキーバインドが使えますので、メニュー内で日付や月の移動、またその日の予定一覧の表示が出来ます。(これが自分がやりたかったことです!!!)

ちなみに、このままだとカレンダーのリージョンからカーソールが脱出できません。カレンダーからカーソールを脱出させたくなったら、TABキーで次のaction-lockに移動するか、マウスを使うと良いと思います。(今のところ自分はあまりこれで困ってはないのですが、キーマップをちょっと設定する必要があるかも知れません。)

さらに、自分は予定は一つのメモ(「2011年予定」とか)に集約しているのですが、そうするとカレンダーから日付を選んで予定を入力するように出来ます。自分が使っているHowm連携のコードは以下のようです。

;; howm and calendar framework

(defvar my-howm-schedule-page "2011年予定") ; 予定を入れるメモのタイトル

(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 "[%04d-%02d-%02d]@ "
             (calendar-extract-year date)
             (calendar-extract-month date)
             (calendar-extract-day date)))))

(eval-after-load "howm-menu"
  '(progn
     (require 'calfw-howm)
     (cfw:install-howm-schedules)
     (define-key howm-mode-map (kbd "M-C") 'cfw:elscreen-open-howm-calendar)
     (define-key cfw:howm-schedule-map (kbd "i") 'my-cfw-open-schedule-buffer)
     (define-key cfw:howm-schedule-inline-keymap (kbd "i") 'my-cfw-open-schedule-buffer)
     ))

(setq cfw:howm-schedule-summary-transformer 
  (lambda (line) (split-string (replace-regexp-in-string "^[^@!]+[@!] " "" line) " / ")))

これで普通のスケジュール管理(Google Calendar, iCal, Outlookなど)と同じように、「カレンダーから空いている日を探して予定を入れる」というユースケースが実現できるようになりました。

うれしくなったので、どういう画面遷移になっているかをまとめました。

Howm連携の画面遷移

普通です! Howmを始めてはや6年。これでやっとEmacsにも普通のスケジュール管理がやってきました!

iCalendar形式(Google Calendarや他のスケジュール管理ソフトとの連携)

カレンダーといえばiCalendar形式です。Emacsにも icalendar.el というプログラムが付いていますので ICS ファイル自体は読み書きできるようになっています。ということで、iCalendar形式を表示できるようにしてみました。

EmacsGoogle Calendar のツーショット

まず以下の追加プログラムインストールします。(これも同じディレクトリにあります)

Google Calendar との最小限の連携コードは以下のようです。

(require 'calfw-ical)
(cfw:install-ical-schedules) ; (2010/01/08追記)
(setq cfw:ical-calendar-contents-sources '("http://www.google.com/calendar/ical/〜.ics"))
; (setq cfw:ical-calendar-annotations-sources '("http://www.google.com/calendar/ical/〜.ics")) ; ←省略可 (2010/01/11追記)

httpの場合はオンライン(url-retrieve-synchronously)で ICS ファイルを取ってきて表示します。設定すべきURLは、GoogleCalendarのページの左側にある、各カレンダーの設定のページに行って、そこの以下の図で示すあたりにあります。一般公開でないカレンダーの場合は(大抵そうだと思いますが)、「限定公開 URL:」の方のURLを使うと便利だと思います。

Google Calendar での iCalendarのURLの場所

一度取得したスケジュールの内容はメモリにキャッシュします。キャッシュをクリアして表示を更新したい場合は、 cfw:ical-calendar-clear-cache コマンドを実行してください。どこかのキーにバインドしたり、 rでの更新とくっつけても良いかもしれません。

cfw:ical-calendar-contents-sources に表示したいスケジュールのURLを入れるのですが、文字列のリストですので複数指定できます。また、ローカルのファイルパスも指定できますので、iCalOutlookとも連携できると思います(が、手元では試してません)。

現在の実装では、完全なiCalendar形式には対応していません。自分が最低限必要な範囲のみ実装しています。特に繰り返し予定がまだです。単純な変換作業ですので、どなたか手伝ってもらえると助かります。

各種設定について

簡単な設定・カスタマイズについて簡単に紹介します。

月、曜日の表記

月や曜日の表示は calendar.el の設定をそのまま使っています。以下のコードを修正すれば変更できると思います。

;; 月
(setq calendar-month-name-array
  ["January" "February" "March"     "April"   "May"      "June"
   "July"    "August"   "September" "October" "November" "December"])

;; 曜日
(setq calendar-day-name-array
      ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"])

;; 週の先頭の曜日
(setq calendar-week-start-day 0) ; 日曜日は0, 月曜日は1
キーバインド

基本的なキーバインドcfw:calendar-mode-map で定義しています。

calendar.el から見ると足りないコマンドなどがあると思います。

howm連携するバッファキーバインドcfw:howm-schedule-map で定義しています。また、howmのメニュー埋め込みのキーバインドは、 cfw:howm-schedule-inline-keymap で定義しています。これらは表示時に上の cfw:calendar-mode-map を親キーマップにして適用されますので、howmで必要なキーマップのみ定義しています。

face : 色とかフォントとか

calfw.el の先頭でいろいろ設定しています。現在は Google Calendar 風の色になっています。

自分好みに変えるには、 defface の定義を自分の設定ファイルの (require 'calfw) の前にコピーして、そこでカスタマイズすると早いと思います。変わらない場合は defface 前で face-spec-reset-face とかでリセットするといいかもしれません。

自分がdark系の色を使っていないため、もし良い感じの色が出来たら教えてください。

フォントについてですが、見ての通り等幅前提です。Emacs23以上だと日本語込みの等幅がうまくいかないときがあるかも知れません。使用フォントOSの環境依存が大きいですので、設定については各自でお願いします。

現状と今後の展開

コンポーネント

現在、グローバル変数で情報ソースとのやりとりを行っていますが、今後引数などで渡せるようにして、カレンダーのインスタンスごとに分けたいと思っています。また、その場合データの持ち方とキーバインドとのつなぎ方が問題になってくると思いますので、このあたりのうまい解決方法を考えています。

とりあえず、現状の情報設定方法は変わるかも知れないということをお知らせしておきます。

別ビュー

1ヶ月単位でなくて、1週間や2週間、あるいは数ヶ月の単位で表示したいときがあると思いますので、そのビューを作ろうとしています。

他連携

まず、おそらくユーザーの多い org-mode との連携が考えられますが、自分が使っていないのでどなたかにお願いしたいです。それどころか、そもそもEmacs標準のdiaryとも連携してないです。

ドキュメントなど

ある程度コンポーネント化が固まってからがいいかなと思っていますが、作るのに時間がかかりそうだったら先に何か書くかも知れません。

(追記 2011/01/08-1:iCalのリンクの場所追加。@alfaladio さんにバグ報告を頂きました。ありがとうございました。)

(追記 2011/01/08-2:iCal連携の設定elispが足りないところを追加。id:peccuさんご指摘ありがとうございました。)

(追記 2011/01/11:iCal連携の設定elispで必須でないものがありましたのでコメントアウトしました。またまたid:peccuさんご指摘ありがとうございました。)

nanasessnanasess 2011/01/08 13:46 素晴しいです! howm は長いこと使っていたのですが, メモにしか使っていませんでした. これでやっとスケジュールも管理できそうです :)

kiwanamikiwanami 2011/01/08 14:49 自分もHowmでスケジュールを管理してから、うまくいかない毎日が続いていました。これで解決と思っているのですが、「おまえはそもそもスケジュールの意識がなってないから、いくつカレンダーを作ったところで無駄だ。」と言われてしまいました。。。

hashimotohashimoto 2011/01/12 18:54 これ良いですね。
cygwin/emacsで使ってみたんですが、(icalendar--format-ical-event e)に改行が入っちゃってレイアウトが崩れちゃいます。
環境依存ですかね?
あと、Googleカレンダーの自分のカレンダは大丈夫なんですが、
@group.calendar.google.comのカレンダ(たとえばIT 勉強会カレンダー http://www.google.com/calendar/ical/fvijvohm91uifvd9hratehf65k%40group.calendar.google.com/public/basic.ics とか)が上手くいかないです。。。
何故だかわかりませんでした。。。
elisp勉強します。

kiwanamikiwanami 2011/01/13 14:57 ご報告ありがとうございます。改行が入る件については、Emacsのバージョンなどを教えてもらえれば、可能であればこちらで再現しようとしてみます。あとは改行を単純に削除するようにしてみます。
IT勉強会カレンダーも調べてみます。

kiwanamikiwanami 2011/01/13 17:09 calfw.el, calfw-ical.el 更新してみました。改行の問題も改善して、手元ではIT勉強会カレンダーが読めるようになりました。予定がぎっしりでかなり壮観ですね。

hashimotohashimoto 2011/01/14 09:33 お、早速の対応ありがとうございます!!
かなり重宝しております。

tkf41tkf41 2011/03/12 22:48 読めるicalと読めないicalがありました。DTENDやDTSTARTの書き方のみ違います。読めないicalはpythonのicalendarモジュールで生成したものです。他のカレンダーソフトでは読み込めました。elisp書けませんがcalfw-ical.elをチラ見した感じだと、calfwではなくicalendar.elのほうのバグかもしれませんね。

読める:
BEGIN:VCALENDAR
BEGIN:VEVENT
DTEND:20110329T100000
DTSTART:20110329T090000
SUMMARY:I like spam and egg
UID:50e8fd6af02cc0ffed644a4cb971d1fc
END:VEVENT
END:VCALENDAR

読めない:
BEGIN:VCALENDAR
BEGIN:VEVENT
DTEND;VALUE=DATE:20110329T100000
DTSTART;VALUE=DATE:20110329T090000
SUMMARY:I like spam and egg
UID:50e8fd6af02cc0ffed644a4cb971d1fc
END:VEVENT
END:VCALENDAR

kiwanamikiwanami 2011/03/12 23:53 ご報告ありがとうございます。アドホック対応を入れてみます。icalendar.elのパーサーが結構適当(もしくはical形式が複雑すぎる)なので、他にもcalfw-ical側で対応をしているところがあるのです。

kiwanamikiwanami 2011/03/13 01:22 githubのmasterの最新で対応入れてみました。どうでしょうか?

tkf41tkf41 2011/03/13 06:28 ありがとうございます。無事読み込めました。

rxrx 2011/03/23 20:10 (日本人ではないです、変な日本語を使って、申し訳ございません)
大変素晴らしいツール、ありがとうございました!
しかし、私がgoogle calendarとの連携が上手くいかなかったです。
私が使っている2台のパソコン(debian6.0とMACOS)が、同じようなエラー現象が起こりました。
最初calendar画面が表示されましたが、"r"でcalendarの内容を更新すると、以下のエラーメッセージをもらいました:
MACOS1の方が:symbol's function definition is void: icalendar--convert-all-timezones
debianの方が:symbol's function definition is void:d
emacsの設定が以下のようになります:
(require 'calfw) ; 初回一度だけ
(cfw:open-calendar-buffer) ; カレンダー表示
(cfw:contents-debug-data) ; 動作確認用データを表示するようにする

(eval-after-load "howm-menu"
'(progn
(require 'calfw-howm)
(cfw:install-howm-schedules)
;(define-key howm-mode-map (kbd "M-C") 'cfw:open-howm-calendar)
(define-key howm-mode-map (kbd "M-C") 'cfw:elscreen-open-howm-calendar)
))


(require 'calfw-ical)
(cfw:install-ical-schedules) ; (2010/01/08追記)
(setq cfw:ical-calendar-contents-sources '("https://www.google.com/calendar/ical/../basic.ics")) ;;自分のprivate address
; (setq cfw:ical-calendar-annotations-sources '("http://www.google.com/calendar/ical/〜.ics")) ; ←省略可 (2010/01/11追記)

そのエラーの原因を教えて頂けませんか?

ありがとうございました!

kiwanamikiwanami 2011/03/24 01:06 日本語以外の人からも使ってもらえてうれしく思います。日本語の情報しか無くてすみません。もし英語の方が得意であれば英語でも連絡可能です。(You can write comments in English.)
まず、Emacsのバージョンを教えてもらって良いでしょうか。Emacsに含まれているicalendar.elは更新が活発なので、Emacsが新しすぎるか古い可能性があります。こちらで想定しているバージョンは Emacs 23.x です。
あと、もし良ければ M-x toggle-debug-on-error でトレースを出すようにして、エラー発生時のトレースももらえると早く解決出来ると思います。

rxrx 2011/03/24 08:27 Thank you so much for your quick response.
One of my machine is a debian box.
Here goes the emacs version of the debian machine:
GNU Emacs 23.2.1 (i486-pc-linux-gnu, GTK+ Version 2.20.0) of 2010-12-12 on raven, modified by Debian
The backtrace of emacs error is:
Debugger entered--Lisp error: (void-variable d)
(cfw:contents-get-internal d annotations)
(setq prv (cfw:contents-get-internal d annotations))
(while (consp --cl-var--) (setq f (car --cl-var--)) (setq cnt (funcall f begin end)) (setq prv (cfw:contents-get-internal d annotations)) (if prv (progn ...) (push ... annotations)) (setq --cl-var-- (cdr --cl-var--)))
(let* ((--cl-var-- cfw:annotations-functions) (f nil) (cnt nil) (annotations nil) (prv nil)) (while (consp --cl-var--) (setq f ...) (setq cnt ...) (setq prv ...) (if prv ... ...) (setq --cl-var-- ...)) annotations)
(catch (quote --cl-block-nil--) (let* (... ... ... ... ...) (while ... ... ... ... ... ...) annotations))
(cl-block-wrapper (catch (quote --cl-block-nil--) (let* ... ... annotations)))
(block nil (let* (... ... ... ... ...) (while ... ... ... ... ... ...) annotations))
(loop for f in cfw:annotations-functions for cnt = (funcall f begin end) with annotations = nil for prv = (cfw:contents-get-internal d annotations) if prv do (set-cdr prv (concat ... "/" ...)) else do (push (cfw:copy-list cnt) annotations) finally return annotations)
(cond ((null cfw:annotations-functions) nil) ((= 1 ...) (funcall ... begin end)) (t (loop for f in cfw:annotations-functions for cnt = ... with annotations = nil for prv = ... if prv do ... else do ... finally return annotations)))
cfw:annotations-merge((3 1 2011) (3 31 2011))
(cons (quote annotations) (cfw:annotations-merge begin-date end-date))
(list (cons (quote month) month) (cons (quote year) year) (cons (quote headers) day-names) (cons (quote holidays) holidays) (cons (quote annotations) (cfw:annotations-merge begin-date end-date)) (cons (quote contents) contents) (cons (quote periods) (cfw:k ... contents-all)) (cons (quote weeks) (nreverse weeks)))
(\` ((month \, month) (year \, year) (headers \, day-names) (holidays \, holidays) (annotations \, ...) (contents \, contents) (periods \, ...) (weeks \, ...)))
(let* ((day-names ...) (last-month-day ...) (first-day-day ...) (holidays ...) (begin-date ...) (end-date ...) (contents-all ...) (contents ...) weeks) (loop with i = (+ ... calendar-week-start-day) with day = calendar-week-start-day with week = nil do (when ... ... ... ...) (push ... week) (setq day ...) (incf i)) (\` (... ... ... ... ... ... ... ...)))
cfw:model-month-create(3 2011)
(setq model (cfw:model-month-create month year))
(save-restriction (narrow-to-region (cfw:dest-point-min dest) (cfw:dest-point-max dest)) (cfw:navi-selection-clear) (cfw:dest-clear dest) (cfw:render-overlays-clear) (setq model (cfw:model-month-create month year)) (setf (cfw:dest-model dest) model) (cfw:render-month model (cfw:render-month-calc-param dest)) (cfw:render-overlays-put))
(cfw:dest-with-region dest (cfw:navi-selection-clear) (cfw:dest-clear dest) (cfw:render-overlays-clear) (setq model (cfw:model-month-create month year)) (setf (cfw:dest-model dest) model) (cfw:render-month model (cfw:render-month-calc-param dest)) (cfw:render-overlays-put))
(let ((buffer-read-only nil)) (cfw:dest-with-region dest (cfw:navi-selection-clear) (cfw:dest-clear dest) (cfw:render-overlays-clear) (setq model ...) (setf ... model) (cfw:render-month model ...) (cfw:render-overlays-put)))
(save-current-buffer (set-buffer buf) (let (...) (cfw:dest-with-region dest ... ... ... ... ... ... ...)) (run-hooks (quote cfw:calendar-update-after-hook)) (cfw:dest-update dest))
(with-current-buffer buf (let (...) (cfw:dest-with-region dest ... ... ... ... ... ... ...)) (run-hooks (quote cfw:calendar-update-after-hook)) (cfw:dest-update dest))
(let* ((today ...) (month ...) (year ...) (buf ...) model) (with-current-buffer buf (let ... ...) (run-hooks ...) (cfw:dest-update dest)))
cfw:calendar-update([cl-struct-cfw:dest buffer ((month . 3) (year . 2011) (headers 1 2 3 4 5 6 0) (holidays ... ... ...) (annotations ... ... ... ...) (contents ... ... ... ... ... ... ... ...) (periods ... ... ... ... ...) (weeks ... ... ... ... ...)) #<buffer *cfw-calendar*> point-min point-max 164 43 (lambda (&rest --cl-rest--) (apply ... ... ... ... --cl-rest--)) nil])
(let ((date ...)) (cfw:calendar-update dest) (cfw:navi-goto-date date))
(progn (let (...) (cfw:calendar-update dest) (cfw:navi-goto-date date)))
(if dest (progn (let ... ... ...)))
(when dest (let (...) (cfw:calendar-update dest) (cfw:navi-goto-date date)))
(let ((dest ...)) (when dest (let ... ... ...)))
cfw:refresh-calendar-buffer()
call-interactively(cfw:refresh-calendar-buffer nil nil)

Any suggestion?

Best,

kiwanamikiwanami 2011/03/24 10:57 Thank you for your information. Your Emacs version is OK.
It may be a byte-compile problem. Will you compile calfw.el and calfw-ical.el again? Or just removing calfw.elc and calfe-ical.elc, it may move.

rxrx 2011/03/24 20:44 回答ありがとうございました。
私が、byte-compileをしていません。elファイルをそのままで使いました。

kiwanamikiwanami 2011/03/25 00:00 すみません!よく見たら calfw.el のバグでした。
修正しましたので試してみてもらって良いでしょうか。

shidoshido 2011/03/30 09:17 カレンダーを画面横幅いっぱいに表示させたいのですが、画面の1/2幅になってしまいます。他の方のスクリーンショットをみると横幅いっぱいに表示されているようでうらやましいのですが、どうしてもできません。適当にEmacsを使ってきたので、まったく的はずれな質問をしているかも知れず恥ずかしいのですが、何卒アドバイスをお願いします。
なお、何もオプションをつけずにビルドした23.2.1をubuntu10.10で使用しています。

kiwanamikiwanami 2011/03/30 09:40 横幅は自動的になるべく広くなるように調節するはずなのですが、1/2というのはちょっとうまく動いてないですね。横幅は何桁ぐらいですか? M-: で (window-width) 実行してみると出てきます。

shidoshido 2011/03/30 11:18 早速のご助言ありがとうございます。
window-widthを実行しようとしたのですが、どうやら私のEmacsにはその関数が入っていないようです。
ソースから適当にビルドしたEmacsなので、ビルドの過程でなにかおかしなことをやらかしたのかも、と思い、ubuntuのリポジトリからSynapticでインストールしたEmacsでも試したのですが、やっぱりwindow-widthが見つかりませんでした。
どうやらこれが原因のように思いますが、さてどうしたものか…。

windkidswindkids 2012/05/27 10:09 こんにちは。howmユーザの者です。自分のNTEmacsのhowmで設定したのですが、エラーが出現しました。
M-x cfw:open-howm-calendar

Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil)
<(0 nil)
(cond ((< 0 num) (push ... periods)) (t (setq contents ...)))
(while (consp --cl-var--) (setq i (car --cl-var--)) (setq date (cfw:emacs-to-calendar ...)) (setq --cl-var-- (cfw:howm-schedule-parse-line ...) datestr (pop --cl-var--) num (pop --cl-var--) type (pop --cl-var--) summary (car --cl-var--)) (setq summary (funcall cfw:howm-schedule-summary-transformer summary)) (cond (... ...) (t ...)) (setq --cl-var-- (cdr --cl-var--)))
(let* ((contents nil) (periods nil) (--cl-var-- ...) (i nil) (date nil) (--cl-var-- nil) (datestr nil) (num nil) (type nil) (summary nil) (summary nil)) (while (consp --cl-var--) (setq i ...) (setq date ...) (setq --cl-var-- ... datestr ... num ... type ... summary ...) (setq summary ...) (cond ... ...) (setq --cl-var-- ...)) (nconc contents (list ...)))
(catch (quote --cl-block-nil--) (let* (... ... ... ... ... ... ... ... ... ... ...) (while ... ... ... ... ... ... ...) (nconc contents ...)))
(cl-block-wrapper (catch (quote --cl-block-nil--) (let* ... ... ...)))
(block nil (let* (... ... ... ... ... ... ... ... ... ... ...) (while ... ... ... ... ... ... ...) (nconc contents ...)))
(loop with contents = nil with periods = nil for i in (cfw:howm-schedule-period begin end) for date = (cfw:emacs-to-calendar (seconds-to-time ...)) for (datestr num type summary) = (cfw:howm-schedule-parse-line (howm-item-summary i)) for summary = (funcall cfw:howm-schedule-summary-transformer summary) do (cond (... ...) (t ...)) finally return (nconc contents (list ...)))
cfw:howm-schedule-period-to-calendar((5 1 2012) (5 31 2012))
funcall(cfw:howm-schedule-period-to-calendar (5 1 2012) (5 31 2012))
(cfw:contents-put-source (funcall (cfw:source-data ...) begin end) (car sources))
(cond ((null sources) nil) ((= 1 ...) (cfw:contents-put-source ... ...)) (t (loop for s in sources for f = ... for cnts = ... with contents = nil do ... finally return contents)))
cfw:contents-merge((5 1 2012) (5 31 2012) ([cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]))
(let* ((contents-all ...)) (append (\` ...) lst))
cfw:view-model-make-common-data(((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)) (5 1 2012) (5 31 2012) ((headers 0 1 2 3 4 5 6) (weeks (... ... ... ... ... ... ...) (... ... ... ... ... ... ...) (... ... ... ... ... ... ...) (... ... ... ... ... ... ...) (... ... ... ... ... ... ...))))
(cfw:model-create-updated-view-data model (cfw:view-model-make-common-data model begin-date end-date (\` ...)))
cfw:view-model-make-common-data-for-weeks(((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)) (5 1 2012) (5 31 2012))
(append (cfw:view-model-make-common-data-for-weeks model begin-date end-date) (\` (... ...)))
(let* ((init-date ...) (year ...) (month ...) (begin-date ...) (end-date ...)) (append (cfw:view-model-make-common-data-for-weeks model begin-date end-date) (\` ...)))
cfw:view-month-model(((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)))
(let* ((dest ...) (param ...) (total-width ...) (EOL ...) (VL ...) (hline ...) (cline ...) (model ...)) (setf (cfw:component-model component) model) (insert (cfw:rt ... ...) EOL (cfw:render-toolbar total-width ... ... ...) EOL hline) (cfw:render-day-of-week-names model param) (insert VL EOL cline) (let (... ...) (cfw:render-calendar-cells-weeks model param ...)) (insert (cfw:render-footer total-width ...)))
cfw:view-month([cl-struct-cfw:component [cl-struct-cfw:dest buffer #<buffer *cfw-calendar*> point-min point-max 99 40 (lambda ... ...) nil nil nil nil] ((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)) (5 27 2012) month nil nil nil])
funcall(cfw:view-month [cl-struct-cfw:component [cl-struct-cfw:dest buffer #<buffer *cfw-calendar*> point-min point-max 99 40 (lambda ... ...) nil nil nil nil] ((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)) (5 27 2012) month nil nil nil])
(save-restriction (narrow-to-region (cfw:dest-point-min G39039) (cfw:dest-point-max G39039)) (cfw:dest-clear dest) (funcall (cfw:cp-dispatch-view-impl ...) component))
(save-current-buffer (set-buffer (cfw:dest-buffer G39039)) (save-restriction (narrow-to-region ... ...) (cfw:dest-clear dest) (funcall ... component)))
(with-current-buffer (cfw:dest-buffer G39039) (save-restriction (narrow-to-region ... ...) (cfw:dest-clear dest) (funcall ... component)))
(let ((G39039 dest)) (with-current-buffer (cfw:dest-buffer G39039) (save-restriction ... ... ...)))
(cfw:dest-with-region dest (cfw:dest-clear dest) (funcall (cfw:cp-dispatch-view-impl ...) component))
(let ((buffer-read-only nil)) (cfw:dest-with-region dest (cfw:dest-clear dest) (funcall ... component)))
(save-current-buffer (set-buffer buf) (cfw:dest-before-update dest) (cfw:dest-ol-selection-clear dest) (cfw:dest-ol-today-clear dest) (let (...) (cfw:dest-with-region dest ... ...)) (cfw:dest-ol-today-set dest) (cfw:cp-set-selected-date component (cfw:component-selected component)) (cfw:dest-after-update dest) (cfw:cp-fire-update-hooks component))
(with-current-buffer buf (cfw:dest-before-update dest) (cfw:dest-ol-selection-clear dest) (cfw:dest-ol-today-clear dest) (let (...) (cfw:dest-with-region dest ... ...)) (cfw:dest-ol-today-set dest) (cfw:cp-set-selected-date component (cfw:component-selected component)) (cfw:dest-after-update dest) (cfw:cp-fire-update-hooks component))
(let* ((buf ...) (dest ...)) (with-current-buffer buf (cfw:dest-before-update dest) (cfw:dest-ol-selection-clear dest) (cfw:dest-ol-today-clear dest) (let ... ...) (cfw:dest-ol-today-set dest) (cfw:cp-set-selected-date component ...) (cfw:dest-after-update dest) (cfw:cp-fire-update-hooks component)))
cfw:cp-update([cl-struct-cfw:component [cl-struct-cfw:dest buffer #<buffer *cfw-calendar*> point-min point-max 99 40 (lambda ... ...) nil nil nil nil] ((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)) (5 27 2012) month nil nil nil])
(let ((cp ...)) (cfw:cp-update cp) cp)
cfw:cp-new([cl-struct-cfw:dest buffer #<buffer *cfw-calendar*> point-min point-max 99 40 (lambda (&rest --cl-rest--) (apply ... ... ... ... --cl-rest--)) nil nil nil nil] ((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)) month nil)
(let* ((dest ...) (model ...) (cp ...)) (with-current-buffer (cfw:dest-buffer dest) (set ... cp)) cp)
(catch (quote --cl-block-cfw:create-calendar-component-buffer--) (let* (... ... ...) (with-current-buffer ... ...) cp))
(cl-block-wrapper (catch (quote --cl-block-cfw:create-calendar-component-buffer--) (let* ... ... cp)))
(block cfw:create-calendar-component-buffer (let* (... ... ...) (with-current-buffer ... ...) cp))
(let* ((date ...) (buffer ...) (custom-map ...) (contents-sources ...) (annotation-sources ...) (view ...) (sorter ...)) (let (...) (while --cl-keys-- ...)) (block cfw:create-calendar-component-buffer (let* ... ... cp)))
cfw:create-calendar-component-buffer(:custom-map (keymap (113 . kill-buffer) (13 . cfw:howm-from-calendar) keymap (57 . digit-argument) (56 . digit-argument) (55 . digit-argument) (54 . digit-argument) (53 . digit-argument) (52 . digit-argument) (51 . digit-argument) (50 . digit-argument) (49 . digit-argument) (48 . digit-argument) (113 . bury-buffer) (mouse-1 . cfw:navi-on-click) (77 . cfw:change-view-month) (84 . cfw:change-view-two-weeks) (87 . cfw:change-view-week) (68 . cfw:change-view-day) (32 . cfw:show-details-command) (114 . cfw:refresh-calendar-buffer) (9 . cfw:navi-next-item-command) (46 . cfw:navi-goto-today-command) (116 . cfw:navi-goto-today-command) (103 . cfw:navi-goto-date-command) (end . cfw:navi-goto-last-date-command) (home . cfw:navi-goto-first-date-command) (next . cfw:navi-next-month-command) (prior . cfw:navi-previous-month-command) (22 . cfw:navi-next-month-command) (62 . cfw:navi-next-month-command) (27 keymap (118 . cfw:navi-previous-month-command)) (60 . cfw:navi-previous-month-command) (36 . cfw:navi-goto-week-end-command) (94 . cfw:navi-goto-week-begin-command) (107 . cfw:navi-previous-week-command) (106 . cfw:navi-next-week-command) (104 . cfw:navi-previous-day-command) (108 . cfw:navi-next-day-command) (112 . cfw:navi-previous-week-command) (up . cfw:navi-previous-week-command) (110 . cfw:navi-next-week-command) (down . cfw:navi-next-week-command) (98 . cfw:navi-previous-day-command) (left . cfw:navi-previous-day-command) (102 . cfw:navi-next-day-command) (right . cfw:navi-next-day-command)) :view month :contents-sources ([cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) :annotation-sources nil)
(let ((cp ...)) (switch-to-buffer (cfw:cp-get-buffer cp)))
cfw:open-howm-calendar()
call-interactively(cfw:open-howm-calendar t nil)
execute-extended-command(nil)
call-interactively(execute-extended-command nil nil)

kiwanamikiwanami 2012/05/27 13:12 ご報告ありがとうございます。 Emacs, howm のバージョンによるとは思いますが、 https://gist.github.com/2802137 これを評価してみて改善するかどうやってみてもらっていいですか?

windkidswindkids 2012/05/27 19:04 >kiwanami 2012/05/27 13:12
ありがとうございます。calfw-howm.elに頂いたパッチを当ててみましたが、やはり以下のエラーが発生しました。

Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil)
<(0 nil)
(cond ((< 0 num) (push ... periods)) (t (setq contents ...)))
(while (consp --cl-var--) (setq i (car --cl-var--)) (setq date (cfw:emacs-to-calendar ...)) (setq --cl-var-- (cfw:howm-schedule-parse-line ...) datestr (pop --cl-var--) num (pop --cl-var--) type (pop --cl-var--) summary (car --cl-var--)) (setq summary (funcall cfw:howm-schedule-summary-transformer summary)) (cond (... ...) (t ...)) (setq --cl-var-- (cdr --cl-var--)))
(let* ((contents nil) (periods nil) (--cl-var-- ...) (i nil) (date nil) (--cl-var-- nil) (datestr nil) (num nil) (type nil) (summary nil) (summary nil)) (while (consp --cl-var--) (setq i ...) (setq date ...) (setq --cl-var-- ... datestr ... num ... type ... summary ...) (setq summary ...) (cond ... ...) (setq --cl-var-- ...)) (nconc contents (list ...)))
(catch (quote --cl-block-nil--) (let* (... ... ... ... ... ... ... ... ... ... ...) (while ... ... ... ... ... ... ...) (nconc contents ...)))
(cl-block-wrapper (catch (quote --cl-block-nil--) (let* ... ... ...)))
(block nil (let* (... ... ... ... ... ... ... ... ... ... ...) (while ... ... ... ... ... ... ...) (nconc contents ...)))
(loop with contents = nil with periods = nil for i in (cfw:howm-schedule-period begin end) for date = (cfw:emacs-to-calendar (seconds-to-time ...)) for (datestr num type summary) = (cfw:howm-schedule-parse-line (howm-item-summary i)) for summary = (funcall cfw:howm-schedule-summary-transformer summary) do (cond (... ...) (t ...)) finally return (nconc contents (list ...)))
cfw:howm-schedule-period-to-calendar((5 1 2012) (5 31 2012))
funcall(cfw:howm-schedule-period-to-calendar (5 1 2012) (5 31 2012))
(cfw:contents-put-source (funcall (cfw:source-data ...) begin end) (car sources))
(cond ((null sources) nil) ((= 1 ...) (cfw:contents-put-source ... ...)) (t (loop for s in sources for f = ... for cnts = ... with contents = nil do ... finally return contents)))
cfw:contents-merge((5 1 2012) (5 31 2012) ([cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]))
(let* ((contents-all ...)) (append (\` ...) lst))
cfw:view-model-make-common-data(((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)) (5 1 2012) (5 31 2012) ((headers 0 1 2 3 4 5 6) (weeks (... ... ... ... ... ... ...) (... ... ... ... ... ... ...) (... ... ... ... ... ... ...) (... ... ... ... ... ... ...) (... ... ... ... ... ... ...))))
(cfw:model-create-updated-view-data model (cfw:view-model-make-common-data model begin-date end-date (\` ...)))
cfw:view-model-make-common-data-for-weeks(((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)) (5 1 2012) (5 31 2012))
(append (cfw:view-model-make-common-data-for-weeks model begin-date end-date) (\` (... ...)))
(let* ((init-date ...) (year ...) (month ...) (begin-date ...) (end-date ...)) (append (cfw:view-model-make-common-data-for-weeks model begin-date end-date) (\` ...)))
cfw:view-month-model(((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)))
(let* ((dest ...) (param ...) (total-width ...) (EOL ...) (VL ...) (hline ...) (cline ...) (model ...)) (setf (cfw:component-model component) model) (insert (cfw:rt ... ...) EOL (cfw:render-toolbar total-width ... ... ...) EOL hline) (cfw:render-day-of-week-names model param) (insert VL EOL cline) (let (... ...) (cfw:render-calendar-cells-weeks model param ...)) (insert (cfw:render-footer total-width ...)))
cfw:view-month([cl-struct-cfw:component [cl-struct-cfw:dest buffer #<buffer *cfw-calendar*> point-min point-max 103 47 (lambda ... ...) nil nil nil nil] ((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)) (5 27 2012) month nil nil nil])
funcall(cfw:view-month [cl-struct-cfw:component [cl-struct-cfw:dest buffer #<buffer *cfw-calendar*> point-min point-max 103 47 (lambda ... ...) nil nil nil nil] ((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)) (5 27 2012) month nil nil nil])
(save-restriction (narrow-to-region (cfw:dest-point-min G74007) (cfw:dest-point-max G74007)) (cfw:dest-clear dest) (funcall (cfw:cp-dispatch-view-impl ...) component))
(save-current-buffer (set-buffer (cfw:dest-buffer G74007)) (save-restriction (narrow-to-region ... ...) (cfw:dest-clear dest) (funcall ... component)))
(with-current-buffer (cfw:dest-buffer G74007) (save-restriction (narrow-to-region ... ...) (cfw:dest-clear dest) (funcall ... component)))
(let ((G74007 dest)) (with-current-buffer (cfw:dest-buffer G74007) (save-restriction ... ... ...)))
(cfw:dest-with-region dest (cfw:dest-clear dest) (funcall (cfw:cp-dispatch-view-impl ...) component))
(let ((buffer-read-only nil)) (cfw:dest-with-region dest (cfw:dest-clear dest) (funcall ... component)))
(save-current-buffer (set-buffer buf) (cfw:dest-before-update dest) (cfw:dest-ol-selection-clear dest) (cfw:dest-ol-today-clear dest) (let (...) (cfw:dest-with-region dest ... ...)) (cfw:dest-ol-today-set dest) (cfw:cp-set-selected-date component (cfw:component-selected component)) (cfw:dest-after-update dest) (cfw:cp-fire-update-hooks component))
(with-current-buffer buf (cfw:dest-before-update dest) (cfw:dest-ol-selection-clear dest) (cfw:dest-ol-today-clear dest) (let (...) (cfw:dest-with-region dest ... ...)) (cfw:dest-ol-today-set dest) (cfw:cp-set-selected-date component (cfw:component-selected component)) (cfw:dest-after-update dest) (cfw:cp-fire-update-hooks component))
(let* ((buf ...) (dest ...)) (with-current-buffer buf (cfw:dest-before-update dest) (cfw:dest-ol-selection-clear dest) (cfw:dest-ol-today-clear dest) (let ... ...) (cfw:dest-ol-today-set dest) (cfw:cp-set-selected-date component ...) (cfw:dest-after-update dest) (cfw:cp-fire-update-hooks component)))
cfw:cp-update([cl-struct-cfw:component [cl-struct-cfw:dest buffer #<buffer *cfw-calendar*> point-min point-max 103 47 (lambda ... ...) nil nil nil nil] ((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)) (5 27 2012) month nil nil nil])
(let ((cp ...)) (cfw:cp-update cp) cp)
cfw:cp-new([cl-struct-cfw:dest buffer #<buffer *cfw-calendar*> point-min point-max 103 47 (lambda (&rest --cl-rest--) (apply ... ... ... ... --cl-rest--)) nil nil nil nil] ((init-date 5 27 2012) (contents-sources [cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) (annotation-sources) (sorter . string-lessp)) month nil)
(let* ((dest ...) (model ...) (cp ...)) (with-current-buffer (cfw:dest-buffer dest) (set ... cp)) cp)
(catch (quote --cl-block-cfw:create-calendar-component-buffer--) (let* (... ... ...) (with-current-buffer ... ...) cp))
(cl-block-wrapper (catch (quote --cl-block-cfw:create-calendar-component-buffer--) (let* ... ... cp)))
(block cfw:create-calendar-component-buffer (let* (... ... ...) (with-current-buffer ... ...) cp))
(let* ((date ...) (buffer ...) (custom-map ...) (contents-sources ...) (annotation-sources ...) (view ...) (sorter ...)) (let (...) (while --cl-keys-- ...)) (block cfw:create-calendar-component-buffer (let* ... ... cp)))
cfw:create-calendar-component-buffer(:custom-map (keymap (113 . kill-buffer) (13 . cfw:howm-from-calendar) keymap (57 . digit-argument) (56 . digit-argument) (55 . digit-argument) (54 . digit-argument) (53 . digit-argument) (52 . digit-argument) (51 . digit-argument) (50 . digit-argument) (49 . digit-argument) (48 . digit-argument) (113 . bury-buffer) (mouse-1 . cfw:navi-on-click) (77 . cfw:change-view-month) (84 . cfw:change-view-two-weeks) (87 . cfw:change-view-week) (68 . cfw:change-view-day) (32 . cfw:show-details-command) (114 . cfw:refresh-calendar-buffer) (9 . cfw:navi-next-item-command) (46 . cfw:navi-goto-today-command) (116 . cfw:navi-goto-today-command) (103 . cfw:navi-goto-date-command) (end . cfw:navi-goto-last-date-command) (home . cfw:navi-goto-first-date-command) (next . cfw:navi-next-month-command) (prior . cfw:navi-previous-month-command) (22 . cfw:navi-next-month-command) (62 . cfw:navi-next-month-command) (27 keymap (118 . cfw:navi-previous-month-command)) (60 . cfw:navi-previous-month-command) (36 . cfw:navi-goto-week-end-command) (94 . cfw:navi-goto-week-begin-command) (107 . cfw:navi-previous-week-command) (106 . cfw:navi-next-week-command) (104 . cfw:navi-previous-day-command) (108 . cfw:navi-next-day-command) (112 . cfw:navi-previous-week-command) (up . cfw:navi-previous-week-command) (110 . cfw:navi-next-week-command) (down . cfw:navi-next-week-command) (98 . cfw:navi-previous-day-command) (left . cfw:navi-previous-day-command) (102 . cfw:navi-next-day-command) (right . cfw:navi-next-day-command)) :view month :contents-sources ([cl-struct-cfw:source "howm schedule" cfw:howm-schedule-period-to-calendar cfw:howm-schedule-cache-clear "SteelBlue" nil nil nil nil]) :annotation-sources nil)
(let ((cp ...)) (switch-to-buffer (cfw:cp-get-buffer cp)))
cfw:open-howm-calendar()
call-interactively(cfw:open-howm-calendar t nil)
execute-extended-command(nil)
call-interactively(execute-extended-command nil nil)

windkidswindkids 2012/05/27 20:27 すいません。Emacs=23.4.1 (i386-mingw-nt5.1.2600), howm=1.3.9.2です。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証