ATOKダイレクトプラグインを連鎖させる(ファイル絶対パス選択プラグイン)

とりあえず、プラグインの連鎖とでも呼べるものを作ってみました。
ATOKに限らず、あるファイルの絶対パスを入力したいときにいちいちエクスプローラなどをたどるのがめんどくさいものです。それをしなくてすむようなプラグインが例です。


ソース

例によってソースを書いておきます。大したことはしていません。

#! /usr/bin/ruby -Ku
require 'dbm'
require 'kconv'

DB_FILE = 'filepath_plugin'

module Atok_plugin
  def run_process(request)
    path = request['composition_string']
    path.sub!(/\/[^\/]+\/\.\.$/, "")
    testpath = path.sub(/^(\w:)$/, "\\1/")
    if FileTest::directory?(testpath)
      result_data = {}
      candidate_array = []
      Dir::foreach(testpath){|f|
        next if f == "."
        filepath = path + "/" + f
        stat = File::stat(filepath)
        candidate_array.push({
                               'hyoki' => filepath.toutf8,
                               'comment' => "#{stat.ftype} #{stat.mtime}",
                               'alternative' => "file://" + filepath.toutf8,
                               'alternative_type' => "url_jump_string" # http:// でないから使えないようだ
                             })
      }
      db = DBM.open(DB_FILE)
      db["default_dir"] = path
      db.close
      result_data['candidate'] = candidate_array
      return result_data
    else
     db = DBM.open(DB_FILE)
      dir = db["default_dir"]
      if dir.nil?
        dir = File::expand_path(".")
      end
      db.close
      return run_process({'composition_string' => dir})
    end
  end
end

プラグインの連鎖

で、このプラグインは何をしたかったかというと、「プラグインの返値をさらにプラグインに入力する」というもののテストです。

たとえば、次のように使います。

プラグインを開く

Ctrl + Insertでプラグインを開きます。ちなみに、デフォルトで開くフォルダは、前回のものを記憶しておりますので、ご安心ください。*1

で、この場合はATOKというフォルダを選択してみましょう。
ここで、Enterを押すと確定します。

さらにもう一度プラグインを開く

しかし、Enterでなく、フォルダ選択の状態でもう一度 Ctrl + Insertします。

すると、不思議なことに(というほどではありませんが、)ATOKフォルダをたどって下の階層のフォルダ一覧が出てくるのです。

ちなみに、上の階層に移動したい場合は".."となっているものを選んでください。

何でもできるぞー

プラグインが返してきたものをプラグインに再び入力するというのができるのを確かめることができたので、これでまさに何でもありですね。メニュー選択とかしたいな。メニューはXMLで定義しておけばいいですよね。

ということで、これから出かけます。
続きはまた夜にでも。

*1:ただし、ATOKのフォルダにファイルをひとつ設置しますので、要らなくなったら消してください。