最新 RSS

HIE no Murmur

2006/08/18

# [xyzzy][KaMailV3] サマリ表示

ネットワークコンピュータ上のファイルを開いた状態で,KaMailV3 を起動すると,Hyper Estraier が正しく実行されないのかもしれない。サマリに何も表示されない状態になってしまう。config.l の先頭に,

(cd "~/")

を記述しておくと,正しく動作するもよう。

結局使い方の違いから,会社では KaMailV3に,自宅では KaMail に落ち着いた。

# アグネス体操

こざるに特訓を受けるも,なかなか習得できず。

2006/07/09

# [xyzzy] CSVデータに色付け

CSV / TSV データの列ごとの表示色を変えてみようと,試みる。1 行目のデータのみを参照し,区切り文字と列数をテキトーに判定。

(defun csv-coloring ()
  (interactive)
  (make-local-variable 'regexp-keyword-list)
  (let* ((col '((:color 4 0) (:color 9 0) (:color 10 0)))
         (reg "^")
         (str (save-excursion
                (buffer-substring (progn (goto-char (point-min)) (point))
                                  (progn (goto-eol) (point)))))
         (sep (if (string-match (string #\TAB) str) #\TAB #\,))
         (sepstr (string sep))
         (len (list-length (split-string str sep)))
         collst colnum)
    (setq colnum (1- (list-length col)))
    (dotimes (i len)
      (let ((j (1+ i))
            (c (nth colnum col)))
        (when (= j 10) (return nil))
        (when (< (decf colnum) 0)
          (setq colnum (1- (list-length col))))
        (setq reg (concat reg "\\([^" sepstr "]*\\)" (if (< j len) sepstr "$")))
        (setq collst (acons j c collst))))
    (setq regexp-keyword-list
          (compile-regexp-keyword-list `((,reg t ,collst))))))

但し,色付けは,9 列目までしか行えない。それ以上色付けを行おうとすると,Bad reference number: 10 といわれてしまうため,なんともならん感じ。また,ダブルクォートでくくられていようと,カンマはカンマで区切る。といった中途半端で手抜きな仕様。

2006/06/20

# [xyzzy] [KaMailV3] 添付ファイルとして送信されたメールの表示

添付形式のメールを KaMailV3 で開けるように。あらかじめ,*kamail3-part-file* で設定したフォルダを作成しておく。一時ファイルを作らなくっても処理できそうですが,この方が簡単そうなので。message モードや summary モードで,x する。

;;; message/rfc822 な part の一時ファイル
(defvar *kamail3-part-file* (merge-pathnames "_part_.eml" *message-attachment-directory*))
 
;;; message/rfc822 な part は,何もいわずに表示するように。
(defun message-save-attachment (part &optional execute savefile)
  (unless (junk::mailstructure-p *message-structure*)
    (return-from message-save-attachment))
  (let ((structure (message-get-part *message-structure* part)))
    (if (junk::mailstructure-p structure)
        (let* ((header (junk::mailstructure-headers structure))
               (content (junk::mail-get-header-content "content-type" header))
               )
          (if (and execute
                   (equal (caar content) "message")
                   (equal (cdar content) "rfc822"))
              (let ((partfile *kamail3-part-file*))
                (message-save-part structure partfile)
                (message-show partfile))
            (progn
              (setq savefile
                    (or savefile
                        (message-save-dialog (junk::mail-get-filename header))))
              (when (and savefile
                         (message-save-part structure savefile))
                (kamail3-message "saved: ~A" savefile)
                (when (and execute
                           (no-or-yes-p "ファイルを実行しますか?\n~A" savefile))
                  (shell-execute savefile nil)))
              ))
          )
      (kamail3-error "part not found: ~S" part))))

これまた,標準の関数を上書きしているので,要注意なのです。

2006/06/19

# YAMAHA SR400

久々にまじまじと眺めてみた。むかしからとっても興味深く見つめているバイクなので,また,いつか買える時期がきたならば,ぜひ乗ってみたいバイクの一つ。

私が初めて見たのは,おそらく '85 モデル。うら若き高校生のころの話です。当時はただのとっつぁんばいくにしか見えなくて,何の興味もいだかず。その後,年を経るごとに興味もわいてきましたが,フロントブレーキがドラムブレーキであることが少々気になっていました。が,しかし,最新モデルでは,知らぬ間に元の(という表現は正しいか!?)ディスクブレーキに戻されている模様。で,俄然そそられる存在に。

こちらのサイトもとってもステキ。

# [xyzzy] [KaMailV3] フォルダ指定

Query で,フォルダを指定する方法を tori さんに教わった。例えば,inbox フォルダを subject 順に並べたい場合は,こんな感じ。

Query: x-kamail3-folder=km3:inbox order<subject

archive フォルダから,1週間分取り出したい場合は,こんな感じ。

Query: x-kamail3-folder=km3:archive date:1w

しかし,安心フォルダはうまくいかないようなので,初めて詳細検索機能を使ってみた。(これは,私の推測)

Query:
Attribute: x-kamail3-status STREQ U
Order: subject

な感じでできるみたい。STREQ とかは,このあたりを参考に。結果が使えそうであれば,C-x C-s で,検索条件をフォルダとして登録。

2006/06/12

# [xyzzy] [KaMailV3] ブラウザウィンドウをスクロールアップ

スクロールアップもキー操作で行いたい。Ctrl+, で。

 (defun mhtml-browser-scroll-up ()
   (interactive)
   (when (mhtml-browser-open-p)
     (bx:browserex-scroll-up)))
 (define-key *summary-map* #\C-\, 'mhtml-browser-scroll-up)

# [xyzzy] [KaMailV3] kamail3-ldap.l

kamail3-ldap.l と kamail-address.l を眺めつつ,とりあえず動くようにしてみた。draft バッファでヘッダ行にカーソルを置き l します。(require "kamail3-ldap") する前に,(setq *kamail3-disable-ldap-search* t) しておくと,LDAP の検索は行わないで address-book.dat からの検索だけを行います。ldap-search.l の簡単な使い方は,こちら

2006/06/11

# [xyzzy] [KaMailV3] 乗り換え準備中

試用のつもりで,ここ1ヶ月半ほど使ってみているうちに,もう手放せない状態に。readme.html によると,まだ実験段階とのことなので,あまり手を加えるべきではないと思いつつ,抑えきれないこの気持ち。

V3 では,本当に必要な機能のみに絞って実装するとのことなので,欲しいものは自分で作ってみることに。site-lisp/kamail3-plus.l を作成し,~/.kamail3/config.l からロードする。モノによっては,標準の関数を上書きしてしまっていたりなのです。ということで,祟りがないことを祈るばかり

とりあえず,config.l のサンプルにない変数で設定をしているあたり。

 ;;; edit-mode のメジャーモードは email-mode で
 (setq *edit-major-mode* 'email-mode)
 
 ;;; セパレータ文字列
 (setq *draft-line-string* "=")
 
 ;;; 返信/転送時の表示ヘッダ
 (setq *draft-header-field-list-quote*
   '("subject" "from" "date" "message-id"))
 
 ;;; Message バッファに Bcc ヘッダも表示
 (setq *message-header-field-list*
   '("date"
     "from"
     "subject"
     "to"
     "cc"
     "bcc"
     "reply-to"
     "x-mailer"
     "user-agent"))
 
 ;;; 添付ファイルの保存フォルダ
 (setq *message-attachment-directory*
       (merge-pathnames "kamail3" (map-backslash-to-slash (get-special-folder-location :personal))))

# [xyzzy] [KaMailV3] Draft バッファ削除時に問い合わせ

何度か編集途中の Draft バッファを削除してしまい,悲しい目にあっているので。

 (defun draft-close-if ()
   (interactive)
   (when (yes-or-no-p "Draft を閉じますよー。")
     (draft-close)))
 (define-key *draft-map* #\q 'draft-close-if)

※少々まぎらわしい表現であったのを,修正。(2006-06-12)

# [xyzzy] [KaMailV3] アドレス補完計画(キーワードファイル版)

KaMail で使っていたアドレスファイルを,KaMailV3 でも使えるように。Draft バッファのヘッダ行で k すると,ミニバッファで補完が効きます。

 ;;; アドレスファイル (~/etc/ADDRESS)
 (defvar *kamail3-keyword-file* "ADDRESS")
 
 (defvar *kamail3-keyword-hash-table* nil)
 (defvar *kamail3-keyword-completion-list* nil)
 
 ;;; 起動時設定
 (defun kamail3-keyword-init-address-complete ()
   (and *kamail3-keyword-file*
        (null *kamail3-keyword-hash-table*)
        (setq *kamail3-keyword-hash-table*
              (load-keyword-file *kamail3-keyword-file* t)))
   (when *kamail3-keyword-hash-table*
     (make-local-variable 'keyword-hash-table)
     (setq keyword-hash-table *kamail3-keyword-hash-table*)))
 
 (add-hook '*kamail3-start-hook* 'kamail3-keyword-init-address-complete)
 
 ;;; キーワードリストからアドレス補完入力
 (defun kamail3-keyword-address-complete-read (field)
   (interactive)
   (let ((field (or field (completing-read  "header: " '("to" "cc" "bcc") :must-match t))))
     (or *kamail3-keyword-completion-list*
         (setq *kamail3-keyword-completion-list*
               (make-list-from-keyword-table *kamail3-keyword-hash-table*))
         (return-from kamail3-keyword-address-complete-read nil))
     (let (adr)
       (message "キーワードファイルからアドレスを補完(TAB)します。")
       (setq adr (completing-read (format nil "Address Keyword (~A): " (string-capitalize field))
                                  *kamail3-keyword-completion-list*))
       (draft-add-header-addr field adr))))
 
 ;;; カーソル位置によりヘッダを判定しアドレス補完入力
 (defun kamail3-keyword-draft-edit-address ()
   (interactive)
   (multiple-value-bind (from to tag)
       (find-text-attribute-point (point))
     (kamail3-keyword-address-complete-read (when (or (equal tag "to")
                                              (equal tag "cc")
                                              (equal tag "bcc"))
                                      tag))))
 
 (define-key *draft-map* '#\k 'kamail3-keyword-draft-edit-address)

# [xyzzy] [KaMailV3] バッファタブを隠す

いつものように,バッファタブを隠してみる。

 ;;; バッファタブを隠す
 (setq *buffer-prefix* " *KaMail-V3 ")
 (setq *buffer-summary*   (concat *buffer-prefix* "Summary*"))
 (setq *buffer-message*   (concat *buffer-prefix* "Message*"))
 (setq *buffer-draft*     (concat *buffer-prefix* "Draft*"))
 (setq *buffer-edit*      (concat *buffer-prefix* "Edit*"))
 (setq *buffer-send*      (concat *buffer-prefix* "Send*"))
 (setq *buffer-signature* (concat *buffer-prefix* "Signature*"))
 (setq *buffer-source*    (concat *buffer-prefix* "Source*"))
 (setq *buffer-fetch*     (concat *buffer-prefix* "Fetch*"))
 (setq *buffer-he-parse*  (concat *buffer-prefix* "HyperEstraier Parse*"))
 (setq *buffer-he-temp*   (concat *buffer-prefix* "HyperEstraier Temp*"))
 (setq *summary-buffer-partial-temp* (concat *buffer-prefix* "Partial Temp*"))

# [xyzzy] [KaMailV3] バッファの切替

バッファタブを隠してしまうと,バッファの切替ができないので,とりあえずポップアップメニューを作成。

 ;;; メッセージバッファへ移動
 (defun kamail3-switch-message ()
   (interactive)
   (let ((buf *buffer-message*))
     (when (find-buffer buf)
       (set-buffer buf))))
 
 ;;; バッファの切替
 (defvar *kamail3-F2-org-func* #'select-buffer)
 (defun kamail3-select-buffer ()
   (interactive)
   (if (string= (ed::pseudo-frame-name ed::*current-pseudo-frame*) km3::*pframe-name*)
       (let ((menu (create-popup-menu nil)))
         (continue-pre-selection)
         (save-excursion
           (dolist (buffer (buffer-list))
             (let ((item (buffer-name buffer)))
               (when (string-match (regexp-quote *buffer-prefix*) item)
                 (add-menu-item menu nil
                                item
                                #'(lambda () (interactive)
                                    (switch-to-buffer item)
                                    (when (equal *buffer-source* (buffer-name (selected-buffer)))
                                      (let ((keymap (copy-keymap (local-keymap))))
                                        (define-key keymap #\RET 'kamail3-switch-message)
                                        (define-key keymap #\ESC 'kamail3-switch-message)
                                        (define-key keymap #\q   'kamail3-switch-message)
                                        (define-key keymap #\Q   'kamail3-switch-message)
                                        (use-keymap keymap))))
                                #'(lambda ()
                                    (when (string= item (buffer-name (selected-buffer)))
                                      :check)))))))
         (track-popup-menu menu))
     (funcall *kamail3-F2-org-func*)))
 (global-set-key #\F2 'kamail3-select-buffer)

# [xyzzy] [KaMailV3] スクロール関連

Enter で,メッセージの表示&前方スクロール。Ctrl+Enter で,メッセージの表示&後方スクロール。KaMailV3 本体のコードを流用させていただいてます。

 ;;; メッセージの表示&前方スクロール
 (defun summary-view-mail-or-scroll-forward (&optional backward)
   (interactive)
   (let* ((msg (summary-message-current))
          (num (car msg))
          (header (cdr msg))
          (file (summary-message-file header)))
     (when file
       (if (and (equal file *message-file-current*)
                (message-window-get))
           (let (scroll-end)
             (message-window-set)
             (unless (if backward
                         (pos-visible-in-window-p (point-min))
                       (pos-visible-in-window-p (point-max)))
               (scroll-window (if backward (- 1) 1)))
             (other-window 1))
         (progn
           (unless (file-exist-p file)
             (error "ファイルがありません: ~S" file))
           (summary-recenter)
           (when (message-show file)
             (other-window 1)
             (summary-message-seen-if msg)
             ))))))
 (define-key *summary-map* #\RET 'summary-view-mail-or-scroll-forward)
 
 ;;; メッセージの表示&後方スクロール
 (defun summary-view-mail-or-scroll-backward ()
   (interactive)
   (summary-view-mail-or-scroll-forward t))
 (define-key *summary-map* #\C-j 'summary-view-mail-or-scroll-backward)

# [xyzzy] [KaMailV3] メッセージを表示&メッセージウィンドウに移動&既読に

v で。こちらも,KaMailV3 本体のコードを流用しています。

 (defun my-summary-view-mail ()
   (interactive)
   (let* ((msg (summary-message-current))
          (num (car msg))
          (header (cdr msg))
          (file (summary-message-file header)))
     (unless file
       (return-from summary-view-mail))
     (if (and (equal file *message-file-current*)
              (message-window-get))
         (message-window-set)
       (progn
         (summary-message-seen-if msg)
         (message-show file)))
     t))
 (define-key *summary-map* #\v 'my-summary-view-mail)

# [xyzzy] [KaMailV3] 送信者アドレスを""でくくらない

kamail3/defs.l の format-address を思い切って上書きです。

 (defun format-address (email name)
   (if name
       ;(format nil "\"~A\" <~A>" name email)
       (format nil "~A <~A>" name email)
     email))

# [xyzzy] [KaMailV3] From が自分の場合は,"To:宛先"を表示

KaMail 風にしたくって。これまた kamail3/summary.l の summary-print-line を上書きです。

 (defun summary-print-line (num header &optional indent-string)
   (let* ((path (junk::mail-get-header-value "_lpath" header))
          (fromstr (junk::mail-get-header-value "from" header))
          (from fromstr)
          (to (junk::mail-get-header-value "to" header))
          from-string
          (title (junk::mail-get-header-value "subject" header))
          (datestr (junk::mail-get-header-value "date" header))
          (date (and datestr (junk::rfc822-parse-date (if (listp datestr)
                                                          (car datestr)
                                                        datestr))))
          (status (attr-status-get header))
          (multipart-p (junk::mail-multipart-p header))
          (marked (summary-message-marked num))
          )
     ;(multiple-value-bind (email name)
         ;(parse-address from)
       ;(setq from-string (or name email from)))
     (multiple-value-bind (email name)
         (parse-address from)
       (setq from-string
             (if (member email *from-address* :key #'car :test #'string=)
                 (multiple-value-bind (email name)
                     (parse-address to)
                   (concat "To:" (or name email to)))
               (or name email from))))
     (apply #'set-text-attribute
            (point)
            (progn
              (insert (summary-mark-string marked))
              (point))
            num
            *attribute-summary-mark*)
     … 省略 …
     (insert "\n")))

# [xyzzy] [KaMailV3] 不具合?

使っていて,少々気になったところ。もしや,環境に問題ありかもなので,調査が必要。>自分

  • 起動時に,サマリが表示されないことがあり。
  • KaMailV3用バッファでないバッファのモードラインフォーマットが変わってしまう。

なんとなく,発生する状況が特定できているが,原因はわからず。

2006/06/04

# [xyzzy] ちいさなちいさな小物たち

それなりに,需要が高いので。

(global-set-key #\C-Right "→")

一時的なメモ書き用に使います。(ctl-z-map は,こちら。)

(define-key ctl-z-map #\d
            #'(lambda () (interactive)
                (find-file "~/(草稿)")))

詰め込み桁数に合わせて区切り線を引きます。ついでに,なんじゃらモードの場合は,コメント分にします。(comment-out-selection-or-one-line は,こちら。)

(defun insert-hr ()
  (interactive "*")
  (insert (if *prefix-args* (read-string "" :default "━") "─")
          (let ((c fill-column))
            (unless (evenp c) (setf c (1+ c)))
            (/ c 2)))
  (comment-out-selection-or-one-line))
(define-key ctl-z-map #\; 'insert-hr)

ちょっとしたカスタマイズが,非常に便利なのです。

2006/04/17

# [xyzzy] KaMail で LDAP

KaMail でも 試してみるために,

(require "kamail/kamail-ldap")
(setq *kamail-use-ldap* t) </pre>

してみたところ,一通り気持ちよく動作してくれました。でも,kamail-ldap-address-complete (M-Right) だけは,少々機嫌が悪かったようで,

>CALL STACK  6: (string-match "^k" nil)
>CALL STACK  5: (system:*byte-code ...)
>CALL STACK  4: (kamail::kamail-address-complete-region 
(("kakaka@example.com" "kakaka") ("kuuu@example.co.jp" "kuuu") (nil nil) ...) 49)
>CALL STACK  3: (system:*byte-code ...)
>CALL STACK  2: (#<lexical-closure: kamail::kamail-ldap-address-complete>)
>CALL STACK  1: (command-execute kamail::kamail-ldap-address-complete)
不正なデータ型です: nil: string

とおっしゃいます。とりあえず,*kamail-address-alist* を加える前に,aalist の末尾の (nil nil) を取り去っておくと,機嫌を直してくださった模様です。

2006/04/16

# [xyzzy] ldapsearch

LDAP サーバの試作品が身近にあったので,早速つないでみた。

  • OpenLDAP for Win32 をダウンロード&インストール
  • 環境変数 PATH に "C:\Program Files\OpenLDAP" を追加
  • HATTORI 産の ldap-search.l を頂戴し,site-lisp に設置
  • 初期設定ファイルに,ldap-search.l の設定を記述
(require "ldap-search")

; ldapsearch.exeへのパス
(setq *ldap-search-command* "C:\\PROGRA~1\\OpenLDAP\\ldapsearch.exe")
; LDAP Server
(setq *ldap-server* "LDAP サーバのホスト名 or IP アドレス")
; basedn
(setq *ldap-basedn* "ベース識別名") ;"dc=example,dc=co,dc=jp" とか。
; Options
(setq *ldap-search-options* "-x -S mail")
  • xyzzy 再起動

あとは,M-x ldap-search-select-address で選択したり, M-x ldap-search-complete-address で補完したり。な,感じで使えるみたい。

2005/10/30

# [駄目]

やりたいこと,やらなきゃいけないことが,累積されていく…。

# [xyzzy] フォント

気分転換に,ほげほげゴシックにしてみた。

2005/10/05

# [xyzzy] AL-Mail to KaMail

以前使っていた AL-Mail のメールデータを長いこと放置していたが,これを KaMail に取り込もうと思い立つ。AL-Mail も 1 メール 1 ファイルで保存されているため,案外ファイル名を変更するだけでいけるのでは,などと甘い期待を寄せて KaMail に放り込んでみた。しかし,キャッシュファイルを作成し,サマリの表示まではうまくいったものの,本文が化けてしまいダメダメ。

AL-Mail のデータは,Subject が復号化された状態で保存されているため,これが悪さをしているのかとも思ったが,どうやら,エンコーディングが Shift-JIS になっているのが原因だったもよう。で,またしてもへなちょこなものをつくって,指定フォルダ中のファイル名を連番にしつつ,エンコーディングを ISO-2022-JP にすることにした。

(defun almail2kamail ()
  "AL-Mail のメールファイルを KaMail 用に変換"
  (interactive)
  (let* ((dir (read-directory-name "directory: "))
         (lst (directory dir
                         :absolute t
                         :wild "*.alm"
                         :file-only t)))
    (when lst
      ;; エンコーディングの変更
      (let ((buf (create-new-buffer "*alm2km*")))
        (set-buffer buf)
        (dolist (f lst)
          (erase-buffer buf)
          (ed::insert-file-contents f t)
          (write-region (point-min) (point-max) f nil *encoding-jis* 1))
        (delete-buffer buf))
      ;; ファイル名の変更
      (let ((i 1))
        (dolist (f lst)
          (rename-file f (merge-pathnames (format nil "~D" i) dir))
          (incf i))))))

almail2kamail は,ファイルを直接書き換えてしまうので,以下の手順で。

  1. AL-Mail の Mailbox 以下のメールファイルを,KaMail のローカルフォルダ中に新たにフォルダを作成してコピー。
  2. M-x almail2kamail して,新たに作成したフォルダを指定。
  3. 新たに作成したフォルダを,設定ファイル Folders に追加するか,フォルダモードから a するなどして KaMail のローカルフォルダとして登録。
  4. 新たに登録したフォルダを開くと,「Cache fileを作成します」といわれるので,作成してもらう。

これを AL-Mail のメールフォルダの数だけ繰り返す。で,たぶんオッケー。

2005/10/04

# [xyzzy] reference.dat

ということで(何が?),reference.txt から ese-fortune 用 reference.dat を作成するへなちょこなものをつくってみた。reference.txt は,$XYZZY/etc に置いておく必要があります。できあがった reference.dat も$XYZZY/etc に作成されます。

(defun reftxt2dat ()
  (interactive)
  (long-operation
    (let ((buf "*reference.dat*")
          (txt (merge-pathnames "reference.txt" (etc-path)))
          (dat (merge-pathnames "reference.dat" (etc-path))))
      (when (file-exist-p txt)
        (set-buffer (create-new-buffer buf))
        (ed::insert-file-contents txt t)
        (while (scan-buffer "^■" :regexp t :no-dup t)
          (save-excursion
            (save-restriction
              (narrow-to-region (point)
                                (progn
                                  (or (scan-buffer "^■" :regexp t :tail nil :no-dup t)
                                      (goto-char (point-max)))
                                  (forward-char -1)
                                  (point)))
              (goto-char (point-min))
              (if (string-match ".*\\[Section    \\]:.*"
                                (buffer-substring (point-min) (point-max)))
                  (replace-buffer "\n" "<ese-fortune-br>" :regexp t)
                (delete-region (point-min) (point-max))))))
        (goto-char (point-min))
        (delete-region (point)
                       (progn
                         (scan-buffer "^■" :regexp t)
                         (point)))
        (replace-buffer "^\n" "" :regexp t)
        (when (or (not (file-exist-p dat))
                  (yes-or-no-p "~A を上書きして良いですか?" dat))
          (write-file dat)
          (delete-buffer buf))))))

# [駄目] コメントなど

あとから読み直すと,私の書いたコメントは実にわかりにくかったりする。「…の良いとこなんですけどね。」っていうのは,「だから今のままの方がよいかもですね。」っていうつもりで書いてるのに,「だからそうすべきじゃないですかね。」とも読めてしまう。

お仕事でも,何度繰り返し説明してもなかなか通じ合えないのは,当然といえば当然か。

2005/10/02

# [xyzzy] 大掃除

新しいリファレンスの verify-visited-file-modtime には対応できないことを悟り,これを機に大掃除を始める。

2005/10/01

# [こざる] 運動会

毎年 9 月に開催される小学校の運動会。今年は珍しく 10 月に。やはり運動会といえば,かけっこが一番燃えるのです。練習では 6 人中 4 位だったお嬢ちゃんは,3 位目標で本番に挑みました。微妙フライング気味かと思わせなくもない絶妙なスタートを切ったお嬢ちゃんは,第 1 コーナーまでは先頭に位置していたのですが,コーナーでの詰めが甘く,第 2 コーナーあたりで 1 人抜かれ,ゴール数メートル前で 1 人抜かれ,結局 3 位に。当初の目標は達成したのですが,課題の残る結果となりました。でもじいちゃんが,独走状態でのスナップを記録してくれていたので,それを見た家族全員満足気。

# [xyzzy] CalMemo

もともと,私と近所のおじさんのためにつくったもので,自分の欲しい機能だけを何の脈絡もなく闇雲に追加していっただけのものなのですが,インストールして下さっている方もポチポチとみえるようなので,久々にバージョンナップ。

綺麗な作りになっているわけもなく,自分の記憶力が良いわけでもないため,たまーに中身を覗くと,なにがどうなっているのやら思い出すのが精一杯。

2005/09/27

# [xyzzy] メニュー

用でもないメニューを山のようにつくってしまうと,祟りがおこるもよう。メニューは表示されるが,全く動作しなくなってしまったり,あらぬコマンドが実行されたり…。テキトウに整理したところ,平静を取り戻した感じだが,これは,私の不徳のいたすところなのだろうか…。

ほぼ使わないと思われる機能を取り込んだり,全く使い物にならないカスタマイズをしたりすると,とりあえずメニューに登録してしまう。さもないとその存在さえも忘れ去ってしまうのではないかという不安感をぬぐい去るための行為だが,しかし,結局使わないことに変わりはなかったり。

2005/08/21

# 夏休み

楽しい夏休みも,今日でおしまい。

# [xyzzy] バッファをマウスで選択した時フレームを適宜移動する

あー,これです。欲しかったのは。これさえあれば,いろいろと小細工を施している割に,使い勝手の良くなかった辺りが,みーんな不要になります。感激です。

# [こざる] 発表会

今日は,バレエの発表会。同居人のお父さんとお母さんと共に,日進まで。7月の発表会では,そのような業者に撮影してもらい,DVDに仕上げてもらっているけれど,今回そのようなサービス(有料だけど)はないため,ビデオカメラを持参。

自分のビデオならば,自分のこざるを中心に撮影できるのだが,生での鑑賞時間は著しく短くなってしまう。最初にセットしたまま最後までほっておくという手もあるが,いざ撮影を始めるとそうそう割り切れないのがつらいところ。

今回の発表会のあとは,おそらく1年後までないはずなので,それまでひたすら同じビデオを繰り返し見続けることになるのでしょう。たぶん。

2005/07/26

# [xyzzy] goo 辞書検索

知らぬ間に goo 辞書検索が使えなくなっていたので,書き直し。すべての辞書からテキトウに検索してくれるようになったので,とっても便利。

2005/05/23

# 沖縄すば

今日は,皆で沖縄すばを食べるため,早めに帰宅。そばともうどんとも違う触感に,舌鼓を打つ。ソーキや三枚肉も良いのですが,どちらかというとさっぱり好みな面々は,野菜をたっぷりのせて食べたのでした。

# [xyzzy] outline-tree2

HTML 出力をしてみた。試しに,OutlineX のコメント文部分をテキストファイルとして切り出したもので試してみる。あらかじめ [アウトラインツリー設定] → [正規表現] で以下の設定をしてみた。

項目
ローカル設定ON
見出し(順不同)ON
単一見出し文字
スキップ正規表現^

[アウトライン選択] → [一般解析] → [正規表現] を選択し,[アウトラインの作成/更新] をクリックする。この状態で,[出力] → [見出しノード] → [バッファ全体] → [バッファ全体をFRAME HTML出力] を選択する。結果はこんな感じ

さらに,アウトライン作成関数の生成機能も試してみた。[アウトライン作成関数の生成] → [「正規表現」設定から] を選択すると,ミニバッファからいろいろと尋ねられる。で,テキトーに答えてみる。

項目
アウトライン関数名readme
メニュー表示名リードミー
アウトライン説明リードミーファイル用アウトラインの作成

すると,情報保存確認ダイアログが表示されるので,「はい」と答えると,~/.outline-tree/autoload/ 以下に cr-user-regexp-readme.l というファイルが自動生成される。これで [アウトライン選択] → [ユーザ] → [* user : リードミー(A)] というメニューが追加されるので,いつでも好きな時に選択可能になります。ちなみに, [アウトライン説明] → [ユーザ] → [* user : リードミー(A)] で,アウトラインの説明が表示されるようです。

ん〜。とっても便利ですね。いままで .olt の設定がおっくうでなかなか使えなかったのですが,これなら私にも使えそう。

2005/05/22

# [音楽] 春日井ウィンドオーケストラ

6月26日に定期演奏会があります。私の職場のおねーさんが出演します。同居人 A と B を誘ったのですが,あいにく球技大会 & 習い事で都合がつかず。仕方がないのでひまそうなおにーさんを連れて行くことに。

吹奏楽に特別興味を持っているわけではありませんが,やはり生の音は間違いなく良いので。チケットの値段もお手頃だし。

# [音楽] HM/HRこの曲を歌え!-カラオケで歌えるメタル曲

懐かしい曲がいっぱいです。私のまわりには,聴く人さえいませんが,カラオケで歌う方々がみえるとは知らなんだ。しかし,(おそらく後先考えず)GUNS や ZEPPELIN に挑むチャレンジャーな方までみえるとは…。どー考えたって,WELCOME TO THE JUNGLE なんて無理でしょーに。

このリストに KING CRIMSON まで載ってたりするのが,なんだか嬉しかったり。

# [xyzzy] re-builder

今日始めて使ってみました。先日のお話では,なにをするものやらさっぱりだったのですが,Meadow/Emacs memo とかこことかを参考にしつつさわってみて,やっと理解できました。hisashim さん感動の理由が実感できた気がします。

なんだか「正規表現」と仲良くできそうな気分になってきました。

2005/05/21

# [xyzzy] Extlib

NANRI さんから素敵な提案が。長らく放置してある Extended xyzzy lisp library も息を吹き返すことが出来るか!?

NetInstaller の登場により,その役目を終えた感もある Extlib ですが,NetInstaller 非対応な拡張物も存在するわけですし,また,NetInstaller のカテゴリ機能がうまく活用できるまでは,それなりに有用なものとも思います。

やはり,拡張 Lisp を分類するには,特定の人(々)がエイヤッとやってしまわないと,なかなかむつかしい気もしますし。

# [xyzzy] outline-tree2

ここんとこ毎日お仕事で使ってます。最近やってる仕事では,正しいフォーマットの文書を作る必要はないのですが,その日その日に起こった出来事をなるべく詳細に記録しておいて,その内容をしかるべき所に指摘したり依頼したりといった感じなので,ほぼ xyzzy だけで完結してしまいます。ただ,書き溜めてるテキストもそれなりの量になるので,outline-tree は必須だったりです。

実は,outline-tree をちゃんと(というか頻繁に)使い始めたのは,数ヶ月前ぐらいからでして,いまだにその使い方が良くわかってなかったりなのですが,なんだかとても嬉しいタイミングでの ver2 公開だったりします。

私は,KaMail や CalMemo を常時併用しているため,その都度アウトラインを作成し直すのが何とかならんかなぁと思っていたのですが,こんなんで良いのですね。

(defun olt2-swith ()
  "olt2 特定のアプリ使用時に閉じる"
  (cond ((member
          (ed::pseudo-frame-name (selected-pseudo-frame))
          '("2ch" "KaMail" "RSS" "NetInst" "Diary" "CalMemo" " *tterm*")
          :test #'equal)
         (outline-tree-close))
        (t (outline-tree-open))))
(add-hook '*select-pseudo-frame-hook* #'olt2-swith)

# [xyzzy] 日報モード

SUGI-san ち に,なにやら気になる感じのものが出現している。

2005/05/16

# [xyzzy] colorprint

TreeView.dll の最新版(といっても 2003/9/15 版ですが…)を頂いたついでに,colorprint も頂き早速テストプリント。直後に,自分の使っているプリンタがモノクロであることに気付き …… 。

2005/05/15

# [Firefox] 拡張もの

N さんのスクリーンショットを見てなんだかうらやましくなってきた。拡張ものは Tab Mix だけだったが,よさげなものだけ追加投入してみた。

fx.jpg

テーマを rein に変更し,次の拡張ものを追加。

  • Tab Mix:タブ機能の拡張
  • Copy URL +:ページのURLやページのタイトルなどをコピー
  • New Tab and Go:クリップボードの URL を開く

最近は餡ドーナッツに浸ってたけれど,これだけ揃えればとりあえず満足。動作が鈍くなるのでは,という懸念が強く,あまり拡張ものには手を出さなかったが,特に心配する必要もなかった感じ。

# [xyzzy] outline-tree2

NetInstaller からインストールし,outline-tree2::outline-tree-create-outline-and-select-node を実行してみた。

>CALL STACK 20: (treeview::treeview-dll-add-file-icon nil #<chunk 150278284>)
>CALL STACK 19: (system:*byte-code ...)
>CALL STACK 18: (treeview::treeview-add-file-icon  "C:\\usr\\local\\xyzzy\\site-lisp\\outline-tree\\icon\\default\\buffer.ico")
>CALL STACK 17: (system:*byte-code ...)
>CALL STACK 16: (outline-tree2::outline-tree-initialize-icons)
>CALL STACK 15: (system:*byte-code ...)
>CALL STACK 14: (treeview::treeview-create-1 outline-tree2::outline-tree 63420880 0)
>CALL STACK 13: (system:*byte-code ...)
>CALL STACK 12: (treeview::treeview-create-ex outline-tree2::outline-tree 200 0)
>CALL STACK 11: (system:*byte-code ...)
>CALL STACK 10: (outline-tree2::outline-tree-create)
>CALL STACK  9: (system:*byte-code ...)
>CALL STACK  8: (#<lexical-closure: outline-tree2::outline-tree-create-outline-by-buffer> #<buffer: siteinit.l>)
>CALL STACK  7: (system:*byte-code ...)
>CALL STACK  6: (outline-tree2::outline-tree-funcall-buffer-by-window #<lexical-closure:  outline-tree2::outline-tree-create-outline-by-buffer> nil)
>CALL STACK  5: (system:*byte-code ...)
>CALL STACK  4: (outline-tree2::outline-tree-create-outline-by-window)
>CALL STACK  3: (system:*byte-code ...)
>CALL STACK  2: (#<lexical-closure: outline-tree2::outline-tree-create-outline-and-select-node>)
>CALL STACK  1: (command-execute outline-tree2::outline-tree-create-outline-and-select-node)
 不正なデータ型です: nil: real

outline-tree2::outline-tree-create を実行してみた。

>CALL STACK 17: (system:make-c-function #<DLL-module: C:/usr/local/xyzzy/TreeView.dll> "SetSize" (:int32 :int32  :int32 ...) :int32)
>CALL STACK 16: (system:*byte-code ...)
>CALL STACK 15: (treeview::treeview-dll-setsize 63616032 200 5 10000 1)
>CALL STACK 14: (system:*byte-code ...)
>CALL STACK 13: (treeview::treeview-setsize 200 5 10000 1)
>CALL STACK 12: (system:*byte-code ...)
>CALL STACK 11: (treeview::treeview-data-load-window-size)
>CALL STACK 10: (system:*byte-code ...)
>CALL STACK  9: (treeview::treeview-create-1 outline-tree2::outline-tree 63616032 0)
>CALL STACK  8: (system:*byte-code ...)
>CALL STACK  7: (treeview::treeview-create-ex outline-tree2::outline-tree 200 0)
>CALL STACK  6: (system:*byte-code ...)
>CALL STACK  5: (#<lexical-closure: outline-tree2::outline-tree-create>)
>CALL STACK  4: (command-execute outline-tree2::outline-tree-create #<lexical-closure:  editor::record-complex-command>)
>CALL STACK  3: (system:*byte-code ...)
>CALL STACK  2: (#<lexical-closure: execute-extended-command> outline-tree2::outline-tree-create nil)
>CALL STACK  1: (command-execute execute-extended-command)
指定されたプロシージャが見つかりません。 : "SetSize"

私はなにかとっても間違ったことをしているのだろうか…。

2005/03/19

# [xyzzy] 亀本

うちにも届きました。普段は,本を買うと真っ先に帯と表紙を剥がして捨ててしまうのですが,もちろんそんなことはできません。なんだかもう胸がいっぱいなのです。

背表紙の亀。

# たまごっち

こざるに請われるままに,本日入荷分のたまごっち × 限定 132 コのうちの 1 つを求めて,開店前のトイザらスへ。開店 20 分前で既に長蛇の列が。かなーり諦めモードだったのですが,残り 10 コあたりでなんとか手にすることができました。

気分のが良くなったところで会社へ向かい,今週分の残作業を処理。しかし,こちらの方は思うようにこなすことができず,結局お持ち帰りに…。

2005/02/13

# [駄目] つらい三連休

  • インフルエンザにやられました。
  • 二晩で 64.4kg → 61.4kg に。
  • 布団の中でもうろうとしたアタマで作業を行う。
  • 今日はとりあえず最高体温が 38 度台におさまったので,調子の良さ気な時間帯をみはからってなんとかメールにまとめあげる。
  • 実は仕事も持ち帰っているのだが,全く手つかずのまま…。

# [xyzzy] manued-mode

思わぬツールの出現により,非常に効率よく作業を進めることができました。感謝です。

2005/01/25

# [xyzzy] box-fixation-mode

試行錯誤中ですが,メジャーモードはこんな感じでしてみてます。

;;; 罫線内編集用モードの切替
(defvar-local box-fixation-original-mode nil)
(defun toggle-box-fixation-mode ()
  (interactive "*")
  (if box-fixation-original-mode
      (progn
        (funcall box-fixation-original-mode)
        (setq box-fixation-original-mode nil))
    (let ((m buffer-mode))
      (box-fixation-mode)
      (setq box-fixation-original-mode m))))
(global-set-key #\M-F8 'toggle-box-fixation-mode)

2005/01/16

# [xyzzy] box-fixation-mode

スバラシイ。これは重宝すること間違い無しです。

あー,もうすぐあさになりそう…。

2005/01/03

# [xyzzy] ML Archive 更新

久々に。でもインデックスの更新はまたの機会に…。

# 買い物

お年玉でスキーセット一式を購入。4回/1シーズン×2年ぐらいで十分もとがとれそう。

2004/12/18

# [xyzzy] ファイラで共有フォルダを選択

さっそく頂きました。共有フォルダがゴマンとある環境では,共有フォルダにかっ飛ぶがほぼ使えないので,とっても不満気だったところです。

# [misc] こざるの発表会

プリントアウトした紙切れと赤ペンを手に,入場口で 2 時間ほど並ぶ。

2004/12/12

# [misc] 初顔合わせ

先日登場したばかりの義理の姪?ちゅーか義理の妹の娘と初顔合わせ。とっても小さくってかわいくって,おもわずケータイで写真取りまくってしまいました。

あとは,ひたすら家の中にこもりきる 1 日。

# [xyzzy] ライセンス

とりあえず,NYSL なライセンスでいくつか公開したけれど,某どなたさんかが xyzzy の拡張 Lisp 向けの素敵なライセンスを考案&公開してくださるといいのになーとかおもう今日この頃。

2004/11/27

# [xyzzy]

ですね。

# [misc] つーかーれーたー(爺さんロボット風)

今日はいとこの結婚式。家を9時30分に出発し,帰ったのは18時。実に4時間にも及ぶ披露宴。まだ撮影回数3回目にもかかわらず,一応ビデヲ撮影担当だったためそれなりに忙しく動き回る。その後修理から帰ってきてた PC もって持ち主宅にセッティングに。22時頃帰宅。しかし,結婚式がなかったら,今頃学校の OB 会に出席し,多分帰宅できてなかったはず。

# [xyzzy] 横町問題

です。主要メンバーが関東方面に集中しているようすなので,名古屋近郊生息組はつらいかも。

<前の30件