« Screen et IRC » : différence entre les versions

De WikiBR
(→‎~/.irssi/config : Parce que des fois on a #beaucoup de fenetres)
Aucun résumé des modifications
 
(4 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{archive|Plus personne n'utilise l'IRC.}}
{{Attention| IRC c'est bien. [https://panix.binets.fr/w/titus/ Titus], c'est mieux. C'est en tout cas ce qu'on te conseille d'utiliser.}}
{{menu IRC}}
== Introduction ==
== Introduction ==
C'est important de venir sur IRC chatter avec les membres du BR. Cela permet de discuter avec les autres BRmen, ce qui en plus d'être sympathique, est quand même quelque chose de parfois fondamental dans le travail de BRmen (quel qu'il soit), et donc dans le bon fonctionnement du BR de manière plus générale. Par ailleurs, on peut y trouver des anciens souvent disponibles, qui sont assez pratiques lorsqu'on a des questions. Le but de cet article est d'expliquer comment utiliser IRC comme un vrai BRman (ou une vraie BRwoman).
C'est important de venir sur IRC chatter avec les membres du BR. Cela permet de discuter avec les autres BRmen, ce qui en plus d'être sympathique, est quand même quelque chose de parfois fondamental dans le travail de BRmen (quel qu'il soit), et donc dans le bon fonctionnement du BR de manière plus générale. Par ailleurs, on peut y trouver des anciens souvent disponibles, qui sont assez pratiques lorsqu'on a des questions. Le but de cet article est d'expliquer comment utiliser IRC comme un vrai BRman (ou une vraie BRwoman).
Ligne 126 : Ligne 132 :
   #  { name = "#ailleurs"; chatnet = "RezoSup"; autojoin = "yes"; },
   #  { name = "#ailleurs"; chatnet = "RezoSup"; autojoin = "yes"; },
   #TODO:Check if wanted#  
   #TODO:Check if wanted#  
 
   #  { name = "#poly.org"; chatnet = "Freenode"; autojoin = "yes"; },
   #  { name = "#poly.org"; chatnet = "Freenode"; autojoin = "yes"; },
   { name = "#archlinux"; chatnet = "RezoSup"; autojoin = "yes"; },
   { name = "#archlinux"; chatnet = "RezoSup"; autojoin = "yes"; },
Ligne 420 : Ligne 426 :
  logs = { };
  logs = { };
  ignores = ( );
  ignores = ( );
[[Catégorie:IRC]]

Version actuelle datée du 18 mars 2023 à 22:30

Warning.png Article archivé.
Plus personne n'utilise l'IRC.
Warning.png
Warning.png Attention : IRC c'est bien. Titus, c'est mieux. C'est en tout cas ce qu'on te conseille d'utiliser.

Introduction

C'est important de venir sur IRC chatter avec les membres du BR. Cela permet de discuter avec les autres BRmen, ce qui en plus d'être sympathique, est quand même quelque chose de parfois fondamental dans le travail de BRmen (quel qu'il soit), et donc dans le bon fonctionnement du BR de manière plus générale. Par ailleurs, on peut y trouver des anciens souvent disponibles, qui sont assez pratiques lorsqu'on a des questions. Le but de cet article est d'expliquer comment utiliser IRC comme un vrai BRman (ou une vraie BRwoman).

screen ? moaz ? IRC ? Petit tour d'horizon pour ceux qui sont déjà perdus

Tu peux trouver plus d'infos sur l'utilisation d'IRC à l'X sur le WikiX ; voici juste un résumé de ce qui est utile à savoir : pour utiliser IRC, il faut se connecter à un serveur (ici, le serveur IRC du BR) par un logiciel que l'on appelle un client IRC. Les gens normaux utilisent un client IRC directement sur leur ordinateur pour se connecter à un serveur IRC (cf la page du WikiX) ; mais au BR, on fait ça de façon un peu plus contournée mais beaucoup plus pratique - comme tu le verras par la suite. D'où cette page qui sert à expliquer cette méthode, dont je te conseille l'utilisation, quel que soit ton degré d'affinité avec les ordinateurs - elle n'est pas plus compliquée que la méthode normale et le gain est énorme.

Continuons notre tour d'horizon : screen est un logiciel qui permet de laisser fonctionner une session sur une machine distante, même lorsqu'on n'est plus en train d'utiliser cette machine (entre autres et en un peu simplifié, mais c'est cette fonctionnalité précise qui nous intéressera ici). L'idée, en l'occurrence, c'est de pouvoir laisser tourner un client IRC sur une machine du BR (et pas sur son ordinateur !), de façon à ne pas se déconnecter d'IRC lorsqu'on éteint son ordi (puisque le client IRC est sur la machine du BR, et pas sur son ordi personnel). On se connecte alors à la machine du BR pour utiliser le client IRC qui y tourne ; donc en gros, tout se déroule comme si on utilisait un client IRC sur son ordinateur, sauf qu'on utilise à la place un logiciel pour se connecter à une machine du BR et utiliser le client IRC qui fonctionne déjà sur cette machine, avec l'avantage que cette machine là ne s'éteint jamais (en principe). Cet avantage te parait peut-être minime, mais il est en fait assez fondamental : comme tout le monde n'est pas devant son ordinateur en même temps, il permet de pouvoir tenir des discussions sur IRC sans avoir à se déconnecter en plein milieu de la discussion parce qu'on va en cours ou parce que son ordi ne marche plus ; par ailleurs, de façon équivalente, il permet de garder l'historique des conversations à disposition sans passer par les logs. Enfin, de plus, il permet aussi de pouvoir accéder au client IRC par n'importe quel ordinateur qui peut se connecter à la machine du BR (donc n'importe quel ordinateur qui se trouve sur le platâl, ou même un smartphone qui se connecte via le wi-fi de la DSI... c'est une façon comme une autre de s'occuper en conf DFHM), et retrouver ainsi ses discussions sur IRC même si on utilise pas son propre ordinateur (enfin, il faut quand même faire attention lorsqu'on utilise un ordinateur public).

Et pour finir, moaz, c'est le petit nom de la machine du BR qui va héberger ton screen et ton client IRC persistant, et à laquelle tu vas se connecter pour les retrouver. Ainsi, pour résumer ce tour d'horizon, créer un screen sur moaz, cela te permet de laisser tourner ton client IRC (en l'occurrence irssi) tout le temps, et y accéder quand tu veux (voire d'où tu veux).

Se connecter sur moaz

La connexion à moaz est la première étape à suivre. Pour se connecter à moaz, il y faut un compte ; en principe, on te l'a déjà créé, et si ce n'est pas le cas (ou si tu n'en sais rien), contacte un root (genre ton prez, il aime ça). Maintenant, la procédure pour se connecter à moaz est très simple et tu l'as peut-être même déjà suivie dans un autre cadre : il s'agit rigoureusement de la même que celle expliquée ici pour accéder en ssh (id est juste ouvrir une console) à un ordi des salles infos, sauf qu'à la place du nom de l'ordinateur de la salle info tu mets "moaz". Donc avec windows cela revient juste à lancer PuTTY, taper "moaz" pour le nom d'hôte, vérifier que le mode de connexion "SSH" est bien sélectionné, et cliquer sur "Open" ; sous Linux, cela revient à taper ssh nom_d_utilisateur_sur_moaz@moaz ; sous mac, je te laisse deviner.

Utilisation de screen avec irssi

Une fois connecté sur moaz, lance screen. On arrive à une petite subtilité. Comme tu le sais maintenant, screen permet de lancer une session qui continue d'exister sur moaz une fois qu'on soit parti ; donc si tu as déjà lancé screen avant, et que tu te connectes sur moaz plus tard, il ne faut pas le lancer une seconde fois, il faut rejoindre la session déjà lancée. Par contre si tu n'as jamais lancé screen avant, il faut bien créer une session...

La commande suivante fait ce qu'il faut : si le screen irc (on pourrait choisir d'appeler son screen n'importe comment, ou de ne pas le nommer) n'existe pas, il est crée ; si le screen existe on le ré-attache (on le rejoint).

$ screen -RDU irc

Ceci étant fait, tu es maintenant dans ta session screen ; partant de là, soit tu vois déjà IRC (si tu as rejoins une session qui existait déjà, et où irssi était déjà lancé, ce qui devrait généralement être le cas), soit tu ne vois pas IRC (si tu viens de lancer screen pour la première fois) et pour le lancer il te suffit de taper

$ irssi

Et hop, maintenant tu es connecté à IRC ! Bienvenue !

Déconnexion

Lorsqu'on souhaite se déconnecter de moaz (pour redémarrer son ordi perso par exemple), il faut "détacher" le screen, avec C-a d (ça veut dire appuyer sur Ctrl et a en même temps, relâcher, puis appuyer sur d), ce qui ramène à la console de moaz depuis laquelle on peut fermer la session sur moaz (avec C-d sous linux, plus prosaïquement en fermant PuTTY sous Windows). La session screen et donc le client IRC irssi continuent alors à tourner sur moaz alors qu'on est déconnecté. Pour revenir, il suffit de se reconnecter à moaz puis de rejoindre le screen (mais tu sais déjà faire tout cela, non ?).

Résumé

Si tu as déjà compris le principe d'utiliser screen et de te connecter à IRC et tout, ou si tu t'en fous et que tu veux juste aller vite, voici un résumé des actions à faire pour se connecter à IRC :

  1. Se connecter à moaz (PuTTY / $ssh login@moaz / ...)
  2. Rattacher ( = rejoindre) ta session screen avec $ screen -RD irc
  3. Éventuellement, lancer irssi avec $ irssi s'il n'est pas déjà en train de tourner
  4. Enjoy chatting

Articles connexes

La page screen contient des informations plus détaillées sur screen.

Références externes

/window new split
/window name hilight
/window size 6

OU :

/window new hidden
/window name hilight

Fichiers de config

Voilà des fichiers de config pour irssi et screen :

~/.screenrc

bell_msg "^G Bell in window %n"
autodetach on
startup_message off
nonblock on
vbell on
defutf8 on
defscrollback 1000

caption always
hardstatus string "%?%F%{= kG}%:%{= Wk}%? [$USER@%H] %n : %t"


# Always show lastline
caption string "%{= g}[ %{G}${USER}@%H%{g} ][%= %{= w}%?%-Lw%?%{r}(%{W}%n*%f %t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %d/%m %{W}%c:%s %{g}][%{Y}%l%{g}]%{=b C}%{W}"

# Allow scrollback in xterm
termcap xterm* LP
termcapinfo xterm ti@:te@

~/.irssi/config

servers = (
 {
   address = "ircserver";
   chatnet = "RezoSup";
   port = "6767";
   use_ssl = "yes";
   ssl_verify = "no";
   autoconnect = "yes";
   no_proxy = "yes";
 },
 {
   address = "irc.freenode.net";
   chatnet = "FreeNode";
   port = "6667";
   autoconnect = "yes";
 }
);

chatnets = {
 RezoSup = {
   type = "IRC";
   nick = "Arthur";
   autosendcmd = "/^msg nickserv IDENTIFY ******;";
 };
 FreeNode = {
   type = "IRC";
   nick = "ArthurD";
   autosendcmd = "/^msg nickserv identify ******;";
 };
};

channels = (
 { name = "#root-br"; chatnet = "RezoSup"; autojoin = "yes"; },
 { name = "#br-actif"; chatnet = "RezoSup"; autojoin = "yes"; },
 { name = "#br2k9"; chatnet = "RezoSup"; autojoin = "yes"; },
 { name = "#frankiz"; chatnet = "RezoSup"; autojoin = "yes"; },
 { name = "#news-br"; chatnet = "RezoSup"; autojoin = "yes"; },
 { name = "#web-br"; chatnet = "RezoSup"; autojoin = "yes"; },
 { name = "#br"; chatnet = "RezoSup"; autojoin = "yes"; },
 { name = "#irc-br"; chatnet = "RezoSup"; autojoin = "yes"; },
 { name = "#opers"; chatnet = "RezoSup"; autojoin = "yes"; },
 { name = "#x"; chatnet = "RezoSup"; autojoin = "yes"; },
 { name = "#federez"; chatnet = "RezoSup"; autojoin = "yes"; },
 #  { name = "#ascii"; chatnet = "RezoSup"; autojoin = "yes"; },
 #  { name = "#admin-windows"; chatnet = "RezoSup"; autojoin = "yes"; },
 #  { name = "#infobr"; chatnet = "RezoSup"; autojoin = "yes"; },
 #  { name = "#xnet"; chatnet = "RezoSup"; autojoin = "yes"; },
 #  { name = "#ailleurs"; chatnet = "RezoSup"; autojoin = "yes"; },
 #TODO:Check if wanted# 

 #  { name = "#poly.org"; chatnet = "Freenode"; autojoin = "yes"; },
 { name = "#archlinux"; chatnet = "RezoSup"; autojoin = "yes"; },
 { name = "#archlinux-fr"; chatnet = "Freenode"; autojoin = "yes"; },
 #  { name = "#gentoo"; chatnet = "Freenode"; autojoin = "yes"; }
 #  { name = "#physique"; chatnet = "RezoSup"; autojoin = "yes"; },
 #  { name = "#bural-br"; chatnet = "RezoSup"; autojoin = "yes"; },
 #  { name = "#resel"; chatnet = "RezoSup"; autojoin = "yes"; },
 #  { name = "#boulets"; chatnet = "RezoSup"; autojoin = "yes"; },
 #  { name = "#pi_perceptron"; chatnet = "RezoSup"; autojoin = "yes"; },
 #  { name = "#pendaison"; chatnet = "RezoSup"; autojoin = "yes"; },
 #  { name = "#br-vieux"; chatnet = "RezoSup"; autojoin = "yes"; },
 #  { name = "#br-private"; chatnet = "RezoSup"; autojoin = "yes"; },
 #  { name = "#channel"; chatnet = "freenode"; autojoin = "yes"; },
);

aliases = {
 J = "join";
 WJOIN = "join -window";
 WQUERY = "query -window";
 LEAVE = "part";
 BYE = "quit";
 EXIT = "quit";
 SIGNOFF = "quit";
 DESCRIBE = "action";
 DATE = "time";
 HOST = "userhost";
 LAST = "lastlog";
 SAY = "msg *";
 WI = "whois";
 WII = "whois $0 $0";
 WW = "whowas";
 W = "who";
 N = "names";
 M = "msg";
 T = "topic";
 C = "clear";
 CL = "clear";
 K = "kick";
 KB = "kickban";
 KN = "knockout";
 BANS = "ban";
 B = "ban";
 MUB = "unban *";
 UB = "unban";
 IG = "ignore";
 UNIG = "unignore";
 SB = "scrollback";
 UMODE = "mode $N";
 WC = "window close";
 WN = "window new hide";
 SV = "say Irssi $J ($V) - http://irssi.org/";
 GOTO = "sb goto";
 CHAT = "dcc chat";
 RUN = "SCRIPT LOAD";
 UPTIME = "eval exec - expr `date +%s` - \\$F | awk '{print \"Irssi uptime: \"int(\\\\\\$1/3600/24)\"d \"int(\\\\\\$1/3600%24)\"h \"int(\\\\\\$1/60%60)\"m \"int(\\\\\\$1%60)\"s\" }'";
 CALC = "exec - if which bc &>/dev/null\\; then echo '$*' | bc | awk '{print \"$*=\"$$1}'\\; else echo bc was not found\\; fi";
 SBAR = "STATUSBAR";
 INVITELIST = "mode $C +I";
 Q = "QUERY";
 "MANUAL-WINDOWS" = "set use_status_window off;set autocreate_windows off;set autocreate_query_level none;set autoclose_windows off;set reuse_unused_windows on;save";
 EXEMPTLIST = "mode $C +e";
 ATAG = "WINDOW SERVER";
 ADDALLCHANNELS = "script exec foreach my \\$channel (Irssi::channels()) { Irssi::command(\"channel add -auto \\$channel->{name} \\$channel->{server}->{tag} \\$channel->{key}\")\\;}";
};

statusbar = {
 # formats:
 # when using {templates}, the template is shown only if it's argument isn't
 # empty unless no argument is given. for example {sb} is printed always,
 # but {sb $T} is printed only if $T isn't empty.
 items = {
   # start/end text in statusbars
   barstart = "{sbstart}";
   barend = "{sbend}";
   topicbarstart = "{topicsbstart}";
   topicbarend = "{topicsbend}";
   # treated "normally", you could change the time/user name to whatever
   time = "{sb $Z}";
   user = "{sb {sbnickmode $cumode}$N{sbmode $usermode}{sbaway $A}}";
   # treated specially .. window is printed with non-empty windows,
   # window_empty is printed with empty windows
   window = "{sb $winref:$itemname{sbmode $M}}";
   window_empty = "{sb $winref{sbservertag $tag}}";
   prompt = "{prompt $[.15]itemname}";
   prompt_empty = "{prompt $winname}";
   topic = " $topic";
   topic_empty = " Irssi v$J - http://irssi.org/help/";
   # all of these treated specially, they're only displayed when needed
   lag = "{sb Lag: $0-}";
   act = "{sb Act: $0-}";
   more = "-- more --";
 };
 # there's two type of statusbars. root statusbars are either at the top
 # of the screen or at the bottom of the screen. window statusbars are at
 # the top/bottom of each split window in screen.

 default = {
   # the "default statusbar" to be displayed at the bottom of the window.
   # contains all the normal items.
   window = {
     disabled = "no";
     # window, root
     type = "window";
     # top, bottom
     placement = "bottom";
     # number
     position = "1";
     # active, inactive, always
     visible = "active";
     # list of items in statusbar in the display order
     items = {
       barstart = { priority = "100"; };
       time = { };
       user = { };
       window = { };
       window_empty = { };
       lag = { priority = "-1"; };
       more = { priority = "-1"; alignment = "right"; };
       barend = { priority = "100"; alignment = "right"; };
       usercount = { };
     };
   };
   # statusbar to use in inactive split windows
   window_inact = {
     type = "window";
     placement = "bottom";
     position = "1";
     visible = "inactive";
     items = {
       barstart = { priority = "100"; };
       window = { };
       window_empty = { };
       more = { priority = "-1"; alignment = "right"; };
       barend = { priority = "100"; alignment = "right"; };
     };
   };
   # we treat input line as yet another statusbar :) It's possible to
   # add other items before or after the input line item.
   prompt = {
     type = "root";
     placement = "bottom";
     # we want to be at the bottom always
     position = "100";
     visible = "always";
     items = {
       prompt = { priority = "-1"; };
       prompt_empty = { priority = "-1"; };
       # treated specially, this is the real input line.
       input = { priority = "10"; };
     };
   };
   # topicbar
   topic = {
     type = "root";
     placement = "top";
     position = "1";
     visible = "always";
     items = {
       topicbarstart = { priority = "100"; };
       topic = { };
       topic_empty = { };
       topicbarend = { priority = "100"; alignment = "right"; };
     };
   };
   awl_0 = {
     items = {
       barstart = { priority = "100"; };
       awl_0 = { };
       barend = { priority = "100"; alignment = "right"; };
     };
   };
 };
};

settings = {
 core = {
   real_name = "Arthur Darcet";
   user_name = "Arthur";
   nick = "Arthur";
   recode = "yes";
   recode_autodetect_utf8 = "yes";
   recode_out_default_charset = "UTF-8";
   recode_fallback = "CP1252";
   server_reconnect_time = "10";
   quit_message = "";
   timestamp_format = "%d|%H:%M:%S";
   #    use_proxy = "yes";
   #    proxy_address = "129.104.247.2";
   #    proxy_port = "8080";
   #    proxy_string = "CONNECT %s:%d HTTP/1.0\012\012";
 };
 "fe-common/core" = {
   autolog = "yes";
   autolog_path = "~/irclogs/%Y/$tag-$0-%m-%d.log";
   term_charset = "utf-8";
   timestamps = "yes";
   show_nickmode = "yes";
   show_nickmode_empty = "yes";
   theme = "mytheme";
   bell_beeps = "yes";
   beep_msg_level = "HILIGHT";
   beep_when_window_active = "yes";
   beep_when_away = "yes";
   completion_char = " :";
 };
 "irc/core" = { lag_max_before_disconnect = "300"; knockout_time = "5"; };
 "fe-text" = { indent = "8"; actlist_sort = "refnum"; };
 "perl/core/scripts" = {
   autorejoin_channels = "#root-br #br2k9 #br #x #news-br #frankiz #web-br #br-actif #federez #ascii #archlinux #archlinux-fr";
   nicklist_automode = "screen";
   awl_display_nokey_active = "$Q:$H$C$S";
   awl_display_key = "$Q|$H$C$S";
   awl_display_key_active = "$Q:$H$C$S";
   awl_display_nokey = "$Q|$H$C$S";
 };
};

hilights = (
 #  { text = "root"; nick = "yes"; word = "yes"; fullword = "no"; },
 #  {
 #    text = "CRIT";
 #    color = "%Y";
 #    nick = "no";
 #    word = "yes";
 #    fullword = "yes";
 #    channels = ( "#root-br" );
 #  },
 #  { text = "magnan"; nick = "yes"; word = "yes"; fullword = "yes"; },
 { text = "root"; nick = "yes"; word = "yes"; fullword = "yes"; },
 { text = "2k9"; nick = "yes"; word = "yes"; fullword = "yes"; },
 { text = "2009"; nick = "yes"; word = "yes"; fullword = "yes"; }
);

keyboard = (
 { key = "meta-a"; id = "change_window"; data = "2"; },
 { key = "meta-z"; id = "change_window"; data = "3"; },
 { key = "meta-e"; id = "change_window"; data = "4"; },
 { key = "meta-r"; id = "change_window"; data = "5"; },
 { key = "meta-t"; id = "change_window"; data = "6"; },
 { key = "meta-y"; id = "change_window"; data = "7"; },
 { key = "meta-u"; id = "change_window"; data = "8"; },
 { key = "meta-i"; id = "change_window"; data = "9"; },
 { key = "meta-o"; id = "change_window"; data = "10"; },
 { key = "meta-p"; id = "change_window"; data = "11"; },
 { key = "meta-q"; id = "change_window"; data = "12"; },
 { key = "meta-s"; id = "change_window"; data = "13"; },
 { key = "meta-d"; id = "change_window"; data = "14"; },
 { key = "meta-f"; id = "change_window"; data = "15"; },
 { key = "meta-g"; id = "change_window"; data = "16"; },
 { key = "meta-h"; id = "change_window"; data = "17"; },
 { key = "meta-j"; id = "change_window"; data = "18"; },
 { key = "meta-k"; id = "change_window"; data = "19"; },
 { key = "meta-l"; id = "change_window"; data = "20"; },
 { key = "meta-m"; id = "change_window"; data = "21"; }
 { key = "meta-w"; id = "change_window"; data = "20"; },
 { key = "meta-x"; id = "change_window"; data = "20"; },
 { key = "meta-c"; id = "change_window"; data = "20"; },
 { key = "meta-v"; id = "change_window"; data = "20"; },
 { key = "meta-b"; id = "change_window"; data = "20"; },
 { key = "meta-n"; id = "change_window"; data = "20"; },
 { key = "meta-A"; id = "change_window"; data = "20"; },
 { key = "meta-Z"; id = "change_window"; data = "20"; },
 { key = "meta-E"; id = "change_window"; data = "20"; },
 { key = "meta-R"; id = "change_window"; data = "20"; },
 { key = "meta-T"; id = "change_window"; data = "20"; },
 { key = "meta-Y"; id = "change_window"; data = "20"; },
 { key = "meta-U"; id = "change_window"; data = "20"; },
 { key = "meta-I"; id = "change_window"; data = "20"; },
 { key = "meta-O"; id = "change_window"; data = "20"; },
 { key = "meta-P"; id = "change_window"; data = "20"; },
 { key = "meta-Q"; id = "change_window"; data = "20"; },
 { key = "meta-S"; id = "change_window"; data = "20"; },
 { key = "meta-D"; id = "change_window"; data = "20"; },
 { key = "meta-F"; id = "change_window"; data = "20"; },
 { key = "meta-G"; id = "change_window"; data = "20"; },
 { key = "meta-H"; id = "change_window"; data = "20"; },
 { key = "meta-J"; id = "change_window"; data = "20"; },
 { key = "meta-K"; id = "change_window"; data = "20"; },
 { key = "meta-L"; id = "change_window"; data = "20"; },
 { key = "meta-M"; id = "change_window"; data = "20"; },
 { key = "meta-N"; id = "change_window"; data = "20"; },
 { key = "meta-O"; id = "change_window"; data = "20"; },
 { key = "meta-P"; id = "change_window"; data = "20"; },
 { key = "meta-W"; id = "change_window"; data = "20"; },
 { key = "meta-X"; id = "change_window"; data = "20"; },
 { key = "meta-C"; id = "change_window"; data = "20"; },
 { key = "meta-V"; id = "change_window"; data = "20"; },
 { key = "meta-B"; id = "change_window"; data = "20"; },
 { key = "meta-N"; id = "change_window"; data = "20"; }
);

logs = { };
ignores = ( );