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
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")))
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/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 は,ファイルを直接書き換えてしまうので,以下の手順で。
- AL-Mail の Mailbox 以下のメールファイルを,KaMail のローカルフォルダ中に新たにフォルダを作成してコピー。
- M-x almail2kamail して,新たに作成したフォルダを指定。
- 新たに作成したフォルダを,設定ファイル Folders に追加するか,フォルダモードから a するなどして KaMail のローカルフォルダとして登録。
- 新たに登録したフォルダを開くと,「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 位に。当初の目標は達成したのですが,課題の残る結果となりました。でもじいちゃんが,独走状態でのスナップを記録してくれていたので,それを見た家族全員満足気。
2005/08/21
# [xyzzy] バッファをマウスで選択した時フレームを適宜移動する
あー,これです。欲しかったのは。これさえあれば,いろいろと小細工を施している割に,使い勝手の良くなかった辺りが,みーんな不要になります。感激です。
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/15
# [Firefox] 拡張もの
N さんのスクリーンショットを見てなんだかうらやましくなってきた。拡張ものは Tab Mix だけだったが,よさげなものだけ追加投入してみた。
テーマを 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/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)
2004/12/18
# [xyzzy] ファイラで共有フォルダを選択
さっそく頂きました。共有フォルダがゴマンとある環境では,共有フォルダにかっ飛ぶがほぼ使えないので,とっても不満気だったところです。