chinese-word-at-point 20150618.1838(in MELPA)
Add `chinese-word' thing to `thing-at-point'

概要

chinese-word-at-point.el は、元々中国語に対応した
word-at-point を提供するものですが、
分かち書きをするコマンドを日本語のものに差し替えることで
日本語でもそれなりに(←そこ重要)使えます。

本設定では日本語形態素解析ツールの 茶筌 を使っています。

ただ、(word-at-point)の範囲でしか探索しないので、
漢字とかなが交じった単語の対応が弱いです。

中国語の場合はすべて漢字なのでそれで十分ですが、
日本語は漢字かな混じり文なのでsentenceから探索しないと
正確には動作しません。

word→sentenceに書き換え、
かつ「日本語文字列」の判定を厳密にすれば
完全に日本語に対応できるでしょうけど
ぼぼ全面的な再定義になってしまいます。

とりあえずproof-of-concept的な意味で記事にしておきます。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてchinese-word-at-pointを使う方は
以下のコマンドを実行します。

M-x package-install chinese-word-at-point

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name chinese-word-at-point

設定 150118063159.chinese-word.el(以下のコードと同一)

(require 'chinese-word-at-point)
;;; 茶筌で分かち書きをする
(setq chinese-word-split-command "echo %s | chasen -F '%%m '")
;;; ひらがな・カタカナを加えるように修正
(defun chinese-word--cjk-characters-p (char)
  "Return t if CHAR is a CJK character.

For CJK characters range in Unicode,
see URL `http://stackoverflow.com/questions/1366068/whats-the-complete-range-for-chinese-characters-in-unicode/'"
  (or (<= #x4E00 char #x9FCC)
      (<= #x3040 char #x309F)           ;hiragana
      (<= #x30A0 char #x30FF)           ;katakana
      (= #x3005 char)                   ;々
      (<= #x31F0 char #x31FF)           ;small katakana
      (<= #x3400 char  #x4DB5)
      (<= #x20000 char  #x2A6D6)
      (<= #x2A700 char  #x2B734)
      (<= #x2B740 char  #x2B81D)))

;;; 日本語に適用しているのにchineseというのはよくないのでjapaneseも定義
;;; (thing-at-point 'japanese-word)
;;; (thing-at-point 'japanese-or-other-word)
;;; が使えるようになる
(put 'japanese-word 'bounds-of-thing-at-point 'chinese-word-at-point-bounds)
(put 'japanese-or-other-word 'bounds-of-thing-at-point
     'chinese-or-other-word-at-point-bounds)
;;; テストコマンド
(defun show-word-at-point-ja ()
  "現在の単語をミニバッファに表示する(日本語対応)"
  (interactive)
  (message "%s" (thing-at-point 'japanese-or-other-word)))
;;; Emacsは楽しい システムのメンテナンス 研究・情報収集

実行方法

$ wget http://rubikitch.com/f/150118063159.chinese-word.el
$ emacs -Q -f package-initialize -l 150118063159.chinese-word.el


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。