Latest post of the previous page:
Я ничего не хочу, но по этой команде последняя строка честно дублируется, создавая новую.Дублирование строки
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Дублирование строки
Так это баг в фаре.
В моём представлении эта команда должна вставлять перенос строки, однако в режиме отображения пробельных символов видно что этого не происходит.
Code: Select all
Editor.InsStr(nil,Editor.Lines)
Дублирование строки
эта функция должна вставлять строку. согласно фиче фара строка редактора может и не иметь символов перевода (это используется в EditWrap). поэтому бага нет. но можно, как я уже писал, захотеть виш по расширению функционала.
Фар делают добрые люди
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Дублирование строки
У фара может фича и есть (не пользуюсь, но и ломать не предлагаю).
Но при чём тут макро апи?
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Дублирование строки
Ситуация, когда редактор работает по-разному с файлом до и после сохранения-переоткрытия и отображает разную информацию о количестве строк, не является нормальной. По моему скромному разумению, это как раз то, что принято называть баг.
Дублирование строки
продолжение истории. плагиновое апи не оказалось панацеей.
создаем файл, в нем вводим одну строку, да и ту без перевода строки, сохраняем, выходим, открываем файл, вызываем макрос – строка дублировалась, но без перевода строки.
вот эта ситуация ближе к сказанному.
создаем файл, в нем вводим одну строку, да и ту без перевода строки, сохраняем, выходим, открываем файл, вызываем макрос – строка дублировалась, но без перевода строки.
вот эта ситуация ближе к сказанному.
Фар делают добрые люди
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Дублирование строки
Действительно, в этой ситуации макрос работает неверно.
Интересно что проблема возникает только если открыть существующий файл, а во вновь созданном всё в порядке.
И проявляется только с первой строкой.
Интересно что проблема возникает только если открыть существующий файл, а во вновь созданном всё в порядке.
И проявляется только с первой строкой.
Дублирование строки
ladserg, да у этого варианта проблемы нет.
но интенсивное тестирование различных вариантов макроса дает результаты: обнаружено, что после дублирования строки и отмены теряется позиция курсора в строке. видимо что-то случилось с editor.UndoRedo (или всегда так было). это относится к обоим макросам на плагинном апи.
но интенсивное тестирование различных вариантов макроса дает результаты: обнаружено, что после дублирования строки и отмены теряется позиция курсора в строке. видимо что-то случилось с editor.UndoRedo (или всегда так было). это относится к обоим макросам на плагинном апи.
Фар делают добрые люди
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Дублирование строки
Вероятнее всего, т.к. нигде не сказано, что позиция должна восстанавливаться.
Я это могу и без макросов воспроизвести.
Дублирование строки
Хм, действительно теряется позиция при отмене действия. У ряда операций, кста, такая же ситуция. Например удаление строки комбинацией Ctrl+Y .ccaid wrote:но интенсивное тестирование различных вариантов макроса дает результаты: обнаружено, что после дублирования строки и отмены теряется позиция курсора в строке. видимо что-то случилось с editor.UndoRedo (или всегда так было). это относится к обоим макросам на плагинном апи.
А по лоигке своей механизм UndoRedo должен поддерживать возврат позиции при отмене операций со строками?.
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Дублирование строки
В вашем макросе до операций со строками есть editor.SetPosition.
Вы считаете, что установка позиции тоже должна попадать в Undo?
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Дублирование строки
В общем, это недостаток апи, ведь в функциях редактора не предусмотрена работа с произвольной позицией, а только с текущей.
Как минимум можно пожелать чтобы при EUR_BEGIN запоминалась текущая позиция (или завести для этого отдельную команду).
А пока можно извратиться, и переписать макрос как-то так:
Как минимум можно пожелать чтобы при EUR_BEGIN запоминалась текущая позиция (или завести для этого отдельную команду).
А пока можно извратиться, и переписать макрос как-то так:
Code: Select all
Macro {
description="Duplicate current line";
area="Editor"; key="CtrlD";
action=function()
local ei = editor.GetInfo()
local id = ei.EditorID
local str = editor.GetString(id, 0, 3)
editor.UndoRedo(id,"EUR_BEGIN")
Keys"Space BS End" -- trick needed to restore pos after undo
editor.InsertString(id)
editor.InsertText(id,str)
editor.SetPosition(id,{CurPos=ei.CurPos})
editor.UndoRedo(id,"EUR_END")
end;
}