Friday, February 10, 2012

Отдам плагин в хорошие руки

Есть такой замечательный редактор - Sublime Text 2. Даже несмотря на мою любовь к Notepad++ могу смело заявить: "Sublime лучше!". Кто не верит - проверяйте сами.
    Но речь не о самом редакторе. Я написал для него небольшой и никому не нужный плагин. Написал сам, используя все свои познания в Python'е и написании плагинов для Sublime. Плагин нужен для одной простой вещи: узнать кто написал строчку под курсором. Узнает он это из системы контроля версий Git. В целом даже работает.
    Так как выкидывать его жалко (я ж время потратил) а развивать его не планирую (он же никому не нужен!), то решил код опубликовать тут. Ну и сам файлик приложил.
    По вопросам копирайта: данным постом подтверждаю, что не претендую и в дальнейшем упоминаться автором приведенного ниже кода, не потребую никаких отчислений и прочей фигни (но если вы сможете заработать на этом, я вас, кем бы вы ни были, скорее всего прокляну. Шутка).


Вот код (подсвечено с помощью этого):
Copy Source | Copy HTML
  1. import sublime, sublime_plugin
  2. import os, re
  3. class GitWho(sublime_plugin.TextCommand):
  4.     def run(self, edit):
  5.         v = self.view
  6.         file_name = v.file_name()
  7.         line, col = v.rowcol(v.sel()[ 0].begin())
  8.         line += 1
  9.         cwd = os.getcwd() # save current work directory...
  10.         os.chdir(os.path.dirname(file_name)) # ... to use git ...
  11.         output = os.popen("git blame -L " + str(line) + "," + str(line) + " " + file_name).read()
  12.         os.chdir(cwd) # ... and reset it back
  13.         tmp = re.search('\((.*) (\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2} [+-]\d{4})', output)
  14.         if tmp:
  15.             author, date, time = tmp.group(1), tmp.group(2), tmp.group(3)
  16.             sublime.status_message('Changed by ' + author + ' on ' + date + ' at ' + time)
  17.         else:
  18.             sublime.status_message('Cannot blame this file')


Возможные проблемы в плагине:
  • неправильный номер строки: в редакторе они нумеруются с 1, а в Git'е? (это надо проверить, а мне уже не хочется)
Предлагаемые улучшения:
  • поддержка всех широко распространненых систем контроля версий
  • определения авторства не только строки под курсором, но и выделенного блока

Чтобы попробовать плагин нужно прочитать вот эту статью, чтобы научиться :)