Когда пользователь нажимает клавишу ввода в wxStyledTextCtrl
, кажется, что курсор всегда идет в начале строки (нулевой вдавливания), что, скорее всего, ожидаемое поведение.Как контролировать LineIndentation в wxStyledTextCtrl, когда пользователь нажимает Enter
Я хочу, чтобы писать код сценария в следующем формате, с отступом строки.
for i=1,10 do --say there is no indentation
i=i+1 -- now there is indentation via tab key
-- pressing enter should proceed with this level of indentation
print(i) -- same level of indentation with the previous code line
end
Я использую следующий код на C++ для управления отступом на очень базовом уровне.
void Script::OnKeyUp(wxKeyEvent& evt)
{
if ((evt.GetKeyCode() == WXK_RETURN || evt.GetKeyCode() == WXK_NUMPAD_ENTER)) {
long int col, line;
PositionToXY(GetInsertionPoint(), &col, &line);
int PreviousIndentation = GetLineIndentation(line-1);
SetLineIndentation(line, PreviousIndentation);
GotoPos(GetCurrentPos() + PreviousIndentation);
}
}
выше C++ код сохраняет уровень отступа, однако, курсор первым идет в начале строки, а затем на уровне отступа. При использовании других IDE это не происходит таким образом, как, например, переход к началу строки, а затем к уровню отступов. Скорее, курсор немедленно идет в/в соответствии с уровнем отступа. Есть ли способ, с помощью которого курсор может сразу перейти на уровень отступов, без первоначального перехода на нулевой уровень отступа.
Кстати, я попробовал EVT_STC_CHARADDED
, который, кажется, как способ реализуется в ZeroBraneStudio, но когда Enter нажата клавиша evt.GetKeyCode()
возвращает странное число и evt.GetUnicodeKey
возвращается \0
и к тому же EVT_STC_CHARADDED
событие вызывается дважды (я предполагаю, что из-за CR + LF).
Кстати, я использую WxWidgets-3.1.0 на Windows, 10.
Любые идеи будут оценены.
Большое спасибо! Вчера я провел пару часов, чтобы исправить проблему пропусков, но не помог. Теперь он работает, как он должен работать. – macroland
Извините за другой ответ. Как только я понял проблему, я потратил около 3 часов, пытаясь обойти это, прежде чем осознать, что это, вероятно, было безнадежным. –
С недавними улучшениями в ответе, теперь это действительно очень хороший! – macroland