Пишем простой плагин для Sublime Text 2

Пример реальный, из инженерной практики. Перевод выделенного числа в тексте из десятичной в шестнадцатеричную систему счисления. Фича должна быть доступна из главного и контекстного меню а так же по сочетанию клавиш Ctrl+Shift+H. Результат выполнения: число в хексе записанное с использованием цифр и букв верхнего регистра без каких-либо ведущих символов вроде «0x». Если выделенный текст не является числом — ругаемся об этом с статусбаре. Обращаю внимание, что пример намерено упрощен до максимума, чтоб за деталями не потерялась суть: простота создания плагинов для Sublime.
Пишем плагин
Жмём Tools -> New Plugin... и видим заготовку. Меняем название класса и пишем функционал в методе run. У меня получилось следующее:
import sublime, sublime_plugin
class DecToHexCommand(sublime_plugin.TextCommand):
MAX_STR_LEN = 10
def run(self, edit):
v = self.view
# Получаем значение первого выделенного блока
dec = v.substr(v.sel()[0])
# Заменяем десятичное число шестнадцатеричным или выводим сообщение об ошибке
if dec.isdigit():
v.replace(edit, v.sel()[0], hex(int(dec))[2:].upper())
else:
# Обрезаем слишком длинные строки, которые не поместятся в статусбар
if len(dec) > self.MAX_STR_LEN:
logMsg = dec[0:self.MAX_STR_LEN]+ "..."
else:
logMsg = dec
sublime.status_message("\"" + logMsg + "\" isn't a decimal number!")
Сохраняем туда куда предложит редактор с именем dec_to_hex.py
Добавляем пункты меню. Прописываем клавиатурное сочетание.
Начнем с «горячих клавиш».
В меню жмём Preferences -> Key Bindings-User. Открывается файл с настройками в формате JSON. Скорее всего пустой. Добавляем в него строчку.
{ "keys": ["ctrl+shift+h"], "command": "dec_to_hex" }
Сохраняем. Всё. Впринципе уже можно пользоваться. Если не работает стоит посмотреть что по этому поводу написано в консольке (Ctrl+`).
Для того чтоб добавить пункт в контекстное меню создаём файл Context.sublime-menu следующего содержания:
[
{
"command": "dec_to_hex"
}
]
Думаю, что как и в предыдущем случае всё понятно без комментариев.
Сохраняем в тот же каталог, в который сохранили плагин.
Т.е. %USERPROFILE%\AppData\Roaming\Sublime Text 2\Packages\User, для пользователей Windows. Там же создаём файл Main.sublime-menu. Я посчитал, что этот пункт будет уместнее всего в меню Edit, поэтому в файле Main.sublime-menu написал следующее:
[
{
"id": "edit",
"children":
[
{ "command": "dec_to_hex" }
]
}
]
Проверяем. В главном и контекстом меню должны появиться пункты с названием Dec To Hex
Ссылки:
www.sublimetext.com/docs/api-reference — Plugin API Reference
www.sublimetext.com/download — Download
www.sublimetext.com/dev — Dev Builds. Использую dev версии, багов пока не ловил.
net.tutsplus.com/tutorials/python-tutorials/how-to-create-a-sublime-text-2-plugin/ — Статья на ту же тему на английском языке
Created/Updated: 25.05.2018
|