Как стать автором
Обновить
11
0

Пользователь

Отправить сообщение
Вопросы снимаются)
Проблема решается так:
"fallback_encoding": "Cyrillic (Windows 1251)",

Выше писали уже про fallback_encoding, но что-то я не понял для чего оно)
Нашел способ определения uncode. Если учесть что кодировка либо utf8, либо win1251 то больше и не нужно. Но… Комманда reopen почему-то не отрабатывает =( В отладке вижу что определяет верно, но файл в нужной кодировке не открывает. Есть идеи?
# -*- coding: utf-8 -*-
import sublime, sublime_plugin

class AutoEncoding(sublime_plugin.EventListener):
	def on_load(self, view):
		buf = view.substr(sublime.Region(0, view.size()))
		print view.file_name()
		try:
			unicode(buf)
		except Exception, e:
			print 'reopen'
			print view.run_command("reopen", {'encoding': 'Cyrillic (Windows 1251)'})
		else:
			print 'unicode'
А не подскажете как в python можно определить кодировку? Достаточно просто определить utf8 это или нет. Пробовал chardet — но для всех файлов он показывает просто ascii. Хочу плагинчик для себя написать, чтоб при открытии файлов в windows1251 сам открывал их в правильной кодировке. Бывает откроешь файлик, поправишь что нить и сохранишь. И все. Прощай вся кириллица. Не всегда обращаешь внимание на кодировку, особенно если файл большой, а кириллица где-то в конце.
Попробовал реализовать, но столкнулся с такой проблемой: каретка возвращется на строку только полсле потери фокуса. Причем номер строки подсвечивается правильно, а каретка остается на месте. Попробую dev сборку, может они там это поправили.
Жаль нельзя свой обработчик на событие клика по номеру строки поставить. И управлять непосредственно кареткой нельзя. Чтобы переместить каретку нужно создавать новый region и добавлять его через view.sel().add
А что за проект, если не секрет, если соизмеримо с сорцами Анройда?
Хотя не так уж и много… Я вполне справлялся, когда пользовался Geany. Навигация по коду и быстрое редактирование? А в линуксах с навигацией проблем нет. Консоль наше все. И что вы понимаете под быстрым редактированием? Я не верю что у вас в проекте все в одной куче огромной что там никак не соориентируешся) Мне порой и mcedit хватает.
deadlink@deadlink-pc:~/dev/android/cyanogen_mod_racer$ find . -type f -name '*.c' | wc -l
12701
deadlink@deadlink-pc:~/dev/android/cyanogen_mod_racer$ find . -type f -name '*.cpp' | wc -l
7477
deadlink@deadlink-pc:~/dev/android/cyanogen_mod_racer$ find . -type f -name '*.java' | wc -l
17146
У Вас сорцы убунты в свн? :D
Не обещаю, но думаю что можно. Попробую на досуге
Исправил эту проблему и немного улучшил код

# -*- 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 добавить:

"trim_trailing_white_space_on_new_line": true
Это можно решить, например проверив есть ли в строке что-то кроме отступов и если нет, то не чистить. Позже выложу исправленную версию
Пришла идея реализации вашей хотелки. Чистит строку от пробелов, если переставить каретку на другую строку. Если вставлен фрагмент кода, то тоже чистит его весь.

# -*- 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
Какой пример нужен? Обработчик события делаем так:
import sublime, sublime_plugin

class ExampleOnSelectionModified(sublime_plugin.EventListener):
	def on_selection_modified(self, view):
		pass

А дальше все как обычно
Под какой ОС у тебя проблема? Если linux, то запусти из консоли и смотри вывод ошибок.
Попробуй CSStidy
Не знаю как оно в Visual Studio, но мне хватает ctrl+p @ и ctrl+p #
Вот так сразу не приходит идеи реализации
Не встречал таких, честно.
Есть событие onSelectionModified, но если повесить на него, тогда пробелы в конце строк будут убираться когда просто текст выделяешь.
Я не велосипедил, я взял этот самый исходник и переделал в плагин, который можно вызывать не по событию сохранения файла, а по нажатию хоткея
1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность