選択領域がない場合のコピー、カット、ペーストの動作
今まで利用していたテキストエディタの仕様
[イ] コピー時の仕様
(a) 選択領域がある場合、その部分をコピーする
(b) 選択領域がない場合、カーソル行(改行を含む)をコピーする
[ロ] カット時の仕様
(a) 選択領域がある場合、その部分をカットする
(b) 選択領域がない場合、カーソル行(改行を含む)をカットする
[ハ] ペースト時の仕様
(a) [イ]-(b)、[ロ]-(b)でコピー(カット)された内容であれば、
(1) 選択領域がある場合は、選択解除(削除ではない)
(2) カーソル位置の上の行にペースト
(2) カーソルは行頭(=ペーストした内容の直後)へ移動
(c) それ(a)以外の内容であれば、
(1) 選択領域がある場合は、その内容を削除
(2) カーソル位置に挿入
で、コピー[イ]とカット[ロ]時については、LREditに組み込んでもらったんだけど、ペースト時[ハ]の仕様は「まぁいっか」とか思って要望を出してなかった。けど、やっぱり指が覚えているらしく、死にそうになったので、実装してみた。
■ キーカスタマイズで実装
■ ソースコードの書換えで実現(lredit_textedit.py)
これもお願いしようかなぁ。
[イ] コピー時の仕様
(a) 選択領域がある場合、その部分をコピーする
(b) 選択領域がない場合、カーソル行(改行を含む)をコピーする
[ロ] カット時の仕様
(a) 選択領域がある場合、その部分をカットする
(b) 選択領域がない場合、カーソル行(改行を含む)をカットする
[ハ] ペースト時の仕様
(a) [イ]-(b)、[ロ]-(b)でコピー(カット)された内容であれば、
(1) 選択領域がある場合は、選択解除(削除ではない)
(2) カーソル位置の上の行にペースト
(2) カーソルは行頭(=ペーストした内容の直後)へ移動
(c) それ(a)以外の内容であれば、
(1) 選択領域がある場合は、その内容を削除
(2) カーソル位置に挿入
で、コピー[イ]とカット[ロ]時については、LREditに組み込んでもらったんだけど、ペースト時[ハ]の仕様は「まぁいっか」とか思って要望を出してなかった。けど、やっぱり指が覚えているらしく、死にそうになったので、実装してみた。
■ キーカスタマイズで実装
def command_Copy(info):
global lastSeq
edit = window.activeEditPane().edit
if edit.selection.direction==0:
edit.command_Copy(info)
lastSeq = ctypes.windll.user32.GetClipboardSequenceNumber()
else:
edit.command_Copy(info)
lastSeq = 0
def command_Cut(info):
global lastSeq
edit = window.activeEditPane().edit
if edit.selection.direction==0:
edit.command_Cut(info)
lastSeq = ctypes.windll.user32.GetClipboardSequenceNumber()
else:
edit.command_Cut(info)
lastSeq = 0
def command_Paste(info):
global lastSeq
edit = window.activeEditPane().edit
curSeq = ctypes.windll.user32.GetClipboardSequenceNumber()
if (lastSeq == curSeq):
window.activeEditPane().edit.command_CursorLineBegin(info)
window.activeEditPane().edit.command_Paste(info)
window.keymap[KeyEvent(VK_C, MODKEY_CTRL)] = command_Copy
window.keymap[KeyEvent(VK_X, MODKEY_CTRL)] = command_Cut
window.keymap[KeyEvent(VK_V, MODKEY_CTRL)] = command_Paste
■ ソースコードの書換えで実現(lredit_textedit.py)
def command_Copy( self, info ):
global LastClipSeq
if self.selection.direction==0:
if self.doc.mode.copy_line_if_not_selected:
left = self.selection.cursor().lineBegin()
right = left.lineEnd().right()
text = self.getText( left, right )
ckit.setClipboardText(text)
LastClipSeq = ctypes.windll.user32.GetClipboardSequenceNumber()
else:
text = self.getText( self.selection.left(), self.selection.right() )
ckit.setClipboardText(text)
LastClipSeq = 0
if self.doc.mode.cancel_selection_on_copy:
cursor = self.selection.cursor()
self.setCursor(cursor)
def command_Cut( self, info ):
global LastClipSeq
if self.selection.direction==0:
if self.doc.mode.copy_line_if_not_selected:
left = self.selection.cursor().lineBegin()
right = left.lineEnd().right()
text = self.getText( left, right )
ckit.setClipboardText(text)
self.modifyText( right, left, text=u"" )
LastClipSeq = ctypes.windll.user32.GetClipboardSequenceNumber()
else:
text = self.getText( self.selection.left(), self.selection.right() )
ckit.setClipboardText(text)
LastClipSeq = 0
self.modifyText( text = u"" )
def command_Paste( self, info ):
global LastClipSeq
curSeq = ctypes.windll.user32.GetClipboardSequenceNumber()
if (LastClipSeq == curSeq):
self.command_CursorLineBegin(info)
text = ckit.getClipboardText()
self.modifyText( text = text )
これもお願いしようかなぁ。
この記事へのコメント