Emacsでエキサイト翻訳を利用するのをちょっと修正した.
元エントリ:とりあえず暇だったし何となく始めたブログ - Emacsでエキサイト翻訳を利用する.
作ったはいいけど, バッククォートがあったり,
二重引用符でくくられてたりするとまずいことになってたから,
それらに対する対策をした.
バッククォートは, バックスラッシュでエスケープしようとしたけど, どうにも上手くstring-match, replace-matchで出きなかったから,
面倒になって, シングルクォートに置き換えるようにした.
こんな感じになった.
これを利用するには, 元記事にある, Rubyプログラムが必要.
(defun excite-ja () "エキサイト翻訳 日本語→英語" (interactive) (if mark-active (progn (translate-by-excite "-ja" (buffer-substring-no-properties (region-beginning) (region-end))) (setq mark-active nil)) ;; ミニバッファから文字列を読み込んでそれを翻訳する (translate-by-excite "-ja" (read-string "日本語→英語翻訳 : ")))) (defun excite-en () "エキサイト翻訳 英語→日本語" (interactive) (if mark-active (progn (translate-by-excite "-en" (buffer-substring-no-properties (region-beginning) (region-end))) (setq mark-active nil)) ;; ミニバッファから文字列を読み込んでそれを翻訳する (translate-by-excite "-en" (read-string "英語→日本語翻訳 : ")))) ;; Rubyのスクリプトを使用して, 実際に翻訳する (defun translate-by-excite (type string) (get-buffer-create "*translated*") (display-buffer "*translated*") ; (shell-command (concat "ruby ~/lib/translate.rb " type " " (prin1-to-string string)) "*translated*")) (shell-command (concat "ruby ~/lib/translate.rb " type " " (escape-grave string)) "*translated*")) (defun escape-grave (string) "バッククォートをクォートに変換する." (while (string-match "`" string) (setf string (replace-match "'" nil nil string))) (prin1-to-string string))
こいつでもまだ問題がある.
日本語→英語した結果, 翻訳結果に二重引用符とかがあると, "とかが入ってしまう.
置き換えればいいんだろうけど, ちょっと見づらいだけだからと放置してしまった.
これを修正する場合は, Rubyプログラムの方を直せばいいかな.