Вот делаю скрипт, который делает перенос и вставляет табуляцию, чтобы визуально выделить код внутри фигурных скобок. Имеет смысл использовать если включен XBrackets plugin c настройкой "Автозакрытие скобок".
К примеру, если в CSS было так
Есть проблема: если назначаю скрипту клавишу Enter, то за пределами фигурных скобок перенос на новую строку по Enter-у не происходит. Как можно исправить? Итуитивно пытался вставлять WScript.Quit(); в конец, не помогло.
Last edited by Cuprum on Mon Oct 06, 2014 12:07 pm, edited 1 time in total.
Skif_off
Эти скрипты "причесывают" уже готовый код, мой вариант нужен, чтобы улучшить читабельность кода, когда разработчик непосредственно пишет код (+ меньше лишних нажатий клавиш). Перенос закрывающей фигурной скобки на новую строку с отделением кода слева табуляцией/пробелами - вполне разумныерекомендации.
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var oSys=AkelPad.SystemFunction();
var path = AkelPad.GetEditFile(0),
regPattern = /\.([^.]+)$/,
ext = path.match(regPattern)[1],
flieExts = "css|js",
caret,
beforeCaret,
afterCaret,
textRange;
function insertTab() {
var bKeepSpace=AkelPad.SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 146 /*MI_KEEPSPACE*/, 0);
SetRedraw(hWndEdit, false);
if (!bKeepSpace) AkelPad.Command(4254 /*IDM_OPTIONS_KEEPSPACE*/);
AkelPad.SendMessage(hWndEdit, 258 /*WM_CHAR*/, 13 /*VK_RETURN*/, 0);
caret = AkelPad.GetSelStart();
AkelPad.SendMessage(hWndEdit, 258 /*WM_CHAR*/, 13 /*VK_RETURN*/, 0);
AkelPad.SetSel(caret, caret);
AkelPad.Command(4164); //вставка табуляции
if (!bKeepSpace) AkelPad.Command(4254 /*IDM_OPTIONS_KEEPSPACE*/);
SetRedraw(hWndEdit, true);
}
if ( flieExts.indexOf(ext) >= 0 ) { //является ли текущий файл *.css или *.js
caret = AkelPad.GetSelStart();
beforeCaret = caret - 1;
afterCaret = caret + 1;
textRange = AkelPad.GetTextRange(beforeCaret, afterCaret);
if ( textRange === "{}") {
insertTab();
WScript.Quit();
}
}
AkelPad.SendMessage(hWndEdit, 258 /*WM_CHAR*/, 13 /*VK_RETURN*/, 0);
function SetRedraw(hWnd, bRedraw)
{
AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
if (bRedraw) oSys.Call("user32::InvalidateRect", hWnd, 0, true);
}
, чтобы Enter работал в других окнах (окнах настроек) тоже?
Случайно обнаружил, что если нажимать Enter, например, в окне настроек контекстного меню (плагины -> ContextMenu::Main -> вызвать), то возврат каретки все равно посылается во вкладку с редактируемым файлом.
Хочу уточнить один момент.
Например, есть скрипт, которому через hotkeys-плагин назначается какая-то одна горячая клавиша из "печатных" (пусть "a"). Сам скрипт просто вставляет текст в позицию курсора
Теперь когда нажимаем "a", скрипт печатает b, а не ab.
Правильно ли я понял, что единственный способ, чтобы печаталось ab - принудительно вставлять нужный символ из скрипта?: