Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

3 815 Posts in 851 Topics- by 626 Members - Latest Member: vbnv0804

23 February 2012, 07:14
Select Language English | Russian ru | German
Main PageIRC Client KVIrc forumRussian talksСкриптинг (Moderator: runkoff)Переключение окон по Ctrl+Tab
Pages: [1]
Print
Author Topic: Переключение окон по Ctrl+Tab  (Read 4050 times)
0 Members and 1 Guest are viewing this topic.
kns
Постоялец
***

Репутация: 36
Gender: Male
Posts: 214


View Profile WWW
« on: 24 March 2008, 20:26 »

Как истнный виндузятник, привык к собственно сабжу.
Простенький экшн:
Code:
action.create -t=generic -k="Ctrl+Tab" ("window_s","Переключение окон","Переключает окна каналов","","")
{
%a = $window.list(all,all)
for (%i = 0;%i < $length(%a); %i++)
if (%a[%i] == $window)
{
if (%i == $($length(%a) - 1)) { window.activate %a[0]; }
else  { window.activate %a[$(%i+1)]; }
break;
}
}
Недочетов куча, конечно.
Потому вопрос. Как реализовать переключение между _всеми_ окнами (help, debug,channel etc), во всех контекстах, в том порядке, в каком они находятся в дереве? Smiley

UPD:
Кое-что все-таки сделал.
Поигрался с обратным порядком переключения. ИМХО, не нужно это.
Пермлинк на скрипт.
« Last Edit: 26 March 2008, 21:50 by kns » Logged
kns
Постоялец
***

Репутация: 36
Gender: Male
Posts: 214


View Profile WWW
« Reply #1 on: 24 March 2008, 20:58 »

Для одного контекста. =)
Code:
action.create -t=generic -k="Ctrl+Tab" ("window_s","Переключение окон","Переключает окна каналов","","")
{
%a = $window.list(all)
for (%i = 0;%i < $length(%a); %i++)
if (%a[%i] == $window)
{
if (%i == $($length(%a) - 1)) { window.activate %a[0]; }
else  { window.activate %a[$(%i+1)]; }
break;
}
}
Logged
kns
Постоялец
***

Репутация: 36
Gender: Male
Posts: 214


View Profile WWW
« Reply #2 on: 25 March 2008, 21:11 »

В общем, пока сделал так:
Code:
foreach (%b,$window.list(channel)) %c <+ $chan.name(%b)
foreach (%b,$sort(%c)) %a <+ $channel(%b)
for (%b = 0;%b < $length(%a); %b++)
if (%a[%b] == $window)
{
if (%b == $($length(%a) - 1)) { window.activate %a[0]; }
else  { window.activate %a[$(%b+1)]; }
break;
}
« Last Edit: 25 March 2008, 21:13 by kns » Logged
kns
Постоялец
***

Репутация: 36
Gender: Male
Posts: 214


View Profile WWW
« Reply #3 on: 26 March 2008, 20:26 »

В итоге сделал так:
Code:
action.create -t=generic -k="Ctrl+Tab" ("window_s","wswitch","Переключает окна каналов","coresmall/kcs_transfer.png","transfer")
{
%a = $window.list(console)
%b = $window.list(channel)
#echo %b
for (%i = 0; %i < $length(%b); %i++) %b[%i] = $chan.name(%b[%i])
%b = $sort(%b)
for (%i = 0; %i < $length(%b); %i++) %b[%i] = $channel(%b[%i])
#echo %b
%c = $window.list(query)
%d = $window.list(dccchat)


%a <+ %b
%a <+ %c
%a <+ %d
unset %b,%c,%d
for (%b = 0;%b < $length(%a); %b++)
if (%a[%b] == $window)
{
if (%b == $($length(%a) - 1)) { window.activate %a[0]; }
else  { window.activate %a[$(%b+1)]; }
break;
}
}
Легко добавляются новые типы окон и меняется их порядок.
Но блин, как внести туда хелпы, тестеры, алиасы, ивентсы...
« Last Edit: 26 March 2008, 20:36 by kns » Logged
mechmind
Пользователь
**

Репутация: 8
Posts: 60


View Profile
« Reply #4 on: 1 April 2008, 12:20 »

хехе.
Code:
%i=10;
while($target(%i)) %i *= 2;
while(!$target(%i)) %i--;
в %i будет лежать окно с последним номером...
Logged

Тысячи лет поиска и все впустую, 001010011101011...
kns
Постоялец
***

Репутация: 36
Gender: Male
Posts: 214


View Profile WWW
« Reply #5 on: 1 April 2008, 15:00 »

Хм...
Код, конечно, маленький, но...
1) Вываливается куча ворнингов:
Quote
[KVS] Warning: Window with ID '14' not found, returning empty string
[KVS]   in script context "action::window_s", line 26, near character 8
2)
Code:
if ($window < %i) window.activate $($window+1)
else window.activate 1
Cортирует по ID, а извращался я для сортировки по имени канала. Smiley
Причем  самое интересное, что на окне с id 10 он стопорнулся.
Пришлось вставлять такое:
Code:
%a = $window
if ($window < %i) { %a++; window.activate %a; }
else { window.activate 1; }
При этом 10-е окошко пропускается. Smiley
Но это мелочи. Главное - ворнинги и сортировка.
P.S. Спасибо за $target. %)
Logged
Pages: [1]
Print
Jump to:  

Theme orange-lt created by panic