しょぼしょぼすくりぷと xyzzy > lisp サンプルLibrary集 > 辞書引きlisp

辞書引き

edicの辞書引きを popupにする

もうひとつのウインドウで辞書をひくのではなく、辞書を引いたものをpopupで表示する。

(defun ed::edict-lookup-dictionary (from to dic dic2)
  (let* ((s (buffer-substring from to))
	  (unless (check-edic-buffer-string string)
	 (r (lookup-dictionary *edict-dictionary-path* "xyzzydic" dic s)))
    (unless r
      (plain-error "登録されていません: ~A" s))
    (let ((buffer (selected-buffer)))
      (with-output-to-buffer ("*dictionary*")
	(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*")
	  ;(switch-to-buffer "*dictionary*")
	  ;(fill-region (point-min) (point-max))
	  (goto-char (point-min))))
		(pop-to-buffer buffer))))
  (set-edic-buffer)
  t)

(defun ed::edict-analogize-conjugation (from to)
  (long-operation
    (let ((string (buffer-substring from to))
	  (rl nil))
	  (unless (check-edic-buffer-string string)
      (when (setq r (lookup-dictionary *edict-dictionary-path*
				       "xyzzydic" "xyzzye2j" string))
	(push (cons string r) rl))
      (setq rl (ed::edict-analogize-conjugation-1 string rl))
      (unless rl
	(plain-error "登録されていません: ~A" string))
      (let ((buffer (selected-buffer)))
	(with-output-to-buffer ("*dictionary*")
	  (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))
		  (pop-to-buffer buffer))))
	(set-edic-buffer)
    t))

(defun check-edic-buffer-string (string)
 (if
  (progn(find-buffer "*dictionary*")
	(switch-to-buffer "*dictionary*")
	(goto-char (point-min))
	(and(scan-buffer string)
		 (= 0 (current-column)))
	)
  nil
	));current

(defun set-edic-buffer()
 (if (string= (buffer-name (selected-buffer)) "*dictionary*")
	  (setq need-not-save t)
	nil)
  )


ちょっとしたプログラム。 edict が設定されているとすると、 str に 単語かその一部を入れて、 xyzzye2j(English to Japanese) xyzzyj2e(J to E)をいれると ポップアップ 出力は format を参考にして
(defun lookup-edict-by-word (str &key e2j-flg warn-err)
  (let ((rl nil)(temp) (dic-n))
	 (setq dic-n (if e2j-flg "xyzzye2j" "xyzzyj2e"))
  (when (setq r
				  (lookup-dictionary *edict-dictionary-path* "xyzzydic" dic-n str))
	 (push (cons str r) rl))
  (setq rl (ed::edict-analogize-conjugation-1 str rl))
	 (if (and (not rl)
				 warn-err)
	 (plain-error "登録されていません: ~A" str))
  (dolist (x (nreverse rl))
	 (setq temp (concat temp
							  (format nil "~A:~%  ~{~A~^,~}~%" (car x) (cdr x)))))
  temp
	 ))
	
使い方の一例
(let ((str "few"))
  (popup-string
	(format nil "~A~%~A"
			  (lookup-edict-by-word str )
			  (lookup-edict-by-word str :e2j-flg t))
	(point))
  (sit-for 2)
  )
	


これを立ち上げて、その他のアプリケーションで単語をコピーすると意味を表示する (05/19/2002)
(defun dic-in-clipboard ()
 (interactive)
  (let ((last-memo)(wait-time 1.5)(str) (mean))
	 (setq last-memo "")
;	 (setq last-memo (get-clipboard-data))
		(message "now dictionary mode..")
	(while t
		(sit-for wait-time)
		(unless (string= last-memo (get-clipboard-data))
		  (setq last-memo (get-clipboard-data))
		  (setq str (string-trim " 	\n " last-memo))
		  (if (and last-memo str)
				(message "now dictonary mode..(~A ~A)" last-memo str))
		  (when (and str
					(> (length str) 0)
						 (< (length str) 25)
						 (not (string-match "\n" str 1)))
			 (setq mean (lookup-edict-by-word str))
			 (unless mean (setq mean (lookup-edict-by-word str :e2j-flg t)))
			 (if mean (popup-string mean(point))
			  (popup-string (format nil "~A:~%  nil" str) (point)))
			 (message "now dictonary mode..(~A)" str)
			 )
		  ))))

ddwin 系で辞書引きを活用する

(ddwinはフリーの辞書引きソフトです。) ddwinを実行する。 (引数を得るところまでできていない。) (suda さんとこからぱくり)
;original product was made by suda.
;arranged by TKI.
(defun ddwin-search (&optional word)
  (interactive)
  (unless word (setq word (get-current-word-or-selection)))
  (if (and word
		   (< 0 (length word))
		   (set-ddwin-parameters)
	  )
	  (launch-application
	   (format nil "~a ~a,~a,~a,~a,~a" *ddwin-path* *ddwin-env-file* *ddwin-double-run-flag* *ddwin-group-name* *ddwin-dic-number* word)))
)

parameter は DDWIN を参照してください。
;ddwin /  DDE
(defun set-ddwin-parameters ()
  (unless (boundp '*ddwin-path*)
	(progn
	  (setq *ddwin-path* "D:/アプリケーション/dictionary/DDwin/ddwin.exe")

;1 環境設定ファイル
	  (setq *ddwin-env-file* "")
;二重起動の制限
#|	0/未指定…制限しない
	1…同じグループは起動しない
	2…複数起動しない|#
	  (setq *ddwin-double-run-flag* "")

;グループ名
	;未指定なら前回使用したグループが開かれる
	  (setq *ddwin-group-name* "")
;辞書番号
;		単独の辞書またはサブグループを指定する1…一つ目の辞書を開く  以下2、3など
;		G1…一つ目のグループに対して串刺し検索  以下G2、G3など
;		未指定…選択状態の辞書で串刺し検索
	  (setq *ddwin-dic-number* "")

;検索キーワード
	)
  )
t)
;--------------------------------------------------


須田さんところから 以下の3っつも(lisp がいっぱいあるところから)見せてもらってきてください。

しょぼしょぼすくりぷと xyzzy | lisp サンプルLibrary集