5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AutoHotkeyに実装したアレコレ ~括弧自動入力編~

Posted at

但し書き

完全なオレオレ環境です。
クリップボード周りでトチっていそうだったら、Sleepを片っ端から100とか200とかにしてみると改善するかも。

やっていること

「選択した文字列をクリップボードにコピーし、その前後を引数で挟んで返す」関数を用意した。
クリップボードへの登録はCtrl+Cで行う。
Ctrl+C後にクリップボードが0文字だったら(=無選択だったら)単に引数を返してカーソルをひとつ前に送る
また、Ctrl+C後にクリップボード内に改行が入っていたら、無選択と同様の処理を行う。

WrapBracket(x,y){
  Backup := ClipboardAll
  Clipboard =
  Send, ^c
  Sleep,50
  IfInString, Clipboard, `r`n
  {
    Clipboard = 
    ClipStatus := 0 ;からっぽのカッコが送られるので0
  }Else if (Clipboard = ""){
    ClipStatus := 0
  }else{
    ClipStatus := 1 ;中身があるので1
    #if
  }
;  StringReplace, Clipboard, Clipboard, `r`n, , All
  Sleep,50
  Clipboard = %x%%Clipboard%%y%
  Sleep, 50
  Send,^v
  Sleep,50
  if (ClipStatus = 0){
    send,{Left}
  }Else{
    #If
  }
  Clipboard := Backup
  ClipStatus = 
}

呼び出しはこうする。

sc07B & k::
WrapBracket("「","」")
Return

どうしてこんな処理をしているの?

AutoHotkeyの欠点のひとつとして、クリップボード周りの処理が遅い・不確実というのがある。
選択範囲を取得するのにクリップボードが不可欠だが、そのクリップボードを編集するためにリソースを食うのだ。

また、AutoHotkeyは日本語IMEをうまく扱えない。
IMEがONの状態で関数を発動させた場合、直接送り出した文字列は「日本語IMEをONにした状態で入力した」ものとなる。

OutputContents = autoHotkey

sc07B & w::
Send,%OutputContents%
Return

この状態の時、出力結果はこのようになる。

IME OFF IME ON
autoHotkey あうとHotkey

AutoHotkeyにおける文字列出力は、究極的にはプログラムくんがキーボードを叩いているだけのことだ。
IMEをONにした状態で叩かせれば、当然日本語が入力される。

ホットキーを入力した際にIMEをOFFにするという発想もある。
実際、それを実現してくれる関数も公開されている
関数の機能を適切に用いれば、ホットキー処理終了後にIMEの状態を復元することも可能だ。

だが、結局はクリップボードの処理速度がボトルネックになる。
前にコピーした文字列がテキストファイルひとつ分だったとしたら、それがひたすらに垂れ流され続ける(実話)。
それがSkypeのチャットだったりして、クリップボードに改行が入ってなどいたりした日には(実話)。
あまつさえチャットの設定を「Enterキーで送信」などにしていた日には(実話)!

目も当てられない。
だから、速度を妥協してでも変数を触るという処理にしているのだ。

また、環境によってはIMEの状態を復元する処理がAutoHotkeyによる入力途中に発生する危険性がある。
文字列をそのまま送信しているだけなので、入力した文字列がそのまま変換候補に出てくるだけだ。
しかし、これを他の機能や入力と連携させるとなると……。

誰か、いい方法を教えて(懇願)

今後の展望

この記事は「括弧自動入力編」である。
当然、後方にはいろいろな記事が控えている。

電話番号や日付のフォーマット別自動入力だとか、Windowsの機能と絡めた『ボスが来た』機能実装のアレコレだとか。
我ながらニッチだと思うのは、小文字←→大文字変換スキームだ。
AutoHotkeyはなかなか便利な機能があるので飽きない。

興味が湧いたという物好きな人はここからAutoHotkeyを落としてインストールしよう。
共に世界の支配構造を打ち砕こうではないか。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?