Нашел способ определения uncode. Если учесть что кодировка либо utf8, либо win1251 то больше и не нужно. Но… Комманда reopen почему-то не отрабатывает =( В отладке вижу что определяет верно, но файл в нужной кодировке не открывает. Есть идеи?
А не подскажете как в python можно определить кодировку? Достаточно просто определить utf8 это или нет. Пробовал chardet — но для всех файлов он показывает просто ascii. Хочу плагинчик для себя написать, чтоб при открытии файлов в windows1251 сам открывал их в правильной кодировке. Бывает откроешь файлик, поправишь что нить и сохранишь. И все. Прощай вся кириллица. Не всегда обращаешь внимание на кодировку, особенно если файл большой, а кириллица где-то в конце.
Попробовал реализовать, но столкнулся с такой проблемой: каретка возвращется на строку только полсле потери фокуса. Причем номер строки подсвечивается правильно, а каретка остается на месте. Попробую dev сборку, может они там это поправили.
Жаль нельзя свой обработчик на событие клика по номеру строки поставить. И управлять непосредственно кареткой нельзя. Чтобы переместить каретку нужно создавать новый region и добавлять его через view.sel().add
Хотя не так уж и много… Я вполне справлялся, когда пользовался Geany. Навигация по коду и быстрое редактирование? А в линуксах с навигацией проблем нет. Консоль наше все. И что вы понимаете под быстрым редактированием? Я не верю что у вас в проекте все в одной куче огромной что там никак не соориентируешся) Мне порой и mcedit хватает.
# -*- coding: utf-8 -*-
import sublime, sublime_plugin
class TrimTrailingWhiteSpaceOnNewLine(sublime_plugin.EventListener):
was_selected = False
selection = [0,0]
last_selection = [0,0]
def on_selection_modified(self, view):
if view.settings().get("trim_trailing_white_space_on_new_line") == True:
self.selection = [view.sel()[0].begin(), view.sel()[0].end()]
is_selected = not view.sel()[0].empty()
edit = view.begin_edit()
# Если сейчас нет выделенного фрагмента, а до этого был - чистим его
if not is_selected and self.was_selected:
trailing_white_space = view.find_all("[\t ]+$")
trailing_white_space.reverse()
for r in trailing_white_space:
if r.begin() >= self.last_selection[0] and r.end() <= self.last_selection[1]:
view.erase(edit, r)
# Если текст не выделен
elif not is_selected:
last_line = view.line(sublime.Region(self.last_selection[0], self.last_selection[1]))
line = view.line(sublime.Region(self.selection[0], self.selection[1]))
# Проверим переместили ли каретку на другую строку
if last_line != line:
r = view.find("[\t ]+$", last_line.begin())
if r != None and r.end() < line.begin():
view.erase(edit, r)
view.end_edit(edit)
self.was_selected = is_selected
self.last_selection = self.selection
Для активации плагина нужно в Preferences User добавить:
Пришла идея реализации вашей хотелки. Чистит строку от пробелов, если переставить каретку на другую строку. Если вставлен фрагмент кода, то тоже чистит его весь.
# -*- coding: utf-8 -*-
import sublime, sublime_plugin
class ExampleOnSelectionModified(sublime_plugin.EventListener):
was_selected = False
selection = [0,0]
last_selection = [0,0]
last_line = 0
def on_selection_modified(self, view):
self.selection = [view.sel()[0].begin(), view.sel()[0].end()]
size = abs(self.selection[0] - self.selection[1])
is_selected = size != 0
# Если сейчас нет выделенного фрагмента, а до этого был - чистим его
if not is_selected and self.was_selected:
trailing_white_space = view.find_all("[\t ]+$")
trailing_white_space.reverse()
edit = view.begin_edit()
for r in trailing_white_space:
if r.begin() >= self.last_selection[0] and r.end() <= self.last_selection[1]:
view.erase(edit, r)
view.end_edit(edit)
# Если текст не выделен
elif not is_selected:
last_line = view.line(sublime.Region(self.last_selection[0], self.last_selection[1]))
line = view.line(sublime.Region(self.selection[0], self.selection[1]))
# Проверим переместили ли каретку на другую строку
if last_line != line:
edit = view.begin_edit()
r = view.find("[\t ]+$", last_line.begin())
# Если нашли пробелы, то убираем
if r:
view.erase(edit, r)
view.end_edit(edit)
self.was_selected = is_selected
self.last_selection = self.selection
Проблема решается так:
Выше писали уже про fallback_encoding, но что-то я не понял для чего оно)
Жаль нельзя свой обработчик на событие клика по номеру строки поставить. И управлять непосредственно кареткой нельзя. Чтобы переместить каретку нужно создавать новый region и добавлять его через view.sel().add
Для активации плагина нужно в Preferences User добавить:
А дальше все как обычно