Page 6 of 7: « 1 2 3 4 5 6 7





howm の バッファ名は howm のタイトルで on xyzzy

Posted at Wed, 19 Apr 2006 in computer::xyzzy

バッファ名を howm のタイトルにhowm ファイルを大量に開いたときに、どのバッファがどのファイルかわからなくなるので、バッファ名を howm のタイトルに変更するようにしてみました。スクリーンショットの上2番目がが適用前、下のふたつが適用後です。

新規作成の場合には、タイトルがないので適用されません。

1 メモ 1 ファイルでない場合にはあんまり意味がないかも。

コード

howm-init.l に記述します。

;;;;;;;;;;;;;;;;;;
;; ■ howm ファイルのバッファ名をhowmデータのタイトルに
(defun change-buffer-name-to-howm-title ()
  (save-window-excursion
    (let ((title (string-trim " =" (buffer-substring (progn (goto-char (point-min)) (point))
                                                     (progn (goto-eol) (point)))))
          (prefix "H: "))
      (when (and (get-buffer-file-name) (> (length title) 0))
        (rename-buffer (concat prefix title))))))
(add-hook 'howm-mode-on-hook 'change-buffer-name-to-howm-title)


howm の検索に Hyper Estraier を使ってさらに速度改善 on xyzzy

Posted at Thu, 13 Apr 2006 in computer::xyzzy

前回 HE-grep.l を使って普通の grep っぽく howm フォルダを検索するところまでいったのですが、やっぱり howm 標準の検索機能のほうが便利なので、howm の検索時に Hyper Estraier を使うことに。

やりかたは HE-grep.l のページの下のほうに書いてあります。howm-init.l に記述を追加するだけ。で、多分いきなりこの設定をやっても動かなくて、インデックスを作ったりいろいろする前準備が必要だと思われます。(HE-grep を使って howm のデータを検索する でやった「検索実行」の前までのところ)

実はちゃんと Hyper Estraier で検索できているかどうか自信がないのですが、検索速度はかーなーり速くなったので多分導入できています。コマンドプロンプトが一瞬出てくるので正しいのかな。



HE-grep を使って howm のデータを検索する on xyzzy

Posted at Thu, 06 Apr 2006 in computer::xyzzy

howm-helper を使って howm の検索を grep に任せることで以前よりもだいぶ早くはなったのですが、それでもやっぱりもたつきが気になるときがあります。
なのでちょっとアプローチ方法を変えて、howm ではなく HE-grep で howm のデータを検索してみることにしました。
HE-grep は Hyper Estraier という全文検索エンジンを使って Grep を行うための xyzzy 拡張 Lisp です。

検索エンジンがちがうだけで要は Grep なので、howm の検索とは別物です。

手順としては

  1. HE-grep を Netinstaller でインストール
  2. HyperEstraier をインストール
  3. howm ディレクトリのインデックスを作成
  4. 検索実行

という感じ。

HE-grep を Netinstaller でインストール

xyzzy の Netinstaller から HE-grep をインストールします。手動でインストールする場合は、HE-grep.l のページからダウンロードしてください。

HyperEstraier をインストール

Hyper Estraier のホームページ からWindows版のバイナリパッケージ(例:hyperestraier-1.1.6-win32.zip )をダウンロードして適当なディレクトリに解凍し、そのディレクトリにパスを通します。(Windows XP の場合、マイコンピュータ右クリック - プロパティから「システムのプロパティ」を起動し、「詳細設定」タブの「環境変数」ボタンから、環境変数 Path にそのパス(estcmd.exe が存在するディレクトリのパス)を追加します(なければ新規作成))

インデックス作成のための設定

Hyper Estraier はインデックスを使って全文検索を行うので、検索する前にインデックスの作成を行う必要があります。インデックスの作成は HE-grep の機能にあるのですが、そのための設定を .xyzzy (または siteinit.l)に記述します。

(setq *HE-make-index-command-list*
      '(
	(
	 "C:/casket"
	 "C:/bin/xyzzy/howm"
	 "estcmd gather -pc CP932 -ic CP932 -cl -fh -sd -cm"
	 "estcmd purge"
	 "estcmd optimize"
	 "howm(&h)"
	 )
"c:/casket"
インデックスファイルの保存場所を指定します。任意のディレクトリで OK
"C:/bin/xyzzy/howm"
howm データの保存ディレクトリを指定します
"estcmd gather -pc CP932 -ic CP932 -cl -fh -sd -cm"
インデックス作成用のコマンド。
"estcmd purge"
ファイルシステムから削除されたファイルをインデックスに反映させるコマンド。nil(実行されない) でも可
"estcmd optimize"
インデックスの最適化を行うコマンド。nil でも可
"howm(&h)"
メニューに表示される名前(任意)

検索のための設定

作成したインデックスを使って検索するための設定を .xyzzy (または siteinit.l)に記述します。

(setq *HE-command-list*
      '(
	(
	 "howm(&h)"
	 "C:/casket"
	 "estcmd search -sf -ic CP932 -vh -max -1"
	 "C:/bin/xyzzy/howm"
	 )
	))
"howm(&h)"
メニューに表示される名前(任意)
"C:/casket"
インデックスファイルの保存場所。上で指定したのと同じディレクトリを指定します
"estcmd search -sf -ic CP932 -vh -max -1"
検索用のコマンド。このままでOK
"C:/bin/xyzzy/howm"howm
データの保存ディレクトリ

howm ディレクトリのインデックスを作成

xyzzy を再起動して、M-x HE-make-index と実行します。(M-x = Alt + x)ポップアップメニューが出てくるので howm を選択して、しばらく待つとインデックスの作成が完了します。

検索実行

M-x HE-grep と実行して、ポップアップメニューが出てきたら howm を選択します(2度目以降は出てこない)。検索文字列を入力して Enter を押すと検索が実行されます。

速度は?

grep を使うのと比べるとまぁまぁ速くなりました。grep だとコマンドプロンプトがぴょこっと出るだけでじーっとまたされますが、現在検索しているファイルがメッセージに表示されるので、体感速度がけっこうちがいます。

検索画面



SQL を String リテラルにする Lisp for VB6

Posted at Tue, 07 Mar 2006 in computer::xyzzy

nagaton --diary devnull - SQLとかをStringリテラルにするショボいlisp を見たら VB には適用できそうになかったので、VB 用に改造してみました。
自動判別してトグルするようにしています。
汎用性の低そうな tips です。

使用前

select sysdate from dual;

使用後

strSQL = strSQL & vbCrLf & "select sysdate from dual;"

ソース

(defun toggle-str-exp (from to)
  "SQL を String にしたり戻したり"
  (interactive "*r")
  (let ((name "strSQL"))    ;; 変数名
    (save-excursion
      (save-restriction
        (narrow-to-region from to)
        (untabify from to)
        (goto-char (point-min))
        (if (and (scan-buffer (concat "\\\"\\|\\(" name " += +" name
                                   " +& +\\(vbCrLf\\|vbCr\\|vbLf\\) +& +\\)")
                              :regexp t :case-fold t) (goto-char (point-min)))
            (replace-buffer
               (concat "\\\"\\|\\(" name " += +" name " +& +\\(vbCrLf\\|vbCr\\|vbLf\\) +& +\\)")
               "" :regexp t :case-fold t))
          (replace-buffer
             "\\(.+\\)$"
             (concat name " = " name " & vbCrLf & \\\"\\1\\\"")  :regexp t :case-fold t)
        ))))
(defun toggle-str-exp-all ()
  (interactive)
  (toggle-str-exp (point-min) (point-max)))
; (global-set-key #\C-\5 'toggle-str-exp-all)


psearch がものすごく便利 on xyzzy

Posted at Mon, 06 Mar 2006 in computer::xyzzy

xyzzy の拡張 Lisp、 psearch がものすごい便利です。

psearch

psearch の p はポップアップの p で、適当な単語の上で Ctrl + ] を押すと、バッファ内を検索してポップアップ表示してくれる、という機能なのですが、この変数はどこでつかっているんだろう? なんていうときにものすごく役に立ちます。
あらわれたポップアップリストを使って該当箇所に移動することもできるし、そこからまた戻ってくることももちろん可能(Ctrl + Alt + ])。
検索結果を行単位で表示してくれるので、検索で移動したい場合にはかなりの威力を発揮します。
psearch 機能を インクリメンタルサーチでも使えるようにしておくと、さらに便利。
ネットインストーラーからインストールできます。もしくは深江さんのページから

ポップアップ表示だと一瞬で消えてしまいますが、ダイアログで表示できる「検索結果をダイアログボックスで表示する」もあわせてオススメです。こっちはダイアログなので dsearch と言うみたい。

dsearch



del.icio.us から howm on xyzzy にデータを取り込む

Posted at Thu, 16 Feb 2006 in computer::xyzzy

del.icio.us から howm にデータを取り込む xyzzy 用のツールを作ってみました。
そんなものすごいニッチな需要が自分以外に存在するのかはわかりませんが、公開してみます。



英日・日英の辞書をひく on xyzzy

Posted at Fri, 11 Nov 2005 in computer::xyzzy

英語のつたなさには自信があるので、こまめに辞書をひきたいと思っています。
オンラインの辞書も充実していますが、ちょこっと意味を知りたいときは xyzzy の辞書が便利、というわけで xyzzy でできるだけスマートに辞書をひく機能がないかと探してみたのですが、いまいち好みにあうものがなかったので書いてみました。

スクリーンショット

注意と使いかた

ソース

;;;;;;;;;;;;;;;;;;
;; ■ キーを押されたらカーソル位置の単語で英和と和英をひく
(defun popup-dict-e2j-j2e ()
  (interactive)
  (let* ((str
    (progn
      (multiple-value-bind (start end)
          (ed::get-selection-start-end)
      (if start (buffer-substring start end)
        (save-excursion
          (buffer-substring
             (progn (forward-word 1) (point))
             (progn (forward-word -1) (point)))))) ) ) r)
        (setf r (lookup-dictionary *edict-dictionary-path*
                                   "xyzzydic" "xyzzye2j" str))
        (unless r
          (setf r (lookup-dictionary *edict-dictionary-path*
                                   "xyzzydic" "xyzzyj2e" str)))
    (if r (popup-string (format nil "~A:~%~%  ~{~A~^, ~}" str r) (point))
      (message (format nil "登録されていません:~A" str)))))
(global-set-key #\F12 'popup-dict-e2j-j2e)