View Issue Details

IDProjectCategoryView StatusLast Update
0001782Far ManagerEditorpublic2011-12-23 09:02
ReporterMaximus Assigned Tovskirdin  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product Version3.0 
Fixed in Version3.0 
Summary0001782: Ошибка выделения при наличии табов
DescriptionНе уверен где именно глюк - то ли в редакторе, то ли в макродвижке.
При наличии в строке редактора табов - выделяется область правее чем нужно.

Steps To ReproduceFar3 build 2047, чистая конфигурация (UseSystemProfiles=0, баз нет)
Есть один макрос MsLClick.reg
Открываем файл с табами (TabBug.txt)
Попытка выделения приводит к выделению области правее чем нужно.

выделять начинал с первого непробельного символа
TagsNo tags attached.
Build2058

Activities

Maximus

2011-05-23 22:58

reporter  

TabBug.7z (4,146 bytes)

2useven10

2011-05-24 01:11

developer   bugnote:0007018

Думаю причина та же, что и в
http://bugs.farmanager.com/view.php?id=1326

Maximus

2011-05-24 06:05

reporter   bugnote:0007019

Забыл сказать, что в Far2 все было ОК, а вот в тройке - поломалось.

2useven10

2011-05-24 06:18

developer   bugnote:0007021

Last edited: 2011-05-24 06:20

Far3 build 2047 - выделение раблтатет корректно (TabBug.txt)
Макросов нет.

Maximus

2011-05-24 06:29

reporter   bugnote:0007023

Думаешь, я просто так макрос приложил?
Уточняю. Выделение _мышкой_ работает _не_ корректно.

Maximus

2011-05-24 06:44

reporter   bugnote:0007024

Нашел в changelog

svs 14.05.2011 14:53:18 +0300 - build 2029
2. Macro: Бага в Editor.Sel() - не учитывались табы...
   (репорт из рассылки fardev@googlegroups.com)

наверное, нужно макрос переписывать

2useven10

2011-05-24 06:53

developer   bugnote:0007026

извини, я не телепат. про мышку в тикете ничего нет.

Maximus

2011-05-24 11:31

reporter   bugnote:0007028

еще интереснее, если отключен флажок
[ ] Cursor beyond end of line
В этом случае, выыделение за концом строки смотрится вообще дико

vskirdin

2011-05-24 14:09

administrator   bugnote:0007029

Да, макрос нужно переписывать. Судя по всему он "паразитировал" на баге :-)

vskirdin

2011-05-25 19:49

administrator   bugnote:0007054

Закрываем?

Maximus

2011-05-25 19:52

reporter   bugnote:0007055

Ну, с макросом наверное понятно.
А вот установку выделения за концом строки не надо в принципе запретить?

vskirdin

2011-05-26 03:52

administrator   bugnote:0007057

"не надо в принципе запретить" - переведи.

Maximus

2011-05-26 06:20

reporter  

InvSel.png (31,499 bytes)   
InvSel.png (31,499 bytes)   

Maximus

2011-05-26 06:23

reporter   bugnote:0007059

Смотри на картинку. Макросу удается установить выделение за пределами конца строки. А туда (за конец строки) обычным образом даже курсор поставить нельзя, если пендюрка "Cursor beyond end of line" отключена.
При включенной пендюрке - наверное имеет право, а вот при отключенной?

vskirdin

2011-05-26 10:20

administrator   bugnote:0007064

Проверь:

editor.cpp
Editor::VMProcess
case MCODE_F_EDITOR_SEL:
...
case 1: // Set Pos
...
блок внутри "if (iLine > -1 && iPos > -1)" переписать так:

{
  int _NumLine=NumLine;
  int _CurPos=CurLine->GetTabCurPos();

  GoToLine(iLine);
  CurLine->SetCurPos(CurLine->TabPosToReal(iPos));

  if (!EdOpt.CursorBeyondEOL && CurLine->GetCurPos() >= CurLine->GetLength())
  {
    GoToLine(_NumLine);
    CurLine->SetCurPos(CurLine->TabPosToReal(_CurPos));
    return 0;
  }
  return 1;
}

Так, мог намудрить с GetTabCurPos и GetCurPos - надо поиграться :-)

Maximus

2011-05-26 13:23

reporter   bugnote:0007071

это курсор за пределы строки не убегает.
А вот выделение продолжает ставиться (за концом строки)

vskirdin

2011-05-26 13:27

administrator   bugnote:0007073

давай простой тестовый макрос с в студию (только не тот, на сто мульенов строк - MsLClick.reg - его еще переписать надо).

Maximus

2011-05-26 14:52

reporter   bugnote:0007078

Все-таки, само выделение глючит (проблему с выделением за концом строки времмено забыли).
Смотри,

editor.pos(1,1,MsY)
editor.pos(1,3,MsX+1)
editor.sel(2,0)
editor.pos(1,3,MsX+2)
editor.sel(2,1)
editor.pos(1,3,MsX+1)

По идее, по клику мышки макрос должен выделить "кликнутый" символ.
Пока табов нет - все хорошо. Как только есть табы (пример - приложенный файл) клик по первому значимому символу ставит выделение правее чем нужно!
Хотя сам курсор позиционируется нормально.

vskirdin

2011-05-27 06:04

administrator   bugnote:0007084

так, кажется начал догонять в чем трабла.
и имя ей - "MsX": ОНО не преобразуется в редакторо-вьювере пропорционально размеру табуляции.

ы?
как вариант - ввести функцию Editor.Tab2Pos/Pos2Tab...
хотя лучше в нутренностях, но... пока не представляю как.
пойду подумаю...

Maximus

2011-05-27 07:10

reporter   bugnote:0007087

Погодь.
editor.pos(1,3,MsX+1) ставит курсор в _экранных_ координатах.
И если не принимать во внимание выделение - то установка позиции отрабатывает правильно.

Например:
editor.pos(1,1,MsY) editor.pos(1,3,MsX+2)
будет ставить курсор на один символ правее "кликнутого".

Отсюда я делаю вывод, что глючит именно editor.sel(2,0) / editor.sel(2,1)
ы?

vskirdin

2011-05-27 07:42

administrator   bugnote:0007088

хотя... "к черту шлюх" (с) Бендер
MsX не причем.

vskirdin

2011-05-27 07:47

administrator   bugnote:0007089

Last edited: 2011-05-27 07:51

в блоке

case 2: // Set Stream Selection Edge
case 3: // Set Column Selection Edge
{
...
}
все GetTabCurPos нужно заменить на GetCurPos

и макрос вроде заработал.

тестим - http://skirda-file.googlecode.com/files/m1782.1.7z

Maximus

2011-05-27 21:45

reporter   bugnote:0007099

ага, похоже на правду. вроде работает

vskirdin

2011-05-28 06:59

administrator   bugnote:0007101

build 2058

Issue History

Date Modified Username Field Change
2011-05-23 22:58 Maximus New Issue
2011-05-23 22:58 Maximus File Added: TabBug.7z
2011-05-24 01:11 2useven10 Note Added: 0007018
2011-05-24 06:05 Maximus Note Added: 0007019
2011-05-24 06:18 2useven10 Note Added: 0007021
2011-05-24 06:20 2useven10 Note Edited: 0007021
2011-05-24 06:29 Maximus Note Added: 0007023
2011-05-24 06:44 Maximus Note Added: 0007024
2011-05-24 06:53 2useven10 Note Added: 0007026
2011-05-24 11:31 Maximus Note Added: 0007028
2011-05-24 14:09 vskirdin Note Added: 0007029
2011-05-25 19:49 vskirdin Note Added: 0007054
2011-05-25 19:52 Maximus Note Added: 0007055
2011-05-26 03:52 vskirdin Note Added: 0007057
2011-05-26 06:20 Maximus File Added: InvSel.png
2011-05-26 06:23 Maximus Note Added: 0007059
2011-05-26 10:20 vskirdin Note Added: 0007064
2011-05-26 13:23 Maximus Note Added: 0007071
2011-05-26 13:27 vskirdin Note Added: 0007073
2011-05-26 14:52 Maximus Note Added: 0007078
2011-05-27 06:04 vskirdin Note Added: 0007084
2011-05-27 07:10 Maximus Note Added: 0007087
2011-05-27 07:42 vskirdin Note Added: 0007088
2011-05-27 07:47 vskirdin Note Added: 0007089
2011-05-27 07:51 vskirdin Note Edited: 0007089
2011-05-27 21:45 Maximus Note Added: 0007099
2011-05-28 06:59 vskirdin Note Added: 0007101
2011-05-28 06:59 vskirdin Assigned To => vskirdin
2011-05-28 06:59 vskirdin Status new => feedback
2011-12-23 09:02 alexy Build => 2058
2011-12-23 09:02 alexy Status feedback => closed
2011-12-23 09:02 alexy Resolution open => fixed
2011-12-23 09:02 alexy Fixed in Version => 3.0