[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:07596] 辞書引き機能を少し改造してみました。



 いつもお世話になっています、渡辺徹です。
 これまでずっと、こちらへの投稿は質問ばかりだったのですが、いつも質問ば
かりでは申し訳ない、少しでもxyzzy文化への寄与を(大げさ?)と考えて、小さい
ネタではありますが今回初めてプログラムをお知らせします。
 プログラムはedict.lの中の関数に手を入れて、少し辞書引きが便利になるよ
うにしてみたものです。オリジナルでは新しく検索するたびに、結果が書き込ま
れるバッファが更新され、以前に検索した結果は見ることができなくなりました。
そこで、2度目以降の辞書引きの結果を既に存在するバッファの先頭に付け加え
ていくようにしてみました。この2度目以降の検索の時、結果を保持するバッフ
ァの先頭が表示されていなかったり、バッファ自体が表示されていなかったりし
たら、新しい検索結果が見られるように先頭部分を表示するようにもしてみまし
た。ただし、英和、和英、イディオムと検索結果はすべて同一のバッファに書き
込まれます。
 私のように、英語に弱くxyzzyの辞書引き機能を多用している方にはおすすめ
です。一応かなり自分で使って、動作を確認していますが、改良の余地などある
と思います。こうした方がいいという点など気がつかれましたら、お知らせくだ
さい。また、今回"リファレンス"にはたいへんお世話になりました。作成、メン
テをされている方々に大感謝です。そして、もちろん亀井さんにも。

 lookup-idiom-dictionary-selection
 lookup-j2e-dictionary-selection
 lookup-e2j-dictionary-selection
 の三つの関数の動作を変更します。以下のリストを.xyzzyまたはsiteinit.lに
付け加えてお使いください。siteinit.lに追加した場合、バイトコンパイルと
xyzzy.???の更新もお忘れ無く。

; ----- ここから -----

;----- edict.lで複数の検索結果を表示できるように -----
;----- *dictionary*バッファが表示されていない場合に対応
(defun edict-lookup-dictionary (from to dic dic2);Japanese to English
  (let* ((s (buffer-substring from to))
	 (r (lookup-dictionary *edict-dictionary-path* "xyzzydic" dic s)))
    (unless r
      (plain-error "登録されていません: ~A" s))
    (dictionary-aux #'edict-lookup-dic-long-op dic2 s r)
    )
  t)

(defun edict-lookup-dic-long-op (dic2 s r)
  (long-operation
    (format t "~A:~%~%" s)
    (if dic2
	(dolist (x (sort r #'string<))
		(format t "~A~%" x)
		(format t "  ~{~A~^,~}~%~%"
			(lookup-dictionary *edict-dictionary-path* "xyzzydic" dic2 x)))
      (format t "  ~{~A~^,~}~%~%" r) )
    (set-buffer "*dictionary*")
    (fill-region (point-min) (point-max))
    (goto-char (point-min)) ) )

(defun edict-analogize-conjugation (from to);English to Japanese
  (long-operation
    (let ((string (buffer-substring from to))
	  (rl nil))
      (when (setq r (lookup-dictionary *edict-dictionary-path*
				       "xyzzydic" "xyzzye2j" string))
	(push (cons string r) rl))
      (setq rl (edict-analogize-conjugation-1 string rl))
      (unless rl
	(plain-error "登録されていません: ~A" string))
      (dictionary-aux #'edict-analogize-conjugation-aux rl)
      )
    t))

(defun edict-analogize-conjugation-aux (rl)
  (dolist (x (nreverse rl))
    (format t "~A:~%~%  ~{~A~^,~}~%~%" (car x) (cdr x)) )
  (set-buffer "*dictionary*")
  (fill-region (point-min) (point-max))
  (goto-char (point-min)) )

;edict-lookup-dictionaryとedict-analogize-conjugationで
;共通処理部分(窓の状態条件で分岐)を分離
(defun dictionary-aux (fun &rest arg)
  (let ((buffer (selected-buffer))
	(dic-buffer (find-buffer "*dictionary*")) )
    (if dic-buffer
	(with-output-to-buffer ("*dictionary*");既に*dictionary*があれば
 	  (apply fun arg)
	  (cond ((= 1 (count-windows));窓が一つしかないときは
		 (pop-to-buffer buffer t) )
		(t
		 (switch-to-buffer buffer)
		 (let ((dic-window (get-buffer-window dic-buffer)))
		   (cond (dic-window;                       *dictionary*が別窓に表示
			  (set-window dic-window)
			  (goto-char 0)
			  (set-window (get-buffer-window buffer)) )
			 (t;                                *dictionary*が非表示
			  (other-window)
			  (switch-to-buffer dic-buffer)
			  (other-window -1) ) ) )
		 ) )
	  )
        (with-output-to-temp-buffer ("*dictionary*" t);*dictionary*がまだない
	  (set-buffer-fold-type-window);ウインドウ幅で桁折り
	  (apply fun arg)
	  (pop-to-buffer buffer)
	)
      )
    )
  )
; ----- ここまで -----


      /|
     / |
    / W|
    ~~~|           渡辺  徹
  \-------/       t-watanabe11@xxxxxxxxxxxx
~~~ \____/ ~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Index Home