LauncherEX で BackSpace で補完するときカーソルより後ろの『;』以降が消えないようにする
以下の環境で動作確認しました。
- Windows XP Home Edition SP2
- Python 2.5.1
- CraftLaunchEx 0.991
- LauncherEX 0.0.11
LauncherEX で OPTION_EX_ABBREV_ON_BS を有効にしているとき、BackSpace でも補完が実行されますが、カーソル位置より後ろに『;』があっても、それ以降が消されてしまいます。
これを、CraftLaunch の『&SubCommand;&Backspace,&PopList』に似た挙動にします。
ついでに、コマンド入力エリアが空で、補完候補リストが表示されていないときに、OPTION_EX_SWAP_CTRL_SPACE によるキーバインドの入れ替えが効いていなかったのも修正しました。
クラス LauncherModeEX のメソッド OnKeyDown を置き換えます。
コード
config.py などに記述します。
## LauncherEX import clmode_lex # `from clconst import *' より前に記述する from clapi import * from clconst import * def _LauncherModeEXOnKeyDown(self, event): from clmode_lex import OPTION_EX_SWAP_CTRL_SPACE, OPTION_EX_ABBREV_ON_BS # フックの実行 err = clmode_lex.RunHook(clmode_lex.lex_hook_on_key, event) if err: raise err if event.skip: return # Swap Ctrl+Space to Space if (GetOption(OPTION_EX_SWAP_CTRL_SPACE) and (event.vk == VK_SPACE)): if event.mod == 0: s = GetValue() pos = GetSelection() SetValue(s[:pos[0]] + ' ' + s[pos[1]:]) SetSelection(*((pos[0]+1, ) * 2)) event.Skip() return if event.mod == MODKEY_CTRL: import clcore import clwindow if clcore.List_IsShown(): clwindow.list.SelNext(True) else: clwindow.edit.Abbrev(GetValue()) event.Skip() return # 独自の実装のため、LauncherMode は呼ばない import clmode clmode.BaseMode.OnKeyDown(self, event) if (GetOption(OPTION_EX_ABBREV_ON_BS) and (event.vk == VK_BACK) and (event.mod == 0)): # カーソル位置と無関係に (min, max) の模様 @0.991 (start, end) = GetSelection() if not start == end == 0: s = GetValue() if start == end: start -= 1 s = s[:start] + s[end:] end -= 1 else: s = s[:start] + s[end:] end = start SetValue(s) SetSelection(start, end) import clwindow clwindow.edit.Abbrev(None) #clwindow.edit.last_action = 1 event.Skip() clmode_lex.clLauncherEX.LauncherModeEX.OnKeyDown = _LauncherModeEXOnKeyDown