Panel.SetPosIdx()

Здесь обсуждается всё, что касается макросов.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Nightly Builds — еженощные сборки

Post by Skirda »

Latest post of the previous page:

DAtaMan wrote:apanel.Filter всегда выдает 1, независимо от того, включён фильтр на панели или нет
Упс. Fixed
DAtaMan wrote:panel.setposidx(0,0,1) не учитывает выделение
никто и не обещал:
c) второй параметр Idx:
...
= 0 - игнорировать переход, просто вернуть текущую позицию (естественно учетом фильтра)
т.е. в этом случае третий параметр в игнор, т.е. panel.setposidx(0,0,0) == panel.setposidx(0,0,1) == panel.setposidx(0,0,1024).
We are the Borg. You will be assimilated.
So Say We All!
User avatar
DAtaMan
Posts: 262
Joined: Wed 24 Jun, 2009 10:01
Location: не отсюда

Panel.SetPosIdx()

Post by DAtaMan »

Skirda wrote:никто и не обещал:
Действительно :(
А было бы здорово:

Code: Select all

panel.setposidx(0,panel.setposidx(0,0,1)+1,1)

Code: Select all

panel.setposidx(0,panel.setposidx(0,0,1)-1,1)
2B OR NOT 2B = FF (Иногда code - это просто код. Почти Дйерф Омолш Днумзигис)
To ban or not to ban, that is the question. ©
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Nightly Builds — еженощные сборки

Post by Skirda »

DAtaMan wrote:А было бы здорово:

Code: Select all

panel.setposidx(0,panel.setposidx(0,0,1)+1,1)

Code: Select all

panel.setposidx(0,panel.setposidx(0,0,1)-1,1)
А разве не пашет?
We are the Borg. You will be assimilated.
So Say We All!
User avatar
DAtaMan
Posts: 262
Joined: Wed 24 Jun, 2009 10:01
Location: не отсюда

Re: Nightly Builds — еженощные сборки

Post by DAtaMan »

Skirda wrote:А разве не пашет?

Code: Select all

panel.setposidx(0,panel.setposidx(0,0,1)+1,1)
Если panel.setposidx(0,0,1) будет возвращать индекс среди отмеченных, то будет прыгать по отмеченным. ;)

Хотя сейчас попробовал так (просто переход на следующий):

Code: Select all

panel.setposidx(0,panel.setposidx(0,0,0)+1,0)
и курсор как-то странно прыгает.
Потом так:

Code: Select all

panel.setposidx(0,1,0) - все правильно

Code: Select all

panel.setposidx(0,2,0) - курсор прыгает на 3-ю позицию

Code: Select all

panel.setposidx(0,3,0) - курсор прыгает на 5-ю позицию
Или я что-то не так делаю :(
2B OR NOT 2B = FF (Иногда code - это просто код. Почти Дйерф Омолш Днумзигис)
To ban or not to ban, that is the question. ©
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Nightly Builds — еженощные сборки

Post by Skirda »

DAtaMan wrote:Хотя сейчас попробовал так (просто переход на следующий):

Code: Select all

panel.setposidx(0,panel.setposidx(0,0,0)+1,0)
и курсор как-то странно прыгает.
хмм... да. что-то с алгоритмом перемудрил :-(
пошел думу думать...
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Nightly Builds — еженощные сборки

Post by Skirda »

Skirda wrote:
DAtaMan wrote:Хотя сейчас попробовал так (просто переход на следующий):

Code: Select all

panel.setposidx(0,panel.setposidx(0,0,0)+1,0)
и курсор как-то странно прыгает.
хмм... да. что-то с алгоритмом перемудрил :-(
пошел думу думать...
надумал :-)
Теперь (после 1412) вот так:
Panel.SetPosIdx(0,0,0) - вернет координаты в массиве файлов с учетом фильтра
Panel.SetPosIdx(0,0,1) - вернет координаты в виртуальном массиве отмеченных файлов с учетом фильтра
We are the Borg. You will be assimilated.
So Say We All!
User avatar
DAtaMan
Posts: 262
Joined: Wed 24 Jun, 2009 10:01
Location: не отсюда

Re: Nightly Builds — еженощные сборки

Post by DAtaMan »

Skirda wrote:Теперь (после 1412) вот так:
Panel.SetPosIdx(0,0,0) - вернет координаты в массиве файлов с учетом фильтра
Panel.SetPosIdx(0,0,1) - вернет координаты в виртуальном массиве отмеченных файлов с учетом фильтра
Уже почти всё ! :Bravo:
build 1412
Тестовый макрос:panel.setposidx(0,0,1) возвращает 0, если отмеченный файл - последний на панели
2B OR NOT 2B = FF (Иногда code - это просто код. Почти Дйерф Омолш Днумзигис)
To ban or not to ban, that is the question. ©
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Значение, возвращаемое panel.setposidx()

Post by Raistlin »

panel.setposidx(panelType,PosIdx[,InSelection])
...
Функция возвращает позицию элемента или 0, если такого элемента на панели нет.
А смысл? Передаем функции номер элемента на панели и получаем его обратно? Ну, хорошо, можем получить и не его, если передадим 0, или получить 0, если передадим невалидный номер, но все-таки логичнее было бы возвращать имя файлового объекта или пустую строку, если номер элемента невалиден.
Кроме того, если значение PosIdx отрицательное, то функция возвращает значение по модулю, что уж совсем странно.
Magically yours
Raistlin
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Значение, возвращаемое panel.setposidx()

Post by John Doe »

Raistlin wrote:логичнее было бы возвращать имя файлового объекта
Не забываем, что на панели могут присутствовать одноимённые элементы.
Raistlin wrote:если значение PosIdx отрицательное, то функция возвращает значение по модулю, что уж совсем странно.
Это не так:

Code: Select all

macro:post print(panel.setposidx(0,-1))
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: Значение, возвращаемое panel.setposidx()

Post by Raistlin »

John Doe wrote:
Raistlin wrote:логичнее было бы возвращать имя файлового объекта
Не забываем, что на панели могут присутствовать одноимённые элементы.
Не совсем понятен контраргумент. Допустим, у нас на панели выделены файлы. Сейчас, чтобы получить имя выделенного объекта, надо сделать

Code: Select all

panel.setposidx(0,1,1) %a=panel.item(0,0,0);
Если бы panel.setposidx() возвращала имя объекта, было бы достаточно

Code: Select all

%a=panel.setposidx(0,1,1);
John Doe wrote:Это не так
Это так, пусть не всегда:

Code: Select all

macro:post %a=panel.setposidx(0,-2,1); print(%a)
Magically yours
Raistlin
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Значение, возвращаемое panel.setposidx()

Post by John Doe »

Raistlin wrote:Это так, пусть не всегда:

Code: Select all

macro:post %a=panel.setposidx(0,-2,1); print(%a)
Не воспроизводится.

Hint: зависит от количества выделенных на панели файлов: если их нечётное количество, и курсор на среднем - только и только тогда будет "по модулю".
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: Значение, возвращаемое panel.setposidx()

Post by Raistlin »

John Doe wrote:
Raistlin wrote:Это так, пусть не всегда:

Code: Select all

macro:post %a=panel.setposidx(0,-2,1); print(%a)
Не воспроизводится.

Hint: зависит от количества выделенных на панели файлов: если их нечётное количество, и курсор на среднем - только и только тогда будет "по модулю".
У меня воспроизводится всегда. Вот что на панели:

Code: Select all

╔════════════ C:\Program Files\Far2 ════════13:23
║и         Имя          │          Имя          ║
║..                     │                       ║
║Addons                 │                       ║
║Documentation          │                       ║
║Encyclopedia           │                       ║
║FExcept                │                       ║
║Plugins                │                       ║
║Plugins.Disabled       │                       ║
║PluginSDK              │                       ║
║changelog              │                       ║
║changelog_eng          │                       ║
║ClearPluginsCache.cmd  │                       ║
║Far.exe                │                       ║
║far.map                │                       ║
║FarCze.lng             │                       ║
║FarEng.hlf             │                       ║
║FarEng.lng             │                       ║
║FarGer.lng             │                       ║
║FarHun.hlf             │                       ║
║FarHun.lng             │                       ║
║FarPol.lng             │                       ║
║FarRus.hlf             │                       ║
║FarRus.lng             │                       ║
║FarSpa.lng             │                       ║
║File_id.diz            │                       ║
║RestoreSettings.cmd    │                       ║
║SaveSettings.cmd       │                       ║
║                       │                       ║
║                       │                       ║
║                       │                       ║
║                       │                       ║
║                       │                       ║
║                       │                       ║
╟─────────── 869 827 байт в 4 файлах ───────────╢
║FarHun.lng           39597 11.01.11 02:00:54  1║
╚══════ 3 557 665 (18) ═══ 6 687 379 456 ═══════╝
Выделены far.map, FarEng.hlf, FarGer.lng, far.map, FarHun.lng. Куда курсор ни ставлю, какой PosIdx ни указываю, — возвращается значение по модулю.
Magically yours
Raistlin
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Значение, возвращаемое panel.setposidx()

Post by John Doe »

Виноват, неправильно объяснил. Имелся ввиду не курсор, а целевая позиция, указанная числом "-2".
Попробуйте любое другое число.

Советую перечитать описание функции, там всё есть.
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: Значение, возвращаемое panel.setposidx()

Post by Raistlin »

Не вижу ничего в описании... Да и целевую позицию (PosIdx?) менял, и файлов выделено четное число.
Или ты имеешь в виду, что отрицательное значение вообще никто и не обещал возвращать?
Magically yours
Raistlin
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Значение, возвращаемое panel.setposidx()

Post by John Doe »

Воспроизвелось.
Баг-с.

Проявляется только в режиме InSelection=1.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Значение, возвращаемое panel.setposidx()

Post by John Doe »

Подумалось: может для режима InSelection=1 имеет смысл возвращать абсолютный индекс? (т.е. индекс файла среди всех отображаемых, а не среди выделенных)
Post Reply

Return to “Обсуждение макросов”