# Ukrainian translation to xchat # Copyright (C) 2004 Free Software Foundation, Inc # This file is distributed under the same license as the xchat package. # Maxim Dubovoy , 2003 # Maxim V. Dziumanenko , 2004-2007 # Oleksandr Kunytsia , 2004 # Sergey Tereschenko , 2009 # msgid "" msgstr "" "Project-Id-Version: xchat 2.8.6\n" "Report-Msgid-Bugs-To: www.xchat.org\n" "POT-Creation-Date: 2008-06-12 18:39+1000\n" "PO-Revision-Date: 2009-10-17 13:32+0300\n" "Last-Translator: Sergey Tereschenko \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/common/cfgfiles.c:354 msgid "Cannot create ~/.xchat2" msgstr "Не вдалося створити ~/.xchat2" #: src/common/cfgfiles.c:711 msgid "I'm busy" msgstr "Я зайнятий" #: src/common/cfgfiles.c:712 msgid "Leaving" msgstr "Залишаю" #: src/common/cfgfiles.c:759 msgid "" "* Running IRC as root is stupid! You should\n" " create a User Account and use that to login.\n" msgstr "" "* Запускати IRC як root це тупо! Краще додати\n" " звичайного користувача і входити ним в систему.\n" #: src/common/dcc.c:67 msgid "Waiting" msgstr "Очікування" #: src/common/dcc.c:68 msgid "Active" msgstr "Активний" #: src/common/dcc.c:69 msgid "Failed" msgstr "Помилка" #: src/common/dcc.c:70 msgid "Done" msgstr "Виконано" #: src/common/dcc.c:71 src/fe-gtk/menu.c:928 msgid "Connect" msgstr "З'єднання" #: src/common/dcc.c:72 msgid "Aborted" msgstr "Припинено" #: src/common/dcc.c:1886 src/common/outbound.c:2451 #, c-format msgid "Cannot access %s\n" msgstr "Немає доступу до %s\n" #: src/common/dcc.c:1887 src/common/text.c:1224 src/common/text.c:1262 #: src/common/text.c:1273 src/common/text.c:1280 src/common/text.c:1293 #: src/common/text.c:1310 src/common/text.c:1410 src/common/util.c:353 msgid "Error" msgstr "Помилка" #: src/common/dcc.c:2375 #, c-format msgid "%s is offering \"%s\". Do you want to accept?" msgstr "%s пропонує \"%s\". Прийняти?" #: src/common/dcc.c:2586 msgid "No active DCCs\n" msgstr "Немає активних каналів даних (DCC)\n" #: src/common/ignore.c:120 src/common/ignore.c:124 src/common/ignore.c:128 #: src/common/ignore.c:132 src/common/ignore.c:136 src/common/ignore.c:140 #: src/common/ignore.c:144 msgid "YES " msgstr "ТАК " #: src/common/ignore.c:122 src/common/ignore.c:126 src/common/ignore.c:130 #: src/common/ignore.c:134 src/common/ignore.c:138 src/common/ignore.c:142 #: src/common/ignore.c:146 msgid "NO " msgstr "НІ " #: src/common/ignore.c:377 #, c-format msgid "You are being CTCP flooded from %s, ignoring %s\n" msgstr "You are being CTCP flooded from %s, ignoring %s\n" #: src/common/ignore.c:402 #, c-format msgid "You are being MSG flooded from %s, setting gui_auto_open_dialog OFF.\n" msgstr "You are being MSG flooded from %s, setting gui_auto_open_dialog OFF.\n" #: src/common/notify.c:473 #, c-format msgid " %-20s online\n" msgstr " %-20s онлайн\n" #: src/common/notify.c:475 #, c-format msgid " %-20s offline\n" msgstr " %-20s офлайн\n" #: src/common/outbound.c:72 msgid "No channel joined. Try /join #\n" msgstr "Не зайшли на канал. Спробуйте /join #<канал>\n" #: src/common/outbound.c:78 msgid "Not connected. Try /server []\n" msgstr "Не підключено. Спробуйте /server <вузол> [<порт>]\n" #: src/common/outbound.c:338 #, c-format msgid "Already marked away: %s\n" msgstr "Вже позначений як \"відсутній\": %s\n" #: src/common/outbound.c:411 msgid "Already marked back.\n" msgstr "Вже позначений як \"повернувся\": %s\n" #: src/common/outbound.c:1777 msgid "I need /bin/sh to run!\n" msgstr "Для запуску необхідна програма /bin/sh !\n" #: src/common/outbound.c:2148 msgid "Commands Available:" msgstr "Доступні команди:" #: src/common/outbound.c:2162 msgid "User defined commands:" msgstr "Визначені користувачем команди:" #: src/common/outbound.c:2178 msgid "Plugin defined commands:" msgstr "Визначені у модулі команди:" #: src/common/outbound.c:2189 msgid "Type /HELP for more information, or /HELP -l" msgstr "" "Введіть /HELP <команда> щоб отримати докладнішу інформацію, або /HELP -l" #: src/common/outbound.c:2274 #, c-format msgid "Unknown arg '%s' ignored." msgstr "Невідомий аргумент '%s' проігноровано." #: src/common/outbound.c:3223 msgid "No such plugin found.\n" msgstr "Модуль не знайдено.\n" #: src/common/outbound.c:3228 src/fe-gtk/plugingui.c:186 msgid "That plugin is refusing to unload.\n" msgstr "Не вдалося вивантажити модуль.\n" #: src/common/outbound.c:3497 msgid "ADDBUTTON , adds a button under the user-list" msgstr "ADDBUTTON <ім'я> <дія>, додати кнопку над списком користувачів" #: src/common/outbound.c:3499 msgid "ALLCHAN , sends a command to all channels you're in" msgstr "ALLCHAN <команда>, надіслати команду до всіх каналів, на які ви зайшли" #: src/common/outbound.c:3501 msgid "ALLCHANL , sends a command to all channels you're in" msgstr "ALLCHAN <команда>, надіслати команду до всіх каналів, на які ви зайшли" #: src/common/outbound.c:3503 msgid "ALLSERV , sends a command to all servers you're in" msgstr "ALLSERV , надіслати команду до всіх серверів, з якими ви з'єднані" #: src/common/outbound.c:3504 msgid "AWAY [], sets you away" msgstr "AWAY [<підстава>], встановити статус \"відсутній\"" #: src/common/outbound.c:3505 msgid "BACK, sets you back (not away)" msgstr "BACK, встановлює статус \"повернувся\" (не відсутній)" #: src/common/outbound.c:3507 msgid "" "BAN [], bans everyone matching the mask from the current " "channel. If they are already on the channel this doesn't kick them (needs " "chanop)" msgstr "" "BAN <маска> [<тип>], заборонити доступ до каналу всім, хто відповідає " "вказаній масці. Якщо користувачі вже з'єднані з каналом, вони не будуть " "відключені (для цього потрібно бути оператором каналу)" #: src/common/outbound.c:3508 msgid "CHANOPT [-quiet] []" msgstr "CHANOPT [-quiet] <змінна> [<значення>]" #: src/common/outbound.c:3510 msgid "CLEAR [ALL|HISTORY], Clears the current text window or command history" msgstr "" "CLEAR [ALL|HISTORY], очистити поточне текстове вікно або історію команд" #: src/common/outbound.c:3511 msgid "CLOSE, Closes the current window/tab" msgstr "CLOSE, закрити поточне вікно/вкладку" #: src/common/outbound.c:3514 msgid "COUNTRY [-s] , finds a country code, eg: au = australia" msgstr "" "COUNTRY [-s] <код|метасимвол>, знайти код країни, наприклад: au = australia" #: src/common/outbound.c:3516 msgid "" "CTCP , send the CTCP message to nick, common messages are " "VERSION and USERINFO" msgstr "" "CTCP <нікнейм> <повідомлення>, надіслати повідомлення CTCP до користувача " "із вказаним ім'ям, звичайними повідомленнями є VERSION та USERINFO" #: src/common/outbound.c:3518 msgid "" "CYCLE [], parts the current or given channel and immediately rejoins" msgstr "CYCLE [], залишити поточний канал та відразу повернутися" #: src/common/outbound.c:3520 msgid "" "\n" "DCC GET - accept an offered file\n" "DCC SEND [-maxcps=#] [file] - send a file to someone\n" "DCC PSEND [-maxcps=#] [file] - send a file using passive mode\n" "DCC LIST - show DCC list\n" "DCC CHAT - offer DCC CHAT to someone\n" "DCC PCHAT - offer DCC CHAT using passive mode\n" "DCC CLOSE example:\n" " /dcc close send johnsmith file.tar.gz" msgstr "" "\n" "DCC GET <нікнейм> - прийняти запропонований файл\n" "DCC SEND [-maxcps=#] <нікнейм> [файл] - надіслати комусь файл\n" "DCC PSEND [-maxcps=#] <нікнейм> [файл]- надіслати файл у пасивному " "режимі\n" "DCC LIST - показати список DCC\n" "DCC CHAT <нікнейм> - запропонувати розмову через DCC\n" "DCC CLOSE <тип> <нікнейм> <файл> приклад:\n" " /dcc close send johnsmith file.tar.gz" #: src/common/outbound.c:3532 msgid "" "DEHOP , removes chanhalf-op status from the nick on the current " "channel (needs chanop)" msgstr "" "DEHOP <нікнейм>, зняти статус напівоператор каналу (chanhalf-op) у особи " "на поточному каналі (потребує прав адміністратора каналу)" #: src/common/outbound.c:3534 msgid "DELBUTTON , deletes a button from under the user-list" msgstr "DELBUTTON <ім'я>, видалити кнопку зі списку користувачів" #: src/common/outbound.c:3536 msgid "" "DEOP , removes chanop status from the nick on the current channel " "(needs chanop)" msgstr "" "DEOP <нікнейм>, зняти права оператора (chanop) у вказаної особи на " "поточному каналі (потребує прав адміністратора каналу)" #: src/common/outbound.c:3538 msgid "" "DEVOICE , removes voice status from the nick on the current channel " "(needs chanop)" msgstr "" "DEVOICE <нікнейм>, зняти право голосу у вказаної особи на поточному " "каналі (потребує прав адміністратора каналу)" #: src/common/outbound.c:3539 msgid "DISCON, Disconnects from server" msgstr "DISCON, від'єднатися від сервера" #: src/common/outbound.c:3540 msgid "DNS , Finds a users IP number" msgstr "DNS <нік|вузол|ip>, знайти IP адресу користувача" #: src/common/outbound.c:3541 msgid "ECHO , Prints text locally" msgstr "ECHO <текст>, вивести текст на локальній машині" #: src/common/outbound.c:3544 msgid "" "EXEC [-o] , runs the command. If -o flag is used then output is " "sent to current channel, else is printed to current text box" msgstr "" "EXEC [-o] <команда>, виконати команду. Якщо використано параметр -o, вивід " "буде надіслано до поточного каналу, інакше він буде виведений в поточному " "вікні" #: src/common/outbound.c:3546 msgid "EXECCONT, sends the process SIGCONT" msgstr "EXECCONT, надіслати процесу сигнал SIGCONT" #: src/common/outbound.c:3549 msgid "" "EXECKILL [-9], kills a running exec in the current session. If -9 is given " "the process is SIGKILL'ed" msgstr "" "EXECKILL [-9], перервати виконання процесу у поточному сеансі. Якщо задано " "параметр -9 процес буде припинено за допомогою SIGKILL" #: src/common/outbound.c:3551 msgid "EXECSTOP, sends the process SIGSTOP" msgstr "EXECSTOP, надіслати процесу сигнал SIGSTOP" #: src/common/outbound.c:3552 msgid "EXECWRITE, sends data to the processes stdin" msgstr "EXECWRITE, надіслати дані в стандартний ввід процесу" #: src/common/outbound.c:3556 msgid "FLUSHQ, flushes the current server's send queue" msgstr "FLUSHQ, скинути поточну чергу відправлення на поточному сервері" #: src/common/outbound.c:3558 msgid "GATE [], proxies through a host, port defaults to 23" msgstr "GATE <вузол> [<порт>], під'єднуватися через проксі, типовий порт 23" #: src/common/outbound.c:3562 msgid "GHOST , Kills a ghosted nickname" msgstr "GHOST <нікнейм> <пароль>, знищити примарні превдоніми" #: src/common/outbound.c:3567 msgid "HOP , gives chanhalf-op status to the nick (needs chanop)" msgstr "" "HOP <нікнейм>, надати стан напівоператора (chanhalf-op) вказаній особі " "(потребує прав оператора)" #: src/common/outbound.c:3568 msgid "ID , identifies yourself to nickserv" msgstr "ID <пароль>, ідентифікація себе на nickserv" #: src/common/outbound.c:3570 msgid "" "IGNORE \n" " mask - host mask to ignore, eg: *!*@*.aol.com\n" " types - types of data to ignore, one or all of:\n" " PRIV, CHAN, NOTI, CTCP, DCC, INVI, ALL\n" " options - NOSAVE, QUIET" msgstr "" "IGNORE <маска> <типи..> <параметри..>\n" " маска - маска ігнорованого вузла, наприклад: *!*@*.aol.com\n" " типи - типи ігнорованих даних, один або декілька з наступних:\n" " PRIV, CHAN, NOTI, CTCP, INVI, ALL\n" " параметри - NOSAVE, QUIET" #: src/common/outbound.c:3577 msgid "" "INVITE [], invites someone to a channel, by default the " "current channel (needs chanop)" msgstr "" "INVITE <нікнейм> [<канал>], запросити когось до каналу, за замовчанням до " "поточного каналу (потребує прав оператора каналу)" #: src/common/outbound.c:3578 msgid "JOIN , joins the channel" msgstr "JOIN <канал>, зайти до вказаного каналу" #: src/common/outbound.c:3580 msgid "KICK , kicks the nick from the current channel (needs chanop)" msgstr "" "KICK <нікнейм>, викинути особу з поточного каналу (потребує прав " "оператора)" #: src/common/outbound.c:3582 msgid "" "KICKBAN , bans then kicks the nick from the current channel (needs " "chanop)" msgstr "" "KICKBAN <нікнейм>, забанити й викинути особу з поточного каналу " "(потребує прав оператора каналу)" #: src/common/outbound.c:3585 msgid "LAGCHECK, forces a new lag check" msgstr "LAGCHECK, виконати перевірку сигналу" #: src/common/outbound.c:3587 msgid "LASTLOG , searches for a string in the buffer" msgstr "LASTLOG <рядок>, шукати рядок у буфері" #: src/common/outbound.c:3589 msgid "LOAD [-e] , loads a plugin or script" msgstr "LOAD [-e] <файл>, завантажити модуль або скрипт" #: src/common/outbound.c:3592 msgid "" "MDEHOP, Mass deop's all chanhalf-ops in the current channel (needs chanop)" msgstr "" "MDEHOP, видалити статус напівоператора з усіх користувачів в поточному " "каналі (потребує прав оператора)" #: src/common/outbound.c:3594 msgid "MDEOP, Mass deop's all chanops in the current channel (needs chanop)" msgstr "" "MDEOP, видалити статус оператора з усіх користувачів каналу (потребує прав " "оператора)" #: src/common/outbound.c:3596 msgid "" "ME , sends the action to the current channel (actions are written in " "the 3rd person, like /me jumps)" msgstr "" "ME <дія>, надіслати подію до поточного каналу (події пишеться від третьої " "особи,наприклад /me стрибає)" #: src/common/outbound.c:3600 msgid "" "MKICK, Mass kicks everyone except you in the current channel (needs chanop)" msgstr "" "MKICK, викинути всіх окрім вас з поточного каналу (потребує прав оператора)" #: src/common/outbound.c:3603 msgid "MOP, Mass op's all users in the current channel (needs chanop)" msgstr "" "MDEOP, надати всім користувачам поточного каналу права оператора (потребує " "прав оператора)" #: src/common/outbound.c:3604 msgid "MSG , sends a private message" msgstr "MSG <нікнейм> <повідомлення>, надіслати особисте повідомлення" #: src/common/outbound.c:3607 msgid "NAMES, Lists the nicks on the current channel" msgstr "NAMES, вивести список усіх користувачів поточного каналу" #: src/common/outbound.c:3609 msgid "NCTCP , Sends a CTCP notice" msgstr "NCTCP <нікнейм> <повідомлення>, надіслати CTCP повідомлення" #: src/common/outbound.c:3610 msgid "NEWSERVER [-noconnect] []" msgstr "NEWSERVER [-noconnect] <назва вузла> [<порт>]" #: src/common/outbound.c:3611 msgid "NICK , sets your nick" msgstr "NICK <нікнейм>, змінити нікнейм" #: src/common/outbound.c:3614 msgid "" "NOTICE , sends a notice. Notices are a type of " "message that should be auto reacted to" msgstr "" "NOTICE <нікнейм/канал> <повідомлення>, надіслати сповіщення. Сповіщення - " "це тип повідомлень, на які слід автоматично реагувати" #: src/common/outbound.c:3616 msgid "" "NOTIFY [-n network1[,network2,...]] [], displays your notify list or " "adds someone to it" msgstr "" "NOTIFY [-n мережа1[,мережа2,...]] [<нікнейм>], вивести список сповіщень " "або додати до нього когось" #: src/common/outbound.c:3618 msgid "OP , gives chanop status to the nick (needs chanop)" msgstr "" "OP <нікнейм>, надати вказаній особі права оператора каналу (потребує прав " "оператора)" #: src/common/outbound.c:3620 msgid "" "PART [] [], leaves the channel, by default the current one" msgstr "PART [<канал>] [<привід>], вийти з каналу, типово - з поточного каналу" #: src/common/outbound.c:3622 msgid "PING , CTCP pings nick or channel" msgstr "PING <нікнейм | канал>, CTCP-пінг особи або каналу" #: src/common/outbound.c:3624 msgid "QUERY [-nofocus] , opens up a new privmsg window to someone" msgstr "" "QUERY [-nofocus] <нікнейм>, відкрити нове вікно приватних повідомлень до " "вказаної особи" #: src/common/outbound.c:3626 msgid "QUIT [], disconnects from the current server" msgstr "QUIT [<підстава>], від'єднатися від поточного сервера" #: src/common/outbound.c:3628 msgid "QUOTE , sends the text in raw form to the server" msgstr "QUOTE <текст>, надіслати текст у необробленій формі до сервера" #: src/common/outbound.c:3631 msgid "" "RECONNECT [-ssl] [] [] [], Can be called just as /" "RECONNECT to reconnect to the current server or with /RECONNECT ALL to " "reconnect to all the open servers" msgstr "" "RECONNECT·[-ssl] [<вузол>] [<порт>] [<пароль>], може бути викликано просто " "як/RECONNECT, щоб переприєднатися до поточного сервера або /RECONNECT ALL, " "щоб переприєднатися до усіх відкритих серверів" #: src/common/outbound.c:3634 msgid "" "RECONNECT [] [] [], Can be called just as /RECONNECT " "to reconnect to the current server or with /RECONNECT ALL to reconnect to " "all the open servers" msgstr "" "RECONNECT [<вузол>] [<порт>] [<пароль>], може бути викликано просто як/" "RECONNECT, щоб переприєднатися до поточного сервера або /RECONNECT ALL, " "переприєднатися до усіх відкритих серверів" #: src/common/outbound.c:3636 msgid "" "RECV , send raw data to xchat, as if it was received from the irc " "server" msgstr "" "RECV <текст>, надіслати дані в необробленому форматі до xchat, як " "відправлені з irc сервера" #: src/common/outbound.c:3639 msgid "SAY , sends the text to the object in the current window" msgstr "SAY <текст>, надіслати текст до об'єкта в поточному вікні" #: src/common/outbound.c:3640 msgid "SEND []" msgstr "SEND <нікнейм> [<файл>]" #: src/common/outbound.c:3643 msgid "SERVCHAN [-ssl] , connects and joins a channel" msgstr "" "SERVCHAN [-ssl] <вузол> <порт> <канал>, встановити з'єднання з сервером та " "зайти до каналу" #: src/common/outbound.c:3646 msgid "SERVCHAN , connects and joins a channel" msgstr "" "SERVCHAN <вузол> <порт> <канал>, встановити з'єднання з сервером та зайти до " "каналу" #: src/common/outbound.c:3650 msgid "" "SERVER [-ssl] [] [], connects to a server, the " "default port is 6667 for normal connections, and 9999 for ssl connections" msgstr "" "SERVER [-ssl] <вузол> [<порт>] [<пароль>], встановити з'єднання із сервером. " "Типовий порт для звичайних з'єднань 6667, 9999 - для ssl з'єднань" #: src/common/outbound.c:3653 msgid "" "SERVER [] [], connects to a server, the default port " "is 6667" msgstr "" "SERVER <вузол> [<порт>] [<пароль>], під'єднатися до сервера, типовий порт " "6667" #: src/common/outbound.c:3655 msgid "SET [-e] [-or] [-quiet] []" msgstr "SET [-e] [-or] [-quiet] <змінна> [<значення>]" #: src/common/outbound.c:3656 msgid "SETCURSOR [-|+]" msgstr "SETCURSOR [-|+]<позиція>" #: src/common/outbound.c:3661 msgid "" "TOPIC [], sets the topic if one is given, else shows the current topic" msgstr "" "TOPIC [<тема>], встановити тему, якщо вона вказана. У іншому випадку " "відображає поточну тему" #: src/common/outbound.c:3663 msgid "" "\n" "TRAY -f [] Blink tray between two icons.\n" "TRAY -f Set tray to a fixed icon.\n" "TRAY -i Blink tray with an internal icon.\n" "TRAY -t Set the tray tooltip.\n" "TRAY -b <text> Set the tray balloon." msgstr "" "\n" "TRAY -f <таймаут> <файл1> [<файл2>] Почерговий показ двох значків у області " "сповіщення.\n" "TRAY -f <назвафайлу> Постійний значок у області сповіщення.\n" "TRAY -i <число> Миготіння внутрішнього значка у області " "сповіщення.\n" "TRAY -t <текст> Встановити підказку у області " "сповіщення.\n" "TRAY -b <заголовок> <текст> Встановити спливаючу підказку у області " "сповіщення." #: src/common/outbound.c:3670 msgid "UNBAN <mask> [<mask>...], unbans the specified masks." msgstr "" "UNBAN <маска> [<маска>...], скасувати заборону доступу до каналу всім, хто " "відповідає масці." #: src/common/outbound.c:3671 msgid "UNIGNORE <mask> [QUIET]" msgstr "" "UNIGNORE <маска> [QUIET] - скасувати ігнорування повідомлень з певною маскою" #: src/common/outbound.c:3672 msgid "UNLOAD <name>, unloads a plugin or script" msgstr "UNLOAD <назва>, вивантажити модуль або скрипт" #: src/common/outbound.c:3673 msgid "URL <url>, opens a URL in your browser" msgstr "URL <url>, відкрити URL у веб-переглядачі" #: src/common/outbound.c:3675 msgid "" "USELECT [-a] [-s] <nick1> <nick2> etc, highlights nick(s) in channel userlist" msgstr "" "USELECT [-a] [-s] <нікнейм1> <нікнейм2> тощо, підсвічує нікнейми у " "списку користувачів каналу" #: src/common/outbound.c:3678 msgid "VOICE <nick>, gives voice status to someone (needs chanop)" msgstr "" "VOICE <нікнейм>, надати право голосу особі (потребує прав оператора " "каналу)" #: src/common/outbound.c:3680 msgid "WALLCHAN <message>, writes the message to all channels" msgstr "WALLCHAN <повідомлення>, надіслати повідомлення до всіх каналів" #: src/common/outbound.c:3682 msgid "" "WALLCHOP <message>, sends the message to all chanops on the current channel" msgstr "" "WALLCHOP <повідомлення>, надіслати повідомлення до усіх операторів на " "поточному каналі" #: src/common/outbound.c:3715 #, c-format msgid "Usage: %s\n" msgstr "Використання: %s\n" #: src/common/outbound.c:3720 msgid "" "\n" "No help available on that command.\n" msgstr "" "\n" "Немає довідки для цієї команди.\n" #: src/common/outbound.c:3726 msgid "No such command.\n" msgstr "Такої команди не існує.\n" #: src/common/outbound.c:4057 msgid "Bad arguments for user command.\n" msgstr "Неправильні аргументи команди користувача.\n" #: src/common/outbound.c:4217 msgid "Too many recursive usercommands, aborting." msgstr "Надто багато рекурсивних команд користувача, зупиняємо." #: src/common/outbound.c:4300 msgid "Unknown Command. Try /help\n" msgstr "Невідома команда. Спробуйте /help\n" #: src/common/plugin.c:356 src/common/plugin.c:397 msgid "No xchat_plugin_init symbol; is this really an xchat plugin?" msgstr "На знайдено символ xchat_plugin_init; це дійсно модуль xchat?" #: src/common/server.c:634 msgid "Are you sure this is a SSL capable server and port?\n" msgstr "Ви впевнені це що сумісний з SSL сервер?\n" #: src/common/server.c:1025 #, c-format msgid "" "Cannot resolve hostname %s\n" "Check your IP Settings!\n" msgstr "" "Неможливо визначити назву вузла %s\n" "Перевірте параметри мережі!\n" #: src/common/server.c:1030 msgid "Proxy traversal failed.\n" msgstr "Не вдалося зв'язатися через проксі.\n" #: src/common/servlist.c:643 #, c-format msgid "Cycling to next server in %s...\n" msgstr "Перемикання на наступний сервер %s...\n" #: src/common/servlist.c:1094 #, c-format msgid "" "Warning: \"%s\" character set is unknown. No conversion will be applied for " "network %s." msgstr "" "Попередження: невідоме кодування \"%s\". Перекодування для мережі %s не " "відбуватиметься." #: src/common/textevents.h:6 msgid "%C22*%O$t$1 added to notify list." msgstr "%C22*%O$t$1 доданий у список сповіщень." #: src/common/textevents.h:9 msgid "%C22*%O$t$1 Banlist:%C19 $4%C20 $2%C21 $3" msgstr "%C22*%O$t$1 список забанених:%C19 $4%C20 $2%C21 $3" #: src/common/textevents.h:12 msgid "%C22*%O$tCannot join%C26 %B$1 %O(You are banned)." msgstr "%C22*%O$tНе вдалося зайти%C26 %B$1 %O(Вас забанено)." #: src/common/textevents.h:18 msgid "%C22*%O$t$1 is now known as $2" msgstr "%C22*%O$t$1 тепер називається $2" #: src/common/textevents.h:27 msgid "%C22*%O$t$1 sets ban on $2" msgstr "%C22*%O$t$1 встановив бан на $2" #: src/common/textevents.h:30 msgid "%C22*%O$tChannel $1 created on $2" msgstr "%C22*%O$tКанал $1 створений у $2" #: src/common/textevents.h:33 msgid "%C22*%O$t%C26$1%O removes channel half-operator status from%C26 $2" msgstr "%C22*%O$t%C26$1%O видалив права напівоператора у %C26 $2" #: src/common/textevents.h:36 msgid "%C22*%O$t%C26$1%O removes channel operator status from%C26 $2" msgstr "%C22*%O$t%C26$1%O видалив права оператора каналу у %C26 $2" #: src/common/textevents.h:39 msgid "%C22*%O$t%C26$1%O removes voice from%C26 $2" msgstr "%C22*%O$t%C26$1%O забрав голос у %C26 $2" #: src/common/textevents.h:42 msgid "%C22*%O$t$1 sets exempt on $2" msgstr "%C22*%O$t$1 встановив звільнення на $2" #: src/common/textevents.h:45 msgid "%C22*%O$t%C26$1%O gives channel half-operator status to%C26 $2" msgstr "%C22*%O$t%C26$1%O надав права напівоператора %C26 $2" #: src/common/textevents.h:48 msgid "%C22*%O$t$1 sets invite on $2" msgstr "%C22*%O$t$1 запрошує на $2" #: src/common/textevents.h:51 msgid "%UChannel Users Topic" msgstr "%UКанал Користувачі Тема" #: src/common/textevents.h:57 msgid "%C22*%O$t$1 sets mode $2$3 $4" msgstr "%C22*%O$t$1 встановив режим $2$3 $4" #: src/common/textevents.h:60 msgid "%C22*%O$t%C22Channel $1 modes: $2" msgstr "%C22*%O$t%C22Канал $1 режими: $2" #: src/common/textevents.h:69 msgid "%C22*%O$t%C26$1%O gives channel operator status to%C26 $2" msgstr "%C22*%O$t%C26$1%O надав права оператора каналу %C26 $2" #: src/common/textevents.h:72 msgid "%C22*%O$t$1 removes exempt on $2" msgstr "%C22*%O$t$1 забрав звільнення у $2" #: src/common/textevents.h:75 msgid "%C22*%O$t$1 removes invite on $2" msgstr "%C22*%O$t$1 зняв запрошення до $2" #: src/common/textevents.h:78 msgid "%C22*%O$t$1 removes channel keyword" msgstr "%C22*%O$t$1 прибрав ключові слова каналу" #: src/common/textevents.h:81 msgid "%C22*%O$t$1 removes user limit" msgstr "%C22*%O$t$1 зняв обмеження користувачів" #: src/common/textevents.h:84 msgid "%C22*%O$t$1 sets channel keyword to $2" msgstr "%C22*%O$t$1 встановив ключові слова каналу: $2" #: src/common/textevents.h:87 msgid "%C22*%O$t$1 sets channel limit to $2" msgstr "%C22*%O$t$1 встановив ліміт каналу у $2" #: src/common/textevents.h:90 msgid "%C22*%O$t$1 removes ban on $2" msgstr "%C22*%O$t$1 зняв бан з $2" #: src/common/textevents.h:93 msgid "%C22*%O$t%C26$1%O gives voice to%C26 $2" msgstr "%C22*%O$t%C26$1%O надав голос %C26 $2" #: src/common/textevents.h:96 msgid "%C22*%O$t%C22Connected. Now logging in..." msgstr "%C22*%O$t%C22З'єднання встановлено. Вхід у мережу.." #: src/common/textevents.h:99 msgid "%C22*%O$t%C22Connecting to $1 ($2) port $3%O..." msgstr "%C22*%O$t%C22З'єднання з $1 ($2) порт $3%O.." #: src/common/textevents.h:102 msgid "%C21*%O$t%C21Connection failed. Error: $1" msgstr "%C21*%O$t%CЗ'єднання неможливе. Помилка: $1" #: src/common/textevents.h:105 msgid "%C22*%O$tReceived a CTCP $1 from $2" msgstr "%C22*%O$tОтримано CTCP $1 від $2" #: src/common/textevents.h:108 msgid "%C22*%O$tReceived a CTCP $1 from $2 (to $3)" msgstr "%C22*%O$tОтримано CTCP $1 від $2 (для $3)" #: src/common/textevents.h:111 msgid "%C19>%O$1%C19<%O$tCTCP $2" msgstr "%C19>%O$1%C19<%O$tCTCP $2" #: src/common/textevents.h:114 msgid "%C22*%O$tReceived a CTCP Sound $1 from $2" msgstr "%C22*%O$tОтримано CTCP звук $1 від $2" #: src/common/textevents.h:117 msgid "%C22*%O$tReceived a CTCP Sound $1 from $2 (to $3)" msgstr "%C22*%O$tОтримано звук CTCP $1 від $2 (для $3)" #: src/common/textevents.h:120 msgid "%C22*%O$tDCC CHAT to %C26$1%O aborted." msgstr "%C22*%O$tDCC CHAT з %C26$1%O перервано." #: src/common/textevents.h:123 msgid "%C22*%O$tDCC CHAT connection established to %C26$1 %C30[%O$2%C30]" msgstr "%C22*%O$tDCC CHAT з'єднання встановлено з %C26$1 %C30[%O$2%C30]" #: src/common/textevents.h:126 msgid "%C22*%O$tDCC CHAT to %C26$1%O lost ($4)." msgstr "%C22*%O$tDCC CHAT з %C26$1%O розірвано. ($4)." #: src/common/textevents.h:129 msgid "%C22*%O$tReceived a DCC CHAT offer from $1" msgstr "%C22*%O$tОтримано запит на DCC CHAT від $1" #: src/common/textevents.h:132 msgid "%C22*%O$tOffering DCC CHAT to $1" msgstr "%C22*%O$tПропонується DCC CHAT з $1" #: src/common/textevents.h:135 msgid "%C22*%O$tAlready offering CHAT to $1" msgstr "%C22*%O$tВже запропоновано CHAT з $1" #: src/common/textevents.h:138 msgid "%C22*%O$tDCC $1 connect attempt to%C26 $2%O failed (err=$3)." msgstr "%C22*%O$tDCC $1 спроба з'єднання з %C26 $2%O невдала (помилка=$3)." #: src/common/textevents.h:141 msgid "%C22*%O$tReceived '$1%O' from $2" msgstr "%C22*%O$tОтримано '$1%O' від $2" #: src/common/textevents.h:144 #, c-format msgid "%C24,18 Type To/From Status Size Pos File " msgstr "%C24,18 Тип Кому/Від кого Статус Розмір Позиція Файл " #: src/common/textevents.h:147 msgid "" "%C22*%O$tReceived a malformed DCC request from %C26$1%O.%010%C22*%O" "$tContents of packet: $2" msgstr "" "%C22*%O$tОтримано неправильний DCC запит від %C26$1%O.%010%C22*%O$tВміст " "пакета: $2" #: src/common/textevents.h:150 msgid "%C22*%O$tOffering%C26 $1%O to%C26 $2" msgstr "%C22*%O$tПропонується%C26 $1 для%C26 $2" #: src/common/textevents.h:153 msgid "%C22*%O$tNo such DCC offer." msgstr "%C22*%O$tНемає такої DCC пропозиції." #: src/common/textevents.h:156 msgid "%C22*%O$tDCC RECV%C26 $2%O to%C26 $1%O aborted." msgstr "%C22*%O$tDCC RECV %C26$2%O для %C26$1%O перервано." #: src/common/textevents.h:159 msgid "" "%C22*%O$tDCC RECV%C26 $1%O from%C26 $3%O complete %C30[%C26$4%O cps%C30]%O." msgstr "" "%C22*%O$tDCC RECV%C26 $1%O від%C26 $3%O завершено %C30[%C26$4%O б/с%C30]%O." #: src/common/textevents.h:162 msgid "%C22*%O$tDCC RECV connection established to%C26 $1 %C30[%O$2%C30]" msgstr "%C22*%O$tDCC RECV з'єднання встановлено з%C26 $1 %C30[%O$2%C30]" #: src/common/textevents.h:165 msgid "%C22*%O$tDCC RECV%C26 $1%O from%C26 $3%O failed ($4)." msgstr "%C22*%O$tDCC RECV%C26 $1%O від%C26 $3%O - помилка. ($4)." #: src/common/textevents.h:168 msgid "%C22*%O$tDCC RECV: Cannot open $1 for writing ($2)." msgstr "%C22*%O$tDCC RECV: Не вдалося відкрити $1 для запису ($2)." #: src/common/textevents.h:171 msgid "" "%C22*%O$tThe file%C26 $1%C already exists, saving it as%C26 $2%O instead." msgstr "%C22*%O$tФайл%C26 $1%C вже існує, натомість зберігається як%C26 $2%O." #: src/common/textevents.h:174 msgid "%C22*%O$t%C26$1 %Ohas requested to resume%C26 $2 %Cfrom%C26 $3%C." msgstr "%C22*%O$t%C26$1 %Oзапит на продовження розмови%C26 $2%C від%C26 $3%C." #: src/common/textevents.h:177 msgid "%C22*%O$tDCC SEND%C26 $2%O to%C26 $1%O aborted." msgstr "%C22*%O$tDCC SEND %C26$2%O до %C26$1%O перервано." #: src/common/textevents.h:180 msgid "" "%C22*%O$tDCC SEND%C26 $1%O to%C26 $2%O complete %C30[%C26$3%O cps%C30]%O." msgstr "" "%C22*%O$tDCC SEND %C26$1%O до %C26$2%O завершено %C30[%C26$3%O б/с%C30]%O." #: src/common/textevents.h:183 msgid "%C22*%O$tDCC SEND connection established to%C26 $1 %C30[%O$2%C30]" msgstr "%C22*%O$tDCC SEND з'єднання встановлено з %C26$1 %C30[%O$2%C30]" #: src/common/textevents.h:186 msgid "%C22*%O$tDCC SEND%C26 $1%O to%C26 $2%O failed. $3" msgstr "%C22*%O$tDCC SEND %C26$1%O до %C26$2%O - помилка. $3" #: src/common/textevents.h:189 msgid "%C22*%O$t%C26$1 %Ohas offered%C26 $2 %O(%C26$3 %Obytes)" msgstr "%C22*%O$t%C26$1 %Oзапропоновано%C26 $2 %O(%C26$3 %OCбайт)" #: src/common/textevents.h:192 msgid "%C22*%O$tDCC $1%C26 $2 %Oto%C26 $3 %Cstalled - aborting." msgstr "%C22*%O$tDCC $1%C26 $2 %Oto%C26 $3 %Cзупинилось - переривання." #: src/common/textevents.h:195 msgid "%C22*%O$tDCC $1%C26 $2 %Oto%C26 $3 %Otimed out - aborting." msgstr "%C22*%O$tDCC $1%C26 $2 %Oдо %C26$3 %Oвийшов час - переривання." #: src/common/textevents.h:198 msgid "%C22*%O$t$1 deleted from notify list." msgstr "%C22*%O$t$1 видалено зі списку сповіщення." #: src/common/textevents.h:201 msgid "%C22*%O$tDisconnected ($1)." msgstr "%C22*%O$tЗ'єднання розірвано ($1)." #: src/common/textevents.h:204 msgid "%C22*%O$tFound your IP: [$1]" msgstr "%C22*%O$tЗнайдено ваш IP: [$1]" #: src/common/textevents.h:210 msgid "%O%C26$1%O added to ignore list." msgstr "%O%C26$1%O додано до списку ігнорованих." #: src/common/textevents.h:213 msgid "Ignore on %C26$1%O changed." msgstr "Ігнорування %C26$1%O змінено." #: src/common/textevents.h:216 #, c-format msgid "%C24,18 " msgstr "%C24,18 " #: src/common/textevents.h:219 #, c-format msgid "%C24,18 Hostmask PRIV NOTI CHAN CTCP DCC INVI UNIG " msgstr "%C24,18 маска вузлів PRIV NOTI CHAN CTCP DCC INVI UNIG" #: src/common/textevents.h:222 msgid "%O%C26$1%O removed from ignore list." msgstr "%O%C26$1%O видалений зі списку ігнорування." #: src/common/textevents.h:225 msgid " Ignore list is empty." msgstr " Список ігнорованих порожній." #: src/common/textevents.h:228 msgid "%C22*%O$tCannot join%C26 %B$1 %O(Channel is invite only)." msgstr "%C22*%O$tНе вдалося зайти%C26 %B$1 %O(Канал лише для запрошених)." #: src/common/textevents.h:231 msgid "%C22*%O$tYou have been invited to%C26 $1%O by%C26 $2%C (%C26$3%C)" msgstr "%C22*%O$tОтримано запрошення на%C26 $1%O від%C26 $2%C (%C26$3%C)" #: src/common/textevents.h:234 msgid "%C19*%O$t%C19%B$1 %B($3) has joined $2" msgstr "%C19*%O$t%C19%B$1 %B($3) зайшов на канал $2" #: src/common/textevents.h:237 msgid "%C22*%O$tCannot join%C26 %B$1 %O(Requires keyword)." msgstr "%C22*%O$tНе вдалося зайти%C26 %B$1 %O(Потрібне ключове слово)." #: src/common/textevents.h:240 msgid "%C21*%O$t%C21$1 has kicked $2 from $3 ($4%O%C21)" msgstr "%C21*%O$t%C21$1 викинув $2 з $3 ($4%O%C21)" #: src/common/textevents.h:243 msgid "%C22*%O$tYou have been killed by $1 ($2%O%C22)" msgstr "%C22*%O$tвикинув вас з каналу $1 ($2%O%C22)" #: src/common/textevents.h:252 msgid "%C22*%O$t%C22MOTD Skipped." msgstr "%C22*%O$t%C22MOTD пропущено." #: src/common/textevents.h:255 msgid "%C22*%O$t$1 already in use. Retrying with $2..." msgstr "%C22*%O$t$1 вже використовується. Повторна спроба з $2.." #: src/common/textevents.h:258 msgid "%C22*%O$tNickname already in use. Use /NICK to try another." msgstr "" "%C22*%O$tНікнейм вже використовується. Скористайтеся /NICK щоб " "спробувати інше." #: src/common/textevents.h:261 msgid "%C22*%O$tNo such DCC." msgstr "%C22*%O$tНемає такого DCC." #: src/common/textevents.h:264 msgid "%C22*%O$tNo process is currently running" msgstr "%C22*%O$tНемає запущених процесів" #: src/common/textevents.h:273 msgid "$tNotify list is empty." msgstr "$tСписок сповіщень порожній." #: src/common/textevents.h:276 msgid "%C24,18 %B Notify List " msgstr "%C24,18 %B Список сповіщень " #: src/common/textevents.h:279 msgid "%C22*%O$t$1 users in notify list." msgstr "%C22*%O$t$1 користувачів у списку сповіщень." #: src/common/textevents.h:282 msgid "%C22*%O$tNotify: $1 is offline ($3)." msgstr "%C22*%O$tСповіщення: $1 від'єднаний ($3)." #: src/common/textevents.h:285 msgid "%C22*%O$tNotify: $1 is online ($3)." msgstr "%C22*%O$tСповіщення: $1 під'єднаний ($3)." #: src/common/textevents.h:291 msgid "%C23*%O$t%C23$1 (%O%C23$2) has left $3" msgstr "%C23*%O$t%C23$1 (%O%C23$2) залишив $3" #: src/common/textevents.h:294 msgid "%C23*%O$t%C23$1 (%O%C23$2) has left $3 (%O%C23%B%B$4%O%C23)" msgstr "%C23*%O$t%C23$1 (%O%C23$2) залишив $3 (%O%C23%B%B$4%O%C23)" #: src/common/textevents.h:297 msgid "%C22*%O$tPing reply from $1: $2 second(s)" msgstr "%C22*%O$tPing відповідь від $1 : $2 сек." #: src/common/textevents.h:300 msgid "%C22*%O$tNo ping reply for $1 seconds, disconnecting." msgstr "%C22*%O$tНе отримано відповідей протягом $1 сек., від'єднання." #: src/common/textevents.h:309 msgid "%C22*%O$tA process is already running" msgstr "%C22*%O$tПроцес вже запущений" #: src/common/textevents.h:312 msgid "%C23*%O$t%C23$1 has quit (%O%C23%B%B$2%O%C23)" msgstr "%C23*%O$t%C23$1 вийшов (%O%C23%B%B$2%O%C23)" #: src/common/textevents.h:315 msgid "%C22*%O$t$1 sets modes%B %C30[%O$2%B%C30]" msgstr "%C22*%O$t$1 встановив режими%B %C30[%O$2%B%C30]" #: src/common/textevents.h:318 msgid "%C28-%C29$1/Wallops%C28-%O$t$2" msgstr "%C28-%C29$1/Wallops%C28-%O$t$2" #: src/common/textevents.h:321 msgid "%C22*%O$tLooking up IP number for%C26 $1%O..." msgstr "%C22*%O$tПошук IP-адреси для%C26 $1%O.." #: src/common/textevents.h:324 msgid "%C22*%O$t%C22Connected." msgstr "%C22*%O$t%C22З'єднання встановлено." #: src/common/textevents.h:330 msgid "%C22*%O$t%C22Looking up $1" msgstr "%C22*%O$t%C22Триває пошук $1" #: src/common/textevents.h:339 msgid "%C22*%O$tStopped previous connection attempt (pid=$1)" msgstr "%C22*%O$tЗупинена попередня спроба з'єднання (pid=$1)" #: src/common/textevents.h:342 msgid "%C29*%O$t%C29Topic for $1%C %C29is: $2" msgstr "%C29*%O$t%C29Тема для $1%C: %C26$2" #: src/common/textevents.h:345 msgid "%C22*%O$t$1 has changed the topic to: $2" msgstr "%C22*%O$t$1 змінив тему на: $2" #: src/common/textevents.h:348 msgid "%C29*%O$t%C29Topic for $1%C %C29set by $2%C %C29at $3" msgstr "%C29*%O$t%C29Тема для $1%C %C29встановлена $2%C %C29у $3" #: src/common/textevents.h:351 msgid "%C22*%O$tUnknown host. Maybe you misspelled it?" msgstr "%C22*%O$tНевідомий вузол. Можливо ви помилились?" #: src/common/textevents.h:354 msgid "%C22*%O$tCannot join%C26 %B$1 %O(User limit reached)." msgstr "" "%C22*%O$tНе вдалося зайти на%C26 %B$1 %O(Вичерпано ліміт користувачів)." #: src/common/textevents.h:357 msgid "%C22*%O$t%C26Users on $1:%C $2" msgstr "%C22*%O$t%C26Користувачі на $1:%C $2" #: src/common/textevents.h:360 msgid "%C22*%O$t%C28[%O$1%C28] %O$2%C27 $3" msgstr "%C22*%O$t%C28[%O$1%C28] %O$2%C27 $3" #: src/common/textevents.h:363 msgid "%C22*%O$t%C28[%O$1%C28] %Cis away %C30(%O$2%O%C30)" msgstr "%C22*%O$t%C28[%O$1%C28] %Cнедоступний %C30(%O$2%O%C30)" #: src/common/textevents.h:366 src/common/textevents.h:372 #: src/common/textevents.h:387 src/common/textevents.h:390 msgid "%C22*%O$t%C28[%O$1%C28]%O $2" msgstr "%C22*%O$t%C28[%O$1%C28]%O $2" #: src/common/textevents.h:369 msgid "%C22*%O$t%C28[%O$1%C28] %OEnd of WHOIS list." msgstr "%C22*%O$t%C28[%O$1%C28] %OКінець списку WHOIS." #: src/common/textevents.h:375 msgid "%C22*%O$t%C28[%O$1%C28]%O idle%C26 $2" msgstr "%C22*%O$t%C28[%O$1%C28]%O бездіяльний %C26$2" #: src/common/textevents.h:378 msgid "%C22*%O$t%C28[%O$1%C28]%O idle%C26 $2%O, signon:%C26 $3" msgstr "%C22*%O$t%C28[%O$1%C28]%O бездіяльний %C26$2%O, зайшов: %C26$3" #: src/common/textevents.h:381 msgid "%C22*%O$t%C28[%O$1%C28] %C30(%O$2@$3%C30)%O: $4" msgstr "%C22*%O$t%C28[%O$1%C28] %C30(%O$2@$3%C30)%O: $4" #: src/common/textevents.h:384 msgid "%C22*%O$t%C28[%O$1%C28] %Oreal user@host%C27 $2%O, real IP%C27 $3" msgstr "" "%C22*%O$t%C28[%O$1%C28] %Oсправжній користувач@вузол %C27$2%O, справжній IP %" "C27$3" #: src/common/textevents.h:393 msgid "%C19*%O$t%C19Now talking on $2" msgstr "%C19*%O$t%C19Ви зараз спілкуєтесь на $2" #: src/common/textevents.h:396 msgid "%C23*$tYou have been kicked from $2 by $3 ($4%O%C23)" msgstr "%C23*$t$3 викинув вас із каналу $2 ($4%O%C23)" #: src/common/textevents.h:399 #, c-format msgid "%C23*$tYou have left channel $3" msgstr "%C23*$tВи залишили канал $3" #: src/common/textevents.h:402 msgid "%C23*$tYou have left channel $3 (%O%C23%B%B$4%O%C23)" msgstr "%C23*$tВи залишили канал $3 $3 (%O%C23%B%B$4%O%C23)" #: src/common/textevents.h:408 msgid "%C22*%O$tYou've invited%C26 $1%O to%C26 $2%O (%C26$3%O)" msgstr "%C22*%O$tВи запрошуєте%C26 $1%O до%C26 $2%O (%C26$3%O)" #: src/common/textevents.h:414 msgid "%C22*%O$tYou are now known as $2" msgstr "%C22*%O$tТепер ви відомі як $2" #: src/common/text.c:318 msgid "Loaded log from" msgstr "Завантажено журнал з" #: src/common/text.c:336 #, c-format msgid "**** ENDING LOGGING AT %s\n" msgstr "**** ЗАКІНЧУЄТЬСЯ ВХІД НА %s\n" #: src/common/text.c:545 #, c-format msgid "**** BEGIN LOGGING AT %s\n" msgstr "**** ПОЧАТОК ВХОДУ НА %s\n" #: src/common/text.c:564 #, c-format msgid "" "* Can't open log file(s) for writing. Check the\n" " permissions on %s/xchatlogs" msgstr "" "* Не вдалося відкрити файл(и) для запису. Перевірте\n" " права на %s/xchatlogs" #: src/common/text.c:931 msgid "Left message" msgstr "Повідомлення зліва" #: src/common/text.c:932 msgid "Right message" msgstr "Повідомлення справа" #: src/common/text.c:936 msgid "The nick of the joining person" msgstr "Нікнейм особи, що підключається" #: src/common/text.c:937 msgid "The channel being joined" msgstr "Підключено до каналу" #: src/common/text.c:938 src/common/text.c:985 src/common/text.c:1036 msgid "The host of the person" msgstr "Хостнейм користувача" #: src/common/text.c:942 src/common/text.c:948 src/common/text.c:955 #: src/common/text.c:1143 src/common/text.c:1150 src/common/text.c:1155 #: src/common/text.c:1160 src/common/text.c:1165 src/common/text.c:1171 #: src/common/text.c:1176 src/common/text.c:1180 src/common/text.c:1186 #: src/common/text.c:1192 src/common/text.c:1238 src/common/text.c:1249 #: src/common/text.c:1254 src/common/text.c:1259 src/common/text.c:1268 #: src/common/text.c:1279 src/common/text.c:1286 src/common/text.c:1292 #: src/common/text.c:1297 src/common/text.c:1302 src/common/text.c:1309 #: src/common/text.c:1315 src/common/text.c:1321 src/common/text.c:1326 #: src/common/text.c:1331 src/common/text.c:1335 src/common/text.c:1341 #: src/common/text.c:1349 src/common/text.c:1383 src/common/text.c:1388 msgid "Nickname" msgstr "Нікнейм" #: src/common/text.c:943 msgid "The action" msgstr "Дія" #: src/common/text.c:944 src/common/text.c:950 msgid "Mode char" msgstr "Символ режиму" #: src/common/text.c:949 msgid "The text" msgstr "Текст" #: src/common/text.c:951 src/common/text.c:957 msgid "Identified text" msgstr "Виділений текст" #: src/common/text.c:956 src/common/text.c:1013 src/common/text.c:1019 msgid "The message" msgstr "Повідомлення" #: src/common/text.c:961 src/common/text.c:1023 msgid "Old nickname" msgstr "Старий нікнейм" #: src/common/text.c:962 src/common/text.c:1024 msgid "New nickname" msgstr "Новий нікнейм" #: src/common/text.c:966 msgid "Nick of person who changed the topic" msgstr "Нікнейм персони, що змінила тему" #: src/common/text.c:967 src/common/text.c:973 src/fe-gtk/chanlist.c:766 #: src/fe-gtk/chanlist.c:869 msgid "Topic" msgstr "Тема" #: src/common/text.c:968 src/common/text.c:972 src/common/text.c:1403 #: src/fe-gtk/chanlist.c:764 src/fe-gtk/ignoregui.c:176 #: src/fe-gtk/servlistgui.c:892 msgid "Channel" msgstr "Канал" #: src/common/text.c:977 src/common/text.c:1030 msgid "The nickname of the kicker" msgstr "Нікнейм особи, що викинула з каналу" #: src/common/text.c:978 src/common/text.c:1028 msgid "The person being kicked" msgstr "Особа, яку було відключено" #: src/common/text.c:979 src/common/text.c:986 src/common/text.c:990 #: src/common/text.c:995 src/common/text.c:1029 src/common/text.c:1037 #: src/common/text.c:1044 msgid "The channel" msgstr "Канал" #: src/common/text.c:980 src/common/text.c:1031 src/common/text.c:1038 msgid "The reason" msgstr "Підстава" #: src/common/text.c:984 src/common/text.c:1035 msgid "The nick of the person leaving" msgstr "Нікнейм особи, що залишає канал" #: src/common/text.c:991 src/common/text.c:997 msgid "The time" msgstr "Час" #: src/common/text.c:996 msgid "The creator" msgstr "Засновник" #: src/common/text.c:1001 src/fe-gtk/dccgui.c:763 src/fe-gtk/dccgui.c:996 msgid "Nick" msgstr "Нікнейм" #: src/common/text.c:1002 src/common/text.c:1255 msgid "Reason" msgstr "Підстава" #: src/common/text.c:1003 src/common/text.c:1145 src/common/text.c:1228 msgid "Host" msgstr "Комп'ютер" #: src/common/text.c:1007 src/common/text.c:1012 src/common/text.c:1017 msgid "Who it's from" msgstr "Звідки" #: src/common/text.c:1008 msgid "The time in x.x format (see below)" msgstr "Час у форматі x.x (дивіться нижче)" #: src/common/text.c:1018 src/common/text.c:1055 msgid "The Channel it's going to" msgstr "Перелік каналів..." #: src/common/text.c:1042 msgid "The sound" msgstr "Звук" #: src/common/text.c:1043 src/common/text.c:1049 src/common/text.c:1054 msgid "The nick of the person" msgstr "Нікнейм особи" #: src/common/text.c:1048 src/common/text.c:1053 msgid "The CTCP event" msgstr "CTCP подія" #: src/common/text.c:1059 msgid "The nick of the person who set the key" msgstr "Нікнейм особи, що встановила ключ" #: src/common/text.c:1060 msgid "The key" msgstr "Ключ" #: src/common/text.c:1064 msgid "The nick of the person who set the limit" msgstr "Нікнейм особи, що встановила обмеження" #: src/common/text.c:1065 msgid "The limit" msgstr "Обмеження" #: src/common/text.c:1069 msgid "The nick of the person who did the op'ing" msgstr "Нікнейм особи, що встановила оператора" #: src/common/text.c:1070 msgid "The nick of the person who has been op'ed" msgstr "Нікнейм особи, що отримала оператора" #: src/common/text.c:1074 msgid "The nick of the person who has been halfop'ed" msgstr "Нікнейм особи, що отримала напівоператора" #: src/common/text.c:1075 msgid "The nick of the person who did the halfop'ing" msgstr "Нікнейм особи, що встановила напівоператора" #: src/common/text.c:1079 msgid "The nick of the person who did the voice'ing" msgstr "Нікнейм особи, що встановила голосу" #: src/common/text.c:1080 msgid "The nick of the person who has been voice'ed" msgstr "Нікнейм особи, якій було встановлено стан голосу" #: src/common/text.c:1084 msgid "The nick of the person who did the banning" msgstr "Нікнейм особи, що ввела бан" #: src/common/text.c:1085 src/common/text.c:1112 msgid "The ban mask" msgstr "Маска бану" #: src/common/text.c:1089 msgid "The nick who removed the key" msgstr "Нікнейм особи, що видалила ключ" #: src/common/text.c:1093 msgid "The nick who removed the limit" msgstr "Нікнейм особи, що видалила обмеження" #: src/common/text.c:1097 msgid "The nick of the person of did the deop'ing" msgstr "Нікнейм особи, що зняла оператора" #: src/common/text.c:1098 msgid "The nick of the person who has been deop'ed" msgstr "Нікнейм особи, з якої знято оператора" #: src/common/text.c:1101 msgid "The nick of the person of did the dehalfop'ing" msgstr "Нікнейм особи, що зняла напівоператора" #: src/common/text.c:1102 msgid "The nick of the person who has been dehalfop'ed" msgstr "Нікнейм особи, з якої знято напівоператора" #: src/common/text.c:1106 msgid "The nick of the person of did the devoice'ing" msgstr "Нікнейм особи, яка забрала 'голос'" #: src/common/text.c:1107 msgid "The nick of the person who has been devoice'ed" msgstr "Нікнейм особи, з якої було знято 'голос'" #: src/common/text.c:1111 msgid "The nick of the person of did the unban'ing" msgstr "Нікнейм особи, що зняла бан" #: src/common/text.c:1116 msgid "The nick of the person who did the exempt" msgstr "Нікнейм особи, що додала виключення" #: src/common/text.c:1117 src/common/text.c:1122 msgid "The exempt mask" msgstr "Маска виключення" #: src/common/text.c:1121 msgid "The nick of the person removed the exempt" msgstr "Нікнейм особи, що зняла виключення" #: src/common/text.c:1126 msgid "The nick of the person who did the invite" msgstr "Нікнейм особи, що зробила запрошення" #: src/common/text.c:1127 src/common/text.c:1132 msgid "The invite mask" msgstr "Маска запрошення" #: src/common/text.c:1131 msgid "The nick of the person removed the invite" msgstr "Нікнейм особи, що скасувала запрошення" #: src/common/text.c:1136 msgid "The nick of the person setting the mode" msgstr "Нікнейм особи, що встановила режим" #: src/common/text.c:1137 msgid "The mode's sign (+/-)" msgstr "Знак режиму (+/-)" #: src/common/text.c:1138 msgid "The mode letter" msgstr "Буква режиму" #: src/common/text.c:1139 msgid "The channel it's being set on" msgstr "Канал встановлено" #: src/common/text.c:1144 msgid "Username" msgstr "Username" #: src/common/text.c:1146 msgid "Full name" msgstr "Повне ім'я " #: src/common/text.c:1151 msgid "Channel Membership/\"is an IRC operator\"" msgstr "Член каналу/\"є оператором IRC\"" #: src/common/text.c:1156 msgid "Server Information" msgstr "Інформація про сервер" #: src/common/text.c:1161 src/common/text.c:1166 msgid "Idle time" msgstr "Час простою" #: src/common/text.c:1167 msgid "Signon time" msgstr "Час входу" #: src/common/text.c:1172 msgid "Away reason" msgstr "Причина відсутності" #: src/common/text.c:1181 src/common/text.c:1187 src/common/text.c:1195 #: src/common/text.c:1375 msgid "Message" msgstr "Повідомлення" #: src/common/text.c:1188 msgid "Account" msgstr "Обліковий запис" #: src/common/text.c:1193 msgid "Real user@host" msgstr "Справжній_користувач@хост" #: src/common/text.c:1194 msgid "Real IP" msgstr "Реальний IP" #: src/common/text.c:1199 src/common/text.c:1208 src/common/text.c:1214 #: src/common/text.c:1244 src/common/text.c:1398 msgid "Channel Name" msgstr "Назва каналу" #: src/common/text.c:1203 src/common/text.c:1361 src/fe-gtk/menu.c:1404 #: src/fe-gtk/menu.c:1592 src/fe-gtk/textgui.c:390 msgid "Text" msgstr "Текст" #: src/common/text.c:1204 src/common/text.c:1210 src/common/text.c:1239 #: src/common/text.c:1357 src/common/text.c:1399 msgid "Server Name" msgstr "Назва серверу" #: src/common/text.c:1209 msgid "Nick of person who invited you" msgstr "Нікнейм особи, що запрошує" #: src/common/text.c:1215 src/fe-gtk/chanlist.c:765 msgid "Users" msgstr "Користувачі" #: src/common/text.c:1219 msgid "Nickname in use" msgstr "Нікнейм використовується" #: src/common/text.c:1220 msgid "Nick being tried" msgstr "Пробуємо нікнейм" #: src/common/text.c:1229 src/common/text.c:1365 msgid "IP" msgstr "IP" #: src/common/text.c:1230 src/common/text.c:1261 msgid "Port" msgstr "Порт" #: src/common/text.c:1240 src/fe-gtk/notifygui.c:139 src/fe-gtk/setup.c:1713 msgid "Network" msgstr "Мережа" #: src/common/text.c:1245 src/common/text.c:1250 msgid "Modes string" msgstr "Рядок режимів" #: src/common/text.c:1260 src/common/text.c:1298 src/common/text.c:1303 #: src/common/text.c:1344 msgid "IP address" msgstr "IP адреса" #: src/common/text.c:1266 src/common/text.c:1291 msgid "DCC Type" msgstr "Тип DCC" #: src/common/text.c:1267 src/common/text.c:1272 src/common/text.c:1277 #: src/common/text.c:1284 src/common/text.c:1304 src/common/text.c:1308 #: src/common/text.c:1314 src/common/text.c:1320 src/common/text.c:1327 #: src/common/text.c:1336 src/common/text.c:1342 msgid "Filename" msgstr "Назва файлу" #: src/common/text.c:1278 src/common/text.c:1285 msgid "Destination filename" msgstr "Назва файлу призначення" #: src/common/text.c:1287 src/common/text.c:1316 msgid "CPS" msgstr "CPS" #: src/common/text.c:1322 msgid "Pathname" msgstr "Шлях" #: src/common/text.c:1337 src/fe-gtk/dccgui.c:759 msgid "Position" msgstr "Позиція" #: src/common/text.c:1343 src/fe-gtk/dccgui.c:758 msgid "Size" msgstr "Розмір" #: src/common/text.c:1348 msgid "DCC String" msgstr "DCC Рядок" #: src/common/text.c:1353 msgid "Number of notify items" msgstr "Кількість сповіщень" #: src/common/text.c:1369 msgid "Old Filename" msgstr "Стара назва файлу" #: src/common/text.c:1370 msgid "New Filename" msgstr "Нова назва файлу" #: src/common/text.c:1374 msgid "Receiver" msgstr "Отримувач" #: src/common/text.c:1379 msgid "Hostmask" msgstr "Маска хосту" #: src/common/text.c:1384 msgid "Hostname" msgstr "Хостнейм" #: src/common/text.c:1389 msgid "The Packet" msgstr "Пакет" #: src/common/text.c:1393 msgid "Seconds" msgstr "Секунди" #: src/common/text.c:1397 msgid "Nick of person who have been invited" msgstr "Нікнейм запрошеної особи" #: src/common/text.c:1404 msgid "Banmask" msgstr "Маска бану" #: src/common/text.c:1405 msgid "Who set the ban" msgstr "Особа, що встановила бан" #: src/common/text.c:1406 msgid "Ban time" msgstr "Час дії бану" #: src/common/text.c:1446 #, c-format msgid "" "Error parsing event %s.\n" "Loading default." msgstr "" "Помилка аналізу події %s.\n" "Завантажується типова." #: src/common/text.c:2189 #, c-format msgid "" "Cannot read sound file:\n" "%s" msgstr "" "Не вдалося прочитати звуковий файл:\n" "%s" #: src/common/util.c:297 msgid "Remote host closed socket" msgstr "Віддалений вузол закрив сокет" #: src/common/util.c:302 msgid "Connection refused" msgstr "Відмовлено у з'єднанні" #: src/common/util.c:305 msgid "No route to host" msgstr "Не знайдено шлях до вузла" #: src/common/util.c:307 msgid "Connection timed out" msgstr "Таймаут з'єднання" #: src/common/util.c:309 msgid "Cannot assign that address" msgstr "Не вдалося призначити цю адресу" #: src/common/util.c:311 msgid "Connection reset by peer" msgstr "З'єднання обірване" #: src/common/util.c:848 msgid "Ascension Island" msgstr "Острів Сходження" #: src/common/util.c:849 msgid "Andorra" msgstr "Андорра" #: src/common/util.c:850 msgid "United Arab Emirates" msgstr "Об'єднані Арабські Емірати" #: src/common/util.c:851 msgid "Afghanistan" msgstr "Афганістан" #: src/common/util.c:852 msgid "Antigua and Barbuda" msgstr "Антігуа та Барбуда" #: src/common/util.c:853 msgid "Anguilla" msgstr "Ангуілла" #: src/common/util.c:854 msgid "Albania" msgstr "Албанія" #: src/common/util.c:855 msgid "Armenia" msgstr "Вірменія" #: src/common/util.c:856 msgid "Netherlands Antilles" msgstr "Нідерланди" #: src/common/util.c:857 msgid "Angola" msgstr "Ангола" #: src/common/util.c:858 msgid "Antarctica" msgstr "Антарктида" #: src/common/util.c:859 msgid "Argentina" msgstr "Аргентина" #: src/common/util.c:860 msgid "Reverse DNS" msgstr "Зворотній DNS" #: src/common/util.c:861 msgid "American Samoa" msgstr "Американське Самоа" #: src/common/util.c:862 msgid "Austria" msgstr "Австрія" #: src/common/util.c:863 msgid "Nato Fiel" msgstr "Нато Фейл" #: src/common/util.c:864 msgid "Australia" msgstr "Австралія" #: src/common/util.c:865 msgid "Aruba" msgstr "Аруба" #: src/common/util.c:866 msgid "Aland Islands" msgstr "Аланд о-ви" #: src/common/util.c:867 msgid "Azerbaijan" msgstr "Азербайджан" #: src/common/util.c:868 msgid "Bosnia and Herzegovina" msgstr "Боснія та Герцеговина" #: src/common/util.c:869 msgid "Barbados" msgstr "Барбадос" #: src/common/util.c:870 msgid "Bangladesh" msgstr "Бангладеш" #: src/common/util.c:871 msgid "Belgium" msgstr "Бельгія" #: src/common/util.c:872 msgid "Burkina Faso" msgstr "Буркіна-Фасо" #: src/common/util.c:873 msgid "Bulgaria" msgstr "Болгарія" #: src/common/util.c:874 msgid "Bahrain" msgstr "Бахрейн" #: src/common/util.c:875 msgid "Burundi" msgstr "Бурунді" #: src/common/util.c:876 msgid "Businesses" msgstr "Бізнесова адреса" #: src/common/util.c:877 msgid "Benin" msgstr "Бенін" #: src/common/util.c:878 msgid "Bermuda" msgstr "Бермуди" #: src/common/util.c:879 msgid "Brunei Darussalam" msgstr "Бруней" #: src/common/util.c:880 msgid "Bolivia" msgstr "Болівія" #: src/common/util.c:881 msgid "Brazil" msgstr "Бразилія" #: src/common/util.c:882 msgid "Bahamas" msgstr "Багами" #: src/common/util.c:883 msgid "Bhutan" msgstr "Бутан" #: src/common/util.c:884 msgid "Bouvet Island" msgstr "Острови Буве" #: src/common/util.c:885 msgid "Botswana" msgstr "Ботсвана" #: src/common/util.c:886 msgid "Belarus" msgstr "Білорусія" #: src/common/util.c:887 msgid "Belize" msgstr "Беліз" #: src/common/util.c:888 msgid "Canada" msgstr "Канада" #: src/common/util.c:889 msgid "Cocos Islands" msgstr "Кокосові о-ви" #: src/common/util.c:890 msgid "Democratic Republic of Congo" msgstr "Демократична Республіка Конго" #: src/common/util.c:891 msgid "Central African Republic" msgstr "Центрально-Африканська Республіка" #: src/common/util.c:892 msgid "Congo" msgstr "Конго" #: src/common/util.c:893 msgid "Switzerland" msgstr "Швейцарія" #: src/common/util.c:894 msgid "Cote d'Ivoire" msgstr "Кот'Д'Івуар" #: src/common/util.c:895 msgid "Cook Islands" msgstr "Острови Кука" #: src/common/util.c:896 msgid "Chile" msgstr "Чилі" #: src/common/util.c:897 msgid "Cameroon" msgstr "Камерун" #: src/common/util.c:898 msgid "China" msgstr "Китай" #: src/common/util.c:899 msgid "Colombia" msgstr "Колумбія" #: src/common/util.c:900 msgid "Internic Commercial" msgstr "Комерційні адреси" #: src/common/util.c:901 msgid "Costa Rica" msgstr "Коста-Ріка" #: src/common/util.c:902 msgid "Serbia and Montenegro" msgstr "Сербія та Чорногорія" #: src/common/util.c:903 msgid "Cuba" msgstr "Куба" #: src/common/util.c:904 msgid "Cape Verde" msgstr "Капе Верде" #: src/common/util.c:905 msgid "Christmas Island" msgstr "Різдвяні острови" #: src/common/util.c:906 msgid "Cyprus" msgstr "Кіпр" #: src/common/util.c:907 msgid "Czech Republic" msgstr "Чеська республіка" #: src/common/util.c:908 msgid "Germany" msgstr "Німеччина" #: src/common/util.c:909 msgid "Djibouti" msgstr "Джибуті" #: src/common/util.c:910 msgid "Denmark" msgstr "Данія" #: src/common/util.c:911 msgid "Dominica" msgstr "Домініка" #: src/common/util.c:912 msgid "Dominican Republic" msgstr "Домініканська Республіка" #: src/common/util.c:913 msgid "Algeria" msgstr "Алжир" #: src/common/util.c:914 msgid "Ecuador" msgstr "Еквадор" #: src<style>pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */</style><div class="highlight"><pre><span></span><span class="cm">/* X-Chat</span> <span class="cm"> * Copyright (C) 1998 Peter Zelezny.</span> <span class="cm"> *</span> <span class="cm"> * This program is free software; you can redistribute it and/or modify</span> <span class="cm"> * it under the terms of the GNU General Public License as published by</span> <span class="cm"> * the Free Software Foundation; either version 2 of the License, or</span> <span class="cm"> * (at your option) any later version.</span> <span class="cm"> *</span> <span class="cm"> * This program is distributed in the hope that it will be useful,</span> <span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> <span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> <span class="cm"> * GNU General Public License for more details.</span> <span class="cm"> *</span> <span class="cm"> * You should have received a copy of the GNU General Public License</span> <span class="cm"> * along with this program; if not, write to the Free Software</span> <span class="cm"> * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA</span> <span class="cm"> */</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdio.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdlib.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/types.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/stat.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><string.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><fcntl.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><ctype.h></span> <span class="cp">#ifdef WIN32</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><io.h></span> <span class="cp">#else</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><unistd.h></span> <span class="cp">#endif</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"fe-gtk.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtklabel.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtkeditable.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtkmenu.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtkmenuitem.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtkoptionmenu.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtkvbox.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtkhbox.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtkclist.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtknotebook.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtkcheckbutton.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtkentry.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtkvscrollbar.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"../common/xchat.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"../common/xchatc.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"../common/cfgfiles.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"../common/fe.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"../common/userlist.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"../common/outbound.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"../common/util.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"../common/text.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"../common/plugin.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gdk/gdkkeysyms.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"gtkutil.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"menu.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"xtext.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"palette.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"maingui.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"textgui.h"</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf">"fkeys.h"</span> <span class="cp">#ifdef USE_GTKSPELL</span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtktextview.h></span> <span class="cp">#endif</span> <span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">replace_handle</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">);</span> <span class="kt">void</span><span class="w"> </span><span class="nf">key_action_tab_clean</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">);</span> <span class="cm">/***************** Key Binding Code ******************/</span> <span class="cm">/* NOTES:</span> <span class="cm"> To add a new action:</span> <span class="cm"> 1) inc KEY_MAX_ACTIONS</span> <span class="cm"> 2) write the function at the bottom of this file (with all the others)</span> <span class="cm"> FIXME: Write about calling and returning</span> <span class="cm"> 3) Add it to key_actions</span> <span class="cm"> --AGL</span> <span class="cm"> */</span> <span class="cm">/* Remember that the *number* of actions is this *plus* 1 --AGL */</span> <span class="cp">#define KEY_MAX_ACTIONS 14</span> <span class="cm">/* These are cp'ed from history.c --AGL */</span> <span class="cp">#define STATE_SHIFT GDK_SHIFT_MASK</span> <span class="cp">#define STATE_ALT GDK_MOD1_MASK</span> <span class="cp">#define STATE_CTRL GDK_CONTROL_MASK</span> <span class="k">struct</span><span class="w"> </span><span class="nc">key_binding</span> <span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">keyval</span><span class="p">;</span><span class="w"> </span><span class="cm">/* GDK keynumber */</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">keyname</span><span class="p">;</span><span class="w"> </span><span class="cm">/* String with the name of the function */</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">action</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Index into key_actions */</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">mod</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Flags of STATE_* above */</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">data1</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">data2</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Pointers to strings, these must be freed */</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">key_binding</span><span class="w"> </span><span class="o">*</span><span class="n">next</span><span class="p">;</span> <span class="p">};</span> <span class="k">struct</span><span class="w"> </span><span class="nc">key_action</span> <span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">handler</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">sess</span><span class="p">);</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">name</span><span class="p">;</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">help</span><span class="p">;</span> <span class="p">};</span> <span class="k">struct</span><span class="w"> </span><span class="nc">gcomp_data</span> <span class="p">{</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="n">data</span><span class="p">[</span><span class="n">CHANLEN</span><span class="p">];</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">elen</span><span class="p">;</span> <span class="p">};</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_load_kbs</span><span class="w"> </span><span class="p">(</span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">key_load_defaults</span><span class="w"> </span><span class="p">();</span> <span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">key_save_kbs</span><span class="w"> </span><span class="p">(</span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_handle_command</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_page_switch</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="kt">int</span><span class="w"> </span><span class="nf">key_action_insert</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_scroll_page</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_set_buffer</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_history_up</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_history_down</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_tab_comp</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_comp_chng</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_replace</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_move_tab_left</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_move_tab_right</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_move_tab_family_left</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_move_tab_family_right</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">key_action_put_history</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d1</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">d2</span><span class="p">,</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">);</span> <span class="k">static</span><span class="w"> </span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="n">key_dialog</span><span class="p">;</span> <span class="k">static</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">key_binding</span><span class="w"> </span><span class="o">*</span><span class="n">keys_root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> <span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">key_action</span><span class="w"> </span><span class="n">key_actions</span><span class="p">[</span><span class="n">KEY_MAX_ACTIONS</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_handle_command</span><span class="p">,</span><span class="w"> </span><span class="s">"Run Command"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"The </span><span class="se">\002</span><span class="s">Run Command</span><span class="se">\002</span><span class="s"> action runs the data in Data 1 as if it has been typed into the entry box where you pressed the key sequence. Thus it can contain text (which will be sent to the channel/person), commands or user commands. When run all </span><span class="se">\002\\</span><span class="s">n</span><span class="se">\002</span><span class="s"> characters in Data 1 are used to deliminate seperate commands so it is possible to run more than one command. If you want a </span><span class="se">\002\\\002</span><span class="s"> in the actual text run then enter </span><span class="se">\002\\\\\002</span><span class="s">"</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_page_switch</span><span class="p">,</span><span class="w"> </span><span class="s">"Change Page"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"The </span><span class="se">\002</span><span class="s">Change Page</span><span class="se">\002</span><span class="s"> command switches between pages in the notebook. Set Data 1 to the page you want to switch to. If Data 2 is set to anything then the switch will be relative to the current position"</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_insert</span><span class="p">,</span><span class="w"> </span><span class="s">"Insert in Buffer"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"The </span><span class="se">\002</span><span class="s">Insert in Buffer</span><span class="se">\002</span><span class="s"> command will insert the contents of Data 1 into the entry where the key sequence was pressed at the current cursor position"</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_scroll_page</span><span class="p">,</span><span class="w"> </span><span class="s">"Scroll Page"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"The </span><span class="se">\002</span><span class="s">Scroll Page</span><span class="se">\002</span><span class="s"> command scrolls the text widget up or down one page or one line. Set Data 1 to either Up, Down, +1 or -1."</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_set_buffer</span><span class="p">,</span><span class="w"> </span><span class="s">"Set Buffer"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"The </span><span class="se">\002</span><span class="s">Set Buffer</span><span class="se">\002</span><span class="s"> command sets the entry where the key sequence was entered to the contents of Data 1"</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_history_up</span><span class="p">,</span><span class="w"> </span><span class="s">"Last Command"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"The </span><span class="se">\002</span><span class="s">Last Command</span><span class="se">\002</span><span class="s"> command sets the entry to contain the last command entered - the same as pressing up in a shell"</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_history_down</span><span class="p">,</span><span class="w"> </span><span class="s">"Next Command"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"The </span><span class="se">\002</span><span class="s">Next Command</span><span class="se">\002</span><span class="s"> command sets the entry to contain the next command entered - the same as pressing down in a shell"</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_tab_comp</span><span class="p">,</span><span class="w"> </span><span class="s">"Complete nick/command"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"This command changes the text in the entry to finish an incomplete nickname or command. If Data 1 is set then double-tabbing in a string will select the last nick, not the next"</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_comp_chng</span><span class="p">,</span><span class="w"> </span><span class="s">"Change Selected Nick"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"This command scrolls up and down through the list of nicks. If Data 1 is set to anything it will scroll up, else it scrolls down"</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_replace</span><span class="p">,</span><span class="w"> </span><span class="s">"Check For Replace"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"This command checks the last word entered in the entry against the replace list and replaces it if it finds a match"</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_move_tab_left</span><span class="p">,</span><span class="w"> </span><span class="s">"Move front tab left"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"This command moves the front tab left by one"</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_move_tab_right</span><span class="p">,</span><span class="w"> </span><span class="s">"Move front tab right"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"This command moves the front tab right by one"</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_move_tab_family_left</span><span class="p">,</span><span class="w"> </span><span class="s">"Move tab family left"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"This command moves the current tab family to the left"</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_move_tab_family_right</span><span class="p">,</span><span class="w"> </span><span class="s">"Move tab family right"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"This command moves the current tab family to the right"</span><span class="p">)},</span> <span class="w"> </span><span class="p">{</span><span class="n">key_action_put_history</span><span class="p">,</span><span class="w"> </span><span class="s">"Push input line into history"</span><span class="p">,</span> <span class="w"> </span><span class="n">N_</span><span class="p">(</span><span class="s">"Push input line into history but doesn't send to server"</span><span class="p">)},</span> <span class="p">};</span> <span class="kt">void</span> <span class="nf">key_init</span><span class="w"> </span><span class="p">()</span> <span class="p">{</span> <span class="w"> </span><span class="n">keys_root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">key_load_kbs</span><span class="w"> </span><span class="p">(</span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">key_load_defaults</span><span class="w"> </span><span class="p">();</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">key_load_kbs</span><span class="w"> </span><span class="p">(</span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span> <span class="w"> </span><span class="n">fe_message</span><span class="w"> </span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s">"There was an error loading key"</span> <span class="w"> </span><span class="s">" bindings configuration"</span><span class="p">),</span><span class="w"> </span><span class="n">FE_MSG_ERROR</span><span class="p">);</span> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> <span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span> <span class="nf">key_get_key_name</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">keyval</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">gdk_keyval_name</span><span class="w"> </span><span class="p">(</span><span class="n">gdk_keyval_to_lower</span><span class="w"> </span><span class="p">(</span><span class="n">keyval</span><span class="p">));</span> <span class="p">}</span> <span class="cm">/* Ok, here are the NOTES</span> <span class="cm"> key_handle_key_press now handles all the key presses and history_keypress is</span> <span class="cm"> now defunct. It goes thru the linked list keys_root and finds a matching</span> <span class="cm"> key. It runs the action func and switches on these values:</span> <span class="cm"> 0) Return</span> <span class="cm"> 1) Find next</span> <span class="cm"> 2) stop signal and return</span> <span class="cm"> * history_keypress is now dead (and gone)</span> <span class="cm"> * key_handle_key_press now takes its role</span> <span class="cm"> * All the possible actions are in a struct called key_actions (in fkeys.c)</span> <span class="cm"> * it is made of {function, name, desc}</span> <span class="cm"> * key bindings can pass 2 *text* strings to the handler. If more options are nee</span> <span class="cm"> ded a format can be put on one of these options</span> <span class="cm"> * key actions are passed {</span> <span class="cm"> the entry widget</span> <span class="cm"> the Gdk event</span> <span class="cm"> data 1</span> <span class="cm"> data 2</span> <span class="cm"> session struct</span> <span class="cm"> }</span> <span class="cm"> * key bindings are stored in a linked list of key_binding structs</span> <span class="cm"> * which looks like {</span> <span class="cm"> int keyval; GDK keynumber</span> <span class="cm"> char *keyname; String with the name of the function </span> <span class="cm"> int action; Index into key_actions </span> <span class="cm"> int mod; Flags of STATE_* above </span> <span class="cm"> char *data1, *data2; Pointers to strings, these must be freed </span> <span class="cm"> struct key_binding *next;</span> <span class="cm"> }</span> <span class="cm"> * remember that is (data1 || data2) != NULL then they need to be free()'ed</span> <span class="cm"> --AGL</span> <span class="cm"> */</span> <span class="n">gboolean</span> <span class="nf">key_handle_key_press</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">GdkEventKey</span><span class="w"> </span><span class="o">*</span><span class="n">evt</span><span class="p">,</span><span class="w"> </span><span class="n">session</span><span class="w"> </span><span class="o">*</span><span class="n">sess</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">key_binding</span><span class="w"> </span><span class="o">*</span><span class="n">kb</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">last</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">keyval</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">evt</span><span class="o">-></span><span class="n">keyval</span><span class="p">;</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">mod</span><span class="p">,</span><span class="w"> </span><span class="n">n</span><span class="p">;</span> <span class="w"> </span><span class="n">GSList</span><span class="w"> </span><span class="o">*</span><span class="n">list</span><span class="p">;</span> <span class="w"> </span><span class="cm">/* where did this event come from? */</span> <span class="w"> </span><span class="n">list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sess_list</span><span class="p">;</span> <span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">list</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">sess</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">list</span><span class="o">-></span><span class="n">data</span><span class="p">;</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">sess</span><span class="o">-></span><span class="n">gui</span><span class="o">-></span><span class="n">input_box</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">wid</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">sess</span><span class="o">-></span><span class="n">gui</span><span class="o">-></span><span class="n">is_tab</span><span class="p">)</span> <span class="w"> </span><span class="n">sess</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">current_tab</span><span class="p">;</span> <span class="w"> </span><span class="k">break</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="n">list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">list</span><span class="o">-></span><span class="n">next</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">list</span><span class="p">)</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> <span class="w"> </span><span class="n">current_sess</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sess</span><span class="p">;</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">plugin_emit_keypress</span><span class="w"> </span><span class="p">(</span><span class="n">sess</span><span class="p">,</span><span class="w"> </span><span class="n">evt</span><span class="o">-></span><span class="n">state</span><span class="p">,</span><span class="w"> </span><span class="n">evt</span><span class="o">-></span><span class="n">keyval</span><span class="p">,</span><span class="w"> </span><span class="n">evt</span><span class="o">-></span><span class="n">length</span><span class="p">,</span><span class="w"> </span><span class="n">evt</span><span class="o">-></span><span class="n">string</span><span class="p">))</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="cm">/* maybe the plugin closed this tab? */</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">is_session</span><span class="w"> </span><span class="p">(</span><span class="n">sess</span><span class="p">))</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="n">mod</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">evt</span><span class="o">-></span><span class="n">state</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="p">(</span><span class="n">STATE_CTRL</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">STATE_ALT</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">STATE_SHIFT</span><span class="p">);</span> <span class="w"> </span><span class="n">kb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">keys_root</span><span class="p">;</span> <span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">keyval</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">keyval</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">mod</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">mod</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">action</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">action</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">KEY_MAX_ACTIONS</span><span class="p">)</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="cm">/* Bump this binding to the top of the list */</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">last</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">last</span><span class="o">-></span><span class="n">next</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">next</span><span class="p">;</span> <span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">next</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">keys_root</span><span class="p">;</span> <span class="w"> </span><span class="n">keys_root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kb</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="cm">/* Run the function */</span> <span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">key_actions</span><span class="p">[</span><span class="n">kb</span><span class="o">-></span><span class="n">action</span><span class="p">].</span><span class="n">handler</span><span class="w"> </span><span class="p">(</span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span><span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">data1</span><span class="p">,</span> <span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">data2</span><span class="p">,</span><span class="w"> </span><span class="n">sess</span><span class="p">);</span> <span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">n</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="mi">0</span><span class="p">:</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="mi">2</span><span class="p">:</span> <span class="w"> </span><span class="n">g_signal_stop_emission_by_name</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="w"> </span><span class="p">(</span><span class="n">wid</span><span class="p">),</span> <span class="w"> </span><span class="s">"key_press_event"</span><span class="p">);</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="n">last</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kb</span><span class="p">;</span> <span class="w"> </span><span class="n">kb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">next</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">keyval</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">GDK_space</span><span class="p">:</span> <span class="w"> </span><span class="n">key_action_tab_clean</span><span class="w"> </span><span class="p">();</span> <span class="w"> </span><span class="k">break</span><span class="p">;</span> <span class="cp">#if defined(USE_GTKSPELL)</span><span class="cm">/* && !defined(WIN32) */</span> <span class="w"> </span><span class="cm">/* gtktextview has no 'activate' event, so we trap ENTER here */</span> <span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">GDK_Return</span><span class="p">:</span> <span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">GDK_KP_Enter</span><span class="p">:</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="n">evt</span><span class="o">-></span><span class="n">state</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="n">GDK_CONTROL_MASK</span><span class="p">))</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">g_signal_stop_emission_by_name</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="w"> </span><span class="p">(</span><span class="n">wid</span><span class="p">),</span><span class="w"> </span><span class="s">"key_press_event"</span><span class="p">);</span> <span class="w"> </span><span class="n">mg_inputbox_cb</span><span class="w"> </span><span class="p">(</span><span class="n">wid</span><span class="p">,</span><span class="w"> </span><span class="n">sess</span><span class="o">-></span><span class="n">gui</span><span class="p">);</span> <span class="w"> </span><span class="p">}</span> <span class="cp">#endif</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> <span class="cm">/* Walks keys_root and free()'s everything */</span> <span class="cm">/*static void</span> <span class="cm">key_free_all ()</span> <span class="cm">{</span> <span class="cm"> struct key_binding *cur, *next;</span> <span class="cm"> cur = keys_root;</span> <span class="cm"> while (cur)</span> <span class="cm"> {</span> <span class="cm"> next = cur->next;</span> <span class="cm"> if (cur->data1)</span> <span class="cm"> free (cur->data1);</span> <span class="cm"> if (cur->data2)</span> <span class="cm"> free (cur->data2);</span> <span class="cm"> free (cur);</span> <span class="cm"> cur = next;</span> <span class="cm"> }</span> <span class="cm"> keys_root = NULL;</span> <span class="cm">}*/</span> <span class="cm">/* Turns mod flags into a C-A-S string */</span> <span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span> <span class="nf">key_make_mod_str</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">mod</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">buf</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">mod</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="n">STATE_CTRL</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="w"> </span><span class="n">buf</span><span class="p">[</span><span class="n">i</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">'-'</span><span class="p">;</span> <span class="w"> </span><span class="n">buf</span><span class="p">[</span><span class="n">i</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">'C'</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">mod</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="n">STATE_ALT</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="w"> </span><span class="n">buf</span><span class="p">[</span><span class="n">i</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">'-'</span><span class="p">;</span> <span class="w"> </span><span class="n">buf</span><span class="p">[</span><span class="n">i</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">'A'</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">mod</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="n">STATE_SHIFT</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="w"> </span><span class="n">buf</span><span class="p">[</span><span class="n">i</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">'-'</span><span class="p">;</span> <span class="w"> </span><span class="n">buf</span><span class="p">[</span><span class="n">i</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">'S'</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="n">buf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">buf</span><span class="p">;</span> <span class="p">}</span> <span class="cm">/* ***** GUI code here ******************* */</span> <span class="cm">/* NOTE: The key_dialog defin is above --AGL */</span> <span class="k">static</span><span class="w"> </span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="n">key_dialog_act_menu</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">key_dialog_kb_clist</span><span class="p">;</span> <span class="k">static</span><span class="w"> </span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="n">key_dialog_tog_c</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">key_dialog_tog_s</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">key_dialog_tog_a</span><span class="p">;</span> <span class="k">static</span><span class="w"> </span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="n">key_dialog_ent_key</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">key_dialog_ent_d1</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">key_dialog_ent_d2</span><span class="p">;</span> <span class="k">static</span><span class="w"> </span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="n">key_dialog_text</span><span class="p">;</span> <span class="k">static</span><span class="w"> </span><span class="kt">void</span> <span class="nf">key_load_defaults</span><span class="w"> </span><span class="p">()</span> <span class="p">{</span> <span class="w"> </span><span class="cm">/* This is the default config */</span> <span class="cp">#define defcfg \</span> <span class="cp"> "C\nPrior\nChange Page\nD1:-1\nD2:Relative\n\n"\</span> <span class="cp"> "C\nNext\nChange Page\nD1:1\nD2:Relative\n\n"\</span> <span class="cp"> "A\n9\nChange Page\nD1:9\nD2!\n\n"\</span> <span class="cp"> "A\n8\nChange Page\nD1:8\nD2!\n\n"\</span> <span class="cp"> "A\n7\nChange Page\nD1:7\nD2!\n\n"\</span> <span class="cp"> "A\n6\nChange Page\nD1:6\nD2!\n\n"\</span> <span class="cp"> "A\n5\nChange Page\nD1:5\nD2!\n\n"\</span> <span class="cp"> "A\n4\nChange Page\nD1:4\nD2!\n\n"\</span> <span class="cp"> "A\n3\nChange Page\nD1:3\nD2!\n\n"\</span> <span class="cp"> "A\n2\nChange Page\nD1:2\nD2!\n\n"\</span> <span class="cp"> "A\n1\nChange Page\nD1:1\nD2!\n\n"\</span> <span class="cp"> "C\no\nInsert in Buffer\nD1:\nD2!\n\n"\</span> <span class="cp"> "C\nb\nInsert in Buffer\nD1:\nD2!\n\n"\</span> <span class="cp"> "C\nk\nInsert in Buffer\nD1:\nD2!\n\n"\</span> <span class="cp"> "S\nNext\nChange Selected Nick\nD1!\nD2!\n\n"\</span> <span class="cp"> "S\nPrior\nChange Selected Nick\nD1:Up\nD2!\n\n"\</span> <span class="cp"> "None\nNext\nScroll Page\nD1:Down\nD2!\n\n"\</span> <span class="cp"> "None\nPrior\nScroll Page\nD1:Up\nD2!\n\n"\</span> <span class="cp"> "S\nDown\nScroll Page\nD1:+1\nD2!\n\n"\</span> <span class="cp"> "S\nUp\nScroll Page\nD1:-1\nD2!\n\n"\</span> <span class="cp"> "None\nDown\nNext Command\nD1!\nD2!\n\n"\</span> <span class="cp"> "None\nUp\nLast Command\nD1!\nD2!\n\n"\</span> <span class="cp"> "None\nTab\nComplete nick/command\nD1!\nD2!\n\n"\</span> <span class="cp"> "None\nspace\nCheck For Replace\nD1!\nD2!\n\n"\</span> <span class="cp"> "None\nReturn\nCheck For Replace\nD1!\nD2!\n\n"\</span> <span class="cp"> "None\nKP_Enter\nCheck For Replace\nD1!\nD2!\n\n"\</span> <span class="cp"> "C\nTab\nComplete nick/command\nD1:Up\nD2!\n\n"\</span> <span class="cp"> "A\nLeft\nMove front tab left\nD1!\nD2!\n\n"\</span> <span class="cp"> "A\nRight\nMove front tab right\nD1!\nD2!\n\n"\</span> <span class="cp"> "CS\nPrior\nMove tab family left\nD1!\nD2!\n\n"\</span> <span class="cp"> "CS\nNext\nMove tab family right\nD1!\nD2!\n\n"\</span> <span class="cp"> "None\nF9\nRun Command\nD1:/GUI MENU TOGGLE\nD2!\n\n"</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">fd</span><span class="p">;</span> <span class="w"> </span><span class="n">fd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">xchat_open_file</span><span class="w"> </span><span class="p">(</span><span class="s">"keybindings.conf"</span><span class="p">,</span><span class="w"> </span><span class="n">O_CREAT</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">O_TRUNC</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">O_WRONLY</span><span class="p">,</span><span class="w"> </span><span class="mh">0x180</span><span class="p">,</span><span class="w"> </span><span class="n">XOF_DOMODE</span><span class="p">);</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">fd</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span> <span class="w"> </span><span class="cm">/* ???!!! */</span> <span class="w"> </span><span class="k">return</span><span class="p">;</span> <span class="w"> </span><span class="n">write</span><span class="w"> </span><span class="p">(</span><span class="n">fd</span><span class="p">,</span><span class="w"> </span><span class="n">defcfg</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="w"> </span><span class="p">(</span><span class="n">defcfg</span><span class="p">));</span> <span class="w"> </span><span class="n">close</span><span class="w"> </span><span class="p">(</span><span class="n">fd</span><span class="p">);</span> <span class="p">}</span> <span class="k">static</span><span class="w"> </span><span class="kt">void</span> <span class="nf">key_dialog_close</span><span class="w"> </span><span class="p">()</span> <span class="p">{</span> <span class="w"> </span><span class="n">key_dialog</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> <span class="w"> </span><span class="n">key_save_kbs</span><span class="w"> </span><span class="p">(</span><span class="nb">NULL</span><span class="p">);</span> <span class="p">}</span> <span class="k">static</span><span class="w"> </span><span class="kt">void</span> <span class="nf">key_dialog_add_new</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">button</span><span class="p">,</span><span class="w"> </span><span class="n">GtkCList</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">list</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">strs</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="s">""</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">};</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">key_binding</span><span class="w"> </span><span class="o">*</span><span class="n">kb</span><span class="p">;</span> <span class="w"> </span><span class="n">strs</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">_</span><span class="p">(</span><span class="s">"<none>"</span><span class="p">);</span> <span class="w"> </span><span class="n">strs</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">_</span><span class="p">(</span><span class="s">"<none>"</span><span class="p">);</span> <span class="w"> </span><span class="n">strs</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">_</span><span class="p">(</span><span class="s">"<none>"</span><span class="p">);</span> <span class="w"> </span><span class="n">strs</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">_</span><span class="p">(</span><span class="s">"<none>"</span><span class="p">);</span> <span class="w"> </span><span class="n">kb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">malloc</span><span class="w"> </span><span class="p">(</span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">key_binding</span><span class="p">));</span> <span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">keyval</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">keyname</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> <span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">action</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span> <span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">mod</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">data1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">data2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> <span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">next</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">keys_root</span><span class="p">;</span> <span class="w"> </span><span class="n">keys_root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kb</span><span class="p">;</span> <span class="w"> </span><span class="n">gtk_clist_set_row_data</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_CLIST</span><span class="w"> </span><span class="p">(</span><span class="n">list</span><span class="p">),</span> <span class="w"> </span><span class="n">gtk_clist_append</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_CLIST</span><span class="w"> </span><span class="p">(</span><span class="n">list</span><span class="p">),</span><span class="w"> </span><span class="n">strs</span><span class="p">),</span><span class="w"> </span><span class="n">kb</span><span class="p">);</span> <span class="p">}</span> <span class="k">static</span><span class="w"> </span><span class="kt">void</span> <span class="nf">key_dialog_delete</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">button</span><span class="p">,</span><span class="w"> </span><span class="n">GtkCList</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">list</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">key_binding</span><span class="w"> </span><span class="o">*</span><span class="n">kb</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">cur</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">last</span><span class="p">;</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">row</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtkutil_clist_selection</span><span class="w"> </span><span class="p">((</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">list</span><span class="p">);</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">row</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">-1</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">kb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_clist_get_row_data</span><span class="w"> </span><span class="p">(</span><span class="n">list</span><span class="p">,</span><span class="w"> </span><span class="n">row</span><span class="p">);</span> <span class="w"> </span><span class="n">cur</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">keys_root</span><span class="p">;</span> <span class="w"> </span><span class="n">last</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> <span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">cur</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">cur</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">kb</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">last</span><span class="p">)</span> <span class="w"> </span><span class="n">last</span><span class="o">-></span><span class="n">next</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">next</span><span class="p">;</span> <span class="w"> </span><span class="k">else</span> <span class="w"> </span><span class="n">keys_root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">next</span><span class="p">;</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">data1</span><span class="p">)</span> <span class="w"> </span><span class="n">free</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">data1</span><span class="p">);</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">data2</span><span class="p">)</span> <span class="w"> </span><span class="n">free</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">data2</span><span class="p">);</span> <span class="w"> </span><span class="n">free</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="p">);</span> <span class="w"> </span><span class="n">gtk_clist_remove</span><span class="w"> </span><span class="p">(</span><span class="n">list</span><span class="p">,</span><span class="w"> </span><span class="n">row</span><span class="p">);</span> <span class="w"> </span><span class="k">return</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="n">last</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cur</span><span class="p">;</span> <span class="w"> </span><span class="n">cur</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cur</span><span class="o">-></span><span class="n">next</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="n">printf</span><span class="w"> </span><span class="p">(</span><span class="s">"*** key_dialog_delete: couldn't find kb in list!</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> <span class="w"> </span><span class="cm">/*if (getenv ("XCHAT_DEBUG"))</span> <span class="cm"> abort ();*/</span> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> <span class="k">static</span><span class="w"> </span><span class="kt">void</span> <span class="nf">key_print_text</span><span class="w"> </span><span class="p">(</span><span class="n">GtkXText</span><span class="w"> </span><span class="o">*</span><span class="n">xtext</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">text</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">old</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">prefs</span><span class="p">.</span><span class="n">timestamp</span><span class="p">;</span> <span class="w"> </span><span class="n">prefs</span><span class="p">.</span><span class="n">timestamp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="cm">/* temporarily disable stamps */</span> <span class="w"> </span><span class="n">gtk_xtext_clear</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_XTEXT</span><span class="w"> </span><span class="p">(</span><span class="n">xtext</span><span class="p">)</span><span class="o">-></span><span class="n">buffer</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span> <span class="w"> </span><span class="n">PrintTextRaw</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_XTEXT</span><span class="w"> </span><span class="p">(</span><span class="n">xtext</span><span class="p">)</span><span class="o">-></span><span class="n">buffer</span><span class="p">,</span><span class="w"> </span><span class="n">text</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span> <span class="w"> </span><span class="n">prefs</span><span class="p">.</span><span class="n">timestamp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">old</span><span class="p">;</span> <span class="p">}</span> <span class="k">static</span><span class="w"> </span><span class="kt">void</span> <span class="nf">key_dialog_sel_act</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">un</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">num</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">row</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtkutil_clist_selection</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_kb_clist</span><span class="p">);</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">key_binding</span><span class="w"> </span><span class="o">*</span><span class="n">kb</span><span class="p">;</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">row</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">-1</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">kb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_clist_get_row_data</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_CLIST</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_kb_clist</span><span class="p">),</span><span class="w"> </span><span class="n">row</span><span class="p">);</span> <span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">action</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">num</span><span class="p">;</span> <span class="w"> </span><span class="n">gtk_clist_set_text</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_CLIST</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_kb_clist</span><span class="p">),</span><span class="w"> </span><span class="n">row</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span> <span class="w"> </span><span class="n">_</span><span class="p">(</span><span class="n">key_actions</span><span class="p">[</span><span class="n">num</span><span class="p">].</span><span class="n">name</span><span class="p">));</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">key_actions</span><span class="p">[</span><span class="n">num</span><span class="p">].</span><span class="n">help</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">key_print_text</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_XTEXT</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_text</span><span class="p">),</span><span class="w"> </span><span class="n">_</span><span class="p">(</span><span class="n">key_actions</span><span class="p">[</span><span class="n">num</span><span class="p">].</span><span class="n">help</span><span class="p">));</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> <span class="k">static</span><span class="w"> </span><span class="kt">void</span> <span class="nf">key_dialog_sel_row</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">clist</span><span class="p">,</span><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">row</span><span class="p">,</span><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">column</span><span class="p">,</span> <span class="w"> </span><span class="n">GdkEventButton</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">evt</span><span class="p">,</span><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">data</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">key_binding</span><span class="w"> </span><span class="o">*</span><span class="n">kb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_clist_get_row_data</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_CLIST</span><span class="w"> </span><span class="p">(</span><span class="n">clist</span><span class="p">),</span><span class="w"> </span><span class="n">row</span><span class="p">);</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">printf</span><span class="w"> </span><span class="p">(</span><span class="s">"*** key_dialog_sel_row: kb == NULL</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> <span class="w"> </span><span class="n">abort</span><span class="w"> </span><span class="p">();</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">action</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">-1</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">action</span><span class="w"> </span><span class="o"><=</span><span class="w"> </span><span class="n">KEY_MAX_ACTIONS</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">gtk_option_menu_set_history</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_OPTION_MENU</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_act_menu</span><span class="p">),</span> <span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">action</span><span class="p">);</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">key_actions</span><span class="p">[</span><span class="n">kb</span><span class="o">-></span><span class="n">action</span><span class="p">].</span><span class="n">help</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">key_print_text</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_XTEXT</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_text</span><span class="p">),</span><span class="w"> </span><span class="n">_</span><span class="p">(</span><span class="n">key_actions</span><span class="p">[</span><span class="n">kb</span><span class="o">-></span><span class="n">action</span><span class="p">].</span><span class="n">help</span><span class="p">));</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="n">gtk_toggle_button_set_active</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_TOGGLE_BUTTON</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_tog_c</span><span class="p">),</span> <span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">mod</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="n">STATE_CTRL</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">STATE_CTRL</span><span class="p">);</span> <span class="w"> </span><span class="n">gtk_toggle_button_set_active</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_TOGGLE_BUTTON</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_tog_s</span><span class="p">),</span> <span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">mod</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="n">STATE_SHIFT</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">STATE_SHIFT</span><span class="p">);</span> <span class="w"> </span><span class="n">gtk_toggle_button_set_active</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_TOGGLE_BUTTON</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_tog_a</span><span class="p">),</span> <span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">mod</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="n">STATE_ALT</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">STATE_ALT</span><span class="p">);</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">data1</span><span class="p">)</span> <span class="w"> </span><span class="n">gtk_entry_set_text</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_ENTRY</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_ent_d1</span><span class="p">),</span><span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">data1</span><span class="p">);</span> <span class="w"> </span><span class="k">else</span> <span class="w"> </span><span class="n">gtk_entry_set_text</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_ENTRY</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_ent_d1</span><span class="p">),</span><span class="w"> </span><span class="s">""</span><span class="p">);</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">data2</span><span class="p">)</span> <span class="w"> </span><span class="n">gtk_entry_set_text</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_ENTRY</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_ent_d2</span><span class="p">),</span><span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">data2</span><span class="p">);</span> <span class="w"> </span><span class="k">else</span> <span class="w"> </span><span class="n">gtk_entry_set_text</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_ENTRY</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_ent_d2</span><span class="p">),</span><span class="w"> </span><span class="s">""</span><span class="p">);</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">keyname</span><span class="p">)</span> <span class="w"> </span><span class="n">gtk_entry_set_text</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_ENTRY</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_ent_key</span><span class="p">),</span><span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">keyname</span><span class="p">);</span> <span class="w"> </span><span class="k">else</span> <span class="w"> </span><span class="n">gtk_entry_set_text</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_ENTRY</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_ent_key</span><span class="p">),</span><span class="w"> </span><span class="s">""</span><span class="p">);</span> <span class="p">}</span> <span class="k">static</span><span class="w"> </span><span class="kt">void</span> <span class="nf">key_dialog_tog_key</span><span class="w"> </span><span class="p">(</span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">tog</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">kstate</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">state</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GTK_TOGGLE_BUTTON</span><span class="w"> </span><span class="p">(</span><span class="n">tog</span><span class="p">)</span><span class="o">-></span><span class="n">active</span><span class="p">;</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">row</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtkutil_clist_selection</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_kb_clist</span><span class="p">);</span> <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">key_binding</span><span class="w"> </span><span class="o">*</span><span class="n">kb</span><span class="p">;</span> <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="n">buf</span><span class="p">[</span><span class="mi">32</span><span class="p">];</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">row</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">-1</span><span class="p">)</span> <span class="w"> </span><span class="k">return</span><span class="p">;</span> <span class="w"> </span><span class="n">kb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_clist_get_row_data</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_CLIST</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_kb_clist</span><span class="p">),</span><span class="w"> </span><span class="n">row</span><span class="p">);</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">state</span><span class="p">)</span> <span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">mod</span><span class="w"> </span><span class="o">|=</span><span class="w"> </span><span class="n">kstate</span><span class="p">;</span> <span class="w"> </span><span class="k">else</span> <span class="w"> </span><span class="n">kb</span><span class="o">-></span><span class="n">mod</span><span class="w"> </span><span class="o">&=</span><span class="w"> </span><span class="o">~</span><span class="n">kstate</span><span class="p">;</span> <span class="w"> </span><span class="n">gtk_clist_set_text</span><span class="w"> </span><span class="p">(</span><span class="n">GTK_CLIST</span><span class="w"> </span><span class="p">(</span><span class="n">key_dialog_kb_clist</span><span class="p">),</span><span class="w"> </span><span class="n">row</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span> <span class="w"> </span><span class="n">key_make_mod_str</span><span class="w"> </span><span class="p">(</span><span class="n">kb</span><span class="o">-></span><span class="n">mod</span><span class="p">,</span><span class="w"> </span><span class="n">buf</span><span class="p">));</span> <span class="p">}</span> <span class="k">static</span><span class="w"> </span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span> <span class="nf">key_dialog_make_toggle</span><span class="w"> </span><span class="p">(</span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">label</span><span class="p">,</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">callback</span><span class="p">,</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">option</span><span class="p">,</span> <span class="w"> </span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">box</span><s