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

Комментарии 32

А как быть с
int    a;
char  *b;
char **c;
?

Смысл в том, что в отличие от «красивостей» в примерах, в некоторых проектах (GNOME) принято писать как в моем примере.
Ну если глобально задачу ставить, то можно найти еще 100500 случаев где оно не сработает.
Проект с открытым исходным кодом, можно доработать под конкретные случаи, если уж прямо так. Например для вашего случая можно ввести спецсимвол, который выравнивал бы вот так как у вас в примере.
Да собственно я давно нашёл решение для себя, оно попроще:) Смысл в том, что многие современные IDE умеют по хоткею запустить внешнюю программу. Она принимает stdin и выплевывает stdout, и не нужно убивать выходной на простой парсер. Даже плагин писать не нужно.

Delphi

Меня терзают смутные сомнения насчет кроссплатформенности — как там с Linux и Mac?
Не думаю что сходу можно было бы адаптировать решение и под линукс и под мак, и тут не Delphi виновата, а то, что текущее решение тесно работает с буфером обмена, с эмулированием нажатий клавиш и т.п.
Подумал. Может действительно на досуге вынесу консольной программой редактор. Для любителей прикручивать напрямую к некоторым IDE.
p.s. Мне просто самому нужно это для MSVS + NetBeans + Delphi и хотелось еще Notepad++ покрыть. Поэтому вот так вот сделал.
Вот бы в виде плагина к TypeAndRun…
А зачем плагин? Оно работает с любым окном, из которого можно сделать Ctrl+C и в которое можно сделать Ctrl+V. Основная идея была уйти от плагина к чему-то, чтобы подошло бы всем.
За Delphi, походу будет много минусов, но проект хороший и полезный. Спасибо :)
Если кто-то не знает как тоже самое сделать в IDEA:



Затем, выделение текста (если нужно отформатировать конкретный участок кода) и Alt+Cmd+L
Для PHP чуток по-другому, но смысл тот же и спасибо вам за эту приятность.

P.S. Почему то картинка не вставляется. Что я делаю не так? take.ms/UJAJL
Здорово.
И все-таки в самом NPP было бы еще вкуснее. Не хотите сделать плагин?
А какое ограничение для буфера?)
А то при обработке файла в 22 кб (около 800 строк) не работает(((
а маленькими кусками не удобно…
Ого, я и не ожидал что такие объемы будут.
Вообще ограничений нет. Просто редактор при потере фокуса прячется и отменяет редактирование. Поскольку код, выравнивающий текст написан не оптимально (много реаллокаций и конкатенаций) + все это дело отображается в memo, то для такого большого буфера он выполняется несколько секунд. В этот момент винда решает что приложение не отвечает, и снимает с него фокус… и редактирование отменяется.
В общем соптимизирую я это дело в следующие выходные наверое.

p.s. А это реально удобно было бы, по 22кб и больше выравнивать?
я просто попробовал выравнять css файл от проекта)))))
Имхо, не помешало бы в стандартный функционал включить возможность выбора положения «popup-а» (выбор из девяти типичных положений на экране), и возможность вот такого выравнивания:



При, например, указании разделителя с выбранным ключевым символом. Т.е. если выравниваем по ":" — обычное; при указании "~:" — как на изображении выше
Случай из первого комментария — частный случай вашего примера. Ок, я подумаю как это сделать действительно удобно.
Реквестирую в качестве дополнительной фичи автовыравнивание (скобки, отступы) для популярных языков, как это сделано в IDE, например, PHPStorm Ctrl+Alt+L (Reformat Code).
Для использования везде, где это надо, не задумываясь (Sublime, Notepad++).
Bug report:

Some Text As Example
Тест Тест
To translit:
SomeATextAAsAExample
TestATest
Действительно, спасибо. Домой приду — пофикшу.
Продолжаем тему багов:

А а	Б б	В в	Г г	Д д	Е е	Ё ё
Ж ж	З з	И и	Й й	К к	Л л	М м
Н н	О о	П п	Р р	С с	Т т	У у
Ф ф	Х х	Ц ц	Ч ч	Ш ш	Щ щ	Ъ ъ
Ы ы	Ь ь	Э э	Ю ю	Я я

Switch language: ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

F f	< ,	D d	U u	L l	T t	~ `
: ;	P p	B b	Q q	R r	K k	V v
Y y	J j	G g	H h	C c	N n	E e
A a	{ [	W w	X x	I i	O o	} ]
S s	M m	" '	> .	Z z

Switch language: ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

А а	Б ?	В в	Г г	Д д	Е е	Ё ё
^ $	З з	И и	Й й	К к	Л л	М м
Н н	О о	П п	Р р	С с	Т т	У у
Ф ф	Х х	Ц ц	Ч ч	Ш ш	Щ щ	Ъ ъ
Ы ы	Ь ь	@ э	Ю /	Я я


А теперь сравниваем первый (вход) и третий (выход) пример — жук очевиден
Интересная особенность. Возьмем например символ б
На русской раскладке ему соответствует запятая. При этом на английской раскладке запятой соответствует знак вопроса. Таким образом нужны две таблицы, одна для переключения RU-ENG если исходное слово русское, и такая же таблица для английского исходного слова.
Посмотрел как ведет себя Punto Switcher. Если ввести на англйиской раскладке символ Б:
,
затем вручную переключить раскладку, выделить символ и попробовать перевести, то будет
?
а если не переключать раскладку, то будет
б
Что интересно, если написать «б браво», и провернуть тот же трюк, то увидим:
? браво
т.е. пунто свитчер анализирует еще каждое слово.
В общем то я пока добавлю логику для анализа текущей раскладки, думаю этого будет достаточно.
Fixed
> 4. Ждет появления в буфере обмена текста (постоянно проверяя его раз в 10мс, и так в течение одной секунды)
С помощью функции SetClipboardViewer можно подписать свое приложение на изменение буфера обмена, тогда не придется долбать его опросами
Оу, спасибо. Значит поставлю сегодня. ;)
В общем SetClipboardViewer — устраевшая функция. Описано в msdn. Почему — тоже описано.
Теперь православно использовать AddClipboardFormatListener.
Так же есть GetClipboardSequenceNumber, которая инкрементит глобальный счетчик обновления буфера.
В общем переделал ожидание на GetClipboardSequenceNumber (на sourceforge пока не заливал)
В редакторе FAR срабатывает, но при закрытии окна приложения «залипает» Ctrl
Не могу повторить. Какой билд фара?
Зато обнаружил что фокус не восстанавливается по Esc
2.0 build 1807 x86
Я правильно понял из кода, что Вы сохраняете и восстанавливаете только текстовое содержимое клипбоарда? Если там будет, например, картинка или файл, то они потеряются?
Да, это одна из недоработок.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации