Your IP : 216.73.216.48
if (word(2 $loadinfo()) != [pf]) { load -pf $word(1 $loadinfo());return };
# This script is supposed to work on both epic4 and epic5.
#
# Mix between altchan and screen. I didn't know about the screen script,
# so I kinda remade it - but with a slightly different touch
#
# Script gives the user the possibility to do various tasks using
# the ^w key (create, destroy, swap windows), and swap windows
# using meta-1234567890 (esc-..., alt-...)
#
# ^w tries to mimic screen.
#
# - howl, 2007 (howl@epicsol.org)
package E.SCREEN;
alias screen.window_swap_or_last (win) {
window ${(winnum($win) == winnum()) ? [swap last] : [refnum_or_swap $win]};
};
alias screen.new_window {
window new hide swap last;
};
alias screen.kill_window {
input_char "Really kill window $winnum()${winnam() != [] ? [ \[$winnam()\]] : []}? [y/N]"
\{if \([\$0\] == [y]\) \{window $winnum() kill\}\};
};
alias screen.quit_client {
input_char "Really quit client? [y/N]"
\{if \([\$0\] == [y]\) \{quit User ipressed ^W^D\}\};
};
alias screen.window_xon {
window hold_mode on;
};
alias screen.window_xoff {
window hold_mode off;
};
alias screen.window_hide {
window hide;
};
alias screen.window_hide_others {
window hide_others;
};
alias screen.split_window {
for w in ($winrefs()) {
if (windowctl(GET $w visible) == 0) {
window show $w swap last;
return;
};
};
xecho -w No window to split to!;
};
alias screen.open_prompt {
input : {
switch ($0) {
('*)
{sendline / $after(' $*)};
(//*) (/*)
{sendline $*};
(*)
{sendline /$*};
};
};
};
alias screen.search_back {
input "/" {
^local pos;
@ pos = windowctl(get 0 scrollback_distance);
window search_back "$*";
if (pos == windowctl(get 0 scrollback_distance)) {
};
};
};
alias screen.window_swappable_toggle {
window swappable toggle;
};
alias screen.window_skip_toggle {
window skip toggle;
};
# These functions should permit you to move away from and
# swap windows from windows that aren't swappable.
alias screen.my_swap_previous_window {
window prev;
};
alias screen.my_swap_next_window {
window next;
};
alias screen.my_swap_last_window {
window swap last;
};
alias screen.init {
^local key,num,k;
@ key = [^w];
@ bindctl(FUNCTION WINDOW_SWAP_OR_LAST CREATE screen.window_swap_or_last);
@ bindctl(FUNCTION NEW_WINDOW CREATE screen.new_window);
@ bindctl(FUNCTION KILL_WINDOW CREATE screen.kill_window);
@ bindctl(FUNCTION WINDOW_XON CREATE screen.window_xon);
@ bindctl(FUNCTION WINDOW_XOFF CREATE screen.window_xoff);
@ bindctl(FUNCTION WINDOW_HIDE CREATE screen.window_hide);
@ bindctl(FUNCTION WINDOW_HIDE_OTHERS CREATE screen.window_hide_others);
@ bindctl(FUNCTION SPLIT_WINDOW CREATE screen.split_window);
@ bindctl(FUNCTION OPEN_PROMPT CREATE screen.open_prompt);
@ bindctl(FUNCTION SEARCH_BACK CREATE screen.search_back);
@ bindctl(FUNCTION QUIT_CLIENT CREATE screen.quit_client);
@ bindctl(FUNCTION MY_SWAP_NEXT_WINDOW CREATE screen.my_swap_next_window);
@ bindctl(FUNCTION MY_SWAP_PREVIOUS_WINDOW CREATE screen.my_swap_previous_window);
@ bindctl(FUNCTION MY_SWAP_LAST_WINDOW CREATE screen.my_swap_last_window);
@ bindctl(FUNCTION WINDOW_SWAPPABLE_TOGGLE CREATE screen.window_swappable_toggle);
@ bindctl(FUNCTION WINDOW_SKIP_TOGGLE CREATE screen.window_skip_toggle);
for num in (1 2 3 4 5 6 7 8 9 0 + \\) {
@ k = (num == 0 ? 10 : num);
@ k = (num == [+] ? 11 : k);
@ k = (num == [\\] ? 12 : k);
bind ^[$num window_swap_or_last $k;
bind ${key}${num} window_swap_or_last $k;
};
@ bindctl(sequence "$key " set my_swap_next_window);
@ bindctl(sequence "^@" set my_swap_next_window);
@ bindctl(sequence "$key^@" set my_swap_next_window);
@ bindctl(sequence "$key^n" set my_swap_next_window);
@ bindctl(sequence "$key>" set my_swap_next_window);
@ bindctl(sequence "^_" set my_swap_previous_window);
@ bindctl(sequence "$key^_" set my_swap_previous_window);
@ bindctl(sequence "$key^?" set my_swap_previous_window);
@ bindctl(sequence "$key<" set my_swap_previous_window);
@ bindctl(sequence "$key$key" set my_swap_last_window);
@ bindctl(sequence "$key^I" set next_window);
@ bindctl(sequence "${key}c" set new_window);
@ bindctl(sequence "${key}l" set refresh_screen);
@ bindctl(sequence "${key}L" set window_swappable_toggle);
@ bindctl(sequence "${key}^l" set window_skip_toggle);
@ bindctl(sequence "${key}s" set window_xon);
@ bindctl(sequence "${key}S" set split_window);
@ bindctl(sequence "${key}K" set kill_window);
@ bindctl(sequence "${key}^h" set window_hide);
@ bindctl(sequence "${key}Q" set window_hide_others);
@ bindctl(sequence "${key}q" set window_xoff);
@ bindctl(sequence "${key}v" set quote_character);
@ bindctl(sequence "${key}:" set open_prompt);
@ bindctl(sequence "${key}/" set search_back);
@ bindctl(sequence "${key}^D" set quit_client);
@ bindctl(sequence "${key}d" set quit_client);
alias winmove {return screen.winmove($*);};
^alias -screen.init;
};
alias screen.winswap (from,to, ...)
{
^local tmp;
@ tmp = [];
if (!isnumber($from) || !isnumber($to))
{
xecho -say -banner WinSwap requires numeric arguments;
return;
};
if (windowctl(GET $from REFNUM) == [])
{
xecho -say -banner No such window: $from;
return;
};
if (windowctl(GET $to REFNUM) == [])
{
xecho -say -banner No such window: $to;
return;
};
@ tmp = word(0 $revw($numsort($winrefs())));
@ tmp++;
screen.winmove $from $tmp;
screen.winmove $to $from;
screen.winmove $tmp $to;
};
alias screen.winmove (from,to, ...)
{
^local tmp;
@ tmp = [];
if (!isnumber($from) || !isnumber($to))
{
xecho -say -banner WinMove requires numeric arguments;
return;
};
if (windowctl(get $from refnum) == [])
{
xecho -say -banner No such window: $from;
return -1;
};
if (windowctl(get $to refnum) != [])
{
xecho -say -banner Window already exists: $from;
return -1;
};
if (chanwin($from) != [])
{
^window new hide;
@ tmp = word(1 $winrefs());
if (tmp == to)
{
^window new hide;
^window $tmp kill;
@ tmp = word(1 $winrefs());
}
^window $tmp server $windowctl(GET $from SERVER);
while (chanwin($from) != [])
{
^window $tmp channel "$chanwin($from)";
}
};
window $from number $to;
window refnum_or_swap $to;
if (tmp != [])
{
while (chanwin($tmp) != [])
{
^window $to channel "$chanwin($tmp)";
};
^window $tmp kill;
};
return $to;
};
screen.init;
# vim: filetype=