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

По темі:


Sublime Text 2 FAQSublime Text 2 FAQ

Приклад реальний, з інженерної практики. Переклад виділеного числа в тексті з десяткової в шістнадцяткову систему числення. Фича повинна бути доступна з головного і контекстного меню а так само за поєднанням клавіш 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 +" \ "is not 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-men u. Я порахував, що цей пункт буде найдоречніше в меню 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/ - Стаття на ту ж тему англійською мовою