TIL

Today I Learned. 知ったこと、学んだことを書いていく

カーソルがある行のインデックス番号を取得 - Python

python-prompt-toolkitでカーソル行のインデックス番号を取得したいとき

prompt_toolkit.document.Document.cursor_position_row

カーソルがある行のインデックス番号が取得できる

0から数える

from prompt_toolkit.application import Application
from prompt_toolkit.key_binding import KeyBindings
from prompt_toolkit.layout.containers import Window
from prompt_toolkit.layout.controls import BufferControl
from prompt_toolkit.layout.layout import Layout
from prompt_toolkit.buffer import Buffer
from prompt_toolkit.document import Document

from logging import getLogger, config
config.fileConfig("logger.conf")
logger = getLogger(__name__)


text = '\n'.join([str(i) for i in range(100)])

body = Window(BufferControl(Buffer(document=Document(text))), cursorline=True)

# キーバインディング
kb = KeyBindings()


@kb.add('q')
def _(event):
    event.app.exit()


@kb.add('o')
def _(event):
    # ここ!!!!
    logger.debug(event.current_buffer.document.cursor_position_row)


app = Application(
        layout=Layout(body),
        key_bindings=kb,
        full_screen=True)

app.run()

Enterを押すと、インデックス番号が取得できる

logger.confは以下のようになっている

[loggers]
keys=root

[handlers]
keys=fileHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=fileHandler

[handler_fileHandler]
class=FileHandler
level=DEBUG
; ハンドラで使用するフォーマッタを指定
formatter=simpleFormatter
; FileHandlerのコンストラクタへの引数
args=("log.log", "a+")

[formatter_simpleFormatter]
format=%(asctime)s:%(levelname)s %(message)s
; 時間の表示形式を設定
datefmt=%Y-%m-%d %H:%M:%S