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プログラムの方を直せばいいかな.