View Issue Details

IDProjectCategoryView StatusLast Update
0001938Far ManagerPlugins API.Editorpublic2012-04-19 23:47
ReportershmuelAssigned To2useven10 
PrioritynormalSeveritymajorReproducibilityalways
Status closedResolutionfixed 
Platformx86OSWindowsOS VersionXP SP3
Product Version3.0 
Target VersionFixed in Version3.0 
Summary0001938: После ECTL_DELETESTRING перестают работать блоки в редакторе
DescriptionПростая последовательность действий ведёт к неработоспособности блоков в редакторе.

См. также в форуме: http://forum.farmanager.com/viewtopic.php?f=9&t=6654
Steps To Reproduce[ Фар любой из: 3.0.2286, 2.0.1807, 1.75.2634 ]
Создаём в редакторе (или открываем существующий) файл из 5 строк, по одному символу в строке, например с содержимым "1\n2\n3\n4\n5\n".
1. От начала 3-й строки нажимаем ShiftRight
2. Вызываем из любого плагина EditorControl(-1, ECTL_DELETESTRING, 0, 0)
3. Нажимаем CtrlHome ShiftDown Down ShiftDown

Видим, что в редакторе образовались 2 отдельных блока (собственно, их можно сделать и больше). Эти блоки, однако, не реагируют на CtrlU и другие блоковые операции. То-есть редактор находится в неконсистентном, ненормальном состоянии.

Если между пунктами 1 и 2 передвинуть курсор вперёд или назад, то неисправность не воспроизводится.
TagsNo tags attached.
Build2559

Activities

2useven10

2011-12-08 00:50

developer   bugnote:0008089

попробуйте с таким патчем:
Index: editor.cpp
===================================================================
--- editor.cpp (revision 6949)
+++ editor.cpp (working copy)
@@ -5398,7 +5398,10 @@
                                return FALSE;
                        }

- DeleteString(CurLine,NumLine,FALSE,NumLine);
+ //DeleteString(CurLine,NumLine,FALSE,NumLine);
+ Pasting++;
+ ProcessKey(KEY_CTRLY);
+ Pasting--;
                        return TRUE;
                }
                case ECTL_DELETECHAR:

shmuel

2011-12-08 01:25

developer   bugnote:0008092

Патч не помог, но если убрать Pasting++/--, т.е. добавлять только ProcessKey(KEY_CTRLY) - тогда ОК.

2useven10

2011-12-08 12:27

developer   bugnote:0008093

build 2290

shmuel

2011-12-08 14:46

developer   bugnote:0008096

Работает, спасибо.

zg

2011-12-13 19:17

developer   bugnote:0008143

господа, а как же ECTL_TURNOFFMARKINGBLOCK?

2useven10

2011-12-13 23:40

developer   bugnote:0008147

... а если ближе к телу?

zg

2011-12-13 23:44

developer   bugnote:0008148

было апи, которое сбрасывало признак выделения. сейчас есть апи и где-то фар сбрасывает, где-то нет. надо либо убрать апи и сбрасывать везде, либо вернуть как было.

shmuel

2011-12-14 00:10

developer   bugnote:0008150

Читаю описание ECTL_TURNOFFMARKINGBLOCK и диву даюсь.
Например, фраза "когда он начал выделять блок". Что означает "начал"?
Или фраза "вы почти всегда должны использовать данную команды". Что означает "почти всегда" - 9 раз из 10? или каждый день, кроме пятницы?

2useven10

2011-12-14 00:25

developer   bugnote:0008151

говорим об этом инце...
добавлен сброс выделения если его больше нет после удаления строки:
   if ( !BlockStart )
      Flags.Clear(FEDITOR_MARKINGBLOCK);
что и было проблемой, т.к. в такой ситуации код UnmarkBlock(),UnmarkEmptyBlock()
не работает. зачем нужно апи - не знаю, судя по документации ~ вызовите если непонятные проблемы. правка сбрасывет в конкретном месте - где проявилось.
возможно лучше сбрасывать в DeleteString() или ещё лучше поправить Unmark...
такую правку я готов сделать. если что-то ещё - я пас, апи знаю слишком плохо.

zg

2011-12-14 01:43

developer   bugnote:0008152

разве этот инцидент не решался добавлением в плагин вызова
EditorControl(-1,ECTL_TURNOFFMARKINGBLOCK,0,0)?

shmuel

2011-12-14 01:58

developer   bugnote:0008153

Я проверил (в ходе данного обсуждения), - да инцидент решался добавлением данного вызова.
IMHO, сейчас, в период слома API, самое время убрать это уродство.

2useven10

2011-12-14 20:21

developer   bugnote:0008155

>надо либо ...
принципиальных возражений нет (разве что заменить на 'было бы хорошо ...' :-)
но к ревизии всего плагин-апи редактора я не готов, особенно сейчас - конец года.

shmuel

2012-03-20 10:01

developer   bugnote:0008785

Resolved in Far 3.0.2559.

Issue History

Date Modified Username Field Change
2011-12-07 15:43 shmuel New Issue
2011-12-08 00:50 2useven10 Note Added: 0008089
2011-12-08 01:25 shmuel Note Added: 0008092
2011-12-08 12:27 2useven10 Note Added: 0008093
2011-12-08 12:27 2useven10 Assigned To => 2useven10
2011-12-08 12:27 2useven10 Status new => feedback
2011-12-08 14:45 shmuel Status feedback => assigned
2011-12-08 14:46 shmuel Note Added: 0008096
2011-12-08 14:46 shmuel Status assigned => resolved
2011-12-08 14:52 2useven10 Build => 2290
2011-12-08 14:52 2useven10 Status resolved => closed
2011-12-08 14:52 2useven10 Resolution open => fixed
2011-12-08 14:52 2useven10 Fixed in Version => 3.0
2011-12-13 19:17 zg Note Added: 0008143
2011-12-13 22:46 zg Status closed => new
2011-12-13 23:40 2useven10 Note Added: 0008147
2011-12-13 23:44 zg Note Added: 0008148
2011-12-14 00:10 shmuel Note Added: 0008150
2011-12-14 00:25 2useven10 Note Added: 0008151
2011-12-14 01:43 zg Note Added: 0008152
2011-12-14 01:58 shmuel Note Added: 0008153
2011-12-14 20:21 2useven10 Note Added: 0008155
2012-03-20 10:01 shmuel Note Added: 0008785
2012-03-20 10:01 shmuel Status new => resolved
2012-04-19 23:47 2useven10 Build 2290 => 2559
2012-04-19 23:47 2useven10 Status resolved => closed