Sublime Text 3 - Добавить панель в нижней части моего текущего макета - PullRequest
0 голосов
/ 30 октября 2018

Я хотел создать простой плагин для ST3, который добавляет панель внизу моего экрана с помощью простого сочетания клавиш. Я знаю, что Origami и TBH будут использовать его для подобных задач, но я делаю это больше, чтобы почувствовать вкус создания плагинов ST3.

ПРИМЕЧАНИЕ: я не хочу менять макет. Что бы там ни было, добавьте панель внизу.

Так, например, если мои текущие вкладки экрана расположены так:

----------
| tab 1  |
|        |
----------
| tab 2  |
|        |
----------

Затем я хочу добавить вкладку 3, чтобы она располагалась так:

----------
| tab 1  |
|        |
----------
| tab 2  |
----------
| tab 3  |
----------

Еще несколько примеров:

-----------------        ------------------
| tab 1 | tab 2 |        | tab 1  | tab 2 |
|       |       |        |        |       |
|       |       |  --- > ------------------ 
|       |       |        |      tab 3     |
-----------------        ------------------

-----------------        ------------------
| tab 1 | tab 2 |        | tab 1  | tab 2 |
|       |       |        |        |       |
-----------------  --- > ------------------
| tab 3 | tab 4 |        | tab 3  | tab 4 |
|       |       |        ------------------
-----------------        |    tab 5       |
                         ------------------

Вот код, который у меня есть:

import sublime
import sublime_plugin
import subprocess

class CreateBottomTabCommand(sublime_plugin.WindowCommand):
    def run(self):
        layout = self.window.get_layout()
        newLayout = calculate_new_layout_with_extra_pannel_at_bottom() # How do I do this?
        self.window.run_command("set_layout", newLayout)

1 Ответ

0 голосов
/ 30 октября 2018

Вызов window.get_layout() возвращает объект, подобный этому:

{
    "cells": [[0,0,1,1],[1,0,2,2]],
    "cols": [0.0, 0.5, 1],
    "rows", [0.0, 1.0]
}

Атрибут cells содержит список списков, где каждый внутренний список является координатой этой ячейки.

cols содержит относительную позицию Y от (0 - 1) каждого места, чтобы разделить экран по вертикали на

rows аналогично cols, но вместо горизонтальных разрывов

Для краткости приведу ссылку на документы для получения дополнительной информации.

Итак, теперь мы хотим вставить дополнительный ряд в середине последнего ряда и 1 (внизу экрана):

terminalPos = round(1 - ((1 - layout["rows"][-2]) / 2), 1)

Мы также хотим указать его координаты:

terminalCoords = [0, len(layout["rows"]) - 1 , len(layout["cols"]) - 1, len(layout["rows"])]

Тогда вы можете поместить их в правильное положение объекта, и Presto! Вы сделали!

Вот полный код:

import sublime
import sublime_plugin
import subprocess

class CreateTerminalCommand(sublime_plugin.WindowCommand):
    def run(self):
        layout = self.window.get_layout()

        terminalPos = round(1 - ((1 - layout["rows"][-2]) / 2), 1)
        terminalCoords = [0, len(layout["rows"]) - 1 , len(layout["cols"]) - 1, len(layout["rows"])]

        newLayout = layout
        newLayout["rows"].insert(-1, terminalPos)
        newLayout["cells"].append(terminalCoords)

        self.window.run_command("set_layout", newLayout)
...