2010年1月23日土曜日

keyhac 定型文や日時の貼り付け機能

keyhac の 1.12 をリリースした。

定型文や日時などを貼り付ける機能を追加した。




以下のように、 config.py に記述することで、定型文を追加することが可能だ。
クリップボード履歴リストのウインドウで、カーソルキーの ← →を押すことで、
keymap.cblisters に与えたリスト機能が切り替わるようになっている。

        # 定型文
        fixed_items = [
            ( u"name@server.net",     u"name@server.net" ),
            ( u"住所",                u"〒東京都品川区123-456" ),
            ( u"電話番号",            u"03-4567-8901" ),
            ( u"config.pyを編集",     keymap.command_EditConfig ),
            ( u"config.pyをリロード", keymap.command_ReloadConfig ),
        ]
       
        # 日時をペーストする機能
        def dateAndTime(fmt):
            def _dateAndTime():
                return datetime.datetime.now().strftime(fmt)
            return _dateAndTime   

        # 日時
        date_and_time_items = [
            ( u"YYYY/MM/DD HH:MM:SS",   dateAndTime("%Y/%m/%d %H:%M:%S") ),
            ( u"YYYY/MM/DD",            dateAndTime("%Y/%m/%d") ),
            ( u"HH:MM:SS",              dateAndTime("%H:%M:%S") ),
            ( u"YYYYMMDD_HHMMSS",       dateAndTime("%Y%m%d_%H%M%S") ),
            ( u"YYYYMMDD",              dateAndTime("%Y%m%d") ),
            ( u"HHMMSS",                dateAndTime("%H%M%S") ),
        ]

        keymap.cblisters += [
            ( u"定型文",         cblister_FixedPhrase(fixed_items) ),
            ( u"日時",           cblister_FixedPhrase(date_and_time_items) ),
            ]


ポイントは、決まった文字列だけでなく、呼び出し可能なオブジェクトを渡すことが出来るというところだ。
関数からペーストする瞬間の日時をテキストとして返すと、その文字列がペーストされる。

5 件のコメント:

  1. どこに書いて良いのか分からなかったので、関連エントリのコメントに書かせていただきます。
    keyhac_keymap.py の624行目は main_window.editor ではなく self.editor ではないでしょうか?

    あと、自分でビルドしたものを起動してみたんですが起動はできるもののうまく動いてくれません。メインウィンドウのログをみるかぎり、どのキーを押しても未割当てな仮想キーコードが押されたことになってしまっているようです。解決へのヒントやコンパイルする際に注意すべきこと等ありましたらご教示いただきたいです。

    返信削除
  2. おっしゃる通り、self.editor ですね。
    気づきませんでした。

    ご自身でビルドされるケースについてですが、
    Cygwinで、exeを作る前に、まずは、make debug として、
    動作を確認します。

    この時点で、期待通りに動かないでしょうか?

    返信削除
  3. 返信有難うございます。
    make debugで動かしてみたところきちんと動作しているようです。
    実行ファイルにするとデバッグ時とは違う挙動をしてしまいます・・・。

    返信削除
  4. 1.13を作っているときに、こちらでも起きました。
    py2exe の、bundle_files を 2 から 3 に変更すると、
    ちゃんと動くようでした。

    1.13 からは、pyautocore.pyd というモジュールを
    exeに含めないようにしたので、これで解決したかもしれません。
    もしよかったら、お試しください。

    返信削除
  5. 最新のソースで試してみたところ、きちんと動作しました。
    ありがとうございました!

    返信削除