SublimeText のようなマルチカーソル編集をサポートする小さな QScintilla ウィジェットを作成したいと思います。私が知る限り、Scintilla は既に複数のカーソルをサポートしていますが、実際の例は見たことがありません。
では、QScintilla を使用した複数のカーソルの基本を示す小さな例を誰か投稿していただけませんか?
SublimeText のようなマルチカーソル編集をサポートする小さな QScintilla ウィジェットを作成したいと思います。私が知る限り、Scintilla は既に複数のカーソルをサポートしていますが、実際の例は見たことがありません。
では、QScintilla を使用した複数のカーソルの基本を示す小さな例を誰か投稿していただけませんか?
マルチカーソル機能は Scintilla で利用できますが、QScintilla はこの機能の直接ラッパーを提供しません。ただし、メソッドを使用してほとんどすべてを実行できるため、ラッパーを「再実装」できますSendScintilla
。
from PyQt5.Qsci import QsciScintilla
from PyQt5.QtWidgets import QApplication
app = QApplication([])
ed = QsciScintilla()
ed.setText('insert <-\nsome <-\ntext <-\n')
ed.show()
# typing should insert in all selections at the same time
ed.SendScintilla(ed.SCI_SETADDITIONALSELECTIONTYPING, 1)
# do multiple selections
offset = ed.positionFromLineIndex(0, 7) # line-index to offset
ed.SendScintilla(ed.SCI_SETSELECTION, offset, offset)
# using the same offset twice selects no characters, hence a cursor
offset = ed.positionFromLineIndex(1, 5)
ed.SendScintilla(ed.SCI_ADDSELECTION, offset, offset)
offset = ed.positionFromLineIndex(2, 5)
ed.SendScintilla(ed.SCI_ADDSELECTION, offset, offset)
app.exec_()
SendScintilla
独自のラッパーで呼び出しをラップする必要があります。
s はバイト単位で表されるため、QScintilla のQStringsoffset
によって多かれ少なかれ隠されているテキストのエンコーディングに依存することに注意してください。一方、「行インデックス」は文字 (Unicode を使用している場合はコードポイント) で表現されるため、より信頼性が高くなります。