prompt-toolkit: динамически добавлять и удалять буферы для VSplit или HSplit?

Можно ли добавлять и удалять буферы? Поэтому я хочу изменить полноэкранный макет.

Например, я хочу иметь такой макет:

layout = VSplit([
Window(content=BufferControl(buffer_name=DEFAULT_BUFFER)),
Window(width=D.exact(1),
       content=FillControl('|', token=Token.Line)),
Window(content=BufferControl(buffer_name='RESULT')),
])

Теперь я хочу добавить еще один буфер через некоторое время, чтобы макет был таким...

layout = VSplit([
Window(content=BufferControl(buffer_name=DEFAULT_BUFFER)),
Window(width=D.exact(1),
       content=FillControl('|', token=Token.Line)),
Window(content=BufferControl(buffer_name='RESULT')),
Window(content=BufferControl(buffer_name='NEW_BUFFER')),
])

Есть ли какая-нибудь функция layout.addbuffer(...) или что-то вроде этого?

1 ответ

Это можно сделать, полностью заменив layout атрибут Application, Так что-то вроде:

class MyApplication(Application):

    def __init__(self):
        # Initialise with the first layout
        super(MyApplication, self).__init__(
            layout=VSplit([
                Window(content=BufferControl(buffer_name=DEFAULT_BUFFER)),
                Window(width=D.exact(1),
                       content=FillControl('|', token=Token.Line)),
                Window(content=BufferControl(buffer_name='RESULT')),
            ]),
        )

    def add_buffer(self):
        # Update to use a new layout
        self.layout = VSplit([
            Window(content=BufferControl(buffer_name=DEFAULT_BUFFER)),
            Window(width=D.exact(1),
                   content=FillControl('|', token=Token.Line)),
            Window(content=BufferControl(buffer_name='RESULT')),
            Window(content=BufferControl(buffer_name='NEW_BUFFER')),
        ])
Другие вопросы по тегам