![]() |
|
||||||||||
|
|||||
|
Подскажите как настроить FD, так что бы, при сохранении файла, удалялись все лишние пробелы?
Что бы данный код:
P.S.: код написан от балды =) |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Добавьте в меню новый макрос LiteFormat.cs
using System;
using PluginCore;
using System.Text.RegularExpressions;
public class LiteFormat {
public static void Execute () {
ScintillaNet.ScintillaControl sci = PluginBase.MainForm.CurrentDocument.SciControl;
if (sci == null) {
/// document not editable
return;
}
/// WARNING: reading/writing sci.Text property is slow
string src = sci.Text;
src = new Regex (@"( )(?<!\r\n)").Replace (src, " ");
src = new Regex (@"\r\n([\t ]+)?\r\n").Replace (src, "\r\n");
src = new Regex (@"( +)?\r\n(\t+)?{").Replace (src, " {");
src = new Regex (@"}\r\n([\t ]+)?(catch|else|finally)").Replace (src, "} $2");
src = new Regex (@"}([\t ]*)(else|finally)([\t ]*){").Replace (src, "} $2 {");
src = new Regex (@"([\w\d$])\(").Replace (src, "$1 (");
sci.Text = src;
}
}
Следующие три за положение {} на одной строке, а не на новой. Последний ставит пробел между именем метода и () Последний раз редактировалось iNils; 18.03.2011 в 12:13. |
|
|||||
|
Что то не выходит.
- создаю LiteFormat.cs с вашим кодом - сохраняю его в $(BaseDir)\Macros\LiteFormat.cs, где $(BaseDir) корень FD - ctrl+F10 в FD, создаю новый макрос - открываю entries нового макроса и пишу туда ExecuteScript|Development;$(BaseDir)\Macros\LiteFormat.cs - юзаю этот макрос в файле и ничего не происходит что я делаю не так? |
|
|||||
|
Разобрались... дело в том что у нас в классах конец строки только LF.
Пришлось кое что изменить, вот наш рабочий макрос: using System;
using PluginCore;
using System.Text.RegularExpressions;
public class LiteFormat
{
public static void Execute ()
{
ScintillaNet.ScintillaControl sci = PluginBase.MainForm.CurrentDocument.SciControl;
if (sci == null)
{
/// document not editable
return;
}
/// WARNING: reading/writing sci.Text property is slow
string src = sci.Text;
src = new Regex (@"\t", RegexOptions.Multiline).Replace (src, " ");
src = new Regex (@" +$", RegexOptions.Multiline).Replace (src, "");
sci.Text = src;
}
}
Последний раз редактировалось Aloran; 18.03.2011 в 14:23. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
![]() Легко Написать макрос, который вызывает этот макрос и делает сохранение, а потом отобрать Control|S у Label.Save в MainMenu.xml и назначить его этому макросу) |
|
|||||
|
спасибо большое iNils !!!
Добавлено через 18 часов 46 минут iNils вдогонку еще один маленький вопрос: какой код надо дописать в макрос, что бы курсор остался на прежнем месте, а не убегал в начало файла? (а то с С# я не дружу) |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Значит так. Запоминаем текущую строку перед заменой.
Потом, после установки текста, ее возвращаем. Но! Курсор будет в начале строки. Почему? Потому, что у нас будут изменения в числе общих символов (например табы на пробелы сменили), и чтобы позиционировать курсор по символам, надо будет производить ряд манипуляций, по запоминанию текста строки и восстановлении по нему позиции, а мне сейчас эти делать лень ![]() Если вам нужно точное восстановление позиции, то скачайте исходники FD, найдите там файл trunk\FD3\PluginCore\ScintillaNet\ScintillaControl.cs и получите все методы и свойства Scintilla. Последний раз редактировалось iNils; 20.03.2011 в 22:39. |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:36. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|