Index: msgs/es.msg ================================================================== --- msgs/es.msg +++ msgs/es.msg @@ -1,6 +1,6 @@ -::msgcat::mcset es "allpages_file" "Especial/Todas_las_Páginas.md" +::msgcat::mcset es "allpages_file" "Especial/Todas_las_Paginas.md" ::msgcat::mcset es "missingrefs_file" "Especial/Referencios_que_Falta.md" ::msgcat::mcset es "contents" "Contenido" ::msgcat::mcset es "refs0" "referencias" ::msgcat::mcset es "refs1" "referencia" ::msgcat::mcset es "refs2" "referencias" Index: tools/refresh_allpages.tcl ================================================================== --- tools/refresh_allpages.tcl +++ tools/refresh_allpages.tcl @@ -10,27 +10,20 @@ proc md_filter {fn} { expr {[file isfile $fn] && [file extension $fn] eq ".md"} } -proc find_linked_files {data file} { - set dir [file dirname $file] - set norm_file [file normalize $file] +proc find_linked_files {data dir} { set matches [regexp -all -inline {]\(([^)]*)\)} $data] set res {} foreach {_ link} $matches { # Store only internal (relative) links to .md without anchors if {[string first : $link] >= 0 || [string first # $link] == 0} continue if {[regexp {^([^#]*\.md)(#|$)} $link -> name _]} { - set norm_name [file normalize [file join $dir $name]] - if {$norm_file ne $norm_name} { - # Do not store links to the file itself - - lappend res $norm_name - } + lappend res [file normalize [file join $dir $name]] } } return $res } @@ -41,11 +34,11 @@ set fd [open $fn] fconfigure $fd -encoding utf-8 set data [read $fd] close $fd - lappend res {*}[find_linked_files $data $fn] + lappend res {*}[find_linked_files $data [file dirname $fn]] } return $res } proc pagename {title} { Index: tools/refresh_missingrefs.tcl ================================================================== --- tools/refresh_missingrefs.tcl +++ tools/refresh_missingrefs.tcl @@ -84,11 +84,11 @@ set links [find_links $data] set stripped_links {} foreach link $links { - if {[regexp {(mailto:|xmpp:|news:|ftp://|http://|https://)} $link] && + if {[regexp {(xmpp:|ftp://|http://|https://)} $link] && ![regexp {tkabber\.jabe\.ru} $link]} { continue } set idx [string first # $link] Index: tools/refresh_tocs.tcl ================================================================== --- tools/refresh_tocs.tcl +++ tools/refresh_tocs.tcl @@ -15,19 +15,15 @@ } return $offset } proc sanitize_anchor {text} { - string map {\" "" / _ \u2014 - ( "" ) "" ! "" ? "" , "" : "" ; "" # N - \[ "" \] "" \\ "" ' "" * "" < "" > "" @ "" % "" & ""} \ + string map {\" "" / _ — - ( "" ) "" ! "" ? "" , "" : "" ; "" # N + \[ "" \] "" \\ "" ' "" * "" < "" > ""} \ [regsub -all {\s} [string trim $text] {_}] } -proc remove_links {text} { - regsub -all {\[(.*)\]\([^)]*\)} $text {\1} -} - proc md_filter {fn} { expr {[file isfile $fn] && [file extension $fn] eq ".md"} } proc refresh_tocs {lang dir} { @@ -119,28 +115,25 @@ if {![regexp {^(#+)\s*()*\s*(.*)} $h -> hashes anchor header]} { error "Invalid header in file '$fn' at line $l" } set header [string trim $header] - set tocheader [remove_links $header] - set newanchor [sanitize_anchor $tocheader] + set newanchor [sanitize_anchor $header] lset body $l "$hashes $header" set level [h_level $h] - if {$level > $min_level + 2} continue - incr counter($level) for {set i [expr {$level+1}]} {$i <= $min_level+2} {incr i} { set counter($i) 0 } - set spaces [string repeat " " [expr {$level-$min_level}]] + set spaces [string repeat " " [expr {$level-$min_level}]] set num $counter($min_level) for {set i [expr {$min_level+1}]} {$i <= $min_level+2} {incr i} { if {$counter($i) == 0} break append num .$counter($i) } - lappend newtoc "$spaces* \[$num $tocheader\](#$newanchor)" + lappend newtoc "$spaces* \[$num $header\](#$newanchor)" } lappend newtoc "" if {$toc eq $newtoc} continue DELETED wiki/en/For_Beginners.md Index: wiki/en/For_Beginners.md ================================================================== --- wiki/en/For_Beginners.md +++ /dev/null @@ -1,10 +0,0 @@ -[//]: # (Generated from ../selected/en.tkabber.jabe.ru/index.php/For_Beginners_(en)/index.html) - - -# For Beginners - -From Tkabber Wiki - -(There is currently no text in this page) - - ADDED wiki/en/For_Beginners_(en).md Index: wiki/en/For_Beginners_(en).md ================================================================== --- /dev/null +++ wiki/en/For_Beginners_(en).md @@ -0,0 +1,10 @@ +[//]: # (Generated from ../selected/en.tkabber.jabe.ru/index.php/For_Beginners_(en)/index.html) + + +# For Beginners (en) + +From Tkabber Wiki + +(There is currently no text in this page) + + Index: wiki/en/Help_Contents.md ================================================================== --- wiki/en/Help_Contents.md +++ wiki/en/Help_Contents.md @@ -5,36 +5,36 @@ From Tkabber Wiki This page is written for those who would like to take part in the Tkabber Wiki project as an author or a translator. The goal of the following text is to define a common style of Tkabber Wiki articles so that they would look more or less identical, were not too variegated with bold and italic styles and were clear for understanding. -If you have got some suggestions about the wiki's style, please contact [User:bigote](User_Bigote.md), or [Kostix](../ru/Участник_Kostix.md), or [LKnight](../ru/Участник_Lknight.md). All of them speak English. +If you have got some suggestions about the wiki's style, please contact [User:bigote](User_Bigote.md), or [Kostix](../ru/Участник_kostix.md), or [LKnight](../ru/Участник_lknight.md). All of them speak English. There is a conference `[xmpp:tkabber-wiki@confernce.jabber.ru](xmpp:tkabber-wiki@confernce.jabber.ru)` created for discussing our wiki work progress and its problems. It is invite-only, so if you would like to enter it, please contact us first. Well, let's begin. ## Contents * [1 If you have no experience with wikis](#If_you_have_no_experience_with_wikis) * [2 About Tkabber Wiki style](#About_Tkabber_Wiki_style) - * [2.1 For new article authors](#For_new_article_authors) - * [2.1.1 Indentation by a space](#Indentation_by_a_space) - * [2.1.2 Using HTML](#Using_HTML) - * [2.1.3 Using **\** tag](#Using_tt_tag) - * [2.1.4 Using bold](#Using_bold) - * [2.1.5 Using italic](#Using_italic) - * [2.1.6 Using smilies in the text](#Using_smilies_in_the_text) - * [2.1.7 Language particularities](#Language_particularities) - * [2.1.8 Other appearance elements](#Other_appearance_elements) - * [2.1.9 Sandbox](#Sandbox) - * [2.2 For translators](#For_translators) - * [2.2.1 How to begin making a new language version](#How_to_begin_making_a_new_language_version) - * [2.2.2 Translation into mother tongue](#Translation_into_mother_tongue) - * [2.2.3 Translation into a foreign language](#Translation_into_a_foreign_language) - * [2.2.4 Menu translation](#Menu_translation) - * [2.2.5 Tkabber localization](#Tkabber_localization) + * [2.1 For new article authors](#For_new_article_authors) + * [2.1.1 Indentation by a space](#Indentation_by_a_space) + * [2.1.2 Using HTML](#Using_HTML) + * [2.1.3 Using **\** tag](#Using_tt_tag) + * [2.1.4 Using bold](#Using_bold) + * [2.1.5 Using italic](#Using_italic) + * [2.1.6 Using smilies in the text](#Using_smilies_in_the_text) + * [2.1.7 Language particularities](#Language_particularities) + * [2.1.8 Other appearance elements](#Other_appearance_elements) + * [2.1.9 Sandbox](#Sandbox) + * [2.2 For translators](#For_translators) + * [2.2.1 How to begin making a new language version](#How_to_begin_making_a_new_language_version) + * [2.2.2 Translation into mother tongue](#Translation_into_mother_tongue) + * [2.2.3 Translation into a foreign language](#Translation_into_a_foreign_language) + * [2.2.4 Menu translation](#Menu_translation) + * [2.2.5 Tkabber localization](#Tkabber_localization) # If you have no experience with wikis * There is a complete and quite decent [manual](http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page) about WikiPedia editing. That page contains links to more specific themes like "Images", "How to start a new page", etc. It is an ideal place for beginners. * However, it is more convenient to take a look at [the correspondent page of MediaWiki](http://www.mediawiki.org/w/index.php?title=Sites_using_MediaWiki/gallery&action=submit) to build galleries, which shows you a correct piece of code (it is strange but at wikipedia.org gallery building is explained in few words, and there is no example of working code, so one has to think and try long enough to make something decent ;)) * You can also read [interface setting documentation](http://meta.wikipedia.org/wiki/MediaWiki_i18n) and [MediaWiki User's Manual](http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide). @@ -150,25 +150,25 @@ ## For translators ### How to begin making a new language version -1. If your language is not present in the [languages list](../index.md) please contact [LKnight](../ru/Участник_Lknight.md) or, if it is impossible to locate him, you can send your request to [Bigote](User_Bigote.md). Also you will need to help the project administrators in editing the new wiki's navigation menu and in adding a link to it to the [main index page](../index.md) ;) +1. If your language is not present in the [languages list](http://tkabber.jabe.ru) please contact [[1]](http://ru.tkabber.jabe.ru/Участник:Lknight|LKnight) or, if it is impossible to locate him, you can send your request to [Bigote](User_Bigote.md). Also you will need to help the project administrators in editing the new wiki's navigation menu and in adding a link to it to the Main Page [http://tkabber.jabe.ru](http://tkabber.jabe.ru) ;) 1. Well, a subdomain is ready. Now create an account at the new wiki version and also at all the rest version (if not, you will not get access to the source code of other articles, and besides, you will have to add links to the articles translated by you to all the rest of versions). 1. We would recommend that this page is translated first if possible, as it provides users with information on this wiki's style guidelines. 1. Put in your browser http://your\_language\_code.tkabber.jabe.ru and you will see the main page of the new wiki version (empty, of course). On the left, under the logo is the navigation menu. Click the "Help" link and open it for editing. You will need to obtain the text to translate by opening the Help page of another language in a new browser window or tab for editing, copy all the text, then cancel editing of that language. Paste the text into the edit frame in the new language and save it. Click "edit" again and you are now ready to begin translating the text. 1. Do not forget you have to provide cross-linking between the page you are working on and other its language versions. To do that include somewhere in the text (better at the beginning of the article) a line that looks like **[[en:Help:Contents]]** where "en" is the language code and "Help:Contents" is the article's name in that language. There should be no spaces between the language code, the colon following it, and the first word of the article's name. When you save the page you will see a new section at the bottom of the left menu: links to other languages versions of this page. You will need to add as many links as there are other versions of your page. Do not forget to add a link pointing to your page to all other versions of it. -1. We hope that after this page is translated, consider translating **Main Page** and **Tkabber FAQ** — a collection of answers to the most popular questions regarding Tkabber. We would also recommend translating the articles that **Tkabber FAQ** references too, and so on. You are also free to translate any other page, especially those of interest to you. Note that there is a special page [Special:Allpages](Special/All_Pages.md) where you can find the articles that are left to translate. +1. We hope that after this page is translated, consider translating **Main Page** and **Tkabber FAQ** — a collection of answers to the most popular questions regarding Tkabber. We would also recommend translating the articles that **Tkabber FAQ** references too, and so on. You are also free to translate any other page, especially those of interest to you. Note that there is a special page [Special:Allpages](Special_Allpages.md) where you can find the articles that are left to translate. 1. A couple of advices about how to translate things like [[Member:bigote]], [Special:Recentchanges](Special_Recentchanges.md), etc. * You are already done with the "Help" page, so now go to the [page of recent changes](Special_Recentchanges.md) (it will have other name in your language) where you could see a link to the page you have just translated and your nick next to it. Click it and in your personal info edit page (which, by the way, we'd recommend to fill up, at least put your JID) you will see its name. It will look like "Editando Usuario:Bigote" (this example is in Spanish but of course it would be different in other language). So if you need to put a link to a user's personal page that has an account at your language version, use a pattern [[Usuario:bigote|Bigote]]. If this user does not have a personal page in your language but he or she has one in other language, you might want to give an interwiki link like this: [[:ru:Участник:bigote|Bigote]]. It will look like a local link but it will lead to a personal page of that user in other language. Of course, the language code and the name space will be different, depending on the language version you link to. * Use this approach to know the names of the rest of special pages. (You could just hover the mouse pointer over a link and in the status bar of your browser you will see the fill link to the pointed article, so you only have to "extract" the article's name and to put it in your text.) ### Translation into mother tongue This part is dediacted to the languages other than English. We are trying to explain the problem giving Russian terms as an example but our recommendations could be helpful for other languages too, especially if they differ from English very much, like other slavic languages, Japanese, etc. -When you translate into your own language, some problems with using specific IT terms could appear. On the one hand, in Russian IT slang there is a lot of transliterated English words like "файл" (file), "биндинг" (binding) and adapted words like "винт" (winchester, HDD), "аська" (ICQ). On the other hand, it has sense to translate some words, for example "список контактов" (a list of contacts, or just "contacts") instead of transliterated "ростер" (roster). It is up to you to decide which variant is the best, but the main recommendation is: try to avoid extremes. There is an article on our wiki named **[Terminology](Terminology.md)** where you can look for some difficult terms and also enlarge it if you think it is necessary. +When you translate into your own language, some problems with using specific IT terms could appear. On the one hand, in Russian IT slang there is a lot of transliterated English words like "файл" (file), "биндинг" (binding) and adapted words like "винт" (winchester, HDD), "аська" (ICQ). On the other hand, it has sense to translate some words, for example "список контактов" (a list of contacts, or just "contacts") instead of transliterated "ростер" (roster). It is up to you to decide which variant is the best, but the main recommendation is: try to avoid extremes. There is an article on our wiki named **[Terminology](Terminology_(en).md)** where you can look for some difficult terms and also enlarge it if you think it is necessary. Another problem that grows when translating between languages of different language groups is loan translation, or calque. Try to avoid literal translation. If you do not understand some phrase, literal translation will not save its sense, on the contrary, it will break it. In most cases of such difficulties, it is still possible to achieve a good translation simplifying the sense of the phrase or splitting a long sentence into two or more simple ones. The last remedy: leave the source phrase next to your translation enclosed in parentheses. Somebody else will translate it later; wiki is perfect in this sense. By the way, if you read some article and see an obvious calque that spoils the discourse, do not be lazy: take a look at the source article and correct the translation. If you do not know the source language but nevertheless some place in the translation irritates you, use Discussion of that article (a link to each page's Discussion can be found at the top service menu). ### Translation into a foreign language @@ -180,12 +180,12 @@ * Remember of the destination language syntax rules when translating the wiki articles. For example, in French, all two-element punctuation marks (colon, semicolon, exclamation and question marks, etc.) are divided from the previous word by a space. So, thanks to this particularity, there is no head-ache about setting these marks in bold. * As a consequence from the previous advice, we would recommend **not** to follow the rules explained above if they go against the syntax or stylistics of the other language. It is difficult to give a good example, but if you feel that some style could not be applied (for instance, I have no idea if it is possible to apply italic to Japanese hieroglyphs), so you will have to invent another way of emphasizing some text phragment. ### Menu translation -Only project administrators are able to edit the navigation menu of our wiki, so please contact [Bigote](User_Bigote.md) or [LKnight](../ru/Участник_Lknight.md). +Only project administrators are able to edit the navigation menu of our wiki, so please contact [Bigote](User_Bigote.md) or [LKnight](../ru/Участник_lknight.md). ### Tkabber localization There is [an article (in English)](http://tkabber.jabber.ru/translate/how-to-start-new) at the official Tkabber site that could be very helpful for any person who would like to make a new Tkabber localization or maintain an existent one. Please consult it if you'd like to participate. Index: wiki/en/How_to_add_a_new_remote_command.md ================================================================== --- wiki/en/How_to_add_a_new_remote_command.md +++ wiki/en/How_to_add_a_new_remote_command.md @@ -11,16 +11,16 @@ ## Contents * [1 Understanding](#Understanding) * [2 Coding](#Coding) - * [2.1 Registering your remote command](#Registering_your_remote_command) - * [2.2 Scheduler](#Scheduler) - * [2.3 Steps](#Steps) - * [2.4 Last step](#Last_step) - * [2.5 Sending errors](#Sending_errors) - * [2.6 Cleanup](#Cleanup) + * [2.1 Registering your remote command](#Registering_your_remote_command) + * [2.2 Scheduler](#Scheduler) + * [2.3 Steps](#Steps) + * [2.4 Last step](#Last_step) + * [2.5 Sending errors](#Sending_errors) + * [2.6 Cleanup](#Cleanup) * [3 Read sources!](#Read_sources) * [4 See also](#See_also) ## Understanding Index: wiki/en/Main_Page.md ================================================================== --- wiki/en/Main_Page.md +++ wiki/en/Main_Page.md @@ -10,49 +10,49 @@ Please note that in Russian and Ukrainian parts of this wiki we write Tkabber in Cyrillic, like this — Ткаббер. The reason is simple: Tkabber is a Russian program, so at least in Russian we can permit us do this ;) Besides, declensions make the discourse more smooth and fluent. ## Contents * [1 Contents](#Contents) - * [1.1 Theory](#Theory) - * [1.2 Articles](#Articles) - * [1.3 Development](#Development) - * [1.4 Practice](#Practice) - * [1.5 Repair Parts](#Repair_Parts) - * [1.6 Discussions](#Discussions) - * [1.7 Special Pages](#Special_Pages) + * [1.1 [Theory](Theory.md)](#TheoryTheory.md) + * [1.2 [Articles](Theory.md#For_Advanced_Users)](#ArticlesTheory.mdNFor_Advanced_Users) + * [1.3 [Development](Development.md)](#DevelopmentDevelopment.md) + * [1.4 [Practice](Practice.md)](#PracticePractice.md) + * [1.5 Repair Parts](#Repair_Parts) + * [1.6 Discussions](#Discussions) + * [1.7 Special Pages](#Special_Pages) * [2 A Short Description Of Some Articles](#A_Short_Description_Of_Some_Articles) * [3 About Wiki](#About_Wiki) # Contents Made for rapid search by topics. Please don't forget that you can find a full list of pages [here.](Special_AllPages.md) -## [Theory](Theory.md) +## [Theory](Theory.md) * [Terminology](Terminology.md) * [About Tkabber](Is_Tkabber_A_Champion_.md) * [Config.tcl For Beginners](Config.tcl_For_Beginners.md) * [For Beginners](For_Beginners.md) * [Configuring Tkabber: Basic And More Advanced Steps](Configuring_Tkabber__Basic_And_More_Advanced_Steps.md) -## [Articles](Theory.md#For_Advanced_Users) +## [Articles](Theory.md#For_Advanced_Users) * [Sending Files: Theory](Sending_Files__Theory.md) * [Remote Control With "send"](Remote_Control_With__send_.md) * [Encryption In Tkabber](Encryption_In_Tkabber.md) * [Tkabber Inside Out](Tkabber_Inside_Out.md) -## [Development](Development.md) +## [Development](Development.md) * [Creating Tkabber Starpack](Tkabber_starpack.md) * [Wish And Russian Layout In Windows](Wish_And_Russian_Layout_In_Windows.md) * [MUC Ignore](MUC_Ignore.md) * [Nick coloring](Nick_coloring.md) * [Config dir](Config_dir.md) * [Suppressing Spam Using Privacy Lists](Suppressing_Spam_Using_Privacy_Lists.md) * [New Appearance Of Tk In 8.5](New_Appearance_Of_Tk_In_8.5.md) -## [Practice](Practice.md) +## [Practice](Practice.md) * [Tkabber FAQ](Tkabber_FAQ.md) * [Fonts](Fonts.md) * [Smilies And Avatars](Smilies_And_Avatars.md) * [Color Schemes And Icons](Color_Schemes_And_Icons.md) Index: wiki/en/Plugins.md ================================================================== --- wiki/en/Plugins.md +++ wiki/en/Plugins.md @@ -6,32 +6,32 @@ From Tkabber Wiki ## Contents * [1 Плагинология](#Плагинология) - * [1.1 Как подключить плагин](#Как_подключить_плагин) - * [1.2 Подводные камни при обновлении Ткаббера](#Подводные_камни_при_обновлении_Ткаббера) - * [1.3 Анатомия плагина](#Анатомия_плагина) - * [1.4 Сисадмину на заметку](#Сисадмину_на_заметку) + * [1.1 Как подключить плагин](#Как_подключить_плагин) + * [1.2 Подводные камни при обновлении Ткаббера](#Подводные_камни_при_обновлении_Ткаббера) + * [1.3 Анатомия плагина](#Анатомия_плагина) + * [1.4 Сисадмину на заметку](#Сисадмину_на_заметку) * [2 Официальные плагины для Ткаббера](#Официальные_плагины_для_Ткаббера) * [3 Неофициальные плагины для Ткаббера](#Неофициальные_плагины_для_Ткаббера) - * [3.1 Alarm](#Alarm) - * [3.2 Autoconnect](#Autoconnect) - * [3.3 Tab number](#Tab_number) - * [3.4 Confirm](#Confirm) - * [3.5 Rsssaver](#Rsssaver) - * [3.6 Bookmarks](#Bookmarks) - * [3.7 Meebo me](#Meebo_me) - * [3.8 Floating Roster Contact](#Floating_Roster_Contact) - * [3.9 Postpone Text (chat plugin)](#Postpone_Text_chat_plugin) - * [3.10 Autoretrieve](#Autoretrieve) - * [3.11 Last Activity](#Last_Activity) - * [3.12 Server Info](#Server_Info) - * [3.13 Open URL](#Open_URL) - * [3.14 Hihglight XEP URLs](#Hihglight_XEP_URLs) - * [3.15 Tkabber-KHIM](#Tkabber-KHIM) - * [3.16 so\_keepalive](#so_keepalive) + * [3.1 Alarm](#Alarm) + * [3.2 Autoconnect](#Autoconnect) + * [3.3 Tab number](#Tab_number) + * [3.4 Confirm](#Confirm) + * [3.5 Rsssaver](#Rsssaver) + * [3.6 Bookmarks](#Bookmarks) + * [3.7 Meebo me](#Meebo_me) + * [3.8 Floating Roster Contact](#Floating_Roster_Contact) + * [3.9 Postpone Text (chat plugin)](#Postpone_Text_chat_plugin) + * [3.10 Autoretrieve](#Autoretrieve) + * [3.11 Last Activity](#Last_Activity) + * [3.12 Server Info](#Server_Info) + * [3.13 Open URL](#Open_URL) + * [3.14 Hihglight XEP URLs](#Hihglight_XEP_URLs) + * [3.15 Tkabber-KHIM](#Tkabber-KHIM) + * [3.16 so\_keepalive](#so_keepalive) # Плагинология В этом разделе рассказано о внешних плагинах Ткаббера. Если вы — новичок, прочитайте как минимум первые два раздела. Index: wiki/en/Special/All_Pages.md ================================================================== --- wiki/en/Special/All_Pages.md +++ wiki/en/Special/All_Pages.md @@ -3,23 +3,23 @@ From Tkabber Wiki ## All Pages * [Devel](../Devel.md) (1 reference) -* [For Beginners](../For_Beginners.md) (2 references) +* [For Beginners (en)](../For_Beginners_(en).md) (**0** references) * [Help:Contents](../Help_Contents.md) (4 references) * [How to add a new remote command](../How_to_add_a_new_remote_command.md) (5 references, 2 from other language pages) * [Main Page](../Main_Page.md) (3 references, 1 from other language pages) * [Non-obvious config hacks](../Non-obvious_config_hacks.md) (1 reference) * [Pages](../Pages.md) (2 references) * [Patches](../Patches.md) (4 references) * [Plugins](../Plugins.md) (5 references) -* [Practice](../Practice.md) (3 references) -* [Special/All Pages](../Special/All_Pages.md) (1 reference) -* [Special/Missing References](../Special/Missing_References.md) (1 reference) +* [Practice](../Practice.md) (4 references) +* [Special/All Pages](../Special/All_Pages.md) (2 references) +* [Special/Missing References](../Special/Missing_References.md) (**0** references) * [TODO](../TODO.md) (4 references, 1 from other language pages) -* [Theory](../Theory.md) (4 references) +* [Theory](../Theory.md) (6 references) * [Tkabber FAQ](../Tkabber_FAQ.md) (6 references) * [Tkabber FAQ/Appearance and sound](../Tkabber_FAQ/Appearance_and_sound.md) (2 references) * [Tkabber FAQ/How can I...](../Tkabber_FAQ/How_can_I....md) (1 reference) * [Tkabber for Developers](../Tkabber_for_Developers.md) (3 references) * [User:Bigote](../User_Bigote.md) (6 references) Index: wiki/en/Special/Missing_References.md ================================================================== --- wiki/en/Special/Missing_References.md +++ wiki/en/Special/Missing_References.md @@ -4,13 +4,18 @@ ## Missing References #### [Help:Contents](../Help_Contents.md) +* ../ru/Участник\_kostix.md +* ../ru/Участник\_lknight.md * Sandbox.md +* Special\_Allpages.md * Special\_Recentchanges.md -* Terminology.md +* Terminology\_(en +* http://ru.tkabber.jabe.ru/Участник:Lknight|LKnight +* http://tkabber.jabe.ru #### [How to add a new remote command](../How_to_add_a_new_remote_command.md) * Category\_Devel.md * Special\_Categories.md @@ -23,10 +28,11 @@ * Configurator.md * Configuring\_Tkabber\_\_Basic\_And\_More\_Advanced\_Steps.md * Development.md * Encryption\_In\_Tkabber.md * Fonts.md +* For\_Beginners.md * Is\_Tkabber\_A\_Champion\_.md * Links.md * MUC\_Ignore.md * New\_Appearance\_Of\_Tk\_In\_8.5.md * Nick\_coloring.md @@ -70,18 +76,39 @@ * Участник\_archimed.md * Участник\_eXire.md * Участник\_feez.md * Участник\_lknight.md +#### [Special/All Pages](../Special/All_Pages.md) + +* ../For\_Beginners\_(en + #### [TODO](../TODO.md) * ../ru/Nick+coloring.md #### [Tkabber FAQ](../Tkabber_FAQ.md) -* Configuration\_file.md -* Emoticons\_And\_Avatars.md +* Configuration\_file\_(en +* Emoteicons\_And\_Avatars\_(en +* Low\_traffic\_HOWTO.md +* Tkabber\_Windows\_Mini\_HOWTO.md +* Дистрибутивы\_\_которые\_мы\_выбираем\_(ru +* Начинающим\_(ru +* Нетривиальные\_настройки.md +* Патчи\_(ru +* Пересылка\_файлов\_\_теория\_(ru +* Плагины.md +* Плагины\_(ru +* Проблемы\_X\_Window\_и\_TTF\_(ru +* Проблемы\_со\_звуком.md +* Проблемы\_со\_звуком\_(ru +* Смайлики\_и\_аватары.md +* Удалённое\_управление\_с\_помощью\_send.md +* Участник\_Kostix.md +* Файл\_конфигурации\_(ru +* Шифрование\_в\_Ткаббере\_(ru #### [Tkabber FAQ/Appearance and sound](../Tkabber_FAQ/Appearance_and_sound.md) * ../Configuration\_file.md * ../Emoticons\_and\_avatars.md Index: wiki/en/TODO.md ================================================================== --- wiki/en/TODO.md +++ wiki/en/TODO.md @@ -6,34 +6,34 @@ From Tkabber Wiki ## Contents * [1 XMPP](#XMPP) - * [1.1 Interface for pubsub](#Interface_for_pubsub) - * [1.2 IQ/IBB](#IQ_IBB) - * [1.3 xmpp: URIs](#xmpp_URIs) - * [1.4 Private storage](#Private_storage) + * [1.1 Interface for pubsub](#Interface_for_pubsub) + * [1.2 IQ/IBB](#IQ_IBB) + * [1.3 xmpp: URIs](#xmpp_URIs) + * [1.4 Private storage](#Private_storage) * [2 Internals](#Internals) - * [2.1 Virtual events](#Virtual_events) - * [2.2 Searching](#Searching) - * [2.3 Roster code improvements](#Roster_code_improvements) - * [2.3.1 "MUC Ignoring" ruleset editor](#MUC_Ignoring_ruleset_editor) + * [2.1 Virtual events](#Virtual_events) + * [2.2 Searching](#Searching) + * [2.3 Roster code improvements](#Roster_code_improvements) + * [2.3.1 "MUC Ignoring" ruleset editor](#MUC_Ignoring_ruleset_editor) * [3 UI improvements](#UI_improvements) - * [3.1 Chats history](#Chats_history) - * [3.2 Generalize "chat window UI" API](#Generalize_chat_window_UI_API) - * [3.3 File transfers](#File_transfers) - * [3.4 Handling of "normal" messages](#Handling_of_normal_messages) - * [3.5 Searching](#Searching) - * [3.6 Improve nick coloring](#Improve_nick_coloring) - * [3.7 Omniscent context menus](#Omniscent_context_menus) - * [3.8 Accelerated menus](#Accelerated_menus) - * [3.9 BWidget](#BWidget) - * [3.10 Buttonbar improvements](#Buttonbar_improvements) - * [3.10.1 Generic labels (may be)](#Generic_labels_may_be) + * [3.1 Chats history](#Chats_history) + * [3.2 Generalize "chat window UI" API](#Generalize_chat_window_UI_API) + * [3.3 File transfers](#File_transfers) + * [3.4 Handling of "normal" messages](#Handling_of_normal_messages) + * [3.5 Searching](#Searching) + * [3.6 Improve nick coloring](#Improve_nick_coloring) + * [3.7 Omniscent context menus](#Omniscent_context_menus) + * [3.8 Accelerated menus](#Accelerated_menus) + * [3.9 BWidget](#BWidget) + * [3.10 Buttonbar improvements](#Buttonbar_improvements) + * [3.10.1 Generic labels (may be)](#Generic_labels_may_be) * [4 Plugins](#Plugins) - * [4.1 Move some plugins to the trunk](#Move_some_plugins_to_the_trunk) - * [4.2 New plugins](#New_plugins) + * [4.1 Move some plugins to the trunk](#Move_some_plugins_to_the_trunk) + * [4.2 New plugins](#New_plugins) ## XMPP ### Interface for pubsub Index: wiki/en/Tkabber_FAQ.md ================================================================== --- wiki/en/Tkabber_FAQ.md +++ wiki/en/Tkabber_FAQ.md @@ -10,58 +10,58 @@ If your problem is not solved here please visit `[xmpp:tkabber@conference.jabber.ru](xmpp:tkabber@conference.jabber.ru)`. If we manage to solve it, the answer will be added here or as a new article of this wiki. ## Contents * [1 What is...?](#What_is...) - * [1.1 Roster](#Roster) - * [1.2 Resource](#Resource) - * [1.3 Priority](#Priority) - * [1.4 Tkabber Console](#Tkabber_Console) + * [1.1 Roster](#Roster) + * [1.2 Resource](#Resource) + * [1.3 Priority](#Priority) + * [1.4 Tkabber Console](#Tkabber_Console) * [2 Visual Appearance And Sounds](#Visual_Appearance_And_Sounds) - * [2.1 Fonts](#Fonts) - * [2.2 Cannot connect up new smilies sets (sound schemes)](#Cannot_connect_up_new_smilies_sets_sound_schemes) - * [2.3 How to enter smilies "from a menu"?](#How_to_enter_smilies_from_a_menu) - * [2.4 Can I **disable** smilies?](#Can_I_disable_smilies) - * [2.5 Can't see smilies/photos/etc in PNG format](#Cant_see_smilies_photos_etc_in_PNG_format) - * [2.6 Color Schemes](#Color_Schemes) - * [2.7 Поддерживает ли Ткаббер аватары?](#Поддерживает_ли_Ткаббер_аватары) - * [2.8 Проблема со звуковой схемой](#Проблема_со_звуковой_схемой) - * [2.9 Регулировка громкости звука](#Регулировка_громкости_звука) + * [2.1 Fonts](#Fonts) + * [2.2 Cannot connect up new smilies sets (sound schemes)](#Cannot_connect_up_new_smilies_sets_sound_schemes) + * [2.3 How to enter smilies "from a menu"?](#How_to_enter_smilies_from_a_menu) + * [2.4 Can I **disable** smilies?](#Can_I_disable_smilies) + * [2.5 Can't see smilies/photos/etc in PNG format](#Cant_see_smilies_photos_etc_in_PNG_format) + * [2.6 Color Schemes](#Color_Schemes) + * [2.7 Поддерживает ли Ткаббер аватары?](#Поддерживает_ли_Ткаббер_аватары) + * [2.8 Проблема со звуковой схемой](#Проблема_со_звуковой_схемой) + * [2.9 Регулировка громкости звука](#Регулировка_громкости_звука) * [3 Problems Arising During Work](#Problems_Arising_During_Work) - * [3.1 Долгая загрузка Ткаббера](#Долгая_загрузка_Ткаббера) - * [3.2 Пересылка файлов](#Пересылка_файлов) - * [3.3 Шифрование в Ткаббере: проблемы с **gpgme/tclgpgme**](#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme) - * [3.4 Проблема с новым релизом Ткаббера 0.9.9-1.2](#Проблема_с_новым_релизом_Ткаббера_0.9.9-1.2) - * [3.5 Ткаббер под X Window падает при попытке показать "странные" символы](#Ткаббер_под_X_Window_падает_при_попытке_показать_странные_символы) - * [3.6 Не работает вставка по Control-v под X Window](#Не_работает_вставка_по_Control-v_под_X_Window) - * [3.7 Tkabber постоянно держит меня в состоянии "отошёл" ("away")](#Tkabber_постоянно_держит_меня_в_состоянии_отошёл_away) - * [3.8 В старпаке/старките нет звука](#В_старпаке_старките_нет_звука) - * [3.9 Пропадает содержимое ростера](#Пропадает_содержимое_ростера) - * [3.10 Не могу приконнектиться к серверу через прокси](#Не_могу_приконнектиться_к_серверу_через_прокси) - * [3.11 Keep alive в Ткаббере — возможно ли?](#Keep_alive_в_Ткаббере_-_возможно_ли) + * [3.1 Долгая загрузка Ткаббера](#Долгая_загрузка_Ткаббера) + * [3.2 Пересылка файлов](#Пересылка_файлов) + * [3.3 Шифрование в Ткаббере: проблемы с **gpgme/tclgpgme**](#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme) + * [3.4 Проблема с новым релизом Ткаббера 0.9.9-1.2](#Проблема_с_новым_релизом_Ткаббера_0.9.9-1.2) + * [3.5 Ткаббер под X Window падает при попытке показать "странные" символы](#Ткаббер_под_X_Window_падает_при_попытке_показать_странные_символы) + * [3.6 Не работает вставка по Control-v под X Window](#Не_работает_вставка_по_Control-v_под_X_Window) + * [3.7 Tkabber постоянно держит меня в состоянии "отошёл" ("away")](#Tkabber_постоянно_держит_меня_в_состоянии_отошёл_away) + * [3.8 В старпаке/старките нет звука](#В_старпаке_старките_нет_звука) + * [3.9 Пропадает содержимое ростера](#Пропадает_содержимое_ростера) + * [3.10 Не могу приконнектиться к серверу через прокси](#Не_могу_приконнектиться_к_серверу_через_прокси) + * [3.11 Keep alive в Ткаббере — возможно ли?](#Keep_alive_в_Ткаббере_-_возможно_ли) * [4 How Do I Do...?](#How_Do_I_Do...) - * [4.1 Отправка сообщений по Ctrl-Enter](#Отправка_сообщений_по_Ctrl-Enter) - * [4.2 Можно ли добавить в ростер самого себя?](#Можно_ли_добавить_в_ростер_самого_себя) - * [4.3 Одновременная работа с несколькими аккаунтами](#Одновременная_работа_с_несколькими_аккаунтами) - * [4.4 Как насчёт автозахода на конференции?](#Как_насчёт_автозахода_на_конференции) - * [4.5 Сжатие трафика в Ткаббере](#Сжатие_трафика_в_Ткаббере) - * [4.6 Выделение текста жирным, курсивом и подчёркиванием](#Выделение_текста_жирным_курсивом_и_подчёркиванием) - * [4.7 Ввод "хитрых" юникодных символов](#Ввод_хитрых_юникодных_символов) - * [4.8 Игнор — великая вещь!](#Игнор_-_великая_вещь) - * [4.9 Подтверждения](#Подтверждения) - * [4.10 Удалённое управление](#Удалённое_управление) - * [4.11 Команды Ткаббера](#Команды_Ткаббера) - * [4.12 Скрытие версий клиента и ОС](#Скрытие_версий_клиента_и_ОС) - * [4.13 Как подключить плагин?](#Как_подключить_плагин) - * [4.14 Как уменьшить трафик?](#Как_уменьшить_трафик) + * [4.1 Отправка сообщений по Ctrl-Enter](#Отправка_сообщений_по_Ctrl-Enter) + * [4.2 Можно ли добавить в ростер самого себя?](#Можно_ли_добавить_в_ростер_самого_себя) + * [4.3 Одновременная работа с несколькими аккаунтами](#Одновременная_работа_с_несколькими_аккаунтами) + * [4.4 Как насчёт автозахода на конференции?](#Как_насчёт_автозахода_на_конференции) + * [4.5 Сжатие трафика в Ткаббере](#Сжатие_трафика_в_Ткаббере) + * [4.6 Выделение текста жирным, курсивом и подчёркиванием](#Выделение_текста_жирным_курсивом_и_подчёркиванием) + * [4.7 Ввод "хитрых" юникодных символов](#Ввод_хитрых_юникодных_символов) + * [4.8 Игнор — великая вещь!](#Игнор_-_великая_вещь) + * [4.9 Подтверждения](#Подтверждения) + * [4.10 Удалённое управление](#Удалённое_управление) + * [4.11 Команды Ткаббера](#Команды_Ткаббера) + * [4.12 Скрытие версий клиента и ОС](#Скрытие_версий_клиента_и_ОС) + * [4.13 Как подключить плагин?](#Как_подключить_плагин) + * [4.14 Как уменьшить трафик?](#Как_уменьшить_трафик) * [5 Miscellaneous](#Miscellaneous) - * [5.1 Что случилось с сайтом http://sgolovan.nes.ru/ ?](#Что_случилось_с_сайтом_http__sgolovan.nes.ru__) - * [5.2 ...а мне ИГРАТЬ охота!!!](#...а_мне_ИГРАТЬ_охота) - * [5.3 Старые версии Ткаббера и плагинов](#Старые_версии_Ткаббера_и_плагинов) + * [5.1 Что случилось с сайтом [http://sgolovan.nes.ru/](http://sgolovan.nes.ru/) ?](#Что_случилось_с_сайтом_http__sgolovan.nes.ru_http__sgolovan.nes.ru__) + * [5.2 ...а мне ИГРАТЬ охота!!!](#...а_мне_ИГРАТЬ_охота) + * [5.3 Старые версии Ткаббера и плагинов](#Старые_версии_Ткаббера_и_плагинов) * [6 Questions related with XMPP](#Questions_related_with_XMPP) - * [6.1 MUC](#MUC) - * [6.1.1 Не работают инвайты](#Не_работают_инвайты) + * [6.1 MUC](#MUC) + * [6.1.1 Не работают инвайты](#Не_работают_инвайты) # What is...? ## Roster Answer: Roster is a list of contacts. See [definitions](http://www.google.com/search?q=define:roster&start=0&ie=utf-8&oe=utf-8) of this term found by google. @@ -90,11 +90,11 @@ Выяснить список доступных виндовых кодировок: % lsearch -all -inline -glob [encoding names] cp125* -Кроме отладки консоль может служить и для многих других издевательств над Ткаббером, о некоторых из которых можно прочитать [**здесь**](../ru/Удалённое_управление_с_помощью_send.md). Естественно, пользу приносить консоль будет лишь тем, кто ею пользоваться умеет, то есть вам надо иметь в голове некоторый ликбезный минимум по [Tcl/Tk](http://www.tcl.tk). +Кроме отладки консоль может служить и для многих других издевательств над Ткаббером, о некоторых из которых можно прочитать [здесь](Удалённое_управление_с_помощью_send.md). Естественно, пользу приносить консоль будет лишь тем, кто ею пользоваться умеет, то есть вам надо иметь в голове некоторый ликбезный минимум по [Tcl/Tk](http://www.tcl.tk). В юниксовых версиях интерпретатора Tcl/Tk встроенной консоли нет. Нет, соответственно, и описанного выше пункта главного меню Ткаббера. Сей "перекос" объясняется техническими и историческими причинами, изложенными [здесь](http://wiki.tcl.tk/672) (по-английски), а отладка Ткаббера в "иксах" ничуть не сложнее, чем в Windows, просто здесь следует применять другое средство — [tkcon](http://tkcon.sourceforge.net/). Tkcon, в отличие от большинства лекарств, допускает как "внутреннее", так и "внешнее" применение на Ткаббере: @@ -101,11 +101,11 @@ * Можно запустить Ткаббер "из-под" tkcon. В этом случае последний будет доступен примерно в таком же виде, что и консоль виндового wish. Об этом методе читайте в [соответствующем разделе официальной документации](http://tkabber.jabber.ru/files/doc/tkabber.html#s.download). * Можно запустить tkcon отдельно, а затем "прицепиться" из него к работающей копии Ткаббера. Для этого в tkcon активируйте пункт меню **Console → Attach to... → Interpreter**, и в появившемся подменю, озаглавленном "Foreign Interpreters", выберите "tkabber". (Также там могут быть "tkabber \#2", "tkabber \#3" и т.д. — это, соответственно, вторая, третья и прочие запущенные копии Ткаббера.) **Внимание:** виндовая "консоль Ткаббера" имеет один подводный камень: активация пункта её главного меню **File → Выход** вызывает завершение управляемого консолью интерпретатора (то есть самого Ткаббера). Поэтому закрывайте консоль либо "крестиком", либо повторно активировав соответствующий пункт главного меню Ткаббера. Также, если вам приспичило учинить "хАкЕрСк0е" завершение работы Ткаббера, пишите в консоли "quit", а не "exit", чтобы работа Ткаббера завершилась корректно. -**Примечание:** ещё одним свойством консоли виндового wish является то, что стандартные потоки ввода/вывода этого процесса по умолчанию "направлены в консоль". Поэтому открыв консоль, иногда можно увидеть там предупреждения (к примеру, возникающие при загрузке пакетов Tcl/Tk.) Так же туда попадает любой отладочный вывод, если вы, скажем, установили в конфиге переменную `debug_lvls`, но не [**перенаправили стандартные потоки ввода/вывода в файл**](../ru/Нетривиальные_настройки.md) или не воспользовались плагином **debug**. +**Примечание:** ещё одним свойством консоли виндового wish является то, что стандартные потоки ввода/вывода этого процесса по умолчанию "направлены в консоль". Поэтому открыв консоль, иногда можно увидеть там предупреждения (к примеру, возникающие при загрузке пакетов Tcl/Tk.) Так же туда попадает любой отладочный вывод, если вы, скажем, установили в конфиге переменную `debug_lvls`, но не [перенаправили стандартные потоки ввода/вывода в файл](Нетривиальные_настройки.md) или не воспользовались плагином **debug**. **(TODO: написать статью про tkcon, tkinspect, send, conn, и дать ссылку на неё отсюда)** # Visual Appearance And Sounds ## Fonts @@ -138,11 +138,11 @@ ## Cannot connect up new smilies sets (sound schemes) **Question: I have edited the config putting there the path to a new smilies set (sound scheme) but they do not work after restarting Tkabber.** -Answer: First read the [information](Emoticons_And_Avatars.md) we have about it. Then make sure the path points **exactly** to where your files are placed. For example, badlop-config contains the following path: **/usr/share/tkabber/emoticons-tkabber** (i.e., in Tkabber installing directory). When adding new packs of smilies they are usually put into the user's home directory, in **~/.tkabber/emoticons-tkabber**. So note that just adding a new pack's name to the end of the existing path will give no effect. +Answer: First read the [information](Emoteicons_And_Avatars_(en).md) we have about it. Then make sure the path points **exactly** to where your files are placed. For example, badlop-config contains the following path: **/usr/share/tkabber/emoticons-tkabber** (i.e., in Tkabber installing directory). When adding new packs of smilies they are usually put into the user's home directory, in **~/.tkabber/emoticons-tkabber**. So note that just adding a new pack's name to the end of the existing path will give no effect. By the way, since the 0.9.8 version Tkabber does not manipulate sound schemes as a whole. Each event can be assigned any separate wav-file. ## How to enter smilies "from a menu"? @@ -158,11 +158,11 @@ ## Can I **disable** smilies? **Question: Subj. I don't want any smilies, even default ones.** -Answer: It's easy. Read [this](Emoticons_And_Avatars.md). +Answer: It's easy. Read [this](Emoteicons_And_Avatars_(en).md). ## Can't see smilies/photos/etc in PNG format **Question: My linux version of Tkabber can't display photos in vcard if they aren't in GIF format.** @@ -170,17 +170,17 @@ ## Color Schemes **Question: I don't like default color scheme. What can I do?** -Answer: First try existing schemes, you can find them in examples. Read [this](Configuration_file.md) about how to enable them. If you do not like any of them try to create your own scheme. Open one of these .xrdb files in your favourite text editor, save it with a new name and make changes until the result pleases you :) Add the path to this file to your **config.tcl**, and after starting Tkabber you will see what and where is changed. Yes, it is very difficult to "paint" without a WISIWIG editor but at least you can use [Photoshop](http://www.adobe.com/products/photoshop/) or [The Gimp](http://gimp.org/) to choose colors and get their hex-values ;) If you are a tcl programmer you can write a plugin that allows to create new color schemes easily, and everybody will thank you! +Answer: First try existing schemes, you can find them in examples. Read [this](Configuration_file_(en).md) about how to enable them. If you do not like any of them try to create your own scheme. Open one of these .xrdb files in your favourite text editor, save it with a new name and make changes until the result pleases you :) Add the path to this file to your **config.tcl**, and after starting Tkabber you will see what and where is changed. Yes, it is very difficult to "paint" without a WISIWIG editor but at least you can use [Photoshop](http://www.adobe.com/products/photoshop/) or [The Gimp](http://gimp.org/) to choose colors and get their hex-values ;) If you are a tcl programmer you can write a plugin that allows to create new color schemes easily, and everybody will thank you! ## Поддерживает ли Ткаббер аватары? **Вопрос: Вот JAJC с аватарами работает превосходно — и подключает, и показывает собеседникам в систрее. Ткаббер так умеет?** -Ответ: Систрей для Ткаббера — ахиллесова пята :) Но аватары он поддерживает. Читайте об этом в [**отдельной статье**](../ru/Смайлики_и_аватары.md). +Ответ: Систрей для Ткаббера — ахиллесова пята :) Но аватары он поддерживает. Читайте об этом в [отдельной статье](Смайлики_и_аватары.md). Альтернативное и готовое решение _под Windows_ — скачать старпак ткаббера 0.9.9, собранный Архимедом. Процитируем автора: В окно chat добавлен показ аватара собеседника (hack from badlop). По умолчанию эта возможность выключена (по настоянию kostix и teo). @@ -198,11 +198,11 @@ ## Регулировка громкости звука **Вопрос: Можно ли в Ткаббере регулировать громкость звука?** -Ответ: Да, и даже несколькими способами. Почитайте подробно в [**этой статье**](../ru/Проблемы_со_звуком.md). +Ответ: Да, и даже несколькими способами. Почитайте подробно в [этой статье](Проблемы_со_звуком.md). # Problems Arising During Work This section will help you in solving non-standard behaviour of Tkabber in standard situations. ## Долгая загрузка Ткаббера @@ -213,11 +213,11 @@ ## Пересылка файлов **Вопрос: Так работает в Ткаббере пересылка файлов или нет? Мы с другом пробовали сто раз через все доступные протоколы, и ничего не шлётся.** -Ответ: Для начала почитайте [**введение**](../ru/Пересылка_файлов__теория.md), также в сжатой форме это объяснено в официальной документации Ткаббера (разделы 4.2.12. The Stream Initiation Module и 4.2.13. The Jidlink Module): +Ответ: Для начала почитайте **[введение](Пересылка_файлов__теория_(ru).md),** также в сжатой форме это объяснено в официальной документации Ткаббера (разделы 4.2.12. The Stream Initiation Module и 4.2.13. The Jidlink Module): * Windows: **C:\\Program Files\\Tkabber\\tkabber\\doc\\tkabber.html** * \*nix: **/usr/share/doc/tkabber/tkabber.html** Практическая же реализация (для большинства, но _не всех_ случаев) такова. @@ -244,11 +244,11 @@ ## Шифрование в Ткаббере: проблемы с **gpgme/tclgpgme** **Вопрос: Что-то не могу скомпилировать tclgpgme.** -Ответ: В зависимости от того, какую версию gpgme вы используете и в какой операционной системе работаете, сильно зависит, удастся ли вам подключить шифрование в Ткаббере. Почитайте сначала коротенькую [статью об этом](../ru/Шифрование_в_Ткаббере.md). Исходя из этого ответов может быть несколько. +Ответ: В зависимости от того, какую версию gpgme вы используете и в какой операционной системе работаете, сильно зависит, удастся ли вам подключить шифрование в Ткаббере. Почитайте сначала коротенькую [статью об этом](Шифрование_в_Ткаббере_(ru).md). Исходя из этого ответов может быть несколько. 1. Под Windows шифрование работать не будет. 1. Под Linux — в зависимости от дистрибутива: * В Debian в стабильной ветке всё работает без излишних телодвижений (правда, что там будет в Etch'е — не ясно); * В rpm-based дистрибутивах проблема пока не исследована (даже неизвестно, есть ли она); @@ -295,11 +295,11 @@ Major opcode of failed request: 45 (X_OpenFont) ... Ответ: Причина может быть либо в "кривых" шрифтах, которые стоят у вас в системе, либо в "кривизне" сервера шрифтов, либо в "кривизне" X-сервера, который сам "раздаёт" шрифты. -Подробнее читайте [тут](../ru/Проблемы_X_Window_и_TTF.md). +Подробнее читайте [тут](Проблемы_X_Window_и_TTF_(ru).md). ## Не работает вставка по Control-v под X Window **Вопрос: В многострочных полях ввода не работает вставка текста из буфера обмена, помещённого туда по Control-c (и другим комбинациям).** @@ -331,21 +331,21 @@ % puts [expr 600000*120*1000] -1014444032 То есть, при тайм-ауте в одну минуту всё бы было хорошо, но как только мы ставим две минуты, появляется ошибка. Модуль Autoaway сравнивает текущее время неактивности со значением тайм-аута, и если тайм-аут меньше, Ткаббер переводится в режим "Отошёл". Как видите, при тайм-ауте две минуты и больше Ткаббер всегда будет считать, что мы "отошли". -Такая проблема существует, в частности, в официальном [Ткаббер-паке](../ru/Дистрибутивы__которые_мы_выбираем.md) под Windows версии 0.9.8. +Такая проблема существует, в частности, в официальном [Ткаббер-паке](Дистрибутивы__которые_мы_выбираем_(ru).md) под Windows версии 0.9.8. **Решение:** Достаточно пойти в настройки плагина **AutoAway** **(Tkabber → Настройки → AutoAway)** и установить там параметры `plugins::autoaway::options(awaytime)` и `plugins::autoaway::options(xatime)` в некоторое разумное количество _минут._ Не забудьте сохранить _каждую_ настройку "для текущей и следующих сессий", выбрав соответствующий пункт в меню, вызываемом кнопками "Состояние". ## В старпаке/старките нет звука **Вопрос: В старпаке (или старките) не работает звук. Его включение/выключение ни к чему не приводит. Что делать?** -Ответ: Статья о решении этой проблемы перенесена [**сюда**](../ru/Проблемы_со_звуком.md). +Ответ: Статья о решении этой проблемы перенесена **[сюда](Проблемы_со_звуком_(ru).md)**. ## Пропадает содержимое ростера **Вопрос: Если отключить показ в ростере транспортных иконок `show_transport_user_icons 0` и включить показ активных разговоров `::ifacetk::roster::options(chats_group) 1`, то при попытке открыть хоть один чат с каким-нибудь JID, содержимое ростера пропадает и до перезапуска Ткаббера не восстанавливается.** @@ -405,11 +405,11 @@ * Разные люди подразумевают разные вещи под понятием "keep alive"; * Многие не понимают принципов работы протокола TCP (поверх которого "ездит" XMPP (он же Jabber)) и того, как он обрабатывает "внешние" разрывы соединений. **(TODO: расписать подробно)** -Пока что почитайте [вот этот трёп](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2006/08/09.html#00:43:46) между [Kostix](../ru/Участник_Kostix.md) и j-dreamer: +Пока что почитайте [вот этот трёп](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2006/08/09.html#00:43:46) между [Kostix](Участник_Kostix.md) и j-dreamer: **(TODO: вынести этот чатлог в отдельную страницу, облагородив, т.е. он со временем отэкспайрится и будет удалён на сервере)** # How Do I Do...? Some non-obvious tricks will be explained here. @@ -416,11 +416,11 @@ ## Отправка сообщений по Ctrl-Enter **Вопрос: Можно ли сделать так, чтобы сообщения отправлялись по нажатию Ctrl-Enter, а перевод строки происходил по нажатию Enter, как это сделано в Miranda и других мессенджерах?** -Ответ: Можно. Вам [**сюда**](../ru/Патчи.md). +Ответ: Можно. Вам [сюда](Патчи_(ru).md). ## Можно ли добавить в ростер самого себя? **Вопрос: У меня запущено два Ткаббера: один дома, другой на работе. Оба запущены от одного аккаунта, просто ресурсы разные (к примеру, **login@jabber.ru/Home** и **login@jabber.ru/Work**). Безуспешно пытаюсь добавить их в ростер, чтобы, находясь дома, видеть и отправлять сообщения самому себе на работу, и наоборот.** @@ -445,11 +445,11 @@ Ответ: 1) Да. 2) Нет. Теперь подробнее. -1. Сначала логинитесь как обычно, затем снова жмёте Ctrl-L ещё раз и в окне логина идёте на вкладку "Соединение" и **убираете галочку "Закрыть открытые соединения",** если она отмечена. Затем либо вводите в первой вкладке новые параметры логина, либо выбираете их, нажав кнопку "Профили". Чтобы было из чего выбирать, сначала нужно подредактировать [**раздел логина в файле конфигурации**](../ru/Файл_конфигурации.md). После логина в ростере под первым аккаунтом появится второй. Работа с двумя аккаунтами ничем не отличается от обычной, надо только помнить о таких вещах как отправка сообщений, добавление пользователей в контакты и прочие, что имеются в меню Ткаббера **Службы.** При выполнении этих действий у вас появляется окошко, где помимо прочих имеется раскладное (drop-down) меню, которое называется либо "Соединение", либо "От кого", где можно выбрать аккаунт, от имени которого вы будете эти действия совершать. +1. Сначала логинитесь как обычно, затем снова жмёте Ctrl-L ещё раз и в окне логина идёте на вкладку "Соединение" и **убираете галочку "Закрыть открытые соединения",** если она отмечена. Затем либо вводите в первой вкладке новые параметры логина, либо выбираете их, нажав кнопку "Профили". Чтобы было из чего выбирать, сначала нужно подредактировать [раздел логина в файле конфигурации](Файл_конфигурации_(ru).md). После логина в ростере под первым аккаунтом появится второй. Работа с двумя аккаунтами ничем не отличается от обычной, надо только помнить о таких вещах как отправка сообщений, добавление пользователей в контакты и прочие, что имеются в меню Ткаббера **Службы.** При выполнении этих действий у вас появляется окошко, где помимо прочих имеется раскладное (drop-down) меню, которое называется либо "Соединение", либо "От кого", где можно выбрать аккаунт, от имени которого вы будете эти действия совершать. 1. Если работа с несколькими аккаунтами протекает вполне нормально, то вот автоматически логиниться к ним всем, похоже, нельзя. Во всяком случае, на сегодняшний день это не реализовано. И не будет реализовано, пока кто-нибудь сильно не захочет и не напишет ;) ## Как насчёт автозахода на конференции? **Вопрос: Надоело каждый раз заходить в десяток комнат. Можно ли это дело автоматизировать?** @@ -469,19 +469,19 @@ ## Сжатие трафика в Ткаббере **Вопрос: В "фичах" версии 0.9.9 написано, что в этой версии реализована поддержка сжатия трафика. Как это осуществить на практике?** -Ответ: Для включения сжатия вам потребуется установить пакет [ztcl](https://gna.org/projects/ztcl/) (если вы работаете в Дебиане, можете установить ztcl из репозитория Сергея Голованя aka teopetuk (`[xmpp:sgolovan@nes.ru](xmpp:sgolovan@nes.ru)`): найдите ниже вопрос про репозиторий и действуйте в соответствии с инструкциями). Установив пакет, перезапустите Ткаббер. При этом в окне логина закладка **SSL** будет называться теперь **SSL & Сжатие.** Идите туда и отметьте галочку "Сжатие". Учтите, что нельзя одновременно включить и сжатие, и шифрование, поэтому мы не рекомендуем пользоваться сжатием без крайней нужды — очень дорогого трафика. Помните, что при передаче файлов сжатие будет возможно лишь при использовании inband bytestream — без разницы, в SI или в Jidlink, — так как лишь в этом случае файлы шлются через сервер. Подробнее о пересылке читайте [**тут**](../ru/Пересылка_файлов__теория.md). +Ответ: Для включения сжатия вам потребуется установить пакет [ztcl](https://gna.org/projects/ztcl/) (если вы работаете в Дебиане, можете установить ztcl из репозитория Сергея Голованя aka teopetuk (`[xmpp:sgolovan@nes.ru](xmpp:sgolovan@nes.ru)`): найдите ниже вопрос про репозиторий и действуйте в соответствии с инструкциями). Установив пакет, перезапустите Ткаббер. При этом в окне логина закладка **SSL** будет называться теперь **SSL & Сжатие.** Идите туда и отметьте галочку "Сжатие". Учтите, что нельзя одновременно включить и сжатие, и шифрование, поэтому мы не рекомендуем пользоваться сжатием без крайней нужды — очень дорогого трафика. Помните, что при передаче файлов сжатие будет возможно лишь при использовании inband bytestream — без разницы, в SI или в Jidlink, — так как лишь в этом случае файлы шлются через сервер. Подробнее о пересылке читайте **[тут](Пересылка_файлов__теория_(ru).md).** **На заметку:** частично уменьшить трафик (и сильно обезопасить приватные разговоры) можно, используя шифрование с помощью gpg. Gpg при шифровании сжимает данные (конечно, в случае, если их можно сжать и zip'ом, то есть, обычный текст). Естественно, ваши собеседники тоже должны пользоваться gpg или pgp. ## Выделение текста жирным, курсивом и подчёркиванием **Вопрос: Как выделить слово или фразу одним или несколькими из этих стилей?** -Ответ: Перечитайте статью [**Быстрый старт**](../ru/Начинающим.md) — там всё подробно расписано, и даны примеры. Ещё раз напоминаем, что _в настоящее время_ выделять фразы, содержащие пробелы, лишь двумя форматирующими символами по краям **невозможно.** То есть, выделять надо каждое слово. В будущем ситуация, возможно, изменится. Если да — свистнем ;) А до тех пор \*фраза вот такого типа\* будет выводиться в окне чата "as is". Кроме того, стартовый и стоповый символы выделения должны граничить с пробельными символами (пробел, таб, перевод строки) слева и справа, соответственно. То есть, к примеру: +Ответ: Перечитайте статью **[Быстрый старт](Начинающим_(ru).md)** — там всё подробно расписано, и даны примеры. Ещё раз напоминаем, что _в настоящее время_ выделять фразы, содержащие пробелы, лишь двумя форматирующими символами по краям **невозможно.** То есть, выделять надо каждое слово. В будущем ситуация, возможно, изменится. Если да — свистнем ;) А до тех пор \*фраза вот такого типа\* будет выводиться в окне чата "as is". Кроме того, стартовый и стоповый символы выделения должны граничить с пробельными символами (пробел, таб, перевод строки) слева и справа, соответственно. То есть, к примеру: watch *this*! → watch *this*! (ошибка: "!" сразу после "*") now *watch* this! → now **watch** this! (*фиг* вам!) → (*фиг* вам!) (ошибка: "(" перед "*") @@ -523,17 +523,17 @@ ## Подтверждения **Вопрос: Я тут уже несколько раз случайно закрыл "Все вкладки" вместо одной, промазав мышью, а Ткаббер даже не поинтересовался, в своём ли я уме. Не очень-то интеллектуальное поведение для такой продвинутой программы :-P** -Ответ: Проблема решена. Скачайте соответствующий [**плагин**](../ru/Плагины.md). Заодно Ткаббер станет спрашивать у вас, в своём ли вы уме, закрывая такую продвинутую программу ;-P +Ответ: Проблема решена. Скачайте соответствующий [плагин](Плагины_(ru).md). Заодно Ткаббер станет спрашивать у вас, в своём ли вы уме, закрывая такую продвинутую программу ;-P ## Удалённое управление **Вопрос: Ткаббер поддерживает удалённое управление, чтобы я, к примеру, мог с домашней машины шурудить Ткаббером, запущенным на работе?** -Ответ: Ещё как. Курите [теорию](../ru/Удалённое_управление_с_помощью_send.md). +Ответ: Ещё как. Курите [теорию](Удалённое_управление_с_помощью_send.md). Но, если после прочтения вы не прониклись мощью tcl/tk и команды send, то [версия из SVN](http://tkabber.jabber.ru/svn) поддеживает [JEP-0146 Remote Controlling Clients](http://www.jabber.org/jeps/jep-0146.html). Управление производится через диско-браузер. Откройте его, введите свой полный jid с ресурсом в поле "JID", и вы увидите пункт "Удаленное управление", а дальше как обычно. Обратите внимание, что по-умолчанию доступ к управлению разрешен только jid-ам, у которых базовая часть без ресурса совпадает с такой же частью jid-а управляемой машины. Если вам нужно больше, посмотрите настройки. ## Команды Ткаббера @@ -558,20 +558,20 @@ ## Как подключить плагин? **Вопрос: как подключить плагин к ткабберу?** -Ответ: прочитайте первые два раздела [**здесь**](../ru/Плагины.md). +Ответ: прочитайте первые два раздела [здесь](Плагины.md). ## Как уменьшить трафик? **Вопрос: как уменьшить передаваемый/принимаемый Ткаббером трафик (у меня дорогой интернет)?** -Ответ: прочитайте [**Low traffic HOWTO**](../ru/Low_traffic_HOWTO.md). +Ответ: прочитайте [Low traffic HOWTO](Low_traffic_HOWTO.md). # Miscellaneous -## Что случилось с сайтом [http://sgolovan.nes.ru/](http://sgolovan.nes.ru/) ? +## Что случилось с сайтом [http://sgolovan.nes.ru/](http://sgolovan.nes.ru/) ? **Хочу установить кое-какие пакеты, которые имеются только в его репозитории, но вот уже который день он "в дауне" :( Да и статья там была хорошая про Ткаббер и Windows.** Ответ: **5 августа 2006 года. Тео вернулся, сайт работает.** @@ -587,17 +587,17 @@ # Woody (old-stable, скорее всего вам не нужен): deb http://sgolovan.jabber.ru/debian/ woody main deb-src http://sgolovan.jabber.ru/debian/ woody main -По поводу статей — придётся вам подождать, пока сайт не возобновит работу. На зеркале имеется только репозиторий. Самая Главная Статья, впрочем, доступна на этой вики: [**Tkabber Windows Mini HOWTO**](../ru/Tkabber_Windows_Mini_HOWTO.md) +По поводу статей — придётся вам подождать, пока сайт не возобновит работу. На зеркале имеется только репозиторий. Самая Главная Статья, впрочем, доступна на этой вики: [Tkabber Windows Mini HOWTO](Tkabber_Windows_Mini_HOWTO.md) ## ...а мне ИГРАТЬ охота!!! **Вопрос: Слышал я, что в Ткаббере можно играть в шахматы, шашки и т.д. Где мне найти соперников, а то из друзей никто не играет?** -Ответ: Ещё как можно. Для начала вам надо установить игровые [**плагины**](../ru/Плагины.md). А если не с кем играть, добро пожаловать в `[xmpp:tkabber-games@conference.jabber.ru](xmpp:tkabber-games@conference.jabber.ru)` — чем больше народу будет там тусоваться, тем больше шансов найти себе соперника по силам. +Ответ: Ещё как можно. Для начала вам надо установить игровые **[плагины](Плагины.md).** А если не с кем играть, добро пожаловать в `[xmpp:tkabber-games@conference.jabber.ru](xmpp:tkabber-games@conference.jabber.ru)` — чем больше народу будет там тусоваться, тем больше шансов найти себе соперника по силам. Владелец комнаты `[xmpp:agnessa@jabber.ru](xmpp:agnessa@jabber.ru)`, по всем вопросам касательно этой комнаты обращайтесь к ней. ## Старые версии Ткаббера и плагинов Index: wiki/en/Tkabber_FAQ/Appearance_and_sound.md ================================================================== --- wiki/en/Tkabber_FAQ/Appearance_and_sound.md +++ wiki/en/Tkabber_FAQ/Appearance_and_sound.md @@ -8,19 +8,19 @@ [Tkabber FAQ](../Tkabber_FAQ.md) was divided into several parts. This article is about Tkabber's appearance (fonts, color themes, icons, avatars) and its work with sound. There are links to other Tkabber FAQ pages at the bottom. ## Contents * [1 Appearance and sound](#Appearance_and_sound) - * [1.1 Why is Tkabber so ugly?](#Why_is_Tkabber_so_ugly) - * [1.2 Fonts](#Fonts) - * [1.3 Smilies: 1) using a menu; 2) cannot connect a set; 3) don't want any; 4) animated](#Smilies_1_using_a_menu_2_cannot_connect_a_set_3_dont_want_any_4_animated) - * [1.4 Can't see smilies/photos/etc in PNG/JPEG format](#Cant_see_smilies_photos_etc_in_PNG_JPEG_format) - * [1.5 Color Schemes](#Color_Schemes) - * [1.6 Message colours of ICQ/MSN/etc-users](#Message_colours_of_ICQ_MSN_etc-users) - * [1.7 Does Tkabber support avatars?](#Does_Tkabber_support_avatars) - * [1.8 Adjusting sound volume](#Adjusting_sound_volume) - * [1.9 Starpack/starkit doesn't support sound/JPEG,PNG](#Starpack_starkit_doesnt_support_sound_JPEGPNG) + * [1.1 Why is Tkabber so ugly?](#Why_is_Tkabber_so_ugly) + * [1.2 Fonts](#Fonts) + * [1.3 Smilies: 1) using a menu; 2) cannot connect a set; 3) don't want any; 4) animated](#Smilies_1_using_a_menu_2_cannot_connect_a_set_3_dont_want_any_4_animated) + * [1.4 Can't see smilies/photos/etc in PNG/JPEG format](#Cant_see_smilies_photos_etc_in_PNG_JPEG_format) + * [1.5 Color Schemes](#Color_Schemes) + * [1.6 Message colours of ICQ/MSN/etc-users](#Message_colours_of_ICQ_MSN_etc-users) + * [1.7 Does Tkabber support avatars?](#Does_Tkabber_support_avatars) + * [1.8 Adjusting sound volume](#Adjusting_sound_volume) + * [1.9 Starpack/starkit doesn't support sound/JPEG,PNG](#Starpack_starkit_doesnt_support_sound_JPEGPNG) * [2 Glitches arising during work](#Glitches_arising_during_work) * [3 How can I...?](#How_can_I...) * [4 Miscellanea](#Miscellanea) # Appearance and sound Index: wiki/en/Tkabber_for_Developers.md ================================================================== --- wiki/en/Tkabber_for_Developers.md +++ wiki/en/Tkabber_for_Developers.md @@ -10,13 +10,13 @@ ## Contents * [1 Working with Tkabber internals](#Working_with_Tkabber_internals) * [2 Working with XMPP Protocol](#Working_with_XMPP_Protocol) - * [2.1 Base](#Base) - * [2.2 Disco](#Disco) - * [2.3 Specific](#Specific) + * [2.1 Base](#Base) + * [2.2 Disco](#Disco) + * [2.3 Specific](#Specific) * [3 Working with Tkabber GUI](#Working_with_Tkabber_GUI) ## Working with Tkabber internals [What is connid and how to work with it](What_is_connid_and_how_to_work_with_it.md) Index: wiki/es/Especial/Todas_las_Páginas.md ================================================================== --- wiki/es/Especial/Todas_las_Páginas.md +++ wiki/es/Especial/Todas_las_Páginas.md @@ -2,12 +2,12 @@ De Tkabber Wiki ## Todas las Páginas -* [Especial/Referencios que Falta](../Especial/Referencios_que_Falta.md) (1 referencia) -* [Especial/Todas las Páginas](../Especial/Todas_las_Páginas.md) (**0** referencias) +* [Especial/Referencios que Falta](../Especial/Referencios_que_Falta.md) (**0** referencias) +* [Especial/Todas las Páginas](../Especial/Todas_las_Páginas.md) (1 referencia) * [Plugin para usar el muñeco iBuddy con Tkabber](../Plugin_para_usar_el_muñeco_iBuddy_con_Tkabber.md) (2 referencias) * [Portada](../Portada.md) (2 referencias, 1 from other language pages) * [Preguntas frecuentes sobre Tkabber](../Preguntas_frecuentes_sobre_Tkabber.md) (1 referencia) * [Preguntas frecuentes sobre Tkabber/Apariencia y sonido](../Preguntas_frecuentes_sobre_Tkabber/Apariencia_y_sonido.md) (1 referencia) * [Tkabber para desarrolladores](../Tkabber_para_desarrolladores.md) (1 referencia) Index: wiki/es/Plugin_para_usar_el_muñeco_iBuddy_con_Tkabber.md ================================================================== --- wiki/es/Plugin_para_usar_el_muñeco_iBuddy_con_Tkabber.md +++ wiki/es/Plugin_para_usar_el_muñeco_iBuddy_con_Tkabber.md @@ -1,59 +1,50 @@ [//]: # (Generated from ../selected/es.tkabber.jabe.ru/index.php/Plugin_para_usar_el_muñeco_iBuddy_con_Tkabber/index.html) # Plugin para usar el muñeco iBuddy con Tkabber -De Tkabber Wiki +De Tkabber Wiki, la enciclopedia libre. + +i-buddy es un muñeco originalmente diseñado para responder a los eventos de MSN Messenger [[Página oficial de i-buddy](http://www.i-buddy.com/)] Afortunadamente, podemos utilizarlo para que reaccione a los eventos en Jabber utilizando nuestro cliente favorito, **Tkabber** -i-buddy es un muñeco originalmente diseñado para responder a los eventos de MSN -Messenger [Página oficial de i-buddy](http://www.i-buddy.com/) Afortunadamente, podemos -utilizarlo para que reaccione a los eventos en Jabber utilizando nuestro cliente favorito, **Tkabber**. - -## Contenido +## Содержание * [1 Requisitos](#Requisitos) -* [2 El plugin](#El_plugin) -* [3 El código](#El_código) -* [4 Otros clientes de jabber con los que también puedes utilizar tu i-buddy](#Otros_clientes_de_jabber_con_los_que_también_puedes_utilizar_tu_i-buddy) - -## Requisitos - -* pybuddy - -Es un demonio escrito en python para controlar el i-buddy. Debes bajarte el código -de [http://code.google.com/p/pybuddy/](http://code.google.com/p/pybuddy/) y tenerlo corriendo en tu máquina. - -* tcludp - -Proporciona una forma de enviar y recibir paquetes UDP a un socket desde Tcl. Debes -tenerlo instalado. Puedes bajártelo de [http://sourceforge.net/projects/tcludp/](http://sourceforge.net/projects/tcludp/) -(en Fedora, desde la consola, sólo tuve que hacer _sudo yum install tcl-tcludp_). - -## El plugin - -* Copia el siguiente código en un fichero de texto llamado _ibuddy.tcl_ y mételo en +* [2 el plugin](#el_plugin) +* [3 el código](#el_código) +* [4 otros clientes de jabber con los que también puedes utilizar tu i-buddy](#otros_clientes_de_jabber_con_los_que_también_puedes_utilizar_tu_i-buddy) + +## Requisitos + +* pybuddy + +es un demonio escrito en python para controlar el i-buddy. Debes bajarte el código de [[http://code.google.com/p/pybuddy/](http://code.google.com/p/pybuddy/)] y tenerlo corriendo en tu máquina + +* tcludp + +proporciona una forma de enviar y recibir paquetes UDP a un socket desde Tcl. Debes tenerlo instalado. Puedes bajártelo de [[http://sourceforge.net/projects/tcludp/](http://sourceforge.net/projects/tcludp/)] (en Fedora, desde la consola, sólo tuve que hacer _sudo yum install tcl-tcludp_ ) + +## el plugin + +* copia el siguiente código en un fichero de texto llamado _ibuddy.tcl_ y mételo en /tu_directorio_de_tkabber/plugins/general/ -* Abre **Tkabber** y en el menú _Tkabber/Personalizar_ encontrarás un botón que pone _Plugins_. - Una vez dentro, debería aparecer, entre otros, _iBuddy manager_ junto a un checkbox en blanco, - debes marcarlo y guardar los cambios. -* Tu i-buddy está listo para ser usado. Responderá a los eventos de tu chat moviendo las alas - y emitiendo diversos colores. - -* Si prefieres modificar el código (eres libre de hacerlo) puedes encontrar un listado de los - comandos que i-buddy es capaz de realizar - en [http://code.google.com/p/pybuddy/wiki/Commands](http://code.google.com/p/pybuddy/wiki/Commands). - -## El código - -Este plugin está disponible en el -repositorio [3rd party](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/) de Tkabber. - -Además, puedes encontrarlo en: [http://pastebin.com/4qnNxecz](http://pastebin.com/4qnNxecz). - -[[Download](http://leandro.org/trash/ibuddy.tar.gz)] - -## Otros clientes de jabber con los que también puedes utilizar tu i-buddy - -[[http://www.jabbim.com/](http://www.jabbim.com/)] +* abre **Tkabber** y en el menú _Tkabber/Personalizar_ encontrarás un botón que pone _Plugins_. Una vez dentro, debería aparecer, entre otros, _iBuddy manager_ junto a un checkbox en blanco, debes marcarlo y guardar los cambios. +* tu i-buddy está listo para ser usado. Responderá a los eventos de tu chat moviendo las alas y emitiendo diversos colores. + +* si prefieres modificar el código (eres libre de hacerlo) puedes encontrar un listado de los comandos que i-buddy es capaz de realizar en [[http://code.google.com/p/pybuddy/wiki/Commands](http://code.google.com/p/pybuddy/wiki/Commands)] + +## el código + +este plugin está disponible en el repositorio [3rd party](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/) de Tkabber. + +además, puedes encontrarlo en: [[http://pastebin.com/4qnNxecz](http://pastebin.com/4qnNxecz)] + +[[Download:[download](http://leandro.org/trash/ibuddy.tar.gz)]] + +## otros clientes de jabber con los que también puedes utilizar tu i-buddy + +[[http://www.jabbim.com/](http://www.jabbim.com/)] + + Index: wiki/es/Portada.md ================================================================== --- wiki/es/Portada.md +++ wiki/es/Portada.md @@ -1,10 +1,12 @@ [//]: # (Generated from ../selected/es.tkabber.jabe.ru/index.php/Portada/index.html) # Portada -De Tkabber Wiki +De Tkabber Wiki, la enciclopedia libre. + +Bienvenido. En esta wiki encontrarás documentación en español sobre Tkabber. -Bienvenido. En esta wiki encontrarás documentación en español sobre Tkabber. +* [Plugin para usar el muñeco iBuddy con Tkabber](Plugin_para_usar_el_muñeco_iBuddy_con_Tkabber.md) -* [**Plugin para usar el muñeco iBuddy con Tkabber**](Plugin_para_usar_el_muñeco_iBuddy_con_Tkabber.md) + Index: wiki/es/Preguntas_frecuentes_sobre_Tkabber.md ================================================================== --- wiki/es/Preguntas_frecuentes_sobre_Tkabber.md +++ wiki/es/Preguntas_frecuentes_sobre_Tkabber.md @@ -1,8 +1,10 @@ [//]: # (Generated from ../selected/es.tkabber.jabe.ru/index.php/Preguntas_frecuentes_sobre_Tkabber/index.html) # Preguntas frecuentes sobre Tkabber -De Tkabber Wiki, la enciclopedia libre +De Tkabber Wiki, la enciclopedia libre. + +(En este momento no hay texto en esta página) -(En este momento no hay texto en esta página) + Index: wiki/es/Preguntas_frecuentes_sobre_Tkabber/Apariencia_y_sonido.md ================================================================== --- wiki/es/Preguntas_frecuentes_sobre_Tkabber/Apariencia_y_sonido.md +++ wiki/es/Preguntas_frecuentes_sobre_Tkabber/Apariencia_y_sonido.md @@ -1,8 +1,10 @@ [//]: # (Generated from ../selected/es.tkabber.jabe.ru/index.php/Preguntas_frecuentes_sobre_Tkabber/Apariencia_y_sonido/index.html) # Preguntas frecuentes sobre Tkabber/Apariencia y sonido -De Tkabber Wiki +De Tkabber Wiki, la enciclopedia libre. + +(En este momento no hay texto en esta página) -(En este momento no hay texto en esta página) + Index: wiki/es/Tkabber_para_desarrolladores.md ================================================================== --- wiki/es/Tkabber_para_desarrolladores.md +++ wiki/es/Tkabber_para_desarrolladores.md @@ -1,8 +1,10 @@ [//]: # (Generated from ../selected/es.tkabber.jabe.ru/index.php/Tkabber_para_desarrolladores/index.html) # Tkabber para desarrolladores -De Tkabber Wiki +De Tkabber Wiki, la enciclopedia libre. + +(En este momento no hay texto en esta página) -(En este momento no hay texto en esta página) + Index: wiki/ru/$__configdir.md ================================================================== --- wiki/ru/$__configdir.md +++ wiki/ru/$__configdir.md @@ -1,32 +1,28 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/$::configdir/index.html) + # $::configdir -Материал из Tkabber Wiki - -"Магическая переменная" **$::configdir** настолько часто цитируется на страницах нашей вики, -что заслужила свою собственную статью. - -**$::configdir** — это глобальная переменная Tcl, которая устанавливается Ткаббером на -начальном этапе его загрузки и _содержит полный путь до **каталога настроек** Ткаббера._ - -Она появилась в версии Ткаббера 0.10.0 в связи с тем, что местоположение настроек этой -программы было сделано более "дружелюбным" к системам, не основанным на концепциях Unix. -Поскольку это сделало невозможным универсально (то есть платформо-независимо) ссылаться -на каталог настроек при помощи "стандартного заклинания" "`~/.tkabber`", была введена -сия переменная, а "стандартное заклинание" превратилось просто в +Материал из Tkabber Wiki. + +"Магическая переменная" **$::configdir** настолько часто цитируется на страницах нашей вики, что заслужила свою собственную статью. + + **$::configdir** — это глобальная переменная Tcl, которая устанавливается Ткаббером на начальном этапе его загрузки и _содержит полный путь до **каталога настроек** Ткаббера._ + +Она появилась в версии Ткаббера 0.10.0 в связи с тем, что местоположение настроек этой программы было сделано более "дружелюбным" к системам, не основанным на концепциях Unix. Поскольку это сделало невозможным универсально (то есть платформо-независимо) ссылаться на каталог настроек при помощи "стандартного заклинания" "`~/.tkabber`", была введена сия переменная, а "стандартное заклинание" превратилось просто в $::configdir -Подробности о том, что хранит эта переменная на разных системах, можно узнать: +Подробности о том, что хранит эта переменная на разных системах, можно узнать: -* Технически строго — [в официальной документации](http://tkabber.jabber.ru/files/doc/tkabber.html#s.configuration); -* Фактически просто — [**у нас**](Config.tcl_для_начинающих.md#Где). +* Технически строго — [в официальной документации](http://tkabber.jabber.ru/files/doc/tkabber.html#s.configuration); +* Фактически просто — [у нас](Config.tcl_для_начинающих.md#Где). --- -Assorted bits of text: +Assorted bits of text: + +* Если для вас нотация `**$::configdir**` — "китайская грамота", идите и почитайте [эту статью](Настройка_Ткаббера__азы_и_глубже.md). +* Завершить своё среднее образование про директорию конфигурации можно [тут](Config_dir.md). -* Если для вас нотация **$::configdir** — "китайская грамота", идите и - почитайте [**эту статью**](Настройка_Ткаббера__азы_и_глубже.md). -* Завершить своё среднее образование про директорию конфигурации можно [**тут**](Config_dir.md). + Index: wiki/ru/0.10.x/Шрифты.md ================================================================== --- wiki/ru/0.10.x/Шрифты.md +++ wiki/ru/0.10.x/Шрифты.md @@ -1,480 +1,383 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/0.10.x/Шрифты/index.html) + # 0.10.x/Шрифты -Материал из Tkabber Wiki +Материал из Tkabber Wiki. -**![(!)](../../images/Warning.gif) Внимание!** - -В систему управления настройками шрифтов версии 0.11.0 были внесены изменения, и данная -статья относится ко всем версиям, вышедшим до 0.11.0 (как минимум, к 0.9.7–0.10.0); если -вас интересует современная версия Ткаббера (0.11.0 и выше), читайте [**эту статью**](../Шрифты.md). + ** ![(!)](../../images/Warning.gif) Внимание! ** + + В систему управления настройками шрифтов версии 0.11.0 были внесены изменения, и данная статья относится ко всем версиям, вышедшим до 0.11.0 (как минимум, к 0.9.7 – 0.10.0); если вас интересует современная версия Ткаббера (0.11.0 и выше), читайте [эту статью](../Шрифты.md). ## Содержание * [1 Что настраивать](#Что_настраивать) * [2 Как настраивать](#Как_настраивать) - * [2.1 Настройка системы](#Настройка_системы) - * [2.2 Настройка Ткаббера](#Настройка_Ткаббера) - * [2.3 Продвинутые спецификации шрифтов](#Продвинутые_спецификации_шрифтов) - * [2.3.1 "Программное имя" шрифта](#Программное_имя_шрифта) - * [2.3.2 Имя системного шрифта](#Имя_системного_шрифта) - * [2.3.3 "Иксовый" формат](#Иксовый_формат) - * [2.3.4 "Свободный" формат](#Свободный_формат) - * [2.3.5 Формат "пары опция/значение"](#Формат_пары_опция_значение) - * [2.4 Проблемы не-XLFD спецификаций в X Window](#Проблемы_не-XLFD_спецификаций_в_X_Window) - * [2.5 Тонкая настройка шрифта интерфейса](#Тонкая_настройка_шрифта_интерфейса) - * [2.6 Быстрый подбор шрифтов](#Быстрый_подбор_шрифтов) - * [2.6.1 Шрифт интерфейса](#Шрифт_интерфейса) - * [2.6.2 Шрифт окон чата и ростера](#Шрифт_окон_чата_и_ростера) - * [2.6.3 Немножко хардкора](#Немножко_хардкора) - * [2.7 Другие полезные средства](#Другие_полезные_средства) -* [3 Подводные камни](#Подводные_камни) -* [4 Примечания](#Примечания) - * [4.1 Отдельная настройка шрифта ростеров](#Отдельная_настройка_шрифта_ростеров) - * [4.2 Борьба с антиалиасингом в Xft](#Борьба_с_антиалиасингом_в_Xft) - -## Что настраивать -У Ткаббера можно "покрутить" настройки двух шрифтов: - -* Шрифт интерфейса (меню, всевозможные подписи, поля ввода и т.д.); -* Шрифт окна чата и ростера. - -Первый шрифт является главным, и если второй не задан явно, то шрифт интерфейса используется для отрисовки всего и везде. - -Если ни один из шрифтов не задан явно, для всего используется _шрифт по умолчанию данной оконной системы_. - -Это означает, что в X Window System, в которой [Tk](http://ru.wikipedia.org/wiki/Tk) "поднимает" -настройки из [**XRDB**](../XRDB.md), если таковая есть, будет взят указанный там шрифт. -Если подходящего шрифта там нет, Tk попросит сервер шрифтов выдать нечто, удовлетворяющее -формулировке "шрифт по умолчанию в такой-то кодировке". Поскольку в "иксах" достоверно -существует только шрифт "fixed", подобный запрос для случая отрисовки кириллического текста -обычно удовлетворяется первым попавшимся кириллическим шрифтом семейства "fixed"; нередко это -совершенно не то, что вы хотели бы видеть. - -Непонимание этого факта порождает печально известный миф о "кривых шрифтах в Ткаббере"; -так вот: в Ткаббере не бывает кривых шрифтов — бывают криво настроенные системы. - -**Примечание:** приведённая выше дихотомия настроек шрифтов является сознательным упрощением, -так как [**база данных опций Tk**](../База_данных_опций_Tk.md) (и родственная ей [**XRDB**](../XRDB.md)) -позволяют настраивать шрифты отдельно для разных классов виджетов и даже отдельно — для каждого -виджета, поддерживающего настройку шрифта. Тема чуть подробнее -изложена [**ниже**](#Тонкая_настройка_шрифта_интерфейса). - -## Как настраивать -Есть два варианта: - -* Настроить систему; -* Настроить Ткаббер. - -А также можно сначала настроить систему, а потом отдельно настроить шрифт для чата и ростера. - -### Настройка системы - -В Microsoft® Windows™ шрифты системы можно настроить штатным конфигуратором, -который доступен в виде апплета "Экран" "Панели инструментов". - -В X Window настраивать нужно [**XRDB**](../XRDB.md). - -### Настройка Ткаббера - -Придётся отредактировать файл [**config.tcl**](../Config.tcl.md) в [**каталоге настроек**](../$__configdir.md) -Ткаббера. Если вы собираетесь делать это первый раз, _обязательно_ -прочитайте [**эту статью**](../Config.tcl_для_начинающих.md)! - -Настройки, интересующие нас, должны находиться либо "на верхнем уровне" файла конфигурации -(проще говоря, на чистом месте: вне каких-либо блоков) или в обработчике [**хука**](../Загрузка_настроек.md#Хуки) -**postload\_hook**. - -Настроек, как говорилось, две: - -##### Шрифт интерфейса - -Настраивается через базу данных опций Tk с использованием команды [option](http://www.tcl.tk/man/tcl8.4/TkCmd/option.htm), например: - - option add *font -monotype-arial-medium-r-*-*-11-*-100-100-*-*-iso10646-1 - -##### Шрифт окон чата и ростера - -Настраивается установкой глобальной переменной **font**, например: - - set font -monotype-arial-medium-r-*-*-11-*-100-100-*-*-iso10646-1 - -Итак, минимальный пример куска конфигурации, устанавливающего оба шрифта Ткаббера, выглядит следующим образом: - - # Шрифт элементов интерфейса: - option add *font -monotype-arial-medium-r-*-*-11-*-100-100-*-*-iso10646-1 - # Шрифт окон чата и ростера: - set font -monotype-arial-medium-r-*-*-11-*-100-100-*-*-iso10646-1 - -**Внимание!** Внутри обработчика хука **postload\_hook** необходимо ссылаться на глобальную -переменную **font**, используя её полностью квалифицированное имя: **::font**, либо вначале -объявить, что эта переменная глобальна, такой командой: `global font`. В противном случае -тикль создаст локальную (в пределах обработчика хука) переменную и будет изменять её. - -**Интересный факт:** даже в X Window System кодировка шрифта не обязана совпадать с локалью. - -**Подсказка:** в любой системе удобнее всего сначала подобрать требуемый шрифт при помощи -какого-либо специального программного средства, а затем уже указывать этот шрифт в -конфигурации Ткаббера. В X Window такой программой является, к примеру, **xfontsel**, -а в Windows можно воспользоваться средствами упомянутого апплета "Экран". Шрифты в -Ткаббере также можно подбирать [**интерактивно**](#Быстрый_подбор_шрифтов). - -### Продвинутые спецификации шрифтов - -Если шрифты настраиваются в файле конфигурации Ткаббера (а не средствами системы), -для их спецификации можно использовать дополнительные возможности подсистемы Tk -для работы со шрифтами. - -Строго говоря, все эти возможности подробно изложены на -соответствующей [странице руководства](http://www.tcl.tk/man/tcl8.4/TkCmd/font.htm), -однако тут мы "расшифруем" основные её положения. - -Tk поддерживает пять способов указания шрифтов; приведённый в "каноническом" примере -стиль ["XLFD"](http://ftp.xfree86.org/pub/XFree86/4.5.0/doc/xlfd.txt) ("X Logical -Font Description") является одним из них, и вообще говоря, для пользователей систем, -не основанных на X Window System, он является непонятным и неудобным. - -**Внимание!** прежде, чем вы ринетесь применять изложенное ниже на практике, имейте в -виду, что Tk имеет проблемы с не-XLFD спецификациями шрифтов в X Window. Подробнее об -этом написано [**ниже**](#Проблемы_не-XLFD_спецификаций_в_X_Window). - -Вот эти пять способов: - -#### "Программное имя" шрифта - -Это имя шрифта, созданного при помощи команды Tk `font create`: Это — наименее -интересный для нас способ, так как в основном предназначен для облегчения написания программ. - -Пример: + * [2.1 Настройка системы](#Настройка_системы) + * [2.2 Настройка Ткаббера](#Настройка_Ткаббера) + * [2.3 Продвинутые спецификации шрифтов](#Продвинутые_спецификации_шрифтов) + * [2.3.1 "Программное имя" шрифта](#Программное_имя_шрифта) + * [2.3.2 Имя системного шрифта](#Имя_системного_шрифта) + * [2.3.3 "Иксовый" формат](#Иксовый_формат) + * [2.3.4 "Свободный" формат](#Свободный_формат) + * [2.3.5 Формат "пары опция/значение"](#Формат_пары_опция_значение) + * [2.4 Проблемы не-XLFD спецификаций в X Window](#Проблемы_не-XLFD_спецификаций_в_X_Window) + * [2.5 Тонкая настройка шрифта интерфейса](#Тонкая_настройка_шрифта_интерфейса) + * [2.6 Быстрый подбор шрифтов](#Быстрый_подбор_шрифтов) + * [2.6.1 Шрифт интерфейса](#Шрифт_интерфейса) + * [2.6.2 Шрифт окон чата и ростера](#Шрифт_окон_чата_и_ростера) + * [2.6.3 Немножко хардкора](#Немножко_хардкора) + * [2.7 Другие полезные средства](#Другие_полезные_средства) +* [3 Подводные камни](#Подводные_камни) +* [4 Примечания](#Примечания) + * [4.1 Отдельная настройка шрифта ростеров](#Отдельная_настройка_шрифта_ростеров) + * [4.2 Борьба с антиалиасингом в Xft](#Борьба_с_антиалиасингом_в_Xft) + +# Что настраивать +У Ткаббера можно "покрутить" настройки двух шрифтов: + +* Шрифт интерфейса (меню, всевозможные подписи, поля ввода и т.д.); +* Шрифт окна чата и ростера. + +Первый шрифт является главным, и если второй не задан явно, то шрифт интерфейса используется для отрисовки всего и везде. + +Если ни один из шрифтов не задан явно, для всего используется _шрифт по умолчанию данной оконной системы_. + +Это означает, что в X Window System, в которой [Tk](http://ru.wikipedia.org/wiki/Tk) "поднимает" настройки из [XRDB](../XRDB.md), если таковая есть, будет взят указанный там шрифт. Если подходящего шрифта там нет, Tk попросит сервер шрифтов выдать нечто, удовлетворяющее формулировке "шрифт по умолчанию в такой-то кодировке". Поскольку в "иксах" достоверно существует только шрифт "fixed", подобный запрос для случая отрисовки кириллического текста обычно удовлетворяется первым попавшимся кириллическим шрифтом семейства "fixed"; нередко это совершенно не то, что вы хотели бы видеть. + +Непонимание этого факта порождает печально известный миф о "кривых шрифтах в Ткаббере"; так вот: в Ткаббере не бывает кривых шрифтов — бывают криво настроенные системы. + +**Примечание:** приведённая выше дихотомия настроек шрифтов является сознательным упрощением, так как [база данных опций Tk](../База_данных_опций_Tk.md) (и родственная ей [XRDB](../XRDB.md)) позволяют настраивать шрифты отдельно для разных классов виджетов и даже отдельно — для каждого виджета, поддерживающего настройку шрифта. Тема чуть подробнее изложена [ниже](../Шрифты.md#Тонкая_настройка_шрифта_интерфейса). + +# Как настраивать +Есть два варианта: + +* Настроить систему; +* Настроить Ткаббер. + +А также можно сначала настроить систему, а потом отдельно настроить шрифт для чата и ростера. + +## Настройка системы + +В Microsoft® Windows™ шрифты системы можно настроить штатным конфигуратором, который доступен в виде апплета "Экран" "Панели инструментов". + +В X Window настраивать нужно [XRDB](../XRDB.md). + +## Настройка Ткаббера + +Придётся отредактировать файл [**config.tcl**](../Config.tcl.md) в [каталоге настроек](../$__configdir.md) Ткаббера. Если вы собираетесь делать это первый раз, _обязательно_ прочитайте [эту статью](../Config.tcl_для_начинающих.md)! + +Настройки, интересующие нас, должны находиться либо "на верхнем уровне" файла конфигурации (проще говоря, на чистом месте: вне каких-либо блоков) или в обработчике [хука](../Загрузка_настроек.md#Хуки) **postload\_hook**. + +Настроек, как говорилось, две: + + Шрифт интерфейса  + + Настраивается через базу данных опций Tk с использованием команды [option](http://www.tcl.tk/man/tcl8.4/TkCmd/option.htm), например: + option add *font -monotype-arial-medium-r-*-*-11-*-100-100-*-*-iso10646-1 + + Шрифт окон чата и ростера  + + Настраивается установкой глобальной переменной **font**, например: + set font -monotype-arial-medium-r-*-*-11-*-100-100-*-*-iso10646-1 + +Итак, минимальный пример куска конфигурации, устанавливающего оба шрифта Ткаббера, выглядит следующим образом: + + # Шрифт элементов интерфейса: + option add *font -monotype-arial-medium-r-*-*-11-*-100-100-*-*-iso10646-1 + # Шрифт окон чата и ростера: + set font -monotype-arial-medium-r-*-*-11-*-100-100-*-*-iso10646-1 + +**Внимание!** Внутри обработчика хука **postload\_hook** необходимо ссылаться на глобальную переменную **font**, используя её полностью квалифицированное имя: **::font**, либо вначале объявить, что эта переменная глобальна, такой командой: `global font`. В противном случае тикль создаст локальную (в пределах обработчика хука) переменную и будет изменять её. + +**Интересный факт:** даже в X Window System кодировка шрифта не обязана совпадать с локалью. + +**Подсказка:** в любой системе удобнее всего сначала подобрать требуемый шрифт при помощи какого-либо специального программного средства, а затем уже указывать этот шрифт в конфигурации Ткаббера. В X Window такой программой является, к примеру, **xfontsel**, а в Windows можно воспользоваться средствами упомянутого апплета "Экран". Шрифты в Ткаббере также можно подбирать [интерактивно](../Шрифты.md#Быстрое_тестирование_настроек). + +## Продвинутые спецификации шрифтов + +Если шрифты настраиваются в файле конфигурации Ткаббера (а не средствами системы), для их спецификации можно использовать дополнительные возможности подсистемы Tk для работы со шрифтами. + +Строго говоря, все эти возможности подробно изложены на соответствующей [странице руководства](http://www.tcl.tk/man/tcl8.4/TkCmd/font.htm), однако тут мы "расшифруем" основные её положения. + +Tk поддерживает пять способов указания шрифтов; приведённый в "каноническом" примере стиль ["XLFD"](http://ftp.xfree86.org/pub/XFree86/4.5.0/doc/xlfd.txt) ("X Logical Font Description") является одним из них, и вообще говоря, для пользователей систем, не основанных на X Window System, он является непонятным и неудобным. + +**Внимание!** прежде, чем вы ринетесь применять изложенное ниже на практике, имейте в виду, что Tk имеет проблемы с не-XLFD спецификациями шрифтов в X Window. Подробнее об этом написано [ниже](../Шрифты.md#Проблемы_не-XLFD_спецификаций_в_X_Window). + +Вот эти пять способов: + +### "Программное имя" шрифта + +Это имя шрифта, созданного при помощи команды Tk `font create`: Это — наименее интересный для нас способ, так как в основном предназначен для облегчения написания программ. + +Пример: # Создаём новый шрифт: set myfont [font create {"Comic Sans MS" 12}] # Теперь переменная myfont содержит программное имя созданного шрифта. # Используем наш новый шрифт для настройки Ткаббера: set font $myfont -#### Имя системного шрифта - -Имеет смысл только в Windows и Macintosh. Позволяет сослаться на один из шрифтов, настроенных для использования в системе. - -##### Системные шрифты Windows - -system, ansi, device, systemfixed, ansifixed, oemfixed - -##### Системные шрифты Macintosh - -system, application - -#### "Иксовый" формат - -Это формат XLFD, представляющий собой строку вида +### Имя системного шрифта + +Имеет смысл только в Windows и Macintosh. Позволяет сослаться на один из шрифтов, настроенных для использования в системе. + + Системные шрифты Windows + + system, ansi, device, systemfixed, ansifixed, oemfixed + + Системные шрифты Macintosh + + system, application + +### "Иксовый" формат + +Это формат XLFD, представляющий собой строку вида -foundry-family-weight-slant-setwidth-addstyle-pixel-point-resx-resy-spacing-width-charset-encoding -Любое из полей может быть заменено символом "\*", что означает "любое значение". +Любое из полей может быть заменено символом "\*", что означает "любое значение". --- -Теперь перейдём к наиболее интересным форматам. - -Следует заметить, что совокупность параметров, формирующих представление шрифта в этих форматах, -должна представлять собой "правильно сформированный список". Академическое описание этого -понятия, как ни странно, достаточно трудно для понимания; полные правила, которыми -руководствуется тикль, осуществляя группировку, можно изучить [здесь](http://wiki.tcl.tk/14940). -А в рамках данной статьи мы просто дадим пару советов, как получить такой список из набора параметров: - -* Список с точки зрения тикля должен представлять собой одно _слово._ Это значит, что _элементы_ -списка нужно _сгруппировать_ друг с другом. Проще всего это сделать фигурными скобками или двойными -кавычками, например: - - # Список из трёх элементов: - {a b c} - # Список из четырёх элементов: - "d ef gh ij" - -* Список состоит из _слов_, слова отделяются друг от друга пробельными символами. Это означает, -что если элементы-слова вашего списка сами содержат пробелы, их придётся сгруппировать, например: - - # Список из трёх элементов: - {{первый элемент} второй {и третий элемент}} - -Не стоит отчаиваться, если правила группировки вам не вполне понятны — ниже приводятся -готовые примеры, которые позволят вам "почувствовать", как работают эти правила. - -#### "Свободный" формат - -Является "человекопонятным" и представляет собой _список_ из одного или более значений в указанном порядке: +Теперь перейдём к наиболее интересным форматам. + +Следует заметить, что совокупность параметров, формирующих представление шрифта в этих форматах, должна представлять собой "правильно сформированный список". Академическое описание этого понятия, как ни странно, достаточно трудно для понимания; полные правила, которыми руководствуется тикль, осуществляя группировку, можно изучить [здесь](http://wiki.tcl.tk/14940). А в рамках данной статьи мы просто дадим пару советов, как получить такой список из набора параметров: + +* Список с точки зрения тикля должен представлять собой одно _слово._ Это значит, что _элементы_ списка нужно _сгруппировать_ друг с другом. Проще всего это сделать фигурными скобками или двойными кавычками, например: + + # Список из трёх элементов: + {a b c} + # Список из четырёх элементов: + "d ef gh ij" + +* Список состоит из _слов_, слова отделяются друг от друга пробельными символами. Это означает, что если элементы-слова вашего списка сами содержат пробелы, их придётся сгруппировать, например: + + # Список из трёх элементов: + {{первый элемент} второй {и третий элемент}} + +Не стоит отчаиваться, если правила группировки вам не вполне понятны — ниже приводятся готовые примеры, которые позволят вам "почувствовать", как работают эти правила. + +### "Свободный" формат + +Является "человекопонятным" и представляет собой _список_ из одного или более значений в указанном порядке: семейство ?размер? ?стиль? ?стиль ...? -(Запись **?foo?** означает "необязательный параметр класса foo".) - -Обязательным является только семейство шрифта (font family). - -Доступные стили: - -* Толщина начертания: - * **normal** — обычная; - * **bold** — полужирный шрифт; - -* Наклон символов: - * **roman** — обычное (прямое) начертание; - * **italic** — курсивное начертание; - -* Дополнительные стили: - * **underline** — подчёркнутый шрифт; - * **overstrike** — перечёркнутый шрифт. - -Примеры: +(Запись **?foo?** означает "необязательный параметр класса foo".) + +Обязательным является только семейство шрифта (font family). + +Доступные стили: + +* Толщина начертания: + * **normal** — обычная; + * **bold** — полужирный шрифт; + +* Наклон символов: + * **roman** — обычное (прямое) начертание; + * **italic** — курсивное начертание; + +* Дополнительные стили: + * **underline** — подчёркнутый шрифт; + * **overstrike** — перечёркнутый шрифт. + +Примеры: set font Tahoma set font {Arial 12} option add *font {{Times New Roman} 14 bold italic} -#### Формат "пары опция/значение" +### Формат "пары опция/значение" -Представляет собой _список_ пар опция/значение: +Представляет собой _список_ пар опция/значение: опция значение ?опция значение ...? -Доступные опции и значения: - -##### -family - -Семейство шрифтов. - -##### -size - -Размер шрифта. - -##### -weight - -Толщина начертания шрифта. Доступные значения: **bold** (полужирный) и **normal** (обычный). - -##### -slant - -Наклон символов шрифта. Доступные значения: **italic** (курсив) и **roman** (прямой). - -##### -underline - -Подчёркивание. Значением является значение булевого типа (**true**, **yes**, ненулевое число — истина; **false**, **no**, 0 — ложь). - -##### -overstrike - -Зачёркивание. Доступные значения: истина и ложь. - -В отличие от предыдущего способа, в этом: - -* Пары могут следовать в произвольном порядке; -* Возможно не указывать семейство шрифтов и/или размер, а указать только один или несколько стилей начертания. - -Примеры: +Доступные опции и значения: + + -family + + Семейство шрифтов. + + -size + + Размер шрифта. + + -weight + + Толщина начертания шрифта. Доступные значения: **bold** (полужирный) и **normal** (обычный). + + -slant + + Наклон символов шрифта. Доступные значения: **italic** (курсив) и **roman** (прямой). + + -underline + + Подчёркивание. Значением является значение булевого типа (**true**, **yes**, ненулевое число — истина; **false**, **no**, 0 — ложь). + + -overstrike + + Зачёркивание. Доступные значения: истина и ложь. + +В отличие от предыдущего способа, в этом: + +* Пары могут следовать в произвольном порядке; +* Возможно не указывать семейство шрифтов и/или размер, а указать только один или несколько стилей начертания. + +Примеры: set font "-family {Comic Sans MS} -overstrike yes" option add *font {-weight bold -size 12} set font {-underline 1} -### Проблемы не-XLFD спецификаций в X Window - -К сожалению, версия Tk для X Window имеет баг с подбором глифов к символам, не входящим -в Latin-1 (и поэтому он затрагивает русскоговорящих, а точнее, кириллически пишущих пользователей -Ткаббера). - -Баг проявляется в том, что _при использовании не-XLFD спецификаций шрифтов_ Tk иногда сильно -ошибается с подбором глифов к символам, отсутствующим в шрифте, который был выбран в -соответствии со специфиацией как основной. Выглядит это, например, как сильно отличающиеся -от основного шрифта глифы кириллических символов. - -Насколько нам известно, работы по переписыванию алгоритма подбора шрифтов в X Window ведутся, -но проблема всё ещё не решена. - -Выходов из данной ситуации два: - -* Использовать XLFD-спецификацию для шрифтов. -* Использовать версию 8.5 Tcl/Tk, собранную с поддержкой технологии [Xft](http://www.fontconfig.org/). - -Остановимся подробнее на втором варианте. - -Поддержка [Xft](http://wiki.tcl.tk/9015) появилась в Tk начиная с версии 8.5. Как для подбора, -так и для отображения шрифтов используются совершенно другие механизмы, и, в частности, -при использовании Xft полностью отсутствует обсуждаемая проблема. - -Однако, надо понимать последствия перехода на Xft: - -* Подсистема Xft имеет собственные настройки, не имеющие отношения к стандартным механизмам - X Window. В частности, вам, возможно, придётся познакомиться - с [fontconfig](http://fontconfig.org/fontconfig-user.html). -* Несмотря на поддержку TrueType и полную поддержку Unicode шрифтов, Xft также - использует [антиалиасинг](http://en.wikipedia.org/wiki/Anti-aliasing), который - нравится далеко не всем. - -Узнать, поддерживает ли ваша версия **wish** Xft, можно двумя способами: - -* В Linux можно узнать, слинкован ли **wish** с соответствующей динамической библиотекой, - примерно так: - - $ ldd `which wish` | grep -i xft - -* В любой системе можно запустить **wish** и выполнить там команду: - - tk::pkgconfig get fontsystem - -Если она не "заругалась" и выдала строку "xft", — ваш Tcl/Tk поддеживает Xft. - -О борьбе с антиалиазингом в Xft рассказано [**ниже**](#Борьба_с_антиалиасингом_в_Xft). - -### Тонкая настройка шрифта интерфейса - -Для понимания того, чего и где крутить, нужно осмыслить -работу [**базы данных опций Tk**](../База_данных_опций_Tk.md) и [**XRDB**](../XRDB.md). - -Приведём пару готовых примеров: - -* Шрифт меню: - - option add *Menu.font "Arial 10" - -* Шрифт однострочных полей ввода: - - option add *Entry.font {-weight bold} - -* Шрифт меток (статического текста): - - option add *Label.font {-slant italic} - -* Шрифт табов (\<= 0.10.0): - - option add *nb.font {-size 8} - -* Шрифт "новых табов" (альфа 0.10.1): - - option add *nb.Button.font {-size 9} - -... - -### Быстрый подбор шрифтов - -Вовсе необязательно "до посинения" повторять цикл "редактирование файла конигурации + -перезапуск Ткаббера" — Ткаббер написан на тикле и поэтому позволяет управлять собой -интерактивно. Это можно использовать для быстрого — "натурного" — подбора подходящих -шрифтов чтобы затем один раз вписать правильные строчки в файл конфигурации. - -Откройте [**консоль Ткаббера**](../Ткаббер_ЧаВо.md#Консоль_Ткаббера). Здесь можно -вводить те же самые команды, которые предназначены для помещения в файл конфигурации, -в точно таком же формате. Имейте также в виду, что как встроенная консоль Ткаббера, -так и **tkcon**, поддерживают историю введённых команд, доступную по нажатиям -клавиш ↑ и ↓. - -Как было сказано выше, у Ткаббера есть две группы элементов интерфейса, у которых -можно настроить шрифты. Для быстрого тестирования нам нужно понять, как заставить -Ткаббер "применить" изменённый шрифт. - -Это несложно: - -#### Шрифт интерфейса - -Используется, помимо прочего, для отрисовки всевозможных меню. - -Это означает, что для того, чтобы посмотреть настройку, изменённую при помощи -`option add *font ...`, нужно просто открыть какое-либо _динамически создаваемое_ меню. -Главное меню для этого не подходит, а вот меню на элементах ростера подходят замечательно. - -Итак, для быстрого подбора шрифта для элементов интерфейса выполняйте такую -последовательность действий: - -1. Запустите Ткаббер, залогиньтесь на сервер, чтобы получить ростер, откройте консоль. -1. Напишите там - - option add *font ваша_спецификация_шрифта - -1. Откройте меню на любом контакте в ростере, рассмотрите шрифт. -1. Повторяйте процедуру до получения удобоваримого результата. - -#### Шрифт окон чата и ростера - -Для тестирования этого шрифта нам нужно открыть (или переоткрыть) какое-либо окно чата. -Лучше всего для этого подходит какая-либо специальная тестовая комната, например, -`test@conference.jabber.ru`. Также ничего не мешает вам открыть окно чата с самим собой -(или со второй копией Ткаббера). - -Есть и более быстрый способ: вызов процедуры Ткаббера +## Проблемы не-XLFD спецификаций в X Window + +К сожалению, версия Tk для X Window имеет баг с подбором глифов к символам, не входящим в Latin-1 (и поэтому он затрагивает русскоговорящих, а точнее, кириллически пишущих пользователей Ткаббера). + +Баг проявляется в том, что _при использовании не-XLFD спецификаций шрифтов_ Tk иногда сильно ошибается с подбором глифов к символам, отсутствующим в шрифте, который был выбран в соответствии со специфиацией как основной. Выглядит это, например, как сильно отличающиеся от основного шрифта глифы кириллических символов. + +Насколько нам известно, работы по переписыванию алгоритма подбора шрифтов в X Window ведутся, но проблема всё ещё не решена. + +Выходов из данной ситуации два: + +* Использовать XLFD-спецификацию для шрифтов. +* Использовать версию 8.5 Tcl/Tk, собранную с поддержкой технологии [Xft](http://www.fontconfig.org/). + +Остановимся подробнее на втором варианте. + +Поддержка [Xft](http://wiki.tcl.tk/9015) появилась в Tk начиная с версии 8.5. Как для подбора, так и для отображения шрифтов используются совершенно другие механизмы, и, в частности, при использовании Xft полностью отсутствует обсуждаемая проблема. + +Однако, надо понимать последствия перехода на Xft: + +* Подсистема Xft имеет собственные настройки, не имеющие отношения к стандартным механизмам X Window. В частности, вам, возможно, придётся познакомиться с [fontconfig](http://fontconfig.org/fontconfig-user.html). +* Несмотря на поддержку TrueType и полную поддержку Unicode шрифтов, Xft также использует [антиалиасинг](http://en.wikipedia.org/wiki/Anti-aliasing), который нравится далеко не всем. + +Узнать, поддерживает ли ваша версия **wish** Xft, можно двумя способами: + +* В Linux можно узнать, слинкован ли **wish** с соответствующей динамической библиотекой, примерно так: + $ ldd `which wish` | grep -i xft + +* В любой системе можно запустить **wish** и выполнить там команду: + tk::pkgconfig get fontsystem + Если она не "заругалась" и выдала строку "xft", — ваш Tcl/Tk поддеживает Xft. + +О борьбе с антиалиазингом в Xft рассказано [ниже](../Шрифты.md#Борьба_с_антиалиасингом_в_Xft). + +## Тонкая настройка шрифта интерфейса + +Для понимания того, чего и где крутить, нужно осмыслить работу [базы данных опций Tk](../База_данных_опций_Tk.md) и [XRDB](../XRDB.md). + +Приведём пару готовых примеров: + +* Шрифт меню: + option add *Menu.font "Arial 10" + +* Шрифт однострочных полей ввода: + option add *Entry.font {-weight bold} + +* Шрифт меток (статического текста): + option add *Label.font {-slant italic} + +* Шрифт табов (\<= 0.10.0): + option add *nb.font {-size 8} + +* Шрифт "новых табов" (альфа 0.10.1): + option add *nb.Button.font {-size 9} + +... + +## Быстрый подбор шрифтов + +Вовсе необязательно "до посинения" повторять цикл "редактирование файла конигурации + перезапуск Ткаббера" — Ткаббер написан на тикле и поэтому позволяет управлять собой интерактивно. Это можно использовать для быстрого — "натурного" — подбора подходящих шрифтов чтобы затем один раз вписать правильные строчки в файл конфигурации. + +Откройте [консоль Ткаббера](../Ткаббер_ЧаВо.md#Консоль_Ткаббера). Здесь можно вводить те же самые команды, которые предназначены для помещения в файл конфигурации, в точно таком же формате. Имейте также в виду, что как встроенная консоль Ткаббера, так и tkcon, поддерживают историю введённых команд, доступную по нажатиям клавиш ↑ и ↓. + +Как было сказано выше, у Ткаббера есть две группы элементов интерфейса, у которых можно настроить шрифты. Для быстрого тестирования нам нужно понять, как заставить Ткаббер "применить" изменённый шрифт. + +Это несложно: + +### Шрифт интерфейса + +Используется, помимо прочего, для отрисовки всевозможных меню. + +Это означает, что для того, чтобы посмотреть настройку, изменённую при помощи `option add *font ...`, нужно просто открыть какое-либо _динамически создаваемое_ меню. Главное меню для этого не подходит, а вот меню на элементах ростера подходят замечательно. + +Итак, для быстрого подбора шрифта для элементов интерфейса выполняйте такую последовательность действий: + +1. Запустите Ткаббер, залогиньтесь на сервер, чтобы получить ростер, откройте консоль. +1. Напишите там + option add *font ваша_спецификация_шрифта + +1. Откройте меню на любом контакте в ростере, рассмотрите шрифт. +1. Повторяйте процедуру до получения удобоваримого результата. + +### Шрифт окон чата и ростера + +Для тестирования этого шрифта нам нужно открыть (или переоткрыть) какое-либо окно чата. Лучше всего для этого подходит какая-либо специальная тестовая комната, например, `test@conference.jabber.ru`. Также ничего не мешает вам открыть окно чата с самим собой (или со второй копией Ткаббера). + +Есть и более быстрый способ: вызов процедуры Ткаббера ::ifacetk::roster::redraw -перерисовывает основной ростер, применяя установленный шрифт. - -Итак, для быстрого подбора шрифта для окон чата выполняйте такую последовательность действий: - -1. Запустите Ткаббер, залогиньтесь на сервер, чтобы получить доступ к чатам, откройте консоль. -1. Напишите там - - set font ваша_спецификация_шрифта - -1. (Пере)откройте какое-либо окно чата или вызовите указанную выше процедуру, рассмотрите шрифт. -1. Повторяйте процедуру до получения удобоваримого результата. - -![(!)](../../images/Hammer.png) **Сделать:** Выяснить применимы ли тут команды `ifacetk::switch_font` и `ifacetk::define_fonts` - -#### Немножко хардкора - -Вы можете узнать, что именно думает Tk по поводу шрифта, который вы установили. Для этого -используется команда `font actual`. - -Используется она следующим образом: - -* Для шрифта интерфейса: - - font actual [option get . font [winfo class .]] - -* Для шрифта чатов и ростера: - - font actual $font - -За подробностями обращайтесь к соответствующей [странице руководства](http://www.tcl.tk/man/tcl8.4/TkCmd/font.htm). - -### Другие полезные средства - -Интерес может представлять команда +перерисовывает основной ростер, применяя установленный шрифт. + +Итак, для быстрого подбора шрифта для окон чата выполняйте такую последовательность действий: + +1. Запустите Ткаббер, залогиньтесь на сервер, чтобы получить доступ к чатам, откройте консоль. +1. Напишите там + set font ваша_спецификация_шрифта + +1. (Пере)откройте какое-либо окно чата или вызовите указанную выше процедуру, рассмотрите шрифт. +1. Повторяйте процедуру до получения удобоваримого результата. + +![(!)](../../images/Hammer.png) **Сделать:** Выяснить применимы ли тут команды `ifacetk::switch_font` и `ifacetk::define_fonts` + +### Немножко хардкора + +Вы можете узнать, что именно думает Tk по поводу шрифта, который вы установили. Для этого используется команда `font actual`. + +Используется она следующим образом: + +* Для шрифта интерфейса: + font actual [option get . font [winfo class .]] + +* Для шрифта чатов и ростера: + font actual $font + +За подробностями обращайтесь к соответствующей [странице руководства](http://www.tcl.tk/man/tcl8.4/TkCmd/font.htm). + +## Другие полезные средства + +Интерес может представлять команда font families -которая возвращает список всех семейств шрифтов, доступных Ткабберу. - -Её можно ввести с консоли работающего Ткаббера. - -## Подводные камни -Файлы с настройками Tk ("Tk option database") — те самые файлы с расширением ".xrdb", -называемые кое-кем "темами", — иногда содержат настройку шрифтов интерфейса. Подгрузка -такого файла при помощи `option readfile` "перекроет" системную настройку. - -Иногда это то, что вам нужно, иногда — нет. В таком случае _после_ подгрузки xrdb-файла -нужно переписать настройку шрифта при помощи `option add` как описано выше. - -## Примечания -### Отдельная настройка шрифта ростеров - -Существует [**"хак"**](../Нетривиальные_настройки.md#Собственный_шрифт_для_ростеров), позволяющий -отдельно настраивать шрифт ростеров. - -### Борьба с антиалиасингом в Xft - -Известно, что антиалиасинг был "введён в оборот" для борьбы с дешёвыми китайскими TFT-мониторами -и нравится [далеко не всем](http://www.joelonsoftware.com/articles/fog0000000041.html). Те, кто -обладает качественным монитором и нормальным набором шрифтов под его рабочий DPI, вероятно, -захотят антиалиасинг отключить. - -Это делается при помощи настройки [fontconfig](http://www.fontconfig.org/). Настраивать -эту подсистему можно как на уровне _параметров_ отдельных шрифтов (то есть, к примеру, -можно отключить антиалиасинг для определённых семейств шрифтов, если используется размер -символов менее определённого порога, и т.д.), так и глобально — для всех шрифтов с любыми параметрами. - -Потребуется отредактировать либо **~/.fonts.conf** — файл настроек конкретного пользователя, -либо **/etc/fonts/fonts.conf** — системный файл настроек. - -Полное отключение антиалиасинга делается так: +которая возвращает список всех семейств шрифтов, доступных Ткабберу. + +Её можно ввести с консоли работающего Ткаббера. + +# Подводные камни +Файлы с настройками Tk ("Tk option database") — те самые файлы с расширением ".xrdb", называемые кое-кем "темами", — иногда содержат настройку шрифтов интерфейса. Подгрузка такого файла при помощи `option readfile` "перекроет" системную настройку. + +Иногда это то, что вам нужно, иногда — нет. В таком случае _после_ подгрузки xrdb-файла нужно переписать настройку шрифта при помощи `option add` как описано выше. + +# Примечания +## Отдельная настройка шрифта ростеров + +Существует ["хак"](../Нетривиальные_настройки.md#Собственный_шрифт_для_ростеров), позволяющий отдельно настраивать шрифт ростеров. + +## Борьба с антиалиасингом в Xft + +Известно, что антиалиасинг был "введён в оборот" для борьбы с дешёвыми китайскими TFT-мониторами и нравится [далеко не всем](http://www.joelonsoftware.com/articles/fog0000000041.html). Те, кто обладает качественным монитором и нормальным набором шрифтов под его рабочий DPI, вероятно, захотят антиалиасинг отключить. + +Это делается при помощи настройки [fontconfig](http://www.fontconfig.org/). Настраивать эту подсистему можно как на уровне _параметров_ отдельных шрифтов (то есть, к примеру, можно отключить антиалиасинг для определённых семейств шрифтов, если используется размер символов менее определённого порога, и т.д.), так и глобально — для всех шрифтов с любыми параметрами. + +Потребуется отредактировать либо **~/.fonts.conf** — файл настроек конкретного пользователя, либо **/etc/fonts/fonts.conf** — системный файл настроек. + +Полное отключение антиалиасинга делается так: @@ -482,13 +385,11 @@ false -В качестве примера конфигурирования избирательного отключения антиалиасинга приведём настройку -его подавления для шрифтов с размером символов от 8 до 15 пунктов (points) -(позаимствовано [отсюда](http://www.wlug.org.nz/AntiAliasedFonts)): +В качестве примера конфигурирования избирательного отключения антиалиасинга приведём настройку его подавления для шрифтов с размером символов от 8 до 15 пунктов (points) (позаимствовано [отсюда](http://www.wlug.org.nz/AntiAliasedFonts)): @@ -513,12 +414,12 @@ false -Для того, чтобы новые настройки вступили в силу, достаточно перезапустить приложения, использующие Xft. +Для того, чтобы новые настройки вступили в силу, достаточно перезапустить приложения, использующие Xft. + +За подробностями по поводу конфигурирования [fontconfig](http://www.fontconfig.org/) обращайтесть к [его вики](http://fontconfig.org/fontconfig-user.html), а также официальной документации: **fonts.conf(5)**. -За подробностями по поводу конфигурирования [fontconfig](http://www.fontconfig.org/) обращайтесть -к [его вики](http://fontconfig.org/fontconfig-user.html), а также официальной документации: **fonts.conf(5)**. +Ещё одним хорошим ресурсом по шрифтам и их приложению к Xft является [официальная документация на Xfree86](http://www.xfree86.org/current/fonts2.html). -Ещё одним хорошим ресурсом по шрифтам и их приложению к Xft -является [официальная документация на Xfree86](http://www.xfree86.org/current/fonts2.html). + Index: wiki/ru/0.9.x/ЧаВо.md ================================================================== --- wiki/ru/0.9.x/ЧаВо.md +++ wiki/ru/0.9.x/ЧаВо.md @@ -1,6 +1,7 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/0.9.x/ЧаВо/index.html) + # 0.9.x/ЧаВо Материал из Tkabber Wiki @@ -16,301 +17,191 @@ * [8 Как почитать протокол общения "в привате" с участником групчата, которого больше нет в комнате?](#Как_почитать_протокол_общения_в_привате_с_участником_групчата_которого_больше_нет_в_комнате) * [9 Проверка орфографии](#Проверка_орфографии) * [10 Стайлкоды](#Стайлкоды) * [11 Можно ли добавить в ростер самого себя?](#Можно_ли_добавить_в_ростер_самого_себя) * [12 Ввод "хитрых" юникодных символов](#Ввод_хитрых_юникодных_символов) - * [12.1 Очень неудобный способ](#Очень_неудобный_способ) - * [12.2 Умеренно неудобный способ](#Умеренно_неудобный_способ) - * [12.3 Наименее неудобный способ](#Наименее_неудобный_способ) + * [12.1 Очень неудобный способ](#Очень_неудобный_способ) + * [12.2 Умеренно неудобный способ](#Умеренно_неудобный_способ) + * [12.3 Наименее неудобный способ](#Наименее_неудобный_способ) ## В старпаке/старките нет звука/поддержки JPEG,PNG/сжатия -Без переделки старпака эту проблему не решить. Однако, [**Kostix**](../Участник_Kostix.md) добавил в -официальный старпак под win32 поддержку сжатия и возможность подгружать [img.kit](http://mini.net/sdarchive/img.kit), -содержащий пакет [**TkImg**](../Ткаббер_ЧаВо.md#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG). Подробнее -читайте [**здесь**](../Старпак_и_сжатие.md). +Без переделки старпака эту проблему не решить. Однако, [Kostix](../Участник_Kostix.md) добавил в официальный старпак под win32 поддержку сжатия и возможность подгружать [img.kit](http://mini.net/sdarchive/img.kit), содержащий пакет [TkImg](../Ткаббер_ЧаВо.md#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG). Подробнее читайте [здесь](../Low_traffic_HOWTO.md#Старпак_Ткаббера_Win32). ## Пропадает содержимое ростера -**Вопрос: Если отключить показ в ростере транспортных иконок `show_transport_user_icons 0` и включить показ -активных разговоров `::ifacetk::roster::options(chats_group) 1`, то при попытке открыть хоть -один чат с каким-нибудь JID, содержимое ростера пропадает и до перезапуска Ткаббера не восстанавливается.** +**Вопрос: Если отключить показ в ростере транспортных иконок `show_transport_user_icons 0` и включить показ активных разговоров `::ifacetk::roster::options(chats_group) 1`, то при попытке открыть хоть один чат с каким-нибудь JID, содержимое ростера пропадает и до перезапуска Ткаббера не восстанавливается.** -Ответ: Обновитесь с [Tkabber SVN](http://tkabber.jabber.ru/svn) — всё уже исправлено. +Ответ: Обновитесь с [Tkabber SVN](http://tkabber.jabber.ru/svn) — всё уже исправлено. ## Не подключаются новые смайлики (звуковые схемы) -**Вопрос: Подправил конфиг, прописав там путь к новым смайликам (звуковым схемам), но -при перезагрузке они не подключаются.** - -Ответ: Для начала ознакомьтесь с уже имеющейся [**информацией**](../Смайлики_и_аватары.md#Смайлики) на -эту тему. Далее убедитесь, что путь ведёт именно туда, где лежат файлы. В файле конфигурации -(например, от badlop) путь к смайликам указан такой: **/usr/share/tkabber/emoticons-tkabber** — в -установочный директорий. При добавлении новых смайл-паков их обычно кладут в домашний каталог, -в **~/.tkabber/emoticons-tkabber**, и если вы только дописали в конец строки название нового -директория, эффекта не будет :-) - -Кстати, звуковые схемы как таковые в Ткаббере уже не подключаются. Начиная с версии 0.9.8 -можно назначить любой звуковой файл (в формате wav) для каждого из событий отдельно. +**Вопрос: Подправил конфиг, прописав там путь к новым смайликам (звуковым схемам), но при перезагрузке они не подключаются.** + +Ответ: Для начала ознакомьтесь с уже имеющейся [информацией](../Смайлики_и_аватары.md#Смайлики) на эту тему. Далее убедитесь, что путь ведёт именно туда, где лежат файлы. В файле конфигурации (например, от badlop) путь к смайликам указан такой: **/usr/share/tkabber/emoticons-tkabber** — в установочный директорий. При добавлении новых смайл-паков их обычно кладут в домашний каталог, в **~/.tkabber/emoticons-tkabber**, и если вы только дописали в конец строки название нового директория, эффекта не будет :-) + +Кстати, звуковые схемы как таковые в Ткаббере уже не подключаются. Начиная с версии 0.9.8 можно назначить любой звуковой файл (в формате wav) для каждого из событий отдельно. ## Можно ли смайлики **отключить**? -**Вопрос: Сабж. Не хочу никаких смайликов, даже дефолтных.** +**Вопрос: Сабж. Не хочу никаких смайликов, даже дефолтных.** -Ответ: это легко сделать. Рассказка — [**здесь**](../Смайлики_и_аватары.md#Полное_искоренение_смайликов) +Ответ: это легко сделать. Рассказка — [здесь](../Смайлики_и_аватары.md#Полное_искоренение_смайликов) ## Проблема со звуковой схемой -**Вопрос: Поменял стандартную звуковую схему на Psi, и теперь звуки не работают (или работают -не все). При этом xmms эти файлы проигрывает нормально.** - -Ответ: Судя по всему, вы работаете в Linux, а версия Ткаббера у вас — 0.9.7, потому -что в версии 0.9.8 уже можно выбрать для каждого события любой звук. Возможно, проблема -в том, что программа **esdplay**, которая установлена по умолчанию, не может проиграть -некоторые wav-файлы из схемы Psi, потому что у них частота дискретизации слишком -низка — 5000 Hz. Попробуйте прописать другую программу или в звуковом редакторе -вроде Audacity отредактируйте файлы, поменяв частоту дискретизации на 11000 Hz. Не -забудьте, что если вы указываете в настройках звука просто имя звуковой схемы, -то файлы, которые вам нужно редактировать, лежат в **/usr/share/tkabber/sounds/psi** +**Вопрос: Поменял стандартную звуковую схему на Psi, и теперь звуки не работают (или работают не все). При этом xmms эти файлы проигрывает нормально.** + +Ответ: Судя по всему, вы работаете в Linux, а версия Ткаббера у вас — 0.9.7, потому что в версии 0.9.8 уже можно выбрать для каждого события любой звук. Возможно, проблема в том, что программа esdplay, которая установлена по умолчанию, не может проиграть некоторые wav-файлы из схемы Psi, потому что у них частота дискретизации слишком низка — 5000 Hz. Попробуйте прописать другую программу или в звуковом редакторе вроде Audacity отредактируйте файлы, поменяв частоту дискретизации на 11000 Hz. Не забудьте, что если вы указываете в настройках звука просто имя звуковой схемы, то файлы, которые вам нужно редактировать, лежат в **/usr/share/tkabber/sounds/psi** ## Выделение текста жирным, курсивом и подчёркиванием -**Вопрос: Как выделить слово или фразу одним или несколькими из этих стилей?** - -Ответ: Перечитайте статью [**Быстрый старт**](../Начинающим.md#Некоторые_полезные_команды) — там всё подробно расписано, и даны примеры. - -В версиях до 0.10.0 выделять фразы, содержащие пробелы, лишь двумя форматирующими символами -по краям _невозможно._ То есть, выделять надо каждое слово. В будущем ситуация, возможно, -изменится. Если да — свистнем ;) А до тех пор \*фраза вот такого типа\* будет выводиться -в окне чата "as is". Кроме того, стартовый и стоповый символы выделения должны граничить с -пробельными символами (пробел, таб, перевод строки) слева и справа, соответственно. То есть, к примеру: - -watch \*this\*! → watch \*this\*! (ошибка: "!" сразу после "\*") -now \*watch\* this! → now **watch** this! - -(\*фиг\* вам!) → (\*фиг\* вам!) (ошибка: "(" перед "\*") -(а вот \*фиг\* вам!) → (а вот **фиг** вам!) +**Вопрос: Как выделить слово или фразу одним или несколькими из этих стилей?** + +Ответ: Перечитайте статью **[Быстрый старт](../Начинающим.md#Некоторые_полезные_команды)** — там всё подробно расписано, и даны примеры. + +В версиях до 0.10.0 выделять фразы, содержащие пробелы, лишь двумя форматирующими символами по краям _невозможно._ То есть, выделять надо каждое слово. В будущем ситуация, возможно, изменится. Если да — свистнем ;) А до тех пор \*фраза вот такого типа\* будет выводиться в окне чата "as is". Кроме того, стартовый и стоповый символы выделения должны граничить с пробельными символами (пробел, таб, перевод строки) слева и справа, соответственно. То есть, к примеру: + + watch *this*! → watch *this*! (ошибка: "!" сразу после "*") + now *watch* this! → now **watch** this! + + (*фиг* вам!) → (*фиг* вам!) (ошибка: "(" перед "*") + (а вот *фиг* вам!) → (а вот **фиг** вам!) ## Игнор — великая вещь! -**Вопрос: А доступен ли пользователям Jabber игнор, который так здорово помогал избегать конфликтов на IRC-каналах?** - -Ответ \#1: В Ткаббере 0.10.0 реализовано игнорирование сообщений от участников -конференций на стороне клиента (Ткаббера). - -Ответ \#2: В спецификациях MUC (Multi-User Chat) игнорирование не заложено, однако -кое-что можно сделать. Для начала немного теории. - -Сообщения из комнат приходят от джида комнаты. Сообщения от присутствующих там — в виде джида -комнаты с ресурсом, который является ником автора сообщения. То есть сообщение от пользователя -`pupkin` из комнаты `rotten-chatter@conference.jabber.ru` приходят от джида -`rotten-chatter@conference.jabber.ru/pupkin`. Это можно использовать для _эмуляции_ -игнор-листов: добавлять в список приватности "игнорируемый" вот такие полные джиды. - -В Ткаббере защита приватности обеспечивается двумя списками: "невидимый" и "игнорируемый" -(о грамматической корректности этих названий промолчим). Нас интересует второй. Вызываем -список на редактирование (**Tkabber → Обеспечение приватности → Изменить игнорируемый список**) -и добавляем в него JID ненавистного вам человека так, как было описано выше: -`room_name@conference.jabber-server.org/trolls_nick`. После нажатия на кнопку "Отправить" -неведомая сила вышибает вас из комнаты. Перезайдите, и voila! — теперь вы не увидите не -только фраз этого человека, но и его самого в комнате, равно как любые iq-запросы с его стороны. -Само собой, это верно только для одной комнаты и только для одного ника. Для других надо -сделать отдельные записи в списке. Игнор будет работать до тех пор, пока тролль не сменит -ник или пока вы не удалите эту запись из игнорируемого списка (потребуется перезайти в комнату). - -**Важное дополнение:** исследования практической стороны показали, что эффективность такого -способа игнорирования очень низка. Надоеда меняет ник и тут же появляется в списке участников -конференции. Вам же приходится заново вносить новый JID в список, при этом вас снова вышибет -из комнаты. Игра не стоит свеч. Впрочем, если надоеде никто не скажет, что его добавили в игнор, -то он может и не догадаться сменить ник. На крайний случай у комнаты есть владелец и администраторы. -Вряд ли им понравится, если кто-то будет издеваться над посетителями. - -**Внимание, баг!** Если включать игнор через контекстное меню привата (а тролли часто достают -именно в приватах), то в игнор-список заносится джид комнаты без ресурса, то есть после -вышибания вас из комнаты попасть туда снова вы не сможете. А поскольку править записи в -игнор-листе нельзя (можно только удалять), то вносить правильный полный джид в лист следует -через главное меню Ткаббера, как было описано выше. Баг этот, возможно, будет исправлен в -одной из грядущих svn-версий, но пока этого не случилось, а также для пользователей стабильных -релизов рекомендация будет такой: игнорить ручками, хоть это гораздо более неудобно... +**Вопрос: А доступен ли пользователям Jabber игнор, который так здорово помогал избегать конфликтов на IRC-каналах?** + +Ответ \#1: В Ткаббере 0.10.0 реализовано игнорирование сообщений от участников конференций на стороне клиента (Ткаббера). + +Ответ \#2: В спецификациях MUC (Multi-User Chat) игнорирование не заложено, однако кое-что можно сделать. Для начала немного теории. + +Сообщения из комнат приходят от джида комнаты. Сообщения от присутствующих там — в виде джида комнаты с ресурсом, который является ником автора сообщения. То есть сообщение от пользователя `pupkin` из комнаты `rotten-chatter@conference.jabber.ru` приходят от джида `rotten-chatter@conference.jabber.ru/pupkin`. Это можно использовать для _эмуляции_ игнор-листов: добавлять в список приватности "игнорируемый" вот такие полные джиды. + +В Ткаббере защита приватности обеспечивается двумя списками: "невидимый" и "игнорируемый" (о грамматической корректности этих названий промолчим). Нас интересует второй. Вызываем список на редактирование (**Tkabber → Обеспечение приватности → Изменить игнорируемый список**) и добавляем в него JID ненавистного вам человека так, как было описано выше: `room_name@conference.jabber-server.org/trolls_nick`. После нажатия на кнопку "Отправить" неведомая сила вышибает вас из комнаты. Перезайдите, и voila! — теперь вы не увидите не только фраз этого человека, но и его самого в комнате, равно как любые iq-запросы с его стороны. Само собой, это верно только для одной комнаты и только для одного ника. Для других надо сделать отдельные записи в списке. Игнор будет работать до тех пор, пока тролль не сменит ник или пока вы не удалите эту запись из игнорируемого списка (потребуется перезайти в комнату). + +**Важное дополнение:** исследования практической стороны показали, что эффективность такого способа игнорирования очень низка. Надоеда меняет ник и тут же появляется в списке участников конференции. Вам же приходится заново вносить новый JID в список, при этом вас снова вышибет из комнаты. Игра не стоит свеч. Впрочем, если надоеде никто не скажет, что его добавили в игнор, то он может и не догадаться сменить ник. На крайний случай у комнаты есть владелец и администраторы. Вряд ли им понравится, если кто-то будет издеваться над посетителями. + +**Внимание, баг!** Если включать игнор через контекстное меню привата (а тролли часто достают именно в приватах), то в игнор-список заносится джид комнаты без ресурса, то есть после вышибания вас из комнаты попасть туда снова вы не сможете. А поскольку править записи в игнор-листе нельзя (можно только удалять), то вносить правильный полный джид в лист следует через главное меню Ткаббера, как было описано выше. Баг этот, возможно, будет исправлен в одной из грядущих svn-версий, но пока этого не случилось, а также для пользователей стабильных релизов рекомендация будет такой: игнорить ручками, хоть это гораздо более неудобно... ## Как почитать протокол общения "в привате" с участником групчата, которого больше нет в комнате? -**Вопрос: Беседовал в привате с человеком из комнаты, потом закрыл окно чата, участник из комнаты ушёл, как посмотреть протокол общения с ним?** - -Ответ \#1: Начиная с версии 0.10.0 в Ткаббере реализован браузер истории разговоров. - -Ответ \#2: Открыть протокол общения в Ткаббере можно только из контекстного меню на -контакте в одном из ростеров — основном или группового чата. Соответственно, если нужного -вам контакта нет ни в одном из ростеров, а почитать протокол общения нужно, придётся -прибегнуть к обходному манёвру. - -Вам потребуется вручную вызвать процедуру Ткаббера, открывающую окно с протоколом чата -для выбранного JID. Для этого в консоли Ткаббера введите: +**Вопрос: Беседовал в привате с человеком из комнаты, потом закрыл окно чата, участник из комнаты ушёл, как посмотреть протокол общения с ним?** + +Ответ \#1: Начиная с версии 0.10.0 в Ткаббере реализован браузер истории разговоров. + +Ответ \#2: Открыть протокол общения в Ткаббере можно только из контекстного меню на контакте в одном из ростеров — основном или группового чата. Соответственно, если нужного вам контакта нет ни в одном из ростеров, а почитать протокол общения нужно, придётся прибегнуть к обходному манёвру. + +Вам потребуется вручную вызвать процедуру Ткаббера, открывающую окно с протоколом чата для выбранного JID. Для этого в консоли Ткаббера введите: logger::show_log room@service.host.dom/nick -где - -* `logger::show_log` — команда Ткаббера, открывающая окно с протоколом чата. Принимает - один аргумент — JID, протокол общения с которым мы хотим почитать; -* `room@service.host.dom/nick` — _полный_ JID комнаты. Он состоит из следующих частей - (слева направо): - 1. `room` — имя комнаты на соответствующем сервисе сервера; - 1. `service.host.dom` — имя сервиса, реализующего групповой чат; для `jabber.ru` это - `conference.jabber.ru`; - 1. `nick` — участник конференции `room`, протокол общения с которым вас интересует. - -Итого, для просмотра истории общения с пользователем "vasya" комнаты "linux-talks" -сервера "jabber.ru" вам нужно написать в комнате: +где + +* `logger::show_log` — команда Ткаббера, открывающая окно с протоколом чата. Принимает один аргумент — JID, протокол общения с которым мы хотим почитать; +* `room@service.host.dom/nick` — _полный_ JID комнаты. Он состоит из следующих частей (слева направо): + 1. `room` — имя комнаты на соответствующем сервисе сервера; + 1. `service.host.dom` — имя сервиса, реализующего групповой чат; для `jabber.ru` это `conference.jabber.ru`; + 1. `nick` — участник конференции `room`, протокол общения с которым вас интересует. + +Итого, для просмотра истории общения с пользователем "vasya" комнаты "linux-talks" сервера "jabber.ru" вам нужно написать в комнате: logger::show_log vasya@conference.jabber.ru/vasya -После появления диалога консоль можно закрыть. +После появления диалога консоль можно закрыть. -**Примечание:** естественно, что этот способ работает для любых контактов, то есть параметром для -`logger::show_log` может быть любой JID, с которым вы вели диалог. Это может пригодиться, к примеру, -для чтения протокола общения с контактом, которого вы удалили из своего ростера. +**Примечание:** естественно, что этот способ работает для любых контактов, то есть параметром для `logger::show_log` может быть любой JID, с которым вы вели диалог. Это может пригодиться, к примеру, для чтения протокола общения с контактом, которого вы удалили из своего ростера. ## Проверка орфографии -**Вопрос: Можно ли "прикрутить" к Ткабберу какую-нибудь программу, чтобы проверять орфографию на лету?** +**Вопрос: Можно ли "прикрутить" к Ткабберу какую-нибудь программу, чтобы проверять орфографию на лету?** -Ответ: Да, можно. Для начала надо установить пакет [ispell](http://www.gnu.org/software/ispell/ispell.html) -и настроить его, убедившись, что он работает сам по себе. Установите также необходимые словари. -Затем в конфиг вне всяких хуков надо вписать строчку +Ответ: Да, можно. Для начала надо установить пакет [ispell](http://www.gnu.org/software/ispell/ispell.html) и настроить его, убедившись, что он работает сам по себе. Установите также необходимые словари. Затем в конфиг вне всяких хуков надо вписать строчку set use_ispell 1 -Запустив Ткаббер (или перезапустив, если он был открыт), идите в **Настройки → Плагины → Ispell** -и там проверьте, соответствует ли действительности путь к исполняемому файлу ispell (для \*nix это -обычно **/usr/bin/ispell**). Ещё вам необходимо указать, какой словарь вы собираетесь использовать, -а также его кодировку. В поле настройки `::plugins::ispell::options(dictionary)` пишем russian, а в -следующем — скажем, koi8-r. Вторую опцию лучше не трогать, ибо она сильно загрузит ваш процессор -ненужными проверками недописанных слов на каждой новой букве. Не забудьте сохранить изменённые -настройки для будущих сессий и перезапустите Ткаббер снова. Теперь, когда вы будете писать сообщения, -все слова с орфоргафическими ошибками, а также слова, отсуствующие в словаре, будут выделяться красным -цветом прямо в поле ввода (не подумайте вдруг, что ispell станет проверять орфографию в приходящих -сообщениях). Учтите, что одновременно можно работать лишь с одним словарём. - -В Windows процесс настройки точно такой же. Вот вам в -помощь [небольшое руководство](http://ficus-www.cs.ucla.edu/geoff/ispell-winnt.html) по сборке и -настройке самого ispell в виндах (англ.) Не забудьте указать кодировку cp1251. ) - -К сожалению, с [aspell](http://www.gnu.org/software/aspell/) (бинарники для Win32 можете -найти [тут](http://aspell.net/win32/)) имеются проблемы, и это вполне понятно, потому что -синтаксис у этих программ немного разный. Ткаббер сразу же просекает, что работает не с той -программой, и выдаёт ошибку, предлагая указать правильный путь к ispell. Тем не менее, при -наличии прямых рук и некоторого количества мозгов наверняка можно решить и эту проблему. -Если вам известно, как это сделать, просим поделиться информацией. +Запустив Ткаббер (или перезапустив, если он был открыт), идите в **Настройки → Плагины → Ispell** и там проверьте, соответствует ли действительности путь к исполняемому файлу ispell (для \*nix это обычно **/usr/bin/ispell**). Ещё вам необходимо указать, какой словарь вы собираетесь использовать, а также его кодировку. В поле настройки `::plugins::ispell::options(dictionary)` пишем russian, а в следующем — скажем, koi8-r. Вторую опцию лучше не трогать, ибо она сильно загрузит ваш процессор ненужными проверками недописанных слов на каждой новой букве. Не забудьте сохранить изменённые настройки для будущих сессий и перезапустите Ткаббер снова. Теперь, когда вы будете писать сообщения, все слова с орфоргафическими ошибками, а также слова, отсуствующие в словаре, будут выделяться красным цветом прямо в поле ввода (не подумайте вдруг, что ispell станет проверять орфографию в приходящих сообщениях). Учтите, что одновременно можно работать лишь с одним словарём. + +В Windows процесс настройки точно такой же. Вот вам в помощь [небольшое руководство](http://ficus-www.cs.ucla.edu/geoff/ispell-winnt.html) по сборке и настройке самого ispell в виндах (англ.) Не забудьте указать кодировку cp1251. ) + +К сожалению, с [aspell](http://www.gnu.org/software/aspell/) (бинарники для Win32 можете найти [тут](http://aspell.net/win32/)) имеются проблемы, и это вполне понятно, потому что синтаксис у этих программ немного разный. Ткаббер сразу же просекает, что работает не с той программой, и выдаёт ошибку, предлагая указать правильный путь к ispell. Тем не менее, при наличии прямых рук и некоторого количества мозгов наверняка можно решить и эту проблему. Если вам известно, как это сделать, просим поделиться информацией. ## Стайлкоды -В принципе, общение в групповом чате или с глазу на глаз ничем не отличается от общения -в других программах - ICQ, IRC и так далее. Но свои тонкости есть, и лучше сразу с ними познакомиться. - -Пишем | Получаем ----|--- -/me хочет спать | \* testirovanie хочет спать -\_подчёркнутый\_ \_текст\_ | подчёркнутый текст -\*жирный\* \*текст\* | **жирный текст** -/наклонный/ /текст/ | _наклонный текст_ -/\*можно\*/ /\_смешивать\_/ | _**можно** смешивать_ -\_\*разные\*\_ \*/\_стили\_/\* | **разные _стили_** -\_/\*но-надо-быть-аккуратным\_/\* | \_\*/но-надо-быть-аккуратным\_/\* -\*и помнить о пробелах\* | \*и помнить о пробелах\* - -Как видите, текст можно делать жирным, подчёркнутым и курсивом, но выделять приходится -каждое слово, иначе всё напечатается как есть. Можно смешивать разные стили. Главное, -помнить про вложение символов выделения. Если эта возможность вам мешает, её можно -отключить в Настройках (группа Chat, Включить выделение). +В принципе, общение в групповом чате или с глазу на глаз ничем не отличается от общения в других программах - ICQ, IRC и так далее. Но свои тонкости есть, и лучше сразу с ними познакомиться. + + Пишем: Получаем: + + /me хочет спать \* testirovanie хочет спать + + \_подчёркнутый\_ \_текст\_ подчёркнутый текст + + \*жирный\* \*текст\* **жирный текст** + + /наклонный/ /текст/ _наклонный текст_ + + /\*можно\*/ /\_смешивать\_/ _**можно** смешивать_ + + \_\*разные\*\_ \*/\_стили\_/\* **разные _стили_** + + \_/\*но-надо-быть-аккуратным\_/\* \_\*/но-надо-быть-аккуратным\_/\* + + \*и помнить о пробелах\* \*и помнить о пробелах\* + +Как видите, текст можно делать жирным, подчёркнутым и курсивом, но выделять приходится каждое слово, иначе всё напечатается как есть. Можно смешивать разные стили. Главное, помнить про вложение символов выделения. Если эта возможность вам мешает, её можно отключить в Настройках (группа Chat, Включить выделение). ## Можно ли добавить в ростер самого себя? -**Вопрос: У меня запущено два Ткаббера: один дома, другой на работе. Оба запущены от одного -аккаунта, просто ресурсы разные (к примеру, login@jabber.ru/Home и login@jabber.ru/Work). -Безуспешно пытаюсь добавить их в ростер, чтобы, находясь дома, видеть и отправлять сообщения -самому себе на работу, и наоборот.** - -Ответ: С марта 2007 года в транке svn-версии (а стало быть, и в стабильной "десятке" — версии 0.10.0) -имеется пункт ростера "Мои ресурсы", где за небольшую плату можно обнаружить все соединения -вашего JID. Если по каким-либо причинам вы вынуждены сидеть на более древней версии, читайте дальше. - -Проблема решаема, правда, придётся пойти на небольшую хитрость. Впрочем, всё по порядку. - -1. Убедитесь, что открыт **только** "домашний" Ткаббер, то есть, вы работаете как **login@jabber.ru/Home**. - Если на работе запущен другой, надо бы его сначала прибить. -1. Добавьте в ростер (в версиях начиная с 0.9.8 он называется "Контакты") пользователя **login@jabber.ru/Work**. - Появится запрос для этого пользователя с просьбой авторизации. Отправьте его, и когда откроется окно - редактирования контакта, добавьте его в нужную группу, если надо, но самое главное, не забудьте отредактировать - его имя — напишите, к примеру, **login/Work**. -1. Разлогиньтесь и залогиньтесь снова как **login@jabber.ru**, указав теперь в качестве ресурса **Work**. - Это важно — "домашний" аккаунт должен быть закрыт! Заметьте, что, залогинившись, мы не получили запрос - на авторизацию. Так и должно быть. -1. Проделайте шаг 2), на этот раз отредактировав добавляемый контакт как **login/Home**. -1. Запустите ещё один Ткаббер и залогиньтесь как **login@jabber.ru**, указав в качестве ресурса **Home**. - Запрос на авторизацию не пришёл и сейчас. Это хорошо. -1. Посмотрите в ростеры обоих Ткабберов — теперь "домашний" клиент видит там болтающегося в онлайне **login/Work**, - а рабочий — **login/Home**. Можно также и слать друг другу сообщения. Если включить показ пользователей, - находящихся в оффлайне, вы увидите, что в "домашнем" и "рабочем" Ткабберах "свои" контакты показываются - именно находящимися в оффлайне, да ещё в ожидании авторизации. Ещё раз повторяю: так и должно быть. -1. В зависимости от того, где вы производили эти манипуляции — на работе или дома — закройте соответствующий - Ткаббер, с тем чтобы открыть его уже дома/на работе и продолжать пользоваться этим - дуэтом в соответствии с потребностями. -1. Если вы пытались авторизовать какой-либо из этих контактов, пока было запущено оба Ткаббера, - вы несомненно должны были получить запрос на авторизацию от другого клиента. Если так оно и случилось, - в ростере вы друг друга (сам себя) в онлайне уже не увидите. Придётся удалять их обоих из ростера и начинать сначала. - -Учтите, что для того, чтобы заходить обоими этими клиентами в одни и те же конференции, нужно, -чтобы ники для конференций были разные для каждого Ткаббера. Вам придётся либо отредактировать -конфиг на каждой из машин, либо проделывать это вручную. Но это уже отдельный вопрос ;) - -**На заметку:** Польский коллега [desnajpa](http://sourceforge.net/users/desnajpa/), в одиночку ковыряющий -бедную чернозёмом землю Ткаббера, добился некоторых результатов в плане развития шизофрении у пользователей -этого клиента. В его вариации программы — [Tkabber-SK](http://sourceforge.net/projects/tkabber-sk/) — уже -имеется self-contact, добавленный в ростер. Тестируйте. +**Вопрос: У меня запущено два Ткаббера: один дома, другой на работе. Оба запущены от одного аккаунта, просто ресурсы разные (к примеру, **login@jabber.ru/Home** и **login@jabber.ru/Work**). Безуспешно пытаюсь добавить их в ростер, чтобы, находясь дома, видеть и отправлять сообщения самому себе на работу, и наоборот.** + +Ответ: С марта 2007 года в транке svn-версии (а стало быть, и в стабильной "десятке" — версии 0.10.0) имеется пункт ростера "Мои ресурсы", где за небольшую плату можно обнаружить все соединения вашего JID. Если по каким-либо причинам вы вынуждены сидеть на более древней версии, читайте дальше. + +Проблема решаема, правда, придётся пойти на небольшую хитрость. Впрочем, всё по порядку. + +1. Убедитесь, что открыт **только** "домашний" Ткаббер, то есть, вы работаете как **login@jabber.ru/Home**. Если на работе запущен другой, надо бы его сначала прибить. +1. Добавьте в ростер (в версиях начиная с 0.9.8 он называется "Контакты") пользователя **login@jabber.ru/Work**. Появится запрос для этого пользователя с просьбой авторизации. Отправьте его, и когда откроется окно редактирования контакта, добавьте его в нужную группу, если надо, но самое главное, не забудьте отредактировать его имя — напишите, к примеру, **login/Work**. +1. Разлогиньтесь и залогиньтесь снова как **login@jabber.ru**, указав теперь в качестве ресурса **Work**. Это важно — "домашний" аккаунт должен быть закрыт! Заметьте, что, залогинившись, мы не получили запрос на авторизацию. Так и должно быть. +1. Проделайте шаг 2), на этот раз отредактировав добавляемый контакт как **login/Home**. +1. Запустите ещё один Ткаббер и залогиньтесь как **login@jabber.ru**, указав в качестве ресурса **Home**. Запрос на авторизацию не пришёл и сейчас. Это хорошо. +1. Посмотрите в ростеры обоих Ткабберов — теперь "домашний" клиент видит там болтающегося в онлайне **login/Work**, а рабочий — **login/Home**. Можно также и слать друг другу сообщения. Если включить показ пользователей, находящихся в оффлайне, вы увидите, что в "домашнем" и "рабочем" Ткабберах "свои" контакты показываются именно находящимися в оффлайне, да ещё в ожидании авторизации. Ещё раз повторяю: так и должно быть. +1. В зависимости от того, где вы производили эти манипуляции — на работе или дома — закройте соответствующий Ткаббер, с тем чтобы открыть его уже дома/на работе и продолжать пользоваться этим дуэтом в соответствии с потребностями. +1. Если вы пытались авторизовать какой-либо из этих контактов, пока было запущено оба Ткаббера, вы несомненно должны были получить запрос на авторизацию от другого клиента. Если так оно и случилось, в ростере вы друг друга (сам себя) в онлайне уже не увидите. Придётся удалять их обоих из ростера и начинать сначала. + +Учтите, что для того, чтобы заходить обоими этими клиентами в одни и те же конференции, нужно, чтобы ники для конференций были разные для каждого Ткаббера. Вам придётся либо отредактировать конфиг на каждой из машин, либо проделывать это вручную. Но это уже отдельный вопрос ;) + +**На заметку:** Польский коллега [desnajpa](http://sourceforge.net/users/desnajpa/), в одиночку ковыряющий бедную чернозёмом землю Ткаббера, добился некоторых результатов в плане развития шизофрении у пользователей этого клиента. В его вариации программы — [Tkabber-SK](http://sourceforge.net/projects/tkabber-sk/) — уже имеется self-contact, добавленный в ростер. Тестируйте. ## Ввод "хитрых" юникодных символов -**Вопрос: У меня стоит русская локаль, следовательно, я не могу вводить в Ткаббере спец-символы вроде -акцентов и прочих хитроумных западноевропейских букв. Как-то можно это наладить?** +**Вопрос: У меня стоит русская локаль, следовательно, я не могу вводить в Ткаббере спец-символы вроде акцентов и прочих хитроумных западноевропейских букв. Как-то можно это наладить?** -Ответ: Можно, и пока есть три способа сделать это, все довольно неудобные. +Ответ: Можно, и пока есть три способа сделать это, все довольно неудобные. ### Очень неудобный способ -При помощи встроенного плагина **unisymbols** единичные юникодные символы вводятся в поле -редактирования сообщений в следующем формате: - - &шестнадцатиричный_код_символаCtrl+; - -Это напоминает ввод подобных символов в HTML-коде: `&#код_символа;` (обратите внимание, -что в Ткаббере вводить "решётку" **\#** не нужно). Поясним: - -* Сначала идёт значок амперсанда — **&**, -* затем _шестнадцатеричный_ код нужного вам символа (без \# впереди), -* и в конце надо нажать одновременно клавишу **Control** и клавишу точки с запятой (не в русской раскладке). - -При этом ткаббер заменит вашу конструкцию (включительно, от **&** до последнего введённого -перед нажатием **Ctrl-;** символа) на соответствующий символ юникода. - -Например, **&c2;** → **Â**. - -**На заметку:** символ ";" находится в основном регистре английской раскладки (то есть -вводится простым нажатием на соответствующую клавишу), но в других раскладках её расположение -может отличаться. Например, в испанской точка с запятой вызывается нажатием **Shift** и -клавиши запятой. То есть, после набора амперсанда и кода символа надо нажать **Ctrl-Shift-,**. +При помощи встроенного плагина **unisymbols** единичные юникодные символы вводятся в поле редактирования сообщений в следующем формате: + + &шестнадцатиричный_код_символаCtrl + ; + +Это напоминает ввод подобных символов в HTML-коде: `&#код_символа;` (обратите внимание, что в Ткаббере вводить "решётку" **\#** не нужно). Поясним: + +* Сначала идёт значок амперсанда — **&**, +* затем _шестнадцатеричный_ код нужного вам символа (без \# впереди), +* и в конце надо нажать одновременно клавишу **Control** и клавишу точки с запятой (не в русской раскладке). + +При этом ткаббер заменит вашу конструкцию (включительно, от **&** до последнего введённого перед нажатием **Ctrl-;** символа) на соответствующий символ юникода. + +Например, **&c2;** → **Â**. + +**На заметку:** символ ";" находится в основном регистре английской раскладки (то есть вводится простым нажатием на соответствующую клавишу), но в других раскладках её расположение может отличаться. Например, в испанской точка с запятой вызывается нажатием **Shift** и клавиши запятой. То есть, после набора амперсанда и кода символа надо нажать **Ctrl-Shift-,**. ### Умеренно неудобный способ -Вот ещё один способ попроще. Можно открыть рядом текстовый редактор, поддерживающий юникодные -символы (например, **Vim, gedit** или тот же **Word**), вбить туда все нужные вам символы и -копировать их в поле ввода Ткаббера, когда требуется. Тоже не очень красивое решение, но -тем не менее, может пригодиться. +Вот ещё один способ попроще. Можно открыть рядом текстовый редактор, поддерживающий юникодные символы (например, **Vim, gedit** или тот же **Word**), вбить туда все нужные вам символы и копировать их в поле ввода Ткаббера, когда требуется. Тоже не очень красивое решение, но тем не менее, может пригодиться. ### Наименее неудобный способ -Прямиком отправляем вас к [**статье о плагине Tkabber-KHIM**](../Плагины.md#Tkabber-KHIM), -позволяющем вводить любые юникодные символы буквально в три нажатия клавиш. Самые главные -его достоинства — возможность определения произвольных символов и их ввод с помощью -"клавиши композиции" и заданного сочетания двух "обычных" символов. +Прямиком отправляем вас к [статье о плагине Tkabber-KHIM](../Плагины.md#Tkabber-KHIM), позволяющем вводить любые юникодные символы буквально в три нажатия клавиш. Самые главные его достоинства — возможность определения произвольных символов и их ввод с помощью "клавиши композиции" и заданного сочетания двух "обычных" символов. + +Ткаббер версии 0.10.0 содержит этот плагин в качестве встроенного средства. -Ткаббер версии 0.10.0 содержит этот плагин в качестве встроенного средства. + Index: wiki/ru/0.9.x/Эмоциконки.md ================================================================== --- wiki/ru/0.9.x/Эмоциконки.md +++ wiki/ru/0.9.x/Эмоциконки.md @@ -1,194 +1,170 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/0.9.x/Эмоциконки/index.html) + # 0.9.x/Эмоциконки -Материал из Tkabber Wiki +Материал из Tkabber Wiki. ## Содержание * [1 Добавление новых (внешних) комплектов](#Добавление_новых_внешних_комплектов) * [2 Улучшение поддержки анимированных GIF](#Улучшение_поддержки_анимированных_GIF) * [3 Настройка высоты окна смайликов](#Настройка_высоты_окна_смайликов) * [4 Полное искоренение смайликов](#Полное_искоренение_смайликов) - * [4.1 Массовое клонирование эмоциконок](#Массовое_клонирование_эмоциконок) + * [4.1 Массовое клонирование эмоциконок](#Массовое_клонирование_эмоциконок) ## Добавление новых (внешних) комплектов -В двух словах расскажем здесь, как добавлять смайл-паки. Скачайте нужный вам архив и распакуйте -его куда-нибудь. Лучше всего — в домашний директорий, где уже лежит файл конфигурации и -должен находиться каталог emoticons-tkabber. Можете распаковать архив прямо в этот каталог, -но лучше создать для него свой собственный, чтобы при желании можно было включать разные наборы смайликов. +В двух словах расскажем здесь, как добавлять смайл-паки. Скачайте нужный вам архив и распакуйте его куда-нибудь. Лучше всего — в домашний директорий, где уже лежит файл конфигурации и должен находиться каталог emoticons-tkabber. Можете распаковать архив прямо в этот каталог, но лучше создать для него свой собственный, чтобы при желании можно было включать разные наборы смайликов. -Затем отредактируйте файл **~/.tkabber/config.tcl**, подправив следующую строчку: +Затем отредактируйте файл **~/.tkabber/config.tcl**, подправив следующую строчку: emoteicons::load_dir ~/.tkabber/emoticons-tkabber/new_emoticon_set -где new\_emoticon\_set — название каталога нового смайл-пака. Если такой строки в конфиге нет, -то допишите её, причём она должна быть "обрамлена" таким вот хуком (естественно, если этот хук -прописан, надо просто добавить эту строку куда-нибудь между фигурными скобками): +где new\_emoticon\_set — название каталога нового смайл-пака. Если такой строки в конфиге нет, то допишите её, причём она должна быть "обрамлена" таким вот хуком (естественно, если этот хук прописан, надо просто добавить эту строку куда-нибудь между фигурными скобками): hook::add finload_hook { - emoteicons::load_dir ~/.tkabber/emoticons-tkabber/new_emoticon_set - } + emoteicons::load_dir ~/.tkabber/emoticons-tkabber/new_emoticon_set + } -При новом запуске Ткаббер "подцепит" этот набор, и вы сможете им пользоваться. +При новом запуске Ткаббер "подцепит" этот набор, и вы сможете им пользоваться. -Ознакомьтесь также с этой [статьёй](http://tkabber.jabber.ru/node/12). Там описано почти -то же самое (правда, по-английски), а также даны ссылки на некоторые смайл-паки. +Ознакомьтесь также с этой [статьёй](http://tkabber.jabber.ru/node/12). Там описано почти то же самое (правда, по-английски), а также даны ссылки на некоторые смайл-паки. ## Улучшение поддержки анимированных GIF -За отображение анимированных gif в Tkabber отвечает файл **tkabber\\aniemoteicons\\anigif.tcl**. -Если сравнивать реализацию со [спецификацией формата GIF89a](http://www.r-t-f-m.info/_books/15001/index.php) -(это как раз и есть нужные нам анимированные gif-картинки), то обнаруживаем отсутствие поддержки -вывода с возвратом к предыдущему изображению. Чтобы было понятно, чем это грозит, можно провести эксперимент. - -В пустой каталог помещаем три файла: - -* файл **tkabber\\aniemoteicons\\anigif.tcl** из состава дистрибутива Ткаббера, -* вот этот анимированный gif: - -![Изображение:36_10_20.gif](../../images/36_10_20.gif) - -* и скрипт **showgif.tcl** следующего содержания: - - source anigif.tcl - foreach f [glob -nocomplain *.gif] { - label .[file rootname $f] -image [::anigif::anigif $f] - pack .[file rootname $f] - } - -При запуске этого скрипта мы увидим вот такую исчезающую улыбку Чеширского кота © Льюис Кэррол. -Кстати, закиньте в эту папку штуки 4 экземпляра приведённой картинки и посмотрите на загрузку -процессора при воспроизведении. - -![Изображение:36_10_20_1.gif](../../images/36_10_20_1.gif) - -Как оказалось, это лечится лёгким движением руки. В файле **anigif.tcl** ищем строчки: +За отображение анимированных gif в Tkabber отвечает файл **tkabber\\aniemoteicons\\anigif.tcl**. Если сравнивать реализацию со [спецификацией формата GIF89a](http://www.r-t-f-m.info/_books/15001/index.php) (это как раз и есть нужные нам анимированные gif-картинки), то обнаруживаем отсутствие поддержки вывода с возвратом к предыдущему изображению. Чтобы было понятно, чем это грозит, можно провести эксперимент. + +В пустой каталог помещаем три файла: + +* файл **tkabber\\aniemoteicons\\anigif.tcl** из состава дистрибутива Ткаббера, +* вот этот анимированный gif: + +![Изображение:36_10_20.gif](../../images/36_10_20.gif) + +* и скрипт **showgif.tcl** следующего содержания: + + source anigif.tcl + foreach f [glob -nocomplain *.gif] { + label .[file rootname $f] -image [::anigif::anigif $f] + pack .[file rootname $f] + } + +При запуске этого скрипта мы увидим вот такую исчезающую улыбку Чеширского кота © Льюис Кэррол. Кстати, закиньте в эту папку штуки 4 экземпляра приведённой картинки и посмотрите на загрузку процессора при воспроизведении. + +![Изображение:36_10_20_1.gif](../../images/36_10_20_1.gif) + +Как оказалось, это лечится лёгким движением руки. В файле **anigif.tcl** ищем строчки: # Restore to previous - not supported # As recommended, since this is not supported, it is set to blank [set ::anigif::${img}(curimage)] blank -и смело комментируем команду +и смело комментируем команду # Restore to previous - not supported # As recommended, since this is not supported, it is set to blank # [set ::anigif::${img}(curimage)] blank -Люди, знающие английский язык, сильно нервничают, ломают руки, кусают ногти, но тоже -комментируют эту команду, хоть и не так смело. - -Снова запускаем скрипт **showgif.tcl** и наслаждаемся нормальной анимацией. - -P.S. В заголовке файла **anigif.tcl** написано, что при формировании изображений используются -опции **-zoom** и **-subsample** для сохранения прозрачности изображений. Практика показала, -что прозрачность сохраняется и без этого трюка. Вероятно, с тех пор, когда писался -код **anigif.tcl**, поддержка прозрачности в Tk была доработана. Поэтому меняем строки в **anigif.tcl** +Люди, знающие английский язык, сильно нервничают, ломают руки, кусают ногти, но тоже комментируют эту команду, хоть и не так смело. + +Снова запускаем скрипт **showgif.tcl** и наслаждаемся нормальной анимацией. + +P.S. В заголовке файла **anigif.tcl** написано, что при формировании изображений используются опции **-zoom** и **-subsample** для сохранения прозрачности изображений. Практика показала, что прозрачность сохраняется и без этого трюка. Вероятно, с тех пор, когда писался код **anigif.tcl**, поддержка прозрачности в Tk была доработана. Поэтому меняем строки в **anigif.tcl** [set ::anigif::${img}(curimage)] copy [lindex $list $idx] -subsample 2 2 - + · · · - + pic$n$img copy xpic$n$img -zoom 2 2 - + · · · - + [set ::anigif::${img}(curimage)] copy pic0${img} -subsample 2 2 -на +на [set ::anigif::${img}(curimage)] copy [lindex $list $idx] ;#-subsample 2 2 - + · · · - + pic$n$img copy xpic$n$img ;#-zoom 2 2 - + · · · - + [set ::anigif::${img}(curimage)] copy pic0${img} ;#-subsample 2 2 -Такие изменения должны положительно сказаться на производительности. Запустите снова -скрипт **showgif.tcl** и проверьте загрузку процессора. + Такие изменения должны положительно сказаться на производительности. Запустите снова скрипт **showgif.tcl** и проверьте загрузку процессора. + +Пожелания и замечания направляйте по адресу `[xmpp:archimed@jabber.ru](xmpp:archimed@jabber.ru)` -Пожелания и замечания направляйте по адресу [xmpp:archimed@jabber.ru](xmpp:archimed@jabber.ru). - -[**Archimed**](../Участник_Archimed.md) +[Archimed](../Участник_Archimed.md) ## Настройка высоты окна смайликов -Для начала отредактируем файл **/usr/lib/tkabber/emoticons.tcl** — вам потребуется -войти рутом по команде **su**. - -**Примечание:** _в svn-версии Ткаббера файл этот поменял своё местоположение, теперь он -находится тут:_ **/path/to/your/svn\_tkabber/plugins/richtext/emoticons.tcl** _и вообще весьма -поменялся внутренне, так что предлагаемый патч работает лишь для стабильной версии 0.9.9 и младше._ - -В самом начале его идёт процедура `namespace eval emoteicons`: - - namespace eval emoteicons { - array set emoteicons {} - - variable lasttext "" - variable lastX - variable lastY - } - -Добавляем в неё две строчки (до закрывающей фигурной скобки!): +Для начала отредактируем файл **/usr/lib/tkabber/emoticons.tcl** — вам потребуется войти рутом по команде **su**. + +_Примечание: в svn-версии Ткаббера файл этот поменял своё местоположение, теперь он находится тут: **/path/to/your/svn\_tkabber/plugins/richtext/emoticons.tcl** и вообще весьма поменялся внутренне, так что предлагаемый патч работает лишь для стабильной версии 0.9.9 и младше._ + +В самом начале его идёт процедура _namespace eval emoteicons_: + + namespace eval emoteicons { + array set emoteicons {} + + variable lasttext "" + variable lastX + variable lastY + } + +Добавляем в неё две строчки (до закрывающей фигурной скобки!): variable lk_iconsrows set emoteicons::lk_iconsrows 0 -Затем в том же файле ищем процедуру `proc emoteicons::show_menu {iw}` и после строчки +Затем в том же файле ищем процедуру _proc emoteicons::show\_menu {iw}_ и после строчки set rows [expr {floor(sqrt([llength $imgs]))}] -вставляем следующий текст: +вставляем следующий текст: - #if user sets up the variable - use it! + #if user sets up the variable - use it! if {$emoteicons::lk_iconsrows > 0} { set rows [expr {$emoteicons::lk_iconsrows}] } -Правка файла закончена, сохраняем его. Теперь, выйдя из аккаунта суперпользователя, -отредактируйте файл **~/.tkabber/config.tcl**: +Правка файла закончена, сохраняем его. Теперь, выйдя из аккаунта суперпользователя, отредактируйте файл **~/.tkabber/config.tcl**: -Если у вас где-то уже прописан путь к новому смайл-паку, добавьте рядом такую строчку: +Если у вас где-то уже прописан путь к новому смайл-паку, добавьте рядом такую строчку: set emoteicons::lk_iconsrows 8 -При следующей загрузке Ткаббера удостоверьтесь, что всё правильно: при нажатии Alt-E -должно вывестись окно со смайликами высотой в 8 строчек. Если оно вас не устраивает, -попробуйте увеличить или уменьшить число в конфиге. Зная количество смайликов в наборе, -можно легко подобрать нужную высоту окна, чтобы оно целиком помещалось на экране. +При следующей загрузке Ткаббера удостоверьтесь, что всё правильно: при нажатии Alt-E должно вывестись окно со смайликами высотой в 8 строчек. Если оно вас не устраивает, попробуйте увеличить или уменьшить число в конфиге. Зная количество смайликов в наборе, можно легко подобрать нужную высоту окна, чтобы оно целиком помещалось на экране. -Автор патча — [**LKnight**](../Участник_Lknight.md) +Автор патча — [Участник:lknight](../Участник_Lknight.md) ## Полное искоренение смайликов -Это не проблема — добавьте в **config.tcl** следующее: +Это не проблема — добавьте в **config.tcl** следующее: - hook::add finload_hook { - array unset emoteicons::emoteicons + hook::add finload_hook { + array unset emoteicons::emoteicons } -Если в вашем конфиге уже есть установка этого хука, то можете прописать +Если в вашем конфиге уже есть установка этого хука, то можете прописать array unset emoteicons::emoteicons -прямо туда. +прямо туда. -Убивец смайликов — [**Kostix**](../Участник_Kostix.md) +Убивец смайликов — [Участник:kostix](../Участник_Kostix.md) ### Массовое клонирование эмоциконок -В конце-концов, **config.tcl** представляет собой полноценную программу на Tcl, -и ничто серьёзное ему, следовательно, не чуждо. +В конце-концов, **config.tcl** представляет собой полноценную программу на Tcl, и ничто серьёзное ему, следовательно, не чуждо. -Для примера реализуем поддержку ROTFL/LOL-смайлов — таких, которые собеседник использует, -когда ему _ну очень_ смешно: +Для примера реализуем поддержку ROTFL/LOL-смайлов — таких, которые собеседник использует, когда ему _ну очень_ смешно: hook::add finload_hook { namespace eval ::emoteicons { variable emoteicons set orig :-) @@ -199,13 +175,12 @@ set emoteicons([string range $dest 0 $i]) $emoteicons($orig) } } } -Данное заклинание связывает картинку от `:-)` с со смайликами: `:-)), :-))), :-)))` и так -далее, включая тот, который помещён в переменную `dest`. - -Тикль очень "прозрачен" — постарайтесь разобраться в том, как работает это заклинание -самостоятельно. Если после достижения успеха на этом поприще вы всё ещё будете думать, -что Ткаббер это не ваш выбор, — смело стреляйтесь. (Если вы не достигли успеха, — смело учитесь.) - -Смайлики клонировал [**Kostix**](../Участник_Kostix.md). +Данное заклинание связывает картинку от `:-)` с со смайликами: `:-)), :-))), :-)))` и так далее, включая тот, который помещён в переменную `dest`. + +Тикль очень "прозрачен" — постарайтесь разобраться в том, как работает это заклинание самостоятельно. Если после достижения успеха на этом поприще вы всё ещё будете думать, что Ткаббер это не ваш выбор, — смело стреляйтесь. (Если вы не достигли успеха, — смело учитесь.) + +Смайлики клонировал [Kostix](../Участник_Kostix.md). + + Index: wiki/ru/Config.tcl.md ================================================================== --- wiki/ru/Config.tcl.md +++ wiki/ru/Config.tcl.md @@ -1,6 +1,7 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Config.tcl) + # Config.tcl Материал из Tkabber Wiki @@ -9,388 +10,319 @@ * [1 Общие сведения](#Общие_сведения) * [2 Немного о синтаксисе тикля](#Немного_о_синтаксисе_тикля) * [3 Временное исключение кусков кода конфигурации](#Временное_исключение_кусков_кода_конфигурации) * [4 Хуки](#Хуки) * [5 Тестирование конфигурации](#Тестирование_конфигурации) - * [5.1 Как запустить второй Ткаббер, не помешав первому](#Как_запустить_второй_Ткаббер_не_помешав_первому) - * [5.1.1 Подключение с тем же логином](#Подключение_с_тем_же_логином) - * [5.1.2 Подключение с другим логином (или к другому серверу)](#Подключение_с_другим_логином_или_к_другому_серверу) - * [5.2 Тестирование конфигурации "вживую"](#Тестирование_конфигурации_вживую) - -## Общие сведения -Прежде чем читать эту статью, подумайте, достаточно ли вы хорошо представляете себе, что такое -файл **config.tcl** (в частности, где Ткаббер ищет его при старте); если нет, начните с -чтения [**этой статьи**](Config.tcl_для_начинающих.md). - -Чтобы понять место и роль файла **config.tcl** в процедуре загрузки Ткаббера, -прочитайте [**ещё одну статью**](Загрузка_настроек.md). - -А после прочтения данного опуса можно со знанием дела переходить к [**"книге рецептов"**](Нетривиальные_настройки.md). - -Файл конфигурации — **config.tcl** — читается на ранней стадии запуска Ткаббера и поэтому -позволяет влиять на большинство аспектов работы этой программы. - -Файл конфигурации _выполняется_ интерпретатором тикля, который исполняет код Ткаббера. То есть этот -файл является полноценной программой на тикле. Этот аспект следует хорошо прочувствовать, имея в виду -беспрецедентный динамизм языка Tcl, позволяющий, среди прочего, переопределять процедуры Ткаббера -и "перепаковывать" его окна. - -Наиболее важные способы влияния на Ткаббер из его конфига можно условно разделить на три группы: - -* Установка предопределённых (документированных) переменных Ткаббера. Например, переменная `debug_lvls` - управляет "темами" отладочных сообщений Ткаббера, а `ifacetk::options(use_tabbar)` — стилем интерфейса - (0 — многооконный, 1 — "с табами"). Эти переменные описаны в официальной документации к Ткабберу. -* Переопределение процедур Ткаббера. Например, таким образом - можно [**"деактивировать" IRC-команду чата** `/exec`](Нетривиальные_настройки.md#Запрет_IRC-команды__exec_в_окнах_чата), - которую некоторые считают опасной, или переделать реакцию Ткаббера на запрос `jabber:iq:last` - (см. код [**плагина "Last Activity"**](Плагины.md#Last_Activity)). -* Изменение привязок событий Tk (нажатий комбинаций клавиш, к примеру) к определённым действиям. -* Просто выполнение некоторого кода, который может, к примеру, менять изначальный "лук и фил" Ткаббера. -* Установка обработчиков определённых _хуков_ (см. ниже). Внутри этих обработчиков можно делать - интересные вещи, описанные в предыдущих пунктах. - -Вообще же, вещи, которые можно сделать с Ткаббером при помощи файла его конфигурации, -ограничены, в основном, лишь фантазией и знаниями ковыряющегося. - -Важно осмыслить и запомнить следующее правило: - -Ткаббер читает свой файл конфигурации ровно _один раз за сеанс_ своей работы. Механизма "перечитывания" -файла конфигурации _нет_ (и не будет). Это означает, что после внесения изменений в файл -конфигурации Ткаббер нужно перезапустить (а лучше для начала запустить его вторую копию -"рядом" — см. ниже обсуждение тестирования конфигурации). - -Ткаббер прекрасно обходится без **config.tcl** — как он, так и "парный" файл **custom.tcl** не -нужны Ткабберу для запуска и работы. Поэтому, если у Вас нет файла **config.tcl** в условленном -месте, просто создайте его сами. - -## Немного о синтаксисе тикля -Вообще, если вы собираетесь заняться "продвинутым" конфигурированием Ткаббера всерьёз -(а не просто применять [**готовые рецепты**](Нетривиальные_настройки.md) не задумываясь), -подумайте о самообразовании. Для начала можно порекомендовать такую последовательность действий: - -1. Изучить [туториал](http://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html); -1. Изучить ["додекалогию"](http://wiki.tcl.tk/10259); -1. Почитать [классику](http://www.beedub.com/book) (переведённую и - на [язык родных осин](http://www.ozon.ru/context/detail/id/1820838/)). - -В качестве "быстрого погружения" для нетерпеливых предложим самые главные правила, про которые -нужно помнить, занимаясь правкой конфига на тикле: - -##### Любые пробельные символы являются разделителем слов  - -Это означает, что символы логически цельных строк (они именуются в тикле "словами"), содержащих пробелы, нужно _группировать_. - -##### Для группировки используются ограничители {} и ""  - -Внутри {} не выполняется никакая интерпретация содержимого, внутри "" тикль выполняет подстановку переменных (нотация `$имя_переменной`), выполняет команды (нотация `[команда аргументы...]`) и раскрывает "escape-последовательности" (нотация `\X`, где "X" — спецсимвол). - -##### Путевые имена файлов в Windows могут содержать прямые слэши  - -То есть имя "C:/Program files/FrobozzMagic 2000" является вполне допустимым. - -##### Строка без пробелов и группирующих символов также интерполируется  - -То есть используйте прямые слэши под Windows, если данная строка — путевое имя файла. - -Следствия этих правил: - -* Всегда заключайте имена файлов в "" или {}, если эти имена содержат пробелы. -* Предпочтительно заключайте такие имена в {} чтобы подавить интерпретацию содержимого строки. -* Если вы всё-таки хотите использовать "", указывайте прямые слэши в путевых именах - файлов Windows — это убережёт имена от раскрытия "escape-последовательностей", вводимых - обратными слэшами. -* Также можно обойтись вообще без группирующих символов, но тогда нужно удваивать все обратные - слэши и "искейпить" пробелы обратными слэшами. - -Примеры: + * [5.1 Как запустить второй Ткаббер, не помешав первому](#Как_запустить_второй_Ткаббер_не_помешав_первому) + * [5.1.1 Подключение с тем же логином](#Подключение_с_тем_же_логином) + * [5.1.2 Подключение с другим логином (или к другому серверу)](#Подключение_с_другим_логином_или_к_другому_серверу) + * [5.2 Тестирование конфигурации "вживую"](#Тестирование_конфигурации_вживую) + +# Общие сведения +Прежде чем читать эту статью, подумайте, достаточно ли вы хорошо представляете себе, что такое файл **config.tcl** (в частности, где Ткаббер ищет его при старте); если нет, начните с чтения [этой статьи](Config.tcl_для_начинающих.md). + +Чтобы понять место и роль файла **config.tcl** в процедуре загрузки Ткаббера, прочитайте [ещё одну статью](Загрузка_настроек.md). + +А после прочтения данного опуса можно со знанием дела переходить к ["книге рецептов"](Нетривиальные_настройки.md). + +Файл конфигурации — **config.tcl** — читается на ранней стадии запуска Ткаббера и поэтому позволяет влиять на большинство аспектов работы этой программы. + + Файл конфигурации _выполняется_ интерпретатором тикля, который исполняет код Ткаббера. То есть этот файл является полноценной программой на тикле. Этот аспект следует хорошо прочувствовать, имея в виду беспрецедентный динамизм языка Tcl, позволяющий, среди прочего, переопределять процедуры Ткаббера и "перепаковывать" его окна. + +Наиболее важные способы влияния на Ткаббер из его конфига можно условно разделить на три группы: + +* Установка предопределённых (документированных) переменных Ткаббера. Например, переменная `debug_lvls` управляет "темами" отладочных сообщений Ткаббера, а `ifacetk::options(use_tabbar)` — стилем интерфейса (0 — многооконный, 1 — "с табами"). Эти переменные описаны в официальной документации к Ткабберу. +* Переопределение процедур Ткаббера. Например, таким образом можно ["деактивировать" IRC-команду чата `/exec`](Нетривиальные_настройки.md#Запрет_IRC-команды__exec_в_окнах_чата), которую некоторые считают опасной, или переделать реакцию Ткаббера на запрос `jabber:iq:last` (см. код [плагина "Last Activity"](Плагины.md#Last_Activity)). +* Изменение привязок событий Tk (нажатий комбинаций клавиш, к примеру) к определённым действиям. +* Просто выполнение некоторого кода, который может, к примеру, менять изначальный "лук и фил" Ткаббера. +* Установка обработчиков определённых _хуков_ (см. ниже). Внутри этих обработчиков можно делать интересные вещи, описанные в предыдущих пунктах. + +Вообще же, вещи, которые можно сделать с Ткаббером при помощи файла его конфигурации, ограничены, в основном, лишь фантазией и знаниями ковыряющегося. + +Важно осмыслить и запомнить следующее правило: + + Ткаббер читает свой файл конфигурации ровно _один раз за сеанс_ своей работы. Механизма "перечитывания" файла конфигурации _нет_ (и не будет). Это означает, что после внесения изменений в файл конфигурации Ткаббер нужно перезапустить (а лучше для начала запустить его вторую копию "рядом" — см. ниже обсуждение тестирования конфигурации). + +Ткаббер прекрасно обходится без **config.tcl** — как он, так и "парный" файл **custom.tcl** не нужны Ткабберу для запуска и работы. Поэтому, если у Вас нет файла **config.tcl** в условленном месте, просто создайте его сами. + +# Немного о синтаксисе тикля +Вообще, если вы собираетесь заняться "продвинутым" конфигурированием Ткаббера всерьёз (а не просто применять [готовые рецепты](Нетривиальные_настройки.md) не задумываясь), подумайте о самообразовании. Для начала можно порекомендовать такую последовательность действий: + +1. Изучить [туториал](http://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html); +1. Изучить ["эндекалогию"](http://wiki.tcl.tk/14940); +1. Почитать [классику](http://www.beedub.com/book) (переведённую и на [язык родных осин](http://www.ozon.ru/context/detail/id/1820838/)). + +В качестве "быстрого погружения" для нетерпеливых предложим самые главные правила, про которые нужно помнить, занимаясь правкой конфига на тикле: + + Любые пробельные символы являются разделителем слов  + + Это означает, что символы логически цельных строк (они именуются в тикле "словами"), содержащих пробелы, нужно _группировать_. + + Для группировки используются ограничители {} и ""  + + Внутри {} не выполняется никакая интерпретация содержимого, внутри "" тикль выполняет подстановку переменных (нотация `$имя_переменной`), выполняет команды (нотация `[команда аргументы...]`) и раскрывает "escape-последовательности" (нотация `\X`, где "X" — спецсимвол). + + Путевые имена файлов в Windows могут содержать прямые слэши  + + То есть имя "C:/Program files/FrobozzMagic 2000" является вполне допустимым. + + Строка без пробелов и группирующих символов также интерполируется  + + То есть используйте прямые слэши под Windows, если данная строка — путевое имя файла. + +Следствия этих правил: + +* Всегда заключайте имена файлов в "" или {}, если эти имена содержат пробелы. +* Предпочтительно заключайте такие имена в {} чтобы подавить интерпретацию содержимого строки. +* Если вы всё-таки хотите использовать "", указывайте прямые слэши в путевых именах файлов Windows — это убережёт имена от раскрытия "escape-последовательностей", вводимых обратными слэшами. +* Также можно обойтись вообще без группирующих символов, но тогда нужно удваивать все обратные слэши и "искейпить" пробелы обратными слэшами. + +Примеры: # Путь в {} — подавляется любая интерпретация содержимого: set somepath {C:\Documents and Settings\Vassily Petrovich} - + # Путь в "" + прямые слэши = тот же эффект: set someotherpath "C:/Program files/Новая папка" - + # Группирующие символы не нужны — имя не содержит пробелов; # Однако слэши — прямые, ибо такие строки интерполируются: set thethirdpath C:/TMP - + # Нет группирующих символов ⇒ танцы с "искейпингом": set falsepath C:\\Program\ Files\\Common\ Files\\Woohoo -**Обратный слэш, за которым сразу следует перевод строки, обозначает "продлённую" строку** +**Обратный слэш, за которым сразу следует перевод строки, обозначает "продлённую" строку** -То есть запись +То есть запись command arg1 \ - arg2 arg3 + arg2 arg3 -полностью эквивалентна записи +полностью эквивалентна записи command arg1 arg2 arg3 -Продление строк используется для улучшения читабельности. +Продление строк используется для улучшения читабельности. -**Ссылки на элементы массивов не должны содержать пробелов** +**Ссылки на элементы массивов не должны содержать пробелов** -Имя переменной в такой, к примеру, команде присваивания +Имя переменной в такой, к примеру, команде присваивания set ifacetk::options(use_tabbar) false # ifacetk::options(use_tabbar) — имя переменной -вовсе не означает, что скобки являются какой-то _операцией_, как могли бы предположить программисты на ALGOL-подобных языках. Скобки являются частью имени переменной, хоть и обрабатываются особым образом (запись `foo(bar)` означает переменную с именем "bar" в массиве с именем "foo"), поэтому нельзя писать так: +вовсе не означает, что скобки являются какой-то _операцией_, как могли бы предположить программисты на ALGOL-подобных языках. Скобки являются частью имени переменной, хоть и обрабатываются особым образом (запись `foo(bar)` означает переменную с именем "bar" в массиве с именем "foo"), поэтому нельзя писать так: set ifacetk::options (use_tabbar) false -или так: +или так: ifacetk::options( use_tabbar ) false -## Временное исключение кусков кода конфигурации -Для временного исключения некоторого куска кода длиннее одной строчки удобно использовать стандартную -идиому Tcl — условный оператор **if** с ложным условием, который компенсирует отсутствие в тикле -"блочных" комментариев (в стиле "сишного" /\* ... \*/), например: +# Временное исключение кусков кода конфигурации +Для временного исключения некоторого куска кода длиннее одной строчки удобно использовать стандартную идиому Tcl — условный оператор **if** с ложным условием, который компенсирует отсутствие в тикле "блочных" комментариев (в стиле "сишного" /\* ... \*/), например: -Нужно отключить некую настройку, которая введена примерно так: +Нужно отключить некую настройку, которая введена примерно так: hook::add postload_hook { - do this - now do that + do this + now do that } -Запрещаем выполнение этого кода так: +Запрещаем выполнение этого кода так: if 0 { hook::add postload_hook { - do this - now do that + do this + now do that } } -При следующем старте Ткаббера всё, что находится внутри блоков `if 0 { ... }`, выполнено не будет. - -Отдельные строчки удобнее комментировать символом "\#", который вводит однострочный комментарий -(который, впрочем, может быть продлён на следующую строку при помощи "\\", за которым сразу же -следует перевод строки). - -Имейте в виду весьма необычное поведение комментариев в тикле: в отличие от "классических" языков, -в тикле _комментарии обрабатываются во время **выполнения** программы,_ а не являются чем-то вроде -директив препроцессора. Невнимание к этому факту может привести как к ошибкам на стадии чтения конфига, например: +При следующем старте Ткаббера всё, что находится внутри блоков `if 0 { ... }`, выполнено не будет. + +Отдельные строчки удобнее комментировать символом "\#", который вводит однострочный комментарий (который, впрочем, может быть продлён на следующую строку при помощи "\\", за которым сразу же следует перевод строки). + +Имейте в виду весьма необычное поведение комментариев в тикле: в отличие от "классических" языков, в тикле _комментарии обрабатываются во время **выполнения** программы,_ а не являются чем-то вроде директив препроцессора. Невнимание к этому факту может привести как к ошибкам на стадии чтения конфига, например: missing close-brace: possible unbalanced brace in comment -так и к ошибкам во время выполнения, например: +так и к ошибкам во время выполнения, например: invalid command name "}" -Объясним "на пальцах": есть такой код: - - proc foo {a b} { - if {some conditional expr} { - ... - } - } - -и вы хотите изменить условное выражение, закомментировав старое. - -Разумный на первый взгляд способ - - proc foo {a b} { - # if {some conditional expr} { - if {some other cond expr} { - ... - } - } - -вызовет ошибку интерпретатора на этапе формирования аргументов для -команды [proc](http://www.tcl.tk/man/tcl8.4/TclCmd/proc.htm), так как в комментарии есть -несбалансированный символ "{", но этот комментарий игнорируется до фактического выполнения -точки кода, в которой он находится, и символ "{" в комментарии "уравновешивается" символом "}", -закрывающем тело процедуры, а скобка, открывающая тело процедуры, оказывается без пары. - -Правильным решением будет, к примеру, такое решение: +Объясним "на пальцах": есть такой код: + + proc foo {a b} { + if {some conditional expr} { + ... + } + } + +и вы хотите изменить условное выражение, закомментировав старое. + +Разумный на первый взгляд способ + + proc foo {a b} { + # if {some conditional expr} { + if {some other cond expr} { + ... + } + } + +вызовет ошибку интерпретатора на этапе формирования аргументов для команды [proc](http://www.tcl.tk/man/tcl8.4/TclCmd/proc.htm), так как в комментарии есть несбалансированный символ "{", но этот комментарий игнорируется до фактического выполнения точки кода, в которой он находится, и символ "{" в комментарии "уравновешивается" символом "}", закрывающем тело процедуры, а скобка, открывающая тело процедуры, оказывается без пары. + +Правильным решением будет, к примеру, такое решение: # if {some conditional expr} { } <-- балансирующая скобка if {some other cond expr} { - ... + ... } -или такое:. +или такое:. # if {some conditional expr} { if {some other cond expr} { - ... + ... } # } <-- балансирующая скобка -или такое: - - if {some other cond expr} { # {some conditional expr} - ... - } - -Хардкорные подробности этих "странностей" описаны [тут](http://wiki.tcl.tk/462). - -## Хуки -Большинство полезных настроек использует механизм "хуков" — обработчиков различных событий -Ткаббера; подробнее о них можно прочитать [**тут**](Загрузка_настроек.md). Здесь приведены -некоторые неочевидные особенности работы с ними. - -На каждый хук можно "навесить" произвольное количество обработчиков. - -С другой стороны, код для _одних и тех же_ хуков можно объединять. К примеру, вы хотите -использовать два рецепта, которые вешают свой код на один и тот же хук: - - hook::add finload_hook { - do_this - do_that - } - - ... - - hook:add finload_hook { - foo -config bar - } - -ничего не мешает вам написать в конфиг: - - hook::add finload_hook { - do_this - do_that - foo -config bar - } - -То есть по сути это вопрос стиля. - -Имейте, однако, в виду, что обработчики хуков могут иметь приоритет, и объединять -код обработчиков, имеющих разный приоритет, естественно, нельзя. - -Код обработчиков хуков выполняется интерпретатором тикля при помощи -команды [eval](http://tcl.tk/man/tcl8.4/TclCmd/eval.htm). То есть, если мы имеем, к примеру, - - hook::add finload_hook { - frobnicate foo - } - -то этот код в соответствующий момент будет выполнен примерно так: - - eval { - frobnicate foo - } - -что в данном случае приведёт к выполнению команды +или такое: + + if {some other cond expr} { # {some conditional expr} + ... + } + +Хардкорные подробности этих "странностей" описаны [тут](http://wiki.tcl.tk/462). + +# Хуки +Большинство полезных настроек использует механизм "хуков" — обработчиков различных событий Ткаббера; подробнее о них можно прочитать [тут](Загрузка_настроек.md). Здесь приведены некоторые неочевидные особенности работы с ними. + +На каждый хук можно "навесить" произвольное количество обработчиков. + +С другой стороны, код для _одних и тех же_ хуков можно объединять. К примеру, вы хотите использовать два рецепта, которые вешают свой код на один и тот же хук: + + hook::add finload_hook { + do_this + do_that + } + + ... + + hook:add finload_hook { + foo -config bar + } + +ничего не мешает вам написать в конфиг: + + hook::add finload_hook { + do_this + do_that + foo -config bar + } + +То есть по сути это вопрос стиля. + +Имейте, однако, в виду, что обработчики хуков могут иметь приоритет, и объединять код обработчиков, имеющих разный приоритет, естественно, нельзя. + +Код обработчиков хуков выполняется интерпретатором тикля при помощи команды [eval](http://tcl.tk/man/tcl8.4/TclCmd/eval.htm). То есть, если мы имеем, к примеру, + + hook::add finload_hook { + frobnicate foo + } + +то этот код в соответствующий момент будет выполнен примерно так: + + eval { + frobnicate foo + } + +что в данном случае приведёт к выполнению команды fronbnicate foo -Ситуация усложняется в том случае, когда коду хука передаются некоторые _параметры_ (аргументы). -Пример такого хука — `open_chat_post_hook`: он принимает параметры **chatid** и **type** (описание -хука см. в официальной документации). Текущие значения параметров хука "присоединяются" (или -"дописываются через пробел", если так мыслить удобнее) к коду хука, после чего полученная -конструкция вычисляется с помощью **eval**. В этом случае выполнение, скажем, такой -реализации обработчика данного хука: - - hook::add open_chat_post_hook { - frobnicate foo - } - -будет произведено так: - - eval { - frobnicate foo - } some_chatid some_type - -что "развернётся" командой **eval** в следующий код: +Ситуация усложняется в том случае, когда коду хука передаются некоторые _параметры_ (аргументы). Пример такого хука — `open_chat_post_hook`: он принимает параметры **chatid** и **type** (описание хука см. в официальной документации). Текущие значения параметров хука "присоединяются" (или "дописываются через пробел", если так мыслить удобнее) к коду хука, после чего полученная конструкция вычисляется с помощью **eval**. В этом случае выполнение, скажем, такой реализации обработчика данного хука: + + hook::add open_chat_post_hook { + frobnicate foo + } + +будет произведено так: + + eval { + frobnicate foo + } some_chatid some_type + +что "развернётся" командой **eval** в следующий код: frobnicate foo some_chatid some_type -В подавляющем случае это не то, чего хотел достичь автор хука. +В подавляющем случае это не то, чего хотел достичь автор хука. -Решение проблемы обработчиков "параметризованных хуков" — реализация их в виде _процедуры_ тикля. Пример: +Решение проблемы обработчиков "параметризованных хуков" — реализация их в виде _процедуры_ тикля. Пример: proc tweak_something {chatid type} { - frobnicate foo + frobnicate foo } hook::add open_chat_post_hook tweak_something -будет выполнено как +будет выполнено как eval tweak_something some_chatid some_type -то есть, в результате, как простой вызов процедуры с двумя параметрами. Что и требовалось получить. - -## Тестирование конфигурации -Несмотря на то, что подавляющее большинство настроек Ткаббера "применяются" сразу, без перезагрузок, -некоторые настройки требуют перезапуска Ткаббера. К ним относятся, к примеру, настройки шрифтов -(в версиях Ткаббера ниже 0.11.0 либо у приверженцев Tk 8.4), подключение "цветовых схем", -изменение стиля интерфейса (многооконный/с табами) и другие. Также перезапуска Ткаббера требует -установка/обновление некоторого пакета Tcl, который может использоваться Ткаббером. - -Удобнее (и правильнее) всего не перезапускать Ткаббер, а запускать "рядом" его вторую копию. - -Достоинства этого способа: - -* Не мешает оставаться на связи, так как основной Ткаббер продолжает работать; -* Может потребоваться несколько раундов редактирования и перезапуска Ткаббера чтобы "допилить" - настройку, которую вы делаете, до нужной вам кондиции. - -Недостатки: - -* Ткаббер прожорлив и медленно стартует, поэтому на некоторых очень старых машинах запуск второй - копии Ткаббера нежелателен; -* При запуске второй копии Ткаббера, если вы собираетесь соединяться из неё с сервером, - требуется соблюдать некоторые меры предосторожности, о которых рассказано ниже. - -### Как запустить второй Ткаббер, не помешав первому - -Большинство требуемых мер предосторожности требуется только если вы собираетесь подключаться к -серверу из второй копии Ткаббера. - -"Общая" проблема — одна: соревнование при записи настроек. Суть её в том, что все N запущенных -"рядом" Ткабберов будут сохранять настройки в один и тот же файл **custom.tcl** (и некоторые другие). -Ткаббер использует весьма прямолинейный, но разумный метод сохранения настроек: при изменении некоторой -настройки файл **custom.tcl** тут же перезаписывается, отражая новое состояние конфигурации. -Понятно, что после редактировании настроек параллельно в нескольких копиях Ткаббера, сохранённым -останется набор настроек того Ткаббера, в котором он менялся последним по времени. - -Имейте в виду, что это относится только к сохранению настроек "для текущей и следующих сессий"; -установка настройки "только для текущей сессии" не вызывает перезапись **custom.tcl**. - -Теперь перейдём к мерам предосторожности, которые нужно соблюдать при одновременном соединении -с сервером из нескольких копий Ткаббера. - -Они чуть отличаются для случев: - -* Подключение к тому же серверу с тем же логином; -* Подключение к другому серверу, или к тому же, но с другим логином. - -#### Подключение с тем же логином - -* _Обязательно_ в окне логина поставьте [**ресурс**](Ткаббер_ЧаВо.md#Ресурс) отличный от - ресурса основного Ткаббера — это позволит Вам создать разные _сессии_ (сеансы работы) с сервером; -* Там же можете выбрать [**приоритет**](Ткаббер_ЧаВо.md#Приоритет), меньший, чем у основной копии. - Для чего это может пригодиться, читайте в указанной заметке про приоритеты. - -Теперь можете подключиться — будет создано второе подключение с тем же логином (к тому же -аккаунту), но одно будет являться другой сессией и не будет "пересекаться" с первой. - -Прежде чем продолжить тестирование, усвойте ещё несколько вещей: - -* Подключаясь к тем же конференциям, в которых вы сидите из основной копии Ткаббера, выбирайте - другой ник — ваш уже занят (вами); -* При таком подключении поведение сообщений, приходящих от гейтов, зависит - от [**приоритетов**](Ткаббер_ЧаВо.md#Приоритет) запущенных копий Ткаббера. - -#### Подключение с другим логином (или к другому серверу) - -В этом случае единственное, о чём нужно думать, это регистрация на гейтах в другие системы быстрого -обмена сообщениями: к примеру, если как на первом, так и на втором аккаунте вы зарегистрированы на -гейте в ICQ, логин на второй аккаунт также подключит вас к гейту, что вызовет отключение от гейта -первого аккаунта. Причина этого не в гейте, а в самой "вражеской" системе быстрого обмена сообщениями, -которая не позволяет делать одновременные подключения к одному своему аккаунту с разных -IP-адресов (которыми будут выступать IP-адреса гейтов). - -Если вы столкнулись с этой проблемой, временно отключитесь ("отлогиньтесь") от гейтов в основном Ткаббере. - -### Тестирование конфигурации "вживую" - -![(!)](../images/Hammer.png) **Сделать:** написать раздел - -Пока в качестве примера можно изучить [**это**](Шрифты.md#Быстрый_подбор_шрифтов). +то есть, в результате, как простой вызов процедуры с двумя параметрами. Что и требовалось получить. + +# Тестирование конфигурации +Несмотря на то, что подавляющее большинство настроек Ткаббера "применяются" сразу, без перезагрузок, некоторые настройки требуют перезапуска Ткаббера. К ним относятся, к примеру, настройки шрифтов (в версиях Ткаббера ниже 0.11.0 либо у приверженцев Tk 8.4), подключение "цветовых схем", изменение стиля интерфейса (многооконный/с табами) и другие. Также перезапуска Ткаббера требует установка/обновление некоторого пакета Tcl, который может использоваться Ткаббером. + +Удобнее (и правильнее) всего не перезапускать Ткаббер, а запускать "рядом" его вторую копию. + +Достоинства этого способа: + +* Не мешает оставаться на связи, так как основной Ткаббер продолжает работать; +* Может потребоваться несколько раундов редактирования и перезапуска Ткаббера чтобы "допилить" настройку, которую вы делаете, до нужной вам кондиции. + +Недостатки: + +* Ткаббер прожорлив и медленно стартует, поэтому на некоторых очень старых машинах запуск второй копии Ткаббера нежелателен; +* При запуске второй копии Ткаббера, если вы собираетесь соединяться из неё с сервером, требуется соблюдать некоторые меры предосторожности, о которых рассказано ниже. + +## Как запустить второй Ткаббер, не помешав первому + +Большинство требуемых мер предосторожности требуется только если вы собираетесь подключаться к серверу из второй копии Ткаббера. + +"Общая" проблема — одна: соревнование при записи настроек. Суть её в том, что все N запущенных "рядом" Ткабберов будут сохранять настройки в один и тот же файл **custom.tcl** (и некоторые другие). Ткаббер использует весьма прямолинейный, но разумный метод сохранения настроек: при изменении некоторой настройки файл **custom.tcl** тут же перезаписывается, отражая новое состояние конфигурации. Понятно, что после редактировании настроек параллельно в нескольких копиях Ткаббера, сохранённым останется набор настроек того Ткаббера, в котором он менялся последним по времени. + +Имейте в виду, что это относится только к сохранению настроек "для текущей и следующих сессий"; установка настройки "только для текущей сессии" не вызывает перезапись **custom.tcl**. + +Теперь перейдём к мерам предосторожности, которые нужно соблюдать при одновременном соединении с сервером из нескольких копий Ткаббера. + +Они чуть отличаются для случев: + +* Подключение к тому же серверу с тем же логином; +* Подключение к другому серверу, или к тому же, но с другим логином. + +### Подключение с тем же логином + +* _Обязательно_ в окне логина поставьте [ресурс](Ткаббер_ЧаВо.md#Ресурс) отличный от ресурса основного Ткаббера — это позволит Вам создать разные _сессии_ (сеансы работы) с сервером; +* Там же можете выбрать [приоритет](Ткаббер_ЧаВо.md#Приоритет), меньший, чем у основной копии. Для чего это может пригодиться, читайте в указанной заметке про приоритеты. + +Теперь можете подключиться — будет создано второе подключение с тем же логином (к тому же аккаунту), но одно будет являться другой сессией и не будет "пересекаться" с первой. + +Прежде чем продолжить тестирование, усвойте ещё несколько вещей: + +* Подключаясь к тем же конференциям, в которых вы сидите из основной копии Ткаббера, выбирайте другой ник — ваш уже занят (вами); +* При таком подключении поведение сообщений, приходящих от гейтов, зависит от [приоритетов](Ткаббер_ЧаВо.md#Приоритет) запущенных копий Ткаббера. + +### Подключение с другим логином (или к другому серверу) + +В этом случае единственное, о чём нужно думать, это регистрация на гейтах в другие системы быстрого обмена сообщениями: к примеру, если как на первом, так и на втором аккаунте вы зарегистрированы на гейте в ICQ, логин на второй аккаунт также подключит вас к гейту, что вызовет отключение от гейта первого аккаунта. Причина этого не в гейте, а в самой "вражеской" системе быстрого обмена сообщениями, которая не позволяет делать одновременные подключения к одному своему аккаунту с разных IP-адресов (которыми будут выступать IP-адреса гейтов). + +Если вы столкнулись с этой проблемой, временно отключитесь ("отлогиньтесь") от гейтов в основном Ткаббере. + +## Тестирование конфигурации "вживую" + +![(!)](../images/Hammer.png) **Сделать:** написать раздел + +Пока в качестве примера можно изучить [это](Шрифты.md#Быстрый_подбор_шрифтов). + + Index: wiki/ru/Config.tcl_для_начинающих.md ================================================================== --- wiki/ru/Config.tcl_для_начинающих.md +++ wiki/ru/Config.tcl_для_начинающих.md @@ -1,6 +1,7 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Config.tcl_для_начинающих) + # Config.tcl для начинающих Материал из Tkabber Wiki. @@ -11,123 +12,94 @@ * [3 Зачем?](#Зачем) * [4 Где?](#Где) * [5 Как?](#Как) * [6 Что дальше?](#Что_дальше) -## Введение -К сожалению, пользователи по разным причинам часто совершают целый букет довольно странных ошибок, -относящихся к нахождению и правке файла конфигурации Ткаббера. - -Поэтому была написана эта статья. Здесь даны самые базовые сведения о файле конфигурации Ткаббера. - -## Что? -Для хранения _нетривиальных_ настроек пользователя в Ткаббере предусмотрен ровно _один_ файл. - -Он называется **config.tcl**. - -## Зачем? -Обязательно семь раз подумайте: _нужно ли вам **вообще**_ лезть в этот файл, ведь _подавляющее большинство_ -аспектов конфигурации Ткаббера настраивается через встроенный интерфейс конфигурации, доступный через пункт -главного меню **Tkabber → Настройки**. - -Файл config.tcl предназначен для "ковыряния" умелыми пользователями, которые: - -* понимают, что делают; -* способны _внимательно и вдумчиво_ читать документацию. - -Поэтому, если выполнение указанных условий по каким-то причинам не для вас, лучше относитесь -к этому файлу настроек как к несуществующей функциональности. - -Иначе не удивляйтесь, если к вам будут относиться, мягко говоря, прохладно, когда вы начнёте задавать -тривиальные вопросы о файле конфигурации Ткаббера. - -## Где? -При запуске Ткаббер ищет файл config.tcl _ровно в одном месте — в каталоге своих **настроек.**_ - -Это нужно понять совершенно чётко: в самом _коде_ Ткаббера нет и быть не может никаких файлов -конфигурации! Даже если вы обнаружите в каталоге, куда поставлен Ткаббер, тридцать файлов с -названием config.tcl, знайте: _это **не те** файлы!_ - -Местоположения каталога настроек Ткаббера зависит от операционной системы, хотя -и [**поддаётся настройке пользователем**](Config_dir.md). - -В Unix этим каталогом всегда является - - ~/.tkabber - -В Windows ситуация сложнее: - -* В версиях Ткаббера начиная с 0.10.0 на системах Windows каталог настроек хранится в области - файловой системы, известной как "application data": - * На Windows 2000 и Windows XP это - - C:\Documents and Settings\USER\Application Data\Tkabber - - * На Windows Vista и Windows 7 это - - C:\Users\USER\Tkabber - -Здесь — **USER** это имя пользователя, зарегистрировавшегося в системе. Также начиная с версии 0.10.0, -Ткаббер "знает" про переменную окружения **TKABBER\_HOME** — если она есть, для хранения настроек -используется путь, указанный в ней. Подробности можно узнать [**в этой статье**](Config.tcl.md) или -в [разделе "Configuration" официальной документации](http://tkabber.jabber.ru/files/doc/tkabber.html#s.configuration). - -* В версиях Ткаббера до 0.9.9 включительно настройки хранятся в каталоге - - ~/.tkabber - -а символ "~", означающий "домашний каталог пользователя", зависит от версии Windows. На -Windows XP это обычно +# Введение +К сожалению, пользователи по разным причинам часто совершают целый букет довольно странных ошибок, относящихся к нахождению и правке файла конфигурации Ткаббера. + +Поэтому была написана эта статья. Здесь даны самые базовые сведения о файле конфигурации Ткаббера. + +# Что? +Для хранения _нетривиальных_ настроек пользователя в Ткаббере предусмотрен ровно _один_ файл. + +Он называется **config.tcl**. + +# Зачем? +Обязательно семь раз подумайте: _нужно ли вам **вообще**_ лезть в этот файл, ведь _подавляющее большинство_ аспектов конфигурации Ткаббера настраивается через встроенный интерфейс конфигурации, доступный через пункт главного меню **Tkabber → Настройки**. + +Файл config.tcl предназначен для "ковыряния" умелыми пользователями, которые: + +* понимают, что делают; +* способны _внимательно и вдумчиво_ читать документацию. + +Поэтому, если выполнение указанных условий по каким-то причинам не для вас, лучше относитесь к этому файлу настроек как к несуществующей функциональности. + +Иначе не удивляйтесь, если к вам будут относиться, мягко говоря, прохладно, когда вы начнёте задавать тривиальные вопросы о файле конфигурации Ткаббера. + +# Где? +При запуске Ткаббер ищет файл config.tcl _ровно в одном месте — в каталоге своих **настроек.**_ + +Это нужно понять совершенно чётко: в самом _коде_ Ткаббера нет и быть не может никаких файлов конфигурации! Даже если вы обнаружите в каталоге, куда поставлен Ткаббер, тридцать файлов с названием config.tcl, знайте: _это **не те** файлы!_ + +Местоположения каталога настроек Ткаббера зависит от операционной системы, хотя и [поддаётся настройке пользователем](Config_dir.md). + +В Unix этим каталогом всегда является + + ~/.tkabber + +В Windows ситуация сложнее: + +* В версиях Ткаббера начиная с 0.10.0 на системах Windows каталог настроек хранится в области файловой системы, известной как "application data": + * На Windows 2000 и Windows XP это + C:\Documents and Settings\USER\Application Data\Tkabber + + * На Windows Vista и Windows 7 это + C:\Users\USER\Tkabber + +Здесь — **USER** это имя пользователя, зарегистрировавшегося в системе. Также начиная с версии 0.10.0, Ткаббер "знает" про переменную окружения **TKABBER\_HOME** — если она есть, для хранения настроек используется путь, указанный в ней. Подробности можно узнать [в этой статье](Config.tcl.md) или в [разделе "Configuration" официальной документации](http://tkabber.jabber.ru/files/doc/tkabber.html#s.configuration). + +* В версиях Ткаббера до 0.9.9 включительно настройки хранятся в каталоге + + ~/.tkabber + +а символ "~", означающий "домашний каталог пользователя", зависит от версии Windows. На Windows XP это обычно C:\Documents and Settings\USER\.tkabber -где **USER** это имя пользователя, зарегистрировавшегося в системе. Под Windows 9x "~" -раскрывается в имя системного диска, и каталог оказывается чем-то вроде +где **USER** это имя пользователя, зарегистрировавшегося в системе. Под Windows 9x "~" раскрывается в имя системного диска, и каталог оказывается чем-то вроде C:\.TKABBER -Подробно о механизме "раскрытия тильды" можно прочитать [**здесь**](Настройка_Ткаббера__азы_и_глубже.md). - -## Как? -Для начала уясните себе, что _файл настроек **не нужен** Ткабберу!_ То есть он вовсе не обязан существовать. - -Поэтому, если вы не нашли файл config.tcl в каталоге настроек Ткаббера, но уверены, что -определили этот каталог правильно (если был произведён хотя бы один сеанс работы с Ткаббером, -в этом каталоге будет присутствовать файл custom.tcl, а также могут быть файлы: nick\_colors.tcl, -headlines.tcl, каталог logs и т. д.), не паникуйте и не пытайтесь искать этот файл в "исходниках" -Ткаббера — его там нет. Вам придётся создать файл config.tcl самим. Это несложно. - -config.tcl представляет собой простой текстовый файл в системной кодировке. В Windows -это — **Windows-1251**, в Unix она зависит от настроек локали. - -Таким образом, как создавать, так и редактировать этот файл в Windows можно простым -"Блокнотом". При этом, однако, следует помнить о некоторых возможных проблемах: - -* Файл config.tcl должен сохраняться в "Кодировке ANSI" (термин "Блокнота"). Эта кодировка - выбирается по умолчанию при сохранении только что созданного файла, так что беспокоиться особо не о чем. -* Как "Проводник Windows", так и "Блокнот", пытаются ревностно блюсти тип файла — "текстовый" у - текстовых файлов; а он в Windows определяется расширением ".txt". Поэтому следите за - расширением файла! Оно должно быть ".tcl", а не ".txt" или, допустим, ".tcl.txt". Не давайте - "Блокноту" и "Проводнику" поменять расширение, боритесь за него! - -Строго говоря, файл config.tcl представляет собой полноценную программу на -языке [Tcl](http://ru.wikipedia.org/wiki/Tcl), которая _выполняется_ Ткаббером. Однако, -тикль — весьма прост в том плане, что имеет очень простой синтаксис, и его конструкции -читаются "практически по-английски". - -Несколько простых правил, формулировка которых не вполне точна технически, но подойдёт для нашей цели: - -* Одна строка — одна _команда._ -* Если первым непробельным символом в строке является "\#", то эта строка является комментарием. -* Фигурные скобки ("{" и "}") ограничивают _блоки,_ которые в тикле именуются "словами". - Также слова ограничиваются двойными кавычками. - -Помещая в конфиг готовый кусок настроек (например, "подсмотренный" в других статьях этой вики), -помещайте его на "свободное место" — вне всяких блоков. Например, просто дописывайте в конец файла. - -## Что дальше? -Дальше — больше: - -* [**Полное описание**](Config_dir.md) алгоритма определения расположения каталога настроек в современных версиях Ткаббера. -* [**Рассказ**](Настройка_Ткаббера__азы_и_глубже.md) о странном символе "~", переменных окружения и прочих захватывающих вещах. -* [**"Config.tcl для уже начавших"**](Config.tcl.md). -* [**Нетривиальные настройки**](Нетривиальные_настройки.md). +Подробно о механизме "раскрытия тильды" можно прочитать [здесь](Настройка_Ткаббера__азы_и_глубже.md). + +# Как? +Для начала уясните себе, что _файл настроек **не нужен** Ткабберу!_ То есть он вовсе не обязан существовать. + +Поэтому, если вы не нашли файл config.tcl в каталоге настроек Ткаббера, но уверены, что определили этот каталог правильно (если был произведён хотя бы один сеанс работы с Ткаббером, в этом каталоге будет присутствовать файл custom.tcl, а также могут быть файлы: nick\_colors.tcl, headlines.tcl, каталог logs и т. д.), не паникуйте и не пытайтесь искать этот файл в "исходниках" Ткаббера — его там нет. Вам придётся создать файл config.tcl самим. Это несложно. + +config.tcl представляет собой простой текстовый файл в системной кодировке. В Windows это — **Windows-1251**, в Unix она зависит от настроек локали. + +Таким образом, как создавать, так и редактировать этот файл в Windows можно простым "Блокнотом". При этом, однако, следует помнить о некоторых возможных проблемах: + +* Файл config.tcl должен сохраняться в "Кодировке ANSI" (термин "Блокнота"). Эта кодировка выбирается по умолчанию при сохранении только что созданного файла, так что беспокоиться особо не о чем. +* Как "Проводник Windows", так и "Блокнот", пытаются ревностно блюсти тип файла — "текстовый" у текстовых файлов; а он в Windows определяется расширением ".txt". Поэтому следите за расширением файла! Оно должно быть ".tcl", а не ".txt" или, допустим, ".tcl.txt". Не давайте "Блокноту" и "Проводнику" поменять расширение, боритесь за него! + +Строго говоря, файл config.tcl представляет собой полноценную программу на языке [Tcl](http://ru.wikipedia.org/wiki/Tcl), которая _выполняется_ Ткаббером. Однако, тикль — весьма прост в том плане, что имеет очень простой синтаксис, и его конструкции читаются "практически по-английски". + +Несколько простых правил, формулировка которых не вполне точна технически, но подойдёт для нашей цели: + +* Одна строка — одна _команда._ +* Если первым непробельным символом в строке является "\#", то эта строка является комментарием. +* Фигурные скобки ("{" и "}") ограничивают _блоки,_ которые в тикле именуются "словами". Также слова ограничиваются двойными кавычками. + +Помещая в конфиг готовый кусок настроек (например, "подсмотренный" в других статьях этой вики), помещайте его на "свободное место" — вне всяких блоков. Например, просто дописывайте в конец файла. + +# Что дальше? +Дальше — больше: + +* [Полное описание](Config_dir.md) алгоритма определения расположения каталога настроек в современных версиях Ткаббера. +* [Рассказ](Настройка_Ткаббера__азы_и_глубже.md) о странном символе "~", переменных окружения и прочих захватывающих вещах. +* ["Config.tcl для уже начавших"](Config.tcl.md). +* [Нетривиальные настройки](Нетривиальные_настройки.md). + + Index: wiki/ru/Config_dir.md ================================================================== --- wiki/ru/Config_dir.md +++ wiki/ru/Config_dir.md @@ -1,293 +1,264 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Config_dir/index.html) + # Config dir Материал из Tkabber Wiki -**Внимание!** реализация механизмов, обсуждаемых здесь, интегрирована в транк Ткаббера -начиная с ревизии 859 (05 янв 2007). Реализованный механизм изложен [**ниже**](Config_dir.md#Рабочий_вариант). +**Внимание!** реализация механизмов, обсуждаемых здесь, интегрирована в транк Ткаббера начиная с ревизии 859 (05 янв 2007). Реализованный механизм изложен [ниже](Config_dir.md#Рабочий_вариант). -Также был обновлён раздел \#4 "Configuration" документации Ткаббера — читайте tkabber.html на своей системе. +Также был обновлён раздел \#4 "Configuration" документации Ткаббера — читайте tkabber.html на своей системе. ## Содержание * [1 Введение](#Введение) * [2 Инфа по системам](#Инфа_по_системам) * [3 Проблемы](#Проблемы) * [4 Рабочий вариант](#Рабочий_вариант) * [5 Добавка про SHGetSpecialFolderPath](#Добавка_про_SHGetSpecialFolderPath) * [6 Тестовая реализация SHGetSpecialFolderPath через Ffidl](#Тестовая_реализация_SHGetSpecialFolderPath_через_Ffidl) - * [6.1 Скрипт](#Скрипт) - * [6.2 Замечания](#Замечания) - * [6.2.1 ANSI (8-bit) vs Unicode (UTF-16)](#ANSI_8-bit_vs_Unicode_UTF-16) - * [6.2.2 Реализация в Ткаббере](#Реализация_в_Ткаббере) + * [6.1 Скрипт](#Скрипт) + * [6.2 Замечания](#Замечания) + * [6.2.1 ANSI (8-bit) vs Unicode (UTF-16)](#ANSI_8-bit_vs_Unicode_UTF-16) + * [6.2.2 Реализация в Ткаббере](#Реализация_в_Ткаббере) ## Введение -Обсуждение новой схемы поддержки каталога конфигурации Ткаббера. - -Идея: отказаться от схемы **~/.tkabber** в Windows по причине того, что при существующей -схеме каталог конфигурации на любой Windows-системе оказывается не там, где предполагается -хранить конфигурацию на данной системе. - -Конкретно нас интересует т.н. каталог "application data" ("appdata"). Предполагается -хранить настройки Ткаббера в подкаталоге "Tkabber" этого каталога. - -Получить путь каталога "appdata" можно тремя способами: - -* Переменная окружения **APPDATA**: - * Появилась только в Windows 2000; присутствует во всей последующей линейке, включая Vista. - -* Переменная реестра `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\AppData`: - * Имеет место как минимум в Win98 SE; - * Присутутвует во всей последующей линейке, _однако в Vista весь ключ "Shell Folders" помечен как "устаревший",_ однако, он содержит правильные значения. - -* Процедура Win32 API "SHGetSpecialFolderPath": - * On MSDN: [http://msdn2.microsoft.com/en-us/library/ms647816.aspx](http://msdn2.microsoft.com/en-us/library/ms647816.aspx) - * Since {Win98 (SE?), Win2000} + on {WinNT 4+, Win95+ with IE4 installed}. +Обсуждение новой схемы поддержки каталога конфигурации Ткаббера. + +Идея: отказаться от схемы **~/.tkabber** в Windows по причине того, что при существующей схеме каталог конфигурации на любой Windows-системе оказывается не там, где предполагается хранить конфигурацию на данной системе. + +Конкретно нас интересует т.н. каталог "application data" ("appdata"). Предполагается хранить настройки Ткаббера в подкаталоге "Tkabber" этого каталога. + +Получить путь каталога "appdata" можно тремя способами: + +* Переменная окружения **APPDATA**: + * Появилась только в Windows 2000; присутствует во всей последующей линейке, включая Vista. + +* Переменная реестра ` HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\AppData`: + * Имеет место как минимум в Win98 SE; + * Присутутвует во всей последующей линейке, _однако в Vista весь ключ "Shell Folders" помечен как "устаревший",_ однако, он содержит правильные значения. + +* Процедура Win32 API "SHGetSpecialFolderPath": + * On MSDN: [http://msdn2.microsoft.com/en-us/library/ms647816.aspx](http://msdn2.microsoft.com/en-us/library/ms647816.aspx) + * Since {Win98 (SE?), Win2000} + on {WinNT 4+, Win95+ with IE4 installed}. ## Инфа по системам -* Win98 (SE): - * Каталог: `%windir%\Application Data`; - * **%APPDATA%** — **нет;** - * Ключ "Shell Folders" — есть; - * Примечание: уже есть **%windir%**. - -* WinNT 4.0 (русская): - * Каталог: `%USERPROFILE%\Данные`; - * **%APPDATA%** — **нет;** - * Ключ "Shell Folders" — есть; - * Примечание: кривое значение %HOMEPATH% (корень загрузочного диска), в правильное место - показывает %USERPROFILE% (%windir%\\Profiles\\\). - -* w2k, w2k3, XP: - * Каталог: **%APPDATA%**; - * Ключ "Shell Folders" — есть, но, откровенно говоря, он всегда был deprecated; - -* Vista: - * Каталог: **%APPDATA%**; - * Ключ "Shell Folders" — есть, _но deprecated._ - -**(TODO): 95? ME?** +* Win98 (SE): + * Каталог: `%windir%\Application Data`; + * **%APPDATA%** — **нет;** + * Ключ "Shell Folders" — есть; + * Примечание: уже есть **%windir%**. + +* WinNT 4.0 (русская): + * Каталог: `%USERPROFILE%\Данные`; + * **%APPDATA%** — **нет;** + * Ключ "Shell Folders" — есть; + * Примечание: кривое значение %HOMEPATH% (корень загрузочного диска), в правильное место показывает %USERPROFILE% (%windir%\\Profiles\\\). + +* w2k, w2k3, XP: + * Каталог: **%APPDATA%**; + * Ключ "Shell Folders" — есть, но, откровенно говоря, он всегда был deprecated; + +* Vista: + * Каталог: **%APPDATA%**; + * Ключ "Shell Folders" — есть, _но deprecated._ + +**(TODO): 95? ME?** ## Проблемы -Наиболее разумным представляется вызов SHGetSpecialFolderPath, однако это не самый простой путь: - -* Данную функциональность в готовом виде обеспечивает пакет [TWAPI](http://twapi.sourceforge.net/shell.html#get_shell_folder), однако, он: - * Не поставляется вместе с дистром AS; - * Весит >600к в архиве, что будет препятствовать его попаданию в старпак и вообще отобьёт охоту у пользователей его устанавливать. - -* Возможно "цеплять" DLL, предоставляющую данный вызов API, например, при помощи [Ffidl](http://wiki.tcl.tk/2?Ffidl), однако: - * Этот пакет так же не поставляется с AS; - * Прямой вызов функции из DLL выглядит "не очень". - -Путь с реестром и окружением не имеет такой "идеологической чистоты", как вызов SHGetSpecialFolderPath. - -* Недостаток: прямое чтение реестра и окружения в условиях огульного изменения своих же - "стандартов" соответствующей фирмой является "ненадёжным"; кроме того, в ОС, следующей за - Vista, соотв. раздел реестра может быть изъят полностью. -* Достоинства: - * Работа с переменными окружения доступна непосредственно; - * Пакет **registry** для работы с реестром входит в "ядро" виндовой версии тикля, - то есть очень велика вероятность его доступности даже в старпаке; - * Обсуждаемый ключ реестра доступен на всех исследованных системах. +Наиболее разумным представляется вызов SHGetSpecialFolderPath, однако это не самый простой путь: + +* Данную функциональность в готовом виде обеспечивает пакет [TWAPI](http://twapi.sourceforge.net/shell.html#get_shell_folder), однако, он: + * Не поставляется вместе с дистром AS; + * Весит >600к в архиве, что будет препятствовать его попаданию в старпак и вообще отобьёт охоту у пользователей его устанавливать. + +* Возможно "цеплять" DLL, предоставляющую данный вызов API, например, при помощи [Ffidl](http://wiki.tcl.tk/2?Ffidl), однако: + * Этот пакет так же не поставляется с AS; + * Прямой вызов функции из DLL выглядит "не очень". + +Путь с реестром и окружением не имеет такой "идеологической чистоты", как вызов SHGetSpecialFolderPath. + +* Недостаток: прямое чтение реестра и окружения в условиях огульного изменения своих же "стандартов" соответствующей фирмой является "ненадёжным"; кроме того, в ОС, следующей за Vista, соотв. раздел реестра может быть изъят полностью. +* Достоинства: + * Работа с переменными окружения доступна непосредственно; + * Пакет **registry** для работы с реестром входит в "ядро" виндовой версии тикля, то есть очень велика вероятность его доступности даже в старпаке; + * Обсуждаемый ключ реестра доступен на всех исследованных системах. ## Рабочий вариант -При старте: - -* Ткаббер проверяет наличие переменной окружения **TKABBER\_HOME**, если она есть, Ткаббер использует - её как путь до каталога своих настроек. -* Если её нет, то: - * В Unix каталог настроек устанавливается в **~/.tkabber**. - * В Windows применяются описанные выше эвристики: - - 1. Проверяется переменная окружения **APPDATA**; - 1. Проверяется ключ реестра "Shell Folders", если доступен пакет **registry**; - 1. К полученному каталогу добавляется элемент пути "Tkabber", и этот каталог используется как каталог настроек. - -Вопросы: - -* Возможно, стоит сначала смотреть в реестр, а потом — в окружение; -* Нужно предусмотреть разумный Fallback для различных версий Windows; идея **~/.tkabber** для - этого случая представляется не очень разумной. - -[_Juriks_](Участник_Juriks.md), посовещавшись с [**Kostix**](Участник_Kostix.md), предлагает: -Запускать несколько Ткабберов с разными настройками с помощью таких вот скриптов: +При старте: + +* Ткаббер проверяет наличие переменной окружения **TKABBER\_HOME**, если она есть, Ткаббер использует её как путь до каталога своих настроек. +* Если её нет, то: + * В Unix каталог настроек устанавливается в **~/.tkabber**. + * В Windows применяются описанные выше эвристики: + + 1. Проверяется переменная окружения **APPDATA**; + 1. Проверяется ключ реестра "Shell Folders", если доступен пакет **registry**; + 1. К полученному каталогу добавляется элемент пути "Tkabber", и этот каталог используется как каталог настроек. + +Вопросы: + +* Возможно, стоит сначала смотреть в реестр, а потом — в окружение; +* Нужно предусмотреть разумный Fallback для различных версий Windows; идея **~/.tkabber** для этого случая представляется не очень разумной. + +[Juriks](Участник_Juriks.md), посовещавшись с [kostix](Участник_Kostix.md), предлагает: Запускать несколько Ткабберов с разными настройками с помощью таких вот скриптов: @echo off set TKABBER_HOME=c:\home\vasya_pupkin start tkabber.exe -То есть искать папку с конфигами в таком порядке: - -1. переменная окружения **TKABBER\_HOME** -1. реестр -1. прочие переменные оружения - -[Kostix](Участник_Kostix.md) комментирует: реализованный в альфе Ткаббера вариант -сначала ищет переменную окружения **APPDATA**, и только в случае неудачи -смотрит реестр. Причины простые: - -* Пакет **registry**, хоть и входит в "ядро" виндового тикля, технически может - отсутствовать (в ткаббер-паке или старпаке, к примеру), а вот помешать тиклю работать - с окружением не может никакая конфигурация его рантайма; -* Загрузка пакета — это доп. время для старта + доп. расход памяти. А пакет **registry** - пока что больше нигде в Ткаббере не используется. -* Реестр ничем не лучше переменной **APPDATA** в плане надёжности: точно так же, как в - системе может быть кривое значение **APPDATA**, может быть крив ключ **Shell Folders** - реестра. Только вызов соотв. функции Win32 API из **shell32.dll** даёт гарантии. Но он - требует "неядерного" (и отсутствующего в дистре от AS) пакета **Ffidl**. Поэтому - включение соответствующего кода в Ткаббер — вопрос сложный... +То есть искать папку с конфигами в таком порядке: + +1. переменная окружения **TKABBER\_HOME** +1. реестр +1. прочие переменные оружения + +[kostix](Участник_Kostix.md) комментирует: реализованный в альфе Ткаббера вариант сначала ищет переменную окружения **APPDATA**, и только в случае неудачи смотрит реестр. Причины простые: + +* Пакет **registry**, хоть и входит в "ядро" виндового тикля, технически может отсутствовать (в ткаббер-паке или старпаке, к примеру), а вот помешать тиклю работать с окружением не может никакая конфигурация его рантайма; +* Загрузка пакета — это доп. время для старта + доп. расход памяти. А пакет **registry** пока что больше нигде в Ткаббере не используется. +* Реестр ничем не лучше переменной **APPDATA** в плане надёжности: точно так же, как в системе может быть кривое значение **APPDATA**, может быть крив ключ **Shell Folders** реестра. Только вызов соотв. функции Win32 API из **shell32.dll** даёт гарантии. Но он требует "неядерного" (и отсутствующего в дистре от AS) пакета **Ffidl**. Поэтому включение соответствующего кода в Ткаббер — вопрос сложный... ## Добавка про SHGetSpecialFolderPath -[SHGetSpecialFolderPath](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetspecialfolderpath.asp) -«замещена» процедурой -[SHGetFolderPath](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetfolderpath.asp) -начиная с w2k, хотя и доступна на всех системах. Для нас это ничего не значит, -так как нам для совместимости со старыми OS необходимо использовать старую версию. - -На современных системах SHGetSpecialFolderPath реализована в **shell32.dll**. Также -эта функция содержится в _redistributable_ library **SHFolder.dll**, которая -может включаться в поставку продукта и худо-бедно работать на любой OS. Starpack это, -пожалуй, не спасёт, а вот Pack и выше может спокойно её использовать. +[SHGetSpecialFolderPath](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetspecialfolderpath.asp) «замещена» процедурой [SHGetFolderPath](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetfolderpath.asp) начиная с w2k, хотя и доступна на всех системах. Для нас это ничего не значит, так как нам для совместимости со старыми OS необходимо использовать старую версию. + +На современных системах SHGetSpecialFolderPath реализована в **shell32.dll**. Также эта функция содержится в _redistributable_ library **SHFolder.dll**, которая может включаться в поставку продукта и худо-бедно работать на любой OS. Starpack это, пожалуй, не спасёт, а вот Pack и выше может спокойно её использовать. ## Тестовая реализация SHGetSpecialFolderPath через Ffidl ### Скрипт -Скрипт, печатающий путевое имя каталога "application data" в Windows. +Скрипт, печатающий путевое имя каталога "application data" в Windows. -Создаваемая команда Tcl "SHGetSpecialFolderPath" способна возвращать имя -любого стандартного каталога Windows (заданного соотв. ключом "CSIDL\_..."). +Создаваемая команда Tcl "SHGetSpecialFolderPath" способна возвращать имя любого стандартного каталога Windows (заданного соотв. ключом "CSIDL\_..."). -В случае неуспеха команда возвращает пустую строку. +В случае неуспеха команда возвращает пустую строку. #! /usr/bin/tclsh - + package require Ffidl - + ffidl::callout dll_SHGetSpecialFolderPath \ - {int pointer-utf16 int int} int \ - [ffidl::symbol shell32.dll SHGetSpecialFolderPathW] - + {int pointer-utf16 int int} int \ + [ffidl::symbol shell32.dll SHGetSpecialFolderPathW] + proc SHGetSpecialFolderPath {what create} { - array set CSIDL { - CSIDL_DESKTOP 0 - CSIDL_INTERNET 1 - CSIDL_PROGRAMS 2 - CSIDL_CONTROLS 3 - CSIDL_PRINTERS 4 - CSIDL_PERSONAL 5 - CSIDL_FAVORITES 6 - CSIDL_STARTUP 7 - CSIDL_RECENT 8 - CSIDL_SENDTO 9 - CSIDL_BITBUCKET 10 - CSIDL_STARTMENU 11 - CSIDL_DESKTOPDIRECTORY 16 - CSIDL_DRIVES 17 - CSIDL_NETWORK 18 - CSIDL_NETHOOD 19 - CSIDL_FONTS 20 - CSIDL_TEMPLATES 21 - CSIDL_COMMON_STARTMENU 22 - CSIDL_COMMON_PROGRAMS 23 - CSIDL_COMMON_STARTUP 24 - CSIDL_COMMON_DESKTOPDIRECTORY 25 - CSIDL_APPDATA 26 - CSIDL_PRINTHOOD 27 - CSIDL_LOCAL_APPDATA 28 - CSIDL_ALTSTARTUP 29 - CSIDL_COMMON_ALTSTARTUP 30 - CSIDL_COMMON_FAVORITES 31 - CSIDL_INTERNET_CACHE 32 - CSIDL_COOKIES 33 - СSIDL_HISTORY 34 - CSIDL_COMMON_APPDATA 35 - CSIDL_WINDOWS 36 - CSIDL_SYSTEM 37 - CSIDL_PROGRAM_FILES 38 - СSIDL_MYPICTURES 39 - CSIDL_PROFILE 40 - СSIDL_SYSTEMX86 41 - CSIDL_PROGRAM_FILESX86 42 - CSIDL_PROGRAM_FILES_COMMON 43 - СSIDL_PROGRAM_FILES_COMMONX86 44 - CSIDL_COMMON_TEMPLATES 45 - CSIDL_COMMON_DOCUMENTS 46 - CSIDL_COMMON_ADMINTOOLS 47 - CSIDL_ADMINTOOLS 48 - CSIDL_CONNECTIONS 49 - CSIDL_COMMON_MUSIC 53 - CSIDL_COMMON_PICTURES 54 - CSIDL_COMMON_VIDEO 55 - CSIDL_RESOURCES 56 - CSIDL_RESOURCES_LOCALIZED 57 - CSIDL_COMMON_OEM_LINKS 58 - CSIDL_CDBURN_AREA 59 - CSIDL_COMPUTERSNEARME 61 - CSIDL_FLAG_DONT_VERIFY 0x4000 - CSIDL_FLAG_CREATE 0x8000 - CSIDL_FLAG_MASK 0xFF00 - } - - set bCreat [expr {$create ? 1 : 0}] - - set path [string repeat \u0000 300] ;# MAX_PATH is actually 260 - - set ok [dll_SHGetSpecialFolderPath 0 $path $CSIDL($what) $bCreat] - - if {$ok} { - set ix [string first \u0000 $path] - if {$ix > 0} { - return [string range $path 0 [expr {$ix - 1}]] - } - } else { - return {} - } - } - + array set CSIDL { + CSIDL_DESKTOP 0 + CSIDL_INTERNET 1 + CSIDL_PROGRAMS 2 + CSIDL_CONTROLS 3 + CSIDL_PRINTERS 4 + CSIDL_PERSONAL 5 + CSIDL_FAVORITES 6 + CSIDL_STARTUP 7 + CSIDL_RECENT 8 + CSIDL_SENDTO 9 + CSIDL_BITBUCKET 10 + CSIDL_STARTMENU 11 + CSIDL_DESKTOPDIRECTORY 16 + CSIDL_DRIVES 17 + CSIDL_NETWORK 18 + CSIDL_NETHOOD 19 + CSIDL_FONTS 20 + CSIDL_TEMPLATES 21 + CSIDL_COMMON_STARTMENU 22 + CSIDL_COMMON_PROGRAMS 23 + CSIDL_COMMON_STARTUP 24 + CSIDL_COMMON_DESKTOPDIRECTORY 25 + CSIDL_APPDATA 26 + CSIDL_PRINTHOOD 27 + CSIDL_LOCAL_APPDATA 28 + CSIDL_ALTSTARTUP 29 + CSIDL_COMMON_ALTSTARTUP 30 + CSIDL_COMMON_FAVORITES 31 + CSIDL_INTERNET_CACHE 32 + CSIDL_COOKIES 33 + СSIDL_HISTORY 34 + CSIDL_COMMON_APPDATA 35 + CSIDL_WINDOWS 36 + CSIDL_SYSTEM 37 + CSIDL_PROGRAM_FILES 38 + СSIDL_MYPICTURES 39 + CSIDL_PROFILE 40 + СSIDL_SYSTEMX86 41 + CSIDL_PROGRAM_FILESX86 42 + CSIDL_PROGRAM_FILES_COMMON 43 + СSIDL_PROGRAM_FILES_COMMONX86 44 + CSIDL_COMMON_TEMPLATES 45 + CSIDL_COMMON_DOCUMENTS 46 + CSIDL_COMMON_ADMINTOOLS 47 + CSIDL_ADMINTOOLS 48 + CSIDL_CONNECTIONS 49 + CSIDL_COMMON_MUSIC 53 + CSIDL_COMMON_PICTURES 54 + CSIDL_COMMON_VIDEO 55 + CSIDL_RESOURCES 56 + CSIDL_RESOURCES_LOCALIZED 57 + CSIDL_COMMON_OEM_LINKS 58 + CSIDL_CDBURN_AREA 59 + CSIDL_COMPUTERSNEARME 61 + CSIDL_FLAG_DONT_VERIFY 0x4000 + CSIDL_FLAG_CREATE 0x8000 + CSIDL_FLAG_MASK 0xFF00 + } + + set bCreat [expr {$create ? 1 : 0}] + + set path [string repeat \u0000 300] ;# MAX_PATH is actually 260 + + set ok [dll_SHGetSpecialFolderPath 0 $path $CSIDL($what) $bCreat] + + if {$ok} { + set ix [string first \u0000 $path] + if {$ix > 0} { + return [string range $path 0 [expr {$ix - 1}]] + } + } else { + return {} + } + } + puts "appdata: [SHGetSpecialFolderPath CSIDL_APPDATA false]" -Запускать следует через **tclsh**, например, так: +Запускать следует через **tclsh**, например, так: C:\> tclsh sh.tcl -**wish** не имеет открытого канала **stdout** и **puts** там ничего интересного не делает. +**wish** не имеет открытого канала **stdout** и **puts** там ничего интересного не делает. -Можете так же поменять последнюю строку (с **puts**) на +Можете так же поменять последнюю строку (с **puts**) на tk_messageBox -message [SHGetSpecialFolderPath CSIDL_APPDATA false] -и запускать скрипт "просто", например, двойным щелчком мышью на его файле в Explorer. +и запускать скрипт "просто", например, двойным щелчком мышью на его файле в Explorer. ### Замечания -Вписал [статью в тиклевое вики](http://wiki.tcl.tk/17492). +Вписал [статью в тиклевое вики](http://wiki.tcl.tk/17492). #### ANSI (8-bit) vs Unicode (UTF-16) -* Не совсем ясно, доступна ли юникодная версия (SHGetSpecialFolderPathW) - в старых Win9x. Похоже, что доступна. -* Не совсем ясно поведение Ffild по отношению к строкам в UTF-16: приёмный - буфер должен быть MAX\_PATH _символов_? Тогда что имеется в виду: - тиклевые символы UTF-8 или виндовые символы UTF-16? +* Не совсем ясно, доступна ли юникодная версия (SHGetSpecialFolderPathW) в старых Win9x. Похоже, что доступна. +* Не совсем ясно поведение Ffild по отношению к строкам в UTF-16: приёмный буфер должен быть MAX\_PATH _символов_? Тогда что имеется в виду: тиклевые символы UTF-8 или виндовые символы UTF-16? -В любом случае, ANSI версия используется так: +В любом случае, ANSI версия используется так: ffidl::callout dll_SHGetSpecialFolderPath \ - {int pointer-utf8 int int} int \ - [ffidl::symbol shell32.dll SHGetSpecialFolderPathA] + {int pointer-utf8 int int} int \ + [ffidl::symbol shell32.dll SHGetSpecialFolderPathA] #### Реализация в Ткаббере -Потребует более серьёзного подхода: +Потребует более серьёзного подхода: + +* Пространство имён **config**; +* "Пустая" реализация SHGetSpecialFolderPath для платформ, отличных от Windows; +* Отслеживание успешного завершения создания callout'а для SHGetSpecialFolderPath с созданием пустой реализации (см. выше) в случае ошибки. -* Пространство имён **config**; -* "Пустая" реализация SHGetSpecialFolderPath для платформ, отличных от Windows; -* Отслеживание успешного завершения создания callout'а для SHGetSpecialFolderPath - с созданием пустой реализации (см. выше) в случае ошибки. + Index: wiki/ru/Google_Talk.md ================================================================== --- wiki/ru/Google_Talk.md +++ wiki/ru/Google_Talk.md @@ -1,6 +1,7 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Google_Talk/index.html) + # Google Talk Материал из Tkabber Wiki @@ -9,235 +10,173 @@ * [1 Требования к Ткабберу](#Требования_к_Ткабберу) * [2 Подключение (просто)](#Подключение_просто) * [3 Подключение (сложно)](#Подключение_сложно) * [4 Подключение через прокси (вернисаж)](#Подключение_через_прокси_вернисаж) * [5 Подключение к Google Talk (старый вариант заметки)](#Подключение_к_Google_Talk_старый_вариант_заметки) - * [5.1 Сюита для бубна и трёх напильников](#Сюита_для_бубна_и_трёх_напильников) - * [5.1.1 Защита канала/аутентификация](#Защита_канала_аутентификация) - * [5.1.2 Выяснение имени хоста по имени сервера](#Выяснение_имени_хоста_по_имени_сервера) + * [5.1 Сюита для бубна и трёх напильников](#Сюита_для_бубна_и_трёх_напильников) + * [5.1.1 Защита канала/аутентификация](#Защита_канала_аутентификация) + * [5.1.2 Выяснение имени хоста по имени сервера](#Выяснение_имени_хоста_по_имени_сервера) -## Требования к Ткабберу +# Требования к Ткабберу ![](../images/180px-Tkabber-Login-SSL.png) -Прежде всего, для подключения к серверу Google Talk (далее GTalk), в вашем Ткаббере ***обязательно** -должна быть поддержка [**SSL/TLS**](Между_офлайном_и_онлайном.md#SSL_TLS).* - -Это необходимо из-за того, что существует, в принципе, два способа подключения, -но оба они так или иначе требуют использования SSL. - -Наличие поддержки SSL можно выяснить, посмотрев на окно логина: оно должно содержать закладку, -в названии которой содержится слово "SSL". Если в вашем Ткаббере также есть поддержка -[**сжатия потока**](Low_traffic_HOWTO.md#Stream_Compression_zlib), то на этой закладке -будет надпись "SSL и сжатие". - -## Подключение (просто) +![](../images/magnify-clip.png) + +Прежде всего, для подключения к серверу Google Talk (далее GTalk), в вашем Ткаббере _**обязательно** должна быть поддержка [SSL/TLS](Между_офлайном_и_онлайном.md#SSL_TLS)._ + +Это необходимо из-за того, что существует, в принципе, два способа подключения, но оба они так или иначе требуют использования SSL. + +Наличие поддержки SSL можно выяснить, посмотрев на окно логина: оно должно содержать закладку, в названии которой содержится слово "SSL". Если в вашем Ткаббере также есть поддержка [сжатия потока](Low_traffic_HOWTO.md#Stream_Compression_zlib), то на этой закладке будет надпись "SSL и сжатие". + +# Подключение (просто) ![](../images/180px-Tkabber-GTalk-creds.png) -Во-первых, правильно укажите имя сервера и свою учётную запись в окне логина: - -##### Пользователь  - -> имя аккаунта на `gmail.com`; например, для `vasya@gmail.com` это будет "vasya" - -##### Сервер  - -> `gmail.com` - -##### Пароль  - -> пароль от аккаунта на `gmail.com` - -Теперь опишем "канонический" вариант настроек для подключения: - -##### Вкладка "Соединение"  - -> Убедитесь, что флажок "Явно указать адрес и порт для подключения" выключен. - -##### Вкладка "Аутентификация"  - -> Убедитесь, что включен флажок "Использовать SASL для аутентификации". - -##### Вкладка "SSL"  - -> Убедитесь, что включена опция "Шифрование (STARTTLS)". - -##### Вкладка "HTTP-соедниение"  - -> Флажок "Подключиться с использованием HTTP" должен быть выключен. - -Жмите "Подключиться" — на современном Ткаббере с обычным подключением к сети всё должно получиться. - -Если "всё само" не получилось, придётся осиливать следующий раздел. - -## Подключение (сложно) -Может возникнуть несколько проблем с подключением. И они могут зависеть как -от вашего подключения к сети, так и от версий пакетов Tcl, доступных к Ткабберу. - -С сетью могут возникнуть два класса проблем: - -1. Проблемы с DNS при попытке получить SRV-записи для XMPP-сервера, обслуживающего домен "gmail.com". -1. Проблемы с HTTP/HTTPS-прокси и "хитрой" аутентификацией на серверах Google Talk. - -Первая проблема воспета в [**отдельной статье**](Ткаббер_и_DNS.md), и на ней мы останавливаться -не будем: симптомы и решения изложены там, а вот вторая проблема заслуживает развёрнутого рассмотрения. - -Серверы GTalk нарушают [букву стандарта](http://www.xmpp.org/rfcs/rfc3920.html#security-mandatory) в том, -что касается использования протокола [SASL](http://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer) -для аутентификации клиентов на сервере, предлагая только два механизма аутентификации: **PLAIN** и -[**X-GOOGLE-TOKEN**](http://dystopics.dump.be/2006/02/04/the-mysteries-of-x-google-token-and-why-it-matters/), -который является проприетарным и нестандартным, и этот **X-GOOGLE-TOKEN** портит всю картину. - -Дело в том, что хотя свежие версии [пакета SASL](http://tcllib.sourceforge.net/doc/sasl.html) -из **Tcllib**, которым обычно пользуется Ткаббер для поддержки SASL, и умеют **X-GOOGLE-TOKEN**, -этот механизм отличается от обычных (стандартных) механизмов тем, что _для его работы клиенту -требуется устанавливать **HTTPS-соединение** с сервером._ При этом _настройки прокси-сервера, -предлагаемые Ткаббером_ (в окне логина) к этому соединению ***не** относятся.* - -Это создаёт главную проблему: - -> Если вы соединяетесь с интернетом через прокси-сервер, вы не можете использовать - аутентификацию при помощи **X-GOOGLE-TOKEN**. - -Во всяком случае, это верно для всех версий Ткаббера, включая 0.10.0 и текущую "альфу". - -Как (будет) объяснено [**здесь**](Между_офлайном_и_онлайном.md), защита канала при помощи -TLS, если она используется, должна быть установлена раньше, чем будет произведена -аутентификация (например, при помощи SASL). При этом механизмы аутентификации, предлагаемые -сервером в зависимости от того, защищён канал или нет, могут различаться. -Именно это делают серверы GTalk: - -* Если клиент не установил защиту канала при помощи TLS, сервер предложит ровно один - механизм аутентификации — **X-GOOGLE-TOKEN**; он является нестандартным, но - обеспечиывает аутентификацию без передачи пароля по линии связи. -* Если клиент защитил канал при помощи TLS, сервер предложит два механизма: **X-GOOGLE-TOKEN** - и (стандартный) **PLAIN**, который передаёт пароль в открытом виде - (именно поэтому он предлагается только при наличии TLS). - -Посему имеем два варианта подключения: с использованием **X-GOOGLE-TOKEN** и без него — с использованием **PLAIN**. - -> Нелишним будет подчеркнуть, что _оба метода требуют наличия поддержки TLS/SSL в Ткаббере._ - -О наличии таковой поддержки можно легко узнать, посмотрев в окно логина: если там есть -вкладка "SSL" (или "SSL и сжатие"), то поддержка SSL/TLS Ткабберу доступна. Если её там -нет, ставьте необходимый [пакет поддержки TLS](http://tls.sourceforge.net). - -Два метода подключения таковы: - -1. Используем **X-GOOGLE-TOKEN**. Этот метод является "стандартным" для Google Talk, но он _не - работает через HTTP(S)-прокси._ Требования к системе и настройки таковы: - * Доступный Ткабберу [модуль SASL](http://tcllib.sourceforge.net/doc/sasl.html) из **Tcllib** - должен иметь поддержку данного метода аутентификации. Проверить это можно, выполнив - в [**консоли Ткаббера**](Ткаббер_ЧаВо.md#Консоль_Ткаббера) команду - - package require SASL::XGoogleToken - - Если она выполнилась успешно, вернув версию пакета (например, "1.0.1"), поддержка **X-GOOGLE-TOKEN** - Ткабберу доступна, иначе — читайте про второй вариант или обновляйте **Tcllib**. - * На странице "Аутентификация" окна логина включите флажки "Использовать SASL для аутентификации". - * Если у вас Ткаббер версии 0.10.1 и выше, убедитесь, что включён флажок - "Разрешить механизм SASL X-GOOGLE-TOKEN" на той же странице. -1. Не используем **X-GOOGLE-TOKEN**, но подключаемся через STARTTLS или SSL. Этот метод - несколько менее стандартен с точки зрения Google Talk, зато работает через любые прокси. - Требования к системе и настройки таковы: - * Нужно запретить использование **X-GOOGLE-TOKEN**: - * Если у вас Ткаббер версии ниже 0.10.1, и у вас нет на странице "Аутентификация" - окна логина флажка "Разрешить механизм SASL X-GOOGLE-TOKEN", то вам нужно отключить - флажок "Использовать SASL для аутентификации". (При этом аутентификация через SASL - отключается полностью, но соединению с Google Talk это не помешает.) - * Если у вас Ткаббер версии 0.10.1 и выше, просто отключите флажок "Разрешить - механизм SASL X-GOOGLE-TOKEN" на странице "Аутентификация" окна логина. - * Нужно включить использование TLS. Для этого переключатель на странице "SSL" - (или "SSL и сжатие") должен находиться либо в положении "Шифрование (STARTTLS)" - либо — "Шифрование (старый SSL)". - * Нужно разрешить использовать передачу пароля в виде открытого текста при аутентификации, - включив флажок "Разрешить механизмы аутентификации, использующие открытый текст" на - странице "Аутентификация" окна логина. (Пароль это не скомпрометирует, т.к. - на момент его передачи канал связи будет защищён с помощью TLS.) - -**Небольшая подсказка:** приняв указанный вами [**ресурс**](Ткаббер_ЧаВо.md#Ресурс), сервер -Google Talk добавит к нему случайным образом сгенерированную галиматью. Чтобы этого не -происходило, отключите использование SASL для аутентификации, отключив флажок "Использовать -SASL для аутентификации" на странице "Аутентификация" окна логина, а так же переставьте -переключатель на странице "SSL" ("SSL и сжатие") в позицию "Шифрование (старый SSL)". -При этом отключается механизм ["resource binding"](http://www.xmpp.org/rfcs/rfc3920.html#bind) -и сервер примет тот ресурс, который вы указали, без изменений. - -Отдельное спасибо [**Teo**](Участник_Teo.md) за разъяснения. - -## Подключение через прокси (вернисаж) -![Tkabber-gmail-proxy-creds.png](../images/Tkabber-gmail-proxy-creds.png) - -![Tkabber-gmail-proxy-conn.png](../images/Tkabber-gmail-proxy-conn.png) - -![Tkabber-gmail-proxy-auth.png](../images/Tkabber-gmail-proxy-auth.png) - -![Tkabber-gmail-proxy-SSL.png](../images/Tkabber-gmail-proxy-SSL.png) - -![Tkabber-gmail-proxy-http-polling.png](../images/Tkabber-gmail-proxy-http-polling.png) - -![Tkabber-gmail-proxy-proxy.png](../images/Tkabber-gmail-proxy-proxy.png) - -## Подключение к Google Talk (старый вариант заметки) -### Сюита для бубна и трёх напильников - -Некоторые настройки при подключении к gtalk зависят от версии Ткаббера _и_ от -версии пакетов **dns** и **SASL** (они входят в **tcllib**), доступных Ткабберу. - -Вот эти настройки: - -#### Защита канала/аутентификация - -Аутентификация в gtalk возможна _только_ при помощи протокола SASL, non-SASL -аутентификация не поддерживается. - -Gtalk реализует собственный механизм аутентификации для протокола -SASL: ["X-GOOGLE-TOKEN"](http://dystopics.dump.be/2006/02/04/the-mysteries-of-x-google-token-and-why-it-matters/). -Он является "защищённым", и на открытом канале (до установления слоя TLS) gtalk предлагает _только_ -этот механизм. После того, как канал защищён при помощи TLS (если стороны согласились использовать -TLS), gtalk также предлагает использовать второй метод — "PLAIN". - -Это означает, что для успешной аутентификации на GTalk вам требуется включённая опция -"Использовать SASL для аутентификации", а также минимум одно из двух: - -* Если доступный Ткабберу пакет **SASL** поддерживает механизм "X-GOOGLE-TOKEN", то Вы можете - не использовать STARTTLS и _не_ включать опцию "Разрешить механизмы аутентификации, - использующие открытый текст" (то есть механизм SASL "PLAIN"); -* В противном случае вам понадобится включить опцию "Шифрование (STARTTLS)" _и_ опцию - "Разрешить механизмы аутентификации, использующие открытый текст". - -SASL в Ткаббере поддерживается при помощи пакета **SASL** из библиотеки **tcllib**. Поддержка -указанного механизма появилась в **tcllib** в апреле 2006 года; стабильная версия **tcllib** -с этой фичей — 1.9, версия **SASL** из неё — 1.1.0. - -> Текущий официальный старкит/старпак Ткаббера 0.9.9 содержит **tcllib** версии - 1.7 и **SASL** версии 1.0.0, то есть поддержки "X-GOOGLE-TOKEN" там _нет._ - ![(!)](../images/Hammer.png) **Сделать:** Выяснить и дописать про версию 0.10.x - -Проверить доступную Ткабберу версию **SASL** можно, набрав в его консоли: +![](../images/magnify-clip.png) + +Во-первых, правильно укажите имя сервера и свою учётную запись в окне логина: + + Пользователь  + + имя аккаунта на `gmail.com`; например, для `vasya@gmail.com` это будет "vasya" + + Сервер  + + `gmail.com` + + Пароль  + + пароль от аккаунта на `gmail.com` + +Теперь опишем "канонический" вариант настроек для подключения: + + Вкладка "Соедниение"  + + Убедитесь, что флажок "Явно указать адрес и порт для подключения" выключен. + + Вкладка "Аутентификация"  + + Убедитесь, что включен флажок "Использовать SASL для аутентификации". + + Вкладка "SSL"  + + Убедитесь, что включена опция "Шифрование (STARTTLS)". + + Вкладка "HTTP-соедниение"  + + Флажок "Подключиться с использованием HTTP" должен быть выключен. + +Жмите "Подключиться" — на современном Ткаббере с обычным подключением к сети всё должно получиться. + +Если "всё само" не получилось, придётся осиливать следующий раздел. + +# Подключение (сложно) +Может возникнуть несколько проблем с подключением. И они могут зависеть как от вашего подключения к сети, так и от версий пакетов Tcl, доступных к Ткабберу. + +С сетью могут возникнуть два класса проблем: + +1. Проблемы с DNS при попытке получить SRV-записи для XMPP-сервера, обслуживающего домен "gmail.com". +1. Проблемы с HTTP/HTTPS-прокси и "хитрой" аутентификацией на серверах Google Talk. + +Первая проблема воспета в [отдельной статье](Ткаббер_и_DNS.md), и на ней мы останавливаться не будем: симптомы и решения изложены там, а вот вторая проблема заслуживает развёрнутого рассмотрения. + +Серверы GTalk нарушают [букву стандарта](http://www.xmpp.org/rfcs/rfc3920.html#security-mandatory) в том, что касается использования протокола [SASL](http://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer) для аутентификации клиентов на сервере, предлагая только два механизма аутентификации: **PLAIN** и [**X-GOOGLE-TOKEN**](http://dystopics.dump.be/2006/02/04/the-mysteries-of-x-google-token-and-why-it-matters/), который является проприетарным и нестандартным, и этот **X-GOOGLE-TOKEN** портит всю картину. + +Дело в том, что хотя свежие версии [пакета SASL](http://tcllib.sourceforge.net/doc/sasl.html) из **Tcllib**, которым обычно пользуется Ткаббер для поддержки SASL, и умеют **X-GOOGLE-TOKEN**, этот механизм отличается от обычных (стандартных) механизмов тем, что _для его работы клиенту требуется устанавливать **HTTPS-соединение** с сервером._ При этом _настройки прокси-сервера, предлагаемые Ткаббером_ (в окне логина) к этому соединению _**не** относятся._ + +Это создаёт главную проблему: + + Если вы соединяетесь с интернетом через прокси-сервер, вы не можете использовать аутентификацию при помощи **X-GOOGLE-TOKEN**. + +Во всяком случае, это верно для всех версий Ткаббера, включая 0.10.0 и текущую "альфу". + +Как (будет) объяснено [здесь](Между_офлайном_и_онлайном.md), защита канала при помощи TLS, если она используется, должна быть установлена раньше, чем будет произведена аутентификация (например, при помощи SASL). При этом механизмы аутентификации, предлагаемые сервером в зависимости от того, защищён канал или нет, могут различаться. Именно это делают серверы GTalk: + +* Если клиент не установил защиту канала при помощи TLS, сервер предложит ровно один механизм аутентификации — **X-GOOGLE-TOKEN**; он является нестандартным, но обеспечиывает аутентификацию без передачи пароля по линии связи. +* Если клиент защитил канал при помощи TLS, сервер предложит два механизма: **X-GOOGLE-TOKEN** и (стандартный) **PLAIN**, который передаёт пароль в открытом виде (именно поэтому он предлагается только при наличии TLS). + +Посему имеем два варианта подключения: с использованием **X-GOOGLE-TOKEN** и без него — с использованием **PLAIN**. + + Нелишним будет подчеркнуть, что _оба метода требуют наличия поддержки TLS/SSL в Ткаббере._ + +О наличии таковой поддержки можно легко узнать, посмотрев в окно логина: если там есть вкладка "SSL" (или "SSL и сжатие"), то поддержка SSL/TLS Ткабберу доступна. Если её там нет, ставьте необходимый [пакет поддержки TLS](http://tls.sourceforge.net). + +Два метода подключения таковы: + +1. Используем **X-GOOGLE-TOKEN**. Этот метод является "станартным" для Google Talk, но он _не работает через HTTP(S)-прокси._ Требования к системе и настройки таковы: + * Доступный Ткабберу [модуль SASL](http://tcllib.sourceforge.net/doc/sasl.html) из **Tcllib** должен иметь поддержку данного метода аутентификации. Проверить это можно, выполнив в [консоли Ткаббера](Ткаббер_ЧаВо.md#Консоль_Ткаббера) команду + package require SASL::XGoogleToken + Если она выполнилась успешно, вернув версию пакета (например, "1.0.1"), поддержка **X-GOOGLE-TOKEN** Ткабберу доступна, иначе — читайте про второй вариант или обновляйте **Tcllib**. + * На странице "Аутентификация" окна логина включите флажки "Использовать SASL для аутентификации". + * Если у вас Ткаббер версии 0.10.1 и выше, убедитесь, что включён флажок "Разрешить механизм SASL X-GOOGLE-TOKEN" на той же странице. + +1. Не используем **X-GOOGLE-TOKEN**, но подключаемся через STARTTLS или SSL. Этот метод несколько менее стандартен с точки зрения Google Talk, зато работает через любые прокси. Требования к системе и настройки таковы: + * Нужно запретить использование **X-GOOGLE-TOKEN**: + * Если у вас Ткаббер версии ниже 0.10.1, и у вас нет на странице "Аутентификация" окна логина флажка "Разрешить механизм SASL X-GOOGLE-TOKEN", то вам нужно отключить флажок "Использовать SASL для аутентификации". (При этом аутентификация через SASL отключается полностью, но соединению с Google Talk это не помешает.) + * Если у вас Ткаббер версии 0.10.1 и выше, просто отключите флажок "Разрешить механизм SASL X-GOOGLE-TOKEN" на странице "Аутентификация" окна логина. + + * Нужно включить использование TLS. Для этого переключатель на странице "SSL" (или "SSL и сжатие") должен находиться либо в положении "Шифрование (STARTTLS)" либо — "Шифрование (старый SSL)". + * Нужно разрешить использовать передачу пароля в виде открытого текста при аутентификации, включив флажок "Разрешить механизмы аутентификации, использующие открытый текст" на странице "Аутентификация" окна логина. (Пароль это не скомпрометирует, т.к. на момент его передачи канал связи будет защищён с помощью TLS.) + +**Небольшая подсказка:** приняв указанный вами [ресурс](Ткаббер_ЧаВо.md#Ресурс), сервер Google Talk добавит к нему случайным образом сгенерированную галиматью. Чтобы этого не происходило, отключите использование SASL для аутентификации, отключив флажок "Использовать SASL для аутентификации" на странице "Аутентификация" окна логина, а так же переставьте переключатель на странице "SSL" ("SSL и сжатие") в позицию "Шифрование (старый SSL)". При этом отключается механизм ["resource binding"](http://www.xmpp.org/rfcs/rfc3920.html#bind) и сервер примет тот ресурс, который вы указали, без изменений. + +Отдельное спасибо [teo](Участник_Teo.md) за разъяснения. + +# Подключение через прокси (вернисаж) +![Tkabber-gmail-proxy-creds.png](../images/Tkabber-gmail-proxy-creds.png) + +![Tkabber-gmail-proxy-conn.png](../images/Tkabber-gmail-proxy-conn.png) + +![Tkabber-gmail-proxy-auth.png](../images/Tkabber-gmail-proxy-auth.png) + +![Tkabber-gmail-proxy-SSL.png](../images/Tkabber-gmail-proxy-SSL.png) + +![Tkabber-gmail-proxy-http-polling.png](../images/Tkabber-gmail-proxy-http-polling.png) + +![Tkabber-gmail-proxy-proxy.png](../images/Tkabber-gmail-proxy-proxy.png) + +# Подключение к Google Talk (старый вариант заметки) +## Сюита для бубна и трёх напильников + +Некоторые настройки при подключении к gtalk зависят от версии Ткаббера _и_ от версии пакетов **dns** и **SASL** (они входят в **tcllib**), доступных Ткабберу. + +Вот эти настройки: + +### Защита канала/аутентификация + +Аутентификация в gtalk возможна _только_ при помощи протокола SASL, non-SASL аутентификация не поддерживается. + +Gtalk реализует собственный механизм аутентификации для протокола SASL: ["X-GOOGLE-TOKEN"](http://dystopics.dump.be/2006/02/04/the-mysteries-of-x-google-token-and-why-it-matters/). Он является "защищённым", и на открытом канале (до установления слоя TLS) gtalk предлагает _только_ этот механизм. После того, как канал защищён при помощи TLS (если стороны согласились использовать TLS), gtalk также предлагает использовать второй метод — "PLAIN". + +Это означает, что для успешной аутентификации на GTalk вам требуется включённая опция "Использовать SASL для аутентификации", а также минимум одно из двух: + +* Если доступный Ткабберу пакет **SASL** поддерживает механизм "X-GOOGLE-TOKEN", то Вы можете не использовать STARTTLS и _не_ включать опцию "Разрешить механизмы аутентификации, использующие открытый текст" (то есть механизм SASL "PLAIN"); +* В противном случае вам понадобится включить опцию "Шифрование (STARTTLS)" _и_ опцию "Разрешить механизмы аутентификации, использующие открытый текст". + +SASL в Ткаббере поддерживается при помощи пакета **SASL** из библиотеки **tcllib**. Поддержка указанного механизма появилась в **tcllib** в апреле 2006 года; стабильная версия **tcllib** с этой фичей — 1.9, версия **SASL** из неё — 1.1.0. + + Текущий официальный старкит/старпак Ткаббера 0.9.9 содержит **tcllib** версии 1.7 и **SASL** версии 1.0.0, то есть поддержки "X-GOOGLE-TOKEN" там _нет._ ![(!)](../images/Hammer.png) **Сделать:** Выяснить и дописать про версию 0.10.x + +Проверить доступную Ткабберу версию **SASL** можно, набрав в его консоли: package versions SASL -Также для подключения к GTalk требуется наличие пакета **tls**. При отсутствии этого пакета, в окошке логина отсутствует закладка **SSL**. Проверить доступную Ткабберу версию **tls** можно, набрав в его консоли: +Также для подключения к GTalk требуется наличие пакета **tls**. При отсутствии этого пакета, в окошке логина отсутствует закладка **SSL**. Проверить доступную Ткабберу версию **tls** можно, набрав в его консоли: package version tls -#### Выяснение имени хоста по имени сервера - -Имя хоста (компьютера), к которому должен присоединиться XMPP-клиент, в общем случае -не обязано совпадать с именем XMPP-сервера. Например, если Вася имеет аккаунт на -сервере `lamerz.net` (и имеет JID вроде `vasya@lamerz.net`), то имя реального сервера, -обслуживающего Васю, не обязано быть "lamerz.net". - -Для выяснения имени хоста по имени сервера существует стандартный механизм SRV DNS записей. - -![(!)](../images/Hammer.png) **Сделать:** Бла-бла-бла... - -Про поддержку SRV записей читайте [**здесь**](Между_офлайном_и_онлайном.md). - -Если такой поддержки у пакета **dns**, доступной Вашей версии Ткаббера, нет, то Вам -придётся прописать имя хоста "talk.google.com" в настройке "Хост", которая разрешается -включением флажка "Явно указать сервер и порт для соединения". Номер порта должен быть 5222. - -Текущие официальные старкиты/старпаки 0.9.9 содержат пакет **dns** версии 1.2.0, поэтому -поддержки SRV DNS записей там _нет._ +### Выяснение имени хоста по имени сервера + +Имя хоста (компьютера), к которому должен присоединиться XMPP-клиент, в общем случае не обязано совпадать с именем XMPP-сервера. Например, если Вася имеет аккаунт на сервере `lamerz.net` (и имеет JID вроде `vasya@lamerz.net`), то имя реального сервера, обслуживающего Васю, не обязано быть "lamerz.net". + +Для выяснения имени хоста по имени сервера существует стандартный механизм SRV DNS записей. + +![(!)](../images/Hammer.png) **Сделать:** Бла-бла-бла... + +Про поддержку SRV записей читайте [здесь](Между_офлайном_и_онлайном.md). + +Если такой поддержки у пакета **dns**, доступной Вашей версии Ткаббера, нет, то Вам придётся прописать имя хоста "talk.google.com" в настройке "Хост", которая разрешается включением флажка "Явно указать сервер и порт для соединения". Номер порта должен быть 5222. + + Текущие официальные старкиты/старпаки 0.9.9 содержат пакет **dns** версии 1.2.0, поэтому поддержки SRV DNS записей там _нет._ + + Index: wiki/ru/Low_traffic_HOWTO.md ================================================================== --- wiki/ru/Low_traffic_HOWTO.md +++ wiki/ru/Low_traffic_HOWTO.md @@ -1,434 +1,282 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Low_traffic_HOWTO/index.html) + # Low traffic HOWTO Материал из Tkabber Wiki -Здесь рассказано как уменьшить трафик, "развиваемый" Ткаббером, для пользователей очень дорого интернета. +Здесь рассказано как уменьшить трафик, "развиваемый" Ткаббером, для пользователей очень дорого интернета. -Важно понимать, что далеко не все описанные здесь приёмы проходят без последствий: большинство -действий по уменьшению трафика, не относящихся к его сжатию, означают _отключение_ тех или иных -"фич" Ткаббера, то есть — _уменьшение функциональности_ этого клиента. +Важно понимать, что далеко не все описанные здесь приёмы проходят без последствий: большинство действий по уменьшению трафика, не относящихся к его сжатию, означают _отключение_ тех или иных "фич" Ткаббера, то есть — _уменьшение функциональности_ этого клиента. ## Содержание * [1 Сжатие трафика](#Сжатие_трафика) - * [1.1 Stream Compression/zlib](#Stream_Compression_zlib) - * [1.1.1 "Обычный" Ткаббер](#Обычный_Ткаббер) - * [1.1.2 Ткаббер-пак (Win32)](#Ткаббер-пак_Win32) - * [1.1.3 Старпаки Ткаббера](#Старпаки_Ткаббера) - * [1.2 PGP/GnuPG](#PGP_GnuPG) + * [1.1 Stream Compression/zlib](#Stream_Compression_zlib) + * [1.1.1 "Обычный" Ткаббер](#Обычный_Ткаббер) + * [1.1.1 Установка ztcl и tclmore в Windows](#Установка_ztcl_и_tclmore_в_Windows) + * [1.1.2 Ткаббер-пак (Win32)](#Ткаббер-пак_Win32) + * [1.1.3 Старпаки Ткаббера](#Старпаки_Ткаббера) + * [1.2 PGP/GnuPG](#PGP_GnuPG) * [2 Уменьшение XML-трафика](#Уменьшение_XML-трафика) - * [2.1 Замечание о бинарных данных](#Замечание_о_бинарных_данных) - * [2.2 Настройки Ткаббера](#Настройки_Ткаббера) - * [2.3 Настройка пользователя](#Настройка_пользователя) - * [2.4 Настройка сервера](#Настройка_сервера) + * [2.1 Замечание о бинарных данных](#Замечание_о_бинарных_данных) + * [2.2 Настройки Ткаббера](#Настройки_Ткаббера) + * [2.3 Настройка пользователя](#Настройка_пользователя) + * [2.4 Настройка сервера](#Настройка_сервера) * [3 Средства самоконтроля](#Средства_самоконтроля) - * [3.1 Плагин Traffic](#Плагин_Traffic) - * [3.2 Сетевые средства](#Сетевые_средства) + * [3.1 Плагин Traffic](#Плагин_Traffic) + * [3.2 Сетевые средства](#Сетевые_средства) * [4 Невошедшее](#Невошедшее) -## Сжатие трафика -Это — единственный по-настоящему действенный способ уменьшить трафик. - -Существует, в принципе, три варианта сжатия трафика, из них реальный интерес представляет -только первый — "Stream Compression": - -##### [XEP-0138: Stream Compression](http://www.xmpp.org/extensions/xep-0138.html)  - -> Использует один из зарегистрированных (и поддерживаемых) в XMPP методов сжатия и - сжимает _весь_ XML-поток (то есть компрессор находится между XML-потоком и TCP/IP-потоком - в сетевом стеке). Ткаббер поддерживает метод сжатия **zlib**. - -##### Сжатие в протоколе TLS  - -> Формально протокол TLS (SSL) поддерживает сжатие, однако, этот вопрос на уровне - спецификации протокола проработан плохо — процитируем [SSL\_COMP\_add\_compression\_method(3)](http://www.openssl.org/docs/ssl/SSL_COMP_add_compression_method.html) - из OpenSSL: -> > _The TLS standard (or SSLv3) allows the integration of compression methods into the communication. - The TLS RFC does however not specify compression methods or their corresponding identifiers, - so there is currently no compatible way to integrate compression with unknown peers. It is - therefore currently not recommended to integrate compression into applications. Applications - for non-public use may agree on certain compression methods. Using different compression - methods with the same identifier will lead to connection failure._ -> Кроме того, в пакете [tcltls](http://tls.sourceforge.net), который служит прослойкой между Ткаббером и OpenSSL, отсутствуют "крутилки" для управления сжатием; статус этой фичи в драйвере TLS, реализованном в [ejabberd](http://ejabberd.jabber.ru), также неизвестен. Одним словом, _сжатие средствами TLS в Ткаббере невозможно._ - -##### PGP (GnuPG)  - -> _PGP сжимает данные перед их шифрованием,_ что, в принципе, способно уменьшить трафик. - Однако, не надо быть чрезмерно оптимистичными относительно этого способа; - об этом — читайте [**ниже**](#PGP_GnuPG). - -_Важно понимать, что **Stream Compression не может работать вместе с TLS (SSL),** то есть Вам -придётся выбирать между сжатием и защитой канала._ По крайней -мере [в ejabberd они вместе не работают](https://support.process-one.net/browse/EJAB-499), -а потому и Ткаббер не даст включить их одновременно. - -О том, что Вы теряете, отказываясь от SSL, можно прочитать [**здесь**](Между_офлайном_и_онлайном.md#Защита_потока). - -Стоит добавить, что в контексте XMPP практически невозможно достичь такой же степени -сжатия, которую способны показать алгортимы zlib на "простых файлах", в силу того, -что в Stream Compression они рассматривают отдельно каждую [**станцу**](Терминология.md#Станца_stanza), -а не весь сплошной XML-поток. Это происходит из-за того, что требуется обеспечивать -передачу "почти в реальном времени" и передавать станцы по мере их готовности к передаче; -сжатие же файлов может рассматривать такое количество байт, которое ограничено лишь -размерами внутренних буферов, словаря, и требованиями к вычислительным ресурсам. - -### Stream Compression/zlib - -#### "Обычный" Ткаббер - -Для включения сжатия в "обычном" Ткаббере Вам потребуется установить пакет **ztcl** -и пакет **tclmore**, от которого тот зависит (о том, где их взять, — чуть ниже). - -Установив пакет, перезапустите Ткаббер. При этом в окне логина закладка **SSL** будет -называться теперь **SSL & Сжатие.** Идите туда и отметьте галочку "Сжатие". - -**Где взять:** - -* Исходный код: - * [ztcl](http://sgolovan.nes.ru/jabber/ztcl/ztcl/ztcl_1.0b4_src.tar.gz) - * [tclmore](http://sgolovan.nes.ru/jabber/ztcl/tclmore/tclmore_0.7b1_src.tar.gz) - -(Раньше они хостились в [соответствующих](https://gna.org/projects/ztcl/) [проектах](https://gna.org/projects/tclmore/) -на gna.org, но они были удалены из-за неактивности автора.) - -* Неофициальные сборки: - * Пакеты для Debian sarge авторства Сергея Голованя [**Teo**](Участник_Teo.md) доступны - в [его репозитории](http://people.debian.org/~sgolovan/debian/) — найдите ниже вопрос - про этот репозиторий и действуйте в соответствии с инструкциями. - * [**eXire**](Участник_EXire.md) поддерживает [пакеты для Arch Linux](http://exire.dyndns.org:8081/arch/repo). - * Mellon собрал эти пакеты для [Gentoo](http://www.gentoo.org) — они доступны в её - багзилле: [tclmore](http://bugs.gentoo.org/show_bug.cgi?id=205412), [ztcl](http://bugs.gentoo.org/show_bug.cgi?id=205413). - * Также пакеты должны быть доступны в [портах FreeBSD](http://portsmon.freebsd.org/portoverview.py?category=devel&portname=ztcl). - * [**kostix**](Участник_Kostix.md) собрал оба пакета под Windows; их установке посвящён следующий раздел. - -##### Установка ztcl и tclmore в Windows - -Во-первых, вам понадобятся сами пакеты **ztcl** и **tclmore**, собранные под Win32. -Они доступны [здесь](http://sgolovan.nes.ru/jabber/ztcl/). - -Для установки необходимо распаковать пакеты в каталог модулей тикля (обычно это **C:\\Tcl\\lib**). - -Во-вторых, Вам понадобится поставить Win32-версию библиотеки **zlib**, которую следует -взять [здесь](http://gnuwin32.sourceforge.net/packages/zlib.htm). - -**Установка библиотеки zlib** - -Из скачанного архива вам потребуется файл **zlib1.dll**. Его нужно положить в любой каталог, -содержащийся в переменной окружения **PATH**. Если эта фраза Вам ни о чём не говорит, у Вас есть три варианта: - -* [**Обучить**](Настройка_Ткаббера__азы_и_глубже.md) себя локально; -* [Обучить](http://www.ozon.ru/context/detail/id/2988356/) себя глобально; -* Тупо положить **zlib1.dll** в каталог **C:\\Windows\\system32**, если с предыдущими пунктами ничего не вышло. - -**Вниманию пользователей Windows XP 64-bit Edition:** поскольку **ztcl** и **tclmore** собраны -под x86, они требуют **zlib**, собранную также под x86 (именно такая и находится по ссылке, -приведённой выше). Однако, имейте в виду две вещи: - -* **zlib1.dll** из пакета **zlib** _не должна_ лежать в **%WINDIR%\\system32** из-за того, - что там ищутся только "родные" (64-битные) библиотеки. Положите её в **%WINDIR%\\system** — она - как раз предназначена для "старых", 32-битных библиотек. -* [Доступная в Интернет версия **zlib1.dll**, собранная под x64](http://www.winimage.com/zLibDll/), - с ztcl _не работает._ -* На всякий случай: бессмысленно просить авторов собрать библиотеки под x64 — это потребует - 64-битных версий всего Tcl/Tk и всех остальных бинарных пакетов. - -#### Ткаббер-пак (Win32) - -[**Kostix**](Участник_Kostix.md) собрал [Ткаббер-пак под Windows](http://tkabber.jabber.ru/tkabber-pack/). -Он поддерживает сжатие (как и все возможные расширения Ткаббера и стандартные плагины) "из коробки". - -#### Старпаки Ткаббера - -_Пользователи старпака_ использовать внешние модули, в принципе, могут, но их прикручивание -связано с серьёзными трудностями (особенно в случае с **ztcl**). - -Вследствие [**некоторых проблем**](Старпак_и_сжатие.md) поддержка сжатия в старпаке — вещь -нетривиальная и требующая серьёзных "приседаний" для реализации. - -Посему официальные старпаки пока что сжатие _не поддерживают_. Про неофициальные -старпаки с поддержкой сжатия нам также неизвестно. - -Более подробно о внешних старкитах к "упакованным" дистрибутивам Ткаббера -рассказано [**здесь**](Проблемы_со_звуком.md#В_старпаке_старките_нет_звука). - -### PGP/GnuPG - -У сжатия в PGP есть две проблемы: - -* В отличие от Stream Compression, который сжимает каждую [**станцу**](Терминология.md#Станца_stanza) - перед отправкой, PGP сжимает _текст_ каждого сообщения перед шифрованием. После этого зашифрованный - текст передаётся "вместо" оригинального сообщения, _будучи закодирован при помощи - [base64](http://ru.wikipedia.org/wiki/Base64)._ Как известно, этот метод кодирования потока байтов - с кодами 0..255 в поток символов ASCII способен увеличить размер оригинального сообщения на 30%, - что может эффективно "сожрать" выгоду от сжатия, особенно на небольших сообщениях. -* Кроме того, PGP подписывает каждое отправляемое сообщение, и эта подпись также - представляет собой элемент XML, содержащий около 100 символов **base64**. - -## Уменьшение XML-трафика -Следовать указаниям этого раздела стоит лишь в том случае, если у вас ничего не вышло с **zlib**, -или вы по каким-то причинам не можете его использовать (хотя единственная _серьёзная_ -причина — это необходимость использовать SSL). - -Действия, предложенные здесь, преследуют цель уменьшения количества XML-данных, -пересылаемых в ходе соединения. - -### Замечание о бинарных данных - -Протокол XMPP является в некотором роде "ASCII-протоколом" — любые бинарные данные -вроде RAR-архивов и картинок передаются им в виде **base64**-представления -оригинальных данных. Поэтому имейте в виду, что картинка размером 5 килобайт -"на линии" будет весить до 6.5 килобайт. - -### Настройки Ткаббера - -Ещё раз напомним, что в борьбе с трафиком вы легко можете побороть функциональность -и удобство работы! Поэтому руководствуйтесь принципом: - -> _семь раз отмерь, один — отрежь_ - -и глубоко обдумывайте каждый пункт. - -Пункты расположены по _предполагаемой_ (автором) "трафикопрожорливости". - -##### Внутриканальная передача файлов  - -> весьма неэффективна в плане использования трафика, так как файл фактически передаётся - в виде шестибитного текста (**base64**). - -##### Аватары  - -> В отличие от эмоциконок (смайликов) аватары посылаются _и принимаются_ в виде картинок. - Картинки бывают довольно большими. Поэтому, если Вы не хотите тратить свой трафик на эту - чушь, убедитесь, что у Вас выключена опция меню **Службы → Расширения → Аватара → Разрешение загрузки**. - -##### История комнат  - -> При заходе в комнату Ткаббер запрашивает у сервера некоторое количество последних - сообщений чтобы поместить пользователя в контекст происходящей в комнате дискуссии. - Возможно настроить несколько параметров, находящихся в **Customize → Chat**: - -> ::muc::options(history_maxstanzas) - -> задаёт максимальное количество сообщений, которые Ткаббер попросит у сервера. - 0 означает, что сообщения запрошены не будут. - -> ::muc::options(history_maxchars) - -> определяет максимальный объём текста сообщений в символах. 0 означает, что ничего - принято не будет. - -> ::muc::options(request_only_unseen_history) - -> эта опция _полезна при переконнектах к серверу _— если она включена, Ткаббер - вынимает только те сообщения, которые пользователь ещё не прочитал, _если окно - с конференцией открыто._ Одним словом, не выгребаются те сообщения, которые уже - есть в окне комнаты. - -##### Модуль Conference Info  - -> Этот модуль, который включен по умолчанию, осуществляет периодические запросы списков - участников тех конференций, закладки на которые присутствуют в вашем ростере, но в - которых вы не находитесь в данный момент. Делается это для того, чтобы вы могли увидеть - список участников конференции во всплывающей подсказке к закладке комнаты в ростере, - не входя в комнату и не рассматривая её в дискавери. Чтобы отключить эти запросы, выключите флаг - -> ::plugins::conferenceinfo::options(autoask) - -> в **Customize → Conference Info**. Вместо отключения запросов можно настроить их частоту - в том же разделе настроек. - -##### Уведомления о событиях чата  - -> это отсылка информации о Вашей активности в окне приватного чата Вашему корреспонденту. - Сюда входит информация вроде "пишет ответ", "увидел сообщение" и т.п. Отключить это можно, - выключив флаги - -> ::plugins::chatstate::options(enable) - -> в **Customize → Chat → Chatstate** и - -> ::plugins::events::options(enable) - -> в **Customize → Chat → Events**. - -##### Ответы на IQ-запросы  - -> На некоторые IQ-запросы отвечает Jabber-клиент. Сюда относятся запросы версии клиента, - времени, запрос jabber:iq:last (время неактивности пользователя) и прочие, на которые - не может ответить сервер. Посему, если вы хотите сэкономить трафик на ответах, запретите - все или некоторые опции в **Customize → IQ**, начинающиеся со строк "reply\_" и "report\_"; - наиболее "прожорливой", по-видимому, является опция - -> ::muc::options(report_muc_rooms) - -> Имейте, однако, в виду, что на запрещённые в конфигурации IQ-запросы Ткаббер всё же - посылает IQ-ответы с уведомлениями о неудавшемся запросе; это может "съесть" - часть выгоды от запрещения нормальных ответов. - -Некоторые плагины также могут "втихую" пожирать ваш траффик, например: - -##### georoster  - -> Для выяснения географических координат пользоватей запрашивает vCard у каждого контакта в вашем ростере. - -##### [**Autoretrieve (неофициальный плагин)**](Плагины.md#Autoretrieve) - -> автоматически запрашивает vCard у каждого пользователя, входящего в комнату. Собственно, - в этом и состоит цель его работы, но некоторые пользователи отличаются оголтелым - стремлением к установке всех плагинов, до которых дотягиваются их руки... Так что глядите в оба. - -##### Списки приватности  - -> Если какой-то негодяй льёт вам в приват тонны сообщений, пытаясь завесить клиент - или раскрутить на трафик, вы можете [**внести его в списки приватности**](Блокировка_MRIM-спама.md) - (войти в меню **Tkabber → Обеспечение приватности** и внести в правила либо реальный джид - (если флуд идёт напрямую, либо "комнатный" джид вида `room_name@conference.jabber.ru/flooder's_nick`). - Не путайте списки приватности с игнором, который можно включить, щёлкнув правой кнопкой - мыши на участнике конференции — игнор не блокирует трафик, он лишь скрывает сообщения от - глаз. Списки же приватности обрабатываются на сервере, поэтому вы перестанете получать от - этого джида _всё, что отметите, устанавливая на него правило, включая его запросы и презенс._ - Но помните, что если флудер сменит ник в комнате, правило придётся либо переписывать, либо добавлять новое. - -### Настройка пользователя - -(То есть настройка себя.) - -* Ограничьте себя в просмотре чужих vCards — они зачастую содержат фотографии большого размера - (и, к сожалению, подавляющее большинство из них содержат какую угодно ахинею, но не фотографию владельца). -* Не используйте плагины типа [**Autoretrieve**](Плагины.md#Autoretrieve), которые запрашивают - vCard у каждого заходящего в комнату пользователя. -* Старайтесь попусту не "ходить" в дискавери на список конференций — к примеру, таковой - на jabber.ru "весит" примерно 180 килобайт; если вам интересна информация по конкретной - комнате, наберите её имя в адресной строке окна дискавери в виде `имя_комнаты@conference.jabber.ru` — перейдёте - прямо к ней, минуя полный список комнат. - -![(!)](../images/Hammer.png) **Сделать:** по-видимому, плагин whiteboard неплохо жрёт трафик - -### Настройка сервера - -При помощи списков приватности на сервере можно останавливать некоторые виды _входящего_ -трафика _прямо на сервере._ - -![(!)](../images/Hammer.png) **Сделать:** доработать - -## Средства самоконтроля -### Плагин Traffic - -В Ткаббере имеется [**плагин Traffic**](Плагины.md#Официальные_плагины_для_Ткаббера) авторства -[**feez'а**](Участник_Feez.md). Установив его и запустив через **Службы → Расширения → Статистика по трафику**, -вы сможете следить за тем, какие "примочки" Ткаббера поедают драгоценный трафик. Имейте, -однако, в виду, что этот плагин меряет только объём XML-трафика, то есть он не способен -учесть выгоду от применения Stream Compression, которое происходит "ниже" — перед передачей данных стеку TCP/IP. - -Расскажем вкратце о том, как пользоваться этим плагином. - -Итак, окно плагина открыто, и теперь нам надо выбрать соединение, которое мы хотим мониторить. -Справа вверху есть выпадающий список, в котором видна надпись "0 None". Разверните список -и выберите в нём нужное соединение (если их открыто больше одного). Установите интервал обновления -в поле "Таймер" (5 секунд вполне достаточно) и удостоверьтесь, что кнопка справа от него -стоит в значении "Выкл" (это означает, что автообновление работает, и при нажатии на -кнопку отключится). Если вы не хотите пользоваться автообновлением окна (оно всё-таки -потребляет ресурсы), можете обновлять его вручную с помощью кнопки "Обновить", -расположенной справа от выпадающего списка. - -Автоматически ли или вручную, окно рано или поздно заполнится информацией. По горизонтали идут -контакты ростера (в **Настройках → Плагины → Traffic** можно указать, показывать ли их в виде -ника или джида): ваши друзья, а также конференции и фиды RSS. Самой последней строкой идёт суммарный -трафик соединения. По вертикали — типы трафика: **Pres** (Presence, присутствие), **Iq** (Info-query, -информация-запросы), **Msg** (Messages, сообщения), **All** (всего). **IN** — входящий трафик, -**OUT** — исходящий. Нетрудно заметить, что наибольшую проблему создаёт сервис Info-query, -особенно если у каких-либо контактов в vcard вставлены аватары и фотографии — их сразу же -видно по увеличению трафика в несколько раз. - -Когда плагин установлен, статистика считается автоматически с момента старта Ткаббера. -Её можно сохранить для последуюего анализа с помощью скриптов или других инструментов -(правда, нельзя загрузить сохранённый файл), а можно и обнулить, чтобы начать считать -заново (к примеру, чтобы промерить отдельно "час пик"). Напоминаем ещё раз, что -меряется **только** XML-трафик. - -Проведём интересный опыт (он будет просто потрясающ, если среди ваших контактов есть -пользователи MSN Messenger'а). - -1. Выберите момент затишья, чтобы собеседники не забивали статистику лишними строчками в окне. -1. Поставьте ручное обновление окна. -1. Обнулите счётчики. -1. Отлогиньтесь от MSN-гейта. -1. Обновите статистику. Если некоторые из контактов были в онлайне, они появятся в - списке, имея чуть меньше 250 байт трафика Pres IN. Сам транспорт, естественно, тоже - вышлет свой презенс в 87 байт размером в обмен на ваш ему Pres OUT. -1. Сбросьте счётчики снова. -1. Снова залогиньтесь к гейту и снова обновите статистику. - * При логине трафик презенса увеличивается: у транспорта в три раза, у контактов — больше, - чем в четыре! - * Но это ещё цветочки: один-единственный запрос Iq порождает трафик в 40-70 килобайт - (если у контакта в vcard не вставлена фотка размером с wallpaper)!!! - * Вход или выход одного человека из конференции увеличивают её входящий презенс-трафик - на 250-500 байт. На первый взгляд немного, но в час пик, когда входит и выходит - много народу, набегает... -1. Померяйте сами трафик, создаваемый плагинами chess, checkers, reversi, whiteboard и так далее. - -### Сетевые средства - -Существуют всевозможные мерялки трафика, которые как раз способны вести учёт -того, что оказывается непосредственно "на линии". - -Для измерения TCP/IP трафика под виндами можно порекоммендовать бесплатный (для -простых применений) [TMeter](http://www.TMeter.RU). - -Если у вас модем, то очень хорошим решением является [ModemSpd](http://www.online.az/modemspdV0.902beta.zip) -с [модулем декодирования Unimodem-диагностики](http://www.rampitec.spb.ru/modem.htm#ud). - -К сожалению, измерения такими средствами страдают от невозможности классифицировать -трафик XMPP (так, как это делает плагин **Traffic**, к примеру) — без ухищрений можно -померять только "сколько всего" и "с какой скоростью". - -![(?)](../images/Attention.png) **Поправьте меня:** Впрочем, если память мне не изменяет, -файерволл [Agnitum Outpost](http://www.agnitum.com/products/outpost/) даже -в [бесплатной версии](http://www.agnitum.com/download/OutpostInstall.exe) меряет трафик, -который накручивает каждая программа в отдельности. - -## Невошедшее -В процессе разбирательств с добрым Йоххо-тяном в комнате Ткаббера по поводу сравнительного -меряния трафика с включённым сжатием между Бомбусом и Ткаббером, [**kostix**](Участник_Kostix.md) -02:36, 22 апреля 2008 (MSD) выяснил, что Ткаббер жмёт трафик, используя степерь сжатия, -которую zlib использует по умолчанию ([**Mellon**](Участник_Mellon.md) сообщает, что она равна 6). - -Увеличить её до максимального значения можно, изменив в процедуре `transport::zlib::import`, -определённой в файле jabberlib/transports.tcl, строку +# Сжатие трафика +Это — единственный по-настоящему действенный способ уменьшить трафик. + +Существует, в принципе, три варианта сжатия трафика, из них реальный интерес представляет только первый — "Stream Compression": + + [XEP-0138: Stream Compression](http://www.xmpp.org/extensions/xep-0138.html)  + + Использует один из зарегистрированных (и поддерживаемых) в XMPP методов сжатия и сжимает _весь_ XML-поток (то есть компрессор находится между XML-потоком и TCP/IP-потоком в сетевом стеке). Ткаббер поддерживает метод сжатия **zlib**. + + Сжатие в протоколе TLS  + + Формально протокол TLS (SSL) поддерживает сжатие, однако, этот вопрос на уровне спецификации протокола проработан плохо — процитируем **[SSL\_COMP\_add\_compression\_method(3)](http://www.openssl.org/docs/ssl/SSL_COMP_add_compression_method.html)** из OpenSSL: +_The TLS standard (or SSLv3) allows the integration of compression methods into the communication. The TLS RFC does however not specify compression methods or their corresponding identifiers, so there is currently no compatible way to integrate compression with unknown peers. It is therefore currently not recommended to integrate compression into applications. Applications for non-public use may agree on certain compression methods. Using different compression methods with the same identifier will lead to connection failure._ + Кроме того, в пакете [tcltls](http://tls.sourceforge.net), который служит прослойкой между Ткаббером и OpenSSL, отсутствуют "крутилки" для управления сжатием; статус этой фичи в драйвере TLS, реализованном в [ejabberd](http://ejabberd.jabber.ru), также неизвестен. Одним словом, _сжатие средствами TLS в Ткаббере невозможно._ + + PGP (GnuPG)  + + _PGP сжимает данные перед их шифрованием,_ что, в принципе, способно уменьшить трафик. Однако, не надо быть чрезмерно оптимистичными относительно этого способа; об этом — читайте [ниже](Low_traffic_HOWTO.md#PGP_GnuPG). + +_Важно понимать, что **Stream Compression не может работать вместе с TLS (SSL),** то есть Вам придётся выбирать между сжатием и защитой канала._ По крайней мере [в ejabberd они вместе не работают](https://support.process-one.net/browse/EJAB-499), а потому и Ткаббер не даст включить их одновременно. + +О том, что Вы теряете, отказываясь от SSL, можно прочитать [здесь](Между_офлайном_и_онлайном.md#Защита_потока). + +Стоит добавить, что в контексте XMPP практически невозможно достичь такой же степени сжатия, которую способны показать алгортимы zlib на "простых файлах", всилу того, что в Stream Compression они рассматривают отдельно каждую [станцу](Терминология.md#Станца_stanza), а не весь сплошной XML-поток. Это происходит из-за того, что требуется обеспечивать передачу "почти в реальном времени" и передавать станцы по мере их готовности к передаче; сжатие же файлов может рассматривать такое количество байт, которое ограничено лишь размерами внутренних буферов, словаря, и требованиями к вычислительным ресурсам. + +## Stream Compression/zlib + +### "Обычный" Ткаббер + +Для включения сжатия в "обычном" Ткаббере Вам потребуется установить пакет **ztcl** и пакет **tclmore**, от которого тот зависит (о том, где их взять, — чуть ниже). + +Установив пакет, перезапустите Ткаббер. При этом в окне логина закладка **SSL** будет называться теперь **SSL & Сжатие.** Идите туда и отметьте галочку "Сжатие". + +**Где взять:** + +* Исходный код: + * [ztcl](http://sgolovan.nes.ru/jabber/ztcl/ztcl/ztcl_1.0b4_src.tar.gz) + * [tclmore](http://sgolovan.nes.ru/jabber/ztcl/tclmore/tclmore_0.7b1_src.tar.gz) + +(Раньше они хостились в [соответствующих](https://gna.org/projects/ztcl/) [проектах](https://gna.org/projects/tclmore/) на gna.org, но они были удалены из-за неактивности автора.) + +* Неофициальные сборки: + * Пакеты для Debian sarge авторства Сергея Голованя (`xmpp:sgolovan@nes.ru`) доступны в [его репозитории](http://people.debian.org/~sgolovan/debian/) — найдите ниже вопрос про этот репозиторий и действуйте в соответствии с инструкциями. + * [eXire](Участник_EXire.md) поддерживает [пакеты для Arch Linux](http://exire.dyndns.org:8081/arch/repo). + * Mellon собрал эти пакеты для [Gentoo](http://www.gentoo.org) — они доступны в её багзилле: [tclmore](http://bugs.gentoo.org/show_bug.cgi?id=205412), [ztcl](http://bugs.gentoo.org/show_bug.cgi?id=205413). + * Также пакеты должны быть доступны в [портах FreeBSD](http://portsmon.freebsd.org/portoverview.py?category=devel&portname=ztcl). + * [kostix](Участник_Kostix.md) собрал оба пакета под Windows; их установке посвящён следующий раздел. + +#### Установка ztcl и tclmore в Windows + +Во-первых, вам понадобятся сами пакеты **ztcl** и **tclmore**, собранные под Win32. Они доступны [здесь](http://sgolovan.nes.ru/jabber/ztcl/). + +Для установки необходимо распаковать пакеты в каталог модулей тикля (обычно это **C:\\Tcl\\lib**). + +Во-вторых, Вам понадобится поставить Win32-версию библиотеки **zlib**, которую следует взять [здесь](http://gnuwin32.sourceforge.net/packages/zlib.htm). + +**Установка библиотеки zlib** + +Из скачанного архива вам потребуется файл **zlib1.dll**. Его нужно положить в любой каталог, содержащийся в переменной окружения **PATH**. Если эта фраза Вам ни о чём не говорит, у Вас есть три варианта: + +* [Обучить](Настройка_Ткаббера__азы_и_глубже.md) себя локально; +* [Обучить](http://www.ozon.ru/context/detail/id/2988356/) себя глобально; +* Тупо положить **zlib1.dll** в каталог **C:\\Windows\\system32**, если с предыдущими пунктами ничего не вышло. + +**Вниманию пользователей Windows XP 64-bit Edition:** поскольку **ztcl** и **tclmore** собраны под x86, они требуют **zlib**, собранную также под x86 (именно такая и находится по ссылке, приведённой выше). Однако, имейте в виду две вещи: + +* **zlib1.dll** из пакета **zlib** _не должна_ лежать в **%WINDIR%\\system32** из-за того, что там ищутся только "родные" (64-битные) библиотеки. Положите её в **%WINDIR%\\system** — она как раз предназначена для "старых", 32-битных библиотек. +* [Доступная в Интернет версия **zlib1.dll**, собранная под x64](http://www.winimage.com/zLibDll/), с ztcl _не работает._ +* На всякий случай: бессмысленно просить авторов собрать библиотеки под x64 — это потребует 64-битных версий всего Tcl/Tk и всех остальных бинарных пакетов. + +### Ткаббер-пак (Win32) + +[Kostix](Участник_Kostix.md) собрал [Ткаббер-пак под Windows](http://tkabber.jabber.ru/tkabber-pack/). Он поддерживает сжатие (как и все возможные расширения Ткаббера и стандартные плагины) "из коробки". + +### Старпаки Ткаббера + +_Пользователи старпака_ использовать внешние модули, в принципе, могут, но их прикручивание связано с серьёзными трудностями (особенно в случае с **ztcl**). + +Вследствие [некоторых проблем](Старпак_и_сжатие.md) поддержка сжатия в старпаке — вещь нетривиальная и требующая серьёзных "приседаний" для реализации. + +Посему официальные старпаки пока что сжатие _не поддерживают_. Про неофициальные старпаки с поддержкой сжатия нам также неизвестно. + +Более подробно о внешних старкитах к "упакованным" дистрибутивам Ткаббера рассказано [здесь](Проблемы_со_звуком.md#_В_старпаке_старките_нет_звука). + +## PGP/GnuPG + +У сжатия в PGP есть две проблемы: + +* В отличие от Stream Compression, который сжимает каждую [станцу](Терминология.md#Станца_stanza) перед отправкой, PGP сжимает _текст_ каждого сообщения перед шифрованием. После этого зашифрованный текст передаётся "вместо" оригинального сообщения, _будучи закодирован при помощи [base64](http://ru.wikipedia.org/wiki/Base64)._ Как известно, этот метод кодирования потока байтов с кодами 0..255 в поток символов ASCII способен увеличить размер оригинального сообщения на 30%, что может эффективно "сожрать" выгоду от сжатия, особенно на небольших сообщениях. +* Кроме того, PGP подписывает каждое отправляемое сообщение, и эта подпись также представляет собой элемент XML, содержащий около 100 символов **base64**. + +# Уменьшение XML-трафика +Следовать указаниям этого раздела стоит лишь в том случае, если у вас ничего не вышло с **zlib**, или вы по каким-то причинам не можете его использовать (хотя единственная _серьёзная_ причина — это необходимость использовать SSL). + +Действия, предложенные здесь, преследуют цель уменьшения количества XML-данных, пересылаемых в ходе соединения. + +## Замечание о бинарных данных + +Протокол XMPP является в некотором роде "ASCII-протоколом" — любые бинарные данные вроде RAR-архивов и картинок передаются им в виде **base64**-представления оригинальных данных. Поэтому имейте в виду, что картинка размером 5 килобайт "на линии" будет весить до 6.5 килобайт. + +## Настройки Ткаббера + +Ещё раз напомним, что в борьбе с трафиком вы легко можете побороть функциональность и удобство работы! Поэтому руководствуйтесь принципом: + + _семь раз отмерь, один — отрежь_ + +и глубоко обдумывайте каждый пункт. + +Пункты расположены по _предполагаемой_ (автором) "трафикопрожорливости". + + Внутриканальная передача файлов  + + весьма неэффективна в плане использования трафика, так как файл фактически передаётся в виде шестибитного текста (**base64**). + + Аватары  + + В отличие от эмоциконок (смайликов) аватары посылаются _и принимаются_ в виде картинок. Картинки бывают довольно большими. Поэтому, если Вы не хотите тратить свой трафик на эту чушь, убедитесь, что у Вас выключена опция меню **Службы → Расширения → Аватара → Разрешение загрузки**. + + История комнат  + + При заходе в комнату Ткаббер запрашивает у сервера некоторое количество последних сообщений чтобы поместить пользователя в контекст происходящей в комнате дискуссии. Возможно настроить несколько параметров, находящихся в **Customize → Chat**: + ::muc::options(history_maxstanzas) + задаёт максимальное количество сообщений, которые Ткаббер попросит у сервера. 0 означает, что сообщения запрошены не будут. + ::muc::options(history_maxchars) + определяет максимальный объём текста сообщений в символах. 0 означает, что ничего принято не будет. + ::muc::options(request_only_unseen_history) + эта опция _полезна при переконнектах к серверу _— если она включена, Ткаббер вынимает только те сообщения, которые пользователь ещё не прочитал, _если окно с конференцией открыто._ Одним словом, не выгребаются те сообщения, которые уже есть в окне комнаты. + + Модуль Conference Info  + + Этот модуль, который включен по умолчанию, осуществляет периодические запросы списков участников тех конференций, закладки на которые присутствуют в вашем ростере, но в которых вы не находитесь в данный момент. Делается это для того, чтобы вы могли увидеть список участников конференции во всплывающей подсказке к закладке комнаты в ростере, не входя в комнату и не рассматривая её в дискавери. Чтобы отключить эти запросы, выключите флаг + ::plugins::conferenceinfo::options(autoask) + в **Customize → Conference Info**. Вместо отключения запросов можно настроить их частоту в том же разделе настроек. + + Уведомления о событиях чата  + + это отсылка информации о Вашей активности в окне приватного чата Вашему корреспонденту. Сюда входит информация вроде "пишет ответ", "увидел сообщение" и т.п. Отключить это можно, выключив флаги + ::plugins::chatstate::options(enable) + в **Customize → Chat → Chatstate** и + ::plugins::events::options(enable) + в **Customize → Chat → Events**. + + Ответы на IQ-запросы  + + На некоторые IQ-запросы отвечает Jabber-клиент. Сюда относятся запросы версии клиента, времени, запрос jabber:iq:last (время неактивности пользователя) и прочие, на которые не может ответить сервер. Посему, если вы хотите сэкономить трафик на ответах, запретите все или некоторые опции в **Customize → IQ**, начинающиеся со строк "reply\_" и "report\_"; наиболее "прожорливой", по-видимому, является опция + ::muc::options(report_muc_rooms) + Имейте, однако, в виду, что на запрещённые в конфигурации IQ-запросы Ткаббер всё же посылает IQ-ответы с уведомлениями о неудавшемся запросе; это может "съесть" часть выгоды от запрещения нормальных ответов. + +Некоторые плагины также могут "втихую" пожирать ваш траффик, например: + + georoster  + + Для выяснения географических координат пользоватей запрашивает vCard у каждого контакта в вашем ростере. + + [Autoretrieve (неофициальный плагин)](Плагины.md#Autoretrieve)  + + автоматически запрашивает vCard у каждого пользователя, входящего в комнату. Собственно, в этом и состоит цель его работы, но некоторые пользователи отличаются оголтелым стремлением к установке всех плагинов, до которых дотягиваются их руки... Так что глядите в оба. + + Списки приватности  + + Если какой-то негодяй льёт вам в приват тонны сообщений, пытаясь завесить клиент или раскрутить на трафик, вы можете [внести его в списки приватности](Блокировка_MRIM-спама.md) (войти в меню **Tkabber → Обеспечение приватности** и внести в правила либо реальный джид (если флуд идёт напрямую, либо "комнатный" джид вида `room_name@conference.jabber.ru/flooder's_nick`). Не путайте списки приватности с игнором, который можно включить, щёлкнув правой кнопкой мыши на участнике конференции — игнор не блокирует трафик, он лишь скрывает сообщения от глаз. Списки же приватности обрабатываются на сервере, поэтому вы перестанете получать от этого джида _всё, что отметите, устанавливая на него правило, включая его запросы и презенс._ Но помните, что если флудер сменит ник в комнате, правило придётся либо переписывать, либо добавлять новое. + +## Настройка пользователя + +(То есть настройка себя.) + +* Ограничьте себя в просмотре чужих vCards — они зачастую содержат фотографии большого размера (и, к сожалению, подавляющее большинство из них содержат какую угодно ахинею, но не фотографию владельца). +* Не используйте плагины типа [Autoretrieve](Плагины.md#Autoretrieve), которые запрашивают vCard у каждого заходящего в комнату пользователя. +* Старайтесь попусту не "ходить" в дискавери на список конференций — к примеру, таковой на jabber.ru "весит" примерно 180 килобайт; если вам интересна информация по конкретной комнате, наберите её имя в адресной строке окна дискавери в виде `имя_комнаты@conference.jabber.ru` — перейдёте прямо к ней, минуя полный список комнат. + +![(!)](../images/Hammer.png) **Сделать:** по-видимому, плагин whiteboard неплохо жрёт трафик + +## Настройка сервера + +При помощи списков приватности на сервере можно останавливать некоторые виды _входящего_ трафика _прямо на сервере._ + +![(!)](../images/Hammer.png) **Сделать:** доработать + +# Средства самоконтроля +## Плагин Traffic + +В Ткаббере имеется [плагин Traffic](Плагины.md#Официальные_плагины_для_Ткаббера) авторства [feez'а](Участник_Feez.md). Установив его и запустив через **Службы → Расширения → Статистика по трафику**, вы сможете следить за тем, какие "примочки" Ткаббера поедают драгоценный трафик. Имейте, однако, в виду, что этот плагин меряет только объём XML-трафика, то есть он не способен учесть выгоду от применения Stream Compression, которое происходит "ниже" — перед передачей данных стеку TCP/IP. + +Расскажем вкратце о том, как пользоваться этим плагином. + +Итак, окно плагина открыто, и теперь нам надо выбрать соединение, которое мы хотим мониторить. Справа вверху есть выпадающий список, в котором видна надпись "0 None". Разверните список и выберите в нём нужное соединение (если их открыто больше одного). Установите интервал обновления в поле "Таймер" (5 секунд вполне достаточно) и удостоверьтесь, что кнопка справа от него стоит в значении "Выкл" (это означает, что автообновление работает, и при нажатии на кнопку отключится). Если вы не хотите пользоваться автообновлением окна (оно всё-таки потребляет ресурсы), можете обновлять его вручную с помощью кнопки "Обновить", расположенной справа от выпадающего списка. + +Автоматически ли или вручную, окно рано или поздно заполнится информацией. По горизонтали идут контакты ростера (в **Настройках → Плагины → Traffic** можно указать, показывать ли их в виде ника или джида): ваши друзья, а также конференции и фиды RSS. Самой последней строкой идёт суммарный трафик соединения. По вертикали — типы трафика: **Pres** (Presence, присутствие), **Iq** (Info-query, информация-запросы), **Msg** (Messages, сообщения), **All** (всего). **IN** — входящий трафик, **OUT** — исходящий. Нетрудно заметить, что наибольшую проблему создаёт сервис Info-query, особенно если у каких-либо контактов в vcard вставлены аватары и фотографии — их сразу же видно по увеличению трафика в разы. + +Когда плагин установлен, статистика считается автоматически с момента старта Ткаббера. Её можно сохранить для последуюего анализа с помощью скриптов или других инструментов (правда, нельзя загрузить сохранённый файл), а можно и обнулить, чтобы начать считать заново (к примеру, чтобы промерить отдельно "час пик"). Напоминаем ещё раз, что меряется **только** XML-трафик. + +Проведём интересный опыт (он будет просто потрясающ, если среди ваших контактов есть пользователи MSN Messenger'а). + +1. Выберите момент затишья, чтобы собеседники не забивали статистику лишними строчками в окне. +1. Поставьте ручное обновление окна. +1. Обнулите счётчики. +1. Отлогиньтесь от MSN-гейта. +1. Обновите статистику. Если некоторые из контактов были в онлайне, они появятся в списке, имея чуть меньше 250 байт трафика Pres IN. Сам транспорт, естественно, тоже вышлет свой презенс в 87 байт размером в обмен на ваш ему Pres OUT. +1. Сбросьте счётчики снова. +1. Снова залогиньтесь к гейту и снова обновите статистику. + * При логине трафик презенса увеличивается: у транспорта в три раза, у контактов — больше, чем в четыре! + * Но это ещё цветочки: один-единственный запрос Iq порождает трафик в 40-70 килобайт (если у контакта в vcard не вставлена фотка размером с wallpaper)!!! + * Вход или выход одного человека из конференции увеличивают её входящий презенс-трафик на 250-500 байт. На первый взгляд немного, но в час пик, когда входит и выходит много народу, набегает... + +1. Померяйте сами трафик, создаваемый плагинами chess, checkers, reversi, whiteboard и так далее. + +## Сетевые средства + +Существуют всевозможные мерялки трафика, которые как раз способны вести учёт того, что оказывается непосредственно "на линии". + +Для измерения TCP/IP трафика под виндами можно порекоммендовать бесплатный (для простых применений) [TMeter](http://www.TMeter.RU). + +Если у вас модем, то очень хорошим решением является [ModemSpd](http://www.online.az/modemspdV0.902beta.zip) с [модулем декодирования Unimodem-диагностики](http://www.rampitec.spb.ru/modem.htm#ud). + +К сожалению, измерения такими средствами страдают от невозможности классифицировать трафик XMPP (так, как это делает плагин **Traffic**, к примеру) — без ухищрений можно померять только "сколько всего" и "с какой скоростью". + +![(?)](../images/Attention.png) **Поправьте меня:** Впрочем, если память мне не изменяет, файерволл [Agnitum Outpost](http://www.agnitum.com/products/outpost/) даже в [бесплатной версии](http://www.agnitum.com/download/OutpostInstall.exe) меряет трафик, который накручивает каждая программа в отдельности. + +# Невошедшее +В процессе разбирательств с добрым Йоххо-тяном в комнате Ткаббера по поводу сравнительного меряния трафика с включённым сжатием между Бомбусом и Ткаббером, [kostix](Участник_Kostix.md) 02:36, 22 апреля 2008 (MSD) выяснил, что Ткаббер жмёт трафик, используя степерь сжатия, которую zlib использует по умолчанию ([Mellon](Участник_Mellon.md) сообщает, что она равна 6). + +Увеличить её до максимального значения можно, изменив в процедуре `transport::zlib::import`, определённой в файле jabberlib/transports.tcl, строку zlib stream $sock RDWR -output compress -input decompress -на +на zlib stream $sock RDWR -output compress -input decompress -level 9 -Тестирование на получении ростера (~120 контактов + закладки на конференции + аннотации к -некоторым элементам) и начального присутствия от JID'ов всех его элементов, к которым это относится: - -1. открытый текст, без zlib: - * принято: 65 пакетов, 37969 байтов - * отправлено: 46 пакетов, 11134 байтов -1. открытый текст, zlib (уровень сжатия по умолчанию): - * принято: 53 пакетов, 8990 байтов - * отправлено: 39 пакетов, 3805 байтов -1. открытый текст, zlib (уровень сжатия на клиенте — 9): - * принято: 51 пакетов, 8886 (8941) байтов - * отправлено: 38 пакетов, 3754 (3750) байтов -1. TLS (SSL): - * принято: 58 пакетов, 18863 байтов - * отправлено: 45 пакетов, 5307 байтов - -Комментарий: TLS — наше всё. Он сам уже жмёт всё в два раза, и надо быть завидным -скупердяем очень бедным человеком, чтобы пожертвовать защищённым соединением -ради сжатия ещё в два раза. - -Следует также понимать, что изменение коэффициента сжатия на клиенте никак не влияет -на коэффициент сжатия на сервере, который скорее всего установлен в значение по умолчанию -(как минимум, в [ejabberd](http://www.ejabberd.im) нет опций конфигурации для -управления коэффициентом сжатия потока). В итоге, "хакнув" указанный кусок кода в Ткаббере, -можно добиться только практически незаметного уменьшения трафика, идущего "вверх" — от клиента -на сервер; при этом трафик "вниз" (от сервера — клиенту) обычно значительно выше (если -только мы не занимаемся активной посылкой файлов при -помощи [**внутриканальных протоколов передачи**](Пересылка_файлов__теория.md#Внутри_и_снаружи)). +Тестирование на получении ростера (~120 контактов + закладки на конференции + аннотации к некоторым элементам) и начального присутствия от JID'ов всех его элементов, к которым это относится: + +1. открытый текст, без zlib: + * принято: 65 пакетов, 37969 байтов + * отправлено: 46 пакетов, 11134 байтов + +1. открытый текст, zlib (уровень сжатия по умолчанию): + * принято: 53 пакетов, 8990 байтов + * отправлено: 39 пакетов, 3805 байтов + +1. открытый текст, zlib (уровень сжатия на клиенте — 9): + * принято: 51 пакетов, 8886 (8941) байтов + * отправлено: 38 пакетов, 3754 (3750) байтов + +1. TLS (SSL): + * принято: 58 пакетов, 18863 байтов + * отправлено: 45 пакетов, 5307 байтов + +Комментарий: TLS — наше всё. Он сам уже жмёт всё в два раза, и надо быть завидным скупердяем очень бедным человеком, чтобы пожертвовать защищённым соединением ради сжатия ещё в два раза. + +Следует также понимать, что изменение коэффициента сжатия на клиенте никак не влияет на коэффициент сжатия на сервере, который скорее всего установлен в значение по умолчанию (как минимум, в [ejabberd](http://www.ejabberd.im) нет опций конфигурации для управления коэффициентом сжатия потока). В итоге, "хакнув" указанный кусок кода в Ткаббере, можно добиться только практически незаметного уменьшения трафика, идущего "вверх" — от клиента на сервер; при этом трафик "вниз" (от сервера — клиенту) обычно значительно выше (если только мы не занимаемся активной посылкой файлов при помощи [внутриканальных протоколов передачи](Пересылка_файлов__теория.md#Внутри_и_снаружи)). + + Index: wiki/ru/MUC_Ignore.md ================================================================== --- wiki/ru/MUC_Ignore.md +++ wiki/ru/MUC_Ignore.md @@ -1,6 +1,7 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/MUC_Ignore/index.html) + # MUC Ignore Материал из Tkabber Wiki @@ -8,156 +9,115 @@ * [1 Вступление](#Вступление) * [2 Минимум теории](#Минимум_теории) * [3 Реализация](#Реализация) * [4 Проблемы](#Проблемы) - * [4.1 Ненадёжность (нестабильность) ников](#Ненадёжность_нестабильность_ников) - * [4.1.1 "Запачканные" ники](#Запачканные_ники) - * [4.2 Переконфигурации комнаты](#Переконфигурации_комнаты) - -## Вступление -[**Kostix**](Участник_Kostix.md) 03:32, 15 декабря 2006 (MSK) - -Это нечто вроде Request For Comments на реализацию "MUC Ignoring" в Ткаббере. - -Реализация оказалась не _настолько_ простой, как я изначально предполагал: есть некоторые -проблемы "теоретического" характера, которые и предлагается обсудить желающим. Выдвигайте варианты. - -## Минимум теории -Комнаты в XMPP делятся на три группы по "видимости" _реальных JID'ов_ участников для остальных участников: - -* полностью анонимные — реальные джиды не видны никому; -* полуанонимные — (дефолтный тип комнаты в "ёжике") — все модераторы (role == moderator), - в том числе и временные, видят джиды всех участников; единственное отличие временных от - постоянных в том, что они видят джиды лишь тех, кто вошёл в комнату в течение времени, пока они у "руля"); -* неанонимные — все видят реальные джиды всех. - -Сообщения в комнату `node@server` от юзера с ником `nick` приходят от джида `node@server/nick`, то есть это полный джид. - -В соответствующих типах комнат те участники, которым разрешено видеть реальные джиды других участников, -вместе с присутствием "доступен" от участника комнаты получают и его реальный джид. - -## Реализация -Идея (в формулировке [**Teo**](Участник_Teo.md)): - -* Раздельный игнор сообщений в комнату и приват: - * Сообщения в комнату от игнорируемого участника помещаются, но скрываются; снятие игнора - "показывает" сообщения, и наоборот; - * Сообщения в приват от игнорируемого участника молча удушаются. - -Ткаббер умеет прекрасно просекать смену ника участником в комнате, то есть смены ника не -мешают обоим игнорам, т. к. механизм игноров отслеживает их. - -Требуется хранить правила игнора между сеансами работы Ткаббера. Предполагается хранить -правила (логически) в таком виде: - -* SESSION\_JID1 - * ROOM\_JID1 (комната анонимная) - * NICK1 - * NICK2 - ... - - * ROOM\_JID2 (комната анонимная) - * NICK1 - ... - * NICKN - ... - -* SESSION\_JID2 - * ROOM\_JID1 (комната неанонимная) - * REAL\_JID1 - ... - * REAL\_JIDN - ... - -! "SESSION\_JID" это "наш" джид подключения. - -Идея такая, что для игнорируемого участника хранится реальный джид, если он доступен, -в противном случае -- ник. - -> Обоснование: реальный джид намного "стабильнее", чем ник; несмотря на то, что ник - может быть зарегистрирован, никакого способа узнать об этом факте, по-видимому, - не существует; как минимум, — в Ткаббере. - -## Проблемы -### Ненадёжность (нестабильность) ников - -Засранец легко может генерить ники вида "freak01 ", "freak02", "freak03" и реально игнор -будет полезен только пока засранец не покинул комнату. После этого смысл хранить забаненным -ник "freak03" в такой-то комнате представляется сомнительным — при следующем сеансе -работы этот ник в этой комнате может не иметь никакого смысла. - -С другой стороны, если в комнате есть, скажем, просто очень скучная персона, флудер -и т.п., с постоянным ником, хранение подобного правила имеет смысл. - -> В Customize есть опция "transient\_rules" — если она включена, правила не сохраняются. - -Также: какой ник сохранять в правилах, если недоступен реальный джид, — тот, который -заигнорили, или тот, который засранец имел при выходе из комнаты/нашем от неё отключении? - -Если сохранять "первый" ник, то нужно либо сразу флашить правила в базу данных Customize, -либо запоминать этот первый ник, если база сбрасывается в какой-то другой момент (см. ниже про UID). - -**Текущая реализация:** запоминаем текущий ник или реальный джид, если доступен; -флашим базу Customize. - -#### "Запачканные" ники - -[**Kostix**](Участник_Kostix.md) 03:00, 17 декабря 2006 (MSK) обновление реализации: - -"Сокрытие" сообщений от засранца в комнате делается заключением всего сообщения в тэг вида + * [4.1 Ненадёжность (нестабильность) ников](#Ненадёжность_нестабильность_ников) + * [4.1.1 "Запачканные" ники](#Запачканные_ники) + * [4.2 Переконфигурации комнаты](#Переконфигурации_комнаты) + +# Вступление +[Kostix](Участник_Kostix.md) 03:32, 15 декабря 2006 (MSK) + +Это нечто вроде Request For Comments на реализацию "MUC Ignoring" в Ткаббере. + +Реализация оказалась не _настолько_ простой, как я изначально предполагал: есть некоторые проблемы "теоретического" характера, которые и предлагается обсудить желающим. Выдвигайте варианты. + +# Минимум теории +Комнаты в XMPP делятся на три группы по "видимости" _реальных JID'ов_ участников для остальных участников: + +* полностью анонимные — реальные джиды не видны никому; +* полуанонимные — (дефолтный тип комнаты в "ёжике") — все модераторы (role == moderator), в том числе и временные, видят джиды всех участников; единственное отличие временных от постоянных в том, что они видят джиды лишь тех, кто вошёл в комнату в течение времени, пока они у "руля"); +* неанонимные — все видят реальные джиды всех. + +Сообщения в комнату `node@server` от юзера с ником `nick` приходят от джида `node@server/nick`, то есть это полный джид. + +В соответствующих типах комнат те участники, которым разрешено видеть реальные джиды других участников, вместе с присутствием "доступен" от участника комнаты получают и его реальный джид. + +# Реализация +Идея (в формулировке [Teo](Участник_Teo.md)): + +* Раздельный игнор сообщений в комнату и приват: + * Сообщения в комнату от игнорируемого участника помещаются, но скрываются; снятие игнора "показывает" сообщения, и наоборот; + * Сообщения в приват от игнорируемого участника молча удушаются. + +Ткаббер умеет прекрасно просекать смену ника участником в комнате, то есть смены ника не мешают обоим игнорам, т. к. механизм игноров отслеживает их. + +Требуется хранить правила игнора между сеансами работы Ткаббера. Предполагается хранить правила (логически) в таком виде: + +* SESSION\_JID1 + * ROOM\_JID1 (комната анонимная) + * NICK1 + * NICK2 +... + + * ROOM\_JID2 (комната анонимная) + * NICK1 +... + * NICKN +... + +* SESSION\_JID2 + * ROOM\_JID1 (комната неанонимная) + * REAL\_JID1 +... + * REAL\_JIDN +... + +! "SESSION\_JID" это "наш" джид подключения. + +Идея такая, что для игнорируемого участника хранится реальный джид, если он доступен, в противном случае -- ник. + + Обоснование: реальный джид намного "стабильнее", чем ник; несмотря на то, что ник может быть зарегистрирован, никакого способа узнать об этом факте, по-видимому, не существует; как минимум, — в Ткаббере. + +# Проблемы +## Ненадёжность (нестабильность) ников + +Засранец легко может генерить ники вида "freak01 ", "freak02", "freak03" и реально игнор будет полезен только пока засранец не покинул комнату. После этого смысл хранить забаненным ник "freak03" в такой-то комнате представляется сомнительным — при следующем сеансе работы этот ник в этой комнате может не иметь никакого смысла. + +С другой стороны, если в комнате есть, скажем, просто очень скучная персона, флудер и т.п., с постоянным ником, хранение подобного правила имеет смысл. + + В Customize есть опция "transient\_rules" — если она включена, правила не сохраняются. + +Также: какой ник сохранять в правилах, если недоступен реальный джид, — тот, который заигнорили, или тот, который засранец имел при выходе из комнаты/нашем от неё отключении? + +Если сохранять "первый" ник, то нужно либо сразу флашить правила в базу данных Customize, либо запоминать этот первый ник, если база сбрасывается в какой-то другой момент (см. ниже про UID). + +**Текущая реализация:** запоминаем текущий ник или реальный джид, если доступен; флашим базу Customize. + +### "Запачканные" ники + +[Kostix](Участник_Kostix.md) 03:00, 17 декабря 2006 (MSK) обновление реализации: + +"Сокрытие" сообщений от засранца в комнате делается заключением всего сообщения в тэг вида IGNORED-$id -с `-elide 1`, где $id -- некий уникальный в пределах сессии идентификатор засранца; -при переименовании засранца его идентификатор не меняется. - -Остаётся проблема: если за время пребывания в комнате засранец сменил несколько -ников, то если мы перезайдём в комнату, нам прилетит история, в которой могут быть -сообщения с этих ников; при этом игнорированы будут только сообщения, пришедшие с -текущего ника игнорируемого, если он в данный момент находится в комнате. - -Бороться с этим злом, видимо, нельзя, т.к. с сообщениями истории реальные джиды не -передаются, даже если они доступны. Хранить историю смены ников — глупо, т. к. опять -встаёт проблема "запачканных" ников: что если в комнате появится нормальная персона, -взявшая себе один из таких ников? - -C'est la vie. - -### Переконфигурации комнаты - -Уровень анонимности комнаты может меняться; текущая версия ёжика не умеет генерить уведомления -об этом, а ткаббер не умеет их просекать, так что проблема "рантайма" нас (пока) не интересует. -Интересует проблема соотношения сохранённых правил и новой конфигурации комнаты. - -Интересны 2 случая: - -* "Реальные джиды доступны → Сохранены правила с реальными джидами → Комната переконфигурирована - и реальные джиды больше недоступны" — в этом случае соответствующие сохранённые правила перестают - иметь смысл, так как их больше не применить к участникам. -* "Реальные джиды недоступны → Сохранены правила с джидами комнаты → Комната переконфигурирована - и реальные джиды доступны" — в этом случае, по идее, следует "продвинуть" джиды комнаты до - реальных при первой возможности; насколько это правильно? (нет гарантии, что комнатный джид - в момент сохранения соответствовал человеку, который с ним объявился в комнате в данный момент). -* Ещё варианты? - -Прямолинейный подход — хранить _и_ комнатный, _и_ реальный джиды, если возможно, — страдает от -той же проблемы: связь между этими джидами можно проверить только при наличии доступа к -реальным джидам. Кроме того, это затрудняет хранение правил. - -**Текущая реализация:** храним либо реальный джид, либо -- ник; первый имеет преимущество. -На проблемы с переконфигурацией плюём, руководствуясь принципами бритвы "brAun Occam". :) -Кроме того, скорее всего будет приделан диалог формального редактирования правил, при -помощи которого можно будет обороть такие проблемы. - -**Вопрос:** не следует ли хранить вместе с джидом комнаты статус её анонимности и каким-либо -образом пердуперждать пользователя, если он изменился с момента последнего сохранения -правил? (Выглядит разумным компромиссом.) Собственно, не мудрствуя лукаво: факт доступности -реального джида во время обработки присутствия от первого же присутствующего позволяет узнать -изменился ли статус анонимности комнаты. - -[**Archimed**](Участник_Archimed.md) 17:06, 18 декабря 2006 (MSK) - -Хранить статус комнаты вместе с её JID - мне кажется хорошим решением. Может вместо -формального диалога редактирования правил сделать просто ещё одну группу «Игнор», вдобавок -к «Модераторы» и «Участники» в списке участников конференции? И добавить возможность -перетаскивать ники в/из этой группы. +с `-elide 1`, где $id -- некий уникальный в пределах сессии идентификатор засранца; при переименовании засранца его идентификатор не меняется. + +Остаётся проблема: если за время пребывания в комнате засранец сменил несколько ников, то если мы перезайдём в комнату, нам прилетит история, в которой могут быть сообщения с этих ников; при этом игнорированы будут только сообщения, пришедшие с текущего ника игнорируемого, если он в данный момент находится в комнате. + +Бороться с этим злом, видимо, нельзя, т.к. с сообщениями истории реальные джиды не передаются, даже если они доступны. Хранить историю смены ников — глупо, т. к. опять встаёт проблема "запачканных" ников: что если в комнате появится нормальная персона, взявшая себе один из таких ников? + +C'est la vie. + +## Переконфигурации комнаты + +Уровень анонимности комнаты может меняться; текущая версия ёжика не умеет генерить уведомления об этом, а ткаббер не умеет их просекать, так что проблема "рантайма" нас (пока) не интересует. Интересует проблема соотношения сохранённых правил и новой конфигурации комнаты. + +Интересны 2 случая: + +* "Реальные джиды доступны → Сохранены правила с реальными джидами → Комната переконфигурирована и реальные джиды больше недоступны" — в этом случае соответствующие сохранённые правила перестают иметь смысл, так как их больше не применить к участникам. +* "Реальные джиды недоступны → Сохранены правила с джидами комнаты → Комната переконфигурирована и реальные джиды доступны" — в этом случае, по идее, следует "продвинуть" джиды комнаты до реальных при первой возможности; насколько это правильно? (нет гарантии, что комнатный джид в момент сохранения соответствовал человеку, который с ним объявился в комнате в данный момент). +* Ещё варианты? + +Прямолинейный подход — хранить _и_ комнатный, _и_ реальный джиды, если возможно, — страдает от той же проблемы: связь между этими джидами можно проверить только при наличии доступа к реальным джидам. Кроме того, это затрудняет хранение правил. + +**Текущая реализация:** храним либо реальный джид, либо -- ник; первый имеет преимущество. На проблемы с переконфигурацией плюём, руководствуясь принципами бритвы "brAun Occam". :) Кроме того, скорее всего будет приделан диалог формального редактирования правил, при помощи которого можно будет обороть такие проблемы. + +**Вопрос:** не следует ли хранить вместе с джидом комнаты статус её анонимности и каким-либо образом пердуперждать пользователя, если он изменился с момента последнего сохранения правил? (Выглядит разумным компромиссом.) Собственно, не мудрствуя лукаво: факт доступности реального джида во время обработки присутствия от первого же присутствующего позволяет узнать изменился ли статус анонимности комнаты. + +[Archimed](Участник_Archimed.md) 17:06, 18 декабря 2006 (MSK) + +Хранить статус комнаты вместе с её JID - мне кажется хорошим решением. Может вместо формального диалога редактирования правил сделать просто ещё одну группу «Игнор», вдобавок к «Модераторы» и «Участники» в списке участников конференции? И добавить возможность перетаскивать ники в/из этой группы. + + Index: wiki/ru/Nick_coloring.md ================================================================== --- wiki/ru/Nick_coloring.md +++ wiki/ru/Nick_coloring.md @@ -1,81 +1,73 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Nick_coloring/index.html) + # Nick coloring Материал из Tkabber Wiki -Предлагается переделать систему раскраски ников/сообщений. - -В настоящее время схема такая: - -* Если ник неизвестен ткабберу, он выбирает цвет случайным образом из некоторого - предварительно сформированного пула; -* Этот цвет закрепляется за ником, соответствия ников и цветов сохраняются; -* Цвет ника можно менять вручную. - -Идея [*hypersw*](Участник_Hypersw.md): - -* Убрать пул и случайность; генерировать цвет из набора ярких цветов на - основе (некоторого) хэша строки ника; - -Идея [**teo**](Участник_Teo.md): - -* Не хранить соответствие цветов никам для "автосгенерированных" цветов; -* Запоминать только ручные изменения; -* Не делать даже run-time карту отображения ников в цвета, считать цвет - для каждого сообщения при помощи упомянутой хэш-функции. - -[16:55]\ teo: насчёт раскраски ников: если ты не хочешь хранить соответствие -цветов никам, то как их вручную редактировать? или мы будем хранить только эти вручную -заданные цвета? - -[16:55]\ kostix: да - -[16:56]\ там надо просто вынести все обращения к массиву NickColors в -отдельную процедуру. которая проверит массив, и если там нет ника, то -сгенерирует цвет сама. +Предлагается переделать систему раскраски ников/сообщений. + +В настоящее время схема такая: + +* Если ник неизвестен ткабберу, он выбирает цвет случайным образом из некоторого предварительно сформированного пула; +* Этот цвет закрепляется за ником, соответствия ников и цветов сохраняются; +* Цвет ника можно менять вручную. + +Идея [hypersw](Участник_Hypersw.md): + +* Убрать пул и случайность; генерировать цвет из набора ярких цветов на основе (некоторого) хэша строки ника; + +Идея [teo](Участник_Teo.md): + +* Не хранить соответствие цветов никам для "автосгенерированных" цветов; +* Запоминать только ручные изменения; +* Не делать даже run-time карту отображения ников в цвета, считать цвет для каждого сообщения при помощи упомянутой хэш-функции. + +[16:55]\ teo: насчёт раскраски ников: если ты не хочешь хранить соответствие цветов никам, то как их вручную редактировать? или мы будем хранить только эти вручную заданные цвета? + +[16:55]\ kostix: да + +[16:56]\ там надо просто вынести все обращения к массиву NickColors в отдельную процедуру. которая проверит массив, и если там нет ника, то сгенерирует цвет сама. --- -В качестве хэш-функций предполагается использовать что-либо из **tcllib**: +В качестве хэш-функций предполагается использовать что-либо из **tcllib**: -* [cksum](http://tcllib.sourceforge.net/doc/cksum.html) -* [sum](http://tcllib.sourceforge.net/doc/sum.html) +* [cksum](http://tcllib.sourceforge.net/doc/cksum.html) +* [sum](http://tcllib.sourceforge.net/doc/sum.html) -Тесты (Tcl 8.4.9, cksum 1.1.0, sum 1.1.0, Linux 2.6.8, 5996.54 bogomips): +Тесты (Tcl 8.4.9, cksum 1.1.0, sum 1.1.0, Linux 2.6.8, 5996.54 bogomips): % time { crc::cksum gabbagabbahey! } 10000 67 microseconds per iteration % time { crc::sum gabbagabbahey! } 10000 41 microseconds per iteration -Использовать, видимо, надо **sum**, т.к. нас интересует наибольшая скорость вычисления. +Использовать, видимо, надо **sum**, т.к. нас интересует наибольшая скорость вычисления. --- -Заморочки с RGB vs HLS от [*hypersw*](Участник_Hypersw.md): +Заморочки с RGB vs HLS от [hypersw](Участник_Hypersw.md): -[раз](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2006/12/24.html#01:12:07): +[раз](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2006/12/24.html#01:12:07): -\ kostix: Алгоритм примерно такой. +\ kostix: Алгоритм примерно такой. nickname-string => hash hash % 252 => hue (hue, default-luminosity, default-saturation) => color -\ kostix: +\ kostix: Color GetNickColor(string sNickName) { byte hue = unchecked((uint)sNickName.GetHashCode()) % 253; return HLS2RGB(hue, 80, 252); } -[два](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2006/12/24.html#02:18:45): - -\ kostix: +[два](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2006/12/24.html#02:18:45): \ kostix: /// /// Converts an HLS color to an RGB color and returns three byte components. /// public static void HLStoRGB(UInt16 H, UInt16 L, UInt16 S, out Byte R, out Byte G, out Byte B) @@ -104,13 +96,13 @@ G = (byte)((HueToRGB(Magic1, Magic2, H) * c_nMaxRGB + (c_nMaxHLS / 2)) / c_nMaxHLS); B = (byte)((HueToRGB(Magic1, Magic2, (ushort)(H - (c_nMaxHLS / 3))) * c_nMaxRGB + (c_nMaxHLS / 2)) / c_nMaxHLS); } } -[три](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2006/12/24.html#02:20:02): +[три](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2006/12/24.html#02:20:02): -\ kostix: и ещё +\ kostix: и ещё /// /// Utility routine for HLStoRGB. /// public static UInt16 HueToRGB(UInt16 n1, UInt16 n2, UInt16 hue) @@ -131,47 +123,24 @@ return (n1); } --- -Теория от [*hypersw*](Участник_Hypersw.md): - -\ kostix: В системе координат HLS можно сгенерить разные цвета примерно одной -яркости, отличающиеся оттенком. В координатах RGB ты это так просто не сделаешь. Хотя -попробовать можно — задаёшь 3 или 6 базовых цветов (равномерно отстоящих на цветовом круге), -делаешь одномерную координату, по ней определяешь, между какими двумя цветами попала точка, -намешиваешь их пропорционально. По сути получится эмуляция HLS, зачем, если всё уже придумано до нас :) - -\ kostix: Если рассмотреть пространство RGB, где R, G, B — три перпендикулярные -координатные оси (каждая от 0 до 255), то получится кубик. Цвета с одинаковой яркостью -(примерно…) будут сидеть в плоскости, перпендикулярной большой диагонали (0,0,0) — (255,255,255). -На этой диагонали — серые цвета, чем дальше от неё, тем сочнее. Таким образом, нас -интересует линия, получающаяся при пересечении той плоскостью граней куба. - -\ kostix: в зависимости от точки на большой диагонали, через которую проходит -плоскость, наша линия будет либо треугольником, либо шестиугольником. Ну или точкой, на -концах :) Пространство HLS делает из этой хрени два конуса, состыкованных основаниями. Ось -(линия между вершинами) — бывшая большая диагональ куба, с серыми цветами. На поверхности -конуса — самые сочные цвета. - ---- - -[**ycbl**](Участник_Bigote.md) предлагает: в случае возможности видеть джиды участников (в -полуанонимных комнатах для админов и в неанонимных — для всех) генерировать цвета не по -никам, а именно по джидам участников. Таким образом, например, некто kostix, любящий -переименовываться в кого ни попадя, зимой и летом будет виден одним цветом. Собственно, -ничто не мешает также отслеживать переименования участников и пристёгивать старые цвета к -новым никам → решение проблемы для анонимных и полуанонимных комнат (для не-админов). -Механизм отслеживания можно взять из плагина игноров. - -[**Kostix**](Участник_Kostix.md) 03:29, 27 декабря 2006 (MSK) Идея с джидами интересна. -Возможно, так и стоит сделать. Отслеживание ников требует более сложных заморочек типа -таблицы связей "канонических" ников (на которых считается хэш) с текущими. Это противоречит -идее _не хранить таблицу отображения ников на их цвета в памяти_ (см. выше). - ---- - -[**ycbl**](Участник_Bigote.md) 00:06, 24 марта 2008 (MSK) Ещё одна мысль: если уж переделывать, -то стоит учесть разные цветовые схемы и добавить в настройки возможность выбора цветовой -гаммы ников. Потому что если у человека установлена тёмная схема, чёрные и синие цвета -ников будут практически не видны, как не видны в стандартной схеме разные розовые, -бледно-оранжевые и прочие пастельные цвета. +Теория от [hypersw](Участник_Hypersw.md): + +\ kostix: В системе координат HLS можно сгенерить разные цвета примерно одной яркости, отличающиеся оттенком. В координатах RGB ты это так просто не сделаешь. Хотя попробовать можно — задаёшь 3 или 6 базовых цветов (равномерно отстоящих на цветовом круге), делаешь одномерную координату, по ней определяешь, между какими двумя цветами попала точка, намешиваешь их пропорционально. По сути получится эмуляция HLS, зачем, если всё уже придумано до нас :) + +\ kostix: Если рассмотреть пространство RGB, где R, G, B — три перпендикулярные координатные оси (каждая от 0 до 255), то получится кубик. Цвета с одинаковой яркостью (примерно…) будут сидеть в плоскости, перпендикулярной большой диагонали (0,0,0) — (255,255,255). На этой диагонали — серые цвета, чем дальше от неё, тем сочнее. Таким образом, нас интересует линия, получающаяся при пересечении той плоскостью граней куба. + +\ kostix: в зависимости от точки на большой диагонали, через которую проходит плоскость, наша линия будет либо треугольником, либо шестиугольником. Ну или точкой, на концах :) Пространство HLS делает из этой хрени два конуса, состыкованных основаниями. Ось (линия между вершинами) — бывшая большая диагональ куба, с серыми цветами. На поверхности конуса — самые сочные цвета. + +--- + +[ycbl](Участник_Bigote.md) предлагает: в случае возможности видеть джиды участников (в полуанонимных комнатах для админов и в неанонимных — для всех) генерировать цвета не по никам, а именно по джидам участников. Таким образом, например, некто kostix, любящий переименовываться в кого ни попадя, зимой и летом будет виден одним цветом. Собственно, ничто не мешает также отслеживать переименования участников и пристёгивать старые цвета к новым никам → решение проблемы для анонимных и полуанонимных комнат (для не-админов). Механизм отслеживания можно взять из плагина игноров. + +[Kostix](Участник_Kostix.md) 03:29, 27 декабря 2006 (MSK) Идея с джидами интересна. Возможно, так и стоит сделать. Отслеживание ников требует более сложных заморочек типа таблицы связей "канонических" ников (на которых считается хэш) с текущими. Это противоречит идее _не хранить таблицу отображения ников на их цвета в памяти_ (см. выше). + +--- + +[ycbl](Участник_Bigote.md) 00:06, 24 марта 2008 (MSK) Ещё одна мысль: если уж переделывать, то стоит учесть разные цветовые схемы и добавить в настройки возможность выбора цветовой гаммы ников. Потому что если у человека установлена тёмная схема, чёрные и синие цвета ников будут практически не видны, как не видны в стандартной схеме разные розовые, бледно-оранжевые и прочие пастельные цвета. + + DELETED wiki/ru/Pages.md Index: wiki/ru/Pages.md ================================================================== --- wiki/ru/Pages.md +++ /dev/null @@ -1,136 +0,0 @@ -[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Pages/index.html) - -# Pages - -Материал из Tkabber Wiki - -Эта страница была предназначена для перенаправлений с искусственных "коротких" -ссылок, которые ставятся в темы комнат и вообще проще. - -Однако в один прекрасный день мы подумали: "А что это мы маемся дурью? У нас же -теперь поддомены есть. Мы можем создавать странички с короткими английскими именами, -которые будут перенаправлять пользователей на страницы с контентом. -И при этом не мешать английским статьям, которые находятся на другом домене". Так и порешили. - -Но страница эта пускай останется тут. Она не повредит и как в качестве удобного -списка "заредирекченных" статей, так и в качестве полигона для создания новых -англоязычных страниц (потому что их проще всего создавать, просто воткнув некое -имя в двойные квадратные скобки на какой-то существующей странице — как раз на этой). - -Давать ссылку надо так: - -> http://ru.tkabber.jabe.ru/index.php/pages\#РАЗДЕЛ\_ТУТ - http://ru.tkabber.jabe.ru/index.php/РАЗДЕЛ_ТУТ - -к примеру (регистр первой буквы имени статьи в данном случае неважен): - -> http://ru.tkabber.jabe.ru/index.php/pages\#fonts - http://ru.tkabber.jabe.ru/index.php/Fonts - -#### beginners - -[**Начинающим**](Начинающим.md) - -#### color-pics - -[**Цветовые темы и пиктограммы**](Цветовые_темы_и_пиктограммы.md) - -#### dist - -[**Дистрибутивы, которые мы выбираем**](Дистрибутивы__которые_мы_выбираем.md) - -#### emoticons - -[**Смайлики и аватары**](Смайлики_и_аватары.md) - -#### FAQ - -[**Ткаббер ЧаВо**](Ткаббер_ЧаВо.md) - -#### FAQ-appearance-sound - -[**Ткаббер ЧаВо/Внешний вид и звук**](Ткаббер_ЧаВо/Внешний_вид_и_звук.md) - -#### FAQ-glitches - -[**Ткаббер ЧаВо/Глюки**](Ткаббер_ЧаВо/Глюки.md) - -#### FAQ-howto - -[**Ткаббер ЧаВо/Как мне...?**](Ткаббер_ЧаВо/Как_мне..._.md) - -#### FAQ-miscellanea - -[**Ткаббер ЧаВо/Разное**](Ткаббер_ЧаВо/Разное.md) - -#### filetransfer - -[**Пересылка файлов: теория**](Пересылка_файлов__теория.md) - -#### fonts - -[**Пуско-наладка шрифтов в Ткаббере**](Шрифты.md) - -#### gates - -[**Гейты во вражеские сети**](Гейты_во_вражеские_сети.md) - -#### gtalk - -[**Google Talk**](Google_Talk.md) - -#### login - -[**Между офлайном и онлайном**](Между_офлайном_и_онлайном.md) - -#### mrim-spam - -[**Блокировка MRIM-спама**](Блокировка_MRIM-спама.md) - -#### plugins - -[**Плагины**](Плагины.md) - -#### patches - -[**Патчи**](Патчи.md) - -#### remote-control - -[**Удалённое управление с помощью send**](Удалённое_управление_с_помощью_send.md) - -#### sound - -[**Проблемы со звуком**](Проблемы_со_звуком.md) - -#### sound themes - -[**Звуковые схемы**](Звуковые_схемы.md) - -#### todo - -[**Планы на будущее**](Планы_на_будущее.md) - -#### topic - -[**Ну очень развёрнутый топик конференции** `tkabber@conference.jabber.ru`](Остров_посланных_на....md) - -#### traffic - -[**Low traffic HOWTO**](Low_traffic_HOWTO.md) - -#### tuning - -[**Настройка Ткаббера: азы и глубже**](Настройка_Ткаббера__азы_и_глубже.md) - -#### tweaks - -[**Нетривиальные настройки**](Нетривиальные_настройки.md) - -#### win-howto - -[**Tkabber Windows Mini HOWTO**](Tkabber_Windows_Mini_HOWTO.md) - -#### x-ttf - -[**Проблемы X Window и TTF**](Проблемы_X_Window_и_TTF.md) Index: wiki/ru/Plugins/Alarm/Changelog.md ================================================================== --- wiki/ru/Plugins/Alarm/Changelog.md +++ wiki/ru/Plugins/Alarm/Changelog.md @@ -1,30 +1,30 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Plugins/Alarm/Changelog/index.html) + # Plugins/Alarm/Changelog -Материал из Tkabber Wiki - -### version 0.3 - -* Better errors handling -* Support for incoming \ keyword. [JAJC plugin buzz](http://www.remiq.net/jajc/#buzz) - and yahoo uses it for their alarms. -* Smart sending: plugin sends inbound alarms only to clients which supports them and - keyword \ to others. It is disabled by default. -* Now "alarm!" is not hardcoded keyword and you can change it as you wish. - -### version 0.2 - -* Fix: Alarm sound now plays under windows too -* Now it's possible to receive alarm with keyword "alarm!" instead of - using iq stanza (inbound alarm) (for other clients) -* Resort default rule list for better usability - -### version 0.1 - -* Protocol description -* Base GUI support: menuitem to menus, button to toolbar in the chat -* Analyse responds -* Disco item and handler -* Plugin options -* Base types of alarm: sound, messagebox, message in the chat +Материал из Tkabber Wiki. + +### version 0.3 + +* Better errors handling +* Support for incoming \ keyword. [JAJC plugin buzz](http://www.remiq.net/jajc/#buzz) and yahoo uses it for their alarms. +* Smart sending: plugin sends inbound alarms only to clients which supports them and keyword \ to others. It is disabled by default. +* Now "alarm!" is not hardcoded keyword and you can change it as you wish. + +### version 0.2 + +* Fix: Alarm sound now plays under windows too +* Now it's possible to receive alarm with keyword "alarm!" instead of using iq stanza (inbound alarm) (for other clients) +* Resort default rule list for better usability + +### version 0.1 + +* Protocol description +* Base GUI support: menuitem to menus, button to toolbar in the chat +* Analyse responds +* Disco item and handler +* Plugin options +* Base types of alarm: sound, messagebox, message in the chat + + Index: wiki/ru/Plugins/Traffic/Changelog.md ================================================================== --- wiki/ru/Plugins/Traffic/Changelog.md +++ wiki/ru/Plugins/Traffic/Changelog.md @@ -1,28 +1,31 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Plugins/Traffic/Changelog/index.html) + # Plugins/Traffic/Changelog -Материал из Tkabber Wiki - -### version 0.3 - -* Save stats into a file -* Human-readable counters -* Capability to reset counters -* Show nicks instead of JIDs -* Select new connection for current if "0 None" was selected. -* Refresh table on combobox changes -* Count bytes instead of UTF-8 symbols (you need repatch tkabber again with new patch) -* Timer for autorefresh -* Translations to Russian. -* Some bugfixes - -### version 0.2 - -* remove autoopen on the start -* add some documents (TODO, Changelog) - -### version 0.1 - -* Patch for tkabber -* Base features: grab statistics, GUI, sorting, multiconnection support +Материал из Tkabber Wiki. + +### version 0.3 + +* Save stats into a file +* Human-readable counters +* Capability to reset counters +* Show nicks instead of JIDs +* Select new connection for current if "0 None" was selected. +* Refresh table on combobox changes +* Count bytes instead of UTF-8 symbols (you need repatch tkabber again with new patch) +* Timer for autorefresh +* Translations to Russian. +* Some bugfixes + +### version 0.2 + +* remove autoopen on the start +* add some documents (TODO, Changelog) + +### version 0.1 + +* Patch for tkabber +* Base features: grab statistics, GUI, sorting, multiconnection support + + ADDED wiki/ru/Redirects.md Index: wiki/ru/Redirects.md ================================================================== --- /dev/null +++ wiki/ru/Redirects.md @@ -0,0 +1,134 @@ +[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Pages/index.html) + + +# Redirects + +Материал из Tkabber Wiki + +[Pages](Pages.md) + + Эта страница была предназначена для перенаправлений с искусственных "коротких" ссылок, которые ставятся в темы комнат и вообще проще. + +Однако в один прекрасный день мы подумали: "А что это мы маемся дурью? У нас же теперь поддомены есть. Мы можем создавать странички с короткими английскими именами, которые будут перенаправлять пользователей на страницы с контентом. И при этом не мешать английским статьям, которые находятся на другом домене". Так и порешили. + +Но страница эта пускай останется тут. Она не повредит и как в качестве удобного списка "заредирекченных" статей, так и в качестве полигона для создания новых англоязычных страниц (потому что их проще всего создавать, просто воткнув некое имя в двойные квадратные скобки на какой-то существующей странице — как раз на этой). + +Давать ссылку надо так: + + http://ru.tkabber.jabe.ru/index.php/pages\#РАЗДЕЛ\_ТУТ + http://ru.tkabber.jabe.ru/index.php/РАЗДЕЛ_ТУТ + +к примеру (регистр первой буквы имени статьи в данном случае неважен): + + http://ru.tkabber.jabe.ru/index.php/pages\#fonts + http://ru.tkabber.jabe.ru/index.php/Fonts + +#### beginners + +[beginners](Beginners.md) \#beginners → [Начинающим](Начинающим.md) + +#### color-pics + +[color-pics](Color-pics.md) \#color-pics → [Цветовые темы и пиктограммы](Цветовые_темы_и_пиктограммы.md) + +#### dist + +[dist](Dist.md) \#dist → [Дистрибутивы, которые мы выбираем](Дистрибутивы__которые_мы_выбираем.md) + +#### emoticons + +[emoticons](Emoticons.md) \#emoticons → [Смайлики и аватары](Смайлики_и_аватары.md) + +#### FAQ + +[faq](Faq.md) \#FAQ → [Ткаббер ЧаВо](Ткаббер_ЧаВо.md) + +#### FAQ-appearance-sound + +[faq-appearance-sound](Faq-appearance-sound.md) \#FAQ-appearance-sound → [Ткаббер ЧаВо/Внешний вид и звук](Ткаббер_ЧаВо/Внешний_вид_и_звук.md) + +#### FAQ-glitches + +[faq-glitches](Faq-glitches.md) \#FAQ-glitches → [Ткаббер ЧаВо/Глюки](Ткаббер_ЧаВо/Глюки.md) + +#### FAQ-howto + +[faq-howto](Faq-howto.md) \#FAQ-howto → [Ткаббер ЧаВо/Как мне...?](Ткаббер_ЧаВо/Как_мне..._.md) + +#### FAQ-miscellanea + +[faq-misc](Faq-misc.md) \#FAQ-misc → [Ткаббер ЧаВо/Разное](Ткаббер_ЧаВо/Разное.md) + +#### filetransfer + +[filetransfer](Filetransfer.md) \#filetransfer → [Пересылка файлов: теория](Пересылка_файлов__теория.md) + +#### fonts + +[fonts](Fonts.md) \#fonts → [Пуско-наладка шрифтов в Ткаббере](Шрифты.md) + +#### gates + +[gates](Gates.md) \#gates → [Гейты во вражеские сети](Гейты_во_вражеские_сети.md) + +#### gtalk + +[gtalk](Gtalk.md) \#gtalk → [Google Talk](Google_Talk.md) + +#### login + +[login](Login.md) \#login → [Между офлайном и онлайном](Между_офлайном_и_онлайном.md) + +#### mrim-spam + +[mrim-spam](Mrim-spam.md) \#mrim-spam → [Блокировка MRIM-спама](Блокировка_MRIM-спама.md) + +#### plugins + +[plugins](Plugins.md) \#plugins → [Плагины](Плагины.md) + +#### patches + +[patches](Patches.md) \#patches → [Патчи](Патчи.md) + +#### remote-control + +[remote-control](Remote-control.md) \#remote-control → [Удалённое управление с помощью send](Удалённое_управление_с_помощью_send.md) + +#### sound + +[sound](Sound.md) \#sound → [Проблемы со звуком](Проблемы_со_звуком.md) + +#### sound themes + +[sound-themes](Sound-themes.md) \#sound → [Звуковые схемы](Звуковые_схемы.md) + +#### todo + +[todo](Todo.md) \#todo → [Планы на будущее](Планы_на_будущее.md) + +#### topic + +[topic](Topic.md) \#topic → [Ну очень развёрнутый топик конференции `tkabber@conference.jabber.ru`](Остров_посланных_на....md) + +#### traffic + +[traffic](Traffic.md) \#traffic → [Low traffic HOWTO](Low_traffic_HOWTO.md) + +#### tuning + +[tuning](Tuning.md) \#tuning → [Настройка Ткаббера: азы и глубже](Настройка_Ткаббера__азы_и_глубже.md) + +#### tweaks + +[tweaks](Tweaks.md) \#tweaks → [Нетривиальные настройки](Нетривиальные_настройки.md) + +#### win-howto + +[win-howto](Win-howto.md) \#win-howto → [Tkabber Windows Mini HOWTO](Tkabber_Windows_Mini_HOWTO.md) + +#### x-ttf + +[x-ttf](X-ttf.md) \#x-ttf → [Проблемы X Window и TTF](Проблемы_X_Window_и_TTF.md) + + Index: wiki/ru/SVN_disclaimer.md ================================================================== --- wiki/ru/SVN_disclaimer.md +++ wiki/ru/SVN_disclaimer.md @@ -1,6 +1,7 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/SVN_disclaimer/index.html) + # SVN disclaimer Материал из Tkabber Wiki. @@ -10,267 +11,174 @@ * [1 Введение](#Введение) * [2 "На переднем крае"](#На_переднем_крае) * [3 Пререлизы](#Пререлизы) * [4 В помощь начинающему тестеру](#В_помощь_начинающему_тестеру) - * [4.1 Установка](#Установка) - * [4.1.1 В Линукс](#В_Линукс) - * [4.1.2 В Виндовс](#В_Виндовс) - * [4.2 Первые шаги](#Первые_шаги) - * [4.3 Как параллельно работать с обычной и альфа-версией Ткаббера](#Как_параллельно_работать_с_обычной_и_альфа-версией_Ткаббера) - * [4.4 Как сообщать о баге](#Как_сообщать_о_баге) - -## Введение -Увы, но у подавляющего большинства начинающих пользователей, пожелавших по какой-либо причине -"попробовать" "версию из репозитория" (а то и "пересесть" на неё), есть серьёзное непонимание -того, что такое "альфа версия" применительно к разработке программного обеспечения и под чем вы -"подписываетесь", начиная использовать версию, находящуюся в разработке. Сюда же относятся -вопросы в стиле "как мне получить версию из SVN???", которые обычно остаются неотвеченными -в комнате Ткаббера. - -Итак, в начале — основа-основ: "зрелое" программное обеспечение обычно разрабатывается циклически, -путём повторения трёх этапов: - -1. _Добавление новой функциональности_ (новых "фич"), улучшение старой. Самый главный и самый - длинный период. Обычно про ПО, находящееся на этом этапе разработки, говорят, что оно "в альфа - версии". Код в данном состоянии предназначен для "обкатки" только разработчиками и _очень_ - опытными пользователями. -1. _"Заморозка"_ следует после того, как ведущий ("мейнтейнер") проекта принял решение выпустить - следующую _стабильную_ версию. На этом этапе новая функциональность не добавляется (за - исключением тривиальных вещей), только исправляются найденные ошибки. Обычно в этот период - выпускается несколько "бета" версий, предназначенных для тестирования широкой публикой. -1. _Выпуск._ После того, как ведущий проекта считает, что все очевидные ошибки найдены и -исправлены, следует выпуск ("релиз") новой стабильной версии ПО. - -Применительно к Ткабберу, эти три стадии определяют три варианта "доступности" Ткаббера для -использования: - -##### Разработка  -> Код официально доступен только через [репозиторий](http://tkabber.jabber.ru/svn). - -##### "Заморозка" и широкое тестирование  -> Код доступен в виде стандартных архивов с "бета версиями"; они содержат то, что обычно - (не совсем верно) называется "исходниками Ткаббера". - -##### Релиз  -> Код доступен в виде "архива с исходниками"; он является единственной "референсной" - формой распространения Ткаббера. Однако разработчики Ткаббера обычно выпускают Ткаббер - в виде специальных дистрибутивов, предназначенных для удобного использования Ткаббера - на конкретных системах и пригодных даже для совершенно неопытных пользователей, - например, [**старпаков и инсталляторов**](Дистрибутивы__которые_мы_выбираем.md#Прилавок). - -## "На переднем крае" -Настало время поподробнее остановиться на "нестабильной версии", которая "живёт" в репозитории -[системы управления версиями](http://ru.wikipedia.org/wiki/Система управления версиями) -[Subversion](http://ru.wikipedia.org/wiki/Subversion). - -Существует несколько мифов и непониманий, связанных с нестабильной версией Ткаббера. - -Во-первых, несмотря на то, что Ткаббер разрабатывается таким способом, что "голова" -репозитория обычно вполне работоспособна, иногда туда вносятся баги. Иногда это весьма -серьёзные баги, которые вполне могут приводить к частичной потери трудоспособности -Ткаббером до тех пор, пока баг не будет исправлен. Непонимание того, что "нестабильная" -версия в любой момент "вдруг" может оказаться неработающей — одна из главных проблем -начинающих. Причем проблемы могуть быть самыми разными. Например, в одночасье может быть -изменена система хранения протоколов чата, а код для автоматической конвертации старого -формата в новый ещё не будет написан. - -Посему совершенно неправильным является отношение к репозиторию просто как к неудобному -(или, наоборот, удобному) способу получать новую функциональность в Ткаббере. Если что-то -ломается, вы оказываетесь предоставлены сами себе. - -Во-вторых, если вы не разработчик, и если вы, прочитав первый пункт, согласны быть -"подопытным кроликом" (а наличие таких пользователей на самом деле весьма важно для -разработчиков), вы принимаете на себя ответственность1 действовать по -определённой схеме. Самое главное: вы _обязательно_ должны читать логи коммитов в -репозиторий или файл **ChangeLog** — без этого вы становитесь мишенью для несуществующих багов: -изменившуюся функциональность или её конфликт со старыми настройками, плагинами и чем угодно -ещё вы воспринимаете как баг и тратите время разработчиков на ковыряния с вашей проблемой. - -Итак, подытожим: чтобы следить за нестабильной версией и помогать разработчикам выявлять -ошибки, вы должны: - -1. _Знать матчасть._ В нашем случае это означает: - 1. Понимание принципа работы систем управления версиями и принципа работы Subversion; - в частности, вы должны совершенно чётко представлять себе, что происходит, когда - вы делаете **svn update** и что означают сообщения клиента в ходе выполнения этой операции. - 1. Умение "откатывать" версию вашего рабочего каталога назад, если вы наткнулись на баг - в свежем коммите, который препятствует вашей нормальной работе с Ткаббером. -1. Читать логи изменений в обязательном порядке. Сопоставлять наблюдаемые вами - изменения в работе, проблемы Ткаббера с этой информацией. -1. Уметь сообщать о багах так, чтобы разработчикам было понятно, о чём идёт речь. - -Изучить матчасть поможет свободно доступная [книга по Subversion](http://svnbook.red-bean.com/) -(переведённая, между прочим, на русский). Если же всё изложенное — не для вас, не мешайте -разработчикам разрабатывать и "вкладывайтесь" в тестирование на другой стадии — на стадии -"пререлиза", о которой рассказано ниже. - -![(!)](../images/Hammer.png) **Сделать:** Объяснить отсутствие "ночных билдов" - -![(!)](../images/Hammer.png) **Сделать:** Объяснить почему Subversion, а не... - -## Пререлизы -Таковые бывают и у самого Ткаббера (обычно они называются "беты" и информация о них -помещается как в новостях на [официальном сайте](http://tkabber.jabber.ru), так и -в [списках рассылки](http://lists.jabber.ru/mailman/listinfo/tkabber-dev)), и у его -дистрибутивов, которые собираются сразу после выхода релиза Ткаббера и затем обычно -проходят стадию тестирования перед выпуском окончательных версий. - -Беты, как правило, не содержат очевидных проблем, и их использование относительно -безопасно для ваших нервов. - -Тестирование пререлизных версий очень полезно для продукта. Имейте в виду, что проблемы -в уже выпущенной стабильной версии свободного ПО — это проблемы, прежде всего, самих -пользователей, так как за разработчиками редко стоит некая организация, способная -организовать систематическое тестирование (при помощи оплаченной команды специалистов). -Так что если вы хотите быть уверены, что стабильная версия будет работать так, как надо, -тестируйте её бета-версии. - -![(!)](../images/Hammer.png) **Сделать:** написать про необходимость иметь "каноническую" -инсталляцию для тестирования "исходников" + * [4.1 Установка](#Установка) + * [4.1.1 В Линукс](#В_Линукс) + * [4.1.2 В Виндовс](#В_Виндовс) + * [4.2 Первые шаги](#Первые_шаги) + * [4.3 Как параллельно работать с обычной и альфа-версией Ткаббера](#Как_параллельно_работать_с_обычной_и_альфа-версией_Ткаббера) + * [4.4 Как сообщать о баге](#Как_сообщать_о_баге) + +# Введение +Увы, но у подавляющего большинства начинающих пользователей, пожелавших по какой-либо причине "попробовать" "версию из репозитория" (а то и "пересесть" на неё), есть серьёзное непонимание того, что такое "альфа версия" применительно к разработке программного обеспечения и под чем вы "подписываетесь", начиная использовать версию, находящуюся в разработке. Сюда же относятся вопросы в стиле "как мне получить версию из SVN???", которые обычно остаются неотвеченными в комнате Ткаббера. + +Итак, в начале — основа-основ: "зрелое" программное обеспечение обычно разрабатывается циклически, путём повторения трёх этапов: + +1. _Добавление новой функциональности_ (новых "фич"), улучшение старой. Самый главный и самый длинный период. Обычно про ПО, находящееся на этом этапе разработки, говорят, что оно "в альфа версии". Код в данном состоянии предназначен для "обкатки" только разработчиками и _очень_ опытными пользователями. +1. _"Заморозка"_ следует после того, как ведущий ("мейнтейнер") проекта принял решение выпустить следующую _стабильную_ версию. На этом этапе новая функциональность не добавляется (за исключением тривиальных вещей), только исправляются найденные ошибки. Обычно в этот период выпускается несколько "бета" версий, предназначенных для тестирования широкой публикой. +1. _Выпуск._ После того, как ведущий проекта считает, что все очевидные ошибки найдены и исправлены, следует выпуск ("релиз") новой стабильной версии ПО. + +Применительно к Ткабберу, эти три стадии определяют три варианта "доступности" Ткаббера для использования: + + Разработка  + + Код официально доступен только через [репозиторий](http://tkabber.jabber.ru/svn). + + "Заморозка" и широкое тестирование  + + Код доступен в виде стандартных архивов с "бета версиями"; они содержат то, что обычно (не совсем верно) называется "исходниками Ткаббера". + + Релиз  + + Код доступен в виде "архива с исходниками"; он является единственной "референсной" формой распространения Ткаббера. Однако разработчики Ткаббера обычно выпускают Ткаббер в виде специальных дистрибутивов, предназначенных для удобного использования Ткаббера на конкретных системах и пригодных даже для совершенно неопытных пользователей, например, [старпаков и инсталляторов](Дистрибутивы__которые_мы_выбираем.md#Прилавок). + +# "На переднем крае" +Настало время поподробнее остановиться на "нестабильной версии", которая "живёт" в репозитории [системы управления версиями](http://ru.wikipedia.org/wiki/!8AB5<0 C?@02;5=8O 25@A8O<8) [Subversion](http://ru.wikipedia.org/wiki/Subversion). + +Существует несколько мифов и непониманий, связанных с нестабильной версией Ткаббера. + +Во-первых, несмотря на то, что Ткаббер разрабатывается таким способом, что "голова" репозитория обычно вполне работоспособна, иногда туда вносятся баги. Иногда это весьма серьёзные баги, которые вполне могут приводить к частичной потери трудоспособности Ткаббером до тех пор, пока баг не будет исправлен. Непонимание того, что "нестабильная" версия в любой момент "вдруг" может оказаться неработающей — одна из главных проблем начинающих. Причем проблемы могуть быть самыми разными. Например, в одночасье может быть изменена система хранения протоколов чата, а код для автоматической конвертации старого формата в новый ещё не будет написан. + +Посему совершенно неправильным является отношение к репозиторию просто как к неудобному (или, наоборот, удобному) способу получать новую функциональность в Ткаббере. Если что-то ломается, вы оказываетесь предоставлены сами себе. + +Во-вторых, если вы не разработчик, и если вы, прочитав первый пункт, согласны быть "подопытным кроликом" (а наличие таких пользователей на самом деле весьма важно для разработчиков), вы принимаете на себя ответственность1 действовать по определённой схеме. Самое главное: вы _обязательно_ должны читать логи коммитов в репозиторий или файл ChangeLog — без этого вы становитесь мишенью для несуществующих багов: изменившуюся функциональность или её конфликт со старыми настройками, плагинами и чем угодно ещё вы воспринимаете как баг и тратите время разработчиков на ковыряния с вашей проблемой. + +Итак, подытожим: чтобы следить за нестабильной версией и помогать разработчикам выявлять ошибки, вы должны: + +1. _Знать матчасть._ В нашем случае это означает: + 1. Понимание принципа работы систем управления версиями и принципа работы Subversion; в частности, вы должны совершенно чётко представлять себе, что происходит, когда вы делаете svn update и что означают сообщения клиента в ходе выполнения этой операции. + 1. Умение "откатывать" версию вашего рабочего каталога назад, если вы наткнулись на баг в свежем коммите, который препятствует вашей нормальной работе с Ткаббером. + +1. Читать логи изменений в обязательном порядке. Сопоставлять наблюдаемые вами изменения в работе, проблемы Ткаббера с этой информацией. +1. Уметь сообщать о багах так, чтобы разработчикам было понятно, о чём идёт речь. + +Изучить матчасть поможет свободно доступная [книга по Subversion](http://svnbook.red-bean.com/) (переведённая, между прочим, на русский). Если же всё изложенное — не для вас, не мешайте разработчикам разрабатывать и "вкладывайтесь" в тестирование на другой стадии — на стадии "пререлиза", о которой рассказано ниже. + +![(!)](../images/Hammer.png) **Сделать:** Объяснить отсутствие "ночных билдов" + +![(!)](../images/Hammer.png) **Сделать:** Объяснить почему Subversion, а не... + +# Пререлизы +Таковые бывают и у самого Ткаббера (обычно они называются "беты" и информация о них помещается как в новостях на [официальном сайте](http://tkabber.jabber.ru), так и в [списках рассылки](http://lists.jabber.ru/mailman/listinfo/tkabber-dev)), и у его дистрибутивов, которые собираются сразу после выхода релиза Ткаббера и затем обычно проходят стадию тестирования перед выпуском окончательных версий. + +Беты, как правило, не содержат очевидных проблем, и их использование относительно безопасно для ваших нервов. + +Тестирование пререлизных версий очень полезно для продукта. Имейте в виду, что проблемы в уже выпущенной стабильной версии свободного ПО — это проблемы, прежде всего, самих пользователей, так как за разработчиками редко стоит некая организация, способная организовать систематическое тестирование (при помощи оплаченной команды специалистов). Так что если вы хотите быть уверены, что стабильная версия будет работать так, как надо, тестируйте её бета-версии. + +![(!)](../images/Hammer.png) **Сделать:** написать про необходимость иметь "каноническую" инсталляцию для тестирования "исходников" --- -1 Понятно, что в мире free software (и в мире проприетарного ПО, кстати, тоже) -никто никому ничего "по настоящему" не обязан и ничего не должен. Здесь мы имеем в виду -чисто "социальные" и моральные обязательства, которые влечёт за собой участие в программном проекте. - -## В помощь начинающему тестеру -### Установка -#### В Линукс -Установка в линуксе проблем вызвать не должна. В Дебиане это вообще проще простого: +1 Понятно, что в мире free software (и в мире проприетарного ПО, кстати, тоже) никто никому ничего "по настоящему" не обязан и ничего не должен. Здесь мы имеем в виду чисто "социальные" и моральные обязательства, которые влечёт за собой участие в программном проекте. + +# В помощь начинающему тестеру +## Установка + +### В Линукс + +Установка в линуксе проблем вызвать не должна. В Дебиане это вообще проще простого: sudo apt-get install subversion subversion-tools -По желанию можно установить какой-нибудь графический front-end. - -#### В Виндовс -Одним из самых популярных клиентов Subversion под Виндовс можно смело назвать -[TortoiseSVN](http://tortoisesvn.tigris.org/). На странице скачивания можно найти как -последнюю версию программы (32 и 64 бит), так и языковые пакеты. Русский пакет тоже -присутствует, есть и мануал, пересказывать который здесь особого смысла нет. - -### Первые шаги -Самый первый шаг, который нужно предпринять, чтобы начать тестирование альфа-версии, -[описан на официальном сайте Ткаббера](http://tkabber.jabber.ru/svn). Он сводится к -скачиванию при помощи клиента SVN исходного кода Ткаббера куда-нибудь на жёсткий диск: +По желанию можно установить какой-нибудь графический front-end. + +### В Виндовс + +Одним из самых популярных клиентов Subversion под Виндовс можно смело назвать [TortoiseSVN](http://tortoisesvn.tigris.org/). На странице скачивания можно найти как последнюю версию программы (32 и 64 бит), так и языковые пакеты. Русский пакет тоже присутствует, есть и мануал, пересказывать который здесь особого смысла нет. + +## Первые шаги + +Самый первый шаг, который нужно предпринять, чтобы начать тестирование альфа-версии, [описан на официальном сайте Ткаббера](http://tkabber.jabber.ru/svn). Он сводится к скачиванию при помощи клиента SVN исходного кода Ткаббера куда-нибудь на жёсткий диск: svn co http://svn.xmpp.ru/repos/tkabber/trunk/tkabber tkabber-svn -Эта команда скачает весь транк Ткаббера в каталог **tkabber-svn**, _который создастся в том -месте, откуда вы её (команду) запускаете._ Если вам нужны плагины, можете скачать и их: +Эта команда скачает весь транк Ткаббера в каталог tkabber-svn, _который создастся в том месте, откуда вы её (команду) запускаете._ Если вам нужны плагины, можете скачать и их: svn co http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins tkabber-plugins-svn -Можно скачать и их, и Ткаббер одной командой: +Можно скачать и их, и Ткаббер одной командой: svn co http://svn.xmpp.ru/repos/tkabber/trunk tkabber-svn -В этом случае внутри каталога **tkabber-svn** вы найдёте два других: **tkabber** и **tkabber-plugins**. -Если вам нужны неофициальные плагины, содержащиеся в соответствующем репозитории -(там можно найти далеко не все плагины, описанные на этой вики), качайте их отсюда: +В этом случае внутри каталога tkabber-svn вы найдёте два других: tkabber и tkabber-plugins. Если вам нужны неофициальные плагины, содержащиеся в соответствующем репозитории (там можно найти далеко не все плагины, описанные на этой вики), качайте их отсюда: svn co https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins tkabber-3rd -Запуск тоже прост (предположим, Ткаббер установлен в **~/bin/tkabber-svn**): +Запуск тоже прост (предположим, Ткаббер установлен в ~/bin/tkabber-svn): cd ~/bin/tkabber-svn ./tkabber.tcl -Ещё одна полезная команда — **update**  +Ещё одна полезная команда — + + update  -> После скачивания Ткаббера нет нужды проделывать процедуру checkout (co) каждый раз. - Достаточно зайти в каталог Ткаббера или его плагинов и набрать + После скачивания Ткаббера нет нужды проделывать процедуру checkout (co) каждый раз. Достаточно зайти в каталог Ткаббера или его плагинов и набрать svn update -Если вам нужно откатиться на какую-то конкретную ревизию, пишите что-нибудь вроде +Если вам нужно откатиться на какую-то конкретную ревизию, пишите что-нибудь вроде svn update -r 1000 -Для автоматизации обновления в Windows (при использовании TortoiseSVN) можно создать батник с таким содержанием: +Для автоматизации обновления в Windows (при использовании TortoiseSVN) можно создать батник с таким содержанием: "C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe"/path:"c:\Program Files\TkabberSVN\" /command:update /closeonend:2 - "C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe"/path:"c:\Documents and Settings\User\Application Data\Tkabber\plugins\" /command:update /closeonend:2 + + "C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe"/path:"c:\Documents and Settings\User\Application Data\Tkabber\plugins\" /command:update /closeonend:2 -Подробности использования этих двух основных команд можно узнать, запросив помощи, например: +Подробности использования этих двух основных команд можно узнать, запросив помощи, например: svn help co svn help up -Первые шаги при использовании альфа-версии Ткаббера под виндами почти ничем не отличаются от -линуксовых, разве что вместо набора (а то и копи-пейста) одной строчки вам придётся самостоятельно -продираться сквозь дебри графического интерфейса или штудировать довольно объёмный мануал. - -![(!)](../images/Hammer.png) **Сделать:** Впрочем, если какой-нибудь доброволец разовьёт тему виндовс, возражений не будет. - -### Как параллельно работать с обычной и альфа-версией Ткаббера -Удобно иметь в системе установленную из репозиториев ОС стабильную версию Ткаббера, а каталог -с альфой забросить куда-нибудь к себе в домашний каталог (например, в **~/tkabber-svn** — меньше -геморроя с правами на запись в файлы, если потребуется или захочется что-нибудь допилить. -Однако следует помнить, что в любом случае будут читаться рабочие конфигурационные файлы, -лежащие в вашем домашнем каталоге: **~/.tkabber/config.tcl** и **~/.tkabber/custom.tcl**, -а у разных версий Ткаббера могут быть разные идеи о доступных настройках, и потому совместно -использовать одни и те же конфигурационные файлы сильно разными версиями Ткаббера может -и не получиться. - -Для решения этой проблемы рекомендуется заставить Ткаббер использовать другой каталог для -хранения настроек при помощи установки переменной окружения `TKABBER_HOME`: создайте -отдельный каталог для настроек альфа-версии Ткаббера, например, **~/.tkabber-svn** а скрипт -запуска (например, **~/bin/tkabber-svn**) сделайте таким: +Первые шаги при использовании альфа-версии Ткаббера под виндами почти ничем не отличаются от линуксовых, разве что вместо набора (а то и копи-пейста) одной строчки вам придётся самостоятельно продираться сквозь дебри графического интерфейса или штудировать довольно объёмный мануал. + +![(!)](../images/Hammer.png) **Сделать:** Впрочем, если какой-нибудь доброволец разовьёт тему виндовс, возражений не будет. + +## Как параллельно работать с обычной и альфа-версией Ткаббера + +Удобно иметь в системе установленную из репозиториев ОС стабильную версию Ткаббера, а каталог с альфой забросить куда-нибудь к себе в домашний каталог (например, в ~/tkabber-svn — меньше геморроя с правами на запись в файлы, если потребуется или захочется что-нибудь допилить. Однако следует помнить, что в любом случае будут читаться рабочие конфигурационные файлы, лежащие в вашем домашнем каталоге: ~/.tkabber/config.tcl и ~/.tkabber/custom.tcl, а у разных версий Ткаббера могут быть разные идеи о доступных настройках, и потому совместно использовать одни и те же конфигурационные файлы сильно разными версиями Ткаббера может и не получиться. + +Для решения этой проблемы рекомендуется заставить Ткаббер использовать другой каталог для хранения настроек при помощи установки переменной окружения `TKABBER_HOME`: создайте отдельный каталог для настроек альфа-версии Ткаббера, например, ~/.tkabber-svn а скрипт запуска (например, ~/bin/tkabber-svn) сделайте таким: #!/bin/sh export TKABBER_HOME=~/.tkabber-svn exec wish ~/tkabber-svn/tkabber/tkabber.tcl "$@" -Теперь можно скопировать файлы конфигурации из **~/.tkabber** в **~/.tkabber-svn** и запускать -альфа-версию как **~/bin/tkabber-svn** (или просто **tkabber-svn**, если **~/bin** находится -у вас в переменной окружения `PATH`). - -Возможно, вы захотите, чтобы логи обе версии вели совместно (формат хранения логов меняется -куда реже настроек). Для этого убедитесь, что переменные `::logger::options(logdir)` (группа -настроек "Customize" → "Chat" → "Logging") показывают на один и тот же каталог. Ну, или можно -создать симлинк **~/.tkabber-svn/logs** → **~/.tkabber/logs**. - -### Как сообщать о баге - -* Перво-наперво, как уже было посоветовано выше, внимательно прочитайте **ChangeLog**: возможно, - ваш баг — на самом деле фича :) -* Обновитесь — вдруг проблему уже разрешили? -* Сохраните лог ошибки, чтобы потом было чего предъявлять разработчикам (иначе в лучшем - случае не поверят). -* Иногда бывает нелишним сделать скриншот эпицентра. Вывесьте его на каком-нибудь - публичном фотохостинге (например, [imageshack](http://imageshack.us) (обязательно копируйте - самую последнюю ссылку на закачанную картинку из предложенных — она без рекламы) - или [keep4u](http://www.keep4u.ru)), и не надо предлагать скинуть скрин в приват или закинуть на почту. -* Однако перед тем как бежать жаловаться, попробуйте повторить ошибку. Если она повторяется - из запуска в запуск, постарайтесь проанализировать обстоятельства, которые могли её - вызвать: какие программы запущены параллельно, какие сопутствующие Ткабберу пакеты - установлены, ну и прочее. -* Попробуйте проблему локализовать (не перевести на русский, а сузить поиск, отрезав - варианты, в которых ошибка не наблюдается). -* Сообщая об ошибке, без напоминаний укажите версию операционки (в случае с Линуксом не - помешает и версия оконного менеджера), тикля и самого Ткаббера. - -...и ещё немного о социальном аспекте: - -* Обязательно имейте под рукой то, что у вас глючит, когда просите о помощи! Бессмысленно - "заходить с бомбуса", находясь на работе, и рассказывать о проблемах подключения Ткаббера, - оставшегося дома. -* Если проблема происходит не у вас, а у вашего друга/свата/брата, будет намного лучше, - если эта персона сама зайдёт в комнату Ткаббера и задаст свой вопрос — не стоит играть - в испорченный телефон. -* Никогда не спрашивайте — "есть ли кто живой" и готов ли кто-нибудь помочь вам. В Интернете - принцип **"NATAJA**" (**N**ever **A**sk **T**o **A**sk, **J**ust **A**sk) должен - исповедоваться неукоснительно: посетители конфы не сидят всё своё время перед - компьютерами, а также живут в разных часовых поясах. Посему просто чётко и максимально - подробно сформулируйте свой вопрос и ждите. Если ждать нет возможности, через некоторое - время проверьте [логи конференции](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru) - — возможно, кто-то уже прочитал и ответил на ваш вопрос (те, кто в состоянии ответить, - обычно читают логи и увидят его). Если ответа на вопрос не было, вежливо спросите, - не появилось ли у кого идей по поводу вопроса такого-то. - -![(!)](../images/Hammer.png) **Сделать:** дописать, если чего не хватает - -![(!)](../images/Hammer.png) **Сделать:** вообще-то этот раздел нужно слить с соответствующим -куском "Острова посланных на..." и оформить в виде отдельной статейки с тупым названием -"Как правильно задавать вопросы" Согласен. +Теперь можно скопировать файлы конфигурации из ~/.tkabber в ~/.tkabber-svn и запускать альфа-версию как ~/bin/tkabber-svn (или просто tkabber-svn, если ~/bin находится у вас в переменной окружения `PATH`). + +Возможно, вы захотите, чтобы логи обе версии вели совместно (формат хранения логов меняется куда реже настроек). Для этого убедитесь, что переменные `::logger::options(logdir)` (группа настроек "Customize" → "Chat" → "Logging") показывают на один и тот же каталог. Ну, или можно создать симлинк ~/.tkabber-svn/logs → ~/.tkabber/logs. + +## Как сообщать о баге + +* Перво-наперво, как уже было посоветовано выше, внимательно прочитайте ChangeLog: возможно, ваш баг — на самом деле фича :) +* Обновитесь — вдруг проблему уже разрешили? +* Сохраните лог ошибки, чтобы потом было чего предъявлять разработчикам (иначе в лучшем случае не поверят). +* Иногда бывает нелишним сделать скриншот эпицентра. Вывесьте его на каком-нибудь публичном фотохостинге (например, [imageshack](http://imageshack.us) (обязательно копируйте самую последнюю ссылку на закачанную картинку из предложенных — она без рекламы) или [keep4u](http://www.keep4u.ru)), и не надо предлагать скинуть скрин в приват или закинуть на почту. +* Однако перед тем как бежать жаловаться, попробуйте повторить ошибку. Если она повторяется из запуска в запуск, постарайтесь проанализировать обстоятельства, которые могли её вызвать: какие программы запущены параллельно, какие сопутствующие Ткабберу пакеты установлены, ну и прочее. +* Попробуйте проблему локализовать (не перевести на русский, а сузить поиск, отрезав варианты, в которых ошибка не наблюдается). +* Сообщая об ошибке, без напоминаний укажите версию операционки (в случае с Линуксом не помешает и версия оконного менеджера), тикля и самого Ткаббера. + +...и ещё немного о социальном аспекте: + +* Обязательно имейте под рукой то, что у вас глючит, когда просите о помощи! Бессмысленно "заходить с бомбуса", находясь на работе, и рассказывать о проблемах подключения Ткаббера, оставшегося дома. +* Если проблема происходит не у вас, а у вашего друга/свата/брата, будет намного лучше, если эта персона сама зайдёт в комнату Ткаббера и задаст свой вопрос — не стоит играть в испорченный телефон. +* Никогда не спрашивайте — "есть ли кто живой" и готов ли кто-нибудь помочь вам. В Интернете принцип **"NATAJA**" (**N**ever **A**sk **T**o **A**sk, **J**ust **A**sk) должен исповедоваться неукоснительно: посетители конфы не сидят всё своё время перед компьютерами, а также живут в разных часовых поясах. Посему просто чётко и максимально подробно сформулируйте свой вопрос и ждите. Если ждать нет возможности, через некоторое время проверьте [логи конференции](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru) — возможно, кто-то уже прочитал и ответил на ваш вопрос (те, кто в состоянии ответить, обычно читают логи и увидят его). Если ответа на вопрос не было, вежливо спросите, не появилось ли у кого идей по поводу вопроса такого-то. + +![(!)](../images/Hammer.png) **Сделать:** дописать, если чего не хватает + +![(!)](../images/Hammer.png) **Сделать:** вообще-то этот раздел нужно слить с соответствующим куском "Острова посланных на..." и оформить в виде отдельной статейки с тупым названием "Как правильно задавать вопросы" Согласен. + + Index: wiki/ru/Sandbox.md ================================================================== --- wiki/ru/Sandbox.md +++ wiki/ru/Sandbox.md @@ -1,18 +1,19 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Sandbox/index.html) + # Sandbox -Материал из Tkabber Wiki +Материал из Tkabber Wiki. ## Содержание * [1 Перевод recentstatus](#Перевод_recentstatus) - * [1.1 Ответ Gebb'а Чемберлену](#Ответ_Gebbа_Чемберлену) + * [1.1 Ответ Gebb'а Чемберлену](#Ответ_Gebbа_Чемберлену) * [2 Разная хрень](#Разная_хрень) * [3 Для bigote](#Для_bigote) - * [3.1 Батоны](#Батоны) + * [3.1 Батоны](#Батоны) * [4 Для kostix](#Для_kostix) * [5 HREFs](#HREFs) * [6 быки](#быки) * [7 Комментарии в коде страницы](#Комментарии_в_коде_страницы) * [8 Шаблоны решают!](#Шаблоны_решают) @@ -31,156 +32,149 @@ the oldest message will be deleted automatically\ when a new one is recorded. Clear history -Перевод: +Перевод: ### Ответ Gebb'а Чемберлену Описание плагина на английском я бы сделал такое. - -This plugin keeps the history of avalability status messages entered manually in the -status combobox and allows to select them from a drop-down list. The history is -preserved across restarts. + This plugin keeps the history of avalability status messages entered manually in the status combobox and allows to select them from a drop-down list. The history is preserved across restarts. **Перевод.** - -Настройки расширения Recent Status. - -Это расширение хранит историю статусных сообщений (описаний статуса), вручную -установленных пользователем, и позволяет выбирать их из выпадающего списка. -История сохраняется при перезапуске Ткаббера. + Настройки расширения Recent Status. + Это расширение хранит историю статусных сообщений (описаний статуса), вручную установленных пользователем, и позволяет выбирать их из выпадающего списка. История сохраняется при перезапуске Ткаббера. Максимальное число хранимых сообщений. + Если размер истории достигает этого лимита, наиболее старое сообщение удаляется при добавлении нового. -Если размер истории достигает этого лимита, наиболее старое сообщение удаляется -при добавлении нового. - -Очистить историю. +Очистить историю. ## Разная хрень -Текст с `vasya@jabber.org/Tkabber` тэгом **tt**. +Текст с `vasya@jabber.org/Tkabber` тэгом **tt**. -Опция +Опция ::options(suxx) rulez -конфигурации. +конфигурации. ## Для bigote -Тут — Ваша правка! +Тут — Ваша правка! -Правим-поправим, выправить не можем... +Правим-поправим, выправить не можем... ### Батоны -\Ctrl-q\ → Ctrl-q - -Дружат с пробелами и идущими следом знаками препинания. - -* хри-хри, хрю-хрю хря-хря и хрё-хрё. -* хры-хры - -А чтобы не наслаивались друг на друга батоны, стоящие на одной вертикали в соседних строчках, нужно разделять их пустой строкой: - -* хри-хри - -* хрюк-хрюк - -Не фонтан, но всё же... +\Ctrl-q\ → Ctrl-q + +Дружат с пробелами и идущими следом знаками препинания. + +* хри-хри, хрю-хрю хря-хря и хрё-хрё. +* хры-хры + +А чтобы не наслаивались друг на друга батоны, стоящие на одной вертикали в соседних строчках, нужно разделять их пустой строкой: + +* хри-хри + +* хрюк-хрюк + +Не фонтан, но всё же... ## Для kostix -Тут — Ваша правка! +Тут — Ваша правка! Control; Control+; Ctrl + ; Enter -Кнопка с `padding-left` и `padding-right`: +Кнопка с `padding-left` и `padding-right`: Ctrl-q + верх/низ: Ctrl-q ## HREFs -\mail me\ \bug me\ - -[mailto:vasya@gde.to](mailto:vasya@gde.to) - -[news:dejagnu.com](news:dejagnu.com) - -gopher:somebody.still.use.it - -[xmpp:petya@tam.zhe](xmpp:petya@tam.zhe) - -\ \liam@htmlhelp.com\ \ - -[shurik](xmpp:vasya@cool.de) +\mail me\ \bug me\ + +[mailto:vasya@gde.to](mailto:vasya@gde.to) + +[news:dejagnu.com](news:dejagnu.com) + +gopher:somebody.still.use.it + +[xmpp:petya@tam.zhe](xmpp:petya@tam.zhe) + +\ \liam@htmlhelp.com\ \ + +[shurik](xmpp:vasya@cool.de) ## быки proc a b { puts ouch! • • • puts {some code} puts heh - - · · · · · - + + · · · · · + puts suxx puts text . . . . . . puts yo! } ## Комментарии в коде страницы -Начало +Начало -Конец + Конец ## Шаблоны решают! -Цитата обработана шаблоном ["quote"](Шаблон_Quote.md). Обратите внимание, что для корректного переноса строк необходимо втыкать тег \
без отбивки пустой строкой. - -[Шаблон:Fixme](Шаблон_Fixme.md) - -foo ![(?)](../images/Attention.png) **Поправьте меня:** это надо проверить! bar - -[Шаблон:Todo](Шаблон_Todo.md) - -![(!)](../images/Hammer.png) **Сделать:** Внедрить эту фигню повсеместно. - -[Шаблон:todo2](Шаблон_Todo2.md) — с Psi Wiki: - -**TODO: ** И эта фигня должна быть везде! - -["Клавиши клавиатуры"](Шаблон_Button.md) - -Ctrl-c will kill that boring task - -[Предупреждающие таблички](Шаблон_Warn.md) +Цитата обработана шаблоном ["quote"](Шаблон_Quote.md). Обратите внимание, что для корректного переноса строк необходимо втыкать тег \
без отбивки пустой строкой. + +[Шаблон:Fixme](Шаблон_Fixme.md) + +foo ![(?)](../images/Attention.png) **Поправьте меня:** это надо проверить! bar + +[Шаблон:Todo](Шаблон_Todo.md) + +![(!)](../images/Hammer.png) **Сделать:** Внедрить эту фигню повсеместно. + +[Шаблон:todo2](Шаблон_Todo2.md) — с Psi Wiki: + +**TODO: ** И эта фигня должна быть везде! + +["Клавиши клавиатуры"](Шаблон_Button.md) + +Ctrl-c will kill that boring task + +[Предупреждающие таблички](Шаблон_Warn.md) ** Внимание! ** - - Обязательно пользуйтесь шаблонами! - -[Пути к файлам](Шаблон_File.md) - -/dev/null - -C:\\Windows\\sralnik - -[Названия программ (\\name\\)](Шаблон_Program.md) - -**`wish`** - -![(!)](../images/Hammer.png) **Сделать:** Это бы тоже не помешало повсеместно внедрить... + + Обязательно пользуйтесь шаблонами! + +[Пути к файлам](Шаблон_File.md) + +/dev/null + +C:\\Windows\\sralnik + +[Названия программ (\\name\\)](Шаблон_Program.md) + +`wish` + +![(!)](../images/Hammer.png) **Сделать:** Это бы тоже не помешало повсеместно внедрить... ## Тестовый кусок + + Index: wiki/ru/Symlinks.md ================================================================== --- wiki/ru/Symlinks.md +++ wiki/ru/Symlinks.md @@ -1,24 +1,18 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Symlinks/index.html) + # Symlinks -Материал из Tkabber Wiki - -![(!)](../images/Hammer.png) **Сделать:** написать что-нибудь про Unix - -В Windows, _только_ на файловой системе [NTFS](http://en.wikipedia.org/wiki/NTFS) версии 3 -и выше (то есть начиная с Windows NT 5.0 и выше, что означает: "Windows 2000 и выше") -можно делать аналог символических ссылок, но только на каталоги. Там они называются -"directory junctions" и являются частным случаем механизма "reparse points". - -Для создания "симлинков" на каталоги в Windows можно использовать: - -* Утилиту [junction](http://www.microsoft.com/technet/sysinternals/Utilities/Junction.mspx) - от Марка Руссиновича. -* Знаменитый [FAR](http://www.farmanager.com/) file manager умеет делать ссылки на NTFS; - соответствующая команда прибита на комбинацию клавиш **Alt-F6** и работает аналогично - копированию каталога: то есть на одной панели вы переходите в каталог назначения - (который будет содержать ссылку), на другой — ставите курсор на "линкуемый" каталог - и "используете" на нём упомянутую команду. -* Ворох других внешних утилит и средств, которые (вместе с теорией) описаны, - например, [тут](http://shell-shocked.org/article.php?id=284). +Материал из Tkabber Wiki. + +![(!)](../images/Hammer.png) **Сделать:** написать что-нибудь про Unix + +В Windows, _только_ на файловой системе [NTFS](http://en.wikipedia.org/wiki/NTFS) версии 3 и выше (то есть начиная с Windows NT 5.0 и выше, что означает: "Windows 2000 и выше") можно делать аналог символических ссылок, но только на каталоги. Там они называются "directory junctions" и являются частным случаем механизма "reparse points". + +Для создания "симлинков" на каталоги в Windows можно использовать: + +* Утилиту [junction](http://www.microsoft.com/technet/sysinternals/Utilities/Junction.mspx) от Марка Руссиновича. +* Знаменитый [FAR](http://www.farmanager.com/) file manager умеет делать ссылки на NTFS; соответствующая команда прибита на комбинацию клавиш Alt-F6 и работает аналогично копированию каталога: то есть на одной панели вы переходите в каталог назначения (который будет содержать ссылку), на другой — ставите курсор на "линкуемый" каталог и "используете" на нём упомянутую команду. +* Ворох других внешних утилит и средств, которые (вместе с теорией) описаны, например, [тут](http://shell-shocked.org/article.php?id=284). + + Index: wiki/ru/Testimonials__Antimonials__And_Eternal_Questions.md ================================================================== --- wiki/ru/Testimonials__Antimonials__And_Eternal_Questions.md +++ wiki/ru/Testimonials__Antimonials__And_Eternal_Questions.md @@ -1,50 +1,30 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Testimonials,_Antimonials,_And_Eternal_Questions/index.html) + # Testimonials, Antimonials, And Eternal Questions Материал из Tkabber Wiki -Во-первых, с Новым 2010-м годом! :-) - -А во-вторых, вот что. За без малого восемь лет своей истории Ткаббер получил широкое признание -в узком кругу более-менее известных лиц. Более того, автору сих строк доподлинно известно, -что по меньшей мере десять девушек используют для общения Ткаббер. Давно пора предоставить -слово пользователям и пользовательницам этого клиента, дабы узнать, что им в Ткаббере нравится, -а что неплохо бы улучшить. Просим высказываться только тех, кто работал с Ткаббером хотя бы с -неделю. Нам не нужны перепевки чужих мнений. - -## Testimonials -Тут идут положительные отзывы. Если вам есть что сказать хорошего про Ткаббер, про то, чем -он облегчил вашу жизнь, когда вы перешли на него с другого клиента, а может, чем он привлёк -вас до такой степени, что вы и другие не стали пробовать, не стесняйтесь — либо зарегистрируйтесь -и оставьте свой отзыв, либо зайдите к нам в конференцию и выскажите его там. Не бойтесь -приводить сравнения с другими клиентами. У нас не пиар-агентство ;-) Мы стремимся к объективности -через субъективные взгляды. - -1. \ ...настройки интуитивно понятны и на русском. -1. \ Вот формат логов в ткабере мне понравился очень. plain text - самое Ъ, надоели - везде всякие sqlite и прочие говны. - -## Antimonials -Это хитрое слово можно перевести с английского как "рвотное". Думаю, понятно, что здесь -будут собираться менее лестные отзывы о Ткаббере. Наверняка есть какие-то мелочи, которые -затрудняют работу, сложны для понимания, а то и просто бесят. Если вы думаете, что какие-то -фичи других клиентов очень бы пригодились Ткабберу, тоже можете писать здесь, но лучше -сделать это в статье [**Планы на будущее**](Планы_на_будущее.md) (а здесь оставить ссылку -на вопрос). Ну или опять же, можете зайти в конференцию и высказаться там. - -1. \ tk - как оно выглядит, это ещё фигня, но другое дело что он себя ведёт не так, - как другие тулкиты. Даже при вводе текста - скажем, я привык в гуе пользоваться ctrl-backspace, - в tk оно не работает. И скорость ввода текста, как мне показалось, какая-то "другая". - Как-то так %) - -## Eternal Questions -А здесь мы попросим пользователей Ткаббера ответить на вековечный вопрос, мучающий умы -аналитиков ЛОРа: почему же Ткаббер такой страшный? А если точнее, _считаете ли его страшным вы?_ -Если да, то _почему продолжаете использовать его?_ - -1. \ успешно пользовался когда-то, и даже нравилось (очень), только те, - кто подходили к монитору, спрашивали - что это за бяка такая? -1. \ под виндой не страшный..не знаю, чо страшного в нём..я к нему тольк и - привыкла..больш никакой и не нравится с компа клиент -1. \ под вендой - няшка, под линаксом - немного хуже (виджеты олдскульные) +Во-первых, с Новым 2010-м годом! :-) + +А во-вторых, вот что. За без малого восемь лет своей истории Ткаббер получил широкое признание в узком кругу более-менее известных лиц. Более того, автору сих строк доподлинно известно, что по меньшей мере десять девушек используют для общения Ткаббер. Давно пора предоставить слово пользователям и пользовательницам этого клиента, дабы узнать, что им в Ткаббере нравится, а что неплохо бы улучшить. Просим высказываться только тех, кто работал с Ткаббером хотя бы с неделю. Нам не нужны перепевки чужих мнений. + +# Testimonials +Тут идут положительные отзывы. Если вам есть что сказать хорошего про Ткаббер, про то, чем он облегчил вашу жизнь, когда вы перешли на него с другого клиента, а может, чем он привлёк вас до такой степени, что вы и другие не стали пробовать, не стесняйтесь — либо зарегистрируйтесь и оставьте свой отзыв, либо зайдите к нам в конференцию и выскажите его там. Не бойтесь приводить сравнения с другими клиентами. У нас не пиар-агентство ;-) Мы стремимся к объективности через субъективные взгляды. + +1. \ ...настройки интуитивно понятны и на русском. +1. \ Вот формат логов в ткабере мне понравился очень. plain text - самое Ъ, надоели везде всякие sqlite и прочие говны. + +# Antimonials +Это хитрое слово можно перевести с английского как "рвотное". Думаю, понятно, что здесь будут собираться менее лестные отзывы о Ткаббере. Наверняка есть какие-то мелочи, которые затрудняют работу, сложны для понимания, а то и просто бесят. Если вы думаете, что какие-то фичи других клиентов очень бы пригодились Ткабберу, тоже можете писать здесь, но лучше сделать это в статье [Планы на будущее](Планы_на_будущее.md) (а здесь оставить ссылку на вопрос). Ну или опять же, можете зайти в конференцию и высказаться там. + +1. \ tk - как оно выглядит, это ещё фигня, но другое дело что он себя ведёт не так, как другие тулкиты. Даже при вводе текста - скажем, я привык в гуе пользоваться ctrl-backspace, в tk оно не работает. И скорость ввода текста, как мне показалось, какая-то "другая". Как-то так %) + +# Eternal Questions +А здесь мы попросим пользователей Ткаббера ответить на вековечный вопрос, мучающий умы аналитиков ЛОРа: почему же Ткаббер такой страшный? А если точнее, _считаете ли его страшным вы?_ Если да, то _почему продолжаете использовать его?_ + +1. \ успешно пользовался когда-то, и даже нравилось (очень), только те, кто подходили к монитору, спрашивали - что это за бяка такая? +1. \ под виндой не страшный..не знаю, чо страшного в нём..я к нему тольк и привыкла..больш никакой и не нравится с компа клиент +1. \ под вендой - няшка, под линаксом - немного хуже (виджеты олдскульные) + + Index: wiki/ru/Tk_Windows_keysyms_bug_explained.md ================================================================== --- wiki/ru/Tk_Windows_keysyms_bug_explained.md +++ wiki/ru/Tk_Windows_keysyms_bug_explained.md @@ -1,445 +1,180 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Tk_Windows_keysyms_bug_explained/index.html) + # Tk Windows keysyms bug explained -Материал из Tkabber Wiki +Материал из Tkabber Wiki. ## Содержание * [1 Multiple keymaps](#Multiple_keymaps) * [2 A small testbed](#A_small_testbed) * [3 The problem](#The_problem) * [4 The explanation](#The_explanation) * [5 Two ways to fix the problem](#Two_ways_to_fix_the_problem) -## Multiple keymaps -Russian (and, in fact, most "non-Latin-1") users use several "keymaps" when typing. -"Keymap" stands for a mapping that the system uses when it translates the user's -keypresses into characters, which, for example, are inserted into a text editor in -which window the user is typing. - -Usually one of these keymaps is the standard "en\_US" and another (or other) are for -some "incompatible" language, say, "ru\_RU" for Russian Cyrillic. - -Just to recap for those who aren't familiar with the idea of keymaps: the keyboard -always generates the same "scancodes" for each physical key, but when it comes to -translation of the scancodes to the corresponding characters the _currenlty active_ -keymap is taken into account. - -For example, on my system I have English and Russian keymaps, so if I start a text -editor (or take any widget accepting textual input and type "qwerty" on both keymaps -(separating the sentencies by a newline), I will get: +# Multiple keymaps +Russian (and, in fact, most "non-Latin-1") users use several "keymaps" when typing. "Keymap" stands for a mapping that the system uses when it translates the user's keypresses into characters, which, for example, are inserted into a text editor in which window the user is typing. + +Usually one of these keymaps is the standard "en\_US" and another (or other) are for some "incompatible" language, say, "ru\_RU" for Russian Cyrillic. + +Just to recap for those who aren't familiar with the idea of keymaps: the keyboard always generates the same "scancodes" for each physical key, but when it comes to translation of the scancodes to the corresponding characters the _currenlty active_ keymap is taken into account. + +For example, on my system I have English and Russian keymaps, so if I start a text editor (or take any widget accepting textual input and type "qwerty" on both keymaps (separating the sentencies by a newline), I will get: qwerty йцукен -because on my "Russian Windows keyboard" I have "й" depicted on the "q" key and so -on, which corresponds to the appropriate keymap. You can look at this picture of -such keyboard to get the idea: [[1]](http://ourworld.compuserve.com/homepages/PaulGor/std_ru.gif). +because on my "Russian Windows keyboard" I have "й" depicted on the "q" key and so on, which corresponds to the appropriate keymap. You can look at this picture of such keyboard to get the idea: [[1]](http://ourworld.compuserve.com/homepages/PaulGor/std_ru.gif) -## A small testbed -Now let's create a small testbed that will serve as a demonstration tool for the -further explanations. In the freshly started **wish** I type: +# A small testbed +Now let's create a small testbed that will serve as a demonstration tool for the further explanations. In the freshly started **wish** I type: bind . { puts "%K - %A" } -i.e. when I press a key on the Tk root window I will get the keysym and the -corresponding character for that key printed in the console window. - -## The problem -Let's start with the example which demonstrates why translation of keypresses -to keysyms is broken in Windows Tk. - -At first I ensure I'm on the English keymap and type the standard -encantation — "qwerty". So I get +i.e. when I press a key on the Tk root window I will get the keysym and the corresponding character for that key printed in the console window. + +# The problem +Let's start with the example which demonstrates why translation of keypresses to keysyms is broken in Windows Tk. + +At first I ensure I'm on the English keymap and type the standard encantation — "qwerty". So I get q - q w - w e - e r - r t - t y - y -printed at the console. This is perfectly OK. - -Then I switch to the Russian keymap. - -Now take a break and guess what scenarios should a user expect when typing our -"qwerty" sequence on the Russian keymap? It's pretty understandable that %A is -expected to be substituted by the relevant Cyrillic characters. When it comes -to keysyms, naturally, there are only two sane scenarios: - -* They will be the same as on the English keymap (q, w, etc): - - q - й - w - ц - e - у - r - к - t - е - y - н - -* They will correspond to the characters, so they will be (as per the [keysyms] man page): - - Cyrillic_shorti - й - Cyrillic_tse - ц - Cyrillic_u - у - Cyrillic_ka - к - Cyrillic_e - е - Cyrillic_en - н - -Now let's see at the actual output. It will be: +printed at the console. This is perfectly OK. + +Then I switch to the Russian keymap. + +Now take a break and guess what scenarios should a user expect when typing our "qwerty" sequence on the Russian keymap? It's pretty understandable that %A is expected to be substituted by the relevant Cyrillic characters. When it comes to keysyms, naturally, there are only two sane scenarios: + +* They will be the same as on the English keymap (q, w, etc): + + q - й + w - ц + e - у + r - к + t - е + y - н + +* They will correspond to the characters, so they will be (as per the [keysyms] man page): + + Cyrillic_shorti - й + Cyrillic_tse - ц + Cyrillic_u - у + Cyrillic_ka - к + Cyrillic_e - е + Cyrillic_en - н + +Now let's see at the actual output. It will be: eacute - й odiaeresis - ц oacute - у ecircumflex - к aring - е iacute - н -So we have neither of the expected scenarios. Instead we have keysyms corresponding -to some Latin-1 characters of code points >= 0x80 from any appropriate charset -(ISO8859-1 for instance or the 1st BMP from Unicode). - -## The explanation -Windows Tk uses two functions from the win\\tkWinKey.c file to translate the "virtual-key -codes" delivered by the system via the **WM\_CHAR** messages to the window: **TkpGetString()** -and **TkpGetKeySym()**. The first is used to get the character corresponding to the keyboard -event(s) (that is what is substituted in place of %A placeholder in the bound scripts), -the second is to get the relevant keysym (what is substituted in place of the %K placeholder). - -Both functions use the **ToAscii()** Win32 API call to get the data they want. And while -for the **TkpGetString()** this does the Right Thing (it's used, for instance, to convert -keypresses into the characters being inserted into a widget providing for a text input), -for the case of keysyms it breaks the expectations of the developers. - -The problem is that, as it seems, the usage of **ToAscii()** is based on the fact that -it's expected to return codes of _Latin-1_ characters and the relevant X keysyms are -happliy assigned the codes which map perfectly to Latin-1, i.e. an X keysym for the -physical key labeled "q" has the same code as **ToAscii()** returns for the scancode -of this physical key on Windows. - -Unfortunately this doesn't take into account the fact that **ToAscii()** _uses the currently -active keymap_ when processing. Each keymap is implicitly associated with some "code page" -(Windows idea for 8-bit charsets), so when I have a Russian keymap active **ToAscii()** -will use the Windows-1251 code-page to map the keyboard scancodes to characters. - -Now look at the Windows-1251 table: [[2]](http://czyborra.com/charsets/cp1251.gif) -You will see that our "йцукен" characters corresponding to the "qwerty" series of -physical keys are assigned the codes 0xE9, 0xF6, 0xF3, 0xEA, 0xE5 and 0xED, respectively. - -These codes are returned from **TkpGetKeySym()** and they have nothing to do neither -with the codes of "q", "w", etc nor with the codes of X keysyms Cyrillic\_shorti (0x06ca), -etc. Instead, they appear to the caller as keysyms corresponding to Latin-1 characters. -That's what we have seen in our testbed. Look at the ISO8859-1 chart -[[3]](http://czyborra.com/charsets/iso8859-1.gif) and see what characters -correspond to the codes listed above. You'll notice a perfect match with our sample output. - -Since Windows uses Windows-1252 (WinLatin-1) [[4]](http://czyborra.com/charsets/cp1252.gif) -for the English (and not only English) keymaps and this code-page matches pretty closely -to the "canonical" Latin-1 assignment of code points, **ToAscii()** does the Right -Thing in the context of **TkpGetKeySym()** if and only if the currently active keymap -is linked to the cp1252. For any other code-page which "upper part" is incompatible -with cp1252 this behaviour is broken. - -## Two ways to fix the problem -Unfortunately, it appears that there's no one clean solution that would "just fix" -the current behaviour while keeping absolute backwards compatibility. Also the -outlined problem reveals somthing that I would qualify as a "blind spot" of Tk's -handling of keyboard events. - -![(!)](../images/Hammer.png) **Сделать:** write up +So we have neither of the expected scenarios. Instead we have keysyms corresponding to some Latin-1 characters of code points >= 0x80 from any appropriate charset (ISO8859-1 for instance or the 1st BMP from Unicode). + +# The explanation +Windows Tk uses two functions from the win\\tkWinKey.c file to translate the "virtual-key codes" delivered by the system via the **WM\_CHAR** messages to the window: **TkpGetString()** and **TkpGetKeySym()**. The first is used to get the character corresponding to the keyboard event(s) (that is what is substituted in place of %A placeholder in the bound scripts), the second is to get the relevant keysym (what is substituted in place of the %K placeholder). + +Both functions use the **ToAscii()** Win32 API call to get the data they want. And while for the **TkpGetString()** this does the Right Thing (it's used, for instance, to convert keypresses into the characters being inserted into a widget providing for a text input), for the case of keysyms it breaks the expectations of the developers. + +The problem is that, as it seems, the usage of **ToAscii()** is based on the fact that it's expected to return codes of _Latin-1_ characters and the relevant X keysyms are happliy assigned the codes which map perfectly to Latin-1, i.e. an X keysym for the physical key labeled "q" has the same code as **ToAscii()** returns for the scancode of this physical key on Windows. + +Unfortunately this doesn't take into account the fact that **ToAscii()** _uses the currently active keymap_ when processing. Each keymap is implicitly associated with some "code page" (Windows idea for 8-bit charsets), so when I have a Russian keymap active **ToAscii()** will use the Windows-1251 code-page to map the keyboard scancodes to characters. + +Now look at the Windows-1251 table: [[2]](http://czyborra.com/charsets/cp1251.gif) You will see that our "йцукен" characters corresponding to the "qwerty" series of physical keys are assigned the codes 0xE9, 0xF6, 0xF3, 0xEA, 0xE5 and 0xED, respectively. + +These codes are returned from **TkpGetKeySym()** and they have nothing to do neither with the codes of "q", "w", etc nor with the codes of X keysyms Cyrillic\_shorti (0x06ca), etc. Instead, they appear to the caller as keysyms corresponding to Latin-1 characters. That's what we have seen in our testbed. Look at the ISO8859-1 chart [[3]](http://czyborra.com/charsets/iso8859-1.gif) and see what characters correspond to the codes listed above. You'll notice a perfect match with our sample output. + +Since Windows uses Windows-1252 (WinLatin-1) [[4]](http://czyborra.com/charsets/cp1252.gif) for the English (and not only English) keymaps and this code-page matches pretty closely to the "canonical" Latin-1 assignment of code points, **ToAscii()** does the Right Thing in the context of **TkpGetKeySym()** if and only if the currently active keymap is linked to the cp1252. For any other code-page which "upper part" is incompatible with cp1252 this behaviour is broken. + +# Two ways to fix the problem +Unfortunately, it appears that there's no one clean solution that would "just fix" the current behaviour while keeping absolute backwards compatibility. Also the outlined problem reveals somthing that I would qualify as a "blind spot" of Tk's handling of keyboard events. + +![(!)](../images/Hammer.png) **Сделать:** write up --- -A chat with Kevin Kenny (2008-04-10). - -![(!)](../images/Hammer.png) **Сделать:** prettyfy - -[01:46]\ if I ever write a patch for Tk this will be fixes for how keysyms are implemented -in Windows. looks like only cyrillic speakers/writers care about these problems, so our happiness is in our hands :) - -[01:47]\ it's not so much that only you care, as the rest of us find it hard to reproduce :/ - -[01:47]\ (I don't have cyrillic keyboard support, or a cyrillic keyboard either) - -[01:47]\ kostix, i've had no end of difficulty using cyrillic text in a tk application in windows - -[01:47]\ i'll be happy to test that out or help if i can - -[01:49]\ ok, "don't care" is not the right wording, I do understand this - -[01:51]\ also I think Tk on X also has some problems. for instance, you can't have -russian locale and write accented Latin-5 letters in Tk even if you have all necessary -keymaps installed and they work for, say, GTK2+ apps. I heard two reports of this problem - -[01:57]\ kostix - "you can't have russian locale and write accented Latin-5 letters in Tk" ... -Do you mean accented Cyrillic characters that appear in Latin-5, like ё or ѓ ? (Tk, internally, -knows nothing about Latin-5, everything is converted to Unicode on input. - -[01:57]\ ) - -[01:58]\* kbk just entered those letters, but isn't running in a Russian locale... - -[02:00]\ kbk: to put it simple: I have a russian friend who lives in spain. so he -has russian and spain keyboard layouts installed. since he's russian, he has russian -system locale. this way, he can only enter cyrillic (in tkabber and plain wish), but -not "special" spanish letters, just ascii part. and at some point he changed locale -to spanish and realized in this mode it works. - -[02:00]\ I can request from him some more strict description, if needed - -[02:01]\ Oh. Ok. I remember discussing this problem with you before. - -[02:01]\ "it works" means he can write those funky characters with tildas, acute sign, etc ;) - -[02:01]\ Is there any application in which it works? - -[02:01]\ uh, any non Tk app (such as GTK), as I understand ;) - -[02:02]\* dkf\_ wonders wtf is going on in that situation - -[02:02]\ Really? And he doesn't need to swap keyboard maps to do it? - -[02:03]\ dkf\_: I can say that on windows it's "just fundamentally wrong", so may be -X code also has some issues. - -[02:03]\ kbk: I think I should stop now, ask that guy for exhaustive explanations and -file a bug report ;) - -[02:04]\* kbk routinely switches between US and US-International keyboards, and \*that\* much works, at least. - -[02:05]\ [http://ru.tkabber.jabe.ru/index.php/Tk\_Windows\_keysyms\_bug\_explained](../ru/Tk_Windows_keysyms_bug_explained.md) -- -here's an unfinished article on the subject. I intend to eventually complete it and initiate some discussion here or on c.l.t - -[02:06]\ unfortunately, the most interesting part isn't written :} - -[02:07]\ How does one enable keyboard layouts & foreign chars in X? There seems -to be more than one way ... this is all rather unclear to me. - -[02:07]\ stu: indeed, there are about 4 or 5 ways to configure Xkb - -[02:08]\* stu isn't even sure if it's Xkb that requires configuring .. or something else. - -[02:08]\ stu: [http://paste.tclers.tk/868](http://paste.tclers.tk/868) -- here's a typical us+ru combo used by 99.9% of russian X users - -[02:10]\ kostix - OK, so... - -[02:10]\ stu: I beleive you can have up to four active groups in Xkb + "modifier -keys" in each which allow to temporatily switch from one group to another - -[02:10]\ thanks. what if I don't have an xorg.conf? it there a command-line utility to switch layouts? - -[02:11]\ I don't have to use xkbcomp, do I? - -[02:11]\ kostix - So %A is correct all the time, but the keysym is not? - -[02:11]\ kbk: yes, and this breaks bindings - -[02:12]\ kbk: but in fact I beleive the problem is more fundamental and want to write even more text on it - -[02:13]\ And what you'd loke to see is that if someone presses Alt+й, the bindings will -see \ and not \? - -[02:13]\ like to see... sheesh, I can't type. - -[02:15]\ kbk: no, I would expect that alt-й will be the same as alt-q, i.e. it should -not depend on active keymap. and this is the second part of the problem since what I've -just said is questionnable - -[02:16]\ I'm not convinced that what you're asking for (make it \) is either -desirable or possible. (But I concede that making it Alt-eacute is Just Plain Wrong...) - -[02:17]\ kbk: for instance, when you have an "active" keys for menu entries -(those which are introduced using & in win32 api), they trigger depending on the keymap. -i.e. if I have a menu entry "з&апуск", it could be accelerated (activated) only by -russian "а", not latin and not "f" which is on the same key - -[02:17]\ kbk: sure - -[02:17]\ that's why it's complicated - -[02:17]\ I have a thought that it would be cool to provide both ways - -[02:17]\ may be by having somethin like \ - -[02:18]\ in bindings - -[02:18]\ kostix - But... Consider switching to a German keymap... - -[02:18]\ I've used it for about a year some time ago :) - -[02:18]\ In that case, I press the key marked 'Q' on my keyboard, and %A gives me 'a'... - -[02:19]\ Firing the 'Q' binding for the key that types 'a' would be, uhm, peculiar. - -[02:19]\ kbk: my (first) idea is simple: bindings are mostly for firing something up - -[02:20]\ for instance, in tkabber we have a "smiley palette" bound to alt-e -(in english keymap) and a hack to make work on the same \*physical key\* on -russian -- the idea is that the user routinely depresses the same \*key\* - -[02:20]\ she doesn't care what symbol it would provide if used for entering text - -[02:21]\ so when I use event add \<\> \ it should just -work on any keymap - -[02:21]\ So for that case, you have a binding on \, another on \ -and probably (as a workaround for the bug) \ as well? - -[02:21]\ but with menu accelerators the situation is reversed, as I've pointed -out earlier :\\ - -[02:22]\ kbk: yes, except for cyrillic binding, they're nonexistent in Windows. -and in X too - -[02:22]\ you just can't manage to type anything which would hit that binding - -[02:22]\ so we have alt-q + alt-oacute - -[02:23]\ If Windows were to change so that you \*could\* bind to Cyrillic\_u (and -we've already agreed that oacute is Just Plain Wrong!), would that help? - -[02:23]\ in fact we have some special remapping for some keys ;) - -[02:23]\ kbk: no, because that would require me to insert one special -binding for every conceivable keymap in existence - -[02:24]\ i.e. it would be no better than currently - -[02:24]\ but just for such bindings like firing something up, like posting a menu -or opening some window - -[02:25]\ which is bound to a physical key (I stress the word "physical" here) - -[02:25]\ It's not clear to me that there \*is\* a better way that doesn't totally -break AZERTY keyboards. - -[02:25]\ kbk: i.e. in such case I would prefer to bind to scancode - -[02:25]\ for such bindings keymaps just get in the way - -[02:29]\ kbk: just to clear up a bit: in X pressing alt-q works the -same way irrelevant to the currently active keymap. - -[02:30]\ It's not obvious to me how binding to scancode helps. Let's say -that there's a menu entry '&Annuler' in a French application. - -[02:31]\ A French user wants that to be invoked by \ - and a Canadian -user wants that to be invoked by \. - -[02:31]\ I said this about binding that just do something, menu accelerators -are \*completely\* different story, I mentioned this and agree on it - -[02:31]\ that's why I said the problem is more fundamental than it -appears on the first glance - -[02:32]\ OK... instead of a menu entry, make it a button label, that's -more likely anyway, that there will be two buttons in a dialog marked &OK and &Annuler. - -[02:33]\ yes, exactly - -[02:33]\ so there are two distinct cases about this problem - -[02:33]\ Both the French and Canadian users want \ to be &Annuler -- but -the French user has the A key on the key that to the Canadian user is Q - -[02:35]\ kbk: what that article is about is more of a "invisible" bindings -if you like. say, I press Ctrl-L in tkabber to invoke it's login dialog. -it doesn't correspond to any button -- it's just a binding on the root window. -and it must work for the physical key - -[02:35]\ no matter whether I'm French or Africaans ;) - -[02:36]\ How do you document \*that\*? You can't say, "Press Control-L", -because the physical key might not have an L on it. - -[02:37]\ kbk: I dunno. it appears that 99% users have L where it usually -is on a "typical US QWERTY keyboard" - -[02:37]\ deviations like dworak or germans with their z and y swapped -are inescapable but you can't deal with all this hell anyway - -[02:38]\ OK, but what if the function were Control-Z instead? Amreicans -have Z at the left of the lower row, the French have the Z where the Americans -have the W, and the Germans have the Z where the Americans have the Y. - -[02:38]\ hm, really? I didn't know about this French feature - -[02:38]\ it appears more idiotic I thought it is :( - -[02:39]\ kostix - That's why I'd say, you \*don't\* deal with all of it; -you bind according to the character that the key generates, and you document -according to the character that the key generates. - -[02:40]\ If (as you apparently do) you have a large enough user base that -swaps keyboard maps for a single keyboard, then you perhaps add extra bindings -so tat someone can hit Control-Cyrillic\_ka and still get the Control-r functionality. - -[02:40]\ kbk: so how we then implement posting an emoticon palette? -it's bound to alt-e in tkabber for the obvious reason: "e" stands for -"emoticon", so how do we deal with russian? this keymap doesn't have \*any\* -ascii letter - -[02:41]\ kbk: so, for any non-ascii keymap I have to add yet another -binding, you say? - -[02:41]\ or may be provide "national keyboard plugins"? - -[02:41]\ Either that, or localize bindings... - -[02:41]\ they're likely to be more mnemonic that way, anyway. - -[02:42]\ If an English speaker wants to have Control-C == "Close", -then a French one might well want to have Control-F = "Fermer" - -[02:42]\ if we go this route this also means the same part is broken -in X, just in some other way - -[02:44]\ In any case, generating a keysym of "aring" for "Cyrillic-ye" is crazy. - -[02:45]\ I've nailed it so it's easy to fix. in fact I have a working patch -somewhere. but it did what you consider to be wrong ;) - -[02:46]\ and anyway it would be better for this problem to be discussed in -more detail with more people, I think - -[02:46]\ before really implementing any fixes - -[02:47]\ kbk: one another point prevented me from submitting my patch -somewhere is what will happen to people who use composing key? say, japanese? - -[02:47]\ Sure. But I don't think there is any good solution other than -"bind to the symbol that's called out on the key". - -[02:48]\ when I have seen some code related to this, which I was likely -about to break, I started to scratch my head - -[02:48]\ so I would like to talk to a CJK person on this (if the -community has one) - -[02:48]\ Well... in Windows, when someone hits a dead-key sequence, generally -the app doesn't see any keystroke except the last. - -[02:48]\ dead != compose, I think - -[02:49]\ on Japanese keyboards it switches alphabets, as I understand this - -[02:49]\ may be pickhq could help here -- he appears to know Japanese and is -able to enter it - -[02:50]\ Right - but the 'compose' key is itself dead, AFAIK, or at the very least ignorable. - -[02:51]\ suchenwi is a fluent Chinese speaker and may very well know how Chinese keyboards work. - -[02:51]\ kbk: I think he just has another hack like "ruslish" in his sleeve :P - -[02:53]\ Well, yes, he does. But he's lived in China and may well have insight into -how real Chinese input methods work. - -[02:53]\ There are a lot of them... - -[02:53]\ [http://zsigri.tripod.com/fontboard/cjk/input.html](http://zsigri.tripod.com/fontboard/cjk/input.html) - -[03:02]\ In any case, though, it appears to me that binding to scancode will only make a bad situation worse. -[http://www.win.tue.nl/~aeb/linux/kbd/scancodes.html](http://www.win.tue.nl/~aeb/linux/kbd/scancodes.html) -shows just what a mess you get into \*there\*. +A chat with Kevin Kenny (2008-04-10). + +![(!)](../images/Hammer.png) **Сделать:** prettyfy + +[01:46]\ if I ever write a patch for Tk this will be fixes for how keysyms are implemented in Windows. looks like only cyrillic speakers/writers care about these problems, so our happiness is in our hands :) + +[01:47]\ it's not so much that only you care, as the rest of us find it hard to reproduce :/ + +[01:47]\ (I don't have cyrillic keyboard support, or a cyrillic keyboard either) + +[01:47]\ kostix, i've had no end of difficulty using cyrillic text in a tk application in windows + +[01:47]\ i'll be happy to test that out or help if i can + +[01:49]\ ok, "don't care" is not the right wording, I do understand this + +[01:51]\ also I think Tk on X also has some problems. for instance, you can't have russian locale and write accented Latin-5 letters in Tk even if you have all necessary keymaps installed and they work for, say, GTK2+ apps. I heard two reports of this problem + +[01:57]\ kostix - "you can't have russian locale and write accented Latin-5 letters in Tk" ... Do you mean accented Cyrillic characters that appear in Latin-5, like ё or ѓ ? (Tk, internally, knows nothing about Latin-5, everything is converted to Unicode on input. + +[01:57]\ ) + +[01:58]\* kbk just entered those letters, but isn't running in a Russian locale... + +[02:00]\ kbk: to put it simple: I have a russian friend who lives in spain. so he has russian and spain keyboard layouts installed. since he's russian, he has russian system locale. this way, he can only enter cyrillic (in tkabber and plain wish), but not "special" spanish letters, just ascii part. and at some point he changed locale to spanish and realized in this mode it works. + +[02:00]\ I can request from him some more strict description, if needed + +[02:01]\ Oh. Ok. I remember discussing this problem with you before. + +[02:01]\ "it works" means he can write those funky characters with tildas, acute sign, etc ;) + +[02:01]\ Is there any application in which it works? + +[02:01]\ uh, any non Tk app (such as GTK), as I understand ;) + +[02:02]\* dkf\_ wonders wtf is going on in that situation + +[02:02]\ Really? And he doesn't need to swap keyboard maps to do it? + +[02:03]\ dkf\_: I can say that on windows it's "just fundamentally wrong", so may be X code also has some issues. + +[02:03]\ kbk: I think I should stop now, ask that guy for exhaustive explanations and file a bug report ;) + +[02:04]\* kbk routinely switches between US and US-International keyboards, and \*that\* much works, at least. + +[02:05]\ [http://ru.tkabber.jabe.ru/index.php/Tk\_Windows\_keysyms\_bug\_explained](../ru/Tk_Windows_keysyms_bug_explained.md) -- here's an unfinished article on the subject. I intend to eventually complete it and initiate some discussion here or on c.l.t + +[02:06]\ unfortunately, the most interesting part isn't written :} + +[02:07]\ How does one enable keyboard layouts & foreign chars in X? There seems to be more than one way ... this is all rather unclear to me. + +[02:07]\ stu: indeed, there are about 4 or 5 ways to configure Xkb + +[02:08]\* stu isn't even sure if it's Xkb that requires configuring .. or something else. + +[02:08]\ stu: [http://paste.tclers.tk/868](http://paste.tclers.tk/868) -- here's a typical us+ru combo used by 99.9% of russian X users + +[02:10]\ kostix - OK, so... + +[02:10]\ stu: I beleive you can have up to four active groups in Xkb + "modifier keys" in each which allow to temporatily switch from one group to another + +[02:10]\ thanks. what if I don't have an xorg.conf? it there a command-line utility to switch layouts? + +[02:11]\ I don't have to use xkbcomp, do I? + +[02:11]\ kostix - So %A is correct all the time, but the keysym is not? + +[02:11]\ kbk: yes, and this breaks bindings + +[02:12]\ kbk: but in fact I beleive the problem is more fundamental and want to write even more text on it + +[02:13]\ And what you'd loke to see is that if someone presses Alt+й, the bindings will see \ and not \? [02:13]\ like to see... sheesh, I can't type. [02:15]\ kbk: no, I would expect that alt-й will be the same as alt-q, i.e. it should not depend on active keymap. and this is the second part of the problem since what I've just said is questionnable [02:16]\ I'm not convinced that what you're asking for (make it \) is either desirable or possible. (But I concede that making it Alt-eacute is Just Plain Wrong...) [02:17]\ kbk: for instance, when you have an "active" keys for menu entries (those which are introduced using & in win32 api), they trigger depending on the keymap. i.e. if I have a menu entry "з&апуск", it could be accelerated (activated) only by russian "а", not latin and not "f" which is on the same key [02:17]\ kbk: sure [02:17]\ that's why it's complicated [02:17]\ I have a thought that it would be cool to provide both ways [02:17]\ may be by having somethin like \ [02:18]\ in bindings [02:18]\ kostix - But... Consider switching to a German keymap... [02:18]\ I've used it for about a year some time ago :) [02:18]\ In that case, I press the key marked 'Q' on my keyboard, and %A gives me 'a'... [02:19]\ Firing the 'Q' binding for the key that types 'a' would be, uhm, peculiar. [02:19]\ kbk: my (first) idea is simple: bindings are mostly for firing something up [02:20]\ for instance, in tkabber we have a "smiley palette" bound to alt-e (in english keymap) and a hack to make work on the same \*physical key\* on russian -- the idea is that the user routinely depresses the same \*key\* [02:20]\ she doesn't care what symbol it would provide if used for entering text [02:21]\ so when I use event add \<\> \ it should just work on any keymap [02:21]\ So for that case, you have a binding on \, another on \ and probably (as a workaround for the bug) \ as well? [02:21]\ but with menu accelerators the situation is reversed, as I've pointed out earlier :\\ [02:22]\ kbk: yes, except for cyrillic binding, they're nonexistent in Windows. and in X too [02:22]\ you just can't manage to type anything which would hit that binding [02:22]\ so we have alt-q + alt-oacute [02:23]\ If Windows were to change so that you \*could\* bind to Cyrillic\_u (and we've already agreed that oacute is Just Plain Wrong!), would that help? [02:23]\ in fact we have some special remapping for some keys ;) [02:23]\ kbk: no, because that would require me to insert one special binding for every conceivable keymap in existence [02:24]\ i.e. it would be no better than currently [02:24]\ but just for such bindings like firing something up, like posting a menu or opening some window [02:25]\ which is bound to a physical key (I stress the word "physical" here) [02:25]\ It's not clear to me that there \*is\* a better way that doesn't totally break AZERTY keyboards. [02:25]\ kbk: i.e. in such case I would prefer to bind to scancode [02:25]\ for such bindings keymaps just get in the way [02:29]\ kbk: just to clear up a bit: in X pressing alt-q works the same way irrelevant to the currently active keymap. [02:30]\ It's not obvious to me how binding to scancode helps. Let's say that there's a menu entry '&Annuler' in a French application. [02:31]\ A French user wants that to be invoked by \ - and a Canadian user wants that to be invoked by \. [02:31]\ I said this about binding that just do something, menu accelerators are \*completely\* different story, I mentioned this and agree on it [02:31]\ that's why I said the problem is more fundamental than it appears on the first glance [02:32]\ OK... instead of a menu entry, make it a button label, that's more likely anyway, that there will be two buttons in a dialog marked &OK and &Annuler. [02:33]\ yes, exactly [02:33]\ so there are two distinct cases about this problem [02:33]\ Both the French and Canadian users want \ to be &Annuler -- but the French user has the A key on the key that to the Canadian user is Q [02:35]\ kbk: what that article is about is more of a "invisible" bindings if you like. say, I press Ctrl-L in tkabber to invoke it's login dialog. it doesn't correspond to any button -- it's just a binding on the root window. and it must work for the physical key [02:35]\ no matter whether I'm French or Africaans ;) [02:36]\ How do you document \*that\*? You can't say, "Press Control-L", because the physical key might not have an L on it. [02:37]\ kbk: I dunno. it appears that 99% users have L where it usually is on a "typical US QWERTY keyboard" [02:37]\ deviations like dworak or germans with their z and y swapped are inescapable but you can't deal with all this hell anyway [02:38]\ OK, but what if the function were Control-Z instead? Amreicans have Z at the left of the lower row, the French have the Z where the Americans have the W, and the Germans have the Z where the Americans have the Y. [02:38]\ hm, really? I didn't know about this French feature [02:38]\ it appears more idiotic I thought it is :( [02:39]\ kostix - That's why I'd say, you \*don't\* deal with all of it; you bind according to the character that the key generates, and you document according to the character that the key generates. [02:40]\ If (as you apparently do) you have a large enough user base that swaps keyboard maps for a single keyboard, then you perhaps add extra bindings so tat someone can hit Control-Cyrillic\_ka and still get the Control-r functionality. [02:40]\ kbk: so how we then implement posting an emoticon palette? it's bound to alt-e in tkabber for the obvious reason: "e" stands for "emoticon", so how do we deal with russian? this keymap doesn't have \*any\* ascii letter [02:41]\ kbk: so, for any non-ascii keymap I have to add yet another binding, you say? [02:41]\ or may be provide "national keyboard plugins"? [02:41]\ Either that, or localize bindings... [02:41]\ they're likely to be more mnemonic that way, anyway. [02:42]\ If an English speaker wants to have Control-C == "Close", then a French one might well want to have Control-F = "Fermer" [02:42]\ if we go this route this also means the same part is broken in X, just in some other way [02:44]\ In any case, generating a keysym of "aring" for "Cyrillic-ye" is crazy. [02:45]\ I've nailed it so it's easy to fix. in fact I have a working patch somewhere. but it did what you consider to be wrong ;) [02:46]\ and anyway it would be better for this problem to be discussed in more detail with more people, I think [02:46]\ before really implementing any fixes [02:47]\ kbk: one another point prevented me from submitting my patch somewhere is what will happen to people who use composing key? say, japanese? [02:47]\ Sure. But I don't think there is any good solution other than "bind to the symbol that's called out on the key". [02:48]\ when I have seen some code related to this, which I was likely about to break, I started to scratch my head [02:48]\ so I would like to talk to a CJK person on this (if the community has one) [02:48]\ Well... in Windows, when someone hits a dead-key sequence, generally the app doesn't see any keystroke except the last. [02:48]\ dead != compose, I think [02:49]\ on Japanese keyboards it switches alphabets, as I understand this [02:49]\ may be pickhq could help here -- he appears to know Japanese and is able to enter it [02:50]\ Right - but the 'compose' key is itself dead, AFAIK, or at the very least ignorable. [02:51]\ suchenwi is a fluent Chinese speaker and may very well know how Chinese keyboards work. [02:51]\ kbk: I think he just has another hack like "ruslish" in his sleeve :P [02:53]\ Well, yes, he does. But he's lived in China and may well have insight into how real Chinese input methods work. [02:53]\ There are a lot of them... [02:53]\ [http://zsigri.tripod.com/fontboard/cjk/input.html](http://zsigri.tripod.com/fontboard/cjk/input.html) [03:02]\ In any case, though, it appears to me that binding to scancode will only make a bad situation worse. [http://www.win.tue.nl/~aeb/linux/kbd/scancodes.html](http://www.win.tue.nl/~aeb/linux/kbd/scancodes.html) shows just what a mess you get into \*there\*. + + Index: wiki/ru/Tkabber.md ================================================================== --- wiki/ru/Tkabber.md +++ wiki/ru/Tkabber.md @@ -1,311 +1,261 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Tkabber/index.html) + # Tkabber Материал из Tkabber Wiki. ## Содержание * [1 Может](#Может) - * [1.1 Соединение с сервером и логин](#Соединение_с_сервером_и_логин) - * [1.1.1 Типы соединений с сервером](#Типы_соединений_с_сервером) - * [1.1.2 Прокси](#Прокси) - * [1.1.3 (Авто)определение параметров соединения](#Автоопределение_параметров_соединения) - * [1.1.4 Логин/автологин](#Логин_автологин) - * [1.1.5 Мультилогин](#Мультилогин) - * [1.2 Browse/Discovery](#Browse_Discovery) - * [1.3 Обмен сообщениями (messaging)](#Обмен_сообщениями_messaging) - * [1.3.1 Чат](#Чат) - * [1.3.2 Групповой чат и MUC](#Групповой_чат_и_MUC) - * [1.4 Присутствие (presence)](#Присутствие_presence) - * [1.5 Info/Query (IQ)](#Info_Query_IQ) - * [1.6 Privacy](#Privacy) - * [1.7 Передача файлов](#Передача_файлов) - * [1.8 Publish/Subscribe (pubsub)](#Publish_Subscribe_pubsub) - * [1.9 Интерфейс](#Интерфейс) - * [1.10 Список контактов (ростер)](#Список_контактов_ростер) - * [1.11 Смайлики AKA emoticons](#Смайлики_AKA_emoticons) - * [1.12 История](#История) - * [1.13 Стандартные плагины](#Стандартные_плагины) - * [1.14 Расширяемость](#Расширяемость) - * [1.15 Управляемость](#Управляемость) -* [2 Не может](#Не_может) - * [2.1 SO\_KEEPALIVE на сокете](#SO_KEEPALIVE_на_сокете) - * [2.2 Сжатие потока при использовании SSL](#Сжатие_потока_при_использовании_SSL) - * [2.3 "Лёгкий в использовании" мультилогин](#Лёгкий_в_использовании_мультилогин) - * [2.4 Voice IP](#Voice_IP) - * [2.5 Хистори на сервере / сжатие логов](#Хистори_на_сервере___сжатие_логов) - * [2.6 Поддержка PGP под Windows](#Поддержка_PGP_под_Windows) -* [3 "Слабые места"](#Слабые_места) - * [3.1 Ресурсоёмкость и скорость работы](#Ресурсоёмкость_и_скорость_работы) - * [3.2 Поддержка PGP](#Поддержка_PGP) - * [3.3 Доступность требуемых модулей Tcl/Tk](#Доступность_требуемых_модулей_Tcl_Tk) - * [3.4 ОС-зависимые баги](#ОС-зависимые_баги) - * [3.5 Поддержка ОС-зависимых особенностей](#Поддержка_ОС-зависимых_особенностей) - -## Может -### Соединение с сервером и логин - -#### Типы соединений с сервером - -Поддерживаются следующие типы соединений: - -* plaintext (на порт 5222). -* SSL (на порт 5223, "Старый SSL"). -* STARTTLS (на порт 5222). -* HTTP poll (на порт 5280). - -Возможны два вида аутентификации пользователя: - -* обычный (plaintext) -* SASL - -Поддерживается сжатие потока (stream compression) только для plaintext соединений -через пакет **ztcl**. Сжатие потока на SSL-соединениях не поддерживается (см. секцию "Не может"). - -#### Прокси - -Любое соединение может "ходить" через HTTP-прокси; любые соединения, кроме HTTP -poll, требуют от прокси поддержки метода CONNECT на соответствующий порт. HTTP -poll использует HTTP, то есть от прокси требуется только разрешение -HTTP-запросов на соответствующий порт. - -На прокси поддерживаются типы авторизации basic и NTLM. - -Имеется возможность поддерживать соединение через прокси путём периодической -посылки в выходной поток байта 0x20. - -HTTPS и SOCKSx прокси в настоящее время не поддерживаются. - -#### (Авто)определение параметров соединения - -Возможно ручное указание хоста и порта для соединения. Также Ткаббер умеет -запрашивать необходимые SRV или TXT записи в DNS для выяснения точных -параметров подключения по доменной части JID'а пользователя. - -Корректная работа с DNS требует достаточно свежей **tcllib**, а также — в -большинстве случаев — пакета **tcludp** для возможности выполнения DNS-запросов -по протоколу UDP. - -#### Логин/автологин - -Имеется удобная форма для изменения параметров логина. Все настройки логина -можно изменить через механизм Customize. - -Поддерживаются три варианта логина: - -* Показ формы логина при старте и ожидание действий пользователя. -* Старт без показа формы логина и ожидание действий пользователя. -* Автологин. - -Имеется поддержка "профилей" (или "профайлов", если угодно) логинов: в конфиге -Ткаббера можно ввести произвольное количество независимых групп настроек логина -и затем выбирать их в форме логина хоткеями Control+1 (первый профиль) и т.д. - -#### Мультилогин - -"Мультилогин" (одновременная регистрация и работа с несколькими аккаунтами) -_официально_ считается нереализованным. - -На деле бо́льшая часть кода ткаббера поддерживает одновременную работу с -несколькими аккаунтами, и добиться такой работы в Ткаббере _можно,_ причём без -особых усилий. - -(Так же по этой теме см. ниже.) - -### Browse/Discovery - -### Обмен сообщениями (messaging) - -Поддерживается: - -* Обычные (normal) сообщения и чат. -* Рендеринг XHTML-сообщений. -* Обычные сообщения архивируются и доступны для просмотра через интерфейс, напоминающий читалку e-mail. -* Хэдлайны (headlines) (и, в частности, поддержка RSS-сервисов). Возможно кэширование хэдлайнов. -* Обработка урлов, смайлов и стайлкодов в тексте сообщений. -* Обработка /me-сообщений. -* Поддержка некоторых атрибутов сообщений, передаваемых в опциональном элементе \. -* Поддержка "хайлайтов" (цветовыделения заданных пользователем ключевых слов). -* Подписывание любых сообщений (включая групчат) при помощи PGP. -* Возможность выбора типа сообщения по умолчанию для исходящих сообщений (normal/chat). - -Для окон чата и групчата поддерживается: - -* Поиск (по Ctrl-S). -* Закладки и перемещение по ним. -* "Команды в стиле IRC" (/ban /kick /time /vcard /leave и т.д.) с автозавершением (completion) по Tab. -* "Умная" обработка кликов мышкой в окне лога чата (клик на нике помещает его в поле ввода - чата, клик на URL'е запускает на нём браузер). -* Поддержка неограниченного undo/redo в поле ввода чата: - * Control-z (и Control-underscore в Unix, если включена опция `tk_strictMotif`) - отменяет последнее действие редактирования текста. - * Control-Z (или Control-y в Windows) перевыполняет последнюю отменённую операцию редактирования. - -Недоработки/баги: - -* Достаточно дубовый интерфейс обработки стандартных сообщений и элементов \. -* То же самое касается архива сообщений. -* Невозможно удалять закладки. -* Нет ограничения на максимальное число сообщений в окне чата/групчата. - -(Работы по улучшению положения в этой области ведутся). - -#### Чат - -Поддерживаются уведомления о состоянии хода беседы (chat state notifications). - -#### Групповой чат и MUC - -Поддерживается: - -* Автозавершение (completion) ников в комнате (по Tab). -* Подробное меню с возможностью полного управления конфигурацией комнаты (кнопка -вызова меню замаскирована под метку "Тема"). - -### Присутствие (presence) - -### Info/Query (IQ) - -### Privacy - -### Передача файлов - -### Publish/Subscribe (pubsub) - -### Интерфейс - -### Список контактов (ростер) - -В ростер могут быть помещены: - -* Обычные контакты (с людьми). -* Закладки на комнаты (groupchat, MUC). -* Сервисы (АКА транспорты АКА гейты). - -Поддерживается: - -* Возможность произвольного переименования контактов. -* Иконки транспортов для сервисов и обычных контактов с этих сервисах; - тип сервисов узнаётся при помощи IQ-запросов. -* Автовход в выбранные конференции из ростера. -* Автологин на выбранные сервисы. -* Drag'n'drop комнат из дискавери в ростер. -* Приглашение контакта из ростера в комнату при помощи drag'n'drop (invitation). -* Вложенные группы. -* Перетаскивание мышкой контактов по ростеру. -* "Склеивание" нескольких ресурсов одного контакта, находящихся в онлайне, в один. -* Аннотации контактов (с показам в окне просмотра vCard'ов). -* Экспорт ростера в текстовый файл и импорт оттуда. -* Возможность послать список контактов из ростера другому контакту (send users). -* Переключение между видимостью всех контактов или только находящихся в онлайне. -* Возможность убрать/показать ростер (при работе в "tabbed" режиме) по хоткею Ctrl-R. -* Тултипы (tooltips, balloon hints, всплывающие подсказки) с информацией о контакте. - -### Смайлики AKA emoticons - -### История - -Поддерживается: - -* Запись всех сообщений чатов и комнат в текстовые файлы; файлы истории именуются по JID'ам контактов/комнат. -* Окно для просмотра истории общения в комнате/с контактом. Доступно в соответствующих контекстных меню. -* В окне просмотра лога поддерживается поиск (по Ctrl-S). -* Архивация лога при его открытии (перенос записей старше одного месяца в спец. подкаталог). - -Не поддерживается/баги: - -* Пока что отсутствует возможность лёгкого навешивания собственных обработчиков на событие - "архивация лога" (далее читайте ниже в разделе "Не может"). -* Ошибки времени выполнения при общении с идиотскими никами, содержащими символы, запрещённые - для использования в именах файлов текущей ОС. Это — ошибки попытки открыть файл с именем, - образованным из такого ника при общении с подобным ником в привате комнаты (в этом случае - лог имеет имя `ROOMNAME_SERVERNAME_NICK`). Лечится временным отключением логов групчата. - -### Стандартные плагины - -### Расширяемость - -### Управляемость - -## Не может -### SO\_KEEPALIVE на сокете - -"Низкоуровневое" API сокетов в настоящий момент не "экспортировано" на уровень -скриптов в тикле; также не известно ни одного расширения тикля, позволяющего -это делать. Поэтому поддержка "настоящего keep alive" (каковое реализовано в -программах, написанных на C/C++, вроде Psi или Gaim), в настоящий момент -невозможно. - -Разработчики Ткаббера наметили два пути решения этой проблемы: - -* Написание простого компонента на Си для тикля, экспортирующего socket API на уровень - скриптов. Это сложный, но полезный путь. -* Реализация высокоуровнего "forced keep-alive" (как это назвал автор идеи — teo) или — - точнее — "keep-alive с обратной связью". Суть идеи: после неактивности входного потока - более N единиц времени посылать серверу произвольный IQ-запрос (например, IQ version) - и ждать ответа некоторое (настраиваемое) число секунд. Если ответ не появляется за - отведённое время, считать соединение физически потерянным и закрывать его на стороне Ткаббера. - -### Сжатие потока при использовании SSL - -Stream Compression в XMPP не может работать внутри SSL-соединения физически. Однако, -SSL позволяет использовать собственные механизмы сжатия данных в потоке. - -Использованию их в Ткаббере мешает два фактора: - -* Пакет **tcltls**, предоставляющий обвязку вокруг OpenSSL для Tcl, не содержит - "крутилок" для управления сжатием данных в потоке, то есть, чтобы эта фича - появилась в Ткаббере, кто-то должен сделать соответствующий патч на - **tcltls**. -* Возможности для синхронизации SSL-сокетов относительно используемых методов - сжатия достаточно плохо продуманы в стандарте SSLv3. Более того, в (нём?) - даже не определены стандартные методы сжатия. OpenSSL поддерживает RLE и - Zlib. - -### "Лёгкий в использовании" мультилогин - -Основная причина того, что эта фича не принимает статус официально -поддерживаемой, состоит в том, что в настоящий момент в Ткаббере нет способов -логичной/удачной/удобной поддержки этой концепции в интерфейсе пользователя. -Особенно это касается механизма Customize. - -Если у вас есть _продуманный_ вариант решения этой проблемы, не потребующий -переписывать тонны кода, обратитесь к разработчикам. - -Одновременно хотелось бы заметить, что поддержка мультилогина, в сущности, -противоестественна, поскольку "невозможность" ("неудобство" и т.д.) -одновременной работы с несколькими копиями Ткаббера — достаточно надуманная -проблема. - -### Voice IP - -Таковая поддержка требует очень трудоёмкого прикручивания как минимум -библиотеки libmediastream (которую использует gtalk'овская libjingle). В -настоящий момент эта фича никому не нужна настолько, чтобы заняться её -реализацией. - -Если вы не можете без неё жить, посмотрите на Coccinella или Linphone. - -### Хистори на сервере / сжатие логов - -В настоящее время Ткаббер умеет только архивировать (в _настоящем_ значении -этого слова) логи с историей чатов и групчатов/MUC. Однако, т.к. были запросы -отправлять логи "на мыло" или сжимать их, не исключено, что будут приделаны -специальные хуки, из которых пытливые умы смогут запускать произвольные -обработчики этих логов. - -### Поддержка PGP под Windows - -По всей видимости, это нереально. Неутешительные подробности читать [**тут**](Шифрование_в_Ткаббере.md). - -## "Слабые места" -### Ресурсоёмкость и скорость работы - -### Поддержка PGP - -### Доступность требуемых модулей Tcl/Tk - -### ОС-зависимые баги - -### Поддержка ОС-зависимых особенностей + * [1.1 Соединение с сервером и логин](#Соединение_с_сервером_и_логин) + * [1.1.1 Типы соединений с сервером](#Типы_соединений_с_сервером) + * [1.1.2 Прокси](#Прокси) + * [1.1.3 (Авто)определение параметров соединения](#Автоопределение_параметров_соединения) + * [1.1.4 Логин/автологин](#Логин_автологин) + * [1.1.5 Мультилогин](#Мультилогин) + * [1.2 Browse/Discovery](#Browse_Discovery) + * [1.3 Обмен сообщениями (messaging)](#Обмен_сообщениями_messaging) + * [1.3.1 Чат](#Чат) + * [1.3.2 Групповой чат и MUC](#Групповой_чат_и_MUC) + * [1.4 Присутствие (presence)](#Присутствие_presence) + * [1.5 Info/Query (IQ)](#Info_Query_IQ) + * [1.6 Privacy](#Privacy) + * [1.7 Передача файлов](#Передача_файлов) + * [1.8 Publish/Subscribe (pubsub)](#Publish_Subscribe_pubsub) + * [1.9 Интерфейс](#Интерфейс) + * [1.10 Список контактов (ростер)](#Список_контактов_ростер) + * [1.11 Смайлики AKA emoticons](#Смайлики_AKA_emoticons) + * [1.12 История](#История) + * [1.13 Стандартные плагины](#Стандартные_плагины) + * [1.14 Расширяемость](#Расширяемость) + * [1.15 Управляемость](#Управляемость) +* [2 Не может](#Не_может) + * [2.1 SO\_KEEPALIVE на сокете](#SO_KEEPALIVE_на_сокете) + * [2.2 Сжатие потока при использовании SSL](#Сжатие_потока_при_использовании_SSL) + * [2.3 "Лёгкий в использовании" мультилогин](#Лёгкий_в_использовании_мультилогин) + * [2.4 Voice IP](#Voice_IP) + * [2.5 Хистори на сервере / сжатие логов](#Хистори_на_сервере___сжатие_логов) + * [2.6 Поддержка PGP под Windows](#Поддержка_PGP_под_Windows) +* [3 "Слабые места"](#Слабые_места) + * [3.1 Ресурсоёмкость и скорость работы](#Ресурсоёмкость_и_скорость_работы) + * [3.2 Поддержка PGP](#Поддержка_PGP) + * [3.3 Доступность требуемых модулей Tcl/Tk](#Доступность_требуемых_модулей_Tcl_Tk) + * [3.4 ОС-зависимые баги](#ОС-зависимые_баги) + * [3.5 Поддержка ОС-зависимых особенностей](#Поддержка_ОС-зависимых_особенностей) + +# Может +## Соединение с сервером и логин + +### Типы соединений с сервером + +Поддерживаются следующие типы соединений: + +* plaintext (на порт 5222). +* SSL (на порт 5223, "Старый SSL"). +* STARTTLS (на порт 5222). +* HTTP poll (на порт 5280). + +Возможны два вида аутентификации пользователя: + +* обычный (plaintext) +* SASL + +Поддерживается сжатие потока (stream compression) только для plaintext соединений через пакет **ztcl**. Сжатие потока на SSL-соединениях не поддерживается (см. секцию "Не может"). + +### Прокси + +Любое соединение может "ходить" через HTTP-прокси; любые соединения, кроме HTTP poll, требуют от прокси поддержки метода CONNECT на соответствующий порт. HTTP poll использует HTTP, то есть от прокси требуется только разрешение HTTP-запросов на соответствующий порт. + +На прокси поддерживаются типы авторизации basic и NTLM. + +Имеется возможность поддерживать соединение через прокси путём периодической посылки в выходной поток байта 0x20. + +HTTPS и SOCKSx прокси в настоящее время не поддерживаются. + +### (Авто)определение параметров соединения + +Возможно ручное указание хоста и порта для соединения. Также Ткаббер умеет запрашивать необходимые SRV или TXT записи в DNS для выяснения точных параметров подключения по доменной части JID'а пользователя. + +Корректная работа с DNS требует достаточно свежей **tcllib**, а также — в большинстве случаев — пакета **tcludp** для возможности выполнения DNS-запросов по протоколу UDP. + +### Логин/автологин + +Имеется удобная форма для изменения параметров логина. Все настройки логина можно изменить через механизм Customize. + +Поддерживаются три варианта логина: + +* Показ формы логина при старте и ожидание действий пользователя. +* Старт без показа формы логина и ожидание действий пользователя. +* Автологин. + +Имеется поддержка "профилей" (или "профайлов", если угодно) логинов: в конфиге Ткаббера можно ввести произвольное количество независимых групп настроек логина и затем выбирать их в форме логина хоткеями Control+1 (первый профиль) и т.д. + +### Мультилогин + +"Мультилогин" (одновременная регистрация и работа с несколькими аккаунтами) _официально_ считается нереализованным. + +На деле бОльшая часть кода ткаббера поддерживает одновременную работу с несколькими аккаунтами, и добиться такой работы в Ткаббере _можно,_ причём без особых усилий. + +(Так же по этой теме см. ниже.) + +## Browse/Discovery + +## Обмен сообщениями (messaging) + +Поддерживается: + +* Обычные (normal) сообщения и чат. +* Рендеринг XHTML-сообщений. +* Обычные сообщения архивируются и доступны для просмотра через интерфейс, напоминающий читалку e-mail. +* Хэдлайны (headlines) (и, в частности, поддержка RSS-сервисов). Возможно кэширование хэдлайнов. +* Обработка урлов, смайлов и стайлкодов в тексте сообщений. +* Обработка /me-сообщений. +* Поддержка некоторых атрибутов сообщений, передаваемых в опциональном элементе \. +* Поддержка "хайлайтов" (цветовыделения заданных пользователем ключевых слов). +* Подписывание любых сообщений (включая групчат) при помощи PGP. +* Возможность выбора типа сообщения по умолчанию для исходящих сообщений (normal/chat). + +Для окон чата и групчата поддерживается: + +* Поиск (по Ctrl-S). +* Закладки и перемещение по ним. +* "Команды в стиле IRC" (/ban /kick /time /vcard /leave и т.д.) с автозавершением (completion) по Tab. +* "Умная" обработка кликов мышкой в окне лога чата (клик на нике помещает его в поле ввода чата, клик на URL'е запускает на нём браузер). +* Поддержка неограниченного undo/redo в поле ввода чата: + * Control-z (и Control-underscore в Unix, если включена опция `tk_strictMotif`) отменяет последнее действие редактирования текста. + * Control-Z (или Control-y в Windows) перевыполняет последнюю отменённую операцию редактирования. + +Недоработки/баги: + +* Достаточно дубовый интерфейс обработки стандартных сообщений и элементов \. +* То же самое касается архива сообщений. +* Невозможно удалять закладки. +* Нет ограничения на максимальное число сообщений в окне чата/групчата. + +(Работы по улучшению положения в этой области ведутся). + +### Чат + +Поддерживаются уведомления о состоянии хода беседы (chat state notifications). + +### Групповой чат и MUC + +Поддерживается: + +* Автозавершение (completion) ников в комнате (по Tab). +* Подробное меню с возможностью полного управления конфигурацией комнаты (кнопка вызова меню замаскирована под метку "Тема"). + +## Присутствие (presence) + +## Info/Query (IQ) + +## Privacy + +## Передача файлов + +## Publish/Subscribe (pubsub) + +## Интерфейс + +## Список контактов (ростер) + +В ростер могут быть помещены: + +* Обычные контакты (с людьми). +* Закладки на комнаты (groupchat, MUC). +* Сервисы (АКА транспорты АКА гейты). + +Поддерживается: + +* Возможность произвольного переименования контактов. +* Иконки транспортов для сервисов и обычных контактов с этих сервисах; тип сервисов узнаётся при помощи IQ-запросов. +* Автовход в выбранные конференции из ростера. +* Автологин на выбранные сервисы. +* Drag'n'drop комнат из дискавери в ростер. +* Приглашение контакта из ростера в комнату при помощи drag'n'drop (invitation). +* Вложенные группы. +* Перетаскивание мышкой контактов по ростеру. +* "Склеивание" нескольких ресурсов одного контакта, находящихся в онлайне, в один. +* Аннотации контактов (с показам в окне просмотра vCard'ов). +* Экспорт ростера в текстовый файл и импорт оттуда. +* Возможность послать список контактов из ростера другому контакту (send users). +* Переключение между видимостью всех контактов или только находящихся в онлайне. +* Возможность убрать/показать ростер (при работе в "tabbed" режиме) по хоткею Ctrl-R. +* Тултипы (tooltips, balloon hints, всплывающие подсказки) с информацией о контакте. + +## Смайлики AKA emoticons + +## История + +Поддерживается: + +* Запись всех сообщений чатов и комнат в текстовые файлы; файлы истории именуются по JID'ам контактов/комнат. +* Окно для просмотра истории общения в комнате/с контактом. Доступно в соответствующих контекстных меню. +* В окне просмотра лога поддерживается поиск (по Ctrl-S). +* Архивация лога при его открытии (перенос записей старше одного месяца в спец. подкаталог). + +Не поддерживается/баги: + +* Пока что отсутствует возможность лёгкого навешивания собственных обработчиков на событие "архивация лога" (далее читайте ниже в разделе "Не может"). +* Ошибки времени выполнения при общении с идиотскими никами, содержащими символы, запрещённые для использования в именах файлов текущей ОС. Это — ошибки попытки открыть файл с именем, образованным из такого ника при общении с подобным ником в привате комнаты (в этом случае лог имеет имя `ROOMNAME_SERVERNAME_NICK`). Лечится временным отключением логов групчата. + +## Стандартные плагины + +## Расширяемость + +## Управляемость + +# Не может +## SO\_KEEPALIVE на сокете + +"Низкоуровневое" API сокетов в настоящий момент не "экспортировано" на уровень скриптов в тикле; также не известно ни одного расширения тикля, позволяющего это делать. Поэтому поддержка "настоящего keep alive" (каковое реализовано в программах, написанных на C/C++, вроде Psi или Gaim), в настоящий момент невозможно. + +Разработчики Ткаббера наметили два пути решения этой проблемы: + +* Написание простого компонента на Си для тикля, экспортирующего socket API на уровень скриптов. Это сложный, но полезный путь. +* Реализация высокоуровнего "forced keep-alive" (как это назвал автор идеи — teo) или — точнее — "keep-alive с обратной связью". Суть идеи: после неактивности входного потока более N единиц времени посылать серверу произвольный IQ-запрос (например, IQ version) и ждать ответа некоторое (настраиваемое) число секунд. Если ответ не появляется за отведённое время, считать соединение физически потерянным и закрывать его на стороне Ткаббера. + +## Сжатие потока при использовании SSL + +Stream Compression в XMPP не может работать внутри SSL-соединения физически. Однако, SSL позволяет использовать собственные механизмы сжатия данных в потоке. + +Использованию их в Ткаббере мешает два фактора: + +* Пакет **tcltls**, предоставляющий обвязку вокруг OpenSSL для Tcl, не содержит "крутилок" для управления сжатием данных в потоке, то есть, чтобы эта фича появилась в Ткаббере, кто-то должен сделать соответствующий патч на **tcltls**. +* Возможности для синхронизации SSL-сокетов относительно используемых методов сжатия достаточно плохо продуманы в стандарте SSLv3. Более того, в (нём?) даже не определены стандартные методы сжатия. OpenSSL поддерживает RLE и Zlib. + +## "Лёгкий в использовании" мультилогин + +Основная причина того, что эта фича не принимает статус официально поддерживаемой, состоит в том, что в настоящий момент в Ткаббере нет способов логичной/удачной/удобной поддержки этой концепции в интерфейсе пользователя. Особенно это касается механизма Customize. + +Если у вас есть _продуманный_ вариант решения этой проблемы, не потребующий переписывать тонны кода, обратитесь к разработчикам. + +Одновременно хотелось бы заметить, что поддержка мультилогина, в сущности, противоестественна, поскольку "невозможность" ("неудобство" и т.д.) одновременной работы с несколькими копиями Ткаббера — достаточно надуманная проблема. + +## Voice IP + +Таковая поддержка требует очень трудоёмкого прикручивания как минимум библиотеки libmediastream (которую использует gtalk'овская libjingle). В настоящий момент эта фича никому не нужна настолько, чтобы заняться её реализацией. + +Если вы не можете без неё жить, посмотрите на Coccinella или Linphone. + +## Хистори на сервере / сжатие логов + +В настоящее время Ткаббер умеет только архивировать (в _настоящем_ значении этого слова) логи с историей чатов и групчатов/MUC. Однако, т.к. были запросы отправлять логи "на мыло" или сжимать их, не исключено, что будут приделаны специальные хуки, из которых пытливые умы смогут запускать произвольные обработчики этих логов. + +## Поддержка PGP под Windows + +По всей видимости, это нереально. Неутешительные подробности читать [тут](Шифрование_в_Ткаббере.md). + +# "Слабые места" +## Ресурсоёмкость и скорость работы + +## Поддержка PGP + +## Доступность требуемых модулей Tcl/Tk + +## ОС-зависимые баги + +## Поддержка ОС-зависимых особенностей + + Index: wiki/ru/Tkabber_Wiki_Справка.md ================================================================== --- wiki/ru/Tkabber_Wiki_Справка.md +++ wiki/ru/Tkabber_Wiki_Справка.md @@ -1,568 +1,261 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Tkabber_Wiki:Справка/index.html) + # Tkabber Wiki:Справка Материал из Tkabber Wiki -Эта страница предназначена для тех, кто пожелал принять участие в проекте -Tkabber Wiki в качестве автора статей или переводчика. Главное назначение -нижеследующего — определить стиль оформления, принятый на вики, чтобы все -статьи смотрелись более-менее одинаково, не слишком пестрели жирным и наклонным -шрифтом и были ясными для понимания. (Просьба учесть, что в настоящий момент не -всё на вики оформлено в соответствии с этими правилами, но исправления ведутся, -и в конце концов всё будет приведено к единому стилю.) - -Если у вас есть какие-то предложения по оформлению, пожалуйста, свяжитесь либо -с [**Bigote**](Участник_Bigote.md), либо с [**kostix**](Участник_Kostix.md), -либо с [**lknight**](Участник_Lknight.md). - -Для обсуждения работ на вики создана отдельная конференция -`xmpp:tkabber-wiki@confernce.jabber.ru`. Вход на неё — по приглашению, то есть -вам сначала надо выловить кого-нибудь из нас. - -Итак, приступим. + Эта страница предназначена для тех, кто пожелал принять участие в проекте Tkabber Wiki в качестве автора статей или переводчика. Главное назначение нижеследующего — определить стиль оформления, принятый на вики, чтобы все статьи смотрелись более-менее одинаково, не слишком пестрели жирным и наклонным шрифтом и были ясными для понимания. (Просьба учесть, что в настоящий момент не всё на вики оформлено в соответствии с этими правилами, но исправления ведутся, и в конце концов всё будет приведено к единому стилю.) + +Если у вас есть какие-то предложения по оформлению, пожалуйста, свяжитесь либо с [Участник:bigote](Участник_Bigote.md), либо с [Участник:kostix](Участник_Kostix.md), либо с [Участник:lknight](Участник_Lknight.md). + +Для обсуждения работ на вики создана отдельная конференция `xmpp:tkabber-wiki@confernce.jabber.ru`. Вход на неё — по приглашению, то есть вам сначала надо выловить кого-нибудь из нас. + +Итак, приступим. ## Содержание * [1 Если вы не работали с вики раньше](#Если_вы_не_работали_с_вики_раньше) * [2 Теперь об оформлении](#Теперь_об_оформлении) - * [2.1 Для авторов новых статей](#Для_авторов_новых_статей) - * [2.1.1 Применение отбоя пробелом](#Применение_отбоя_пробелом) - * [2.1.2 Применение HTML](#Применение_HTML) - * [2.1.3 Применение тэга **\**](#Применение_тэга_tt) - * [2.1.4 Применение жирного шрифта](#Применение_жирного_шрифта) - * [2.1.5 Применение наклонного шрифта](#Применение_наклонного_шрифта) - * [2.1.6 Применение CSS](#Применение_CSS) - * [2.1.7 Употребление смайликов в тексте](#Употребление_смайликов_в_тексте) - * [2.1.8 Употребление буквы "Ё"](#Употребление_буквы_Ё) - * [2.1.9 Прочие элементы оформления](#Прочие_элементы_оформления) - * [2.1.10 Песочница](#Песочница) - * [2.2 Переводчикам](#Переводчикам) - * [2.2.1 OmegaT](#OmegaT) - * [2.2.2 Рекомендуемый порядок действий при переводе на новый язык с нуля](#Рекомендуемый_порядок_действий_при_переводе_на_новый_язык_с_нуля) - * [2.2.3 Перевод на родной язык](#Перевод_на_родной_язык) - * [2.2.4 Перевод на чужой язык](#Перевод_на_чужой_язык) - * [2.2.5 Перевод меню](#Перевод_меню) - * [2.2.6 Локализация Ткаббера](#Локализация_Ткаббера) + * [2.1 Для авторов новых статей](#Для_авторов_новых_статей) + * [2.1.1 Применение отбоя пробелом](#Применение_отбоя_пробелом) + * [2.1.2 Применение HTML](#Применение_HTML) + * [2.1.3 Применение тэга **\**](#Применение_тэга_tt) + * [2.1.4 Применение жирного шрифта](#Применение_жирного_шрифта) + * [2.1.5 Применение наклонного шрифта](#Применение_наклонного_шрифта) + * [2.1.6 Применение CSS](#Применение_CSS) + * [2.1.7 Употребление смайликов в тексте](#Употребление_смайликов_в_тексте) + * [2.1.8 Употребление буквы "Ё"](#Употребление_буквы_Ё) + * [2.1.9 Прочие элементы оформления](#Прочие_элементы_оформления) + * [2.1.10 Песочница](#Песочница) + * [2.2 Переводчикам](#Переводчикам) + * [2.2.1 OmegaT](#OmegaT) + * [2.2.2 Рекомендуемый порядок действий при переводе на новый язык с нуля](#Рекомендуемый_порядок_действий_при_переводе_на_новый_язык_с_нуля) + * [2.2.3 Перевод на родной язык](#Перевод_на_родной_язык) + * [2.2.4 Перевод на чужой язык](#Перевод_на_чужой_язык) + * [2.2.5 Перевод меню](#Перевод_меню) + * [2.2.6 Локализация Ткаббера](#Локализация_Ткаббера) + * [2.2.6 Обновляем существующие сообщения](#Обновляем_существующие_сообщения) + * [2.2.6 Создание новой версии](#Создание_новой_версии) + * [2.2.6 Что ещё переводить?](#Что_ещё_переводить) # Если вы не работали с вики раньше -* Подробная и очень приличная [справка](http://ru.wikipedia.org/wiki/Википедия:Как_править_статьи) - по разметке WikiPedia. На той странице есть ссылки на более конкретные темы: - "изображения", "как начать новую статью" и прочее. В качестве теоретической - базы — идеальное место. -* Для создания галерей, однако, удобнее воспользоваться - [ссылкой на соответствующий раздел MediaWiki](http://www.mediawiki.org/w/index.php?title=Sites_using_MediaWiki/gallery&action=submit), - которая сразу показывает правильный пример кода (на wikipedia.org почему-то - о галереях сказано вскользь, и работающий код не продемонстрирован, а чтобы - вычислить его самому, надо или долго пробовать, или быть семи пядей во - лбу ;)) -* Смотрите также [документацию по настройке интерфейса](http://meta.wikipedia.org/wiki/MediaWiki_i18n) - и [Мануал пользователя](http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide) - по использованию и настройке справочной системы. +* Подробная и очень приличная [справка](http://ru.wikipedia.org/wiki/Википедия:Как_править_статьи) по разметке WikiPedia. На той странице есть ссылки на более конкретные темы: "изображения", "как начать новую статью" и прочее. В качестве теоретической базы — идеальное место. +* Для создания галерей, однако, удобнее воспользоваться [ссылкой на соответствующий раздел MediaWiki](http://www.mediawiki.org/w/index.php?title=Sites_using_MediaWiki/gallery&action=submit), которая сразу показывает правильный пример кода (на wikipedia.org почему-то о галереях сказано вскользь, и работающий код не продемонстрирован, а чтобы вычислить его самому, надо или долго пробовать, или быть семи пядей во лбу ;)) +* Смотрите также [документацию по настройке интерфейса](http://meta.wikipedia.org/wiki/MediaWiki_i18n) и [Мануал пользователя](http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide) по использованию и настройке справочной системы. # Теперь об оформлении -Во первых строках просим помнить, что структура вики может меняться (в том -числе и вами), но делать это нужно очень осторожно, предварительно обсудив -изменения с администраторами проекта (см. ссылки выше). Если у статьи, которую -вы хотите передвинуть по вики, есть "двойники" на других языках, то же самое -надо сделать и с ними. Потому мы и просим уведомлять о желаемых изменениях. +Во первых строках просим помнить, что структура вики может меняться (в том числе и вами), но делать это нужно очень осторожно, предварительно обсудив изменения с администраторами проекта (см. ссылки выше). Если у статьи, которую вы хотите передвинуть по вики, есть "двойники" на других языках, то же самое надо сделать и с ними. Потому мы и просим уведомлять о желаемых изменениях. ## Для авторов новых статей -Перед тем как писать новую статью, посмотрите, нет ли уже другой статьи, более -или менее полно раскрывающей эту тему. Если такая статья есть, возможно, вам -стоит просто дополнить её. Если же это не так, то для начала определитесь, в -какой раздел поместить ссылку на неё, и... поместите эту ссылку :) А затем -можно уже приступать к написанию. Не пожалейте пяти минут и ознакомьтесь с -правилами оформления статей. Может оказаться полезным и просмотр исходного кода -(по команде "править" в верхнем меню) какой-нибудь существующей статьи, где -есть элементы, которые вы собираетесь использовать в своей статье. И конечно, -мы не хотим загонять всех в жёсткие рамки — в конце концов, содержание важнее -формы. Оформление статьи — дело вкуса автора, но постарайтесь понять и -читателей — ведь это им будет тяжело разбираться в каше из стилей, если автор -об этом не позаботится. Не забывайте, что перед сохранением страницы её можно -предварительно просмотреть (есть кнопка "Предварительный просмотр"). Да, и -постарайтесь писать без ошибок ;) - -Теперь о стилях. +Перед тем как писать новую статью, посмотрите, нет ли уже другой статьи, более или менее полно раскрывающей эту тему. Если такая статья есть, возможно, вам стоит просто дополнить её. Если же это не так, то для начала определитесь, в какой раздел поместить ссылку на неё, и... поместите эту ссылку :) А затем можно уже приступать к написанию. Не пожалейте пяти минут и ознакомьтесь с правилами оформления статей. Может оказаться полезным и просмотр исходного кода (по команде "править" в верхнем меню) какой-нибудь существующей статьи, где есть элементы, которые вы собираетесь использовать в своей статье. И конечно, мы не хотим загонять всех в жёсткие рамки — в конце концов, содержание важнее формы. Оформление статьи — дело вкуса автора, но постарайтесь понять и читателей — ведь это им будет тяжело разбираться в каше из стилей, если автор об этом не позаботится. Не забывайте, что перед сохранением страницы её можно предварительно просмотреть (есть кнопка "Предварительный просмотр"). Да, и постарайтесь писать без ошибок ;) + +Теперь о стилях. ### Применение отбоя пробелом -Один из встроенных стилей разметки вики — отбой пробелом, то есть выделяемая -строка начинается с пробела. В результате применения этого стиля выделенный -текст помещается в красивую рамочку с розовым фоном. У нас этот стиль будет -применяться для: +Один из встроенных стилей разметки вики — отбой пробелом, то есть выделяемая строка начинается с пробела. В результате применения этого стиля выделенный текст помещается в красивую рамочку с розовым фоном. У нас этот стиль будет применяться для: -* выделения кусков кода: +* выделения кусков кода: namespace eval emoteicons { - array set emoteicons {} - - variable lasttext "" - variable lastX - variable lastY + array set emoteicons {} + + variable lasttext "" + variable lastX + variable lastY } -* выделения опций настроек, когда они встречаются в тексте статьи в первый раз: +* выделения опций настроек, когда они встречаются в тексте статьи в первый раз: ::jidlink::transport(allowed,dtcp-active) -* выделения пути к файлам, когда этот путь: - -1. довольно длинный, -1. вводится в тексте статьи впервые, -1. хочется обратить на него особое внимание. - -Постарайтесь построить предложение так, чтобы выделение не разрывало его или по -крайней мере смотрелось прилично. +* выделения пути к файлам, когда этот путь: + +1. довольно длинный, +1. вводится в тексте статьи впервые, +1. хочется обратить на него особое внимание. + +Постарайтесь построить предложение так, чтобы выделение не разрывало его или по крайней мере смотрелось прилично. ### Применение HTML -Основные стили разметки уже встроены в вики, так что особой нужды в -использовании тэгов HTML нет. Больше того: злоупотребление ими загрязняет -исходный текст статей, затрудняет перевод и правку. Тем не менее, в некоторых -случаях применение HTML вполне оправдано. Пример **—** это вот длинное тире -(\—), которое и должно по идее использоваться вместо популярного нынче -дефиса **-**. Ещё один пример — стрелки → и ← (\→ и \←), угловые скобки -\< и > (\< и \>), значок акцента **&\#769;**, ставящийся следом за буквой, -над которой хотим поставить ударение. - -Если вам нужно оформить пропуск куска кода в примере, используйте спец-символ -\· — "·" Например: +Основные стили разметки уже встроены в вики, так что особой нужды в использовании тэгов HTML нет. Больше того: злоупотребление ими загрязняет исходный текст статей, затрудняет перевод и правку. Тем не менее, в некоторых случаях применение HTML вполне оправдано. Пример **—** это вот длинное тире (—), которое и должно по идее использоваться вместо популярного нынче дефиса **-**. Ещё один пример — стрелки → и ← (→ и ←), угловые скобки \< и > (< и >), значок акцента **&\#769;**, ставящийся следом за буквой, над которой хотим поставить ударение. + +Если вам нужно оформить пропуск куска кода в примере, используйте спец-символ · — "·" Например: proc a b { - puts ouch! - - · · · · · - - puts text + puts ouch! + + · · · · · + + puts text } -При использовании ссылок знаки препинания, "касающиеся" последнего слова в -ссылке, из неё исключаются. Пример: _В случае сомнений не забывайте о -предварительном просмотре и о **'''[[Sandbox\|Песочнице]].'''** → В случае -сомнений не забывайте о предварительном просмотре и о -**[Песочнице](Sandbox.md).**_ +При использовании ссылок знаки препинания, "касающиеся" последнего слова в ссылке, из неё исключаются. Пример: _В случае сомнений не забывайте о предварительном просмотре и о **'''[[Sandbox|Песочнице]].'''** → В случае сомнений не забывайте о предварительном просмотре и о **[Песочнице](Sandbox.md).**_ ### Применение тэга **\** -* JID авторов патчей, статей и просто хороших людей, а также конференций и прочих - ресурсов выделяются с помощью тэга **\**: `xmpp:loginname@jabberserver.org`, - `xmpp:conferencename@conference.jabberserver.org`, `rss@jabberserver.org`. - Если непосредственно после JID или ресурса идёт знак препинания, ставить его - следует **после** закрывающего тэга **\**. -* Выделение опций настроек (например, `::jidlink::transport(allowed,dtcp-active)`), - когда они встречаются в тексте статьи во второй и более раз. +* JID авторов патчей, статей и просто хороших людей, а также конференций и прочих ресурсов выделяются с помощью тэга **\**: `xmpp:loginname@jabberserver.org`, `xmpp:conferencename@conference.jabberserver.org`, `rss@jabberserver.org`. Если непосредственно после JID или ресурса идёт знак препинания, ставить его следует **после** закрывающего тэга **\**. +* Выделение опций настроек (например, `::jidlink::transport(allowed,dtcp-active)`), когда они встречаются в тексте статьи во второй и более раз. ### Применение жирного шрифта -В этой вики жирный шрифт используется для: - -* выделения путей до файлов, о которых идёт речь (например, **~/.tkabber/avatar.gif**), - когда не стоит нарушать текучесть предложения. При этом постарайтесь построить - предложение так, чтобы к этому пути не примешивалась естественная пунктуация. - Если же это невозможно, выключайте знаки препинания из выделения. -* обозначения пути к какому-либо пункту Настроек Ткаббера или для ориентации в его - меню (например, **Настройки → File Transfer → Jidlink** или **Службы → Расширения → Шпионить за присутствием**); -* выделения ссылок на статьи данной вики (например, "О плагинах читайте [**эту статью**](Плагины.md)."); -* чтобы обратить внимание на какое-либо **важное слово;** - * обратите внимание, что в случае с выделенным "просто текстом", в отличие от - кода или путей, знаки препинания включаются в выделение. -* вопросы в [**ЧаВо**](Ткаббер_ЧаВо.md) — выделяются целиком, вместе со словом "Вопрос". +В этой вики жирный шрифт используется для: + +* выделения путей до файлов, о которых идёт речь (например, **~/.tkabber/avatar.gif**), когда не стоит нарушать текучесть предложения. При этом постарайтесь построить предложение так, чтобы к этому пути не примешивалась естественная пунктуация. Если же это невозможно, выключайте знаки препинания из выделения. +* обозначения пути к какому-либо пункту Настроек Ткаббера или для ориентации в его меню (например, **Настройки → File Transfer → Jidlink** или **Службы → Расширения → Шпионить за присутствием**); +* выделения ссылок на статьи данной вики (например, "О плагинах читайте **[эту статью](Плагины.md).**"); +* чтобы обратить внимание на какое-либо **важное слово;** + * обратите внимание, что в случае с выделенным "просто текстом", в отличие от кода или путей, знаки препинания включаются в выделение. + +* вопросы в **[ЧаВо](Ткаббер_ЧаВо.md)** — выделяются целиком, вместе со словом "Вопрос". ### Применение наклонного шрифта -Наклонный шрифт в нашей вики применяется для выделения довольно длинных кусков -текста в общем повествовании (одно предложение или часть сложносочинённого или -сложноподчинённого предложения как минимум), то есть в случаях, когда жирный -шрифт слишком обращает на себя внимание. В этом случае знаки пунктуации, -завершающие выделенный текст, включаются в выделение. _Если вам понадобилось -акцентировать какое-либо слово в наклонном тексте, допустимо воспользоваться -для этого жирным шрифтом. При этом знаки пунктуации, вплотную прилегающие к -жирному слову, из выделения жирным **включаются,** если это обычное слово, и -исключается, если это кусок кода или путь до файла: **~/.tkabber/config.tcl**._ -(Понимаю, что на словах это выглядит запутанно — просмотрите код этой страницы, -и вы всё поймёте. Или же просто присмотритесь к финальной точке предыдущего -предложения — она обычная :)) Постарайтесь не злоупотреблять смешением стилей -или близким соседством жирного и наклонного текста. - -Если вам требуется выделить курсивом целый абзац или несколько предложений, -лучше воспользоваться тэгом \. +Наклонный шрифт в нашей вики применяется для выделения довольно длинных кусков текста в общем повествовании (одно предложение или часть сложносочинённого или сложноподчинённого предложения как минимум), то есть в случаях, когда жирный шрифт слишком обращает на себя внимание. В этом случае знаки пунктуации, завершающие выделенный текст, включаются в выделение. _Если вам понадобилось акцентировать какое-либо слово в наклонном тексте, допустимо воспользоваться для этого жирным шрифтом. При этом знаки пунктуации, вплотную прилегающие к жирному слову, из выделения жирным **включаются,** если это обычное слово, и исключается, если это кусок кода или путь до файла: **~/.tkabber/config.tcl**._ (Понимаю, что на словах это выглядит запутанно — просмотрите код этой страницы, и вы всё поймёте. Или же просто присмотритесь к финальной точке предыдущего предложения — она обычная :)) Постарайтесь не злоупотреблять смешением стилей или близким соседством жирного и наклонного текста. + +Если вам требуется выделить курсивом целый абзац или несколько предложений, лучше воспользоваться тэгом \. ### Применение CSS -На вики имеется возможность использовать в коде статей -[стили CSS](http://www.w3.org/Style/CSS/). Имеющиеся стили можете посмотреть -на специальной странице [*MediaWiki:Monobook.css*](MediaWiki_Monobook.css.md). -Редактировать её могут только админы вики, так что если у вас есть идеи по части -оформления текста, для реализации которых нужно править стили, ловите [**Bigote**](Участник_Bigote.md). +На вики имеется возможность использовать в коде статей [стили CSS](http://www.w3.org/Style/CSS/). Имеющиеся стили можете посмотреть на специальной странице [MediaWiki:Monobook.css](MediaWiki_Monobook.css.md). Редактировать её могут только админы вики, так что если у вас есть идеи по части оформления текста, для реализации которых нужно править стили, ловите [Bigote](Участник_Bigote.md). ### Употребление смайликов в тексте -Если вам нравятся смайлики, пользуйтесь на здоровье, но, как говорит один мой -знакомый, без остервенения ;) То есть, постарайтесь свести их употребление к -минимуму. Я долго размышлял, как быть со знаками препинания в конце -предложения, после которого вставляется смайлик, и мне кажется, что смайлик -вполне заменяет точку ;) После знака препинания он как-то не смотрится. В -середине предложения употреблять с осторожностью, лучше разделить предложение -на два более простых, как я только что продемонстрировал (_...заменяет точку, -**потому что** после знака препинания..._). Но вообще помните, что хорошая -шутка должна хорошо смотреться и без смайликов :-))))) +Если вам нравятся смайлики, пользуйтесь на здоровье, но, как говорит один мой знакомый, без остервенения ;) То есть, постарайтесь свести их употребление к минимуму. Я долго размышлял, как быть со знаками препинания в конце предложения, после которого вставляется смайлик, и мне кажется, что смайлик вполне заменяет точку ;) После знака препинания он как-то не смотрится. В середине предложения употреблять с осторожностью, лучше разделить предложение на два более простых, как я только что продемонстрировал (_...заменяет точку, **потому что** после знака препинания..._). Но вообще помните, что хорошая шутка должна хорошо смотреться и без смайликов :-))))) ### Употребление буквы "Ё" -Несмотря на мнения многих весьма известных людей, что буква "ё" в наше время -должна использоваться лишь в случае смысловых неясностей (это рекомендует также -и сайт [gramota.ru](http://gramota.ru)), авторы подавляющего большинства статей -этой вики считают, что эта буква незаслуженно обижена, и стараются -реабилитировать её всеми доступными средствами, в том числе и с помощью этой -вики. Если Вы в силу привычки пишете "е" вместо "ё", ничего страшного — мы -потом всё поправим ;) Если же Вы непримиримый противник использования этой -буквы в общедоступных для чтения и редактирования текстах, большая просьба -сообщить об этом либо в Вашем профиле (Участник:Ваш\_ник), либо в странице -обсуждения написанной Вами статьи или в комментарии к ней (поле "краткое -описание изменений"). Мы люди мирные, и ссориться по этому поводу не собираемся -— в конце концов, информация превыше всего. Однако в этом случае просим и Вас -не исправлять уже написанные буквы "ё" на "е" в статьях, написанных другими. - -Ребята, давайте жить дружно. © Кот Леопольд ;) +Несмотря на мнения многих весьма известных людей, что буква "ё" в наше время должна использоваться лишь в случае смысловых неясностей (это рекомендует также и сайт [gramota.ru](http://gramota.ru)), авторы подавляющего большинства статей этой вики считают, что эта буква незаслуженно обижена, и стараются реабилитировать её всеми доступными средствами, в том числе и с помощью этой вики. Если Вы в силу привычки пишете "е" вместо "ё", ничего страшного — мы потом всё поправим ;) Если же Вы непримиримый противник использования этой буквы в общедоступных для чтения и редактирования текстах, большая просьба сообщить об этом либо в Вашем профиле (Участник:Ваш\_ник), либо в странице обсуждения написанной Вами статьи или в комментарии к ней (поле "краткое описание изменений"). Мы люди мирные, и ссориться по этому поводу не собираемся — в конце концов, информация превыше всего. Однако в этом случае просим и Вас не исправлять уже написанные буквы "ё" на "е" в статьях, написанных другими. + +Ребята, давайте жить дружно. © Кот Леопольд ;) ### Прочие элементы оформления -* Вот такие вот "пули" очень удобно отбивают пункты списков. - -1. Нумерованные списки, тоже могут пригодиться (обратите внимание, они - могут быть и вложенными, как сейчас). - -Подробнее о них читайте в [статье о разметке Википедии](http://ru.wikipedia.org/wiki/Wiki-разметка). - -Если нужно поставить ударение над гласной в русском слове, не используйте -"эрзац-ударения" — акцентированные западноевропейские гласные (повторюсь, речь -не идёт о "законных" случаях, когда употребляется иностранное слово). Для знака -ударения в Unicode существует [специальный символ U+0301](http://www.fileformat.info/info/unicode/char/0301/index.htm). В коде -HTML он записывается как **&\#769;** и ставится **после** "ударяемой" гласной: -**Тка&\#769;ббер → Тка́ббер**. Очень подробно о различных символах, которые -могут пригодиться при оформлении статей, [написано в Википедии](http://ru.wikipedia.org/wiki/Википедия:Специальные_символы). - -Если вам требуется вставить "подпись", например, как автора патча, введите -в любом месте строки: - -* ~~~ (заменится на [[Участник:Пупкин|Пупкин]]) -* ~~~~ (заменится на [[Участник:Пупкин|Пупкин]] ЧЧ:ММ, число месяц год (MSD)) - -Не ограничивайте себя только теми способами форматирования текста, что указаны -здесь. На странице разметки Википедии можно найти целую уйму других, и если -что-то подходит как нельзя кстати для вашей статьи — смело добавляйте этот -приём сюда. Однако хотелось бы попросить не усердствовать чрезмерно в -употреблении разнообразных стилей. Старайтесь держаться золотой середины и -применять выделение лишь там, где без него не обойтись. +* Вот такие вот "пули" очень удобно отбивают пункты списков. + +1. Нумерованные списки, тоже могут пригодиться (обратите внимание, они могут быть и вложенными, как сейчас). + +Подробнее о них читайте в [статье о разметке Википедии](http://ru.wikipedia.org/wiki/Wiki-разметка). + +Если нужно поставить ударение над гласной в русском слове, не используйте "эрзац-ударения" — акцентированные западноевропейские гласные (повторюсь, речь не идёт о "законных" случаях, когда употребляется иностранное слово). Для знака ударения в Unicode существует [специальный символ U+0301](http://www.fileformat.info/info/unicode/char/0301/index.htm). В коде HTML он записывается как **&\#769;** и ставится **после** "ударяемой" гласной: **Тка&\#769;ббер → Тка́ббер**. Очень подробно о различных символах, которые могут пригодиться при оформлении статей, [написано в Википедии](http://ru.wikipedia.org/wiki/Википедия:Специальные_символы). + +Если вам требуется вставить "подпись", например, как автора патча, введите в любом месте строки: + +* ~~~ (заменится на [[Участник:Пупкин|Пупкин]]) +* ~~~~ (заменится на [[Участник:Пупкин|Пупкин]] ЧЧ:ММ, число месяц год (MSD)) + +Не ограничивайте себя только теми способами форматирования текста, что указаны здесь. На странице разметки Википедии можно найти целую уйму других, и если что-то подходит как нельзя кстати для вашей статьи — смело добавляйте этот приём сюда. Однако хотелось бы попросить не усердствовать чрезмерно в употреблении разнообразных стилей. Старайтесь держаться золотой середины и применять выделение лишь там, где без него не обойтись. ### Песочница -Порезвиться с разметкой можно в [**Песочнице**](Sandbox.md). +Порезвиться с разметкой можно в **[Песочнице](Sandbox.md).** ## Переводчикам ### OmegaT -Крайне рекомендую при переводе пользоваться какой-нибудь системой -автоматизированного перевода типа -[OmegaT](http://www.omegat.org/ru/omegat.html). Я сам пользуюсь этой -программой, и могу сказать, что она очень облегчает работу переводчика (не -путать с печально известным Промтом!) Системы CAT (Computer-Assisted -Translation) не переводят текст автоматически, они лишь запоминают все -переведённые фразы и затем, при полном или частичном совпадении какой-либо -фразы оригинала предлагают запомненный перевод, который можно вставить и -отредактировать. По-быстрому освоить OmegaT можно за пару вечеров — на сайте, а -также в помощи к программе имеется быстрый старт. Да и вообще помощь довольно -неплохая. Чтобы не изобретать велосипед, то есть, не создавать всем и каждому -свою память перевода (это называется TM — Translation Memory), я буду -выкладывать здесь на вики свой архив с TM, который у меня потихоньку -накапливается в процессе перевода. В этом архиве, помимо файлов Омеги, имеется -ещё скрытый каталог .git, где хранятся старые версии TM (на случай ядерной -войны зависаний особо крупных статей). Вы можете воспользоваться неслабыми -возможностями [git](http://git.org) по бэкапу текстовых данных, если установите -его себе на компьютер. Теперь пара советов по использованию Омеги. - -* Я для перевода исходные файлы создаю в текстовом формате в кодировке utf-8, - предлагаю так же поступать и вам. В качестве расширения я выбрал .utf8 (если - не ошибаюсь, у Омеги уже есть настроенные фильтры для этого расширения, но - на всякий случай я сейчас расскажу, как там чего настраивать). -* Идите в меню Options → File filters..., выделите элемент Text Files и загляните - сначала в Options. Там надо поставить (если не установлено) End Of Lines - (могу соврать, у меня интерфейс испанский), тогда Омега будет делить текст - на сегменты по предложениям, а не по пустым строчкам. -* Нажав ОК, идите теперь в Edit. Там среди фильтров должен иметься один, отвечающий - за utf-8. Если его нет, создайте новый по аналогии с имеющимися, только в - качестве шаблона напишите \*.utf8, ну и обе кодировки поставьте такими же. - Можно работать и с Unicode. Тогда создайте новый фильтр с нужным вам - расширением, в качестве кодировки укажите utf-16, ну и не забывайте исходным - файлам ставить это расширение. -* Ещё одна тонкость. При загрузке файлов проекта в окошке можно увидеть кнопку - "Import Files From MediaWiki". Это очень удобная кнопка, но, к сожалению, с - русскими названиями страниц это не сработает. Вы вводите в поле для URL - ссылку на страницу, жмёте ОК, но в список файлов ничего не добавляется, хотя - в каталоге source появляется пустой файл с русским именем. Поэтому лучше - всего самому создать в sources нужный файл (для гарантии с английским именем - и расширением utf8, не забыли?), открыть его в редакторе, открыть в нашей - вики нужную статью на редактирование, скопировать весь исходный текст со - всем форматированием и вставить его в файл. Теперь, если обновить проект, - нажав F5, у вас появится новый файл, и вы можете начать работу. -* Не забывайте периодически сохраняться (Ctrl-S) и создавать финальные документы - (Ctrl-D) — мало ли что... У меня один раз гаркнулось часа 4 работы (именно - работы, и дедлайн поджимал), и с тех пор я умный :) Для того и поставил git - и настроил автокоммит в нём с помощью cron каждые 15 минут ;) - -Если будут дополнительные вопросы по Омеге, их лучше задать в конфе -\. - -Для вышеописанных целей создан [репозиторий](http://github.com/bigote/Tkabber-Wiki-Translation) -на [http://github.com](http://github.com), где и будет храниться весь перевод этой вики. +Крайне рекомендую при переводе пользоваться какой-нибудь системой автоматизированного перевода типа [OmegaT](http://www.omegat.org/ru/omegat.html). Я сам пользуюсь этой программой, и могу сказать, что она очень облегчает работу переводчика (не путать с печально известным Промтом!) Системы CAT (Computer-Assisted Translation) не переводят текст автоматически, они лишь запоминают все переведённые фразы и затем, при полном или частичном совпадении какой-либо фразы оригинала предлагают запомненный перевод, который можно вставить и отредактировать. По-быстрому освоить OmegaT можно за пару вечеров — на сайте, а также в помощи к программе имеется быстрый старт. Да и вообще помощь довольно неплохая. Чтобы не изобретать велосипед, то есть, не создавать всем и каждому свою память перевода (это называется TM — Translation Memory), я буду выкладывать здесь на вики свой архив с TM, который у меня потихоньку накапливается в процессе перевода. В этом архиве, помимо файлов Омеги, имеется ещё скрытый каталог .git, где хранятся старые версии TM (на случай ядерной войны зависаний особо крупных статей). Вы можете воспользоваться неслабыми возможностями [git](http://git.org) по бэкапу текстовых данных, если установите его себе на компьютер. Теперь пара советов по использованию Омеги. + +* Я для перевода исходные файлы создаю в текстовом формате в кодировке utf-8, предлагаю так же поступать и вам. В качестве расширения я выбрал .utf8 (если не ошибаюсь, у Омеги уже есть настроенные фильтры для этого расширения, но на всякий случай я сейчас расскажу, как там чего настраивать). +* Идите в меню Options → File filters..., выделите элемент Text Files и загляните сначала в Options. Там надо поставить (если не установлено) End Of Lines (могу соврать, у меня интерфейс испанский), тогда Омега будет делить текст на сегменты по предложениям, а не по пустым строчкам. +* Нажав ОК, идите теперь в Edit. Там среди фильтров должен иметься один, отвечающий за utf-8. Если его нет, создайте новый по аналогии с имеющимися, только в качестве шаблона напишите \*.utf8, ну и обе кодировки поставьте такими же. Можно работать и с Unicode. Тогда создайте новый фильтр с нужным вам расширением, в качестве кодировки укажите utf-16, ну и не забывайте исходным файлам ставить это расширение. +* Ещё одна тонкость. При загрузке файлов проекта в окошке можно увидеть кнопку "Import Files From MediaWiki". Это очень удобная кнопка, но, к сожалению, с русскими названиями страниц это не сработает. Вы вводите в поле для URL ссылку на страницу, жмёте ОК, но в список файлов ничего не добавляется, хотя в каталоге source появляется пустой файл с русским именем. Поэтому лучше всего самому создать в sources нужный файл (для гарантии с английским именем и расширением utf8, не забыли?), открыть его в редакторе, открыть в нашей вики нужную статью на редактирование, скопировать весь исходный текст со всем форматированием и вставить его в файл. Теперь, если обновить проект, нажав F5, у вас появится новый файл, и вы можете начать работу. +* Не забывайте периодически сохраняться (Ctrl-S) и создавать финальные документы (Ctrl-D) — мало ли что... У меня один раз гаркнулось часа 4 работы (именно работы, и дедлайн поджимал), и с тех пор я умный :) Для того и поставил git и настроил автокоммит в нём с помощью cron каждые 15 минут ;) + +Если будут дополнительные вопросы по Омеге, их лучше задать в конфе \. + +Для вышеописанных целей создан [репозиторий](http://github.com/bigote/Tkabber-Wiki-Translation) на [http://github.com](http://github.com), где и будет храниться весь перевод этой вики. ### Рекомендуемый порядок действий при переводе на новый язык с нуля -1. Если вашего языка нет в [**списке наличествующих**](../index.md), обращайтесь к - самому главному админу вики [**LKnight'у**](Участник_Lknight.md) или, если - он не вылавливается, к [**Bigote**](Участник_Bigote.md). Bigote новый субдомен - сам сделать не может, но может попробовать выловить LKnight'а ;) Кроме - того, нужно будет помочь администраторам проекта отредактировать - навигационное меню новой вики, а также поставить ссылку на свою вики на - [**Самой Главной Странице**](../index.md) и подправить и её навигационное меню. -1. Субдомен создан. Зарегистрируйтесь на вновь созданной версии вики, а также на - остальных версиях (потому что иначе вы не получите доступа к коду - статей-источников, и кроме того, вам ведь придётся добавлять ссылки на ваши - статьи во все иноязычные их версии). -1. С какой статьи лучше всего начать перевод? Конечно же, с этой вот самой справки! - Так вы и сами вникнете в стиль оформления статей, и другим авторам, - говорящим на языке назначения, поможете. -1. Набирайте в браузере http://код\_вашего\_языка.tkabber.jabe.ru, и вашему взору - откроется заглавная страница новой версии вики (пустая, естественно). В - левой части страницы, под логотипом, расположено навигационное меню. Жмите - там на ссылку, ведущую на локальную страницу помощи. В отдельном окне или - табе браузера откройте оригинальную статью Помощи, с которой вы делаете - перевод, откройте обе на редактирование и скопируйте исходный код - статьи-источника в пустое окно редактирования вашей статьи. Сохраните вашу - статью и нажмите "Отменить" в статье-источнике. Затем снова откройте на - редактирование вашу статью, и можете переводить. -1. Не забудьте, что теперь надо обеспечить перекрёстность ссылок на другие - языковые версии этой статьи. Для этого в каком-нибудь месте кода вашей - статьи (лучше всего в самом начале) включите строчку такого вида: - **[[en:Main Page]]**, где префикс "en" означает язык другой версии, а "Main - Page" — это её название на этом языке. Двоеточие, идущее между префиксом и - названием статьи, пробелами не отделяется, а пишется слитно и с префиксом, - и с первым словом названия. Сохраняйте статью, и теперь вы увидите в нижней - части навигационного меню новый раздел: ссылки на иноязычные версии данной - статьи. Необходимо добавить столько ссылок, сколько имеется других версий - статьи. Естественно, необходимо также отредактировать также все эти версии, - внеся в них ссылку на новый перевод. -1. Какие ещё статьи имеют приоритет? Следующей по важности является, конечно, - **Заглавная страница** — та, что появляется, когда вы просто набираете в - адресной строке "голый" адрес вики. За ней идёт статья **Ткаббер ЧаВо** — - коллекция ответов на самые распространённые вопросы, которые могут помочь - многим читателям новой версии вики. Затем мы рекомендуем перевести статьи, - на которые есть ссылки из ЧаВо, и если есть дальнейшие отсылки — то и их - тоже. Ну а дальше выбор за вами :) Не забудьте, что на вики есть - специальная служебная статья [**Служебная/Все страницы**](Служебная/Все_страницы.md), - где вы можете окинуть взором предстоящий фронт работ и быть в курсе, что - ещё ждёт своей очереди на перевод. -1. Пара советов по переводу таких понятий как [[Участник:bigote]], [[Служебная:Recentchanges]] и так далее. - * Вы уже отредактировали и сохранили страницу помощи, теперь идите на - [*страницу последних правок*](Служебная_RecentChanges.md) (на вашем языке - она будет называться чуть по-другому), и там вы увидите ссылку на только - что созданную статью, а рядом будет красоваться ваш ник. Щёлкните по нему - мышью, и в открывшейся на редактирование вашей персональной странице - (которую, кстати, не помешает заполнить, сообщив хотя бы ваш JID для связи - с вами) посмотрите на её название. Должно фигурировать что-то вроде - "Редагування Користувач:Bigote" (это на украинском, но можно привести - пример и на другом языке). То есть, если вам потребуется вставить ссылку на - персональную страницу участника, зарегистрированного на вашей версии вики, - используйте шаблон [[Користувач:bigote]]. Если же у этого участника нету - персональной страницы на вашем языке, но есть, к примеру, русская или - английская страничка, то можете дать интервики-ссылку на неё таким образом: - [[:ru:Участник:bigote|Bigote]] — она будет выглядеть как локальная ссылка, - но вести будет на персональную статью другой версии. Код языка, - естественно, будет зависеть от того, на какую версию вики вы ссылаетесь. - * Таким же образом узнаются названия остальных специальных статей. (Можно - просто навести на интересующую вас ссылку мышью, и тогда в статус-баре - браузера вы увидите полную ссылку, из которой надо вычленить название - статьи для вставки в ссылку в исходном коде статьи.) +1. Если вашего языка нет в [списке наличествующих](http://tkabber.jabe.ru), обращайтесь к самому главному админу вики [LKnight'у](Участник_Lknight.md) или, если он не вылавливается, к [Bigote](Участник_Bigote.md). Bigote новый субдомен сам сделать не может, но может попробовать выловить LKnight'а ;) Кроме того, нужно будет помочь администраторам проекта отредактировать навигационное меню новой вики, а также поставить ссылку на свою вики на Самой Главной Странице [http://tkabber.jabe.ru](http://tkabber.jabe.ru) и подправить и её навигационное меню. +1. Субдомен создан. Зарегистрируйтесь на вновь созданной версии вики, а также на остальных версиях (потому что иначе вы не получите доступа к коду статей-источников, и кроме того, вам ведь придётся добавлять ссылки на ваши статьи во все иноязычные их версии). +1. С какой статьи лучше всего начать перевод? Конечно же, с этой вот самой справки! Так вы и сами вникнете в стиль оформления статей, и другим авторам, говорящим на языке назначения, поможете. +1. Набирайте в браузере http://код\_вашего\_языка.tkabber.jabe.ru, и вашему взору откроется заглавная страница новой версии вики (пустая, естественно). В левой части страницы, под логотипом, расположено навигационное меню. Жмите там на ссылку, ведущую на локальную страницу помощи. В отдельном окне или табе браузера откройте оригинальную статью Помощи, с которой вы делаете перевод, откройте обе на редактирование и скопируйте исходный код статьи-источника в пустое окно редактирования вашей статьи. Сохраните вашу статью и нажмите "Отменить" в статье-источнике. Затем снова откройте на редактирование вашу статью, и можете переводить. +1. Не забудьте, что теперь надо обеспечить перекрёстность ссылок на другие языковые версии этой статьи. Для этого в каком-нибудь месте кода вашей статьи (лучше всего в самом начале) включите строчку такого вида: **[[en:Main Page]]**, где префикс "en" означает язык другой версии, а "Main Page" — это её название на этом языке. Двоеточие, идущее между префиксом и названием статьи, пробелами не отделяется, а пишется слитно и с префиксом, и с первым словом названия. Сохраняйте статью, и теперь вы увидите в нижней части навигационного меню новый раздел: ссылки на иноязычные версии данной статьи. Необходимо добавить столько ссылок, сколько имеется других версий статьи. Естественно, необходимо также отредактировать также все эти версии, внеся в них ссылку на новый перевод. +1. Какие ещё статьи имеют приоритет? Следующей по важности является, конечно, **Заглавная страница** — та, что появляется, когда вы просто набираете в адресной строке "голый" адрес вики. За ней идёт статья **Ткаббер ЧаВо** — коллекция ответов на самые распространённые вопросы, которые могут помочь многим читателям новой версии вики. Затем мы рекомендуем перевести статьи, на которые есть ссылки из ЧаВо, и если есть дальнейшие отсылки — то и их тоже. Ну а дальше выбор за вами :) Не забудьте, что на вики есть специальная служебная статья [Служебная:Allpages](Служебная_AllPages.md), где вы можете окинуть взором предстоящий фронт работ и быть в курсе, что ещё ждёт своей очереди на перевод. +1. Пара советов по переводу таких понятий как [[Участник:bigote]], [[Служебная:Recentchanges]] и так далее. + * Вы уже отредактировали и сохранили страницу помощи, теперь идите на [страницу последних правок](Служебная_RecentChanges.md) (на вашем языке она будет называться чуть по-другому), и там вы увидите ссылку на только что созданную статью, а рядом будет красоваться ваш ник. Щёлкните по нему мышью, и в открывшейся на редактирование вашей персональной странице (которую, кстати, не помешает заполнить, сообщив хотя бы ваш JID для связи с вами) посмотрите на её название. Должно фигурировать что-то вроде "Редагування Користувач:Bigote" (это на украинском, но можно привести пример и на другом языке). То есть, если вам потребуется вставить ссылку на персональную страницу участника, зарегистрированного на вашей версии вики, используйте шаблон [[Користувач:bigote]]. Если же у этого участника нету персональной страницы на вашем языке, но есть, к примеру, русская или английская страничка, то можете дать интервики-ссылку на неё таким образом: [[:ru:Участник:bigote|Bigote]] — она будет выглядеть как локальная ссылка, но вести будет на персональную статью другой версии. Код языка, естественно, будет зависеть от того, на какую версию вики вы ссылаетесь. + * Таким же образом узнаются названия остальных специальных статей. (Можно просто навести на интересующую вас ссылку мышью, и тогда в статус-баре браузера вы увидите полную ссылку, из которой надо вычленить название статьи для вставки в ссылку в исходном коде статьи.) ### Перевод на родной язык -Когда вы переводите на родной язык, часто возникает проблема в использовании -специфических терминов, относящихся к миру IT. С одной стороны, в русском языке -уже давным-давно прижились транслитерации некоторых терминов, такие как "файл", -"биндинг", а также адаптированные иностранные слова: "винт", "аська". С другой -стороны, для некоторых вещей имеет смысл дать адекватный русский перевод, -например, "список контактов" вместо "ростер" (хотя в этом конкретном случае -можно поспорить). Какой вариант выбрать — решать вам, но в любом случае -пострайтесь не ударяться в крайности. Глупо переводить "binding" как "привязка" -— подавляющее большинство читателей вас попросту не поймёт. Но так же глупо -транслитерировать какой-то термин только потому, что он иностранный. Часто -вполне можно писать в статье по-русски, в самом начале дав исходный термин и -расшифровав его. На нашей вики есть специальный раздел — -[**Терминология**](Терминология.md), где вы можете проконсультироваться -относительно непонятных слов, а также дополнить его, если считаете нужным. - -Ещё одна проблема перевода на русский язык (в общем случае, между языками -разных языковых групп) — кальки. Постарайтесь избегать дословных переводов. -Если какая-то фраза вам не очень понятна, дословный перевод её не спасёт, а -наоборот — искалечит. В большинстве случаев при затруднениях подобного рода -вполне можно добиться хорошего перевода, упростив смысл фразы или разбив -длинное предложение на два простых. В крайнем случае, оставьте рядом в скобках -исходную фразу — вики тем и хороша, что всё можно поправить и подредактировать -не один раз. Что-то не можете сделать вы — сделают другие. Кстати говоря, если -при чтении статьи, переведённой кем-нибудь другим, вы видите очевидную кальку, -которая режет слух, не поленитесь посмотреть это место в статье-исходнике и -поправьте перевод. Если вы не знаете языка-исходника, но какое-то место в -переводе вам всё же не нравится, не стесняйтесь воспользоваться Обсуждением -(ссылку можно найти в верхнем служебном меню, расположенном над каждой -статьёй). +Когда вы переводите на родной язык, часто возникает проблема в использовании специфических терминов, относящихся к миру IT. С одной стороны, в русском языке уже давным-давно прижились транслитерации некоторых терминов, такие как "файл", "биндинг", а также адаптированные иностранные слова: "винт", "аська". С другой стороны, для некоторых вещей имеет смысл дать адекватный русский перевод, например, "список контактов" вместо "ростер" (хотя в этом конкретном случае можно поспорить). Какой вариант выбрать — решать вам, но в любом случае пострайтесь не ударяться в крайности. Глупо переводить "binding" как "привязка" — подавляющее большинство читателей вас попросту не поймёт. Но так же глупо транслитерировать какой-то термин только потому, что он иностранный. Часто вполне можно писать в статье по-русски, в самом начале дав исходный термин и расшифровав его. На нашей вики есть специальный раздел — **[Терминология](Терминология.md),** где вы можете проконсультироваться относительно непонятных слов, а также дополнить его, если считаете нужным. + +Ещё одна проблема перевода на русский язык (в общем случае, между языками разных языковых групп) — кальки. Постарайтесь избегать дословных переводов. Если какая-то фраза вам не очень понятна, дословный перевод её не спасёт, а наоборот — искалечит. В большинстве случаев при затруднениях подобного рода вполне можно добиться хорошего перевода, упростив смысл фразы или разбив длинное предложение на два простых. В крайнем случае, оставьте рядом в скобках исходную фразу — вики тем и хороша, что всё можно поправить и подредактировать не один раз. Что-то не можете сделать вы — сделают другие. Кстати говоря, если при чтении статьи, переведённой кем-нибудь другим, вы видите очевидную кальку, которая режет слух, не поленитесь посмотреть это место в статье-исходнике и поправьте перевод. Если вы не знаете языка-исходника, но какое-то место в переводе вам всё же не нравится, не стесняйтесь воспользоваться Обсуждением (ссылку можно найти в верхнем служебном меню, расположенном над каждой статьёй). ### Перевод на чужой язык -Все мы знаем, что для того, чтобы сделать хороший перевод, надо в первую -очередь очень хорошо владеть языком, на который переводишь. Чаще всего и -переводят на родной язык, но иногда приходится переводить на чужой. Что можно -порекомендовать для этого случая применительно к нашей вики? - -* Не переводите каламбуры и шутливые фразы, которые мы тут иногда вкрапляем, - если вы не уверены, что это прозвучит хорошо и адекватно на другом языке - (попробуйте-ка перевести, скажем, на английский связку "Глоссарик — - Словарий" ;)). Лучше просто передайте основную идею фразы (в нашем примере - не заморачивайтесь и напишите Glossary). В конце концов, народ сюда приходит - не за приколами, а в поисках информации. Вот и постарайтесь наиболее точно - перевести **информационную** составляющую статьи. Но конечно же, если вы - способны писать с юмором на другом языке (не обязательно переводить - существующие шутки, можно придумывать свои), мы будем только "за" :) -* Если есть возможность привлечь к вычитке готового перевода носителя языка, - не упускайте её, даже если ваш знакомый слабо разбирается в Jabber и вообще - далёк от компьютерной темы. В конце концов, код интернационален, но вот в - обычном тексте можно наделать ошибок, не только грамматических, что может - быть простительно, но и логических — а это хуже. -* Вообще не пренебрегайте спелл-чекерами. Это справедливо даже в случае перевода - на родной язык ;) -* При переводе статей вики также следует помнить о правилах синтаксиса языка - назначения. Например, во французском языке все знаки препинания, состоящие - из двух элементов (двоеточие, точка с запятой, восклицательный и - вопросительный знаки) отделяются от идущего перед ними слова пробелом. - Вследствие этого отпадают вопросы по включению этих знаков в выделение - жирным шрифтом. -* Как следствие из предыдущего пункта, рекомендуем **не** придерживаться - изложенных выше правил оформления, если они идут вразрез со стилистикой - другого языка. Привести конкретный пример сложно, но если, допустим, вам - кажется, что выделение курсивом смотрится на другом языке плохо (я вот - понятия не имею, можно ли выделять курсивом японские иероглифы), придумайте - другой способ акцентировать нужный фрагмент текста. +Все мы знаем, что для того, чтобы сделать хороший перевод, надо в первую очередь очень хорошо владеть языком, на который переводишь. Чаще всего и переводят на родной язык, но иногда приходится переводить на чужой. Что можно порекомендовать для этого случая применительно к нашей вики? + +* Не переводите каламбуры и шутливые фразы, которые мы тут иногда вкрапляем, если вы не уверены, что это прозвучит хорошо и адекватно на другом языке (попробуйте-ка перевести, скажем, на английский связку "Глоссарик — Словарий" ;)). Лучше просто передайте основную идею фразы (в нашем примере не заморачивайтесь и напишите Glossary). В конце концов, народ сюда приходит не за приколами, а в поисках информации. Вот и постарайтесь наиболее точно перевести **информационную** составляющую статьи. Но конечно же, если вы способны писать с юмором на другом языке (не обязательно переводить существующие шутки, можно придумывать свои), мы будем только "за" :) +* Если есть возможность привлечь к вычитке готового перевода носителя языка, не упускайте её, даже если ваш знакомый слабо разбирается в Jabber и вообще далёк от компьютерной темы. В конце концов, код интернационален, но вот в обычном тексте можно наделать ошибок, не только грамматических, что может быть простительно, но и логических — а это хуже. +* Вообще не пренебрегайте спелл-чекерами. Это справедливо даже в случае перевода на родной язык ;) +* При переводе статей вики также следует помнить о правилах синтаксиса языка назначения. Например, во французском языке все знаки препинания, состоящие из двух элементов (двоеточие, точка с запятой, восклицательный и вопросительный знаки) отделяются от идущего перед ними слова пробелом. Вследствие этого отпадают вопросы по включению этих знаков в выделение жирным шрифтом. +* Как следствие из предыдущего пункта, рекомендуем **не** придерживаться изложенных выше правил оформления, если они идут вразрез со стилистикой другого языка. Привести конкретный пример сложно, но если, допустим, вам кажется, что выделение курсивом смотрится на другом языке плохо (я вот понятия не имею, можно ли выделять курсивом японские иероглифы), придумайте другой способ акцентировать нужный фрагмент текста. ### Перевод меню -В нашей вики редактировать меню можно лишь администраторам проекта. Свяжитесь -либо с [**Bigote**](Участник_Bigote.md), либо с [**Lknight**](Участник_Lknight.md). +В нашей вики редактировать меню можно лишь администраторам проекта. Свяжитесь либо с [Участник:Bigote](Участник_Bigote.md), либо с [Участник:Lknight](Участник_Lknight.md). ### Локализация Ткаббера -В установочном каталоге Ткаббера есть директорий под названием **msgs**, внутри -которого лежат файлы сообщений на разных языках. Если вы видите, что вашего -языка среди них нет, и вам хотелось бы Ткаббер локализовать, можете заняться -переводом самостоятельно. Также может иметь смысл обновить существующий -перевод, потому что процесс разработки не стоит на месте. В Ткаббере есть -встроенное средство, облегчающее жизнь переводчику, но лучше опишем весь -процесс по порядку. (Кстати, на официальном сайте появилась более подробная -[статья о локализации Ткаббера (на английском)](http://tkabber.jabber.ru/translate/how-to-start-new). - -![(!)](../images/Hammer.png) **Сделать:** Перевести бы её на русский да здесь -выложить...) +В установочном каталоге Ткаббера есть директорий под названием **msgs**, внутри которого лежат файлы сообщений на разных языках. Если вы видите, что вашего языка среди них нет, и вам хотелось бы Ткаббер локализовать, можете заняться переводом самостоятельно. Также может иметь смысл обновить существующий перевод, потому что процесс разработки не стоит на месте. В Ткаббере есть встроенное средство, облегчающее жизнь переводчику, но лучше опишем весь процесс по порядку. (Кстати, на официальном сайте появилась более подробная [статья о локализации Ткаббера (на английском)](http://tkabber.jabber.ru/translate/how-to-start-new). ![(!)](../images/Hammer.png) **Сделать:** Перевести бы её на русский да здесь выложить...) #### Обновляем существующие сообщения -1. Сначала надо установить самую последнюю версию Ткаббера с svn-репозитория. - * Установите, если у вас нет, клиент [subversion](http://subversion.tigris.org/); - * создайте рабочий каталог, например, **~/tkabber-svn**, и перейдите в него **cd tkabber-svn**; - * затем в терминале наберите - - svn co https://svn.xmpp.ru/repos/tkabber/trunk . - - (Сие означает: "получить содержимое [транка](Терминология.md#Транк_trunk) проекта Ткаббер в текущий каталог".) - * Если у вас выскочила ошибка "svn: SSL is not supported", наберите ту же команду, - только вместо **https** напишите **http**. - * В результате описанных заклинаний у вас в рабочем каталоге появится два - подкаталога: **tkabber** и **tkabber-plugins** — собственно программа и её плагины. - -1. Начинаем работу (в примере даётся итальянский язык, вам надо ставить свой). - * +1. Сначала надо установить самую последнюю версию Ткаббера с svn-репозитория. + * Установите, если у вас нет, клиент [subversion](http://subversion.tigris.org/); + * создайте рабочий каталог, например, **~/tkabber-svn**, и перейдите в него **cd tkabber-svn**; + * затем в терминале наберите + svn co https://svn.xmpp.ru/repos/tkabber/trunk . + (Сие означает: "получить содержимое [транка](Терминология.md#транк) проекта Ткаббер в текущий каталог".) + * Если у вас выскочила ошибка "svn: SSL is not supported", наберите ту же команду, только вместо **https** напишите **http**. + * В результате описанных заклинаний у вас в рабочем каталоге появится два подкаталога: **tkabber** и **tkabber-plugins** — собственно программа и её плагины. + +1. Начинаем работу (в примере даётся итальянский язык, вам надо ставить свой). + * cd tkabber - - * + + * tclsh ./contrib/extract-translations/extract.tcl . msgs/it.msg >../it.msg - - * + + * tclsh ./contrib/extract-translations/extract.tcl . -v msgs/it.msg >../it.msg.1 - - * Файл it.msg содержит непереведённые строки, - * файл it.msg.1 — лишние (которые были переведены ранее, но потом были исключены - из оригинальной английской версии). - -1. Переводим. - * Редактор годится любой, лишь бы он корректно работал с UTF-8. - * Сначала ознакомьтесь с существующим текстом перевода **msgs/it.msg**, - чтобы знать, как устроен файл, как выглядят строки сообщений. - * Вот пример такой строки: - *  ::msgcat::mcset it "Select" "Seleziona" - *  ::msgcat::mcset — по этому началу вы распознаете сообщение; - * it — язык; - * "Select" — английская версия сообщения; - * "Seleziona" — итальянский перевод. - - * Что трогать не надо: - *  %s — Ткаббер превращает этот дуэт символов в ник собеседника или название - комнаты ("Send file to %s" "Invia il file a %s"); - * \\n — символ перевода строки, \\t — табуляции ("\\n\\tClient: %s" "\\n\\tProgramma: %s"); - * Если строка содержит знак $, удалите или закоменнтируйте её — последовательности - вида `$foo` означают раскрытие переменной _в время выполнения программы_ и - их перевод бессмыслен, так как реально переводятся те строки, которые эта - переменная будет содержать, и они скорее всего содержатся где-то в других - местах файла сообщений. - - * В начале файла добавьте в комментарии ваше имя и контактную информацию на случай - того, если кто-то найдёт в переводе ошибки и захочет вас о них известить. - * Завершив перевод, потестируйте его хотя бы на предмет того, запустится ли Ткаббер - с этим файлом. Пропишите в конфиге строчку **::msgcat::mclocale it** и - запустите Ткаббер. Если на старте выскочила ошибка, просмотрите её - внимательно, и если она относится к файлу, который вы только что перевели, - то скорее всего, вы чего-то там либо не дописали, либо написали лишнего, - например, воткнули или стёрли символ кавычек. В сообщении об ошибке обычно - говорится, в какой строке файла следует её искать. - * Если всё работает нормально, сообщите о проделанной работе авторам программы, - лучше всего teo (`xmpp:sgolovan@nes.ru`) и вышлите ему готовый файл, чтобы - проверил всё перед включением обновлённого перевода в транк. Вообще неплохо - было бы прежде чем садиться за перевод, проконсультироваться с ним: вдруг - уже кто-то этим языком занимается? + + * Файл it.msg содержит непереведённые строки, + * файл it.msg.1 — лишние (которые были переведены ранее, но потом были исключены из оригинальной английской версии). + +1. Переводим. + * Редактор годится любой, лишь бы он корректно работал с UTF-8. + * Сначала ознакомьтесь с существующим текстом перевода **msgs/it.msg**, чтобы знать, как устроен файл, как выглядят строки сообщений. + * Вот пример такой строки: + *  ::msgcat::mcset it "Select" "Seleziona" + *  ::msgcat::mcset — по этому началу вы распознаете сообщение; + * it — язык; + * "Select" — английская версия сообщения; + * "Seleziona" — итальянский перевод. + + * Что трогать не надо: + *  %s — Ткаббер превращает этот дуэт символов в ник собеседника или название комнаты ("Send file to %s" "Invia il file a %s"); + * \\n — символ перевода строки, \\t — табуляции ("\\n\\tClient: %s" "\\n\\tProgramma: %s"); + * Если строка содержит знак $, удалите или закоменнтируйте её — последовательности вида `$foo` означают раскрытие переменной _в время выполнения программы_ и их перевод бессмыслен, так как реально переводятся те строки, которые эта переменная будет содержать, и они скорее всего содержатся где-то в других местах файла сообщений. + + * В начале файла добавьте в комментарии ваше имя и контактную информацию на случай того, если кто-то найдёт в переводе ошибки и захочет вас о них известить. + * Завершив перевод, потестируйте его хотя бы на предмет того, запустится ли Ткаббер с этим файлом. Пропишите в конфиге строчку **::msgcat::mclocale it** и запустите Ткаббер. Если на старте выскочила ошибка, просмотрите её внимательно, и если она относится к файлу, который вы только что перевели, то скорее всего, вы чего-то там либо не дописали, либо написали лишнего, например, воткнули или стёрли символ кавычек. В сообщении об ошибке обычно говорится, в какой строке файла следует её искать. + * Если всё работает нормально, сообщите о проделанной работе авторам программы, лучше всего teo (`xmpp:sgolovan@nes.ru`) и вышлите ему готовый файл, чтобы проверил всё перед включением обновлённого перевода в транк. Вообще неплохо было бы прежде чем садиться за перевод, проконсультироваться с ним: вдруг уже кто-то этим языком занимается? #### Создание новой версии -Шаги, описанные выше, вам надо будет проделать и в случае перевода с нуля, разве -что придётся взять за образец оформления вашего файла какой-либо из -существующих (тот же английский, к примеру). В первой строке не забудьте -поставить дату создания файла, а чуть ниже — оставить ваше имя и контакты (в -виде комментария, естественно). +Шаги, описанные выше, вам надо будет проделать и в случае перевода с нуля, разве что придётся взять за образец оформления вашего файла какой-либо из существующих (тот же английский, к примеру). В первой строке не забудьте поставить дату создания файла, а чуть ниже — оставить ваше имя и контакты (в виде комментария, естественно). #### Что ещё переводить? -1. Кроме файла сообщений **ваш\_язык.msg** неплохо бы создать файл ресурсов - BWidget — **ваш\_язык.rc**, если его ещё нет. Говоря простыми словами, в - этом файле лежат названия кнопок и прочих элементов интерфейса Ткаббера. В - каталоге **msgs** уже имеются русская и польская версии, которые могут - служить в качестве образца для оформления. -1. Разнообразные плагины тоже имеют свои сообщения. Скачайте с svn-репозитория - свежие плагины: **svn co - http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins tkabber-plugins** и - посмотрите — в каждом плагине имеется свой каталог **msgs**. Вперёд и с - песней! ;) -1. В установочном директории Ткаббера есть каталог **trans**, где находятся - сообщения, используемые новым плагином "Remote Control" ("Удалённое - управление"). На данный момент является основной (и единственной) русская - версия, но надеемся, что в ближайшем будущем файл будет переведён на - английский и таким образом станет доступен для перевода на многие другие - языки. Формат файла похожий, за исключением начала строки - сообщения: ::trans::trset ru +1. Кроме файла сообщений **ваш\_язык.msg** неплохо бы создать файл ресурсов BWidget — **ваш\_язык.rc**, если его ещё нет. Говоря простыми словами, в этом файле лежат названия кнопок и прочих элементов интерфейса Ткаббера. В каталоге **msgs** уже имеются русская и польская версии, которые могут служить в качестве образца для оформления. +1. Разнообразные плагины тоже имеют свои сообщения. Скачайте с svn-репозитория свежие плагины: **svn co http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins tkabber-plugins** и посмотрите — в каждом плагине имеется свой каталог **msgs**. Вперёд и с песней! ;) +1. В установочном директории Ткаббера есть каталог **trans**, где находятся сообщения, используемые новым плагином "Remote Control" ("Удалённое управление"). На данный момент является основной (и единственной) русская версия, но надеемся, что в ближайшем будущем файл будет переведён на английский и таким образом станет доступен для перевода на многие другие языки. Формат файла похожий, за исключением начала строки сообщения: ::trans::trset ru + + Index: wiki/ru/Tkabber_Windows_Mini_HOWTO.md ================================================================== --- wiki/ru/Tkabber_Windows_Mini_HOWTO.md +++ wiki/ru/Tkabber_Windows_Mini_HOWTO.md @@ -1,6 +1,7 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Tkabber_Windows_Mini_HOWTO/index.html) + # Tkabber Windows Mini HOWTO Материал из Tkabber Wiki. @@ -9,154 +10,111 @@ * [1 Предисловие с объяснением](#Предисловие_с_объяснением) * [2 Авторы](#Авторы) * [3 Введение](#Введение) * [4 Что нам нужно](#Что_нам_нужно) * [5 Установка](#Установка) - * [5.1 ActiveState Tcl](#ActiveState_Tcl) - * [5.2 Winico](#Winico) - * [5.3 TLS](#TLS) - * [5.4 WinIdle](#WinIdle) - * [5.5 Ispell](#Ispell) - * [5.6 Tkabber](#Tkabber) + * [5.1 ActiveState Tcl](#ActiveState_Tcl) + * [5.2 Winico](#Winico) + * [5.3 TLS](#TLS) + * [5.4 WinIdle](#WinIdle) + * [5.5 Ispell](#Ispell) + * [5.6 Tkabber](#Tkabber) * [6 Настройка](#Настройка) - * [6.1 Конфигурационный файл config.tcl](#Конфигурационный_файл_config.tcl) - * [6.2 Плагины](#Плагины) - * [6.3 Шрифты](#Шрифты) + * [6.1 Конфигурационный файл config.tcl](#Конфигурационный_файл_config.tcl) + * [6.2 Плагины](#Плагины) + * [6.3 Шрифты](#Шрифты) * [7 Благодарности](#Благодарности) ## Предисловие с объяснением -Это — _временная_ копия статьи "Tkabber Windows Mini HOWTO" с сайта Сергея -Голованя. Этот сайт не работает, так что информация на время помещена в этом -вики. - -[**Kostix**](Участник_Kostix.md) 15:24, 19 октября 2006 (MSD) Сайт давно -доступен, но статью оставим. - -Оригинал документа доступен [здесь](http://sgolovan.nes.ru/jabber/Tkabber-Windows-Mini-Howto.html). +Это — _временная_ копия статьи "Tkabber Windows Mini HOWTO" с сайта Сергея Голованя. Этот сайт не работает, так что информация на время помещена в этом вики. + +[Kostix](Участник_Kostix.md) 15:24, 19 октября 2006 (MSD) Сайт давно доступен, но статью оставим. + +Оригинал документа доступен [здесь](http://sgolovan.nes.ru/jabber/Tkabber-Windows-Mini-Howto.html). ## Авторы -© Александр Куприн (aka ru\_classic), 31 января 2003 г. - -##### e-mail -`ru_classic at mail ru` - -##### JID -`ru_classic at jabber ru` - -© Сергей Головань (aka teo), 29 ноября 2005 г. (обновления) - -##### e-mail - `sgolovan at nes ru` - -##### JID - `sgolovan at nes ru` +© Александр Куприн (aka ru\_classic), 31 января 2003 г. + + e-mail  + + `ru_classic at mail ru` + + JID  + + `ru_classic at jabber ru` + +© Сергей Головань (aka teo), 29 ноября 2005 г. (обновления) + + e-mail  + + `sgolovan at nes ru` + + JID  + + `sgolovan at nes ru` ## Введение -_90% всего — это вода. Закон Старджона._ - -(в стиле разговоров, ведущихся в `talks@conference.jabber.ru`) - -_`ru_classic` смотрит на эпиграф и полностью с ним согласен. Поэтому не будем -лить воду красноречия на мельницу вашего внимания, а перейдём к делу. Хочу -сразу заметить, что этот документ не претендует на полноту изложения — его -целью было описать шаги, позволяющие настроить Tkabber в среде Windows, а не -пересказывать оригинальное руководство по настройке Tkabber._ +_90% всего — это вода. Закон Старджона._ + +(в стиле разговоров, ведущихся в `talks@conference.jabber.ru`) + +_ `ru_classic` смотрит на эпиграф и полностью с ним согласен. Поэтому не будем лить воду красноречия на мельницу вашего внимания, а перейдём к делу. Хочу сразу заметить, что этот документ не претендует на полноту изложения — его целью было описать шаги, позволяющие настроить Tkabber в среде Windows, а не пересказывать оригинальное руководство по настройке Tkabber. _ ## Что нам нужно -Для того, чтобы Tkabber заработал в Windows, вам понадобятся следующие пакеты: - -* [Tkabber](http://tkabber.jabber.ru/) — без комментариев. -* [ActiveState Tcl](http://www.activestate.com/Products/ActiveTcl) — собственно «тикль» под Windows. -* [Winico](http://sourceforge.net/projects/tktable/) — пакет позволяющий работать с системным треем. -* **TLS** — поддержка SSL. -* [TclWinIdle](http://sgolovan.nes.ru/jabber/tclWinidle/) — поддержка auto-away. -* [Ispell](ftp://ftp.kiarchive.ru/pub/.3/djgpp/v2gnu/isp3206b.zip) — программа проверки - орфографии и совмещенный - [русский/английский](ftp://ftp.vsu.ru/mirrors/scon155.phys.msu.su/pub/russian/ispell/ruseng/ruseng.tar.gz) - словарь к ней. - -**Примечание** (написанное по просьбе автора Tkabber): Вообще-то, для того -чтобы Tkabber заработал, достаточно только двух пакетов — Active State Tcl и -Tkabber, но остальные пакеты «рекомендованы» к использованию. Посудите сами, -неужели вам захочется, чтобы ваш трафик мог читать любой, кто в состоянии -запустить сетевой сниффер. А это не так уж и трудно. Поэтому вам просто -необходим TLS. Всегда удобно прятать в трее работающую программу, чтобы она не -захламляла рабочий стол. Вот и Winico пригодился. Ну, а WinIdle — это мелочь, -которая приятна. :) Вы надолго отошли от компьютера, а ваш собеседник уверен, -что вы слышите его и продолжает общаться с вами. А вас на самом деле нет. Вот и -пригодился пакет WinIdle — он будет отслеживать простой системы и автоматически -выставлять статус клиента (away или ext-away). Ну, и если вы с орфографией на -«вы», то вам совсем не помешает костыль в виде Ispell. +Для того, чтобы Tkabber заработал в Windows, вам понадобятся следующие пакеты: + +* [Tkabber](http://tkabber.jabber.ru/) — без комментариев. +* [ActiveState Tcl](http://www.activestate.com/Products/ActiveTcl) — собственно «тикль» под Windows. +* [Winico](http://sourceforge.net/projects/tktable/) — пакет позволяющий работать с системным треем. +* **TLS** — поддержка SSL. +* [TclWinIdle](http://sgolovan.nes.ru/jabber/tclWinidle/) — поддержка auto-away. +* [Ispell](ftp://ftp.kiarchive.ru/pub/.3/djgpp/v2gnu/isp3206b.zip) — программа проверки орфографии и совмещенный [русский/английский](ftp://ftp.vsu.ru/mirrors/scon155.phys.msu.su/pub/russian/ispell/ruseng/ruseng.tar.gz) словарь к ней. + +**Примечание** (написанное по просьбе автора Tkabber): Вообще-то, для того чтобы Tkabber заработал, достаточно только двух пакетов — Active State Tcl и Tkabber, но остальные пакеты «рекомендованы» к использованию. Посудите сами, неужели вам захочется, чтобы ваш трафик мог читать любой, кто в состоянии запустить сетевой сниффер. А это не так уж и трудно. Поэтому вам просто необходим TLS. Всегда удобно прятать в трее работающую программу, чтобы она не захламляла рабочий стол. Вот и Winico пригодился. Ну, а WinIdle — это мелочь, которая приятна. :) Вы надолго отошли от компьютера, а ваш собеседник уверен, что вы слышите его и продолжает общаться с вами. А вас на самом деле нет. Вот и пригодился пакет WinIdle — он будет отслеживать простой системы и автоматически выставлять статус клиента (away или ext-away). Ну, и если вы с орфографией на «вы», то вам совсем не помешает костыль в виде Ispell. ## Установка ### ActiveState Tcl -На момент написания обновлений к статье рекомендуется устанавливать последнюю -стабильную версию ActiveTcl (из ветки 8.4). - -Установка не вызывает особых проблем. Оставляйте настройки по-умолчанию. За -исключением одной — укажите, что Tcl устанавливается для всех пользователей -компьютера. Обратите внимание, что имена каталогов содержат в качестве -разделителей обратный слеш «/». Так, как это принято в среде \*nix. Пусть вас -это не смущает. И последнее — после установки не забудьте добавить в переменную -среды `PATH` путь к **C:\\Tcl\\bin** или к тому каталогу, в который вы установили -«тикль» (здесь и далее я буду ссылаться на каталог **C:\\Tcl**). - -Если при пробном пуске Tkabber вы видите ошибку, аналогичную “`Error in startup -script: can't find package sha1`”, значит, ваш свежий ActiveState ActiveTcl -(например, 8.5.x) не содержит предустановленных пакетов, необходимых для -запуска Tkabber. Взамен он содержит инсталлятор пакетов, с помощью которого -можно восполнить недостачу: **teacup.exe**. - -Запустите +На момент написания обновлений к статье рекомендуется устанавливать последнюю стабильную версию ActiveTcl (из ветки 8.4). + +Установка не вызывает особых проблем. Оставляйте настройки по-умолчанию. За исключением одной — укажите, что Tcl устанавливается для всех пользователей компьютера. Обратите внимание, что имена каталогов содержат в качестве разделителей обратный слеш «/». Так, как это принято в среде \*nix. Пусть вас это не смущает. И последнее — после установки не забудьте добавить в переменную среды `PATH` путь к C:\\Tcl\\bin или к тому каталогу, в который вы установили «тикль» (здесь и далее я буду ссылаться на каталог C:\\Tcl). + +Если при пробном пуске Tkabber вы видите ошибку, аналогичную “`Error in startup script: can't find package sha1`”, значит, ваш свежий ActiveState ActiveTcl (например, 8.5.x) не содержит предустановленных пакетов, необходимых для запуска Tkabber. Взамен он содержит инсталлятор пакетов, с помощью которого можно восполнить недостачу: teacup.exe. + +Запустите C:\Tcl\bin\teacup.exe install tcllib -затем +затем C:\Tcl\bin\teacup.exe install udp -После того, как Teacup скачает с -[http://teapot.activestate.com](http://teapot.activestate.com) и установит -изрядное количество пакетов, проблема будет устранена. +После того, как Teacup скачает с [http://teapot.activestate.com](http://teapot.activestate.com) и установит изрядное количество пакетов, проблема будет устранена. ### Winico -Если вы устанавливаете Tkabber версии 0.9.8 или более раннюю, то устанавливайте -Winico версии 0.5. Для версии Tkabber'а из CVS лучше установить Winico 0.6. +Если вы устанавливаете Tkabber версии 0.9.8 или более раннюю, то устанавливайте Winico версии 0.5. Для версии Tkabber'а из CVS лучше установить Winico 0.6. -Для установки Winico просто распакуйте загруженный архив в каталог -**c:\\tcl\\lib**. Запустите демонстрационный скрипт demo.tcl, чтобы убедиться в -работоспособности пакета Winico (скрипт включен только в Winico 0.6). +Для установки Winico просто распакуйте загруженный архив в каталог **c:\\tcl\\lib**. Запустите демонстрационный скрипт demo.tcl, чтобы убедиться в работоспособности пакета Winico (скрипт включен только в Winico 0.6). ### TLS -Пакет TLS используется для создания шифрованного соединения с сервером. - -Этого пакета не было в составе дистрибутивов Tcl/Tk от -[ActiveState](http://www.activestate.com/) вплоть до версии 8.4.15. - -Поэтому, если у вас Tcl/Tk \<= 8.4.14, скачайте **tls** -[отсюда](http://sourceforge.net/projects/tls/) и распакуйте содержимое этого -архива в каталог с модулями Tcl (обычно это **C:\\Tcl\\lib**); больше ничего делать -не нужно. - -Вошедший же в состав 8.4.15 пакет **tls** содержит ошибку в загрузчике этого -пакета, в результате чего на большинстве систем этот пакет загрузить -невозможно. Существует два решения этой проблемы: - -* Либо скопируйте файлы **libeay32.dll** и **ssleay32.dll** из каталога с пакетом - **tls** (в стандартно установленном дистрибутиве 8.4.15 это - **C:\\Tcl\\lib\\tls1.5.1**) в **C:\\WINDOWS\\system32** (или любой другой каталог, - содержащийся в списке каталогов переменной окружения **PATH**); -* Либо замените содержимое файла **pkgIndex.tcl** в каталоге пакета - **tls** (см. выше) на такое: +Пакет TLS используется для создания шифрованного соединения с сервером. + +Этого пакета не было в составе дистрибутивов Tcl/Tk от [ActiveState](http://www.activestate.com/) вплоть до версии 8.4.15. + +Поэтому, если у вас Tcl/Tk \<= 8.4.14, скачайте **tls** [отсюда](http://sourceforge.net/projects/tls/) и распакуйте содержимое этого архива в каталог с модулями Tcl (обычно это C:\\Tcl\\lib); больше ничего делать не нужно. + +Вошедший же в состав 8.4.15 пакет **tls** содержит ошибку в загрузчике этого пакета, в результате чего на большинстве систем этот пакет загрузить невозможно. Существует два решения этой проблемы: + +* Либо скопируйте файлы libeay32.dll и ssleay32.dll из каталога с пакетом **tls** (в стандартно установленном дистрибутиве 8.4.15 это C:\\Tcl\\lib\\tls1.5.1) в C:\\WINDOWS\\system32 (или любой другой каталог, содержащийся в списке каталогов переменной окружения **PATH**); +* Либо замените содержимое файла pkgIndex.tcl в каталоге пакета **tls** (см. выше) на такое: package ifneeded tls 1.5.1 "namespace eval tls { variable cd \[pwd\] }; cd [list $dir]; @@ -165,134 +123,90 @@ namespace eval tls { cd \[set cd\] unset cd }" -(желательно предварительно скопировать оригинальный файл на случай ошибки -редактирования). +(желательно предварительно скопировать оригинальный файл на случай ошибки редактирования). -После этого модуль **tls** будет успешно загружаться. +После этого модуль **tls** будет успешно загружаться. ### WinIdle -Для того чтобы включить в Tkabber возможность функции auto-away, вам необходимо -установить пакет **TclWinIdle**. Распакуйте его в подкаталог **c:\\tcl\\lib**. -В архиве есть тестовый скрипт **test.tcl**. Запустите его, чтобы проверить -работает пакет WinIdle или нет. +Для того чтобы включить в Tkabber возможность функции auto-away, вам необходимо установить пакет **TclWinIdle**. Распакуйте его в подкаталог **c:\\tcl\\lib**. В архиве есть тестовый скрипт **test.tcl**. Запустите его, чтобы проверить работает пакет WinIdle или нет. ### Ispell -Программа проверки орфографии (на сленге — спеллер). Вещь удобная и незаменимая -в тех случаях, если вы не в ладах с правописанием. - -Итак. Я расположил Ispell на диске **C:**. Поэтому все пути, которые тут будут -указаны, даны в привязке к моей машине. Куда вы установите Ispell — дело ваше. - -Создайте подкаталог c:\\ispell. Скопируйте в него содержимое архива -**isp3206b.zip** (для поиска файла можете воспользоваться ссылкой, которая дана -выше или, что будет правильней, поискать файл с таким именем через поисковую -машину FileSearch). Кроме этого настройте следующие переменные окружения: +Программа проверки орфографии (на сленге — спеллер). Вещь удобная и незаменимая в тех случаях, если вы не в ладах с правописанием. + +Итак. Я расположил Ispell на диске **C:**. Поэтому все пути, которые тут будут указаны, даны в привязке к моей машине. Куда вы установите Ispell — дело ваше. + +Создайте подкаталог c:\\ispell. Скопируйте в него содержимое архива **isp3206b.zip** (для поиска файла можете воспользоваться ссылкой, которая дана выше или, что будет правильней, поискать файл с таким именем через поисковую машину FileSearch). Кроме этого настройте следующие переменные окружения: ISPELL_DICTDIR=c:\ispell\lib ISPELL_HOME=c:\ispell -А к переменной **PATH** добавьте путь **c:\\ispell\\bin**. Перегрузите -компьютер, чтобы изменения вступили в силу. +А к переменной **PATH** добавьте путь **c:\\ispell\\bin**. Перегрузите компьютер, чтобы изменения вступили в силу. -Теперь распакуйте файл **ruseng.tar.gz** во временный каталог и выполните команды +Теперь распакуйте файл **ruseng.tar.gz** во временный каталог и выполните команды buildhash ruseng.dict ruseng.aff c:\ispell\lib\ruseng.hash del c:\ispell\lib\ruseng.cnt del c:\ispell\lib\ruseng.stat copy ruseng.aff c:\ispell\lib\ruseng.aff -В результате этого в подкаталоге **c:\\ispell\\lib** появится два файла — -**ruseng.hash** и **ruseng.aff**. - -Всё. Ispell готов к «употреблению». Что вам ещё осталось сделать, так это -(после того как установите Tkabber) скопировать скрипт **ispell.tcl** из -каталога **tkabber/plugins/unix** в **~/.tkabber/plugins/ispell** (подробнее -про каталог **~/.tkabber** см. ниже) и настроить плагин, указав словарь ruseng -и кодировку словаря koi8-r. +В результате этого в подкаталоге **c:\\ispell\\lib** появится два файла — **ruseng.hash** и **ruseng.aff**. + +Всё. Ispell готов к «употреблению». Что вам ещё осталось сделать, так это (после того как установите Tkabber) скопировать скрипт **ispell.tcl** из каталога **tkabber/plugins/unix** в **~/.tkabber/plugins/ispell** (подробнее про каталог **~/.tkabber** см. ниже) и настроить плагин, указав словарь ruseng и кодировку словаря koi8-r. ### Tkabber -А вот и «виновник» происходящего. :) Скачать последнюю версию Tkabber вы можете -отсюда. Распакуйте архив там, где вам удобно (я расположил Tkabber в -**D:\\Tkabber**) и создайте на рабочем столе ярлык для файла **tkabber.tcl**. -**tkabber.tcl** — это основной скрипт пакета. Он занимает настройкой -переменных, загрузкой дополнительных модулей и «прочая, прочая». :) +А вот и «виновник» происходящего. :) Скачать последнюю версию Tkabber вы можете отсюда. Распакуйте архив там, где вам удобно (я расположил Tkabber в **D:\\Tkabber**) и создайте на рабочем столе ярлык для файла **tkabber.tcl**. **tkabber.tcl** — это основной скрипт пакета. Он занимает настройкой переменных, загрузкой дополнительных модулей и «прочая, прочая». :) -Теперь перейдём к настройке. +Теперь перейдём к настройке. ## Настройка ### Конфигурационный файл config.tcl -Конфигурационный файл Tkabber (config.tcl) располагается в подкаталоге **~/.tkabber**. - -Если вы не работали в среде \*nix, то такое имя каталога для вас немного -необычно. Для тех, кто не в курсе — символ тильды в имени файла (каталога) «~» -обозначает домашний каталог пользователя. - -Точка «.» в начале имени файла или каталога указывает, что каталог «скрытый» -(используется в \*nix). - -В случае с ОС Windows ситуация следующая — если вы работаете с Windows'95/98/2K -(и возможно ME — не могу однозначно сказать — не проверял), то каталог -**.tkabber** должен располагаться в корневом каталоге того логического диска, -на котором установлена Windows. В моём случае это диск **D:** -(**D:\\.tkabber\\**). - -Если вы работатете в среде Windows NT, то подкаталог **.tkabber** будет -располагаться в **$WINDIR\\Profiles\\имя\_пользователя** (где **$WINDIR** — -переменная среды окружения, содержащая путь к установленной системе). - -Для WIndows XP — это **$SYSTEMDRIVE\\Documents and -Settings\\имя\_пользователя** (**$SYSTEMDRIVE** — диск, на котором установлена -Windows). - -Надеюсь, не слишком запутано? +Конфигурационный файл Tkabber (config.tcl) располагается в подкаталоге **~/.tkabber**. + +Если вы не работали в среде \*nix, то такое имя каталога для вас немного необычно. Для тех, кто не в курсе — символ тильды в имени файла (каталога) «~» обозначает домашний каталог пользователя. + +Точка «.» в начале имени файла или каталога указывает, что каталог «скрытый» (используется в \*nix). + +В случае с ОС Windows ситуация следующая — если вы работаете с Windows'95/98/2K (и возможно ME — не могу однозначно сказать — не проверял), то каталог **.tkabber** должен располагаться в корневом каталоге того логического диска, на котором установлена Windows. В моём случае это диск **D:** (**D:\\.tkabber\\**). + +Если вы работатете в среде Windows NT, то подкаталог **.tkabber** будет располагаться в **$WINDIR\\Profiles\\имя\_пользователя** (где **$WINDIR** — переменная среды окружения, содержащая путь к установленной системе). + +Для WIndows XP — это **$SYSTEMDRIVE\\Documents and Settings\\имя\_пользователя** (**$SYSTEMDRIVE** — диск, на котором установлена Windows). + +Надеюсь, не слишком запутано? ### Плагины -Интересные возможности предоставляют плагины для Tkabber. Где их взять? -Последние версии доступны на CVS. Версии, выпущенные с релизами Tkabber'а, -находятся на JabberStudio в разделе «Download». Из всего набора наибольший -интерес представляют несколько модулей: - -* chess — игра в шахматы по Сети с пользователем Tkabber'а (наведите курсор - мыши на пользователя и нажмите правую кнопку — выберите пункт меню «Шахматы» - — надеюсь, вы понимаете, что у вашего оппонента тоже должен стоять Tkabber и - настроен соответствующий плагин) -* checkers — игра в шашки. -* reversi — игра в реверси. -* cyrillize — удобная возможность перевода русского текста, случайно - набранного в латинице, в нормальную форму (горячая клавиша — Ctrl+'). Очень - полезный плагин! -* socials — использование в чатах стандартного набора «социальных» фраз — - типа /dance, /scream и т.д. (смотрите файл socials.ru) -* whiteboard — доска для рисования в конференциях; инструментарий рисования - небольшой, но идея интересна и перспективна. - -Для использования плагинов создайте в **~/.tkabber** подкаталог plugins и -скопируйте каталоги с плагинами туда. +Интересные возможности предоставляют плагины для Tkabber. Где их взять? Последние версии доступны на CVS. Версии, выпущенные с релизами Tkabber'а, находятся на JabberStudio в разделе «Download». Из всего набора наибольший интерес представляют несколько модулей: + +* chess — игра в шахматы по Сети с пользователем Tkabber'а (наведите курсор мыши на пользователя и нажмите правую кнопку — выберите пункт меню «Шахматы» — надеюсь, вы понимаете, что у вашего оппонента тоже должен стоять Tkabber и настроен соответствующий плагин) +* checkers — игра в шашки. +* reversi — игра в реверси. +* cyrillize — удобная возможность перевода русского текста, случайно набранного в латинице, в нормальную форму (горячая клавиша — Ctrl+'). Очень полезный плагин! +* socials — использование в чатах стандартного набора «социальных» фраз — типа /dance, /scream и т.д. (смотрите файл socials.ru) +* whiteboard — доска для рисования в конференциях; инструментарий рисования небольшой, но идея интересна и перспективна. + +Для использования плагинов создайте в **~/.tkabber** подкаталог plugins и скопируйте каталоги с плагинами туда. ### Шрифты -Ну, и чтобы Tkabber выглядел совсем как конфетка, советую поменять шрифты, -используемые в нём. Для это вам достаточно добавить две строки в -конфигурационный файл **~/.tkabber/config.tcl** (впишите их в самое начало -конфигурационного файла, не помещайте внутрь какой-либо процедуры): +Ну, и чтобы Tkabber выглядел совсем как конфетка, советую поменять шрифты, используемые в нём. Для это вам достаточно добавить две строки в конфигурационный файл **~/.tkabber/config.tcl** (впишите их в самое начало конфигурационного файла, не помещайте внутрь какой-либо процедуры): set font "-monotype-tahoma-medium-r-normal-*-11-*-*-*-*-*-iso10646-1" option add *font "-monotype-tahoma-medium-r-normal-*-11-*-*-*-*-*-iso10646-1" userDefault -Число 11 — это размер шрифта. Если вы не поклонник шрифта Tahoma, укажите любой -другой установленный в системе. +Число 11 — это размер шрифта. Если вы не поклонник шрифта Tahoma, укажите любой другой установленный в системе. -Всё. Вот теперь можно запускать Tkabber. +Всё. Вот теперь можно запускать Tkabber. ## Благодарности -Спасибо ermine, aleksey и thunder за то, что нашли время и силы выслушать и -ответить на глупые вопросы. :) +Спасибо ermine, aleksey и thunder за то, что нашли время и силы выслушать и ответить на глупые вопросы. :) + + Index: wiki/ru/Tkabber_starpack.md ================================================================== --- wiki/ru/Tkabber_starpack.md +++ wiki/ru/Tkabber_starpack.md @@ -1,161 +1,138 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Tkabber_starpack/index.html) + # Tkabber starpack Материал из Tkabber Wiki -Статья посвящена сборке дистрибутива Tkabber Starpack для операционной системы MS Windows. +Статья посвящена сборке дистрибутива Tkabber Starpack для операционной системы MS Windows. ## Содержание * [1 Как это работает](#Как_это_работает) * [2 Инструмент «Сделай-Tkabber-Starpack-сам»](#Инструмент_«Сделай-Tkabber-Starpack-сам») * [3 Убираем "лишнее" в Ткаббере](#Убираем_лишнее_в_Ткаббере) - * [3.1 Библиотеки Tcl/Tk, необходимые для нормальной работы Ткаббера](#Библиотеки_Tcl_Tk_необходимые_для_нормальной_работы_Ткаббера) - * [3.2 Опциональные библиотеки Tcl/Tk](#Опциональные_библиотеки_Tcl_Tk) - * [3.3 Компоненты Ткаббера](#Компоненты_Ткаббера) + * [3.1 Библиотеки Tcl/Tk, необходимые для нормальной работы Ткаббера](#Библиотеки_Tcl_Tk_необходимые_для_нормальной_работы_Ткаббера) + * [3.2 Опциональные библиотеки Tcl/Tk](#Опциональные_библиотеки_Tcl_Tk) + * [3.3 Компоненты Ткаббера](#Компоненты_Ткаббера) * [4 Как скачать последнюю SVN-версию Ткаббера](#Как_скачать_последнюю_SVN-версию_Ткаббера) ## Как это работает -По сути, Tkabber Starpack представляет собой -[cамораспаковывающийся архив](http://ru.wikipedia.org/wiki/Самораспаковывающийся_архив). Но в отличие -от последнего, Старпак распаковывается в оперативную память компьютера и -имитирует структуру файлов и каталогов Ткаббера на диске. - -Для уменьшения размеров файл Старпака -[сжимается](http://ru.wikipedia.org/wiki/Упаковка_исполняемых_файлов) -упаковщиком [UPX](http://ru.wikipedia.org/wiki/UPX). Именно поэтому запуск -Старпака происходит с некоторой, довольно ощутимой на многих системах, -задержкой. - -После запуска Старпака происходит следующее: - -1. распаковывается сам Старпак (восстанавливается [исполняемый файл](http://ru.wikipedia.org/wiki/Исполнимый_модуль) - Старпака из архива, полученного с помощью упаковщика [UPX](http://ru.wikipedia.org/wiki/UPX)); -1. в оперативной памяти создаётся структура каталогов и файлов Ткаббера (точнее - сказать, имитируется таким образом, чтобы интерпретатор - [Tcl/Tk](http://tcl.tk), "поверил" в то, что он имеет дело со структурой - каталогов и файлов на диске); -1. собственно Ткаббер и запускается (происходит передача управления интерпретатору - Тикля, последнему передаётся в качестве параметра файл tkabber.tcl. с - запуска оного и начинается запуск ткаббера). +По сути, Tkabber Starpack представляет собой [cамораспаковывающийся архив](http://ru.wikipedia.org/wiki/Самораспаковывающийся_архив). Но в отличие от последнего, Старпак распаковывается в оперативную память компьютера и имитирует структуру файлов и каталогов Ткаббера на диске. + +Для уменьшения размеров файл Старпака [сжимается](http://ru.wikipedia.org/wiki/Упаковка_исполняемых_файлов) упаковщиком [UPX](http://ru.wikipedia.org/wiki/UPX). Именно поэтому запуск Старпака происходит с некоторой, довольно ощутимой на многих системах, задержкой. + +После запуска Старпака происходит следующее: + +1. распаковывается сам Старпак (восстанавливается [исполняемый файл](http://ru.wikipedia.org/wiki/Исполнимый_модуль) Старпака из архива, полученного с помощью упаковщика [UPX](http://ru.wikipedia.org/wiki/UPX)); +1. в оперативной памяти создаётся структура каталогов и файлов Ткаббера (точнее сказать, имитируется таким образом, чтобы интерпретатор [Tcl/Tk](http://tcl.tk), "поверил" в то, что он имеет дело со структурой каталогов и файлов на диске); +1. собственно Ткаббер и запускается (происходит передача управления интерпретатору Тикля, последнему передаётся в качестве параметра файл tkabber.tcl. с запуска оного и начинается запуск ткаббера). ## Инструмент «Сделай-Tkabber-Starpack-сам» -Инструмент позволит в несколько кликов мыши собрать собственный Starpack. - -Для этого вам понадобится: - -1. Сам инструмент. Можно взять [*здесь*](../files/Tkabber_win32_starpack_template.rar) (2.59 Мб); -1. Ткаббер. Версия должна быть не ниже 0.9.9-SVN-20070317 (ревизия 1051 от 17 Марта 2007). - -Для особо ленивых [**ниже**](#Как_скачать_последнюю_SVN-версию_Ткаббера) описано, как скачать и использовать версию SVN. - -Собираем Starpack: - -1. Распаковываем инструмент и получаем каталог **tkabber\_win32\_starpack\_template**; -1. Копируем файлы Ткаббера в каталог **tkabber\_win32\_starpack\_template\\tkabber\_win32\_starpack.vfs\\tkabber**; -1. Запускаем `build.cmd` из каталога **tkabber\_win32\_starpack\_template**. - -Всё! Tkabber Starpack готов. - -**Ваша** свеженькая сборка находится в каталоге **tkabber\_win32\_starpack\_template\\tkabber\_starpack**. - -Вы можете использовать `tkabber_win32_starpack.exe` сам по себе или запускать -его через `mobile_tkabber.cmd`. В последнем случае вы получаете мобильную -версию Ткаббера, который использует каталог **tkabberhome**, находящийся рядом -с ним, в качестве каталога с настройками. - -Ткаббер поставляется с базовым набором плагинов. Если вас интересуют игры, -измеритель траффика, доска для рисования и т.д. — вы можете скачать эти плагины -отдельно и поместить в **tkabberhome\\plugins**. +Инструмент позволит в несколько кликов мыши собрать собственный Starpack. + +Для этого вам понадобится: + +1. Сам инструмент. Можно взять [здесь](../files/Tkabber_win32_starpack_template.rar) (2.59 Мб); +1. Ткаббер. Версия должна быть не ниже 0.9.9-SVN-20070317 (ревизия 1051 от 17 Марта 2007). + +Для особо ленивых [ниже](Tkabber_starpack.md#Как_скачать_последнюю_SVN-версию_Tkabber) описано, как скачать и использовать версию SVN. + +Собираем Starpack: + +1. Распаковываем инструмент и получаем каталог **tkabber\_win32\_starpack\_template**; +1. Копируем файлы Ткаббера в каталог **tkabber\_win32\_starpack\_template\\tkabber\_win32\_starpack.vfs\\tkabber**; +1. Запускаем `build.cmd` из каталога **tkabber\_win32\_starpack\_template**. + +Всё! Tkabber Starpack готов. + +**Ваша** свеженькая сборка находится в каталоге **tkabber\_win32\_starpack\_template\\tkabber\_starpack**. + +Вы можете использовать `tkabber_win32_starpack.exe` сам по себе или запускать его через `mobile_tkabber.cmd`. В последнем случае вы получаете мобильную версию Ткаббера, который использует каталог **tkabberhome**, находящийся рядом с ним, в качестве каталога с настройками. + +Ткаббер поставляется с базовым набором плагинов. Если вас интересуют игры, измеритель траффика, доска для рисования и т.д. — вы можете скачать эти плагины отдельно и поместить в **tkabberhome\\plugins**. ## Убираем "лишнее" в Ткаббере -Когда я был маленьким, то очень любил разбирать механические часы. В те редкие -случаи, когда я их собирал обратно, у меня оставалось много "лишних" деталей. -Часы, естественно, после этого переставали работать. В этом разделе попробуем -разобраться, какие компоненты Ткаббера и библиотеки Tcl/Tk необязательны для -работы нашего Starpack. +Когда я был маленьким, то очень любил разбирать механические часы. В те редкие случаи, когда я их собирал обратно, у меня оставалось много "лишних" деталей. Часы, естественно, после этого переставали работать. В этом разделе попробуем разобраться, какие компоненты Ткаббера и библиотеки Tcl/Tk необязательны для работы нашего Starpack. ### Библиотеки Tcl/Tk, необходимые для нормальной работы Ткаббера -* base64 -* BWidget -* dns -* itcl -* log -* md5 -* sha1 -* tcl8.4 -* textutil -* tk8.4 -* uri -* vfs - -Примечание: если Ткаббер не запустился, попробуйте установить более новые бибиотеки. +* base64 +* BWidget +* dns +* itcl +* log +* md5 +* sha1 +* tcl8.4 +* textutil +* tk8.4 +* uri +* vfs + +Примечание: если Ткаббер не запустился, попробуйте установить более новые бибиотеки. ### Опциональные библиотеки Tcl/Tk -* **TclWinIdle** — поддержка auto-away. Если вы трудоголик, от компьютера - вас относят в бессознательном состоянии, то эта функция вам точно не нужна. - Примечание: если старпак собирался на tcl/tk 8.4, то для работы autoaway - необходим tclWinidle-0.2. -* **Winico** — пакет добавляет в Ткаббер возможность работать с областью - системных уведомлений ("systray", "трей"). Позволяет - сворачивать/разворачивать программу в systray. -* **tls** — поддержка SSL. -* **sasl** — поддержка SASL авторизации. +* **TclWinIdle** — поддержка auto-away. Если вы трудоголик, от компьютера вас относят в бессознательном состоянии, то эта функция вам точно не нужна. Примечание: если старпак собирался на tcl/tk 8.4, то для работы autoaway необходим tclWinidle-0.2. + +* **Winico** — пакет добавляет в Ткаббер возможность работать с областью системных уведомлений ("systray", "трей"). Позволяет сворачивать/разворачивать программу в systray. + +* **tls** — поддержка SSL. + +* **sasl** — поддержка SASL авторизации. ### Компоненты Ткаббера -* **authors** — мы их уважаем, а потому оставим этот файл. -* **ChangeLog** — прочитали, удалили... -* **copying** — лицензия — это святое! -* **install** — файл-заглушка. Удаляем. -* **Makefile** — уже собрали :) Удаляем. -* **readme** — не думаю, что этот файл пригодится нам в запакованном виде. Удаляем. -* **DOC** — документация. Так же как и readme — бесполезна в starpack. Удаляем. -* **EMOTICONS** — смайлики. Можете свободно удалять, добавлять свои... -* **EXAMPLES** — здесь собраны примеры конфигурационных файлов, цветовых - схем, утилит... Если вам не нужна конфигурация от Teo или Badlop, то смело можете удалять. -* **MSGS** — переводы сообщений Ткаббера на разные языки. Можете оставить только нужные вам. -* **PIXMAPS** — наборы иконок ростера. Удаляйте, добавляйте на ваше усмотрение. -* **SOUNDS** — звуки без пакета [snack](http://www.speech.kth.se/snack/) всё - равно не воспроизводятся. Но можно [**дополнительно подключить**](Проблемы_со_звуком.md) - **snack.kit**. Тогда пригодятся. -* **TRANS** — аналогично MSGS. -* **tkabber-plugins** — встроенные плагины-игры для ткаббера, их можно - удалить; в случае необходимости — легко подключаются через конфиг. +* **authors** — мы их уважаем, а потому оставим этот файл. + +* **ChangeLog** — прочитали, удалили... + +* **copying** — лицензия — это святое! + +* **install** — файл-заглушка. Удаляем. + +* **Makefile** — уже собрали :) Удаляем. + +* **readme** — не думаю, что этот файл пригодится нам в запакованном виде. Удаляем. + +* **DOC** — документация. Так же как и readme — бесполезна в starpack. Удаляем. + +* **EMOTICONS** — смайлики. Можете свободно удалять, добавлять свои... + +* **EXAMPLES** — здесь собраны примеры конфигурационных файлов, цветовых схем, утилит... Если вам не нужна конфигурация от Teo или Badlop, то смело можете удалять. + +* **MSGS** — переводы сообщений Ткаббера на разные языки. Можете оставить только нужные вам. + +* **PIXMAPS** — наборы иконок ростера. Удаляйте, добавляйте на ваше усмотрение. + +* **SOUNDS** — звуки без пакета [snack](http://www.speech.kth.se/snack/) всё равно не воспроизводятся. Но можно [дополнительно подключить](Проблемы_со_звуком.md) **snack.kit**. Тогда пригодятся. + +* **TRANS** — аналогично MSGS. + +* **tkabber-plugins** — встроенные плагины-игры для ткаббера, их можно удалить; в случае необходимости — легко подключаются через конфиг. ## Как скачать последнюю SVN-версию Ткаббера -Прежде всего нам понадобится программа-клиент для доступа к репозиториям -[системы контроля версий](http://ru.wikipedia.org/wiki/Система_управления_версиями) -[Subversion](http://subversion.tigris.org/). Версия для Windows находится -[здесь](http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91&expandFolder=91&folderID=74). +Прежде всего нам понадобится программа-клиент для доступа к репозиториям [системы контроля версий](http://ru.wikipedia.org/wiki/!8AB5<0 :>=B@>;O 25@A89) [Subversion](http://subversion.tigris.org/). Версия для Windows находится [здесь](http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91&expandFolder=91&folderID=74). -После установки svn создаём в удобном для вас месте каталог **tkabber**, делаем его текущим в консоли и пишем сначала: +После установки svn создаём в удобном для вас месте каталог **tkabber**, делаем его текущим в консоли и пишем сначала: svn co http://svn.xmpp.ru/repos/tkabber/trunk/tkabber tkabber-svn -а затем +а затем svn co http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins tkabber-plugins-svn -В каталоге **tkabber-svn** находится сам Ткаббер, а в **tkabber-plugins-svn** — -дополнительные плагины к нему. - -Если вы собираете Starpack из версии svn, то не забудьте после выполнения -пункта 2 сборки удалить из каталога **tkabber** служебную информацию svn. Проще -это сделать через поиск системы MS Windows. В качестве имени файла вводим -".svn", в поле "Поиск в:" выбираем каталог с Ткаббером, в дополнительных -настройках отмечаем пункт "Поиск в скрытых файлах и папках". Все найденные -файлы удаляем. - -**Важно!** Если вы хотите собирать старпак из SVN-версии, вам следует помнить о -её _нестабильности и теоретическом наличии неприятных багов,_ поэтому -почитайте-ка для общего развития [**эту статью**](SVN_disclaimer.md). - -[**Archimed**](Участник_Archimed.md) +В каталоге **tkabber-svn** находится сам Ткаббер, а в **tkabber-plugins-svn** — дополнительные плагины к нему. + +Если вы собираете Starpack из версии svn, то не забудьте после выполнения пункта 2 сборки удалить из каталога **tkabber** служебную информацию svn. Проще это сделать через поиск системы MS Windows. В качестве имени файла вводим ".svn", в поле "Поиск в:" выбираем каталог с Ткаббером, в дополнительных настройках отмечаем пункт "Поиск в скрытых файлах и папках". Все найденные файлы удаляем. + +**Важно!** Если вы хотите собирать старпак из SVN-версии, вам следует помнить о её _нестабильности и теоретическом наличии неприятных багов,_ поэтому почитайте-ка для общего развития [эту статью](SVN_disclaimer.md). + +[Archimed](Участник_Archimed.md) + + Index: wiki/ru/Tkinactive.md ================================================================== --- wiki/ru/Tkinactive.md +++ wiki/ru/Tkinactive.md @@ -1,60 +1,33 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Tkinactive/index.html) + # Tkinactive Материал из Tkabber Wiki. -Как известно, подсистема AutoAway у Ткаббера в Windows вначале зависела от -расширения тикля [tclWinidle](http://sgolovan.nes.ru/jabber/tclWinidle/). - -Начиная с версии 0.10.0 Ткаббер умеет пользоваться _встроенным_ средством Tk — -командой [tk inactive](http://www.tcl.tk/cgi-bin/tct/tip/245.html), которая, -однако, появилась только в Tcl/Tk 8.5. - -Расширение **tclWinidle**, к сожалению, имеет некоторые поблемы: при некоторых -обстоятельствах (которые не удаётся пока чётко отследить) оно начинает "врать" -относительно периода неактивности пользователя. Выглядит это как внезапный -самостоятельный переход Ткаббера в состояние "extended away", из которого его -нельзя вывести никаким образом, кроме запрещения механизма AutoAway (установкой -обоих периодов неактивности в 0 минут) или перезагрузкой. Ещё одна проблема с -**tclWinidle** не видна пользователю и заключается в том, что это расширение -использует для работы приём, известный как -["DLL injection"](http://en.wikipedia.org/wiki/DLL_Injection). - -Эта страница посвящена "внедрению в Ткаббер" нового (для него) расширения Tk: -[tkinactive](http://wiki.tcl.tk/14765). Данное расширение интересно тем, что -представляет собой код, реализующий упомянутую команду Tk 8.5 **tk inactive**, -только в виде самостоятельного пакета, _который может работть с Tcl/Tk 8.4_ (а -возможно и 8.3). Использование **tkinactive** вместо **tclWinidle** призвано -решить указанные выше проблемы. - -Единственная новая "проблема", известная у **tkinactive**, состоит в том, что -это расширение не работает под Win9x, однако поскольку ОС этого класса не -поддерживаются даже фирмой, их создавших, это ограничение не выглядит -существенным. - -[**Kostix**](Участник_Kostix.md) портировал **tkinactive** под современное -состояние [TEA](http://www.tcl.tk/doc/tea/), чтобы пакет нормально собирался -как под Unix, так и под Win32, а [**teo**](Участник_Teo.md) -[выложил](http://sgolovan.nes.ru/jabber/tkinactive/) виндовую сборку на своём -сайте. Параллельно с этим код подсистемы AuwoAway Ткаббера был изменён так, -чтобы грузить пакет **tkinactive** _вместо_ **tclWinidle**, если он доступен. - -Таким образом, открыто тестирование комбинации этого расширения с Ткаббером под -Windows. Широкие массы убедительно призываются к тестированию. - -Что потребуется: - -1. Ткаббер из репозитория, не старее ревизии 1125; -1. [Виндовая сборка](http://sgolovan.nes.ru/jabber/tkinactive/) - расширения **tkinactive**. - -Распакуйте каталог с расширением в каталог с остальными расширениями тикля -(обычно это `C:\Tcl\lib`), обновите Ткаббер из репозитория и перезапустите его. - -Обо всех глюках докладывайте в комнате -[`xmpp:tkabber@conference.jabber.ru`](xmpp:tkabber@conference.jabber.ru), на -[багзилле Ткаббера](http://www.jabber.ru/bugzilla/) или сообщайте напрямую -[**kostix**](Участник_Kostix.md). - -Да, о стабильной работе тоже сообщайте. Только не в багзиллу :) +Как известно, подсистема AutoAway у Ткаббера в Windows вначале зависела от расширения тикля [tclWinidle](http://sgolovan.nes.ru/jabber/tclWinidle/). + +Начиная с версии 0.10.0 Ткаббер умеет пользоваться _встроенным_ средством Tk — командой [tk inactive](http://www.tcl.tk/cgi-bin/tct/tip/245.html), которая, однако, появилась только в Tcl/Tk 8.5. + +Расширение **tclWinidle**, к сожалению, имеет некоторые поблемы: при некоторых обстоятельствах (которые не удаётся пока чётко отследить) оно начинает "врать" относительно периода неактивности пользователя. Выглядит это как внезапный самостоятельный переход Ткаббера в состояние "extended away", из которого его нельзя вывести никаким образом, кроме запрещения механизма AutoAway (установкой обоих периодов неактивности в 0 минут) или перезагрузкой. Ещё одна проблема с **tclWinidle** не видна пользователю и заключается в том, что это расширение использует для работы приём, известный как ["DLL injection"](http://en.wikipedia.org/wiki/DLL_Injection). + +Эта страница посвящена "внедрению в Ткаббер" нового (для него) расширения Tk: [tkinactive](http://wiki.tcl.tk/14765). Данное расширение интересно тем, что представляет собой код, реализующий упомянутую команду Tk 8.5 **tk inactive**, только в виде самостоятельного пакета, _который может работть с Tcl/Tk 8.4_ (а возможно и 8.3). Использование **tkinactive** вместо **tclWinidle** призвано решить указанные выше проблемы. + +Единственная новая "проблема", известная у **tkinactive**, состоит в том, что это расширение не работает под Win9x, однако поскольку ОС этого класса не поддерживаются даже фирмой, их создавших, это ограничение не выглядит существенным. + +[Kostix](Участник_Kostix.md) портировал **tkinactive** под современное состояние [TEA](http://www.tcl.tk/doc/tea/), чтобы пакет нормально собирался как под Unix, так и под Win32, а [teo](Участник_Teo.md) [выложил](http://sgolovan.nes.ru/jabber/tkinactive/) виндовую сборку на своём сайте. Параллельно с этим код подсистемы AuwoAway Ткаббера был изменён так, чтобы грузить пакет **tkinactive** _вместо_ **tclWinidle**, если он доступен. + +Таким образом, открыто тестирование комбинации этого расширения с Ткаббером под Windows. Широкие массы убедительно призываются к тестированию. + +Что потребуется: + +1. Ткаббер из репозитория, не старее ревизии 1125; +1. [Виндовая сборка](http://sgolovan.nes.ru/jabber/tkinactive/) расширения **tkinactive**. + +Распакуйте каталог с расширением в каталог с остальными расширениями тикля (обычно это `C:\Tcl\lib`), обновите Ткаббер из репозитория и перезапустите его. + +Обо всех глюках докладывайте в комнате `[xmpp:tkabber@conference.jabber.ru](xmpp:tkabber@conference.jabber.ru)`, на [багзилле Ткаббера](http://www.jabber.ru/bugzilla/) или сообщайте напрямую [kostix](Участник_Kostix.md). + +Да, о стабильной работе тоже сообщайте. Только не в багзиллу :) + + Index: wiki/ru/Wish_и_русская_раскладка_в_Windows.md ================================================================== --- wiki/ru/Wish_и_русская_раскладка_в_Windows.md +++ wiki/ru/Wish_и_русская_раскладка_в_Windows.md @@ -1,197 +1,135 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Wish_и_русская_раскладка_в_Windows/index.html) + # Wish и русская раскладка в Windows Материал из Tkabber Wiki ## Содержание * [1 Проблема](#Проблема) * [2 Решение](#Решение) - * [2.1 Ткаббер](#Ткаббер) - * [2.2 Как узнать альтернативный keysym](#Как_узнать_альтернативный_keysym) - * [2.3 Как применить полученные знания](#Как_применить_полученные_знания) - * [2.4 Полезные советы](#Полезные_советы) - * [2.4.1 Привязки](#Привязки) - * [2.4.2 Обработчики](#Обработчики) - * [2.5 Дополнительная информация](#Дополнительная_информация) - * [2.6 Примечания](#Примечания) - -## Проблема -Windows-версия библиотеки Tk имеет неприятный баг: нажатия одних и тех же -клавиш на разных языках ввода клавиатуры (например, английской и русской) -генирируют разные ["символы клавиш" ("keysyms")](http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm), которые Tk -использует при сопоставлении нажатия клавиши со списком клавиатурных -акселераторов (они же "хоткеи", они же "горячие клавиши"). - -На самом деле в Windows-версии Tk имеет место "двойной" баг: - -* keysyms зависят от языка ввода (это не так в [X Window System](http://www.xfree86.org/current/X.7.html)); -* от кода keysym'а берутся почему-то только младшие 8 бит из-за чего эти - коды "отображаются" в нижние 256 байт таблицы - [Unicode](http://www.unicode.org), которые фактически представляют собой - набор символов, известный как - ["Latin-1"](http://czyborra.com/charsets/iso8859.html#ISO-8859-1)1. - -К примеру, нажатие клавиши a на английской раскладке возвращает keysym "a", а -на русской — "ocircumflex". - -В X (с [xkb](http://pascal.tsu.ru/en/xkb/)) keysym для клавиши a всегда — "a" -независимо от текущего языка ввода. - -Описанная проблема приводит к тому, что хоткеи в Ткаббере, запущенном под -Windows, без дополнительных усилий работают только на оригинальной английской -раскладке2. - -## Решение -### Ткаббер - -Этот баг _частично_ обойдён разработчиками Ткаббера путём создания -альтернативных привязок клавиш для описанных "странных" keysym'ов, парных -соответствующим "нормальным". Например, такая привязка есть для палитры -эмоциконок — Alt-e. - -К сожалению, остаются две проблемы: - -* Не все стандартные хоткеи имеют в Ткаббере привязки для обхода описанного - бага3. -* Когда вы определяете собственный хоткей, вы встречаетесь с этим же багом. - -О том, как решать эти проблемы, написано ниже. - -### Как узнать альтернативный keysym - -Придётся написать микроскопическую программу на Tcl/Tk. Набить её можно прямо в -консоли Ткаббера, хотя, конечно же, подойдёт и просто **wish** или **tkcon** (в -нём понадобится вначале выполнить команду `package require Tk`). - -Вот эта программка: + * [2.1 Ткаббер](#Ткаббер) + * [2.2 Как узнать альтернативный keysym](#Как_узнать_альтернативный_keysym) + * [2.3 Как применить полученные знания](#Как_применить_полученные_знания) + * [2.4 Полезные советы](#Полезные_советы) + * [2.4.1 Привязки](#Привязки) + * [2.4.2 Обработчики](#Обработчики) + * [2.5 Дополнительная информация](#Дополнительная_информация) + * [2.6 Примечания](#Примечания) + +# Проблема +Windows-версия библиотеки Tk имеет неприятный баг: нажатия одних и тех же клавиш на разных языках ввода клавиатуры (например, английской и русской) генирируют разные ["символы клавиш" ("keysyms")](http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm), которые Tk использует при сопоставлении нажатия клавиши со списком клавиатурных акселераторов (они же "хоткеи", они же "горячие клавиши"). + +На самом деле в Windows-версии Tk имеет место "двойной" баг: + +* keysyms зависят от языка ввода (это не так в [X Window System](http://www.xfree86.org/current/X.7.html)); +* от кода keysym'а берутся почему-то только младшие 8 бит из-за чего эти коды "отображаются" в нижние 256 байт таблицы [Unicode](http://www.unicode.org), которые фактически представляют собой набор символов, известный как ["Latin-1"](http://czyborra.com/charsets/iso8859.html#ISO-8859-1)1. + +К примеру, нажатие клавиши a на английской раскладке возвращает keysym "a", а на русской — "ocircumflex". + +В X (с [xkb](http://pascal.tsu.ru/en/xkb/)) keysym для клавиши a всегда — "a" независимо от текущего языка ввода. + +Описанная проблема приводит к тому, что хоткеи в Ткаббере, запущенном под Windows, без дополнительных усилий работают только на оригинальной английской раскладке2. + +# Решение +## Ткаббер + +Этот баг _частично_ обойдён разработчиками Ткаббера путём создания альтернативных привязок клавиш для описанных "странных" keysym'ов, парных соответствующим "нормальным". Например, такая привязка есть для палитры эмоциконок — Alt-e. + +К сожалению, остаются две проблемы: + +* Не все стандартные хоткеи имеют в Ткаббере привязки для обхода описанного бага3. +* Когда вы определяете собственный хоткей, вы встречаетесь с этим же багом. + +О том, как решать эти проблемы, написано ниже. + +## Как узнать альтернативный keysym + +Придётся написать микроскопическую программу на Tcl/Tk. Набить её можно прямо в консоли Ткаббера, хотя, конечно же, подойдёт и просто **wish** или **tkcon** (в нём понадобится вначале выполнить команду `package require Tk`). + +Вот эта программка: toplevel .keytest label .keytest.l -text {Нажимайте клавиши} pack .keytest.l -fill both -expand true bind .keytest [list puts %K] -После выполнения этой программы вы увидите новое окно верхнего уровня с текстом -"Нажимайте клавиши" внутри. Сделайте это окно активным, смените раскладку и -нажимайте там интересующие вас клавиши. При этом вы увидите, что в вашу консоль -(туда, где вы набрали программу) пишутся названия клавиш — те самые -keysyms4. - -### Как применить полученные знания - -Возьмём практический пример: предположим, вы хотите "русифицировать" хоткеи -Ctrl-L и Ctrl-J (действия: "Подключиться" и "Отключиться", соответственно). - -Для этого, во-первых, вам нужно выяснить названия соответствующих клавиш на -русской раскладке. - -Узнав, что клавише "l" на русской раскладке соответствует keysym "adiaresis", а -клавише "j" — "icircumflex", мы можем написать в конфиг Ткаббера "русификацию": +После выполнения этой программы вы увидите новое окно верхнего уровня с текстом "Нажимайте клавиши" внутри. Сделайте это окно активным, смените раскладку и нажимайте там интересующие вас клавиши. При этом вы увидите, что в вашу консоль (туда, где вы набрали программу) пишутся названия клавиш — те самые keysyms4. + +## Как применить полученные знания + +Возьмём практический пример: предположим, вы хотите "русифицировать" хоткеи Ctrl-L и Ctrl-J (действия: "Подключиться" и "Отключиться", соответственно). + +Для этого, во-первых, вам нужно выяснить названия соответствующих клавиш на русской раскладке. + +Узнав, что клавише "l" на русской раскладке соответствует keysym "adiaresis", а клавише "j" — "icircumflex", мы можем написать в конфиг Ткаббера "русификацию": hook::add finload_hook { bind . [bind . ] bind . [bind . ] } -Смысл этого куска кода состоит в следующем: - -1. Наш код "вешается" на хук "finload\_hook", который выполняется по наступлению - события "инициализация Ткаббера окончена, главное окно сконфигурировано и показано"; -1. Команда - bind . - возвращяет код Tcl, являющийся текущим обработчиком указанной комбинации клавиш; -1. Этот код связывается с нашей новой комбинацией клавиш. -1. Данная операция повторяется для каждой интересующей нас комбинации клавиш - и окна, к которому она привязана. - -### Полезные советы - -![(!)](../images/Hammer.png) **Сделать:** вообще-то напрашивается -самостоятельный раздел "Собственные хоткеи в Ткаббере" где должно быть написано -о привязке клавиш "вообще"; после чего бОльшая часть нижеприведённых советов -должна уйти в этот раздел - -#### Привязки - -* Имейте в виду, что хоткей не привязывается "вообще" к Ткабберу, — он - привязывается к _конкретному окну._ В нашем примере это ".", то есть главное - окно программы, то это не обязано выполняться для всех хоткеев. -* Некоторые хоткеи привязаны не к окнам, а к - [виртуальным событиям Tk](http://www.tcl.tk/man/tcl8.4/TkCmd/event.htm). К - примеру, так устроена работа палитры смайликов или панели поиска5. - -Всё это означает, что в некоторых (если не во всех) случаях не обойтись без -ковыряния в исходиках Ткаббера с целью выяснения как и к чему привязан -интересующий Вас хоткей. - -Иногда соответствующие виртуальные события описаны в документации (Ткаббера, -или, например, плагина к нему)6. - -#### Обработчики - -Если у вас плохо со знанием Tcl и вам трудно разбираться с исходниками -Ткаббера, то самый простой способ повесить свой хоткей на действие, за которым -некий хоткей уже закреплён, это "клонировать" существующий хоткей. Именно этим -мы и занимались в нашем примере: брали обработчик существующего хоткея и -связывали его с новым, собственным, хоткеем. Однако, иногда удобнее (и -концептуально чище) указывать обработчик при создании привязки. - -> _При "клонировании" хоткеев, привязанных к окнам (а не виртуальным событиям - Тк), имейте в виду, что такое клонирование можно производить только в - `finload_hook`, т.к. окно, к которому привязан интересующий нас хоткей должно - существовать к моменту клонирования._ Привязывать хоткеи к виртуальным - событиям Tk можно в любой момент времени (и, соответственно, помещать код - привязок в любое место конфига). - -### Дополнительная информация - -... находится на [Tclers' Wiki](http://wiki.tcl.tk): - -* [Keysyms на платформах, отличных от X11](http://wiki.tcl.tk/6182). -* [Keysyms в "акве"](http://wiki.tcl.tk/14529). - -### Примечания - -1 Можете проверить сами: - -* Открываете [список keysyms](http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm); -* Ищете там, к примеру, keysym "Cyrillic\_a"; замечаете, что он имеет шестнадцатеричный код 0x06C1; -* Мысленно накладываете на него маску 0xFF и получаете код 0xC1; -* Теперь ищете этот код в таблице — получаете "Aacute". - -Маску можно накладывать и не мысленно, например, напишите в консоли Ткаббера: +Смысл этого куска кода состоит в следующем: + +1. Наш код "вешается" на хук "finload\_hook", который выполняется по наступлению события "инициализация Ткаббера окончена, главное окно сконфигурировано и показано"; +1. Команда + bind . + возвращяет код Tcl, являющийся текущим обработчиком указанной комбинации клавиш; +1. Этот код связывается с нашей новой комбинацией клавиш. +1. Данная операция повторяется для каждой интересующей нас комбинации клавиш и окна, к которому она привязана. + +## Полезные советы + +![(!)](../images/Hammer.png) **Сделать:** вообще-то напрашивается самостоятельный раздел "Собственные хоткеи в Ткаббере" где должно быть написано о привязке клавиш "вообще"; после чего бОльшая часть нижеприведённых советов должна уйти в этот раздел + +### Привязки + +* Имейте в виду, что хоткей не привязывается "вообще" к Ткабберу, — он привязывается к _конкретному окну._ В нашем примере это ".", то есть главное окно программы, то это не обязано выполняться для всех хоткеев. +* Некоторые хоткеи привязаны не к окнам, а к [виртуальным событиям Tk](http://www.tcl.tk/man/tcl8.4/TkCmd/event.htm). К примеру, так устроена работа палитры смайликов или панели поиска5. + +Всё это означает, что в некоторых (если не во всех) случаях не обойтись без ковыряния в исходиках Ткаббера с целью выяснения как и к чему привязан интересующий Вас хоткей. + +Иногда соответствующие виртуальные события описаны в документации (Ткаббера, или, например, плагина к нему)6. + +### Обработчики + +Если у вас плохо со знанием Tcl и вам трудно разбираться с исходниками Ткаббера, то самый простой способ повесить свой хоткей на действие, за которым некий хоткей уже закреплён, это "клонировать" существующий хоткей. Именно этим мы и занимались в нашем примере: брали обработчик существующего хоткея и связывали его с новым, собственным, хоткеем. Однако, иногда удобнее (и концептуально чище) указывать обработчик при создании привязки. + + _При "клонировании" хоткеев, привязанных к окнам (а не виртуальным событиям Тк), имейте в виду, что такое клонирование можно производить только в `finload_hook`, т.к. окно, к которому привязан интересующий нас хоткей должно существовать к моменту клонирования._ Привязывать хоткеи к виртуальным событиям Tk можно в любой момент времени (и, соответственно, помещать код привязок в любое место конфига). + +## Дополнительная информация + +...находится на [Tclers' Wiki](http://wiki.tcl.tk): + +* [Keysyms на платформах, отличных от X11](http://wiki.tcl.tk/6182). +* [Keysyms в "акве"](http://wiki.tcl.tk/14529). + +## Примечания + +1 Можете проверить сами: + +* Открываете [список keysyms](http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm); +* Ищете там, к примеру, keysym "Cyrillic\_a"; замечаете, что он имеет шестнадцатеричный код 0x06C1; +* Мысленно накладываете на него маску 0xFF и получаете код 0xC1; +* Теперь ищете этот код в таблице — получаете "Aacute". + +Маску можно накладывать и не мысленно, например, напишите в консоли Ткаббера: format 0x%X [expr {0x06C1 & 0xFF}] -2 Она является "оригинальной" потому, что в Ткаббере привязки клавиш -деляются через их "английское" именование, например, ``, -поскольку это позволяет им без всяких пинков работать в X. - -3 Строго говоря, наличие специальных "хаков" для поддержки русского -языка прямо в программе "попахивает" не очень хорошо, ведь подобные проблемы -имеют место с любым языком, у которого коды клавиш ≥ 256, а таких языков много. -По этой причине обход этого бага неплохо бы вынести во внешние плагины (по -одному для каждого языка). Для этого было бы _очень_ удобно иметь виртуальные -события Тк для всех действий, для которых определены хоткеи. - -4 Учтите, что вывод будет попадать в консоль только в том случае, -если вы не -[**перенаправили стандартный поток вывода интерпретатора Tcl в файл**](Нетривиальные_настройки.md#Отладочный_лог_под_Windows); -в этом случае либо ищите их там, либо поменяйте последнюю команду на такую: +2 Она является "оригинальной" потому, что в Ткаббере привязки клавиш деляются через их "английское" именование, например, ``, поскольку это позволяет им без всяких пинков работать в X. + +3 Строго говоря, наличие специальных "хаков" для поддержки русского языка прямо в программе "попахивает" не очень хорошо, ведь подобные проблемы имеют место с любым языком, у которого коды клавиш ≥ 256, а таких языков много. По этой причине обход этого бага неплохо бы вынести во внешние плагины (по одному для каждого языка). Для этого было бы _очень_ удобно иметь виртуальные события Тк для всех действий, для которых определены хоткеи. + +4 Учтите, что вывод будет попадать в консоль только в том случае, если вы не [перенаправили стандартный поток вывода интерпретатора Tcl в файл](Нетривиальные_настройки.md#Отладочный_лог_под_Windows); в этом случае либо ищите их там, либо поменяйте последнюю команду на такую: bind .keytest [list .keytest.l config -text %K] -в этом случае названия клавиш будут рисоваться прямо в окне, в котором вы эти -клавиши нажимаете. - -5 Существует идея постепенно перевести все клавиатурные привязки, -существующие в Ткаббере, на виртуальные события Tk. Это сильно упростит -создание пользовательских привязок. - -6 Разработчикам плагинов настоятельно рекоммендуется использовать -виртуальные события Тк, если требуется поддержка управления хоткеями или -определёнными событиями мыши, а так же _**обязательно** документировать_ эти -события — пользователь не должен ковыряться в коде плагина для того, чтобы -поменять настройку хоткея. В качестве примера может выступить документация от -[**плагина "Postpone Text"**](Плагины.md#Postpone_Text_добавлен_в_транк). +в этом случае названия клавиш будут рисоваться прямо в окне, в котором вы эти клавиши нажимаете. + +5 Существует идея постепенно перевести все клавиатурные привязки, существующие в Ткаббере, на виртуальные события Tk. Это сильно упростит создание пользовательских привязок. + +6 Разработчикам плагинов настоятельно рекоммендуется использовать виртуальные события Тк, если требуется поддержка управления хоткеями или определёнными событиями мыши, а так же _**обязательно** документировать_ эти события — пользователь не должен ковыряться в коде плагина для того, чтобы поменять настройку хоткея. В качестве примера может выступить документация от [плагина "Postpone Text"](Плагины.md#Postpone_text). + + Index: wiki/ru/XRDB.md ================================================================== --- wiki/ru/XRDB.md +++ wiki/ru/XRDB.md @@ -1,17 +1,18 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/XRDB/index.html) + # XRDB Материал из Tkabber Wiki -![(!)](../images/Hammer.png) **Сделать:** Написать про Tk option database, его -отношении к XRDB; место и роль xrdb-файлов во всём этом - -[**База данных опций Tk**](База_данных_опций_Tk.md) - -[Краткая рассказка про основы XRDB (англ.)](http://www.tau.ac.il/cc/internal/X-terminals/5-6-1.html) - -Команда Tk для управления базой данных настроек: -[option](http://www.tcl.tk/man/tcl8.4/TkCmd/option.htm) - -[[1]](http://www.cit.gu.edu.au/~anthony/info/X/Resources.hints) +![(!)](../images/Hammer.png) **Сделать:** Написать про Tk option database, его отношении к XRDB; место и роль xrdb-файлов во всём этом + +[База данных опций Tk](База_данных_опций_Tk.md) + +[Краткая рассказка про основы XRDB (англ.)](http://www.tau.ac.il/cc/internal/X-terminals/5-6-1.html) + +Команда Tk для управления базой данных настроек: [option](http://www.tcl.tk/man/tcl8.4/TkCmd/option.htm) + +[[1]](http://www.cit.gu.edu.au/~anthony/info/X/Resources.hints) + + Index: wiki/ru/База_данных_опций_Tk.md ================================================================== --- wiki/ru/База_данных_опций_Tk.md +++ wiki/ru/База_данных_опций_Tk.md @@ -1,220 +1,163 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/База_данных_опций_Tk/index.html) + # База данных опций Tk Материал из Tkabber Wiki ## Содержание * [1 Введение](#Введение) * [2 Глоссарик (словарий)](#Глоссарик_словарий) - * [2.1 Виджеты](#Виджеты) - * [2.2 Классы виджетов](#Классы_виджетов) - * [2.3 Опции виджетов](#Опции_виджетов) - * [2.3.1 Откуда виджеты берут значения своих опций?](#Откуда_виджеты_берут_значения_своих_опций) - * [2.4 Классы опций виджетов](#Классы_опций_виджетов) + * [2.1 Виджеты](#Виджеты) + * [2.2 Классы виджетов](#Классы_виджетов) + * [2.3 Опции виджетов](#Опции_виджетов) + * [2.3.1 Откуда виджеты берут значения своих опций?](#Откуда_виджеты_берут_значения_своих_опций) + * [2.4 Классы опций виджетов](#Классы_опций_виджетов) * [3 Структура](#Структура) * [4 Подводные камни](#Подводные_камни) - * [4.1 Имя приложения](#Имя_приложения) + * [4.1 Имя приложения](#Имя_приложения) * [5 Примечания](#Примечания) # Введение -База данных опций Tk ("Tk option database") это набор пар строк -`ключ/значение`, присутствующих в любом интерпретаторе Tcl, загрузившем -библиотеку Tk, независимо от платформы, позволяющая весьма гибко задавать -настройки для различных виджетов, составляющих графический интерфейс -пользователя программы. - -База данных опций Tk имеет прямое отношение к [**XRDB**](XRDB.md) (и -инициализируется из неё на тех платформах, на которых та доступна), работает -очень похожим образом, однако имеет некоторые тонкие отличия. +База данных опций Tk ("Tk option database") это набор пар строк `ключ/значение`, присутствующих в любом интерпретаторе Tcl, загрузившем библиотеку Tk, независимо от платформы, позволяющая весьма гибко задавать настройки для различных виджетов, составляющих графический интерфейс пользователя программы. + +База данных опций Tk имеет прямое отношение к [XRDB](XRDB.md) (и инициализируется из неё на тех платформах, на которых та доступна), работает очень похожим образом, однако имеет некоторые тонкие отличия. # Глоссарик (словарий) -Начнём с определения необходимых терминов. +Начнём с определения необходимых терминов. ## Виджеты -Слово "ви́джет" является калькой с английского "widget", которое является хитрым -объединением слов "window" (окно) и "gadget" (штуковина, хреновина, прибор, -девайс и т.п.). Появилось в X Window и обозначает элемент графического -пользовательского интерфейса, представленный окном и обладающий определённым -набором свойств и поведением. Виндовые программисты обычно назвают виджеты -"контро́лами" ("control", "windowed control"). - -Говоря проще, виджетами являются все чётко выделяемые пользователем элементы -интерфейса: кнопки, поля ввода, скроллбары и т.п. Мнение википедии по этому -вопросу изложено [тут](http://ru.wikipedia.org/wiki/Виджет). - -Для нас важнее всего понять два свойства виджетов Tk: - -* Виджеты Tk организованы иерархически. То есть некоторые виджеты могут - содержать дочерние виджеты и сами, в свою очередь, могут являться чьими-то - дочерними виджетами. Строго говоря, все виджеты графического интерфейса - пользователя организованы в виде однонаправленного ациклического графа — - дерева. Корневым узлом этого графа является _главное окно Tk_. -* Каждый виджет в Tk имеет _имя,_ которое однозначно определяет положение - виджета в иерархии виджетов. Оно аналогично _полному_ путевому имени файла в - операционных системах. Имя виджета состоит из имён всех его родительских - виджетов, разделённых точками ("."). Именем главного окна является точка - (".")[**1**](#Примечания). - -Примеры имён виджетов: - -* `.` — главное окно приложения; -* `.roster` — окно списка контактов; -* `.mainframe.topf.tb0.bbox` — контейнер с кнопками главного (и единственного) тулбара. - -Имена виджетов обязаны подчиняться двум правилам: - -* Имена виджетов должны быть полными (так как в отличие, к примеру, от командных - оболочек операционных систем, в программах, использующих Tk, нет концепции - "текущий виджет", аналогичной концепции "текущего каталога"), — то есть они - должны начинаться с точки; -* Имя каждого виджета в цепочке, составляющей полное имя, обязано начинаться - со строчной буквы или цифры[**2**](#Примечания) — заглавные буквы - зарезервированы за _классами виджетов._ +Слово "ви́джет" является калькой с английского "widget", которое является хитрым объединением слов "window" (окно) и "gadget" (штуковина, хреновина, прибор, девайс и т.п.). Появилось в X Window и обозначает элемент графического пользовательского интерфейса, представленный окном и обладающий определённым набором свойств и поведением. Виндовые программисты обычно назвают виджеты "контро́лами" ("control", "windowed control"). + +Говоря проще, виджетами являются все чётко выделяемые пользователем элементы интерфейса: кнопки, поля ввода, скроллбары и т.п. Мнение википедии по этому вопросу изложено [тут](http://ru.wikipedia.org/wiki/Виджет). + +Для нас важнее всего понять два свойства виджетов Tk: + +* Виджеты Tk организованы иерархически. То есть некоторые виджеты могут содержать дочерние виджеты и сами, в свою очередь, могут являться чьими-то дочерними виджетами. Строго говоря, все виджеты графического интерфейса пользователя организованы в виде однонаправленного ациклического графа — дерева. Корневым узлом этого графа является _главное окно Tk_. +* Каждый виджет в Tk имеет _имя,_ которое однозначно определяет положение виджета в иерархии виджетов. Оно аналогично _полному_ путевому имени файла в операционных системах. Имя виджета состоит из имён всех его родительских виджетов, разделённых точками ("."). Именем главного окна является точка (".")[1](База_данных_опций_Tk.md#Примечания). + +Примеры имён виджетов: + +* `.` — главное окно приложения; +* `.roster` — окно списка контактов; +* `.mainframe.topf.tb0.bbox` — контейнер с кнопками главного (и единственного) тулбара. + +Имена виджетов обязаны подчиняться двум правилам: + +* Имена виджетов должны быть полными (так как в отличие, к примеру, от командных оболочек операционных систем, в программах, использующих Tk, нет концепции "текущий виджет", аналогичной концепции "текущего каталога"), — то есть они должны начинаться с точки; +* Имя каждого виджета в цепочке, составляющей полное имя, обязано начинаться со строчной буквы или цифры[2](База_данных_опций_Tk.md#Примечания) — заглавные буквы зарезервированы за _классами виджетов._ ## Классы виджетов -Каждый виджет принадлежит к определённому _классу._ Так же, как в некоторых -объектно-ориентированных языках программирования класс реализует (обозначает) -_тип_ объекта, класс виджета определяет тип этого виджета — поведение и набор -характеристик, общих для всех виджетов данного класса. - -Примеры классов: - -* `Button` — кнопка; -* `Entry` — однострочное поле ввода; -* `Menu` — меню; -* `Frame` — "фрейм" (окно, чьей единственной задачей обычно является хранение - дочерних окон и управление их взаимным расположением (их _"геометрией"_)). - -Имена классов стандартных для Tk виджетов просто и однозначно связаны с -_командами Tcl,_ предоставляемыми Tk для создания этих виджетов: команды -назваются так же, как классы, но отличаются от них строчной "капитализацией", -например: - -* `Button` → `button` -* `Labelframe` → `labelframe` - -и т.д. - -Имена классов виджетов в Tk всегда начинаются с заглавной буквы. Это нужно для -того, чтобы можно было отличать их от имён конкретных виджетов в спецификациях -запросов к базе данных опций Tk, которые будут объяснены ниже. - -Нетрудно видеть, что можно взять имя любого виджета и заменить имя каждого -(родительского) виджета в цепочке его классом. Например, для первой (слева) -кнопки на нашем тулбаре, которая имеет имя +Каждый виджет принадлежит к определённому _классу._ Так же, как в некоторых объектно-ориентированных языках программирования класс реализует (обозначает) _тип_ объекта, класс виджета определяет тип этого виджета — поведение и набор характеристик, общих для всех виджетов данного класса. + +Примеры классов: + +* `Button` — кнопка; +* `Entry` — однострочное поле ввода; +* `Menu` — меню; +* `Frame` — "фрейм" (окно, чьей единственной задачей обычно является хранение дочерних окон и управление их взаимным расположением (их _"геометрией"_)). + +Имена классов стандартных для Tk виджетов просто и однозначно связаны с _командами Tcl,_ предоставляемыми Tk для создания этих виджетов: команды назваются так же, как классы, но отличаются от них строчной "капитализацией", например: + +* `Button` → `button` +* `Labelframe` → `labelframe` + +и т.д. + +Имена классов виджетов в Tk всегда начинаются с заглавной буквы. Это нужно для того, чтобы можно было отличать их от имён конкретных виджетов в спецификациях запросов к базе данных опций Tk, которые будут объяснены ниже. + +Нетрудно видеть, что можно взять имя любого виджета и заменить имя каждого (родительского) виджета в цепочке его классом. Например, для первой (слева) кнопки на нашем тулбаре, которая имеет имя .mainframe.topf.tb0.bbox.b0 -это будет: +это будет: Tkabber.Frame.Frame.Frame.ButtonBox.Button -что соответствует такой таблице: - -Виджет |Класс ----------------------------|--------- -. |Tkabber -.mainframe |Frame -.mainframe.topf |Frame -.mainframe.topf.tb0 |Frame -.mainframe.topf.tb0.bbox |ButtonBox -.mainframe.topf.tb0.bbox.b0|Button - -Обратите внимание на класс основного окна (".") — он имеет значение "Tkabber" и -вообще говоря совпадает с _именем приложения,_ о котором подробно рассказано -[**ниже**](#Имя_приложения). - -**Примечание:** класс виджета можно узнать при помощи команды -[winfo](http://tcl.tk/man/tcl8.4/TkCmd/winfo.htm): +что соответствует такой таблице: + + ** Виджет **** Класс ** + + . Tkabber + + .mainframe Frame + + .mainframe.topf Frame + + .mainframe.topf.tb0 Frame + + .mainframe.topf.tb0.bbox ButtonBox + + .mainframe.topf.tb0.bbox.b0 Button + +Обратите внимание на класс основного окна (".") — он имеет значение "Tkabber" и вообще говоря совпадает с _именем приложения,_ о котором подробно рассказано [ниже](База_данных_опций_Tk.md#Имя_приложения). + +**Примечание:** класс виджета можно узнать при помощи команды [winfo](http://tcl.tk/man/tcl8.4/TkCmd/winfo.htm): winfo class .path.to.the.widget ## Опции виджетов -Внешний вид и поведение виджетов контролируется их _опциями._ Свои опции -виджеты получают от своих классов, например, все кнопки (виджеты класса Button) -имеют совершенно одинаковый набор опций. _Значения_ же этих опций обычно -разные, что и делает разные виджеты одного класса выглядящими и ведущими себя -по-разному (сравните, к примеру, кнопку на тулбаре с кнопкой, закрывающей окно -"О программе"). - -Опции виджетов тоже имеют имена. Эти имена как бы продолжают иерархию виджетов -ещё на один уровень, например, имя опции, определяющей шрифт текста на нашей -многострадальной кнопке тулбара таково: +Внешний вид и поведение виджетов контролируется их _опциями._ Свои опции виджеты получают от своих классов, например, все кнопки (виджеты класса Button) имеют совершенно одинаковый набор опций. _Значения_ же этих опций обычно разные, что и делает разные виджеты одного класса выглядящими и ведущими себя по-разному (сравните, к примеру, кнопку на тулбаре с кнопкой, закрывающей окно "О программе"). + +Опции виджетов тоже имеют имена. Эти имена как бы продолжают иерархию виджетов ещё на один уровень, например, имя опции, определяющей шрифт текста на нашей многострадальной кнопке тулбара таково: .mainframe.topf.tb0.bbox.b0.font ### Откуда виджеты берут значения своих опций? -Виджеты Tk получают свои параметры (то есть значения своих опций) из трёх -источников, перечисленных ниже, в указанном порядке: - -1. Значения по умолчанию, "прибитые гвоздями" в библиотеку Tk; -1. Значения из базы данных опций Tk; -1. Значения, динамически присваемые опциям в ходе выполнения программы. - -Нетрудно видеть, что параметры по умолчанию имеют самый низкий приоритет, а -значения, которые опции виджета получают в ходе выполнения программы имеют -максимальный приоритет. - -Важно понимать, что первые два источника являются "статичными" в том смысле, -что Tk пользуется ими _только при создании_ виджета. +Виджеты Tk получают свои параметры (то есть значения своих опций) из трёх источников, перечисленных ниже, в указанном порядке: + +1. Значения по умолчанию, "прибитые гвоздями" в библиотеку Tk; +1. Значения из базы данных опций Tk; +1. Значения, динамически присваемые опциям в ходе выполнения программы. + +Нетрудно видеть, что параметры по умолчанию имеют самый низкий приоритет, а значения, которые опции виджета получают в ходе выполнения программы имеют максимальный приоритет. + +Важно понимать, что первые два источника являются "статичными" в том смысле, что Tk пользуется ими _только при создании_ виджета. ## Классы опций виджетов -Да, опции виджетов тоже имеют классы. +Да, опции виджетов тоже имеют классы. -![(!)](../images/Hammer.png) **Сделать:** развить +![(!)](../images/Hammer.png) **Сделать:** развить # Структура -База данных опций Tk отображает... +База данных опций Tk отображает... -![(!)](../images/Hammer.png) **Сделать:** развить +![(!)](../images/Hammer.png) **Сделать:** развить # Подводные камни ## Имя приложения -![(!)](../images/Hammer.png) **Сделать:** написать +![(!)](../images/Hammer.png) **Сделать:** написать # Примечания -1 В именовании виджетов Tk используется тот же "трюк" (или "то же -несоответствие", если угодно), которое присутствует в файловых системах Unix: в -последних именем корневого каталога является "/", и этот же символ является -разделителем имён в пути, однако в путевых именах файлов именем корневого -каталога является пустая строка, а путевое имя начинается с разделителя: +1 В именовании виджетов Tk используется тот же "трюк" (или "то же несоответствие", если угодно), которое присутствует в файловых системах Unix: в последних именем корневого каталога является "/", и этот же символ является разделителем имён в пути, однако в путевых именах файлов именем корневого каталога является пустая строка, а путевое имя начинается с разделителя: / — корневой каталог /foo/bar.txt — путевое имя файла bar.txt в каталоге /foo ^разделитель -Нетрудно видеть, что в именах виджетов Tk то же самое происходит с символом -".": он одновременно является именем главного окна и разделителем частей имени -виджета, поэтому в именах виджетов именем главного окна является пустая строка, -а имя начинается с разделителя: +Нетрудно видеть, что в именах виджетов Tk то же самое происходит с символом ".": он одновременно является именем главного окна и разделителем частей имени виджета, поэтому в именах виджетов именем главного окна является пустая строка, а имя начинается с разделителя: . — главное окно .mywindow.mybutton — виджет mybutton в окне .mywindow ^разделитель -2 Строго говоря, в имени виджета можно использовать _любой -допустимый символ [Unicode](http://www.unicode.org),_ кроме заглавных символов -и точки. Например, вполне допустим код: +2 Строго говоря, в имени виджета можно использовать _любой допустимый символ [Unicode](http://www.unicode.org),_ кроме заглавных символов и точки. Например, вполне допустим код: label .метко pack .метко .метко config -text {Медведы идут на udaff.com} -Более того, имена виджетов могут содержать пробелы: +Более того, имена виджетов могут содержать пробелы: label ". " ;# метка с именем, состоящим из одного пробела -Понятно, что как по причинам читабельности, так и удобства -программирования/поддержки кода, так делать не стоит. Кроме того, в -руководствах по Tk этот вопрос практически не освещён, а значит, ничего особо -не гарантируется. Также совершенно непонятен вопрос взамодействия таких имён -виджетов с базой данных опций Tk и — главное — взаимодействие последней с -[**XRDB**](XRDB.md). +Понятно, что как по причинам читабельности, так и удобства программирования/поддержки кода, так делать не стоит. Кроме того, в руководствах по Tk этот вопрос практически не освещён, а значит, ничего особо не гарантируется. Также совершенно непонятен вопрос взамодействия таких имён виджетов с базой данных опций Tk и — главное — взаимодействие последней с [XRDB](XRDB.md). + + Index: wiki/ru/Блокировка_MRIM-спама.md ================================================================== --- wiki/ru/Блокировка_MRIM-спама.md +++ wiki/ru/Блокировка_MRIM-спама.md @@ -1,6 +1,7 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Блокировка_MRIM-спама/index.html) + # Блокировка MRIM-спама Материал из Tkabber Wiki @@ -11,73 +12,46 @@ * [3 Завязка — добавление нового списка приватности](#Завязка_-_добавление_нового_списка_приватности) * [4 Кульминация — редактирование созданного списка](#Кульминация_-_редактирование_созданного_списка) * [5 Эпилог — предупреждения](#Эпилог_-_предупреждения) # Пролог -Здесь по-простому (в картинках) рассказано, как настроить блокирование спама с -[MRIM](http://agent.mail.ru)-гейта средствами списков приватности на стороне -сервера, поддержка которых реализована в Ткаббере. - -Блокировка основана на простых правилах: - -1. Пропускать только сообщения от контактов "из ростера", а именно: - * тех, на чьё присутствие мы подписаны; - * контактов с взаимной подпиской на присутствие. - -1. Блокировать _все_ сообщения с MRIM-гейта, не попавшие под предыдущий критерий. - -Перед тем как продолжить чтение, нелишним будет совершить небольшой экскурс в -теорию (она очень доходчиво и в то же время кратко -[изложена](http://bombus-im.org/wiki/jabber/privacy_lists) на сайте Бомбуса; -единственное, что можно пропустить — это последнюю главу, где дан практический -пример). +Здесь по-простому (в картинках) рассказано, как настроить блокирование спама с [MRIM](http://agent.mail.ru)-гейта средствами списков приватности на стороне сервера, поддержка которых реализована в Ткаббере. + +Блокировка основана на простых правилах: + +1. Пропускать только сообщения от контактов "из ростера", а именно: + * тех, на чьё присутствие мы подписаны; + * контактов с взаимной подпиской на присутствие. + +1. Блокировать _все_ сообщения с MRIM-гейта, не попавшие под предыдущий критерий. + +Перед тем как продолжить чтение, нелишним будет совершить небольшой экскурс в теорию (она очень доходчиво и в то же время кратко [изложена](http://bombus-im.org/wiki/jabber/privacy_lists) на сайте Бомбуса; единственное, что можно пропустить — это последнюю главу, где дан практический пример). # Экспозиция — опции главного меню -Вначале следует убедиться, что интересующие нас опции главного меню, -относящиеся к обеспечению приватности, выглядят так, как показано на скриншоте: - -![Опции главного меню](../images/Mrim-opts.png) - -А именно: опция **Активировать списки при подключении** _выключена_. Это нужно -для того, чтобы Ткаббер не использовал свои встроенные списки приватности -вместо нашего, который мы добавим прямо сейчас. +Вначале следует убедиться, что интересующие нас опции главного меню, относящиеся к обеспечению приватности, выглядят так, как показано на скриншоте: + +![Опции главного меню](../images/Mrim-opts.png) + +А именно: опция **Активировать списки при подключении** _выключена_. Это нужно для того, чтобы Ткаббер не использовал свои встроенные списки приватности вместо нашего, который мы добавим прямо сейчас. # Завязка — добавление нового списка приватности -Для настройки требуется создать новый список приватности, активизировав пункт -основного меню: **Tkabber → Обеспечение приватности → Изменить правила -вручную**; в нашем примере новый список называется "mrim-allow-only-contacts": - -![Окно со списками приватности](../images/Mrim-lists.png) - -Этот список в том же диалоге должен быть сделан списком _по умолчанию_ и -_активным_ списком. +Для настройки требуется создать новый список приватности, активизировав пункт основного меню: **Tkabber → Обеспечение приватности → Изменить правила вручную**; в нашем примере новый список называется "mrim-allow-only-contacts": + +![Окно со списками приватности](../images/Mrim-lists.png) + +Этот список в том же диалоге должен быть сделан списком _по умолчанию_ и _активным_ списком. # Кульминация — редактирование созданного списка -Далее переходим к редактированию списка. Вводим правила так, как указано на -скриншоте. Единственное, на что вам нужно обратить особое внимание, это -последнее правило, в котором фигурирует JID `mrim.007spb.ru` — у вас там должен -быть JID вашего MRIM-гейта, например, `mrim.jabber.ru`. - -![Окно с активным списком приватности](../images/Mrim-allow-only-contacts.png) - -Важно, чтобы правила следовали именно в таком порядке, как указано на -скриншоте, а именно, правило для JID MRIM-гейта должно идти после правил, -проверяющих состояние подписки на присутствие. +Далее переходим к редактированию списка. Вводим правила так, как указано на скриншоте. Единственное, на что вам нужно обратить особое внимание, это последнее правило, в котором фигурирует JID `mrim.007spb.ru` — у вас там должен быть JID вашего MRIM-гейта, например, `mrim.jabber.ru`. + +![Окно с активным списком приватности](../images/Mrim-allow-only-contacts.png) + +Важно, чтобы правила следовали именно в таком порядке, как указано на скриншоте, а именно, правило для JID MRIM-гейта должно идти после правил, проверяющих состояние подписки на присутствие. # Эпилог — предупреждения -* Встроенные списки приватности Ткаббера перестают работать; в частности, это - означает, что помещение контакта в **Невидимый** или **Игнорируемый** списки - штатными средствами Ткаббера никакого реального эффекта иметь не будет. Если - вам понадобилось кого-то заигнорить, придётся лезть в список Mrim'а и - добавлять нужные правила туда. -* Спам в виде запросов на подписку _не_ блокируется этим способом; к сожалению, - в текущей версии [ejabberd](http://ejabberd.jabber.ru), под управлением - которого работают `jabber.ru` и `jabber.org` это - [**невозможно по техническим причинам**](Спамодавка_списками_приватности.md). - **Примечание:** этот вид спама успешно отсекается плагином - [**Antispam**](Плагины.md#Antispam). -* Редактирование списков приватности вручную аналогично ручной настройке - файрвола на компьютере — вы должны понимать возможные последствия. Поэтому - очень рекомендуется ознакомиться с - [теорией](http://www.xmpp.org/rfcs/rfc3921.html#privacy). - -Спам давил [**kostix**](Участник_Kostix.md). +* Встроенные списки приватности Ткаббера перестают работать; в частности, это означает, что помещение контакта в **Невидимый** или **Игнорируемый** списки штатными средствами Ткаббера никакого реального эффекта иметь не будет. Если вам понадобилось кого-то заигнорить, придётся лезть в список Mrim'а и добавлять нужные правила туда. +* Спам в виде запросов на подписку _не_ блокируется этим способом; к сожалению, в текущей версии [ejabberd](http://ejabberd.jabber.ru), под управлением которого работают `jabber.ru` и `jabber.org` это [невозможно по техническим причинам](Спамодавка_списками_приватности.md). **Примечание:** этот вид спама успешно отсекается плагином [Antispam](Плагины.md#Antispam). +* Редактирование списков приватности вручную аналогично ручной настройке файрвола на компьютере — вы должны понимать возможные последствия. Поэтому очень рекомендуется ознакомиться с [теорией](http://www.xmpp.org/rfcs/rfc3921.html#privacy). + +Спам давил [kostix](Участник_Kostix.md). + + ADDED wiki/ru/Быстрая_настройка_шрифтов.md Index: wiki/ru/Быстрая_настройка_шрифтов.md ================================================================== --- /dev/null +++ wiki/ru/Быстрая_настройка_шрифтов.md @@ -0,0 +1,27 @@ +[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Установка_и_настройка_в_Ubuntu/index.html) + + +# Быстрая настройка шрифтов + +Материал из Tkabber Wiki + +[Установка и настройка в Ubuntu](Установка_и_настройка_в_Ubuntu.md) + + echo 'deb http://people.debian.org/~sgolovan/debian/ lenny main' | sudo tee -a /etc/apt/sources.list + echo 'deb-src http://people.debian.org/~sgolovan/debian/ lenny main' | sudo tee -a /etc/apt/sources.list && sudo apt-get update + +введите пароль и продолжайте + + sudo apt-get install tkabber tkabber-plugins tk8.5 libsnack2 tktray msttcorefonts + +и это + + sudo update-alternatives --config wish + +нажмите цифорку соответствующую пункту "/usr/bin/wish8.5" а потом на Enter и используем. + +теперь ваш tkabber установлен и в убунте у него нормальные шрифты. и вам почти не пришлось ничего читать :) + +Если вам не помогло это руководство, или у вас возникли вопросы, то смело нажимайте на "Обсуждение" вверху страницы. и опишите в чём именно у вас возникли трудности. + + Index: wiki/ru/Гейты_во_вражеские_сети.md ================================================================== --- wiki/ru/Гейты_во_вражеские_сети.md +++ wiki/ru/Гейты_во_вражеские_сети.md @@ -1,410 +1,207 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Гейты_во_вражеские_сети/index.html) + # Гейты во вражеские сети Материал из Tkabber Wiki -> _Тятя, тятя, наши сети -> Притащили мертвеца._ - -> _© А. С. Пушкин ["Утопленник"](http://www.lib.ru/LITRA/PUSHKIN/p2.txt)_ +Притащили мертвеца. +["Утопленник"](http://www.lib.ru/LITRA/PUSHKIN/p2.txt) ## Содержание * [1 Введение](#Введение) * [2 Регистрация на транспорте](#Регистрация_на_транспорте) * [3 Некоторые гейты в другие сети](#Некоторые_гейты_в_другие_сети) - * [3.1 ICQ](#ICQ) - * [3.1.1 icq.jabber.ru](#icq.jabber.ru) - * [3.1.2 Переезд на другой транспорт с минимумом головной боли](#Переезд_на_другой_транспорт_с_минимумом_головной_боли) - * [3.1.3 Общедоступные транспорты в ICQ](#Общедоступные_транспорты_в_ICQ) - * [3.2 MRIM](#MRIM) - * [3.3 MSN](#MSN) - * [3.4 Yahoo](#Yahoo) - * [3.5 AIM](#AIM) - * [3.6 IRC](#IRC) - * [3.7 XMPP (свой среди чужих ;))](#XMPP_свой_среди_чужих_) + * [3.1 ICQ](#ICQ) + * [3.1.1 icq.jabber.ru](#icq.jabber.ru) + * [3.1.2 Переезд на другой транспорт с минимумом головной боли](#Переезд_на_другой_транспорт_с_минимумом_головной_боли) + * [3.1.3 Общедоступные транспорты в ICQ](#Общедоступные_транспорты_в_ICQ) + * [3.2 MRIM](#MRIM) + * [3.3 MSN](#MSN) + * [3.4 Yahoo](#Yahoo) + * [3.5 AIM](#AIM) + * [3.6 IRC](#IRC) + * [3.7 XMPP (свой среди чужих ;))](#XMPP_свой_среди_чужих_) * [4 Проблемы при работе с гейтами](#Проблемы_при_работе_с_гейтами) - * [4.1 Unavailable](#Unavailable) - * [4.2 Low Level Network Error](#Low_Level_Network_Error) - * [4.3 Unrecoverable Error (Remote Server Not Found)](#Unrecoverable_Error_Remote_Server_Not_Found) - * [4.4 Disconnected by unknown reason](#Disconnected_by_unknown_reason) - * [4.5 Temporary Error (Component 'msnlinker' is not connected to server)](#Temporary_Error_Component_msnlinker_is_not_connected_to_server) - * [4.6 "Намерзание" участников в ростере](#Намерзание_участников_в_ростере) + * [4.1 Unavailable](#Unavailable) + * [4.2 Low Level Network Error](#Low_Level_Network_Error) + * [4.3 Unrecoverable Error (Remote Server Not Found)](#Unrecoverable_Error_Remote_Server_Not_Found) + * [4.4 Disconnected by unknown reason](#Disconnected_by_unknown_reason) + * [4.5 Temporary Error (Component 'msnlinker' is not connected to server)](#Temporary_Error_Component_msnlinker_is_not_connected_to_server) + * [4.6 "Намерзание" участников в ростере](#Намерзание_участников_в_ростере) # Введение -Один из часто задаваемых на конференции вопросов: может ли Ткаббер "общаться" с -пользователями других сетей, например, ICQ, Yahoo, MSN и прочих. Строго говоря, -Ткаббер тут совершенно ни при чём, и вопрос не по адресу. Но поскольку мы люди -добрые, вопрос сей проясним :) К тому же неплохо иметь под рукой базу -работающих гейтов ;) - -За связь с другими сетями отвечает сервер, к которому вы подключены, а точнее, -специальные транспорты (или гейты, как их ещё называют), расположенные на нём. -Если быть ещё более точным, то совсем не обязательно использовать транспорт -того сервера, на котором у вас зарегистрирован аккаунт. Впрочем, всё по -порядку. +Один из часто задаваемых на конференции вопросов: может ли Ткаббер "общаться" с пользователями других сетей, например, ICQ, Yahoo, MSN и прочих. Строго говоря, Ткаббер тут совершенно ни при чём, и вопрос не по адресу. Но поскольку мы люди добрые, вопрос сей проясним :) К тому же неплохо иметь под рукой базу работающих гейтов ;) + +За связь с другими сетями отвечает сервер, к которому вы подключены, а точнее, специальные транспорты (или гейты, как их ещё называют), расположенные на нём. Если быть ещё более точным, то совсем не обязательно использовать транспорт того сервера, на котором у вас зарегистрирован аккаунт. Впрочем, всё по порядку. # Регистрация на транспорте -Начнём с того, что напомним о необходимости иметь зарегистрированный аккаунт в -той сети, с которой вы хотите "дружить". Если аккаунта нет, гейт за вас его -создать не сможет. Ставьте родной клиент и регистрируйтесь. Также имейте в -виду, что у большого количества IM-сетей работает регистрация на главном -Web-сайте. - -На практике же аккаунт уже имеется, задача лишь — "подрубиться" к сети, чтобы -общаться с друзьями, упорно не хотящими переходить на джаббер (или понятия о -нём не имеющими). Процесс регистрации на гейте может варьироваться в некоторых -пределах, но основные шаги, которые нам надо предпринять, следующие: - -1. Открыть Дискавери: вторая слева кнопка "Обзор служб" либо пункт меню - **Службы → Обзор служб**; -1. Найти в списке доступных служб нужный вам гейт (например, icq.jabber.ru) и - открыть его двойным кликом; -1. Сделать двойной клик на элементе "Register"; -1. В появившемся окошке ввести информацию о вашем аккаунте в сети, к которой вы - коннектитесь: - * Для ICQ это будет UIN и пароль, - * для AIM — его логин и пароль или UIN вашей "аськи" и её пароль, - * Для MSN — ваш Windows Live ID (в девичестве Microsoft Passport, он же .NET - Passport, в общем, ваше мыло, на которое вы зарегистрированы в любых - службах микрософта), ник, под которым вас будут видеть собеседники, и, - само собой, пароль, - * Для Yahoo — ваш ID (то, что расположено до "собачки") и пароль, - * Для IRC — читайте [**ниже**](#IRC) (регистрация там - опциональна). -1. Если всё введено правильно, и не возникло никаких ошибок, появляется окошко, - извещающее нас об успешной регистрации. Жмём Ok. -1. Появится запрос подписки от имени выбранного Вами гейта, соответственно даем - ему подписку и он повляется в ростере. Делаем правый клик на нём и выбираем - в меню "Log in". -1. В этот момент гейт подключается от Вашего имени к "вражеской сети" и - получает список ваших контактов, после чего отправляет их список вам. - * Классический вариант(старые гейты): в ростере появляется куча ваших - контактов из этой сети в виде 1234567@icq.jabber.ru, которую надо теперь - как-то упорядочить и вообще выяснить, "ху из ху". Вытягивание ников - асикушников — больное место Ткаббера, но некоторую помощь может оказать - такой трюк: делаем правый клик на контакте и выбираем "Показать инфо". - Появляется окошко vcard пользователя, и если подождать немного, то в - подавляющем большинстве случаев "вытянется" как минимум ник. Закрываем - инфо, и теперь можно редактировать контакт: правый клик → **Редактировать - элемент**. Ник юзверя автоматически появится в соответствующем поле. - Назначаем нужную группу (для разделения вложенных групп пользуйтесь двумя - двоеточиями: "Друзья::Институт") и жмём Ок. - * Современный вариант(Spectrum Transport): для того, чтобы практически - прозрачно получить свои контакты и не терять время на выяснение их ников и - групп, необходимы следующие условия: - * Tkabber из [SVN](SVN_disclaimer.md) ревизии 1975 и выше. - * Плагин autosubscribe из - [репозитория 3rd-party](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/autosubscribe/) -1. При использовании современного варианта - сразу после регистрации гейт - вышлет список контактов и их групп посредством специального - [расширения](http://xmpp.org/extensions/xep-0144.html) XMPP-протокола, а - Ткаббер отобразит форму со списком их(контактов) имен и галочек, которые - необходимо соответственно выставить и подтвердить добавление контактов. Если - включен плагин autosubscribe, то в этот же момент все эти контакты окажутся - в нашем ростере, строго под теми никами и в тех же группах, по которым они - были отсортированы Вами при использовании "официальных" клиентов "вражеских - сетей". ![(!)](../images/Hammer.png) **Сделать:** Исправить недочеты - плагина autosubscribe В случае если плагин не установлен, как и в - "классическом" варианте посыпятся запросы подписки, но после подтверждения - их ники и группы все равно будут правильными сразу. -1. Помимо "Register" в дереве транспорта есть и такие полезные опции как Uptime - (время работы) и Version (выдаёт версию программы-гейта; при проблемах с - транспортами может помочь вам разобраться в их причинах: например, - устаревшая версия гейта). - -Диско позволяет лазить и регистрироваться на любом общедоступном сервере. Вам -нужно только ввести в адресную строку имя сервера или сервиса, например: -`jabber.anywise.com`, `icq.jabbe.net.ru`. Дальнейшие телодвижения ничем не -отличаются от описанных выше. +Начнём с того, что напомним о необходимости иметь зарегистрированный аккаунт в той сети, с которой вы хотите "дружить". Если аккаунта нет, гейт за вас его создать не сможет. Ставьте родной клиент и регистрируйтесь. Также имейте в виду, что у большого количества IM-сетей работает регистрация на главном Web-сайте. + +На практике же аккаунт уже имеется, задача лишь — "подрубиться" к сети, чтобы общаться с друзьями, упорно не хотящими переходить на джаббер (или понятия о нём не имеющими). Процесс регистрации на гейте может варьироваться в некоторых пределах, но основные шаги, которые нам надо предпринять, следующие: + +1. Открыть Дискавери: вторая слева кнопка "Обзор служб" либо пункт меню **Службы → Обзор служб**; +1. Найти в списке доступных служб нужный вам гейт (например, icq.jabber.ru) и открыть его двойным кликом; +1. Сделать двойной клик на элементе "Register"; +1. В появившемся окошке ввести информацию о вашем аккаунте в сети, к которой вы коннектитесь: + * Для ICQ это будет UIN и пароль, + * для AIM — его логин и пароль или UIN вашей "аськи" и её пароль, + * Для MSN — ваш Windows Live ID (в девичестве Microsoft Passport, он же .NET Passport, в общем, ваше мыло, на которое вы зарегистрированы в любых службах микрософта), ник, под которым вас будут видеть собеседники, и, само собой, пароль, + * Для Yahoo — ваш ID (то, что расположено до "собачки") и пароль, + * Для IRC — читайте [ниже](Гейты_во_вражеские_сети.md#IRC) (регистрация там опциональна). + +1. Если всё введено правильно, и не возникло никаких ошибок, появляется окошко, извещающее нас об успешной регистрации. Жмём Ok. +1. Появится запрос подписки от имени выбранного Вами гейта, соответственно даем ему подписку и он повляется в ростере. Делаем правый клик на нём и выбираем в меню "Log in". +1. В этот момент гейт подключается от Вашего имени к "вражеской сети" и получает список ваших контактов, после чего отправляет их список вам. + * Классический вариант(старые гейты): в ростере появляется куча ваших контактов из этой сети в виде 1234567@icq.jabber.ru, которую надо теперь как-то упорядочить и вообще выяснить, "ху из ху". Вытягивание ников асикушников — больное место Ткаббера, но некоторую помощь может оказать такой трюк: делаем правый клик на контакте и выбираем "Показать инфо". Появляется окошко vcard пользователя, и если подождать немного, то в подавляющем большинстве случаев "вытянется" как минимум ник. Закрываем инфо, и теперь можно редактировать контакт: правый клик → **Редактировать элемент**. Ник юзверя автоматически появится в соответствующем поле. Назначаем нужную группу (для разделения вложенных групп пользуйтесь двумя двоеточиями: "Друзья::Институт") и жмём Ок. + * Современный вариант(Spectrum Transport): для того, чтобы практически прозрачно получить свои контакты и не терять время на выяснение их ников и групп, необходимы следующие условия: + * Tkabber из [SVN](SVN_disclaimer.md) ревизии 1975 и выше. + * Плагин autosubscribe из [репозитория 3rd-party](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/autosubscribe/) + +1. При использовании современного варианта - сразу после регистрации гейт вышлет список контактов и их групп посредством специального [расширения](http://xmpp.org/extensions/xep-0144.html|) XMPP-протокола, а Ткаббер отобразит форму со списком их(контактов) имен и галочек, которые необходимо соответственно выставить и подтвердить добавление контактов. Если включен плагин autosubscribe, то в этот же момент все эти контакты окажутся в нашем ростере, строго под теми никами и в тех же группах, по которым они были отсортированы Вами при использовании "официальных" клиентов "вражеских сетей". ![(!)](../images/Hammer.png) **Сделать:** Исправить недочеты плагина autosubscribe В случае если плагин не установлен, как и в "классическом" варианте посыпятся запросы подписки, но после подтверждения их ники и группы все равно будут правильными сразу. +1. Помимо "Register" в дереве транспорта есть и такие полезные опции как Uptime (время работы) и Version (выдаёт версию программы-гейта; при проблемах с транспортами может помочь вам разобраться в их причинах: например, устаревшая версия гейта). + +Диско позволяет лазить и регистрироваться на любом общедоступном сервере. Вам нужно только ввести в адресную строку имя сервера или сервиса, например: `jabber.anywise.com`, `icq.jabbe.net.ru`. Дальнейшие телодвижения ничем не отличаются от описанных выше. # Некоторые гейты в другие сети ## ICQ -На данный момент (зима 2010) известно несколько разных icq-транспортов. Каждый -обладает своими достоинствами и недостатками, например, в плане поддерживаемых -возможностей icq-протокола. Соответственно, и "глюками" они обладают своими -уникальными, и желательно разбираться, что icq-транспорт - это такая же -программа, как и Tkabber, только запущена у кого-то на сервере, и так же как и -Tkabber, в ней могут быть ошибки, а разработчики, если им грамотно сообщать об -ошибках - могут их устранить. - -* [JIT](http://sourceforge.net/projects/jit/) - самый старый из "живых" - icq-транспорт. Если на запрос версии ваш транспорт отвечает нечто типа - `Jabber ICQ Transport by Lukas Jabber: Jabberd 1.1.1 stable / with real - threads / by Lukas Karwacki ICQ: 1.1.6 (Linux 2.6.16.13-4-smp)` - значит у - вас именно он. Имел массу модификаций от разных авторов, наиболее годная к - употреблению была версия 1.2 от администраторов mytlt.ru. В настоящее время - известных "живых" модификаций нету, пользоваться этим транспортом крайне не - рекомендуется. - - Ключевая возможность - поиск ICQ-пользователей. В версии от mytlt - частично - поддерживаются ICQ X-Statuses(прием); не поддерживаются message typing - notifications, аватары, передача файлов. - -* [PyICQ-t](http://groups.google.com/group/py-transports) - более молодой, - более требовательный к ресурсам сервера транспорт, однако и обладающий - бОльшими возможностями - в последнем релизе 0.8.1.5 имеется полная поддержка - ICQ X-Statuses(и прием и передача, гибкая настройка), typing notifications, - delivery confirmations, аватары, синхронизация vcard и много чего еще. - Последний релиз значительно повысил стабильность транспорта - патчи от - коммерческой конторы сделали его очень стабильным - поэтому даже если у вас - 0.8.1.4, то желательно обновиться на 0.8.1.5. В настоящее время не - развивается, но собственно серьезных багов за последней версией не замечено и - это наиболее рекомендуемый транспорт, если надо чтоб "поставил и забыл". - -* [Spectrum](http://spectrum.im) - новейший транспорт на базе libpurple, - библиотеки, являющейся основой Pidgin - мультипротокольного клиента. - Разрабатывается в настоящий момент, в том числе авторами PyICQ-t и pidgin. - Основное преимущество - умеет транспорты во многие сети "в одном флаконе" - - aim, facebook, gg, icq, irc, msn, myspace, qq, simple, xmpp, yahoo, twitter, - и еще куда-то. Умеет импортировать контакты с никами и даже группами одним - нажатием. Пока нет поддержки x-статусов и подтверждения доставки, но - вполне возможно в ближайшее время будет. Рекомендуется использовать всем, кто - хочет помогать развивать транспорты, так как этот транспорт разрабатывается в - данный момент, автор охотно отвечает на вопросы, исправляет ошибки. - -* менее популярные виды - встроенный в - [Openfire](http://www.igniterealtime.org/projects/openfire/) транспорт и - встроенный в коммерческую версию - [ejabberd](http://www.process-one.net/en/solutions/imgateways/). Имеют не так - много пользователей и отзывов, потому ни плохого, ни хорошего о них писать - здесь не будем. - -Соответственно, найдя публичный icq-транспорт свежей версии (а еще более -надежнее - настроив свой), можно добиться достаточно удобного общения с -icq-пользователями. +На данный момент (зима 2010) известно несколько разных icq-транспортов. Каждый обладает своими достоинствами и недостатками, например, в плане поддерживаемых возможностей icq-протокола. Соответственно, и "глюками" они обладают своими уникальными, и желательно разбираться, что icq-транспорт - это такая же программа, как и Tkabber, только запущена у кого-то на сервере, и так же как и Tkabber, в ней могут быть ошибки, а разработчики, если им грамотно сообщать об ошибках - могут их устранить. + +* [JIT](http://sourceforge.net/projects/jit/) - самый старый из "живых" icq-транспорт. Если на запрос версии ваш транспорт отвечает нечто типа `Jabber ICQ Transport by Lukas Jabber: Jabberd 1.1.1 stable / with real threads / by Lukas Karwacki ICQ: 1.1.6 (Linux 2.6.16.13-4-smp)` - значит у вас именно он. Имел массу модификаций от разных авторов, наиболее годная к употреблению была версия 1.2 от администраторов mytlt.ru. В настоящее время известных "живых" модификаций нету, пользоваться этим транспортом крайне не рекомендуется. + +Ключевая возможность - поиск ICQ-пользователей. В версии от mytlt - частично поддерживаются ICQ X-Statuses(прием); не поддерживаются message typing notifications, аватары, передача файлов. + +* [PyICQ-t](http://groups.google.com/group/py-transports) - более молодой, более требовательный к ресурсам сервера транспорт, однако и обладающий бОльшими возможностями - в последнем релизе 0.8.1.5 имеется полная поддержка ICQ X-Statuses(и прием и передача, гибкая настройка), typing notifications, delivery confirmations, аватары, синхронизация vcard и много чего еще. Последний релиз значительно повысил стабильность транспорта - патчи от коммерческой конторы сделали его очень стабильным - поэтому даже если у вас 0.8.1.4, то желательно обновиться на 0.8.1.5. В настоящее время не развивается, но собственно серьезных багов за последней версией не замечено и это наиболее рекомендуемый транспорт, если надо чтоб "поставил и забыл". + +* [Spectrum](http://spectrum.im) - новейший транспорт на базе libpurple, библиотеки, являющейся основой Pidgin - мультипротокольного клиента. Разрабатывается в настоящий момент, в том числе авторами PyICQ-t и pidgin. Основное преимущество - умеет транспорты во многие сети "в одном флаконе" - aim, facebook, gg, icq, irc, msn, myspace, qq, simple, xmpp, yahoo, twitter, и еще куда-то. Умеет импортировать контакты с никами и даже группами одним нажатием. Пока нет поддержки x-статусов и подтверждения доставки, но вполне возможно в ближайшее время будет. Рекомендуется использовать всем, кто хочет помогать развивать транспорты, так как этот транспорт разрабатывается в данный момент, автор охотно отвечает на вопросы, исправляет ошибки. + +* менее популярные виды - встроенный в [Openfire](http://www.igniterealtime.org/projects/openfire/) транспорт и встроенный в коммерческую версию [ejabberd](http://www.process-one.net/en/solutions/imgateways/). Имеют не так много пользователей и отзывов, потому ни плохого, ни хорошего о них писать здесь не будем. + +Соответственно, найдя публичный icq-транспорт свежей версии (а еще более надежнее - настроив свой), можно добиться достаточно удобного общения с icq-пользователями. ### icq.jabber.ru -"Впереди планеты всей" раньше шёл гейт `icq.jabber.ru`, однако, +"Впереди планеты всей" раньше шёл гейт `icq.jabber.ru`, однако, -> *этот гейт прекратил работу с 1 июля 2007 года.* Подробности — [здесь](http://www.jabber.ru/node/379). +_этот гейт прекратил работу с 1 июля 2007 года. _ Подробности — [здесь](http://www.jabber.ru/node/379). ### Переезд на другой транспорт с минимумом головной боли -Компания AOL здорово позаботилась о пользователях, запретив хранить список -контактов самостоятельно, потому требовавшиеся на старых версиях JIT танцы с -бубном по сохранению и переименованию контактов более не нужны. Достаточно: - -* отрегистрироваться на старом транспорте и удалить его из контактов. -* убедившись, что транспорт неактивен, можно выделить всех icq-контактов в - группу по маске \*@icq.bla-bla.ru (Tkabber → Контакты → Добавить группу по - регулярному выражению JID... → ".\*@icq\\.bla-bla\\.ru") и удалить их все - разом ("Удалить все контакты в группе..." на заголовке группы) -* зарегистрироваться на новом транспорте, и повторить процедуры, описанные - выше, необходимые для регистрации. +Компания AOL здорово позаботилась о пользователях, запретив хранить список контактов самостоятельно, потому требовавшиеся на старых версиях JIT танцы с бубном по сохранению и переименованию контактов более не нужны. Достаточно: + +* отрегистрироваться на старом транспорте и удалить его из контактов. +* убедившись, что транспорт неактивен, можно выделить всех icq-контактов в группу по маске \*@icq.bla-bla.ru (Tkabber → Контакты → Добавить группу по регулярному выражению JID... → ".\*@icq\\.bla-bla\\.ru") и удалить их все разом ("Удалить все контакты в группе..." на заголовке группы) +* зарегистрироваться на новом транспорте, и повторить процедуры, описанные выше, необходимые для регистрации. ### Общедоступные транспорты в ICQ -(частично взято [отсюда](http://lists.jabber.ru/pipermail/jabber-users/2007-February/003062.html)): - -* `jit.mytlt.ru` (JIT 1.2 - теоретически, наиболее надежный) -* `icq.jabber.sib.ru` (JIT) -* `icq.jabber.org.ru` (PyICQt) -* `icq.jabbe.net.ru` (PyICQt) -* `icq.udaff.com` (JIT) -* `picq.udaff.com` (PyICQt) -* `pyicq.jabber.te.ua` (PyICQt) -* `icq.sudouser.ru` (PyICQt) - -Большой список ICQ-гейтов поддерживается [на wiki Bombus'а](http://bombus-im.org/wiki/howto/howto_icq). - -Существуют гейты в ICQ и на "буржуйских" серверах. Для российских пользователей -они, как водится, не подходят по той простой причине, что не поддерживают наших -кодировок. +(частично взято [отсюда](http://lists.jabber.ru/pipermail/jabber-users/2007-February/003062.html)): + +* + * `jit.mytlt.ru` (JIT 1.2 - теоретически, наиболее надежный) + +* `icq.jabber.sib.ru` (JIT) +* `icq.jabber.org.ru` (PyICQt) +* `icq.jabbe.net.ru` (PyICQt) +* `icq.udaff.com` (JIT) +* `picq.udaff.com` (PyICQt) +* `pyicq.jabber.te.ua` (PyICQt) +* `icq.sudouser.ru` (PyICQt) + +Большой список ICQ-гейтов поддерживается [на wiki Bombus'а](http://bombus-im.org/wiki/howto/howto_icq). + +Существуют гейты в ICQ и на "буржуйских" серверах. Для российских пользователей они, как водится, не подходят по той простой причине, что не поддерживают наших кодировок. ## MRIM -На данный момент (апрель 2007 года) в мире насчитывается по крайней мере два -гейта, позволяющих получать спам от пользователей Mail.Ru Instant Messenger, -кратко — MRIM. Зарегистрироваться на них можно по следующим адресам: - -* `mrim.jabber.ru` -* `mrim.udaff.com` - -Нелишним будет сразу же порекомендовать -[**дополнительную литературу**](Блокировка_MRIM-спама.md) по теме. +На данный момент (апрель 2007 года) в мире насчитывается по крайней мере два гейта, позволяющих получать спам от пользователей Mail.Ru Instant Messenger, кратко — MRIM. Зарегистрироваться на них можно по следующим адресам: + +* `mrim.jabber.ru` +* `mrim.udaff.com` + +Нелишним будет сразу же порекомендовать [дополнительную литературу](Блокировка_MRIM-спама.md) по теме. ## MSN -Можем предложить +Можем предложить -* `msn.jabber.anywise.com` (тоже иногда глючит, но не так откровенно). -* `msn.jabber.kiev.ua` -* `msn.jaim.at` +* `msn.jabber.anywise.com` (тоже иногда глючит, но не так откровенно). +* `msn.jabber.kiev.ua` +* `msn.jaim.at` ## Yahoo -* `yahoo.draugr.de` отлично работает, хотя и забугорный. Гейт логинится в сеть - яху сам, с кодировками проблем нет, кроме того, что в пользователи в родном - Yahoo! Messenger видят статусное сообщение кракозяблами. +* `yahoo.draugr.de` отлично работает, хотя и забугорный. Гейт логинится в сеть яху сам, с кодировками проблем нет, кроме того, что в пользователи в родном Yahoo! Messenger видят статусное сообщение кракозяблами. -Приветствуются адреса работающих транспортов. +Приветствуются адреса работающих транспортов. ## AIM ## IRC -При регистрации на IRC-транспорте у вас есть возможность задать кодировки для -разных IRC-серверов, к которым вы обычно коннектитесь. Читайте помощь, -выводящуюся при двойном клике на "Register". Однако заходить на конференции вы -можете и без регистрации. Для этого щёлкните на "Join conference" и в поле -"Группа" введите имя комнаты и имя IRC-сервера в таком формате: -**mycoolroom%irc.server.org**, а в поле "Сервер" — имя гейта, через который вы -собираетесь общаться в "ирке". ![(!)](../images/Hammer.png) **Сделать:** -Выяснить, работает ли тут поле "Пароль", и если да, то для чего служит. По -идее, для комнаты, потому что для ника пароль отдаётся Никсерву, см. ниже. - -Некоторые гейти в IRC: - -* `irc.e.jabber.ru` — хитро спрятанный IRC-гейт сервера jabber.ru. Его не - видно в Диско, но он существует и очень даже работает. Мир его праху. В - эпоху массового отстрела транспортов на jabber.ru ему не помогла даже хитрая - спрятанность (уж админы-то не могли про него не знать :)). -* `irc.jabber.kiev.ua` — гейт на украинском джаббер-сервере. -* `irc.jabe.ru` — гейт компании, которая хостит нашу вики. - -В силу разных обстоятельств случается, что тот или иной гейт не работает. Это -сразу видно по абсолютно пустому окну канала, на который вы якобы вошли. В этом -случае просто попробуйте другой гейт. Учитывайте также нетсплиты — временные -разъединения серверов, формирующих IRC-сеть. Если вы и собеседник, нужный вам, -подключены к разным серверам, то при нетсплите вы не сможете общаться. Чтобы -избежать этого, укажите нужный IRC-сервер при заполнении поля "Группа". - -Бывает, что NickServ спрашивает ваш пароль (если, конечно, ваш ник -зарегистрирован). Его запрос появляется в отдельном окне или табе. Попытка -отослать ему стандартную команду **/identify password** ни к чему не приводит. -Однако всё получается, если просто убрать слэш и оправить Никсерву только -**identify password**. Это происходит, например, в сети -[WeNet](http://www.wenet.ru) (irc.wenet.ru). Но как показывает практика, не -везде такой подход срабатывает. Например, если проделать то же самое при -идентификации в сети [RusNet](http://www.rus-net.org/) (irc.rusnet.ru), Никсерв -изругается и скажет в ответ на команду что-то вроде следующего: - -> [Вск Ноя 11 19:50]\ NOTICE: Use /chanserv, not /MSG chanserv - -Оно и верно: написав в приват Никсерву запрос об аутентификации, мы просто -послали ему сообщение (как бы командой **/msg identify password**). Как видно, -некоторые сервера требуют прямой команды. В этом случае следует "завернуть" её -в "бумажку" quote, которая поможет команде дойти до сервера в неизменном виде: -**/quote nickserv identify your\_password**. - -Вот ещё пара полезных команд: - -* **/quote mode \#channel +o nick** — дать "опа" участнику nick. Ровно таким же - образом должны работать и остальные аналогичные команды: -o, +v, -v, +h, -h, - +b, -b. Обратите внимание, что раздача привилегий посредством меню MUC, - вызываемого правым кликом на нике участника, ничего не даст, потому что IRC - просто не поймёт, что вы ему толкуете. -* **/quote chanserv help**, **/quote nickserv help** и **/quote memoserv help** - выведут в привате список команд, которые можно данному серву отсылать. - Собственно, объединив ваши собственные знания об IRC и только что описанный - трюк с quote, вы могли бы и сами об этом догадаться, но уж пусть эта - подсказка будет. -* Если набрать просто **/quote help**, то irc-сервер, к которому вы - присоединены, выдаст список команд для этого сервера. - -Дадим ещё один совет на тему общения с сервами. Обычно их имя в интерпретации -джаббер-протокола выглядит примерно таким образом: -**chanserv!irc.rusnet.ru@irc.jabberserver.ru**. Изменяя необходимые параметры -при открытии чата с интересующим сервом, можно общаться с любым из них, даже не -коннектясь к irc-серверу — гейт сам всё отошлёт куда надо и доставит вам ответ. -Это полезно, если вы хотите узнать, какие команды поддерживает интересующий вас -Ник- или Чансерв. Все эти сервы довольно полезны, однако не все из них скромны. -Например, wenet!irc.wenet.ru довёл вашего покорного слугу своими постоянными -сообщениями до того, что тот занёс его JID в виде -wenet!irc.wenet.ru@irc.e.jabber.ru в игнор (это типа намёк, что нужно делать в -подобных ситуациях ;)). - -Работы по исследованию irc-гейтов будут продолжаться; тем не менее, если у вас -есть что добавить в эту статью, никто этого не запрещает. +При регистрации на IRC-транспорте у вас есть возможность задать кодировки для разных IRC-серверов, к которым вы обычно коннектитесь. Читайте помощь, выводящуюся при двойном клике на "Register". Однако заходить на конференции вы можете и без регистрации. Для этого щёлкните на "Join conference" и в поле "Группа" введите имя комнаты и имя IRC-сервера в таком формате: **mycoolroom%irc.server.org**, а в поле "Сервер" — имя гейта, через который вы собираетесь общаться в "ирке". ![(!)](../images/Hammer.png) **Сделать:** Выяснить, работает ли тут поле "Пароль", и если да, то для чего служит. По идее, для комнаты, потому что для ника пароль отдаётся Никсерву, см. ниже. + +Некоторые гейти в IRC: + +* `irc.e.jabber.ru` — хитро спрятанный IRC-гейт сервера jabber.ru. Его не видно в Диско, но он существует и очень даже работает. Мир его праху. В эпоху массового отстрела транспортов на jabber.ru ему не помогла даже хитрая спрятанность (уж админы-то не могли про него не знать :)). +* `irc.jabber.kiev.ua` — гейт на украинском джаббер-сервере. +* `irc.jabe.ru` — гейт компании, которая хостит нашу вики. + +В силу разных обстоятельств случается, что тот или иной гейт не работает. Это сразу видно по абсолютно пустому окну канала, на который вы якобы вошли. В этом случае просто попробуйте другой гейт. Учитывайте также нетсплиты — временные разъединения серверов, формирующих IRC-сеть. Если вы и собеседник, нужный вам, подключены к разным серверам, то при нетсплите вы не сможете общаться. Чтобы избежать этого, укажите нужный IRC-сервер при заполнении поля "Группа". + +Бывает, что NickServ спрашивает ваш пароль (если, конечно, ваш ник зарегистрирован). Его запрос появляется в отдельном окне или табе. Попытка отослать ему стандартную команду **/identify password** ни к чему не приводит. Однако всё получается, если просто убрать слэш и оправить Никсерву только **identify password**. Это происходит, например, в сети [WeNet](http://www.wenet.ru) (irc.wenet.ru). Но как показывает практика, не везде такой подход срабатывает. Например, если проделать то же самое при идентификации в сети [RusNet](http://www.rus-net.org/) (irc.rusnet.ru), Никсерв изругается и скажет в ответ на команду что-то вроде следующего: + + [Вск Ноя 11 19:50]\ NOTICE: Use /chanserv, not /MSG chanserv + +Оно и верно: написав в приват Никсерву запрос об аутентификации, мы просто послали ему сообщение (как бы командой **/msg identify password**). Как видно, некоторые сервера требуют прямой команды. В этом случае следует "завернуть" её в "бумажку" quote, которая поможет команде дойти до сервера в неизменном виде: **/quote nickserv identify your\_password**. + +Вот ещё пара полезных команд: + +* **/quote mode \#channel +o nick** — дать "опа" участнику nick. Ровно таким же образом должны работать и остальные аналогичные команды: -o, +v, -v, +h, -h, +b, -b. Обратите внимание, что раздача привилегий посредством меню MUC, вызываемого правым кликом на нике участника, ничего не даст, потому что IRC просто не поймёт, что вы ему толкуете. +* **/quote chanserv help**, **/quote nickserv help** и **/quote memoserv help** выведут в привате список команд, которые можно данному серву отсылать. Собственно, объединив ваши собственные знания об IRC и только что описанный трюк с quote, вы могли бы и сами об этом догадаться, но уж пусть эта подсказка будет. +* Если набрать просто **/quote help**, то irc-сервер, к которому вы присоединены, выдаст список команд для этого сервера. + +Дадим ещё один совет на тему общения с сервами. Обычно их имя в интерпретации джаббер-протокола выглядит примерно таким образом: **chanserv!irc.rusnet.ru@irc.jabberserver.ru**. Изменяя необходимые параметры при открытии чата с интересующим сервом, можно общаться с любым из них, даже не коннектясь к irc-серверу — гейт сам всё отошлёт куда надо и доставит вам ответ. Это полезно, если вы хотите узнать, какие команды поддерживает интересующий вас Ник- или Чансерв. Все эти сервы довольно полезны, однако не все из них скромны. Например, wenet!irc.wenet.ru довёл вашего покорного слугу своими постоянными сообщениями до того, что тот занёс его JID в виде wenet!irc.wenet.ru@irc.e.jabber.ru в игнор (это типа намёк, что нужно делать в подобных ситуациях ;)). + +Работы по исследованию irc-гейтов будут продолжаться; тем не менее, если у вас есть что добавить в эту статью, никто этого не запрещает. ## XMPP (свой среди чужих ;)) -Позволяет подключить XMPP учётную запись на другом сервере. Можно использовать -как альтернативу мультилогина. Общедоступные транспорты замечены на: - -* `xmpp.jrudevels.org` -* `gtalk.jrudevels.org` — для подключения учётной записи GTalk -* `j2j.udaff.com` - -**Будьте осторожны!** Не регистрируйте активную учётную запись гостевой в самой -себе. После этого не сможете зайти в неё. Не создавайте циклов из учётных -записей, например, user1@server1.org является гостевым для user2@server2.org, и -одновременно user2@server2.org является гостевым для user1@server1.org. Вы -можете придумать более сложные циклические схемы, воздержитесь и от них. +Позволяет подключить XMPP учётную запись на другом сервере. Можно использовать как альтернативу мультилогина. Общедоступные транспорты замечены на: + +* `xmpp.jrudevels.org` +* `gtalk.jrudevels.org` — для подключения учётной записи GTalk +* `j2j.udaff.com` + +**Будьте осторожны!** Не регистрируйте активную учётную запись гостевой в самой себе. После этого не сможете зайти в неё. Не создавайте циклов из учётных записей, например, user1@server1.org является гостевым для user2@server2.org, и одновременно user2@server2.org является гостевым для user1@server1.org. Вы можете придумать более сложные циклические схемы, воздержитесь и от них. # Проблемы при работе с гейтами -Поскольку работа других сетей чаще всего основана на закрытых протоколах, не -следует удивляться и огорчаться, если транспорты подглючивают, падают и просто -не работают. Отнюдь не помогает их работе и отношение админов Jabber-серверов к -"иноземцам" именно как к иноземцам: даже в самых доброжелательных ответах -админов (если их удаётся получить) сквозит презрение к "асикушникам" и прочему -плебсу. Чаще всего разруливать ситуацию приходится самостоятельно, причём -радикальным способом — сменой гейта. Как и на что их менять, рассказано выше, а -здесь мы попробуем дать список ошибок, которые могут возникнуть, и их -расшифровку. Ошибку можно прочитать в тултипе, появляющемся, если навести мышь -на транспорт, находящийся у вас в ростере. +Поскольку работа других сетей чаще всего основана на закрытых протоколах, не следует удивляться и огорчаться, если транспорты подглючивают, падают и просто не работают. Отнюдь не помогает их работе и отношение админов Jabber-серверов к "иноземцам" именно как к иноземцам: даже в самых доброжелательных ответах админов (если их удаётся получить) сквозит презрение к "асикушникам" и прочему плебсу. Чаще всего разруливать ситуацию приходится самостоятельно, причём радикальным способом — сменой гейта. Как и на что их менять, рассказано выше, а здесь мы попробуем дать список ошибок, которые могут возникнуть, и их расшифровку. Ошибку можно прочитать в тултипе, появляющемся, если навести мышь на транспорт, находящийся у вас в ростере. ## Unavailable -Строго говоря, это не ошибка, а состояние сервиса: "Недоступен". Однако если вы -видите, что кроме этого ничего больше в той же строке не написано, скорее -всего, вы либо забыли залогиниться на гейт, либо он сам как-то отвалился. -Решение проблемы простое: правый клик, и выбрать Log in. +Строго говоря, это не ошибка, а состояние сервиса: "Недоступен". Однако если вы видите, что кроме этого ничего больше в той же строке не написано, скорее всего, вы либо забыли залогиниться на гейт, либо он сам как-то отвалился. Решение проблемы простое: правый клик, и выбрать Log in. ## Low Level Network Error -Эта надпись иногда появляется в качестве комментария к вышеупомянутому -состоянию Unavailable. Перевод: "низкоуровневая ошибка сети". Замечена при -работе со старыми версиями JIT, имевшими ограничение в 1024 одновременных -соединения. В настоящее время наверняка является сигналом к тому, что вам пора -сменить свой ICQ-транспорт на что-то более свежее и стабильное. +Эта надпись иногда появляется в качестве комментария к вышеупомянутому состоянию Unavailable. Перевод: "низкоуровневая ошибка сети". Замечена при работе со старыми версиями JIT, имевшими ограничение в 1024 одновременных соединения. В настоящее время наверняка является сигналом к тому, что вам пора сменить свой ICQ-транспорт на что-то более свежее и стабильное. ## Unrecoverable Error (Remote Server Not Found) -Как видно из названия, эта ошибка сообщает нам о том, что удалённый сервер не -найден. Причины могут быть разными: начиная с очень паршивой связи гейта с -сервером вражеской сети и заканчивая обычным падением этого самого сервера. -Если вы обнаружили эту ошибку, вернувшись к компьютеру после долгого -отсутствия, попробуйте перелогиниться на транспорте — вдруг связь уже -наладилась. Если ничего не получается, ждите — за вами придут -когда-нибудь она наладится. Попингуйте сервер: станет ясно, жив он или нет. +Как видно из названия, эта ошибка сообщает нам о том, что удалённый сервер не найден. Причины могут быть разными: начиная с очень паршивой связи гейта с сервером вражеской сети и заканчивая обычным падением этого самого сервера. Если вы обнаружили эту ошибку, вернувшись к компьютеру после долгого отсутствия, попробуйте перелогиниться на транспорте — вдруг связь уже наладилась. Если ничего не получается, ждите — за вами придут когда-нибудь она наладится. Попингуйте сервер: станет ясно, жив он или нет. ## Disconnected by unknown reason -Серия ошибок py-transports (pyicq-t, pymsn-t, и т.д.) - большинство их глюков -содержит эти слова ![(!)](../images/Hammer.png) **Сделать:** дописать -подробные примеры. Обычно достаточно перелогиниться на транспорте. +Серия ошибок py-transports (pyicq-t, pymsn-t, и т.д.) - большинство их глюков содержит эти слова ![(!)](../images/Hammer.png) **Сделать:** дописать подробные примеры. Обычно достаточно перелогиниться на транспорте. ## Temporary Error (Component 'msnlinker' is not connected to server) -Судя по всему, некий компонент транспорта MSN, необходимый для полноценной -работы, не подключён к серверу. Результат плачевен: при попытке коннекта к -серверу от транспорта приходит ответ такого типа: "Sorry. You do not appear to -be registered with this transport. Please register and try again. If you are -having trouble registering please contact your Jabber administrator". Иными -словами, транспорт в упор вас не знает. Прежде чем внять этой просьбе -зарегистрироваться, имеет смысл подождать, ведь мы знаем, что это глюк сервера, -а не отсутствие регистрации. Обычно через некоторое время всё само собой -налаживается. Если ничего не налаживается, просьба жаловаться не нам, а -хозяевам транспорта. +Судя по всему, некий компонент транспорта MSN, необходимый для полноценной работы, не подключён к серверу. Результат плачевен: при попытке коннекта к серверу от транспорта приходит ответ такого типа: "Sorry. You do not appear to be registered with this transport. Please register and try again. If you are having trouble registering please contact your Jabber administrator". Иными словами, транспорт в упор вас не знает. Прежде чем внять этой просьбе зарегистрироваться, имеет смысл подождать, ведь мы знаем, что это глюк сервера, а не отсутствие регистрации. Обычно через некоторое время всё само собой налаживается. Если ничего не налаживается, просьба жаловаться не нам, а хозяевам транспорта. ## "Намерзание" участников в ростере -Такая проблема часто возникает при работе с гейтами ICQ, когда Ткаббер не -выключается долгое время, и за это время происходили дисконнекты. Вы общаетесь -себе, общаетесь; мама зовёт вас обедать, вы отходите от компа, потом снова -садитесь за него; вечером вы идёте в гости, по возвращении снова лезете в -Ткаббер; часв в четыре утра ложитесь спать, на следующий день общаетесь снова, -и всё это время он вроде бы нормально работает. Но где-нибудь на третий день вы -вдруг обращаете внимание на то, что некоторые ваши друзья из аськи против -обыкновения тоже сидят в интернете круглосуточно, причём не наблюдается никаких -автоэвеев. Может случиться и так, что вы обнаруживаете транспорт упавшим, -однако эти товарищи несмотря ни на что упорно не желают исчезать из ростера. -Разлогинивание от гейта не помогает, а ситуацию разруливает лишь полный -перелогин Ткаббера. Что же при этом происходит? -![(!)](../images/Hammer.png) **Сделать:** Расспросить авторов гейта либо -авторов Ткаббера либо просто очень умных людей либо волшебников и написать тут. +Такая проблема часто возникает при работе с гейтами ICQ, когда Ткаббер не выключается долгое время, и за это время происходили дисконнекты. Вы общаетесь себе, общаетесь; мама зовёт вас обедать, вы отходите от компа, потом снова садитесь за него; вечером вы идёте в гости, по возвращении снова лезете в Ткаббер; часв в четыре утра ложитесь спать, на следующий день общаетесь снова, и всё это время он вроде бы нормально работает. Но где-нибудь на третий день вы вдруг обращаете внимание на то, что некоторые ваши друзья из аськи против обыкновения тоже сидят в интернете круглосуточно, причём не наблюдается никаких автоэвеев. Может случиться и так, что вы обнаруживаете транспорт упавшим, однако эти товарищи несмотря ни на что упорно не желают исчезать из ростера. Разлогинивание от гейта не помогает, а ситуацию разруливает лишь полный перелогин Ткаббера. Что же при этом происходит? ![(!)](../images/Hammer.png) **Сделать:** Расспросить авторов гейта либо авторов Ткаббера либо просто очень умных людей либо волшебников и написать тут. + + Index: wiki/ru/Дистрибутивы__которые_мы_выбираем.md ================================================================== --- wiki/ru/Дистрибутивы__которые_мы_выбираем.md +++ wiki/ru/Дистрибутивы__которые_мы_выбираем.md @@ -1,533 +1,322 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Дистрибутивы,_которые_мы_выбираем/index.html) + # Дистрибутивы, которые мы выбираем Материал из Tkabber Wiki -> *– Скажите, пожалуйста, куда мне отсюда идти? -> – А куда ты хочешь попасть? – ответил Кот. -> – Мне все равно… – сказала Алиса. -> – Тогда все равно, куда и идти, – заметил Кот. -> – … только бы попасть куда-нибудь, – пояснила Алиса. -> – Куда-нибудь ты обязательно попадешь, – сказал Кот. -> – Нужно только достаточно долго идти.* - -> *© [Льюис Кэрролл "Алиса в стране чудес", пер. Демуровой](http://fictionbook.ru/author/kyerroll_lyuis/priklyucheniya_alisiy_v_strane_chudes_pe/kyerroll_priklyucheniya_alisiy_v_strane_chudes_pe.html#TOC_id3507814)* +– Скажите, пожалуйста, куда мне отсюда идти? + – А куда ты хочешь попасть? – ответил Кот. + – Мне все равно… – сказала Алиса. + – Тогда все равно, куда и идти, – заметил Кот. + – … только бы попасть куда-нибудь, – пояснила Алиса. + – Куда-нибудь ты обязательно попадешь, – сказал Кот. + – Нужно только достаточно долго идти. + +© [Льюис Кэрролл "Алиса в стране чудес", пер. Демуровой](http://fictionbook.ru/author/kyerroll_lyuis/priklyucheniya_alisiy_v_strane_chudes_pe/kyerroll_priklyucheniya_alisiy_v_strane_chudes_pe.html#TOC_id3507814) ## Содержание * [1 Начните работу с нажатия этой кнопки (c) Windows](#Начните_работу_с_нажатия_этой_кнопки_c_Windows) * [2 "Самодостаточные" дистрибутивы Ткаббера](#Самодостаточные_дистрибутивы_Ткаббера) - * [2.1 Tclkit, starkits и starpacks: немного теории](#Tclkit_starkits_и_starpacks_немного_теории) - * [2.1.1 Тиклькит](#Тиклькит) - * [2.1.2 Старкиты](#Старкиты) - * [2.1.3 Старпаки](#Старпаки) - * [2.2 Назад, к Ткабберу!](#Назад_к_Ткабберу) - * [2.2.1 Tkabber-pack — особая песня](#Tkabber-pack_-_особая_песня) + * [2.1 Tclkit, starkits и starpacks: немного теории](#Tclkit_starkits_и_starpacks_немного_теории) + * [2.1.1 Тиклькит](#Тиклькит) + * [2.1.2 Старкиты](#Старкиты) + * [2.1.3 Старпаки](#Старпаки) + * [2.2 Назад, к Ткабберу!](#Назад_к_Ткабберу) + * [2.2.1 Tkabber-pack — особая песня](#Tkabber-pack_-_особая_песня) * [3 Быстрее! Выше! Сильнее!](#Быстрее_Выше_Сильнее) * [4 Прилавок](#Прилавок) - * [4.1 Рукоделие](#Рукоделие) + * [4.1 Рукоделие](#Рукоделие) * [5 Кто сильнее: кит или пак? (Что выбрать?)](#Кто_сильнее_кит_или_пак_Что_выбрать) - * [5.1 "Каноническая" установка: Tcl/Tk + Ткаббер](#Каноническая_установка_Tcl_Tk_+_Ткаббер) - * [5.1.1 Осевой вариант](#Осевой_вариант) - * [5.1.2 Windows: не бейсиком единым...](#Windows_не_бейсиком_единым...) - * [5.1.3 Дистрибутив Tcl/Tk в системе: pros et contras](#Дистрибутив_Tcl_Tk_в_системе_pros_et_contras) - * [5.2 Всё своё ношу с собой](#Всё_своё_ношу_с_собой) - * [5.2.1 Ткаббер-пак опять идёт не в ногу](#Ткаббер-пак_опять_идёт_не_в_ногу) + * [5.1 "Каноническая" установка: Tcl/Tk + Ткаббер](#Каноническая_установка_Tcl_Tk_+_Ткаббер) + * [5.1.1 Осевой вариант](#Осевой_вариант) + * [5.1.2 Windows: не бейсиком единым...](#Windows_не_бейсиком_единым...) + * [5.1.3 Дистрибутив Tcl/Tk в системе: pros et contras](#Дистрибутив_Tcl_Tk_в_системе_pros_et_contras) + * [5.2 Всё своё ношу с собой](#Всё_своё_ношу_с_собой) + * [5.2.1 Ткаббер-пак опять идёт не в ногу](#Ткаббер-пак_опять_идёт_не_в_ногу) # Начните работу с нажатия этой кнопки (c) Windows -> *Куда ставить-то?!* - -> *© х/ф "Посторонним вход воспрещается"* - -Итак, вы решили установить Ткаббер и в настоящий момент чешете голову, -рассматривая [эту страницу](http://tkabber.jabber.ru/download). Не унывайте! -Во-первых, разбегающиеся глаза красят человека, во-вторых, не вы первый, не вы -— последний: почти все "практикующие ткабберисты" были в своё время мучимы -выбором, подобным вашему. Для того, чтобы помочь вам с выбором, написана эта -статья. - -В этой статье рассказывается о различных ипостасях Ткаббера — его -дистрибутивах, — и производится их сравнительное препарирование. - -Здесь достаточно много теории, так как цель статьи — предоставить вам -возможность сделать _осмысленный выбор._ Если же вы ленивы или (думаете что) -всё знаете, можете перейти [**прямо сюда**](#Прилавок). - -Приступим. - -Первое, что вам следует заучить как "Отче наш": - -> _Ткаббер написан на **интерпретируемом языке программирования,** и это - означает, что для работы ему нужен "движок", выполняющий программы этого - самого языка — Tcl/Tk, а также необходимые библиотеки._ - -То есть, несмотря на некоторую техническую неточность, можно утверждать, что -Ткаббер состоит из двух частей: - -* Интерпретатора языка Tcl, а также библиотек (Tk, Tcllib и BWidget — - минимально необходимый набор); -* Самого кода Ткаббера. - -Этот самый "код Ткаббера", в принципе, самодостаточен в том смысле, что не -зависит от операционный системы и является общим для всех систем, на которых -работает Tcl/Tk. То есть, если на вашей системе уже установлен дистрибутив -Tcl/Tk, вы можете произвольно менять сам код Ткаббера: к примеру, вытягивать -его еженощно из [репозитория](http://tkabber.jabber.ru/svn). Или вы, скажем, -можете просто перенести каталог с Ткаббером с Windows-машины на Linux-машину, и -он будет там прекрасно работать. - -И именно "этот самый код..." и является основным дистрибутивом Ткаббера. - -К сожалению, Tcl/Tk поставляется в комплекте только с такими серьёзными -операционными системами, как Linux или FreeBSD; пользователи Windows вынуждены -скачивать дистрибутив Tcl/Tk из интернета или использовать альтернативные -дистрибутивы Ткаббера, о которых рассказано ниже. - -Однако, многие (и не только в Windows) по разным причинам не хотят иметь дело с -установкой этого "рантайма". Наиболее часто встречающаяся причина — вопрос -трафика: дистрибутив Tcl/Tk под Windows "весит" примерно 20 мегабайт в архиве. -Многие пользователи, обрадовавшись, что основной дистрибутив Ткаббера "весит" -около 700 килобайт, бывают разочарованы, узнав, что "это ещё не всё". - -Вторая по частоте появления причина — желание использовать "Ткаббер на флэшке": -обычно на "чужих" компьютерах (на работе, в университете и т.д.) нет -возможности установить дистрибутив Tcl/Tk, и, следовательно, его нужно как-то -"носить с собой". - -Итак, подведём первый промежуточный итог. У вас есть два варианта для работы с -Ткаббером: - -1. Установить себе дистрибутив Tcl/Tk + необходимые библиотеки. -1. Скачать специальный дистрибутив Ткаббера, который "содержит в себе" - микро-дистрибутив Tcl/Tk. - -Сравнение их отложим до поры, а пока окинем взглядом +Куда ставить-то?! + +© х/ф "Посторонним вход воспрещается" + +Итак, вы решили установить Ткаббер и в настоящий момент чешете голову, рассматривая [эту страницу](http://tkabber.jabber.ru/download). Не унывайте! Во-первых, разбегающиеся глаза красят человека, во-вторых, не вы первый, не вы — последний: почти все "практикующие ткабберисты" были в своё время мучимы выбором, подобным вашему. Для того, чтобы помочь вам с выбором, написана эта статья. + +В этой статье рассказывается о различных ипостасях Ткаббера — его дистрибутивах, — и производится их сравнительное препарирование. + +Здесь достаточно много теории, так как цель статьи — предоставить вам возможность сделать _осмысленный выбор._ Если же вы ленивы или (думаете что) всё знаете, можете перейти [прямо сюда](Дистрибутивы__которые_мы_выбираем.md#Прилавок). + +Приступим. + +Первое, что вам следует заучить как "Отче наш": + + _Ткаббер написан на **интерпретируемом языке программирования,** и это означает, что для работы ему нужен "движок", выполняющий программы этого самого языка — Tcl/Tk, а также необходимые библиотеки._ + +То есть, несмотря на некоторую техническую неточность, можно утверждать, что Ткаббер состоит из двух частей: + +* Интерпретатора языка Tcl, а также библиотек (Tk, Tcllib и BWidget — минимально необходимый набор); +* Самого кода Ткаббера. + +Этот самый "код Ткаббера", в принципе, самодостаточен в том смысле, что не зависит от операционный системы и является общим для всех систем, на которых работает Tcl/Tk. То есть, если на вашей системе уже установлен дистрибутив Tcl/Tk, вы можете произвольно менять сам код Ткаббера: к примеру, вытягивать его еженощно из [репозитория](http://tkabber.jabber.ru/svn). Или вы, скажем, можете просто перенести каталог с Ткаббером с Windows-машины на Linux-машину, и он будет там прекрасно работать. + +И именно "этот самый код..." и является основным дистрибутивом Ткаббера. + +К сожалению, Tcl/Tk поставляется в комплекте только с такими серьёзными операционными системами, как Linux или FreeBSD; пользователи Windows вынуждены скачивать дистрибутив Tcl/Tk из интернета или использовать альтернативные дистрибутивы Ткаббера, о которых рассказано ниже. + +Однако, многие (и не только в Windows) по разным причинам не хотят иметь дело с установкой этого "рантайма". Наиболее часто встречающаяся причина — вопрос трафика: дистрибутив Tcl/Tk под Windows "весит" примерно 20 мегабайт в архиве. Многие пользователи, обрадовавшись, что основной дистрибутив Ткаббера "весит" около 700 килобайт, бывают разочарованы, узнав, что "это ещё не всё". + +Вторая по частоте появления причина — желание использовать "Ткаббер на флэшке": обычно на "чужих" компьютерах (на работе, в университете и т.д.) нет возможности установить дистрибутив Tcl/Tk, и, следовательно, его нужно как-то "носить с собой". + +Итак, подведём первый промежуточный итог. У вас есть два варианта для работы с Ткаббером: + +1. Установить себе дистрибутив Tcl/Tk + необходимые библиотеки. +1. Скачать специальный дистрибутив Ткаббера, который "содержит в себе" микро-дистрибутив Tcl/Tk. + +Сравнение их отложим до поры, а пока окинем взглядом # "Самодостаточные" дистрибутивы Ткаббера -Есть, в общем, два подхода к созданию "вещи в себе" из программы, написанной на -Tcl: - -* Сделать инсталлятор, который устанавливает в систему как минимальный, (но - "настоящий") дистрибутив Tcl/Tk с необходимыми библиотеками, так и саму - программу; -* Использовать специальное средство под названием _tclkit (тиклькит),_ - позволяющее "завернуть" и программу, и Tcl/Tk, и необходимые библиотеки в - один файл — _старкит (starkit),_ который может быть исполняемым, и тогда - становится _старпаком (starpack)._ - -Ткаббер доступен в каждом из этих обличий. И если первое из них (надеемся) -вполне понятно, то второе, скорее всего, требует разъяснений. +Есть, в общем, два подхода к созданию "вещи в себе" из программы, написанной на Tcl: + +* Сделать инсталлятор, который устанавливает в систему как минимальный, (но "настоящий") дистрибутив Tcl/Tk с необходимыми библиотеками, так и саму программу; +* Использовать специальное средство под названием _tclkit (тиклькит),_ позволяющее "завернуть" и программу, и Tcl/Tk, и необходимые библиотеки в один файл — _старкит (starkit),_ который может быть исполняемым, и тогда становится _старпаком (starpack)._ + +Ткаббер доступен в каждом из этих обличий. И если первое из них (надеемся) вполне понятно, то второе, скорее всего, требует разъяснений. ## Tclkit, starkits и starpacks: немного теории ### Тиклькит -Tclkit был изобретён для решения проблемы быстрого и удобного размещения -программы, написанной на Tcl/Tk, на компьютере пользователя. Автор идеи, первой -реализации и лидер проекта — [Jean-Claude Wippler](http://wiki.tcl.tk/jcw), -официальный сайт тиклькита — [здесь](http://www.equi4.com/tclkit/). - -Тиклькит — это _один_ исполняемый файл небольшого размера (версия 8.4.13 для -Linux x86 "весит" примерно 1.5M), содержащий в себе: - -* интерпретатор языка Tcl; -* графическую библиотеку Tk; -* объектное расширение для тикля [incr Tcl]; -* библиотеку поддержки виртуальной файловой системы TclVFS; -* встроенную систему управления базами данных _Metakit._ - -Тиклькит не требует инсталляции и исполняет файлы специального формата — -старкиты. - -Скачать тиклькит для своей платформы можно -[отсюда](http://www.equi4.com/pub/tk/downloads.html), выбрав нужный пакет из -доступной матрицы. - -Итак, тиклькит это "движок". Посмотрим теперь на то, что он "приводит в -движение". +Tclkit был изобретён для решения проблемы быстрого и удобного размещения программы, написанной на Tcl/Tk, на компьютере пользователя. Автор идеи, первой реализации и лидер проекта — [Jean-Claude Wippler](http://wiki.tcl.tk/jcw), официальный сайт тиклькита — [здесь](http://www.equi4.com/tclkit/). + +Тиклькит — это _один_ исполняемый файл небольшого размера (версия 8.4.13 для Linux x86 "весит" примерно 1.5M), содержащий в себе: + +* интерпретатор языка Tcl; +* графическую библиотеку Tk; +* объектное расширение для тикля [incr Tcl]; +* библиотеку поддержки виртуальной файловой системы TclVFS; +* встроенную систему управления базами данных _Metakit._ + +Тиклькит не требует инсталляции и исполняет файлы специального формата — старкиты. + +Скачать тиклькит для своей платформы можно [отсюда](http://www.equi4.com/pub/tk/downloads.html), выбрав нужный пакет из доступной матрицы. + +Итак, тиклькит это "движок". Посмотрим теперь на то, что он "приводит в движение". ### Старкиты -Старкит — это _один_ файл, представляющий собой базу данных (!) в формате -Metakit. Собственно данными этой базы являются файлы исходной программы, из -которой изготавливается тиклькит, файлы необходимых библиотек и произвольные -файлы данных. TclVFS из тиклькита делает так, что интерпретатор тикля (из этого -же тиклькита) считает, что работает с обычной файловой системой, а не базой -данных. - -Название "starkit" — это (довольно неуклюжий) акроним от "**St**and**A**lone -**R**untime, called Tcl**kit**" ("Самодостаточный исполняемый модуль, который -называется тиклькит"). - -Таким образом, вы можете скачать тиклькит под свою ОС, затем скачать старкит -Ткаббера и далее обновлять только его по мере выхода новых версий. - -Для запуска старкита Ткаббера на другой операционной системе вам понадобится -скачать тиклькит для неё. +Старкит — это _один_ файл, представляющий собой базу данных (!) в формате Metakit. Собственно данными этой базы являются файлы исходной программы, из которой изготавливается тиклькит, файлы необходимых библиотек и произвольные файлы данных. TclVFS из тиклькита делает так, что интерпретатор тикля (из этого же тиклькита) считает, что работает с обычной файловой системой, а не базой данных. + +Название "starkit" — это (довольно неуклюжий) акроним от "**St**and**A**lone **R**untime, called Tcl**kit**" ("Самодостаточный исполняемый модуль, который называется тиклькит"). + +Таким образом, вы можете скачать тиклькит под свою ОС, затем скачать старкит Ткаббера и далее обновлять только его по мере выхода новых версий. + +Для запуска старкита Ткаббера на другой операционной системе вам понадобится скачать тиклькит для неё. ### Старпаки -Старпак — это просто комбинация тиклькита для одной конкретной операционной -системы и старкита. - -Старпак обладает одним чудным свойством: он представляет собой _один -исполняемый файл, не требующий инсталляции._ - -К сожалению, при этом теряется одно из достоинств старкитов — независимость от -целевой платформы. - -Подробнее про [**Tkabber starpack**](Tkabber_starpack.md). +Старпак — это просто комбинация тиклькита для одной конкретной операционной системы и старкита. + +Старпак обладает одним чудным свойством: он представляет собой _один исполняемый файл, не требующий инсталляции._ + +К сожалению, при этом теряется одно из достоинств старкитов — независимость от целевой платформы. + +Подробнее про [Tkabber starpack](Tkabber_starpack.md). ## Назад, к Ткабберу! -Выше мы сказали, что Ткаббер доступен в виде каждой из разновидностей -"самодостаточных" дистрибутивов. - -Итак, настало время поприветствовать наших красавиц! - -##### [Tkabber-Starkit](http://tkabber.jabber.ru/node/73)  -> Старкит. Требует наличия тиклькита для вашей ОС. - -##### [Tkabber-Starpack](http://tkabber.jabber.ru/node/160)  -> Старпак. Для запуска не требует ничего. +Выше мы сказали, что Ткаббер доступен в виде каждой из разновидностей "самодостаточных" дистрибутивов. + +Итак, настало время поприветствовать наших красавиц! + + [Tkabber-Starkit](http://tkabber.jabber.ru/node/73)  + + Старкит. Требует наличия тиклькита для вашей ОС. + + [Tkabber-Starpack](http://tkabber.jabber.ru/node/160)  + + Старпак. Для запуска не требует ничего. ### Tkabber-pack — особая песня -Если помните, одним из вариантов дистрибутива "всё в одном" был инсталлятор, -устанавливающий в систему минимальный дистрибутив Tcl/Tk, необходимые -библиотеки и саму программу. - -Когда-то это задачу решал Ткаббер-пак. - -Однако, начиная с версии 0.9.9, _официальный_ Ткаббер-пак больше не содержит в -себе микродистрибутива Tcl/Tk; автор предлагает использовать его вместе с -"полным" дистрибутивом этого языка. - -С другой стороны, существует _неофициальная_ модификация Ткаббер-пака, -содержащая Tcl/Tk. О ней будет рассказано ниже. +Если помните, одним из вариантов дистрибутива "всё в одном" был инсталлятор, устанавливающий в систему минимальный дистрибутив Tcl/Tk, необходимые библиотеки и саму программу. + +Когда-то это задачу решал Ткаббер-пак. + +Однако, начиная с версии 0.9.9, _официальный_ Ткаббер-пак больше не содержит в себе микродистрибутива Tcl/Tk; автор предлагает использовать его вместе с "полным" дистрибутивом этого языка. + +С другой стороны, существует _неофициальная_ модификация Ткаббер-пака, содержащая Tcl/Tk. О ней будет рассказано ниже. # Быстрее! Выше! Сильнее! -Ткаббер написан таким образом, что может использовать различные _модули_ для -Tcl/Tk (которые мы называем "расширениями"), если они доступны (установлены). - -Несмотря на то, что ни одно из расширений не требуется для нормальной работы -Ткаббера, некоторые из них _очень_ полезны, и даже рассматриваются многими как -необходимые. - -Важно понимать, что эти модули не являются частью Ткаббера; их необходимо -устанавливать отдельно. Они могут поставляться вместе с вашей ОС или вашим -дистрибутивом Tcl/Tk, а возможно, устанавливать их вам придётся "руками". -Посему, не исключено, что вопрос наличия тех или иных модулей в "готовом" виде, -или тот факт, что они поставляются "внутри" некоторого дистрибутива Ткаббера, -может сыграть решающую роль в вашем выборе. - -Здесь мы рассмотрим доступные модули Tcl/Tk, которые может использовать -Ткаббер, чтобы учитывать это при сравнении дистрибутивов Ткаббера. - -![(!)](../images/Hammer.png) **Сделать:** рассказать про модули + доступность -каждого модуля). Возможно, просто отослать к соотв. таблице на офсайте +Ткаббер написан таким образом, что может использовать различные _модули_ для Tcl/Tk (которые мы называем "расширениями"), если они доступны (установлены). + +Несмотря на то, что ни одно из расширений не требуется для нормальной работы Ткаббера, некоторые из них _очень_ полезны, и даже рассматриваются многими как необходимые. + +Важно понимать, что эти модули не являются частью Ткаббера; их необходимо устанавливать отдельно. Они могут поставляться вместе с вашей ОС или вашим дистрибутивом Tcl/Tk, а возможно, устанавливать их вам придётся "руками". Посему, не исключено, что вопрос наличия тех или иных модулей в "готовом" виде, или тот факт, что они поставляются "внутри" некоторого дистрибутива Ткаббера, может сыграть решающую роль в вашем выборе. + +Здесь мы рассмотрим доступные модули Tcl/Tk, которые может использовать Ткаббер, чтобы учитывать это при сравнении дистрибутивов Ткаббера. + +![(!)](../images/Hammer.png) **Сделать:** рассказать про модули + доступность каждого модуля). Возможно, просто отослать к соотв. таблице на офсайте # Прилавок -Пробежимся по доступным дистрибутивам Ткаббера, имеющим статус официальных, -давая краткие пояснения: - -##### Ткаббер из состава ОС  -> Проверьте, возможно, что Ткаббер входит в состав вашей ОС! К примеру, он - входит в состав [Debian GNU/Linux](http://www.debian.org), - [Gentoo](http://www.gentoo.org), [Mandrake](http://www.mandrakelinux.com/), - [FreeBSD](http://www.freebsd.org). Возможно, есть и в других POSIX-системах. - -##### ["Просто Ткаббер"](http://www.jabberstudio.org/projects/tkabber/releases/)  -> Официальный _стабильный_ дистрибутив ткаббера. На [официальном - сайте](http://tkabber.jabber.ru/download) он называется "Source Package". Для - работы требует наличия в системе дистрибутива Tcl/Tk и необходимых библиотек - (Tcllib и BWidget). Не содержит опциональных расширений. Поствляется в виде - двух архивов: собственно Ткаббер и плагины к нему. - -##### [Ткаббер с SVN](http://tkabber.jabber.ru/node/55) -> Это — для любителей "быть на переднем крае" и разработчиков. Эта версия - _нестабильна,_ то есть вообще не обязана работать. - -##### [Tkabber-pack](http://tkabber.jabber.ru/tkabber-pack) -> Это — инсталлятор для Windows, содержащий Ткаббер, плагины к нему, а так же - наиболее полезные расширения. _**Внимание, будьте бдительны:** этот - дистрибутив **не** включает в себя Tcl/Tk!_ Точнее говоря, он включал Tcl/Tk, - но только до версии Ткаббера 0.9.8. Начиная с 0.9.9 — уже не включает. (Если - вам нужен Ткаббер-пак с тиклем внутри, обратите внимание на "TkabberOTC", - который описан ниже, в разделе - [**"Рукоделие"**](#Рукоделие). - -##### [Tkabber-Starkit](http://tkabber.jabber.ru/node/73) -> Это — старкит Ткаббера. Требует для работы [тиклькит под вашу ОС](http://www.equi4.com/pub/tk/downloads.html). - _**Внимание!** имеющийся старкит сильно устарел (версия 0.9.7) и не рекомендуется к использованию._ - -##### [Tkabber-Starpack](http://tkabber.jabber.ru/node/160)  -> Это — старпак Ткаббера. Имеются версии под Linux x86 и Windows. Включает - наиболее полезные расширения Ткаббера. Для работы не требует абсолютно ничего. +Пробежимся по доступным дистрибутивам Ткаббера, имеющим статус официальных, давая краткие пояснения: + + Ткаббер из состава ОС  + + Проверьте, возможно, что Ткаббер входит в состав вашей ОС! К примеру, он входит в состав [Debian GNU/Linux](http://www.debian.org), [Gentoo](http://www.gentoo.org), [Mandrake](http://www.mandrakelinux.com/), [FreeBSD](http://www.freebsd.org). Возможно, есть и в других POSIX-системах. + + ["Просто Ткаббер"](http://www.jabberstudio.org/projects/tkabber/releases/)  + + Официальный _стабильный_ дистрибутив ткаббера. На [официальном сайте](http://tkabber.jabber.ru/download) он называется "Source Package". Для работы требует наличия в системе дистрибутива Tcl/Tk и необходимых библиотек (Tcllib и BWidget). Не содержит опциональных расширений. Поствляется в виде двух архивов: собственно Ткаббер и плагины к нему. + + [Ткаббер с SVN](http://tkabber.jabber.ru/node/55)  + + Это — для любителей "быть на переднем крае" и разработчиков. Эта версия _нестабильна,_ то есть вообще не обязана работать. + + [Tkabber-pack](http://tkabber.jabber.ru/tkabber-pack)  + + Это — инсталлятор для Windows, содержащий Ткаббер, плагины к нему, а так же наиболее полезные расширения. _**Внимание, будьте бдительны:** этот дистрибутив **не** включает в себя Tcl/Tk!_ Точнее говоря, он включал Tcl/Tk, но только до версии Ткаббера 0.9.8. Начиная с 0.9.9 — уже не включает. (Если вам нужен Ткаббер-пак с тиклем внутри, обратите внимание на "TkabberOTC", который описан ниже, в разделе ["Рукоделие"](Дистрибутивы__которые_мы_выбираем.md#Рукоделие). + + [Tkabber-Starkit](http://tkabber.jabber.ru/node/73)  + + Это — старкит Ткаббера. Требует для работы [тиклькит под вашу ОС](http://www.equi4.com/pub/tk/downloads.html). _**Внимание!** имеющийся старкит сильно устарел (версия 0.9.7) и не рекомендуется к использованию._ + + [Tkabber-Starpack](http://tkabber.jabber.ru/node/160)  + + Это — старпак Ткаббера. Имеются версии под Linux x86 и Windows. Включает наиболее полезные расширения Ткаббера. Для работы не требует абсолютно ничего. ## Рукоделие -В силу языка своей реализации Ткаббер довольно лекго поддаётся изменениям. -Также не представляет сложностей изменение готового старкита или старпака. -Поэтому существует несколько неофициальных дистрибутивов. Перечислим те, о -которых знаем: - -##### [Старпак с поддержкой сжатия](ftp://netbsd.rusc.ru/tkabber/tkabber-starpack_0.9.9-win32+zlib+img.exe)  -> Официальный стапак под Win32, в который [**Kostix**](Участник_Kostix.md) добавил - поддержку сжатия, а также возможность подгружать - [старкит пакета Img](http://mini.net/sdarchive/img.kit), позволяющий работать с картинками в - формате JPEG, PNG и другими. Подробности — - [**здесь**](Low_traffic_HOWTO.md#Старпаки_Ткаббера). - -##### [Tkabber-pack toon'а](http://lfor.narod.ru/)  -> Ткаббер-пак под Windows. Содержит некие изменения, о которых автор ленится - написать. Основная идея: минимизировать трафик, требуемый для получения - обновлений. С этой целью всё пожато архиватором 7zip, а новые версии Ткаббера - распространяются в виде апдейтов. - -##### [TkabberOTC](http://wiki.omsktele.com/index.php/TkabberOTC)  -> Ткаббер-пак от админов провайдера "Омские Телекоммуникации". Допилен на - предмет более глубокой русификации + другие изменения. Читайте официальную - страницу. _Включает минимальный дистрибутив Tcl/Tk._ - -##### [Tkabber-SK](http://sourceforge.net/projects/tkabber-sk/)  -> Этакий "форк" от SVN-версии Ткаббера за конец декабря 2006 года. Автор — - `xmpp:tomasz@mastahizm.mooo.com`. В эту версию добавлены разные интересные и - не очень штуки (подробности читайте в чейнджлогах на странице проекта). Мы - пригласили автора к сотрудничеству с разработчиками, так как некоторые из его - фич могут запросто попасть в транк. Да и вообще незачем распылять силы. Фичи, - которые в транк не попадут, он вроде обещал выложить в виде патчей на - английской версии соответствующего раздела. - -##### [Страница Ткаббера на Tcl Wiki](http://wiki.tcl.tk/11080)  -> Содержит ссылки на как минимум два старкита. За подробностями идите по ссылке. +В силу языка своей реализации Ткаббер довольно лекго поддаётся изменениям. Также не представляет сложностей изменение готового старкита или старпака. Поэтому существует несколько неофициальных дистрибутивов. Перечислим те, о которых знаем: + + [Старпак с поддержкой сжатия](ftp://netbsd.rusc.ru/tkabber/tkabber-starpack_0.9.9-win32+zlib+img.exe)  + + Официальный стапак под Win32, в который [Kostix](Участник_Kostix.md) добавил поддержку сжатия, а также возможность подгружать [старкит пакета Img](http://mini.net/sdarchive/img.kit), позволяющий работать с картинками в формате JPEG, PNG и другими. Подробности — [здесь](Low_traffic_HOWTO.md#Старпак_Ткаббера_Win32). + + [Tkabber-pack toon'а](http://lfor.narod.ru/)  + + Ткаббер-пак под Windows. Содержит некие изменения, о которых автор ленится написать. Основная идея: минимизировать трафик, требуемый для получения обновлений. С этой целью всё пожато архиватором 7zip, а новые версии Ткаббера распространяются в виде апдейтов. + + [TkabberOTC](http://wiki.omsktele.com/index.php/TkabberOTC)  + + Ткаббер-пак от админов провайдера "Омские Телекоммуникации". Допилен на предмет более глубокой русификации + другие изменения. Читайте официальную страницу. _Включает минимальный дистрибутив Tcl/Tk._ + + [Tkabber-SK](http://sourceforge.net/projects/tkabber-sk/)  + + Этакий "форк" от SVN-версии Ткаббера за конец декабря 2006 года. Автор — `xmpp:tomasz@mastahizm.mooo.com`. В эту версию добавлены разные интересные и не очень штуки (подробности читайте в чейнджлогах на странице проекта). Мы пригласили автора к сотрудничеству с разработчиками, так как некоторые из его фич могут запросто попасть в транк. Да и вообще незачем распылять силы. Фичи, которые в транк не попадут, он вроде обещал выложить в виде патчей на английской версии соответствующего раздела. + + [Страница Ткаббера на Tcl Wiki](http://wiki.tcl.tk/11080)  + + Содержит ссылки на как минимум два старкита. За подробностями идите по ссылке. # Кто сильнее: кит или пак? (Что выбрать?) -> _Какой же я могу, сеньора, -> Подать совет там, где решает -> Единственно ваш личный вкус?_ - -> _[Лопе Де Вега. "Собака на сене"](http://www.lib.ru/DEVEGA/vega2.txt)_ - -Изложенное здесь есть частное мнение авторов статьи, которое не обязано -совпадать с вашим, так что имейте в виду известный девиз: _"на наше мнение -можно положить(ся)"_ © [AG.ru](http://www.ag.ru). Включайте голову, изучайте и -делайте свой выбор. - -Совокупность доступных дистрибутивов воплощает в жизнь принцип -"камень-ножницы-бумага": решения, идеального по всем возможным параметрам, не -существует. Поэтому мы постараемся описать эти параметры и дать минимальные -рекоммендации. - -Полезно понимать, что стандартно запущенный Ткаббер хранит свои настройки в -домашнем каталоге пользователя, то есть эти настройки разделяются всеми копиями -Ткаббера в системе (если только вы или разработчик не приняли мер против -этого), поэтому вам ничего не мешает иметь несколько копий Ткаббера в системе, -даже совершенно различных по идеологии, к примеру, пару старпаков, восемь -старкитов, "просто Ткаббер" и Ткаббер с SVN. Они будут жить дружно, поэтому не -бойтесь экспериментировать. - -Следует иметь в виду, сравнивая дистрибутивы: - -> _Важен может быть не только тип дистрибутива, но и наличие в нём (или для - него) готовых расширений, а также возможность изменять дистрибутив (к - примеру, накладывать неофициальные патчи)._ +Какой же я могу, сеньора, + Подать совет там, где решает + Единственно ваш личный вкус? + +[Лопе Де Вега. "Собака на сене"](http://www.lib.ru/DEVEGA/vega2.txt) + +Изложенное здесь есть частное мнение авторов статьи, которое не обязано совпадать с вашим, так что имейте в виду известный девиз: _"на наше мнение можно положить(ся)"_ © [AG.ru](http://www.ag.ru). Включайте голову, изучайте и делайте свой выбор. + +Совокупность доступных дистрибутивов воплощает в жизнь принцип "камень-ножницы-бумага": решения, идеального по всем возможным параметрам, не существует. Поэтому мы постараемся описать эти параметры и дать минимальные рекоммендации. + +Полезно понимать, что стандартно запущенный Ткаббер хранит свои настройки в домашнем каталоге пользователя, то есть эти настройки разделяются всеми копиями Ткаббера в системе (если только вы или разработчик не приняли мер против этого), поэтому вам ничего не мешает иметь несколько копий Ткаббера в системе, даже совершенно различных по идеологии, к примеру, пару старпаков, восемь старкитов, "просто Ткаббер" и Ткаббер с SVN. Они будут жить дружно, поэтому не бойтесь экспериментировать. + +Следует иметь в виду, сравнивая дистрибутивы: + + _Важен может быть не только тип дистрибутива, но и наличие в нём (или для него) готовых расширений, а также возможность изменять дистрибутив (к примеру, накладывать неофициальные патчи)._ ## "Каноническая" установка: Tcl/Tk + Ткаббер -Вначале рассмотрим вариант с наличием полноценного дистрибутива Tcl/Tk в -системе. +Вначале рассмотрим вариант с наличием полноценного дистрибутива Tcl/Tk в системе. ### Осевой вариант -Выбор авторов статьи (при этих словах вы должны представлять себе везде седых и -лысых везде, где не седы, старцев с хитрым прищуром мудрых глаз) — "дистрибутив -из вашей ОС". Действительно ли вам нужна Самая Последняя Версия? Признайтесь -себе: вы знаете чем она отличается от предыдущей? Есть ли в версии из вашего -дистрибутива Ужасные Баги, С Которыми Вы Не Можете Жить? Имейте в виду мудрый -принцип: "не сломалось — не чини". - -Кроме того, данный подход имеет другие достоинства: - -* Стандартный пакет означает стандартный подход к управлению ПО. Вы всегда - знаете, "чей это файл", можете удалить пакет, а ещё он обновится вместе с - дистрибутивом в ходе очередного апгрейда. -* Если вам повезло с мейнтейнером пакета, ваша пакетная система не только - поставит вам всё, от чего зависит Ткаббер, но и предложит поставить то, с - чем он любит работать. - -Безусловно, если в вашей системе есть Ткаббер, то в ней, как минимум, есть -дистрибутив Tcl/Tk и набор необходимых Ткабберу компонентов. - -Имейте, однако, в виду, что "Ткаббер из ОС" это, в основном, роскошь -линуксоидов и эээ... пользователей FreeBSD. Адептам Windows предлагается -изучить альтернативы. - -Больше всех, пожалуй, повезло пользователям [Debian GNU/Linux](http://www.debian.org): -один из разработчиков Ткаббера (`xmpp:sgolovan@nes.ru`) является пользователем этой ОС -и поддерживает [собственный репозиторий пакетов](http://sgolovan.nes.ru/jabber/), -содержащий, помимо прочего, готовые пакеты с наиболее полезными расширениями -для Ткаббера. Так что любителям Дебиана достаточно вписать себе в **sources.list** -дополнительный репозиторий и наслаждаться. - -В любом случае, почти со стопроцентной уверенностью можно сказать, что -дистрибутив Tcl и Tk есть в любой "десктопной" POSIX-системе. О том, что -делать, когда его нет, читайте ниже. - -Если ваша система не имеет дистрибутива Ткаббера, но имеет дистрибутив Tcl/Tk, -возможно, следует просто скачать стандартный дистрибутив Ткаббера ("исходники") -и развернуть его куда-нибудь под **/usr/local/share**. +Выбор авторов статьи (при этих словах вы должны представлять себе везде седых и лысых везде, где не седы, старцев с хитрым прищуром мудрых глаз) — "дистрибутив из вашей ОС". Действительно ли вам нужна Самая Последняя Версия? Признайтесь себе: вы знаете чем она отличается от предыдущей? Есть ли в версии из вашего дистрибутива Ужасные Баги, С Которыми Вы Не Можете Жить? Имейте в виду мудрый принцип: "не сломалось — не чини". + +Кроме того, данный подход имеет другие достоинства: + +* Стандартный пакет означает стандартный подход к управлению ПО. Вы всегда знаете, "чей это файл", можете удалить пакет, а ещё он обновится вместе с дистрибутивом в ходе очередного апгрейда. +* Если вам повезло с мейнтейнером пакета, ваша пакетная система не только поставит вам всё, от чего зависит Ткаббер, но и предложит поставить то, с чем он любит работать. + +Безусловно, если в вашей системе есть Ткаббер, то в ней, как минимум, есть дистрибутив Tcl/Tk и набор необходимых Ткабберу компонентов. + +Имейте, однако, в виду, что "Ткаббер из ОС" это, в основном, роскошь линуксоидов и эээ... пользователей FreeBSD. Адептам Windows предлагается изучить альтернативы. + +Больше всех, пожалуй, повезло пользователям [Debian GNU/Linux](http://www.debian.org): один из разработчиков Ткаббера (`xmpp:sgolovan@nes.ru`) является пользователем этой ОС и поддерживает [собственный репозиторий пакетов](http://sgolovan.nes.ru/jabber/), содержащий, помимо прочего, готовые пакеты с наиболее полезными расширениями для Ткаббера. Так что любителям Дебиана достаточно вписать себе в **sources.list** дополнительный репозиторий и наслаждаться. + +В любом случае, почти со стопроцентной уверенностью можно сказать, что дистрибутив Tcl и Tk есть в любой "десктопной" POSIX-системе. О том, что делать, когда его нет, читайте ниже. + +Если ваша система не имеет дистрибутива Ткаббера, но имеет дистрибутив Tcl/Tk, возможно, следует просто скачать стандартный дистрибутив Ткаббера ("исходники") и развернуть его куда-нибудь под **/usr/local/share**. ### Windows: не бейсиком единым... -Сотрудники Майкрософт обладают достаточно извращённым вкусом в области языков -программирования. Поэтому в вашей Windows-системе есть минимум два бейсика и, -возможно, минимум одна джава. И ни одного тикля. Не исключено, что недостаток -внимания этой фирмы к данному языку сыграл последнему на пользу, избавив его от -смертельного дыхания -[одного известного принципа](http://en.wikipedia.org/wiki/Embrace_and_extend). -В любом случае, вас касается одна проблема: дистрибутива Tcl/Tk с Windows не -поставляется. - -Стандартом де-факто в области Tcl/Tk под Windows является дистрибутив от фирмы -[ActiveState](http://www.activestate.com), скачать который можно -[здесь](http://www.activestate.com/Products/ActiveTcl/). Как уверяют авторы, в -этом тикле "включены все батарейки", однако они лукавят: далеко не все -батарейки там есть. Выкачав 21 мег дистра, вы не получите, например, такой -элементарной вещи как [tcllib](http://tcllib.sourceforge.net/). Этот -дистрибутив имеет удобную справочную систему, программу **tkcon** и массу -других вещей, которая _может_ вам понадобиться (а может — и нет), например, в -windows-версиях включает в себя средства интеграции с -[Windows Script Host](http://ru.wikipedia.org/wiki/Windows_Script_Host). Какие-либо -инструментальные средства, облегчающие жизнь программиста, отсутствуют. Фирма -продаёт пакет TclDevKit, содержащий средства отладки и создания автономных -программ (последнее на базе технологии StarKit), и Komodo — универсальное IDE -для скриптовых языков, включающее средства визуального программирования -Tk-форм. - -[WinTclTk](http://sourceforge.net/projects/wintcltk) — более компактный, -активно развивающийся дистрибутив для Windows. В этот дистрибутив входят Tloona -IDE — среда разработки традиционного типа и ХOTclIde — среда -объектно-ориентированного программирования в стиле Smalltalk, обе — с -отладчиками. Также на сайте разработчиков свободно доступен пакет для создания -единого запускаемого файла TkWrapper основанный на FreeWrap — технологии, -альтернативной StarKit, основанной на простом ZIP-сжатии. - -> _Внимание!_ Если вы решили установить дистрибутив от - [ActiveState](http://www.activestate.com), настоятельно рекомендуется принять - к сведению два совета: - -* Ставьте стабильную версию (8.4.x и 8.5.x в настоящий момент). -* _**Не** ставьте_ версию 8.4.15 — она содержит пару неприятных проблем, - затрагивающих Ткаббер. - -Настало время поговорить по поводу "может". +Сотрудники Майкрософт обладают достаточно извращённым вкусом в области языков программирования. Поэтому в вашей Windows-системе есть минимум два бейсика и, возможно, минимум одна джава. И ни одного тикля. Не исключено, что недостаток внимания этой фирмы к данному языку сыграл последнему на пользу, избавив его от смертельного дыхания [одного известного принципа](http://en.wikipedia.org/wiki/Embrace_and_extend). В любом случае, вас касается одна проблема: дистрибутива Tcl/Tk с Windows не поставляется. + +Стандартом де-факто в области Tcl/Tk под Windows является дистрибутив от фирмы [ActiveState](http://www.activestate.com), скачать который можно [здесь](http://www.activestate.com/Products/ActiveTcl/). Как уверяют авторы, в этом тикле "включены все батарейки", однако они лукавят: далеко не все батарейки там есть. Выкачав 21 мег дистра, вы не получите, например, такой элементарной вещи как [tcllib](http://tcllib.sourceforge.net/). Этот дистрибутив имеет удобную справочную систему, программу **tkcon** и массу других вещей, которая _может_ вам понадобиться (а может — и нет), например, в windows-версиях включает в себя средства интеграции с [Windows Script Host](http://ru.wikipedia.org/wiki/Windows_Script_Host). Какие-либо инструментальные средства, облегчающие жизнь программиста, отсутствуют. Фирма продаёт пакет TclDevKit, содержащий средства отладки и создания автономных программ (последнее на базе технологии StarKit), и Komodo — универсальное IDE для скриптовых языков, включающее средства визуального программирования Tk-форм. + +[WinTclTk](http://sourceforge.net/projects/wintcltk) — более компактный, активно развивающийся дистрибутив для Windows. В этот дистрибутив входят Tloona IDE — среда разработки традиционного типа и ХOTclIde — среда объектно-ориентированного программирования в стиле Smalltalk, обе — с отладчиками. Также на сайте разработчиков свободно доступен пакет для создания единого запускаемого файла TkWrapper основанный на FreeWrap — технологии, альтернативной StarKit, основанной на простом ZIP-сжатии. + + _Внимание!_ Если вы решили установить дистрибутив от [ActiveState](http://www.activestate.com), настоятельно рекомендуется принять к сведению два совета: + +* Ставьте стабильную версию (8.4.x и 8.5.x в настоящий момент). +* _**Не** ставьте_ версию 8.4.15 — она содержит пару неприятных проблем, затрагивающих Ткаббер. + +Настало время поговорить по поводу "может". ### Дистрибутив Tcl/Tk в системе: pros et contras -Два основных "за" наличие дистрибутива в системе: - -* _Расширение возможностей системы_ — вам становится доступен мощный и в то же - время лёгкий в изучении язык программирования. Возможно, вы захотите - использовать его. Кроме того, _на Ткаббере свет клином не сошёлся_ — в мире - хватает хороших программ, написанных на тикле; устанавливая дистрибутив - Tcl/Tk, вы даёте себе возможность использовать их без дополнительного - "геморроя". -* _Работа с кодом Ткаббера._ По разным причинам у вас может возникнуть - желание/необходимость работать непосредственно с кодом Ткаббера. Вот эти - причины: - * Вы хотите быть "на переднем крае" разработки и иметь версию, отражающую - текущее состояние репозитория SVN. - * Вы хотите накладывать на Ткаббер неофициальные и экспериментальные патчи, - или патчи, которые не принимают в основную ветку разработки. - * Вы хотите ковыряться с кодом Ткаббера (пусть даже и в режиме "только - чтение", например, изучения ради), а то и участвовать в разработке. - -Несмотря на то, что всё это технически можно делать и со старкитом/старпаком, -при наличии дистрибутива Tcl/Tk это делать значительно проще. - -Наличие "микро-дистрибутива" в Ткаббер-паке также может быть обманчивым: этот -дистрибутив, как правило, урезан до максимально возможного уровня, а новые -"фичи", добавленные разработчиками в последнюю версию Ткаббера, которую вы -хотите потестировать, могут потребовать тех самых "отрезанных" возможностей -тикля. (Для справки: именно с такой проблемой сталкивались некоторые владельцы -Ткаббер-пака 0.9.8, пытаясь "завести" на своей системе скачанный "основной -дистрибутив" версии 0.9.9). - -Ради сохранения баланса Силы, скрепя сердце, приведём и два основных "против": - -* _Интернет-трафик._ Под Windows скачивание 20-мегабайтного архива из Интернет - — единственная возможность получить полноценный дистрибутив Tcl/Tk. На - POSIX-системах, возможно, также потребуется качать нужные пакеты. -* _Борьба за "чистоту рядов"._ Некоторые пользователи (чрезмерно) ревниво - относятся к "чистоте" своей системы и противятся установке любого "ах, ещё - одного языка программирования!". - -Иногда, впрочем, установка дистрибутива Tcl/Tk не только нежелательна, но и -невозможна. Если это — ваш случай или, читая предыдущие строчки, вы решили -встать на тёмную сторону Силы, следующий раздел — для вас. +Два основных "за" наличие дистрибутива в системе: + +* _Расширение возможностей системы_ — вам становится доступен мощный и в то же время лёгкий в изучении язык программирования. Возможно, вы захотите использовать его. Кроме того, _на Ткаббере свет клином не сошёлся_ — в мире хватает хороших программ, написанных на тикле; устанавливая дистрибутив Tcl/Tk, вы даёте себе возможность использовать их без дополнительного "геморроя". +* _Работа с кодом Ткаббера._ По разным причинам у вас может возникнуть желание/необходимость работать непосредственно с кодом Ткаббера. Вот эти причины: + * Вы хотите быть "на переднем крае" разработки и иметь версию, отражающую текущее состояние репозитория SVN. + * Вы хотите накладывать на Ткаббер неофициальные и экспериментальные патчи, или патчи, которые не принимают в основную ветку разработки. + * Вы хотите ковыряться с кодом Ткаббера (пусть даже и в режиме "только чтение", например, изучения ради), а то и участвовать в разработке. + +Несмотря на то, что всё это технически можно делать и со старкитом/старпаком, при наличии дистрибутива Tcl/Tk это делать значительно проще. + +Наличие "микро-дистрибутива" в Ткаббер-паке также может быть обманчивым: этот дистрибутив, как правило, урезан до максимально возможного уровня, а новые "фичи", добавленные разработчиками в последнюю версию Ткаббера, которую вы хотите потестировать, могут потребовать тех самых "отрезанных" возможностей тикля. (Для справки: именно с такой проблемой сталкивались некоторые владельцы Ткаббер-пака 0.9.8, пытаясь "завести" на своей системе скачанный "основной дистрибутив" версии 0.9.9). + +Ради сохранения баланса Силы, скрепя сердце, приведём и два основных "против": + +* _Интернет-трафик._ Под Windows скачивание 20-мегабайтного архива из Интернет — единственная возможность получить полноценный дистрибутив Tcl/Tk. На POSIX-системах, возможно, также потребуется качать нужные пакеты. +* _Борьба за "чистоту рядов"._ Некоторые пользователи (чрезмерно) ревниво относятся к "чистоте" своей системы и противятся установке любого "ах, ещё одного языка программирования!". + + Иногда, впрочем, установка дистрибутива Tcl/Tk не только нежелательна, но и невозможна. Если это — ваш случай или, читая предыдущие строчки, вы решили встать на тёмную сторону Силы, следующий раздел — для вас. ## Всё своё ношу с собой -Собственно, преимущества и недостатки использования "завёрнутых" версий -Ткаббера примерно обратны использованию "канонической" установки. - -Плюсы: - -* _"Всё в одном"_ — Ткаббер-старпак представляет собой один выполняемый файл, - который нужно просто запустить. Ткаббер-старкит — два файла, которые тоже не - нужно не только куда-то ставить, но и даже распаковывать. -* При некотором (несложном) "допиливании" Ткаббер-старпак прекрасно умеет - работать с носимого устройства хранения данных, например, с флэш-драйва. То - же самое относится и к старкиту, только таскать нужно опять же два файла. -* Официальные старпаки содержат большинство самых полезных модулей Tcl/Tk, - расширяющих возможности Ткаббера — _отсутствие необходимости в - дополнительной установке расширений._ - -Минусы проистекают из всё той же "упакованности": - -* Любое изменение "внутренностей" старпака/старкита требует его - _"разворачивания" (unwrap)_ и последующего _"заворачивания" (wrap)_ - (подробнее эти процедуры обсуждаются [**здесь**](Tkabber_starpack.md)). Это вам - понадобится делать, если вы хотите: - * добавить модуль Tcl/Tk, расширяющий возможности Ткаббера, которого нет в - стандартной поставке старпака/старкита; - * наложить какой-либо патч. -* Официальные дистрибутивы Ткаббера — это стабильные релизы. Если вы хотите - быть "на переднем крае" разработки, но при этом использовать - старпак/старкит, то фактически вам придётся поддерживать свою версию такого - дистрибутива. - -![(!)](../images/Hammer.png) **Сделать:** Вообще-то, конечно, нужна обобщённая -статейка про старкиты и старпаки, со ссылкой на систему сборки бадлопа и -утилиту архимеда... +Собственно, преимущества и недостатки использования "завёрнутых" версий Ткаббера примерно обратны использованию "канонической" установки. + +Плюсы: + +* _"Всё в одном"_ — Ткаббер-старпак представляет собой один выполняемый файл, который нужно просто запустить. Ткаббер-старкит — два файла, которые тоже не нужно не только куда-то ставить, но и даже распаковывать. +* При некотором (несложном) "допиливании" Ткаббер-старпак прекрасно умеет работать с носимого устройства хранения данных, например, с флэш-драйва. То же самое относится и к старкиту, только таскать нужно опять же два файла. +* Официальные старпаки содержат большинство самых полезных модулей Tcl/Tk, расширяющих возможности Ткаббера — _отсутствие необходимости в дополнительной установке расширений._ + +Минусы проистекают из всё той же "упакованности": + +* Любое изменение "внутренностей" старпака/старкита требует его _"разворачивания" (unwrap)_ и последующего _"заворачивания" (wrap)_ (подробнее эти процедуры обсуждаются [здесь](Tkabber_starpack.md)). Это вам понадобится делать, если вы хотите: + * добавить модуль Tcl/Tk, расширяющий возможности Ткаббера, которого нет в стандартной поставке старпака/старкита; + * наложить какой-либо патч. + +* Официальные дистрибутивы Ткаббера — это стабильные релизы. Если вы хотите быть "на переднем крае" разработки, но при этом использовать старпак/старкит, то фактически вам придётся поддерживать свою версию такого дистрибутива. + +![(!)](../images/Hammer.png) **Сделать:** Вообще-то, конечно, нужна обобщённая статейка про старкиты и старпаки, со ссылкой на систему сборки бадлопа и утилиту архимеда... ### Ткаббер-пак опять идёт не в ногу -Нелишним будет снова повторить, что последний _официальный_ Ткаббер-пак больше -не содержит Tcl/Tk, поэтому фактически нам нужно рассматривать два воплощения -Ткаббер-пака: оснащённое Tcl/Tk и обделённое им. - -Преимущество Ткаббер-пака по сравнению со старпаками/старкитами Ткаббера -заключается в том, что его значительно легче _изменять_ — Ткаббер включён в -этот дистрибутив "как есть": не нужно ничего "разворачивать" и потом -"сворачивать" обратно для того, чтобы потестировать патч или почитать код. - -К недостаткам в сравнении со старпаками/старкитами, пожалуй, можно причислить -только то, что он занимает больше места (но зато и стартует быстрее). - -Ткаббер-пак, _оснащённый дистрибутивом Tcl/Tk,_ обладает таким же уровнем -мобильности как и старпак/старкит (например, умеет работать с флэш-драйва), и -привязан к конкретной ОС так же, как и старпак (нам известно только о -Windows-версиях Ткаббер-пака). Несмотря на то, что в подобном дистрибутиве есть -"настоящий" Tcl/Tk, относитесь к этому с определённым скепсисом: это достаточно -урезанная версия, содержащая только то, без чего не может обойтись Ткаббер. - -Может возникнуть вопрос: а в чём смысл Ткаббер-пака _без_ микро-дистрибутива -Tcl/Tk внутри? Ответ прост: Ткаббер-пак включает в себя наиболее полезные -пакеты Tcl/Tk, которые делают доступными дополнительные возможности Ткаббера. -Можете думать о нём как о "Ткаббере на стероидах". Естественно, можно скачать и -поставить дополнительные пакеты "руками", но зачем вам лишний труд? +Нелишним будет снова повторить, что последний _официальный_ Ткаббер-пак больше не содержит Tcl/Tk, поэтому фактически нам нужно рассматривать два воплощения Ткаббер-пака: оснащённое Tcl/Tk и обделённое им. + +Преимущество Ткаббер-пака по сравнению со старпаками/старкитами Ткаббера заключается в том, что его значительно легче _изменять_ — Ткаббер включён в этот дистрибутив "как есть": не нужно ничего "разворачивать" и потом "сворачивать" обратно для того, чтобы потестировать патч или почитать код. + +К недостаткам в сравнении со старпаками/старкитами, пожалуй, можно причислить только то, что он занимает больше места (но зато и стартует быстрее). + +Ткаббер-пак, _оснащённый дистрибутивом Tcl/Tk,_ обладает таким же уровнем мобильности как и старпак/старкит (например, умеет работать с флэш-драйва), и привязан к конкретной ОС так же, как и старпак (нам известно только о Windows-версиях Ткаббер-пака). Несмотря на то, что в подобном дистрибутиве есть "настоящий" Tcl/Tk, относитесь к этому с определённым скепсисом: это достаточно урезанная версия, содержащая только то, без чего не может обойтись Ткаббер. + +Может возникнуть вопрос: а в чём смысл Ткаббер-пака _без_ микро-дистрибутива Tcl/Tk внутри? Ответ прост: Ткаббер-пак включает в себя наиболее полезные пакеты Tcl/Tk, которые делают доступными дополнительные возможности Ткаббера. Можете думать о нём как о "Ткаббере на стероидах". Естественно, можно скачать и поставить дополнительные пакеты "руками", но зачем вам лишний труд? + + Index: wiki/ru/Заглавная_страница.md ================================================================== --- wiki/ru/Заглавная_страница.md +++ wiki/ru/Заглавная_страница.md @@ -1,142 +1,103 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php?title=Заглавная_страница&printable=yes) + # Заглавная страница Материал из Tkabber Wiki -> _<Существо> Клиент делался не для юзеров. -> А для тех, кто ценит функциональность и не боится руками работать._ - -> _(из xmpp:tkabber@conference.jabber.ru)_ - -Добро пожаловать на официальную страницу документации одного из самых продвинутых клиентов -протокола [Jabber (XMPP)](http://jabber.org) — [Tkabber](http://tkabber.jabber.ru). - -Давайте сразу договоримся, что в этом руководстве (по крайней мере в русской версии) писать -название программы будем русскими буквами: в конце концов, это отечественный продукт, да и -склонять по правилам русского языка проще ;) +Добро пожаловать на официальную страницу документации одного из самых продвинутых клиентов протокола [Jabber (XMPP)](http://jabber.org) — [Tkabber](http://tkabber.jabber.ru). + +Давайте сразу договоримся, что в этом руководстве (по крайней мере в русской версии) писать название программы будем русскими буквами: в конце концов, это отечественный продукт, да и склонять по правилам русского языка проще ;) ## Содержание -* [1 Содержание вики](#Содержание_вики) - * [1.1 Теория](#Теория) - * [1.2 Статьи](#Статьи) - * [1.3 Разработка](#Разработка) - * [1.4 Практика](#Практика) - * [1.5 Запчасти](#Запчасти) - * [1.6 Обсуждения](#Обсуждения) - * [1.7 Cлужебные](#Cлужебные) +* [1 Содержание](#Содержание) + * [1.1 [Теория](Теория.md)](#ТеорияТеория.md) + * [1.2 [Статьи](Теория.md#Продвинутым_пользователям)](#СтатьиТеория.mdNПродвинутым_пользователям) + * [1.3 [Разработка](Разработка.md)](#РазработкаРазработка.md) + * [1.4 [Практика](Практика.md)](#ПрактикаПрактика.md) + * [1.5 Запчасти](#Запчасти) + * [1.6 Обсуждения](#Обсуждения) + * [1.7 Cлужебные](#Cлужебные) * [2 Краткое описание некоторых статей](#Краткое_описание_некоторых_статей) * [3 О вики](#О_вики) -## Содержание вики -Для быстрого тематического поиска. Не забудьте, что полный список страниц можно -посмотреть [**тут**](Служебная/Все_страницы.md). - -### [Теория](Теория.md) - -* [**Терминология**](Терминология.md) -* [**О Ткаббере**](Ткаббер_-_чемпион_.md) -* [**Config.tcl для начинающих**](Config.tcl_для_начинающих.md) -* [**Начинающим**](Начинающим.md) -* [**Настройка Ткаббера: азы и глубже**](Настройка_Ткаббера__азы_и_глубже.md) -* [**Testimonials, Antimonials, And Eternal Questions**](Testimonials__Antimonials__And_Eternal_Questions.md) - -### [Статьи](Теория.md#Продвинутым_пользователям) - -* [**Пересылка файлов: теория**](Пересылка_файлов__теория.md) -* [**Удалённое управление с помощью send**](Удалённое_управление_с_помощью_send.md) -* [**Шифрование в Ткаббере**](Шифрование_в_Ткаббере.md) -* [**Ткаббер наизнанку**](Ткаббер_наизнанку.md) -* [**Сравнение XMPP-клиентов**](Сравнение_XMPP-клиентов.md) - -### [Разработка](Разработка.md) - -* [**Старпак своими руками**](Tkabber_starpack.md) -* [**Wish и русская раскладка в Windows**](Wish_и_русская_раскладка_в_Windows.md) -* [**MUC Ignore**](MUC_Ignore.md) -* [**Nick coloring**](Nick_coloring.md) -* [**Config dir**](Config_dir.md) -* [**Спамодавка списками приватности**](Спамодавка_списками_приватности.md) -* [**Новый вид Tk в 8.5**](Новый_вид_Tk_в_8.5.md) - -### [Практика](Практика.md) - -* [**Ткаббер ЧаВо**](Ткаббер_ЧаВо.md) -* [**Шрифты**](Шрифты.md) -* [**Смайлики и аватары**](Смайлики_и_аватары.md) -* [**Цветовые темы и пиктограммы**](Цветовые_темы_и_пиктограммы.md) -* [**Проблемы со звуком**](Проблемы_со_звуком.md) -* [**Звуковые схемы**](Звуковые_схемы.md) -* [**Нетривиальные настройки**](Нетривиальные_настройки.md) - -### Запчасти - -* [**Плагины**](Плагины.md) -* [**Патчи**](Патчи.md) - -### Обсуждения - -* [**Планы на будущее**](Планы_на_будущее.md) -* [**Плагины/AntiSPIM**](Плагины/AntiSPIM.md) -* [**Чебуратор**](Чебуратор.md) - -### Cлужебные - -[*Статистика*](Служебная/Статистика.md) :: [*Участники*](Служебная/Участники.md) :: [*Требуется*](Служебная/Требуется.md) - -## Краткое описание некоторых статей -* В статье [**"О Ткаббере"**](Ткаббер_-_чемпион_.md) мы пытаемся рассказать потенциальному - пользователю об основных плюсах и минусах (да-да, они тоже есть ;)) этого клиента. -* В разделе [**"Теория"**](Теория.md) вашему вниманию предложен ряд статей разного - уровня сложности, посвящённых различным аспектам работы с Ткаббером, начиная с - "Быстрого старта" и заканчивая попытками простым языком рассказать о довольно-таки - сложных вещах. Очень рекомендуется потихоньку ознакомиться со всеми статьями этого раздела. -* В разделе [**"Практика"**](Практика.md) вы найдёте полезные советы по "укрощению" - Ткаббера, а также описания различных патчей и плагинов, расширяющих его функциональность. - В общем, это для тех, кто любит ручной труд. -* [**"Ткаббер ЧаВо"**](Ткаббер_ЧаВо.md) — **Ча**сто задаваемые **Во**просы по Ткабберу - (или F.A.Q., если так будет привычнее). Здесь потихоньку собираются решения самых - распространённых проблем. -* Страница [**"Ссылки"**](Ссылки.md) — коллекция линков на внешние ресурсы, посвящённые - как самому Ткабберу, так и протоколу Jabber, языку, на котором Ткаббер - написан — [Tcl/Tk](http://tcl.tk) и прочим вещам, имеющим ко всему этому отношение. - -Ещё несколько ссылок на крупные разделы вики: - -* [**"Терминология"**](Терминология.md) — небольшой глоссарий, цель которого — облегчить - новичкам понимание некоторых терминов из сфер, сопряжённых с IM, Jabber, Tcl/Tk, программированием. -* [**"Плагины"**](Плагины.md) — раздел, посвящённый официальным и неофициальным - (самописным) плагинам к Ткабберу. -* [**"Патчи"**](Патчи.md) — тут речь идёт о правках кода Ткаббера, позволяющих расширить - его функциональность. -* [**"Pages"**](Pages.md) — этакий реестр статей этой вики (неполный). Создана для того, - чтобы можно было давать ссылки на статьи в конференциях и других местах, где не поддерживаются - тэги HTML. Например, вместо того, чтобы давать ссылку вида - **https://chiselapp.com/user/sgolovan/repository/tkabber-wiki/doc/tip/wiki/ru/%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B.md** - (далеко не самый жуткий вариант) можно добавить линк на неё на странице pages и дать уже эту ссылку: - **https://chiselapp.com/user/sgolovan/repository/tkabber-wiki/doc/tip/wiki/ru/Pages#plugins**. - Лишний клик окупается более внятным и коротким написанием. - -## О вики -По вопросам организации этой вики обращайтесь к [**Bigote**](Участник_Bigote.md) (русский, -английский, испанский, каталанский), [**Kostix**](Участник_Kostix.md) (русский, -английский) или [**LKnight**](Участник_Lknight.md) (русский, английский) — нас можно -найти также на вышеупомянутой конференции `xmpp:tkabber@conference.jabber.ru`. - -Работа над вики доступна для всех — регистрация свободна. Проект многоязычный, в настоящий -момент существует четыре языковые версии: русский, английский, испанский и украинский. -Если вы хотите перевести статьи вики на какой-либо другой язык, пожалуйста, свяжитесь с нами. -При работе над переводом вам поможет наша [**Справка**](Tkabber_Wiki_Справка.md). - -Если вы настроены серьёзно в плане помочь этой вики и Ткабберу мозгами и руками, просьба -ознакомиться с нашими [**планами на будущее**](Планы_на_будущее.md), чтобы не изобретать -велосипед. Если у вас есть свои идеи по части новшеств, которые вы хотите воплотить, -просьба добавлять их на той странице, чтобы они были видны остальным участникам проекта. -Если у вас нету опыта работы с вики, на странице [**Справки**](Tkabber_Wiki_Справка.md) -есть очень полезные ссылки на тему оформления тегов, ссылок и прочего. - -В последнее время нас спрашивают, who is who в конференции и на вики. Старожил конференции -и один из основателей вики [**Bigote**](Участник_Bigote.md) готов рассказать -вам [**историю их создания**](История_вики.md), если вы не пожалеете для старика пинты -пива — промочить глотку ;-D +# Содержание +Для быстрого тематического поиска. Не забудьте, что полный список страниц можно посмотреть [тут.](Служебная_AllPages.md) + +## [Теория](Теория.md) + +* [Терминология](Терминология.md) +* [о Ткаббере](Ткаббер_-_чемпион_.md) +* [Config.tcl для начинающих](Config.tcl_для_начинающих.md) +* [Начинающим](Начинающим.md) +* [Настройка Ткаббера: азы и глубже](Настройка_Ткаббера__азы_и_глубже.md) +* [Testimonials, Antimonials, And Eternal Questions](Testimonials__Antimonials__And_Eternal_Questions.md) + +## [Статьи](Теория.md#Продвинутым_пользователям) + +* [Пересылка файлов: теория](Пересылка_файлов__теория.md) +* [Удалённое управление с помощью send](Удалённое_управление_с_помощью_send.md) +* [Шифрование в Ткаббере](Шифрование_в_Ткаббере.md) +* [Ткаббер наизнанку](Ткаббер_наизнанку.md) +* [Сравнение XMPP-клиентов](Сравнение_XMPP-клиентов.md) + +## [Разработка](Разработка.md) + +* [Старпак своими руками](Tkabber_starpack.md) +* [Wish и русская раскладка в Windows](Wish_и_русская_раскладка_в_Windows.md) +* [MUC Ignore](MUC_Ignore.md) +* [Nick coloring](Nick_coloring.md) +* [Config dir](Config_dir.md) +* [Спамодавка списками приватности](Спамодавка_списками_приватности.md) +* [Новый вид Tk в 8.5](Новый_вид_Tk_в_8.5.md) + +## [Практика](Практика.md) + +* [Ткаббер ЧаВо](Ткаббер_ЧаВо.md) +* [Шрифты](Шрифты.md) +* [Смайлики и аватары](Смайлики_и_аватары.md) +* [Цветовые темы и пиктограммы](Цветовые_темы_и_пиктограммы.md) +* [Проблемы со звуком](Проблемы_со_звуком.md) +* [Звуковые схемы](Звуковые_схемы.md) +* [Нетривиальные настройки](Нетривиальные_настройки.md) + +## Запчасти + +* [Плагины](Плагины.md) +* [Патчи](Патчи.md) + +## Обсуждения + +* [Планы на будущее](Планы_на_будущее.md) +* [Плагины/AntiSPIM](Плагины/AntiSPIM.md) +* [Чебуратор](Чебуратор.md) + +## Cлужебные + +[Статистика](Служебная_Statistics.md) :: [Участники](Служебная_ListUsers.md) :: [Требуется](Служебная_WantedPages.md) + +# Краткое описание некоторых статей +* В статье **["О Ткаббере"](Ткаббер_-_чемпион_.md)** мы пытаемся рассказать потенциальному пользователю об основных плюсах и минусах (да-да, они тоже есть ;)) этого клиента. +* В разделе **["Теория"](Теория.md)** вашему вниманию предложен ряд статей разного уровня сложности, посвящённых различным аспектам работы с Ткаббером, начиная с "Быстрого старта" и заканчивая попытками простым языком рассказать о довольно-таки сложных вещах. Очень рекомендуется потихоньку ознакомиться со всеми статьями этого раздела. +* В разделе **["Практика"](Практика.md)** вы найдёте полезные советы по "укрощению" Ткаббера, а также описания различных патчей и плагинов, расширяющих его функциональность. В общем, это для тех, кто любит ручной труд. +* **["Ткаббер ЧаВо"](Ткаббер_ЧаВо.md)** — **Ча**сто задаваемые **Во**просы по Ткабберу (или F.A.Q., если так будет привычнее). Здесь потихоньку собираются решения самых распространённых проблем. +* Страница **["Ссылки"](Ссылки.md)** — коллекция линков на внешние ресурсы, посвящённые как самому Ткабберу, так и протоколу Jabber, языку, на котором Ткаббер написан — [Tcl/Tk](http://tcl.tk) и прочим вещам, имеющим ко всему этому отношение. + +Ещё несколько ссылок на крупные разделы вики: + +* **["Терминология"](Терминология.md)** — небольшой глоссарий, цель которого — облегчить новичкам понимание некоторых терминов из сфер, сопряжённых с IM, Jabber, Tcl/Tk, программированием. +* **["Плагины"](Плагины.md)** — раздел, посвящённый официальным и неофициальным (самописным) плагинам к Ткабберу. +* **["Патчи"](Патчи.md)** — тут речь идёт о правках кода Ткаббера, позволяющих расширить его функциональность. +* **["Pages"](Pages.md)** — этакий реестр статей этой вики (неполный). Создана для того, чтобы можно было давать ссылки на статьи в конференциях и других местах, где не поддерживаются тэги HTML. Например, вместо того, чтобы давать ссылку вида http://ru.tkabber.jabe.ru/index.php/%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B (далеко не самый жуткий вариант) можно добавить линк на неё на странице pages и дать уже эту ссылку: **http://tkabber.jabe.ru/index.php/pages\#plugins**. Лишний клик окупается более внятным и коротким написанием. + +# О вики +По вопросам организации этой вики обращайтесь к [Участник:bigote](Участник_Bigote.md) (русский, английский, испанский, каталанский), [Участник:kostix](Участник_Kostix.md) (русский, английский) или [Участник:lknight](Участник_Lknight.md) (русский, английский) — нас можно найти также на вышеупомянутой конференции `xmpp:tkabber@conference.jabber.ru`. + +Работа над вики доступна для всех — регистрация свободна. Проект многоязычный, в настоящий момент существует четыре языковые версии: русский, английский, испанский и украинский. Если вы хотите перевести статьи вики на какой-либо другой язык, пожалуйста, свяжитесь с нами. При работе над переводом вам поможет наша **[Справка](Tkabber_Wiki_Справка.md).** + +Если вы настроены серьёзно в плане помочь этой вики и Ткабберу мозгами и руками, просьба ознакомиться с нашими **[планами на будущее](Планы_на_будущее.md)**, чтобы не изобретать велосипед. Если у вас есть свои идеи по части новшеств, которые вы хотите воплотить, просьба добавлять их на той странице, чтобы они были видны остальным участникам проекта. Если у вас нету опыта работы с вики, на странице **[Справки](Tkabber_Wiki_Справка.md)** есть очень полезные ссылки на тему оформления тегов, ссылок и прочего. + +В последнее время нас спрашивают, who is who в конференции и на вики. Старожил конференции и один из основателей вики [Bigote](Участник_Bigote.md) готов рассказать вам [историю их создания](История_вики.md), если вы не пожалеете для старика пинты пива — промочить глотку ;-D + + Index: wiki/ru/Загрузка_настроек.md ================================================================== --- wiki/ru/Загрузка_настроек.md +++ wiki/ru/Загрузка_настроек.md @@ -1,73 +1,50 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Загрузка_настроек/index.html) + # Загрузка настроек Материал из Tkabber Wiki -## Хуки - -"Хуком" в Ткаббере называется некоторое _событие_ (условия наступления которого -строго оговорены и обычно отражены в названии хука), с которым связаны -_обработчики_ данного события. Некоторые события происходят лишь однократно в -ходе работы Ткаббера (например, "выход из программы"), другие — многократно -(например, "обработка нового входящего сообщения"). - -Механизм хуков предоставляет интерфейс для закрепления обработчиков за -соответствующими хуками. В качестве обработчиков выступают -_скрипты_1. - -С каждым обработчиком связан _приоритет,_ который определяет очерёдность -выполнения данного обработчика по отношению к остальным обработчикам данного -хука. Очерёдность выполнения обработчиков с одинаковым приоритетом не -определена. - -Приоритет обработчика задаётся в виде целого числа. Меньшее число означает -более высокий приоритет; обработчики вызываются в порядке уменьшения приоритета -(увеличения соответствующих чисел). - -Если приоритет не указан явно, обработчик получает _приоритет по умолчанию,_ -который равен 502. - -![(!)](../images/Hammer.png) **Сделать:** написать про "return stop" - -## Ход загрузки Ткаббера - -Процесс **wish**: - -1. Читает стартовый (главный) модуль Ткаббера, который: - 1. Грузит модуль, реализующий механизм работы с хуками. - 1. Определяет хуки **postload\_hook** и **finload\_hook**; вешает на каждый - хук по обработчику: процедуру **postload** на **postload\_hook** и - **finload** — на **finload\_hook**. - 1. Если определена переменная окружения **TKABBER\_SITE\_CONFIG**, читает - файл с названием, хранящимся в этой переменной окружения. - 1. Читает _конфиг пользователя_ — **~/.tkabber/config.tcl**. - 1. Грузит модуль, реализующий механизм работы с базой данных настроек (customize). - 1. Этот модуль регистрирует обработчик хука **postload\_hook** с - приоритетом **60**. Задача обработчика — прочитать настройки Ткаббера - из файла **~/.tkabber/custom.tcl**. - 1. Загружает [**плагины сайта**](Плагины.md#Плагинология). - 1. Загружает [**плагины пользователя**](Плагины.md#Плагинология). - 1. Выполняет зарегистрированные на данный момент обработчики хука - **postload\_hook** (при этом читается содержимое базы данных настроек). - 1. Загружает модуль **iface.tcl**, который - ![(!)](../images/Hammer.png) **Сделать:** написать - 1. Выполняет обработчики хука **finload\_hook**. -1. Переходит к выполнению главного цикла событий Tk, то есть начиная с этого - момента загрузка Ткаббера завершена. - -## Следствия +## Хуки + +"Хуком" в Ткаббере называется некоторое _событие_ (условия наступления которого строго оговорены и обычно отражены в названии хука), с которым связаны _обработчики_ данного события. Некоторые события происходят лишь однократно в ходе работы Ткаббера (например, "выход из программы"), другие — многократно (например, "обработка нового входящего сообщения"). + +Механизм хуков предоставляет интерфейс для закрепления обработчиков за соответствующими хуками. В качестве обработчиков выступают _скрипты_1. + +С каждым обработчиком связан _приоритет,_ который определяет очерёдность выполнения данного обработчика по отношению к остальным обработчикам данного хука. Очерёдность выполнения обработчиков с одинаковым приоритетом не определена. + +Приоритет обработчика задаётся в виде целого числа. Меньшее число означает более высокий приоритет; обработчики вызываются в порядке уменьшения приоритета (увеличения соответствующих чисел). + +Если приоритет не указан явно, обработчик получает _приоритет по умолчанию,_ который равен 502. + +![(!)](../images/Hammer.png) **Сделать:** написать про "return stop" + +## Ход загрузки Ткаббера + +Процесс **wish**: + +1. Читает стартовый (главный) модуль Ткаббера, который: + 1. Грузит модуль, реализующий механизм работы с хуками. + 1. Определяет хуки **postload\_hook** и **finload\_hook**; вешает на каждый хук по обработчику: процедуру **postload** на **postload\_hook** и **finload** — на **finload\_hook**. + 1. Если определена переменная окружения **TKABBER\_SITE\_CONFIG**, читает файл с названием, хранящимся в этой переменной окружения. + 1. Читает _конфиг пользователя_ — **~/.tkabber/config.tcl**. + 1. Грузит модуль, реализующий механизм работы с базой данных настроек (customize). + 1. Этот модуль регистрирует обработчик хука **postload\_hook** с приоритетом **60**. Задача обработчика — прочитать настройки Ткаббера из файла **~/.tkabber/custom.tcl**. + + 1. Загружает [плагины сайта](Плагины.md#Плагинология). + 1. Загружает [плагины пользователя](Плагины.md#Плагинология). + 1. Выполняет зарегистрированные на данный момент обработчики хука **postload\_hook** (при этом читается содержимое базы данных настроек). + 1. Загружает модуль **iface.tcl**, который ![(!)](../images/Hammer.png) **Сделать:** написать + 1. Выполняет обработчики хука **finload\_hook**. + +1. Переходит к выполнению главного цикла событий Tk, то есть начиная с этого момента загрузка Ткаббера завершена. + +## Следствия --- -1 Чтобы не забивать голову, достаточно считать, что скрипт это -самостоятельный "кусок кода", то есть нечто такое, что интерпретатор тикля -может "выполнить". Главное условие, которе должно соблюдаться при написании -скрипта: он должен представлять собой -[_одно слово (word)_ в терминах тикля](http://wiki.tcl.tk/14940); поэтому -многострочный скрипт обычно заключают в фигурные скобки `{ }`, т.к. они как раз -выполняют группировку текста в слово. - -2 Приоритет, равный 100, обычно назначается "обработчику по -умолчанию" ("fall-through handler"). ![(!)](../images/Hammer.png) **Сделать:** -написать -- зачем +1 Чтобы не забивать голову, достаточно считать, что скрипт это самостоятельный "кусок кода", то есть нечто такое, что интерпретатор тикля может "выполнить". Главное условие, которе должно соблюдаться при написании скрипта: он должен представлять собой [_одно слово (word)_ в терминах тикля](http://wiki.tcl.tk/14940); поэтому многострочный скрипт обычно заключают в фигурные скобки `{ }`, т.к. они как раз выполняют группировку текста в слово. + +2 Приоритет, равный 99, обычно назначается "обработчику по умолчанию" ("fall-through handler"). ![(!)](../images/Hammer.png) **Сделать:** написать -- зачем + + Index: wiki/ru/Звуковые_схемы.md ================================================================== --- wiki/ru/Звуковые_схемы.md +++ wiki/ru/Звуковые_схемы.md @@ -1,94 +1,75 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Звуковые_схемы/index.html) + # Звуковые схемы Материал из Tkabber Wiki -На этой странице когда-нибудь появится огромное количество новых звуковых схем -для Ткаббера. +На этой странице когда-нибудь появится огромное количество новых звуковых схем для Ткаббера. ## Содержание * [1 Схема "Акустика" (она же будущая дефолтная)](#Схема_Акустика_она_же_будущая_дефолтная) - * [1.1 1-я версия](#1-я_версия) - * [1.2 2-я версия](#2-я_версия) - * [1.3 3-я версия](#3-я_версия) - * [1.4 4-я версия, вошедшая в транк](#4-я_версия_вошедшая_в_транк) - * [1.4.1 Та же версия, но уже в стерео](#Та_же_версия_но_уже_в_стерео) - * [1.4.2 Та же версия, но уже в Hi-Fi качестве](#Та_же_версия_но_уже_в_Hi-Fi_качестве) - * [1.5 Creative Common License](#Creative_Common_License) + * [1.1 1-я версия](#1-я_версия) + * [1.2 2-я версия](#2-я_версия) + * [1.3 3-я версия](#3-я_версия) + * [1.4 4-я версия, вошедшая в транк](#4-я_версия_вошедшая_в_транк) + * [1.4.1 Та же версия, но уже в стерео](#Та_же_версия_но_уже_в_стерео) + * [1.4.2 Та же версия, но уже в Hi-Fi качестве](#Та_же_версия_но_уже_в_Hi-Fi_качестве) + * [1.5 Creative Common License](#Creative_Common_License) # Схема "Акустика" (она же будущая дефолтная) ![](../images/180px-Acoustic_sound_scheme_instruments.jpg) -Пока что выкладываю первый блин — схему, претендующую на то, чтобы стать новой -дефолтной схемой. Буду признателен за отзывы, пожелания, замечания и -конструктивную критику. Направлять их либо прямиком мне, либо высказывать в -конференции, либо оставлять тут в обсуждении статьи. - -Звуки записаны и смикшированы буквально сегодня, поэтому конвертацией в более -лёгкие файлы пока не занимался, так что весит изрядно. Окончательный вариант, -конечно же, подгоню по громкости, размеру и т.п. +![](../images/magnify-clip.png) + +Пока что выкладываю первый блин — схему, претендующую на то, чтобы стать новой дефолтной схемой. Буду признателен за отзывы, пожелания, замечания и конструктивную критику. Направлять их либо прямиком мне, либо высказывать в конференции, либо оставлять тут в обсуждении статьи. + +Звуки записаны и смикшированы буквально сегодня, поэтому конвертацией в более лёгкие файлы пока не занимался, так что весит изрядно. Окончательный вариант, конечно же, подгоню по громкости, размеру и т.п. ## 1-я версия -* **Файл:** [*New\_default\_tkabber\_sound\_theme.zip*](../files/New_default_tkabber_sound_theme.zip) (1218 Кб) +* **Файл:** [Media:New\_default\_tkabber\_sound\_theme.zip](../files/New_default_tkabber_sound_theme.zip) (1218 Кб) -[**ycbl**](Участник_Bigote.md) 03:31, 14 сентября 2008 (MSD) +[ycbl](Участник_Bigote.md) 03:31, 14 сентября 2008 (MSD) ## 2-я версия -Я воткнул сюда несколько разных вариантов звука disconnect. Большая просьба -выбрать наилучший. Лично мне нравится disconnect4. Ещё одно пояснение: -chat\_my\_message и groupchat\_my\_message по идее было решено сделать -одинаковыми, потому что и так ясно, что этот звук сопровождает отправку -собственного сообщения. Но всё же я решил сделать один (для групчата) покороче, -подрезав более длинный. На то две причины: во-первых, кому-то эта разница на -слух может оказаться полезной, и он решит использовать оба звука; во-вторых, -даже если захочется оставить лишь один звук, есть возможность выбрать, какой -именно взять. - -* **Файл:** [*Acoustic.theme\_2nd.version.zip*](../files/Acoustic.theme_2nd.version.zip) (1540 Кб) - -[**ycbl**](Участник_Bigote.md) 23:32, 16 сентября 2008 (MSD) +Я воткнул сюда несколько разных вариантов звука disconnect. Большая просьба выбрать наилучший. Лично мне нравится disconnect4. Ещё одно пояснение: chat\_my\_message и groupchat\_my\_message по идее было решено сделать одинаковыми, потому что и так ясно, что этот звук сопровождает отправку собственного сообщения. Но всё же я решил сделать один (для групчата) покороче, подрезав более длинный. На то две причины: во-первых, кому-то эта разница на слух может оказаться полезной, и он решит использовать оба звука; во-вторых, даже если захочется оставить лишь один звук, есть возможность выбрать, какой именно взять. + +* **Файл:** [Media:Acoustic.theme\_2nd.version.zip](../files/Acoustic.theme_2nd.version.zip) (1540 Кб) + +[ycbl](Участник_Bigote.md) 23:32, 16 сентября 2008 (MSD) ## 3-я версия -Звуки выверены, громкости отлажены. Предлагается к усиленному тестированию, -чтобы устранить все возможно оставшиеся изъяны. Если поправок не будет, можно -использовать этот файл как Hi-Fi (ну, почти Hi-Fi) версию схемы, потому что в -состав Ткаббера она попадёт уже не в 44100-качестве. - -* **Файл:** [*3rd-version\_final.zip*](../files/3rd-version_final.zip) (547 Кб) - -[**ycbl**](Участник_Bigote.md) 08:46, 22 сентября 2008 (MSD) +Звуки выверены, громкости отлажены. Предлагается к усиленному тестированию, чтобы устранить все возможно оставшиеся изъяны. Если поправок не будет, можно использовать этот файл как Hi-Fi (ну, почти Hi-Fi) версию схемы, потому что в состав Ткаббера она попадёт уже не в 44100-качестве. + +* **Файл:** [Media:3rd-version\_final.zip](../files/3rd-version_final.zip) (547 Кб) + +[ycbl](Участник_Bigote.md) 08:46, 22 сентября 2008 (MSD) ## 4-я версия, вошедшая в транк -Практически идентична 3-й версии, буквально пара мелких поправок. В транк -попала моно-версия звуков, сконвертированных в 11025 Hz (тем не менее, два-три -звука пришлось сконвертировать в 22050, потому что в 11025 у них сильно -терялось качество). Здесь эта версия не выкладывается, скачать её можно через -[**SVN**](SVN_disclaimer.md). +Практически идентична 3-й версии, буквально пара мелких поправок. В транк попала моно-версия звуков, сконвертированных в 11025 Hz (тем не менее, два-три звука пришлось сконвертировать в 22050, потому что в 11025 у них сильно терялось качество). Здесь эта версия не выкладывается, скачать её можно через [SVN](SVN_disclaimer.md). ### Та же версия, но уже в стерео -Те же 11025 Hz, но уже стерео — для тех, кто хочет дёшево и сердито -наслаждаться объёмным звучанием :) Правда, два звука всё равно остались в моно, -потому что так были записаны. +Те же 11025 Hz, но уже стерео — для тех, кто хочет дёшево и сердито наслаждаться объёмным звучанием :) Правда, два звука всё равно остались в моно, потому что так были записаны. -* **Файл:** [*New\_default\_theme\_11k-22k\_stereo.zip*](../files/New_default_theme_11k-22k_stereo.zip) (173 Кб) +* **Файл:** [Media:New\_default\_theme\_11k-22k\_stereo.zip](../files/New_default_theme_11k-22k_stereo.zip) (173 Кб) ### Та же версия, но уже в Hi-Fi качестве -44100 Hz, 32 bit. Для тех, кому процессор не помеха :) +44100 Hz, 32 bit. Для тех, кому процессор не помеха :) -* **Файл:** [*New\_default\_theme\_44100.zip*](../files/New_default_theme_44100.zip) (544 Кб) +* **Файл:** [Media:New\_default\_theme\_44100.zip](../files/New_default_theme_44100.zip) (544 Кб) ## Creative Common License -Эта звуковая схема (все версии, начиная с самой первой) распространяется под -лицензией [Creative Common License](http://creativecommons.org/licenses/by-nc-sa/3.0/). +Эта звуковая схема (все версии, начиная с самой первой) распространяется под лицензией [Creative Common License](http://creativecommons.org/licenses/by-nc-sa/3.0/). + +[ycbl](Участник_Bigote.md) 00:55, 27 сентября 2008 (MSD) -[**ycbl**](Участник_Bigote.md) 00:55, 27 сентября 2008 (MSD) + Index: wiki/ru/История_вики.md ================================================================== --- wiki/ru/История_вики.md +++ wiki/ru/История_вики.md @@ -1,96 +1,40 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/История_вики/index.html) + # История вики Материал из Tkabber Wiki -> *— Подымите мне вики: не вижу! — сказал подземным голосом Вий, -> — и все сонмище кинулось подымать ему вики.* - -> *почти © ["Вий"](http://www.fictionbook.ru/en/author/gogol_nikolayi_vasilevich/mirgorod_3_viyi/), - [Н. В. Гоголь](http://www.fictionbook.ru/en/author/gogol_nikolayi_vasilevich/)* - -Возьму на себя смелость осветить историю конференции и вики. Начнём, как водится, с самого начала. - -(Следует отметить, что изложение ведётся от лица трилобита [**Bigote**](Участник_Bigote.md).) +— Подымите мне вики: не вижу! — сказал подземным голосом Вий, + — и все сонмище кинулось подымать ему вики. + +почти © ["Вий"](http://www.fictionbook.ru/en/author/gogol_nikolayi_vasilevich/mirgorod_3_viyi/), [Н. В. Гоголь](http://www.fictionbook.ru/en/author/gogol_nikolayi_vasilevich/) + +Возьму на себя смелость осветить историю конференции и вики. Начнём, как водится, с самого начала. + +(Следует отметить, что изложение ведётся от лица трилобита [Bigote](Участник_Bigote.md).) ## Содержание * [1 Палеолит](#Палеолит) * [2 Мезолит](#Мезолит) * [3 Неолит](#Неолит) * [4 Бронзовый век](#Бронзовый_век) * [5 Железный век](#Железный_век) -## Палеолит -Когда я осваивал Jabber и выбирал себе программу-клиент, после нескольких проб -остановился на Ткаббере. Клиент мне понравился своей мощью, но как водится, -много чего я не понимал и не умел. Когда я добрался до Дискавери и обнаружил в -списке конференций название Tkabber, радости моей не было предела — наконец-то -авторы Ткаббера или по крайней мере компетентные пользователи разъяснят мне -волнующие вопросы. Зайдя внутрь, я обнаружил несколько строчек вида "Есть тут -кто?" — всё, что осталось от предыдущих посетителей. Я понял, что авторы и -опытные пользователи просто редко сюда заглядывают, и решил их подождать, благо -условия интернета позволяли. Ожидая, я отпустил длинные усы и сам стал немного -более опытным пользователем, чем был вначале. Время от времени заходили -посетители, и если набирались терпения и дожидались меня, мы иногда обсуждали -проблемы, возникающие при работе с Ткаббером. Но потом они уходили, и я снова -оставался один. - -## Мезолит -И вот в один прекрасный день в комнату зашёл [**Lknight**](Участник_Lknight.md). Он -не ушёл, как другие, а остался и стал активно помогать другим пользователям -(которые, видя в списке конференций в Дискавери больше одного человека напротив -слова Tkabber, стали заходить почаще). Я к тому времени пришёл к мысли, что -неплохо бы написать что-то вроде мануала по Ткабберу "для чайников", потому что -большинство заходивших посетителей не интересовали тонкие нюансы протокола -XMPP, но более приземлённые вопросы: "Почему у меня видны такие корявые -шрифты?" Опыт в написании документации у меня -[был](http://netroad.ru/~bigote/articles.htm), но после совещания с Lknight'ом -я понял, что обычные мануалы — это прошлый век. Сейчас такие вещи надо делать в -виде базы знаний на движках wiki. Кроме того, мы подумали, что не помешало бы -включить ведение логов конференции, чтобы решения некоторых задач можно было -найти поисковиками. Окрылённый, я понёсся на `xmpp:devel@conference.jabber.ru` -— просить админов включить логи и "поднять" вики на сервере jabber.ru. Мне было -предложено вести логи путём установки на моём сервере собственного бота, -который бы на этот сервер логи и складывал. Относительно вики помощь была тоже -в виде совета: заняться этим самостоятельно, а "через полгодика посмотрим". - -## Неолит -Опять выручил Lknight, подняв вики на своём сервере. На пару с ним мы придумали -основную структуру сайта и начали писать статьи. Между тем на конференции в -один прекрасный день появился и остался один из авторов Ткаббера — -[**Teo**](Участник_Teo.md), а затем в другой не менее прекрасный день пришла ermine -и привела за собой бота sulci. Конференцию, кстати, я уже давно зарегистрировал -на себя, потому что хозяина у неё не было, хоть она и была найдена мной в -списке комнат на Диско. А логи, оказывается, на jabber.ru вообще включаются на -стороне сервера, так что бот у нас просто прохлаждался, оказывая мелкие услуги -и треплясь за жизнь. Мы обучили его некоторым полезным знаниям, которые могут -помочь посетителям (читайте об этом в топике конференции). В общем, так прошло -ещё какое-то время, пока в комнате не появился [**Kostix**](Участник_Kostix.md). -Этот Kostix оказался опытным бойцом и рьяно принялся за дело: на пару с ним мы -практически полностью переделали структуру вики и дописали и переделали многие -статьи. Он и сам написал изрядное их количество — познавательных и интересных. -На конференцию стало заходить ещё больше народу; благодаря общению с этими -людьми улучшилась вики, а в какой-то мере оно повлияло и на новшества, -введённые в версию 0.9.9 Ткаббера. - -## Бронзовый век -В завершение этого краткого экскурса в историю вики следует отметить -[**Feez**](Участник_Feez.md), написавшего ряд плагинов для Ткаббера и очень -интересную статью. Ещё один старатель, добывающий золото плагинов из словесной -руды команд тикля: [**eXire**](Участник_EXire.md). Кстати, некоторые из этих -самодельных плагинов вошли в альфа-версию Ткаббера. Надеемся, список участников -проекта на этом не завершится. Например, камрад [**ART**](Участник_ART.md) вот уже -который месяц рисует новый набор иконок, который, судя по всему, станет -дефолтным в грядущем релизе (если, конечно, будет когда-нибудь дорисован ;)). -Тебе нужен Ткаббер — Ты нужен Ткабберу! ;) - -## Железный век -Начинается новая эра для Ткаббера, ибо недавно вышла свежая его версия 0.10.0. -Точнее, даже не вышла, а выехала на новенькой железной колеснице. Разработчики -навнедряли в неё (в версию) кучи различных железных приспособ, -[**ART**](Участник_ART.md) изукрасил её, а тестеры поубивали всех тараканов. Следом -вышли новый Старпак и Ткаббер-пак. Пора приниматься и за вики: надо новыми -железными мотыгами прополоть её статьи от устаревшей инфы и с помощью новых -железных лопат пересадить хотя бы часть этой инфы на иностранные грядки. +# Палеолит +Когда я осваивал Jabber и выбирал себе программу-клиент, после нескольких проб остановился на Ткаббере. Клиент мне понравился своей мощью, но как водится, много чего я не понимал и не умел. Когда я добрался до Дискавери и обнаружил в списке конференций название Tkabber, радости моей не было предела — наконец-то авторы Ткаббера или по крайней мере компетентные пользователи разъяснят мне волнующие вопросы. Зайдя внутрь, я обнаружил несколько строчек вида "Есть тут кто?" — всё, что осталось от предыдущих посетителей. Я понял, что авторы и опытные пользователи просто редко сюда заглядывают, и решил их подождать, благо условия интернета позволяли. Ожидая, я отпустил длинные усы и сам стал немного более опытным пользователем, чем был вначале. Время от времени заходили посетители, и если набирались терпения и дожидались меня, мы иногда обсуждали проблемы, возникающие при работе с Ткаббером. Но потом они уходили, и я снова оставался один. + +# Мезолит +И вот в один прекрасный день в комнату зашёл [Lknight](Участник_Lknight.md). Он не ушёл, как другие, а остался и стал активно помогать другим пользователям (которые, видя в списке конференций в Дискавери больше одного человека напротив слова Tkabber, стали заходить почаще). Я к тому времени пришёл к мысли, что неплохо бы написать что-то вроде мануала по Ткабберу "для чайников", потому что большинство заходивших посетителей не интересовали тонкие нюансы протокола XMPP, но более приземлённые вопросы: "Почему у меня видны такие корявые шрифты?" Опыт в написании документации у меня [был](http://netroad.ru/~bigote/articles.htm), но после совещания с Lknight'ом я понял, что обычные мануалы — это прошлый век. Сейчас такие вещи надо делать в виде базы знаний на движках wiki. Кроме того, мы подумали, что не помешало бы включить ведение логов конференции, чтобы решения некоторых задач можно было найти поисковиками. Окрылённый, я понёсся на `xmpp:devel@conference.jabber.ru` — просить админов включить логи и "поднять" вики на сервере jabber.ru. Мне было предложено вести логи путём установки на моём сервере собственного бота, который бы на этот сервер логи и складывал. Относительно вики помощь была тоже в виде совета: заняться этим самостоятельно, а "через полгодика посмотрим". + +# Неолит +Опять выручил Lknight, подняв вики на своём сервере. На пару с ним мы придумали основную структуру сайта и начали писать статьи. Между тем на конференции в один прекрасный день появился и остался один из авторов Ткаббера — [Teo](Участник_Teo.md), а затем в другой не менее прекрасный день пришла ermine и привела за собой бота sulci. Конференцию, кстати, я уже давно зарегистрировал на себя, потому что хозяина у неё не было, хоть она и была найдена мной в списке комнат на Диско. А логи, оказывается, на jabber.ru вообще включаются на стороне сервера, так что бот у нас просто прохлаждался, оказывая мелкие услуги и треплясь за жизнь. Мы обучили его некоторым полезным знаниям, которые могут помочь посетителям (читайте об этом в топике конференции). В общем, так прошло ещё какое-то время, пока в комнате не появился [Kostix](Участник_Kostix.md). Этот Kostix оказался опытным бойцом и рьяно принялся за дело: на пару с ним мы практически полностью переделали структуру вики и дописали и переделали многие статьи. Он и сам написал изрядное их количество — познавательных и интересных. На конференцию стало заходить ещё больше народу; благодаря общению с этими людьми улучшилась вики, а в какой-то мере оно повлияло и на новшества, введённые в версию 0.9.9 Ткаббера. + +# Бронзовый век +В завершение этого краткого экскурса в историю вики следует отметить [Feez](Участник_Feez.md), написавшего ряд плагинов для Ткаббера и очень интересную статью. Ещё один старатель, добывающий золото плагинов из словесной руды команд тикля: [eXire](Участник_EXire.md). Кстати, некоторые из этих самодельных плагинов вошли в альфа-версию Ткаббера. Надеемся, список участников проекта на этом не завершится. Например, камрад [ART](Участник_ART.md) вот уже который месяц рисует новый набор иконок, который, судя по всему, станет дефолтным в грядущем релизе (если, конечно, будет когда-нибудь дорисован ;)). Тебе нужен Ткаббер — Ты нужен Ткабберу! ;) + +# Железный век +Начинается новая эра для Ткаббера, ибо недавно вышла свежая его версия 0.10.0. Точнее, даже не вышла, а выехала на новенькой железной колеснице. Разработчики навнедряли в неё (в версию) кучи различных железных приспособ, [ART](Участник_ART.md) изукрасил её, а тестеры поубивали всех тараканов. Следом вышли новый Старпак и Ткаббер-пак. Пора приниматься и за вики: надо новыми железными мотыгами прополоть её статьи от устаревшей инфы и с помощью новых железных лопат пересадить хотя бы часть этой инфы на иностранные грядки. + + Index: wiki/ru/История_разговоров.md ================================================================== --- wiki/ru/История_разговоров.md +++ wiki/ru/История_разговоров.md @@ -1,64 +1,48 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/История_разговоров/index.html) + # История разговоров Материал из Tkabber Wiki. -В Ткаббере реализован браузер истории разговоров. Он доступен через главное -меню: **Службы → Разговоры**. +В Ткаббере реализован браузер истории разговоров. Он доступен через главное меню: **Службы → Разговоры**. ## Содержание * [1 Окна браузера](#Окна_браузера) - * [1.1 Список всех JID'ов](#Список_всех_JIDов) - * [1.2 Дерево истории разговоров](#Дерево_истории_разговоров) - * [1.3 Полнотекстовый поиск](#Полнотекстовый_поиск) - -## Окна браузера - -Браузер предоставляет три "вида" доступа к соответствующей информации: - -### Список всех JID'ов - -Список всех JID'ов, с которыми вы вели беседы. Сюда входят JID'ы пользователей, -JID'ы комнат и JID'ы участников комнат (именно с ними ведутся бесды "в привате" -комнаты). - -Нажатие Enter или двойной клик левой кнопкой мышки на элементе списка открывает -стандартное окно с протоколом разговора для данного JID'а. - -Поиск по списку можно произвести, открыв стандартную панель поиска, которая -вызывается нажатием Ctrl-s. - -### Дерево истории разговоров - -Дерево истории разговоров соответствует структуре каталогов с файлами истории, -поддерживаемой Ткаббером. В нём JID'ы сгруппированы по месяцам, которые, в свою -очередь, сгруппированы по годам. - -Открытие стандартного окна с протоколом для выбранного JID'а осуществляется так -же, как и в списке всех JID'ов. - -Поиск по дереву можно произвести, открыв стандартную панель поиска, которая -вызывается нажатием Ctrl-s. - -### Полнотекстовый поиск - -Полнотекстовый поиск позволяет произвести поиск подстроки/шаблона по _всем_ -имеющимся файлам протоколов. Используются выбранный в настройках Ткаббера метод -поиска (группа настроек **Plugins → Search**). - -Поиск не блокирует интерфейс. Результаты помещаются в соответствующее окно по -мере их поступления. - -Двойной клик левой кнопкой мышки на тексте с результатом поиска или его -заголовке открывает стандартное окно с протоколом для соответствующего JID'а; -оно будет "перемотано" чтобы показать нужное (найденное) сообщение. - -Дополнительный поиск (аналог функции "искать в найденном" некоторых поисковых -служб) доступен в виде стандартной панели поиска, которую можно активизировать -нажатием Ctrl-s. Искать в найденном можно и до окончания "основного" поиска. - -Поиск называется "полнотекстовым", поскольку в качестве информации для поиска -он использует не только сообщения, но и JID'ы их источников. Название -"позаимствовано" у систем управления базами данных. + * [1.1 Список всех JID'ов](#Список_всех_JIDов) + * [1.2 Дерево истории разговоров](#Дерево_истории_разговоров) + * [1.3 Полнотекстовый поиск](#Полнотекстовый_поиск) + +# Окна браузера +Браузер предоставляет три "вида" доступа к соответствующей информации: + +## Список всех JID'ов + +Список всех JID'ов, с которыми вы вели беседы. Сюда входят JID'ы пользователей, JID'ы комнат и JID'ы участников комнат (именно с ними ведутся бесды "в привате" комнаты). + +Нажатие Enter или двойной клик левой кнопкой мышки на элементе списка открывает стандартное окно с протоколом разговора для данного JID'а. + +Поиск по списку можно произвести, открыв стандартную панель поиска, которая вызывается нажатием Ctrl-s. + +## Дерево истории разговоров + +Дерево истории разговоров соответствует структуре каталогов с файлами истории, поддерживаемой Ткаббером. В нём JID'ы сгруппированы по месяцам, которые, в свою очередь, сгруппированы по годам. + +Открытие стандартного окна с протоколом для выбранного JID'а осуществляется так же, как и в списке всех JID'ов. + +Поиск по дереву можно произвести, открыв стандартную панель поиска, которая вызывается нажатием Ctrl-s. + +## Полнотекстовый поиск + +Полнотекстовый поиск позволяет произвести поиск подстроки/шаблона по _всем_ имеющимся файлам протоколов. Используются выбранный в настройках Ткаббера метод поиска (группа настроек **Plugins → Search**). + +Поиск не блокирует интерфейс. Результаты помещаются в соответствующее окно по мере их поступления. + +Двойной клик левой кнопкой мышки на тексте с результатом поиска или его заголовке открывает стандартное окно с протоколом для соответствующего JID'а; оно будет "перемотано" чтобы показать нужное (найденное) сообщение. + +Дополнительный поиск (аналог функции "искать в найденном" некоторых поисковых служб) доступен в виде стандартной панели поиска, которую можно активизировать нажатием Ctrl-s. Искать в найденном можно и до окончания "основного" поиска. + +Поиск называется "полнотекстовым", поскольку в качестве информации для поиска он использует не только сообщения, но и JID'ы их источников. Название "позаимствовано" у систем управления базами данных. + + Index: wiki/ru/Команды.md ================================================================== --- wiki/ru/Команды.md +++ wiki/ru/Команды.md @@ -1,467 +1,310 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Команды/index.html) + # Команды Материал из Tkabber Wiki -Статья ещё не дописана, см. [**TODO: дописать статью**](#TODO_дописать_статью). +Статья ещё не дописана, см. [TODO: дописать статью](Команды.md#TODO_дописать_статью). ## Содержание * [1 Общая информация](#Общая_информация) * [2 Встроенные команды](#Встроенные_команды) - * [2.1 /admin nickname ['\\n' reason]](#_admin_nickname_n_reason) - * [2.2 /ban nickname ['\\n' reason]](#_ban_nickname_n_reason) - * [2.3 /banjid jid ['\\n' reason]](#_banjid_jid_n_reason) - * [2.4 /deadmin nickname ['\\n' reason]](#_deadmin_nickname_n_reason) - * [2.5 /demember nickname ['\\n' reason]](#_demember_nickname_n_reason) - * [2.6 /demoderator nickname ['\\n' reason]](#_demoderator_nickname_n_reason) - * [2.7 /devoice nickname ['\\n' reason]](#_devoice_nickname_n_reason) - * [2.8 /disco [jid]](#_disco_jid) - * [2.9 /exec command](#_exec_command) - * [2.10 /invite jid ['\\n' reason]](#_invite_jid_n_reason) - * [2.11 /join [room [password]]](#_join_room_password) - * [2.12 /kick nickname ['\\n' reason]](#_kick_nickname_n_reason) - * [2.13 /last [user]](#_last_user) - * [2.13.1 Раскрытие аргумента [user]](#Раскрытие_аргумента_user) - * [2.14 /leave [status]](#_leave_status) - * [2.15 /me text](#_me_text) - * [2.16 /member nickname ['\\n' reason]](#_member_nickname_n_reason) - * [2.17 /moderator nickname ['\\n' reason]](#_moderator_nickname_n_reason) - * [2.18 /msg nickname '\\n' body](#_msg_nickname_n_body) - * [2.19 /nick nickname](#_nick_nickname) - * [2.20 /open user\_a](#_open_user_a) - * [2.21 /part [status]](#_part_status) - * [2.22 /ping [user]](#_ping_user) - * [2.23 /rejoin](#_rejoin) - * [2.24 /subject [text]](#_subject_text) - * [2.25 /time [user]](#_time_user) - * [2.26 /topic [text]](#_topic_text) - * [2.27 /unban jid](#_unban_jid) - * [2.28 /vcard [user\_b]](#_vcard_user_b) - * [2.28.1 Раскрытие аргумента [user\_b]](#Раскрытие_аргумента_user_b) - * [2.29 /version [user]](#_version_user) - * [2.30 /voice nickname ['\\n' reason]](#_voice_nickname_n_reason) - * [2.31 /whois nickname](#_whois_nickname) + * [2.1 /admin nickname ['\\n' reason]](#_admin_nickname_n_reason) + * [2.2 /ban nickname ['\\n' reason]](#_ban_nickname_n_reason) + * [2.3 /banjid jid ['\\n' reason]](#_banjid_jid_n_reason) + * [2.4 /deadmin nickname ['\\n' reason]](#_deadmin_nickname_n_reason) + * [2.5 /demember nickname ['\\n' reason]](#_demember_nickname_n_reason) + * [2.6 /demoderator nickname ['\\n' reason]](#_demoderator_nickname_n_reason) + * [2.7 /devoice nickname ['\\n' reason]](#_devoice_nickname_n_reason) + * [2.8 /disco [jid]](#_disco_jid) + * [2.9 /exec command](#_exec_command) + * [2.10 /invite jid ['\\n' reason]](#_invite_jid_n_reason) + * [2.11 /join [room [password]]](#_join_room_password) + * [2.12 /kick nickname ['\\n' reason]](#_kick_nickname_n_reason) + * [2.13 /last [user]](#_last_user) + * [2.13.1 Раскрытие аргумента [user]](#Раскрытие_аргумента_user) + * [2.14 /leave [status]](#_leave_status) + * [2.15 /me text](#_me_text) + * [2.16 /member nickname ['\\n' reason]](#_member_nickname_n_reason) + * [2.17 /moderator nickname ['\\n' reason]](#_moderator_nickname_n_reason) + * [2.18 /msg nickname '\\n' body](#_msg_nickname_n_body) + * [2.19 /nick nickname](#_nick_nickname) + * [2.20 /open user\_a](#_open_user_a) + * [2.21 /part [status]](#_part_status) + * [2.22 /ping [user]](#_ping_user) + * [2.23 /rejoin](#_rejoin) + * [2.24 /subject [text]](#_subject_text) + * [2.25 /time [user]](#_time_user) + * [2.26 /topic [text]](#_topic_text) + * [2.27 /unban jid](#_unban_jid) + * [2.28 /vcard [user\_b]](#_vcard_user_b) + * [2.28.1 Раскрытие аргумента [user\_b]](#Раскрытие_аргумента_user_b) + * [2.29 /version [user]](#_version_user) + * [2.30 /voice nickname ['\\n' reason]](#_voice_nickname_n_reason) + * [2.31 /whois nickname](#_whois_nickname) * [3 Ссылки](#Ссылки) * [4 TODO: дописать статью](#TODO_дописать_статью) * [5 Немного мыслей о развитии механизма команд](#Немного_мыслей_о_развитии_механизма_команд) # Общая информация -Не все команды имеют «защиту от дурака». В данном списке указаны только -разумные наборы параметров. В случае использования другого набора параметров -команда может быть отправлена собеседнику (как обычное сообщение), может -возникнуть исключение (на уровне интерпретатора tcl), может быть выведено -сообщение об ошибке под сообщениями активного окна, может не случиться ничего. -Эти ситуации никак не оговариваются в данном списке, поскольку недостатки лучше -исправлять, а не документировать. - -Аргументы-слова не должны содержать пробельных символов (например, пробела или -перевода строки) и должны разделяться строго одним пробелом. В некоторых -случаях аргумент представляет собой произвольный текст или текст, не содержащий -символа перевода строки. Типы аргументов указаны в описаниях к командам. - -Аргументы команд, записанные в квадратных скобках, являются необязательными (т. -е. могут присутствовать или не присутствовать в записи команды). Иногда наличие -или отсутствие аргумента влияет на семантику команды, например на то, -отображается некоторое свойство командой или изменяется. - -В окне чата работает автодополнение по клавише Tab. Его можно использовать для -дополнения псевдонима участника конференции, команды, аргумента команды и, -иногда, чего-нибудь другого (см., например, [**плагин Juick**](Плагины/Juick.md)). - -Для формалистов. Текст команд можно воспринимать как запись шаблона команды в -форме [расширенной БНФ](http://ru.wikipedia.org/wiki/Расширенная_форма_Бэкуса_—_Наура), причём -слова, начинающиеся с символа '/', а также '\\n' являются терминалами, -остальные — нетерминалами, формат нетерминалов определяется типом нетерминала -как аргумента. Разделителем между командой и аргументом, а также между -аргументами-словами является пробел. Если между идентификаторами (терминалами -или нетерминалами) присутствует терминал '\\n', то других разделитей не -подразумевается. +Не все команды имеют «защиту от дурака». В данном списке указаны только разумные наборы параметров. В случае использования другого набора параметров команда может быть отправлена собеседнику (как обычное сообщение), может возникнуть исключение (на уровне интерпретатора tcl), может быть выведено сообщение об ошибке под сообщениями активного окна, может не случиться ничего. Эти ситуации никак не оговариваются в данном списке, поскольку недостатки лучше исправлять, а не документировать. + +Аргументы-слова не должны содержать пробельных символов (например, пробела или перевода строки) и должны разделяться строго одним пробелом. В некоторых случаях аргумент представляет собой произвольный текст или текст, не содержащий символа перевода строки. Типы аргументов указаны в описаниях к командам. + +Аргументы команд, записанные в квадратных скобках, являются необязательными (т. е. могут присутствовать или не присутствовать в записи команды). Иногда наличие или отсутствие аргумента влияет на семантику команды, например на то, отображается некоторое свойство командой или изменяется. + +В окне чата работает автодополнение по клавише Tab. Его можно использовать для дополнения псевдонима участника конференции, команды, аргумента команды и, иногда, чего-нибудь другого (см., например, [плагин Juick](Плагины/Juick.md)). + +Для формалистов. Текст команд можно воспринимать как запись шаблона команды в форме [расширенной БНФ](http://ru.wikipedia.org/wiki/Расширенная_форма_Бэкуса_—_Наура), причём слова, начинающиеся с символа '/', а также '\\n' являются терминалами, остальные — нетерминалами, формат нетерминалов определяется типом нетерминала как аргумента. Разделителем между командой и аргументом, а также между аргументами-словами является пробел. Если между идентификаторами (терминалами или нетерминалами) присутствует терминал '\\n', то других разделитей не подразумевается. # Встроенные команды ## /admin nickname ['\\n' reason] -* Активное окно — окно конференции. Сменить [**тип членства**](#Ссылки) - участника активной конференции с псевдонимом `nickname` на “Admin” (если у - него менее привилегированный тип членства). Обычно это также подразумевает - назначение [**роли**](#Ссылки) “Moderator”. В запрос включается, если - указан, текст `reason`. -* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. -* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) +* Активное окно — окно конференции. Сменить [тип членства](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Admin” (если у него менее привилегированный тип членства). Обычно это также подразумевает назначение [роли](Команды.md#Ссылки) “Moderator”. В запрос включается, если указан, текст `reason`. +* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. +* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) ## /ban nickname ['\\n' reason] -* Активное окно — окно конференции. Сменить [**тип членства**](#Ссылки) - участника активной конференции с псевдонимом `nickname` на “Outcast”, т. е. - забанить его (выгнать без возможности вернуться). Бан осуществляется по real - JID пользователя, значит последний должен быть известен осуществляющему бан. - Участник должен присутствовать в конференции. В запрос включается, если - указан, текст `reason`. Согласно - [XEP-0045](http://xmpp.org/extensions/xep-0045.html), передача забаненному - участнику и остальным участникам информации о псевдониме или bare JID - осуществляющего бан, а также причины `reason` является опциональной. -* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. -* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) +* Активное окно — окно конференции. Сменить [тип членства](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Outcast”, т. е. забанить его (выгнать без возможности вернуться). Бан осуществляется по real JID пользователя, значит последний должен быть известен осуществляющему бан. Участник должен присутствовать в конференции. В запрос включается, если указан, текст `reason`. Согласно [XEP-0045](http://xmpp.org/extensions/xep-0045.html), передача забаненному участнику и остальным участникам информации о псевдониме или bare JID осуществляющего бан, а также причины `reason` является опциональной. +* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. +* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) ## /banjid jid ['\\n' reason] -* Активное окно — окно конференции. Сменить [**тип членства**](#Ссылки) - пользователя с bare JID `jid` на “Outcast”, т. е. внести его в список - забаненных и, если он присутствует в конференции, выгнать. В запрос - включается, если указан, текст `reason`. Согласно - [XEP-0045](http://xmpp.org/extensions/xep-0045.html), передача забаненному - участнику и остальным участникам информации о псевдониме или bare JID - осущестляющего бан, а также причины `reason` является опциональной. -* `jid` — текст без символов перевода строки, `reason` — произвольный текст. -* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) +* Активное окно — окно конференции. Сменить [тип членства](Команды.md#Ссылки) пользователя с bare JID `jid` на “Outcast”, т. е. внести его в список забаненных и, если он присутствует в конференции, выгнать. В запрос включается, если указан, текст `reason`. Согласно [XEP-0045](http://xmpp.org/extensions/xep-0045.html), передача забаненному участнику и остальным участникам информации о псевдониме или bare JID осущестляющего бан, а также причины `reason` является опциональной. +* `jid` — текст без символов перевода строки, `reason` — произвольный текст. +* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) ## /deadmin nickname ['\\n' reason] -* Активное окно — окно конференции. Сменить [**тип членства**](#Ссылки) - участника активной конференции с псевдонимом `nickname` на “Member” (если у - него более привилегированный тип членства). Обычно это также подразумевает - назначение [**роли**](#Ссылки) “Participant”. В запрос включается, - если указан, текст `reason`. -* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. -* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) +* Активное окно — окно конференции. Сменить [тип членства](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Member” (если у него более привилегированный тип членства). Обычно это также подразумевает назначение [роли](Команды.md#Ссылки) “Participant”. В запрос включается, если указан, текст `reason`. +* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. +* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) ## /demember nickname ['\\n' reason] -* Активное окно — окно конференции. Сменить [**тип членства**](#Ссылки) - участника активной конференции с псевдонимом `nickname` на “None” (если у - него более привилегированный тип членства). В запрос включается, если - указан, текст `reason`. -* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. -* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) +* Активное окно — окно конференции. Сменить [тип членства](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “None” (если у него более привилегированный тип членства). В запрос включается, если указан, текст `reason`. +* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. +* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) ## /demoderator nickname ['\\n' reason] -* Активное окно — окно конференции. Сменить [**роль**](#Ссылки) участника - активной конференции с псевдонимом `nickname` на “Participant” (если у него - более привилегированная роль). В запрос включается, если указан, текст - `reason`. -* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. +* Активное окно — окно конференции. Сменить [роль](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Participant” (если у него более привилегированная роль). В запрос включается, если указан, текст `reason`. +* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. ## /devoice nickname ['\\n' reason] -* Активное окно — окно конференции. Сменить [**роль**](#Ссылки) участника - активной конференции с псевдонимом `nickname` на “Visitor” (если у него - более привилегированная роль). В запрос включается, если указан, текст - `reason`. -* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. +* Активное окно — окно конференции. Сменить [роль](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Visitor” (если у него более привилегированная роль). В запрос включается, если указан, текст `reason`. +* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. ## /disco [jid] -* Открывает окно обзора сервисов для `jid` или, если `jid` не указан, для - собеседника из активного окна. -* `jid` — произвольный текст, справа удаляются пробельные символы. -* [plugins/chat/disco.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/disco.tcl) +* Открывает окно обзора сервисов для `jid` или, если `jid` не указан, для собеседника из активного окна. +* `jid` — произвольный текст, справа удаляются пробельные символы. +* [plugins/chat/disco.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/disco.tcl) ## /exec command -* Выполнить команду `command` и подставить её вывод или сообщение об ошибке в - поле ввода в форме: +* Выполнить команду `command` и подставить её вывод или сообщение об ошибке в поле ввода в форме: $ `command` output/error message -Синтаксис, вообще говоря, отличается от привычного по совместимым с Bourne -Shell командным интерпретаторам. Например, несколько слов, разделённых -пробелами или символами перевода строки, объединяются в один аргумент с помощью -фигурных скобок, а не кавычек. Подробнее см. в “man n exec”. Можно использовать -синтаксис системного командного интерпретатора с помощью такого приёма: “/exec -sh -c {some command}” - -* `command` — произвольный текст. -* [plugins/chat/exec\_command.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/exec_command.tcl) +Синтаксис, вообще говоря, отличается от привычного по совместимым с Bourne Shell командным интерпретаторам. Например, несколько слов, разделённых пробелами или символами перевода строки, объединяются в один аргумент с помощью фигурных скобок, а не кавычек. Подробнее см. в “man n exec”. Можно использовать синтаксис системного командного интерпретатора с помощью такого приёма: “/exec sh -c {some command}” + +* `command` — произвольный текст. +* [plugins/chat/exec\_command.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/exec_command.tcl) ## /invite jid ['\\n' reason] -* Пригласить пользователя в конференцию. Текст `reason`, если указан, будет - передан вместе с приглашением. -* В окне конференции `jid` — это JID приглашаемого. -* В окне 1-vs-1 разговора (в том числе приватного разговора через конференцию) - `jid` — это JID комнаты, с него приходит приглашение. -* `jid` — произвольный текст, не содержащий символов перевода строки, `reason` - — произвольный текст, справа удаляются пробельные символы. -* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) +* Пригласить пользователя в конференцию. Текст `reason`, если указан, будет передан вместе с приглашением. +* В окне конференции `jid` — это JID приглашаемого. +* В окне 1-vs-1 разговора (в том числе приватного разговора через конференцию) `jid` — это JID комнаты, с него приходит приглашение. +* `jid` — произвольный текст, не содержащий символов перевода строки, `reason` — произвольный текст, справа удаляются пробельные символы. +* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) ## /join [room [password]] -* Присоединиться к конференции `room` с паролем `password` или без пароля, - если он не указан. -* Если активное окно не является окном конференции, то аргумент `room` - трактуется как JID конференции. -* В случае когда активное окно является окном конференции (на некотором - сервере server), действуют следующие правила. Если аргумент `room` - отсутствует, то производится попытка присоединиться к конференции в активном - окне. Если аргумент `room` присутствует, но не является JID'ом, то - производится попытка присоединиться к конференции `room`@server. В противном - случае производится попытка присоединиться к конференции с JID'ом `room`. -* `room` — слово, `password` — произвольный текст, справа удаляются пробельные - символы. -* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) +* Присоединиться к конференции `room` с паролем `password` или без пароля, если он не указан. +* Если активное окно не является окном конференции, то аргумент `room` трактуется как JID конференции. +* В случае когда активное окно является окном конференции (на некотором сервере server), действуют следующие правила. Если аргумент `room` отсутствует, то производится попытка присоединиться к конференции в активном окне. Если аргумент `room` присутствует, но не является JID'ом, то производится попытка присоединиться к конференции `room`@server. В противном случае производится попытка присоединиться к конференции с JID'ом `room`. +* `room` — слово, `password` — произвольный текст, справа удаляются пробельные символы. +* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) ## /kick nickname ['\\n' reason] -* Активное окно — окно конференции. Сменить [**роль**](#Ссылки) - участника активной конференции с псевдонимом `nickname` на “None”, т. е. - выгнать из конференции (участник может вернуться). Участник должен - присутствовать в конференции. В запрос включается, если указан, текст - `reason`. Согласно [XEP-0045](http://xmpp.org/extensions/xep-0045.html), - передача выгнанному участнику и остальным участникам информации о псевдониме - или bare JID выгоняющего, а также причины `reason` является опциональной. -* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. -* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) +* Активное окно — окно конференции. Сменить [роль](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “None”, т. е. выгнать из конференции (участник может вернуться). Участник должен присутствовать в конференции. В запрос включается, если указан, текст `reason`. Согласно [XEP-0045](http://xmpp.org/extensions/xep-0045.html), передача выгнанному участнику и остальным участникам информации о псевдониме или bare JID выгоняющего, а также причины `reason` является опциональной. +* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. +* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) ## /last [user] -* Запросить информацию о времени с момента последнего подключения, времени - бездействия или времени с последнего рестарта сервиса (uptime) в - соответствии с [XEP-0012](http://www.xmpp.org/extensions/xep-0012.html). - Согласно этому стандарту, если запрос адресован bare JID - (localpart@domain.tld), то возвращённый интервал — это время с момента - последнего подключения. Если запрос адресован full JID - (localpart@domain.tld/resource), то интервал означает время бездействия - пользователя. Если запрос адресован серверу или сервису с JID'ом вида - domain.tld, то возвращается время с последнего рестарта сервера или сервиса - (uptime). Ответ выводится под последним сообщением активного на момент - отправки запроса окна. -* Ракрытие аргумента — см. далее. -* Поскольку закладки на конференции в Ткаббере с точки зрения интерфейса - пользователя относятся к ростеру, псевдоним или JID конференции - обрабатывается так же, как ростерный псевдоним или JID пользователя. При - этом конференция, участником которой мы не являемся, обрабатывается как - отключённый пользователь. А если мы являемся участником конференции, - пользователи конференции обрабатываются как подключённые ресурсы. -* `user` — произвольный текст. -* [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) +* Запросить информацию о времени с момента последнего подключения, времени бездействия или времени с последнего рестарта сервиса (uptime) в соответствии с [XEP-0012](http://www.xmpp.org/extensions/xep-0012.html). Согласно этому стандарту, если запрос адресован bare JID (localpart@domain.tld), то возвращённый интервал — это время с момента последнего подключения. Если запрос адресован full JID (localpart@domain.tld/resource), то интервал означает время бездействия пользователя. Если запрос адресован серверу или сервису с JID'ом вида domain.tld, то возвращается время с последнего рестарта сервера или сервиса (uptime). Ответ выводится под последним сообщением активного на момент отправки запроса окна. +* Ракрытие аргумента — см. далее. +* Поскольку закладки на конференции в Ткаббере с точки зрения интерфейса пользователя относятся к ростеру, псевдоним или JID конференции обрабатывается так же, как ростерный псевдоним или JID пользователя. При этом конференция, участником которой мы не являемся, обрабатывается как отключённый пользователь. А если мы являемся участником конференции, пользователи конференции обрабатываются как подключённые ресурсы. +* `user` — произвольный текст. +* [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) ### Раскрытие аргумента [user] -Для краткости изложения будем указывать bare JID и full JID собеседника (или -конференции) как chat\_jid и chat\_jid/resource соответственно. - -Команда `/last` в конференции: - -* запрос к chat\_jid. - -Команда `/last user` в конференции: - -* запрос к chat\_jid/user. - -Команда `/last` в обычном чате: - -* chat\_jid/resource подключён => запрос к нему (т. е. к chat\_jid/resource); -* не подключён, но подключены другие ресурсы => запрос к ним (т. е. к chat\_jid/\*); -* нет подключённых ресурсов => запрос к chat\_jid/resource. - -Команда `/last user` в обычном чате: - -* Есть контакты с псевдонимом `user`; для каждого контакта: запрос ко всем - подключённым full JID или если таких нет, то запрос по bare JID. -* Если таких контактов нет, то запрос к `user` (подразумевается, что `user` - должен быть валидным JID'ом). - -![(!)](../images/Hammer.png) **Сделать:** Было бы неплохо проверять, совпадает -ли `user` с псевдонимом одного из участников конференции и, если нет, то -попытаться отождествить `user` с псевдонимом пользователя из ростера или, если -и это не удалось, делать запрос по JID'у `user`. Да и команду было бы неплохо -разбить на две или три более осмысленных, при этом для каждой команды -осуществлять приведению JID'а к необходимому виду, а для uptime — принимать -только обращения по JID'ам вида domain.tld. +Для кратности изложения будем указывать bare JID и full JID собеседника (или конференции) как chat\_jid и chat\_jid/resource соответственно. + +Команда `/last` в конференции: + +* запрос к chat\_jid. + +Команда `/last user` в конференции: + +* запрос к chat\_jid/user. + +Команда `/last` в обычном чате: + +* chat\_jid/resource подключён => запрос к нему (т. е. к chat\_jid/resource); +* не подключён, но подключены другие ресурсы => запрос к ним (т. е. к chat\_jid/\*); +* нет подключённых ресурсов => запрос к chat\_jid/resource. + +Команда `/last user` в обычном чате: + +* Есть контакты с псевдонимом `user`; для каждого контакта: запрос ко всем подключённым full JID или если таких нет, то запрос по bare JID. +* Если таких контактов нет, то запрос к `user` (подразумевается, что `user` должен быть валидным JID'ом). + +![(!)](../images/Hammer.png) **Сделать:** Было бы неплохо проверять, совпадает ли `user` с псевдонимом одного из участников конференции и, если нет, то попытаться отождествить `user` с псевдонимом пользователя из ростера или, если и это не удалось, делать запрос по JID'у `user`. Да и команду было бы неплохо разбить на две или три более осмысленных, при этом для каждой команды осуществлять приведению JID'а к необходимому виду, а для uptime — принимать только обращения по JID'ам вида domain.tld. ## /leave [status] -* Закрыть активное окно разговора, если это окно конференции — покинуть её. - Если активным окном является окно конференции, то в информацию об изменении - характера присутствия в конференции в качестве статуса добавляется текст - `status`. -* `status` — произвольный текст. -* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) +* Закрыть активное окно разговора, если это окно конференции — покинуть её. Если активным окном является окно конференции, то в информацию об изменении характера присутствия в конференции в качестве статуса добавляется текст `status`. +* `status` — произвольный текст. +* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) ## /me text -* Не является командой в смысле Ткаббера, т. е. не обрабатывается специальным - образом при отправке. Но в соответствии с - [XEP-0245](http://www.xmpp.org/extensions/xep-0245.html) обрабатывается - особым образом при получении. Сообщение, начинающееся с "/me " отобразится в - клиентах, соответствующих данному стандарту, будет включать ник отправителя - и выглядеть, например, так: +* Не является командой в смысле Ткаббера, т. е. не обрабатывается специальным образом при отправке. Но в соответствии с [XEP-0245](http://www.xmpp.org/extensions/xep-0245.html) обрабатывается особым образом при получении. Сообщение, начинающееся с "/me " отобразится в клиентах, соответствующих данному стандарту, будет включать ник отправителя и выглядеть, например, так: * your_nickname `text` -* `text` — произвольный текст. +* `text` — произвольный текст. ## /member nickname ['\\n' reason] -* Активное окно — окно конференции. Сменить [**тип членства**](#Ссылки) - участника активной конференции с псевдонимом `nickname` на “Member” (если у - него менее привилегированный тип членства). В запрос включается, если - указан, текст `reason`. -* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. -* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) +* Активное окно — окно конференции. Сменить [тип членства](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Member” (если у него менее привилегированный тип членства). В запрос включается, если указан, текст `reason`. +* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. +* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) ## /moderator nickname ['\\n' reason] -* Активное окно — окно конференции. Сменить [**роль**](#Ссылки) участника - активной конференции с псевдонимом `nickname` на “Moderator” (если у него - менее привилегированная роль). В запрос включается, если указан, текст - `reason`. -* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. +* Активное окно — окно конференции. Сменить [роль](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Moderator” (если у него менее привилегированная роль). В запрос включается, если указан, текст `reason`. +* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. ## /msg nickname '\\n' body -* Активное окно — окно конференции. Отправить посетителю данной конференции с - псевдонимом `nickname` сообщение `body`. -* `nickname` — текст без символов перевода строки, `body` — произвольный - текст. -* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) +* Активное окно — окно конференции. Отправить посетителю данной конференции с псевдонимом `nickname` сообщение `body`. +* `nickname` — текст без символов перевода строки, `body` — произвольный текст. +* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) ## /nick nickname -* Если активное окно является окном конференции, то сменить псевдоним в данной - конференции на `nickname`. -* `nickname` — произвольный текст. -* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) +* Если активное окно является окном конференции, то сменить псевдоним в данной конференции на `nickname`. +* `nickname` — произвольный текст. +* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) ## /open user\_a -* Если аргумент содержит символ '@', то открывается окно разговора с JID'ом - `user_a`. -* Иначе предпологается, что активное окно является окном конференции, и - открывается окно разговора с участником `user_a` этой конференции. -* ![(!)](../images/Hammer.png) **Сделать:** Комментарий "What if conference - nickname contains "@"?", кто-нибудь хочет исправить? Думаю, нужно сделать - проверку [string equal $type groupchat] как в некоторый командах в - irc\_commands.tcl. -* `user_a` — произвольный текст. -* [plugins/chat/open\_chat.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/open_chat.tcl) +* Если аргумент содержит символ '@', то открывается окно разговора с JID'ом `user_a`. +* Иначе предпологается, что активное окно является окном конференции, и открывается окно разговора с участником `user_a` этой конференции. +* ![(!)](../images/Hammer.png) **Сделать:** Комментарий "What if conference nickname contains "@"?", кто-нибудь хочет исправить? Думаю, нужно сделать проверку [string equal $type groupchat] как в некоторый командах в irc\_commands.tcl. +* `user_a` — произвольный текст. +* [plugins/chat/open\_chat.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/open_chat.tcl) ## /part [status] -* Полный синоним [**/leave [status]**](#_leave_status). -* `status` — произвольный текст. -* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) +* Полный синоним [/leave [status]](Команды.md#_leave_status). +* `status` — произвольный текст. +* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) ## /ping [user] -* Пинг-запрос на прикладном уровне ISO OSI в соответствии с - [XEP-0199](http://www.xmpp.org/extensions/xep-0199.html). Запрос - адресованный по full JID направляется к клиенту, на запрос по bare JID или - по JID'у вида server.tld отвечает соответствующий сервер или сервис. Ответ - выводится под последним сообщением активного на момент отправки запроса - окна. -* Семантика `user` или его отсутствия — см. [**/last [user]**](#_last_user). -* `user` — произвольный текст. -* [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) +* Пинг-запрос на прикладном уровне ISO OSI в соответствии с [XEP-0199](http://www.xmpp.org/extensions/xep-0199.html). Запрос адресованный по full JID направляется к клиенту, на запрос по bare JID или по JID'у вида server.tld отвечает соответствующий сервер или сервис. Ответ выводится под последним сообщением активного на момент отправки запроса окна. +* Семантика `user` или его отсутствия — см. [/last [user]](Команды.md#_last_user). +* `user` — произвольный текст. +* [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) ## /rejoin -* Если активное окно является окном конференции, то покинуть конференцию и - присоединиться к ней снова (похоже, что без пароля). -* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) +* Если активное окно является окном конференции, то покинуть конференцию и присоединиться к ней снова (похоже, что без пароля). +* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) ## /subject [text] -* Активное окно — окно конференции. Установить в качестве темы конференции - текст `text`. Если аргумент `text` не указан — отобразить тему конференции - под последним сообщением. -* `text` — произвольный текст. -* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) +* Активное окно — окно конференции. Установить в качестве темы конференции текст `text`. Если аргумент `text` не указан — отобразить тему конференции под последним сообщением. +* `text` — произвольный текст. +* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) ## /time [user] -* Запросить информацию о локальном времени и часовом поясе пользователя (см. - [XEP-0090](http://www.xmpp.org/extensions/xep-0090.html)). В соответствии со - стандартом, ответ должен содержать время по UTC, может содержать часовой - пояс и время в читаемом формате (видимо, подразумевается локальное время). - Ответ выводится под последним сообщением активного на момент отправки - запроса окна. -* Семантика `user` или его отсутствия — см. [**/last [user]**](#_last_user). -* `user` — произвольный текст. -* [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) +* Запросить информацию о локальном времени и часовом поясе пользователя (см. [XEP-0090](http://www.xmpp.org/extensions/xep-0090.html)). В соответствии со стандартом, ответ должен содержать время по UTC, может содержать часовой пояс и время в читаемом формате (видимо, подразумевается локальное время). Ответ выводится под последним сообщением активного на момент отправки запроса окна. +* Семантика `user` или его отсутствия — см. [/last [user]](Команды.md#_last_user). +* `user` — произвольный текст. +* [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) ## /topic [text] -* Полный синоним [**/subject [text]**](#_subject_text). -* `text` — произвольный текст. -* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) +* Полный синоним [/subject [text]](Команды.md#_subject_text). +* `text` — произвольный текст. +* [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) ## /unban jid -* Активное окно — окно конференции. Если пользователь с bare JID `jid` - присутствует в списке забаненных (т. е. пользователей с [**типом членства**](#Ссылки) - “Outcast”), то сменить тип членства - пользователя на “None”. Иначе говоря, разбанить пользователя с bare JID - `jid`. -* `jid` — текст без символов перевода строки. -* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) +* Активное окно — окно конференции. Если пользователь с bare JID `jid` присутствует в списке забаненных (т. е. пользователей с [типом членства](Команды.md#Ссылки) “Outcast”), то сменить тип членства пользователя на “None”. Иначе говоря, разбанить пользователя с bare JID `jid`. +* `jid` — текст без символов перевода строки. +* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) ## /vcard [user\_b] -* Запросить VCard пользователя, см. - [XEP-0054](http://www.xmpp.org/extensions/xep-0054.html). Ответ выводится - под последним сообщением активного на момент отправки запроса окна. -* Раскрытие аргумента — см. далее. -* `user_b` — произвольный текст. -* [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) +* Запросить VCard пользователя, см. [XEP-0054](http://www.xmpp.org/extensions/xep-0054.html). Ответ выводится под последним сообщением активного на момент отправки запроса окна. +* Раскрытие аргумента — см. далее. +* `user_b` — произвольный текст. +* [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) ### Раскрытие аргумента [user\_b] -Порядок раскрытия аргумента `user_b` (буква b от bare JID) и интерпретации его -отсутствия несколько отличнен от подобного для команды [**/last [user]**](#_last_user). - -Команда `/vcard [user_b]` в конференции: отличий от [user] нет, т. е. запрос к -chat\_jid или chat\_jid/user\_b. - -Команда `/vcard` в обычном чате: - -* запрос к chat\_jid. - -Команда `/vcard user_b`: - -* Если `user_b` является псевдонимом одного или нескольких - пользователей/конференций из ростера, то запрос будет адресован каждому из - них по bare JID. -* Если это отождествление не удалось, то запрос будет адресован JID'у `user_b` - (даже если это full JID, каким должен быть ответ на такого рода запрос не - определяется [XEP-0054](http://www.xmpp.org/extensions/xep-0054.html)). +Порядок раскрытия аргумента `user_b` (буква b от bare JID) и интерпретации его отсутствия несколько отличнен от подобного для команды [/last [user]](Команды.md#_last_user). + +Команда `/vcard [user_b]` в конференции: отличий от [user] нет, т. е. запрос к chat\_jid или chat\_jid/user\_b. + +Команда `/vcard` в обычном чате: + +* запрос к chat\_jid. + +Команда `/vcard user_b`: + +* Если `user_b` является псевдонимом одного или нескольких пользователей/конференций из ростера, то запрос будет адресован каждому из них по bare JID. +* Если это отождествление не удалось, то запрос будет адресован JID'у `user_b` (даже если это full JID, каким должен быть ответ на такого рода запрос не определяется [XEP-0054](http://www.xmpp.org/extensions/xep-0054.html)). ## /version [user] -* Запросить информацию о названии и версии клиента пользователя, а также - информацию об операционной системе (см. - [XEP-0092](http://www.xmpp.org/extensions/xep-0092.html)). Согласно этому - стандарту, ответ должен содержать название и версию клиента и может - содержать информацию об ОС. Ответ выводится под последним сообщением - активного на момент отправки запроса окна. -* Семантика `user` или его отсутствия — см. [**/last [user]**](#_last_user). -* `user` — произвольный текст. -* [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) +* Запросить информацию о названии и версии клиента пользователя, а также информацию об операционной системе (см. [XEP-0092](http://www.xmpp.org/extensions/xep-0092.html)). Согласно этому стандарту, ответ должен содержать название и версию клиента и может содержать информацию об ОС. Ответ выводится под последним сообщением активного на момент отправки запроса окна. +* Семантика `user` или его отсутствия — см. [/last [user]](Команды.md#_last_user). +* `user` — произвольный текст. +* [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) ## /voice nickname ['\\n' reason] -* Активное окно — окно конференции. Сменить [**роль**](#Ссылки) участника - активной конференции с псевдонимом `nickname` на “Participant” (если у него - менее привилегированная роль). В запрос включается, если указан, текст - `reason`. -* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. +* Активное окно — окно конференции. Сменить [роль](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Participant” (если у него менее привилегированная роль). В запрос включается, если указан, текст `reason`. +* `nickname` — текст без символов перевода строки, `reason` — произвольный текст. ## /whois nickname -* Активное окно — окно конференции. Вывести информацию о real JID пользователя - или сообщение об отсутствии информации о real JID. -* `nickname` — текст без символов перевода строки. -* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) +* Активное окно — окно конференции. Вывести информацию о real JID пользователя или сообщение об отсутствии информации о real JID. +* `nickname` — текст без символов перевода строки. +* [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) # Ссылки -* Про роли и типы членства можно почитать [тут](http://www.jabber.ru/node/118) - (по-русски) или [XEP-0045](http://xmpp.org/extensions/xep-0045.html) (с - понятными простым смертным таблицами). +* Про роли и типы членства можно почитать [тут](http://www.jabber.ru/node/118) (по-русски) или [XEP-0045](http://xmpp.org/extensions/xep-0045.html) (с понятными простым смертным таблицами). # TODO: дописать статью $ ls -1 3rd-party-plugins tkabber @@ -496,11 +339,11 @@ tkabber/chats.tcl:997: hook::run chat_send_message_hook $chatid [connection_user $xlib] \ tkabber/README:2426: chat_send_message_hook $chatid $user $body $type 3rd-party-plugins/juick/juick.tcl:76: hook::add chat_send_message_hook \ 3rd-party-plugins/juick/juick.tcl:113: hook::remove chat_send_message_hook \ 3rd-party-plugins/openhistory/openhistory.tcl:8: hook::add chat_send_message_hook [namespace current]::handle_command 15 - 3rd-party-plugins/tastebin/tastebin.tcl:48: hook::add chat_send_message_hook ${NS}::handle_command + 3rd-party-plugins/tastebin/tastebin.tcl:48: hook::add chat_send_message_hook ${NS}::handle_command 3rd-party-plugins/ibuddy/ibuddy.tcl:35:hook::add chat_send_message_hook [list [namespace current]::ibuddy::udp_puts "MACRO_GREEN"] 3rd-party-plugins/reminder/reminder.tcl:71: hook::add chat_send_message_hook \ 3rd-party-plugins/reminder/reminder.tcl:85: hook::remove chat_send_message_hook \ 3rd-party-plugins/urlcmd/urlcmd.tcl:25: hook::add chat_send_message_hook \ 3rd-party-plugins/bldjid2/bldjid2.tcl:186: hook::add chat_send_message_hook \ @@ -519,19 +362,10 @@ tkabber-plugins/bc/bc.tcl:72: hook::remove chat_send_message_hook \ tkabber-plugins/presencecmd/presencecmd.tcl:27: hook::add chat_send_message_hook [namespace current]::handle_command 15 tkabber-plugins/presencecmd/presencecmd.tcl:32: hook::remove chat_send_message_hook [namespace current]::handle_command 15 # Немного мыслей о развитии механизма команд -Проверку синтаксиса, лучше делать не для каждой команды индивидуально, а -централизованно. Регистрируем набор команд со специфицированным форматом -аргументов. При отправке сообщения проверяем ввод на соответствие данному -формату, осуществляя в сущности ту же работу, которую делает парсер команд -shell'а. Остаётся вопрос, что делать, если пользователем набрана существующая -команда с неправильным форматом аргументов или несуществующая команда. Я думаю, -все сообщения, начинающиеся с символа '/', нужно либо обрабатывать как команды, -либо выдавать сообщение о невозможности выполнить команду. А для возможности -отправки сообщения с первым символом '/' предусмотреть специальный хак, -например команду //. - -Ещё в тему единого парсера команд: тип аргумента `user`, раскрывается как в -команде [**/last [user]**](#_last_user), и тип `user_b`, раскрывается как -в команде [**/vcard [user\_b]**](#_vcard_user_b). +Проверку синтаксиса, лучше делать не для каждой команды индивидуально, а централизованно. Регистрируем набор команд со специфицированным форматом аргументов. При отправке сообщения проверяем ввод на соответствие данному формату, осуществляя в сущности ту же работу, которую делает парсер команд shell'а. Остаётся вопрос, что делать, если пользователем набрана существующая команда с неправильным форматом аргументов или несуществующая команда. Я думаю, все сообщения, начинающиеся с символа '/', нужно либо обрабатывать как команды, либо выдавать сообщение о невозможности выполнить команду. А для возможности отправки сообщения с первым символом '/' предусмотреть специальный хак, например команду //. + +Ещё в тему единого парсера команд: тип аргумента `user`, раскрывается как в команде [/last [user]](Команды.md#_last_user), и тип `user_b`, раскрывается как в команде [/vcard [user\_b]](Команды.md#_vcard_user_b). + + Index: wiki/ru/Культ_личности_Ткаббера.md ================================================================== --- wiki/ru/Культ_личности_Ткаббера.md +++ wiki/ru/Культ_личности_Ткаббера.md @@ -1,6 +1,7 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Культ_личности_Ткаббера/index.html) + # Культ личности Ткаббера Материал из Tkabber Wiki @@ -10,294 +11,165 @@ * [2 Трансцендентная сущность](#Трансцендентная_сущность) * [3 Пророческий сон](#Пророческий_сон) * [4 Святая равноапостольская церковь](#Святая_равноапостольская_церковь) * [5 Ткаббер правит миром](#Ткаббер_правит_миром) * [6 Игра "Задай вопрос про Ткаббер и выиграй приз!"](#Игра_Задай_вопрос_про_Ткаббер_и_выиграй_приз) - * [6.1 Список Славы](#Список_Славы) - * [6.1.1 Октябрь 2007 (Compiz, meet Tkabber. Tkabber, meet Compiz)](#Октябрь_2007_Compiz_meet_Tkabber._Tkabber_meet_Compiz) - * [6.1.2 Ноябрь 2007 (не.жужжи.насекомое)](#Ноябрь_2007_не.жужжи.насекомое) - * [6.1.3 Февраль 2008 (ткаббер версия 4.0 финал)](#Февраль_2008_ткаббер_версия_4.0_финал) - * [6.1.4 Май 2008 (скрытие версии клиента)](#Май_2008_скрытие_версии_клиента) -* [7 Как правильно троллить в конференции tkabber@c.j.r.](#Как_правильно_троллить_в_конференции_tkabberc.j.r.) - * [7.1 Толстый троллинг](#Толстый_троллинг) - * [7.2 Тонкий троллинг](#Тонкий_троллинг) - * [7.3 Очень тонкий троллинг](#Очень_тонкий_троллинг) - * [7.4 Резюмируя](#Резюмируя) + * [6.1 Список Славы](#Список_Славы) + * [6.1.1 Октябрь 2007 (Compiz, meet Tkabber. Tkabber, meet Compiz)](#Октябрь_2007_Compiz_meet_Tkabber._Tkabber_meet_Compiz) + * [6.1.2 Ноябрь 2007 (не.жужжи.насекомое)](#Ноябрь_2007_не.жужжи.насекомое) + * [6.1.3 Февраль 2008 (ткаббер версия 4.0 финал)](#Февраль_2008_ткаббер_версия_4.0_финал) + * [6.1.4 Май 2008 (скрытие версии клиента)](#Май_2008_скрытие_версии_клиента) +* [7 Как правильно троллить в конференции tkabber@c.j.r.](#Как_правильно_троллить_в_конференции_tkabber@c.j.r.) + * [7.1 Толстый троллинг](#Толстый_троллинг) + * [7.2 Тонкий троллинг](#Тонкий_троллинг) + * [7.3 Очень тонкий троллинг](#Очень_тонкий_троллинг) + * [7.4 Резюмируя](#Резюмируя) * [8 TODO](#TODO) -## Рождение легенды -Ткаббер трёх дней от роду (найдено в архивах НКВД): -![картинка с трёхдневным Ткаббером](../images/0day-tkabber.png) - -## Трансцендентная сущность - -![Альтер эго Ткаббера](../images/180px-Sneg_01.jpg) - -Культисту [*hypersw*](Участник_Hypersw.md), медитировавшему однажды в холодном -январском сугробе, внезапно открылась трансцендентная сущность Ткаббера — -самого "фичастого" XMPP-клиента, и Провидние указало ему -[Тот Самый URL](http://www.deposviblovo.ru/photo/vagon/sneg/sneg_01.jpg) (уже недоступен). - -## Пророческий сон - -![Bigote видит индюка с квазипериодическим пульсом](../images/Psycho.jpg) - -[12:32]\* [**bigote**](Участник_Bigote.md) приснился сон, что [**teo**](Участник_Teo.md) -велел ему посчитать пульс какого-то не то индюка, не то петуха. но что-то шло -не так в этом мире, и секундная стрелка часов носилась как бешеная, и -[**bigote**](Участник_Bigote.md) не успевал за ней даже следить, не то что считать -пульс. тогда [**teo**](Участник_Teo.md) сказал: "сейчас настрою" и -[сделал как-то так](http://ru.wikipedia.org/wiki/Специальная_теория_относительности#.D0.A1.D1.83.D1.89.D0.BD.D0.BE.D1.81.D1.82.D1.8C_.D0.A1.D0.A2.D0.9E), -что движение стрелки замедлилось, а размер [**шрифта в чате**](Шрифты.md) -уменьшился (именно так я и понял, что время замедлилось). - -Оригинал — [здесь](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/10/13.html#12:32:48). - -Дополнительные материалы — [здесь](http://ru.wikipedia.org/wiki/Бред) -[здесь](http://ru.wikipedia.org/wiki/Сновидение). - -## Святая равноапостольская церковь -[Первые апостолы](http://www.jabber.ru/node/223#comment-228) - -Примечание: к [синдрому ПГМ](http://lurkmore.ru/wiki/ПГМ) отношения не имеет. - -## Ткаббер правит миром -Сертификат порабощения Мира предоставлен [[1]](http://thepr.ru). - -![Сертификат порабощения мира](../images/180px-Tkabber-master.jpg) - -[Ссылка на сам сертификат (осторожно, трафик!).](http://thepr.ru/index.php?cert=tkabber243821) - -## Игра "Задай вопрос про Ткаббер и выиграй приз!" -Правила несложные: - -* Задай вопрос, относящийся к Ткабберу, ответа на который нет на вики и в - интернете (см. раздел [Ссылки](Ссылки.md)). -* Если и вправду на него нет ответа, мы постараемся ответ найти, а человек, - вопрос задавший, автоматически становится победителем. -* Подведение итогов — последний день каждого месяца. -* Победителю разрешается в день подведения итогов в течение получаса нарушать - правила, изложенные в топике, а админы конфы в этот день будут говорить ему - два раза "ку". -* Имя победителя появится в Списке Славы, который будет публиковаться тут же, - чуть ниже. -* Победитель снискает почёт и уважение на просторах конференции, и ему - пожизненно присвоится ранг "член-корреспондент". - -### Список Славы - -#### Октябрь 2007 (Compiz, meet Tkabber. Tkabber, meet Compiz) - -Победил вопрос Vit@liy (а также ответ teo): - -\ У меня в окне настроек при перемотке смазывается содержимое окна. Не -подскажите из-за чего это может быть? - -\ ничего нового. ткаббер так же глючит в компизе - -\ или компиз так же глючит на ткаббере - -[Читать весь лог.](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/10/01.html#22:07:10) - -#### Ноябрь 2007 (не.жужжи.насекомое) - -Досрочно победил вопрос astja (над решением бились всей конфой всё утро, так -что лучше читать [весь чатлог](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/11/20.html#11:10:31)): - -[11:35:11](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/11/20.html#11:35:11) -\ Спасибо за понимание. [http://slil.ru/25125380](http://slil.ru/25125380) Здесь -скриншот _(в формате BMP, 3Mb. Лёгкая версия в 132 Kb (хоть и тоже с -расширением BMP) — [тут](http://slil.ru/25125415). Прим. ред.)._ Сегодня когда -я вошла в программу, открыла свою конференцию (на скриншоте она называется -svoiludi...) и общалась в ней - все было вполне обычно, все мои сообщения были -под моим ником. Но когда мне написал кто-то из контактов - вкладка открылась не -под ником контакта а под ником "не.жужжи.насекомое", а мои сообщения ему -уходили под этим же ником. У меня ранее в контактах была сохранена одноименная -конференция, в которой я бывала пару раз. Теперь когда я нахожу в списке эту -конференцию и просматриваю ее информацию - там отображается моя личная -информация. Удалить эту конференция нельзя. К тому же, если я сама первая пишу -кому-то из своего контакт-листа - на примере - Vitaliys, то снова видно какой у -меня ник...Но вкладка называется нормально. И ваша конференция тоже называется -"не.жужжи.насекомое" на снимке она же...открыта крайняя правая. - -_Прим. ред.: Ссылки уже не работают, так как подобные сервисы долго файлы не -хранят. Надо было нам файлик скачать к себе, конечно, но... поздно пить -боржоми, когда почки в унитазе :) Можем подтвердить, что на скриншоте всё было -именно так, как описывает astja._ - -#### Февраль 2008 (ткаббер версия 4.0 финал) - -Похоже, этот вопрос тоже победит досрочно, уж больно хорош ;) - - [13:51:24] привет всем :) где можно скачать +# Рождение легенды +Ткаббер трёх дней от роду (найдено в архивах НКВД): ![картинка с трёхдневным Ткаббером](../images/0day-tkabber.png) + +# Трансцендентная сущность + +![](../images/180px-Sneg_01.jpg) + +![](../images/magnify-clip.png) + +Культисту [hypersw](Участник_Hypersw.md), медитировавшему однажды в холодном январском сугробе, внезапно открылась трансцендентная сущность Ткаббера — самого "фичастого" XMPP-клиента, и Провидние указало ему [Тот Самый URL](http://www.deposviblovo.ru/photo/vagon/sneg/sneg_01.jpg) (уже недоступен). + +# Пророческий сон + +![Bigote видит индюка с квазипериодическим пульсом](../images/Psycho.jpg) [12:32]\* [bigote](Участник_Bigote.md) приснился сон, что [teo](Участник_Teo.md) велел ему посчитать пульс какого-то не то индюка, не то петуха. но что-то шло не так в этом мире, и секундная стрелка часов носилась как бешеная, и [bigote](Участник_Bigote.md) не успевал за ней даже следить, не то что считать пульс. тогда [teo](Участник_Teo.md) сказал: "сейчас настрою" и [сделал как-то так](http://ru.wikipedia.org/wiki/Специальная_теория_относительности#.D0.A1.D1.83.D1.89.D0.BD.D0.BE.D1.81.D1.82.D1.8C_.D0.A1.D0.A2.D0.9E), что движение стрелки замедлилось, а размер [шрифта в чате](Шрифты.md) уменьшился (именно так я и понял, что время замедлилось). + +Оригинал — [здесь](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/10/13.html#12:32:48). + +Дополнительные материалы — [здесь](http://ru.wikipedia.org/wiki/Бред) [здесь](http://ru.wikipedia.org/wiki/Сновидение). + +# Святая равноапостольская церковь +[Первые апостолы](http://www.jabber.ru/node/223#comment-228) + +Примечание: к [синдрому ПГМ](http://lurkmore.ru/wiki/ПГМ) отношения не имеет. + +# Ткаббер правит миром +Сертификат порабощения Мира предоставлен [[1]](http://thepr.ru)]. + +![](../images/180px-Tkabber-master.jpg) + +![](../images/magnify-clip.png) + +[Ссылка на сам сертификат (осторожно, трафик!).](http://thepr.ru/index.php?cert=tkabber243821) + +# Игра "Задай вопрос про Ткаббер и выиграй приз!" +Правила несложные: + +* Задай вопрос, относящийся к Ткабберу, ответа на который нет на вики и в интернете (см. раздел [Ссылки](Ссылки.md)). +* Если и вправду на него нет ответа, мы постараемся ответ найти, а человек, вопрос задавший, автоматически становится победителем. +* Подведение итогов — последний день каждого месяца. +* Победителю разрешается в день подведения итогов в течение получаса нарушать правила, изложенные в топике, а админы конфы в этот день будут говорить ему два раза "ку". +* Имя победителя появится в Списке Славы, который будет публиковаться тут же, чуть ниже. +* Победитель снискает почёт и уважение на просторах конференции, и ему пожизненно присвоится ранг "член-корреспондент". + +## Список Славы + +### Октябрь 2007 (Compiz, meet Tkabber. Tkabber, meet Compiz) + +Победил вопрос Vit@liy (а также ответ teo): + +\ У меня в окне настроек при перемотке смазывается содержимое окна. Не подскажите из-за чего это может быть? + +\ ничего нового. ткаббер так же глючит в компизе + +\ или компиз так же глючит на ткаббере + +[Читать весь лог.](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/10/01.html#22:07:10) + +### Ноябрь 2007 (не.жужжи.насекомое) + +Досрочно победил вопрос astja (над решением бились всей конфой всё утро, так что лучше читать [весь чатлог](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/11/20.html#11:10:31)): + +[11:35:11](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/11/20.html#11:35:11) \ Спасибо за понимание. [http://slil.ru/25125380](http://slil.ru/25125380) Здесь скриншот _(в формате BMP, 3Mb. Лёгкая версия в 132 Kb (хоть и тоже с расширением BMP) — [тут](http://slil.ru/25125415). Прим. ред.)._ Сегодня когда я вошла в программу, открыла свою конференцию (на скриншоте она называется svoiludi...) и общалась в ней - все было вполне обычно, все мои сообщения были под моим ником. Но когда мне написал кто-то из контактов - вкладка открылась не под ником контакта а под ником "не.жужжи.насекомое", а мои сообщения ему уходили под этим же ником. У меня ранее в контактах была сохранена одноименная конференция, в которой я бывала пару раз. Теперь когда я нахожу в списке эту конференцию и просматриваю ее информацию - там отображается моя личная информация. Удалить эту конференция нельзя. К тому же, если я сама первая пишу кому-то из своего контакт-листа - на примере - Vitaliys, то снова видно какой у меня ник...Но вкладка называется нормально. И ваша конференция тоже называется "не.жужжи.насекомое" на снимке она же...открыта крайняя правая. + +_Прим. ред.: Ссылки уже не работают, так как подобные сервисы долго файлы не хранят. Надо было нам файлик скачать к себе, конечно, но... поздно пить боржоми, когда почки в унитазе :) Можем подтвердить, что на скриншоте всё было именно так, как описывает astja._ + +### Февраль 2008 (ткаббер версия 4.0 финал) + +Похоже, этот вопрос тоже победит досрочно, уж больно хорош ;) + + [13:51:24] привет всем :) где можно скачать ткабер версию 4.0 финал? [13:51:46] version - [13:51:46] alengina : у тебя клиент Tkabber 0.10.1-beta2 + [13:51:46] alengina : у тебя клиент Tkabber 0.10.1-beta2 (Tcl/Tk 8.4.16 (pack rev.2)) - Windows XP - [13:52:06] alengina : если найдешь скажи.. + [13:52:06] alengina : если найдешь скажи.. а то мы на старой 0.10.1 сидим.. [13:53:14] vlf e; [13:53:20] мда уж [13:54:15] ну ладно пока ... -© [http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/02/03.html\#13:51:24](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/02/03.html#13:51:24) +© [http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/02/03.html\#13:51:24](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/02/03.html#13:51:24) -#### Май 2008 (скрытие версии клиента) +### Май 2008 (скрытие версии клиента) -На сей раз побеждает (тоже досрочно) не вопрос, а ответ камрада [Gebb](Участник_Gebb.md): +На сей раз побеждает (тоже досрочно) не вопрос, а ответ камрада [Gebb](Участник_Gebb.md): [07:25:56] утра - [07:26:28] не подскажете как поменять Client ID + [07:26:28] не подскажете как поменять Client ID или как там в tkabber? а то палят что я под виндой сижу - [07:50:57] Если бы господь считал винду отстойной осью, + [07:50:57] Если бы господь считал винду отстойной осью, допустил бы он существование Ткаббера под ней? Так им и скажи. И не стесняйся винды. [08:13:24] <_vt_> в фортунки %) -© [http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/05/21.html\#07:25:56](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/05/21.html#07:25:56) - -## Как правильно троллить в конференции tkabber@c.j.r. -В связи с недавними гонениями AOL на пасынков ICQ всё больше и больше народу -переходит на Jabber. Бродя по Discovery сервера jabber.ru, многие новички, -случается, заходят и в нашу конференцию, совершенно не зная, как себя при этом -вести (топик комнаты освещает этот момент, но его мало кто читает). Часто люди -пробуют в конфе разнообразные фичи свежепоставленного джаббер-клиента, -разглядывают собственные смайлики или просто спамят или троллят. Причём в 90% -случаев делают это из рук вон плохо. В нижеследующем коротком мануальчике мы -постараемся рассказать об основных аспектах труЪ-тролленья, дающего невероятное -количество лулзов при минимальных затратах сил. - -### Толстый троллинг - -К сожалению, толстый троллинг (налёты, спам и злоупотребление олбанским) очень -неэффективен в этой конференции, потому что пресекается админами жестоко и на -корню: им ничего не стоит забанить на полгода целый сервер или поставить -комнату в read-only mode. Поэтому сосредоточимся на тонком и _очень тонком_ -троллинге. Он, как и сам Ткаббер, — не для средних умов, но зато (как и сам -Ткаббер) невероятно эффективен. - -### Тонкий троллинг - -* Перво-наперво, надо поставить Ткаббер и научиться в нём работать. После - этого надо с месяцок потусоваться в конференции, втираясь в доверие. Пока вы - этим занимаетесь, можете прочитать [**Ткаббер ЧаВо**](Ткаббер_ЧаВо.md), а лучше - всю вики, чтобы быть осведомлённее самих разработчиков и при случае затыкать - им рот цитатами оттуда. Не спешите в первые же дни задавать вопросы, иначе - вы можете чего-нибудь не того ляпнуть, и вас примут за толстого тролля и - сразу выгонят, а то и забанят. Но даже если и не выгонят, на вас ляжет пятно - подозрения, и втереться в доверие станет на порядок сложнее. - -* Немного поосвоившись, можно начинать троллить, например, спрашивая, почему в - Ткаббере нету фичи, которая есть в твоём _на самом деле любимом_ клиенте. - Разработчики рвут на груди рубаху, защищая свой сраный тикль и свой - недоделанный Ткаббер, а ты валяешься под стулом, ловя лулзы. - -* Плохого тролля сразу выдаёт плохой русский язык. Пишите грамотно, если - хотите сойти в конференции за своего. Половина пользователей конфы и все её - админы — настоящие граммар-наци. Если у вас в школе по русскому языку была - тройка с длинным минусом, вам тут нечего делать. Вместо того чтобы получить - удовольствие самому, вы доставите удовольствие этим глумливым грамотеям. И - никакого олбанского! Вы же не хотите одной фразой испортить игру, - рассчитанную на целые годы удовольствия? Хинт: если вам посоветовали - спросить у бота в привате "wtf русский\_язык", это значит, что ваша - фальшивая борода грамотного человека отклеилась. Бегите перечитывать - [Розенталя.](http://www.spelling.spb.ru/rosenthal/alpha/) - -* Та же история с так называемыми "слепыми смайлами с двойными подбородками", - вот такими — )))))) Чего им взбрендило за них банить??????? Весь интернет - так смеётся!!!!1111 Не может же быть, что весь интернет — идиоты, и лишь - одни разработчики Ткаббера — умные. Что же они тогда строем не ходят? Тем не - менее, чтобы не проколоться, пишите смайлики с глазками, вот так — :) А ещё - лучше — даже не заикайтесь в конференции ни про них, ни про аватары. - -* Можно, прикидываясь нубом, попросить написать какой-нибудь плагин и потом - долго ухохатываться, читая их советы выучить тикль, который проще пареной - репы, и написать плагин самому и потом поделиться с общественностью (на - самом деле плагин давно написал ты сам и даже собираешься выложить его на - вики, но потроллить — это же святое!) - -* Очень весело бывает спросить, почему Ткаббер такой страшный, хотя на самом - деле ты давно приделал к нему tile, просто не хочешь делиться тайной. То же - самое относится к jingle. - -* Самый писк тонкого тролленья — это сидеть в конфе через сам Ткаббер, - допиленный таким образом, чтобы при выходе из конфы он выдавал что-нибудь - вроде "QIP Infium: Спокойное общение" (ну и версию клиента и OS показывал - соответствующую). Задаёшь свой глупый вопрос, ловишь лулзы, а потом выходишь - из конференции и идёшь читать её логи, потому что самое интересное - начинается, когда они видят твоё выходное сообщение. Естественно, допиливать - Ткаббер надо самостоятельно, не прося помощи у разработчиков. Они не такие - дураки, чтобы не связать эти два события в логическую цепочку. - -### Очень тонкий троллинг - -* Теоретическая подготовка очень продвинутого тролля должна быть сравнимой с - подготовкой разработчиков. Поэтому очень не помешает выучить тикль, благо он - учится за три дня. В коде Ткаббера разбираться необязательно — там чёрт ногу - сломит, но самые основные модули стоит выучить близко к тексту. - -* Если вы выбрали амплуа нуба, можете попробовать тонко поиграть на доброте - админов к тем, кто стремится к знаниям, а не идёт по лёгкому пути, донимая - разрабов вопросами, давно разжёванными на вики. Поэтому перед тем как идти в - конфу с каким-то вопросом, освежите в памяти официальную документацию и - [**Ткаббер ЧаВо**](Ткаббер_ЧаВо.md). Погуглите, наконец. Подучив матчасть, можно - не бояться сморозить какую-нибудь глупость, которая сразу выдаст вас с - головой. Вопрос стоит задать [**так**](Остров_посланных_на....md), чтобы казалось, что вы мало - чего понимаете, но из кожи вон лезете, чтобы разобраться. Разработчики таких - любят :) Они сразу бросят все свои дела и наперебой кинутся помогать вам. - Классно же, а? У вас-то ведь на самом деле всё работает! Ну или чинится - двумя щёлканьями пальцев. - -* Однако _очень тонкий троллинг_ теряет много остроты, если вы сидите на - стабильной версии и прикидываетесь новичком. Научитесь пользоваться - subversion, поставьте себе свежую версию из репозитория (ради смеха - предварительно ознакомившись с [**этой статьёй**](SVN_disclaimer.md)). Так вы - убьёте двух зайцев: во-первых, получите самые свежие фичи и исправления - багов Ткаббера, а во-вторых, — это же круто, вы типа "сидите на голове - репа"! Сейчас мы расскажем, как можно с выгодой использовать svn-версию для - продвинутого тролленья. - -* Время от времени вы можете "помочь разработке", показав девелоперам - найденный баг (сидя на голове репа, вы получаете не только свежие фичи, но и - свежие баги). Обязательно сделайте это по всей форме: залив текст ошибки на - paste.org.ru, а скриншот — на tinypic.com. Расскажите, какие условия вызвали - этот баг, как вы пытались с ним бороться, ну и так далее. Вот прикол — - наивные ткабберовцы начнут уважать вас и считаться с вашим мнением, и - невдомёк им, что на самом-то деле вы просто корчитесь от смеха! Троллить в - этом стиле очень трудно, потому что можно, самому того не замечая, втянуться - в разработку и полюбить эту кривую прогу и тупой тикль - ([по словам одного из их гуру](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2009/02/04.html#14:49:23.893658), - у него нету даже синтаксиса), который надо было выбросить на свалку ещё в - прошлом тысячелетии и переписать Ткаббер на сишарпе, питоне или каком-нибудь - другом [православном языке.](http://okante.narod.ru/D/) - -* Ещё один путь "примкнуть" к разработке — сделать свою цветовую схему, свой - набор смайликов, иконок или звуков, написать свой плагин, как это делают - некоторые олухи, которым не жаль своего времени. Да, вы тоже потратите на - это время, но разница в том, что они это сделали за свою опенсорсную идею, а - вы сделаете, чтобы потом втайне простебаться над всеми пользователями, - которые вам поверили ;) Сколько ни рисуй к Ткабберу красивых иконок и - цветовых схем — он так и останется, к удовольствию анонимусов с ЛОРа, - **самым страшным клиентом.** - -* Чуть не забыл добавить: обладая Ткаббером, вы получаете в нагрузку ещё одну - конференцию, где можно оттянуться: xmpp:tkabber-games@conference.jabber.ru. - Поставьте себе игровые плагины, заходите и прикидывайтесь шахматистом или - любителем шашек/рэндзю/реверси. Если не потроллите, то хоть развлечётесь в - поддавки :) Кстати, можно ещё написать плагины для го, преферанса и морского - боя — представляете, сколько славы и лулзов вы оторвёте за один такой - плагин?! ;) - -### Резюмируя - -Эти две конференции — непаханое поле для умных, тонких ценителей настоящих -лулзов. Было бы кому и чем пахать... Мы ждём вас, дорогие тролли! - -## TODO -* Устроить первый Вселенский Собор. -* Заказать у Церетели чугунное изваяние Ткаббера в виде официального логотипа - — "Лампочки-Земли" в масштабе 1:1; измерения доступны - [здесь](http://ru.wikipedia.org/wiki/Земля). -* Сочинить гимн и девиз Ткаббера; разработать флаг и герб. -* Таки сделать что-нибудь из этого! Или догнать хотя бы пиджин. - -![Что ты сделал, чтобы догнать пиджин?](../images/180px-Tkabber_jingle.jpg) +© [http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/05/21.html\#07:25:56](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/05/21.html#07:25:56) + +# Как правильно троллить в конференции tkabber@c.j.r. +В связи с недавними гонениями AOL на пасынков ICQ всё больше и больше народу переходит на Jabber. Бродя по Discovery сервера jabber.ru, многие новички, случается, заходят и в нашу конференцию, совершенно не зная, как себя при этом вести (топик комнаты освещает этот момент, но его мало кто читает). Часто люди пробуют в конфе разнообразные фичи свежепоставленного джаббер-клиента, разглядывают собственные смайлики или просто спамят или троллят. Причём в 90% случаев делают это из рук вон плохо. В нижеследующем коротком мануальчике мы постараемся рассказать об основных аспектах труЪ-тролленья, дающего невероятное количество лулзов при минимальных затратах сил. + +## Толстый троллинг + +К сожалению, толстый троллинг (налёты, спам и злоупотребление олбанским) очень неэффективен в этой конференции, потому что пресекается админами жестоко и на корню: им ничего не стоит забанить на полгода целый сервер или поставить комнату в read-only mode. Поэтому сосредоточимся на тонком и _очень тонком_ троллинге. Он, как и сам Ткаббер, — не для средних умов, но зато (как и сам Ткаббер) невероятно эффективен. + +## Тонкий троллинг + +* Перво-наперво, надо поставить Ткаббер и научиться в нём работать. После этого надо с месяцок потусоваться в конференции, втираясь в доверие. Пока вы этим занимаетесь, можете прочитать [Ткаббер ЧаВо](Ткаббер_ЧаВо.md), а лучше всю вики, чтобы быть осведомлённее самих разработчиков и при случае затыкать им рот цитатами оттуда. Не спешите в первые же дни задавать вопросы, иначе вы можете чего-нибудь не того ляпнуть, и вас примут за толстого тролля и сразу выгонят, а то и забанят. Но даже если и не выгонят, на вас ляжет пятно подозрения, и втереться в доверие станет на порядок сложнее. + +* Немного поосвоившись, можно начинать троллить, например, спрашивая, почему в Ткаббере нету фичи, которая есть в твоём _на самом деле любимом_ клиенте. Разработчики рвут на груди рубаху, защищая свой сраный тикль и свой недоделанный Ткаббер, а ты валяешься под стулом, ловя лулзы. + +* Плохого тролля сразу выдаёт плохой русский язык. Пишите грамотно, если хотите сойти в конференции за своего. Половина пользователей конфы и все её админы — настоящие граммар-наци. Если у вас в школе по русскому языку была тройка с длинным минусом, вам тут нечего делать. Вместо того чтобы получить удовольствие самому, вы доставите удовольствие этим глумливым грамотеям. И никакого олбанского! Вы же не хотите одной фразой испортить игру, рассчитанную на целые годы удовольствия? Хинт: если вам посоветовали спросить у бота в привате "wtf русский\_язык", это значит, что ваша фальшивая борода грамотного человека отклеилась. Бегите перечитывать [Розенталя.](http://www.spelling.spb.ru/rosenthal/alpha/) + +* Та же история с так называемыми "слепыми смайлами с двойными подбородками", вот такими — )))))) Чего им взбрендило за них банить??????? Весь интернет так смеётся!!!!1111 Не может же быть, что весь интернет — идиоты, и лишь одни разработчики Ткаббера — умные. Что же они тогда строем не ходят? Тем не менее, чтобы не проколоться, пишите смайлики с глазками, вот так — :) А ещё лучше — даже не заикайтесь в конференции ни про них, ни про аватары. + +* Можно, прикидываясь нубом, попросить написать какой-нибудь плагин и потом долго ухохатываться, читая их советы выучить тикль, который проще пареной репы, и написать плагин самому и потом поделиться с общественностью (на самом деле плагин давно написал ты сам и даже собираешься выложить его на вики, но потроллить — это же святое!) + +* Очень весело бывает спросить, почему Ткаббер такой страшный, хотя на самом деле ты давно приделал к нему tile, просто не хочешь делиться тайной. То же самое относится к jingle. + +* Самый писк тонкого тролленья — это сидеть в конфе через сам Ткаббер, допиленный таким образом, чтобы при выходе из конфы он выдавал что-нибудь вроде "QIP Infium: Спокойное общение" (ну и версию клиента и OS показывал соответствующую). Задаёшь свой глупый вопрос, ловишь лулзы, а потом выходишь из конференции и идёшь читать её логи, потому что самое интересное начинается, когда они видят твоё выходное сообщение. Естественно, допиливать Ткаббер надо самостоятельно, не прося помощи у разработчиков. Они не такие дураки, чтобы не связать эти два события в логическую цепочку. + +## Очень тонкий троллинг + +* Теоретическая подготовка очень продвинутого тролля должна быть сравнимой с подготовкой разработчиков. Поэтому очень не помешает выучить тикль, благо он учится за три дня. В коде Ткаббера разбираться необязательно — там чёрт ногу сломит, но самые основные модули стоит выучить близко к тексту. + +* Если вы выбрали амплуа нуба, можете попробовать тонко поиграть на доброте админов к тем, кто стремится к знаниям, а не идёт по лёгкому пути, донимая разрабов вопросами, давно разжёванными на вики. Поэтому перед тем как идти в конфу с каким-то вопросом, освежите в памяти официальную документацию и [Ткаббер ЧаВо](Ткаббер_ЧаВо.md). Погуглите, наконец. Подучив матчасть, можно не бояться сморозить какую-нибудь глупость, которая сразу выдаст вас с головой. Вопрос стоит задать [так](Topic.md), чтобы казалось, что вы мало чего понимаете, но из кожи вон лезете, чтобы разобраться. Разработчики таких любят :) Они сразу бросят все свои дела и наперебой кинутся помогать вам. Классно же, а? У вас-то ведь на самом деле всё работает! Ну или чинится двумя щёлканьями пальцев. + +* Однако _очень тонкий троллинг_ теряет много остроты, если вы сидите на стабильной версии и прикидываетесь новичком. Научитесь пользоваться subversion, поставьте себе свежую версию из репозитория (ради смеха предварительно ознакомившись с [этой статьёй](SVN_disclaimer.md)). Так вы убьёте двух зайцев: во-первых, получите самые свежие фичи и исправления багов Ткаббера, а во-вторых, — это же круто, вы типа "сидите на голове репа"! Сейчас мы расскажем, как можно с выгодой использовать svn-версию для продвинутого тролленья. + +* Время от времени вы можете "помочь разработке", показав девелоперам найденный баг (сидя на голове репа, вы получаете не только свежие фичи, но и свежие баги). Обязательно сделайте это по всей форме: залив текст ошибки на paste.org.ru, а скриншот — на tinypic.com. Расскажите, какие условия вызвали этот баг, как вы пытались с ним бороться, ну и так далее. Вот прикол — наивные ткабберовцы начнут уважать вас и считаться с вашим мнением, и невдомёк им, что на самом-то деле вы просто корчитесь от смеха! Троллить в этом стиле очень трудно, потому что можно, самому того не замечая, втянуться в разработку и полюбить эту кривую прогу и тупой тикль ([по словам одного из их гуру](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2009/02/04.html#14:49:23.893658), у него нету даже синтаксиса), который надо было выбросить на свалку ещё в прошлом тысячелетии и переписать Ткаббер на сишарпе, питоне или каком-нибудь другом [православном языке.](http://okante.narod.ru/D/) + +* Ещё один путь "примкнуть" к разработке — сделать свою цветовую схему, свой набор смайликов, иконок или звуков, написать свой плагин, как это делают некоторые олухи, которым не жаль своего времени. Да, вы тоже потратите на это время, но разница в том, что они это сделали за свою опенсорсную идею, а вы сделаете, чтобы потом втайне простебаться над всеми пользователями, которые вам поверили ;) Сколько ни рисуй к Ткабберу красивых иконок и цветовых схем — он так и останется, к удовольствию анонимусов с ЛОРа, **самым страшным клиентом.** + +* Чуть не забыл добавить: обладая Ткаббером, вы получаете в нагрузку ещё одну конференцию, где можно оттянуться: xmpp:tkabber-games@conference.jabber.ru. Поставьте себе игровые плагины, заходите и прикидывайтесь шахматистом или любителем шашек/рэндзю/реверси. Если не потроллите, то хоть развлечётесь в поддавки :) Кстати, можно ещё написать плагины для го, преферанса и морского боя — представляете, сколько славы и лулзов вы оторвёте за один такой плагин?! ;) + +## Резюмируя + +Эти две конференции — непаханое поле для умных, тонких ценителей настоящих лулзов. Было бы кому и чем пахать... Мы ждём вас, дорогие тролли! + +# TODO +* Устроить первый Вселенский Собор. +* Заказать у Церетели чугунное изваяние Ткаббера в виде официального логотипа — "Лампочки-Земли" в масштабе 1:1; измерения доступны [здесь](http://ru.wikipedia.org/wiki/Земля). +* Сочинить гимн и девиз Ткаббера; разработать флаг и герб. +* Таки сделать что-нибудь из этого! Или догнать хотя бы пиджин. + +![](../images/180px-Tkabber_jingle.jpg) + +![](../images/magnify-clip.png) + + Index: wiki/ru/Между_офлайном_и_онлайном.md ================================================================== --- wiki/ru/Между_офлайном_и_онлайном.md +++ wiki/ru/Между_офлайном_и_онлайном.md @@ -1,355 +1,204 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Между_офлайном_и_онлайном/index.html) + # Между офлайном и онлайном Материал из Tkabber Wiki -В этой статье рассказывается от том, как Ткаббер переходит грань между -"офлайном" и "онлайном", подключаясь к серверу: какие протоколы при этом -используются, что означают "все эти странные настройки" в окне регистрации -пользователя и какие "галочки понавключать" чтобы "оно всё заработало". +В этой статье рассказывается от том, как Ткаббер переходит грань между "офлайном" и "онлайном", подключаясь к серверу: какие протоколы при этом используются, что означают "все эти странные настройки" в окне регистрации пользователя и какие "галочки понавключать" чтобы "оно всё заработало". ## Содержание * [1 Для самых маленьких](#Для_самых_маленьких) * [2 Ветхий и Новый заветы XMPP](#Ветхий_и_Новый_заветы_XMPP) * [3 Канал связи клиент-сервер в Jabber/XMPP](#Канал_связи_клиент-сервер_в_Jabber_XMPP) - * [3.1 Концепции](#Концепции) - * [3.2 Куда и как подключаться?](#Куда_и_как_подключаться) - * [3.3 Защита потока](#Защита_потока) - * [3.3.1 SSL/TLS](#SSL_TLS) - * [3.3.2 Сертификаты SSL/TLS](#Сертификаты_SSL_TLS) - * [3.4 Аутентификация пользователя](#Аутентификация_пользователя) - * [3.5 Реализация в XMPP](#Реализация_в_XMPP) - * [3.6 Реализация в Jabber](#Реализация_в_Jabber) - * [3.7 Поддержка в Ткаббере](#Поддержка_в_Ткаббере) + * [3.1 Концепции](#Концепции) + * [3.2 Куда и как подключаться?](#Куда_и_как_подключаться) + * [3.3 Защита потока](#Защита_потока) + * [3.3.1 SSL/TLS](#SSL_TLS) + * [3.3.2 Сертификаты SSL/TLS](#Сертификаты_SSL_TLS) + * [3.4 Аутентификация пользователя](#Аутентификация_пользователя) + * [3.5 Реализация в XMPP](#Реализация_в_XMPP) + * [3.6 Реализация в Jabber](#Реализация_в_Jabber) + * [3.7 Поддержка в Ткаббере](#Поддержка_в_Ткаббере) * [4 Подключение к XMPP-серверу: практика](#Подключение_к_XMPP-серверу_практика) - * [4.1 "Стандартный" XMPP сервер](#Стандартный_XMPP_сервер) - * [4.2 Серверы Google Talk](#Серверы_Google_Talk) + * [4.1 "Стандартный" XMPP сервер](#Стандартный_XMPP_сервер) + * [4.2 Серверы Google Talk](#Серверы_Google_Talk) * [5 Примечания](#Примечания) # Для самых маленьких -Здесь приведены "рекомендованные" настройки для _типичного_ случая, под которым -мы понимаем соединение с сервером jabber.ru. - -Рассмотрим самый простой случай: вы подключены к интернету напрямую, безо -всяких прокси, вместе с Ткаббером установлены все нужные и ненужные пакеты, -перечисленные, например, [тут](http://tkabber.jabber.ru/dependencies2). В этом -случае на 95% подойдут следующие настройки: - -* На вкладке "Соединение" окошка логина (которое вызывается по Ctrl-L) ничего - отмечать не надо. -* На вкладке "Аутентификация" включить две галочки: "Использовать SASL для - аутентификации" и "Разрешить механизм SASL X-GOOGLE-TOKEN". Строго говоря, - вторая из них нужна для подключения к аккаунту на гугль-талке, но пусть уж - будет. -* На вкладке "SSL & Сжатие" отметьте "Шифрование (STARTTLS)". -* Вот, в общем-то, всё. Должно работать. Если вдруг не работает, попробуйте на - вкладке "Шифрование" сменить опцию на "Шифрование (Старый SSL)" или рискните - "Открытый несжатый текст". Эту последнюю опцию следует пробовать лишь в - самых крайних случаях. Если с ней подключиться удалось, следующий ваш шаг - должен быть сделан в направлении настройки защищённого (шифрованного) - соединения. Прямым ходом идите к нам в [xmpp:tkabber@conference.jabber.ru - конференцию] и просите помощи (дочитав перед этим статью до конца!) И ни в - коем случае не злоупотребляйте опцией "Открытый текст". Тоже в качестве - крайней меры можно попробовать и первую опцию про открытый текст на вкладке - "Аутентификация" — с теми же оговорками. - -![(!)](../images/Hammer.png) **Сделать:** развить - -![(!)](../images/Hammer.png) **Сделать:** вынести в отдельную статью раздел -фака "Не могу подключиться ... через прокси" и поставить отсюда ссылку на него +Здесь приведены "рекомендованные" настройки для _типичного_ случая, под которым мы понимаем соединение с сервером jabber.ru. + +Рассмотрим самый простой случай: вы подключены к интернету напрямую, безо всяких прокси, вместе с Ткаббером установлены все нужные и ненужные пакеты, перечисленные, например, [тут](http://tkabber.jabber.ru/dependencies2). В этом случае на 95% подойдут следующие настройки: + +* На вкладке "Соединение" окошка логина (которое вызывается по Ctrl-L) ничего отмечать не надо. +* На вкладке "Аутентификация" включить две галочки: "Использовать SASL для аутентификации" и "Разрешить механизм SASL X-GOOGLE-TOKEN". Строго говоря, вторая из них нужна для подключения к аккаунту на гугль-талке, но пусть уж будет. +* На вкладке "SSL & Сжатие" отметьте "Шифрование (STARTTLS)". +* Вот, в общем-то, всё. Должно работать. Если вдруг не работает, попробуйте на вкладке "Шифрование" сменить опцию на "Шифрование (Старый SSL)" или рискните "Открытый несжатый текст". Эту последнюю опцию следует пробовать лишь в самых крайних случаях. Если с ней подключиться удалось, следующий ваш шаг должен быть сделан в направлении настройки защищённого (шифрованного) соединения. Прямым ходом идите к нам в [xmpp:tkabber@conference.jabber.ru конференцию] и просите помощи (дочитав перед этим статью до конца!) И ни в коем случае не злоупотребляйте опцией "Открытый текст". Тоже в качестве крайней меры можно попробовать и первую опцию про открытый текст на вкладке "Аутентификация" — с теми же оговорками. + +![(!)](../images/Hammer.png) **Сделать:** развить + +![(!)](../images/Hammer.png) **Сделать:** вынести в отдельную статью раздел фака "Не могу подключиться ... через прокси" и поставить отсюда ссылку на него # Ветхий и Новый заветы XMPP -Настало время развеять один укоренившийся миф. - -Принято считать, что XMPP ≈ Jabber. В принципе, так и есть: XMPP обратно -совместим с Jabber, но и довольно серьёзные различия также имеют место. -Большая, если не бо́льшая часть этих различий как раз приходится на механизм -установки соединения с сервером. - -Относительная сложность диалога логина в Ткаббере как раз отражает эти -различия, причём (возможно, к неудовольствию новичков) — с сугубо технических -позиций. Однако здесь мы попытаемся поставить всё на свои места. С другой -стороны, мы покажем, что дёргать настройки приходится, как правило, только при -переходе со "старого" сервера на "новый" и наоборот. -![(!)](../images/Hammer.png) **Сделать:** написать понятнее - -[RFC \#3920](http://www.xmpp.org/rfcs/rfc3920.html) назвает "старый Jabber" -терминами "pre-XMPP" и "XMPP 0.9"; это, конечно, неофициальные наименования. Мы -будем использовать термин "Jabber", ссылаясь на устаревшие версии протокола, и -"XMPP", — ссылаясь на текущую, стандартную, версию. - -Чтобы было понятнее "кто есть кто" и чего ожидать от конкретного сервера: - -* [jabberd 1.4](http://jabberd.jabberstudio.org/) — Jabber сервер; кое-где всё - ещё используется, но больше не развивается. -* [jabberd2](http://jabberd.jabberstudio.org/2/) — XMPP-сервер. Используется - не очень часто. -* [ejabberd](http://ejabberd.jabber.ru) — XMPP-сервер. Используется очень - широко; в частности, jabber.org и jabber.ru работают на нём. +Настало время развеять один укоренившийся миф. + +Принято считать, что XMPP ≈ Jabber. В принципе, так и есть: XMPP обратно совместим с Jabber, но и довольно серьёзные различия также имеют место. Большая, если не бо́льшая часть этих различий как раз приходится на механизм установки соединения с сервером. + +Относительная сложность диалога логина в Ткаббере как раз отражает эти различия, причём (возможно, к неудовольствию новичков) — с сугубо технических позиций. Однако здесь мы попытаемся поставить всё на свои места. С другой стороны, мы покажем, что дёргать настройки приходится, как правило, только при переходе со "старого" сервера на "новый" и наоборот. ![(!)](../images/Hammer.png) **Сделать:** написать понятнее + +[RFC \#3920](http://www.xmpp.org/rfcs/rfc3920.html) назвает "старый Jabber" терминами "pre-XMPP" и "XMPP 0.9"; это, конечно, неофициальные наименования. Мы будем использовать термин "Jabber", ссылаясь на устаревшие версии протокола, и "XMPP", — ссылаясь на текущую, стандартную, версию. + +Чтобы было понятнее "кто есть кто" и чего ожидать от конкретного сервера: + +* [jabberd 1.4](http://jabberd.jabberstudio.org/) — Jabber сервер; кое-где всё ещё используется, но больше не развивается. +* [jabberd2](http://jabberd.jabberstudio.org/2/) — XMPP-сервер. Используется не очень часто. +* [ejabberd](http://ejabberd.jabber.ru) — XMPP-сервер. Используется очень широко; в частности, jabber.org и jabber.ru работают на нём. # Канал связи клиент-сервер в Jabber/XMPP -Этот раздел предназначен для тех, кто хочет понять суть происходящего, когда -Ткаббер устанавливает соединение с сервером и затем обменивается с ним -сообщениями. +Этот раздел предназначен для тех, кто хочет понять суть происходящего, когда Ткаббер устанавливает соединение с сервером и затем обменивается с ним сообщениями. -Фактически, всё, здесь рассказанное, изложено в стандарте на протокол XMPP: -[RFC \#3920](http://www.xmpp.org/rfcs/rfc3920.html). Здесь же мы попытаемся -описать это всё попроще и на языке родных осин. +Фактически, всё, здесь рассказанное, изложено в стандарте на протокол XMPP: [RFC \#3920](http://www.xmpp.org/rfcs/rfc3920.html). Здесь же мы попытаемся описать это всё попроще и на языке родных осин. ## Концепции -Передача информации — смысл и цель соединения между XMPP-клиентом и -XMPP-сервером. Это соединение представлено двумя XML-потоками: от к клиента к -серверу и от сервера к клиенту. Однако, прежде чем такая передача станет -возможной, нужно решить три проблемы: - -* Клиент должен выяснить, с каким физическим компьютером в сети и каким - способом он должен установить соединение. -* Сервер должен знать, что клиент — именно тот, за кого он себя выдаёт. Проще - говоря, если с сервером хочет работать пользователь Вася, он должен - подтвердить, что он именно Вася, а не Петя или Маша. Этот процесс называется - _аутентификацией потока_ ("stream authentication"). Обычно таким - подтверждением является знание васиного пароля на сервере. -* Если не приняты какие либо специальные меры, информация в XMPP передаётся в - открытом виде, то есть её можно "подслушивать" (англ. "to eavesdrop"), - получая, к примеру, пароли к каким-либо ресурсам, которые наивный - пользователь сообщил в чате другому пользователю. Также ни у одной из сторон - TCP-канала связи нет гарантий того, что "та сторона" всё ещё "та": известно - несколько атак на TCP/IP-соединение, позволяющих нарушить его целостность. - Это называется влиянием на канал (англ. "tampering"). Специальные меры, - решающие эти проблемы называются _защитой потока_ (англ. "stream security"). - -Вместо термина "поток" мы также будем часто использовать термин "канал". Сути -это не меняет. - -XMPP чётко определяет стандартные способы защиты канала и аутентификации. - -Кроме того, перед тем, как подключившийся клиент сможет начать обмен данными с -сервером, должна произойти так называемая "привязка ресурса" ("resource -binding") к созданному каналу — сервер должен закрепить за созданным каналом -определённый "ресурс" клиента. - -![(!)](../images/Hammer.png) **Сделать:** расписать про ресурсы +Передача информации — смысл и цель соединения между XMPP-клиентом и XMPP-сервером. Это соединение представлено двумя XML-потоками: от к клиента к серверу и от сервера к клиенту. Однако, прежде чем такая передача станет возможной, нужно решить три проблемы: + +* Клиент должен выяснить, с каким физическим компьютером в сети и каким способом он должен установить соединение. +* Сервер должен знать, что клиент — именно тот, за кого он себя выдаёт. Проще говоря, если с сервером хочет работать пользователь Вася, он должен подтвердить, что он именно Вася, а не Петя или Маша. Этот процесс называется _аутентификацией потока_ ("stream authentication"). Обычно таким подтверждением является знание васиного пароля на сервере. +* Если не приняты какие либо специальные меры, информация в XMPP передаётся в открытом виде, то есть её можно "подслушивать" (англ. "to eavesdrop"), получая, к примеру, пароли к каким-либо ресурсам, которые наивный пользователь сообщил в чате другому пользователю. Также ни у одной из сторон TCP-канала связи нет гарантий того, что "та сторона" всё ещё "та": известно несколько атак на TCP/IP-соединение, позволяющих нарушить его целостность. Это называется влиянием на канал (англ. "tampering"). Специальные меры, решающие эти проблемы называются _защитой потока_ (англ. "stream security"). + +Вместо термина "поток" мы также будем часто использовать термин "канал". Сути это не меняет. + +XMPP чётко определяет стандартные способы защиты канала и аутентификации. + +Кроме того, перед тем, как подключившийся клиент сможет начать обмен данными с сервером, должна произойти так называемая "привязка ресурса" ("resource binding") к созданному каналу — сервер должен закрепить за созданным каналом определённый "ресурс" клиента. + +![(!)](../images/Hammer.png) **Сделать:** расписать про ресурсы ## Куда и как подключаться? ## Защита потока -Традиционно как в Jabber-, так и XMPP-серверах процедура защиты канала, если -таковая производится, выполняется раньше, чем аутентификация. Это разумно, так -как в случае успешного завершения процедуры установления защиты потока, -протокол аутентификации пользователя будет надёжно защищён от атак. +Традиционно как в Jabber-, так и XMPP-серверах процедура защиты канала, если таковая производится, выполняется раньше, чем аутентификация. Это разумно, так как в случае успешного завершения процедуры установления защиты потока, протокол аутентификации пользователя будет надёжно защищён от атак. ### SSL/TLS -Существует достаточно много протоколов для защиты потока связи в IP-сетях, -однако наибольшее распространение получил протокол -[SSL](http://ru.wikipedia.org/wiki/SSL) (Secure Sockets Layer). - -Именно SSL используется как в Jabber, так и в XMPP для защиты канала. Однако, -используется несколько по-разному (об этом — ниже). - -Также путаницу вносит то, что в SSL, первоначально разработанный Netscape, был -стандартизован IETF; при этом IETF переименовала протокол в -[TLS](http://ru.wikipedia.org/wiki/TLS) (Transport Layer Security). TLS основан -на "версии 3" протокола SSL (обычно она именуется "SSLv3") и отличается от -последнего довольно слабо, из-за чего обычно термины "SSL" и "TLS" используются -вместо друг друга. Это совершенно неверно с формальной точки зрения, и немного -неверно — с технической, однако удобно для пользователя: можете считать, что -это один и тот же протокол. - -SSL реализует: - -* _Целостность передаваемых данных_ — гарантируется, что передаваемые данные - не могут быть незаметно изменены. -* _Конфиденциальнось передаваемых данных_ — данные могут шифроваться - различными (в том числе весьма криптостойкими, например, AES) алгоритмами. -* Взаимное удостоверение сторон, создающих канал связи, в том, что они именно - те, за кого себя выдают. - -Ключевым моментом в реализации этих возможностей является использование -_сертификатов_. +Существует достаточно много протоколов для защиты потока связи в IP-сетях, однако наибольшее распространение получил протокол [SSL](http://ru.wikipedia.org/wiki/SSL) (Secure Sockets Layer). + +Именно SSL используется как в Jabber, так и в XMPP для защиты канала. Однако, используется несколько по-разному (об этом — ниже). + +Также путаницу вносит то, что в SSL, первоначально разработанный Netscape, был стандартизован IETF; при этом IETF переименовала протокол в [TLS](http://ru.wikipedia.org/wiki/TLS) (Transport Layer Security). TLS основан на "версии 3" протокола SSL (обычно она именуется "SSLv3") и отличается от последнего довольно слабо, из-за чего обычно термины "SSL" и "TLS" используются вместо друг друга. Это совершенно неверно с формальной точки зрения, и немного неверно — с технической, однако удобно для пользователя: можете считать, что это один и тот же протокол. + +SSL реализует: + +* _Целостность передаваемых данных_ — гарантируется, что передаваемые данные не могут быть незаметно изменены. +* _Конфиденциальнось передаваемых данных_ — данные могут шифроваться различными (в том числе весьма криптостойкими, например, AES) алгоритмами. +* Взаимное удостоверение сторон, создающих канал связи, в том, что они именно те, за кого себя выдают. + +Ключевым моментом в реализации этих возможностей является использование _сертификатов_. ### Сертификаты SSL/TLS -SSL использует [сертификаты X.509](http://www.apps.ietf.org/rfc/rfc3280.html). +SSL использует [сертификаты X.509](http://www.apps.ietf.org/rfc/rfc3280.html). -![(!)](../images/Hammer.png) **Сделать:** развить тему +![(!)](../images/Hammer.png) **Сделать:** развить тему ## Аутентификация пользователя -> *\ какая-то китайка уже SHA-1 -> вслед за MD5 и прочим "поломала". -> \ hiddenman: И теперь сидит, как дура, без SHA-1* - -> *[Цитата с башорга](http://bash.org.ru/quote.php?num=93945)* - -Теоретически аутентификацию возможно произвести несколькими различными -способами, однако ввод пароля используется наиболее часто в интерактивных -системах. Система обмена быстрыми сообщениями на основе протколола XMPP, -клиентом которой является Ткаббер, — не исключение. - -Технически клиент может доказать серверу, что знает правильный пароль, -несколькими способами. - -Самый простой — просто передать пароль, введённый пользователем, серверу "как -есть", то есть в открытом виде. Это самый плохой способ с точки зрения защиты -данных: если трафик между клиентом и сервером может прослушать третье лицо -(это, к примеру, общий случай на сегменте сети Ethernet, повсеместно -применяемой в офисах), оно получит готовые данные для использования учётной -записи клиента (его "аккаунта") по своему усмотрению. Такой вид передачи данных -(без защиты) называется "открытым" ("plain text"). Резюмируя простыми словами, -такой пароль обязательно перехватит даже самый ленивый хакер — просто чтоб -неповадно было. - -Чуть более защищённый способ — закодировать пароль при передаче. Такой способ, -к примеру, используется в ходе "простой" ("basic") аутентификации на -HTTP-прокси серверах. Однако такой способ защищает пароль только от глаз -смотрящего на распечатку сетевого трафика. Так как человек, желающий заполучить -пароль, скорее всего знает, _где именно_ он его ищет, он также знает, какой -способ используется для шифровки и, соответственно, не будет иметь трудностей с -расшифровкой. Таким образом, уровень защиты пароля в этом случае ненамного -выше, чем у открытого текста, ибо спасает лишь от глупого или очень зелёного -хакера. - -Значительно более эффективны алгоритмы аутентификации, основанные на механизме -"вызов-ответ" ("challenge-response"), позволяющие обойтись без передачи пароля -между клиентом и сервером. Их идея в следующем: - -* Сервер посылает клиенту некоторые _случайные_ данные. -* Клиент добавляет к ним свой пароль и считает на получившемся массиве данных - _криптографический хэш_. -* Клиент посылает полученный хэш серверу. -* Сервер, зная пароль клиента, сам считает такой же хэш и сравнивает хэш - клиента с результатом своих вычислений. Если они совпадают, клиент знает - пароль. - -Этот метод использует главное свойство криптографических хэшей: по ним -невозможно восстановить исходное сообщение, на котором даный хэш рассчитан. То -есть даже перехватив соответствующий трафик, злоумышленник не сможет получить -пароль. - -Чаще всего для вычисления хэша применяют [алгоритм MD5](ftp://ftp.umbc.edu/pub/unix/rfc/rfc1321.txt.gz) -(см. также [материал в Википедии](http://ru.wikipedia.org/wiki/MD5))1. +\ какая-то китайка уже SHA-1 + вслед за MD5 и прочим "поломала". + +\ hiddenman: И теперь сидит, как дура, без SHA-1 + +[Цитата с башорга](http://bash.org.ru/quote.php?num=93945) + +Теоретически аутентификацию возможно произвести несколькими различными способами, однако ввод пароля используется наиболее часто в интерактивных системах. Система обмена быстрыми сообщениями на основе протколола XMPP, клиентом которой является Ткаббер, — не исключение. + +Технически клиент может доказать серверу, что знает правильный пароль, несколькими способами. + +Самый простой — просто передать пароль, введённый пользователем, серверу "как есть", то есть в открытом виде. Это самый плохой способ с точки зрения защиты данных: если трафик между клиентом и сервером может прослушать третье лицо (это, к примеру, общий случай на сегменте сети Ethernet, повсеместно применяемой в офисах), оно получит готовые данные для использования учётной записи клиента (его "аккаунта") по своему усмотрению. Такой вид передачи данных (без защиты) называется "открытым" ("plain text"). Резюмируя простыми словами, такой пароль обязательно перехватит даже самый ленивый хакер — просто чтоб неповадно было. + +Чуть более защищённый способ — закодировать пароль при передаче. Такой способ, к примеру, используется в ходе "простой" ("basic") аутентификации на HTTP-прокси серверах. Однако такой способ защищает пароль только от глаз смотрящего на распечатку сетевого трафика. Так как человек, желающий заполучить пароль, скорее всего знает, _где именно_ он его ищет, он также знает, какой способ используется для шифровки и, соответственно, не будет иметь трудностей с расшифровкой. Таким образом, уровень защиты пароля в этом случае ненамного выше, чем у открытого текста, ибо спасает лишь от глупого или очень зелёного хакера. + +Значительно более эффективны алгоритмы аутентификации, основанные на механизме "вызов-ответ" ("challenge-response"), позволяющие обойтись без передачи пароля между клиентом и сервером. Их идея в следующем: + +* Сервер посылает клиенту некоторые _случайные_ данные. +* Клиент добавляет к ним свой пароль и считает на получившемся массиве данных _криптографический хэш_. +* Клиент посылает полученный хэш серверу. +* Сервер, зная пароль клиента, сам считает такой же хэш и сравнивает хэш клиента с результатом своих вычислений. Если они совпадают, клиент знает пароль. + +Этот метод использует главное свойство криптографических хэшей: по ним невозможно восстановить исходное сообщение, на котором даный хэш рассчитан. То есть даже перехватив соответствующий трафик, злоумышленник не сможет получить пароль. + +Чаще всего для вычисления хэша применяют [алгоритм MD5](ftp://ftp.umbc.edu/pub/unix/rfc/rfc1321.txt.gz) (см. также [материал в Википедии](http://ru.wikipedia.org/wiki/MD5))1. ## Реализация в XMPP -![(!)](../images/Hammer.png) **Сделать:** написать +![(!)](../images/Hammer.png) **Сделать:** написать ## Реализация в Jabber -![(!)](../images/Hammer.png) **Сделать:** написать +![(!)](../images/Hammer.png) **Сделать:** написать ## Поддержка в Ткаббере -![(!)](../images/Hammer.png) **Сделать:** написать +![(!)](../images/Hammer.png) **Сделать:** написать # Подключение к XMPP-серверу: практика -Здесь подробно рассказано, что предпринять для подключения к XMPP-серверу в -особо тяжёлых случаях (к примеру, параноидально настроенный прокси-сервер). -Акцент сделан на подключение к `jabber.ru`. +Здесь подробно рассказано, что предпринять для подключения к XMPP-серверу в особо тяжёлых случаях (к примеру, параноидально настроенный прокси-сервер). Акцент сделан на подключение к `jabber.ru`. ## "Стандартный" XMPP сервер -Итак, что можно сделать, если соединение с Вашим сервером через прокси не -проходит: - -* Попробуйте присоединиться на каждый из стандартных портов; возможно, - какой-то из них будет работать (имейте в виду, что при выборе 5222 следует - включать опцию "Шифрование (STARTTLS)", а при выборе 5223 — "Шифрование - (старый SSL)". -* Проверьте, принимает ли ваш Jabber-сервер соединения на порт 443 (следует - выбрать "старый SSL" в настройках). -* Если ничего не помогло, попробуйте использовать механизм HTTP-poll, если ваш - сервер его поддерживает. Протокол HTTP-poll позволяет реализовать связь с - сервером путём посылки серверу HTTP-запросов (стандартно — на порт 5280), - что, в принципе, должно сделать возможной работу через любой прокси-сервер, - кроме совсем уж параноидально настроенных. - -Пользователи сервера [jabber.ru](http://jabber.ru) имеют несколько -дополнительных опций благодаря тому, что вокруг этого сервера построена -дополнительная "обвязка": - -* `ssl.jabber.ru` поддерживает соединения с шифрованием "старый SSL" на порт - 443; -* `allports.jabber.ru` поддерживает соединения на _любой_ порт с поддержкой - протокола STARTTLS. - -Эти имена хостов и порты следует вводить в поля "хост" и "порт", -соответственно, настройки "Явно указать адрес и порт для подключения". - -(Информацию про `jabber.ru` нечаянно сболтнул [**teo**](Участник_Teo.md).) - -**Дополнительная информация про HTTP-poll:** - -Для того, чтобы подключиться к серверу по HTTP-poll, нужно знать URL для -отправки HTTP-запросов. Есть два источника подобной информации: - -* На веб-сайте сервера опубликованы настройки — просто впишите их себе. -* В идеале, сервер должен иметь специальную TXT-запись в DNS, содержащую - информацию о HTTP-poll. Начиная с версии 0.9.9, Ткаббер способен сам - выполнить соответствующий запрос, так что поле "URL для подключения" в - настройках соединения по HTTP-poll можно оставить пустым (однако, см. ниже). - Если у вас более старая версия Ткаббера, вы можете выполнить соответствующий - запрос вручную и ввести полученный URL в настройки HTTP-poll. Запрос - выполняется так: - * Windows (в командной оболочке): - - nslookup "-set type=TXT" _xmppconnect.jabber.ru - - * Unix: - - dig +short _xmppconnect.jabber.ru txt - - или - - host -t txt _xmppconnect.jabber.ru - -Понятно, что в случае сервера, отличного от `jabber.ru`, доменная часть -"псевдо-имени хоста" `_xmppconnect.jabber.ru` должна быть другой (например, -`_xmppconnect.my.cool.server.org`). - -Эта команда должна вернуть строку, содержащую URL для подключения, например, -для `jabber.ru` возвращается -`"_xmpp-client-httppoll=http://httppoll.jabber.ru"`. В настройках, -соответственно, следует указать URL `http://httppoll.jabber.ru`. Естественно, -для другого сервера URL будет другим. - -Подробнее про "ручное общение" с DNS-серверами написано -[**здесь**](Ткаббер_и_DNS.md#Ручное_разрешение_записей_DNS). - -Примечание: - -для работы с TXT-записями в DNS Ткабберу требуется наличие в системе библиотеки -**tcllib** версии 1.7 и выше, а для работы с SRV-записями — 1.8 и выше. Реально, -значение имеет версия пакета **dns** в библиотеке **tcllib**: поддержка SRV-записей -появилась в версии 1.2.1 пакета, поддержка TXT-записей — в версии 1.1.8, но имела -баг, который был исправлен в версии 1.3.1. Узнать версию пакета **dns**, доступную -Ткабберу, можно, выполнив в консоли Ткаббера (или в **tclsh, wish, tckon**) команду - +Итак, что можно сделать, если соединение с Вашим сервером через прокси не проходит: + +* Попробуйте присоединиться на каждый из стандартных портов; возможно, какой-то из них будет работать (имейте в виду, что при выборе 5222 следует включать опцию "Шифрование (STARTTLS)", а при выборе 5223 — "Шифрование (старый SSL)". +* Проверьте, принимает ли ваш Jabber-сервер соединения на порт 443 (следует выбрать "старый SSL" в настройках). +* Если ничего не помогло, попробуйте использовать механизм HTTP-poll, если ваш сервер его поддерживает. Протокол HTTP-poll позволяет реализовать связь с сервером путём посылки серверу HTTP-запросов (стандартно — на порт 5280), что, в принципе, должно сделать возможной работу через любой прокси-сервер, кроме совсем уж параноидально настроенных. + +Пользователи сервера [jabber.ru](http://jabber.ru) имеют несколько дополнительных опций благодаря тому, что вокруг этого сервера построена дополнительная "обвязка": + +* `ssl.jabber.ru` поддерживает соединения с шифрованием "старый SSL" на порт 443; +* `allports.jabber.ru` поддерживает соединения на _любой_ порт с поддержкой протокола STARTTLS. + +Эти имена хостов и порты следует вводить в поля "хост" и "порт", соответственно, настройки "Явно указать адрес и порт для подключения". + +(Информацию про `jabber.ru` нечаянно сболтнул [teo](Участник_Teo.md).) + +**Дополнительная информация про HTTP-poll:** + +Для того, чтобы подключиться к серверу по HTTP-poll, нужно знать URL для отправки HTTP-запросов. Есть два источника подобной информации: + +* На веб-сайте сервера опубликованы настройки — просто впишите их себе. +* В идеале, сервер должен иметь специальную TXT-запись в DNS, содержащую информацию о HTTP-poll. Начиная с версии 0.9.9, Ткаббер способен сам выполнить соответствующий запрос, так что поле "URL для подключения" в настройках соединения по HTTP-poll можно оставить пустым (однако, см. ниже). Если у вас более старая версия Ткаббера, вы можете выполнить соответствующий запрос вручную и ввести полученный URL в настройки HTTP-poll. Запрос выполняется так: + * Windows (в командной оболочке): + nslookup "-set type=TXT" _xmppconnect.jabber.ru + + * Unix: + dig +short _xmppconnect.jabber.ru txt + или + host -t txt _xmppconnect.jabber.ru + +Понятно, что в случае сервера, отличного от `jabber.ru`, доменная часть "псевдо-имени хоста" `_xmppconnect.jabber.ru` должна быть другой (например, `_xmppconnect.my.cool.server.org`). + +Эта команда должна вернуть строку, содержащую URL для подключения, например, для `jabber.ru` возвращается `"_xmpp-client-httppoll=http://httppoll.jabber.ru"`. В настройках, соответственно, следует указать URL `http://httppoll.jabber.ru`. Естественно, для другого сервера URL будет другим. + +Подробнее про "ручное общение" с DNS-серверами написано [здесь](Ткаббер_и_DNS.md#Ручное_разрешение_записей_DNS). + +Примечание: +**tcllib****dns****tcllib****dns****tclsh, wish, tckon** package versions dns -(За информацию про DNS TXT-записи, о HTTP-poll и за разъяснение ситуации с -версиями пакета **dns** — отдельное спасибо тиклевому хакеру -[Pat Thoyts](http://wiki.tcl.tk/Pat Thoyts).) +(За информацию про DNS TXT-записи, о HTTP-poll и за разъяснение ситуации с версиями пакета **dns** — отдельное спасибо тиклевому хакеру [Pat Thoyts](http://wiki.tcl.tk/Pat Thoyts).) ## Серверы Google Talk -Подробно о подключении к серверам Google Talk рассказано [**здесь**](Google_Talk.md). +Подробно о подключении к серверам Google Talk рассказано [здесь](Google_Talk.md). # Примечания -1 Алгоритм MD5 был -[взломан](http://www.technewsworld.com/perl/board/mboard.pl?board=lnitalkback&thread=895&id=896&display=1) -в 2004 году. Есть [теоретическая возможность](http://www.cryptography.com/cnews/hash.html) -фальсификации документов, основанная на этом хаке: существуют так называемые коллизии, -когда двум разным документам соответствует один и тот же хэш. Кроме того, наличие в интернете -[ресурсов](http://ru.wikipedia.org/wiki/MD5#.D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8), -посвящённых подбору пароля MD5 или SHA1 с помощью словаря (полу-брутфорс), -заставляет крепко подумать на тему выбора более надёжного алгоритма (при -желании можно нагуглить уже готовые генераторы коллизий). - -SHA-1 тоже ["готов"...](http://en.epochtimes.com/news/7-1-11/50336.html) - -![(!)](../images/Hammer.png) **Сделать:** порыть... +1 Алгоритм MD5 был [взломан](http://www.technewsworld.com/perl/board/mboard.pl?board=lnitalkback&thread=895&id=896&display=1) в 2004 году. Есть [теоретическая возможность](http://www.cryptography.com/cnews/hash.html) фальсификации документов, основанная на этом хаке: существуют так называемые коллизии, когда двум разным документам соответствует один и тот же хэш. Кроме того, наличие в интернете [ресурсов](http://ru.wikipedia.org/wiki/MD5#.D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8), посвящённых подбору пароля MD5 или SHA1 с помощью словаря (полу-брутфорс), заставляет крепко подумать на тему выбора более надёжного алгоритма (при желании можно нагуглить уже готовые генераторы коллизий). + +SHA-1 тоже ["готов"...](http://en.epochtimes.com/news/7-1-11/50336.html) + +![(!)](../images/Hammer.png) **Сделать:** порыть... + + Index: wiki/ru/Настроения.md ================================================================== --- wiki/ru/Настроения.md +++ wiki/ru/Настроения.md @@ -1,656 +1,835 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Настроения/index.html) + # Настроения Материал из Tkabber Wiki. -Исходные термины взяты из [XEP-0107](http://www.xmpp.org/extensions/xep-0107.html#moods). +Исходные термины взяты из [XEP-0107](http://www.xmpp.org/extensions/xep-0107.html#moods). ## Содержание -* [1 Вариант перевода bigote](#Вариант_перевода_bigote) -* [2 "Unisex" от kostix](#Unisex_от_kostix) -* [3 "Что чувствую" от Gebb](#Что_чувствую_от_Gebb) +* [1 Вариант перевода bigote[](Участник_Bigote.md)](#Вариант_перевода_bigoteУчастник_Bigote.md) +* [2 "Unisex" от kostix[](Участник_Kostix.md)](#Unisex_от_kostixУчастник_Kostix.md) +* [3 "Что чувствую" от Gebb[](Участник_Gebb.md)](#Что_чувствую_от_GebbУчастник_Gebb.md) * [4 Чат с носителями языка (АКА просветление)](#Чат_с_носителями_языка_АКА_просветление) * [5 Претендент на окончательный вариант (основан на "Unisex")](#Претендент_на_окончательный_вариант_основан_на_Unisex) * [6 Согласование с "User Activity" (XEP-0108)](#Согласование_с_User_Activity_XEP-0108) -# Вариант перевода [bigote](Участник_Bigote.md) - -Оригинал | Перевод ----|--- -afraid | испуганный -amazed | изумлённый -angry | сердитый -annoyed | раздражённый -anxious | обеспокоенный -aroused | возбуждённый -ashamed | пристыжённый -bored | скучающий -brave | храбрый -calm | спокойный -cold | холодный -confused | сбитый с толку -contented | довольный -cranky | недовольный -curious | любопытный -depressed | подавленный -disappointed | разочарованный -disgusted | чувствует отвращение -distracted | растерянный -embarrassed | смущённый -excited | взволнованный -flirtatious | кокетливый -frustrated | расстроенный -grumpy | сварливый -guilty | виноватый -happy | счастливый -hot | пылкий -humbled | скромный -humiliated | униженный -hungry | голодный -hurt | раненый -impressed | впечатлённый -in\_awe | благоговеющий -in\_love | влюблённый -indignant | возмущённый -interested | заинтересованный -intoxicated | одурманенный -invincible | неукротимый -jealous | ревнивый -lonely | одинокий -mean | подлый -moody | унылый -nervous | нервный -neutral | безразличный -offended | обиженный -playful | игривый -proud | гордый -relieved | успокоенный -remorseful | сожалеющий -restless | неустанный -sad | печальный -sarcastic | язвительный -serious | серьёзный -shocked | потрясённый -shy | робкий -sick | больной -sleepy | сонный -stressed | напряжённый -surprised | удивлённый -thirsty | хочет пить -worried | обеспокоенный - -# "Unisex" от [kostix](Участник_Kostix.md) - -Оригинал | Перевод ----|--- -afraid | напуган(а) -amazed | изумлен(а) -angry | сержусь -annoyed | в раздражении -anxious | беспокоюсь -aroused | в возбуждении -ashamed | стыжусь -bored | скучаю -brave | всё нипочём -calm | в спокойствии -cold | мне холодно -confused | сбит(а) с толку -contented | доволен/довольна -cranky | недоволен/недовольна -curious | любопытствую -depressed | подавлен(а) -disappointed | разочарован(а) -disgusted | чувствую отвращение -distracted | в растерянности -embarrassed | в смущении -excited | волнуюсь -flirtatious | кокетничаю -frustrated | расстроен(а) -grumpy | сварлив(а) -guilty | чувствую вину -happy | счастлив(а) -hot | пылаю -humbled | скромничаю -humiliated | унижен(а) -hungry | хочу есть -hurt | ранен(а) -impressed | под впечатлением -in\_awe | благоговею -in\_love | влюблён/влюблена -indignant | в возмущении -interested | заинтересован(а) -intoxicated | одурманен(а) -invincible | неукротим(а) -jealous | ревную -lonely | одинок(а) -mean | готов(а) на пакость -moody | в унынии -nervous | нервничаю -neutral | в безразличии -offended | обижен(а) -playful | игрив(а) -proud | горжусь -relieved | успокоенный(ая) -remorseful | сожалею -restless | не знаю усталости -sad | в печали -sarcastic | хочется язвить -serious | серьёзен/серьёзна -shocked | потрясён/потрясена -shy | стесняюсь -sick | болею -sleepy | хочу спать -stressed | в напряжении -surprised | удивляюсь -thirsty | хочу пить -worried | беспокоюсь - -# "Что чувствую" от [Gebb](Участник_Gebb.md) -Предполагается, что настроения в программе будут отображаться так: - -что чувствую: _настроение-в-винительном-падеже_ - -Оригинал | Перевод ----|--- -afraid | испуг -amazed | изумление -angry | гнев -annoyed | раздражение -anxious | тревогу -aroused | возбуждение -ashamed | стыд -bored | скуку -brave | храбрость -calm | спокойствие -cold | хладнокровие (вариант: хладнокровный настрой) -confused | замешательство -contented | удовлетворённость -cranky | вспыльчивость (вариант: вспыльчивый настрой) -curious | любопытство -depressed | подавленность -disappointed | разочарование -disgusted | отвращение -distracted | растерянность -embarrassed | смущение -excited | волнение -flirtatious | кокетливый настрой (варианты: хочу флиртовать, приступ кокетства) -frustrated | расстройство -grumpy | сварливость (вариант: сварливый настрой) -guilty | вину -happy | счастье -hot | разгорячённость -humbled | поверженность -humiliated | унижение -hungry | голод -hurt | боль -impressed | впечатление (вариант: я впечатлён) -in\_awe | благоговение -in\_love | любовь -indignant | возмущение -interested | интерес -intoxicated | опьянение -invincible | непобедимость -jealous | ревность -lonely | одиночество -mean | недоброжелательность -moody | уныние -nervous | нервозность -neutral | ничего особенного -offended | обиду -playful | игривость (вариант: игривый настрой) -proud | гордость -relieved | облегчение -remorseful | раскаяние -restless | неугомонность -sad | печаль -sarcastic | язвительность (вариант: язвительный настрой) -serious | серьёзность (вариант: серьёзный настрой) -shocked | потрясение -shy | стеснение -sick | болезнь (вариант: я болен) -sleepy | сонливость -stressed | напряжение -surprised | удивление -thirsty | жажду -worried | обеспокоенность +# Вариант перевода bigote[](Участник_Bigote.md) + + ** Оригинал **** Перевод ** + + afraid испуганный + + amazed изумлённый + + angry сердитый + + annoyed раздражённый + + anxious обеспокоенный + + aroused возбуждённый + + ashamed пристыжённый + + bored скучающий + + brave храбрый + + calm спокойный + + cold холодный + + confused сбитый с толку + + contented довольный + + cranky недовольный + + curious любопытный + + depressed подавленный + + disappointed разочарованный + + disgusted чувствует отвращение + + distracted растерянный + + embarrassed смущённый + + excited взволнованный + + flirtatious кокетливый + + frustrated расстроенный + + grumpy сварливый + + guilty виноватый + + happy счастливый + + hot пылкий + + humbled скромный + + humiliated униженный + + hungry голодный + + hurt раненый + + impressed впечатлённый + + in\_awe благоговеющий + + in\_love влюблённый + + indignant возмущённый + + interested заинтересованный + + intoxicated одурманенный + + invincible неукротимый + + jealous ревнивый + + lonely одинокий + + mean подлый + + moody унылый + + nervous нервный + + neutral безразличный + + offended обиженный + + playful игривый + + proud гордый + + relieved успокоенный + + remorseful сожалеющий + + restless неустанный + + sad печальный + + sarcastic язвительный + + serious серьёзный + + shocked потрясённый + + shy робкий + + sick больной + + sleepy сонный + + stressed напряжённый + + surprised удивлённый + + thirsty хочет пить + + worried обеспокоенный + +# "Unisex" от kostix[](Участник_Kostix.md) + + ** Оригинал **** Перевод ** + + afraid напуган(а) + + amazed изумлен(а) + + angry сержусь + + annoyed в раздражении + + anxious беспокоюсь + + aroused в возбуждении + + ashamed стыжусь + + bored скучаю + + brave всё нипочём + + calm в спокойствии + + cold мне холодно + + confused сбит(а) с толку + + contented доволен/довольна + + cranky недоволен/недовольна + + curious любопытствую + + depressed подавлен(а) + + disappointed разочарован(а) + + disgusted чувствую отвращение + + distracted в растерянности + + embarrassed в смущении + + excited волнуюсь + + flirtatious кокетничаю + + frustrated расстроен(а) + + grumpy сварлив(а) + + guilty чувствую вину + + happy счастлив(а) + + hot пылаю + + humbled скромничаю + + humiliated унижен(а) + + hungry хочу есть + + hurt ранен(а) + + impressed под впечатлением + + in\_awe благоговею + + in\_love влюблён/влюблена + + indignant в возмущении + + interested заинтересован(а) + + intoxicated одурманен(а) + + invincible неукротим(а) + + jealous ревную + + lonely одинок(а) + + mean готов(а) на пакость + + moody в унынии + + nervous нервничаю + + neutral в безразличии + + offended обижен(а) + + playful игрив(а) + + proud горжусь + + relieved успокоенный(ая) + + remorseful сожалею + + restless не знаю усталости + + sad в печали + + sarcastic хочется язвить + + serious серьёзен/серьёзна + + shocked потрясён/потрясена + + shy стесняюсь + + sick болею + + sleepy хочу спать + + stressed в напряжении + + surprised удивляюсь + + thirsty хочу пить + + worried беспокоюсь + +# "Что чувствую" от Gebb[](Участник_Gebb.md) +Предполагается, что настроения в программе будут отображаться так: + +что чувствую: _настроение-в-винительном-падеже_ + + ** Оригинал **** Перевод ** + + afraid испуг + + amazed изумление + + angry гнев + + annoyed раздражение + + anxious тревогу + + aroused возбуждение + + ashamed стыд + + bored скуку + + brave храбрость + + calm спокойствие + + cold хладнокровие (вариант: хладнокровный настрой) + + confused замешательство + + contented удовлетворённость + + cranky вспыльчивость (вариант: вспыльчивый настрой) + + curious любопытство + + depressed подавленность + + disappointed разочарование + + disgusted отвращение + + distracted растерянность + + embarrassed смущение + + excited волнение + + flirtatious кокетливый настрой (варианты: хочу флиртовать, приступ кокетства) + + frustrated расстройство + + grumpy сварливость (вариант: сварливый настрой) + + guilty вину + + happy счастье + + hot разгорячённость + + humbled поверженность + + humiliated унижение + + hungry голод + + hurt боль + + impressed впечатление (вариант: я впечатлён) + + in\_awe благоговение + + in\_love любовь + + indignant возмущение + + interested интерес + + intoxicated опьянение + + invincible непобедимость + + jealous ревность + + lonely одиночество + + mean недоброжелательность + + moody уныние + + nervous нервозность + + neutral ничего особенного + + offended обиду + + playful игривость (вариант: игривый настрой) + + proud гордость + + relieved облегчение + + remorseful раскаяние + + restless неугомонность + + sad печаль + + sarcastic язвительность (вариант: язвительный настрой) + + serious серьёзность (вариант: серьёзный настрой) + + shocked потрясение + + shy стеснение + + sick болезнь (вариант: я болен) + + sleepy сонливость + + stressed напряжение + + surprised удивление + + thirsty жажду + + worried обеспокоенность # Чат с носителями языка (АКА просветление) -[00:06]\ Hi! mind if I ask a question regarding English language? - -[00:06]\ Fire away - -[00:07]\ away: YOU'RE FIRED! - -[00:07]\ Don't ask to ask, just ask. - -[00:08]\ We have just implemented Jabber extention called "User mood" -in Tkabber -([http://www.xmpp.org/extensions/xep-0107.html](http://www.xmpp.org/extensions/xep-0107.html)) -but when translating that "moods" into russian we have problems. Basically how -\*in this context\* the mood "mean" should be translated? - -[00:08]\ Webster gives a horrible lot of meanings - -[00:08]\ which even contradict one another - -[00:08]\ Its emotional state. - -[00:08]\ it's a state of sexual arousal - -[00:08]\ ie: is the user angry, happy, etc - -[00:09]\ (waste of time IMO) - -[00:09]\ patthoyts: yeah, so what's with mean? - -[00:09]\ "Mean" - petty, nasty, angry at a low level. - -[00:09]\ but I guess you have to keep the kids happy. - -[00:09]\ mood is related to mode (like an emacs document mode, or the vi -mode of typing versus commands) - -[00:09]\ patthoyts: are you talking about that extension? ;) - -[00:09]\ Wait, what emotion? - -[00:09]\ OHHH MEAN - -[00:09]\ Mean is "vindictive" - -[00:10]\ mode is also related to musical sound/"color" - -[00:10]\ patthoyts: I've done it to test PEP (personal eventing) thing -in Tkabber and fixed some misc problems in it. so it's not in vain ;) - -[00:10]\ If you are pulling the wings of a fly you are being mean. - -[00:10]\ It can be playful, but it's always taunting - -[00:10]\ that depends on the fly :P - -[00:11]\ My yougest is always complaining that her sister is being -mean. Normally when the little one cant get onto the computer. - -[00:11]\ "That was a mean spirited trick" - -[00:11]\ offensive. selfish. malicious. small-minded. ignoble. - -[00:12]\ so it's basicaly "to contrive something evil in one's mind" -(pardon my english), right? - -[00:12]\ yeah. sounds good. - -[00:12]\ "YOU MEANIE!" (Said when someone says something -deliberately hurtful) - -[00:12]\ grumpy with a dash of vindictive. - -[00:12]\ It's more "evil with intent" - -[00:12]\ damn, I didn't even know that word - vindictive ;) - -[00:12]\ basically, how people are on some other channels ;) - -[00:12]\ You can't think mean, just act mean - -[00:13]\* Emiliano feeling mean - -[00:13]\ "Mean" suggests pettiness and small-mindedness. It's an insult -of a small child; it doesn't sink to the level of "evil." - -[00:13]\ hm, interesting insight... - -[00:13]\ well the contriving is not sufficient probably, but you're on the -right track... that is only to be mean in one's mind... to -actually- be mean, -you have to do something mean to another (I would think)... that is, you have -to be perceived as being mean by the party you're being mean to - -[00:14]\ hm, even more interesting... - -[00:14]\ Telling a joke that embarrases someone is condidered "Mean" - -[00:14]\ you guys still talking about me? - -[00:14]\ Sorry God - -[00:14]\ but that's exactly as you're using it in the application... -you're giving people the ability to be perceived as being in a mean mood - -[00:15]\ hypnotoad: but that also depends on intent... if it was intended -to embarrass, that would qualify as mean - -[00:15]\ albert said I am raffiniert, not mean - -[00:16]\ Jim: I see, if you advertise that you are "mean" than -people should not be surprised by hurtful things - -[00:16]\ hypnotoad: that too :) - -[00:16]\ hypnotoad: that's almost perfect explanation to me - -[00:16]\ "mean mood" - probably something like "irritable," "irascible," "testy" is intended. - -[00:16]\ hypnotoad said "use that explanation" - -[00:17]\ perhaps people who are only just grumpy might advertise -themselves as being mean so as to be left alone - -[00:17]\* hypnotoad Bzzzzzzzz - -[00:17]\* kostix raises and heads to the window to jump into... - -[00:17]\ "petulant" - -[00:17]\ "petty" - -[00:17]\ (so many new words...) - -[00:18]\ "petrudinous" - -[00:18]\ English is great for that. - -[00:18]\ wait, not that one - -[00:18]\ Not being Russian speakers, we're throwing out English -synonymies, in hopes that something will resonate. - -[00:19]\ Pipes resonate - -[00:19]\ As to wine glasses... - -[00:19]\* steveo thought he was loggin in to the tclers chat, not synonyms -anonymous ... \<:-) - -[00:19]\ Spiteful. "Mean" can also suggest "niggardly." - -[00:20]\ kbk: that's what I intended to ignite ;) - -[00:20]\ synonomous anonymous? - -[00:20]\ seasoned with a little bit of nutmeg and synonym. - -[00:20]\ anomalous anonymous? - -[00:21]\ anonymous anonymous - -[00:21]\ "Hi my name is (state you name), and I am nobody" - -[00:21]\* steveo wonders just how badly we are confusing kostix - -[00:22]\ Not badly enough - -[00:23]\ now, \*that's" mean ;) - -[00:23]\ All this punning is being mean to a non-native speaker. - -[00:23]\* kbk xed - -[00:23]\ sorry, I have another words at hand in the same context, they -are: cold (is it really about feeling cold or what?), cranky and thirsty (is -that really about thirst or what?) - -[00:23]\ But I didn't mean to be mean! - -[00:23]\ actually, that person who invented the set of moods is... strange - -[00:24]\ Cold: (references to reptiles) Cold blooded, not caring -about the feelings of others - -[00:24]\ cranky - irascible, touchy, swift to anger (often because of -tiredness or illness) - -[00:24]\ thirsty is just plain "needs something to drink" - -[00:25]\ ok, seems like we got cranky wrong, thanks - -[00:25]\ thirsty is "khochit' pit'" - -[00:25]\ that's all - -[00:25]\ A perfect example of "cranky" is the behaviour of any toddler in -need of sleep. - -[00:25]\ Cranky is also like an old car engine. - -[00:26]\ hat0: one person suggested it's about "mentally drained out" -or so... that's why I asked ;) - -[00:26]\ (where we get the word) - -[00:26]\ now what's about "cold"? - -[00:26]\ hypnotoad - Nonsense - the word was in use in the 1780s. - -[00:26]\ (notice that the set of moods also has "hot") - -[00:27]\ Hot is "excited" - -[00:27]\ cranky - ill-tempered, grouchy, cross. - -[00:27]\* hypnotoad Learn someting new every day, Thanks Kevin - -[00:27]\ "Hot under the collar" is excited in an angry way - -[00:28]\ "Hot and bothered" is sexually aroused (but oddly only with -a female) - -[00:28]\* Emiliano 's doughter getting "cranky" - -[00:28]\ toad - Although a guy can say that he's hot for a lady... - -[00:28]\ hypnotoad: what if we have "excited" in the \*same\* set of moods? ;) - -[00:28]\ True, and a lady can "look hot" - -[00:29]\ also, if you thirst for something, that is not the same as to be -thirsty.. it is a strong desire for it (like "on zhazhdal mesti") - -[00:29]\ kostix - In that case, 'hot' probably has a specifically sexual -connotation. Your list does indeed sound a lottle strange. - -[00:29]\ Well just about every mood involves and excitement of one -form or another ;) - -[00:31]\ cold, you could think "unfeeling" - this dictionary i have -suggests "kholodniy' chelovek" (which makes me laugh) - -[00:31]\ Do Russians say that?! - -[00:31]\ 'Twould be new to me. - -[00:34]\ hat0: thanks. your knowledge of Russian keeps impress me ;) - -[00:34]\ hat0: What does that "kholodniy' chelovek" loosely -translate back to? - -[00:34]\ hypnotoad: cold person - -[00:34]\ yes - -[00:34]\ Cold as in "was out in the siberian weather" - -[00:35]\ or cold as in "psychopathic killer" - -[00:35]\ yes, cold as if put in refrigerator - -[00:35]\ kholodniy is from hot-cold. - -[00:35]\ Ah - -[00:35]\ "Many are cold, but few are frozen." - -[00:35]\ That's it! That's the one! - -[00:36]\ My pun acceptor overflowed its daily limit. - -[00:36]\ :) - -[00:37]\ This is nearly the only milieu that I've been in where -multilingual puns are commonplace. - -[00:38]\ There is a bit of a legend that in the early days of the -cold war the East and West devised an automatic translator that would operate -by teletype. After a few million dollars, they took it for a test spin to see -how well it worked, by entering a phrase in english, translating to russian, -and then back to english. - -On phrase was "The spirit is willing, but the flesh is weak" The result was -"The vokda is watered down and the meat is rancid" - -[00:38]\ No, "the vodka is agreeable." - -[00:39]\ "but the meat has gone soft" - -[00:39]\ Kevin with the assist... Thank you thank you - -[00:39]\ I liked "out of sight, out of mind" -> "blind idiot" - -[00:39]\ So wait.. it was real? - -[00:39]\ No, translation software \*still\* isn't that good. - -[00:40]\ Why, that's no multilingual pun--I'm keeping my only tongue -in my own mouth. - -[00:42]\ A true story, though: there was one document (about a French-made -minicomputer) that I got from a translation service that contained gems like -"each forefinger guestbook is divided into two pastures: the word address and -the byte rebate within the word" - -[00:42]\ [http://ray.tomes.biz/b2/index.php/c/2007/04/26/p117](http://ray.tomes.biz/b2/index.php/c/2007/04/26/p117) - -[00:43]\ I had to translate that semimechanically back into French for it -to make any sense. - -[00:43]\ Quality - -[00:43]\ "forefinger guestbook" -> "index register"; "pasture" -> "field"; -"rebate" -> "offset" - -[00:43]\ kbk: we have similar difficulties with chinese shit^Wgoods -with Russian-translated labels and texts - -[00:45]\ i bought a chinese razor in tashkent, called the "BIG BUG RAZOR" - -[00:45]\ Tcl NEEDS one :) - -[00:45]\ Well a tartula has a lot of hair you know - -[00:46]\ (Tarantula... not the caribbean island....) - -[00:47]\ The document also contained numerous references to a K7 - I had -to read that aloud in French before the forehead-slapping "cassette" came to -mind. - -[00:48]\ Una tortuga (a tortoise) generally has no hair at all. +[00:06]\ Hi! mind if I ask a question regarding English language? + +[00:06]\ Fire away + +[00:07]\ away: YOU'RE FIRED! + +[00:07]\ Don't ask to ask, just ask. + +[00:08]\ We have just implemented Jabber extention called "User mood" in Tkabber ([http://www.xmpp.org/extensions/xep-0107.html](http://www.xmpp.org/extensions/xep-0107.html)) but when translating that "moods" into russian we have problems. Basically how \*in this context\* the mood "mean" should be translated? + +[00:08]\ Webster gives a horrible lot of meanings + +[00:08]\ which even contradict one another + +[00:08]\ Its emotional state. + +[00:08]\ it's a state of sexual arousal + +[00:08]\ ie: is the user angry, happy, etc + +[00:09]\ (waste of time IMO) + +[00:09]\ patthoyts: yeah, so what's with mean? + +[00:09]\ "Mean" - petty, nasty, angry at a low level. + +[00:09]\ but I guess you have to keep the kids happy. + +[00:09]\ mood is related to mode (like an emacs document mode, or the vi mode of typing versus commands) + +[00:09]\ patthoyts: are you talking about that extension? ;) + +[00:09]\ Wait, what emotion? + +[00:09]\ OHHH MEAN + +[00:09]\ Mean is "vindictive" + +[00:10]\ mode is also related to musical sound/"color" + +[00:10]\ patthoyts: I've done it to test PEP (personal eventing) thing in Tkabber and fixed some misc problems in it. so it's not in vain ;) + +[00:10]\ If you are pulling the wings of a fly you are being mean. + +[00:10]\ It can be playful, but it's always taunting + +[00:10]\ that depends on the fly :P + +[00:11]\ My yougest is always complaining that her sister is being mean. Normally when the little one cant get onto the computer. + +[00:11]\ "That was a mean spirited trick" + +[00:11]\ offensive. selfish. malicious. small-minded. ignoble. + +[00:12]\ so it's basicaly "to contrive something evil in one's mind" (pardon my english), right? + +[00:12]\ yeah. sounds good. + +[00:12]\ "YOU MEANIE!" (Said when someone says something deliberately hurtful) + +[00:12]\ grumpy with a dash of vindictive. + +[00:12]\ It's more "evil with intent" + +[00:12]\ damn, I didn't even know that word - vindictive ;) + +[00:12]\ basically, how people are on some other channels ;) + +[00:12]\ You can't think mean, just act mean + +[00:13]\* Emiliano feeling mean + +[00:13]\ "Mean" suggests pettiness and small-mindedness. It's an insult of a small child; it doesn't sink to the level of "evil." + +[00:13]\ hm, interesting insight... + +[00:13]\ well the contriving is not sufficient probably, but you're on the right track... that is only to be mean in one's mind... to -actually- be mean, you have to do something mean to another (I would think)... that is, you have to be perceived as being mean by the party you're being mean to + +[00:14]\ hm, even more interesting... + +[00:14]\ Telling a joke that embarrases someone is condidered "Mean" + +[00:14]\ you guys still talking about me? + +[00:14]\ Sorry God + +[00:14]\ but that's exactly as you're using it in the application... you're giving people the ability to be perceived as being in a mean mood + +[00:15]\ hypnotoad: but that also depends on intent... if it was intended to embarrass, that would qualify as mean + +[00:15]\ albert said I am raffiniert, not mean + +[00:16]\ Jim: I see, if you advertise that you are "mean" than people should not be surprised by hurtful things + +[00:16]\ hypnotoad: that too :) + +[00:16]\ hypnotoad: that's almost perfect explanation to me + +[00:16]\ "mean mood" - probably something like "irritable," "irascible," "testy" is intended. + +[00:16]\ hypnotoad said "use that explanation" + +[00:17]\ perhaps people who are only just grumpy might advertise themselves as being mean so as to be left alone + +[00:17]\* hypnotoad Bzzzzzzzz + +[00:17]\* kostix raises and heads to the window to jump into... + +[00:17]\ "petulant" + +[00:17]\ "petty" + +[00:17]\ (so many new words...) + +[00:18]\ "petrudinous" + +[00:18]\ English is great for that. + +[00:18]\ wait, not that one + +[00:18]\ Not being Russian speakers, we're throwing out English synonymies, in hopes that something will resonate. + +[00:19]\ Pipes resonate + +[00:19]\ As to wine glasses... + +[00:19]\* steveo thought he was loggin in to the tclers chat, not synonyms anonymous ... \<:-) + +[00:19]\ Spiteful. "Mean" can also suggest "niggardly." + +[00:20]\ kbk: that's what I intended to ignite ;) + +[00:20]\ synonomous anonymous? + +[00:20]\ seasoned with a little bit of nutmeg and synonym. + +[00:20]\ anomalous anonymous? + +[00:21]\ anonymous anonymous + +[00:21]\ "Hi my name is (state you name), and I am nobody" + +[00:21]\* steveo wonders just how badly we are confusing kostix + +[00:22]\ Not badly enough + +[00:23]\ now, \*that's" mean ;) + +[00:23]\ All this punning is being mean to a non-native speaker. + +[00:23]\* kbk xed + +[00:23]\ sorry, I have another words at hand in the same context, they are: cold (is it really about feeling cold or what?), cranky and thirsty (is that really about thirst or what?) + +[00:23]\ But I didn't mean to be mean! + +[00:23]\ actually, that person who invented the set of moods is... strange + +[00:24]\ Cold: (references to reptiles) Cold blooded, not caring about the feelings of others + +[00:24]\ cranky - irascible, touchy, swift to anger (often because of tiredness or illness) + +[00:24]\ thirsty is just plain "needs something to drink" + +[00:25]\ ok, seems like we got cranky wrong, thanks + +[00:25]\ thirsty is "khochit' pit'" + +[00:25]\ that's all + +[00:25]\ A perfect example of "cranky" is the behaviour of any toddler in need of sleep. + +[00:25]\ Cranky is also like an old car engine. + +[00:26]\ hat0: one person suggested it's about "mentally drained out" or so... that's why I asked ;) + +[00:26]\ (where we get the word) + +[00:26]\ now what's about "cold"? + +[00:26]\ hypnotoad - Nonsense - the word was in use in the 1780s. + +[00:26]\ (notice that the set of moods also has "hot") + +[00:27]\ Hot is "excited" + +[00:27]\ cranky - ill-tempered, grouchy, cross. + +[00:27]\* hypnotoad Learn someting new every day, Thanks Kevin + +[00:27]\ "Hot under the collar" is excited in an angry way + +[00:28]\ "Hot and bothered" is sexually aroused (but oddly only with a female) + +[00:28]\* Emiliano 's doughter getting "cranky" + +[00:28]\ toad - Although a guy can say that he's hot for a lady... + +[00:28]\ hypnotoad: what if we have "excited" in the \*same\* set of moods? ;) + +[00:28]\ True, and a lady can "look hot" + +[00:29]\ also, if you thirst for something, that is not the same as to be thirsty.. it is a strong desire for it (like "on zhazhdal mesti") + +[00:29]\ kostix - In that case, 'hot' probably has a specifically sexual connotation. Your list does indeed sound a lottle strange. + +[00:29]\ Well just about every mood involves and excitement of one form or another ;) + +[00:31]\ cold, you could think "unfeeling" - this dictionary i have suggests "kholodniy' chelovek" (which makes me laugh) + +[00:31]\ Do Russians say that?! + +[00:31]\ 'Twould be new to me. + +[00:34]\ hat0: thanks. your knowledge of Russian keeps impress me ;) + +[00:34]\ hat0: What does that "kholodniy' chelovek" loosely translate back to? + +[00:34]\ hypnotoad: cold person + +[00:34]\ yes + +[00:34]\ Cold as in "was out in the siberian weather" + +[00:35]\ or cold as in "psychopathic killer" + +[00:35]\ yes, cold as if put in refrigerator + +[00:35]\ kholodniy is from hot-cold. + +[00:35]\ Ah + +[00:35]\ "Many are cold, but few are frozen." + +[00:35]\ That's it! That's the one! + +[00:36]\ My pun acceptor overflowed its daily limit. + +[00:36]\ :) + +[00:37]\ This is nearly the only milieu that I've been in where multilingual puns are commonplace. + +[00:38]\ There is a bit of a legend that in the early days of the cold war the East and West devised an automatic translator that would operate by teletype. After a few million dollars, they took it for a test spin to see how well it worked, by entering a phrase in english, translating to russian, and then back to english. + +On phrase was "The spirit is willing, but the flesh is weak" The result was "The vokda is watered down and the meat is rancid" + +[00:38]\ No, "the vodka is agreeable." + +[00:39]\ "but the meat has gone soft" + +[00:39]\ Kevin with the assist... Thank you thank you + +[00:39]\ I liked "out of sight, out of mind" -> "blind idiot" + +[00:39]\ So wait.. it was real? + +[00:39]\ No, translation software \*still\* isn't that good. + +[00:40]\ Why, that's no multilingual pun--I'm keeping my only tongue in my own mouth. + +[00:42]\ A true story, though: there was one document (about a French-made minicomputer) that I got from a translation service that contained gems like "each forefinger guestbook is divided into two pastures: the word address and the byte rebate within the word" + +[00:42]\ [http://ray.tomes.biz/b2/index.php/c/2007/04/26/p117](http://ray.tomes.biz/b2/index.php/c/2007/04/26/p117) + +[00:43]\ I had to translate that semimechanically back into French for it to make any sense. + +[00:43]\ Quality + +[00:43]\ "forefinger guestbook" -> "index register"; "pasture" -> "field"; "rebate" -> "offset" + +[00:43]\ kbk: we have similar difficulties with chinese shit^Wgoods with Russian-translated labels and texts + +[00:45]\ i bought a chinese razor in tashkent, called the "BIG BUG RAZOR" + +[00:45]\ Tcl NEEDS one :) + +[00:45]\ Well a tartula has a lot of hair you know + +[00:46]\ (Tarantula... not the caribbean island....) + +[00:47]\ The document also contained numerous references to a K7 - I had to read that aloud in French before the forehead-slapping "cassette" came to mind. + +[00:48]\ Una tortuga (a tortoise) generally has no hair at all. --- -[18:53]\* kostix coughs... anyone to help me out with English again? :} - -[18:57]\ ask away... - -[18:58]\ re that "user mood" thing from jabber: what's the difference -between "humbled" and "humiliated"? wordnet counts them as synonyms. - -[18:59]\ so we're stuck again with translation - -[19:00]\ kostix - "humbled" has a positive connotation - I'd use it for, -say, a monk contemplating the majesty of the Universe. - -[19:00]\ "humiliated" in modern colloquial usage has a more negative -connotation - I'd use it of an athlete that lost badly in a competition. +[18:53]\* kostix coughs... anyone to help me out with English again? :} + +[18:57]\ ask away... + +[18:58]\ re that "user mood" thing from jabber: what's the difference between "humbled" and "humiliated"? wordnet counts them as synonyms. + +[18:59]\ so we're stuck again with translation + +[19:00]\ kostix - "humbled" has a positive connotation - I'd use it for, say, a monk contemplating the majesty of the Universe. + +[19:00]\ "humiliated" in modern colloquial usage has a more negative connotation - I'd use it of an athlete that lost badly in a competition. # Претендент на окончательный вариант (основан на "Unisex") -Этот вариант сделан с учётом многочисленных пожеланий переводчиков и лингвистов с -[ru\_translate](http://community.livejournal.com/ru_translate/9082757.html) и -[pishu\_pravilno](http://community.livejournal.com/pishu_pravilno/2804037.html), -а также вышепроцитированного чата с тиклерами. [**Автор**](Участник_Bigote.md) -этого варианта склоняется к переводу самого слова "mood" не как "настроение", а -как "состояние", взяв себе в союзники -[этот комментарий](http://community.livejournal.com/pishu_pravilno/2804037.html?thread=48256837#t48256837). -Соответственно, бо́льшая часть терминов будет в среднем роде, согласовываясь со -словом "состояние". Пару слов я решил перевести существительным в родительном -падеже, убрав при этом двоеточие после "состояния". Думаю, это легко -реализовать, поставив в файле перевода не "Состояние:", а просто "Состояние", -сами настроения-состояния писать как ": испуганное", ": всё нипочём", " -удивления". Критика приветствуется. (Кое-какие слова я ещё не доделал, допишу -завтра-послезавтра.) - -Оригинал | Перевод ----|--- -afraid | Состояние: испуганное -amazed | Состояние: изумлённое -angry | Состояние: рассерженное -annoyed | Состояние: раздражённое -anxious | Состояние: беспокойное -aroused | Состояние: возбуждённое -ashamed | Состояние: пристыжённое -bored | Состояние: скукотища! -brave | Состояние: всё нипочём -calm | Состояние: спокойное -cold | Состояние: равнодушное -confused | Состояние: в замешательстве -contented | Состояние: довольное -cranky | Состояние: недовольное -curious | Состояние: любознательное -depressed | Состояние: подавленное -disappointed | Состояние: разочарованное -disgusted | Состояние: чувствую отвращение -distracted | Состояние: растерянное -embarrassed | Состояние: смущённое -excited | Состояние: взволнованное -flirtatious | Состояние: кокетливое -frustrated | Состояние: расстроенное -grumpy | Состояние: ворчливое -guilty | Состояние: виноватое -happy | Состояние: счастливое -hot | Состояние: пылаю -humbled | Состояние: смиренное -humiliated | Состояние: униженное -hungry | Состояние: хочу есть -hurt | Состояние: уязвлённое -impressed | Состояние: под впечатлением -in\_awe | Состояние: благоговейное -in\_love | Состояние: влюблённое -indignant | Состояние: возмущённое -interested | Состояние: заинтересованное -intoxicated | Состояние: одурманенное -invincible | Состояние: неукротимое -jealous | Состояние: ревнивое -lonely | Состояние: одинокое -mean | Состояние: сволочное -moody | Состояние: унылое -nervous | Состояние: на нервах -neutral | Состояние: безразличное -offended | Состояние: обиженное -playful | Состояние: игривое -proud | Состояние: горделивое -relieved | Состояние: гора с плеч -remorseful | Состояние: раскаиваюсь -restless | Состояние: неугомонное -sad | Состояние: печальное -sarcastic | Состояние: язвительное -serious | Состояние: серьёзное -shocked | Состояние: потрясённое -shy | Состояние: застенчивое -sick | Состояние: болезненное -sleepy | Состояние: сонное -stressed | Состояние: напряжённое -surprised | Состояние: удивлённое -thirsty | Состояние: хочу пить -worried | Состояние: беспокойное +Этот вариант сделан с учётом многочисленных пожеланий переводчиков и лингвистов с **[ru\_translate](http://community.livejournal.com/ru_translate/9082757.html)** и **[pishu\_pravilno](http://community.livejournal.com/pishu_pravilno/2804037.html)**, а также вышепроцитированного чата с тиклерами. [Автор](Участник_Bigote.md) этого варианта склоняется к переводу самого слова "mood" не как "настроение", а как "состояние", взяв себе в союзники [этот комментарий](http://community.livejournal.com/pishu_pravilno/2804037.html?thread=48256837#t48256837). Соответственно, бо́льшая часть терминов будет в среднем роде, согласовываясь со словом "состояние". Пару слов я решил перевести существительным в родительном падеже, убрав при этом двоеточие после "состояния". Думаю, это легко реализовать, поставив в файле перевода не "Состояние:", а просто "Состояние", сами настроения-состояния писать как ": испуганное", ": всё нипочём", " удивления". Критика приветствуется. (Кое-какие слова я ещё не доделал, допишу завтра-послезавтра.) + + ** Оригинал **** Перевод ** + + afraid Состояние: испуганное + + amazed Состояние: изумлённое + + angry Состояние: рассерженное + + annoyed Состояние: раздражённое + + anxious Состояние: беспокойное + + aroused Состояние: возбуждённое + + ashamed Состояние: пристыжённое + + bored Состояние: скукотища! + + brave Состояние: всё нипочём + + calm Состояние: спокойное + + cold Состояние: равнодушное + + confused Состояние: в замешательстве + + contented Состояние: довольное + + cranky Состояние: недовольное + + curious Состояние: любознательное + + depressed Состояние: подавленное + + disappointed Состояние: разочарованное + + disgusted Состояние: чувствую отвращение + + distracted Состояние: растерянное + + embarrassed Состояние: смущённое + + excited Состояние: взволнованное + + flirtatious Состояние: кокетливое + + frustrated Состояние: расстроенное + + grumpy Состояние: ворчливое + + guilty Состояние: виноватое + + happy Состояние: счастливое + + hot Состояние: пылаю + + humbled Состояние: смиренное + + humiliated Состояние: униженное + + hungry Состояние: хочу есть + + hurt Состояние: уязвлённое + + impressed Состояние: под впечатлением + + in\_awe Состояние: благоговейное + + in\_love Состояние: влюблённое + + indignant Состояние: возмущённое + + interested Состояние: заинтересованное + + intoxicated Состояние: одурманенное + + invincible Состояние: неукротимое + + jealous Состояние: ревнивое + + lonely Состояние: одинокое + + mean Состояние: сволочное + + moody Состояние: унылое + + nervous Состояние: на нервах + + neutral Состояние: безразличное + + offended Состояние: обиженное + + playful Состояние: игривое + + proud Состояние: горделивое + + relieved Состояние: гора с плеч + + remorseful Состояние: раскаиваюсь + + restless Состояние: неугомонное + + sad Состояние: печальное + + sarcastic Состояние: язвительное + + serious Состояние: серьёзное + + shocked Состояние: потрясённое + + shy Состояние: застенчивое + + sick Состояние: болезненное + + sleepy Состояние: сонное + + stressed Состояние: напряжённое + + surprised Состояние: удивлённое + + thirsty Состояние: хочу пить + + worried Состояние: беспокойное # Согласование с "User Activity" (XEP-0108) -Существует некоторая проблема в согласовании перевода термина "mood" из "User -Mood" и перевода термина "activity" из "User Activity" -([XEP-0108](http://www.xmpp.org/extensions/xep-0108.html)). +Существует некоторая проблема в согласовании перевода термина "mood" из "User Mood" и перевода термина "activity" из "User Activity" ([XEP-0108](http://www.xmpp.org/extensions/xep-0108.html)). -[**Gebb**](Участник_Gebb.md) [предложил](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/08/26.html#18:04:56): +[Gebb](Участник_Gebb.md) [предложил](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/08/26.html#18:04:56): Насчёт мудов и активити. user mood = настроение/состояние, activity = занятие. Таково моё предложение. + + Index: wiki/ru/Настройка_Ткаббера__азы_и_глубже.md ================================================================== --- wiki/ru/Настройка_Ткаббера__азы_и_глубже.md +++ wiki/ru/Настройка_Ткаббера__азы_и_глубже.md @@ -1,6 +1,7 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Настройка_Ткаббера:_азы_и_глубже/index.html) + # Настройка Ткаббера: азы и глубже Материал из Tkabber Wiki @@ -8,410 +9,234 @@ * [1 Вместо предисловия](#Вместо_предисловия) * [2 Введение](#Введение) * [3 Места скопления настроек](#Места_скопления_настроек) * [4 Где лежат файлы конфигурации?](#Где_лежат_файлы_конфигурации) - * [4.1 Тильда: большие возможности маленького символа](#Тильда_большие_возможности_маленького_символа) + * [4.1 Тильда: большие возможности маленького символа](#Тильда_большие_возможности_маленького_символа) * [5 Файл **custom.tcl** — руками не трогать!](#Файл_custom.tcl_-_руками_не_трогать) - * [5.1 Формат файла **custom.tcl**](#Формат_файла_custom.tcl) + * [5.1 Формат файла **custom.tcl**](#Формат_файла_custom.tcl) * [6 Файл **config.tcl** — швейцарский нож для Ткаббера](#Файл_config.tcl_-_швейцарский_нож_для_Ткаббера) * [7 XRDB! как много в этом слове...](#XRDB_как_много_в_этом_слове...) ## Вместо предисловия -Эта статья является попыткой объяснить новообращённым ткабберистам и -ткабберинам азы настройки Ткаббера и — главное — _объяснить, **как именно** -работает_ механизм его конфигурирования. Впрочем, текст содержит далеко не -только азы, но и достаточно глубокие погружения в детали. При этом авторами -были приложены некоторые усилия для того, чтобы организовать текст в каждом -разделе по нарастанию сложности (это так авторы сняли с себя ответственность за -качество материала). - -Несмотря на то, что по _возможностям_ конфигурирования Ткаббер может спокойно -заткнуть за пояс большинство аналогичных программ, его подход к решению данной -проблемы сродни пресловутому "Unix-way": в руки пользователю даётся некоторое -количество рычагов различной формы, конструкции и сложности, умело дёргая за -которые, пользователь может добиться весьма многого. И даже странного. - -С другой стороны, подобная свобода часто (и закономерно) пугает людей (особенно -новичков) — хочется некой накатанной схемы. Часто также пользователям недостаёт -элементарного знания системы, с которой они работают. - -Часть описанных проблем будет препарирована на данной странице. +Эта статья является попыткой объяснить новообращённым ткабберистам и ткабберинам азы настройки Ткаббера и — главное — _объяснить, **как именно** работает_ механизм его конфигурирования. Впрочем, текст содержит далеко не только азы, но и достаточно глубокие погружения в детали. При этом авторами были приложены некоторые усилия для того, чтобы организовать текст в каждом разделе по нарастанию сложности (это так авторы сняли с себя ответственность за качество материала). + +Несмотря на то, что по _возможностям_ конфигурирования Ткаббер может спокойно заткнуть за пояс большинство аналогичных программ, его подход к решению данной проблемы сродни пресловутому "Unix-way": в руки пользователю даётся некоторое количество рычагов различной формы, конструкции и сложности, умело дёргая за которые, пользователь может добиться весьма многого. И даже странного. + +С другой стороны, подобная свобода часто (и закономерно) пугает людей (особенно новичков) — хочется некой накатанной схемы. Часто также пользователям недостаёт элементарного знания системы, с которой они работают. + +Часть описанных проблем будет препарирована на данной странице. ## Введение -Ткаббер написан на языке [Tcl](http://ru.wikipedia.org/wiki/Tcl) (произносится -"тикл" или "тикль") с использованием "родного" для тикля графического тулкита -[Tk](http://ru.wikipedia.org/wiki/Tk). Связка [Tcl/Tk](http://www.tcl.tk) -является переносимой, и это означает, что Ткаббер работает как минимум под -различными вариантами Unix, под Win32 и под MacOS (справедливости ради надо -отметить, что пользователям последней системы придётся приложить для этого -куда больше усилий; во всяком случае, нам пока неизвестны случаи работы -Ткаббера на "маках" с полпинка). - -Также это означает, что тщетно ждать от Ткаббера наличия некоего "специального" -конфигуратора для \<впишите сюда вашу любимую ОС>. С другой стороны, в плане -_хранения конфигурационных файлов_ у перечисленных операционных систем больше -общих черт, чем различий; поэтому владея таким понятием как _"домашний каталог -пользователя",_ можно чувствовать себя уверенно при конфигурировании Ткаббера -на любой из систем, в которых он работает. - -И ещё: существует (неправильное) мнение, что для того, чтобы работать с -Ткаббером, нужно редактировать какие-то файлы конфигурации. Это неверно — для -конфигурирования 90% того, что нужно "обычному пользователю", достаточно -встроенного в Ткаббер графического конфигуратора. Проблемы, которые нельзя -решить этим путём (например, "кривые шрифты"), обычно являются результатом -недоделок в настройке операционной системы. - -![(!)](../images/Hammer.png) **Сделать:** плавно подвести к идее "замочи свой -~/.tkabber, потом — разбирайся" +Ткаббер написан на языке [Tcl](http://ru.wikipedia.org/wiki/Tcl) (произносится "тикл" или "тикль") с использованием "родного" для тикля графического тулкита [Tk](http://ru.wikipedia.org/wiki/Tk). Связка [Tcl/Tk](http://www.tcl.tk) является переносимой, и это означает, что Ткаббер работает как минимум под различными вариантами Unix, под Win32 и под MacOS (справедливости ради надо отметить, что пользователям последней системы придётся приложить для этого куда больше усилий; во всяком случае, нам пока неизвестны случаи работы Ткаббера на "маках" с полпинка). + +Также это означает, что тщетно ждать от Ткаббера наличия некоего "специального" конфигуратора для \<впишите сюда вашу любимую ОС>. С другой стороны, в плане _хранения конфигурационных файлов_ у перечисленных операционных систем больше общих черт, чем различий; поэтому владея таким понятием как _"домашний каталог пользователя",_ можно чувствовать себя уверенно при конфигурировании Ткаббера на любой из систем, в которых он работает. + +И ещё: существует (неправильное) мнение, что для того, чтобы работать с Ткаббером, нужно редактировать какие-то файлы конфигурации. Это неверно — для конфигурирования 90% того, что нужно "обычному пользователю", достаточно встроенного в Ткаббер графического конфигуратора. Проблемы, которые нельзя решить этим путём (например, "кривые шрифты"), обычно являются результатом недоделок в настройке операционной системы. + +![(!)](../images/Hammer.png) **Сделать:** плавно подвести к идее "замочи свой ~/.tkabber, потом — разбирайся" ## Места скопления настроек -Tkabber использует четыре источника для получения сведений о своей -конфигурации: - -1. Настройки по умолчанию — то, что "прибито гвоздями" к коду, и используется, - если нет соответствующих настроек из других источников. -1. Файл **custom.tcl** в _каталоге с файлами настроек_ (см. ниже). Этот файл - создаётся Ткаббером и содержит те настройки, которые пользователь может - изменять при помощи окна конфигурации Ткаббера. -1. Файл **config.tcl**, находящийся там же. Это файл содержит код на языке - Tcl, который _выполняется_ Ткаббером при старте, и позволяет делать - наиболее тонкую настройку. -1. X Resource DataBase (XRDB) — на Unix-системах — база данных - [X-сервера](http://ru.wikipedia.org/wiki/X_Window_System), хранящая - информацию о конфигурации различных [элементов управления GUI](http://ru.wikipedia.org/wiki/Виджет). - -Важно понимать, что в принципе Ткаббер не нуждается ни в каких настройках, -кроме "встроенных", из пункта 1, которые есть всегда. А это означает, что -ничего страшного не произойдёт, если вы просто сотрёте (или переместите -куда-нибудь до поры) файлы текущей конфигурации. Этим нельзя "испортить" -Ткаббер. - -**На заметку:** Подобный подход может помочь "в борьбе" с некоторыми -дистрибутивами ткаббера, в которых по умолчанию подключены "навороченные" файлы -конфигурации, которые полезны для изучения, но "вываливают" на -неподготовленного пользователя слишком много информации. - -Ещё важнее понимать, что каталог с файлами настроек — _единственное_ место в -системе, которое Ткаббер использует для управления своей конфигурацией (это не -совсем верно для случая XRDB, но об этом ниже). То есть никакого реестра или -других системно-зависимых средств. А благодаря способности тикля читать -текстовые файлы независимо от используемых символов перевода строки (а они -разные во всех трёх классах систем, на которых работает тикль), вам достаточно -просто скопировать каталог конфигурации на другую машину, а тикль с Ткаббером -позаботятся об остальном. И это означает, что вы можете "таскать за собой" этот -каталог не только с компьютера на компьютер, но и между разными операционными -системами! - -Проблемы при переносе могут возникнуть только в том случае, если вы используете -не-ASCII символы (например, русские) в значениях параметров, которые -устанавливаются в файле **config.tcl**. Подробнее об этом — в секции, -посвящённой этому файлу. - -**На заметку:** те из читателей, для которых слова "система контроля версий" — -не пустой звук, могут поразмыслить какие удобства можно получить при -использовании этого подхода, учитывая, что клиенты для популярных СКВ -существуют для каждой из систем, на которых работает Ткаббер. - -Следующий раздел обсуждает в деталях где и как Ткаббер ожидает увидеть каталог -со своими настройками. +Tkabber использует четыре источника для получения сведений о своей конфигурации: + +1. Настройки по умолчанию — то, что "прибито гвоздями" к коду, и используется, если нет соответствующих настроек из других источников. +1. Файл **custom.tcl** в _каталоге с файлами настроек_ (см. ниже). Этот файл создаётся Ткаббером и содержит те настройки, которые пользователь может изменять при помощи окна конфигурации Ткаббера. +1. Файл **config.tcl**, находящийся там же. Это файл содержит код на языке Tcl, который _выполняется_ Ткаббером при старте, и позволяет делать наиболее тонкую настройку. +1. X Resource DataBase (XRDB) — на Unix-системах — база данных [X-сервера](http://ru.wikipedia.org/wiki/X_Window_System), хранящая информацию о конфигурации различных [элементов управления GUI](http://ru.wikipedia.org/wiki/Виджет). + +Важно понимать, что в принципе Ткаббер не нуждается ни в каких настройках, кроме "встроенных", из пункта 1, которые есть всегда. А это означает, что ничего страшного не произойдёт, если вы просто сотрёте (или переместите куда-нибудь до поры) файлы текущей конфигурации. Этим нельзя "испортить" Ткаббер. + +**На заметку:** Подобный подход может помочь "в борьбе" с некоторыми дистрибутивами ткаббера, в которых по умолчанию подключены "навороченные" файлы конфигурации, которые полезны для изучения, но "вываливают" на неподготовленного пользователя слишком много информации. + +Ещё важнее понимать, что каталог с файлами настроек — _единственное_ место в системе, которое Ткаббер использует для управления своей конфигурацией (это не совсем верно для случая XRDB, но об этом ниже). То есть никакого реестра или других системно-зависимых средств. А благодаря способности тикля читать текстовые файлы независимо от используемых символов перевода строки (а они разные во всех трёх классах систем, на которых работает тикль), вам достаточно просто скопировать каталог конфигурации на другую машину, а тикль с Ткаббером позаботятся об остальном. И это означает, что вы можете "таскать за собой" этот каталог не только с компьютера на компьютер, но и между разными операционными системами! + +Проблемы при переносе могут возникнуть только в том случае, если вы используете не-ASCII символы (например, русские) в значениях параметров, которые устанавливаются в файле **config.tcl**. Подробнее об этом — в секции, посвящённой этому файлу. + +**На заметку:** те из читателей, для которых слова "система контроля версий" — не пустой звук, могут поразмыслить какие удобства можно получить при использовании этого подхода, учитывая, что клиенты для популярных СКВ существуют для каждой из систем, на которых работает Ткаббер. + +Следующий раздел обсуждает в деталях где и как Ткаббер ожидает увидеть каталог со своими настройками. ## Где лежат файлы конфигурации? -Короткий ответ: они находятся в подкаталоге **.tkabber** домашнего каталога -пользователя. - -Если имя **.tkabber** — фиксированно, то с последним всё не так просто. Точнее, -просто, но допускает некоторые вариации. - -Для начала полезно запомнить, что при операциях с файлами в Tcl домашний -каталог пользователя обозначается символом "~" (тильда), который имеет такой же -смысл, как и "~" в командных оболочках Unix-систем (что неудивительно, т.к. Tcl -был "рождён" в Unix). - -При операциях с файлами тильда "раскрывается" в полный путь до вашего домашнего -каталога. К примеру, на моей домашней системе Debian GNU/Linux она раскрывается -в +Короткий ответ: они находятся в подкаталоге **.tkabber** домашнего каталога пользователя. + +Если имя **.tkabber** — фиксированно, то с последним всё не так просто. Точнее, просто, но допускает некоторые вариации. + +Для начала полезно запомнить, что при операциях с файлами в Tcl домашний каталог пользователя обозначается символом "~" (тильда), который имеет такой же смысл, как и "~" в командных оболочках Unix-систем (что неудивительно, т.к. Tcl был "рождён" в Unix). + +При операциях с файлами тильда "раскрывается" в полный путь до вашего домашнего каталога. К примеру, на моей домашней системе Debian GNU/Linux она раскрывается в /home/kostix -а на моей рабочей станции Windows XP она "скрывает в себе" +а на моей рабочей станции Windows XP она "скрывает в себе" C:\Documents and Settings\Дормидонт Евлампиевич -Это означает, что в первом случае файлы конфигурации Tkabber хранятся в -каталоге +Это означает, что в первом случае файлы конфигурации Tkabber хранятся в каталоге /home/kostix/.tkabber -а во втором — в каталоге +а во втором — в каталоге C:\Documents and Settings\Дормидонт Евлампиевич\Application Data\Tkabber -Системы Win9x/WinME являются однопользовательскими, и по причинам, которые -будут показаны ниже, каталог настроек Ткаббера на таких системах находится в -корне первого логического диска: +Системы Win9x/WinME являются однопользовательскими, и по причинам, которые будут показаны ниже, каталог настроек Ткаббера на таких системах находится в корне первого логического диска: C:\.TKABBER -Тильда может использоваться при указании различных каталогов в настройках -Tkabber'а (например, история чатов может храниться в каталоге ~/.tkabber/logs). -Так же вам могут "показать" подобный каталог в ходе диалога в [комнате -обсуждения Ткаббера] — не стоит удивляться: вам показывают "обобщённый" -вариант, который (должен быть) понятен пользователям любой ОС, в которой -работает Ткаббер. - -Теперь — о более сложном. +Тильда может использоваться при указании различных каталогов в настройках Tkabber'а (например, история чатов может храниться в каталоге ~/.tkabber/logs). Так же вам могут "показать" подобный каталог в ходе диалога в [комнате обсуждения Ткаббера] — не стоит удивляться: вам показывают "обобщённый" вариант, который (должен быть) понятен пользователям любой ОС, в которой работает Ткаббер. + +Теперь — о более сложном. ### Тильда: большие возможности маленького символа -На самом деле, интерпретатор тикля "раскрывает" тильду, пользуясь информацией -из нескольких (проверенных) источников. - -1\. Во-первых, тикль сверяется с [**переменной окружения**](Терминология.md#Переменные_окружения) -**HOME**. На Unix-системах эта переменная есть всегда (за исключением -клинических случаев). В Windows — напротив — её по умолчанию нет. Если такая -переменная есть, тикль использует её значение, и никакие силы не заставят его в -этом случае использовать что-то другое. - -Такое поведение удобно для того, чтобы заставить Ткаббер использовать -какой-нибудь странный каталог для своей конфигурации, что может понадобиться, к -примеру, при изготовлении системы "джаббер клиент на флэшке". - -Этот же аспект используется дистрибутивом -[**Tkabber-Pack**](Дистрибутивы__которые_мы_выбираем.md#Прилавок), который в -скрипте запуска Ткаббера устанавливает переменную **HOME** в значение "." -(точка, т.е. "текущий каталог"), перемещая таким образом каталог **.tkabber** -"к себе". - -2\. Во-вторых, если переменная окружения **HOME** не найдена, тикль использует -следующий набор правил: - -2.1. **Unix:** - -![(!)](../images/Hammer.png) **Сделать:** Написать про Unix - -2.2. **Windows:** - -* Под Windows интерпретатор тикля сначала пытается использовать каталог, - полученный "склеиванием" значений переменных окружения **HOMEDRIVE** (имя - диска с домашним каталогом) и **HOMEPATH** (путь на этом диске до домашнего - каталога). Эти переменные по умолчанию есть на любой Windows системе класса - NT, но их нет в Win9x/WinME, так как и понятие "домашний каталог - пользователя" в них не завезли. - - Посмотреть значения этих переменных в Windows 2000 и выше можно, запустив - оболочку командной строки **cmd.exe** (это можно сделать, выбрав "Пуск → - Программы → Стандартные → Командная Строка"), и выполнив там: - - set | findstr HOME - - на моей системе это выглядит так: - - C:\> set | findstr HOME - HOMEDRIVE=C: - HOMEPATH=\Documents and Settings\Дормидонт Евлампиевич - - Команда **findstr** была здесь использована для фильтрации вывода команды **set**. - - В Unix-системах эквивалентом **findstr** является программа **grep** (на - самом деле это **findstr** является ограниченным эквивалентом **grep**). В - Windows NT и Win9x/WinME нет команды **findstr**, так что придётся - просматривать всю информацию глазами (или установить - [grep для Win32](http://gnuwin32.sourceforge.net/packages/grep.htm)). - - Кроме того, пользователи Win9x/WinME лишены даже **cmd.exe** и вынуждены - запускать **command.com**. - - **На заметку:** Команда **set** вообще очень удобна для изучения состояния - переменных окружения в системе. Будучи запущена без параметров (как в - примере выше), она выводит пары **ПЕРЕМЕННАЯ**=**ЗНАЧЕНИЕ**. Для - ограничения её вывода можно применять **findstr** или **grep** как описано - выше. - -* Если же нет и переменных **HOMEDRIVE**/**HOMEPATH,** тикль заламывает руки и - использует в качестве домашнего каталога пользователя каталог **C:\\**. - Простенько и со вкусом. В системах Win9x/WinME эти переменных окружения - отсутствуют так же, как и **HOME**, и это означает, что в них каталогом с - настройками Ткаббера является "C:\\.TKABBER". - -Не исключено, что прочитав про весь этот кошмар, доходчивый читатель задастся -вопросом: "а почему бы не прописать себе в окружение переменную **HOME** с -правильным значением раз и навсегда?". И будет прав. Такая настройка -используется многими, так как облегчает жизнь и многим другим программам, -знающим о существовании этой переменной окружения, например, -[редактору Vim](http://vim.sf.net) и -[клиенту системы Subversion](http://www.subversion.tigris.org). - -Сделать это весьма просто: откройте свойства "Моего Компьютера", щёлкнув по его -иконке правой кнопкой и выбрав "Свойства", затем выберите закладку -"Дополнительно" и нажмите на появившейся форме кномку "Переменные среды" -(спасибо переводчикам, что не "вторника"). - -В появившемся окне есть два списка переменных: вверху — для текущего -пользователя, внизу — глобальных для системы. Нас интересует верхний. Нажмите -кнопку "Создать" и введите: - -* _Имя переменной:_ **HOME** -* _Значение переменной:_ **%USERPROFILE%** (или **%HOMEDRIVE%/%HOMEPATH%**) - -Конструкция +На самом деле, интерпретатор тикля "раскрывает" тильду, пользуясь информацией из нескольких (проверенных) источников. + +1. Во-первых, тикль сверяется с [переменной окружения](Терминология.md#Переменные_окружения) **HOME**. На Unix-системах эта переменная есть всегда (за исключением клинических случаев). В Windows — напротив — её по умолчанию нет. Если такая переменная есть, тикль использует её значение, и никакие силы не заставят его в этом случае использовать что-то другое. + +Такое поведение удобно для того, чтобы заставить Ткаббер использовать какой-нибудь странный каталог для своей конфигурации, что может понадобиться, к примеру, при изготовлении системы "джаббер клиент на флэшке". + +Этот же аспект используется дистрибутивом [Tkabber-Pack](Дистрибутивы__которые_мы_выбираем.md#Прилавок), который в скрипте запуска Ткаббера устанавливает переменную **HOME** в значение "." (точка, т.е. "текущий каталог"), перемещая таким образом каталог **.tkabber** "к себе". + +2. Во-вторых, если переменная окружения **HOME** не найдена, тикль использует следующий набор правил: + +2.1. **Unix:** + +![(!)](../images/Hammer.png) **Сделать:** Написать про Unix + +2.2. **Windows:** + +* Под Windows интерпретатор тикля сначала пытается использовать каталог, полученный "склеиванием" значений переменных окружения **HOMEDRIVE** (имя диска с домашним каталогом) и **HOMEPATH** (путь на этом диске до домашнего каталога). Эти переменные по умолчанию есть на любой Windows системе класса NT, но их нет в Win9x/WinME, так как и понятие "домашний каталог пользователя" в них не завезли. + +Посмотреть значения этих переменных в Windows 2000 и выше можно, запустив оболочку командной строки **cmd.exe** (это можно сделать, выбрав "Пуск → Программы → Стандартные → Командная Строка"), и выполнив там: + + set | findstr HOME + +на моей системе это выглядит так: + + C:\> set | findstr HOME + HOMEDRIVE=C: + HOMEPATH=\Documents and Settings\Дормидонт Евлампиевич + +Команда **findstr** была здесь использована для фильтрации вывода команды **set**. + +В Unix-системах эквивалентом **findstr** является программа **grep** (на самом деле это **findstr** является ограниченным эквивалентом **grep**). В Windows NT и Win9x/WinME нет команды **findstr**, так что придётся просматривать всю информацию глазами (или установить [grep для Win32](http://gnuwin32.sourceforge.net/packages/grep.htm)). + +Кроме того, пользователи Win9x/WinME лишены даже **cmd.exe** и вынуждены запускать **command.com**. + +**На заметку:** Команда **set** вообще очень удобна для изучения состояния переменных окружения в системе. Будучи запущена без параметров (как в примере выше), она выводит пары **ПЕРЕМЕННАЯ**=**ЗНАЧЕНИЕ**. Для ограничения её вывода можно применять **findstr** или **grep** как описано выше. + +* Если же нет и переменных **HOMEDRIVE**/**HOMEPATH,** тикль заламывает руки и использует в качестве домашнего каталога пользователя каталог **C:\\**. Простенько и со вкусом. В системах Win9x/WinME эти переменных окружения отсутствуют так же, как и **HOME**, и это означает, что в них каталогом с настройками Ткаббера является "C:\\.TKABBER". + +Не исключено, что прочитав про весь этот кошмар, доходчивый читатель задастся вопросом: "а почему бы не прописать себе в окружение переменную **HOME** с правильным значением раз и навсегда?". И будет прав. Такая настройка используется многими, так как облегчает жизнь и многим другим программам, знающим о существовании этой переменной окружения, например, [редактору Vim](http://vim.sf.net) и [клиенту системы Subversion](http://www.subversion.tigris.org). + +Сделать это весьма просто: откройте свойства "Моего Компьютера", щёлкнув по его иконке правой кнопкой и выбрав "Свойства", затем выберите закладку "Дополнительно" и нажмите на появившейся форме кномку "Переменные среды" (спасибо переводчикам, что не "вторника"). + +В появившемся окне есть два списка переменных: вверху — для текущего пользователя, внизу — глобальных для системы. Нас интересует верхний. Нажмите кнопку "Создать" и введите: + +* _Имя переменной:_ **HOME** +* _Значение переменной:_ **%USERPROFILE%** (или **%HOMEDRIVE%/%HOMEPATH%**) + +Конструкция %ИМЯ_ПЕРЕМЕННОЙ% -означает: "подставить значение из переменной с именем **ИМЯ\_ПЕРЕМЕННОЙ**". +означает: "подставить значение из переменной с именем **ИМЯ\_ПЕРЕМЕННОЙ**". -Закройте оба диалога, нажимая "ОК", и выполните команду для вывода переменных -окружения ещё раз _в новой оболочке_ (т.к. старая не "увидит" сделанных вами -изменений). Теперь вывод должен выглядеть примерно так: +Закройте оба диалога, нажимая "ОК", и выполните команду для вывода переменных окружения ещё раз _в новой оболочке_ (т.к. старая не "увидит" сделанных вами изменений). Теперь вывод должен выглядеть примерно так: HOME=C:\Documents and Settings\Дормидонт Евлампиевич HOMEDRIVE=C: HOMEPATH=\Documents and Settings\Дормидонт Евлампиевич -Вуаля! - -**Внимание:** Замечено, что на разных версиях Windows встречаются различные -комбинации переменных **USERPROFILE**, **HOMEDRIVE** и **HOMEPATH** (да, c'est -la vie!). К примеру, авторам встречалась Windows NT 4.x, на которой были все -три переменные, но **HOMEDRIVE** и **HOMEPATH** в комбинации давали полную -чушь, в то время как **USERPROFILE** содержала достаточно вменяемое значение. В -Windows 2000 и Windows XP переменная **USERPROFILE** почти всегда содержит -правильное значение, однако, опять же, авторам встречались машины, на которых -эта переменная отсутствовала. - -Выводов из этого — два: - -* **set** — ваш друг! -* в крайнем случае всегда можно записать в **HOME** непосредственное значение. - Это даже может оказаться полезным — установить "необычное" значение этой - переменной "в глобальном масштабе", например, для случая "набор программ на - винчестере в USB-салазках". - -**На заметку:** Имейте в виду, что подстановки значений в переменных окружения -Windows выполняются только один раз, то есть, говоря проще, нельзя определить -переменную, которая будет ссылаться на другую переменную, которая будет -ссылаться на третью — подстановка этой третьей переменной выполнена не будет. - -**Напоследок — ещё один трюк для сильных духом.** - -Можно легко узнать что думает тикль по поводу вашего домашнего каталога (и при -случае внушит это Ткабберу), выполнив заклинание **"file norm ~"** без кавычек -в любой оболочке тикля, установленной в вашей системе. - -Очень вероятно, что у вас как минимум есть **wish.exe** или **wish84.exe**, так -же, возможно, у вас есть **tclsh.exe**. Если же у вас есть **tkcon.tcl**, и вы -об этом знали, то вам, скорее всего, не стоит тратить время на чтение этого -руководства. Для нашей благородной цели сгодится любая из указанных программ. - -С другой стороны, если у вас Ткаббер в виде tclkit или starpack, то вам, скорее -всего, не повезло (т.к. подобный дистрибутив это "вещь в себе"), но ниже -приведено решение и для этого случая. Если же у вас Tkabber Pack, то вы — -обладатель урезанного, но "нормального" дистрибутива Tcl/Tk, только находится -он там, куда вы установили Tkabber Pack, и указанный **wish.exe** следует -искать именно там. - -Итак, запускаем то, что вам удалось обнаружить из приведённого списка и вводим -указанную команду. Примерный вид происходящего таков: +Вуаля! + +**Внимание:** Замечено, что на разных версиях Windows встречаются различные комбинации переменных **USERPROFILE**, **HOMEDRIVE** и **HOMEPATH** (да, c'est la vie!). К примеру, авторам встречалась Windows NT 4.x, на которой были все три переменные, но **HOMEDRIVE** и **HOMEPATH** в комбинации давали полную чушь, в то время как **USERPROFILE** содержала достаточно вменяемое значение. В Windows 2000 и Windows XP переменная **USERPROFILE** почти всегда содержит правильное значение, однако, опять же, авторам встречались машины, на которых эта переменная отсутствовала. + +Выводов из этого — два: + +* **set** — ваш друг! +* в крайнем случае всегда можно записать в **HOME** непосредственное значение. Это даже может оказаться полезным — установить "необычное" значение этой переменной "в глобальном масштабе", например, для случая "набор программ на винчестере в USB-салазках". + +**На заметку:** Имейте в виду, что подстановки значений в переменных окружения Windows выполняются только один раз, то есть, говоря проще, нельзя определить переменную, которая будет ссылаться на другую переменную, которая будет ссылаться на третью — подстановка этой третьей переменной выполнена не будет. + +**Напоследок — ещё один трюк для сильных духом.** + +Можно легко узнать что думает тикль по поводу вашего домашнего каталога (и при случае внушит это Ткабберу), выполнив заклинание **"file norm ~"** без кавычек в любой оболочке тикля, установленной в вашей системе. + +Очень вероятно, что у вас как минимум есть **wish.exe** или **wish84.exe**, так же, возможно, у вас есть **tclsh.exe**. Если же у вас есть **tkcon.tcl**, и вы об этом знали, то вам, скорее всего, не стоит тратить время на чтение этого руководства. Для нашей благородной цели сгодится любая из указанных программ. + +С другой стороны, если у вас Ткаббер в виде tclkit или starpack, то вам, скорее всего, не повезло (т.к. подобный дистрибутив это "вещь в себе"), но ниже приведено решение и для этого случая. Если же у вас Tkabber Pack, то вы — обладатель урезанного, но "нормального" дистрибутива Tcl/Tk, только находится он там, куда вы установили Tkabber Pack, и указанный **wish.exe** следует искать именно там. + +Итак, запускаем то, что вам удалось обнаружить из приведённого списка и вводим указанную команду. Примерный вид происходящего таков: % file norm ~ C:/Documents and Settings/Дормидонт Евлампиевич -Внимательные из вас заметят, что в этом выводе — "неправильные" слэши: прямые, -а не обратные, как принято в ОС от Microsoft. В этом нет ничего странного: -тикль, работая под Windows, оперирует именно "прямыми", "юниксовыми" слэшами, -так как Windows на самом деле прекрасно понимает эту нотацию, только умело -скрывает это от пользователей. - -**На заметку:** Не лишним также будет заметить, что Ткаббер имеет возможность -сам обеспечить вас [консолью для ввода команд Tcl](http://wiki.tcl.tk/672) (и -управления собой, в числе прочего; но эта тема -[**отдельной статьи**](Удалённое_управление_с_помощью_send.md)). В виндовой версии Ткаббера -консоль встроена, в \*nix у вас должен быть установлен пакет tkcon. Получить -оную можно, выбрав опцию "Показать консоль" пункта "Помощь" главного меню -Ткаббера. - -Это может оказаться полезным для пользователей "упакованных" версий Ткаббера. +Внимательные из вас заметят, что в этом выводе — "неправильные" слэши: прямые, а не обратные, как принято в ОС от Microsoft. В этом нет ничего странного: тикль, работая под Windows, оперирует именно "прямыми", "юниксовыми" слэшами, так как Windows на самом деле прекрасно понимает эту нотацию, только умело скрывает это от пользователей. + +**На заметку:** Не лишним также будет заметить, что Ткаббер имеет возможность сам обеспечить вас [консолью для ввода команд Tcl](http://wiki.tcl.tk/672) (и управления собой, в числе прочего; но эта тема [отдельной статьи](Удалённое_управление_с_помощью_send.md)). В виндовой версии Ткаббера консоль встроена, в \*nix у вас должен быть установлен пакет tkcon. Получить оную можно, выбрав опцию "Показать консоль" пункта "Помощь" главного меню Ткаббера. + +Это может оказаться полезным для пользователей "упакованных" версий Ткаббера. ## Файл **custom.tcl** — руками не трогать! -Файл **custom.tcl** это собственность Ткаббера. Ткаббер использует этот файл в -качестве постоянного хранилища своих настроек. Ткаббер читает **custom.tcl** -при старте и _перезаписывает_ его при выходе. - -Это означает, что хотя и ничего не мешает вам изменить этот файл при помощи -любимого текстового редактора (и Ткаббер при следующем старте примет к сведению -вашу правку), никто не может гарантировать постоянство сделанных вами -изменений. - -Кроме того, несмотря на то, что формат этого файла весьма прозрачен, нет -никаких гарантий того, что он не изменится в следующей версии Ткаббера. - -Посему тем, кто не собирается нарочно копаться во внутренностях Ткаббера, лучше -всего относиться к этому файлу как к "чёрному ящику" — в духе времени уважать -права Ткаббера на частную собственность. - -А ещё лучше — отнеситесь к нему как к трансформаторной будке. +Файл **custom.tcl** это собственность Ткаббера. Ткаббер использует этот файл в качестве постоянного хранилища своих настроек. Ткаббер читает **custom.tcl** при старте и _перезаписывает_ его при выходе. + +Это означает, что хотя и ничего не мешает вам изменить этот файл при помощи любимого текстового редактора (и Ткаббер при следующем старте примет к сведению вашу правку), никто не может гарантировать постоянство сделанных вами изменений. + +Кроме того, несмотря на то, что формат этого файла весьма прозрачен, нет никаких гарантий того, что он не изменится в следующей версии Ткаббера. + +Посему тем, кто не собирается нарочно копаться во внутренностях Ткаббера, лучше всего относиться к этому файлу как к "чёрному ящику" — в духе времени уважать права Ткаббера на частную собственность. + +А ещё лучше — отнеситесь к нему как к трансформаторной будке. ### Формат файла **custom.tcl** -Доскональное понимание формата файла **custom.tcl** требует определённых знаний -по языку Tcl, поскольку данные в нём хранятся в формате, который удобно читать -и писать интерпретатору тикля. - -С другой стороны, формат можно назвать "дружественным", так как в конце-концов -это обычный текст, только "хитро" отформатированный. - -Элементы Tcl, которые полезно знать для полного понимания предмета: - -* [Списки](http://wiki.tcl.tk/440) -* [Массивы](http://wiki.tcl.tk/1032) -* [Пространства имён](http://wiki.tcl.tk/1489) - -Итак, файл **custom.tcl:** - -* Использует кодировку [UTF-8](http://ru.wikipedia.org/wiki/UTF-8) -* Является набором строк, каждая из которых представляет собой _"правильно - сформированный список"_ с точки зрения языка Tcl. -* Каждый из этих списков состоит из двух элементов: - 1. _Полное_ имя переменной, представляющей одну из опций конфигурации Ткаббера. - 1. Значение этой переменной. - -Значение переменной само может быть списком, а элементы этого списка, в свою -очередь так же могут быть списками. Такая структура может иметь произвольную -вложенность. - -Вот, к примеру, кусочек (не)типичного файла **custom.tcl:** +Доскональное понимание формата файла **custom.tcl** требует определённых знаний по языку Tcl, поскольку данные в нём хранятся в формате, который удобно читать и писать интерпретатору тикля. + +С другой стороны, формат можно назвать "дружественным", так как в конце-концов это обычный текст, только "хитро" отформатированный. + +Элементы Tcl, которые полезно знать для полного понимания предмета: + +* [Списки](http://wiki.tcl.tk/440) +* [Массивы](http://wiki.tcl.tk/1032) +* [Пространства имён](http://wiki.tcl.tk/1489) + +Итак, файл **custom.tcl:** + +* Использует кодировку [UTF-8](http://ru.wikipedia.org/wiki/UTF-8) +* Является набором строк, каждая из которых представляет собой _"правильно сформированный список"_ с точки зрения языка Tcl. +* Каждый из этих списков состоит из двух элементов: + 1. _Полное_ имя переменной, представляющей одну из опций конфигурации Ткаббера. + 1. Значение этой переменной. + +Значение переменной само может быть списком, а элементы этого списка, в свою очередь так же могут быть списками. Такая структура может иметь произвольную вложенность. + +Вот, к примеру, кусочек (не)типичного файла **custom.tcl:** {::ifacetk::roster::options(nested) 1} {::::loginconf(httpproxy) gates.of.hell.microsoft.com} -Технически этот пример означает: - -1. Устанавливается истинным (1) значение переменной, заданной ключом "nested" - в массиве "options", входящим в пространство имён "::ifacetk::roster". -1. Переменная, заданная ключом "httpproxy" в глобальном массиве "::loginconf", - устанавливается в значение "gates.of.hell.microsoft.com". - -Как видно, имена переменных вполне самоописательны, и могут быть "прочитаны", -например: "включить поддержку вложенности для элементов у Tk-виджета, -ответственного за отображение списка контактов (ростера)". +Технически этот пример означает: + +1. Устанавливается истинным (1) значение переменной, заданной ключом "nested" в массиве "options", входящим в пространство имён "::ifacetk::roster". +1. Переменная, заданная ключом "httpproxy" в глобальном массиве "::loginconf", устанавливается в значение "gates.of.hell.microsoft.com". + +Как видно, имена переменных вполне самоописательны, и могут быть "прочитаны", например: "включить поддержку вложенности для элементов у Tk-виджета, ответственного за отображение списка контактов (ростера)". ## Файл **config.tcl** — швейцарский нож для Ткаббера -![(!)](../images/Hammer.png) **Сделать:** некоторое введение... - -Про этот файл рассказано [**тут**](Config.tcl.md). - -Также имеется [**список готовых "рецептов"**](Нетривиальные_настройки.md), поместив -которые в **config.tcl**, можно добиться интересного поведения от Ткаббера. -Изучение статьи про **config.tcl** не нужно для использования рецептов, однако -оно очень вам пригодится, если вы захотите реализовать какое-то сложное -изменение конфигурации своими руками. +![(!)](../images/Hammer.png) **Сделать:** некоторое введение... + +Про этот файл рассказано [тут](Config.tcl.md). + +Также имеется [список готовых "рецептов"](Нетривиальные_настройки.md), поместив которые в **config.tcl**, можно добиться интересного поведения от Ткаббера. Изучение статьи про **config.tcl** не нужно для использования рецептов, однако оно очень вам пригодится, если вы захотите реализовать какое-то сложное изменение конфигурации своими руками. ## XRDB! как много в этом слове... -Описание XRDB и его связи с "базой данных настроек Tk" вынесено в -[**отдельную статью**](XRDB.md). +Описание XRDB и его связи с "базой данных настроек Tk" вынесено в [отдельную статью](XRDB.md). + + Index: wiki/ru/Настройки.md ================================================================== --- wiki/ru/Настройки.md +++ wiki/ru/Настройки.md @@ -1,1505 +1,1000 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Настройки/index.html) + # Настройки Материал из Tkabber Wiki. -Попасть в окно настроек просто: меню **Tkabber → Настройки**. Откроется -вкладка, полная кнопок, каждая из которых ведёт в свой раздел и содержит -настройки определённых элементов интерфейса, логина, плагинов, звука и прочих -всякостей. В этой статье мы попробуем подробно рассказать о наиболее важных -настройках и упомянуть вскользь не очень важные. Но все настройки, имеющиеся в -Ткаббере на данный момент (версия 10.0.1-beta, а точнее, ревизия 1401 из svn), -попадут в эту статью с минимальным описанием хотя бы для того, чтобы проще было -искать нужную по ключевым словам. Стоит напомнить, что в окне настроек, как и -почти везде в Ткаббере, работает поиск: Ctrl-s. Но ищет он, к сожалению, лишь в -пределах открытого раздела. Полного поиска по всем настройкам нет (то есть, -если из главного окна вы будете искать какую-нибудь настройку логина, вы её не -найдёте). - -Ну что ж, перейдём непосредственно к настройкам, однако перед этим ознакомим -вас с одной тонкой, но важной вещью: - -Пробуя настройки в этом конфигураторе, мало пометить чекбокс, нужно ещё -_применить изменение,_ чтобы Ткаббер о нём узнал. Для этого нажмите на кнопку -Состояние, расположенную рядом с изменённой настройкой, и выберите нужный -вариант. Можно сохранить настройку только для текущей сессии (равносильно -включению настроек через пункты меню), а можно сохранить и для будущих, тогда -при следующем старте вам не придётся ничего настраивать заново. Кроме того, -можно восстановить значение по умолчанию, в случае, если вы напортачили во -время экспериментов. - -Продвинутым пользователям стоит заметить одну важную идею, лежащую в основе -механизма конфигурирования Ткаббера (и пока ещё нигде на этой вики более не -освещённую): любую настройку, которую вы видите в интерфейсе настроек, можно -установить программно из [**файла конфигурации**](Config.tcl.md); при этом длинные -непонятные "имена настроек" Ткаббера именно потому длинны и непонятны, что это -на самом деле — имена переменных, управляющих настройками, и эти имена можно -скопировать (физически, "натянув" на них выделение мышкой прямо в интерфейсе -настроек) и вставить в файл конфигурации, открытый в любимом текстовом -редакторе. - -Имейте также в виду, что любая группа настроек может иметь несколько -"родителей": например, группа настроек "Emoticons", посвящённая эмоциконкам -(смайлам), доступна как из группы "Chat", так и из группы "Plugins" → "Rich -Text". +Попасть в окно настроек просто: меню **Tkabber → Настройки**. Откроется вкладка, полная кнопок, каждая из которых ведёт в свой раздел и содержит настройки определённых элементов интерфейса, логина, плагинов, звука и прочих всякостей. В этой статье мы попробуем подробно рассказать о наиболее важных настройках и упомянуть вскользь не очень важные. Но все настройки, имеющиеся в Ткаббере на данный момент (версия 10.0.1-beta, а точнее, ревизия 1401 из svn), попадут в эту статью с минимальным описанием хотя бы для того, чтобы проще было искать нужную по ключевым словам. Стоит напомнить, что в окне настроек, как и почти везде в Ткаббере, работает поиск: Ctrl-s. Но ищет он, к сожалению, лишь в пределах открытого раздела. Полного поиска по всем настройкам нет (то есть, если из главного окна вы будете искать какую-нибудь настройку логина, вы её не найдёте). + +Ну что ж, перейдём непосредственно к настройкам, однако перед этим ознакомим вас с одной тонкой, но важной вещью: + +Пробуя настройки в этом конфигураторе, мало пометить чекбокс, нужно ещё _применить изменение,_ чтобы Ткаббер о нём узнал. Для этого нажмите на кнопку Состояние, расположенную рядом с изменённой настройкой, и выберите нужный вариант. Можно сохранить настройку только для текущей сессии (равносильно включению настроек через пункты меню), а можно сохранить и для будущих, тогда при следующем старте вам не придётся ничего настраивать заново. Кроме того, можно восстановить значение по умолчанию, в случае, если вы напортачили во время экспериментов. + +Продвинутым пользователям стоит заметить одну важную идею, лежащую в основе механизма конфигурирования Ткаббера (и пока ещё нигде на этой вики более не освещённую): любую настройку, которую вы видите в интерфейсе настроек, можно установить программно из [файла конфигурации](Config.tcl.md); при этом длинные непонятные "имена настроек" Ткаббера именно потому длинны и непонятны, что это на самом деле — имена переменных, управляющих настройками, и эти имена можно скопировать (физически, "натянув" на них выделение мышкой прямо в интерфейсе настроек) и вставить в файл конфигурации, открытый в любимом текстовом редакторе. + +Имейте также в виду, что любая группа настроек может иметь несколько "родителей": например, группа настроек "Emoticons", посвящённая эмоциконкам (смайлам), доступна как из группы "Chat", так и из группы "Plugins" → "Rich Text". ## Содержание * [1 AutoAway](#AutoAway) - * [1.1 ::plugins::autoaway::options(awaytime)](#pluginsautoawayoptionsawaytime) - * [1.2 ::plugins::autoaway::options(xatime)](#pluginsautoawayoptionsxatime) - * [1.3 ::plugins::autoaway::options(status)](#pluginsautoawayoptionsstatus) - * [1.4 ::plugins::autoaway::options(drop\_priority)](#pluginsautoawayoptionsdrop_priority) -* [2 Chat](#Chat) - * [2.1 ::chat::options(stop\_scroll)](#chatoptionsstop_scroll) - * [2.2 ::chat::options(smart\_scroll)](#chatoptionssmart_scroll) - * [2.3 ::chat::options(display\_status\_description)](#chatoptionsdisplay_status_description) - * [2.4 ::chat::options(default\_message\_type)](#chatoptionsdefault_message_type) - * [2.5 ::chat::options(gen\_status\_change\_msgs)](#chatoptionsgen_status_change_msgs) - * [2.6 ::plugins::completion::options(completion\_expire)](#pluginscompletionoptionscompletion_expire) - * [2.7 ::plugins::options(timestamp\_format)](#pluginsoptionstimestamp_format) - * [2.8 ::plugins::options(delayed\_timestamp\_format)](#pluginsoptionsdelayed_timestamp_format) - * [2.9 ::plugins::xhtml::options(enable)](#pluginsxhtmloptionsenable) - * [2.10 ::plugins::log\_on\_open::options(max\_messages)](#pluginslog_on_openoptionsmax_messages) - * [2.11 ::plugins::log\_on\_open::options(max\_interval)](#pluginslog_on_openoptionsmax_interval) - * [2.12 ::plugins::nickcolors::options(use\_colored\_nicks)](#pluginsnickcolorsoptionsuse_colored_nicks) - * [2.13 ::plugins::nickcolors::options(use\_colored\_roster\_nicks)](#pluginsnickcolorsoptionsuse_colored_roster_nicks) - * [2.14 ::plugins::nickcolors::options(use\_colored\_messages)](#pluginsnickcolorsoptionsuse_colored_messages) - * [2.15 ::muc::options(gen\_enter\_exit\_msgs)](#mucoptionsgen_enter_exit_msgs) - * [2.16 ::muc::options(gen\_muc\_status\_change\_msgs)](#mucoptionsgen_muc_status_change_msgs) - * [2.17 ::muc::options(gen\_muc\_position\_change\_msgs)](#mucoptionsgen_muc_position_change_msgs) - * [2.18 ::muc::options(propose\_configure)](#mucoptionspropose_configure) - * [2.19 ::muc::options(history\_maxchars)](#mucoptionshistory_maxchars) - * [2.20 ::muc::options(history\_maxstanzas)](#mucoptionshistory_maxstanzas) - * [2.21 ::muc::options(request\_only\_unseen\_history)](#mucoptionsrequest_only_unseen_history) - * [2.22 ::plugins::tclchat::options(use\_tkchat\_colors)](#pluginstclchatoptionsuse_tkchat_colors) - * [2.23 Chatstate](#Chatstate) - * [2.23.1 ::plugins::chatstate::options(enable)](#pluginschatstateoptionsenable) - * [2.24 Emoticons](#Emoticons) - * [2.24.1 ::plugins::emoticons::options(show\_emoticons)](#pluginsemoticonsoptionsshow_emoticons) - * [2.24.2 ::plugins::emoticons::options(theme)](#pluginsemoticonsoptionstheme) - * [2.24.3 ::plugins::emoticons::options(match\_whole\_word)](#pluginsemoticonsoptionsmatch_whole_word) - * [2.24.4 ::plugins::emoticons::options(handle\_lol)](#pluginsemoticonsoptionshandle_lol) - * [2.25 Events](#Events) - * [2.25.1 ::plugins::events::options(enable)](#pluginseventsoptionsenable) - * [2.26 Highlight](#Highlight) - * [2.26.1 ::plugins::highlight::options(enable\_highlighting)](#pluginshighlightoptionsenable_highlighting) - * [2.26.2 ::plugins::highlight::options(highlight\_nick)](#pluginshighlightoptionshighlight_nick) - * [2.26.3 ::plugins::highlight::options(highlight\_substrings)](#pluginshighlightoptionshighlight_substrings) - * [2.26.4 ::plugins::highlight::options(highlight\_whole\_words)](#pluginshighlightoptionshighlight_whole_words) - * [2.27 Logging](#Logging) - * [2.27.1 ::logger::options(logdir)](#loggeroptionslogdir) - * [2.27.2 ::logger::options(log\_chat)](#loggeroptionslog_chat) - * [2.27.3 ::logger::options(log\_groupchat)](#loggeroptionslog_groupchat) - * [2.28 MUC Ignoring](#MUC_Ignoring) - * [2.28.1 ::plugins::mucignore::options(transient\_rules)](#pluginsmucignoreoptionstransient_rules) - * [2.29 Stylecodes](#Stylecodes) - * [2.29.1 ::plugins::stylecodes::options(emphasize)](#pluginsstylecodesoptionsemphasize) - * [2.29.2 ::plugins::stylecodes::options(hide\_markup)](#pluginsstylecodesoptionshide_markup) - * [2.30 Vcard](#Vcard) -* [3 Conference Info](#Conference_Info) - * [3.1 ::plugins::conferenceinfo::options(autoask)](#pluginsconferenceinfooptionsautoask) - * [3.2 ::plugins::conferenceinfo::options(interval)](#pluginsconferenceinfooptionsinterval) - * [3.3 ::plugins::conferenceinfo::options(err\_interval)](#pluginsconferenceinfooptionserr_interval) -* [4 File Transfer](#File_Transfer) - * [4.1 ::ft::options(download\_dir)](#ftoptionsdownload_dir) - * [4.2 ::ft::options(default\_proto)](#ftoptionsdefault_proto) - * [4.3 HTTP](#HTTP) - * [4.3.1 ::plugins::http::options(port)](#pluginshttpoptionsport) - * [4.3.2 ::plugins::http::options(host)](#pluginshttpoptionshost) - * [4.4 Jidlink](#Jidlink) - * [4.4.1 ::jidlink::transport(allowed,dtcp-active)](#jidlinktransportalloweddtcp-active) - * [4.4.2 ::jidlink::transport(allowed,dtcp-passive)](#jidlinktransportalloweddtcp-passive) - * [4.4.3 ::jidlink::transport(allowed,inband-bytestream)](#jidlinktransportallowedinband-bytestream) - * [4.5 Stream Initiation](#Stream_Initiation) - * [4.5.1 ::si::socks5::initiator::options(enable\_mediated\_connection)](#sisocks5initiatoroptionsenable_mediated_connection) - * [4.5.2 ::si::socks5::initiator::options(proxy\_servers)](#sisocks5initiatoroptionsproxy_servers) - * [4.5.3 ::si::transport(allowed,http://jabber.org/protocol/bytestreams)](#sitransportallowedhttp__jabber.org_protocol_bytestreams) - * [4.5.4 ::si::transport(allowed,http://jabber.org/protocol/iqibb)](#sitransportallowedhttp__jabber.org_protocol_iqibb) - * [4.5.5 ::si::transport(allowed,http://jabber.org/protocol/ibb)](#sitransportallowedhttp__jabber.org_protocol_ibb) -* [5 GPGME](#GPGME) - * [5.1 ::ssj::options(one-passphrase)](#ssjoptionsone-passphrase) - * [5.2 ::ssj::options(sign-traffic)](#ssjoptionssign-traffic) - * [5.3 ::ssj::options(encrypt-traffic)](#ssjoptionsencrypt-traffic) - * [5.4 ::ssj::options(key)](#ssjoptionskey) - * [5.5 ::ssj::options(display\_sig\_warnings)](#ssjoptionsdisplay_sig_warnings) -* [6 Main Interface](#Main_Interface) - * [6.1 ::ifacetk::options(use\_tabbar)](#ifacetkoptionsuse_tabbar) - * [6.2 ::ifacetk::options(tabs\_side)](#ifacetkoptionstabs_side) - * [6.3 ::ifacetk::options(tab\_minwidth)](#ifacetkoptionstab_minwidth) - * [6.4 ::ifacetk::options(tab\_maxwidth)](#ifacetkoptionstab_maxwidth) - * [6.5 ::ifacetk::options(show\_toolbar)](#ifacetkoptionsshow_toolbar) - * [6.6 ::ifacetk::options(show\_presencebar)](#ifacetkoptionsshow_presencebar) - * [6.7 ::ifacetk::options(show\_statusbar)](#ifacetkoptionsshow_statusbar) - * [6.8 ::ifacetk::options(raise\_new\_tab)](#ifacetkoptionsraise_new_tab) - * [6.9 ::ifacetk::options(message\_numbers\_in\_tabs)](#ifacetkoptionsmessage_numbers_in_tabs) - * [6.10 ::ifacetk::options(update\_title\_delay)](#ifacetkoptionsupdate_title_delay) - * [6.11 ::ifacetk::options(show\_tearoffs)](#ifacetkoptionsshow_tearoffs) - * [6.12 ::ifacetk::options(closebuttonaction)](#ifacetkoptionsclosebuttonaction) - * [6.13 ::pixmaps::options(pixmaps\_theme)](#pixmapsoptionspixmaps_theme) - * [6.14 ::webbrowser](#webbrowser) - * [6.15 Systray](#Systray) - * [6.15.1 Общие настройки](#Общие_настройки) - * [6.15.2 Настройки расширений работы с треем](#Настройки_расширений_работы_с_треем) -* [7 IQ](#IQ) - * [7.1 ::iq::options(show\_iq\_requests)](#iqoptionsshow_iq_requests) - * [7.2 ::iq::options(shorten\_iq\_namespaces)](#iqoptionsshorten_iq_namespaces) - * [7.3 ::plugins::options(reply\_iq\_last)](#pluginsoptionsreply_iq_last) - * [7.4 ::plugins::ping::options(ping)](#pluginspingoptionsping) - * [7.5 ::plugins::ping::options(timeout)](#pluginspingoptionstimeout) - * [7.6 ::plugins::ping::options(pong)](#pluginspingoptionspong) - * [7.7 ::plugins::options(reply\_iq\_time)](#pluginsoptionsreply_iq_time) - * [7.8 ::plugins::options(reply\_xmpp\_time)](#pluginsoptionsreply_xmpp_time) - * [7.9 ::plugins::options(reply\_iq\_version)](#pluginsoptionsreply_iq_version) - * [7.10 ::plugins::options(reply\_iq\_os\_version)](#pluginsoptionsreply_iq_os_version) - * [7.11 ::muc::options(report\_muc\_rooms)](#mucoptionsreport_muc_rooms) -* [8 Login](#Login) - * [8.1 ::::loginconf(user)](#loginconfuser) - * [8.2 ::::loginconf(server)](#loginconfserver) - * [8.3 ::::loginconf(password)](#loginconfpassword) - * [8.4 ::::loginconf(resource)](#loginconfresource) - * [8.5 ::::loginconf(priority)](#loginconfpriority) - * [8.6 ::::loginconf(connect\_forever)](#loginconfconnect_forever) - * [8.7 ::::loginconf(allowauthplain)](#loginconfallowauthplain) - * [8.8 ::::loginconf(allowgoogletoken)](#loginconfallowgoogletoken) - * [8.9 ::::loginconf(usesasl)](#loginconfusesasl) - * [8.10 ::::loginconf(stream\_options)](#loginconfstream_options) - * [8.11 ::::loginconf(sslcertfile)](#loginconfsslcertfile) - * [8.12 ::::loginconf(sslcacertstore)](#loginconfsslcacertstore) - * [8.13 ::::loginconf(sslkeyfile)](#loginconfsslkeyfile) - * [8.14 ::::loginconf(proxy)](#loginconfproxy) - * [8.15 ::::loginconf(proxyhost)](#loginconfproxyhost) - * [8.16 ::::loginconf(proxyport)](#loginconfproxyport) - * [8.17 ::::loginconf(proxyusername)](#loginconfproxyusername) - * [8.18 ::::loginconf(proxypassword)](#loginconfproxypassword) - * [8.19 ::::loginconf(proxyuseragent)](#loginconfproxyuseragent) - * [8.20 ::::loginconf(usealtserver)](#loginconfusealtserver) - * [8.21 ::::loginconf(altserver)](#loginconfaltserver) - * [8.22 ::::loginconf(altport)](#loginconfaltport) - * [8.23 ::::loginconf(replace\_opened)](#loginconfreplace_opened) - * [8.24 ::::loginconf(usehttppoll)](#loginconfusehttppoll) - * [8.25 ::::loginconf(pollurl)](#loginconfpollurl) - * [8.26 ::::loginconf(usepollkeys)](#loginconfusepollkeys) - * [8.27 ::::loginconf(numberofpollkeys)](#loginconfnumberofpollkeys) - * [8.28 ::::loginconf(polltimeout)](#loginconfpolltimeout) - * [8.29 ::::loginconf(pollmin)](#loginconfpollmin) - * [8.30 ::::loginconf(pollmax)](#loginconfpollmax) -* [9 Messages](#Messages) - * [9.1 ::plugins::headlines::options(cache)](#pluginsheadlinesoptionscache) - * [9.2 ::plugins::headlines::options(multiple)](#pluginsheadlinesoptionsmultiple) - * [9.3 ::plugins::headlines::options(display\_subject\_only)](#pluginsheadlinesoptionsdisplay_subject_only) - * [9.4 ::plugins::headlines::options(timestamp\_format)](#pluginsheadlinesoptionstimestamp_format) - * [9.5 ::plugins::headlines::options(show\_balloons)](#pluginsheadlinesoptionsshow_balloons) - * [9.6 ::plugins::offline::options(flexible\_retrieval)](#pluginsofflineoptionsflexible_retrieval) -* [10 Plugins](#Plugins) -* [11 Privacy](#Privacy) - * [11.1 ::filters::options(enable)](#filtersoptionsenable) - * [11.2 ::privacy::options(activate\_at\_startup)](#privacyoptionsactivate_at_startup) - * [11.3 MUC Ignoring](#MUC_Ignoring) - * [11.3.1 ::plugins::mucignore::options(transient\_rules)](#pluginsmucignoreoptionstransient_rules) -* [12 Remote Control](#Remote_Control) - * [12.1 ::remote::options(enable)](#remoteoptionsenable) - * [12.2 ::remote::options(accept\_from\_myjid)](#remoteoptionsaccept_from_myjid) - * [12.3 ::remote::options(accept\_list)](#remoteoptionsaccept_list) -* [13 Roster](#Roster) - * [13.1 ::ifacetk::roster::use\_aliases](#ifacetkrosteruse_aliases) - * [13.2 ::ifacetk::roster::show\_only\_online](#ifacetkrostershow_only_online) - * [13.3 ::ifacetk::roster::show\_transport\_icons](#ifacetkrostershow_transport_icons) - * [13.4 ::ifacetk::roster::show\_transport\_user\_icons](#ifacetkrostershow_transport_user_icons) - * [13.5 ::ifacetk::roster::options(nested)](#ifacetkrosteroptionsnested) - * [13.6 ::ifacetk::roster::options(nested\_delimiter)](#ifacetkrosteroptionsnested_delimiter) - * [13.7 ::ifacetk::roster::options(show\_own\_resources)](#ifacetkrosteroptionsshow_own_resources) - * [13.8 ::ifacetk::roster::options(chats\_group)](#ifacetkrosteroptionschats_group) - * [13.9 ::ifacetk::roster::options(use\_filter)](#ifacetkrosteroptionsuse_filter) - * [13.10 ::ifacetk::roster::options(match\_jids)](#ifacetkrosteroptionsmatch_jids) - * [13.11 ::ifacetk::roster::options(free\_drop)](#ifacetkrosteroptionsfree_drop) - * [13.12 ::ifacetk::roster::options(show\_subscription)](#ifacetkrosteroptionsshow_subscription) - * [13.13 ::ifacetk::roster::options(show\_conference\_user\_info)](#ifacetkrosteroptionsshow_conference_user_info) -* [14 Sound](#Sound) -* [15 State](#State) -* [16 Warnings](#Warnings) - * [16.1 ::tls\_warnings](#tls_warnings) - -## AutoAway -Параметры модуля, автоматически устанавливающего состояние "Отошёл" после -установленного периода бездействия. Для того, чтобы у вас автоэвей работал, -необходимо установить [дополнительный пакет](http://tkabber.jabber.ru/dependencies) (кстати говоря, без него и пункт -настроек этот не появится). Об установке пакета в Виндовс можно почитать -[**здесь**](Tkabber_Windows_Mini_HOWTO.md#WinIdle). И вот до кучи -[**дополнительное чтиво**](Ткаббер_ЧаВо/Глюки.md#Ткаббер_постоянно_держит_меня_в_состоянии_отошёл_away) -о возможных проблемах с AutoAway. - -Имейте в виду, что автоэвей в Ткаббере следит за неактивностью прользователя в -масштабах системы, а не самого Ткаббера, поэтому если излишек нервных клеток -заставил вас запустить Doom 3, перед этим выставьте руками статус "Отошёл" или -"Отошёл давно" иначе для остальных вы продолжите оставаться доступным даже -будучи на [Фобосе](http://en.wikipedia.org/wiki/Doom_(video_game)). -(Справляться со статусами доступности может помочь -[**этот плагин**](Плагины.md#Customstatus).) - -### ::plugins::autoaway::options(awaytime) - -Время, через которое Ткаббер перейдёт в состояние "Отошёл", если не нажимать -никаких кнопок и не двигать мышью. Значение по умолчанию: 5 минут. - -### ::plugins::autoaway::options(xatime) - -То же самое, но для состояния "Отошёл давно". По умолчанию стоит 15 минут. - -### ::plugins::autoaway::options(status) - -В этом поле можно дать описание статуса, то есть, причину, по которой Ткаббер -перешёл в состояние Away. По умолчанию там написано "Автоматически в состоянии -'отошёл' по бездействию", однако вы можете написать что-нибудь своё, не -забывая, впрочем, отразить факт **автоматической** смены статуса. - -### ::plugins::autoaway::options(drop\_priority) - -По умолчанию галочка отмечена, и действие её — сбрасывать приоритет в 0 при -достижении состояния "Отошёл давно". Что такое приоритет, -[**читайте отдельно**](Ткаббер_ЧаВо/Разное.md#Приоритет). - -## Chat -Параметры разговора. - -### ::chat::options(stop\_scroll) - -Эта опция в настройках идёт второй, но здесь мы опишем её раньше, чтобы вам -было понятней, что к чему. По умолчанию она выключена, и это правильно: если её -включить, то при получении новых сообщений в чат окошко скроллиться не будет, и -вам придётся прокручивать его вручную (с помощью полосы прокрутки или колесом -мыши), чтобы следить за разговором. - -### ::chat::options(smart\_scroll) - -Если автопрокрутка у нас включена, имеет смысл улучшить её поведение. Умная -прокрутка следит, где вы в данный момент читаете сообщения разговора: если вы -выдите самое последнее сообщение, то приход нового сообщения сдвинет уже -имеющиеся в окне вверх (сработает прокрутка) и вы увидите это новое сообщение, -если же вы читаете ход дискуссии где-то в её середине и не видите последнего -сообщения, то поступление нового ничего прокручивать не будет, не отрывая вас -от созерцания интересной вам части излитого потока сознания. - -### ::chat::options(display\_status\_description) - -Если эта опция включена, то при открытии окна разговора (с человеком из ростера -или приват в конференции) в верхней части, над окном слева рядом с иконкой, -показывающей состояние собеседника ("Отошёл", "Доступен" и т. д.), пишется и -детальное описание этого состояния, то есть сами слова "Отошёл", "Доступен" и -прочие. Кстати, если навести мышь на иконку или на эту надпись, то в тултипе -можно прочитать описание, которое пользователь ввёл либо в настройках автоэвея, -либо в поле описания рядом с кнопкой принудительной смены состояния в нижней -части ростера. - -### ::chat::options(default\_message\_type) - -По умолчанию стоит "Разговор". Это означает, что при двойном клике на контакте -из ростера у вас запустится окно разговора в виде нового таба (или же нового -окна разговора, если у вас отключён режим с табами). Если же включить опцию -"Обычное", то при двойном клике запускается окно отправки сообщения, которое -пропадёт после его отправки. Окно разговора при отправке сообщения не -закрывается. - -### ::chat::options(gen\_status\_change\_msgs) - -Значение по умолчанию — включено, что означает "Генерировать сообщения о том, -что собеседник сменил своё присутствие или статусное сообщение". Сообщения о -смене статуса появляются в самом окне или табе разговора (не путайте с окном -конференции): "[Чтв. Апрель 17 22:19]--- bigote свободен для разговора -(Свободен для разговора)". Эта опция может быть полезной для мягкого шпионажа -за вашими собеседниками. - -### ::plugins::completion::options(completion\_expire) - -Число сообщений, необходимое для того, чтобы отключить автодополнение -псевдонима автора последнего сообщения, адресованного персонально. По умолчанию -стоит 10. Сейчас расшифруем, что это означает. В Ткаббере можно слать -персональные сообщения в общем чате. Для этого надо либо ткнуть в ник человека -мышью, либо набрать первые символы его ника и нажать табуляцию. При этом в окне -ввода сообщения появится его ник, отделённый от последующего текста двоеточием -и пробелом. Теперь пишите свой текст, жмите ввод, и этот человек увидит свой -ник в этом сообщении подсвеченным и, если включен звук и настроено уведомление -о персональных сообщениях, то услышит, что кто-то персонально к нему обратился. -Этот человек теперь может легко ответить так же персонально и вам, просто нажав -табуляцию: при этом ваш ник окажется в его окошке ввода текста, и история -повторится. Так вот. Если он сразу не воспользуется этой возможностью, то после -прихода в чат 10 сообщений и больше нажатие табуляции выведет уже первую -доступную по алфавиту команду Ткаббера или социал. - -### ::plugins::options(timestamp\_format) - -Формат вывода даты/времени в сообщениях. (Подробнее описание формата можно -узнать из документации к команде Tcl 'clock'.) Значение по умолчанию — [%R], -что означает лишь часы и минуты. Это мало. В конференциях можно сидеть днями, и -тогда бывает необходимо знать, какого числа (а то и месяца) была сказана та или -иная фраза. Если не хотите читать документацию к команде 'clock', можете -воспользоваться либо примерами, приведёнными рядом с опцией, либо моим выбором: -[%a %b %d %H:%M]. - -### ::plugins::options(delayed\_timestamp\_format) - -Формат "отложенных" сообщений, то есть отправленных более суток назад. Это те -сообщения, которые ваши приятели шлют вам, когда вы долго не появляетесь в -онлайне, и они начинают волноваться, жмакать кнопку "Показать пользователей в -оффлайне" и интересоваться причинами вашего отсутствия. Значение по умолчанию — -[%m/%d %R]. Обычно его хватает. - -### ::plugins::xhtml::options(enable) - -Отображать сообщения, форматированные с помощью XHTML, то есть такие, при -составлении которых использовались выделения кусков текста цветами, шрифтами и -размерами символов (что поддерживается некоторыми клиентами). По умолчанию -отключено, потому что эта опция нужна очень редко, и только тем очень смелым -людям, кто знает или хочет узнать, что такое XHTML, отрендеренный Ткаббером. -Для повседневной работы она не нужна, поскольку XHTML сообщение всегда содержит -"неисковерканую" копию себя, содержащую просто текст сообщения, который и -покажет Ткаббер, если опция отключена. - -### ::plugins::log\_on\_open::options(max\_messages) - -Максимальное число запротоколированных сообщений, которое надо показывать во -вновь открываемом окне разговора (если положить отрицательным, то -неограниченное). По умолчанию стоит 20. Когда мы открываем окно разговора с -каким-либо из своих контактов, в окне появляется кусок предыдущей с ним беседы, -что весьма полезно, если эта предыдущая беседа состоялась месяц назад, и с того -момента собеседник вдруг ответил на вашу последнюю реплику. Если вы не помните, -о чём был разговор, трудно бывает врубиться, с какого перепугу он вам пишет эту -муть. - -### ::plugins::log\_on\_open::options(max\_interval) - -Максимальный интервал (в часах) для которого запротоколированные сообщения надо -показывать во вновь открываемом окне разговора (если положить отрицательным, то -неограниченный интервал). По умолчанию стоит 24 часа, что для описанного выше -случая с разрывом в один месяц явно не подходит. Надо поставить отрицательное -значение. - -### ::plugins::nickcolors::options(use\_colored\_nicks) - -Использовать цветные псевдонимы в окнах разговоров/конференций. - -### ::plugins::nickcolors::options(use\_colored\_roster\_nicks) - -Использовать цветные псевдонимы в списках участников конференций. - -### ::plugins::nickcolors::options(use\_colored\_messages) - -Использовать цветные сообщения в окнах разговора. Эта и предыдущие две опции -отвечает за раскрашивание ников собеседников и их сообщений. Эти опции из -разряда тех, которые проще попробовать, чем читать о них или рассказывать. Так -что оставляем вас наедине с ними ;) И вот до кучи -[**информация о возможных проблемах**](Ткаббер_ЧаВо/Внешний_вид_и_звук.md#Цвета_сообщений_асечников), -связанных с цветами. - -### ::muc::options(gen\_enter\_exit\_msgs) - -Генерировать статусные сообщения о входе/выходе участников в MUC-конференциях. -Выше описывалась опция генерации сообщений о смене статуса собеседника. Она -похожа на эту, только здесь генерируются сообщения вида "bigote вышел(а) из -комнаты: Disconnected", которые показываются в общем чате (другие названия: -конференция, MUC). По умолчанию стоит, и правильно делает, что стоит. Так мы -знаем, кто и во сколько заходил в конфу и покидал её. - -### ::muc::options(gen\_muc\_status\_change\_msgs) - -А это — близнец описанной гораздо выше и упомянутой чуть выше опции про -генерацию смены статусов. На этот раз — в MUC (Multi-User Conference). - -### ::muc::options(gen\_muc\_position\_change\_msgs) - -Генерировать сообщения о том, что положение, занимаемое участником конференции -(его ранг и/или роль), изменились. Ещё одна шпионская опция. Эта и предыдущая -опции по умолчанию выключены, потому что надоедают больше, чем приносят пользы. - -### ::muc::options(propose\_configure) - -Предлагать конфигурировать вновь созданную конференцию. Если установить в -false, то автоматически принимается конфигурация по умолчанию. Как ясно из -описания опции, она про конфигурацию созданных вами конференций. Поскольку по -умолчанию она выключена, не забывайте при создании новой комнаты зайти в её -меню (кнопка "Тема" в верхней части окна, которая выглядит совсем не кнопкой) и -настроить её (**MUC → Конфигурировать комнату**). - -### ::muc::options(history\_maxchars) - -Максимальное число символов в запрашиваемой истории конференции, совместимой с -MUC. По умолчанию 10000. Это напоминает описанную выше опцию про вывод старых -разговоров в свежеоткрытом окне. Отличие состоит в том, что тут история -выводится даже в том случае, если вы зашли в комнату впервые в жизни. Это -делается для того, чтобы вы были в курсе, о чём идёт беседа. Если история вам -мешает, вы её можете либо ограничить, либо отключить, вписав 0. - -Важно понимать, что эта и следующие две опции управляют получением истории _с -сервера,_ в то время как опции группы `::plugins::log_on_open::options` ведают -выемкой сообщений из локальной истории разговоров, которую ведёт Ткаббер. - -### ::muc::options(history\_maxstanzas) - -То же самое, что и предыдущая опция, но уже не про количество символов, а про -количество строк в истории. Если быть точным, то речь идёт не о строках как -таковых, а о [**"станцах"**](Терминология.md#Станца_stanza), то есть отправленных в -конференцию сообщениях. Так, одно сообщение может содержать несколько строк, но -считаться будет всего одна станца. По умолчанию (и кажется, по максимуму тоже) -20. - -### ::muc::options(request\_only\_unseen\_history) - -Запрашивать только те сообщения из истории, которые не показаны в уже открытом -окне (для конференции, совместимой с MUC). Это на случай кратковременного -дисконнекта. Допустим, вы брыкнули ногой и выдернули сетевой кабель, однако -вовремя спохватились и быстро воткнули его обратно. Однако часть разговора -прошла без вас. Спасибо предыдущим двум опциям, она не потерялась, и сервер -заботливо её вам вывел. Но тут вот и фишка данной опции: если история -"перехлёстывается" с содержимым открытого окна чата, то вам в окно выведутся -только те фразы, которые прозвучали, когда вас реально не было, а не все 20 -строчек и 10000 символов, прибитые гвоздями предыдущими опциями. - -### ::plugins::tclchat::options(use\_tkchat\_colors) - -Использовать встроенные цвета TkChat. Это не вам, дорогие начинающие -пользователи. Это вот [им](http://wiki.tcl.tk/tkchat). - ---- - -Далее идут кнопки некоторых как встроенных, так и внешних плагинов, расширяющих -функциональность Ткаббера. Кнопки внешних плагинов на самом деле расположены в -своём месте (см. раздел Plugins данной статьи), но для удобства конфигурации -настройки плагинов, относящихся к чату, выведены и сюда. Ниже я постараюсь -вспомнить, какие из тех кнопок, которые я вижу у себя, относятся к встроенным -плагинам. - -### Chatstate - -Настройки расширения, отвечающего за уведомление о состоянии окна разговора. - -#### ::plugins::chatstate::options(enable) - -Включить рассылку уведомлений о состоянии окна разговора -([XEP-0085](http://www.xmpp.org/extensions/xep-0085.html)). Если вы включите -эту опцию, то будете получать уведомления типа "собеседник пишет письмо -турецкому султану" в верхней части окна. Таким образом вы знаете, что он не -балду гоняет, не игнорит вас, а честно пишет ответ. Полезная опция. - -В настоящее время Ткаббер способен посылать только два состояния: `` и -`` (на что уже пожаловались -[тут](http://www.jabber.ru/bugzilla/show_bug.cgi?id=360)), однако понимает он -все состояния. - -Имейте в виду, что в Ткаббере есть -[**аналогичная настройка**](#Events), управляющая _другим механизмом_ реализации той -же самой, в принципе, функциональности, но на основе устаревшего в настоящее -время [расширения XMPP](http://www.xmpp.org/extensions/xep-0022.html). - -### Emoticons - -Обработка эмоциконок. Эмоциконки (или улыбки) это небольшие картинки, похожие -на человеческое лицо, используемые для отображения эмоций. Могут быть введены -мнемонически, например как :), или вставлены через меню. - -#### ::plugins::emoticons::options(show\_emoticons) - -Показывать эмоциконки в виде картинок. - -#### ::plugins::emoticons::options(theme) - -Если в каталоге для эмоциконок у вас есть несколько установленных наборов -(подробнее читать тут), то в настройках появляется возможность выбрать один из -этих наборов либо отключить показ картиночных смайликов. - -#### ::plugins::emoticons::options(match\_whole\_word) - -Только целые слова превращать в эмоциконки (не части слов). Этот параметр -установлен по умолчанию, а отвечает он за то, чтобы в картинку преобразовывался -лишь полноценный смайлик, не прижатый к впереди идущему слову. - -#### ::plugins::emoticons::options(handle\_lol) - -Отдельные очень улыбчивые личности любят писать в чатах смайлики с двойными, а -то и тройными подбородками — :)))))) Эта опция приводит такие улыбки к -нормальному виду и потом преобразует в нормальный графический смайл. - -### Events - -Настройки расширения, отвечающего за уведомление об обработке сообщений в окне -разговора. - -#### ::plugins::events::options(enable) - -Реализация устаревшего в настоящее время -[XEP-0022](http://www.xmpp.org/extensions/xep-0022.html), которое было замещено -другим механизмом, который управляется [**соответствующей группой настроек**](#Chatstate). - -Эту опцию имеет смысл держать включённой только если вы общаетесь с владельцами -дремучих клиентов. - -![(!)](../images/Hammer.png) **Сделать:** хорошо бы выяснить что гейтуют и что -не гейтуют из этого распространённые ICQ-гейты - -По умолчанию включена. - -### Highlight - -Настройки модуля выделения слов в сообщениях конференций. - -#### ::plugins::highlight::options(enable\_highlighting) - -Включить модуль выделения слов. По умолчанию включён. - -#### ::plugins::highlight::options(highlight\_nick) - -Выделять текущий псевдоним в сообщениях. Выше я рассказал про автодополнение -ников, опция ::plugins::completion::options(completion\_expire). Там приводил -пример о подсвечивании собственного ника, если кто-то его в чате пишет -(например, обращаясь ко мне). Вот здесь оно и настраивается, то бишь, это -подсвечивание можно и выключить. - -#### ::plugins::highlight::options(highlight\_substrings) - -Подстроки, которые следует выделять в сообщениях. Ещё один полушпионский -модуль, позволяет подсвечивать ключевые слова, указанные в поле. Разделителем -является пробел, регистр надо учитывать. Введём для примера три слова, -разделённых пробелами: **вот такой тест**. Теперь любое из этих слов, -появившись в окне чата, будет подсвечено. Если попытаться подсвечивать не -отдельные слова, а подстроку, содержащую пробелы (несколько слов), то возникают -проблемы. Допустим, мы пытаемся указать Ткабберу, что подстрока ограничена -кавычками (как для точного поиска в Гугле): **"вот такой тест"**. Теперь пишем -в чате одно из этих слов — не подсвечивает. Пишем строку целиком, но без -кавычек: **вот такой тест** — не подсвечивает. Пишем строку с кавычками: **"вот -такой тест"** — подсвечивает. - -#### ::plugins::highlight::options(highlight\_whole\_words) - -Выделять только целые слова. Если выключить эту опцию (а по умолчанию она -включена), то подсвечиваться будут как целые слова, так и части слов, -подпадающие под заданные вами паттерны. Например, продолжая начатый выше -пример, напишем в чате слово "живот", имея в качестве ключевых слов **вот такой -тест**. При включённой опции ничего не выделится, но если её отключить, то -получим "жи**вот**" (кавычки здесь написаны лишь для отделения слова-примера от -повествования). - -### Logging - -Параметры протоколирования. - -#### ::logger::options(logdir) - -Директория, в которой сохраняются протоколы. Надо указать что-нибудь -осмысленное. - -#### ::logger::options(log\_chat) - -Сохранять протоколы персональных разговоров. По умолчанию включено. - -#### ::logger::options(log\_groupchat) - -Сохранять протоколы конференций. По умолчанию включено. - -### MUC Ignoring - -Игнорирование групповых и приватных сообщений от выбранных посетителей -многопользовательской конференции. - -#### ::plugins::mucignore::options(transient\_rules) - -Если параметр установлен, то все изменения правил игнорирования будут -действовать только до того, как Ткаббер закроется, и не будут восстановлены при -следующем запуске. По умолчанию выключено, то есть, правила сохраняются. -[**Читать подробнее об игнорировании в конференциях**](MUC_Ignore.md). - -### Stylecodes - -Обработка стилевых кодов. Стилевые коды — это специальные символы для выделения -частей текста полужирным, курсивным или подчеркнутым начертанием и их -комбинациями. - -#### ::plugins::stylecodes::options(emphasize) - -Выделять сообщения со стилевыми кодами, используя разные шрифты. Про это вы -уже, надеюсь, [**прочитали**](Начинающим.md#Некоторые_полезные_команды). - -#### ::plugins::stylecodes::options(hide\_markup) - -Скрывать символы, задающие разметку стилевых кодов. Выделяет точно так же, как -и в предыдущей опции, но при этом ещё и показывает сами управляющие коды, то -есть, мы так и видим: __\*жирный текст\*__. - -Эту опцию полезно включить тем, кому нравится использовать/видеть выделение -стайлкодами, но кто так же достаточно часто пишет/видит текст, который вызывает -"ложные срабатывания" движка, ответственного за "отлов" символов разметки, -определяющих выделения. Например, наиболее известная проблема движка стайлкодов -— срабатывание на именах каталогов Unix: `/usr/share/` отображается как -`/usr`*share*; если же данная опция включена, вы будете видеть `/usr`*`/share/`*. - -С другой стороны, имейте в виду, что скрытые символы разметки стайлкодов не -влияют на текст, который помещается в буфер обмена при копировании: если вы -выделите описанный выше текст `/usr`*share* и затем вставите его куда-нибудь, -то вставлен будет текст `/usr/share/`, а не `/usrshare`. - -### Vcard - -Параметры отображения полей vCard в окне разговора. Зайдя внутрь, вы выпадете в -осадок. Там находится здоровенный список опций, позволяющих настроить внешний -вид, а точнее, показ нужных вам полей vCard. Если вы хотите быть готовыми к -любой, даже самой полной карточке, надо включить все поля. Если вы точно -уверены, что никто из ваших собеседников не будет пользоваться телефоном ISDN, -то можно соответствующее поле отключить. - -## Conference Info -Параметры модуля информации о конференциях, позволяющего видеть список -участников конференции, закладка на которую находится в вашем списке контактов, -во всплывающем окне, независимо от того, подключены Вы к конференции или нет. - -### ::plugins::conferenceinfo::options(autoask) - -Подключить данный модуль. По умолчанию он отключён. Надеюсь, понятно, зачем он -нужен (см. чуть выше). Осторожнее с этой фичей: она гонит неслабый трафик. - -### ::plugins::conferenceinfo::options(interval) - -Интервал (в минутах) между запросами списка участников. Если вы мигрировали на -новую версию Ткаббера с какой-нибудь старой, и у вас остались старые настройки -в конфиге, проверьте интервал обновления. Старые настройки были в секундах, и -если нынешний Ткаббер начнёт запрашивать списки с интервалом в 300 минут, -пользы от такой опции мало :) - -### ::plugins::conferenceinfo::options(err\_interval) - -Интервал (в минутах) после ошибки в ответ на запрос списка участников. В старых -настройках по умолчанию стояло 3600 (секунд), так что если вы переехали со -старой версии Ткаббера, напишите в этом поле 60. - -## File Transfer -Параметры передачи файлов. Тема эта интересная, но сложноватая для новичка. -Подробнее о пересылке файлов можно почитать в -[**этой статье**](Пересылка_файлов__теория.md). - -### ::ft::options(download\_dir) - -Директория в которой по умолчанию сохраняются полученные файлы. - -Отнеситесь к ней с исключительным вниманием, так как в настоящее время Ткаббер -не умеет спрашивать куда сохранить файл, который вы собираетесь принять, и нет -никакого способа повлиять на это, кроме данной опции. - -### ::ft::options(default\_proto) - -Протокол передачи файлов по умолчанию. Здесь уже установлен Stream Initiation, -и он обычно подходит для большинства соединений. Если у вас проблемы при -передаче файлов, чтения вышеупомянутой статьи не избежать. - ---- - -Ниже идут кнопки, ведущие к настройкам конкретных протоколов. Настройки по -умолчанию обычно работают. Детально о всех параметрах рассказано в статье, так -что здесь мы ограничимся описаниями опций, взятыми из самих настроек. - -### HTTP - -Параметры HTTP-транспорта. - -#### ::plugins::http::options(port) - -Порт для исходящей передачи файлов по HTTP (если равен 0, то выбирается -автоматически). Применяется, когда файл посылается через NAT через -пробрасываемый порт. По умолчанию стоит 0. - -#### ::plugins::http::options(host) - -Объявлять указанное имя (или IP-адрес) для исходящей передачи файлов по HTTP. - -### Jidlink - -Настройки Jidlink. Jidlink — устаревший протокол, по-видимому, кроме Ткаббера -нигде и не реализованный, но тем не менее может использоваться на связке -Ткаббер-Ткаббер, если остальные варианты не работают. - -#### ::jidlink::transport(allowed,dtcp-active) - -Разрешить использование Jidlink-транспорта dtcp-active. По умолчанию включён. - -#### ::jidlink::transport(allowed,dtcp-passive) - -Разрешить использование Jidlink-транспорта dtcp-passive. По умолчанию выключён. - -#### ::jidlink::transport(allowed,inband-bytestream) - -Разрешить использование Jidlink-транспорта inband-bytestream. По умолчанию -включён. - -### Stream Initiation - -Параметры SI-транспорта. - -#### ::si::socks5::initiator::options(enable\_mediated\_connection) - -Использовать соединение SOCKS5 через посредника, если он доступен. Включён. - -#### ::si::socks5::initiator::options(proxy\_servers) - -Список прокси-серверов для передачи потока SOCKS5 (попытка использовать в -качестве посредника будет предпринята для всех доступных серверов). Тут уже -прописаны некоторые сервера. Если что-то идёт не так, можете попробовать -указать свои. - -#### ::si::transport(allowed,[http://jabber.org/protocol/bytestreams](http://jabber.org/protocol/bytestreams)) - -Разрешить использование SI-транспорта -[http://jabber.org/protocol/bytestreams](http://jabber.org/protocol/bytestreams). -Включён. - -#### ::si::transport(allowed,[http://jabber.org/protocol/iqibb](http://jabber.org/protocol/iqibb)) - -Разрешить использование SI-транспорта -[http://jabber.org/protocol/iqibb](http://jabber.org/protocol/iqibb). Тоже -включён. - -#### ::si::transport(allowed,[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb)) - -Разрешить использование SI-транспорта -[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb). Тоже включён. - -## GPGME -Параметры GPGME (цифровая подпись и шифрование). Для того, чтобы шифрование в -Ткаббере заработало и этот пункт настроек появился у вас, необходимо -[установить необходимые пакеты](http://tkabber.jabber.ru/gpg). Учтите, что -шифрование в Ткаббере возможно только в Linux. -[**Читайте дополнительно по теме**](Ткаббер_ЧаВо/Глюки.md#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme). - -### ::ssj::options(one-passphrase) - -Использовать одну и ту же парольную фразу для подписи и шифрования сообщений. - -### ::ssj::options(sign-traffic) - -Подписывать исходящие сообщения и обновления присутствия с помощью -[GPG](http://www.gnupg.org). - -### ::ssj::options(encrypt-traffic) - -Шифровать исходящие сообщения с помощью GPG, если возможно. - -### ::ssj::options(key) - -Использовать ключ с указанным идентификатором для подписи и дешифровки -сообщений. Если у вас больше одного ключа, вы можете указать ID того, который -хотите использовать по умолчанию. - -### ::ssj::options(display\_sig\_warnings) - -Показывать предупреждения в случае неудачи при проверке подписи. - -## Main Interface -Параметры основного интерфейса. - -### ::ifacetk::options(use\_tabbar) - -Использовать интерфейс с вкладками ("табами"). По умолчанию включён. После -применения требуется рестарт. - -### ::ifacetk::options(tabs\_side) - -Сторона, с которой следует размещать заголовки вкладок в режиме с вкладками. По -умолчанию стоит "Сверху". Остальные возможные варианты — "Снизу", "Слева", -"Справа". - -### ::ifacetk::options(tab\_minwidth) - -Минимальная ширина кнопок заголовков вкладок в режиме со вкладками. По -умолчанию стоит 90 пикселей. - -### ::ifacetk::options(tab\_maxwidth) - -Максимальная ширина кнопок заголовков вкладок в режиме со вкладками. По -умолчанию стоит 120 пикселей. Одиночная вкладка всегда будет 120 пикселей по -ширине. Две тоже, но когда они заполняют всю ширину окна, начинают сжиматься, -пока их размер не достигает нижнего лимита. Как только он достигнут, Ткаббер -начинает открывать новые вкладки в следующем ряду. - -### ::ifacetk::options(show\_toolbar) - -Показывать панель инструментов (то бишь панель с кнопками). По умолчанию -включена. - -### ::ifacetk::options(show\_presencebar) - -Показывать панель присутствия/статуса. Это панель в нижней части окна Ткаббера, -где слева расположена кнопка принудительной смены статуса, а справа от неё — -поле для ввода описания статуса. После ввода описания не забывайте нажимать -Enter в поле ввода или менять статус. - -### ::ifacetk::options(show\_statusbar) - -Показывать статусную строку. Это панелька, расположенная в самом низу. На -первый взгляд, толку от неё мало, но на самом деле там мелькают полезные -сообщения вроде уведомлений о коннекте ваших друзей, о смене их статуса и -прочие. - -Там же появляется аббревиатура "SSL", если вы соединились с сервером, используя -защиту канала ("STARTTLS" или "Старый SSL" в окне логина). Если аббревиатура -нарисована чёрным цветом (или тем, что у вас выбрано вместо обычного цвета -текста), Ткабберу удалось удостовериться в том, что сервер "настоящий" (то есть -мы доверяем его сертификату), если цвет аббревиатуры — красный, то -достоверность сертификата сервера проверить не удалось (подробнее об этих -заморочках написано в [**отдельной статье**](Проверка_сертификата_сервера.md)). -Одиночный щелчок мышью на этой аббревиатуре показывает диалог с информацией о -сертификате сервера и алгоритме шифрования, используемом для защиты соединения. - -### ::ifacetk::options(raise\_new\_tab) - -Размещать новую вкладку поверх остальных. По умолчанию включено, и зря! -Буквально через несколько минут активного общения начинает раздражать, что -именно когда вы пишете кому-нибудь сообщение, появляется новая вкладка с окном -разговора от другого приятеля, решившего с вами поболтать. Эта вкладка -перехватывает фокус, и если вы не смотрите на экран, продолжаете вбивать -остаток сообщения уже туда, и при удачном раскладе туда же его и отправляете. В -общем, отключайте эту опцию сразу же. - -### ::ifacetk::options(message\_numbers\_in\_tabs) - -Показывать число непрочитанных сообщений в заголовках вкладок. По умолчанию -включено. Очень удобно — сразу видно, сколько наболтали в каждой комнате, пока -вас не было :) - -### ::ifacetk::options(update\_title\_delay) - -Задержка (в миллисекундах) между получением фокуса и обновлением заголовка окна -или вкладки. По умолчанию стоит 600 мс. - -В ходе сеанса связи, когда окно Ткаббера неактивно, каждое новое сообщение -вызвает изменение заголовка окна Ткаббера: пред полным JID'ом вашего соединения -пишется количество непрочитанных сообщений в скобках, а так же за этим числом -рисуется "звёздочка" (\*), если среди сообщений есть адресованные лично вам -(или "хайлайты" в конференциях). После того, как вы активируете окно с -Ткаббером, он отсчитывает указанное в данной опции количество миллисекунд, -после чего сбрасывает заголовок окна в исходное состояние, которое оно имеет -сразу после успешного соединения с сервером, убирая информацию о наличии -непрочитанных сообщений. Если вы успеете в течение этого интервала времени -переключиться в какое-либо другое окно, заголовок окна Ткаббера останется без -изменений. - -Помимо обновления заголовка окна, эта настройка управляет индикацией в иконке -панели системных уведомлений ("трея"), так как её состояние изменяется -синхронно с заголовком окна и отображает ту же информацию, только другими -средствами. - -![(!)](../images/Hammer.png) **Сделать:** изучить поведение этой настройки в -случае многооконного интерфейса - -### ::ifacetk::options(show\_tearoffs) - -Использовать "отрывающиеся" меню, где это возможно. По умолчанию включено. -"Оторвать" меню можно, нажав на пунктирную линию, расположенную в верхней части -выпадающего меню. Это меню предстаёт в виде окошка, которое можно утащить в -сторону и пользоваться им параллельно с общением. Удобно, когда вам необходимо -многократно повторить одну и ту же операцию из меню, например, отправить -несколько сообщений дня из "Инструментов администратора". - -### ::ifacetk::options(closebuttonaction) - -Действие, совершаемое при нажатии на кнопку закрытия окна. По умолчанию стоит -"Закрыть Ткаббер", и это поведение ваш покорный слуга (и, к счастью, авторы -программы тоже) находит правильным. Это уже извращённые умы придумали -_сворачивать_ программу при нажатии на кнопку **Закрыть**. Впрочем, если вы уже -привыкли к этой мелкой лжи, можете не отучиваться — Ткаббер предоставляет -несколько вариантов сворачивания. - -### ::pixmaps::options(pixmaps\_theme) - -Тема пиктограмм Tkabber'а. Чтобы иметь возможность включить собственную тему, -положите её в поддиректорию директории pixmaps, которая лежит рядом с файлом -конфигурации (про то, где его искать, можно почитать [**здесь**]($__configdir.md)). -А [**здесь**](Цветовые_темы_и_пиктограммы.md#Пиктограммы) можно разжиться -пиктограммами, не включёнными в дистрибутив. - -### ::webbrowser - -Команда, которая будет выполнена при нажатии на URL в сообщении. Вместо '%s' -будет подставлен URL (например, "galeon -n %s"). Иногда (особенно в Виндовс) у -людей возникают проблемы с открытием линков в браузере. Читайте о них -[**здесь**](Ткаббер_ЧаВо/Глюки.md#Не_работает_браузер_под_виндами) и -[**здесь**](Ткаббер_ЧаВо/Глюки.md#При_клике_на_URLе_в_Ткаббере_запускается_две_Оперы_и_открывают_страницу_два_раза). - ---- - -### Systray - -Параметры значка области системных уведомлений ("трея", системного лотка). - -Эта группа настроек появляется в интерфейсе настроек только в том случае, если -Ткабберу доступно соответствующее расширение Tk, реализующее работу с треем: в -Windows это пакет [Winico](http://sourceforge.net/projects/tktable/), а в -системах на базе X Window используется минимум два разных пакета: Tk\_Theme и -tktray. - -Настройки трея, если доступны, делятся, соответственно, на общие и уникальные -для каждого конкретного расширения: - -#### Общие настройки - -##### ::ifacetk::systray::options(display\_status) - -Показывать всплывающее статусное окно ("тултип") над иконкой в трее, когда -главное окно свернуто. По умолчанию выключено. - -Следует отметить, что показ статусного окна в Windows, очевидно сломан: окно с -иконкой докладывает кривую информацию о своём местоположении на экране, и -статусное окно поэтому рисуется неподалёку от верхнего левого угла десктопа. -Побороть это можно -[**заклинаниями в файле конфигурации**](Нетривиальные_настройки.md#Настройка_положения_окна_уведомлений_в_Windows). - -##### ::ifacetk::systray::options(blink) - -Значок в системном лотке мигает, если есть непрочитанные сообщения. Тоже -выключено по умолчанию. Оно и понятно: мигание мельтешит в правом нижнем углу -глаза и раздражает, хотя вам может так и не казаться. В результате -расшатывается нервная система, ухудшается сон и возможны случаи лунатизма и -энуреза. Тем, кто уже болен, резкое выключение мигания вредит ещё больше, так -что в этом случае имеет смысл включить его. - -#### Настройки расширений работы с треем - -##### ::plugins::taskbar::options(enable) - -Использовать значок в системном лотке Windows. - -Доступна, если иконка в трее управляется пакетом Winico. - -##### ::plugins::tktray::options(enable) - -Включить freedesktop system tray icon. - -Появляется, если иконка в трее управляется пакетом tktray. - -![(!)](../images/Hammer.png) **Сделать:** то же для Tk\_Theme - -## IQ -Параметры Info/Query (информационные и служебные запросы). Многие из этих опций -трафикогонные. Проконсультируйтесь со статьёй -[**Low traffic HOWTO**](Low_traffic_HOWTO.md#Настройки_Ткаббера) (подраздел "Ответы на -IQ-запросы"), чтобы быть в курсе, какие можно безболезненно отключить, а какие -лучше не трогать. - -### ::iq::options(show\_iq\_requests) - -Показывать IQ-запросы в статусной строке. По умолчанию включено. Если у вас -отключена сама статусная строка (в Main Interface), то держать включённой эту -опцию не имеет смысла. - -### ::iq::options(shorten\_iq\_namespaces) - -Опускать "http://jabber.org/protocol/" при показе запросов в статусной строке. -По умолчанию включено. - -### ::plugins::options(reply\_iq\_last) - -Отвечать на запросы времени бездействия (jabber:iq:last). Первые три опции -включены по умолчанию. - -### ::plugins::ping::options(ping) - -Пинговать сервер запросами urn:xmpp:ping. По умолчанию выключено. - -### ::plugins::ping::options(timeout) - -Переподключаться к серверу, если он не ответил (возможно ошибкой) на пинг -(urn:xmpp:ping) за указанный временной интервал (в секундах). По умолчанию 30 -секунд. - -### ::plugins::ping::options(pong) - -Отвечать на пинг (urn:xmpp:ping). По умолчанию включено. - -### ::plugins::options(reply\_iq\_time) - -Отвечать на запросы времени (jabber:iq:time). Тоже включено. В Ткаббере -реализованы команды запроса времени, версии и т. п. В данном случае это "/time -nick". Эта опция разрешает отвечать на подобные запросы. - -### ::plugins::options(reply\_xmpp\_time) - -Reply to entity time (urn:xmpp:time) requests. - -### ::plugins::options(reply\_iq\_version) - -Отвечать на запросы версии (jabber:iq:version). Отвечает на запросы типа -"/version nick". - -### ::plugins::options(reply\_iq\_os\_version) - -Включать информацию об операционной системе в ответ на запрос версии -(jabber:iq:version). Позволяет при ответе на запрос о версии клиента отдавать -информацию и о вашей операционке. Если вы хотите сообщать версию Ткаббера, но -не выдавать инфу о системе, отключите её. - -### ::muc::options(report\_muc\_rooms) - -Отвечать на запрос disco\#items о MUC-конференциях, в которых Вы принимаете -участие. - -## Login -Параметры подключения. Если вы уже залогинены, некоторые поля будут -заполненными вашими данными для логина, причём рядом с кнопкой "Состояние" -будет написано "Параметр установлен, но не сохранён для следующих сессий". Это -нормально. Кстати, если вы не планируете устраивать мультилогин или создавать -несколько профилей, можете сохранить эти значения для будущих сессий (кроме -пароля, ибо файл custom.tcl, куда сохраняются все настройки, никак не -шифруется; если вы хотите настроить безопасный автологин без ввода пароля, -почитайте [**здесь**](Плагины.md#CryptoConfig)). Многие параметры логина -рассмативаются в статьях [**Начинающим**](Начинающим.md) и -[**Между офлайном и онлайном**](Между_офлайном_и_онлайном.md), так что здесь мы отвлекаться на их -описание не будем. - -### ::::loginconf(user) - -Имя пользователя. - -### ::::loginconf(server) - -Имя сервера. - -### ::::loginconf(password) - -Пароль. - -### ::::loginconf(resource) - -[**Ресурс**](Ткаббер_ЧаВо/Разное.md#Ресурс). - -### ::::loginconf(priority) - -[**Приоритет**](Ткаббер_ЧаВо/Разное.md#Приоритет). - -### ::::loginconf(connect\_forever) - -Пытаться подключаться бесконечно много раз. - -### ::::loginconf(allowauthplain) - -Разрешить механизмы аутентификации, использующие открытый текст (при этом -пароль передается незашифрованным). - -Если вы не знаете, что делать с этой опцией, отключите её. - -Остальным будет полезно знать две вещи: - -* Вменяемые реализации серверов разрешают клиенту использовать данный механизм - аутентификации только если до её начала канал был защищён при помощи TLS - (SSL). -* Включение на сервере нестандартного способа аутентификации пользователей - (например, при помощи внешней программы или LDAP) _требует_ использовать - механизм аутентификации открытым текстом (при этом в случае с ejabberd - предыдущий пункт перестаёт выполняться, и если вы развёртываете сервер с - нестанратным подходом к аутентификации пользователей, задумайтесь об - обязательном внедрении TLS). - -### ::::loginconf(allowgoogletoken) - -Разрешить использование механизма аутентификации X-GOOGLE-TOKEN. - -Имеет смысл только при подключении к серверам Google Talk и для своей работы -требует возможности подключения к серверам Google Talk по протоколу HTTPS, что, -в свою очередь, требует доступности для Ткаббера пакета **tls**. - -Подключение к Google Talk — особая, сложная тема с некоторым количеством -подводных камней, поэтому ей посвящена [**отдельная статья**](Google_Talk.md). - -### ::::loginconf(usesasl) - -Использовать SASL для аутентификации. - -Держите включённой. Отключать её следует только в особо сложных случаях, -например, при соединениях с очень древними серверами (например, jabberd1) и то, -только если с включённой опцией Ткаббер отказывается соединяться, выдавая -ошибку "Server did not provide SASL feature". - -### ::::loginconf(stream\_options) - -Настройки XMPP-потока при подключении к серверу. - -### ::::loginconf(sslcertfile) - -Файл сертификата SSL (необязательный параметр). - -### ::::loginconf(sslcacertstore) - -Файл или директория центра сертификации (CA) SSL (необязательный параметр). - -### ::::loginconf(sslkeyfile) - -Файл секретного ключа SSL (необязательный параметр). - -### ::::loginconf(proxy) - -Тип прокси для подключения. - -### ::::loginconf(proxyhost) - -Адрес прокси-сервера. По умолчанию указан localhost. - -### ::::loginconf(proxyport) - -Порт для подключения к прокси-серверу. Значение по умолчанию — 3128. - -### ::::loginconf(proxyusername) - -Имя пользователя для подключения к прокси-серверу. - -### ::::loginconf(proxypassword) - -Пароль для подключения к прокси-серверу. - -### ::::loginconf(proxyuseragent) - -Строка User-Agent. - -### ::::loginconf(usealtserver) - -Использовать явно указанные адрес сервера и порт для подключения. - -### ::::loginconf(altserver) - -Имя альтернативного сервера или его IP-адрес. - -### ::::loginconf(altport) - -Порт для подключения к альтернативному серверу. - -### ::::loginconf(replace\_opened) - -Закрыть открытые соединения. Для перелогина. Если вы планируете работать в -одном окне Ткаббера с двумя или более аккаунтами, отключите эту опцию. Если же -нет, лучше включите, чтобы не плодить открытые соединения в случае перелогина. - -### ::::loginconf(usehttppoll) - -Использовать HTTP-подключение. - -### ::::loginconf(pollurl) - -URL для подключения (опроса). - -### ::::loginconf(usepollkeys) - -Использовать ключи безопасности HTTP-подключения (рекомендуется). - -### ::::loginconf(numberofpollkeys) - -Число ключей безопасности, после передачи серверу которых генерируется новая -последовательность ключей. - -### ::::loginconf(polltimeout) - -Таймаут ожидания ответа на HTTP-запрос (если равен нулю, Ткаббер будет ждать -неограниченно долго). - -### ::::loginconf(pollmin) - -Минимальный интервал между HTTP-запросами. - -### ::::loginconf(pollmax) - -Максимальный интервал между HTTP-запросами. - -## Messages -Параметры отображения сообщений и новостей. - -### ::plugins::headlines::options(cache) - -Сохранять новости при выходе и восстанавливать при старте. Пользуйтесь этой -опцией, учитывая следующее. Если у вас много фидов и если вы чистите окно от -устаревших сообщений редко, то при включённом сохранении сообщения потихоньку -накапливаются, и стартующий Ткаббер начинает грузиться заметно дольше. Впрочем, -опция полезна, так как не всегда есть время прочитать какую-то новость прямо -сейчас, до закрытия Ткаббера. При работе с новостями может оказаться удобным -внешний плагин [**Rsssaver**](Плагины.md#Rsssaver), сохраняющий новости в файл -каждые N новых сообщений. Стандартное поведение Ткаббера — сохранять их только -при выходе; при аварийном завершении программы все новые сообщения, пришедшие -за этот сеанс, теряются. - -### ::plugins::headlines::options(multiple) - -Показывать новости в одном/нескольких окнах. Позволяет выбрать, использовать ли -одно окно для всех новостей или же группировать новости по джидам фидов в -отдельных окнах. - -### ::plugins::headlines::options(display\_subject\_only) - -Не показывать описание новости в виде ветви дерева (только всплывающее окно). - -### ::plugins::headlines::options(timestamp\_format) - -Формат вывода даты/времени в окне новостей. Для того, чтобы не показывать -дату/время совсем, установите эту опцию в пустую строку. - -### ::plugins::headlines::options(show\_balloons) - -Показывать всплывающие окна (тултипы) с текстом новости над заголовками -сообщений. - -### ::plugins::offline::options(flexible\_retrieval) - -Получать офлайновые сообщения с использованием протокола типа POP3. - -## Plugins -Параметры расширений. Содержимое этого раздела настроек сильно зависит от того, -какие плагины у вас установлены. Возможно, имеет смысл описать настройки всех -имеющихся плагинов, но статья и так уже слишком большая, так что ограничимся -лишь рекомендацией вникать в строчки описания и действовать метдом тыка, если -вникнуть сложно. В ближайшем будущем статья [**Плагины**](Плагины.md) подвергнется -доработке, и скорее всего, опции настройки каждого плагина будут помещены туда. - -## Privacy -Настройки блокировки сообщений (правил обеспечения приватности XMPP). - -### ::filters::options(enable) - -Включить поддержку модуля mod\_filter из jabberd 1.4 (устаревшие). По умолчанию -эта поддержка выключена. То и понятно, зачем по умолчанию грузить поддержку -устаревшего хлама? Если вы уверены, что ваш сервер — именно jabberd 1.4, -возможно, эта опция вам понадобится. - -### ::privacy::options(activate\_at\_startup) - -Активировать видимый/невидимый/игнорируемый списки (и список конференций) перед -тем, как объявлять о своём присутствии в сети. По умолчанию эта опция включена, -но вам может понадобиться отключить её. Подробнее об одном из таких случаев -читайте в статье [**Блокировка MRIM-спама**](Блокировка_MRIM-спама.md). - -### MUC Ignoring - -Игнорирование групповых и приватных сообщений от выбранных посетителей -многопользовательской конференции. В этом подразделе имеется всего одна опция: - -#### ::plugins::mucignore::options(transient\_rules) - -Если параметр установлен, то все изменения правил игнорирования будут -действовать только до того, как Tkabber закроется, и не будут восстановлены при -следующем запуске. По умолчанию выключено, так что Ткаббер должен запоминать -ваших доставал. Статья по теме — [**MUC Ignore**](MUC_Ignore.md). - -## Remote Control -Настройки [удалённого управления (XEP-0146)](http://www.xmpp.org/extensions/xep-0146.html). -Под удалённым управлением понимается возможность выполнять из одного Jabber-клиента некоторые -фиксированные действия по управлению другим удалённым Jabber-клиентом, а точнее -— одним из активных подключений к серверу на нём. Стандартные команды включают -в себя, в числе прочих: - -* Отключение сессии; -* Выход из всех активных групповых чатов (чтобы позволить зайти в них со своим - зарегистрированным псевдонимом из своей текущей сессии). -* Пересылка непрочитанных на удалённом клиенте сообщений вашему клиенту. - -В дополнение к этому встроенному средству вы можете поставить внешние плагины -[**Remote Settings**](Плагины.md#Remote_Settings) и -[**Remote Commands**](Плагины.md#Remote_Commands). Подробнее почитать на эту тему вы можете -в статье и -[**How to add a new remote command**](../en/How_to_add_a_new_remote_command.md) -(англ.; конкретные примеры, иллюстрирующие плагин Remote Commands). -![(!)](../images/Hammer.png) **Сделать:** поправить эту ссылку, чтобы выглядела -как внутренняя ссылка вики, а саму статью неплохо бы в будущем перевести на -русский. - -Имейте в виду, что это именно управление клиентом в контексте протокола XMPP; -оно не имеет ничего общего с управлением _программой Tkabber_ при помощи -средств операционной системы и её программного окружения (такого, например, про -которое написано в статье -[**Удалённое управление с помощью send**](Удалённое_управление_с_помощью_send.md)). - -### ::remote::options(enable) - -Включить удалённое управление. По умолчанию включено. - -### ::remote::options(accept\_from\_myjid) - -Принимать подключение с моего собственного JID. Тоже включено. - -### ::remote::options(accept\_list) - -Принимать подключение с перечисленных JID'ов. В этом поле можно перечислить -JID'ы, которым также разрешено удалённо управлять вашим Ткаббером. Разделять их -надо пробелом. - -## Roster -Параметры контактов. - -### ::ifacetk::roster::use\_aliases - -Использовать aliases и показывать нескольких пользователей как один элемент -контактов. Представьте себе, что у вас в ростере болтается два пользователя, -сидящих на одном джиде, но с разными ресурсами. С отключённой опцией они будут -видны как два отдельных контакта. Если же опция включена (а по умолчанию она -включена), то оба эти контакта соберутся в группу со стрелочкой и будут -выглядеть как один пользователь. При нажатии на стрелку группа развернётся, и -вы увидите все подключения этого пользователя. - -### ::ifacetk::roster::show\_only\_online - -Показывать в окне контактов только подключённые контакты. По умолчанию опция -выключена, но в реальной жизни бывает удобнее включить показ только контактов, -находящихся в онлайне. - -На панели инструментов имеется кнопка переключения списка контактов в режим -показа только активных контактов и обратно. Этот переключатель также доступен в -виде опции главного меню: **Tkabber → Контакты → Показываются только активные -пользователи'**. - -Если активен режим показа только активных пользователей в списке контактов, его -можно отменять для отдельных групп списка контактов, включив в контекстном меню -интересующей группы переключатель **Показывать неподключённые контакты**. - -Можно относительно легко навесить переключение обсуждаемого режима на -комбинацию клавиш, об этом рассказано -[**тут**](Нетривиальные_настройки.md#Хоткей_для_переключения_между_режимами_ростера_все_и_только_онлайн). - -Имейте в виду, что для облегчения поиска нужных контактов в списке можно -применять и другие методы: - -* Вдумчивое распределение контактов по группам (с учётом того что любой - контакт может одновременно входить в произвольное количество групп, а группы - могут быть вложенными). -* Использование фильтрации списка контактов. - -![(!)](../images/Hammer.png) **Сделать:** ссылки на указанные фичи - -### ::ifacetk::roster::show\_transport\_icons - -Использовать оригинальные пиктограммы для транспортов/служб в окне контактов. -По умолчанию выключено. Включение этой и следующей настройек несколько -разнообразит ваш ростер графически, если у вас есть контакты из других систем -(аська, яху и т. д.) Иконки транспортов и ваших друзей, не приобщённых к -Джабберу, будут выглядеть как родные, что позволит сразу отличать "иноземцев". - -### ::ifacetk::roster::show\_transport\_user\_icons - -Использовать оригинальные пиктограммы для контактов, подключённых через -транспорты/службы, в окне контактов. По умолчанию тоже выключено. - -### ::ifacetk::roster::options(nested) - -Отображать вложенные группы в контактах. По умолчанию выключено, а зря — это -очень удобная для упорядочивания ростера вещь. Проще всего объяснить это на -примере. Например, у нас кроме обычных друзей Андрея и Юли, которых сложно -куда-то отнести, есть друзья детства Вася, Петя и Алёша, есть друзья по универу -Коля, Лена и Наташа, и есть кореши Вован и Жора, с которыми мы постоянно -рубимся в "кваку". Редактируя контакты друзей, можно прописать для них -соответственно группы **Друзья**, **Друзья::Друзья детства**, -**Друзья::Универ**, **Друзья::Quake**. Причём можно пойти дальше и -университетских друзей разбросать по курсам: **Друзья::Универ::Однокурсники** -**Друзья::Универ::Остальные** В результате в ростере появится примерно такое: - -
-Друзья
-Андрей
-Юля
-   Друзья детства
-   Вася
-   Петя
-   Алёша
-   Универ
-      Однокурсники
-      Коля
-      Остальные
-      Лена
-      Наташа
-   Quake
-   Вован
-   Жора
-
- -### ::ifacetk::roster::options(nested\_delimiter) - -Разделитель вложенных групп по умолчанию. По умолчанию разделителем является -двойное двоеточие, но вы можете указать свой. Не забудьте после смены -разделителя отредактировать все контакты, входившие во вложенные группы. - -### ::ifacetk::roster::options(show\_own\_resources) - -Показывать в контактах собственные ресурсы. Если вы сидите в Джаббере с дома и -с работы, используя, само собой, разные ресурсы, то может оказаться полезным -наблюдать другие свои подключения. При включении этой опции в ростере в группе -"Мои ресурсы" появляется как минимум ваш текущий единственный ресурс, а если их -больше одного, то и остальные. Это полезно для отправки самому себе из дома на -работу какой-нибудь ссылки или мудрой мысли, пришедшей спросонья, на случай, -если в утреннем автобусе вас из неё вытрясет немилосердный водитель. - -### ::ifacetk::roster::options(chats\_group) - -Добавлять в контакты группу открытых разговоров. Как должно быть ясно из -названия, эта опция добавит в ваш ростер группу, состоящую из всех открытых -вами на данный момент чатов, будь то конференции, приваты конференций или чаты -с пользователями из ростера. Польза от этой опции сомнительна, поэтому по -умолчанию она установлена в false. - -### ::ifacetk::roster::options(use\_filter) - -Использовать фильтр контактов. По умолчанию выключен. При его включении в -нижней части ростера, над кнопкой смены состояний, появляется поле для ввода -фильтра. Фильтром может быть любая последовательность символов. - -Фильтрация работает по мере ввода. Например, если мы напишем туда букву "а" -(русскую), то из вышеупомнутых друзей в ростере останутся Андрей, Вася, Алёша, -Лена, Наташа, Вован и Жора. Добавив к этой букве "н", получим совсем маленький -ростер, состоящий из Андрея и Вована. - -Нажатие клавиши Escape очищает поле ввода, возвращая список контактов в -исходное состояние. - -### ::ifacetk::roster::options(match\_jids) - -Подбирать не только псевдоним, но и JID в фильтре контактов. Добавляет в фильтр -возможность поиска и по JID'ам, а не только по именам контактов. По умолчанию -выключено. - -### ::ifacetk::roster::options(free\_drop) - -При перетаскивании контакта из одной группы контактов в другую, его можно -отпустить не только над названием группы, но и над любым контактом в этой -группе. Если вы не знали, пользователей можно сортировать по группам обычным -Drag'n'Drop'ом. Назначение этой опции, думаю, понятно. По умолчанию включено. - -### ::ifacetk::roster::options(show\_subscription) - -Показывать тип подписки на присутствие во всплывающем окне в контактах. По -умолчанию выключено. Тип подписки может быть "from" (контакт вас авторизовал, а -вы его нет), "to" (наоборот) и "both" (вы оба друг друга авторизовали). -Всплывающее окно, или тултип, появляется, если навести мышью на контакт. - -### ::ifacetk::roster::options(show\_conference\_user\_info) - -Показывать детальную информацию об участниках конференции во всплывающем окне, -соответствующем конференции, в контактах. Тоже по умолчанию выключено. Если -включить, то при наведении мыши на закладку конференции в ростере появляется -тултип со списком участников этой конфы, причём неважно, находитесь вы сами в -ней или нет. Для того, чтобы эта информация появилась, необходимо включить -опцию -[**::plugins::conferenceinfo::options(autoask)**](#pluginsconferenceinfooptionsautoask), -описанную выше. - -## Sound -Настройки звука. - -## State -Настройки сохранения состояния Ткаббера. - -## Warnings -Параметры отображения предупреждений. - -### ::tls\_warnings - -Показывать предупреждения SSL. По умолчанию включено. - -Если эта опция включена, при каждой попытке защитить соединение с сервером при -помощи протокола TLS (SSL), в ходе которой не удаётся убедиться в том, что -сервер "настоящий" (то есть мы не доверяем представленному им сертификату), -Ткаббер будет показывать предупреждающий диалог, в котором будет указана -причина проблемы и подробная информация о сертификате сервера. В данном диалоге -Ткаббер предложит отказаться от соединения (действие по умолчанию) или -продолжить его на ваш страх и риск. - -Ваше отношение к этой опции должно основываться на том уровне защиты, который -вам нужен от протокола TLS: если вам достаточно того, что TLS будет шифровать -трафик между вами и сервером, а проверка подлинности сервера вас не волнует -настолько чтобы повозиться с организацией доверия к этому серверу, можете -данную опцию отключить чтобы избавиться от лишних действий при каждом -подключении. В противном случае изучайте [**эту статью**](Проверка_сертификата_сервера.md). + * [1.1 ::plugins::autoaway::options(awaytime)](#pluginsautoawayoptionsawaytime) + * [1.2 ::plugins::autoaway::options(xatime)](#pluginsautoawayoptionsxatime) + * [1.3 ::plugins::autoaway::options(status)](#pluginsautoawayoptionsstatus) + * [1.4 ::plugins::autoaway::options(drop\_priority)](#pluginsautoawayoptionsdrop_priority) +* [2 Chat](#Chat) + * [2.1 ::chat::options(stop\_scroll)](#chatoptionsstop_scroll) + * [2.2 ::chat::options(smart\_scroll)](#chatoptionssmart_scroll) + * [2.3 ::chat::options(display\_status\_description)](#chatoptionsdisplay_status_description) + * [2.4 ::chat::options(default\_message\_type)](#chatoptionsdefault_message_type) + * [2.5 ::chat::options(gen\_status\_change\_msgs)](#chatoptionsgen_status_change_msgs) + * [2.6 ::plugins::completion::options(completion\_expire)](#pluginscompletionoptionscompletion_expire) + * [2.7 ::plugins::options(timestamp\_format)](#pluginsoptionstimestamp_format) + * [2.8 ::plugins::options(delayed\_timestamp\_format)](#pluginsoptionsdelayed_timestamp_format) + * [2.9 ::plugins::xhtml::options(enable)](#pluginsxhtmloptionsenable) + * [2.10 ::plugins::log\_on\_open::options(max\_messages)](#pluginslog_on_openoptionsmax_messages) + * [2.11 ::plugins::log\_on\_open::options(max\_interval)](#pluginslog_on_openoptionsmax_interval) + * [2.12 ::plugins::nickcolors::options(use\_colored\_nicks)](#pluginsnickcolorsoptionsuse_colored_nicks) + * [2.13 ::plugins::nickcolors::options(use\_colored\_roster\_nicks)](#pluginsnickcolorsoptionsuse_colored_roster_nicks) + * [2.14 ::plugins::nickcolors::options(use\_colored\_messages)](#pluginsnickcolorsoptionsuse_colored_messages) + * [2.15 ::muc::options(gen\_enter\_exit\_msgs)](#mucoptionsgen_enter_exit_msgs) + * [2.16 ::muc::options(gen\_muc\_status\_change\_msgs)](#mucoptionsgen_muc_status_change_msgs) + * [2.17 ::muc::options(gen\_muc\_position\_change\_msgs)](#mucoptionsgen_muc_position_change_msgs) + * [2.18 ::muc::options(propose\_configure)](#mucoptionspropose_configure) + * [2.19 ::muc::options(history\_maxchars)](#mucoptionshistory_maxchars) + * [2.20 ::muc::options(history\_maxstanzas)](#mucoptionshistory_maxstanzas) + * [2.21 ::muc::options(request\_only\_unseen\_history)](#mucoptionsrequest_only_unseen_history) + * [2.22 ::plugins::tclchat::options(use\_tkchat\_colors)](#pluginstclchatoptionsuse_tkchat_colors) + * [2.23 Chatstate](#Chatstate) + * [2.23.1 ::plugins::chatstate::options(enable)](#pluginschatstateoptionsenable) + * [2.24 Emoticons](#Emoticons) + * [2.24.1 ::plugins::emoticons::options(show\_emoticons)](#pluginsemoticonsoptionsshow_emoticons) + * [2.24.2 ::plugins::emoticons::options(theme)](#pluginsemoticonsoptionstheme) + * [2.24.3 ::plugins::emoticons::options(match\_whole\_word)](#pluginsemoticonsoptionsmatch_whole_word) + * [2.24.4 ::plugins::emoticons::options(handle\_lol)](#pluginsemoticonsoptionshandle_lol) + * [2.25 Events](#Events) + * [2.25.1 ::plugins::events::options(enable)](#pluginseventsoptionsenable) + * [2.26 Highlight](#Highlight) + * [2.26.1 ::plugins::highlight::options(enable\_highlighting)](#pluginshighlightoptionsenable_highlighting) + * [2.26.2 ::plugins::highlight::options(highlight\_nick)](#pluginshighlightoptionshighlight_nick) + * [2.26.3 ::plugins::highlight::options(highlight\_substrings)](#pluginshighlightoptionshighlight_substrings) + * [2.26.4 ::plugins::highlight::options(highlight\_whole\_words)](#pluginshighlightoptionshighlight_whole_words) + * [2.27 Logging](#Logging) + * [2.27.1 ::logger::options(logdir)](#loggeroptionslogdir) + * [2.27.2 ::logger::options(log\_chat)](#loggeroptionslog_chat) + * [2.27.3 ::logger::options(log\_groupchat)](#loggeroptionslog_groupchat) + * [2.28 MUC Ignoring](#MUC_Ignoring) + * [2.28.1 ::plugins::mucignore::options(transient\_rules)](#pluginsmucignoreoptionstransient_rules) + * [2.29 Stylecodes](#Stylecodes) + * [2.29.1 ::plugins::stylecodes::options(emphasize)](#pluginsstylecodesoptionsemphasize) + * [2.29.2 ::plugins::stylecodes::options(hide\_markup)](#pluginsstylecodesoptionshide_markup) + * [2.30 Vcard](#Vcard) +* [3 Conference Info](#Conference_Info) + * [3.1 ::plugins::conferenceinfo::options(autoask)](#pluginsconferenceinfooptionsautoask) + * [3.2 ::plugins::conferenceinfo::options(interval)](#pluginsconferenceinfooptionsinterval) + * [3.3 ::plugins::conferenceinfo::options(err\_interval)](#pluginsconferenceinfooptionserr_interval) +* [4 File Transfer](#File_Transfer) + * [4.1 ::ft::options(download\_dir)](#ftoptionsdownload_dir) + * [4.2 ::ft::options(default\_proto)](#ftoptionsdefault_proto) + * [4.3 HTTP](#HTTP) + * [4.3.1 ::plugins::http::options(port)](#pluginshttpoptionsport) + * [4.3.2 ::plugins::http::options(host)](#pluginshttpoptionshost) + * [4.4 Jidlink](#Jidlink) + * [4.4.1 ::jidlink::transport(allowed,dtcp-active)](#jidlinktransportalloweddtcp-active) + * [4.4.2 ::jidlink::transport(allowed,dtcp-passive)](#jidlinktransportalloweddtcp-passive) + * [4.4.3 ::jidlink::transport(allowed,inband-bytestream)](#jidlinktransportallowedinband-bytestream) + * [4.5 Stream Initiation](#Stream_Initiation) + * [4.5.1 ::si::socks5::initiator::options(enable\_mediated\_connection)](#sisocks5initiatoroptionsenable_mediated_connection) + * [4.5.2 ::si::socks5::initiator::options(proxy\_servers)](#sisocks5initiatoroptionsproxy_servers) + * [4.5.3 ::si::transport(allowed,[http://jabber.org/protocol/bytestreams](http://jabber.org/protocol/bytestreams))](#sitransportallowedhttp__jabber.org_protocol_bytestreamshttp__jabber.org_protocol_bytestreams) + * [4.5.4 ::si::transport(allowed,[http://jabber.org/protocol/iqibb](http://jabber.org/protocol/iqibb))](#sitransportallowedhttp__jabber.org_protocol_iqibbhttp__jabber.org_protocol_iqibb) + * [4.5.5 ::si::transport(allowed,[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb))](#sitransportallowedhttp__jabber.org_protocol_ibbhttp__jabber.org_protocol_ibb) +* [5 GPGME](#GPGME) + * [5.1 ::ssj::options(one-passphrase)](#ssjoptionsone-passphrase) + * [5.2 ::ssj::options(sign-traffic)](#ssjoptionssign-traffic) + * [5.3 ::ssj::options(encrypt-traffic)](#ssjoptionsencrypt-traffic) + * [5.4 ::ssj::options(key)](#ssjoptionskey) + * [5.5 ::ssj::options(display\_sig\_warnings)](#ssjoptionsdisplay_sig_warnings) +* [6 Main Interface](#Main_Interface) + * [6.1 ::ifacetk::options(use\_tabbar)](#ifacetkoptionsuse_tabbar) + * [6.2 ::ifacetk::options(tabs\_side)](#ifacetkoptionstabs_side) + * [6.3 ::ifacetk::options(tab\_minwidth)](#ifacetkoptionstab_minwidth) + * [6.4 ::ifacetk::options(tab\_maxwidth)](#ifacetkoptionstab_maxwidth) + * [6.5 ::ifacetk::options(show\_toolbar)](#ifacetkoptionsshow_toolbar) + * [6.6 ::ifacetk::options(show\_presencebar)](#ifacetkoptionsshow_presencebar) + * [6.7 ::ifacetk::options(show\_statusbar)](#ifacetkoptionsshow_statusbar) + * [6.8 ::ifacetk::options(raise\_new\_tab)](#ifacetkoptionsraise_new_tab) + * [6.9 ::ifacetk::options(message\_numbers\_in\_tabs)](#ifacetkoptionsmessage_numbers_in_tabs) + * [6.10 ::ifacetk::options(update\_title\_delay)](#ifacetkoptionsupdate_title_delay) + * [6.11 ::ifacetk::options(show\_tearoffs)](#ifacetkoptionsshow_tearoffs) + * [6.12 ::ifacetk::options(closebuttonaction)](#ifacetkoptionsclosebuttonaction) + * [6.13 ::pixmaps::options(pixmaps\_theme)](#pixmapsoptionspixmaps_theme) + * [6.14 ::webbrowser](#webbrowser) + * [6.15 Systray](#Systray) + * [6.15.1 Общие настройки](#Общие_настройки) + * [6.15.1 ::ifacetk::systray::options(display\_status)](#ifacetksystrayoptionsdisplay_status) + * [6.15.1 ::ifacetk::systray::options(blink)](#ifacetksystrayoptionsblink) + * [6.15.2 Настройки расширений работы с треем](#Настройки_расширений_работы_с_треем) + * [6.15.2 ::plugins::taskbar::options(enable)](#pluginstaskbaroptionsenable) + * [6.15.2 ::plugins::tktray::options(enable)](#pluginstktrayoptionsenable) +* [7 IQ](#IQ) + * [7.1 ::iq::options(show\_iq\_requests)](#iqoptionsshow_iq_requests) + * [7.2 ::iq::options(shorten\_iq\_namespaces)](#iqoptionsshorten_iq_namespaces) + * [7.3 ::plugins::options(reply\_iq\_last)](#pluginsoptionsreply_iq_last) + * [7.4 ::plugins::ping::options(ping)](#pluginspingoptionsping) + * [7.5 ::plugins::ping::options(timeout)](#pluginspingoptionstimeout) + * [7.6 ::plugins::ping::options(pong)](#pluginspingoptionspong) + * [7.7 ::plugins::options(reply\_iq\_time)](#pluginsoptionsreply_iq_time) + * [7.8 ::plugins::options(reply\_xmpp\_time)](#pluginsoptionsreply_xmpp_time) + * [7.9 ::plugins::options(reply\_iq\_version)](#pluginsoptionsreply_iq_version) + * [7.10 ::plugins::options(reply\_iq\_os\_version)](#pluginsoptionsreply_iq_os_version) + * [7.11 ::muc::options(report\_muc\_rooms)](#mucoptionsreport_muc_rooms) +* [8 Login](#Login) + * [8.1 ::::loginconf(user)](#loginconfuser) + * [8.2 ::::loginconf(server)](#loginconfserver) + * [8.3 ::::loginconf(password)](#loginconfpassword) + * [8.4 ::::loginconf(resource)](#loginconfresource) + * [8.5 ::::loginconf(priority)](#loginconfpriority) + * [8.6 ::::loginconf(connect\_forever)](#loginconfconnect_forever) + * [8.7 ::::loginconf(allowauthplain)](#loginconfallowauthplain) + * [8.8 ::::loginconf(allowgoogletoken)](#loginconfallowgoogletoken) + * [8.9 ::::loginconf(usesasl)](#loginconfusesasl) + * [8.10 ::::loginconf(stream\_options)](#loginconfstream_options) + * [8.11 ::::loginconf(sslcertfile)](#loginconfsslcertfile) + * [8.12 ::::loginconf(sslcacertstore)](#loginconfsslcacertstore) + * [8.13 ::::loginconf(sslkeyfile)](#loginconfsslkeyfile) + * [8.14 ::::loginconf(proxy)](#loginconfproxy) + * [8.15 ::::loginconf(proxyhost)](#loginconfproxyhost) + * [8.16 ::::loginconf(proxyport)](#loginconfproxyport) + * [8.17 ::::loginconf(proxyusername)](#loginconfproxyusername) + * [8.18 ::::loginconf(proxypassword)](#loginconfproxypassword) + * [8.19 ::::loginconf(proxyuseragent)](#loginconfproxyuseragent) + * [8.20 ::::loginconf(usealtserver)](#loginconfusealtserver) + * [8.21 ::::loginconf(altserver)](#loginconfaltserver) + * [8.22 ::::loginconf(altport)](#loginconfaltport) + * [8.23 ::::loginconf(replace\_opened)](#loginconfreplace_opened) + * [8.24 ::::loginconf(usehttppoll)](#loginconfusehttppoll) + * [8.25 ::::loginconf(pollurl)](#loginconfpollurl) + * [8.26 ::::loginconf(usepollkeys)](#loginconfusepollkeys) + * [8.27 ::::loginconf(numberofpollkeys)](#loginconfnumberofpollkeys) + * [8.28 ::::loginconf(polltimeout)](#loginconfpolltimeout) + * [8.29 ::::loginconf(pollmin)](#loginconfpollmin) + * [8.30 ::::loginconf(pollmax)](#loginconfpollmax) +* [9 Messages](#Messages) + * [9.1 ::plugins::headlines::options(cache)](#pluginsheadlinesoptionscache) + * [9.2 ::plugins::headlines::options(multiple)](#pluginsheadlinesoptionsmultiple) + * [9.3 ::plugins::headlines::options(display\_subject\_only)](#pluginsheadlinesoptionsdisplay_subject_only) + * [9.4 ::plugins::headlines::options(timestamp\_format)](#pluginsheadlinesoptionstimestamp_format) + * [9.5 ::plugins::headlines::options(show\_balloons)](#pluginsheadlinesoptionsshow_balloons) + * [9.6 ::plugins::offline::options(flexible\_retrieval)](#pluginsofflineoptionsflexible_retrieval) +* [10 Plugins](#Plugins) +* [11 Privacy](#Privacy) + * [11.1 ::filters::options(enable)](#filtersoptionsenable) + * [11.2 ::privacy::options(activate\_at\_startup)](#privacyoptionsactivate_at_startup) + * [11.3 MUC Ignoring](#MUC_Ignoring) + * [11.3.1 ::plugins::mucignore::options(transient\_rules)](#pluginsmucignoreoptionstransient_rules) +* [12 Remote Control](#Remote_Control) + * [12.1 ::remote::options(enable)](#remoteoptionsenable) + * [12.2 ::remote::options(accept\_from\_myjid)](#remoteoptionsaccept_from_myjid) + * [12.3 ::remote::options(accept\_list)](#remoteoptionsaccept_list) +* [13 Roster](#Roster) + * [13.1 ::ifacetk::roster::use\_aliases](#ifacetkrosteruse_aliases) + * [13.2 ::ifacetk::roster::show\_only\_online](#ifacetkrostershow_only_online) + * [13.3 ::ifacetk::roster::show\_transport\_icons](#ifacetkrostershow_transport_icons) + * [13.4 ::ifacetk::roster::show\_transport\_user\_icons](#ifacetkrostershow_transport_user_icons) + * [13.5 ::ifacetk::roster::options(nested)](#ifacetkrosteroptionsnested) + * [13.6 ::ifacetk::roster::options(nested\_delimiter)](#ifacetkrosteroptionsnested_delimiter) + * [13.7 ::ifacetk::roster::options(show\_own\_resources)](#ifacetkrosteroptionsshow_own_resources) + * [13.8 ::ifacetk::roster::options(chats\_group)](#ifacetkrosteroptionschats_group) + * [13.9 ::ifacetk::roster::options(use\_filter)](#ifacetkrosteroptionsuse_filter) + * [13.10 ::ifacetk::roster::options(match\_jids)](#ifacetkrosteroptionsmatch_jids) + * [13.11 ::ifacetk::roster::options(free\_drop)](#ifacetkrosteroptionsfree_drop) + * [13.12 ::ifacetk::roster::options(show\_subscription)](#ifacetkrosteroptionsshow_subscription) + * [13.13 ::ifacetk::roster::options(show\_conference\_user\_info)](#ifacetkrosteroptionsshow_conference_user_info) +* [14 Sound](#Sound) +* [15 State](#State) +* [16 Warnings](#Warnings) + * [16.1 ::tls\_warnings](#tls_warnings) + +# AutoAway +Параметры модуля, автоматически устанавливающего состояние "Отошёл" после установленного периода бездействия. Для того, чтобы у вас автоэвей работал, необходимо установить [дополнительный пакет](http://tkabber.jabber.ru/dependencies) (кстати говоря, без него и пункт настроек этот не появится). Об установке пакета в Виндовс можно почитать [здесь](Tkabber_Windows_Mini_HOWTO.md#WinIdle). И вот до кучи [дополнительное чтиво](Ткаббер_ЧаВо/Глюки.md#Ткаббер_постоянно_держит_меня_в_состоянии_отошёл_away) о возможных проблемах с AutoAway. + +Имейте в виду, что автоэвей в Ткаббере следит за неактивностью прользователя в масштабах системы, а не самого Ткаббера, поэтому если излишек нервных клеток заставил вас запустить Doom 3, перед этим выставьте руками статус "Отошёл" или "Отошёл давно" иначе для остальных вы продолжите оставаться доступным даже будучи на [Фобосе](http://en.wikipedia.org/wiki/Doom_(video_game)). (Справляться со статусами доступности может помочь [этот плагин](Плагины.md#customstatus).) + +## ::plugins::autoaway::options(awaytime) + +Время, через которое Ткаббер перейдёт в состояние "Отошёл", если не нажимать никаких кнопок и не двигать мышью. Значение по умолчанию: 5 минут. + +## ::plugins::autoaway::options(xatime) + +То же самое, но для состояния "Отошёл давно". По умолчанию стоит 15 минут. + +## ::plugins::autoaway::options(status) + +В этом поле можно дать описание статуса, то есть, причину, по которой Ткаббер перешёл в состояние Away. По умолчанию там написано "Автоматически в состоянии 'отошёл' по бездействию", однако вы можете написать что-нибудь своё, не забывая, впрочем, отразить факт **автоматической** смены статуса. + +## ::plugins::autoaway::options(drop\_priority) + +По умолчанию галочка отмечена, и действие её — сбрасывать приоритет в 0 при достижении состояния "Отошёл давно". Что такое приоритет, [читайте отдельно](Ткаббер_ЧаВо/Разное.md#Приоритет). + +# Chat +Параметры разговора. + +## ::chat::options(stop\_scroll) + +Эта опция в настройках идёт второй, но здесь мы опишем её раньше, чтобы вам было понятней, что к чему. По умолчанию она выключена, и это правильно: если её включить, то при получении новых сообщений в чат окошко скроллиться не будет, и вам придётся прокручивать его вручную (с помощью полосы прокрутки или колесом мыши), чтобы следить за разговором. + +## ::chat::options(smart\_scroll) + +Если автопрокрутка у нас включена, имеет смысл улучшить её поведение. Умная прокрутка следит, где вы в данный момент читаете сообщения разговора: если вы выдите самое последнее сообщение, то приход нового сообщения сдвинет уже имеющиеся в окне вверх (сработает прокрутка) и вы увидите это новое сообщение, если же вы читаете ход дискуссии где-то в её середине и не видите последнего сообщения, то поступление нового ничего прокручивать не будет, не отрывая вас от созерцания интересной вам части излитого потока сознания. + +## ::chat::options(display\_status\_description) + +Если эта опция включена, то при открытии окна разговора (с человеком из ростера или приват в конференции) в верхней части, над окном слева рядом с иконкой, показывающей состояние собеседника ("Отошёл", "Доступен" и т. д.), пишется и детальное описание этого состояния, то есть сами слова "Отошёл", "Доступен" и прочие. Кстати, если навести мышь на иконку или на эту надпись, то в тултипе можно прочитать описание, которое пользователь ввёл либо в настройках автоэвея, либо в поле описания рядом с кнопкой принудительной смены состояния в нижней части ростера. + +## ::chat::options(default\_message\_type) + +По умолчанию стоит "Разговор". Это означает, что при двойном клике на контакте из ростера у вас запустится окно разговора в виде нового таба (или же нового окна разговора, если у вас отключён режим с табами). Если же включить опцию "Обычное", то при двойном клике запускается окно отправки сообщения, которое пропадёт после его отправки. Окно разговора при отправке сообщения не закрывается. + +## ::chat::options(gen\_status\_change\_msgs) + +Значение по умолчанию — включено, что означает "Генерировать сообщения о том, что собеседник сменил своё присутствие или статусное сообщение". Сообщения о смене статуса появляются в самом окне или табе разговора (не путайте с окном конференции): "[Чтв. Апрель 17 22:19]--- bigote свободен для разговора (Свободен для разговора)". Эта опция может быть полезной для мягкого шпионажа за вашими собеседниками. + +## ::plugins::completion::options(completion\_expire) + +Число сообщений, необходимое для того, чтобы отключить автодополнение псевдонима автора последнего сообщения, адресованного персонально. По умолчанию стоит 10. Сейчас расшифруем, что это означает. В Ткаббере можно слать персональные сообщения в общем чате. Для этого надо либо ткнуть в ник человека мышью, либо набрать первые символы его ника и нажать табуляцию. При этом в окне ввода сообщения появится его ник, отделённый от последующего текста двоеточием и пробелом. Теперь пишите свой текст, жмите ввод, и этот человек увидит свой ник в этом сообщении подсвеченным и, если включен звук и настроено уведомление о персональных сообщениях, то услышит, что кто-то персонально к нему обратился. Этот человек теперь может легко ответить так же персонально и вам, просто нажав табуляцию: при этом ваш ник окажется в его окошке ввода текста, и история повторится. Так вот. Если он сразу не воспользуется этой возможностью, то после прихода в чат 10 сообщений и больше нажатие табуляции выведет уже первую доступную по алфавиту команду Ткаббера или социал. + +## ::plugins::options(timestamp\_format) + +Формат вывода даты/времени в сообщениях. (Подробнее описание формата можно узнать из документации к команде Tcl 'clock'.) Значение по умолчанию — [%R], что означает лишь часы и минуты. Это мало. В конференциях можно сидеть днями, и тогда бывает необходимо знать, какого числа (а то и месяца) была сказана та или иная фраза. Если не хотите читать документацию к команде 'clock', можете воспользоваться либо примерами, приведёнными рядом с опцией, либо моим выбором: [%a %b %d %H:%M]. + +## ::plugins::options(delayed\_timestamp\_format) + +Формат "отложенных" сообщений, то есть отправленных более суток назад. Это те сообщения, которые ваши приятели шлют вам, когда вы долго не появляетесь в онлайне, и они начинают волноваться, жмакать кнопку "Показать пользователей в оффлайне" и интересоваться причинами вашего отсутствия. Значение по умолчанию — [%m/%d %R]. Обычно его хватает. + +## ::plugins::xhtml::options(enable) + +Отображать сообщения, форматированные с помощью XHTML, то есть такие, при составлении которых использовались выделения кусков текста цветами, шрифтами и размерами символов (что поддерживается некоторыми клиентами). По умолчанию отключено, потому что эта опция нужна очень редко, и только тем очень смелым людям, кто знает или хочет узнать, что такое XHTML, отрендеренный Ткаббером. Для повседневной работы она не нужна, поскольку XHTML сообщение всегда содержит "неисковерканую" копию себя, содержащую просто текст сообщения, который и покажет Ткаббер, если опция отключена. + +## ::plugins::log\_on\_open::options(max\_messages) + +Максимальное число запротоколированных сообщений, которое надо показывать во вновь открываемом окне разговора (если положить отрицательным, то неограниченное). По умолчанию стоит 20. Когда мы открываем окно разговора с каким-либо из своих контактов, в окне появляется кусок предыдущей с ним беседы, что весьма полезно, если эта предыдущая беседа состоялась месяц назад, и с того момента собеседник вдруг ответил на вашу последнюю реплику. Если вы не помните, о чём был разговор, трудно бывает врубиться, с какого перепугу он вам пишет эту муть. + +## ::plugins::log\_on\_open::options(max\_interval) + +Максимальный интервал (в часах) для которого запротоколированные сообщения надо показывать во вновь открываемом окне разговора (если положить отрицательным, то неограниченный интервал). По умолчанию стоит 24 часа, что для описанного выше случая с разрывом в один месяц явно не подходит. Надо поставить отрицательное значение. + +## ::plugins::nickcolors::options(use\_colored\_nicks) + +Использовать цветные псевдонимы в окнах разговоров/конференций. + +## ::plugins::nickcolors::options(use\_colored\_roster\_nicks) + +Использовать цветные псевдонимы в списках участников конференций. + +## ::plugins::nickcolors::options(use\_colored\_messages) + +Использовать цветные сообщения в окнах разговора. Эта и предыдущие две опции отвечает за раскрашивание ников собеседников и их сообщений. Эти опции из разряда тех, которые проще попробовать, чем читать о них или рассказывать. Так что оставляем вас наедине с ними ;) И вот до кучи [информация о возможных проблемах](Ткаббер_ЧаВо/Внешний_вид_и_звук.md#Цвета_сообщений_асечников), связанных с цветами. + +## ::muc::options(gen\_enter\_exit\_msgs) + +Генерировать статусные сообщения о входе/выходе участников в MUC-конференциях. Выше описывалась опция генерации сообщений о смене статуса собеседника. Она похожа на эту, только здесь генерируются сообщения вида "bigote вышел(а) из комнаты: Disconnected", которые показываются в общем чате (другие названия: конференция, MUC). По умолчанию стоит, и правильно делает, что стоит. Так мы знаем, кто и во сколько заходил в конфу и покидал её. + +## ::muc::options(gen\_muc\_status\_change\_msgs) + +А это — близнец описанной гораздо выше и упомянутой чуть выше опции про генерацию смены статусов. На этот раз — в MUC (Multi-User Conference). + +## ::muc::options(gen\_muc\_position\_change\_msgs) + +Генерировать сообщения о том, что положение, занимаемое участником конференции (его ранг и/или роль), изменились. Ещё одна шпионская опция. Эта и предыдущая опции по умолчанию выключены, потому что надоедают больше, чем приносят пользы. + +## ::muc::options(propose\_configure) + +Предлагать конфигурировать вновь созданную конференцию. Если установить в false, то автоматически принимается конфигурация по умолчанию. Как ясно из описания опции, она про конфигурацию созданных вами конференций. Поскольку по умолчанию она выключена, не забывайте при создании новой комнаты зайти в её меню (кнопка "Тема" в верхней части окна, которая выглядит совсем не кнопкой) и настроить её (**MUC → Конфигурировать комнату**). + +## ::muc::options(history\_maxchars) + +Максимальное число символов в запрашиваемой истории конференции, совместимой с MUC. По умолчанию 10000. Это напоминает описанную выше опцию про вывод старых разговоров в свежеоткрытом окне. Отличие состоит в том, что тут история выводится даже в том случае, если вы зашли в комнату впервые в жизни. Это делается для того, чтобы вы были в курсе, о чём идёт беседа. Если история вам мешает, вы её можете либо ограничить, либо отключить, вписав 0. + +Важно понимать, что эта и следующие две опции управляют получением истории _с сервера,_ в то время как опции группы `::plugins::log_on_open::options` ведают выемкой сообщений из локальной истории разговоров, которую ведёт Ткаббер. + +## ::muc::options(history\_maxstanzas) + +То же самое, что и предыдущая опция, но уже не про количество символов, а про количество строк в истории. Если быть точным, то речь идёт не о строках как таковых, а о ["станцах"](Терминология.md#Станца_stanza), то есть отправленных в конференцию сообщениях. Так, одно сообщение может содержать несколько строк, но считаться будет всего одна станца. По умолчанию (и кажется, по максимуму тоже) 20. + +## ::muc::options(request\_only\_unseen\_history) + +Запрашивать только те сообщения из истории, которые не показаны в уже открытом окне (для конференции, совместимой с MUC). Это на случай кратковременного дисконнекта. Допустим, вы брыкнули ногой и выдернули сетевой кабель, однако вовремя спохватились и быстро воткнули его обратно. Однако часть разговора прошла без вас. Спасибо предыдущим двум опциям, она не потерялась, и сервер заботливо её вам вывел. Но тут вот и фишка данной опции: если история "перехлёстывается" с содержимым открытого окна чата, то вам в окно выведутся только те фразы, которые прозвучали, когда вас реально не было, а не все 20 строчек и 10000 символов, прибитые гвоздями предыдущими опциями. + +## ::plugins::tclchat::options(use\_tkchat\_colors) + +Использовать встроенные цвета TkChat. Это не вам, дорогие начинающие пользователи. Это вот [им](http://wiki.tcl.tk/tkchat). + +--- + +Далее идут кнопки некоторых как встроенных, так и внешних плагинов, расширяющих функциональность Ткаббера. Кнопки внешних плагинов на самом деле расположены в своём месте (см. раздел Plugins данной статьи), но для удобства конфигурации настройки плагинов, относящихся к чату, выведены и сюда. Ниже я постараюсь вспомнить, какие из тех кнопок, которые я вижу у себя, относятся к встроенным плагинам. + +## Chatstate + +Настройки расширения, отвечающего за уведомление о состоянии окна разговора. + +### ::plugins::chatstate::options(enable) + +Включить рассылку уведомлений о состоянии окна разговора ([XEP-0085](http://www.xmpp.org/extensions/xep-0085.html)). Если вы включите эту опцию, то будете получать уведомления типа "собеседник пишет письмо турецкому султану" в верхней части окна. Таким образом вы знаете, что он не балду гоняет, не игнорит вас, а честно пишет ответ. Полезная опция. + +В настоящее время Ткаббер способен посылать только два состояния: `` и `` (на что уже пожаловались [тут](http://www.jabber.ru/bugzilla/show_bug.cgi?id=360)), однако понимает он все состояния. + +Имейте в виду, что в Ткаббере есть [аналогичная настройка](Настройки.md#Events), управляющая _другим механизмом_ реализации той же самой, в принципе, функциональности, но на основе устаревшего в настоящее время [расширения XMPP](http://www.xmpp.org/extensions/xep-0022.html). + +## Emoticons + +Обработка эмоциконок. Эмоциконки (или улыбки) это небольшие картинки, похожие на человеческое лицо, используемые для отображения эмоций. Могут быть введены мнемонически, например как :), или вставлены через меню. + +### ::plugins::emoticons::options(show\_emoticons) + +Показывать эмоциконки в виде картинок. + +### ::plugins::emoticons::options(theme) + +Если в каталоге для эмоциконок у вас есть несколько установленных наборов (подробнее читать тут), то в настройках появляется возможность выбрать один из этих наборов либо отключить показ картиночных смайликов. + +### ::plugins::emoticons::options(match\_whole\_word) + +Только целые слова превращать в эмоциконки (не части слов). Этот параметр установлен по умолчанию, а отвечает он за то, чтобы в картинку преобразовывался лишь полноценный смайлик, не прижатый к впереди идущему слову. + +### ::plugins::emoticons::options(handle\_lol) + +Отдельные очень улыбчивые личности любят писать в чатах смайлики с двойными, а то и тройными подбородками — :)))))) Эта опция приводит такие улыбки к нормальному виду и потом преобразует в нормальный графический смайл. + +## Events + +Настройки расширения, отвечающего за уведомление об обработке сообщений в окне разговора. + +### ::plugins::events::options(enable) + +Реализация устаревшего в настоящее время [XEP-0022](http://www.xmpp.org/extensions/xep-0022.html), которое было замещено другим механизмом, который управляется [соответствующей группой настроек](Настройки.md#Chatstate). + +Эту опцию имеет смысл держать включённой только если вы общаетесь с владельцами дремучих клиентов. + +![(!)](../images/Hammer.png) **Сделать:** хорошо бы выяснить что гейтуют и что не гейтуют из этого распространённые ICQ-гейты + +По умолчанию включена. + +## Highlight + +Настройки модуля выделения слов в сообщениях конференций. + +### ::plugins::highlight::options(enable\_highlighting) + +Включить модуль выделения слов. По умолчанию включён. + +### ::plugins::highlight::options(highlight\_nick) + +Выделять текущий псевдоним в сообщениях. Выше я рассказал про автодополнение ников, опция ::plugins::completion::options(completion\_expire). Там приводил пример о подсвечивании собственного ника, если кто-то его в чате пишет (например, обращаясь ко мне). Вот здесь оно и настраивается, то бишь, это подсвечивание можно и выключить. + +### ::plugins::highlight::options(highlight\_substrings) + +Подстроки, которые следует выделять в сообщениях. Ещё один полушпионский модуль, позволяет подсвечивать ключевые слова, указанные в поле. Разделителем является пробел, регистр надо учитывать. Введём для примера три слова, разделённых пробелами: **вот такой тест**. Теперь любое из этих слов, появившись в окне чата, будет подсвечено. Если попытаться подсвечивать не отдельные слова, а подстроку, содержащую пробелы (несколько слов), то возникают проблемы. Допустим, мы пытаемся указать Ткабберу, что подстрока ограничена кавычками (как для точного поиска в Гугле): **"вот такой тест"**. Теперь пишем в чате одно из этих слов — не подсвечивает. Пишем строку целиком, но без кавычек: **вот такой тест** — не подсвечивает. Пишем строку с кавычками: **"вот такой тест"** — подсвечивает. + +### ::plugins::highlight::options(highlight\_whole\_words) + +Выделять только целые слова. Если выключить эту опцию (а по умолчанию она включена), то подсвечиваться будут как целые слова, так и части слов, подпадающие под заданные вами паттерны. Например, продолжая начатый выше пример, напишем в чате слово "живот", имея в качестве ключевых слов **вот такой тест**. При включённой опции ничего не выделится, но если её отключить, то получим "жи**вот**" (кавычки здесь написаны лишь для отделения слова-примера от повествования). + +## Logging + +Параметры протоколирования. + +### ::logger::options(logdir) + +Директория, в которой сохраняются протоколы. Надо указать что-нибудь осмысленное. + +### ::logger::options(log\_chat) + +Сохранять протоколы персональных разговоров. По умолчанию включено. + +### ::logger::options(log\_groupchat) + +Сохранять протоколы конференций. По умолчанию включено. + +## MUC Ignoring + +Игнорирование групповых и приватных сообщений от выбранных посетителей многопользовательской конференции. + +### ::plugins::mucignore::options(transient\_rules) + +Если параметр установлен, то все изменения правил игнорирования будут действовать только до того, как Ткаббер закроется, и не будут восстановлены при следующем запуске. По умолчанию выключено, то есть, правила сохраняются. [Читать подробнее об игнорировании в конференциях](MUC_Ignore.md). + +## Stylecodes + +Обработка стилевых кодов. Стилевые коды — это специальные символы для выделения частей текста полужирным, курсивным или подчеркнутым начертанием и их комбинациями. + +### ::plugins::stylecodes::options(emphasize) + +Выделять сообщения со стилевыми кодами, используя разные шрифты. Про это вы уже, надеюсь, [прочитали](Начинающим.md#Некоторые_полезные_команды). + +### ::plugins::stylecodes::options(hide\_markup) + +Скрывать символы, задающие разметку стилевых кодов. Выделяет точно так же, как и в предыдущей опции, но при этом ещё и показывает сами управляющие коды, то есть, мы так и видим: **\*жирный текст\***. + +Эту опцию полезно включить тем, кому нравится использовать/видеть выделение стайлкодами, но кто так же достаточно часто пишет/видит текст, который вызывает "ложные срабатывания" движка, ответственного за "отлов" символов разметки, определяющих выделения. Например, наиболее известная проблема движка стайлкодов — срабатывание на именах каталогов Unix: `/usr/share/` отображается как `/usr_share_`; если же данная опция включена, вы будете видеть `/usr_/share/_`. + +С другой стороны, имейте в виду, что скрытые символы разметки стайлкодов не влияют на текст, который помещается в буфер обмена при копировании: если вы выделите описанный выше текст `/usr_share_` и затем вставите его куда-нибудь, то вставлен будет текст `/usr/share/`, а не `/usrshare`. + +## Vcard + +Параметры отображения полей vCard в окне разговора. Зайдя внутрь, вы выпадете в осадок. Там находится здоровенный список опций, позволяющих настроить внешний вид, а точнее, показ нужных вам полей vCard. Если вы хотите быть готовыми к любой, даже самой полной карточке, надо включить все поля. Если вы точно уверены, что никто из ваших собеседников не будет пользоваться телефоном ISDN, то можно соответствующее поле отключить. + +# Conference Info +Параметры модуля информации о конференциях, позволяющего видеть список участников конференции, закладка на которую находится в вашем списке контактов, во всплывающем окне, независимо от того, подключены Вы к конференции или нет. + +## ::plugins::conferenceinfo::options(autoask) + +Подключить данный модуль. По умолчанию он отключён. Надеюсь, понятно, зачем он нужен (см. чуть выше). Осторожнее с этой фичей: она гонит неслабый трафик. + +## ::plugins::conferenceinfo::options(interval) + +Интервал (в минутах) между запросами списка участников. Если вы мигрировали на новую версию Ткаббера с какой-нибудь старой, и у вас остались старые настройки в конфиге, проверьте интервал обновления. Старые настройки были в секундах, и если нынешний Ткаббер начнёт запрашивать списки с интервалом в 300 минут, пользы от такой опции мало :) + +## ::plugins::conferenceinfo::options(err\_interval) + +Интервал (в минутах) после ошибки в ответ на запрос списка участников. В старых настройках по умолчанию стояло 3600 (секунд), так что если вы переехали со старой версии Ткаббера, напишите в этом поле 60. + +# File Transfer +Параметры передачи файлов. Тема эта интересная, но сложноватая для новичка. Подробнее о пересылке файлов можно почитать в [этой статье](Пересылка_файлов__теория.md). + +## ::ft::options(download\_dir) + +Директория в которой по умолчанию сохраняются полученные файлы. + +Отнеситесь к ней с исключительным вниманием, так как в настоящее время Ткаббер не умеет спрашивать куда сохранить файл, который вы собираетесь принять, и нет никакого способа повлиять на это, кроме данной опции. + +## ::ft::options(default\_proto) + +Протокол передачи файлов по умолчанию. Здесь уже установлен Stream Initiation, и он обычно подходит для большинства соединений. Если у вас проблемы при передаче файлов, чтения вышеупомянутой статьи не избежать. + +--- + +Ниже идут кнопки, ведущие к настройкам конкретных протоколов. Настройки по умолчанию обычно работают. Детально о всех параметрах рассказано в статье, так что здесь мы ограничимся описаниями опций, взятыми из самих настроек. + +## HTTP + +Параметры HTTP-транспорта. + +### ::plugins::http::options(port) + +Порт для исходящей передачи файлов по HTTP (если равен 0, то выбирается автоматически). Применяется, когда файл посылается через NAT через пробрасываемый порт. По умолчанию стоит 0. + +### ::plugins::http::options(host) + +Объявлять указанное имя (или IP-адрес) для исходящей передачи файлов по HTTP. + +## Jidlink + +Настройки Jidlink. Jidlink — устаревший протокол, по-видимому, кроме Ткаббера нигде и не реализованный, но тем не менее может использоваться на связке Ткаббер-Ткаббер, если остальные варианты не работают. + +### ::jidlink::transport(allowed,dtcp-active) + +Разрешить использование Jidlink-транспорта dtcp-active. По умолчанию включён. + +### ::jidlink::transport(allowed,dtcp-passive) + +Разрешить использование Jidlink-транспорта dtcp-passive. По умолчанию выключён. + +### ::jidlink::transport(allowed,inband-bytestream) + +Разрешить использование Jidlink-транспорта inband-bytestream. По умолчанию включён. + +## Stream Initiation + +Параметры SI-транспорта. + +### ::si::socks5::initiator::options(enable\_mediated\_connection) + +Использовать соединение SOCKS5 через посредника, если он доступен. Включён. + +### ::si::socks5::initiator::options(proxy\_servers) + +Список прокси-серверов для передачи потока SOCKS5 (попытка использовать в качестве посредника будет предпринята для всех доступных серверов). Тут уже прописаны некоторые сервера. Если что-то идёт не так, можете попробовать указать свои. + +### ::si::transport(allowed,[http://jabber.org/protocol/bytestreams](http://jabber.org/protocol/bytestreams)) + +Разрешить использование SI-транспорта [http://jabber.org/protocol/bytestreams](http://jabber.org/protocol/bytestreams). Включён. + +### ::si::transport(allowed,[http://jabber.org/protocol/iqibb](http://jabber.org/protocol/iqibb)) + +Разрешить использование SI-транспорта [http://jabber.org/protocol/iqibb](http://jabber.org/protocol/iqibb). Тоже включён. + +### ::si::transport(allowed,[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb)) + +Разрешить использование SI-транспорта [http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb). Тоже включён. + +# GPGME +Параметры GPGME (цифровая подпись и шифрование). Для того, чтобы шифрование в Ткаббере заработало и этот пункт настроек появился у вас, необходимо [установить необходимые пакеты](http://tkabber.jabber.ru/gpg). Учтите, что шифрование в Ткаббере возможно только в Linux. [Читайте дополнительно по теме.](Ткаббер_ЧаВо/Глюки.md#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme) + +## ::ssj::options(one-passphrase) + +Использовать одну и ту же парольную фразу для подписи и шифрования сообщений. + +## ::ssj::options(sign-traffic) + +Подписывать исходящие сообщения и обновления присутствия с помощью [GPG](http://www.gnupg.org). + +## ::ssj::options(encrypt-traffic) + +Шифровать исходящие сообщения с помощью GPG, если возможно. + +## ::ssj::options(key) + +Использовать ключ с указанным идентификатором для подписи и дешифровки сообщений. Если у вас больше одного ключа, вы можете указать ID того, который хотите использовать по умолчанию. + +## ::ssj::options(display\_sig\_warnings) + +Показывать предупреждения в случае неудачи при проверке подписи. + +# Main Interface +Параметры основного интерфейса. + +## ::ifacetk::options(use\_tabbar) + +Использовать интерфейс с вкладками ("табами"). По умолчанию включён. После применения требуется рестарт. + +## ::ifacetk::options(tabs\_side) + +Сторона, с которой следует размещать заголовки вкладок в режиме с вкладками. По умолчанию стоит "Сверху". Остальные возможные варианты — "Снизу", "Слева", "Справа". + +## ::ifacetk::options(tab\_minwidth) + +Минимальная ширина кнопок заголовков вкладок в режиме со вкладками. По умолчанию стоит 90 пикселей. + +## ::ifacetk::options(tab\_maxwidth) + +Максимальная ширина кнопок заголовков вкладок в режиме со вкладками. По умолчанию стоит 120 пикселей. Одиночная вкладка всегда будет 120 пикселей по ширине. Две тоже, но когда они заполняют всю ширину окна, начинают сжиматься, пока их размер не достигает нижнего лимита. Как только он достигнут, Ткаббер начинает открывать новые вкладки в следующем ряду. + +## ::ifacetk::options(show\_toolbar) + +Показывать панель инструментов (то бишь панель с кнопками). По умолчанию включена. + +## ::ifacetk::options(show\_presencebar) + +Показывать панель присутствия/статуса. Это панель в нижней части окна Ткаббера, где слева расположена кнопка принудительной смены статуса, а справа от неё — поле для ввода описания статуса. После ввода описания не забывайте нажимать Enter в поле ввода или менять статус. + +## ::ifacetk::options(show\_statusbar) + +Показывать статусную строку. Это панелька, расположенная в самом низу. На первый взгляд, толку от неё мало, но на самом деле там мелькают полезные сообщения вроде уведомлений о коннекте ваших друзей, о смене их статуса и прочие. + +Там же появляется аббревиатура "SSL", если вы соединились с сервером, используя защиту канала ("STARTTLS" или "Старый SSL" в окне логина). Если аббревиатура нарисована чёрным цветом (или тем, что у вас выбрано вместо обычного цвета текста), Ткабберу удалось удостовериться в том, что сервер "настоящий" (то есть мы доверяем его сертификату), если цвет аббревиатуры — красный, то достоверность сертификата сервера проверить не удалось (подробнее об этих заморочках написано в [отдельной статье](Проверка_сертификата_сервера.md)). Одиночный щелчок мышью на этой аббревиатуре показывает диалог с информацией о сертификате сервера и алгоритме шифрования, используемом для защиты соединения. + +## ::ifacetk::options(raise\_new\_tab) + +Размещать новую вкладку поверх остальных. По умолчанию включено, и зря! Буквально через несколько минут активного общения начинает раздражать, что именно когда вы пишете кому-нибудь сообщение, появляется новая вкладка с окном разговора от другого приятеля, решившего с вами поболтать. Эта вкладка перехватывает фокус, и если вы не смотрите на экран, продолжаете вбивать остаток сообщения уже туда, и при удачном раскладе туда же его и отправляете. В общем, отключайте эту опцию сразу же. + +## ::ifacetk::options(message\_numbers\_in\_tabs) + +Показывать число непрочитанных сообщений в заголовках вкладок. По умолчанию включено. Очень удобно — сразу видно, сколько наболтали в каждой комнате, пока вас не было :) + +## ::ifacetk::options(update\_title\_delay) + +Задержка (в миллисекундах) между получением фокуса и обновлением заголовка окна или вкладки. По умолчанию стоит 600 мс. + +В ходе сеанса связи, когда окно Ткаббера неактивно, каждое новое сообщение вызвает изменение заголовка окна Ткаббера: пред полным JID'ом вашего соединения пишется количество непрочитанных сообщений в скобках, а так же за этим числом рисуется "звёздочка" (\*), если среди сообщений есть адресованные лично вам (или "хайлайты" в конференциях). После того, как вы активируете окно с Ткаббером, он отсчитывает указанное в данной опции количество миллисекунд, после чего сбрасывает заголовок окна в исходное состояние, которое оно имеет сразу после успешного соединения с сервером, убирая информацию о наличии непрочитанных сообщений. Если вы успеете в течение этого интервала времени переключиться в какое-либо другое окно, заголовок окна Ткаббера останется без изменений. + +Помимо обновления заголовка окна, эта настройка управляет индикацией в иконке панели системных уведомлений ("трея"), так как её состояние изменяется синхронно с заголовком окна и отображает ту же информацию, только другими средствами. + +![(!)](../images/Hammer.png) **Сделать:** изучить поведение этой настройки в случае многооконного интерфейса + +## ::ifacetk::options(show\_tearoffs) + +Использовать "отрывающиеся" меню, где это возможно. По умолчанию включено. "Оторвать" меню можно, нажав на пунктирную линию, расположенную в верхней части выпадающего меню. Это меню предстаёт в виде окошка, которое можно утащить в сторону и пользоваться им параллельно с общением. Удобно, когда вам необходимо многократно повторить одну и ту же операцию из меню, например, отправить несколько сообщений дня из "Инструментов администратора". + +## ::ifacetk::options(closebuttonaction) + +Действие, совершаемое при нажатии на кнопку закрытия окна. По умолчанию стоит "Закрыть Ткаббер", и это поведение ваш покорный слуга (и, к счастью, авторы программы тоже) находит правильным. Это уже извращённые умы придумали _сворачивать_ программу при нажатии на кнопку **Закрыть**. Впрочем, если вы уже привыкли к этой мелкой лжи, можете не отучиваться — Ткаббер предоставляет несколько вариантов сворачивания. + +## ::pixmaps::options(pixmaps\_theme) + +Тема пиктограмм Tkabber'а. Чтобы иметь возможность включить собственную тему, положите её в поддиректорию директории pixmaps, которая лежит рядом с файлом конфигурации (про то, где его искать, можно почитать [здесь]($__configdir.md)). А [здесь](Цветовые_темы_и_пиктограммы.md#Пиктограммы) можно разжиться пиктограммами, не включёнными в дистрибутив. + +## ::webbrowser + +Команда, которая будет выполнена при нажатии на URL в сообщении. Вместо '%s' будет подставлен URL (например, "galeon -n %s"). Иногда (особенно в Виндовс) у людей возникают проблемы с открытием линков в браузере. Читайте о них [здесь](Ткаббер_ЧаВо/Глюки.md#Не_работает_браузер_под_виндами) и [здесь](Ткаббер_ЧаВо/Глюки.md#При_клике_на_URLе_в_Ткаббере_запускается_две_Оперы_и_открывают_страницу_два_раза). + +--- + +## Systray + +Параметры значка области системных уведомлений ("трея", системного лотка). + +Эта группа настроек появляется в интерфейсе настроек только в том случае, если Ткабберу доступно соответствующее расширение Tk, реализующее работу с треем: в Windows это пакет [Winico](http://sourceforge.net/projects/tktable/), а в системах на базе X Window используется минимум два разных пакета: Tk\_Theme и tktray. + +Настройки трея, если доступны, делятся, соответственно, на общие и уникальные для каждого конкретного расширения: + +### Общие настройки + +#### ::ifacetk::systray::options(display\_status) + +Показывать всплывающее статусное окно ("тултип") над иконкой в трее, когда главное окно свернуто. По умолчанию выключено. + +Следует отметить, что показ статусного окна в Windows, очевидно сломан: окно с иконкой докладывает кривую информацию о своём местоположении на экране, и статусное окно поэтому рисуется неподалёку от верхнего левого угла десктопа. Побороть это можно [заклинаниями в файле конфигурации](Нетривиальные_настройки.md#Настройка_положения_окна_уведомлений_в_Windows). + +#### ::ifacetk::systray::options(blink) + +Значок в системном лотке мигает, если есть непрочитанные сообщения. Тоже выключено по умолчанию. Оно и понятно: мигание мельтешит в правом нижнем углу глаза и раздражает, хотя вам может так и не казаться. В результате расшатывается нервная система, ухудшается сон и возможны случаи лунатизма и энуреза. Тем, кто уже болен, резкое выключение мигания вредит ещё больше, так что в этом случае имеет смысл включить его. + +### Настройки расширений работы с треем + +#### ::plugins::taskbar::options(enable) + +Использовать значок в системном лотке Windows. + +Доступна, если иконка в трее управляется пакетом Winico. + +#### ::plugins::tktray::options(enable) + +Включить freedesktop system tray icon. + +Появляется, если иконка в трее управляется пакетом tktray. + +![(!)](../images/Hammer.png) **Сделать:** то же для Tk\_Theme + +# IQ +Параметры Info/Query (информационные и служебные запросы). Многие из этих опций трафикогонные. Проконсультируйтесь со статьёй [Low traffic HOWTO\#Настройки Ткаббера](Low_traffic_HOWTO.md#Настройки_Ткаббера) (подраздел "Ответы на IQ-запросы"), чтобы быть в курсе, какие можно безболезненно отключить, а какие лучше не трогать. + +## ::iq::options(show\_iq\_requests) + +Показывать IQ-запросы в статусной строке. По умолчанию включено. Если у вас отключена сама статусная строка (в Main Interface), то держать включённой эту опцию не имеет смысла. + +## ::iq::options(shorten\_iq\_namespaces) + +Опускать "http://jabber.org/protocol/" при показе запросов в статусной строке. По умолчанию включено. + +## ::plugins::options(reply\_iq\_last) + +Отвечать на запросы времени бездействия (jabber:iq:last). Первые три опции включены по умолчанию. + +## ::plugins::ping::options(ping) + +Пинговать сервер запросами urn:xmpp:ping. По умолчанию выключено. + +## ::plugins::ping::options(timeout) + +Переподключаться к серверу, если он не ответил (возможно ошибкой) на пинг (urn:xmpp:ping) за указанный временной интервал (в секундах). По умолчанию 30 секунд. + +## ::plugins::ping::options(pong) + +Отвечать на пинг (urn:xmpp:ping). По умолчанию включено. + +## ::plugins::options(reply\_iq\_time) + +Отвечать на запросы времени (jabber:iq:time). Тоже включено. В Ткаббере реализованы команды запроса времени, версии и т. п. В данном случае это "/time nick". Эта опция разрешает отвечать на подобные запросы. + +## ::plugins::options(reply\_xmpp\_time) + +Reply to entity time (urn:xmpp:time) requests. + +## ::plugins::options(reply\_iq\_version) + +Отвечать на запросы версии (jabber:iq:version). Отвечает на запросы типа "/version nick". + +## ::plugins::options(reply\_iq\_os\_version) + +Включать информацию об операционной системе в ответ на запрос версии (jabber:iq:version). Позволяет при ответе на запрос о версии клиента отдавать информацию и о вашей операционке. Если вы хотите сообщать версию Ткаббера, но не выдавать инфу о системе, отключите её. + +## ::muc::options(report\_muc\_rooms) + +Отвечать на запрос disco\#items о MUC-конференциях, в которых Вы принимаете участие. + +# Login +Параметры подключения. Если вы уже залогинены, некоторые поля будут заполненными вашими данными для логина, причём рядом с кнопкой "Состояние" будет написано "Параметр установлен, но не сохранён для следующих сессий". Это нормально. Кстати, если вы не планируете устраивать мультилогин или создавать несколько профилей, можете сохранить эти значения для будущих сессий (кроме пароля, ибо файл custom.tcl, куда сохраняются все настройки, никак не шифруется; если вы хотите настроить безопасный автологин без ввода пароля, почитайте [здесь](Плагины.md#CryptoConfig)). Многие параметры логина рассмативаются в статьях [Начинающим](Начинающим.md) и [Между офлайном и онлайном](Между_офлайном_и_онлайном.md), так что здесь мы отвлекаться на их описание не будем. + +## ::::loginconf(user) + +Имя пользователя. + +## ::::loginconf(server) + +Имя сервера. + +## ::::loginconf(password) + +Пароль. + +## ::::loginconf(resource) + +[Ресурс](Ткаббер_ЧаВо/Разное.md#Ресурс). + +## ::::loginconf(priority) + +[Приоритет](Ткаббер_ЧаВо/Разное.md#Приоритет). + +## ::::loginconf(connect\_forever) + +Пытаться подключаться бесконечно много раз. + +## ::::loginconf(allowauthplain) + +Разрешить механизмы аутентификации, использующие открытый текст (при этом пароль передается незашифрованным). + +Если вы не знаете, что делать с этой опцией, отключите её. + +Остальным будет полезно знать две вещи: + +* Вменяемые реализации серверов разрешают клиенту использовать данный механизм аутентификации только если до её начала канал был защищён при помощи TLS (SSL). +* Включение на сервере нестандартного способа аутентификации пользователей (например, при помощи внешней программы или LDAP) _требует_ использовать механизм аутентификации открытым текстом (при этом в случае с ejabberd предыдущий пункт перестаёт выполняться, и если вы развёртываете сервер с нестанратным подходом к аутентификации пользователей, задумайтесь об обязательном внедрении TLS). + +## ::::loginconf(allowgoogletoken) + +Разрешить использование механизма аутентификации X-GOOGLE-TOKEN. + +Имеет смысл только при подключении к серверам Google Talk и для своей работы требует возможности подключения к серверам Google Talk по протоколу HTTPS, что, в свою очередь, требует доступности для Ткаббера пакета **tls**. + +Подключение к Google Talk — особая, сложная тема с некоторым количеством подводных камней, поэтому ей посвящена [отдельная статья](Google_Talk.md). + +## ::::loginconf(usesasl) + +Использовать SASL для аутентификации. + +Держите включённой. Отключать её следует только в особо сложных случаях, например, при соединениях с очень древними серверами (например, jabberd1) и то, только если с включённой опцией Ткаббер отказывается соединяться, выдавая ошибку "Server did not provide SASL feature". + +## ::::loginconf(stream\_options) + +Настройки XMPP-потока при подключении к серверу. + +## ::::loginconf(sslcertfile) + +Файл сертификата SSL (необязательный параметр). + +## ::::loginconf(sslcacertstore) + +Файл или директория центра сертификации (CA) SSL (необязательный параметр). + +## ::::loginconf(sslkeyfile) + +Файл секретного ключа SSL (необязательный параметр). + +## ::::loginconf(proxy) + +Тип прокси для подключения. + +## ::::loginconf(proxyhost) + +Адрес прокси-сервера. По умолчанию указан localhost. + +## ::::loginconf(proxyport) + +Порт для подключения к прокси-серверу. Значение по умолчанию — 3128. + +## ::::loginconf(proxyusername) + +Имя пользователя для подключения к прокси-серверу. + +## ::::loginconf(proxypassword) + +Пароль для подключения к прокси-серверу. + +## ::::loginconf(proxyuseragent) + +Строка User-Agent. + +## ::::loginconf(usealtserver) + +Использовать явно указанные адрес сервера и порт для подключения. + +## ::::loginconf(altserver) + +Имя альтернативного сервера или его IP-адрес. + +## ::::loginconf(altport) + +Порт для подключения к альтернативному серверу. + +## ::::loginconf(replace\_opened) + +Закрыть открытые соединения. Для перелогина. Если вы планируете работать в одном окне Ткаббера с двумя или более аккаунтами, отключите эту опцию. Если же нет, лучше включите, чтобы не плодить открытые соединения в случае перелогина. + +## ::::loginconf(usehttppoll) + +Использовать HTTP-подключение. + +## ::::loginconf(pollurl) + +URL для подключения (опроса). + +## ::::loginconf(usepollkeys) + +Использовать ключи безопасности HTTP-подключения (рекомендуется). + +## ::::loginconf(numberofpollkeys) + +Число ключей безопасности, после передачи серверу которых генерируется новая последовательность ключей. + +## ::::loginconf(polltimeout) + +Таймаут ожидания ответа на HTTP-запрос (если равен нулю, Ткаббер будет ждать неограниченно долго). + +## ::::loginconf(pollmin) + +Минимальный интервал между HTTP-запросами. + +## ::::loginconf(pollmax) + +Максимальный интервал между HTTP-запросами. + +# Messages +Параметры отображения сообщений и новостей. + +## ::plugins::headlines::options(cache) + +Сохранять новости при выходе и восстанавливать при старте. Пользуйтесь этой опцией, учитывая следующее. Если у вас много фидов и если вы чистите окно от устаревших сообщений редко, то при включённом сохранении сообщения потихоньку накапливаются, и стартующий Ткаббер начинает грузиться заметно дольше. Впрочем, опция полезна, так как не всегда есть время прочитать какую-то новость прямо сейчас, до закрытия Ткаббера. При работе с новостями может оказаться удобным внешний плагин [Rsssaver](Плагины.md#Rsssaver), сохраняющий новости в файл каждые N новых сообщений. Стандартное поведение Ткаббера — сохранять их только при выходе; при аварийном завершении программы все новые сообщения, пришедшие за этот сеанс, теряются. + +## ::plugins::headlines::options(multiple) + +Показывать новости в одном/нескольких окнах. Позволяет выбрать, использовать ли одно окно для всех новостей или же группировать новости по джидам фидов в отдельных окнах. + +## ::plugins::headlines::options(display\_subject\_only) + +Не показывать описание новости в виде ветви дерева (только всплывающее окно). + +## ::plugins::headlines::options(timestamp\_format) + +Формат вывода даты/времени в окне новостей. Для того, чтобы не показывать дату/время совсем, установите эту опцию в пустую строку. + +## ::plugins::headlines::options(show\_balloons) + +Показывать всплывающие окна (тултипы) с текстом новости над заголовками сообщений. + +## ::plugins::offline::options(flexible\_retrieval) + +Получать офлайновые сообщения с использованием протокола типа POP3. + +# Plugins +Параметры расширений. Содержимое этого раздела настроек сильно зависит от того, какие плагины у вас установлены. Возможно, имеет смысл описать настройки всех имеющихся плагинов, но статья и так уже слишком большая, так что ограничимся лишь рекомендацией вникать в строчки описания и действовать метдом тыка, если вникнуть сложно. В ближайшем будущем статья [Плагины](Плагины.md) подвергнется доработке, и скорее всего, опции настройки каждого плагина будут помещены туда. + +# Privacy +Настройки блокировки сообщений (правил обеспечения приватности XMPP). + +## ::filters::options(enable) + +Включить поддержку модуля mod\_filter из jabberd 1.4 (устаревшие). По умолчанию эта поддержка выключена. То и понятно, зачем по умолчанию грузить поддержку устаревшего хлама? Если вы уверены, что ваш сервер — именно jabberd 1.4, возможно, эта опция вам понадобится. + +## ::privacy::options(activate\_at\_startup) + +Активировать видимый/невидимый/игнорируемый списки (и список конференций) перед тем, как объявлять о своём присутствии в сети. По умолчанию эта опция включена, но вам может понадобиться отключить её. Подробнее об одном из таких случаев читайте в статье [Блокировка MRIM-спама](Блокировка_MRIM-спама.md). + +## MUC Ignoring + +Игнорирование групповых и приватных сообщений от выбранных посетителей многопользовательской конференции. В этом подразделе имеется всего одна опция: + +### ::plugins::mucignore::options(transient\_rules) + +Если параметр установлен, то все изменения правил игнорирования будут действовать только до того, как Tkabber закроется, и не будут восстановлены при следующем запуске. По умолчанию выключено, так что Ткаббер должен запоминать ваших доставал. Статья по теме — [MUC Ignore](MUC_Ignore.md). + +# Remote Control +Настройки [удалённого управления (XEP-0146)](http://www.xmpp.org/extensions/xep-0146.html). Под удалённым управлением понимается возможность выполнять из одного Jabber-клиента некоторые фиксированные действия по управлению другим удалённым Jabber-клиентом, а точнее — одним из активных подключений к серверу на нём. Стандартные команды включают в себя, в числе прочих: + +* Отключение сессии; +* Выход из всех активных групповых чатов (чтобы позволить зайти в них со своим зарегистрированным псевдонимом из своей текущей сессии). +* Пересылка непрочитанных на удалённом клиенте сообщений вашему клиенту. + +В дополнение к этому встроенному средству вы можете поставить внешние плагины [Remote Settings](Плагины.md#Remote_Settings) и [Remote Commands](Плагины.md#Remote_Commands). Подробнее почитать на эту тему вы можете в статье и [How\_to\_add\_a\_new\_remote\_command](../en/How_to_add_a_new_remote_command.md) (англ.; конкретные примеры, иллюстрирующие плагин Remote Commands). ![(!)](../images/Hammer.png) **Сделать:** поправить эту ссылку, чтобы выглядела как внутренняя ссылка вики, а саму статью неплохо бы в будущем перевести на русский. + +Имейте в виду, что это именно управление клиентом в контексте протокола XMPP; оно не имеет ничего общего с управлением _программой Tkabber_ при помощи средств операционной системы и её программного окружения (такого, например, про которое написано в статье [Удалённое управление с помощью send](Удалённое_управление_с_помощью_send.md)). + +## ::remote::options(enable) + +Включить удалённое управление. По умолчанию включено. + +## ::remote::options(accept\_from\_myjid) + +Принимать подключение с моего собственного JID. Тоже включено. + +## ::remote::options(accept\_list) + +Принимать подключение с перечисленных JID'ов. В этом поле можно перечислить JID'ы, которым также разрешено удалённо управлять вашим Ткаббером. Разделять их надо пробелом. + +# Roster +Параметры контактов. + +## ::ifacetk::roster::use\_aliases + +Использовать aliases и показывать нескольких пользователей как один элемент контактов. Представьте себе, что у вас в ростере болтается два пользователя, сидящих на одном джиде, но с разными ресурсами. С отключённой опцией они будут видны как два отдельных контакта. Если же опция включена (а по умолчанию она включена), то оба эти контакта соберутся в группу со стрелочкой и будут выглядеть как один пользователь. При нажатии на стрелку группа развернётся, и вы увидите все подключения этого пользователя. + +## ::ifacetk::roster::show\_only\_online + +Показывать в окне контактов только подключённые контакты. По умолчанию опция выключена, но в реальной жизни бывает удобнее включить показ только контактов, находящихся в онлайне. + +На панели инструментов имеется кнопка переключения списка контактов в режим показа только активных контактов и обратно. Этот переключатель также доступен в виде опции главного меню: **Tkabber → Контакты → Показываются только активные пользователи'**. + +Если активен режим показа только активных пользователей в списке контактов, его можно отменять для отдельных групп списка контактов, включив в контекстном меню интересующей группы переключатель **Показывать неподключённые контакты**. + +Можно относительно легко навесить переключение обсуждаемого режима на комбинацию клавиш, об этом рассказано [тут](Нетривиальные_настройки.md#Хоткей_для_переключения_между_режимами_ростера_все_и_только_онлайн). + +Имейте в виду, что для облегчения поиска нужных контактов в списке можно применять и другие методы: + +* Вдумчивое распределение контактов по группам (с учётом того что любой контакт может одновременно входить в произвольное количество групп, а группы могут быть вложенными). +* Использование фильтрации списка контактов. + +![(!)](../images/Hammer.png) **Сделать:** ссылки на указанные фичи + +## ::ifacetk::roster::show\_transport\_icons + +Использовать оригинальные пиктограммы для транспортов/служб в окне контактов. По умолчанию выключено. Включение этой и следующей настройек несколько разнообразит ваш ростер графически, если у вас есть контакты из других систем (аська, яху и т. д.) Иконки транспортов и ваших друзей, не приобщённых к Джабберу, будут выглядеть как родные, что позволит сразу отличать "иноземцев". + +## ::ifacetk::roster::show\_transport\_user\_icons + +Использовать оригинальные пиктограммы для контактов, подключённых через транспорты/службы, в окне контактов. По умолчанию тоже выключено. + +## ::ifacetk::roster::options(nested) + +Отображать вложенные группы в контактах. По умолчанию выключено, а зря — это очень удобная для упорядочивания ростера вещь. Проще всего объяснить это на примере. Например, у нас кроме обычных друзей Андрея и Юли, которых сложно куда-то отнести, есть друзья детства Вася, Петя и Алёша, есть друзья по универу Коля, Лена и Наташа, и есть кореши Вован и Жора, с которыми мы постоянно рубимся в "кваку". Редактируя контакты друзей, можно прописать для них соответственно группы **Друзья**, **Друзья::Друзья детства**, **Друзья::Универ**, **Друзья::Quake**. Причём можно пойти дальше и университетских друзей разбросать по курсам: **Друзья::Универ::Однокурсники** **Друзья::Универ::Остальные** В результате в ростере появится примерно такое: + + **Друзья** + Андрей + Юля + **Друзья детства** + Вася + Петя + Алёша + **Универ** + **Однокурсники** + Коля + **Остальные** + Лена + Наташа + **Quake** + Вован + Жора + +## ::ifacetk::roster::options(nested\_delimiter) + +Разделитель вложенных групп по умолчанию. По умолчанию разделителем является двойное двоеточие, но вы можете указать свой. Не забудьте после смены разделителя отредактировать все контакты, входившие во вложенные группы. + +## ::ifacetk::roster::options(show\_own\_resources) + +Показывать в контактах собственные ресурсы. Если вы сидите в Джаббере с дома и с работы, используя, само собой, разные ресурсы, то может оказаться полезным наблюдать другие свои подключения. При включении этой опции в ростере в группе "Мои ресурсы" появляется как минимум ваш текущий единственный ресурс, а если их больше одного, то и остальные. Это полезно для отправки самому себе из дома на работу какой-нибудь ссылки или мудрой мысли, пришедшей спросонья, на случай, если в утреннем автобусе вас из неё вытрясет немилосердный водитель. + +## ::ifacetk::roster::options(chats\_group) + +Добавлять в контакты группу открытых разговоров. Как должно быть ясно из названия, эта опция добавит в ваш ростер группу, состоящую из всех открытых вами на данный момент чатов, будь то конференции, приваты конференций или чаты с пользователями из ростера. Польза от этой опции сомнительна, поэтому по умолчанию она установлена в false. + +## ::ifacetk::roster::options(use\_filter) + +Использовать фильтр контактов. По умолчанию выключен. При его включении в нижней части ростера, над кнопкой смены состояний, появляется поле для ввода фильтра. Фильтром может быть любая последовательность символов. + +Фильтрация работает по мере ввода. Например, если мы напишем туда букву "а" (русскую), то из вышеупомнутых друзей в ростере останутся Андрей, Вася, Алёша, Лена, Наташа, Вован и Жора. Добавив к этой букве "н", получим совсем маленький ростер, состоящий из Андрея и Вована. + +Нажатие клавиши Escape очищает поле ввода, возвращая список контактов в исходное состояние. + +## ::ifacetk::roster::options(match\_jids) + +Подбирать не только псевдоним, но и JID в фильтре контактов. Добавляет в фильтр возможность поиска и по JID'ам, а не только по именам контактов. По умолчанию выключено. + +## ::ifacetk::roster::options(free\_drop) + +При перетаскивании контакта из одной группы контактов в другую, его можно отпустить не только над названием группы, но и над любым контактом в этой группе. Если вы не знали, пользователей можно сортировать по группам обычным Drag'n'Drop'ом. Назначение этой опции, думаю, понятно. По умолчанию включено. + +## ::ifacetk::roster::options(show\_subscription) + +Показывать тип подписки на присутствие во всплывающем окне в контактах. По умолчанию выключено. Тип подписки может быть "from" (контакт вас авторизовал, а вы его нет), "to" (наоборот) и "both" (вы оба друг друга авторизовали). Всплывающее окно, или тултип, появляется, если навести мышью на контакт. + +## ::ifacetk::roster::options(show\_conference\_user\_info) + +Показывать детальную информацию об участниках конференции во всплывающем окне, соответствующем конференции, в контактах. Тоже по умолчанию выключено. Если включить, то при наведении мыши на закладку конференции в ростере появляется тултип со списком участников этой конфы, причём неважно, находитесь вы сами в ней или нет. Для того, чтобы эта информация появилась, необходимо включить опцию [::plugins::conferenceinfo::options(autoask)](Настройки.md#pluginsconferenceinfooptionsautoask), описанную выше. + +# Sound +Настройки звука. + +# State +Настройки сохранения состояния Ткаббера. + +# Warnings +Параметры отображения предупреждений. + +## ::tls\_warnings + +Показывать предупреждения SSL. По умолчанию включено. + +Если эта опция включена, при каждой попытке защитить соединение с сервером при помощи протокола TLS (SSL), в ходе которой не удаётся убедиться в том, что сервер "настоящий" (то есть мы не доверяем представленному им сертификату), Ткаббер будет показывать предупреждающий диалог, в котором будет указана причина проблемы и подробная информация о сертификате сервера. В данном диалоге Ткаббер предложит отказаться от соединения (действие по умолчанию) или продолжить его на ваш страх и риск. + +Ваше отношение к этой опции должно основываться на том уровне защиты, который вам нужен от протокола TLS: если вам достаточно того, что TLS будет шифровать трафик между вами и сервером, а проверка подлинности сервера вас не волнует настолько чтобы повозиться с организацией доверия к этому серверу, можете данную опцию отключить чтобы избавиться от лишних действий при каждом подключении. В противном случае изучайте [эту статью](Проверка_сертификата_сервера.md). + + Index: wiki/ru/Начинающим.md ================================================================== --- wiki/ru/Начинающим.md +++ wiki/ru/Начинающим.md @@ -1,609 +1,286 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Начинающим/index.html) + # Начинающим Материал из Tkabber Wiki ## Содержание * [1 Установка и быстрый старт](#Установка_и_быстрый_старт) - * [1.1 Окно логина](#Окно_логина) - * [1.2 Создание нового аккаунта](#Создание_нового_аккаунта) - * [1.3 Дискавери. Первые шаги](#Дискавери._Первые_шаги) - * [1.4 Добавление контактов в ростер](#Добавление_контактов_в_ростер) - * [1.5 Некоторые полезные команды](#Некоторые_полезные_команды) - * [1.6 Дискавери. Добавляем контакты из:](#Дискавери._Добавляем_контакты_из) - * [1.6.1 ICQ](#ICQ) - * [1.6.2 IRC](#IRC) - * [1.6.3 RSS](#RSS) - * [1.6.4 Дополнительное чтение по теме](#Дополнительное_чтение_по_теме) + * [1.1 Окно логина](#Окно_логина) + * [1.2 Создание нового аккаунта](#Создание_нового_аккаунта) + * [1.3 Дискавери. Первые шаги](#Дискавери._Первые_шаги) + * [1.4 Добавление контактов в ростер](#Добавление_контактов_в_ростер) + * [1.5 Некоторые полезные команды](#Некоторые_полезные_команды) + * [1.6 Дискавери. Добавляем контакты из:](#Дискавери._Добавляем_контакты_из) + * [1.6.1 ICQ](#ICQ) + * [1.6.2 IRC](#IRC) + * [1.6.3 RSS](#RSS) + * [1.6.3 Частые вопросы по RSS](#Частые_вопросы_по_RSS) + * [1.6.4 Дополнительное чтение по теме](#Дополнительное_чтение_по_теме) * [2 Локализация Ткаббера](#Локализация_Ткаббера) * [3 Настройка Ткаббера](#Настройка_Ткаббера) -## Установка и быстрый старт -Выбор [дистрибутива](http://tkabber.jabber.ru/download) зависит от операционной -системы, в которой вы работаете. Инсталляция Ткаббера в среде Linux подробно -[описана](http://tkabber.jabber.ru/tuto-install-tkabber) на сайте -[http://tkabber.jabber.ru](http://tkabber.jabber.ru) и проблем вызвать не -должна. Под Windows инсталляция тоже проходит гладко. - -> _Если вы только собираетесь познакомиться с Ткаббером, пожалуйста, **не - берите старые и "левые" версии** (из серии "друг принёс на болванке" или "в - нашей локалке вот такую советуют") — если у вас возникнут с ней проблемы, - шансы получить помощь "из первых рук" (от разработчиков и активных - пользователей) у вас резко уменьшатся: скорее всего вам предложат либо - поставить текущую официальную версию, либо пойти поговорить с авторами вашей - "левой" версии._ - -Поэтому скачайте текущую стабильную версию подходящего вам дистрибутива -Ткаббера с [официального сайта](http://tkabber.jabber.ru/download), установите -его и переходите к процессу запуска, описанному ниже. - -Текущей стабильной версией является 0.11.1. - -**Примечание:** Ткаббер представлен несколькими "дистрибутивами" — то есть -различными "упаковками" одного и того же, по-сути, содержимого, — что создаёт -определённые проблемы для начинающих, которые встают перед выбором. Чтобы -помочь вам с _осознанным_ выбором, мы написали специальную -[**статью про дистрибутивы Ткаббера**](Дистрибутивы__которые_мы_выбираем.md). -К сожалению, она -получилась большой и сложной, поэтому, если вы рвётесь в бой и хотите "прямо -сейчас" запустить Ткаббер, рискнём предложить простой расклад: - -* Если у вас Windows, возьмите [старпак](http://tkabber.jabber.ru/starpack) - (один файл, не требует установки) или - [ткаббер-пак](http://tkabber.jabber.ru/tkabber-pack) (инсталлятор "всё в - одном"). -* Если у вас Unix, поищите готовый пакет под свою систему. - * Если готового пакета нет, вашим Unix'ом является Linux, - * ...и это [Debian](http://www.debian.org), возьмите _всё, что нужно,_ - [отсюда](http://people.debian.org/~sgolovan/debian/); - * ...и это что-то другое, попробуйте - [старпак](http://tkabber.jabber.ru/tkabber-starpack) (учтите, что - [последний старпак под линукс](http://tkabber.jabber.ru/tkabber-starpack/0.10) - выпускался в бытность версии 0.10, то есть, он весьма замшелый, но на попробовать - сойдёт) или ставьте руками согласно [этой таблице](http://tkabber.jabber.ru/dependencies). - -### Окно логина - -Допустим, пакет установлен и запущен. Появляется небольшой splash-screen с -именами авторов проекта и прогресс-баром, показывающим, как идёт загрузка. -Затем открываются главное окно программы и окно логина. В окне логина имеется -несколько вкладок, изрядно загруженных информацией, но на самом деле нам нужны -далеко не все опции. Рассмотрим все вкладки по порядку. - -* **Учётная запись** - * _Пользователь:_ Здесь пишем желаемый ник (к примеру, testirovanie). - * _Сервер:_ Сервер, на котором вы хотите создать учётную запись. Выбор его - для новичка — нетривиальная задача. Если вы хотите зарегистрироваться на - одном из серверов [этого списка](http://www.jabber.org/user/publicservers.shtml), посмотрите, есть - ли на нём гейты — "ворота" в мир ICQ, MSN, Yahoo, почтовые гейты, - RSS-feed'ы. Вам ведь наверняка захочется использовать возможности - протокола Jabber на всю катушку. Также следует обратить внимание на - страну, в которой этот сервер работает. Если вы не знаете немецкого языка, - регистрироваться на немецком сервере — не лучший шаг, если есть другие с - такими же сервисами. Впрочем, может оказаться, что вы хотите - зарегистрироваться на jabber-сервере вашей фирмы, университета или - интернет-провайдера. Тогда всё проще — вводите его имя, и все дела. - * _Пароль:_ тут всё должно быть ясно — латинские буквы верхнего и нижнего - регистров и цифры. Идеальный вариант — не менее 6 символов, буквы разных - регистров и цифры вперемешку, что-нибудь вроде _Xjh7W9bV_. Конечно, при - коннекте через защищённое соединение (SSL) так изголяться не обязательно, - но лучше не использовать английские слова, а писать что-нибудь - невразумительное, опять же, добавляя цифры и играя с регистром: - _92fLuMpIk29_. Такой пароль сравнительно легко запомнить и не очень - обременительно набирать, но он гораздо надёжнее, чем _vasyarybkin_ или - _sunlight_. - * _Использовать хэш. пароль:_ Отметьте эту галочку обязательно, чтобы по - крайней мере начинающие кул-хацкеры ваш пароль не прочитали. Лишняя - безопасность ещё никому не вредила, тем более, что кроме нажатия этой - галки делать больше ничего не надо. - * _Ресурс и Приоритет:_ Я изменил ресурс, но вы оставьте всё как есть. В - двух словах о ресурсе: можно логиниться к одной и той же учётной записи с - разных клиентов и даже машин, но при этом нужно, чтобы каждый раз был - указан новый ресурс. Сюда можно писать название клиента (Psi, Tkabber, - Bombus — обычно своё имя выставляет сам клиент), ваше местоположение - (Home, Work) и т.д. Приоритет тоже становится нужен, когда запущено - несколько клиентов. Подробнее об этом мы расскажем в другой статье. - -![Окно логина, вкладка "Учётная запись"](../images/Tkabber-Login-01-Credentials.png) - -* **Соединение** - * _Порт для подключения:_ Должен стоять 5222. Изменять его не надо. - * _Подключиться через альтернативный сервер:_ Пока что тоже трогать ничего - не надо. Эта опция может понадобиться в определённых случаях, но не - сейчас. - * _Закрыть открытые соединения:_ Тут можно и отметить на будущее, чтобы при - перелогине открытые соединения закрывались и не мешались. - -![Окно логина, вкладка "Соединение"](../images/Tkabber-Login-02-Connection.png) - -* **SSL** - * _Использовать SSL:_ Это безусловно надо отметить, вы ведь не хотите, чтобы - ваши разговоры подслушивались, а пароли перехватывались? - * _STARTTLS:_ Тип безопасного соединения. Сначала пробуйте его. - * _Legacy SSL:_ Устаревшее SSL-соединение. В Ткаббере присутствует для - совместимости со старыми серверами, на которых нет поддержки STARTTLS. - Если и через Legacy SSL законнектиться не удаётся, отключите "Использовать - SSL" — должно заработать. _Работать без SSL — крайняя мера, и в этом - случае нужно обязательно отметить галочку "Использовать хэш. пароль" на - вкладке "Учётная запись" — это будет единственная защита вашего пароля. - Если же вдруг выяснится, что сервер не поддерживает шифрование паролей, мы - искренне советуем забыть имя этого сервера и выбрать другой, благо их - полно._ - * _SSL порт:_ Должен стоять 5223. - -![Окно логина, вкладка "SSL"](../images/Tkabber-Login-03-Authentication.png) - -![Окно логина, вкладка "Аутентификация"](../images/Tkabber-Login-04-Stream-features.png) - -![(!)](../images/Hammer.png) **Сделать:** rearrange - -* **Прокси:** Если вы находитесь за файерволлом (например, в сети университета - или на работе) и не можете законнектиться напрямую, включите опцию - "Использовать прокси" и пропишите параметры вашего прокси-сервера: адрес, - порт, имя пользователя и пароль. Если эти данные вам не известны, можете - узнать их у вашего системного администратора. - -![Окно логина, вкладка "Прокси"](../images/Tkabber-Login-06-Proxy-Server.png) - -* **HTTP-подключение:** Если вдруг все остальные методы не сработали, - попробуйте отметить эту галочку. Но скорее всего вам этой опцией пользоваться - не придётся. - -![Окно логина, вкладка "HTTP-подключение"](../images/Tkabber-Login-05-HTTP-Polling.png) - -### Создание нового аккаунта - -Как видите, заполнять пришлось лишь самую первую вкладку. Жмём кнопку -соединения. Если вы запускаете Ткаббер первый раз в жизни, аккаунта у вас на -сервере нет. Программа, однако, попытается залогиниться, используя введённые -вами пользовательское имя и пароль, но, не найдя на сервере учётной записи, -предложит вам создать новую. Соглашайтесь, и через секунду ваш аккаунт будет -создан. Но может оказаться и так, что учётная запись с таким именем на этом -сервере уже существует. В этом случае Ткаббер снова выведет окошко с -предупреждением об ошибке авторизации. Тогда нужно ответить "Нет", а затем -попытаться залогиниться снова, придумав новый ник, либо попробовать другой -сервер, где, возможно, этот ник ещё не занят. - -![Сообщение сервера об ошибке авторизации и одновременно предложение создать новый аккаунт](../images/Tkabber-New-Account-Creation-Query.png) - -Если всё в порядке, вы получаете сообщение от сервера "Добро пожаловать" (не -обязательно именно такое, и не факт, что оно вообще будет - всё зависит от -настроек каждого конкретного сервера, но скорее всего вас как-то известят об -успешной регистрации). Впрочем, на сервере jabber.ru по неизвестной причине это -сообщение выводится даже тогда, когда вы пытаетесь зарегистрировать учётную -запись с уже существующим именем. - -![Сообщение сервера об успешной регистрации нового аккаунта](../images/Welcome_ru.png) - -### Дискавери. Первые шаги - -Допустим, новый аккаунт вы создали, но разговаривать пока не с кем — знакомых в -мире Jabber у вас нет. Что ж, пойдём их искать. В верхней части окна программы -имеется панель инструментов (тулбар), на которой есть несколько кнопок. Вторая -слева — в виде земного шара — это Обзор служб, ваш провожатый по серверу. - -![Меню и панель инструментов](../images/Tkabber-Toolbar.png) - -Нажав её, вы увидите окно, отображающее какой-то непонятный древовидный список. -Нас интересуют самые нижние пункты списка, написанные шрифтом чёрного цвета. -Поищите среди них что-то вроде conference.jabber.ru и дважды кликните на этом -элементе. Откроется список конференций (комнат, групповых чатов), имеющихся на -вашем сервере. Выберите интересующее вас название и сделайте двойной клик уже -на нём, чтобы просмотреть параметры этой комнаты. - -Обратите внимание на число в скобках, идущее после имени комнаты — это -количество людей, которые там сейчас общаются. Очевидно, что если это число — -0, заходить туда смысла нет. Если же в комнате кто-то есть, в конце списка вы -увидите ники находящихся там людей. Чтобы войти в комнату, щёлкните на -"Присоединиться к конференции" — откроется её окно, и вы можете начинать -разговаривать. Общение в конференции — увлекательное занятие как само по себе, -так и в плане настройки всевозможных эффектов и полезностей. Подробнее об этом -смотрите ниже. - -![Обзор служб](../images/120px-Discovery_ru.png) - -![Обзор служб 1](../images/116px-Discovery_conference_1_ru.png) - -![Обзор служб 2](../images/120px-Discovery_conference_2_ru.png) - -Если вы уже знаете, к какой конференции хотите подключиться, то совсем не -обязательно проделывать все эти телодвижения. Нажмите третью по счёту кнопку — -"Присоединиться к группе" — и в открывшемся диалоге заполните поля "Группа", -"Сервер" и "Псевдоним". Например, если вы зарегистрировали аккаунт на сервере -jabber.ru и хотите зайти в комнату Talks, введите в первом поле **talks**, во -втором — **conference.jabber.ru**. Псевдоним уже будет стоять — ваш ник, под -которым вы зарегистрировались на сервере; можете оставить его как есть, а -можете поменять, если вдруг захочется. Если комната защищена паролем, то вы -должны ввести его в последнее поле. - -![Другой способ подключения к конференции](../images/Tkabber-Join-Conference.png) - -Чтобы каждый раз не лазить в Дискавери, можно добавить конференцию в ростер. -Это очень просто: **Службы → Добавить конференцию в контакты...** Появится -небольшое окошечко, где нужно ввести всего два параметра: группу и сервер, -причём поле "сервер" уже заполнено, и его нужно править лишь в том случае, если -вы добавляете группу с другого сервера, не с того, на котором вы залогинены. В -поле "группа" надо написать название комнаты, например, tkabber или talks. -Другой способ — перетащить конференцию из Дискавери в ростер мышью. Работает -drag-and-drop как в Виндовс, так и в Линукс. - -### Добавление контактов в ростер - -Может статься, у вас уже есть друг, который давно уже использует Jabber для -общения, или вы познакомились с кем-нибудь в комнате, и теперь хотите добавить -его в свой список друзей. Жмём самую левую кнопку в виде человечка с зелёным -плюсиком рядом — "Добавить нового пользователя". Выскакивает окошко с двумя -полями. В верхнее, маленькое, надо написать JID (Jabber ID, или полный -Jabber-адрес вашего друга): к примеру, petia@jabberserver.ru — то есть, и ник, -и "собачку", и имя сервера. Во втором поле уже "вбита" стандартная фраза -запроса на авторизацию: "I would like to add you to my roster" (мне хотелось бы -добавить вас в мой ростер). Если хотите, можете написать там что-то более -осмысленное, чтобы, например, человек, которого вы хотите к себе добавить, -понял, с кем имеет дело. - -![Отправка запроса на авторизацию](../images/Adding_user_2roster_1_ru.png) - -Ростер, он же список контактов (левое окошко меньшей ширины в главном окне) — -это аналог "аськиного" контактного листа, но в мире Jabber в этом списке могут -находиться контакты из джаббера, ICQ, Yahoo, AIM, пользователи MSN Messenger, а -также новостные агенты (RSS) и даже различные -[боты-сервисы](http://jabberworld.info/JID_полезных_Jabber-ботов) (кстати -говоря, эта ссылка ведёт на другую замечательную вики, посвящённую новичкам в -Jabber — обязательно там полазьте). Итак, вы отправили запрос на авторизацию -вашему другу, но совсем не обязательно, что он сейчас сидит и дожидается этого -запроса. Тем не менее, вы уже можете добавить его к себе в ростер. У вас -открывается окно со свойствами контакта. Вы можете отредактировать его -псевдоним (например, вместо ника ввести настоящее имя и фамилию), а также -внести этот контакт в группу (например, если это ваш друг, то в группу -"Friends" или "Друзья", а если это ваш коллега, то в группу "Работа"). Создать -группу очень просто: напишите её имя в окошечке слева, как в примере, и нажмите -"Добавить". Если у вас уже есть группа (например, вы добавляете уже второй -контакт), то она будет находиться в левом списке, в большом поле. Выделите её -мышью и опять-таки, жмите "Добавить". Просто выбрать группу слева или ввести её -имя в окошке недостаточно, обязательно надо добавить её, чтобы она появилась -справа, иначе пользователь будет находиться в общем списке под названием "Без -группы". Одного и того же пользователя можно добавить в несколько групп. Кроме -того, в Ткаббере можно организовать вложенные группы. Посмотрите на скриншот. -Самая нижняя из видимых групп выглядит так: Jabber::007::Админы. Разделителем -является двойное двоеточие. В результате в списке контактов появится группа -Jabber, внутри которой будет находиться подгруппа 007, а внутри неё — подгруппа -Админы. Если вы планируете заселять и промежуточные группы (Jabber и 007), надо -прописать и их, как это сделано на скриншоте. Итак, у нас всё готово. Жмите -"Продолжить", и пользователь добавляется в ростер. - -![Редактирование контакта](../images/Adding_user_2roster_2_ru.png) - -Если друг ваш сейчас не за компьютером, он не сможет авторизовать вас сразу же. -Поэтому его ник в ростере скрыт. Чтобы увидеть его, нажмите четвёртую кнопку. -Одна жёлтая лампочка показывает только пользователей, которые сейчас в онлайне, -жёлтая поверх чёрной — всех. Иконка, стоящая около ника вашего друга, — -"пустая", а во всплывающей подсказке (при наведении мыши на ник) можно увидеть -слово [none] — "нет подписки на присутствие". Это значит, ни он ещё не -авторизовал вас, ни вы его. - -![Контакт в ростере, но вас ещё не авторизовал](../images/Adding_user_2roster_3_ru.png) - -Когда он подойдёт к компьютеру или выйдет в онлайн, он увидит ваш запрос. - -![Запрос получен вашим другом](../images/Adding_user_2roster_4_ru.png) - -Он авторизует вас, нажав кнопку "Утвердить подписку", при этом его иконка станет жёлтой. - -![Друг вас авторизовал, а вы его — ещё нет](../images/Tkabber-Roster-Tooltip-Subscribed-To.png) - -В данном примере состояние подписки — [to], это означает, что собеседник вас -авторизовал, и вы можете видеть его присутствие (то есть, в онлайне он или -нет), а вы его — ещё не авторизовали. Противоположный случай: подписка [from] — -вы авторизовали собеседника (позволяете ему видеть, когда вы в онлайне), а он -вас — нет (при этом, само собой, его иконка останется чёрной). - -Друг тоже отправляет вам запрос на авторизацию, в результате чего у вас -выскакивает примерно такое окно. - -![Ваш друг просит вас авторизовать его](../images/Adding_user_2roster_5_ru.png) - -Когда и вы авторизуете его, всплывающая подсказка будет показывать слово [both] -— "оба". - -Вы можете писать сообщения вашим друзьям, даже если они находятся в оффлайне и -даже если авторизация ещё не состоялась — сообщение сохранится на сервере и -будет показано адресату, когда тот подключится. - -### Некоторые полезные команды - -В принципе, общение в групповом чате или с глазу на глаз ничем не отличается от -общения в других программах — ICQ, IRC и так далее. Но свои тонкости есть, и -лучше сразу с ними познакомиться. - -Пишем | Получаем ----|--- -/me хочет спать | \* testirovanie хочет спать -/наклонный текст/ | _наклонный текст_ -\_подчёркнутый текст\_ | подчёркнутый текст -\*жирный текст\* | **жирный текст** -/знаки препинания/! | _знаки препинания_! -/так неправильно!/ | /так неправильно!/ --перечёркнутый текст- | перечёркнутый текст -/\*можно\*/ /\_смешивать\_/ | _**можно** смешивать_ -\*\_разные\_\* \*\_/стили/\_\* | **разные _стили_** - -Как видите, текст можно делать жирным, подчёркнутым, перечёркнутым и курсивом. -Можно смешивать разные стили. Главное, помнить про вложение символов выделения: -если вы написали "/\*" в начале текста, то заканчивать выделение нужно обратной -последовательностью — "\*/". - -Последовательности этих смешных символов, осуществляющих выделение текста, -называются "стайлкодами" (от "stylecodes", термин позаимствован из -["фидошной"](http://www.fidonet.org) читалки писем -[GOLDed](http://golded-plus.sourceforge.net)). Если эта возможность вам мешает, -её можно отключить в Настройках (группа **Chat → Stylecodes**). - -Ткаббер поддерживает "горячие клавиши", и они могут значительно облегчить вашу -жизнь. Посмотреть их всегда можно в "Краткой справке" (меню "Помощь"). - -![Краткая справка](../images/Tkabber-Quick-Help.png) - -Ткаббер по умолчанию отсылает сообщения по нажатию клавиши Enter. Если вы -привыкли работать с другими программами мгновенных сообщений (например, MSN -Messenger), которые отсылают "мессаги" по Ctrl-Enter, Ткаббер может показаться -неудобным. Однако это довольно легко исправляется — смотрите -[**здесь**](Патчи.md#Отправка_сообщений_по_нажатию_Ctrl-Enter). Даже если вы ничего -не смыслите в программировании, следуя примеру в инструкции, можете настроить -клиент "под себя". _На всякий случай скопируйте в другое место файл, который -собираетесь редактировать, и тогда в случае ошибки всегда сможете вернуться к -исходному состоянию._ - -Ещё пара полезностей. Находясь в конференции, вы можете узнать кое-какую -информацию о её участниках, наведя на ник курсор мыши или сделав на нём правый -клик. В первом случае появится всплывающая подсказка, где можно узнать, какой -ранг занимает тот или иной участник: owner (владелец комнаты), administrator -(администратор), moderator (модератор), member (участник) или none (никто, так -себе прохожий). Подробнее эти ранги мы рассмотрим потом. - -![Всплывающая подсказка в конференции](../images/Conference_user_tooltip_ru.png) - -По правому клику на псевдониме открывается контекстное меню, из которого пока -рассмотрим только предпоследний пункт "Показать информацию". - -![Контекстное меню в конференции](../images/Conference_user_menu_ru.png) - -Нажав на него, вы получите довольно большое окно с несколькими вкладками, где -можете почитать персональную информацию, которую этот человек решил о себе -сообщить. Пользуясь случаем, давайте заполним свою персональную инфу и мы. -Чтобы открыть окно редактирования, ткнитесь в меню **Tkabber → Редактировать -личную информацию**. - -* **Личная информация:** Ф.И.О., псевдоним, e-mail, веб-сайт. Рекомендуем - заполнить хотя бы e-mail, потому что если вы вдруг забудете свой пароль, то - администратор сервера ничем вам помочь не сможет, а так хоть вышлет его на - указанный почтовый ящик. -* **Телефоны:** Что тут заполнять — решать вам, а выбор богат: ведь Ткаббер - поддерживает стандарт vCard. -* **Адрес:** Конечно, полный адрес писать здесь не обязательно, но хотя бы - город и страну указать не мешает. Занимательный плагин Георостер, - показывающий на карте мира географическое положение собеседников, берёт - информацию именно отсюда. -* **Организация:** Самое подходящее место рассказать о себе как о - профессионале. -* **О себе:** А здесь можно выложить хоть биографию, а также указать дату - своего рождения. Кроме того, в этом поле удобно размещать GPG/PGP public-key - (лучше ссылку на ключ, загруженный на какой-нибудь keyserver, чтобы не - загромождать пространство, да и пользователям gpg удобнее скачать ключ именно - с сервера, а не возиться с копированием и ручным его импортированием). -* **Фотография:** Можно загрузить фото с жёсткого диска, а можно указать ссылку - на изображение в интернете. - -Чтобы сохранить изменения и отослать их на сервер, нажмите кнопку "Продолжить". - -* При просмотре чужой информации появляется ещё одна вкладка: **Клиент**. Там - вы можете узнать, какую версию какого клиента использует ваш собеседник, его - часовой пояс, а также операционную систему, в которой он сейчас работает. - -![(!)](../images/Hammer.png) **Сделать:** Перезалить галерею NaodW29-gallery4429bb43277b2e7500000002 - -Поскольку vCards хранятся на сервере, можно просматривать информацию о любом -пользователе — он даже может быть при этом в оффлайне! Для этого зайдите в меню -**Службы → Показать информацию о пользователе** и в открывшемся окошке введите -JID интересующей вас персоны. - -![Запрос информации о пользователе](../images/Info_request_ru.png) - -Ещё одна интересная тайна Ткаббера — встроенные команды. Наберите в поле ввода -сообщения прямой слэш "/" и понажимайте несколько раз табуляцию, и вы увидите -много интересного ;) Про кое-что из этого интересного можно почитать -[тут](http://jabberworld.info/Управляющие_команды_в_Jabber). Если понажимать -табуляцию, не вводя в поле ничего, там начнут появляться ники пользователей, -находящихся в комнате, причём в большинстве случаев самым первым появится тот, -кто, допустим, недавно назвал вас по нику — то есть, адресовал вам фразу, или -просто человек, сказавший последнюю реплику. Это свойство удобно использовать -для быстрой вставки нужного ника в строку набора. Если при этом вы наберёте -одну-две первые буквы какого-нибудь ника, то табуляция будет перебирать лишь те -ники, которые с этих букв начинаются. - -И напоследок "домашнее задание" :) - -1. Сделайте правый клик в окне группового чата и изучите самостоятельно - контекстное меню — вам понравится ;) -1. Поводите курсор мыши над окном программы. Обратите внимание, что если - какой-то элемент интерфейса меняет при этом свой цвет, он кликабелен — - можете нажать кнопку мыши (и левую, и правую) и посмотреть, что получится. - Некоторые элементы доступны для клика даже если не меняют цвет. Десять минут - таких исследований, и вы убедитесь, что Ткаббер — это просто квест - какой-то! :) - -### Дискавери. Добавляем контакты из: - -#### ICQ - -Если на вашем jabber-сервере есть гейт в ICQ, вы можете зарегистрироваться на -нём и общаться с друзьями из "аськи" через Jabber. Естественно, у вас уже -должен иметься рабочий аккаунт в системе ICQ. Регистрация же на jabber-сервере -проста: в Дискавери отыщите что-то вроде icq.jabber.ru и сделайте двойной клик, -чтобы открыть эту ветвь. В открывшемся новом списке есть пункт "Регистрация". -Сделайте двойной клик уже на нём, и появится окошко с двумя полями: -"Пользователь" и "Пароль". Введите в первое поле ваш ICQ UIN, во второе — -пароль к вашему асечному аккаунту. - -![Регистрация на гейте ICQ](../images/Icq_register_ru.png) - -Если у вас открыта "аська", закройте её или отключитесь, чтобы не мешалась. -Жмите "Ок", и если ошибок не было, вы получите сообщение, что регистрация -успешна. Теперь jabber-сервер знает параметры вашего аськиного аккаунта и может -логиниться на сервере ICQ. - -Обычно Ткаббер сам "вытягивает" контакт-лист аськи, залогинившись к серверу ICQ -через гейт, и сам же заполняет все имена никами, взятыми из соответствующего -поля vCard аськиных пользователей — ваших друзей. Если этого не произошло, а -контакт-лист слишком большой, чтобы прописать их вручную, почитайте -[**тут**](Гейты_во_вражеские_сети.md#ICQ). - -Таким же (или похожим) образом происходит регистрация на других транспортах. -Необходимо помнить, что при регистрации на каком-либо транспорте вам надо -вводить логин и пароль **уже существующего в той системе аккаунта**, создать -который вы должны были раньше, через "родной" клиент этой системы. - -#### IRC - -Чуть подробнее остановимся на гейте в IRC — "ирку". Регистрироваться на гейте -не обязательно, можно либо просто зайти на канал, либо добавить его в ростер на -будущее. Делается это примерно так же, как в случае с обычной MUC (Multi-User -Conference, т.е. обычная конференция, о которых мы уже рассказали выше). Есть -одна тонкость в имени. Посмотрите внимательно на скриншот: в качестве группы -следует указывать не только имя канала, но и имя IRC-сервера, к которому вы -хотите присоединиться. В нашем примере **linux%chat.eu.freenode.net**: "linux" -— название канала (_без ведущего "\#"_), "chat.eu.freenode.net" — название -"иркиного" сервера, разделяются они знаком процента. А вот в качестве сервера, -что запрашивается во втором поле, идёт название гейта на вашем jabber-сервере. -У jabber.ru гейт на "ирку" в Дискавери отсутствует, и на сайте найти его точное -название — тоже проблема (если оно там есть вообще). Тем не менее, гейт -существует и зовётся **irc.e.jabber.ru** — прописывайте и наслаждайтесь :) В -поле "псевдоним" указываете ваш IRC-никнейм, а в поле "пароль" — ваш пароль в -IRC для этого ника. Замечено, что на серверах сети WeNet NickServ всё равно -просит вас представиться — в отдельном окне. Тогда надо просто ввести в этом -окошке текст: **identify your\_password** — без слэша, ведь это не команда -jabber или Ткаббера, а просто текст, отсылаемый Никсерву. - -![Заходим на канал IRC](../images/Join_conference_IRC_ru.png) - -Общаясь в "ирке" через Jabber, вполне можно пользоваться некоторыми популярными -командами, например, **/me**. Окно привата вызывается двойным кликом на нужном -никнейме. Остальные команды пока не тестировались, информация добавится позже. -Если хотите, чтобы она появилась побыстрее, опробуйте другие команды и -расскажите нам :) - -#### RSS - -Внимание! rss.jabber.ru отключен на неизвестный срок, поэтому написанные ниже -советы неактуальны, но читать RSS-новости по-прежнему можно, если почитать -[тут](http://jabberworld.info/Транспорты_для_Jabber), -[тут](http://jabberworld.info/Список_публичных_транспортов_RSS) и -[тут](http://wiki.jrudevels.org/RSS_service). - -Добавлять в ростер новостные фиды (RSS feeds) с **jabber.ru** следует так: -откройте в Дискавери поддерево rss.jabber.ru, выберите узел "Поиск" и -активируйте его (двойным щелчком мыши или нажатием клавиши Enter. Появится окно -поиска: - -![Поиск в RSS на jabber.ru](../images/Tkabber-Stoat-headlines-Search.png) - -Введите в нём интересующую вас подстроку для поиска (например, "dsa-long") и -подтвердите свой выбор. Если по вашему запросу что-нибудь нашлось, вам будет -предъявлена новая форма — с результатами поиска: - -![Результаты поиска в RSS на jabber.ru](../images/Tkabber-Stoat-headlines-summary.png) - -Выберите интересующий вас фид и активируйте его. Выскочит стандартное окно -запроса, который будет отослан этому фиду. Затем появится другое уже знакомое -нам окно редактирования контакта. Вы можете создать для новостей отдельную -группу, скажем, Новости или RSS, и добавлять новые фиды в неё. _Помните, что -новости обновляются хозяевами сайтов, и интервал может очень отличаться. -Скажем, lenta.ru за день может накидать больше сотни сообщений, а какой-нибудь -редко обновляемый сайт — три, за неделю._ Если хотите получать от сервера -уведомления о новых фидах, вам нужно зарегистрироваться в главной ветке дерева -rss.jabber.ru. - -##### Частые вопросы по RSS - -Нередко начинающие пользователи Ткаббера задают в конференции вопросы, -связанные с RSS. Приводим здесь ответы на эти вопросы в виде краткого -наставления :) - -1. Открыть в диско весь список фидов невозможно. Пользуйтесь поиском - (вызывается нажатием Ctrl-S — от слова "Search") -1. Найдя нужный фид, добавьте его в ростер. С этим контактом разговаривать - бессмысленно. **Просто сидите и ждите.** Как уже было сказано выше, - **новости выпускает сайт, а не Ткаббер,** так что сетовать на клиент - бессмысленно. Возможно, некоторые новости от старых фидов не приходят к вам - просто потому, что на сайте изменился адрес фида, а между тем в списке на - rss.jabber.ru до сих пор болтается старая версия, на которую вы и подписаны. - Поэтому перед тем как добавлять в ростер некий фид, не помешало бы - убедиться, что по анонсируемому адресу действительно что-то имеется. -1. Когда сайт выпустит новость, она сама к вам придёт, и у вас откроется новое - окошко с новостями, где можно будет эту новость прочитать и, если хочется - посетить её полную версию на сайте, перейти по ссылке. -1. После прочтения новости удалять контакт из ростера не надо. -1. Если закрыть таб с новостями, они для вас исчезнут навсегда (ну, не совсем - навсегда, потому что в пользовательском домашнем каталоге Ткаббера есть ещё - бэкапный файл, который до закрытия Ткаббера можно и нужно спасти, иначе при - выходе из Ткаббера он перезапишется). -1. Ткаббер в своём первозданном виде сохраняет новости только при корректном - выходе. Как несложно догадаться, если вдруг у вас упадёт он или вообще вся - система, то сохранятся лишь новости, которые были записаны в том файле - (иначе говоря, всё, что наприходило с момента начала работы в Ткаббере, - пропадёт). -1. На вики есть плагин [**rsssaver**](Плагины.md#Rsssaver), позволяющий сохранять - новости автоматически каждые N новостей, а также добавляет кнопку для - ручного их сохранения. - -#### Дополнительное чтение по теме - -[Гейты во вражеские сети](Гейты_во_вражеские_сети.md). - -## Локализация Ткаббера -В подавляющем большинстве случаев проблем с локализацией Ткаббера не возникает. -Он с ходу "ловит" языковые настройки системы и готов к работе в удобном для вас -окружении. Начиная с версии 0.9.9 кириллица встроена и в Старпаке — это -однофайловая версия Ткаббера, не требующая инсталляции. - -В Linux настройка русского языка тоже проста: язык интерфейса Ткаббера обычно -берётся из локали. Если локаль ваша русская, а интерфейс нужен английский, то -придётся немного повозиться. Обсуждение этого уже несколько выходит за рамки -повествования "для начинающих", поэтому если вам нужен именно такой вариант, -идите в раздел для "продвинутых" пользователей. - -В заключение можно добавить, что Ткаббер поддерживает Unicode, то есть -корректно воспроизводит все юникодные символы. -![(!)](../images/Hammer.png) **Сделать:** Расписать немного подробнее про -локали и невозможность писать, скажем, по-испански при локали KOI-8. - -Иногда случается, что русский текст в окне чата в ткаббере линуксовой версии -пишется "некрасивым" шрифтом (отличающимся от шрифта латинских символов), или -даже "кракозябрами". Это означает, что у вас в системе криво настроены шрифты, -и вам — [**сюда**](Шрифты.md). - -Если вы — пользователь Ubuntu, то, скорее всего, Ткаббер, ставящийся из -репозитория, страшен, как сон алкоголика, ибо русские шрифты выглядят жутко. -Конечно, для общего развития вам не помешает ознакомиться со статьёй "Шрифты", -ссылка на которую дана выше, но если вам нужно быстрое решение, ознакомьтесь -[**со статьёй**](Установка_и_настройка_в_Ubuntu.md), специально написанной для -этого случая одним мудрым убунтологом. - -## Настройка Ткаббера -Ну вот, Ткаббер запущен и работает, и теперь вам хочется поковыряться с ним -немного и, не влезая в код, более-менее прилично настроить программу под себя. -Сделать это можно двумя способами: через пункты меню (при этом настройки -действуют только в течение текущей сессии) и через окно настроек. Первый способ -удобен для быстрого изучения возможностей клиента, при этом можно не опасаться -что-нибудь испортить. Второй способ требует времени, потому что, во-первых, -окно настроек Ткаббера похоже на лабиринт Минотавра, а во-вторых, пользователи -обычно сюда лезут один раз, всё делают и потом благополучно забывают, что где -находится. - -Если первый способ более-менее понятен (броди по менюшкам, нажимай кнопочки, -смотри, что случилось), то со вторым посложнее. Настолько посложнее, что мы -давно уже хотим написать о настройках [**большую статью**](Настройки.md). Вот и -настал тот час, учитывая, что начинающие пользователи крайне нуждаются в -подробном рассказе о настройках, а поскольку продвинутые пользователи после -собственных ковыряний мало что помнят, имеет смысл рассказать об этом здесь :) +# Установка и быстрый старт +Выбор [дистрибутива](http://tkabber.jabber.ru/download) зависит от операционной системы, в которой вы работаете. Инсталляция Ткаббера в среде Linux подробно [описана](http://tkabber.jabber.ru/tuto-install-tkabber) на сайте [http://tkabber.jabber.ru](http://tkabber.jabber.ru) и проблем вызвать не должна. Под Windows инсталляция тоже проходит гладко. + + _Если вы только собираетесь познакомиться с Ткаббером, пожалуйста, **не берите старые и "левые" версии** (из серии "друг принёс на болванке" или "в нашей локалке вот такую советуют") — если у вас возникнут с ней проблемы, шансы получить помощь "из первых рук" (от разработчиков и активных пользователей) у вас резко уменьшатся: скорее всего вам предложат либо поставить текущую официальную версию, либо пойти поговорить с авторами вашей "левой" версии._ + +Поэтому скачайте текущую стабильную версию подходящего вам дистрибутива Ткаббера с [официального сайта](http://tkabber.jabber.ru/download), установите его и переходите к процессу запуска, описанному ниже. + +Текущей стабильной версией является 0.11.1. + +**Примечание:** Ткаббер представлен несколькими "дистрибутивами" — то есть различными "упаковками" одного и того же, по-сути, содержимого, — что создаёт определённые проблемы для начинающих, которые встают перед выбором. Чтобы помочь вам с _осознанным_ выбором, мы написали специальную [статью про дистрибутивы Ткаббера](Дистрибутивы__которые_мы_выбираем.md). К сожалению, она получилась большой и сложной, поэтому, если вы рвётесь в бой и хотите "прямо сейчас" запустить Ткаббер, рискнём предложить простой расклад: + +* Если у вас Windows, возьмите [старпак](http://tkabber.jabber.ru/starpack) (один файл, не требует установки) или [ткаббер-пак](http://tkabber.jabber.ru/tkabber-pack) (инсталлятор "всё в одном"). +* Если у вас Unix, поищите готовый пакет под свою систему. + * Если готового пакета нет, вашим Unix'ом является Linux, + * ...и это [Debian](http://www.debian.org), возьмите _всё, что нужно,_ [отсюда](http://people.debian.org/~sgolovan/debian/); + * ...и это что-то другое, попробуйте [старпак](http://tkabber.jabber.ru/tkabber-starpack) (учтите, что [последний старпак под линукс](http://tkabber.jabber.ru/tkabber-starpack/0.10) выпускался в бытность версии 0.10, то есть, он весьма замшелый, но на попробовать сойдёт) или ставьте руками согласно [этой таблице](http://tkabber.jabber.ru/dependencies). + +## Окно логина + +Допустим, пакет установлен и запущен. Появляется небольшой splash-screen с именами авторов проекта и прогресс-баром, показывающим, как идёт загрузка. Затем открываются главное окно программы и окно логина. В окне логина имеется несколько вкладок, изрядно загруженных информацией, но на самом деле нам нужны далеко не все опции. Рассмотрим все вкладки по порядку. + +* **Учётная запись** + * _Пользователь:_ Здесь пишем желаемый ник (к примеру, testirovanie). + * _Сервер:_ Сервер, на котором вы хотите создать учётную запись. Выбор его для новичка — нетривиальная задача. Если вы хотите зарегистрироваться на одном из серверов [этого списка](http://www.jabber.org/user/publicservers.shtml), посмотрите, есть ли на нём гейты — "ворота" в мир ICQ, MSN, Yahoo, почтовые гейты, RSS-feed'ы. Вам ведь наверняка захочется использовать возможности протокола Jabber на всю катушку. Также следует обратить внимание на страну, в которой этот сервер работает. Если вы не знаете немецкого языка, регистрироваться на немецком сервере — не лучший шаг, если есть другие с такими же сервисами. Впрочем, может оказаться, что вы хотите зарегистрироваться на jabber-сервере вашей фирмы, университета или интернет-провайдера. Тогда всё проще — вводите его имя, и все дела. + * _Пароль:_ тут всё должно быть ясно — латинские буквы верхнего и нижнего регистров и цифры. Идеальный вариант — не менее 6 символов, буквы разных регистров и цифры вперемешку, что-нибудь вроде _Xjh7W9bV_. Конечно, при коннекте через защищённое соединение (SSL) так изголяться не обязательно, но лучше не использовать английские слова, а писать что-нибудь невразумительное, опять же, добавляя цифры и играя с регистром: _92fLuMpIk29_. Такой пароль сравнительно легко запомнить и не очень обременительно набирать, но он гораздо надёжнее, чем _vasyarybkin_ или _sunlight_. + * _Использовать хэш. пароль:_ Отметьте эту галочку обязательно, чтобы по крайней мере начинающие кул-хацкеры ваш пароль не прочитали. Лишняя безопасность ещё никому не вредила, тем более, что кроме нажатия этой галки делать больше ничего не надо. + * _Ресурс и Приоритет:_ Я изменил ресурс, но вы оставьте всё как есть. В двух словах о ресурсе: можно логиниться к одной и той же учётной записи с разных клиентов и даже машин, но при этом нужно, чтобы каждый раз был указан новый ресурс. Сюда можно писать название клиента (Psi, Tkabber, Bombus — обычно своё имя выставляет сам клиент), ваше местоположение (Home, Work) и т.д. Приоритет тоже становится нужен, когда запущено несколько клиентов. Подробнее об этом мы расскажем в другой статье. + +![Окно логина, вкладка "Учётная запись"](../images/Tkabber-Login-01-Credentials.png) + +* **Соединение** + * _Порт для подключения:_ Должен стоять 5222. Изменять его не надо. + * _Подключиться через альтернативный сервер:_ Пока что тоже трогать ничего не надо. Эта опция может понадобиться в определённых случаях, но не сейчас. + * _Закрыть открытые соединения:_ Тут можно и отметить на будущее, чтобы при перелогине открытые соединения закрывались и не мешались. + +![Окно логина, вкладка "Соединение"](../images/Tkabber-Login-02-Connection.png) + +* **SSL** + * _Использовать SSL:_ Это безусловно надо отметить, вы ведь не хотите, чтобы ваши разговоры подслушивались, а пароли перехватывались? + * _STARTTLS:_ Тип безопасного соединения. Сначала пробуйте его. + * _Legacy SSL:_ Устаревшее SSL-соединение. В Ткаббере присутствует для совместимости со старыми серверами, на которых нет поддержки STARTTLS. Если и через Legacy SSL законнектиться не удаётся, отключите "Использовать SSL" — должно заработать. _Работать без SSL — крайняя мера, и в этом случае нужно обязательно отметить галочку "Использовать хэш. пароль" на вкладке "Учётная запись" — это будет единственная защита вашего пароля. Если же вдруг выяснится, что сервер не поддерживает шифрование паролей, мы искренне советуем забыть имя этого сервера и выбрать другой, благо их полно._ + * _SSL порт:_ Должен стоять 5223. + +![Окно логина, вкладка "SSL"](../images/Tkabber-Login-03-Authentication.png) ![Окно логина, вкладка "Аутентификация"](../images/Tkabber-Login-04-Stream-features.png) + +![(!)](../images/Hammer.png) **Сделать:** rearrange + +* **Прокси:** Если вы находитесь за файерволлом (например, в сети университета или на работе) и не можете законнектиться напрямую, включите опцию "Использовать прокси" и пропишите параметры вашего прокси-сервера: адрес, порт, имя пользователя и пароль. Если эти данные вам не известны, можете узнать их у вашего системного администратора. + +![Окно логина, вкладка "Прокси"](../images/Tkabber-Login-06-Proxy-Server.png) + +* **HTTP-подключение:** Если вдруг все остальные методы не сработали, попробуйте отметить эту галочку. Но скорее всего вам этой опцией пользоваться не придётся. + +![Окно логина, вкладка "HTTP-подключение"](../images/Tkabber-Login-05-HTTP-Polling.png) + +## Создание нового аккаунта + +Как видите, заполнять пришлось лишь самую первую вкладку. Жмём кнопку соединения. Если вы запускаете Ткаббер первый раз в жизни, аккаунта у вас на сервере нет. Программа, однако, попытается залогиниться, используя введённые вами пользовательское имя и пароль, но, не найдя на сервере учётной записи, предложит вам создать новую. Соглашайтесь, и через секунду ваш аккаунт будет создан. Но может оказаться и так, что учётная запись с таким именем на этом сервере уже существует. В этом случае Ткаббер снова выведет окошко с предупреждением об ошибке авторизации. Тогда нужно ответить "Нет", а затем попытаться залогиниться снова, придумав новый ник, либо попробовать другой сервер, где, возможно, этот ник ещё не занят. + +![Сообщение сервера об ошибке авторизации и одновременно предложение создать новый аккаунт](../images/Tkabber-New-Account-Creation-Query.png) + +Если всё в порядке, вы получаете сообщение от сервера "Добро пожаловать" (не обязательно именно такое, и не факт, что оно вообще будет - всё зависит от настроек каждого конкретного сервера, но скорее всего вас как-то известят об успешной регистрации). Впрочем, на сервере jabber.ru по неизвестной причине это сообщение выводится даже тогда, когда вы пытаетесь зарегистрировать учётную запись с уже существующим именем. + +![Сообщение сервера об успешной регистрации нового аккаунта](../images/Welcome_ru.png) + +## Дискавери. Первые шаги + +Допустим, новый аккаунт вы создали, но разговаривать пока не с кем — знакомых в мире Jabber у вас нет. Что ж, пойдём их искать. В верхней части окна программы имеется панель инструментов (тулбар), на которой есть несколько кнопок. Вторая слева — в виде земного шара — это Обзор служб, ваш провожатый по серверу. + +![Меню и панель инструментов](../images/Tkabber-Toolbar.png) + +Нажав её, вы увидите окно, отображающее какой-то непонятный древовидный список. Нас интересуют самые нижние пункты списка, написанные шрифтом чёрного цвета. Поищите среди них что-то вроде conference.jabber.ru и дважды кликните на этом элементе. Откроется список конференций (комнат, групповых чатов), имеющихся на вашем сервере. Выберите интересующее вас название и сделайте двойной клик уже на нём, чтобы просмотреть параметры этой комнаты. + +Обратите внимание на число в скобках, идущее после имени комнаты — это количество людей, которые там сейчас общаются. Очевидно, что если это число — 0, заходить туда смысла нет. Если же в комнате кто-то есть, в конце списка вы увидите ники находящихся там людей. Чтобы войти в комнату, щёлкните на "Присоединиться к конференции" — откроется её окно, и вы можете начинать разговаривать. Общение в конференции — увлекательное занятие как само по себе, так и в плане настройки всевозможных эффектов и полезностей. Подробнее об этом смотрите ниже. + +![](../images/120px-Discovery_ru.png) + +Обзор служб + +![](../images/116px-Discovery_conference_1_ru.png) + +Обзор служб 1 + +![](../images/120px-Discovery_conference_2_ru.png) + +Обзор служб 2 + + Если вы уже знаете, к какой конференции хотите подключиться, то совсем не обязательно проделывать все эти телодвижения. Нажмите третью по счёту кнопку — "Присоединиться к группе" — и в открывшемся диалоге заполните поля "Группа", "Сервер" и "Псевдоним". Например, если вы зарегистрировали аккаунт на сервере jabber.ru и хотите зайти в комнату Talks, введите в первом поле **talks**, во втором — **conference.jabber.ru**. Псевдоним уже будет стоять — ваш ник, под которым вы зарегистрировались на сервере; можете оставить его как есть, а можете поменять, если вдруг захочется. Если комната защищена паролем, то вы должны ввести его в последнее поле. + +![Другой способ подключения к конференции](../images/Tkabber-Join-Conference.png) + +Чтобы каждый раз не лазить в Дискавери, можно добавить конференцию в ростер. Это очень просто: **Службы → Добавить конференцию в контакты...** Появится небольшое окошечко, где нужно ввести всего два параметра: группу и сервер, причём поле "сервер" уже заполнено, и его нужно править лишь в том случае, если вы добавляете группу с другого сервера, не с того, на котором вы залогинены. В поле "группа" надо написать название комнаты, например, tkabber или talks. Другой способ — перетащить конференцию из Дискавери в ростер мышью. Работает drag-and-drop как в Виндовс, так и в Линукс. + +## Добавление контактов в ростер + +Может статься, у вас уже есть друг, который давно уже использует Jabber для общения, или вы познакомились с кем-нибудь в комнате, и теперь хотите добавить его в свой список друзей. Жмём самую левую кнопку в виде человечка с зелёным плюсиком рядом — "Добавить нового пользователя". Выскакивает окошко с двумя полями. В верхнее, маленькое, надо написать JID (Jabber ID, или полный Jabber-адрес вашего друга): к примеру, petia@jabberserver.ru — то есть, и ник, и "собачку", и имя сервера. Во втором поле уже "вбита" стандартная фраза запроса на авторизацию: "I would like to add you to my roster" (мне хотелось бы добавить вас в мой ростер). Если хотите, можете написать там что-то более осмысленное, чтобы, например, человек, которого вы хотите к себе добавить, понял, с кем имеет дело. + +![Отправка запроса на авторизацию](../images/Adding_user_2roster_1_ru.png) + +Ростер, он же список контактов (левое окошко меньшей ширины в главном окне) — это аналог "аськиного" контактного листа, но в мире Jabber в этом списке могут находиться контакты из джаббера, ICQ, Yahoo, AIM, пользователи MSN Messenger, а также новостные агенты (RSS) и даже различные [боты-сервисы](http://jabberworld.info/JID_полезных_Jabber-ботов) (кстати говоря, эта ссылка ведёт на другую замечательную вики, посвящённую новичкам в Jabber — обязательно там полазьте). Итак, вы отправили запрос на авторизацию вашему другу, но совсем не обязательно, что он сейчас сидит и дожидается этого запроса. Тем не менее, вы уже можете добавить его к себе в ростер. У вас открывается окно со свойствами контакта. Вы можете отредактировать его псевдоним (например, вместо ника ввести настоящее имя и фамилию), а также внести этот контакт в группу (например, если это ваш друг, то в группу "Friends" или "Друзья", а если это ваш коллега, то в группу "Работа"). Создать группу очень просто: напишите её имя в окошечке слева, как в примере, и нажмите "Добавить". Если у вас уже есть группа (например, вы добавляете уже второй контакт), то она будет находиться в левом списке, в большом поле. Выделите её мышью и опять-таки, жмите "Добавить". Просто выбрать группу слева или ввести её имя в окошке недостаточно, обязательно надо добавить её, чтобы она появилась справа, иначе пользователь будет находиться в общем списке под названием "Без группы". Одного и того же пользователя можно добавить в несколько групп. Кроме того, в Ткаббере можно организовать вложенные группы. Посмотрите на скриншот. Самая нижняя из видимых групп выглядит так: Jabber::007::Админы. Разделителем является двойное двоеточие. В результате в списке контактов появится группа Jabber, внутри которой будет находиться подгруппа 007, а внутри неё — подгруппа Админы. Если вы планируете заселять и промежуточные группы (Jabber и 007), надо прописать и их, как это сделано на скриншоте. Итак, у нас всё готово. Жмите "Продолжить", и пользователь добавляется в ростер. + +![Редактирование контакта](../images/Adding_user_2roster_2_ru.png) + +Если друг ваш сейчас не за компьютером, он не сможет авторизовать вас сразу же. Поэтому его ник в ростере скрыт. Чтобы увидеть его, нажмите четвёртую кнопку. Одна жёлтая лампочка показывает только пользователей, которые сейчас в онлайне, жёлтая поверх чёрной — всех. Иконка, стоящая около ника вашего друга, — "пустая", а во всплывающей подсказке (при наведении мыши на ник) можно увидеть слово [none] — "нет подписки на присутствие". Это значит, ни он ещё не авторизовал вас, ни вы его. + +![Контакт в ростере, но вас ещё не авторизовал](../images/Adding_user_2roster_3_ru.png) + +Когда он подойдёт к компьютеру или выйдет в онлайн, он увидит ваш запрос. + +![Запрос получен вашим другом](../images/Adding_user_2roster_4_ru.png) + +Он авторизует вас, нажав кнопку "Утвердить подписку", при этом его иконка станет жёлтой. + +![Друг вас авторизовал, а вы его — ещё нет](../images/Tkabber-Roster-Tooltip-Subscribed-To.png) + +В данном примере состояние подписки — [to], это означает, что собеседник вас авторизовал, и вы можете видеть его присутствие (то есть, в онлайне он или нет), а вы его — ещё не авторизовали. Противоположный случай: подписка [from] — вы авторизовали собеседника (позволяете ему видеть, когда вы в онлайне), а он вас — нет (при этом, само собой, его иконка останется чёрной). + +Друг тоже отправляет вам запрос на авторизацию, в результате чего у вас выскакивает примерно такое окно. + +![Ваш друг просит вас авторизовать его](../images/Adding_user_2roster_5_ru.png) + +Когда и вы авторизуете его, всплывающая подсказка будет показывать слово [both] — "оба". + +Вы можете писать сообщения вашим друзьям, даже если они находятся в оффлайне и даже если авторизация ещё не состоялась — сообщение сохранится на сервере и будет показано адресату, когда тот подключится. + +## Некоторые полезные команды + +В принципе, общение в групповом чате или с глазу на глаз ничем не отличается от общения в других программах — ICQ, IRC и так далее. Но свои тонкости есть, и лучше сразу с ними познакомиться. + + Пишем: Получаем: + + /me хочет спать \* testirovanie хочет спать + + /наклонный текст/ _наклонный текст_ + + \_подчёркнутый текст\_ подчёркнутый текст + + \*жирный текст\* **жирный текст** + + /знаки препинания/! _знаки препинания_! + + /так неправильно!/ /так неправильно!/ + + -перечёркнутый текст- перечёркнутый текст + + /\*можно\*/ /\_смешивать\_/ _**можно** смешивать_ + + \*\_разные\_\* \*\_/стили/\_\* **разные _стили_** + +Как видите, текст можно делать жирным, подчёркнутым, перечёркнутым и курсивом. Можно смешивать разные стили. Главное, помнить про вложение символов выделения: если вы написали "/\*" в начале текста, то заканчивать выделение нужно обратной последовательностью — "\*/". + +Последовательности этих смешных символов, осуществляющих выделение текста, называются "стайлкодами" (от "stylecodes", термин позаимствован из ["фидошной"](http://www.fidonet.org) читалки писем [GOLDed](http://golded-plus.sourceforge.net)). Если эта возможность вам мешает, её можно отключить в Настройках (группа **Chat → Stylecodes**). + +Ткаббер поддерживает "горячие клавиши", и они могут значительно облегчить вашу жизнь. Посмотреть их всегда можно в "Краткой справке" (меню "Помощь"). + +![Краткая справка](../images/Tkabber-Quick-Help.png) + +Ткаббер по умолчанию отсылает сообщения по нажатию клавиши Enter. Если вы привыкли работать с другими программами мгновенных сообщений (например, MSN Messenger), которые отсылают "мессаги" по Ctrl-Enter, Ткаббер может показаться неудобным. Однако это довольно легко исправляется — смотрите [здесь](Патчи.md#Отправка_сообщений_по_нажатию_Ctrl-Enter). Даже если вы ничего не смыслите в программировании, следуя примеру в инструкции, можете настроить клиент "под себя". _На всякий случай скопируйте в другое место файл, который собираетесь редактировать, и тогда в случае ошибки всегда сможете вернуться к исходному состоянию._ + +Ещё пара полезностей. Находясь в конференции, вы можете узнать кое-какую информацию о её участниках, наведя на ник курсор мыши или сделав на нём правый клик. В первом случае появится всплывающая подсказка, где можно узнать, какой ранг занимает тот или иной участник: owner (владелец комнаты), administrator (администратор), moderator (модератор), member (участник) или none (никто, так себе прохожий). Подробнее эти ранги мы рассмотрим потом. + +![Всплывающая подсказка в конференции](../images/Conference_user_tooltip_ru.png) + +По правому клику на псевдониме открывается контекстное меню, из которого пока рассмотрим только предпоследний пункт "Показать информацию". + +![Контекстное меню в конференции](../images/Conference_user_menu_ru.png) + +Нажав на него, вы получите довольно большое окно с несколькими вкладками, где можете почитать персональную информацию, которую этот человек решил о себе сообщить. Пользуясь случаем, давайте заполним свою персональную инфу и мы. Чтобы открыть окно редактирования, ткнитесь в меню **Tkabber → Редактировать личную информацию**. + +* **Личная информация:** Ф.И.О., псевдоним, e-mail, веб-сайт. Рекомендуем заполнить хотя бы e-mail, потому что если вы вдруг забудете свой пароль, то администратор сервера ничем вам помочь не сможет, а так хоть вышлет его на указанный почтовый ящик. +* **Телефоны:** Что тут заполнять — решать вам, а выбор богат: ведь Ткаббер поддерживает стандарт vCard. +* **Адрес:** Конечно, полный адрес писать здесь не обязательно, но хотя бы город и страну указать не мешает. Занимательный плагин Георостер, показывающий на карте мира географическое положение собеседников, берёт информацию именно отсюда. +* **Организация:** Самое подходящее место рассказать о себе как о профессионале. +* **О себе:** А здесь можно выложить хоть биографию, а также указать дату своего рождения. Кроме того, в этом поле удобно размещать GPG/PGP public-key (лучше ссылку на ключ, загруженный на какой-нибудь keyserver, чтобы не загромождать пространство, да и пользователям gpg удобнее скачать ключ именно с сервера, а не возиться с копированием и ручным его импортированием). +* **Фотография:** Можно загрузить фото с жёсткого диска, а можно указать ссылку на изображение в интернете. + +Чтобы сохранить изменения и отослать их на сервер, нажмите кнопку "Продолжить". + +* При просмотре чужой информации появляется ещё одна вкладка: **Клиент**. Там вы можете узнать, какую версию какого клиента использует ваш собеседник, его часовой пояс, а также операционную систему, в которой он сейчас работает. + +![(!)](../images/Hammer.png) **Сделать:** Перезалить галерею NaodW29-gallery4429bb43277b2e7500000002 + +Поскольку vCards хранятся на сервере, можно просматривать информацию о любом пользователе — он даже может быть при этом в оффлайне! Для этого зайдите в меню **Службы → Показать информацию о пользователе** и в открывшемся окошке введите JID интересующей вас персоны. + +![Запрос информации о пользователе](../images/Info_request_ru.png) + +Ещё одна интересная тайна Ткаббера — встроенные команды. Наберите в поле ввода сообщения прямой слэш "/" и понажимайте несколько раз табуляцию, и вы увидите много интересного ;) Про кое-что из этого интересного можно почитать [тут](http://jabberworld.info/Управляющие_команды_в_Jabber). Если понажимать табуляцию, не вводя в поле ничего, там начнут появляться ники пользователей, находящихся в комнате, причём в большинстве случаев самым первым появится тот, кто, допустим, недавно назвал вас по нику — то есть, адресовал вам фразу, или просто человек, сказавший последнюю реплику. Это свойство удобно использовать для быстрой вставки нужного ника в строку набора. Если при этом вы наберёте одну-две первые буквы какого-нибудь ника, то табуляция будет перебирать лишь те ники, которые с этих букв начинаются. + +И напоследок "домашнее задание" :) + +1. Сделайте правый клик в окне группового чата и изучите самостоятельно контекстное меню — вам понравится ;) +1. Поводите курсор мыши над окном программы. Обратите внимание, что если какой-то элемент интерфейса меняет при этом свой цвет, он кликабелен — можете нажать кнопку мыши (и левую, и правую) и посмотреть, что получится. Некоторые элементы доступны для клика даже если не меняют цвет. Десять минут таких исследований, и вы убедитесь, что Ткаббер — это просто квест какой-то! :) + +## Дискавери. Добавляем контакты из: + +### ICQ + +Если на вашем jabber-сервере есть гейт в ICQ, вы можете зарегистрироваться на нём и общаться с друзьями из "аськи" через Jabber. Естественно, у вас уже должен иметься рабочий аккаунт в системе ICQ. Регистрация же на jabber-сервере проста: в Дискавери отыщите что-то вроде icq.jabber.ru и сделайте двойной клик, чтобы открыть эту ветвь. В открывшемся новом списке есть пункт "Регистрация". Сделайте двойной клик уже на нём, и появится окошко с двумя полями: "Пользователь" и "Пароль". Введите в первое поле ваш ICQ UIN, во второе — пароль к вашему асечному аккаунту. + +![Регистрация на гейте ICQ](../images/Icq_register_ru.png) + +Если у вас открыта "аська", закройте её или отключитесь, чтобы не мешалась. Жмите "Ок", и если ошибок не было, вы получите сообщение, что регистрация успешна. Теперь jabber-сервер знает параметры вашего аськиного аккаунта и может логиниться на сервере ICQ. + +Обычно Ткаббер сам "вытягивает" контакт-лист аськи, залогинившись к серверу ICQ через гейт, и сам же заполняет все имена никами, взятыми из соответствующего поля vCard аськиных пользователей — ваших друзей. Если этого не произошло, а контакт-лист слишком большой, чтобы прописать их вручную, почитайте [тут](Гейты_во_вражеские_сети.md#ICQ). + +Таким же (или похожим) образом происходит регистрация на других транспортах. Необходимо помнить, что при регистрации на каком-либо транспорте вам надо вводить логин и пароль **уже существующего в той системе аккаунта**, создать который вы должны были раньше, через "родной" клиент этой системы. + +### IRC + +Чуть подробнее остановимся на гейте в IRC — "ирку". Регистрироваться на гейте не обязательно, можно либо просто зайти на канал, либо добавить его в ростер на будущее. Делается это примерно так же, как в случае с обычной MUC (Multi-User Conference, т.е. обычная конференция, о которых мы уже рассказали выше). Есть одна тонкость в имени. Посмотрите внимательно на скриншот: в качестве группы следует указывать не только имя канала, но и имя IRC-сервера, к которому вы хотите присоединиться. В нашем примере **linux%chat.eu.freenode.net**: "linux" — название канала (_без ведущего "\#"_), "chat.eu.freenode.net" — название "иркиного" сервера, разделяются они знаком процента. А вот в качестве сервера, что запрашивается во втором поле, идёт название гейта на вашем jabber-сервере. У jabber.ru гейт на "ирку" в Дискавери отсутствует, и на сайте найти его точное название — тоже проблема (если оно там есть вообще). Тем не менее, гейт существует и зовётся **irc.e.jabber.ru** — прописывайте и наслаждайтесь :) В поле "псевдоним" указываете ваш IRC-никнейм, а в поле "пароль" — ваш пароль в IRC для этого ника. Замечено, что на серверах сети WeNet NickServ всё равно просит вас представиться — в отдельном окне. Тогда надо просто ввести в этом окошке текст: **identify your\_password** — без слэша, ведь это не команда jabber или Ткаббера, а просто текст, отсылаемый Никсерву. + +![Заходим на канал IRC](../images/Join_conference_IRC_ru.png) + +Общаясь в "ирке" через Jabber, вполне можно пользоваться некоторыми популярными командами, например, **/me**. Окно привата вызывается двойным кликом на нужном никнейме. Остальные команды пока не тестировались, информация добавится позже. Если хотите, чтобы она появилась побыстрее, опробуйте другие команды и расскажите нам :) + +### RSS + +Внимание! rss.jabber.ru отключен на неизвестный срок, поэтому написанные ниже советы неактуальны, но читать RSS-новости по-прежнему можно, если почитать [тут](http://jabberworld.info/Транспорты_для_Jabber), [тут](http://jabberworld.info/Список_публичных_транспортов_RSS) и [тут](http://wiki.jrudevels.org/RSS_service) + +Добавлять в ростер новостные фиды (RSS feeds) с **jabber.ru** следует так: откройте в Дискавери поддерево rss.jabber.ru, выберите узел "Поиск" и активируйте его (двойным щелчком мыши или нажатием клавиши Enter. Появится окно поиска: + +![Поиск в RSS на jabber.ru](../images/Tkabber-Stoat-headlines-Search.png) + +Введите в нём интересующую вас подстроку для поиска (например, "dsa-long") и подтвердите свой выбор. Если по вашему запросу что-нибудь нашлось, вам будет предъявлена новая форма — с результатами поиска: + +![Результаты поиска в RSS на jabber.ru](../images/Tkabber-Stoat-headlines-summary.png) + +Выберите интересующий вас фид и активируйте его. Выскочит стандартное окно запроса, который будет отослан этому фиду. Затем появится другое уже знакомое нам окно редактирования контакта. Вы можете создать для новостей отдельную группу, скажем, Новости или RSS, и добавлять новые фиды в неё. _Помните, что новости обновляются хозяевами сайтов, и интервал может очень отличаться. Скажем, lenta.ru за день может накидать больше сотни сообщений, а какой-нибудь редко обновляемый сайт — три, за неделю._ Если хотите получать от сервера уведомления о новых фидах, вам нужно зарегистрироваться в главной ветке дерева rss.jabber.ru. + +#### Частые вопросы по RSS + +Нередко начинающие пользователи Ткаббера задают в конференции вопросы, связанные с RSS. Приводим здесь ответы на эти вопросы в виде краткого наставления :) + +1. Открыть в диско весь список фидов невозможно. Пользуйтесь поиском (вызывается нажатием Ctrl-S — от слова "Search") +1. Найдя нужный фид, добавьте его в ростер. С этим контактом разговаривать бессмысленно. **Просто сидите и ждите.** Как уже было сказано выше, **новости выпускает сайт, а не Ткаббер,** так что сетовать на клиент бессмысленно. Возможно, некоторые новости от старых фидов не приходят к вам просто потому, что на сайте изменился адрес фида, а между тем в списке на rss.jabber.ru до сих пор болтается старая версия, на которую вы и подписаны. Поэтому перед тем как добавлять в ростер некий фид, не помешало бы убедиться, что по анонсируемому адресу действительно что-то имеется. +1. Когда сайт выпустит новость, она сама к вам придёт, и у вас откроется новое окошко с новостями, где можно будет эту новость прочитать и, если хочется посетить её полную версию на сайте, перейти по ссылке. +1. После прочтения новости удалять контакт из ростера не надо. +1. Если закрыть таб с новостями, они для вас исчезнут навсегда (ну, не совсем навсегда, потому что в пользовательском домашнем каталоге Ткаббера есть ещё бэкапный файл, который до закрытия Ткаббера можно и нужно спасти, иначе при выходе из Ткаббера он перезапишется). +1. Ткаббер в своём первозданном виде сохраняет новости только при корректном выходе. Как несложно догадаться, если вдруг у вас упадёт он или вообще вся система, то сохранятся лишь новости, которые были записаны в том файле (иначе говоря, всё, что наприходило с момента начала работы в Ткаббере, пропадёт). +1. На вики есть плагин [rsssaver](Плагины.md#Rsssaver), позволяющий сохранять новости автоматически каждые N новостей, а также добавляет кнопку для ручного их сохранения. + +### Дополнительное чтение по теме + +[Гейты во вражеские сети](Гейты_во_вражеские_сети.md). + +# Локализация Ткаббера +В подавляющем большинстве случаев проблем с локализацией Ткаббера не возникает. Он с ходу "ловит" языковые настройки системы и готов к работе в удобном для вас окружении. Начиная с версии 0.9.9 кириллица встроена и в Старпаке — это однофайловая версия Ткаббера, не требующая инсталляции. + +В Linux настройка русского языка тоже проста: язык интерфейса Ткаббера обычно берётся из локали. Если локаль ваша русская, а интерфейс нужен английский, то придётся немного повозиться. Обсуждение этого уже несколько выходит за рамки повествования "для начинающих", поэтому если вам нужен именно такой вариант, идите в раздел для "продвинутых" пользователей. + +В заключение можно добавить, что Ткаббер поддерживает Unicode, то есть корректно воспроизводит все юникодные символы. ![(!)](../images/Hammer.png) **Сделать:** Расписать немного подробнее про локали и невозможность писать, скажем, по-испански при локали KOI-8. + +Иногда случается, что русский текст в окне чата в ткаббере линуксовой версии пишется "некрасивым" шрифтом (отличающимся от шрифта латинских символов), или даже "кракозябрами". Это означает, что у вас в системе криво настроены шрифты, и вам — [сюда](Шрифты.md). + +Если вы — пользователь Ubuntu, то, скорее всего, Ткаббер, ставящийся из репозитория, страшен, как сон алкоголика, ибо русские шрифты выглядят жутко. Конечно, для общего развития вам не помешает ознакомиться со статьёй "Шрифты", ссылка на которую дана выше, но если вам нужно быстрое решение, ознакомьтесь [со статьёй](Установка_и_настройка_в_Ubuntu.md), специально написанной для этого случая одним мудрым убунтологом. + +# Настройка Ткаббера +Ну вот, Ткаббер запущен и работает, и теперь вам хочется поковыряться с ним немного и, не влезая в код, более-менее прилично настроить программу под себя. Сделать это можно двумя способами: через пункты меню (при этом настройки действуют только в течение текущей сессии) и через окно настроек. Первый способ удобен для быстрого изучения возможностей клиента, при этом можно не опасаться что-нибудь испортить. Второй способ требует времени, потому что, во-первых, окно настроек Ткаббера похоже на лабиринт Минотавра, а во-вторых, пользователи обычно сюда лезут один раз, всё делают и потом благополучно забывают, что где находится. + +Если первый способ более-менее понятен (броди по менюшкам, нажимай кнопочки, смотри, что случилось), то со вторым посложнее. Настолько посложнее, что мы давно уже хотим написать о настройках [большую статью](Настройки.md). Вот и настал тот час, учитывая, что начинающие пользователи крайне нуждаются в подробном рассказе о настройках, а поскольку продвинутые пользователи после собственных ковыряний мало что помнят, имеет смысл рассказать об этом здесь :) + + Index: wiki/ru/Нетривиальные_настройки.md ================================================================== --- wiki/ru/Нетривиальные_настройки.md +++ wiki/ru/Нетривиальные_настройки.md @@ -1,1471 +1,1073 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Нетривиальные_настройки/index.html) + # Нетривиальные настройки -Материал из Tkabber Wiki +Материал из Tkabber Wiki. ## Содержание * [1 Вступление](#Вступление) * [2 Глобальные Горячие Клавиши (Windows only)](#Глобальные_Горячие_Клавиши_Windows_only) * [3 Отладочный лог под Windows](#Отладочный_лог_под_Windows) * [4 Хоткей для переключения между режимами ростера "все" и "только онлайн"](#Хоткей_для_переключения_между_режимами_ростера_все_и_только_онлайн) * [5 Комбинации кнопок а-ля Unix shell в текстовых виджетах](#Комбинации_кнопок_а-ля_Unix_shell_в_текстовых_виджетах) - * [5.1 Команды перемещения курсора](#Команды_перемещения_курсора) - * [5.2 Команды удаления текста](#Команды_удаления_текста) - * [5.3 Undo/Redo](#Undo_Redo) - * [5.4 Невошедшее](#Невошедшее) - * [5.5 Замечания](#Замечания) - * [5.6 Дидактика](#Дидактика) + * [5.1 Команды перемещения курсора](#Команды_перемещения_курсора) + * [5.2 Команды удаления текста](#Команды_удаления_текста) + * [5.3 Undo/Redo](#Undo_Redo) + * [5.4 Невошедшее](#Невошедшее) + * [5.5 Замечания](#Замечания) + * [5.6 Дидактика](#Дидактика) * [6 Копирование текста по Ctrl-C из окна чата в "иксах"](#Копирование_текста_по_Ctrl-C_из_окна_чата_в_иксах) * [7 Предотвращение запуска нескольких процессов Ткаббера](#Предотвращение_запуска_нескольких_процессов_Ткаббера) - * [7.1 Простое решение](#Простое_решение) - * [7.2 Проблема](#Проблема) - * [7.3 Альтернатива: TCP сокет](#Альтернатива_TCP_сокет) - * [7.4 Альтернатива: Блокировка файла](#Альтернатива_Блокировка_файла) - * [7.5 Пища для размышлений](#Пища_для_размышлений) + * [7.1 Простое решение](#Простое_решение) + * [7.2 Проблема](#Проблема) + * [7.3 Альтернатива: TCP сокет](#Альтернатива_TCP_сокет) + * [7.4 Альтернатива: Блокировка файла](#Альтернатива_Блокировка_файла) + * [7.5 Пища для размышлений](#Пища_для_размышлений) * [8 Отправка сообщений нажатием Ctrl-Enter](#Отправка_сообщений_нажатием_Ctrl-Enter) * [9 Отправка сообщений по нажатию NumPad Enter](#Отправка_сообщений_по_нажатию_NumPad_Enter) * [10 Закрытие табов по Ctrl-W](#Закрытие_табов_по_Ctrl-W) * [11 Скрытый по умолчанию ростер](#Скрытый_по_умолчанию_ростер) * [12 Запрет IRC-команды /exec в окнах чата](#Запрет_IRC-команды__exec_в_окнах_чата) * [13 Отмена подсветки текста активного таба](#Отмена_подсветки_текста_активного_таба) * [14 Настройка кнопки "Тема" в групчатах](#Настройка_кнопки_Тема_в_групчатах) * [15 Предустановленные описания статусов](#Предустановленные_описания_статусов) - * [15.1 Что такое описание статуса и зачем нужны предустановленные описания](#Что_такое_описание_статуса_и_зачем_нужны_предустановленные_описания) - * [15.2 Как настроить предустановленные описания](#Как_настроить_предустановленные_описания) + * [15.1 Что такое описание статуса и зачем нужны предустановленные описания](#Что_такое_описание_статуса_и_зачем_нужны_предустановленные_описания) + * [15.2 Как настроить предустановленные описания](#Как_настроить_предустановленные_описания) * [16 Добавление собственной кнопки на тулбар](#Добавление_собственной_кнопки_на_тулбар) * [17 Собственное меню для киков в групчате](#Собственное_меню_для_киков_в_групчате) * [18 Автоответчик](#Автоответчик) - * [18.1 Установка](#Установка) - * [18.2 Настройка](#Настройка) - * [18.3 Управление](#Управление) + * [18.1 Установка](#Установка) + * [18.2 Настройка](#Настройка) + * [18.3 Управление](#Управление) * [19 Настройка положения окна уведомлений в Windows](#Настройка_положения_окна_уведомлений_в_Windows) * [20 Собственный шрифт для ростеров](#Собственный_шрифт_для_ростеров) * [21 Перемещение элемента меню ростера комнаты](#Перемещение_элемента_меню_ростера_комнаты) * [22 Кнопка Send (отправить) в окне ввода сообщения](#Кнопка_Send_отправить_в_окне_ввода_сообщения) # Вступление -Эта статья является в некотором роде парной статье [**Патчи**](Патчи.md); -отличается она тем, что приведённые тут решения _не требуют изменения кода_ -Ткаббера, что, несомненно, является для большинства применений более удачным -решением. - -> _Важно понимать, что "нетривиальность" настроек означает прежде всего то, что - большинство из них использует **недокументированные** "внутренности" Ткаббера, - и это означает, что эти настройки могут "сломаться" новым релизом Ткаббера - (или даже при следующем обновлении из репозитория, если вы следите за - разработкой)._ - -Страшного, впрочем, ничего нет, так как, во-первых, за подобную гибкость -приходится платить, а во-вторых,в новых релизах зачастую меняются и -документированные интерфейсы. А уж стабильность нестабильных версий и обсуждать -странно. Вообще же не стоит воспринимать только что изложенное слишком -серьёзно: просто имейте в виду возможные затруднения. На самом деле изменения, -затрагивающие работу приведённых здесь настроек, производятся крайне редко. - -Статья пытается достичь двух целей: - -* Быть "книгой рецептов" — _готовых к употреблению_ решений некоторых проблем - или осуществлению нестандартного поведения Ткаббера. -* Объяснить _как_ работают приведённые решения, то есть снабдить пользователей - Ткаббера некоторым набором знаний для самостоятельного решения схожих задач. - -Если вы только подступаетесь к нетривиальной конфигурации Ткаббера, потрудитесь -изучить [**эту статью**](Config.tcl.md). Там же можно найти информацию о подходах к -тестированию новой конфиругации. Если же и само существование/местоположение -файла конфигурации Ткаббера для вас неочевидно, начните -[**отсюда**](Config.tcl_для_начинающих.md). - -Часто задаётся вопрос: что означает выражение "впишите в файл конфигурации _вне -хуков_ ..."? Оно означает, что приведённый кусок кода должен находиться "на -верхнем уровне" файла конфигурации, или — можно сказать и так — вне любого -блока, ограниченного {}. Не забывайте: приведённый в рецепте код скорее всего -не будет иметь смысла внутри какого-либо хука, то есть не следует допускать -таких записей: - - hook::add some_hook { - ... - # тут -- ваш кусок кода: - hook::add some_other_hook { - ... - } - } - -убедитесь, что вы поместили код на "чистое место": - - hook::add some_hook { - ... - } - - # тут -- ваш кусок кода: - hook::add some_other_hook { - ... - } - -Ещё один часто всплывающий вопрос касается привязки комбинаций клавиш — под -Windows привязки на буквенно-цифровые клавиши работают только на английской -раскладке. Эта проблема подробно рассмотрена -[**здесь**](Wish_и_русская_раскладка_в_Windows.md). +Эта статья является в некотором роде парной статье [Патчи](Патчи.md); отличается она тем, что приведённые тут решения _не требуют изменения кода_ Ткаббера, что, несомненно, является для большинства применений более удачным решением. + + _Важно понимать, что "нетривиальность" настроек означает прежде всего то, что большинство из них использует **недокументированные** "внутренности" Ткаббера, и это означает, что эти настройки могут "сломаться" новым релизом Ткаббера (или даже при следующем обновлении из репозитория, если вы следите за разработкой)._ + +Страшного, впрочем, ничего нет, так как, во-первых, за подобную гибкость приходится платить, а во-вторых,в новых релизах зачастую меняются и документированные интерфейсы. А уж стабильность нестабильных версий и обсуждать странно. Вообще же не стоит воспринимать только что изложенное слишком серьёзно: просто имейте в виду возможные затруднения. На самом деле изменения, затрагивающие работу приведённых здесь настроек, производятся крайне редко. + +Статья пытается достичь двух целей: + +* Быть "книгой рецептов" — _готовых к употреблению_ решений некоторых проблем или осуществлению нестандартного поведения Ткаббера. +* Объяснить _как_ работают приведённые решения, то есть снабдить пользователей Ткаббера некоторым набором знаний для самостоятельного решения схожих задач. + +Если вы только подступаетесь к нетривиальной конфигурации Ткаббера, потрудитесь изучить [эту статью](Config.tcl.md). Там же можно найти информацию о подходах к тестированию новой конфиругации. Если же и само существование/местоположение файла конфигурации Ткаббера для вас неочевидно, начните [отсюда](Config.tcl_для_начинающих.md). + +Часто задаётся вопрос: что означает выражение "впишите в файл конфигурации _вне хуков_ ..."? Оно означает, что приведённый кусок кода должен находиться "на верхнем уровне" файла конфигурации, или — можно сказать и так — вне любого блока, ограниченного {}. Не забывайте: приведённый в рецепте код скорее всего не будет иметь смысла внутри какого-либо хука, то есть не следует допускать таких записей: + + hook::add some_hook { + ... + # тут -- ваш кусок кода: + hook::add some_other_hook { + ... + } + } + +убедитесь, что вы поместили код на "чистое место": + + hook::add some_hook { + ... + } + + # тут -- ваш кусок кода: + hook::add some_other_hook { + ... + } + +Ещё один часто всплывающий вопрос касается привязки комбинаций клавиш — под Windows привязки на буквенно-цифровые клавиши работают только на английской раскладке. Эта проблема подробно рассмотрена [здесь](Wish_и_русская_раскладка_в_Windows.md). # Глобальные Горячие Клавиши (Windows only) -Для разминки давайте прикрутим к Ткабберу стандартную возможность задавать -горячие клавиши (hotkeys) так, чтобы они действовали независимо от того, -активно окно Ткаббера в данный момент или нет. Дальше по тексту такие hotkeys -мы будем называть "Глобальные Горячие Клавиши" - **ГГК** (от "global hotkeys"). - -Поддержку ГГК можно реализовать только под Windows, где такая концепция -существует на уровне ОС. - -Однако, Tk в Windows самостоятельно не поддерживает ГГК, поэтому необходимо -скачать [библиотеку Winutils](http://sourceforge.net/projects/tomasoft). После -чего распакуйте эту библиотеку в поддиректорию **tkabber/winutil/** в вашей -директории с исходниками Ткаббера (то, что называется $::rootdir в Ткаббере). -_Для примера, на том же уровне иерархии находятся директории ifaceck и ifacetk, -к которым мы ещё вернёмся в следующем патче._ - -Для того, чтобы эта библиотека подключилась на следующей загрузке вашего -Ткаббера, необходимо добавить следующие строчки в ваш config.tcl (файл -настроек): +Для разминки давайте прикрутим к Ткабберу стандартную возможность задавать горячие клавиши (hotkeys) так, чтобы они действовали независимо от того, активно окно Ткаббера в данный момент или нет. Дальше по тексту такие hotkeys мы будем называть "Глобальные Горячие Клавиши" - **ГГК** (от "global hotkeys"). + +Поддержку ГГК можно реализовать только под Windows, где такая концепция существует на уровне ОС. + +Однако, Tk в Windows самостоятельно не поддерживает ГГК, поэтому необходимо скачать [библиотеку Winutils](http://sourceforge.net/projects/tomasoft). После чего распакуйте эту библиотеку в поддиректорию **tkabber/winutil/** в вашей директории с исходниками Ткаббера (то, что называется $::rootdir в Ткаббере). _Для примера, на том же уровне иерархии находятся директории ifaceck и ifacetk, к которым мы ещё вернёмся в следующем патче._ + +Для того, чтобы эта библиотека подключилась на следующей загрузке вашего Ткаббера, необходимо добавить следующие строчки в ваш config.tcl (файл настроек): if {[file exists $rootdir/winutil/winutils.tcl]} { - # This will load the neccessary dll on start up - source $rootdir/winutil/winutils.tcl - } - -Теперь необходимо настроить горячие клавиши. Для этого опять откройте на -редактирование файл config.tcl, найдите в нём секцию **hook::add -finload\_hook** и вставьте в её конец следующие строки: - - winutils::hotkey #auto Ctrl+Shift+I { - switch -- [wm state .] { - normal { wm state . iconic } - default { wm state . normal } - } - } - -То есть, если у вас ранее не было такой секции либо она была пустой, полный -кусок кода должен выглядеть так: - - hook::add finload_hook { - winutils::hotkey #auto Ctrl+Shift+I { - switch -- [wm state .] { - normal { wm state . iconic } - default { wm state . normal } - } - } - } - -После чего сохраните файл config.ctl и перезагрузите Ткаббер. Если всё сделано -правильно, то вы сможете скрывать или открывать главное окно программы, нажимая -**Ctrl-Shift-I** (как это сделано в [Миранде](http://miranda-im.org/)). В -принципе ГГК может быть любой, как и действия, которые она должна выполнять. - -И наконец, самое важное - выбрать клавиши, которые вам удобны, и действия, -которые вам нужны. Воспользуйтесь моим примером (с действием, которое было -нужно мне) и настройте те действия, что удобны вам. Не забудьте потом зайти к -нам в конференцию -[`xmpp:tkabber@conference.jabber.ru`](xmpp:tkabber@conference.jabber.ru) и -рассказать, что у вас получилось :) Может быть, кому-нибудь ещё окажется -полезен ваш опыт. - -Таким образом, ваши действия сводятся к следующим пунктам: - -1. Установить winutil; -1. Подключить winutil через config.tcl; -1. Настроить горячие клавиши в config.tcl; -1. Перезагрузить Ткаббер и наслаждаться ещё одной его возможностью. - -Автор — [**lknight**](Участник_Lknight.md). -[English variant of this tutorial](http://tkabber.jabber.ru/global-hotkeys-windows) - -_Если к моменту, когда вы читаете это описание, линки на файлы/проекты уже -устарели, вы можете скачать актуальные на **октябрь 2005** файлы тут:_ - -* [WinUtils 0.8](../files/Winutil08.zip) + # This will load the neccessary dll on start up + source $rootdir/winutil/winutils.tcl + } + +Теперь необходимо настроить горячие клавиши. Для этого опять откройте на редактирование файл config.tcl, найдите в нём секцию **hook::add finload\_hook** и вставьте в её конец следующие строки: + + winutils::hotkey #auto Ctrl+Shift+I { + switch -- [wm state .] { + normal { wm state . iconic } + default { wm state . normal } + } + } + +То есть, если у вас ранее не было такой секции либо она была пустой, полный кусок кода должен выглядеть так: + + hook::add finload_hook { + winutils::hotkey #auto Ctrl+Shift+I { + switch -- [wm state .] { + normal { wm state . iconic } + default { wm state . normal } + } + } + } + +После чего сохраните файл config.ctl и перезагрузите Ткаббер. Если всё сделано правильно, то вы сможете скрывать или открывать главное окно программы, нажимая **Ctrl-Shift-I** (как это сделано в [Миранде](http://miranda-im.org/)). В принципе ГГК может быть любой, как и действия, которые она должна выполнять. + +И наконец, самое важное - выбрать клавиши, которые вам удобны, и действия, которые вам нужны. Воспользуйтесь моим примером (с действием, которое было нужно мне) и настройте те действия, что удобны вам. Не забудьте потом зайти к нам в конференцию `[xmpp:tkabber@conference.jabber.ru](xmpp:tkabber@conference.jabber.ru)` и рассказать, что у вас получилось :) Может быть, кому-нибудь ещё окажется полезен ваш опыт. + +Таким образом, ваши действия сводятся к следующим пунктам: + +1. Установить winutil; +1. Подключить winutil через config.tcl; +1. Настроить горячие клавиши в config.tcl; +1. Перезагрузить Ткаббер и наслаждаться ещё одной его возможностью. + +Автор — [Участник:lknight](Участник_Lknight.md). **[English variant of this tutorial](http://tkabber.jabber.ru/global-hotkeys-windows)** + +_Если к моменту, когда вы читаете это описание, линки на файлы/проекты уже устарели, вы можете скачать актуальные на **октябрь 2005** файлы тут:_ + +* [WinUtils 0.8](../files/Winutil08.zip) # Отладочный лог под Windows -Wish под Windows не имеет открытых потоков **stdout** и **stderr**, которые -можно куда-либо перенаправить; точнее, эти потоки направлены в -[**консоль процесса wish**](Ткаббер_ЧаВо.md#Консоль_Ткаббера). +Wish под Windows не имеет открытых потоков **stdout** и **stderr**, которые можно куда-либо перенаправить; точнее, эти потоки направлены в [консоль процесса wish](Ткаббер_ЧаВо.md#Консоль_Ткаббера). -С другой стороны, Ткаббер повсеместно использует для отладки процедуру -**debugmsg**, которая как раз "ругается" на **stdout**. Поэтому стандартное -юниксовое заклинание +С другой стороны, Ткаббер повсеместно использует для отладки процедуру **debugmsg**, которая как раз "ругается" на **stdout**. Поэтому стандартное юниксовое заклинание tkabber >/tmp/TKABBER_LOG 2>&1 -здесь не проходит. +здесь не проходит. -Обходной путь такой. +Обходной путь такой. -В начало **config.tcl** добавляем: +В начало **config.tcl** добавляем: # Отладка (1 -- включена, 0 -- выключена): if {1} { - set debug_lvls {hook plugin chat} - - set logfile [file join [file norm ~] .tkabber TKABBER_LOG] - - close stdout - open $logfile w - - close stderr - open $logfile a + set debug_lvls {hook plugin chat} + + set logfile [file join [file norm ~] .tkabber TKABBER_LOG] + + close stdout + open $logfile w + + close stderr + open $logfile a + } else { - set debug_lvls {} + set debug_lvls {} } -Этот код перенаправляет стандартные потоки вывода в файл +Этот код перенаправляет стандартные потоки вывода в файл ВАШ_ДОМАШНИЙ_КАТАЛОГ\.tkabber\TKABBER_LOG --- -Список классов отладочной информации, определённый здесь как +Список классов отладочной информации, определённый здесь как set debug_lvls {hook plugin chat} -естественно, имеет смысл отредактировать под ваши нужды. К примеру, при отладке -собственного плагина **frobozz** можно использовать в его коде команды типа +естественно, имеет смысл отредактировать под ваши нужды. К примеру, при отладке собственного плагина **frobozz** можно использовать в его коде команды типа debugmsg frobozz "foo: $foo; bar: $bar" -и внести **frobozz** в список классов отладочных сообщений: +и внести **frobozz** в список классов отладочных сообщений: lappend debug_lvls frobozz -Подробности по поводу магии переоткрывания стандартных потоков ввода/вывода в -тикле описаны [здесь](http://www.tcl.tk/man/tcl8.4/TclLib/StdChannels.htm). +Подробности по поводу магии переоткрывания стандартных потоков ввода/вывода в тикле описаны [здесь](http://www.tcl.tk/man/tcl8.4/TclLib/StdChannels.htm). -Стандартные потоки перенаправлял [**Kostix**](Участник_Kostix.md). +Стандартные потоки перенаправлял [Kostix](Участник_Kostix.md). # Хоткей для переключения между режимами ростера "все" и "только онлайн" -Ниже приведён кусочек кода, вешающий на комбинацию Ctrl-o циклическое -переключение между режимами ростера "все" и "только онлайн". +Ниже приведён кусочек кода, вешающий на комбинацию Ctrl-o циклическое переключение между режимами ростера "все" и "только онлайн". -Забейте в конфиг вне хуков: +Забейте в конфиг вне хуков: bind Text {} bind . ifacetk::roster::switch_only_online -Измените хоткей Ctrl-o по вкусу согласно -[этого документа](http://www.tcl.tk/man/tcl8.4/TkCmd/bind.htm). Если вы выберете -комбинацию, отличную от Ctrl-o, то первая команда из двух вам не потребуется -(однако смотрите ниже, чтобы подготовиться к возможным сюрпризам). - -Пояснения для въедливых: - -* Первая команда отучает текстовые виджеты Tk (используемые для реализации - полей ввода чата в Ткаббере) реагировать на комбинацию Ctrl-o, на которую там - повешено действие "добавить пустую строку под курсор". Это шаманство - требуется потому, что большую часть времени вы будете нажимать Ctrl-o в тот - момент, когда фокус ввода будет в одном из полей ввода чата, которое и будет - пытаться его обработать раньше главного окна (см. ниже). -* Вторая команда прибивает выполнение нужного нам действия к главному окну - приложения (которое в Tk называется ".") — (весьма продвинутая) реализация - привязок событий к виджетам, реализованная в Tk, делает так, что, если - программистом не указано обратное, любой виджет, в котором нет привязки - некоторого действия к произошедшему в нём событию, в конечном итоге отправит - это событие главному окну. Поэтому наша команда делает так, что нужная нам - комбинация клавиш будет работать независимо от того, где находится фокус - ввода. За подробностями отправляйтесь к документации по команде - [bindtags](http://www.tcl.tk/man/tcl8.5/TkCmd/bindtags.htm). +Измените хоткей Ctrl-o по вкусу согласно [этого документа](http://www.tcl.tk/man/tcl8.4/TkCmd/bind.htm). Если вы выберете комбинацию, отличную от Ctrl-o, то первая команда из двух вам не потребуется (однако смотрите ниже, чтобы подготовиться к возможным сюрпризам). + +Пояснения для въедливых: + +* Первая команда отучает текстовые виджеты Tk (используемые для реализации полей ввода чата в Ткаббере) реагировать на комбинацию Ctrl-o, на которую там повешено действие "добавить пустую строку под курсор". Это шаманство требуется потому, что большую часть времени вы будете нажимать Ctrl-o в тот момент, когда фокус ввода будет в одном из полей ввода чата, которое и будет пытаться его обработать раньше главного окна (см. ниже). +* Вторая команда прибивает выполнение нужного нам действия к главному окну приложения (которое в Tk называется ".") — (весьма продвинутая) реализация привязок событий к виджетам, реализованная в Tk, делает так, что, если программистом не указано обратное, любой виджет, в котором нет привязки некоторого действия к произошедшему в нём событию, в конечном итоге отправит это событие главному окну. Поэтому наша команда делает так, что нужная нам комбинация клавиш будет работать независимо от того, где находится фокус ввода. За подробностями отправляйтесь к документации по команде [bindtags](http://www.tcl.tk/man/tcl8.5/TkCmd/bindtags.htm). # Комбинации кнопок а-ля Unix shell в текстовых виджетах -> **Внимание!** Данная функциональность реализована готовым - [**плагином**](Плагины.md#Unixkeys). - -Тут рассказывается о том, как прикрутить к текстовым виджетам в Ткаббере -"юниксшелловые" комбинации кнопок. - -Естественно, это _не_ "комбинации кнопок юниксового шелла" в строгом смысле -этого понятия, ибо строгого смысла у этого понятия нет, да и само понятие -слишком расплывчато. Это — неполное воспроизведение набора команд по уполчанию -библиотеки **GNU Readline**. Если у вас есть под боком система с **Readline**, -документация на неё обычно доступна в формате GNU Texinfo, а вас интересует -страница руководства "rluserman". Кроме того, некоторые приведённые команды -"взяты" из оболочки **bash**. Проще говоря, эти настройки подойдут тем, чьи -"клавиатурные" рефлексы "заточены" на bash-подобную оболочку, режим вставки -Vim'а и прочие похожие вещи. - -Приведённые настройки нужно писать в конфиг Ткаббера. + **Внимание!** Данная функциональность реализована готовым [плагином](Плагины.md#unixkeys). + +Тут рассказывается о том, как прикрутить к текстовым виджетам в Ткаббере "юниксшелловые" комбинации кнопок. + +Естественно, это _не_ "комбинации кнопок юниксового шелла" в строгом смысле этого понятия, ибо строгого смысла у этого понятия нет, да и само понятие слишком расплывчато. Это — неполное воспроизведение набора команд по уполчанию библиотеки **GNU Readline**. Если у вас есть под боком система с **Readline**, документация на неё обычно доступна в формате GNU Texinfo, а вас интересует страница руководства "rluserman". Кроме того, некоторые приведённые команды "взяты" из оболочки **bash**. Проще говоря, эти настройки подойдут тем, чьи "клавиатурные" рефлексы "заточены" на bash-подобную оболочку, режим вставки Vim'а и прочие похожие вещи. + +Приведённые настройки нужно писать в конфиг Ткаббера. ## Команды перемещения курсора -По умолчанию работают и не требуют дополнительных настроек следующие команды: - -* Ctrl-b и Ctrl-f — переместить курсор на символ назад и вперёд, - соответственно. - -* Ctrl-a и Ctrl-e — переместить курсор в начало и конец текущей строки, - соответственно. - -Реализация следующих двух команд использует возможности интроспекции, -предоставляемые тиклем — мы заимствуем реализацию нужных нам действий у -существующих команд: - -Alt-b — переместить курсор на слово влево: +По умолчанию работают и не требуют дополнительных настроек следующие команды: + +* Ctrl-b и Ctrl-f — переместить курсор на символ назад и вперёд, соответственно. + +* Ctrl-a и Ctrl-e — переместить курсор в начало и конец текущей строки, соответственно. + +Реализация следующих двух команд использует возможности интроспекции, предоставляемые тиклем — мы заимствуем реализацию нужных нам действий у существующих команд: + +Alt-b — переместить курсор на слово влево: bind Text [bind Text ] -Alt-f — переместить курсор на слово вправо: +Alt-f — переместить курсор на слово вправо: bind Text [bind Text ] -**Примечание:** на некоторых системах, возможно, вместо `Alt` понадобится -указывать модификатор `Meta`. Можно воспользоваться "копипастом", а можно -заставить работать тикль: +**Примечание:** на некоторых системах, возможно, вместо `Alt` понадобится указывать модификатор `Meta`. Можно воспользоваться "копипастом", а можно заставить работать тикль: array set map { - b Left - f Right + b Left + f Right } foreach key [array names map] { - foreach mod {Alt Meta} { - bind Text <$mod-$key> [bind Text ] - } + foreach mod {Alt Meta} { + bind Text <$mod-$key> [bind Text ] + } } unset map key mod -Эта команда создаст четыре биндинга: Alt-b, Meta-b, Alt-f; и Meta-f, -привязанные к соответствующим командам. +Эта команда создаст четыре биндинга: Alt-b, Meta-b, Alt-f; и Meta-f, привязанные к соответствующим командам. ## Команды удаления текста -По умолчанию работают и не требуют дополнительных настроек следующие команды: - -* BackSpace — удалить символ слева от курсора. - -* Del и Ctrl-d — удалить символ справа от курсора. - -* Ctrl-k — убить текст от позиции курсора до конца строки. - -Усовершенствуем встроенные возможности несколькими командами. - -Данной команды нет в **Readline**, но она есть в **bash**: - -Ctrl-u — убить текст от начала строки до позиции курсора: +По умолчанию работают и не требуют дополнительных настроек следующие команды: + +* BackSpace — удалить символ слева от курсора. + +* Del и Ctrl-d — удалить символ справа от курсора. + +* Ctrl-k — убить текст от позиции курсора до конца строки. + +Усовершенствуем встроенные возможности несколькими командами. + +Данной команды нет в **Readline**, но она есть в **bash**: + +Ctrl-u — убить текст от начала строки до позиции курсора: bind Text { %W delete {insert linestart} insert} -Теперь — убиение по границам слов: +Теперь — убиение по границам слов: -Alt-BackSpace — удалить текст от курсора до начала слова, содержащего позицию -курсора, или до начала предыдущего слова, если курсор стоит между словами: +Alt-BackSpace — удалить текст от курсора до начала слова, содержащего позицию курсора, или до начала предыдущего слова, если курсор стоит между словами: bind Text { %W delete [tk::TextPrevPos %W insert tcl_startOfPreviousWord] insert } -Ситуация несколько сложнее с Control-w: в руководстве на **Readline** сказано, -что эта команда удаляет текст до предыдущего пробела и таким образом отличается -от Alt-BackSpace. - -Лично мне ([**Kostix**](Участник_Kostix.md)) эта разница ясна не вполне. -Получается, что Ctrl-w не должна стирать "foo", если нажата в ситуации "foo | -bar" ("|" отмечает позицию курсора). Но она _сотрёт_ это слово, будучи -активирована в **bash**. Там она работает в точности, как предыдушая команда. - -Одним словом, "suggestions are welcome", но здесь предлагается не -заморачиваться и повесить на Ctrl-w ту же команду, что и на Alt-BackSpace. -Здесь тоже имеет смысл призвать на помощь тикль: +Ситуация несколько сложнее с Control-w: в руководстве на **Readline** сказано, что эта команда удаляет текст до предыдущего пробела и таким образом отличается от Alt-BackSpace. + +Лично мне ([Kostix](Участник_Kostix.md)) эта разница ясна не вполне. Получается, что Ctrl-w не должна стирать "foo", если нажата в ситуации "foo | bar" ("|" отмечает позицию курсора). Но она _сотрёт_ это слово, будучи активирована в **bash**. Там она работает в точности, как предыдушая команда. + +Одним словом, "suggestions are welcome", но здесь предлагается не заморачиваться и повесить на Ctrl-w ту же команду, что и на Alt-BackSpace. Здесь тоже имеет смысл призвать на помощь тикль: foreach {mod key} {Alt BackSpace Control w} { - bind Text <$mod-Key-$key> { %W delete ... + bind Text <$mod-Key-$key> { %W delete ... } unset mod key -Alt-d — удалить текст от курсора до конца слова, содержащего позицию курсора, -или до конца следующего слова, если курсор стоит между словами: +Alt-d — удалить текст от курсора до конца слова, содержащего позицию курсора, или до конца следующего слова, если курсор стоит между словами: bind Text { %W delete insert [::tk::TextNextPos %W insert tcl_endOfWord] } -Эту же команду может выполнять Alt-Del; повесьте на неё ту же команду, что и -для Alt-d. И опять пусть за нас работает тикль: +Эту же команду может выполнять Alt-Del; повесьте на неё ту же команду, что и для Alt-d. И опять пусть за нас работает тикль: foreach key {d Delete} { - bind Text { ... + bind Text { ... } unset key ## Undo/Redo -Сначала — две команды, отменяющие любое последнее действие по редактированию -текста: +Сначала — две команды, отменяющие любое последнее действие по редактированию текста: -Ctrl-\_ работает в "иксовых" версиях Tk; для добавления такой поддержки в -Windows нужно сделать: +Ctrl-\_ работает в "иксовых" версиях Tk; для добавления такой поддержки в Windows нужно сделать: event add <> -Ctrl-x,Ctrl-u добавляется (заодно показывая синтаксис "цепочечных" событий в -Tk) так: +Ctrl-x,Ctrl-u добавляется (заодно показывая синтаксис "цепочечных" событий в Tk) так: event add <> -Следующая команда — Ctrl-y — не может иметь чёткого эквивалента, поскольку -вставляет последний кусок текста, удалённый из строки и помещённый в kill-ring -**Readline** (а у текстовых виджетов Tk нет такой штуки). Однако фактически это -действие очень похоже на "Redo", и именно на эту комбинацию и повешено "Redo" в -Windows. В "иксовом" Tk Ctrl-y означает "вставить текст из CLIPBOARD". Если -есть желание "перебить" его чтоб было как "в виндах" и **bash**, то: +Следующая команда — Ctrl-y — не может иметь чёткого эквивалента, поскольку вставляет последний кусок текста, удалённый из строки и помещённый в kill-ring **Readline** (а у текстовых виджетов Tk нет такой штуки). Однако фактически это действие очень похоже на "Redo", и именно на эту комбинацию и повешено "Redo" в Windows. В "иксовом" Tk Ctrl-y означает "вставить текст из CLIPBOARD". Если есть желание "перебить" его чтоб было как "в виндах" и **bash**, то: bind <> ## Невошедшее -Пару команд **GNU Readline** мы обошли стороной: +Пару команд **GNU Readline** мы обошли стороной: -* Ctrl-l — перерисовать экран — по-видимому, смысла в контексте виджета Text - не имеет. +* Ctrl-l — перерисовать экран — по-видимому, смысла в контексте виджета Text не имеет. -* M-y — "вращение" kill-ring'а **Readline** — как-то тоже не вписывается, т.к. - стеком Undo/Redo управлять, насколько мне изестно, нельзя. +* M-y — "вращение" kill-ring'а **Readline** — как-то тоже не вписывается, т.к. стеком Undo/Redo управлять, насколько мне изестно, нельзя. ## Замечания -Пытливые умы могли заметить, что использовались две команды — `bind` и `event`. - -* Первая (в нашем случае) связывала воедино триплет "класс виджета, событие - Tk, скрипт для выполнения", и с ней всё просто: ко всем виджетам класса - `Text` в Ткаббере привязываются скрипты, которые выполняются при наступлении - соответствующих событий (нажатий комбинаций клавиш). -* Вторая связывала скрипты с _виртуальными событиями Tk_, которые уже связаны - с (в том числе) виджетами класса `Text`. - -Вывод, который следует из такого разделения, прост: те привязки, которые -делались к виртуальным событиям, будут работать помимо `Text` в виджете любого -класса, который эти события поддерживает. А те привязки, которые делались к -классу `Text`, будут работать только в текстовых виджетах. То есть не надо -ожидать, что они будут работать в однострочных полях ввода (класс `Entry`) или -комбобоксах (это вообще пакет BWidget и класс надо выяснять). - -Нужно ли заморачиваться с подобной "тонкой настройкой" нетекстовых виджетов -(например, однострочных полей ввода) — вопрос философский. Как говорится, -"patches are welcome". +Пытливые умы могли заметить, что использовались две команды — `bind` и `event`. + +* Первая (в нашем случае) связывала воедино триплет "класс виджета, событие Tk, скрипт для выполнения", и с ней всё просто: ко всем виджетам класса `Text` в Ткаббере привязываются скрипты, которые выполняются при наступлении соответствующих событий (нажатий комбинаций клавиш). +* Вторая связывала скрипты с _виртуальными событиями Tk_, которые уже связаны с (в том числе) виджетами класса `Text`. + +Вывод, который следует из такого разделения, прост: те привязки, которые делались к виртуальным событиям, будут работать помимо `Text` в виджете любого класса, который эти события поддерживает. А те привязки, которые делались к классу `Text`, будут работать только в текстовых виджетах. То есть не надо ожидать, что они будут работать в однострочных полях ввода (класс `Entry`) или комбобоксах (это вообще пакет BWidget и класс надо выяснять). + +Нужно ли заморачиваться с подобной "тонкой настройкой" нетекстовых виджетов (например, однострочных полей ввода) — вопрос философский. Как говорится, "patches are welcome". ## Дидактика -Поскольку цель данной вики заключается не только в том, чтобы вложить в руки -пролетариата пар и электричество, но и в том, чтобы вооружить начинающих -ткабберин и ткабберистов необходимым знанием для самостоятельного ковыряния -Ткаббера, а главное — неуклонно пропагандировать дао этого Jabber-клиента, мы -расскажем здесь, как были получены изложенные в данном разделе сведения. - -Посему ниже приведены некоторые идеи относительно данного раздела. Перед -чтением убедитесь, что вы приняли позу лотоса, левитируя, и ваша -[сахасрара](http://www.chakra.ru/sahasrara.htm) полностью открыта. - -![(!)](../images/Hammer.png) **Сделать:** написать про основные идеи ковыряния - -Примерный план: - -* понимание того, что Tcl/Tk — скриптовый и ультра-динамический язык, то есть - можно делать радикальные модернизации кода готового приложения; -* выяснение того, что chat input window — виджет Text; -* чтение мануалов (man text event bind); -* интроспекция и забавы с tkcon и простым виджетом text: - * bind Text; поиск по выводу; - * bind Text EVENT\_SPEC и анализ его вывода; - * info args, info body; - * info commands и ограничение его поиска. - * команды виджета Text; - * сложные текстовые индексы виджета Text; - * быстрое тестирование в tkcon. - -... - -"More юникс вея" в Ткаббер добавлял [**Kostix**](Участник_Kostix.md). +Поскольку цель данной вики заключается не только в том, чтобы вложить в руки пролетариата пар и электричество, но и в том, чтобы вооружить начинающих ткабберин и ткабберистов необходимым знанием для самостоятельного ковыряния Ткаббера, а главное — неуклонно пропагандировать дао этого Jabber-клиента, мы расскажем здесь, как были получены изложенные в данном разделе сведения. + +Посему ниже приведены некоторые идеи относительно данного раздела. Перед чтением убедитесь, что вы приняли позу лотоса, левитируя, и ваша [сахасрара](http://www.chakra.ru/sahasrara.htm) полностью открыта. + +![(!)](../images/Hammer.png) **Сделать:** написать про основные идеи ковыряния + +Примерный план: + +* понимание того, что Tcl/Tk — скриптовый и ультра-динамический язык, то есть можно делать радикальные модернизации кода готового приложения; +* выяснение того, что chat input window — виджет Text; +* чтение мануалов (man text event bind); +* интроспекция и забавы с tkcon и простым виджетом text: + * bind Text; поиск по выводу; + * bind Text EVENT\_SPEC и анализ его вывода; + * info args, info body; + * info commands и ограничение его поиска. + * команды виджета Text; + * сложные текстовые индексы виджета Text; + * быстрое тестирование в tkcon. + +... + +"More юникс вея" в Ткаббер добавлял [Kostix](Участник_Kostix.md). # Копирование текста по Ctrl-C из окна чата в "иксах" -Ниже приведён кусок кода, который позволяет в Ткаббере "под иксами" копировать -текст из окна чата (из того, в котором ведётся _протокол_ чата), используя -стандартные клавиатурные комбинации копирования текста. - -Проблема с "недопиленным" Ткаббером заключается в том, что окно чата никогда не -получает клавиатурный фокус, что необходимо для работы "хоткеев". В Windows -комбинация Ctrl-C работает для данного окна потому, что в Windows не -поддерживается механизм -["PRIMARY selection"](http://freedesktop.org/wiki/Standards_2fClipboardsWiki) — -копирование текста из виджета, не получающего клавиатурный фокус было бы в -противном случае невозможно. - -"Иксовое ограничение" преодолевается следующим образом: на окно _ввода текста_ -чата вешается собственный обработчик, который, будучи вызван по любой -стандартной (и нестандартной) комбинации клавиш, соответствующей действию -"копировать текст", проверяет: - -* если в окне ввода текста есть выделенный текст, то выполняется стандартное - для окна действие по копированию этого текста; -* если в окне ввода нет выделенного текста, то действие "копировать текст" - эмулируется в соответствующем окне протокола чата — если там есть выделенный - текст, он копируется в буфер обмена. - -Таким образом, пользователь всегда жмёт хоткей "копировать текст" в окне ввода -текста чата, но текст копируется из того окна (ввода текста или протокола), в -котором в данный момент есть выделенный текст. - -Этот код следует поместить в **config.tcl** вне любых хуков. +Ниже приведён кусок кода, который позволяет в Ткаббере "под иксами" копировать текст из окна чата (из того, в котором ведётся _протокол_ чата), используя стандартные клавиатурные комбинации копирования текста. + +Проблема с "недопиленным" Ткаббером заключается в том, что окно чата никогда не получает клавиатурный фокус, что необходимо для работы "хоткеев". В Windows комбинация Ctrl-C работает для данного окна потому, что в Windows не поддерживается механизм ["PRIMARY selection"](http://freedesktop.org/wiki/Standards_2fClipboardsWiki) — копирование текста из виджета, не получающего клавиатурный фокус было бы в противном случае невозможно. + +"Иксовое ограничение" преодолевается следующим образом: на окно _ввода текста_ чата вешается собственный обработчик, который, будучи вызван по любой стандартной (и нестандартной) комбинации клавиш, соответствующей действию "копировать текст", проверяет: + +* если в окне ввода текста есть выделенный текст, то выполняется стандартное для окна действие по копированию этого текста; +* если в окне ввода нет выделенного текста, то действие "копировать текст" эмулируется в соответствующем окне протокола чата — если там есть выделенный текст, он копируется в буфер обмена. + +Таким образом, пользователь всегда жмёт хоткей "копировать текст" в окне ввода текста чата, но текст копируется из того окна (ввода текста или протокола), в котором в данный момент есть выделенный текст. + +Этот код следует поместить в **config.tcl** вне любых хуков. # Customize chat input window bindings: namespace eval my {} proc my::tweak_chat_input_window {chatid type} { - set cw [chat::chat_win $chatid] - set iw [chat::input_win $chatid] - - bind $iw <> [list \ - if {[string equal [selection own] %W]} [bind $iw <>] \ - else [list event generate $cw <>] - ] + set cw [chat::chat_win $chatid] + set iw [chat::input_win $chatid] + + bind $iw <> [list \ + if {[string equal [selection own] %W]} [bind $iw <>] \ + else [list event generate $cw <>] + ] } hook::add open_chat_post_hook my::tweak_chat_input_window -**Принцип действия** (можно не читать): - -Для начала мы создаём собственное пространство имён "my". Это необязательный -шаг, но он убирает нашу процедуру из глобального пространства имён. Не мешалась -чтоб. - -Поскольку наша цель — изменить настройку окна ввода текста для каждого -создаваемого сеанса чата, нам удобнее всего написать обработчик события -`open_chat_post_hook`, которое генерируется после того, как Ткаббер создал -окно "верхнего уровня" для нового сеанса чата. (Про наиболее важные -[**хуки**](Загрузка_настроек.md) читайте в документации, идущей вместе с Ткаббером -— **tkabber.html**.) - -Обработчик хука `open_chat_post_hook` вызывается с двумя параметрами: - -* **chatid** — идентификатор сеанса чата; -* **type** — тип сеанса чата. - -**chatid** — это "ключ", который позволяет получить доступ к различным -компонентам, поддерживающим данный сеанс чата. - -Нас интересует доступ к двум окнам: ввода текста и протокола чата. Их имена мы -получаем при помощи процедур `chat_win` и `input_win` модуля "chat" (см. -**chats.tcl**). - -Теперь окна у нас есть, и можно заняться навешиванием обработчика на -_виртуальное событие_ \<\>. За подробностями обращайтесь к описаниям -команд [bind](http://www.tcl.tk/man/tcl8.4/TkCmd/bind.htm) и -[event](http://www.tcl.tk/man/tcl8.4/TkCmd/event.htm). - -Обработчик будет состоять из одной команды — `if`, но так как нам нужно -обеспечить подстановку переменных при формировании этой команды, мы не можем -использовать {} и используем команду -[list](http://www.tcl.tk/man/tcl8.4/TkCmd/list.htm). (На самом деле в этом коде -можно вместо [list ...] использовать "...".) - -Код обработчика события \<\> первым делом узнаёт имя окна, владеющего в -данный момент выделением текста, при помощи команды -[selection](http://www.tcl.tk/man/tcl8.4/TkCmd/selection.htm), и сравнивает это -имя с именем окна, для которого выполняется обработчик (тикль подставляет его -вместо специального токена **%W**; на самом деле тут без проблем можно -использовать **$iw** вместо **%W**). - -Если имена окон совпали, то выделением владеет окно ввода чата, и нам нужно -выполнить стандартное для него действие, закреплённое за событием \<\>. -Поскольку своей командой `bind $iw ...` мы как раз это действие и -переопределяем, нам нужно узнать код текущего обработчика. Это делается при -помощи двухаргументной формы команды **bind**; результат выполнения этой -команды и формирует первую ("истинную") ветвь команды **if**. - -Если имена не совпали, то нам стоит не мудрствуя лукаво сделать вид, будто -пользователь исхитрился выполнить действие "копировать текст" в окне протокола -чата. На помощь приходит умение команды **event** генерировать произвольные -события в произвольном окне. Соответствующий код, опять сформированный при -помощи команды **list**, чтобы разрешить подстановку переменной **cw**, -формирует "ложную" ветвь нашего обработчика. - -Информацию о правильном формировании команд тикля (чем отличается {} от "" и -[list ...], а также зачем нужны "\\" на концах некоторых строк) читайте в -["Эндекологии"](http://wiki.tcl.tk/14940). - -Эзотерический биндинг прикручивал [**Kostix**](Участник_Kostix.md). +**Принцип действия** (можно не читать): + +Для начала мы создаём собственное пространство имён "my". Это необязательный шаг, но он убирает нашу процедуру из глобального пространства имён. Не мешалась чтоб. + +Поскольку наша цель — изменить настройку окна ввода текста для каждого создаваемого сеанса чата, нам удобнее всего написать обработчик события `open_chat_post_hook`, которое генерируется после того, как Ткаббер создал окно "верхнего уровня" для нового сеанса чата. (Про наиболее важные [хуки](Загрузка_настроек.md) читайте в документации, идущей вместе с Ткаббером — **tkabber.html**.) + +Обработчик хука `open_chat_post_hook` вызывается с двумя параметрами: + +* **chatid** — идентификатор сеанса чата; +* **type** — тип сеанса чата. + +**chatid** — это "ключ", который позволяет получить доступ к различным компонентам, поддерживающим данный сеанс чата. + +Нас интересует доступ к двум окнам: ввода текста и протокола чата. Их имена мы получаем при помощи процедур `chat_win` и `input_win` модуля "chat" (см. **chats.tcl**). + +Теперь окна у нас есть, и можно заняться навешиванием обработчика на _виртуальное событие_ \<\>. За подробностями обращайтесь к описаниям команд [bind](http://www.tcl.tk/man/tcl8.4/TkCmd/bind.htm) и [event](http://www.tcl.tk/man/tcl8.4/TkCmd/event.htm). + +Обработчик будет состоять из одной команды — `if`, но так как нам нужно обеспечить подстановку переменных при формировании этой команды, мы не можем использовать {} и используем команду [list](http://www.tcl.tk/man/tcl8.4/TkCmd/list.htm). (На самом деле в этом коде можно вместо [list ...] использовать "...".) + +Код обработчика события \<\> первым делом узнаёт имя окна, владеющего в данный момент выделением текста, при помощи команды [selection](http://www.tcl.tk/man/tcl8.4/TkCmd/selection.htm), и сравнивает это имя с именем окна, для которого выполняется обработчик (тикль подставляет его вместо специального токена **%W**; на самом деле тут без проблем можно использовать **$iw** вместо **%W**). + +Если имена окон совпали, то выделением владеет окно ввода чата, и нам нужно выполнить стандартное для него действие, закреплённое за событием \<\>. Поскольку своей командой `bind $iw ...` мы как раз это действие и переопределяем, нам нужно узнать код текущего обработчика. Это делается при помощи двухаргументной формы команды **bind**; результат выполнения этой команды и формирует первую ("истинную") ветвь команды **if**. + +Если имена не совпали, то нам стоит не мудрствуя лукаво сделать вид, будто пользователь исхитрился выполнить действие "копировать текст" в окне протокола чата. На помощь приходит умение команды **event** генерировать произвольные события в произвольном окне. Соответствующий код, опять сформированный при помощи команды **list**, чтобы разрешить подстановку переменной **cw**, формирует "ложную" ветвь нашего обработчика. + +Информацию о правильном формировании команд тикля (чем отличается {} от "" и [list ...], а также зачем нужны "\\" на концах некоторых строк) читайте в ["Эндекологии"](http://wiki.tcl.tk/14940). + +Эзотерический биндинг прикручивал [Kostix](Участник_Kostix.md). # Предотвращение запуска нескольких процессов Ткаббера -Задача: сделать так, чтобы нельзя было запустить вторую копию Ткаббера. +Задача: сделать так, чтобы нельзя было запустить вторую копию Ткаббера. ## Простое решение -Впишите в конфиг вне любых хуков: +Впишите в конфиг вне любых хуков: if [catch {open $::configdir/lock {WRONLY CREAT EXCL}} fd] exit puts $fd [pid]; close $fd hook::add quit_hook { file delete $::configdir/lock } -Работает это следующим образом: - -* При старте Ткаббер проверяет, создан ли файл - **[$::configdir]($__configdir.md)/lock**, и если создан, завершает - выполнение. -* Если такого файла нет, Ткаббер: - * Создаёт этот файл и записывает туда идентификатор своего процесса (хотя эта - информация в дальнейшем не используется); - * Вешает обработчик, удаляющий данный файл, на событие **quit\_hook**, - генерируемое при нормальном завершении работы Ткаббера. - -Если Вам кажется, что "тема интерактива не раскрыта", замените первую строчку -на такой фрагмент: +Работает это следующим образом: + +* При старте Ткаббер проверяет, создан ли файл **[$::configdir]($__configdir.md)/lock**, и если создан, завершает выполнение. +* Если такого файла нет, Ткаббер: + * Создаёт этот файл и записывает туда идентификатор своего процесса (хотя эта информация в дальнейшем не используется); + * Вешает обработчик, удаляющий данный файл, на событие **quit\_hook**, генерируемое при нормальном завершении работы Ткаббера. + +Если Вам кажется, что "тема интерактива не раскрыта", замените первую строчку на такой фрагмент: if [catch {open $::configdir/lock {WRONLY CREAT EXCL}} fd] { - wm withdraw . - tk_messageBox -title Tkabber -message {Уже работаем!} - exit + wm withdraw . + tk_messageBox -title Tkabber -message {Уже работаем!} + exit } -Фичу прикручивал [**Kostix**](Участник_Kostix.md). +Фичу прикручивал [Kostix](Участник_Kostix.md). -Идея атомарной проверки существования файла, совмещённой с его открытием, -позаимствована [отсюда](http://wiki.tcl.tk/3496). +Идея атомарной проверки существования файла, совмещённой с его открытием, позаимствована [отсюда](http://wiki.tcl.tk/3496). ## Проблема -А если завершение работы Ткаббера было ненормальным?... - -Фичу сомнениям подвергал [**ycbl**](Участник_Bigote.md). - -[**Kostix**](Участник_Kostix.md) парирует: ...то тогда можно пойти и удалить -оставшийся файл руками. - -Вообще, раз уж этот вопрос задаётся второй раз (см. ниже), вот два -альтернативных решения: +А если завершение работы Ткаббера было ненормальным?... + +Фичу сомнениям подвергал [ycbl](Участник_Bigote.md). + +[Kostix](Участник_Kostix.md) парирует: ...то тогда можно пойти и удалить оставшийся файл руками. + +Вообще, раз уж этот вопрос задаётся второй раз (см. ниже), вот два альтернативных решения: ## Альтернатива: TCP сокет if [catch {socket -myaddr localhost -server {} 6666}] exit -Сия команда пытается открыть серверный TCP-сокет **127.0.0.1:6666**; если он -уже занят, команда завершается с ошибкой (**catch** возвращает "истину") и -работа интерпретатора тикля завершается (**exit**). В случае успеха этот порт -"занимается" Ткаббером и вторая копия Ткаббера не сможет запуститься по -причине, рассмотренной выше. - -6666 — это TCP-порт, который пытается открыть Ткаббер. Его следует выбрать по -вкусу, помня, однако, что: - -* Этот порт не должен штатно использоваться никакой другой программой; -* Он должен находиться в диапазоне от 1024 до 65535. - -Достоинство решения с сокетом — простота и кроссплатформенность, недосток: -бессмысленно занятый порт при работе Ткаббера. Кроме того, следует понимать, -что _выбранный порт может быть занят **любой** программой ещё до старта -Ткаббера,_ например, его может назначить ядро для исходящего TCP-соединения -какой-либо программы. +Сия команда пытается открыть серверный TCP-сокет **127.0.0.1:6666**; если он уже занят, команда завершается с ошибкой (**catch** возвращает "истину") и работа интерпретатора тикля завершается (**exit**). В случае успеха этот порт "занимается" Ткаббером и вторая копия Ткаббера не сможет запуститься по причине, рассмотренной выше. + +6666 — это TCP-порт, который пытается открыть Ткаббер. Его следует выбрать по вкусу, помня, однако, что: + +* Этот порт не должен штатно использоваться никакой другой программой; +* Он должен находиться в диапазоне от 1024 до 65535. + +Достоинство решения с сокетом — простота и кроссплатформенность, недосток: бессмысленно занятый порт при работе Ткаббера. Кроме того, следует понимать, что _выбранный порт может быть занят **любой** программой ещё до старта Ткаббера,_ например, его может назначить ядро для исходящего TCP-соединения какой-либо программы. ## Альтернатива: Блокировка файла if {![catch {package require Tclx}]} { - set fd [open $::configdir/lock w] - if {![flock -nowait $fd]} { - wm withdraw . - tk_messageBox -message {Уже запущен!} - exit - } - puts $fd [pid]; flush $fd - } - -Плюсы: - -* Более надёжно, чем сокет; -* "Почти" кроссплатформенно (см. ниже); - -Минусы: - -* Требует наличия пакета **Tclx**; -* Не работает в Win9x; -* Постоянно открытый файл в течение работы Ткаббера. - -Можете также добавить к этому коду обработчик события **quit\_hook**, -аналогичный показанному выше, для удаления лок-файла при нормальном выходе из -Ткаббера. + set fd [open $::configdir/lock w] + if {![flock -nowait $fd]} { + wm withdraw . + tk_messageBox -message {Уже запущен!} + exit + } + puts $fd [pid]; flush $fd + } + +Плюсы: + +* Более надёжно, чем сокет; +* "Почти" кроссплатформенно (см. ниже); + +Минусы: + +* Требует наличия пакета **Tclx**; +* Не работает в Win9x; +* Постоянно открытый файл в течение работы Ткаббера. + +Можете также добавить к этому коду обработчик события **quit\_hook**, аналогичный показанному выше, для удаления лок-файла при нормальном выходе из Ткаббера. ## Пища для размышлений -Кроме приведённых решений, возможны и другие варианты, например: - -* Проверка лок-файла на валидность в Unix при помощи средств пакета **Tclx**: - чтение PID процесса из лок-файла и проверка сигналом 0 команды **kill** - существует ли этот процесс; -* "Синглетон" при помощи DDE в Windows средствами пакета **dde**. - -Можно придумать и ещё. Можете почитать -[обсуждение этих методов](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/01/03.html#21:12:38), -имевшее место в `tkabber@conference.jabber.ru`. - -А вот [мнение профессионалов по этому поводу](http://wiki.tcl.tk/593). +Кроме приведённых решений, возможны и другие варианты, например: + +* Проверка лок-файла на валидность в Unix при помощи средств пакета **Tclx**: чтение PID процесса из лок-файла и проверка сигналом 0 команды **kill** существует ли этот процесс; +* "Синглетон" при помощи DDE в Windows средствами пакета **dde**. + +Можно придумать и ещё. Можете почитать [обсуждение этих методов](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/01/03.html#21:12:38), имевшее место в `tkabber@conference.jabber.ru`. + +А вот [мнение профессионалов по этому поводу](http://wiki.tcl.tk/593). # Отправка сообщений нажатием Ctrl-Enter -Впишите в конфиг вне всяких хуков: +Впишите в конфиг вне всяких хуков: proc fix_msg_send_key {chatid type} { - set iw [::chat::input_win $chatid] - - bind $iw [bind $iw ] - bind $iw [bind $iw ] - bind $iw {} + set iw [::chat::input_win $chatid] + + bind $iw [bind $iw ] + bind $iw [bind $iw ] + bind $iw {} } - + hook::add open_chat_post_hook fix_msg_send_key -Эта процедура запускается после открытия любого окна чата. Действует она в четыре этапа: - -1. Получает имя окна ввода текста для соответствующего сеанса чата; -1. Привязывает к этому окну на комбинацию Ctrl-Enter то действие, которое - привязано к клавише Enter (то есть "отослать сообщение); -1. Привязывает к этому окну на клавишу Enter то действие, которое привязано к - комбинации Shift-Enter (то есть "вставить перевод строки"); -1. Уничтожает привязку к комбинации Shift-Enter. - -Привязку кнопок фиксил [**kostix**](Участник_Kostix.md). - -Альтернативное решение — [прямой патч на Tkabber](Патчи.md#Отправка_сообщений_по_нажатию_Ctrl-Enter). +Эта процедура запускается после открытия любого окна чата. Действует она в четыре этапа: + +1. Получает имя окна ввода текста для соответствующего сеанса чата; +1. Привязывает к этому окну на комбинацию Ctrl-Enter то действие, которое привязано к клавише Enter (то есть "отослать сообщение); +1. Привязывает к этому окну на клавишу Enter то действие, которое привязано к комбинации Shift-Enter (то есть "вставить перевод строки"); +1. Уничтожает привязку к комбинации Shift-Enter. + +Привязку кнопок фиксил [kostix](Участник_Kostix.md). + +Альтернативное решение — [прямой патч на Tkabber](Патчи.md#_Отправка_сообщений_по_нажатию_Ctrl-Enter). # Отправка сообщений по нажатию NumPad Enter -Добавить в конфиг вне хуков следующий код: +Добавить в конфиг вне хуков следующий код: bind all { set event Return if {%s & 0x01} { - set event Shift-$event + set event Shift-$event } if {%s & 0x04} { - set event Control-$event + set event Control-$event } if {%s & 0x08} { - set event Alt-$event + set event Alt-$event } if {$event == "Return"} { - set event Key-$event + set event Key-$event } event generate %W <$event> } -Этот код навешивает реакцию на нажатие клавиши "Enter на дополнительной -клавиатуре" на специальный "тэг привязки" "all", обработчики для событий на -котором проверяются, если подходящие не найдены на окне, в котором событие -произошло (в реальности это несколько сложнее, но для нашего случая сойдёт). - -Код обработчика проверяет состояние управляющих клавиш (Shift, Control, Alt) в -событии и генерирует в исходном окне аналогичное по смыслу событие, только -вместо "Enter на дополнительной клавиатуре" в нём прописана обычная клавиша -ввода. - -# Закрытие табов по Ctrl-W -Впишите в конфиг вне хуков: - - hook::add finload_hook { - bind . [bind . ] - } - -Этот тривиальный код привязывает к комбинации Ctrl-w на главном окне Ткаббера -действие, привязанное к комбинации Ctrl-F4 на нём же. - -# Скрытый по умолчанию ростер -Впишите в конфиг вне хуков: - - hook::add finload_hook { - event generate . <> - } - -Этот код программно генерирует событие, которое привязано к комбинации клавиш -Ctrl-r (действие "скрыть/показать ростер"). +Этот код навешивает реакцию на нажатие клавиши "Enter на дополнительной клавиатуре" на специальный "тэг привязки" "all", обработчики для событий на котором проверяются, если подходящие не найдены на окне, в котором событие произошло (в реальности это несколько сложнее, но для нашего случая сойдёт). + +Код обработчика проверяет состояние управляющих клавиш (Shift, Control, Alt) в событии и генерирует в исходном окне аналогичное по смыслу событие, только вместо "Enter на дополнительной клавиатуре" в нём прописана обычная клавиша ввода. + +# Закрытие табов по Ctrl-W +Впишите в конфиг вне хуков: + + hook::add finload_hook { + bind . [bind . ] + } + +Этот тривиальный код привязывает к комбинации Ctrl-w на главном окне Ткаббера действие, привязанное к комбинации Ctrl-F4 на нём же. + +# Скрытый по умолчанию ростер +Впишите в конфиг вне хуков: + + hook::add finload_hook { + event generate . <> + } + +Этот код программно генерирует событие, которое привязано к комбинации клавиш Ctrl-r (действие "скрыть/показать ростер"). # Запрет IRC-команды /exec в окнах чата -Некоторые параноидально настроенные граждане интересовались: не может ли -"IRC-style" команда чата `/exec` (действие "выполнить внешнюю программу при -помощи команды Tcl [exec](http://tcl.tk/man/tcl8.4/TclCmd/exec.htm) и -подставить то, что она вывела на stdout/stderr, в качестве результата") иметь -вредных последствий? +Некоторые параноидально настроенные граждане интересовались: не может ли "IRC-style" команда чата `/exec` (действие "выполнить внешнюю программу при помощи команды Tcl [exec](http://tcl.tk/man/tcl8.4/TclCmd/exec.htm) и подставить то, что она вывела на stdout/stderr, в качестве результата") иметь вредных последствий? -Чтобы запретить эту команду совсем, впишите в конфиг вне хуков: +Чтобы запретить эту команду совсем, впишите в конфиг вне хуков: hook::add postload_hook { - proc ::plugins::handle_exec_command args {} - proc ::plugins::exec_command_comps args {} - } - -Этот приём определяет две "пустые" процедуры (то есть процедуры с пустым телом, -которые ничего не делают, будучи вызванными). Если процедура, имя которой -указано в качестве первого аргумента команды -[proc](http://tcl.tk/man/tcl8.4/TclCmd/proc.htm), существует, таковая -_удаляется_ и заменяется новой, определённой остальными аргументами команды -**proc**. Другими словами, подобный приём позволяет "деактивировать" любую -процедуру, не удаляя её (что привело бы к ошибкам времени выполнения). - -Также обратите внимание на использование особой конвенции — слова "args" в -качестве спецификации аргументов: "args" означает "0 или более аргументов", что -позволяет при "деактивации" процедуры не задумываться о количестве аргументов, -которые она имела в оригинале — "args" обеспечит корректную работу новой версии -для любого их числа. + proc ::plugins::handle_exec_command args {} + proc ::plugins::exec_command_comps args {} + } + +Этот приём определяет две "пустые" процедуры (то есть процедуры с пустым телом, которые ничего не делают, будучи вызванными). Если процедура, имя которой указано в качестве первого аргумента команды [proc](http://tcl.tk/man/tcl8.4/TclCmd/proc.htm), существует, таковая _удаляется_ и заменяется новой, определённой остальными аргументами команды **proc**. Другими словами, подобный приём позволяет "деактивировать" любую процедуру, не удаляя её (что привело бы к ошибкам времени выполнения). + +Также обратите внимание на использование особой конвенции — слова "args" в качестве спецификации аргументов: "args" означает "0 или более аргументов", что позволяет при "деактивации" процедуры не задумываться о количестве аргументов, которые она имела в оригинале — "args" обеспечит корректную работу новой версии для любого их числа. # Отмена подсветки текста активного таба -Одному пользователю Ткаббера не понравилось, что виджет NoteBook из пакета -BWidget, используемый Ткаббером для создания "интерфейса с табами", изменяет -цвет текста активного таба (того, на котором в данный момент находится курсор -мыши) на "стандартный". При этом, если в окне данного таба есть непрочитанные -сообщения, и цвет текста в табе, соответственно, отличается от стандартного -(обычно он синий или красный), это цветовыделение "убивается" "активной -подсветкой". - -Проблема спорная, но тем не менее, вот решение: поместите в конфиг вне любых -хуков следующий код: +Одному пользователю Ткаббера не понравилось, что виджет NoteBook из пакета BWidget, используемый Ткаббером для создания "интерфейса с табами", изменяет цвет текста активного таба (того, на котором в данный момент находится курсор мыши) на "стандартный". При этом, если в окне данного таба есть непрочитанные сообщения, и цвет текста в табе, соответственно, отличается от стандартного (обычно он синий или красный), это цветовыделение "убивается" "активной подсветкой". + +Проблема спорная, но тем не менее, вот решение: поместите в конфиг вне любых хуков следующий код: proc fix_tab_colors {w page} { - $w itemconfigure $page -activeforeground \ - [$w itemcget $page -foreground] + $w itemconfigure $page -activeforeground \ + [$w itemcget $page -foreground] } - + hook::add finload_hook { - .nb bindtabs [list fix_tab_colors %W] - } - -и перезапустите Ткаббер. Теперь при наведении курсора мыши на таб, цвет текста -которого отличается от стандартного из-за наличия в соответствующем окне -непрочитанных сообщений, цвет текста таба не изменится. - -Работает этот код следующим образом: - -* Запуск процедуры `fix_tab_colors` привязвается к событию Tk "Enter" (курсор - мыши вошёл в пределы окна виджета) с модификатором "Any" (в момент - совершения события игнорируются нажатия любых кнопок) к виджету **.nb**, - который и занимается управлением табами и их окнами. В момент привязки для - процедуры сразу же указывается первый параметр: **%W** раскрывается - подсистемой событий Tk в имя окна, в котором произошло событие; -* В тот момент, когда указатель мыши входит в пределы одного из табов виджета - **.nb**, этот таб становится _"активным"_ в терминах Tk, и для него - вызывается определённая нами процедура, которой передаётся имя таба. Эта - процедура: - 1. Получает текущее значение настройки **-foreground** ("цвет текста") для - переданного таба; - 1. Устанавливает значение настройки **-activeforeground** ("цвет текста - таба под курсором") для переданного таба. - -В результате настройка **-activeforeground** таба получает текущее значение его -настройки **-foreground** при каждой активизации этого таба. То есть само -действие "фичи" — изменения цвета текста активного таба — эффективно -отменяется, что и требовалось получить. - -**Примечание:** в данном случае, так как наша процедура используется для -обработки событий, происходящих ровно в одном окне, можно вместо **%W** -написать просто **.nb** — потеряется (ненужная) гибкость, но зато, возможно, -код станет несколько понятнее. - -Подсветку отменял [**kostix**](Участник_Kostix.md). + .nb bindtabs [list fix_tab_colors %W] + } + +и перезапустите Ткаббер. Теперь при наведении курсора мыши на таб, цвет текста которого отличается от стандартного из-за наличия в соответствующем окне непрочитанных сообщений, цвет текста таба не изменится. + +Работает этот код следующим образом: + +* Запуск процедуры `fix_tab_colors` привязвается к событию Tk "Enter" (курсор мыши вошёл в пределы окна виджета) с модификатором "Any" (в момент совершения события игнорируются нажатия любых кнопок) к виджету **.nb**, который и занимается управлением табами и их окнами. В момент привязки для процедуры сразу же указывается первый параметр: **%W** раскрывается подсистемой событий Tk в имя окна, в котором произошло событие; +* В тот момент, когда указатель мыши входит в пределы одного из табов виджета **.nb**, этот таб становится _"активным"_ в терминах Tk, и для него вызывается определённая нами процедура, которой передаётся имя таба. Эта процедура: + 1. Получает текущее значение настройки **-foreground** ("цвет текста") для переданного таба; + 1. Устанавливает значение настройки **-activeforeground** ("цвет текста таба под курсором") для переданного таба. + +В результате настройка **-activeforeground** таба получает текущее значение его настройки **-foreground** при каждой активизации этого таба. То есть само действие "фичи" — изменения цвета текста активного таба — эффективно отменяется, что и требовалось получить. + +**Примечание:** в данном случае, так как наша процедура используется для обработки событий, происходящих ровно в одном окне, можно вместо **%W** написать просто **.nb** — потеряется (ненужная) гибкость, но зато, возможно, код станет несколько понятнее. + +Подсветку отменял [kostix](Участник_Kostix.md). # Настройка кнопки "Тема" в групчатах -Чтобы визуально выделить кнопку "Тема" в окнах групчата, можете вставить в файл -конфигурации этот код вне любых хуков: +Чтобы визуально выделить кнопку "Тема" в окнах групчата, можете вставить в файл конфигурации этот код вне любых хуков: proc fix_topic_button {chatid type} { - if {![string equal $type "groupchat"]} return - - set b [::chat::winid $chatid].status.mb - $b config -relief raised -text Опции + if {![string equal $type "groupchat"]} return + + set b [::chat::winid $chatid].status.mb + $b config -relief raised -text Опции } - + hook::add open_chat_post_hook fix_topic_button -Код возвращает кнопке стандартную рельефность и меняет её название с "Тема" на -"Опции". +Код возвращает кнопке стандартную рельефность и меняет её название с "Тема" на "Опции". # Предустановленные описания статусов -> **Внимание!** Доступен [**плагин**](Плагины.md#Customstatus) аналогичного - назначения, предоставляющий более удобный способ работы с предустановками - статусов и их описаний. + **Внимание!** Доступен [плагин](Плагины.md#customstatus) аналогичного назначения, предоставляющий более удобный способ работы с предустановками статусов и их описаний. ## Что такое описание статуса и зачем нужны предустановленные описания -В нижней части окна Ткаббера есть текстовое поле для ввода описания статуса. -Описание статуса — это подробная информация о причине вашего отсутствия (или -присутствия, если хотите). Другие пользователи могут видеть это описание рядом -с вашим JID и статусом, например, наведя на ваш ник указатель мыши (это -поведение зависит от клиента). Если вы хотите установить описание статуса, вы -вводите его в упомянутое текстовое поле, после чего устанавливаете статус -посредством меню. - -Такая процедура не всегда удобна, так как обычно вам приходится по возвращении, -перед установкой статуса "Доступен", править описание статуса, изменяя его с -чего-то вроде "ушёл на обед" на "могу говорить". Если вы вместе с установкой -статуса хотите автоматически устанавливать описание статуса по умолчанию, -назначенное данному статусу, читайте этот раздел далее. +В нижней части окна Ткаббера есть текстовое поле для ввода описания статуса. Описание статуса — это подробная информация о причине вашего отсутствия (или присутствия, если хотите). Другие пользователи могут видеть это описание рядом с вашим JID и статусом, например, наведя на ваш ник указатель мыши (это поведение зависит от клиента). Если вы хотите установить описание статуса, вы вводите его в упомянутое текстовое поле, после чего устанавливаете статус посредством меню. + Такая процедура не всегда удобна, так как обычно вам приходится по возвращении, перед установкой статуса "Доступен", править описание статуса, изменяя его с чего-то вроде "ушёл на обед" на "могу говорить". Если вы вместе с установкой статуса хотите автоматически устанавливать описание статуса по умолчанию, назначенное данному статусу, читайте этот раздел далее. ## Как настроить предустановленные описания -Следующие изменения в **[файле конфигурации](Файл_конфигурации.md)** позволяют -при установке статуса менять описание статуса на заранее заданное. +Следующие изменения в **[файле конфигурации](Файл_конфигурации.md)** позволяют при установке статуса менять описание статуса на заранее заданное. 1. Добавьте в **config.tcl** следующий текст. - - #Предустановленные описания статусов. Заменяйте текст в кавычках на свой. - set default_text(available) "I am available" # описание статуса 'Доступен' - set default_text(chat) "Free to chat" # описание статуса 'Свободен для разговора' - set default_text(away) "I am away" # описание статуса 'Отошёл' - set default_text(xa) "I am far away" # описание статуса 'Отошёл давно' - set default_text(dnd) "Do not disturb" # описание статуса 'Не беспокоить' - - proc ::use_default_status_texts {} { - set m .presence.button.menu - foreach {status str} $::user_status_list { - if {![info exists ::default_text($status)]} { - continue - } - switch -- $status { - invisible - - unavailable {} - default { - $m entryconfigure $str \ - -command [join [list [list set textstatus $::default_text($status)] [list set userstatus $status]] "; "] - } - } - } - } - - Некоторые (или все) строки, начинающиеся с `set default\_text`, можно - закомментировать. В таком случае при установке соответствующего статуса будет - установлено описание статуса, введенное в текстовое поле в нижней части окна - Ткаббера, то есть, для соответствующей команды меню будет установлено поведение - по умолчанию. - -1. Добавьте вызов процедуры `use\_default\_status\_texts` в процедуру - `finload`. Если такой процедуры нет в файле **config.tcl**, то создайте её, - вставив следующий текст. - - proc finload {} { - use_default_status_texts - } - -**Примечание:** С приведёнными настройками изменение описания статуса будет -происходить только при изменении статуса с помощью меню, вызываемого кнопкой в -левом нижнем углу окна Ткаббера. Если вы хотите изменить описание статуса на -вписанное в поле вручную, воспользуйтесь командой главного меню **Tkabber → -Присутствие**. + #Предустановленные описания статусов. Заменяйте текст в кавычках на свой. + set default_text(available) "I am available" # описание статуса 'Доступен' + set default_text(chat) "Free to chat" # описание статуса 'Свободен для разговора' + set default_text(away) "I am away" # описание статуса 'Отошёл' + set default_text(xa) "I am far away" # описание статуса 'Отошёл давно' + set default_text(dnd) "Do not disturb" # описание статуса 'Не беспокоить' + + proc ::use_default_status_texts {} { + set m .presence.button.menu + foreach {status str} $::user_status_list { + if {![info exists ::default_text($status)]} { + continue + } + switch -- $status { + invisible - + unavailable {} + default { + $m entryconfigure \ + $str \ + -command [join [list [list set textstatus $::default_text($status)] [list set userstatus $status]] "; "] + } + } + } + } + +Некоторые (или все) строки, начинающиеся с `set default\_text`, можно закомментировать. В таком случае при установке соответствующего статуса будет установлено описание статуса, введенное в текстовое поле в нижней части окна Ткаббера, то есть, для соответствующей команды меню будет установлено поведение по умолчанию. + +1. Добавьте вызов процедуры `use\_default\_status\_texts` в процедуру `finload`. Если такой процедуры нет в файле **config.tcl**, то создайте её, вставив следующий текст. + proc finload {} { + use_default_status_texts + } + +Примечание  + + С приведёнными настройками изменение описания статуса будет происходить только при изменении статуса с помощью меню, вызываемого кнопкой в левом нижнем углу окна Ткаббера. Если вы хотите изменить описание статуса на вписанное в поле вручную, воспользуйтесь командой главного меню **Tkabber → Присутствие**. # Добавление собственной кнопки на тулбар -Периодически пользователи Ткаббера предлагают добавить на тулбар ещё одну -кнопку, выполняющую ту или иную команду, обычно доступную другим способом, -например, через главное меню. Поскольку вкусы и потребности у всех разные, -разработчики обычно оставляют такие запросы без внимания. - -На самом деле добавить свою кнопку на тулбар очень просто, если знать какую -именно команду Tcl требуется выполнять по нажатию этой кнопки, а это уже -зависит от личных способностей ковыряющихся в исходниках Ткаббера. - -В качестве простейшего примера добавим на тулбар кнопку, открывающую окно **Raw -XML**, обычно доступное через пункт главного меню Ткаббера **Службы→Инструменты -администратора→Открыть окно XML**. - -Поместите в файл **config.tcl** вне любых хуков: +Периодически пользователи Ткаббера предлагают добавить на тулбар ещё одну кнопку, выполняющую ту или иную команду, обычно доступную другим способом, например, через главное меню. Поскольку вкусы и потребности у всех разные, разработчики обычно оставляют такие запросы без внимания. + +На самом деле добавить свою кнопку на тулбар очень просто, если знать какую именно команду Tcl требуется выполнять по нажатию этой кнопки, а это уже зависит от личных способностей ковыряющихся в исходниках Ткаббера. + +В качестве простейшего примера добавим на тулбар кнопку, открывающую окно **Raw XML**, обычно доступное через пункт главного меню Ткаббера **Службы→Инструменты администратора→Открыть окно XML**. + +Поместите в файл **config.tcl** вне любых хуков: hook::add finload_hook { - set b [[.mainframe gettoolbar 0].bbox add] - $b configure \ - -highlightthickness 0 \ - -takefocus 0 -relief link \ - -bd $::tk_borderwidth \ - -padx 1 -pady 1 \ - -text XML \ - -helptext "Открыть окно XML" \ - -command ::plugins::rawxml::open_window \ - } - -**Принцип действия** (читать необязательно): - -Поскольку мы собираемся добавлять кнопку на уже _существующий_ виджет, наш код -должен выполняться после того, как элементы GUI созданы. Для этого код нужно -реализовать в виде обработчика [**хука**](Загрузка_настроек.md#Хуки) -**finload\_hook**. - -Первая строка в обработчике добавляет кнопку на тулбар и присваивает её имя -переменной с именем "b": - -* Команда "`.mainframe gettoolbar 0`" возвращает имя "нулевого" (и - единственного) тулбара Ткаббера; -* К этому имени добавляется суффикс `.bbox`, в результате чего получается имя - специального виджета — набора кнопок в тулбаре; оно же по совместительству - является и именем команды, которую можно использовать для управления - кнопками в этом наборе. -* Полученная команда выполняется с аргументом `add`, добавляя новую кнопку в - набор и возвращая имя этой кнопки, которое, как и обычно в Tk, одновременно - является именем команды для управления этим виджетом. - -Вторая строка конфигурирует добавленную кнопку: - -* Первые несколько опций (`-relief`, `-takefocus`, `-highlightthickness`, - `-padx`, `-pady`, `-bd`) конфигурируют внешний вид кнопки делают вид кнопки - таким же, как у остальных, уже находящихся на тулбаре кнопок; интересующиеся - могут изучить определение процедуры `ifacetk::add_toolbar_button` в файле - ifacetk/iface.tcl. -* Опция `-text` делает строку "XML" надписью на кнопке. Обратите внимание на - то, что для этого подходят только короткие куски текста, иначе кнопка - получится чрезмерно большой. В качестве альтернативы можно использовать - картинку (см. ниже). -* Опция `-helptext` настраивает всплывающую подсказку (тултип) у кнопки. -* Ключевой является опция `-command`, которая привязывает команду к нажатию - кнопки. В нашем случае это полное имя соответствующей процедуры тикля - (определённой в файле **plugins/general/rawxml.tcl**) без параметров. - -**Что дальше?** - -Можно использовать опцию `-icon` вместо опции `-text`, если у вас есть готовая -картинка 24x24x8bpp. Картинка может быть в любом формате, поддерживаемом -Ткаббером, однако, -[**"переносимым"**](Ткаббер_ЧаВо.md#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG) -является только формат GIF. - -Картинка должна быть предварительно загружена при помощи команды -[image](http://www.tcl.tk/man/tcl8.4/TkCmd/image.htm), например: + set b [[.mainframe gettoolbar 0].bbox add] + $b configure \ + -highlightthickness 0 \ + -takefocus 0 -relief link \ + -bd $::tk_borderwidth \ + -padx 1 -pady 1 \ + -text XML \ + -helptext "Открыть окно XML" \ + -command ::plugins::rawxml::open_window \ + } + +**Принцип действия** (читать необязательно): + +Поскольку мы собираемся добавлять кнопку на уже _существующий_ виджет, наш код должен выполняться после того, как элементы GUI созданы. Для этого код нужно реализовать в виде обработчика [хука](Загрузка_настроек.md#Хуки) **finload\_hook**. + +Первая строка в обработчике добавляет кнопку на тулбар и присваивает её имя переменной с именем "b": + +* Команда "`.mainframe gettoolbar 0`" возвращает имя "нулевого" (и единственного) тулбара Ткаббера; +* К этому имени добавляется суффикс `.bbox`, в результате чего получается имя специального виджета — набора кнопок в тулбаре; оно же по совместительству является и именем команды, которую можно использовать для управления кнопками в этом наборе. +* Полученная команда выполняется с аргументом `add`, добавляя новую кнопку в набор и возвращая имя этой кнопки, которое, как и обычно в Tk, одновременно является именем команды для управления этим виджетом. + +Вторая строка конфигурирует добавленную кнопку: + +* Первые несколько опций (`-relief`, `-takefocus`, `-highlightthickness`, `-padx`, `-pady`, `-bd`) конфигурируют внешний вид кнопки делают вид кнопки таким же, как у остальных, уже находящихся на тулбаре кнопок; интересующиеся могут изучить определение процедуры `ifacetk::add_toolbar_button` в файле ifacetk/iface.tcl. +* Опция `-text` делает строку "XML" надписью на кнопке. Обратите внимание на то, что для этого подходят только короткие куски текста, иначе кнопка получится чрезмерно большой. В качестве альтернативы можно использовать картинку (см. ниже). +* Опция `-helptext` настраивает всплывающую подсказку (тултип) у кнопки. +* Ключевой является опция `-command`, которая привязывает команду к нажатию кнопки. В нашем случае это полное имя соответствующей процедуры тикля (определённой в файле **plugins/general/rawxml.tcl**) без параметров. + +**Что дальше?** + +Можно использовать опцию `-icon` вместо опции `-text`, если у вас есть готовая картинка 24x24x8bpp. Картинка может быть в любом формате, поддерживаемом Ткаббером, однако, ["переносимым"](Ткаббер_ЧаВо.md#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG) является только формат GIF. + +Картинка должна быть предварительно загружена при помощи команды [image](http://www.tcl.tk/man/tcl8.4/TkCmd/image.htm), например: set img [image create photo -file /path/to/my/icon.gif] ... $button configure -icon $img ... -Кроме того, в Ткаббере есть готовая процедура, позволяющая добавить кнопку с -картинкой более просто, например: +Кроме того, в Ткаббере есть готовая процедура, позволяющая добавить кнопку с картинкой более просто, например: set icon [image create photo -file smile.gif] set command {tk_messageBox -message Cheese!} set helptext {Says "Cheese!"} ... ifacetk::add_toolbar_button $icon $command $helptext -Ткаббер использует виджеты **ButtonBox** и **Button** из пакета **BWidget**, -соответственно, за подробной информацией о возможностях работы с тулбаром и -отдельными кнопками следует обращаться к -[документации на BWidget](http://tcllib.sourceforge.net/BWman/). +Ткаббер использует виджеты **ButtonBox** и **Button** из пакета **BWidget**, соответственно, за подробной информацией о возможностях работы с тулбаром и отдельными кнопками следует обращаться к [документации на BWidget](http://tcllib.sourceforge.net/BWman/). # Собственное меню для киков в групчате -Добавьте этот код в **config.tcl** вне любых хуков: +Добавьте этот код в **config.tcl** вне любых хуков: set my_kick_reasons { - "Ya bastard" - "Go away, bad boy" - "French connectionUCK OFF!" - "Чужие здесь не ходят!" - } - - proc create_kick_presets_menu {m connid jid} { - global my_kick_reasons - - menu $m - - foreach reason $my_kick_reasons { - if {[string length $reason] > 25} { - set label [string range $reason 0 22]... - } else { - set label $reason - } - $m add command -label $label \ - -command [list muc::change_item_param \ - {role none} down $connid $jid $reason] - } - - set m - } - - proc add_kick_presets {m connid jid} { - set km $m.my_kick_menu - create_kick_presets_menu $km $connid $jid - - $m add separator - $m add cascade -label "Custom kicks" -menu $km - } - + "Ya bastard" + "Go away, bad boy" + "French connectionUCK OFF!" + "Чужие здесь не ходят!" + } + + proc create_kick_presets_menu {m connid jid} { + global my_kick_reasons + + menu $m + + foreach reason $my_kick_reasons { + if {[string length $reason] > 25} { + set label [string range $reason 0 22]... + } else { + set label $reason + } + $m add command -label $label \ + -command [list muc::change_item_param \ + {role none} down $connid $jid $reason] + } + + set m + } + + proc add_kick_presets {m connid jid} { + set km $m.my_kick_menu + create_kick_presets_menu $km $connid $jid + + $m add separator + $m add cascade -label "Custom kicks" -menu $km + } + hook::add roster_create_groupchat_user_menu_hook add_kick_presets -Отредактируйте переменную **my\_kick\_reasons** по вкусу. +Отредактируйте переменную **my\_kick\_reasons** по вкусу. # Автоответчик -> Внимание! Данный код был преобразован в [**плагин**](Плагины.md#Autoanswer) и - несколько улучшен (в частности, появилась иконка для тулбара). Рекомендуется - пользоваться им; данная заметка сохранена для истории. - -Для некоторых пользователей бывает слишком обременительно изучать детальную -информацию о вашем статусе (к примеру, это ваша подруга, которая пользуется -ICQ-клиентом и не обращает внимания на значок «отошёл» напротив вашего ника в -списке контактов, зато очень обижается, когда никто не отвечает на её реплики). -Однако вы всё же хотели бы, чтобы эти пользователи при попытке заговорить с -вами узнавали, что в данный момент за компьютером вас нет, и следовательно, -диалог не состоится по уважительной причине. Далее в этом разделе описано, как -настроить Ткаббер так, чтобы он отвечал на сообщения от определенных -пользователей заранее установленным текстом. + Внимание! Данный код был преобразован в [плагин](Плагины.md#autoanswer) и несколько улучшен (в частности, появилась иконка для тулбара). Рекомендуется пользоваться им; данная заметка сохранена для истории. + +Для некоторых пользователей бывает слишком обременительно изучать детальную информацию о вашем статусе (к примеру, это ваша подруга, которая пользуется ICQ-клиентом и не обращает внимания на значок «отошёл» напротив вашего ника в списке контактов, зато очень обижается, когда никто не отвечает на её реплики). Однако вы всё же хотели бы, чтобы эти пользователи при попытке заговорить с вами узнавали, что в данный момент за компьютером вас нет, и следовательно, диалог не состоится по уважительной причине. Далее в этом разделе описано, как настроить Ткаббер так, чтобы он отвечал на сообщения от определенных пользователей заранее установленным текстом. ## Установка -Чтобы установить автоответчик, нужно - -1. в **config.tcl** добавить вне хуков следующий код: - - # === Answering machine === - - # == Auto answer settings == - # Enable auto answer right from the start. - # (When running, use the auto_answer [yes|no] procedure in - # console to turn auto answer on and off.) - set auto_answ_enabled no - - # JIDs for which answering is disabled. - # Has priority over auto_answ_regex. - # A value of "^$" means no restrictions. - set auto_answ_disable_regex "^$" - # JIDs for which answering is enabled. - # A value of "" (or ".", or ".*" etc) means for all JIDs - set auto_answ_regex "" - set auto_answ_message "Не могу сейчас говорить (отошел от компьютера). Вернусь — отвечу." - # Changing status to one from this list - # will automatically turn the auto answer mode on, - # while entering a status not listed here will turn it off. - # Comment this variable out to make the answer mode - # independent of the availability status. - set auto_answ_status { - away - xa - dnd - } - # == end Auto answer settings == - - proc update_auto_answ_button {} { - # if button not found, don't do anythyng - if { [[.mainframe gettoolbar 0].bbox index auto_answer] == -1 } { - return - } - if {$::auto_answ_enabled} { - set txt "Автоответчик вкл." - } else { - set txt "Автоответчик выкл." - } - [.mainframe gettoolbar 0].bbox itemconfigure auto_answer \ - -command ::auto_answ_toggle -text $txt -relief link - } - - proc auto_answ_toggle {} { - # Invert the "enabled" flag - set ::auto_answ_enabled [expr !$::auto_answ_enabled] - # reset reply counters - if { [array exists ::answered] } { - array unset ::answered - } - update_auto_answ_button - } - - # Sends the message ($::auto_answ_message) - proc answ_process_message {connid from id type is_subject subject body args} { - variable answered - # Do not reply if disabled - if { !$::auto_answ_enabled } { - return - } - # Do not reply to normal messages - if {$type != "chat" } { - return - } - set chatid [::chat::chatid $connid $from] - # Do not reply in MUCs - if { [::chat::is_groupchat $chatid] } { - return - } - set jid [jlib::connection_jid $connid] - # Just to make sure the program never replies to itself - if { $jid == $from } { - return - } - # Do not reply if regexp rules are not met - # Do not reply to empty messages - if { [regexp -nocase $::auto_answ_disable_regex $from] \ - || ![regexp -nocase $::auto_answ_regex $from] \ - || [string equal $body ""] } { - return - } - # Increment the number of times we replied to this JID - if { ![info exists answered($from)] } { - set answered($from) 1 - } else { - incr answered($from) - } - # Stop replying after 3 replies - if { $answered($from) > 3 } { - return - } - if {[catch { set user [jlib::connection_user $connid] }]} { - set user "" - } - # Send the message - hook::run chat_send_message_hook \ - $chatid $user $::auto_answ_message "chat" - } - - # Turns auto answer on or off when status changes - proc answ_on_status_change {name1 name2 op} { - if { ![info exists ::auto_answ_status] } { - return - } - # Enable auto answer if current status is in the $::answ_status list - if { [lsearch -exact $::auto_answ_status $::userstatus] != -1 } { - # Don't do anything if auto answer is already enabled - if { $::auto_answ_enabled } { - return - } - auto_answ_toggle - return - } - # Disable auto answer if current status is not in the $::answ_status list - if { $::auto_answ_enabled } { - auto_answ_toggle - } - } - - trace add variable userstatus write answ_on_status_change - - hook::add process_message_hook \ - answ_process_message 150 - # === end Answering machine === - -2. В процедуру `finload` добавить следующие строки. - - #Auto answer button - [.mainframe gettoolbar 0].bbox add -name auto_answer - update_auto_answ_button - - Если такой процедуры в файле **config.tcl** нет, создайте её. В итоге она будет выглядеть следующим образом. - - proc finload {} { - #Auto answer button - [.mainframe gettoolbar 0].bbox add -name auto_answer - update_auto_answ_button - } +Чтобы установить автоответчик, нужно + +1. в **config.tcl** добавить вне хуков следующий код: + + # === Answering machine === + + # == Auto answer settings == + # Enable auto answer right from the start. + # (When running, use the auto_answer [yes|no] procedure in + # console to turn auto answer on and off.) + set auto_answ_enabled no + + # JIDs for which answering is disabled. + # Has priority over auto_answ_regex. + # A value of "^$" means no restrictions. + set auto_answ_disable_regex "^$" + # JIDs for which answering is enabled. + # A value of "" (or ".", or ".*" etc) means for all JIDs + set auto_answ_regex "" + set auto_answ_message "Не могу сейчас говорить (отошел от компьютера). Вернусь — отвечу." + # Changing status to one from this list + # will automatically turn the auto answer mode on, + # while entering a status not listed here will turn it off. + # Comment this variable out to make the answer mode + # independent of the availability status. + set auto_answ_status { + away + xa + dnd + } + # == end Auto answer settings == + + proc update_auto_answ_button {} { + # if button not found, don't do anythyng + if { [[.mainframe gettoolbar 0].bbox index auto_answer] == -1 } { + return + } + if {$::auto_answ_enabled} { + set txt "Автоответчик вкл." + } else { + set txt "Автоответчик выкл." + } + [.mainframe gettoolbar 0].bbox itemconfigure auto_answer \ + -command ::auto_answ_toggle -text $txt -relief link + } + + proc auto_answ_toggle {} { + # Invert the "enabled" flag + set ::auto_answ_enabled [expr !$::auto_answ_enabled] + # reset reply counters + if { [array exists ::answered] } { + array unset ::answered + } + update_auto_answ_button + } + + # Sends the message ($::auto_answ_message) + proc answ_process_message {connid from id type is_subject subject body args} { + variable answered + # Do not reply if disabled + if { !$::auto_answ_enabled } { + return + } + # Do not reply to normal messages + if {$type != "chat" } { + return + } + set chatid [::chat::chatid $connid $from] + # Do not reply in MUCs + if { [::chat::is_groupchat $chatid] } { + return + } + set jid [jlib::connection_jid $connid] + # Just to make sure the program never replies to itself + if { $jid == $from } { + return + } + # Do not reply if regexp rules are not met + # Do not reply to empty messages + if { [regexp -nocase $::auto_answ_disable_regex $from] \ + || ![regexp -nocase $::auto_answ_regex $from] \ + || [string equal $body ""] } { + return + } + # Increment the number of times we replied to this JID + if { ![info exists answered($from)] } { + set answered($from) 1 + } else { + incr answered($from) + } + # Stop replying after 3 replies + if { $answered($from) > 3 } { + return + } + if {[catch { set user [jlib::connection_user $connid] }]} { + set user "" + } + # Send the message + hook::run chat_send_message_hook \ + $chatid $user $::auto_answ_message "chat" + } + + # Turns auto answer on or off when status changes + proc answ_on_status_change {name1 name2 op} { + if { ![info exists ::auto_answ_status] } { + return + } + # Enable auto answer if current status is in the $::answ_status list + if { [lsearch -exact $::auto_answ_status $::userstatus] != -1 } { + # Don't do anything if auto answer is already enabled + if { $::auto_answ_enabled } { + return + } + auto_answ_toggle + return + } + # Disable auto answer if current status is not in the $::answ_status list + if { $::auto_answ_enabled } { + auto_answ_toggle + } + } + + trace add variable userstatus write answ_on_status_change + + hook::add process_message_hook \ + answ_process_message 150 + # === end Answering machine === + +2. В процедуру `finload` добавить следующие строки. + + #Auto answer button + [.mainframe gettoolbar 0].bbox add -name auto_answer + update_auto_answ_button + +Если такой процедуры в файле **config.tcl** нет, создайте её. В итоге она будет выглядеть следующим образом. + + proc finload {} { + #Auto answer button + [.mainframe gettoolbar 0].bbox add -name auto_answer + update_auto_answ_button + } ## Настройка -Следующие переменные отвечают за параметры автоответчика. - -`auto_answ_enabled` – если установлена в _yes_, Ткаббер будет запущен со включенным автоответчиком, если в _no_, то с выключенным. По умолчанию установлена в _no_. - -`auto_answ_disable_regex` – регулярное выражение, определяющее JIDы, для которых отсылка сообщений автоответчиком запрещена. - -`auto_answ_regex` – регулярное выражение, определяющее JIDы, для которых отсылка сообщений автоответчиком разрешена. - -Переменная `auto_answ_disable_regex` имеет приоритет над `auto_answ_regex`, то -есть, если JID пользователя, от которого пришло сообщение, соответствует -выражению `auto_answ_disable_regex`, ответное сообщение не будет отправлено -несмотря на то, соответствует ли JID выражению `auto_answ_regex`. Если JID не -соответствует ни одному из выражений, сообщение не будет отправлено. Настройки -по умолчанию максимально разрешающие, с ними автоматическая отправка ответа -будет происходить на любой JID, от которого пришло сообщение. - -**Примечание:** Групчаты являются исключением из этих правил: автоответчик -никогда не реагирует на сообщения из них. - -`auto_answ_message` – сообщение, которое получит пользователь, пославший вам сообщение. - -`auto_answ_status` – список статусов, при установке которых автоответчик -будет автоматически включаться. При входе в статус, не перечисленный в списке, -автоответчик будет отключаться. Закомментируйте эту переменную, чтобы изменение -статуса никак не влияло на автоответчик, возможность включать/выключать его -вручную остаётся в любом случае. Элементы `auto_answ_status` принимают -значения из списка: available, chat, away, dnd, xa. По умолчанию включение -автоответчика настроено для статусов "отошёл", "отошёл давно" и "не -беспокоить". +Следующие переменные отвечают за параметры автоответчика. + +`auto\_answ\_enabled` – если установлена в _yes_, Ткаббер будет запущен со включенным автоответчиком, если в _no_, то с выключенным. По умолчанию установлена в _no_. + +`auto\_answ\_disable\_regex` – регулярное выражение, определяющее JIDы, для которых отсылка сообщений автоответчиком запрещена. + +`auto\_answ\_regex` – регулярное выражение, определяющее JIDы, для которых отсылка сообщений автоответчиком разрешена. + +Переменная `auto\_answ\_disable\_regex` имеет приоритет над `auto\_answ\_regex`, то есть, если JID пользователя, от которого пришло сообщение, соответствует выражению `auto\_answ\_disable\_regex`, ответное сообщение не будет отправлено несмотря на то, соответствует ли JID выражению `auto\_answ\_regex`. Если JID не соответствует ни одному из выражений, сообщение не будет отправлено. Настройки по умолчанию максимально разрешающие, с ними автоматическая отправка ответа будет происходить на любой JID, от которого пришло сообщение. + +Примечание  + + Групчаты являются исключением из этих правил: автоответчик никогда не реагирует на сообщения из них. + +`auto\_answ\_message` – сообщение, которое получит пользователь, пославший вам сообщение. + +`auto\_answ\_status` – список статусов, при установке которых автоответчик будет автоматически включаться. При входе в статус, не перечисленный в списке, автоответчик будет отключаться. Закомментируйте эту переменную, чтобы изменение статуса никак не влияло на автоответчик, возможность включать/выключать его вручную остаётся в любом случае. Элементы `auto\_answ\_status` принимают значения из списка: available, chat, away, dnd, xa. По умолчанию включение автоответчика настроено для статусов "отошёл", "отошёл давно" и "не беспокоить". ## Управление -Если вы всё сделали правильно, на панели инструментов появится кнопка -**Автоответчик выкл.** При ее нажатии автоответчик включается, и надпись на -кнопке меняется на **Автоответчик вкл.**. Чтобы убрать эту кнопку с панели -инструментов, закомментируйте строки, добавленные в процедуру `finload`. В этом -случае включать/выключать автоответчик можно с помощью команды -`auto_answ_toggle` в консоли. +Если вы всё сделали правильно, на панели инструментов появится кнопка **Автоответчик выкл.** При ее нажатии автоответчик включается, и надпись на кнопке меняется на **Автоответчик вкл.**. Чтобы убрать эту кнопку с панели инструментов, закомментируйте строки, добавленные в процедуру `finload`. В этом случае включать/выключать автоответчик можно с помощью команды `auto\_answ\_toggle` в консоли. # Настройка положения окна уведомлений в Windows -**Вопрос:** Требуется переместить всплывающее окно ("балун", "тултип") с -уведомлениями, включающееся опцией **Настройки → MainInterface → Systray -→ ::ifacetk::systray::options(display\_status)**, из верхнего левого угла в -какое-то другое место экрана. - -Ответ: на самом деле выглядит так, что позиционирование этого окна в Windows -вообще говоря сломано, причём — давно, т.к. судя по коду этот тултип должен -рисоваться примерно над иконкой в области системных уведомлений (в трее). - -Поскольку сломаным оно будет оставаться неизвестно сколько, приведём способ -исправить положение ковырянием в конфиге. - -Сначала придумайте пару чисел — координаты верхнего левого угла окна -уведомлений, в которые по вашей задумке оно должно помещаться при открытии. -Можно подойти к этой проблеме и более системно: - -* Откройте консоль Ткаббера; -* Подведите указатель мыши к тому месту на экране, в котором по вашей задумке - должен находиться верхний левый угол окна уведомлений; -* Отпустите мышь, в консоли Ткаббера напишите: - - winfo pointerx . - - и затем: - - winfo pointery . - - вы получите ту самую пару чисел — координаты окна. - -Добавьте в конфиг вне любых хуков: +**Вопрос:** Требуется переместить всплывающее окно ("балун", "тултип") с уведомлениями, включающееся опцией **Настройки → MainInterface → Systray → ::ifacetk::systray::options(display\_status)**, из верхнего левого угла в какое-то другое место экрана. + +Ответ: на самом деле выглядит так, что позиционирование этого окна в Windows вообще говоря сломано, причём — давно, т.к. судя по коду этот тултип должен рисоваться примерно над иконкой в области системных уведомлений (в трее). + +Поскольку сломаным оно будет оставаться неизвестно сколько, приведём способ исправить положение ковырянием в конфиге. + +Сначала придумайте пару чисел — координаты верхнего левого угла окна уведомлений, в которые по вашей задумке оно должно помещаться при открытии. Можно подойти к этой проблеме и более системно: + +* Откройте консоль Ткаббера; +* Подведите указатель мыши к тому месту на экране, в котором по вашей задумке должен находиться верхний левый угол окна уведомлений; +* Отпустите мышь, в консоли Ткаббера напишите: + winfo pointerx . +и затем: + winfo pointery . + вы получите ту самую пару чисел — координаты окна. + +Добавьте в конфиг вне любых хуков: proc systray_tooltip_location args { - return {ваша_координата_X ваша_координата_Y} + return {ваша_координата_X ваша_координата_Y} } hook::add finload_hook { - set ::ifacetk::systray::.tray(location) ::systray_tooltip_location + set ::ifacetk::systray::.tray(location) ::systray_tooltip_location } -Можете несколько усовершенствовать код, введя глобальную переменную: +Можете несколько усовершенствовать код, введя глобальную переменную: set notification_coords {0 0} proc systray_tooltip_location args { - return $::notification_coords + return $::notification_coords } hook::add finload_hook { - set ::ifacetk::systray::.tray(location) ::systray_tooltip_location + set ::ifacetk::systray::.tray(location) ::systray_tooltip_location } -Теперь вы сможете управлять координатами прямо в ходе работы Ткаббера из консоли, вводя нечто вроде: +Теперь вы сможете управлять координатами прямо в ходе работы Ткаббера из консоли, вводя нечто вроде: set notification_coords {762 670} # Собственный шрифт для ростеров -Шрифт ростеров (списка контактов и ростеров групчатов) настраивается синхронно -со шрифтом чата [**при помощи глобальной переменной _font_**](Шрифты.md). Если -требуется отдельно настраивать шрифты ростеров, придётся править код процедуры -`::ifacetk::roster::addline`. Для этого воспользуемся испытанным приёмом — -динамическим "патченьем" кода Ткаббера. +Шрифт ростеров (списка контактов и ростеров групчатов) настраивается синхронно со шрифтом чата [при помощи глобальной переменной **font**](Шрифты.md). Если требуется отдельно настраивать шрифты ростеров, придётся править код процедуры `::ifacetk::roster::addline`. Для этого воспользуемся испытанным приёмом — динамическим "патченьем" кода Ткаббера. -Напишите в [**config.tcl**](Config.tcl.md) вне любых хуков: +Напишите в [config.tcl](Config.tcl.md) вне любых хуков: # From: [http://wiki.tcl.tk/16978](http://wiki.tcl.tk/16978) proc params proc { - set params [list] - foreach param [info args $proc] { - if {[info default $proc $param default]} { - lappend params [list $param $default] - } else { - lappend params $param - } - } - return $params - } - - hook::add postload_hook { - set proc ::ifacetk::roster::addline - set body [info body $proc] - set body [regsub -- {global\s+\yfont\y} $body {global rosterfont}] - set body [regsub -all -- {\$font\y} $body {$rosterfont}] - proc $proc [params $proc] $body - unset proc body - } - -Теперь можно добавить к настройкам шрифтов в том же конфиге нечто вроде + set params [list] + foreach param [info args $proc] { + if {[info default $proc $param default]} { + lappend params [list $param $default] + } else { + lappend params $param + } + } + return $params + } + + hook::add postload_hook { + set proc ::ifacetk::roster::addline + set body [info body $proc] + set body [regsub -- {global\s+\yfont\y} $body {global rosterfont}] + set body [regsub -all -- {\$font\y} $body {$rosterfont}] + proc $proc [params $proc] $body + unset proc body + } + +Теперь можно добавить к настройкам шрифтов в том же конфиге нечто вроде set rosterfont -*-arial-medium-*-*-*-*-*-*-*-*-*-iso10646-* # Перемещение элемента меню ростера комнаты -Некоторые неторопливые пользователи жалуются на то, что при перемещении -указателя мыши по контекстном меню ростера комнаты они часто "не дотягивают" до -искомого пункта "Показать информацию" и попадают в подменю пункта -"Игнорировать", расположенного выше. Приведённые строчки для -[**файла конфигурации**](Config.tcl_для_начинающих.md) перемещают элемент "Игнорировать" в -самый низ обсуждаемого меню: +Некоторые неторопливые пользователи жалуются на то, что при перемещении указателя мыши по контекстном меню ростера комнаты они часто "не дотягивают" до искомого пункта "Показать информацию" и попадают в подменю пункта "Игнорировать", расположенного выше. Приведённые строчки для [файла конфигурации](Config.tcl_для_начинающих.md) перемещают элемент "Игнорировать" в самый низ обсуждаемого меню: hook::add roster_create_groupchat_user_menu_hook imove 1000 - - proc imove {m args} { - set ix [$m index [::msgcat::mc "Ignore"]] - set cmd [list $m insert end [$m type $ix]] - set conf [$m entryconfigure $ix] - foreach item $conf { - lappend cmd [lindex $item 0] [lindex $item end] - } - $m delete $ix - $m delete $ix ;# separator - $m insert end separator - eval $cmd - } - -**Принцип действия** (можно не читать): - -Вначале мы добавляем процедуру, которую собираемся написать, в -[**хук**](Загрузка_настроек.md#Хуки), отвечающий за наполнение меню ростера комнаты -содержимым. Мы хотим, чтобы наша процедура запустилась последней в ходе -отработки хука, поэтому указываем для неё высокий приоритет (1000). - -Далее определяем саму процедуру. Первым аргументом она получает имя -наполняемого меню. Остальные нас не интересуют и мы используем для них -стандартную идиому [`args`](http://www.tcl.tk/man/tcl8.5/TclCmd/proc.htm) -(любое число оставшихся аргументов). - -Первым делом мы получаем индекс (номер по порядку, начиная с 0) элемента меню, -который собираемся переместить. Нас интересует опция "Игнорировать", но -поскольку мы хотим написать код, который работает независимо от языка -интерфейса, мы ссылаемся на перевод "референсного" названия ("Ignore") при -помощи команды [`msgcat`](http://www.tcl.tk/man/tcl8.5/TclCmd/msgcat.htm). - -Поскольку _перемещать_ элементы меню в Tk нельзя, нам придётся _удалить_ наш -элемент, а затем _пересоздать_ его в нужном месте меню. Для этого нам -понадобится узнать точную информацию о текущей конфигурации этого элемента, -после чего "приготовить" команду, которая сможет воссоздать его в точно таком -же состоянии, только в другом месте. - -Наша команда (которая будет конструироваться в переменной `cmd`) начинается -"стандартным заклинанием" с участием подкоманды `insert` виджета -[`menu`](http://www.tcl.tk/man/tcl8.5/TkCmd/menu.htm) (a другая его подкоманда -— `type` — возвращает тип переданного ей элемента). - -Затем мы получаем полное описание конфигурации данного элемента меню при помощи -подкоманды `entryconfigure` виджета `menu`. Эта информация возвращается в виде -списка — по одному элементу на каждую настройку, определённую для пункта меню; -каждый такой элемент, в свою очередь, является -[списком из пяти элементов](http://www.tcl.tk/man/tcl8.5/TkLib/ConfigWidg.htm): -название -настройки, имя настройки в [**базе данных опций Tk**](База_данных_опций_Tk.md), -класс настройки в БД опций, значение настройки по умолчанию и, наконец, текущее -значение этой настройки. Нас интересуют только первый и последний элементы из -перечисленных, так как именно их комбинация определяет текущее состояние -виджета. Посему мы итерируем по всем элементам списка конфигурации и добавляем -к конструируемой команде имена параметров конфигурации и их текущие значения. - -После того, как команда вставки готова, мы удаляем наш элемент меню, сепаратор -под ним (это для красоты), после чего вставляем сепаратор в низ меню (опять же -для красоты) и, наконец, вставляем в самый низ наш "новый старый" элемент путём -выполнения ([eval](http://www.tcl.tk/man/tcl8.5/TclCmd/eval.htm)) -сконструированной команды. + + proc imove {m args} { + set ix [$m index [::msgcat::mc "Ignore"]] + set cmd [list $m insert end [$m type $ix]] + set conf [$m entryconfigure $ix] + foreach item $conf { + lappend cmd [lindex $item 0] [lindex $item end] + } + $m delete $ix + $m delete $ix ;# separator + $m insert end separator + eval $cmd + } + +**Принцип действия** (можно не читать): + +Вначале мы добавляем процедуру, которую собираемся написать, в [хук](Загрузка_настроек.md#Хуки), отвечающий за наполнение меню ростера комнаты содержимым. Мы хотим, чтобы наша процедура запустилась последней в ходе отработки хука, поэтому указываем для неё высокий приоритет (1000). + +Далее определяем саму процедуру. Первым аргументом она получает имя наполняемого меню. Остальные нас не интересуют и мы используем для них стандартную идиому [`args`](http://www.tcl.tk/man/tcl8.5/TclCmd/proc.htm) (любое число оставшихся аргументов). + +Первым делом мы получаем индекс (номер по порядку, начиная с 0) элемента меню, который собираемся переместить. Нас интересует опция "Игнорировать", но поскольку мы хотим написать код, который работает независимо от языка интерфейса, мы ссылаемся на перевод "референсного" названия ("Ignore") при помощи команды [`msgcat`](http://www.tcl.tk/man/tcl8.5/TclCmd/msgcat.htm). + +Поскольку _перемещать_ элементы меню в Tk нельзя, нам придётся _удалить_ наш элемент, а затем _пересоздать_ его в нужном месте меню. Для этого нам понадобится узнать точную информацию о текущей конфигурации этого элемента, после чего "приготовить" команду, которая сможет воссоздать его в точно таком же состоянии, только в другом месте. + +Наша команда (которая будет конструироваться в переменной `cmd`) начинается "стандартным заклинанием" с участием подкоманды `insert` виджета [`menu`](http://www.tcl.tk/man/tcl8.5/TkCmd/menu.htm) (a другая его подкоманда — `type` — возвращает тип переданного ей элемента). + +Затем мы получаем полное описание конфигурации данного элемента меню при помощи подкоманды `entryconfigure` виджета `menu`. Эта информация возвращается в виде списка — по одному элементу на каждую настройку, определённую для пункта меню; каждый такой элемент, в свою очередь, является [списком из пяти элементов](http://www.tcl.tk/man/tcl8.5/TkLib/ConfigWidg.htm): название настройки, имя настройки в [базе данных опций Tk](База_данных_опций_Tk.md), класс настройки в БД опций, значение настройки по умолчанию и, наконец, текущее значение этой настройки. Нас интересуют только первый и последний элементы из перечисленных, так как именно их комбинация определяет текущее состояние виджета. Посему мы итерируем по всем элементам списка конфигурации и добавляем к конструируемой команде имена параметров конфигурации и их текущие значения. + +После того, как команда вставки готова, мы удаляем наш элемент меню, сепаратор под ним (это для красоты), после чего вставляем сепаратор в низ меню (опять же для красоты) и, наконец, вставляем в самый низ наш "новый старый" элемент путём выполнения ([eval](http://www.tcl.tk/man/tcl8.5/TclCmd/eval.htm)) сконструированной команды. # Кнопка Send (отправить) в окне ввода сообщения -Кнопка **Send** в правой части окна ввода сообщения в окне разговора позволяет -отправлять сообщение с помощью мыши. - -Иногда это позволяет сэкономить время, например, когда нужно выделить текст в -окне чата, вставить его средней кнопкой в окно ввода и тут же отправить, — все -эти действия можно выполнить без применения клавиатуры. - -Добавить кнопку **Send** в окно ввода можно, поместив в -[**файл конфигурации**](Config.tcl_для_начинающих.md) следующий код, регистрирующий -обработчик хука `open_chat_post_hook`. +Кнопка **Send** в правой части окна ввода сообщения в окне разговора позволяет отправлять сообщение с помощью мыши. + Иногда это позволяет сэкономить время, например, когда нужно выделить текст в окне чата, вставить его средней кнопкой в окно ввода и тут же отправить, — все эти действия можно выполнить без применения клавиатуры. + +Добавить кнопку **Send** в окно ввода можно, поместив в **[файл конфигурации](Config.tcl_для_начинающих.md)** следующий код, регистрирующий обработчик хука `open_chat_post_hook`. proc open_chat_post_hook_handler {chatid type} { - # Send button - set iw [::chat::input_win $chatid] - set parent [winfo parent $iw] - set isw $parent.isw - set pi [pack info $isw] - set ix [lsearch -exact $pi -in]; incr ix - set f [lindex $pi $ix] - set sb [button $parent.send -text Send -command [list event generate $parent ]] - pack $isw -in $f -side left - pack $sb -in $f -side right -fill y - # End Send button - } - + # Send button + set iw [::chat::input_win $chatid] + set parent [winfo parent $iw] + set isw $parent.isw + set pi [pack info $isw] + set ix [lsearch -exact $pi -in]; incr ix + set f [lindex $pi $ix] + set sb [button $parent.send -text Send -command [list event generate $parent ]] + pack $isw -in $f -side left + pack $sb -in $f -side right -fill y + # End Send button + } + hook::add open_chat_post_hook open_chat_post_hook_handler -Автор кода [**Kostix**](Участник_Kostix.md). +Автор кода [Kostix](Участник_Kostix.md). + +**NB:** Если вы воспользовались инструкцией, изложенной в разделе **[Отправка сообщений нажатием Ctrl-Enter](Нетривиальные_настройки.md#Отправка_сообщений_нажатием_Ctrl-Enter)**, и добавили в **config.tcl** соответствующий код, то нужно заменить в приведённой выше процедуре `open_chat_post_hook_handler` строку `` на ``. -**NB:** Если вы воспользовались инструкцией, изложенной в разделе -[**Отправка сообщений нажатием Ctrl-Enter**](#Отправка_сообщений_нажатием_Ctrl-Enter), -и добавили в **config.tcl** соответствующий код, то нужно заменить в -приведённой выше процедуре `open_chat_post_hook_handler` строку -`` на ``. + Index: wiki/ru/Новый_вид_Tk_в_8.5.md ================================================================== --- wiki/ru/Новый_вид_Tk_в_8.5.md +++ wiki/ru/Новый_вид_Tk_в_8.5.md @@ -1,91 +1,78 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Новый_вид_Tk_в_8.5) + # Новый вид Tk в 8.5 Материал из Tkabber Wiki -[16:22]\ Hi! A question regarding Tk in 8.5: since the next Debian will -contain 8.5 as its "stable" Tcl/Tk, we've taken a glance at Tk 8.5 and noticed -that it received that ugly "Windows-ish" checkboxes and radiobuttons in X. Is -there a way (hack, etc) to revert to the "old" look for X? Or this can be only -accomplished via Tile? - -[16:25]\ \* willdye recalls reading that it's indeed possible, without -Tile, but can't recall the specifics... - -[16:26]\ kostix -- the next Debian (etch), or the next next Debian? - -[16:26]\ jenglish: Etch - -[16:26]\ I thought etch was in feature-freeze right now ... - -[16:27]\ Wow. Where did you hear about this? (The debian-tcl list -has been silent lately...) - -[16:28]\ jenglish: wait a bit, please. I'm now consulting with Tkabber -PL, who maintains a bunch of Debian packages. - -[16:30]\ jenglish: sorry, Joe -- my fault; there will even be no -8.4.14 :( - -[16:32]\ jenglish: seems like just since 8.5 will be stable pretty -soon, we'll support it (and it will be, of course, awailable for Debian) - -[16:32]\ So what about "old" look for plain 8.5 Tk? ;) - -[16:32]\ Maybe a Motif theme for Tile? :p - -[16:34]\ suchenwi: no Tile, Richard. Tkabber's look is "broken" right -now, and there's no plans to port it to Tile right now, since there's no stable -Tile - -[16:35]\ The problem with the old Motif look is that it can't show -tristate values - -[16:35]\ i.e. "some selected, some not" - -[16:36]\ For Troolean logic? - -[16:36]\ suchenwi: +1 :) - -[16:37]\ like in SQL, the OR MAYBE NOT operator - -[16:37]\ WHO KNOWS - -[16:38]\ there's also the YES DEAR constant :) - -[16:38]\ :) - -[16:38]\ with the implementation "will probably not do"? - -[16:38]\ dkf: so, the answer to my particular problem is "no"? - -[16:39]\ 8.5 has capabilities that the old l&f could not support - -[16:40]\ so there's not much chance of going back; if nothing else, Mentor -Graphics want the new functionality - -[16:40]\ Hm. After all, 8.5 has may vast improvements, so at least the -pain of thansition is justified ;) - -[16:40]\ \* many - -[16:41]\* dkf has just added \_NET\_WM\_PING support to 8.5 - -[16:42]\* dkf ... on the grounds that there's no reason to not do it, and it's -transparent to scripts anyway - -[16:48]\ Mentor Graphics? - -[16:48]\ arjen: that's probably an euphemism ;) - -[16:51]\ Ah, those Anglosaxons! - -[16:55]\ Mentor Graphics makes Modelsim, a simulator with a Tk GUI. -Brian Griffin works there. - -[16:56]\ Now, that does ring a bell - -[16:57]\ Based in/near Portland, Oregon - -[16:57]\ Here is the WIki page: [http://wiki.tcl.tk/8648](http://wiki.tcl.tk/8648) +[16:22]\ Hi! A question regarding Tk in 8.5: since the next Debian will contain 8.5 as its "stable" Tcl/Tk, we've taken a glance at Tk 8.5 and noticed that it received that ugly "Windows-ish" checkboxes and radiobuttons in X. Is there a way (hack, etc) to revert to the "old" look for X? Or this can be only accomplished via Tile? + +[16:25]\ \* willdye recalls reading that it's indeed possible, without Tile, but can't recall the specifics... + +[16:26]\ kostix -- the next Debian (etch), or the next next Debian? + +[16:26]\ jenglish: Etch + +[16:26]\ I thought etch was in feature-freeze right now ... + +[16:27]\ Wow. Where did you hear about this? (The debian-tcl list has been silent lately...) + +[16:28]\ jenglish: wait a bit, please. I'm now consulting with Tkabber PL, who maintains a bunch of Debian packages. + +[16:30]\ jenglish: sorry, Joe -- my fault; there will even be no 8.4.14 :( + +[16:32]\ jenglish: seems like just since 8.5 will be stable pretty soon, we'll support it (and it will be, of course, awailable for Debian) + +[16:32]\ So what about "old" look for plain 8.5 Tk? ;) + +[16:32]\ Maybe a Motif theme for Tile? :p + +[16:34]\ suchenwi: no Tile, Richard. Tkabber's look is "broken" right now, and there's no plans to port it to Tile right now, since there's no stable Tile + +[16:35]\ The problem with the old Motif look is that it can't show tristate values + +[16:35]\ i.e. "some selected, some not" + +[16:36]\ For Troolean logic? + +[16:36]\ suchenwi: +1 :) + +[16:37]\ like in SQL, the OR MAYBE NOT operator + +[16:37]\ WHO KNOWS + +[16:38]\ there's also the YES DEAR constant :) + +[16:38]\ :) + +[16:38]\ with the implementation "will probably not do"? + +[16:38]\ dkf: so, the answer to my particular problem is "no"? + +[16:39]\ 8.5 has capabilities that the old l&f could not support + +[16:40]\ so there's not much chance of going back; if nothing else, Mentor Graphics want the new functionality + +[16:40]\ Hm. After all, 8.5 has may vast improvements, so at least the pain of thansition is justified ;) + +[16:40]\ \* many + +[16:41]\* dkf has just added \_NET\_WM\_PING support to 8.5 + +[16:42]\* dkf ... on the grounds that there's no reason to not do it, and it's transparent to scripts anyway + +[16:48]\ Mentor Graphics? + +[16:48]\ arjen: that's probably an euphemism ;) + +[16:51]\ Ah, those Anglosaxons! + +[16:55]\ Mentor Graphics makes Modelsim, a simulator with a Tk GUI. Brian Griffin works there. + +[16:56]\ Now, that does ring a bell + +[16:57]\ Based in/near Portland, Oregon + +[16:57]\ Here is the WIki page: [http://wiki.tcl.tk/8648](http://wiki.tcl.tk/8648) + + Index: wiki/ru/Особенности_реализации.md ================================================================== --- wiki/ru/Особенности_реализации.md +++ wiki/ru/Особенности_реализации.md @@ -1,6 +1,7 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Особенности_реализации/index.html) + # Особенности реализации Материал из Tkabber Wiki @@ -9,260 +10,121 @@ * [1 Преамбула](#Преамбула) * [2 Tcl/Tk](#Tcl_Tk) * [3 Почему Tcl?](#Почему_Tcl) * [4 Почему Tk?](#Почему_Tk) * [5 Почему Tk, а не GTK/Qt/что-то ещё?](#Почему_Tk_а_не_GTK_Qt_что-то_ещё) - * [5.1 А почему нет?](#А_почему_нет) - * [5.2 Техническая сторона дела](#Техническая_сторона_дела) + * [5.1 А почему нет?](#А_почему_нет) + * [5.2 Техническая сторона дела](#Техническая_сторона_дела) * [6 Почему не отделить интерфейс от реализации?](#Почему_не_отделить_интерфейс_от_реализации) * [7 Почему нет "внешнего API"?](#Почему_нет_внешнего_API) * [8 Ткаббер выглядит отвратительно!](#Ткаббер_выглядит_отвратительно) - * [8.1 Tile в Ткаббере](#Tile_в_Ткаббере) + * [8.1 Tile в Ткаббере](#Tile_в_Ткаббере) # Преамбула -В этой статье даются развёрнутые ответы на пачку различных вопросов, -периодически задаваемых пользователями Ткаббера относительно языка его -реализации, а также смежных вопросов — относительно его внешнего вида. +В этой статье даются развёрнутые ответы на пачку различных вопросов, периодически задаваемых пользователями Ткаббера относительно языка его реализации, а также смежных вопросов — относительно его внешнего вида. # Tcl/Tk -Ткаббер написан на языке [Tcl](http://www.tcl.tk) и использует библиотеку -[Tk](http://wiki.tcl.tk/15242) для создания графического интерфейса -пользователя (GUI). - -Несмотря на наличие некоторых (практически беспрецедентно) мощных виджетов -(таких как [`text`](http://tcl.tk/man/tcl8.4/TkCmd/text.htm) (используются в -окнах чата) и [`canvas`](http://tcl.tk/man/tcl8.4/TkCmd/canvas.htm) (на нём -сделаны ростеры)), в Tk нет таких "примитивов" как: "progressbar", "notebook" -(виндовым программистам более известный как "page control" или "tab control"), -"сплиттеров", готовой поддержки стандартных диалоговоых окон. Однако для Tk -написана масса сторонних реализаций, компенсирующих этот недостаток; Ткаббер -широко использует один из подобных "наборов виджетов" — -[BWidget](http://wiki.tcl.tk/BWidget). - -![(!)](../images/Hammer.png) **Сделать:** добавить про Tcllib +Ткаббер написан на языке [Tcl](http://www.tcl.tk) и использует библиотеку [Tk](http://wiki.tcl.tk/15242) для создания графического интерфейса пользователя (GUI). + +Несмотря на наличие некоторых (практически беспрецедентно) мощных виджетов (таких как [**text**](http://tcl.tk/man/tcl8.4/TkCmd/text.htm) (используются в окнах чата) и [**canvas**](http://tcl.tk/man/tcl8.4/TkCmd/canvas.htm) (на нём сделаны ростеры)), в Tk нет таких "примитивов" как: "progressbar", "notebook" (виндовым программистам более известный как "page control" или "tab control"), "сплиттеров", готовой поддержки стандартных диалоговоых окон. Однако для Tk написана масса сторонних реализаций, компенсирующих этот недостаток; Ткаббер широко использует один из подобных "наборов виджетов" — [BWidget](http://wiki.tcl.tk/BWidget). + +![(!)](../images/Hammer.png) **Сделать:** добавить про Tcllib # Почему Tcl? -Вообще говоря, здесь проще всего ответить вопросом на вопрос: "а почему нет?" — -Tcl является продвинутым "скриптовым" языком; тот факт, что вокруг него -значительно меньше того шума, который именуется -[термином "hype"](http://www.google.com/search?as_q=define:hype), -и он никогда не был "в -моде" у населения [/.](http://slashdot.org), не говорит о том, что на нём -нельзя создать серьёзный проект. Более того, некоторые бывают удивлены, узнав, -что Ткаббер даже не является единственным -[Jabber-клиентом](http://coccinella.im/) и уж тем более не единственным -[Instant Messenger'ом](http://www.amsn-project.net), написанном на Tcl/Tk. - -![(!)](../images/Hammer.png) **Сделать:** развить +Вообще говоря, здесь проще всего ответить вопросом на вопрос: "а почему нет?" — Tcl является продвинутым "скриптовым" языком; тот факт, что вокруг него значительно меньше того шума, который именуется [термином "hype"](http://www.google.com/search?as_q=define:hype), и он никогда не был "в моде" у населения [/.](http://slashdot.org), не говорит о том, что на нём нельзя создать серьёзный проект. Более того, некоторые бывают удивлены, узнав, что Ткаббер даже не является единственным [Jabber-клиентом](http://coccinella.im/) и уж тем более не единственным [Instant Messenger'ом](http://www.amsn-project.net), написанном на Tcl/Tk. + +![(!)](../images/Hammer.png) **Сделать:** развить # Почему Tk? -Tk является "натуральным" выбором для создания GUI у приложения, написанного на -Tcl, из-за того, что связка Tcl/Tk является практически уникальной (если не -считать [совсем уж "эзотерических" решений](http://www.rebol.com)) в том -смысле, что GUI-тулкит очень удобно состыкован с языком — как в плане философии -использования, так и в плане используемых при работе с ним языковых -конструкций. +Tk является "натуральным" выбором для создания GUI у приложения, написанного на Tcl, из-за того, что связка Tcl/Tk является практически уникальной (если не считать [совсем уж "эзотерических" решений](http://www.rebol.com)) в том смысле, что GUI-тулкит очень удобно состыкован с языком — как в плане философии использования, так и в плане используемых при работе с ним языковых конструкций. # Почему Tk, а не GTK/Qt/что-то ещё? -Ответы можно условно разбить на две категории: +Ответы можно условно разбить на две категории: -* Стандартное заклинание: "а почему нет?"; -* Технические обоснования. +* Стандартное заклинание: "а почему нет?"; +* Технические обоснования. ## А почему нет? -99% претензий к Tk касается вовсе не его _технических_ характеристик, а того, -как он _выглядит_ (и вообще ощущается) на конкретной системе конкретного -пользователя — не секрет, что на 97% "десктопов" в современном мире установлена -одна из ОС, сошедших со стапелей Microsoft, а на жалких остатках, занятых, в -основном, решениями на базе [Linux](http://www.kernel.org) и \*BSD, царят -[GNOME](http://www.gnome.org) и [KDE](http://www.kde.org), то есть имеет место -"обоснованное засилье" приложений, использующих в виде GUI-тулкитов -[GTK](http://www.gtk.org) и [Qt](http://trolltech.com/products/qt), -соответственно. - -Сейчас уже поздно стенать о том, что авторы GTK и Qt не дочитали спецификации -на X Window System, а также о том, что они изобрели (каждый — свою) системы -конфигурации тулкитов, несовместимые с когда-то бывшей хоть каким-то стандартом -систему конфигурации [Xt и Motif](http://en.wikipedia.org/wiki/Xt) -([**XRDB**](XRDB.md)). В результате мы имеем то, что имеем: несовместимые между -собой тулкиты, некоторые из которых борются за "мировое господство". - -Отсюда и наш слабый аргумент: а почему, собственно, GTK или Qt? Потому, что он -доминирует на вашей системе? Но в любом случае всем угодить не получится: -GTK-приложение будет чужим в окружении Qt и наоборот. А приложение GTK или Qt -никогда не будет выглядеть совершенно нативно в Windows, пусть даже оно будет -ближе к "натуральному виду", чем Tk. - -Наконец, Ткаббер был рождён как "иксовое" приложение, а довольно весомая часть -пользователей X Window вообще не использует "desktop environments", такие как -GNOME и KDE — они используют "каноническую" концепцию: window manager + набор -приложений, окнами которых он позволяет управлять. Приложения при этом могут -быть какими угодно, наглядно демонстрируя "разброд и шатание" иксовых тулкитов -во всей его неприглядности. Tk в этом случае выглядит не хуже и не лучше -других. - -Следует также понимать, что у других тулкитов -[хватает своих "тараканов в голове"](http://vitus-wagner.livejournal.com/169017.html), -и переезд на другой тулкит запросто может создать проблем больше, чем решить. +99% претензий к Tk касается вовсе не его _технических_ характеристик, а того, как он _выглядит_ (и вообще ощущается) на конкретной системе конкретного пользователя — не секрет, что на 97% "десктопов" в современном мире установлена одна из ОС, сошедших со стапелей Microsoft, а на жалких остатках, занятых, в основном, решениями на базе [Linux](http://www.kernel.org) и \*BSD, царят [GNOME](http://www.gnome.org) и [KDE](http://www.kde.org), то есть имеет место "обоснованное засилье" приложений, использующих в виде GUI-тулкитов [GTK](http://www.gtk.org) и [Qt](http://trolltech.com/products/qt), соответственно. + +Сейчас уже поздно стенать о том, что авторы GTK и Qt не дочитали спецификации на X Window System, а также о том, что они изобрели (каждый — свою) системы конфигурации тулкитов, несовместимые с когда-то бывшей хоть каким-то стандартом систему конфигурации [Xt и Motif](http://en.wikipedia.org/wiki/Xt) ([XRDB](XRDB.md)). В результате мы имеем то, что имеем: несовместимые между собой тулкиты, некоторые из которых борются за "мировое господство". + +Отсюда и наш слабый аргумент: а почему, собственно, GTK или Qt? Потому, что он доминирует на вашей системе? Но в любом случае всем угодить не получится: GTK-приложение будет чужим в окружении Qt и наоборот. А приложение GTK или Qt никогда не будет выглядеть совершенно нативно в Windows, пусть даже оно будет ближе к "натуральному виду", чем Tk. + +Наконец, Ткаббер был рождён как "иксовое" приложение, а довольно весомая часть пользователей X Window вообще не использует "desktop environments", такие как GNOME и KDE — они используют "каноническую" концепцию: window manager + набор приложений, окнами которых он позволяет управлять. Приложения при этом могут быть какими угодно, наглядно демонстрируя "разброд и шатание" иксовых тулкитов во всей его неприглядности. Tk в этом случае выглядит не хуже и не лучше других. + +Следует также понимать, что у других тулкитов [хватает своих "тараканов в голове"](http://vitus-wagner.livejournal.com/169017.html), и переезд на другой тулкит запросто может создать проблем больше, чем решить. ## Техническая сторона дела -У Tk есть несколько интересных особенностей, которые выделяют его в ряду -GUI-тулкитов: - -* Очень небольшой размер; -* Масса расширений, _написанных на "чистом" Tcl;_ -* Tk является интегральной частью _шелла_ - [`wish`](http://tcl.tk/man/tcl8.4/UserCmd/wish.htm#M13), то есть - программы, которая выполняет скрипты Tcl в "оконных" окружениях. - -Это позволяет создавать дистрибутивы "всё-в-одном" из приложений, написанных -на Tcl/Tk — -[**старкиты и старпаки**](Дистрибутивы__которые_мы_выбираем.md#Tclkit_starkits_и_starpacks_немного_теории). - -Другими словами, "близость" Tk к Tcl даёт этому тулкиту несколько очков форы -перед другими тулкитами, для которых требуется таскать за собой: - -* Специальные [**биндинги**](Терминология.md#Биндинги_bindings) к тулкиту; -* Сам тулкит в виде библиотеки (или набора из десятка библиотек, как в случае с GTK2+). - -![(!)](../images/Hammer.png) **Сделать:** развить +У Tk есть несколько интересных особенностей, которые выделяют его в ряду GUI-тулкитов: + +* Очень небольшой размер; +* Масса расширений, _написанных на "чистом" Tcl;_ +* Tk является интегральной частью _шелла_ [**wish**](http://tcl.tk/man/tcl8.4/UserCmd/wish.htm#M13), то есть программы, которая выполняет скрипты Tcl в "оконных" окружениях. + +Это позволяет создавать дистрибутивы "всё-в-одном" из приложений, написанных на Tcl/Tk — [старкиты и старпаки](Дистрибутивы__которые_мы_выбираем.md#Tclkit_starkits_и_starpacks_немного_теории). + +Другими словами, "близость" Tk к Tcl даёт этому тулкиту несколько очков форы перед другими тулкитами, для которых требуется таскать за собой: + +* Специальные [биндинги](Терминология.md#Биндинги_bindings) к тулкиту; +* Сам тулкит в виде библиотеки (или набора из десятка библиотек, как в случае с GTK2+). + +![(!)](../images/Hammer.png) **Сделать:** развить # Почему не отделить интерфейс от реализации? -Людям, прочитавшим пару книжек по программированию, эта идея кажется разумной. -В реальности всё гораздо сложнее. - -Самая главная проблема состоит в том, что разные GUI-тулкиты имеют разную -_философию_ программирования. Это приводит к тому, что для поддержки разных -тулкитов нужно: а) писать "ядро" в очень общем виде, разрабатывая некие -абстрактные интерфейсы для взаимодействия ядра с тулкитом; б) писать ещё по -одному слою кода для каждого тулкита — для привязки этого тулкита к ядру. В -результате код Ткаббера увеличится хорошо если вдвое, а его читабельность -уменьшится, видимо, даже более чем вдвое. Неплохую идею о том, к каким -проблемам приводит подобный подход, можно почерпнуть, глядя на -[GiTK](http://gitk.sourceforge.net). - -Ещё одна проблема, незаметная при поверхностном осмотре, состоит в том, что -создание "чистого" кода практически невзоможно — любая платформа имеет -собственные заморочки, что требует "твиков" кода, создания "костылей" и прочих -уродств в определённых случаях. К сожалению, в Ткаббере вынужденно хватает -подобных мест. В случае с "многоинтерфейсным" подходом мы автоматически множим -и подобные проблемы. - -Наконец, подумайте о координации разработки (а одна команда не станет окучивать -все направления — для этого требуются конкретные группы), а также о поддержке -пользователей: даже сейчас, когда Ткаббер широко используется только на двух -платформах (в Windows и Unix-based системах; в Mac OS X ситуация далека от -радужной в силу отсутствия в команде Ткаббера разработчиков, заинтересованнных -в улучшении ситуации), зачастую можно говорить о двух разных Ткабберах, так как -эти платформы имеют слишком много собственных особенностей. Представьте теперь, -что будет, если умножить число платформ на число поддерживаемых тулкитов? - -Наконец, возможно, ключевой момент: разработчиков вполне устраивает Tcl/Tk, а -идеи "портировать Ткаббер под \<место для тулкита>" проистекают в основном от -тех, кто свой труд вкладывать в это не хочет. +Людям, прочитавшим пару книжек по программированию, эта идея кажется разумной. В реальности всё гораздо сложнее. + +Самая главная проблема состоит в том, что разные GUI-тулкиты имеют разную _философию_ программирования. Это приводит к тому, что для поддержки разных тулкитов нужно: а) писать "ядро" в очень общем виде, разрабатывая некие абстрактные интерфейсы для взаимодействия ядра с тулкитом; б) писать ещё по одному слою кода для каждого тулкита — для привязки этого тулкита к ядру. В результате код Ткаббера увеличится хорошо если вдвое, а его читабельность уменьшится, видимо, даже более чем вдвое. Неплохую идею о том, к каким проблемам приводит подобный подход, можно почерпнуть, глядя на [GiTK](http://gitk.sourceforge.net). + +Ещё одна проблема, незаметная при поверхностном осмотре, состоит в том, что создание "чистого" кода практически невзоможно — любая платформа имеет собственные заморочки, что требует "твиков" кода, создания "костылей" и прочих уродств в определённых случаях. К сожалению, в Ткаббере вынужденно хватает подобных мест. В случае с "многоинтерфейсным" подходом мы автоматически множим и подобные проблемы. + +Наконец, подумайте о координации разработки (а одна команда не станет окучивать все направления — для этого требуются конкретные группы), а также о поддержке пользователей: даже сейчас, когда Ткаббер широко используется только на двух платформах (в Windows и Unix-based системах; в Mac OS X ситуация далека от радужной в силу отсутствия в команде Ткаббера разработчиков, заинтересованнных в улучшении ситуации), зачастую можно говорить о двух разных Ткабберах, так как эти платформы имеют слишком много собственных особенностей. Представьте теперь, что будет, если умножить число платформ на число поддерживаемых тулкитов? + +Наконец, возможно, ключевой момент: разработчиков вполне устраивает Tcl/Tk, а идеи "портировать Ткаббер под \<место для тулкита>" проистекают в основном от тех, кто свой труд вкладывать в это не хочет. # Почему нет "внешнего API"? -"Внешнего API" (такого, как, например, API плагинов у -[Миранды](http://miranda-im.org)) в Ткаббере нет потому, что он написан на Tcl, -а не на Си; соответственно, предполагается, что "скриптование" Ткаббера -производится кодом на Tcl. - -Обвинение в отсутствии C API обычно приводят как причину "невозможности -скриптовать Ткаббер на языках, отличных от Tcl" (более конкретно — "на любимом -языке"). Теоретически это обвинение обоснованно. Однако давайте посмотрим на -проблему с практической точки зрения (игнорируя тот факт, что создание C API -для Tcl кода относится к области ненаучной фантастики): - -* Наличие C API не сделает автоматически доступными биндинги к этому API для - других языков — таковые сначала кто-то должен написать. И поддерживать. - Посему заявление "я не могу скриптовать/расширять Ткаббер на любимом языке" - в большинстве случаев следует переводить как "я знаю только С++ и джаву, и - ваш тикль учить не хочу". -* Предположив наличие C API и биндингов к другим языкам, мы видим проблемы - возможностей использования и портабельности: предположим, вы написали плагин - к Ткабберу, скажем, на Питоне. Много ли пользователей захотят ставить - рантайм питона в систему, чтобы использовать ваш плагин? Как быть с - распространением плагина в "упакованных" версиях Ткаббера? Пусть даже плагин - написан прямо на Си, — возникает проблема кроссплатформенной сборки, то есть - полный пакет проблем поддержки нескольких систем компиляции (имеющих, - например, место в случае сборки расширений Tcl, написанных на Си). - -С другой стороны, скриптование/расширение Ткаббера на его "родном" языке лишено -_всех_ этих проблем, кроме проблемы самообучения допиливающего. +"Внешнего API" (такого, как, например, API плагинов у [Миранды](http://miranda-im.org)) в Ткаббере нет потому, что он написан на Tcl, а не на Си; соответственно, предполагается, что "скриптование" Ткаббера производится кодом на Tcl. + +Обвинение в отсутствии C API обычно приводят как причину "невозможности скриптовать Ткаббер на языках, отличных от Tcl" (более конкретно — "на любимом языке"). Теоретически это обвинение обоснованно. Однако давайте посмотрим на проблему с практической точки зрения (игнорируя тот факт, что создание C API для Tcl кода относится к области ненаучной фантастики): + +* Наличие C API не сделает автоматически доступными биндинги к этому API для других языков — таковые сначала кто-то должен написать. И поддерживать. Посему заявление "я не могу скриптовать/расширять Ткаббер на любимом языке" в большинстве случаев следует переводить как "я знаю только С++ и джаву, и ваш тикль учить не хочу". +* Предположив наличие C API и биндингов к другим языкам, мы видим проблемы возможностей использования и портабельности: предположим, вы написали плагин к Ткабберу, скажем, на Питоне. Много ли пользователей захотят ставить рантайм питона в систему, чтобы использовать ваш плагин? Как быть с распространением плагина в "упакованных" версиях Ткаббера? Пусть даже плагин написан прямо на Си, — возникает проблема кроссплатформенной сборки, то есть полный пакет проблем поддержки нескольких систем компиляции (имеющих, например, место в случае сборки расширений Tcl, написанных на Си). + +С другой стороны, скриптование/расширение Ткаббера на его "родном" языке лишено _всех_ этих проблем, кроме проблемы самообучения допиливающего. # Ткаббер выглядит отвратительно! -> *\ почему говорят, что ткабер страшный? о\_0 -> \ zayza: потому что видели его* - -Ткаббер (а точнее — Tk) находится в ловушке всех без исключения -кроссплатформенных GUI-тулкитов — невозможно выглядеть "нативно", работая на -ненативной платформе. К сожалению, как было сказано выше, это относится не -только к проблеме "Tk в Windows", но и к "Tk в GNOME/KDE". - -К сожалению, выглядеть "в струе" самых последних веяний моды Windows и прочих -"desktop environments" Tk, скорее всего, не будет никогда — тяжело прочно -сидеть на нескольких стульях разной высоты, формы и конструкции сразу. - -Несколько подсластить пилюлю могут достаточно широкие возможности по изменению -внешнего вида Tk-приложений, о которых (когда-нибудь будет) рассказано -[**здесь**](База_данных_опций_Tk.md). - -Заодно расскажем ещё об одной часто всплывающей теме: +Ткаббер (а точнее — Tk) находится в ловушке всех без исключения кроссплатформенных GUI-тулкитов — невозможно выглядеть "нативно", работая на ненативной платформе. К сожалению, как было сказано выше, это относится не только к проблеме "Tk в Windows", но и к "Tk в GNOME/KDE". + +К сожалению, выглядеть "в струе" самых последних веяний моды Windows и прочих "desktop environments" Tk, скорее всего, не будет никогда — тяжело прочно сидеть на нескольких стульях разной высоты, формы и конструкции сразу. + +Несколько подсластить пилюлю могут достаточно широкие возможности по изменению внешнего вида Tk-приложений, о которых (когда-нибудь будет) рассказано [здесь](База_данных_опций_Tk.md). + +Заодно расскажем ещё об одной часто всплывающей теме: ## Tile в Ткаббере -[Tile](http://tktable.sourceforge.net/tile) — это _надстройка_ над Tk, -призванная решить некоторые проблемы с "луком и филом", присущие Tk: - -* Реализовать "нативный" вид в Windows XP (то есть использовать её движок - тем); -* Реализовать несколько новых виджетов, переделать старые. - -Проблема с Tile состоит в том, что она _**не** является **"drop-in -replacement"** для Tk._ Это важно понимать: простое подключение Tile к -существующему проекту, использующему Tk, не привьёт ему "волшебным образом" все -преимущества Tile. В частности, если стандартные виджеты Tk ещё могут (с -некоторыми приседаниями при сборке Tile) "переехать" на новый движок, то все -"левые" виджеты (например, виджеты из BWidget) "сушат вёсла" — выглядят и -работают по-старому. - -Другими словами, Ткаббер нужно _портировать_ под Tile, чтобы он с этой Tile -нормально заработал. - -Тут возникает другая проблема. Она состоит в том, что Ткаббер позиционируется -разработчиками как максимально портабельное приложение. Это означает, в числе -прочего, что: - -* Ткаббер (формально) работает даже на Tcl/Tk 8.3; -* Ткаббер _зависит_ (в смысле "не может работать без") только от таких - программных компонентов, которые давно и широко доступны под любую из - платформ, на которых работает Tcl/Tk. Причём только один из этих компонентов - (собственно Tcl/Tk) написан на Си, и его нужно "собирать" на целевой - платформе, если его там нет в готовом виде; остальные компоненты (Tcllib и - BWidget) представляют собой код на Tcl — их достаточно "развернуть" из - архивов, — и они готовы к работе. - -Tile к этим компонентам _не_ относится. Достаточно сказать о том, что в природе -не существует даже такого понятия как "стабильный релиз Tile", а это означает, -что его API может меняться по два раза на дню. - -На сегодняшний день состояние дел таково, что если мы бросим все дела и -"привяжем" Ткаббер к Tile, то это ударит как по разработчикам (им понадобится -оперативно следить за изменениями в Tile), так и по пользователям (Tile, -насколько нам известно, нет ни в одном серьёзном дистрибутиве Linux) — Ткаббер -потеряет одно из своих главных качеств — способность работать без чрезмерно -серьёзных телодвижений со стороны пользователя на любой системе, в которой есть -Tcl/Tk. - -Ещё одна (менее серьёзная) проблема состоит в том, что Ткаббер действительно -сильно зависит от BWidget — с его помощью делаются: почти все диалоги, главное -меню, интерфейс с табами (правда, в альфе 0.10.1 уже реализован другой подход), -деревья, выпадающие списки так далее. Так как BWidget не поддерживает Tile и, -судя по-всему, не будет её поддерживать, портирование Ткаббера под Tile — это -очень серьёзный шаг: прежде чем его сделать, разработчики должны быть уверены, -что Tile получила такую же доступность, как BWidget. - -Посему точка зрения [**автора этих строк**](Участник_Kostix.md) состоит в том, что -вряд ли стоит ожидать подвижек в этом направлении в ближайшие два года. +[Tile](http://tktable.sourceforge.net/tile) — это _надстройка_ над Tk, призванная решить некоторые проблемы с "луком и филом", присущие Tk: + +* Реализовать "нативный" вид в Windows XP (то есть использовать её движок тем); +* Реализовать несколько новых виджетов, переделать старые. + +Проблема с Tile состоит в том, что она _**не** является **"drop-in replacement"** для Tk._ Это важно понимать: простое подключение Tile к существующему проекту, использующему Tk, не привьёт ему "волшебным образом" все преимущества Tile. В частности, если стандартные виджеты Tk ещё могут (с некоторыми приседаниями при сборке Tile) "переехать" на новый движок, то все "левые" виджеты (например, виджеты из BWidget) "сушат вёсла" — выглядят и работают по-старому. + +Другими словами, Ткаббер нужно _портировать_ под Tile, чтобы он с этой Tile нормально заработал. + +Тут возникает другая проблема. Она состоит в том, что Ткаббер позиционируется разработчиками как максимально портабельное приложение. Это означает, в числе прочего, что: + +* Ткаббер (формально) работает даже на Tcl/Tk 8.3; +* Ткаббер _зависит_ (в смысле "не может работать без") только от таких программных компонентов, которые давно и широко доступны под любую из платформ, на которых работает Tcl/Tk. Причём только один из этих компонентов (собственно Tcl/Tk) написан на Си, и его нужно "собирать" на целевой платформе, если его там нет в готовом виде; остальные компоненты (Tcllib и BWidget) представляют собой код на Tcl — их достаточно "развернуть" из архивов, — и они готовы к работе. + +Tile к этим компонентам _не_ относится. Достаточно сказать о том, что в природе не существует даже такого понятия как "стабильный релиз Tile", а это означает, что его API может меняться по два раза на дню. + +На сегодняшний день состояние дел таково, что если мы бросим все дела и "привяжем" Ткаббер к Tile, то это ударит как по разработчикам (им понадобится оперативно следить за изменениями в Tile), так и по пользователям (Tile, насколько нам известно, нет ни в одном серьёзном дистрибутиве Linux) — Ткаббер потеряет одно из своих главных качеств — способность работать без чрезмерно серьёзных телодвижений со стороны пользователя на любой системе, в которой есть Tcl/Tk. + +Ещё одна (менее серьёзная) проблема состоит в том, что Ткаббер действительно сильно зависит от BWidget — с его помощью делаются: почти все диалоги, главное меню, интерфейс с табами (правда, в альфе 0.10.1 уже реализован другой подход), деревья, выпадающие списки так далее. Так как BWidget не поддерживает Tile и, судя по-всему, не будет её поддерживать, портирование Ткаббера под Tile — это очень серьёзный шаг: прежде чем его сделать, разработчики должны быть уверены, что Tile получила такую же доступность, как BWidget. + +Посему точка зрения [автора этих строк](Участник_Kostix.md) состоит в том, что вряд ли стоит ожидать подвижек в этом направлении в ближайшие два года. + + Index: wiki/ru/Остров_посланных_на....md ================================================================== --- wiki/ru/Остров_посланных_на....md +++ wiki/ru/Остров_посланных_на....md @@ -1,169 +1,104 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Остров_посланных_на...) + # Остров посланных на... Материал из Tkabber Wiki -> _Необычной какой-то неокеанической красоты, высоты, -> изящной длины открылся нам вдруг остров, стоящий посреди океана. -> Казалось — он вулканического происхождения, потом казалось — нет. -> И все же что-то вулканическое угадывалось в его мощных очертаниях._ - -> _© ["Остров посланных на..."](http://www.lib.ru/KOWAL/suervyer.txt#6) из сборника - ["Суер-Выер"](http://www.lib.ru/KOWAL/suervyer.txt) - [Юрия Коваля](http://www.lib.ru/KOWAL/)_ - -Доброго времени суток! - -Поскольку вы находитесь здесь, можно предположить, что вы прочитали топик в -конференции `tkabber@conference.jabber.ru` и нажали ссылку. Обижаться не стоит, -вы на верном пути. Сейчас мы по-быстрому расскажем вам, как пользоваться этой -вики, конференцией и находящимся там ботом, чтобы ваше пребывание там было -приятным, а ваше и наше время не было потрачено зря, но с пользой. +Необычной какой-то неокеанической красоты, высоты, + изящной длины открылся нам вдруг остров, стоящий посреди океана. + Казалось — он вулканического происхождения, потом казалось — нет. + И все же что-то вулканическое угадывалось в его мощных очертаниях. + +© ["Остров посланных на..."](http://www.lib.ru/KOWAL/suervyer.txt#6) из сборника ["Суер-Выер"](http://www.lib.ru/KOWAL/suervyer.txt) [Юрия Коваля](http://www.lib.ru/KOWAL/) + +Доброго времени суток! + +Поскольку вы находитесь здесь, можно предположить, что вы прочитали топик в конференции `tkabber@conference.jabber.ru` и нажали ссылку. Обижаться не стоит, вы на верном пути. Сейчас мы по-быстрому расскажем вам, как пользоваться этой вики, конференцией и находящимся там ботом, чтобы ваше пребывание там было приятным, а ваше и наше время не было потрачено зря, но с пользой. ## Содержание * [1 Вики](#Вики) * [2 Бот sulci](#Бот_sulci) * [3 Другие источники информации](#Другие_источники_информации) * [4 Конференция](#Конференция) * [5 Проблема разрешилась?](#Проблема_разрешилась) -* [6 Проблема **НЕ** разрешилась?](#Проблема_НЕ_разрешилась) +* [6 Проблема НЕ разрешилась?****](#Проблема_НЕ_разрешилась) # Вики -Подробнее о навигации по вики можно прочитать на -[**Заглавной странице**](Заглавная_страница.md), здесь же можем сказать, что, перерыв -интернет в поисках документации по Ткабберу на русском (да и других языках), мы -ничего путнего почти и не нашли (а что нашли — обнародовали на странице -[**Ссылки**](Ссылки.md)). Иными словами: этот проект вполне можно считать -официальным источником информации по этой замечательной программе (не считая, -конечно, файла документации, идущего с пакетом, и официального сайта Ткаббера -[http://tkabber.jabber.ru](http://tkabber.jabber.ru)). К чему это всё? А к -тому, что не спешите задавать свой вопрос на конференции, почитайте сначала -хотя бы [**Ткаббер ЧаВо**](Ткаббер_ЧаВо.md), а лучше — и остальные статьи. +Подробнее о навигации по вики можно прочитать на **[Заглавной странице](Заглавная_страница.md),** здесь же можем сказать, что, перерыв интернет в поисках документации по Ткабберу на русском (да и других языках), мы ничего путнего почти и не нашли (а что нашли — обнародовали на странице **[Ссылки](Ссылки.md)**). Иными словами: этот проект вполне можно считать официальным источником информации по этой замечательной программе (не считая, конечно, файла документации, идущего с пакетом, и официального сайта Ткаббера [http://tkabber.jabber.ru](http://tkabber.jabber.ru)). К чему это всё? А к тому, что не спешите задавать свой вопрос на конференции, почитайте сначала хотя бы **[Ткаббер ЧаВо](Ткаббер_ЧаВо.md),** а лучше — и остальные статьи. # Бот sulci -Разговаривать с ботом имеет смысл, если у вас дорогой трафик или проблемы с -выходом в интернет. Он знает немного и может просветить лишь по самым основным -вопросам. - -* Сразу предупреждаем: **общаться с ним в привате!** -* Один застенчивый новичок долго не мог попасть в приват к боту, потому что не - знал, как записываться на приём. - * Объясняем: открыть приват (не только с ботом) можно, сделав двойной клик - на нике в списке участников конференции. - * То же самое можно сделать, открыв на участнике конференции контекстное - меню и выбрав там пункт "Начать разговор". Да не дрогнет рука ваша! - * Ещё один вариант: набрать команду **/open sulci** - -* Начать общение можно с этой фразы: - - wtf ткаббер_термины - -* В ответ на неё бот выдаст ключевые слова, которым мы его обучили. -* Эти ключевые слова тоже используются с помощью команды **wtf**. -* Бот умеет искать в гугле: - - google поисковый запрос - google_adv start limit поисковый запрос - - Во втором случае он выдаёт limit результатов, начиная с start. Например, по - команде "google\_adv 4 5 tkabber wiki" бот выдаст пять ссылок по запросу - "tkabber wiki", пропустив первые три ссылки. - -Конечно, бот умеет много чего ещё, но это уже к Ткабберу не относится. +Разговаривать с ботом имеет смысл, если у вас дорогой трафик или проблемы с выходом в интернет. Он знает немного и может просветить лишь по самым основным вопросам. + +* Сразу предупреждаем: **общаться с ним в привате!** +* Один застенчивый новичок долго не мог попасть в приват к боту, потому что не знал, как записываться на приём. + * Объясняем: открыть приват (не только с ботом) можно, сделав двойной клик на нике в списке участников конференции. + * То же самое можно сделать, открыв на участнике конференции контекстное меню и выбрав там пункт "Начать разговор". Да не дрогнет рука ваша! + * Ещё один вариант: набрать команду **/open sulci** + +* Начать общение можно с этой фразы: + + wtf ткаббер_термины + +* В ответ на неё бот выдаст ключевые слова, которым мы его обучили. +* Эти ключевые слова тоже используются с помощью команды **wtf**. +* Бот умеет искать в гугле: + + google поисковый запрос + google_adv start limit поисковый запрос + +Во втором случае он выдаёт limit результатов, начиная с start. Например, по команде "google\_adv 4 5 tkabber wiki" бот выдаст пять ссылок по запросу "tkabber wiki", пропустив первые три ссылки. + +Конечно, бот умеет много чего ещё, но это уже к Ткабберу не относится. # Другие источники информации -1. Как ни странно, родная документация, которую можно найти в - **/usr/share/doc/tkabber/tkabber.html** или - **C:\\Program Files\\Tkabber\\tkabber\\doc\\tkabber.html** (на английском); -1. У Ткаббера есть официальная страница - [http://tkabber.jabber.ru](http://tkabber.jabber.ru) — поищите на ней; хоть - форум там и пустынен, архив его может пригодиться; -1. Если вы пользователь Windows, имеет смысл ознакомиться с - [этой статьёй](http://sgolovan.nes.ru/jabber/Tkabber-Windows-Mini-Howto.html) (на - случай, если вдруг ни с того ни с сего тот сервер в дауне, у нас имеется - [**"зеркало" этой статьи**](Tkabber_Windows_Mini_HOWTO.md)); -1. Попробуйте пошерстить - [логи конференции](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru) — - возможно, ваша проблема уже обсуждалась; -1. Если религия позволяет, сходите на [google.com](http://google.com). В - качестве поискового запроса можно написать: - * первую строчку сообщения об ошибке или её часть, если по полной строке нет - результатов, - * ключевые слова: - * обязательно: Ткаббер (tkabber), - * в зависимости от потребностей: шрифт (font), автоэвей (autoaway), - смайлик (emoticon, emoteicon) и так далее. Вообще учитесь пользоваться - гуглем — в наше время это умение будет поважнее владения томагавком. Не - удивляйтесь, если поиск приведёт вас на эту вики :) - * ключевые слова в сочетании со служебным словом - [site](http://www.google.ru/intl/ru/help/refinesearch.html#domain), если - хотите искать только на определённом сайте. Например, если хотите искать - слово "старпак" в логах конференции, введите в строке запроса следующий - текст: - **старпак site:http://chatlogs.jabber.ru/tkabber@conference.jabber.ru** -1. Не забудьте, что и на вики есть поиск: - * Кнопка "Перейти" попытается перекинуть вас на статью с введённым именем. - * Кнопка "Поиск" будет искать страницы, на которых присутствует введённое - вами слово. - * В случае неудачи попробуйте другие словоформы: вместо "смайлик" — - "смайлика", "смайлики" и т. д. - * Выяснилось, что поиск на вики глючит на запросах из латинских букв - (например, не находится "icq", хотя это слово встречается в уйме - статей; не находится "windo", зато находится "window" как составная - часть слова "windows", ну и так далее). Плохо, конечно. Надеемся, что - администраторы вики это когда-нибудь исправят, а пока посоветуем - схитрить (во многих статьях используется слово "аська" и его - производные, можете поискать на "аськ"; или же "новости", "фид" вместо - "rss"). Или просмотрите список всех страниц (ссылка в левом меню). - * Отсюда вывод: на вики тоже искать гуглём (как искать на конкретном - сайте, описано чуть выше). +1. Как ни странно, родная документация, которую можно найти в **/usr/share/doc/tkabber/tkabber.html** или **C:\\Program Files\\Tkabber\\tkabber\\doc\\tkabber.html** (на английском); +1. У Ткаббера есть официальная страница [http://tkabber.jabber.ru](http://tkabber.jabber.ru) — поищите на ней; хоть форум там и пустынен, архив его может пригодиться; +1. Если вы пользователь Windows, имеет смысл ознакомиться с [этой статьёй](http://sgolovan.nes.ru/jabber/Tkabber-Windows-Mini-Howto.html) (на случай, если вдруг ни с того ни с сего тот сервер в дауне, у нас имеется ["зеркало" этой статьи](Tkabber_Windows_Mini_HOWTO.md)); +1. Попробуйте пошерстить [логи конференции](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru) — возможно, ваша проблема уже обсуждалась; +1. Если религия позволяет, сходите на [google.com](http://google.com). В качестве поискового запроса можно написать: + * первую строчку сообщения об ошибке или её часть, если по полной строке нет результатов, + * ключевые слова: + * обязательно: Ткаббер (tkabber), + * в зависимости от потребностей: шрифт (font), автоэвей (autoaway), смайлик (emoticon, emoteicon) и так далее. Вообще учитесь пользоваться гуглем — в наше время это умение будет поважнее владения томагавком. Не удивляйтесь, если поиск приведёт вас на эту вики :) + + * ключевые слова в сочетании со служебным словом [site](http://www.google.ru/intl/ru/help/refinesearch.html#domain), если хотите искать только на определённом сайте. Например, если хотите искать слово "старпак" в логах конференции, введите в строке запроса следующий текст: **старпак site:http://chatlogs.jabber.ru/tkabber@conference.jabber.ru** + +1. Не забудьте, что и на вики есть поиск: + * Кнопка "Перейти" попытается перекинуть вас на статью с введённым именем. + * Кнопка "Поиск" будет искать страницы, на которых присутствует введённое вами слово. + * В случае неудачи попробуйте другие словоформы: вместо "смайлик" — "смайлика", "смайлики" и т. д. + * Выяснилось, что поиск на вики глючит на запросах из латинских букв (например, не находится "icq", хотя это слово встречается в уйме статей; не находится "windo", зато находится "window" как составная часть слова "windows", ну и так далее). Плохо, конечно. Надеемся, что администраторы вики это когда-нибудь исправят, а пока посоветуем схитрить (во многих статьях используется слово "аська" и его производные, можете поискать на "аськ"; или же "новости", "фид" вместо "rss"). Или просмотрите список всех страниц (ссылка в левом меню). + * Отсюда вывод: на вики тоже искать гуглём (как искать на конкретном сайте, описано чуть выше). # Конференция ![](../images/180px-2faq.gif) -Если самостоятельное изучение документации плодов не принесло, общения с нами -не избежать. Как можно сделать его приятнее и свести потери нашего и вашего -времени к минимуму? - -1. Не пожалейте ещё пяти минут и почитайте статью о том, как правильно задавать вопросы: - * [короткая версия](http://mydebianblog.blogspot.com/2006/07/questions-mini-howto.html), - * [более полная версия](http://bugtraq.ru/forum/faq/general/smart-questions.html), - * [она же в гугле](http://www.google.com/search?as_q=перевод+how+to+ask+questions+in+a+smart+way), - * бот тоже может помочь: **wtf хороший\_вопрос**. -1. Чтобы общение в конференции протекало в атмосфере добрососедства и - взаимопонимания, постарайтесь руководствоваться принципами, давно - проверенными временем в мире IRC и изложенными, в частности, на следующих - страницах: - * [кэш FAQ'а канала помощи по оконному менеджеру fvwm](http://66.102.9.104/search?q=cache:-bKM5BysLb8J:edulinux.homeunix.org/fvwm/fvwmchanfaq.html) - (первая часть, про сам канал — на английском) - * [статья о правилах поведения на каналах IRC-сети Wenet](http://www.wenet.ru/irc/etiquette) - (по-русски) -1. Собственно, трудно к этому что-либо прибавить, но нелишним будет напомнить, - что от того, **как** задан вопрос, сильно зависит ответ, который вы получите - (а то и не получите вовсе). Перечитайте ещё раз пункты 1 и 2. -1. Всё же пришлось добавить одно пожелание: пожалуйста, очень вас просим, почти - на коленях — **не коверкайте русский язык и не используйте "слепые" смайлики - — вот такие:** - - )))) - - **А то забаним!** (Достало уже просто.) +![](../images/magnify-clip.png) + +Если самостоятельное изучение документации плодов не принесло, общения с нами не избежать. Как можно сделать его приятнее и свести потери нашего и вашего времени к минимуму? + +1. Не пожалейте ещё пяти минут и почитайте статью о том, как правильно задавать вопросы: + * [короткая версия](http://mydebianblog.blogspot.com/2006/07/questions-mini-howto.html), + * [более полная версия](http://bugtraq.ru/forum/faq/general/smart-questions.html), + * [она же в гугле](http://www.google.com/search?as_q=перевод+how+to+ask+questions+in+a+smart+way), + * бот тоже может помочь: **wtf хороший\_вопрос**. + +1. Чтобы общение в конференции протекало в атмосфере добрососедства и взаимопонимания, постарайтесь руководствоваться принципами, давно проверенными временем в мире IRC и изложенными, в частности, на следующих страницах: + * [кэш FAQ'а канала помощи по оконному менеджеру fvwm](http://66.102.9.104/search?q=cache:-bKM5BysLb8J:edulinux.homeunix.org/fvwm/fvwmchanfaq.html) (первая часть, про сам канал — на английском) + * [статья о правилах поведения на каналах IRC-сети Wenet](http://www.wenet.ru/irc/etiquette) (по-русски) + +1. Собственно, трудно к этому что-либо прибавить, но нелишним будет напомнить, что от того, **как** задан вопрос, сильно зависит ответ, который вы получите (а то и не получите вовсе). Перечитайте ещё раз пункты 1 и 2. +1. Всё же пришлось добавить одно пожелание: пожалуйста, очень вас просим, почти на коленях — **не коверкайте русский язык и не используйте "слепые" смайлики — вот такие: + )))) + А то забаним!** (Достало уже просто.) # Проблема разрешилась? -Тогда будьте добры, расскажите в конференции, как вы этого добились. Можете -также написать об этом в ЧаВо или вообще написать новую статью. Ваш опыт -пригодится другим. - -# Проблема **НЕ** разрешилась? -Что ж, и такое бывает. Умейте держать удар, падать лицом в грязь, отливать -против ветра и уходить не солоно хлебавши. Жизнь коротка, но это не повод -отчаиваться. Отдохните от проблемы, а потом начните снова. Попробуйте -альтернативные пути решения, сходите на другие форумы и конференции, которые -могут быть как-то связаны с вашей задачей. На нас свет клином не сошёлся, и -кто-нибудь другой может подсказать решение. В конце концов, подумайте хорошо: а -настолько ли важна эта проблема? Может, вместо того, чтобы сутками пялиться в -монитор, пытаясь с ней разобраться, вам стоит расправить плечи, выбраться на -природу и послушать птиц? :) Жизнь коротка, знаете ли... +Тогда будьте добры, расскажите в конференции, как вы этого добились. Можете также написать об этом в ЧаВо или вообще написать новую статью. Ваш опыт пригодится другим. + +# Проблема НЕ разрешилась?**** +Что ж, и такое бывает. Умейте держать удар, падать лицом в грязь, отливать против ветра и уходить не солоно хлебавши. Жизнь коротка, но это не повод отчаиваться. Отдохните от проблемы, а потом начните снова. Попробуйте альтернативные пути решения, сходите на другие форумы и конференции, которые могут быть как-то связаны с вашей задачей. На нас свет клином не сошёлся, и кто-нибудь другой может подсказать решение. В конце концов, подумайте хорошо: а настолько ли важна эта проблема? Может, вместо того, чтобы сутками пялиться в монитор, пытаясь с ней разобраться, вам стоит расправить плечи, выбраться на природу и послушать птиц? :) Жизнь коротка, знаете ли... + + Index: wiki/ru/Палитра_цветов.md ================================================================== --- wiki/ru/Палитра_цветов.md +++ wiki/ru/Палитра_цветов.md @@ -1,94 +1,68 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Палитра_цветов/index.html) + # Палитра цветов -Материал из Tkabber Wiki +Материал из Tkabber Wiki. ## Содержание * [1 Введение](#Введение) * [2 Теория](#Теория) - * [2.1 Цвета X Window](#Цвета_X_Window) - * [2.2 Системные цвета](#Системные_цвета) - * [2.3 Спецификации RGB](#Спецификации_RGB) + * [2.1 Цвета X Window](#Цвета_X_Window) + * [2.2 Системные цвета](#Системные_цвета) + * [2.3 Спецификации RGB](#Спецификации_RGB) * [3 Практика](#Практика) - * [3.1 Таблицы](#Таблицы) - * [3.2 Утилиты](#Утилиты) + * [3.1 Таблицы](#Таблицы) + * [3.2 Утилиты](#Утилиты) # Введение -При редактировании различных настроек цветов в Ткаббере полезно иметь: в голове -— некоторые знания из области управления цветами в -[Tk](http://ru.wikipedia.org/wiki/Tk), и под рукой — вспомогательные утилиты, -облегчающие нелёгкий труд любителя -[*хохломы*](Цветовые_темы_и_пиктограммы.md#Цветовые_темы). +При редактировании различных настроек цветов в Ткаббере полезно иметь: в голове — некоторые знания из области управления цветами в [Tk](http://ru.wikipedia.org/wiki/Tk), и под рукой — вспомогательные утилиты, облегчающие нелёгкий труд любителя [хохломы](Цветовые_темы_и_пиктограммы.md#Цветовые_темы). # Теория -Tk понимает цвета в трёх вариантах: +Tk понимает цвета в трёх вариантах: -* "Стандартные цвета X Window"; -* "Системные" цвета; -* Числовые обозначения цветов, кодирующие их RGB-компоненты. +* "Стандартные цвета X Window"; +* "Системные" цвета; +* Числовые обозначения цветов, кодирующие их RGB-компоненты. ## Цвета X Window -Представляют собою большой набор различных цветов, стандартизированный для -использования в X Window System. В любых "иксах" идёт текстовый файл -**rgb.txt**, содержащий отображения названий цветов на их RGB-значения. - -Про эти цвета Tk "знает" независимо от той системы, в которой работает. - -"Официальный" (для Tk) список цветов представлен страницей руководства -["colors"](http://www.tcl.tk/man/tcl8.4/TkCmd/colors.htm), однако для подбора -цветов гораздо удобнее пользоваться спецсредствами, о которых рассказано -[**ниже**](Палитра_цветов.md#Практика). +Представляют собою большой набор различных цветов, стандартизированный для использования в X Window System. В любых "иксах" идёт текстовый файл **rgb.txt**, содержащий отображения названий цветов на их RGB-значения. + +Про эти цвета Tk "знает" независимо от той системы, в которой работает. + +"Официальный" (для Tk) список цветов представлен страницей руководства ["colors"](http://www.tcl.tk/man/tcl8.4/TkCmd/colors.htm), однако для подбора цветов гораздо удобнее пользоваться спецсредствами, о которых рассказано [ниже](Палитра_цветов.md#Практика). ## Системные цвета -Это специальные цвета, доступные в определённой оконной системе. Имеются только -в Windows и Mac OS X. Их удобно использовать для того, чтобы назначать виджетам -"стандартные" ("системные") цвета. +Это специальные цвета, доступные в определённой оконной системе. Имеются только в Windows и Mac OS X. Их удобно использовать для того, чтобы назначать виджетам "стандартные" ("системные") цвета. -![(!)](../images/Hammer.png) **Сделать:** таблицы из книги Уэлша +![(!)](../images/Hammer.png) **Сделать:** таблицы из книги Уэлша ## Спецификации RGB -Цвета также можно указывать напрямую — в RGB формате вида: \#RGB, \#RRGGBB, -\#RRRGGGBBB, \#RRRRGGGGBBBB, где "R", "G" и "B" должны быть представлены -шестнадцатеричными цифрами (каждая из которых представляет 4 бита данных). -Таким образом можно указывать цвета, соответствующие глубине цвета 4, 8, 12 и -16 бит. - -Дополнительные подробности представлены -[здесь](http://www.tcl.tk/man/tcl8.4/TkLib/GetColor.htm#M5). +Цвета также можно указывать напрямую — в RGB формате вида: \#RGB, \#RRGGBB, \#RRRGGGBBB, \#RRRRGGGGBBBB, где "R", "G" и "B" должны быть представлены шестнадцатеричными цифрами (каждая из которых представляет 4 бита данных). Таким образом можно указывать цвета, соответствующие глубине цвета 4, 8, 12 и 16 бит. + +Дополнительные подробности представлены [здесь](http://www.tcl.tk/man/tcl8.4/TkLib/GetColor.htm#M5). # Практика -Есть два подхода к выбору цветов: готовые таблицы и утилиты, предоставляющие -возможность "подкрутить" нужный цвет. +Есть два подхода к выбору цветов: готовые таблицы и утилиты, предоставляющие возможность "подкрутить" нужный цвет. ## Таблицы -...ищутся в гугле по запросу "rgb.txt". К примеру, -[вот](http://web.njit.edu/~kevin/rgb.txt.html) и -[вот](http://sedition.com/perl/rgb.html). +...ищутся в гугле по запросу "rgb.txt". К примеру, [вот](http://web.njit.edu/~kevin/rgb.txt.html) и [вот](http://sedition.com/perl/rgb.html). ## Утилиты -В X Window System есть пара "родных" утилит для выбора цветов: попроще — -**xcolors** и посложнее/поудобнее — **xcolorsel**. - -В Windows "родных" утилит нет, но можно использовать внешние. - -Наиболее прямолинейный подход — использовать для подбора цветов Tk приложения, -написанные на Tcl/Tk же. Для работы таких утилит нужен рантайм Tcl/Tk (то есть -["полноценный" дистрибутив](http://www.activestate.com/tcl) или -[tclkit](http://www.equi4.com/tclkit.html)). - -Например, вот [отличная утилитка от Jeffry Hobbs'а](http://www.tcl.tk/community/hobbs/tcl/src/colordemo.tcl). -Она же доступна в виде -["тиклета"](http://www.tcl.tk/community/hobbs/tcl/tclet/color.html), если -соответствующий [плагин web-браузера](http://www.tcl.tk/software/plugin/) у вас -установлен. - -Другие "color picker'ы" можно нарыть на [вики тиклеров](http://wiki.tcl.tk), -например: [вот](http://wiki.tcl.tk/9271), -[вот](http://wiki.tcl.tk/14976) и [вот](http://wiki.tcl.tk/xcolors). +В X Window System есть пара "родных" утилит для выбора цветов: попроще — **xcolors** и посложнее/поудобнее — **xcolorsel**. + +В Windows "родных" утилит нет, но можно использовать внешние. + +Наиболее прямолинейный подход — использовать для подбора цветов Tk приложения, написанные на Tcl/Tk же. Для работы таких утилит нужен рантайм Tcl/Tk (то есть ["полноценный" дистрибутив](http://www.activestate.com/tcl) или [tclkit](http://www.equi4.com/tclkit.html)). + +Например, вот [отличная утилитка от Jeffry Hobbs'а](http://www.tcl.tk/community/hobbs/tcl/src/colordemo.tcl). Она же доступна в виде ["тиклета"](http://www.tcl.tk/community/hobbs/tcl/tclet/color.html), если соответствующий [плагин web-браузера](http://www.tcl.tk/software/plugin/) у вас установлен. + +Другие "color picker'ы" можно нарыть на [вики тиклеров](http://wiki.tcl.tk), например: [вот](http://wiki.tcl.tk/9271), [вот](http://wiki.tcl.tk/14976) и [вот](http://wiki.tcl.tk/xcolors). + + Index: wiki/ru/Патчи.md ================================================================== --- wiki/ru/Патчи.md +++ wiki/ru/Патчи.md @@ -1,45 +1,34 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Патчи/index.html) + # Патчи Материал из Tkabber Wiki -Здесь мы "замахнёмся" на исходные коды самой программы, а точнее — её -модулей :) - -* Короткие патчи в пару строк легко наложить самостоятельно, поискав в тексте - модуля нужные строчки, поэтому и оформлять статью следует соответственно: - просто указать, **что на что заменяется**. -* Патчи же покрупней имеет смысл выкладывать в виде файла различий - some\_file\_name.diff, который можно получить, запустив в консоли или xterm - команду diff. Соответственно, применять такой патч следует с помощью команды - patch: - 1. Сохранить или перекинуть уже скачанный файл патча patch.diff в каталог, - где находится "патчуемый" и перейти туда (скорее всего, для этого и - следующего действия вам потребуются права root). - 1. Выполнить команду **patch -p0 \< patch.diff**. - 1. Перезапустить Ткаббер и, если требуется, сходить в Настройки и подправить - опции. - 1. Создать патч можно командой **diff -u oldfile.tcl newfile.tcl > - patch.diff** - * Или же, если вы работаете над svn-версией файла, просто выполните **svn - diff file.tcl > patch.diff** - 1. Если вам посчастливилось работать в среде Windows, не отчаивайтесь: - скачайте и установите виндовые версии программ - [patch](http://gnuwin32.sourceforge.net/packages/patch.htm) и - [diff](http://gnuwin32.sourceforge.net/packages/diffutils.htm). +Здесь мы "замахнёмся" на исходные коды самой программы, а точнее — её модулей :) + +* Короткие патчи в пару строк легко наложить самостоятельно, поискав в тексте модуля нужные строчки, поэтому и оформлять статью следует соответственно: просто указать, **что на что заменяется**. +* Патчи же покрупней имеет смысл выкладывать в виде файла различий some\_file\_name.diff, который можно получить, запустив в консоли или xterm команду diff. Соответственно, применять такой патч следует с помощью команды patch: + +1. Сохранить или перекинуть уже скачанный файл патча patch.diff в каталог, где находится "патчуемый" и перейти туда (скорее всего, для этого и следующего действия вам потребуются права root). +1. Выполнить команду **patch -p0 \< patch.diff**. +1. Перезапустить Ткаббер и, если требуется, сходить в Настройки и подправить опции. +1. Создать патч можно командой **diff -u oldfile.tcl newfile.tcl > patch.diff** + * Или же, если вы работаете над svn-версией файла, просто выполните **svn diff file.tcl > patch.diff** + +1. Если вам посчастливилось работать в среде Windows, не отчаивайтесь: скачайте и установите виндовые версии программ [patch](http://gnuwin32.sourceforge.net/packages/patch.htm) и [diff.](http://gnuwin32.sourceforge.net/packages/diffutils.htm) ## Содержание * [1 Отправка сообщений по нажатию Ctrl-Enter](#Отправка_сообщений_по_нажатию_Ctrl-Enter) * [2 Ispell в Windows, правка](#Ispell_в_Windows_правка) * [3 Нумерация закладок](#Нумерация_закладок) * [4 Добавление аватары в окно чата (старый хак Badlop'а)](#Добавление_аватары_в_окно_чата_старый_хак_Badlopа) * [5 Расширенная поддержка аватар в окне чата](#Расширенная_поддержка_аватар_в_окне_чата) * [6 Показ времени "ухода в эвей" в статусе auto-away](#Показ_времени_ухода_в_эвей_в_статусе_auto-away) - * [6.1 Дополнительные настройки AutoAway](#Дополнительные_настройки_AutoAway) + * [6.1 Дополнительные настройки AutoAway](#Дополнительные_настройки_AutoAway) * [7 Транспортные иконки для гейта MRIM и его контактов](#Транспортные_иконки_для_гейта_MRIM_и_его_контактовs_s) * [8 Расширенное управление приоритетами для auto-away и auto-xa](#Расширенное_управление_приоритетами_для_auto-away_и_auto-xa) * [9 Поиск в Дискавери](#Поиск_в_Дискавериs_s) * [10 Подтверждение при закрытии табов](#Подтверждение_при_закрытии_табовs_s) * [11 Выборочное управление посылкой уведомлений о событиях чата](#Выборочное_управление_посылкой_уведомлений_о_событиях_чата) @@ -53,74 +42,53 @@ * [19 Отключение смены значка в трее при получени прочих сообщений в конференции](#Отключение_смены_значка_в_трее_при_получени_прочих_сообщений_в_конференции) * [20 Группы-исключения для показа в них сообщений сервера, когда соответствующая опция выключена](#Группы-исключения_для_показа_в_них_сообщений_сервера_когда_соответствующая_опция_выключена) * [21 Включение подсветки (highlight) всего сообщения при обращении к вам в конференции](#Включение_подсветки_highlight_всего_сообщения_при_обращении_к_вам_в_конференцииs_s) * [22 Кнопка очистки фильтра ростера](#Кнопка_очистки_фильтра_ростера) -## Отправка сообщений по нажатию Ctrl-Enter -> _Внимание!_ Существует решение, не требующее патча — - [**настройка в конфиг**](Нетривиальные_настройки.md#Отправка_сообщений_нажатием_Ctrl-Enter). - Поскольку она потенциально значительно надёжнее патча, рекомендуется - использовать её. - -Многие IM-программы отсылают сообщения по нажатию Ctrl-Enter, а сам Enter -используют для перевода строки, вместо или вместе с Shift-Enter. В Ткаббере -сообщения отсылаются по нажатию Enter, что и само по себе не очень удобно (если -вам хочется сделать в сообщении несколько абзацев, придётся нажать несколько -раз Shift-Enter и только один раз — Enter). А уж если вы пересаживаетесь на -Ткаббер с другой программы, то эта разница в простых вроде бы действиях и вовсе -может свести с ума. К счастью, проблема решается буквально за 5 минут. - -Откройте файл **chats.tcl**, что лежит в главной директории, в вашем любимом -текстовом редакторе и найдите строку: +# Отправка сообщений по нажатию Ctrl-Enter + _Внимание!_ Существует решение, не требующее патча — [настройка в конфиг](Нетривиальные_настройки.md#Отправка_сообщений_нажатием_Ctrl-Enter). Поскольку она потенциально значительно надёжнее патча, рекомендуется использовать её. + +Многие IM-программы отсылают сообщения по нажатию Ctrl-Enter, а сам Enter используют для перевода строки, вместо или вместе с Shift-Enter. В Ткаббере сообщения отсылаются по нажатию Enter, что и само по себе не очень удобно (если вам хочется сделать в сообщении несколько абзацев, придётся нажать несколько раз Shift-Enter и только один раз — Enter). А уж если вы пересаживаетесь на Ткаббер с другой программы, то эта разница в простых вроде бы действиях и вовсе может свести с ума. К счастью, проблема решается буквально за 5 минут. + +Откройте файл **chats.tcl**, что лежит в главной директории, в вашем любимом текстовом редакторе и найдите строку: bind $cw.input { } -Видите, сразу за ней идёт блок: +Видите, сразу за ней идёт блок: bind $cw.input [double% " chat::send_message [list $cw] [list $chatid] [list $type] break"] -Теперь вам нужно немного всё поменять :) Вместо этих двух биндов сделайте так: +Теперь вам нужно немного всё поменять :) Вместо этих двух биндов сделайте так: bind $cw.input { } - + bind $cw.input { } - + bind $cw.input [double% " - chat::send_message [list $cw] [list $chatid] [list $type] - break"] - -Фактически вы сделали просто перевод каретки (переход на следующую строку) как -по нажатию на Enter, так и по нажатию на Shift-Enter, а привычный для многих -Ctrl-Enter теперь будет отсылать сообщения. - -_P.S. Лучшая документация — это исходники._ - -была тут галерея, но глюк случился. - -Автор патча — [**lknight**](Участник_Lknight.md). - -## Ispell в Windows, правка -Сделав всё в соответствии с -[документацией](http://sgolovan.nes.ru/jabber/Tkabber-Windows-Mini-Howto.html) -от `xmpp:sgolovan@nes.ru` (teo), мы получаем в _$rootdir\\PLUGINS\\WINDOWS\\_ -файл ispell.tcl, который на Windows-системах даёт странные эффекты — первое -проверяемое слово вызывает ошибку, которую нужно пропустить, и только потом всё -будет тип-топ. Простейший вариант правки: в строке №15 руками прописать вместо -_/usr/bin/ispell_ абсолютный путь к ispell на вашей системе. Но! Этим вы не -только добавите себе работы при следующем апдейте с CVS (а её и так немало у -тех, кто активно балуется ковырянием), но и сделаете необходимым менять пути и -в опциях, и в коде. Есть вариант другой. - -Строки с 14 по 16 + chat::send_message [list $cw] [list $chatid] [list $type] + break"] + +Фактически вы сделали просто перевод каретки (переход на следующую строку) как по нажатию на Enter, так и по нажатию на Shift-Enter, а привычный для многих Ctrl-Enter теперь будет отсылать сообщения. + +_P.S. Лучшая документация — это исходники._ + +была тут галерея, но глюк случился. + +Автор патча — [Участник:lknight](Участник_Lknight.md). + +# Ispell в Windows, правка +Сделав всё в соответствии с [документацией](http://sgolovan.nes.ru/jabber/Tkabber-Windows-Mini-Howto.html) от `xmpp:sgolovan@nes.ru` (teo), мы получаем в _$rootdir\\PLUGINS\\WINDOWS\\_ файл ispell.tcl, который на Windows-системах даёт странные эффекты — первое проверяемое слово вызывает ошибку, которую нужно пропустить, и только потом всё будет тип-топ. Простейший вариант правки: в строке №15 руками прописать вместо _/usr/bin/ispell_ абсолютный путь к ispell на вашей системе. Но! Этим вы не только добавите себе работы при следующем апдейте с CVS (а её и так немало у тех, кто активно балуется ковырянием), но и сделаете необходимым менять пути и в опциях, и в коде. Есть вариант другой. + +Строки с 14 по 16 #set options(executable) /usr/bin/ispell custom::defvar options(executable) /usr/bin/ispell \ [::msgcat::mc "Path to the ispell executable."] -group Ispell -заменяем на следующий код: +заменяем на следующий код: # if {![info exists ::plugins::ispell::options(executable)] \ || [cequal $::plugins::ispell::options(executable) ""]} { custom::defvar options(executable) /usr/bin/ispell \ @@ -129,97 +97,88 @@ custom::defvar options(executable) $::plugins::ispell::options(executable) \ [::msgcat::mc "Path to the ispell executable."] -group Ispell } # -Всё работает как надо — берёт настройки из конфига и больше не ругается ;) - -Автор патча — [**lknight**](Участник_Lknight.md). - -## Нумерация закладок -> _Внимание!_ Сразу скажем, что [**eXire**](Участник_EXire.md) реализовал этот патч - в виде [**плагина**](Плагины.md#Tab_number). Однако для любителей ковыряться в - коде оставляем описание необходимых действий. - -Что хотелось получить? Возможно быстро (а не по одному) переключаться между -относительно большим количеством табов без использования мышки. - -Как это должно выглядеть? Вот пример: ![Tkabber -num1.jpg](../images/Tkabber_num1.jpg) +Всё работает как надо — берёт настройки из конфига и больше не ругается ;) + +Автор патча — [Участник:lknight](Участник_Lknight.md). + +# Нумерация закладок + _Внимание!_ Сразу скажем, что [eXire](Участник_EXire.md) реализовал этот патч в виде [плагина](Плагины.md#Tab_number). Однако для любителей ковыряться в коде оставляем описание необходимых действий. + +Что хотелось получить? Возможно быстро (а не по одному) переключаться между относительно большим количеством табов без использования мышки. + +Как это должно выглядеть? Вот пример: ![Tkabber num1.jpg](../images/Tkabber_num1.jpg) --- -Текущее (ужасное своей малой переносимостью, имхо) состояние системы. -Приводятся данные для версии ткаббера из цвс, за _"2005-10-12 Alexey Shchepin -`xmpp:alexey@sevcom.net`"._ Нам потребуется внести свои правки в 2 файла: +Текущее (ужасное своей малой переносимостью, имхо) состояние системы. Приводятся данные для версии ткаббера из цвс, за _"2005-10-12 Alexey Shchepin `xmpp:alexey@sevcom.net`"._ Нам потребуется внести свои правки в 2 файла: -* **\\chats.tcl**. +* **\\chats.tcl**. -Находим 555-ю строку, с хуком: +Находим 555-ю строку, с хуком: hook::run close_chat_post_hook $chatid -И вставляем после неё вызов функции +И вставляем после неё вызов функции ifacetk::lk_update_chat_titles -Всё, с этим файлом мы всё сделали. Теперь пора идти дальше. +Всё, с этим файлом мы всё сделали. Теперь пора идти дальше. -* **\\ifacetk\\iface.tcl** +* **\\ifacetk\\iface.tcl** -Открываем это файл и находим в самом начале объявление _namespace'_а. +Открываем это файл и находим в самом начале объявление _namespace'_а. namespace eval ifacetk { -Идём в самый его конец и дописываем туда нашу переменную: - - variable lk_index - -*К слову сказать, префикс lk\_ имеют практически все переменные и функции, -чтобы их было легко потом найти ;)* - -Далее находим ***proc ifacetk::on\_open\_chat\_window {chatid type} {*** И -делаем так, чтобы она и следующая дальше ***ifacetk::on\_close\_chat\_window*** -выглядели так: +Идём в самый его конец и дописываем туда нашу переменную: + + variable lk_index + +_К слову сказать, префикс lk\_ имеют практически все переменные и функции, чтобы их было легко потом найти ;)_ + +Далее находим _**proc ifacetk::on\_open\_chat\_window {chatid type} {**_ И делаем так, чтобы она и следующая дальше _**ifacetk::on\_close\_chat\_window**_ выглядели так: proc ifacetk::on_open_chat_window {chatid type} { variable number_msg variable personal_msg - variable lk_index - + variable lk_index + set number_msg($chatid) 0 set personal_msg($chatid) 0 set lk_index($chatid) 0 } proc ifacetk::on_close_chat_window {chatid} { variable number_msg variable personal_msg - variable lk_index - + variable lk_index + unset number_msg($chatid) unset personal_msg($chatid) unset lk_index($chatid) } -Далее ***proc ifacetk::update\_chat\_title {chatid} {*** Нужно привести в виду: +Далее _**proc ifacetk::update\_chat\_title {chatid} {**_ Нужно привести в виду: proc ifacetk::update_chat_title {chatid} { global usetabbar variable options variable number_msg variable personal_msg - variable lk_index - + variable lk_index + set cw $chat::opened($chatid) - + if {$usetabbar} { set tabtitle $chat::chats(tabtitlename,$chatid) if {$options(message_numbers_in_tabs) && ($number_msg($chatid) > 0)} { append tabtitle " ($number_msg($chatid))" } - set tabtitle [format [::msgcat::mc "\[%s\] %s" $lk_index($chatid) $tabtitle]] + set tabtitle [format [::msgcat::mc "\[%s\] %s" $lk_index($chatid) $tabtitle]] .nb itemconfigure [nbpage $cw] -text $tabtitle } else { if {$personal_msg($chatid)} { set star "*" } else { @@ -233,16 +192,16 @@ wm title $cw $title wm iconname $cw $title } } -И сразу после неё вставить: +И сразу после неё вставить: proc ifacetk::lk_update_chat_titles {} { global usetabbar - variable lk_index - + variable lk_index + if {!$usetabbar} return foreach tab [.nb pages] { if {[set path $tab] != ""} { set page [nbpage $path] if {[.nb index $page] < 0} { @@ -261,16 +220,15 @@ } } } } -И наконец, находим строку ***proc ifacetk::tab\_set\_updated {path {updated 0} {level ""}} {*** -Добавляем после 6-й строки этой функции (*variable personal\_msg*) +И наконец, находим строку _**proc ifacetk::tab\_set\_updated {path {updated 0} {level ""}} {**_ Добавляем после 6-й строки этой функции (_variable personal\_msg_) - variable lk_index + variable lk_index -Находим в этой же функции строку ***if {[info exists chat::chat\_id($path)]} {*** Приводим этот абзац к виду: +Находим в этой же функции строку _**if {[info exists chat::chat\_id($path)]} {**_ Приводим этот абзац к виду: set lk_var [expr [.nb index $page] + 1] if {[info exists chat::chat_id($path)]} { if {!$updated || ($lvlnum == 0)} { set chatid $chat::chat_id($path) @@ -280,315 +238,220 @@ update_chat_title $chatid update_main_window_title } } -Автор патча — [**lknight**](Участник_Lknight.md). - -## Добавление аватары в окно чата (старый хак Badlop'а) -Если ваш собеседник имеет подключённую аватару, вы можете видеть её не только -на соответствующей вкладке в персональной информации, но и в окошке чата в -правом нижнем углу — непосредственно во время разговора. Добиться этого, как -оказывается, очень просто. Откройте файл **C:\\Program -Files\\Tkabber\\tkabber\\chats.tcl** (**/usr/lib/tkabber/chats.tcl**), найдите -строку: +Автор патча — [Участник:lknight](Участник_Lknight.md). + +# Добавление аватары в окно чата (старый хак Badlop'а) +Если ваш собеседник имеет подключённую аватару, вы можете видеть её не только на соответствующей вкладке в персональной информации, но и в окошке чата в правом нижнем углу — непосредственно во время разговора. Добиться этого, как оказывается, очень просто. Откройте файл **C:\\Program Files\\Tkabber\\tkabber\\chats.tcl** (**/usr/lib/tkabber/chats.tcl**), найдите строку: pack $cw.isw -fill both -expand yes -side bottom -in $dow -закомментируйте её и вставьте следующие четыре строки (**для версий 0.9.8 - -0.11.0 (включительно)**): +закомментируйте её и вставьте следующие четыре строки (**для версий 0.9.8 - 0.11.0 (включительно)**): pack $cw.isw -expand yes -fill both -side left -in $dow set avatar_img [avatar::get_image $connid [get_jid_of_user $connid $jid]] label $cw.avatar -image $avatar_img pack $cw.avatar -side right -in $dow -для версий **больше 0.11.0**: +для версий **больше 0.11.0**: pack $cw.isw -expand yes -fill both -side left -in $dow set avatar_img [avatar::get_image $xlib [get_jid_of_user $xlib $jid]] label $cw.avatar -image $avatar_img pack $cw.avatar -side right -in $dow -Если вы используете **версию 0.9.7**, надо вставить другие четыре строчки, вот -эти: +Если вы используете **версию 0.9.7**, надо вставить другие четыре строчки, вот эти: pack $cw.isw -expand yes -fill both -side left -in $dow set avatar_img [avatar::get_image [get_jid_of_user $connid $jid]] label $cw.avatar -image $avatar_img pack $cw.avatar -side right -in $dow -Обратите внимание — вся разница между версиями во второй строке, точнее даже -буквально в одном слове. - -Чтобы не приходилось каждый раз лезть в код, когда захочется включить аватару -или выключить (через Настройки, к примеру, или по нажатию горячей клавиши), -можете [скачать](http://prikhodko.googlepages.com/tkabber) специально -заточенную под это дело версию Старпака от `xmpp:archimed@jabber.ru`. - -* В окно chat добавлен показ аватара собеседника (hack from badlop). -* По умолчанию эта возможность выключена (по настоянию kostix и teo). -* Включается через настройки в разделе Chat. - -Информация о хаке [взята](http://tkabber.redlibre.org/?q=node/2) с испанского -сайта, посвящённого Ткабберу — -[http://tkabber.redlibre.org](http://tkabber.redlibre.org) - -## Расширенная поддержка аватар в окне чата -Основные расширения: - -1. анимированные аватары; -1. прозрачность в аватарах; -1. масштабирование аватар к размеру видимой области. - -В [*этом файле*](../files/Aniavatars.zip) находятся изменённые файлы **chat.tcl** -и **anigif.tcl**. Замените ими соответствующие файлы в Ткаббере (не забудьте -сделать резервную копию). По умолчанию опция показа аватары в окне чата -выключена. Включить можно в настройках в разделе Chat. - -Также в архиве найдёте пример анимированного gif. Напоминаю, что Ткаббер -поддерживает только аватары в формате gif. - -Если вы подключите анимированную аватару в качестве своей, то Ткаббер без этого -патча покажет лишь первый кадр анимации. Но покажет! Так что, не бойтесь -экспериментировать. - -С благодарностью или негодованием обращаться к [**Archimed**](Участник_Archimed.md) -(`xmpp:archimed@jabber.ru`). - -## Показ времени "ухода в эвей" в статусе auto-away -> _Внимание!_ Патч уже не прикладывается без ошибок к версии 0.11.0. - Править его всем лень. - -Патч [**тут**](../files/Autoaway.diff). Как накладывать, читайте в самом начале -данной страницы (перед "Содержанием"). - -**На заметку:** после установки пропишите путь до каталога, в который вы -поставили **patch,** + **"\\bin"** в переменную окружения **PATH.** Например, -если ставили в +Обратите внимание — вся разница между версиями во второй строке, точнее даже буквально в одном слове. + +Чтобы не приходилось каждый раз лезть в код, когда захочется включить аватару или выключить (через Настройки, к примеру, или по нажатию горячей клавиши), можете [скачать](http://prikhodko.googlepages.com/tkabber) специально заточенную под это дело версию Старпака от `xmpp:archimed@jabber.ru`. + +* В окно chat добавлен показ аватара собеседника (hack from badlop). +* По умолчанию эта возможность выключена (по настоянию kostix и teo). +* Включается через настройки в разделе Chat. + +Информация о хаке [взята](http://tkabber.redlibre.org/?q=node/2) с испанского сайта, посвящённого Ткабберу — [http://tkabber.redlibre.org](http://tkabber.redlibre.org) + +# Расширенная поддержка аватар в окне чата +Основные расширения: + +1. анимированные аватары; +1. прозрачность в аватарах; +1. масштабирование аватар к размеру видимой области. + +В [этом файле](../files/Aniavatars.zip) находятся изменённые файлы **chat.tcl** и **anigif.tcl**. Замените ими соответствующие файлы в Ткаббере (не забудьте сделать резервную копию). По умолчанию опция показа аватары в окне чата выключена. Включить можно в настройках в разделе Chat. + +Также в архиве найдёте пример анимированного gif. Напоминаю, что Ткаббер поддерживает только аватары в формате gif. + +Если вы подключите анимированную аватару в качестве своей, то Ткаббер без этого патча покажет лишь первый кадр анимации. Но покажет! Так что, не бойтесь экспериментировать. + +С благодарностью или негодованием обращаться к [Archimed](Участник_Archimed.md) (`xmpp:archimed@jabber.ru`). + +# Показ времени "ухода в эвей" в статусе auto-away + _Внимание!_ Патч уже не прикладывается без ошибок к версии 0.11.0. Править его всем лень. + +Патч [тут](../files/Autoaway.diff). Как накладывать, читайте в самом начале данной страницы (перед "Содержанием"). + +**На заметку:** после установки пропишите путь до каталога, в который вы поставили **patch,** + **"\\bin"** в переменную окружения **PATH.** Например, если ставили в C:\Program Files\GnuWin32 -то путь должен быть +то путь должен быть C:\Program Files\GnuWin32\bin -Тогда можно будет запускать **patch** как написано выше — не указывая полный -путь до неё. +Тогда можно будет запускать **patch** как написано выше — не указывая полный путь до неё. -### Дополнительные настройки AutoAway +## Дополнительные настройки AutoAway ::plugins::autoaway::options(status) -Теперь специальный токен **%T** в этой строке раскрывается в значение времени, -которое было на момент начала ухода в эвей. +Теперь специальный токен **%T** в этой строке раскрывается в значение времени, которое было на момент начала ухода в эвей. ::plugins::autoaway::options(time_format) -Задаёт формат времени для "раскрытия" токена **%T**. +Задаёт формат времени для "раскрытия" токена **%T**. -Это — формат для команды тикля **[clock format].** За описанием — -[сюда](http://purl.org/tcl/home/man/tcl8.4/TclCmd/clock.htm). +Это — формат для команды тикля **[clock format].** За описанием — [сюда](http://purl.org/tcl/home/man/tcl8.4/TclCmd/clock.htm). -К примеру, "%H:%M:%S" (оно же "%T") раскрывается в нечто вроде "15:30:25". +К примеру, "%H:%M:%S" (оно же "%T") раскрывается в нечто вроде "15:30:25". ::plugins::autoaway::options(time_is_gmt) -Указывает, что время будет форматироваться в формате GMT (Greenwich Mean Time). -Если опция выключена (**false**), то время форматируется согласно локальной -временной зоне. - -Предложения и вопросы — к [**kostix**](Участник_Kostix.md). - -## Транспортные иконки для гейта MRIM и его контактов -> [**Kostix**](Участник_Kostix.md) 03:28, 11 сентября 2006 (MSD) Иконки гейта MRIM - — в транке начиная со вчерашнего дня, так что патч практически неактуален. - Кроме того, работа с транспортными иконками была сильно доработана — они - теперь выясняются не на основе имени хоста гейта, а на основе ответа на - запрос `disco#info` от него. Также исправлен баг с исчезающими транспортными - иконками в окне чата при смене статуса контакта. Короче, всем желающим - MRIM-иконок лучше заиметь себе последнюю версию из Subversion. - -Патч добавляет в _основной (он же "дефолтный", он же "по умолчанию")_ пакет -иконок "транспортные" иконки для гейта MRIM (Mail.RU Instant Messenger) и -контактов на нём. То есть вместо стандартных иконок "enlightened feather" -(лампочка с пером) будет майлрушное "калисо" (по меткому выражению **zenith**, -— автора MRIM-гейта). - -Поддерживаются и отображаются состояния "доступен", "отошёл" и "недоступен"; -состояния "не беспокоить" и "отошёл давно" не поддерживаются Mail.RU IM'ом и -отображаются гейтом на "отошёл", зато его состояние "invisible" не -поддерживается Джаббером и отображается гейтом на "недоступен". - -Выглядит так: ![Mrim.png](../images/Mrim.png) -![Mrim-away.png](../images/Mrim-away.png) - -Патч — [*тут*](../files/Tkabber-MRIM.zip). - -Прикладывать так. - -Во-первых, распаковать; в месте распаковки появится такая структура: +Указывает, что время будет форматироваться в формате GMT (Greenwich Mean Time). Если опция выключена (**false**), то время форматируется согласно локальной временной зоне. + +Предложения и вопросы — к [kostix](Участник_Kostix.md). + +# Транспортные иконки для гейта MRIM и его контактов + [Kostix](Участник_Kostix.md) 03:28, 11 сентября 2006 (MSD) Иконки гейта MRIM — в транке начиная со вчерашнего дня, так что патч практически неактуален. Кроме того, работа с транспортными иконками была сильно доработана — они теперь выясняются не на основе имени хоста гейта, а на основе ответа на запрос `disco#info` от него. Также исправлен баг с исчезающими транспортными иконками в окне чата при смене статуса контакта. Короче, всем желающим MRIM-иконок лучше заиметь себе последнюю версию из Subversion. + +Патч добавляет в _основной (он же "дефолтный", он же "по умолчанию")_ пакет иконок "транспортные" иконки для гейта MRIM (Mail.RU Instant Messenger) и контактов на нём. То есть вместо стандартных иконок "enlightened feather" (лампочка с пером) будет майлрушное "калисо" (по меткому выражению **zenith**, — автора MRIM-гейта). + +Поддерживаются и отображаются состояния "доступен", "отошёл" и "недоступен"; состояния "не беспокоить" и "отошёл давно" не поддерживаются Mail.RU IM'ом и отображаются гейтом на "отошёл", зато его состояние "invisible" не поддерживается Джаббером и отображается гейтом на "недоступен". + +Выглядит так: ![Mrim.png](../images/Mrim.png) ![Mrim-away.png](../images/Mrim-away.png) + +Патч — [тут](../files/Tkabber-MRIM.zip). + +Прикладывать так. + +Во-первых, распаковать; в месте распаковки появится такая структура: roster.diff pixmaps/ default/ icondef.diff services/ mrim_*.gif -Она соответствует расположению файлов в каталоге Ткаббера, поэтому дальнейшие действия такие: - -1. Скопировать все файлы **mrim\_\*.gif** из **pixmaps/default/services** в - такой же каталог Ткаббера. -1. Приложть патч **icondef.diff** на **pixmaps/default/icondef.xml** в каталоге - Ткаббера. -1. Приложить патч **roster.diff** на **roster.tcl** в каталоге Ткаббера. - -Можно также сначала просто скопировать все файлы из того места, куда вы их -распаковали, в каталог Ткаббера. Тогда иконки лягут в нужный каталог, а -diff-файлы лягут рядом с теми файлами, патчами на которые они являются. - -Процесс наложения патча описан в самом верху этой страницы (перед -"Содержанием"). - -Перезапустить Ткаббер, убедиться, что включены опции +Она соответствует расположению файлов в каталоге Ткаббера, поэтому дальнейшие действия такие: + +1. Скопировать все файлы **mrim\_\*.gif** из **pixmaps/default/services** в такой же каталог Ткаббера. +1. Приложть патч **icondef.diff** на **pixmaps/default/icondef.xml** в каталоге Ткаббера. +1. Приложить патч **roster.diff** на **roster.tcl** в каталоге Ткаббера. + +Можно также сначала просто скопировать все файлы из того места, куда вы их распаковали, в каталог Ткаббера. Тогда иконки лягут в нужный каталог, а diff-файлы лягут рядом с теми файлами, патчами на которые они являются. + +Процесс наложения патча описан в самом верху этой страницы (перед "Содержанием"). + +Перезапустить Ткаббер, убедиться, что включены опции ::ifacetk::roster::show_transport_icons -(для самого гейта) и +(для самого гейта) и ::ifacetk::roster::show_transport_user_icons -(для контактов на нём) по желанию. - -Предложения и вопросы — к [**kostix**](Участник_Kostix.md). - -## Расширенное управление приоритетами для auto-away и auto-xa -Данный [**патч**](../files/Autoaway-ext-prios.diff) наделяет плагин AutoAway -следующими возможностями: - -* Раздельное управление изменением приоритета ресурса для состояний auto-away - и auto-xa; -* Возможность вручную задать значение приоритета для каждого из этих - состояний. - -Патч предназначен для тестирования идеи об автоматическом изменении приоритетов -различных копий Ткаббера (к примеру, одна запущена на работе, другая — дома). -Суть идеи: сконфигурировать такую систему приоритетов, которая позволит -максимально "осмысленно" направлять сообщения на различные копии Ткабберов по -мере того, как хозяин последних перемещается между ними. Понятно? Мне тоже -непонятно... - -Подробно о зависимости поведении сервера от приоритетов нескольких подключений -к одному аккаунту читайте [здесь](http://www.xmpp.org/specs/rfc3921.html#rules) -(поищите по слову "priority"). - -Патчить нужно файл **plugins/general/autoaway.tcl**. Процесс наложения патча -описан в самом верху этой страницы (перед "Содержанием"). - -Предложения и вопросы — к [**kostix**](Участник_Kostix.md). - -**NB:** патч создан против версии 0.9.9-1.2 (CVS). - -**Примечание:** эти изменения приоритетов работают только при _автоматическом_ -изменении статуса (т.е. когда статус пользователя меняется плагином AutoAway); -при смене статуса вручную никакого изменения приоритета не происходит. - -## Поиск в Дискавери -Версия первая, наколенная. Патч не предназначен для использования, хотя и -работает. Это так, пусть пока полежит :) Смотреть -[**тут**](../files/Disco-search.diff). - -[**Kostix**](Участник_Kostix.md) 03:21, 11 сентября 2006 (MSD) — поиск в -дискавери уже месяц как в транке. так что этот патч уже совершенно неактуален -и будет удалён. - -[**Kostix**](Участник_Kostix.md) 21:09, 18 сентября 2006 (MSD) — с другой -стороны, этот патч содержит код для прозрачной привязки виртуальных событий к -топлевелам (в no-tabbed mode) или к единственному топлевелу + передача события -в активный фрейм ноутбука (в tabbed mode), который надо бы отодрать и -присовокупить к транку. - -## Подтверждение при закрытии табов -Патч: [**Confirm.patch**](../files/Confirm.patch) - -**Неактуально. Есть [плагин](Плагины.md#Confirm).** - -## Выборочное управление посылкой уведомлений о событиях чата -> _Внимание!_ Этот патч был сделан для борьбы с кривизной ICQ-гейта "JIT", - который посылал ошибку в ответ на события чата; и эта ошибка показывалась в - окне чата, как относящаяся к нему. Начиная с версии 0.10.0 Ткаббер содержит - код, который устаняет подобную проблему другим способом. - -[*Этот патч (+ плагин)*](../files/Chatstatectl.zip) позволяет -выключать/включать посылку уведомлений о событиях чата (chat state -notifications) для любого окна чата (т.е. для любого контакта, с которым открыт -сеанс чата). - -Управление настройкой — флаг "Enable chat state notifications" в меню окна -чата. - -Новая настройка "перекрывает" глобальную опцию -`::plugins::chatstate::options(enable)`. Значение локальной настройки -инициализируется значением глобальной опции при открытии окна чата. - -Цель данной функциональности — обход багов, возникающих при работе с некоторыми -"ненативными" IM-сетями через соответствующие гейты. В основном, проблемы -возникают с различными ICQ-клиентами (печально знаменитое сообщение `"400 -(Empty SMS messages are forbidden)"` в качестве реакции на любую активность в -окне чата и его закрытие). - -Архив содержит каталог с плагином, который требуется положить в -**~/.tkabber/plugins**, и патч **chatstate.tcl.diff**, который следует положить -в tkabber/plugins/chat и запустить - +(для контактов на нём) по желанию. + +Предложения и вопросы — к [Участник:kostix](Участник_Kostix.md). + +# Расширенное управление приоритетами для auto-away и auto-xa +Данный [патч](../files/Autoaway-ext-prios.diff) наделяет плагин AutoAway следующими возможностями: + +* Раздельное управление изменением приоритета ресурса для состояний auto-away и auto-xa; +* Возможность вручную задать значение приоритета для каждого из этих состояний. + +Патч предназначен для тестирования идеи об автоматическом изменении приоритетов различных копий Ткаббера (к примеру, одна запущена на работе, другая — дома). Суть идеи: сконфигурировать такую систему приоритетов, которая позволит максимально "осмысленно" направлять сообщения на различные копии Ткабберов по мере того, как хозяин последних перемещается между ними. Понятно? Мне тоже непонятно... + +Подробно о зависимости поведении сервера от приоритетов нескольких подключений к одному аккаунту читайте [здесь](http://www.xmpp.org/specs/rfc3921.html#rules) (поищите по слову "priority"). + +Патчить нужно файл **plugins/general/autoaway.tcl**. Процесс наложения патча описан в самом верху этой страницы (перед "Содержанием"). + +Предложения и вопросы — к [Участник:kostix](Участник_Kostix.md). + +**NB:** патч создан против версии 0.9.9-1.2 (CVS). + +**Примечание:** эти изменения приоритетов работают только при _автоматическом_ изменении статуса (т.е. когда статус пользователя меняется плагином AutoAway); при смене статуса вручную никакого изменения приоритета не происходит. + +# Поиск в Дискавери +Версия первая, наколенная. Патч не предназначен для использования, хотя и работает. Это так, пусть пока полежит :) Смотреть [тут](../files/Disco-search.diff). + +[Kostix](Участник_Kostix.md) 03:21, 11 сентября 2006 (MSD) — поиск в дискавери уже месяц как в транке. так что этот патч уже совершенно неактуален и будет удалён. + +[Kostix](Участник_Kostix.md) 21:09, 18 сентября 2006 (MSD) — с другой стороны, этот патч содержит код для прозрачной привязки виртуальных событий к топлевелам (в no-tabbed mode) или к единственному топлевелу + передача события в активный фрейм ноутбука (в tabbed mode), который надо бы отодрать и присовокупить к транку. + +# Подтверждение при закрытии табов +Патч: [Media:confirm.patch](../files/Confirm.patch) + +**Неактуально. Есть [плагин](Плагины.md#Confirm).** + +# Выборочное управление посылкой уведомлений о событиях чата + _Внимание!_ Этот патч был сделан для борьбы с кривизной ICQ-гейта "JIT", который посылал ошибку в ответ на события чата; и эта ошибка показывалась в окне чата, как относящаяся к нему. Начиная с версии 0.10.0 Ткаббер содержит код, который устаняет подобную проблему другим способом. + +[Этот патч (+ плагин)](../files/Chatstatectl.zip) позволяет выключать/включать посылку уведомлений о событиях чата (chat state notifications) для любого окна чата (т.е. для любого контакта, с которым открыт сеанс чата). + +Управление настройкой — флаг "Enable chat state notifications" в меню окна чата. + +Новая настройка "перекрывает" глобальную опцию `::plugins::chatstate::options(enable)`. Значение локальной настройки инициализируется значением глобальной опции при открытии окна чата. + +Цель данной функциональности — обход багов, возникающих при работе с некоторыми "ненативными" IM-сетями через соответствующие гейты. В основном, проблемы возникают с различными ICQ-клиентами (печально знаменитое сообщение `"400 (Empty SMS messages are forbidden)"` в качестве реакции на любую активность в окне чата и его закрытие). +**~/.tkabber/plugins****chatstate.tcl.diff**` patch Поддержка ссылок в окне истории -Данный [**патч**](../files/Logger.patch) добавляет поддержку ссылок (которая -присутствует в окне чата) в окно истории. С вопросами и пожеланиями к -[**eXire**](Участник_EXire.md). - -## Выбор между старым и новым видом окна userinfo -Справедливо для svn-версии. - -[**Патч**](../files/Userinfo.patch). Настройки в **Customize → Main Interface**. - -## Звуки в играх -[*Патчи*](../files/Sound_patches.tar.gz) к играм. Так же нужно накатить -патч, который тоже находится в этом архиве, на файл -plugins/general/sound.tcl. - -В транке с 27.09.06. - -## Улучшенная поддержка XHTML -Данный патч предназначен для улучшения отображения XHTML сообщений. -Протестирован с Gaim (Pidgin) и Adium и (частично) XEP-0071. Накладывать -заплатку нужно на файл tkabber/plugins/chat/draw\_xhtml\_message.tcl - +Он отключает нотификации для любого джида, содержащего подстроку "@icq.", то есть, к примеру `666777@icq.jabber.ru` и так далее. + +# Поддержка ссылок в окне истории +Данный [патч](../files/Logger.patch) добавляет поддержку ссылок (которая присутствует в окне чата) в окно истории. С вопросами и пожеланиями к [eXire](Участник_EXire.md). + +# Выбор между старым и новым видом окна userinfo +Справедливо для svn-версии. + +[Патч](../files/Userinfo.patch). Настройки в **Customize → Main Interface**. + +# Звуки в играх +[Патчи](../files/Sound_patches.tar.gz) к играм. Так же нужно накатить патч, который тоже находится в этом архиве, на файл plugins/general/sound.tcl. + +В транке с 27.09.06. + +# Улучшенная поддержка XHTML +Данный патч предназначен для улучшения отображения XHTML сообщений. Протестирован с Gaim (Pidgin) и Adium и (частично) XEP-0071. Накладывать заплатку нужно на файл tkabber/plugins/chat/draw\_xhtml\_message.tcl +` + --- draw_xhtml_message.orig.tcl 2007-05-25 13:05:18.000000000 +0400 +++ draw_xhtml_message.tcl 2007-06-05 12:31:32.000000000 +0400 @@ -336,6 +336,32 @@ color { set state(color) $val @@ -620,107 +483,84 @@ + incr state(lmargin2) 32 + } } } } - -## Публикация проигрываемой мелодии при помощи запуска Ткаббера с ключом -pep -Реализация того, что описано в -[**ТЗ по управлению через параметры командной строки**](ТЗ_по_управлению_через_параметры_командной_строки.md#Зачем_это_нужно). - -Патч позволяет публиковать информацию о мелодии (pep:tune) при помощи вызова из -командной строки (shell-скрипта, батника; также есть встроенная возможность -медиаплееров запускать скрипт при смене трека). - -**Cинтаксис:** + +` +# Публикация проигрываемой мелодии при помощи запуска Ткаббера с ключом -pep +Реализация того, что описано в [ТЗ по управлению через параметры командной строки](ТЗ_по_управлению_через_параметры_командной_строки.md#Зачем_это_нужно). + +Патч позволяет публиковать информацию о мелодии (pep:tune) при помощи вызова из командной строки (shell-скрипта, батника; также есть встроенная возможность медиаплееров запускать скрипт при смене трека). + +**Cинтаксис:** tkabber -pep "tune:artist=Исполнитель,title=Название,track=номер_песни, length=продолжительность,source=источник,uri=ссылка,rating=оценка" -_В примере сделан перенос строки, потому что она получилась слишком длинной._ -При запуске весь текст должен идти подряд, без пробелов после запятых. Кавычки -нужны на случай, если в названии песни или исполнителя будет пробел. Любое из -полей (artist, title, ...) может быть опущено. Порядок указания полей роли не -играет. - -[А вот и сам патч](http://nicktian.narod.ru/pepswitch.diff). - -Патч накладывается командой +_В примере сделан перенос строки, потому что она получилась слишком длинной._ При запуске весь текст должен идти подряд, без пробелов после запятых. Кавычки нужны на случай, если в названии песни или исполнителя будет пробел. Любое из полей (artist, title, ...) может быть опущено. Порядок указания полей роли не играет. + +[А вот и сам патч](http://nicktian.narod.ru/pepswitch.diff). + +Патч накладывается командой $patch -p0 Отображение доступных контактов сверху списка -Реализация возможности, описанной [**тут**](Планы_на_будущее.md#sКонтакты_онлайн_-_отображать_вверху_списка_s). - -Сам патч: [*iroster.zip*](../files/Iroster.zip) - -[*Jet*](Участник_Jet.md) - -## Звук на установленные к наблюдению в Шпионе jid'ы -В архиве сам патч и звуковой файл, который проигрывается при появлении -указанного в шпионе jid. В настройках плагина будет соответствующее поле для -замены/удаления звукового оповещения. - -* Патч 1: [*Spy.zip*](../files/Spy.zip) Звук работает глобально, т.е. - срабатывает на все установленные к наблюдению jid'ы. - -* Патч 2: [*Spy2.zip*](../files/Spy-rev.1925.zip) Звук можно включать в окне - самого Spy опционально на каждый отдельный jid, установленный к наблюдению (в - окне Spy будет чекбокс. Спасибо archimed'у за помощь в доводке до ума). - -[**Brennender**](Участник_Brennende.md) - -## Отключение смены значка в трее при получени прочих сообщений в конференции -Патч добавляет чекбокс в Main Interface → Systray, снятие флажка с которого -отключит уведомления в трее об обычных, не подсвеченных сообщениях в -конференции. - -Файл: [*Systray.zip*](../files/Systray.zip) - -[**Brennender**](Участник_Brennende.md) - -## Группы-исключения для показа в них сообщений сервера, когда соответствующая опция выключена -Когда вам надоедает лицезреть в комнатах, кто зашёл, кто вышел, кто сменил ник -и прочее, вы выключаете опцию `options(gen_enter_exit_msgs)` в Настройках → -Chat. Но бывает так, что вам хотелось бы мониторить пару конференций, если там -требуется усиленное модерирование. Этот патч как раз после вышеупомянутой опции -добавляет поле, куда можно вписать необходимые конференции, разделяя их -пробелом. Теперь, отключив генерацию сообщений сервера, вы будете продолжать -видеть всю необходимую для модератора информацию в нужных вам комнатах. - -Файл [*Muc\_exception\_groups4gen\_enter\_exit\_msgs.zip*](../files/Muc_exception_groups4gen_enter_exit_msgs.zip) - -[**ycbl**](Участник_Bigote.md) - -## Включение подсветки (highlight) всего сообщения при обращении к вам в конференции -**ВНИМАНИЕ: Патч содержит недоработки. К тому же уже есть реализация в виде -[плагина](Плагины.md#Highlightex).** - -В настройках: **Plugins → Rich Text** будет соответствующая опция для -включения. Патч накатывать по адресу _~tkabber/plugins/richtext_. За цвет -хайлайта отвечает опция, которую можно добавить в ваш .\*xrdb-файл в виде -hex-хначения +из корневой папки исходных текстов Ткаббера. + +--[Nicktian](Участник_Nicktian.md) 17:10, 3 марта 2009 (MSK) + +# Отображение доступных контактов сверху списка +Реализация возможности, описанной [тут](Планы_на_будущее.md#Контакты_онлайн_-_отображать_вверху_списка). + +Сам патч: [iroster.zip](../files/Iroster.zip) + +[Jet](Участник_Jet.md) + +# Звук на установленные к наблюдению в Шпионе jid'ы +В архиве сам патч и звуковой файл, который проигрывается при появлении указанного в шпионе jid. В настройках плагина будет соответствующее поле для замены/удаления звукового оповещения. + +* Патч 1: [Spy.zip](../files/Spy.zip) Звук работает глобально, т.е. срабатывает на все установленные к наблюдению jid'ы. + +* Патч 2: [Spy2.zip](../files/Spy(rev.1925).zip) Звук можно включать в окне самого Spy опционально на каждый отдельный jid, установленный к наблюдению (в окне Spy будет чекбокс. Спасибо archimed'у за помощь в доводке до ума). + +[Brennender](Участник_Brennende.md) + +# Отключение смены значка в трее при получени прочих сообщений в конференции +Патч добавляет чекбокс в Main Interface → Systray, снятие флажка с которого отключит уведомления в трее об обычных, не подсвеченных сообщениях в конференции. + +Файл: [Systray.zip](../files/Systray.zip) + +[Brennender](Участник_Brennende.md) + +# Группы-исключения для показа в них сообщений сервера, когда соответствующая опция выключена +Когда вам надоедает лицезреть в комнатах, кто зашёл, кто вышел, кто сменил ник и прочее, вы выключаете опцию `options(gen_enter_exit_msgs)` в Настройках → Chat. Но бывает так, что вам хотелось бы мониторить пару конференций, если там требуется усиленное модерирование. Этот патч как раз после вышеупомянутой опции добавляет поле, куда можно вписать необходимые конференции, разделяя их пробелом. Теперь, отключив генерацию сообщений сервера, вы будете продолжать видеть всю необходимую для модератора информацию в нужных вам комнатах. + +Файл [Muc\_exception\_groups4gen\_enter\_exit\_msgs.zip](../files/Muc_exception_groups4gen_enter_exit_msgs.zip) + +[ycbl](Участник_Bigote.md) + +# Включение подсветки (highlight) всего сообщения при обращении к вам в конференции +**ВНИМАНИЕ: Патч содержит недоработки. К тому же уже есть реализация в виде [плагина](Плагины.md#Highlightex).** + +В настройках: **Plugins → Rich Text** будет соответствующая опция для включения. Патч накатывать по адресу _~tkabber/plugins/richtext_. За цвет хайлайта отвечает опция, которую можно добавить в ваш .\*xrdb-файл в виде hex-хначения *Chat.highlightforeground: #ff0000 -либо: +либо: *Chat.highlightforeground: red -Или же добавлением в config.tcl такой строчки: +Или же добавлением в config.tcl такой строчки: option add *Chat.highlightforeground: #ff0000 -* Файл [*Highlight.zip*](../files/Highlight.zip) - -Автор [*ancestor*](Участник_Ancestor.md) - -## Кнопка очистки фильтра ростера -[Патч](http://justdanpo.cheb.ru/temp/tkabber_clearfilter_button.diff) добавляет -кнопку, при нажатии на которую фильтр ростера очищается, примерно как в фильтре -Skype. - -[*den\_po*](Участник_Den_po.md) +* Файл [Highlight.zip](../files/Highlight.zip) + +Автор [ancestor](Участник_Ancestor.md) + +# Кнопка очистки фильтра ростера +[Патч](http://justdanpo.cheb.ru/temp/tkabber_clearfilter_button.diff) добавляет кнопку, при нажатии на которую фильтр ростера очищается, примерно как в фильтре Skype. + +[den\_po](Участник_Den_po.md) + + Index: wiki/ru/Пересылка_файлов__теория.md ================================================================== --- wiki/ru/Пересылка_файлов__теория.md +++ wiki/ru/Пересылка_файлов__теория.md @@ -1,793 +1,480 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Пересылка_файлов:_теория/index.html) + # Пересылка файлов: теория Материал из Tkabber Wiki ## Содержание * [1 Введение](#Введение) -* [2 Как соединены Вася@сервер1 и Петя@сервер2](#Как_соединены_Васясервер1_и_Петясервер2) +* [2 Как соединены Вася@сервер1 и Петя@сервер2](#Как_соединены_Вася@сервер1_и_Петя@сервер2) * [3 Обмен сообщениями + передача файлов = мезальянс?](#Обмен_сообщениями_+_передача_файлов_=_мезальянс) * [4 Вася и Петя хотят передать файл](#Вася_и_Петя_хотят_передать_файл) - * [4.1 Внутри и снаружи](#Внутри_и_снаружи) + * [4.1 Внутри и снаружи](#Внутри_и_снаружи) * [5 Ху из ху?](#Ху_из_ху) - * [5.1 Jidlink](#Jidlink) - * [5.2 SI](#SI) - * [5.3 HTTP (OOB)](#HTTP_OOB) + * [5.1 Jidlink](#Jidlink) + * [5.2 SI](#SI) + * [5.3 HTTP (OOB)](#HTTP_OOB) * [6 Две ступени к прекрасному](#Две_ступени_к_прекрасному) * [7 Идеальная сеть и жестокая реальность](#Идеальная_сеть_и_жестокая_реальность) * [8 И снова "внутри и снаружи": что выбрать?](#И_снова_внутри_и_снаружи_что_выбрать) * [9 Спортивное ориентирование на местности доступных протоколов](#Спортивное_ориентирование_на_местности_доступных_протоколов) - * [9.1 Jidlink](#Jidlink) - * [9.1.1 Опции конфигурирования](#Опции_конфигурирования) - * [9.1.2 Руководство по настройке](#Руководство_по_настройке) - * [9.2 SI](#SI) - * [9.2.1 Опции конфигурации](#Опции_конфигурации) - * [9.2.2 Руководство по настройке](#Руководство_по_настройке) - * [9.3 HTTP](#HTTP) - * [9.3.1 Опции конфигурирования](#Опции_конфигурирования) - * [9.3.2 Замечания по настройке](#Замечания_по_настройке) - * [9.3.3 Настройка портфорвардинга для HTTP (OOB)](#Настройка_портфорвардинга_для_HTTP_OOB) + * [9.1 Jidlink](#Jidlink) + * [9.1.1 Опции конфигурирования](#Опции_конфигурирования) + * [9.1.2 Руководство по настройке](#Руководство_по_настройке) + * [9.2 SI](#SI) + * [9.2.1 Опции конфигурации](#Опции_конфигурации) + * [9.2.2 Руководство по настройке](#Руководство_по_настройке) + * [9.3 HTTP](#HTTP) + * [9.3.1 Опции конфигурирования](#Опции_конфигурирования) + * [9.3.2 Замечания по настройке](#Замечания_по_настройке) + * [9.3.3 Настройка портфорвардинга для HTTP (OOB)](#Настройка_портфорвардинга_для_HTTP_OOB) * [10 Тонкие различия протоколов](#Тонкие_различия_протоколов) - * [10.1 Протоколы внутриканальной передачи данных](#Протоколы_внутриканальной_передачи_данных) - * [10.1.1 Варианты реализации](#Варианты_реализации) - * [10.1.2 Проблемы SI/IBB](#Проблемы_SI_IBB) - * [10.1.3 Почему полезен IQ](#Почему_полезен_IQ) - * [10.1.4 Доступные транспорты на основе IQ-запросов](#Доступные_транспорты_на_основе_IQ-запросов) -* [11 Это всё хорошо, но что выбрать для *моего* соединения?](#Это_всё_хорошо_но_что_выбрать_для_моего_соединения) + * [10.1 Протоколы внутриканальной передачи данных](#Протоколы_внутриканальной_передачи_данных) + * [10.1.1 Варианты реализации](#Варианты_реализации) + * [10.1.2 Проблемы SI/IBB](#Проблемы_SI_IBB) + * [10.1.3 Почему полезен IQ](#Почему_полезен_IQ) + * [10.1.4 Доступные транспорты на основе IQ-запросов](#Доступные_транспорты_на_основе_IQ-запросов) +* [11 Это всё хорошо, но что выбрать для моего соединения?__](#Это_всё_хорошо_но_что_выбрать_для_моего_соединения__) * [12 Благодарности](#Благодарности) * [13 Скучные сугубо технические ссылки](#Скучные_сугубо_технические_ссылки) -## Введение -Если вы туманно представляете себе этот вопрос или думаете, что два файла -переслать — это как два пальца об асфальт, то перед тем как продолжить чтение, -рекомендуем посетить [эту страничку](http://jabberworld.info/Передача_файлов) -на jabberworld.info. Там вы получите необходимый минимум знаний, который -поможет быстрее разобраться в премудростях файлопересылания. - -Проблемы с пересылкой файлов проистекают из незнания матчасти. Вопрос о том, -должен ли "рядовой пользователь" знать матчасть — сложный, и даже философский. -Подход Ткаббера, написанного продвинутыми пользователями для продвинутых -пользователей, предполагает, что должен. - -Совсем нетерпеливые могут прыгнуть -[**прямо к описанию настроек**](#Спортивное_ориентирование_на_местности_доступных_протоколов). - -Вы ещё здесь? Отлично! Тогда приступим. И начнём с простого. - -## Как соединены Вася@сервер1 и Петя@сервер2 -* Джаббер-клиент Васи устанавливает соединение с сервером **сервер1**. -* Джаббер-клиент Пети — с сервером **сервер2**. -* **сервер1** и **сервер2** устанавливают соединение между собой. - -Теперь, когда Вася шлёт сообщение Пете, происходит следующее: - -* васин клиент шлёт это сообщение своему серверу (**сервер1**). -* васин сервер посылает его петиному серверу (**сервер2**). -* петин сервер пересылает его петиному клиенту. -* Петя видит сообщение и радуется. - -Заметьте, что хотя между Васей и Петей есть _логическое_ соединение, реально -каждый из них соединён только со своим сервером. Это — типичная ошибка -начинающих пользователей: считать, что сообщение, посланное "на соседний -компьютер", посылается прямо на этот соседний компьютер. (К примеру, в случае -общения "через аську" в русском офисе сообщения на самом деле ходят через -сервер, находящийся в Америке.) - -Соединение между васиным и петиным джаббер-клиентами мы будем называть -_каналом._ - -## Обмен сообщениями + передача файлов = мезальянс? -Во-первых, надо отметить, что "Jabber" — это "разговорное название" -[протокола XMPP](http://www.xmpp.org), и эта аббревиатура образована от термина -_Extensible Messaging and Presence Protocol,_ означающего: _Расширяемый -Протокол для обмена **Сообщениями** и информацией о Присутствии._ Обратите -внимание на слово "сообщениями" — никакого упоминания о пересылке файлов. - -Понять это легко: джаббер оптимизирован для пересылки _коротких текстовых_ -сообщений. В эту канву вписываются: обычные сообщения, "чат" и "групповой чат" -(комнаты), адмминистративные сообщения, рассылаемые разным группам -пользователей в пределах одного сервера, а так же различные более "хитрые" -сервисы, вроде агрегации RSS-каналов. - -**На заметку:** любопытный читатель может получить представление о том, что -летает по джаббер-сети, активизировав стандартный плагин "RAW XML Input" и -открыв "Окно XML" из меню "Службы->Инструменты администратора". - -Передача файлов в эту концепцию _не_ вписывается. - -Однако, она иногда требуется. - -Джаббер отвечает на эту потребность тремя расширениями стандарта, определяющими -различные _"транспорты",_ то есть протоколы доставки информации: - -* Jidlink. -* [Out of Band Data (OOB)](http://www.jabber.org/jeps/jep-0066.html) (по - причинам, объяснённым ниже, в Ткаббере называется "HTTP"). -* [Передача файлов](http://www.jabber.org/jeps/jep-0096.html), основанная на - протоколе [SI](http://www.jabber.org/jeps/jep-0095.html). - -Независимо от протокола, поток байтов, который передаётся транспортом, -именуется _"bytestream",_ то есть... правильно — "поток байтов". - -## Вася и Петя хотят передать файл -Как мы помним, соедниение между **Вася@сервер1** и **Петя@сервер2** — чисто -логическое, то есть _нет прямого соединения_ между васиным и петиным -компьютерами. - -Протоколы джаббера предоставляют Васе две _принципиально различные_ возможности -для того чтобы передать файл Пете: - -* васин джаббер-клиент может установить _прямое соединение_ с петиным клиентом - и передать файл, на время создав таким образом _физический канал_ между - васиным и петиным компьютерами. -* васин джаббер-клиент может послать файл внутри существующего _логического - канала_ между ним и петиным джаббер-клиентом. - -В первом случае информация передаётся непосредственно с компьютера на -компьютер, а значит, это делается быстро, экономично и удобно. - -Во втором случае передача производится способом, похожим на посылку обычных -текстовых сообщений. Представить себе это проще всего так: файл, -предназначенный для пересылки, разбивается на небольшие куски, и каждый кусок -пересылается как если бы это было текстовое сообщение. (Технически это не во -всех случаях верно, но общая идея должна быть понятна.) - -Рассмотрим это чуть подробнее, а заодно введём пару "официальных" терминов. - -### Внутри и снаружи - -С точки зрения пользователя джаббер-клиента самым серьёзным вопросом является -то, _как_ передаются данные файла. Как уже объяснялось выше, есть всего два -способа это сделать: передать данные "внутри" имеющегося соединения и -"снаружи". - -Отсюда — два термина: - -* _In-band, IB ("в канале")_ — данные файла передаются внутри логического - соединения между клиентами, то есть _опосредованно_ (в передаче участвуют не - только клиенты, но и вся цепочка Джаббер-серверов между ними). -* _Out-of-band, OOB ("вне канала")_ — данные файла передаются _непосредственно_ - между клиентами (или через прокси-сервер). Джаббер-серверы клиентов в - передаче не участвуют. - -Термин "bytestream" не забывают и здесь, различая, соответственно - -* In-band bytestreams (IBB) — внутриканальные потоки байтов. -* Out-of-band bytestreams (OOB) — внеканальные потоки байтов. - -**На заметку:** сторого говоря, термин "band" здесь следует переводить -телекоммуникационным эквивалентом — "полоса", а приведённые термины означают -"внутриполосную" и "внеполосную" передачу данных, соответственно. Но мы -предпочтём простоту изложения академичности. - -Ну, а теперь настало время представить виновников данной писанины поподробнее. - -## Ху из ху? -### Jidlink - -* Поддерживает как in-band, так и out-of-band передачу. -* Никогда не являлся стандартным расширением Джаббера, и поэтому не является - официальным. -* Из широко известных джаббер-клиентов, реализован только в Ткаббере. -* Для передачи данных в канале использует iq-паекты (IQ — это - [подсистема Info/Query Джаббера](http://www.xmpp.org/specs/rfc3920.html#stanzas-semantics)). -* Для передачи данных вне канала использует протокол - [Direct TCP (DTCP)](http://www.xmpp.org/extensions/xep-0046.html). - -### SI - -* Поддерживает как in-band, так и out-of-band передачу. -* Является стандартным расширением Джаббера (и самым новым транспортом для - передачи файлов). -* Для передачи в канале может использовать: - * текстовые сообщения — стандартный режим внутриканальной передачи (мы будем - именовать этот режим аббревиатурой **SI/IBB**); - * IQ-запросы — (пока ещё) нестандартный режим, реализованный в текущей - альфа-версии Ткаббера, имеющий серьёзные преимущества перед стандартным - (**SI/IQIBB**). -* Для передачи вне канала использует - [потоки байтов SOCKS5](http://www.xmpp.org/extensions/xep-0065.html). -* Поддерживает опосредованные ("mediated") внеканальные соединения через - специальные SOCKS5-прокси серверы (реализовано в текущей альфа-версии). - -Термин _SI (Stream Initiation)_ является весьма обобщённым и означает "создание -потока". Имеется в виду организация дополнительного потока байтов по инициативе -одного из клиентов. Нас в данном случае интересует создание потока для передачи -файла. - -Теория относительно SOCKS5 дана [**тут**](Терминология.md#SOCKS5). - -### HTTP (OOB) - -* Является стандартным (и самым старым) способом передачи файлов. -* Поддерживает только передачу вне канала. -* Использует [протокол HTTP](http://ru.wikipedia.org/wiki/HTTP) для передачи - данных; при этом инициатор во время передачи файла является HTTP-сервером, - а получатель — клиентом. - -## Две ступени к прекрасному -Передача файла при помощи любого протокола состоит из двух последовательных -фаз: - -1. _"Рукопожатие",_ в ходе которого стороны договариваются о том, каким именно - образом будет использован протокол. На этом этапе инициатор так же сообщает - некоторую информацию о файле, а принимающая сторона должна подтвердить или - отклонить запрос на передачу. -1. Собственно передача файла. - -Рукопожатие интересует нас сильнее всего, так как именно оно определяет какой -из способов передачи информации будет выбран протоколом. - -**Внимание!** Этот выбор _осуществляется автоматически,_ так что то, как именно -он будет осуществлён, зависит от настроек Ткаббера. - -**Важно понимать,** что каждый протокол передачи файлов _предпочитает **прямые -(вне канала)** соединения_ внутриканальным. - -Постигнув теорию, спустимся с небес на землю и узнаем что же создаёт проблемы -на пути лёгкой передачи файлов. - -## Идеальная сеть и жестокая реальность -В идеальной TCP/IP сети нет вирусов, кракеров, спама, идиотов, фанатиков, -трафик бесплатен, и каждый компьютер имеет публичный IP-адрес. - -Во вполне реальном [Интернет](http://ru.wikipedia.org/wiki/Интернет) это всё -есть, и поэтому: - -* Компьютеры, "смотрящие" в Интернет непосредственно, обычно защищены - ["межсетевыми экранами"](http://ru.wikipedia.org/wiki/Межсетевой_экран) — программами, - которые не позволяют подключиться к компьютеру "снаружи". -* Компьютеры, подключённые к Интернет опосредованно, как правило, делают это - через нечто, осуществляющее - [преобразование сетевых адресов](http://ru.wikipedia.org/wiki/NAT), что так же - убивает возможность соединиться с такими компьютерами "снаружи". - -Некоторые люди также полагают, что иногда эту неприглядную ситуацию ещё сильнее -ухудшают странные люди, именуемые "системными администраторами": они всеми -доступными средствами изничтожают любую возможность "вылезти в свет" для -скучающих офисных работников. - -Конкретные ситуации с соединениями на различных компьютерах могут сильно -отличаться. Например, компьютер может совершать любые исходящие соединения, но -не может принимать входящие. Или даже исходящие он может совершать только через -[прокси-сервер](http://ru.wikipedia.org/wiki/Прокси-сервер). Бывают и более -сложные условия. - -В любом случае, идея очевидна: _в Интернете_ протоколам, подразумевающим -произвольные _прямые_ соединения между компьютерами живётся несладко. Интернет -это ярко выраженный образчик клиент-серверной архитектуры: только серверы, -предоставляющие специфические услуги (вроде HTTP, почты или Jabber), способны -принимать соединения от своих клиентов. - -С другой стороны, в [локальных сетях](http://ru.wikipedia.org/wiki/LAN) -ситуация зачастую совсем другая. В них, как правило, все компьютеры считаются -добропорядочными и разрешают произвольные соединения друг с другом. - -**Главный вывод** из этого таков: _в Интернет,_ как правило, прямая передача -информации между двумя "простыми" компьютерами невозможна. А это значит, что в -таких условиях, возможно, придётся использовать способность некоторых -протоколов передачи файлов посылать информацию внутри логического канала. - -## И снова "внутри и снаружи": что выбрать? -Ответьте для себя на два вопроса: - -1. Может ли мой компьютер установить произвольное TCP/IP-соединение с - удалённым компьютера? (_"активный"_ способ установить соединение) -1. Может ли удалённый компьютер установить произвольное соединение с - моим компьютером? (_"пассивный"_ способ) - -Комбинация ответов "да" или "нет" на каждый из этих вопросов даст вам в руки -руководство к действию: - -* Если ваш компьютер _может установить_ произвольное TCP/IP-соединение, - то вы можете _разрешить_ протоколам передачи файлов устанавливать _исходящие - прямые_ соединения. -* Если ваш компьютер _принимает_ прямые подключения (например, он находится - в локальной сети), то вы можете _разрешить_ протоколам передачи файлов - принимать _входящие прямые_ соединения. -* Если "нет" является ответом на оба вопроса, запрещайте оба типа прямых - соединений: in-band bytestreams — ваша единственная возможность пересылать - файлы. - -**Внимание!** Необходимо чётко понимать две вещи: - -1. _Все_ протоколы передачи файлов в джаббере _предпочитают прямую пересылку_ - внутриканальной как наиболее быструю и создающую минимальную нагрузку на - серверы. -1. Нет способа узнать будет ли работать прямая пересылка, не попробовав её, - то есть протокол не может сказать окажется ли выбранный способ передачи - работающим. - -Из этого нужно сделать **Самый Главный Вывод:** - -> _Если прямая передача не поддерживается вашим компьютером, **запретите** её в - настройках, так как она с большой долей вероятности будет выбираться в ходе - "рукопожатия" протокола передачи файлов и не будет работать._ - -**На заметку:** это "не будет работать" обычно выражается в том, что соединение -долго "висит", и при этом никакой передачи файла не происходит. Причина обычно -состоит в том, что межсетевой экран, отделяющий компьютер-адресат (или ваш -компьютер) от внешней сети (обычно Интернет), молча "душит" "неправильные" с -его точки зрения [IP-пакеты](http://ru.wikipedia.org/wiki/IP). При этом -компьютер-передатчик (ваш компьютер), не получая никаких ответов на посылаемые -пакеты, ожидает их в течение некоторого (большого) тайм-аута (к примеру, для -ядра Linux 2.4.x он составляет около 10 минут). - -Рассмотрим теперь конкретные опции конфигурации доступных протоколов передачи -файлов. - -## Спортивное ориентирование на местности доступных протоколов -Все приведённые опции конфигурации для протоколов доступны для изменения как -через графический конфигуратор Ткаббера, так и через -[**config.tcl** (секция "post-load")](http://tkabber.jabber.ru/files/doc/tkabber.html#s.postload). - -### Jidlink - -Этот протокол поддерживает как внеканальный, так и внутриканальный способы -передачи файлов. - -Протокол **Jidlink** никогда не являлся частью стандарта **XMPP,** а поэтому -считается устаревшим. Кроме того, этот протокол по-видимому не поддерживается -ни одним из известных джаббер-клиентов, кроме Ткаббера. - -С другой стороны, это не означает, что этот протокол не следует использовать -совсем — он отлично работает в случае соединения Ткаббер-Ткаббер. Кроме того, -он имеет достаточно тонкое положительное отличие от аналогичного протокола — -**SI/IBB,** которое будет обсуждаться ниже. - -С другой стороны, в отличие от **SI, Jidlink** не поддерживает опосредованные -прямые соединения (mediated direct connections), поддержка которых уже есть в -текущей альфа-версии Ткаббера. Подробнее об этих соединениях — в описании -протокола **SI.** - -#### Опции конфигурирования - -Для конфигурирования протокола **Jidlink** доступны следующие опции: +# Введение +Если вы туманно представляете себе этот вопрос или думаете, что два файла переслать — это как два пальца об асфальт, то перед тем как продолжить чтение, рекомендуем посетить [эту страничку](http://jabberworld.info/Передача_файлов) на jabberworld.info. Там вы получите необходимый минимум знаний, который поможет быстрее разобраться в премудростях файлопересылания. + +Проблемы с пересылкой файлов проистекают из незнания матчасти. Вопрос о том, должен ли "рядовой пользователь" знать матчасть — сложный, и даже философский. Подход Ткаббера, написанного продвинутыми пользователями для продвинутых пользователей, предполагает, что должен. + +Совсем нетерпеливые могут прыгнуть [прямо к описанию настроек](Пересылка_файлов__теория.md#Спортивное_ориентирование_на_местности_доступных_протоколов). + +Вы ещё здесь? Отлично! Тогда приступим. И начнём с простого. + +# Как соединены Вася@сервер1 и Петя@сервер2 +* Джаббер-клиент Васи устанавливает соединение с сервером **сервер1**. +* Джаббер-клиент Пети — с сервером **сервер2**. +* **сервер1** и **сервер2** устанавливают соединение между собой. + +Теперь, когда Вася шлёт сообщение Пете, происходит следующее: + +* васин клиент шлёт это сообщение своему серверу (**сервер1**). +* васин сервер посылает его петиному серверу (**сервер2**). +* петин сервер пересылает его петиному клиенту. +* Петя видит сообщение и радуется. + +Заметьте, что хотя между Васей и Петей есть _логическое_ соединение, реально каждый из них соединён только со своим сервером. Это — типичная ошибка начинающих пользователей: считать, что сообщение, посланное "на соседний компьютер", посылается прямо на этот соседний компьютер. (К примеру, в случае общения "через аську" в русском офисе сообщения на самом деле ходят через сервер, находящийся в Америке.) + +Соединение между васиным и петиным джаббер-клиентами мы будем называть _каналом._ + +# Обмен сообщениями + передача файлов = мезальянс? +Во-первых, надо отметить, что "Jabber" — это "разговорное название" [протокола XMPP,](http://www.xmpp.org) и эта аббревиатура образована от термина _Extensible Messaging and Presence Protocol,_ означающего: _Расширяемый Протокол для обмена **Сообщениями** и информацией о Присутствии._ Обратите внимание на слово "сообщениями" — никакого упоминания о пересылке файлов. + +Понять это легко: джаббер оптимизирован для пересылки _коротких текстовых_ сообщений. В эту канву вписываются: обычные сообщения, "чат" и "групповой чат" (комнаты), адмминистративные сообщения, рассылаемые разным группам пользователей в пределах одного сервера, а так же различные более "хитрые" сервисы, вроде агрегации RSS-каналов. + +**На заметку:** любопытный читатель может получить представление о том, что летает по джаббер-сети, активизировав стандартный плагин "RAW XML Input" и открыв "Окно XML" из меню "Службы->Инструменты администратора". + +Передача файлов в эту концепцию _не_ вписывается. + +Однако, она иногда требуется. + +Джаббер отвечает на эту потребность тремя расширениями стандарта, определяющими различные _"транспорты",_ то есть протоколы доставки информации: + +* Jidlink. +* [Out of Band Data (OOB)](http://www.jabber.org/jeps/jep-0066.html) (по причинам, объяснённым ниже, в Ткаббере называется "HTTP"). +* [Передача файлов](http://www.jabber.org/jeps/jep-0096.html), основанная на протоколе [SI](http://www.jabber.org/jeps/jep-0095.html). + +Независимо от протокола, поток байтов, который передаётся транспортом, именуется _"bytestream",_ то есть... правильно — "поток байтов". + +# Вася и Петя хотят передать файл +Как мы помним, соедниение между **Вася@сервер1** и **Петя@сервер2** — чисто логическое, то есть _нет прямого соединения_ между васиным и петиным компьютерами. + +Протоколы джаббера предоставляют Васе две _принципиально различные_ возможности для того чтобы передать файл Пете: + +* васин джаббер-клиент может установить _прямое соединение_ с петиным клиентом и передать файл, на время создав таким образом _физический канал_ между васиным и петиным компьютерами. +* васин джаббер-клиент может послать файл внутри существующего _логического канала_ между ним и петиным джаббер-клиентом. + +В первом случае информация передаётся непосредственно с компьютера на компьютер, а значит, это делается быстро, экономично и удобно. + +Во втором случае передача производится способом, похожим на посылку обычных текстовых сообщений. Представить себе это проще всего так: файл, предназначенный для пересылки, разбивается на небольшие куски, и каждый кусок пересылается как если бы это было текстовое сообщение. (Технически это не во всех случаях верно, но общая идея должна быть понятна.) + +Рассмотрим это чуть подробнее, а заодно введём пару "официальных" терминов. + +## Внутри и снаружи + +С точки зрения пользователя джаббер-клиента самым серьёзным вопросом является то, _как_ передаются данные файла. Как уже объяснялось выше, есть всего два способа это сделать: передать данные "внутри" имеющегося соединения и "снаружи". + +Отсюда — два термина: + +* _In-band, IB ("в канале")_ — данные файла передаются внутри логического соединения между клиентами, то есть _опосредованно_ (в передаче участвуют не только клиенты, но и вся цепочка Джаббер-серверов между ними). +* _Out-of-band, OOB ("вне канала")_ — данные файла передаются _непосредственно_ между клиентами (или через прокси-сервер). Джаббер-серверы клиентов в передаче не участвуют. + +Термин "bytestream" не забывают и здесь, различая, соответственно + +* In-band bytestreams (IBB) — внутриканальные потоки байтов. +* Out-of-band bytestreams (OOB) — внеканальные потоки байтов. + +**На заметку:** сторого говоря, термин "band" здесь следует переводить телекоммуникационным эквивалентом — "полоса", а приведённые термины означают "внутриполосную" и "внеполосную" передачу данных, соответственно. Но мы предпочтём простоту изложения академичности. + +Ну, а теперь настало время представить виновников данной писанины поподробнее. + +# Ху из ху? +## Jidlink + +* Поддерживает как in-band, так и out-of-band передачу. +* Никогда не являлся стандартным расширением Джаббера, и поэтому не является официальным. +* Из широко известных джаббер-клиентов, реализован только в Ткаббере. +* Для передачи данных в канале использует iq-паекты (IQ — это [подсистема Info/Query Джаббера](http://www.xmpp.org/specs/rfc3920.html#stanzas-semantics)). +* Для передачи данных вне канала использует протокол [Direct TCP (DTCP)](http://www.xmpp.org/extensions/xep-0046.html). + +## SI + +* Поддерживает как in-band, так и out-of-band передачу. +* Является стандартным расширением Джаббера (и самым новым транспортом для передачи файлов). +* Для передачи в канале может использовать: + * текстовые сообщения — стандартный режим внутриканальной передачи (мы будем именовать этот режим аббревиатурой **SI/IBB**); + * IQ-запросы — (пока ещё) нестандартный режим, реализованный в текущей альфа-версии Ткаббера, имеющий серьёзные преимущества перед стандартным (**SI/IQIBB**). + +* Для передачи вне канала использует [потоки байтов SOCKS5](http://www.xmpp.org/extensions/xep-0065.html). +* Поддерживает опосредованные ("mediated") внеканальные соединения через специальные SOCKS5-прокси серверы (реализовано в текущей альфа-версии). + +Термин _SI (Stream Initiation)_ является весьма обобщённым и означает "создание потока". Имеется в виду организация дополнительного потока байтов по инициативе одного из клиентов. Нас в данном случае интересует создание потока для передачи файла. + +Теория относительно SOCKS5 дана [тут](Терминология.md#SOCKS5). + +## HTTP (OOB) + +* Является стандартным (и самым старым) способом передачи файлов. +* Поддерживает только передачу вне канала. +* Использует [протокол HTTP](http://ru.wikipedia.org/wiki/HTTP) для передачи данных; при этом инициатор во время передачи файла является HTTP-сервером, а получатель — клиентом. + +# Две ступени к прекрасному +Передача файла при помощи любого протокола состоит из двух последовательных фаз: + +1. _"Рукопожатие",_ в ходе которого стороны договариваются о том, каким именно образом будет использован протокол. На этом этапе инициатор так же сообщает некоторую информацию о файле, а принимающая сторона должна подтвердить или отклонить запрос на передачу. +1. Собственно передача файла. + +Рукопожатие интересует нас сильнее всего, так как именно оно определяет какой из способов передачи информации будет выбран протоколом. + +**Внимание!** Этот выбор _осуществляется автоматически,_ так что то, как именно он будет осуществлён, зависит от настроек Ткаббера. + +**Важно понимать,** что каждый протокол передачи файлов _предпочитает **прямые (вне канала)** соединения_ внутриканальным. + +Постигнув теорию, спустимся с небес на землю и узнаем что же создаёт проблемы на пути лёгкой передачи файлов. + +# Идеальная сеть и жестокая реальность +В идеальной TCP/IP сети нет вирусов, кракеров, спама, идиотов, фанатиков, трафик бесплатен, и каждый компьютер имеет публичный IP-адрес. + +Во вполне реальном [Интернет](http://ru.wikipedia.org/wiki/Интернет) это всё есть, и поэтому: + +* Компьютеры, "смотрящие" в Интернет непосредственно, обычно защищены ["межсетевыми экранами"](http://ru.wikipedia.org/wiki/Межсетевой_экран) — программами, которые не позволяют подключиться к компьютеру "снаружи". +* Компьютеры, подключённые к Интернет опосредованно, как правило, делают это через нечто, осуществляющее [преобразование сетевых адресов](http://ru.wikipedia.org/wiki/NAT), что так же убивает возможность соединиться с такими компьютерами "снаружи". + +Некоторые люди также полагают, что иногда эту неприглядную ситуацию ещё сильнее ухудшают странные люди, именуемые "системными администраторами": они всеми доступными средствами изничтожают любую возможность "вылезти в свет" для скучающих офисных работников. + +Конкретные ситуации с соединениями на различных компьютерах могут сильно отличаться. Например, компьютер может совершать любые исходящие соединения, но не может принимать входящие. Или даже исходящие он может совершать только через [прокси-сервер](http://ru.wikipedia.org/wiki/Прокси-сервер). Бывают и более сложные условия. + +В любом случае, идея очевидна: _в Интернете_ протоколам, подразумевающим произвольные _прямые_ соединения между компьютерами живётся несладко. Интернет это ярко выраженный образчик клиент-серверной архитектуры: только серверы, предоставляющие специфические услуги (вроде HTTP, почты или Jabber), способны принимать соединения от своих клиентов. + +С другой стороны, в [локальных сетях](http://ru.wikipedia.org/wiki/LAN) ситуация зачастую совсем другая. В них, как правило, все компьютеры считаются добропорядочными и разрешают произвольные соединения друг с другом. + +**Главный вывод** из этого таков: _в Интернет,_ как правило, прямая передача информации между двумя "простыми" компьютерами невозможна. А это значит, что в таких условиях, возможно, придётся использовать способность некоторых протоколов передачи файлов посылать информацию внутри логического канала. + +# И снова "внутри и снаружи": что выбрать? +Ответьте для себя на два вопроса: + +1. Может ли мой компьютер установить произвольное TCP/IP-соединение с удалённым компьютера? (_"активный"_ способ установить соединение) +1. Может ли удалённый компьютер установить произвольное соединение с моим компьютером? (_"пассивный"_ способ) + +Комбинация ответов "да" или "нет" на каждый из этих вопросов даст вам в руки руководство к действию: + +* Если ваш компьютер _может установить_ произвольное TCP/IP-соединение, то вы можете _разрешить_ протоколам передачи файлов устанавливать _исходящие прямые_ соединения. +* Если ваш компьютер _принимает_ прямые подключения (например, он нахдится в локальной сети), то вы можете _разрешить_ протоколам передачи файлов принимать _входящие прямые_ соединения. +* Если "нет" является ответом на оба вопроса, запрещайте оба типа прямых соединений: in-band bytestreams — ваша единственная возможность пересылать файлы. + +**Внимание!** Необходимо чётко понимать две вещи: + +1. _Все_ протоколы передачи файлов в джаббере _предпочитают прямую пересылку_ внутриканальной как наиболее быструю и создающую минимальную нагрузку на серверы. +1. Нет способа узнать будет ли работать прямая пересылка, не попробовав её, то есть протокол не может сказать окажется ли выбранный способ передачи работающим. + +Из этого нужно сделать **Самый Главный Вывод:** + + _Если прямая передача не поддерживается вашим компьютером, **запретите** её в настройках, так как она с большой долей вероятности будет выбираться в ходе "рукопожатия" протокола передачи файлов и не будет работать._ + +**На заметку:** это "не будет работать" обычно выражается в том, что соединение долго "висит", и при этом никакой передачи файла не происходит. Причина обычно состоит в том, что межсетевой экран, отделяющий компьютер-адресат (или ваш компьютер) от внешней сети (обычно Интернет), молча "душит" "неправильные" с его точки зрения [IP-пакеты](http://ru.wikipedia.org/wiki/IP). При этом компьютер-передатчик (ваш компьютер), не получая никаких ответов на посылаемые пакеты, ожидает их в течение некоторого (большого) тайм-аута (к примеру, для ядра Linux 2.4.x он составляет около 10 минут). + +Рассмотрим теперь конкретные опции конфигурации доступных протоколов передачи файлов. + +# Спортивное ориентирование на местности доступных протоколов +Все приведённые опции конфигурации для протоколов доступны для изменения как через графический конфигуратор Ткаббера, так и через [**config.tcl** (секция "post-load")](http://tkabber.jabber.ru/files/doc/tkabber.html#s.postload). + +## Jidlink + +Этот протокол поддерживает как внеканальный, так и внутриканальный способы передачи файлов. + +Протокол **Jidlink** никогда не являлся частью стандарта **XMPP,** а поэтому считается устаревшим. Кроме того, этот протокол по-видимому не поддерживается ни одним из известных джаббер-клиентов, кроме Ткаббера. + +С другой стороны, это не означает, что этот протокол не следует использовать совсем — он отлично работает в случае соединения Ткаббер-Ткаббер. Кроме того, он имеет достаточно тонкое положительное отличие от аналогичного протокола — **SI/IBB,** которое будет обсуждаться ниже. + +С другой стороны, в отличие от **SI, Jidlink** не поддерживает опосредованные прямые соединения (mediated direct connections), поддержка которых уже есть в текущей альфа-версии Ткаббера. Подробнее об этих соединениях — в описании протокола **SI.** + +### Опции конфигурирования + +Для конфигурирования протокола **Jidlink** доступны следующие опции: ::ft::ftjl::options(enable) -Разрешает использовать **Jidlink.** По умолчанию _выключена._ +Разрешает использовать **Jidlink.** По умолчанию _выключена._ ::jidlink::transport(allowed,dtcp-active) -Разрешает инициировать _исходящие прямые_ соединения. По умолчанию включена. +Разрешает инициировать _исходящие прямые_ соединения. По умолчанию включена. ::jidlink::transport(allowed,dtcp-passive) -Разрешает принимать _входящие прямые_ соединения. По умолчанию включена. +Разрешает принимать _входящие прямые_ соединения. По умолчанию включена. ::jidlink::transport(allowed,inband-bytestream) -Разрешает внутриканальную передачу файлов. По умолчанию включена. - -#### Руководство по настройке - -* Можете устанавливать произвольные исходящие прямые соединения? Оставьте - включённым **dtcp-active.** -* Можете принимать произвольные входящие прямые соединения? Оставьте - включённым **dtcp-passive.** -* Не можете ни того, ни другого? Оставьте включённой _только_ - **inband-bytestream.** - -### SI - -Протокол **SI** поддерживает как внеканальную, так и внутриканальную передачу -файлов. - -#### Опции конфигурации - -В текущей стабильной версии (0.9.9) доступны следующие настройки: +Разрешает внутриканальную передачу файлов. По умолчанию включена. + +### Руководство по настройке + +* Можете устанавливать произвольные исходящие прямые соединения? Оставьте включённым **dtcp-active.** +* Можете принимать произвольные входящие прямые соединения? Оставьте включённым **dtcp-passive.** +* Не можете ни того, ни другого? Оставьте включённой _только_ **inband-bytestream.** + +## SI + +Протокол **SI** поддерживает как внеканальную, так и внутриканальную передачу файлов. + +### Опции конфигурации + +В текущей стабильной версии (0.9.9) доступны следующие настройки: ::ft::si::options(enable) -Разрешает использовать **SI.** По умолчанию включена. +Разрешает использовать **SI.** По умолчанию включена. ::si::transport(allowed,http://jabber.org/protocol/bytestreams) -Разрешает использовать прямые соединения. _Как исходящие, так и входящие;_ -здесь нет раздельных опций как у **Jidlink.** По умолчанию включена. +Разрешает использовать прямые соединения. _Как исходящие, так и входящие;_ здесь нет раздельных опций как у **Jidlink.** По умолчанию включена. ::si::transport(allowed,http://jabber.org/protocol/ibb) -Разрешает использовать "стандартную "внутриканальную передачу файлов (текстовые -сообщения, **SI/IBB**). По умолчанию включена. +Разрешает использовать "стандартную "внутриканальную передачу файлов (текстовые сообщения, **SI/IBB**). По умолчанию включена. -В ревизии 726 (2006-09-21) основной ветки разработки была добавлена реализация -внутриканальной передачи авторства Сергея Голованя (`xmpp:sgolovan@nes.ru`), -сочетающая достоинства SI и Jidlink — **SI/IQIBB**. Её использование можно -контролировать следующей опцией: +В ревизии 726 (2006-09-21) основной ветки разработки была добавлена реализация внутриканальной передачи авторства Сергея Голованя (`xmpp:sgolovan@nes.ru`), сочетающая достоинства SI и Jidlink — **SI/IQIBB**. Её использование можно контролировать следующей опцией: ::si::transport(allowed,http://jabber.org/protocol/iqibb) -Разрешает использовать "нестандартную" внутриканальную передачу файлов -(IQ-запросы). По умолчанию включена. +Разрешает использовать "нестандартную" внутриканальную передачу файлов (IQ-запросы). По умолчанию включена. -В ревизии 727 (2006-09-23) основной ветки разработки был а добавлена реализация -поддержки опосредованных прямых SOCKS5-соединений. Она контролируется -следующими опциями: +В ревизии 727 (2006-09-23) основной ветки разработки был а добавлена реализация поддержки опосредованных прямых SOCKS5-соединений. Она контролируется следующими опциями: ::si::socks5::initiator::options(enable_mediated_connection) -Разрешает использовать опосредованные прямые соединения. По умолчанию включена. +Разрешает использовать опосредованные прямые соединения. По умолчанию включена. ::si::socks5::initiator::options(proxy_servers) -Список имён прокси серверов, соединение через которые следует пытаться -установить. Пробуются все сервера в списке по порядку. По умолчанию список -состоит из одного сервера — `proxy.jabber.org`; сервера в списке должны быть -разделены пробелами. Список публичных прокси-серверов можно найти на -[juick.info](http://juick.info/jabber:socks5_proxy_list) - -#### Руководство по настройке - -В отличие от **Jidlink, SI** не имеет раздельных опций настройки приёма и -передачи для внеканальных соединений, поэтому важно понимать как именно -устанавливается прямое SOCKS5-соединение в этом протоколе. - -> В **SI** _инициатор_ посылки _открывает слушающий сокет_ на своём компьютере - (то есть _является TCP-сервером_), а _принимающая сторона — пытается - подключиться_ к нему (то есть _является TCP-клиентом_). - -Иными словами, поведение внеканальной передачи в **SI** сильно зависит от того, -кто посылает файл, а кто — его принимает: - -* Если вы _посылаете_ файл, то ваш компьютер должен иметь возможность - _принимать_ произвольные TCP/IP соединения. -* Если вы _принимаете_ файл, что ваш компьютер должен иметь возможность - _создавать_ произвольные TCP/IP соединения. - -Нетрудно заметить, что эта схема создания внеканальных соединений обратна той, -которую использует **Jidlink.** - -Ещё раз отметим, что в **SI** приём и передача для внеканальных соединений не -регулируются раздельно. А это означает, что если ваш компьютер "не дружит" с -_любым_ из способов установления прямых соединений (активным или пассивным), -вам лучше держать соответствующую опцию _выключенной,_ и включать её специально -в нужных случаях, когда вы уверены в том, что внеканальная передача будет -работать. - -Транспорт **SI/IQIBB** имеет более высокий приоритет при рукопожатии, чем -**SI/IBB.** - -![(!)](../images/Hammer.png) **Сделать:** написать про mediated connections - -### HTTP - -Этот протокол поддерживает только прямые соединения, при этом: - -* сторона, _посылающая_ файл, выступает как HTTP-сервер и должна иметь - возможность _принимать произвольные входящие соединения._ -* сторона, _принимающая_ файл, должна иметь возможность установки - _исходящего прямого соединения по протоколу HTTP (на произвольный порт)._ - -Иными словами, получатель "скачивает" файл с машины посылающего, выступая в -качестве "активной" стороны. - -Теоретически, поскольку принимающая сторона получает файл при помощи запроса -**GET** протокола **HTTP,** _получатель_ может установить соединение этого типа -через HTTP-прокси.. Однако, в Ткаббере эта возможность не реализована. - -#### Опции конфигурирования - -В текущей стабильной версии (0.9.9) протокол управляется всего одной опцией: +Список имён прокси серверов, соединение через которые следует пытаться установить. Пробуются все сервера в списке по порядку. По умолчанию список состоит из одного сервера — `proxy.jabber.org`; сервера в списке должны быть разделены пробелами. Список публичных прокси-серверов можно найти на [juick.info](http://juick.info/jabber:socks5_proxy_list) + +### Руководство по настройке + +В отличие от **Jidlink, SI** не имеет раздельных опций настройки приёма и передачи для внеканальных соединений, поэтому важно понимать как именно устанавливается прямое SOCKS5-соединение в этом протоколе. + + В **SI** _инициатор_ посылки _открывает слушающий сокет_ на своём компьютере (то есть _является TCP-сервером_), а _принимающая сторона — пытается подключиться_ к нему (то есть _является TCP-клиентом_). + +Иными словами, поведение внеканальной передачи в **SI** сильно зависит от того, кто посылает файл, а кто — его принимает: + +* Если вы _посылаете_ файл, то ваш компьютер должен иметь возможность _принимать_ произвольные TCP/IP соединения. +* Если вы _принимаете_ файл, что ваш компьютер должен иметь возможность _создавать_ произвольные TCP/IP соединения. + +Нетрудно заметить, что эта схема создания внеканальных соединений обратна той, которую использует **Jidlink.** + +Ещё раз отметим, что в **SI** приём и передача для внеканальных соединений не регулируются раздельно. А это означает, что если ваш компьютер "не дружит" с _любым_ из способов установления прямых соединений (активным или пассивным), вам лучше держать соответствующую опцию _выключенной,_ и включать её специально в нужных случаях, когда вы уверены в том, что внеканальная передача будет работать. + +Транспорт **SI/IQIBB** имеет более высокий приоритет при рукопожатии, чем **SI/IBB.** + +![(!)](../images/Hammer.png) **Сделать:** написать про mediated connections + +## HTTP + +Этот протокол поддерживает только прямые соединения, при этом: + +* сторона, _посылающая_ файл, выступает как HTTP-сервер и должна иметь возможность _принимать произвольные входящие соединения._ +* сторона, _принимающая_ файл, должна иметь возможность установки _исходящего прямого соединения по протоколу HTTP (на произвольный порт)._ + +Иными словами, получатель "скачивает" файл с машины посылающего, выступая в качестве "активной" стороны. + +Теоретически, поскольку принимающая сторона получает файл при помощи запроса **GET** протокола **HTTP,** _получатель_ может установить соединение этого типа через HTTP-прокси.. Однако, в Ткаббере эта возможность не реализована. + +### Опции конфигурирования + +В текущей стабильной версии (0.9.9) протокол управляется всего одной опцией: ::ft::http::options(enable) -Разрешает использовать протокол **HTTP (OOB).** По умолчанию включена. +Разрешает использовать протокол **HTTP (OOB).** По умолчанию включена. -Начиная с ревизии 731 (2006-09-25) в основную ветку разработки включен код -авторства Antoni Grzymala, добавляющий возможность прямой посылки файла с -компьютера, находящегося за -[NATP-устройством](http://ru.wikipedia.org/wiki/NAT) со специально настроенным -[портфорвардингом](http://en.wikipedia.org/wiki/Port_forwarding): +Начиная с ревизии 731 (2006-09-25) в основную ветку разработки включен код авторства Antoni Grzymala, добавляющий возможность прямой посылки файла с компьютера, находящегося за [NATP-устройством](http://ru.wikipedia.org/wiki/NAT) со специально настроенным [портфорвардингом](http://en.wikipedia.org/wiki/Port_forwarding): ::ft::http::options(port) -Порт, который следует посылать при рукопожатии на удалённую сторону -(принимающую файл). По умолчанию имеет значение 0, означающее, что порт будет -выбран автоматически на локальной машине. +Порт, который следует посылать при рукопожатии на удалённую сторону (принимающую файл). По умолчанию имеет значение 0, означающее, что порт будет выбран автоматически на локальной машине. ::ft::http::options(host) -Имя хоста или IP адрес, который следует посылать при рукопожатии на удалённую -сторону. По умолчанию пуста; в этом случае посылается сетевое имя локальной -машины. - -**Примечание:** если доступен пакет **Tclx,** то будет передан IP адрес -локальной машины, в который "разрешается" её сетевое имя. - -#### Замечания по настройке - -Настраивать этот протокол имеет смысл только в том случае, если ваша машина -поддерживает прямые соединения или же у вас есть возможность настроить -портфорвардинг, как описано ниже. - -Если с прямыми соединениями у вас туго, забудьте об этом протоколе — вы не -сможете его использовать. - -#### Настройка портфорвардинга для HTTP (OOB) - -**Следует понимать,** что реализация такой схемы требует настройки -NATP-устройства, то есть вы либо должны иметь к нему физический доступ -(администрировать его), либо [хорошо попросить ;)](http://www.ararat.ru) о -такой настройке лицо, администирущее ваш NAT. - -Ключевые идеи подобной настройки портфорвардинга: - -* При _передаче_ файла Ткаббер на нашей машине будет выступать в роли - HTTP-сервера, "отдающего" файл; -* Если наша машина имеет IP адрес из "приватного" диапазона (например, - находится, в локальной сети), прямой доступ к ней "снаружи" (из Интернета) - невозможен; -* Однако, если доступ "наружу" нашей машине обеспечивает NATP-устройство, - на нём возможно настроить отображение какого-либо _фиксированного_ порта на - какой-либо другой _фиксированный_ порт нашей машины. -* При такой настройке наш Ткаббер в ходе фазы рукопожатия протокола OOB - должен сообщать удалённому Ткабберу адрес хоста и номер порта _своего NAT'а,_ - а не свои. При этом удалённый Ткаббер осуществит TCP-соединение с вашим - NAT'ом, и вследствие действия механизма "проброса порта", соединение реально - произойдёт с соответсвующим портом на вашей машине, на котором будет - "слушать" Ткаббер. - -Таким образом, опции "port" и "host", описанные выше, в случае настройки -портфорвардинга, должны содержать "пробрасываемый" порт на NAT'е и имя хоста -(или IP адрес ) NAT'а, соответственно. - -Для "штатного" режима работы следует установить опцию "port" в значение 0, а -опции "host" присвоить пустую строку. - -## Тонкие различия протоколов -Это — "хардкорный" раздел, так как бла-бла... - -### Протоколы внутриканальной передачи данных - -> _Раньше я пользовался -> обычными протоколами передачи данных, -> и передавали они вечно всякую хрень. -> Но с тех пор, как я пользуюсь IQ, -> по каналам лезет одна философия. -> Дело в IQ?_ - -> *© [**Bigote**](Участник_Bigote.md)* - -Тема данного раздела узка: поведение различных протоколов внутриканальной -передачи данных на _медленных и ненадёжных_ соединениях (в основном, на -"dial-up" и GPRS-линках). Именно на них "всплывают" как интересные особенности -реализации TCP/IP в операционных системах и интерпретаторе Tcl, так и -невнимание некоторых разработчиков к проблемам нестабильных соединений. - -В "свежем" Ткаббере (вынутом из репозитория) можно использовать три транспорта -внутриканальной передачи файлов: - -* **Jidlink/IBB**; -* **SI/IBB** — "штатный" внутриканальный транспорт группы протоколов SI; -* **SI/IQIBB** — экспериментальный внутриканальный транспорт группы - протоколов SI. - -В текущей стабильной версии транспорт **SI/IQIBB** отсутствует. - -**Имейте в виду,** что приведённые названия протоколов не являются официальными -и введены нами для удобного сравнительного именования: форма -`ГРУППА_ПРОТОКОЛОВ/ТРАНСПОРТ` позволяет одновременно указать "групповую -принадлежность" транспорта и его конкретную реализацию. - -#### Варианты реализации - -Как уже говорилось выше, протокол XMPP предназначен для обмена текстовыми -сообщениями, а не для передачи файлов. Поэтому перед теми, кто занимается -разработкой протокола внутриканальной передачи файлов, встаёт задача: как -использовать существующие механизмы передачи сообщений для передачи файлов. - -На данный момент существуют две концепции её решения: - -* использование текстовых сообщений (строфа `message`); -* использование IQ-запросов (строфа `iq`). - -Теоретически, у них есть свои слабые и сильные стороны, однако на практике -IQ-запросы выигрывают. Ниже мы объясним — почему. - -Официально, в настоящий момент XMPP поддерживает только три протокола передачи -файлов: **HTTP, SI/bytestreams, SI/IBB,** и из них только один (**SI/IBB**) -предназначен для внутриканальной передачи файлов. - -Протокол **SI/IBB** использует посылку текстовых сообщений в качестве "движка": -пересылаемый файл бьётся на небольшие куски ("чанки", на жаргоне), каждый из -которых кодируется при помощи алгоритма -[base64](http://ru.wikipedia.org/wiki/Base64) и пересылается принимающему -клиенту как текстовое сообщение. - -#### Проблемы SI/IBB - -Есть две проблемы, которые делают применение **SI/IBB** затруднительным на -медленных и нестабильных линиях. - -Во-первых, в XMPP нет механизма подтверждения доставки текстовых сообщений (так -как они доставляются гарантированно). Это приводит к тому, что невозможно -узнать, принят ли уже данный кусок получателем или ещё нет. Из-за этого -_типичная реализация **SI/IBB** "вливает" весь файл в передаваемый XML-поток с -максимально возможной скоростью._ И тут в игру вступает системное кэширование -на пару с забитием полосы пропускания канала. - -В Ткаббере, при передаче через подсистему -[сетевых сокетов](http://ru.wikipedia.org/wiki/Сокет_(программный_интерфейс\)) -Tcl, информация кэшируется на двух уровнях: в буферах интерпретатора Tcl и в -буферах стека TCP/IP ядра операционной системы. Эти буферы достаточно велики: к -примеру, штатно настроенная реализация TCP/IP ядра Linux серии 2.4.x -предоставляет каждому соединению передающий буфер размером 16 килобайт. Буфер -интерпретатора Tcl значительно больше — на машине автора статьи Tcl 8.4.9 -спокойно поглощал "за один присест" файл размером 1,2 мегабайта. - -Буферизация в большинстве случаев весьма полезна, однако на медленном канале -она играет с Ткаббером злую шутку: передача файла размером 1-2 мегабайта в -таких условиях с точки зрения Ткаббера происходит моментально — файл -поглощается буферами тикля и ОС, после чего начинает медленно вливаться в -_физический_ канал передачи (скорость которого на модеме составляет не больше -трёх килобайт в секунду, а зачастую — меньше двух). Если пользователь вдруг -решает отменить посылку файла, это уже невозможно — диалог посылки файла -успешно закрыт. - -Но не это самое неприятное, самое неприятное — это "забитие" полосы пропускания -канала. Поскольку сеанс связи по протоколу XMPP фактически представляет собой -два XML-потока (от клиента на сервер и обратно), любое сообщение от клиента -добавлятся в конец "клиентского" потока, и оно не может нагло пролезть без -очереди для отправки на сервер, равно как и нет возможности открыть -альтернативный поток. Это означает, что пока наш файл томительно "вливается" в -медленный канал, любая наша активность в виде исходящих сообщений будет просто -добавляться в "хвост" потока, "голова" которого ещё "не пролезла" на сервер. -Причём из-за того, что потоки на приём и передачу — разные, несчастный -пользователь получает входящие сообщения (например, наблюдает активность в -чатах), но сам он до окончания передачи файла эффективно отстранён от активных -действий. - -Вторую проблему с **SI/IBB** создаёт комбинация из поддержки сервером -["офлайнового" хранения сообщений](http://www.xmpp.org/extensions/xep-0013.html) -и ненадёжного соединения со стороны получателя файла. - -Офлайновое хранение сообщений является одним из самых полезных свойств любой -системы быстрого обмена сообщениями: подключившись к серверу, клиент получает -все текстовые сообщения, которые были ему посланы пока он не был "на линии". - -Однако, представьте ситуацию: в момент передачи файла при помощи посылки -текстовых сообщений физический канал получателя даёт сбой. Сервер получателя -через определённое (заметим, что довольно немаленькое) время осознаёт, что -TCP/IP-соединение с клиентом разорвано. При этом сообщения, пришедшие за период -от разрыва физического канала до разрыва логического, _теряются безвозвратно_ -(сервер отсылает их, не зная, что клиент "отвалился"), а остальные начинают -складываться в офлайновое хранилище. (Потеря сообщений, описанная только что, -на самом деле имеет более широкие последствия, чем проблемы при передаче -файлов: файлы мы шлём редко, а разговариваем постоянно, так что уверенность в -доставке **всех** сообщений на любом, даже самом поганом соединении — жизненно -важный вопрос.) - -Вновь подключившийся к серверу клиент, принимавший файл, ничего "не помнит" про -имевший место приём файла (**SI/IBB** не поддерживает докачку), но несмотря на -это, сервер начинает передавать клиенту все поступившие за время отсутствия -клиента текстовые сообщения, которыми вполне может оказаться "долившийся" за -это время длинный файл. Эти сообщения будут выбрасываться клиентом (так как они -не относятся ни к какому логическому каналу передачи файлов), но никакой -возможности "не скачивать" такие сообщения у клиента нет. На медленном канале -визуально это выглядит как "подвиснувший" Ткаббер при активности на приёмном -устройстве. - -О реализации в существующих Jabber-серверах неких "умных" алгоритмов особой -обработки текстовых сообщений в подобных случаях нам ничего неизвестно; судя -по-всему, их нет. - -#### Почему полезен IQ - -Второй разновидностью "движка" для внутриканальной посылки файлов является -использование механизма IQ-запросов, которые предназначены для получения -всевозможной информации об участниках XMPP-сети. - -Главное (и в нашем случае принципиальное) отличие семантики сообщений с -IQ-запросами от текстовых сообщений заключается в том, что IQ-запросы -_подразумевают_ получение ответов на себя. То есть в нормальных условиях на -каждый IQ-запрос должен придти _соответствующий ему_ IQ-ответ. Таким образом, -используя этот механизм для передачи файлов, мы получаем доставку с -подтверждением каждого пакета, которыми будет представлен файл при передаче. - -А этот простой факт одним махом решает обе проблемы, присущие простым текстовым -сообщениям транспорта **SI/IBB**: - -* Можно посылать следующий пакет с данными файла только после того, как принят - ответ-"подтверждение" на предыдущий, а значит, нет проблемы с "поглощением" - файла системными буферами и всех проблем, которые оно тянет за собой; -* IQ-запросы не имеют смысла, если клиент-адресат не подключен к серверу, - поэтому сервер "заворачивает" IQ-запросы в подобных случаях, удобно сообщая о - появлении проблемы в нашем "канале передачи файла" — передающая сторона может - просто прекратить передачу, приняв сообщение о такой ошибке. Проблемы с - "ложным докачиванием файла" вновь подключившимся клиентом тоже не существует: - IQ-запросы не попадают в офлайновое хранилище сообщений. - -Итак, используя IQ-запросы вместо текстовых сообщений мы получаем: -"интерактивность" передачи файла (включая возможность "мультиплексирования" -других действий, например, участия в чатах, с передачей файла), индикацию -ошибок при передаче и отсутствие проблем на приёмном конце. - -У каждой палки, как известно, два конца, поэтому за удобство приходится -расплачиваться: - -* Увеличение общего трафика за счёт пакетов-"подтверждений"; -* Механизм, использующий текстовые сообщения, _потенциально_ способен - "прокачивать" информацию с более высокой скоростью за счёт отсутствия - ожидания пакетов-"подтверждений", то есть IQ-пересылка в силу своей природы - должна работать медленнее. - -В реальной жизни никакого преимущества в скорости не выходит по двум причинам: - -* Как правило, на Jabber-серверах имеет место ограничение на максимальную - скорость клиентских потоков — так называемый "шейпинг" ("traffic shaping"), и - это ограничение весьма серьёзно (ведь даже очень быстро набирающий текст - человек не способен превысить порог в десяток символов за секунду, так что - скорость потока можно смело ограничивать весьма сильно); -* Медленный канал вроде модема "съедает" различия в скорости даже при полном - отсутствии ограничений на сервере. - -Одним словом, внутриканальная передача файлов на основе IQ-запросов — выбор -пользователей с высоким IQ :) - -#### Доступные транспорты на основе IQ-запросов - -Увы, современная ситуация с такими транспортами не вполне хороша. - -Текущая стабильная версия Ткаббера (0.9.9) реализует "устаревший" транспорт -**Jidlink/IBB**, а текущая альфа-версия реализует экспериментальный (и пока что -нестандартный) транспорт **SI/IQIBB**. Оба транспорта используют IQ-запросы в -качестве движка и оба успешно решают проблемы, присущие стандартному транспорту -**SI/IBB**. - -Статус описанных протоколов таков: - -* **Jidlink** официально отвергнут комитетом XMPP после некоторой стадии - "обкатки", и стандартом теперь считается группа протоколов **SI**. Другими - словами, **Jidlink** "административно мёртв". Это означает, что вряд ли стоит - ожидать появления поддержки этого протокола в новых Jabber-клиентах, да и - среди "старых" по-видимому только Ткаббер его поддерживает. -* **SI/IQIBB** это попытка Сергея Голованя "подружить" удачную конструктивную - идею **Jidlink/IBB** и стандартность **SI**. Данный протокол пока что - существует только в виде экспериментальной реализации в Ткаббере, его, как и - **Jidlink**, нет в других клиентах, и пока что никто не нашёл времени и сил - составить официальную заявку в комитет XMPP на регистрацю и "обкатку" этого - протокола. - -Ситуацию, однако, не следует считать такой уж плачевной: в конце концов на -связке Ткаббер-Ткаббер хорошо работает любой из этих протоколов, а механизм -рукопожатия из **SI** проигнорирует **SI/IQIBB** при попытке установления -SI-соединения с другим клиентом. - -Вы можете помочь продвижению "правильных" протоколов в массы двумя способами: - -* Пересаживайте всех на Ткаббер (ну, это понятно), -* Помогите с составлением заявки в комитет XMPP :) - -## Это всё хорошо, но что выбрать для *моего* соединения? -![(!)](../images/Hammer.png) **Сделать:** написать - -## Благодарности -Бо́льшую часть технических деталей о протоколах и их реализации автору объяснил -Сергей Головань `xmpp:sgolovan@nes.ru` — один из разработчиков Ткаббера. - -## Скучные сугубо технические ссылки -* [Главный Сайт Протокола XMPP](http://www.xmpp.org/). Здесь находятся ссылки - на всю информацию, касающуюся протокола XMPP. -* [Список XEPs](http://www.xmpp.org/extensions/). _XEP_ это _XMPP Enhancement - Proposal — Предложение по Расширению протокола XMPP._ - * [In-Band Bytestreams (IBB)](http://www.xmpp.org/extensions/xep-0047.html) - * [Потоки байтов SOCKS5](http://www.xmpp.org/extensions/xep-0065.html) - * [Out of Band Data (OOB)](http://www.xmpp.org/extensions/xep-0066.html) - * [Stream Initiation (SI)](http://www.xmpp.org/extensions/xep-0095.html) - * [Передача файлов на основе SI](http://www.xmpp.org/extensions/xep-0096.html) -* Старые XEP'ы, имеющие отношение к **Jidlink**: - * [Reliable Entity Link (REL)](http://www.xmpp.org/extensions/xep-0041.html) — - бывший **Jidlink.** Этот XEP является устаревшим. - * [Список ревизий JEP-0041](http://www.xmpp.org/cgi-bin/viewcvs.cgi/cvs/jeps/0041/jep-0041.xml). - Переименование **Jidlink** в **REL** произошло - [между версиями 1.10 и 1.11 этого документа](http://www.xmpp.org/cgi-bin/viewcvs.cgi/cvs/jeps/0041/jep-0041.xml?r1=1.10&r2=1.11). - * [Direct TCP (DTCP)](http://www.xmpp.org/extensions/xep-0046.html) — - один из транспортов, которые использует **Jidlink.** Этот XEP является устаревшим. - * [Jidlink file transfer](http://www.xmpp.org/cgi-bin/viewcvs.cgi/cvs/jeps/0052/jep-0052.xml); - реализация в Ткаббере основана на версии 1.4 этого документа. - * [Feature Negotiation](http://www.xmpp.org/extensions/xep-0020.html) - используется **Jidlink'ом** в ходе рукопожатия. +Имя хоста или IP адрес, который следует посылать при рукопожатии на удалённую сторону. По умолчанию пуста; в этом случае посылается сетевое имя локальной машины. + +**Примечание:** если доступен пакет **Tclx,** то будет передан IP адрес локальной машины, в который "разрешается" её сетевое имя. + +### Замечания по настройке + +Настраивать этот протокол имеет смысл только в том случае, если ваша машина поддерживает прямые соединения или же у вас есть возможность настроить портфорвардинг, как описано ниже. + +Если с прямыми соединениями у вас туго, забудьте об этом протоколе — вы не сможете его использовать. + +### Настройка портфорвардинга для HTTP (OOB) + +**Следует понимать,** что реализация такой схемы требует настройки NATP-устройства, то есть вы либо должны иметь к нему физический доступ (администрировать его), либо [хорошо попросить ;)](http://www.ararat.ru) о такой настройке лицо, администирущее ваш NAT. + +Ключевые идеи подобной настройки портфорвардинга: + +* При _передаче_ файла Ткаббер на нашей машине будет выступать в роли HTTP-сервера, "отдающего" файл; +* Если наша машина имеет IP адрес из "приватного" диапазона (например, находится, в локальной сети), прямой доступ к ней "снаружи" (из Интернета) невозможен; +* Однако, если доступ "наружу" нашей машине обеспечивает NATP-устройство, на нём возможно настроить отображение какого-либо _фиксированного_ порта на какой-либо другой _фиксированный_ порт нашей машины. +* При такой настройке наш Ткаббер в ходе фазы рукопожатия протокола OOB должен сообщать удалённому Ткабберу адрес хоста и номер порта _своего NAT'а,_ а не свои. При этом удалённый Ткаббер осуществит TCP-соединение с вашим NAT'ом, и вследствие действия механизма "проброса порта", соединение реально произойдёт с соответсвующим портом на вашей машине, на котором будет "слушать" Ткаббер. + +Таким образом, опции "port" и "host", описанные выше, в случае настройки портфорвардинга, должны содержать "пробрасываемый" порт на NAT'е и имя хоста (или IP адрес ) NAT'а, соответственно. + +Для "штатного" режима работы следует установить опцию "port" в значение 0, а опции "host" присвоить пустую строку. + +# Тонкие различия протоколов +Это — "хардкорный" раздел, так как бла-бла... + +## Протоколы внутриканальной передачи данных + +Раньше я пользовался + обычными протоколами передачи данных, + и передавали они вечно всякую хрень. + Но с тех пор, как я пользуюсь IQ, + по каналам лезет одна философия. + Дело в IQ? + +© [Bigote](Участник_Bigote.md) + +Тема данного раздела узка: поведение различных протоколов внутриканальной передачи данных на _медленных и ненадёжных_ соединениях (в основном, на "dial-up" и GPRS-линках). Именно на них "всплывают" как интересные особенности реализации TCP/IP в операционных системах и интерпретаторе Tcl, так и невнимание некоторых разработчиков к проблемам нестабильных соединений. + +В "свежем" Ткаббере (вынутом из репозитория) можно использовать три транспорта внутриканальной передачи файлов: + +* **Jidlink/IBB**; +* **SI/IBB** — "штатный" внутриканальный транспорт группы протоколов SI; +* **SI/IQIBB** — экспериментальный внутриканальный транспорт группы протоколов SI. + +В текущей стабильной версии транспорт **SI/IQIBB** отсутствует. + +**Имейте в виду,** что приведённые названия протоколов не являются официальными и введены нами для удобного сравнительного именования: форма `ГРУППА_ПРОТОКОЛОВ/ТРАНСПОРТ` позволяет одновременно указать "групповую принадлежность" транспорта и его конкретную реализацию. + +### Варианты реализации + +Как уже говорилось выше, протокол XMPP предназначен для обмена текстовыми сообщениями, а не для передачи файлов. Поэтому перед теми, кто занимается разработкой протокола внутриканальной передачи файлов, встаёт задача: как использовать существующие механизмы передачи сообщений для передачи файлов. + +На данный момент существуют две концепции её решения: + +* использование текстовых сообщений (строфа `message`); +* использование IQ-запросов (строфа `iq`). + +Теоретически, у них есть свои слабые и сильные стороны, однако на практике IQ-запросы выигрывают. Ниже мы объясним — почему. + +Официально, в настоящий момент XMPP поддерживает только три протокола передачи файлов: **HTTP, SI/bytestreams, SI/IBB,** и из них только один (**SI/IBB**) предназначен для внутриканальной передачи файлов. + +Протокол **SI/IBB** использует посылку текстовых сообщений в качестве "движка": пересылаемый файл бьётся на небольшие куски ("чанки", на жаргоне), каждый из которых кодируется при помощи алгоритма [base64](http://ru.wikipedia.org/wiki/Base64) и пересылается принимающему клиенту как текстовое сообщение. + +### Проблемы SI/IBB + +Есть две проблемы, которые делают применение **SI/IBB** затруднительным на медленных и нестабильных линиях. + +Во-первых, в XMPP нет механизма подтверждения доставки текстовых сообщений (так как они доставляются гарантированно). Это приводит к тому, что невозможно узнать, принят ли уже данный кусок получателем или ещё нет. Из-за этого _типичная реализация **SI/IBB** "вливает" весь файл в передаваемый XML-поток с максимально возможной скоростью._ И тут в игру вступает системное кэширование на пару с забитием полосы пропускания канала. + +В Ткаббере, при передаче через подсистему [сетевых сокетов](http://ru.wikipedia.org/wiki/Сокет_(Программный_интерфейс)) Tcl, информация кэшируется на двух уровнях: в буферах интерпретатора Tcl и в буферах стека TCP/IP ядра операционной системы. Эти буферы достаточно велики: к примеру, штатно настроенная реализация TCP/IP ядра Linux серии 2.4.x предоставляет каждому соединению передающий буфер размером 16 килобайт. Буфер интерпретатора Tcl значительно больше — на машине автора статьи Tcl 8.4.9 спокойно поглощал "за один присест" файл размером 1,2 мегабайта. + +Буферизация в большинстве случаев весьма полезна, однако на медленном канале она играет с Ткаббером злую шутку: передача файла размером 1-2 мегабайта в таких условиях с точки зрения Ткаббера происходит моментально — файл поглощается буферами тикля и ОС, после чего начинает медленно вливаться в _физический_ канал передачи (скорость которого на модеме составляет не больше трёх килобайт в секунду, а зачастую — меньше двух). Если пользователь вдруг решает отменить посылку файла, это уже невозможно — диалог посылки файла успешно закрыт. + +Но не это самое неприятное, самое неприятное — это "забитие" полосы пропускания канала. Поскольку сеанс связи по протоколу XMPP фактически представляет собой два XML-потока (от клиента на сервер и обратно), любое сообщение от клиента добавлятся в конец "клиентского" потока, и оно не может нагло пролезть без очереди для отправки на сервер, равно как и нет возможности открыть альтернативный поток. Это означает, что пока наш файл томительно "вливается" в медленный канал, любая наша активность в виде исходящих сообщений будет просто добавляться в "хвост" потока, "голова" которого ещё "не пролезла" на сервер. Причём из-за того, что потоки на приём и передачу — разные, несчастный пользователь получает входящие сообщения (например, наблюдает активность в чатах), но сам он до окончания передачи файла эффективно отстранён от активных действий. + +Вторую проблему с **SI/IBB** создаёт комбинация из поддержки сервером ["офлайнового" хранения сообщений](http://www.xmpp.org/extensions/xep-0013.html) и ненадёжного соединения со стороны получателя файла. + +Офлайновое хранение сообщений является одним из самых полезных свойств любой системы быстрого обмена сообщениями: подключившись к серверу, клиент получает все текстовые сообщения, которые были ему посланы пока он не был "на линии". + +Однако, представьте ситуацию: в момент передачи файла при помощи посылки текстовых сообщений физический канал получателя даёт сбой. Сервер получателя через определённое (заметим, что довольно немаленькое) время осознаёт, что TCP/IP-соединение с клиентом разорвано. При этом сообщения, пришедшие за период от разрыва физического канала до разрыва логического, _теряются безвозвратно_ (сервер отсылает их, не зная, что клиент "отвалился"), а остальные начинают складываться в офлайновое хранилище. (Потеря сообщений, описанная только что, на самом деле имеет более широкие последствия, чем проблемы при передаче файлов: файлы мы шлём редко, а разговариваем постоянно, так что уверенность в доставке **всех** сообщений на любом, даже самом поганом соединении — жизненно важный вопрос.) + +Вновь подключившийся к серверу клиент, принимавший файл, ничего "не помнит" про имевший место приём файла (**SI/IBB** не поддерживает докачку), но несмотря на это, сервер начинает передавать клиенту все поступившие за время отсутствия клиента текстовые сообщения, которыми вполне может оказаться "долившийся" за это время длинный файл. Эти сообщения будут выбрасываться клиентом (так как они не относятся ни к какому логическому каналу передачи файлов), но никакой возможности "не скачивать" такие сообщения у клиента нет. На медленном канале визуально это выглядит как "подвиснувший" Ткаббер при активности на приёмном устройстве. + +О реализации в существующих Jabber-серверах неких "умных" алгоритмов особой обработки текстовых сообщений в подобных случаях нам ничего неизвестно; судя по-всему, их нет. + +### Почему полезен IQ + +Второй разновидностью "движка" для внутриканальной посылки файлов является использование механизма IQ-запросов, которые предназначены для получения всевозможной информации об участниках XMPP-сети. + +Главное (и в нашем случае принципиальное) отличие семантики сообщений с IQ-запросами от текстовых сообщений заключается в том, что IQ-запросы _подразумевают_ получение ответов на себя. То есть в нормальных условиях на каждый IQ-запрос должен придти _соответствующий ему_ IQ-ответ. Таким образом, используя этот механизм для передачи файлов, мы получаем доставку с подтверждением каждого пакета, которыми будет представлен файл при передаче. + +А этот простой факт одним махом решает обе проблемы, присущие простым текстовым сообщениям транспорта **SI/IBB**: + +* Можно посылать следующий пакет с данными файла только после того, как принят ответ-"подтверждение" на предыдущий, а значит, нет проблемы с "поглощением" файла системными буферами и всех проблем, которые оно тянет за собой; +* IQ-запросы не имеют смысла, если клиент-адресат не подключен к серверу, поэтому сервер "заворачивает" IQ-запросы в подобных случаях, удобно сообщая о появлении проблемы в нашем "канале передачи файла" — передающая сторона может просто прекратить передачу, приняв сообщение о такой ошибке. Проблемы с "ложным докачиванием файла" вновь подключившимся клиентом тоже не существует: IQ-запросы не попадают в офлайновое хранилище сообщений. + +Итак, используя IQ-запросы вместо текстовых сообщений мы получаем: "интерактивность" передачи файла (включая возможность "мультиплексирования" других действий, например, участия в чатах, с передачей файла), индикацию ошибок при передаче и отсутствие проблем на приёмном конце. + +У каждой палки, как известно, два конца, поэтому за удобство приходится расплачиваться: + +* Увеличение общего трафика за счёт пакетов-"подтверждений"; +* Механизм, использующий текстовые сообщения, _потенциально_ способен "прокачивать" информацию с более высокой скоростью за счёт отсутствия ожидания пакетов-"подтверждений", то есть IQ-пересылка в силу своей природы должна работать медленнее. + +В реальной жизни никакого преимущества в скорости не выходит по двум причинам: + +* Как правило, на Jabber-серверах имеет место ограничение на максимальную скорость клиентских потоков — так называемый "шейпинг" ("traffic shaping"), и это ограничение весьма серьёзно (ведь даже очень быстро набирающий текст человек не способен превысить порог в десяток символов за секунду, так что скорость потока можно смело ограничивать весьма сильно); +* Медленный канал вроде модема "съедает" различия в скорости даже при полном отсутствии ограничений на сервере. + +Одним словом, внутриканальная передача файлов на основе IQ-запросов — выбор пользователей с высоким IQ :) + +### Доступные транспорты на основе IQ-запросов + +Увы, современная ситуация с такими транспортами не вполне хороша. + +Текущая стабильная версия Ткаббера (0.9.9) реализует "устаревший" транспорт **Jidlink/IBB**, а текущая альфа-версия реализует экспериментальный (и пока что нестандартный) транспорт **SI/IQIBB**. Оба транспорта используют IQ-запросы в качестве движка и оба успешно решают проблемы, присущие стандартному транспорту **SI/IBB**. + +Статус описанных протоколов таков: + +* **Jidlink** официально отвергнут комитетом XMPP после некоторой стадии "обкатки", и стандартом теперь считается группа протоколов **SI**. Другими словами, **Jidlink** "административно мёртв". Это означает, что вряд ли стоит ожидать появления поддержки этого протокола в новых Jabber-клиентах, да и среди "старых" по-видимому только Ткаббер его поддерживает. +* **SI/IQIBB** это попытка Сергея Голованя "подружить" удачную конструктивную идею **Jidlink/IBB** и стандартность **SI**. Данный протокол пока что существует только в виде экспериментальной реализации в Ткаббере, его, как и **Jidlink**, нет в других клиентах, и пока что никто не нашёл времени и сил составить официальную заявку в комитет XMPP на регистрацю и "обкатку" этого протокола. + +Ситуацию, однако, не следует считать такой уж плачевной: в конце концов на связке Ткаббер-Ткаббер хорошо работает любой из этих протоколов, а механизм рукопожатия из **SI** проигнорирует **SI/IQIBB** при попытке установления SI-соединения с другим клиентом. + +Вы можете помочь продвижению "правильных" протоколов в массы двумя способами: + +* Пересаживайте всех на Ткаббер (ну, это понятно), +* Помогите с составлением заявки в комитет XMPP :) + +# Это всё хорошо, но что выбрать для моего соединения?__ +![(!)](../images/Hammer.png) **Сделать:** написать + +# Благодарности +Бо́льшую часть технических деталей о протоколах и их реализации автору объяснил Сергей Головань `xmpp:sgolovan@nes.ru` — один из разработчиков Ткаббера. + +# Скучные сугубо технические ссылки +* [Главный Сайт Протокола XMPP](http://www.xmpp.org/). Здесь находятся ссылки на всю информацию, касающуюся протокола XMPP. +* [Список XEPs](http://www.xmpp.org/extensions/). _XEP_ это _XMPP Enhancement Proposal — Предложение по Расширению протокола XMPP._ + * [In-Band Bytestreams (IBB)](http://www.xmpp.org/extensions/xep-0047.html) + * [Потоки байтов SOCKS5](http://www.xmpp.org/extensions/xep-0065.html) + * [Out of Band Data (OOB)](http://www.xmpp.org/extensions/xep-0066.html) + * [Stream Initiation (SI)](http://www.xmpp.org/extensions/xep-0095.html) + * [Передача файлов на основе SI](http://www.xmpp.org/extensions/xep-0096.html) + +* Старые XEP'ы, имеющие отношение к **Jidlink**: + * [Reliable Entity Link (REL)](http://www.xmpp.org/extensions/xep-0041.html) — бывший **Jidlink.** Этот XEP является устаревшим. + * [Список ревизий JEP-0041](http://www.xmpp.org/cgi-bin/viewcvs.cgi/cvs/jeps/0041/jep-0041.xml). Переименование **Jidlink** в **REL** произошло [между версиями 1.10 и 1.11 этого документа](http://www.xmpp.org/cgi-bin/viewcvs.cgi/cvs/jeps/0041/jep-0041.xml?r1=1.10&r2=1.11). + * [Direct TCP (DTCP)](http://www.xmpp.org/extensions/xep-0046.html) — один из транспортов, которые использует **Jidlink.** Этот XEP является устаревшим. + * [Jidlink file transfer](http://www.xmpp.org/cgi-bin/viewcvs.cgi/cvs/jeps/0052/jep-0052.xml); реализация в Ткаббере основана на версии 1.4 этого документа. + * [Feature Negotiation](http://www.xmpp.org/extensions/xep-0020.html) используется **Jidlink'ом** в ходе рукопожатия + + Index: wiki/ru/Плагины.md ================================================================== --- wiki/ru/Плагины.md +++ wiki/ru/Плагины.md @@ -1,138 +1,122 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Плагины/index.html) + # Плагины Материал из Tkabber Wiki -![(!)](../images/Hammer.png) **Сделать:** вынести на отдельные странички -описания плагинов, превышающие по размерам половину экрана (примерно, конечно), -оставив здесь лишь краткие пояснения и ссылки. + ![(!)](../images/Hammer.png) **Сделать:** вынести на отдельные странички описания плагинов, превышающие по размерам половину экрана (примерно, конечно), оставив здесь лишь краткие пояснения и ссылки. ## Содержание * [1 Плагинология](#Плагинология) - * [1.1 Как подключить плагин](#Как_подключить_плагин) - * [1.2 Подводные камни при обновлении Ткаббера](#Подводные_камни_при_обновлении_Ткаббера) - * [1.3 Анатомия плагина](#Анатомия_плагина) - * [1.4 Сисадмину на заметку](#Сисадмину_на_заметку) - * [1.5 Советы разработчику плагинов](#Советы_разработчику_плагинов) + * [1.1 Как подключить плагин](#Как_подключить_плагин) + * [1.2 Подводные камни при обновлении Ткаббера](#Подводные_камни_при_обновлении_Ткаббера) + * [1.3 Анатомия плагина](#Анатомия_плагина) + * [1.4 Сисадмину на заметку](#Сисадмину_на_заметку) + * [1.5 Советы разработчику плагинов](#Советы_разработчику_плагинов) * [2 Официальные плагины для Ткаббера](#Официальные_плагины_для_Ткаббера) - * [2.1 Abbrev](#Abbrev) - * [2.2 Aniemoticons](#Aniemoticons) - * [2.3 Attline](#Attline) - * [2.4 Ctcomp](#Ctcomp) - * [2.5 Custom URLs](#Custom_URLs) - * [2.6 Floating Log](#Floating_Log) - * [2.7 Floating Roster Contact](#Floating_Roster_Contact) - * [2.8 Gmail Notifications](#Gmail_Notifications) - * [2.9 Histool](#Histool) - * [2.10 Open URL](#Open_URL) - * [2.11 Presencecmd](#Presencecmd) - * [2.12 Quote Last Message (quotelastmsg)](#Quote_Last_Message_quotelastmsg) - * [2.13 Receipts](#Receipts) - * [2.14 Recentstatus](#Recentstatus) - * [2.15 Singularity](#Singularity) - * [2.16 Stripes](#Stripes) - * [2.17 Tclchat](#Tclchat) - * [2.18 Tkabber-KHIM](#Tkabber-KHIM) - * [2.19 Unixkeys](#Unixkeys) + * [2.1 Abbrev](#Abbrev) + * [2.2 Aniemoticons](#Aniemoticons) + * [2.3 Attline](#Attline) + * [2.4 Ctcomp](#Ctcomp) + * [2.5 Custom URLs](#Custom_URLs) + * [2.6 Floating Log](#Floating_Log) + * [2.7 Floating Roster Contact](#Floating_Roster_Contact) + * [2.8 Gmail Notifications](#Gmail_Notifications) + * [2.9 Histool](#Histool) + * [2.10 Open URL](#Open_URL) + * [2.11 Presencecmd](#Presencecmd) + * [2.12 Quote Last Message (quotelastmsg)](#Quote_Last_Message_quotelastmsg) + * [2.13 Receipts](#Receipts) + * [2.14 Recentstatus](#Recentstatus) + * [2.15 Singularity](#Singularity) + * [2.16 Stripes](#Stripes) + * [2.17 Tclchat](#Tclchat) + * [2.18 Tkabber-KHIM](#Tkabber-KHIM) + * [2.19 Unixkeys](#Unixkeys) * [3 Полуофициальные плагины для Ткаббера](#Полуофициальные_плагины_для_Ткаббера) - * [3.1 Alarm](#Alarm) - * [3.2 Antispam](#Antispam) - * [3.3 Autoanswer](#Autoanswer) - * [3.4 Autosubscribe](#Autosubscribe) - * [3.5 Bldjid](#Bldjid) - * [3.6 Customstatus](#Customstatus) - * [3.7 Flip](#Flip) - * [3.8 Green](#Green) - * [3.9 Hidemuctopic](#Hidemuctopic) - * [3.10 Juick](#Juick) - * [3.11 Killerfeature](#Killerfeature) - * [3.12 Notes](#Notes) - * [3.13 Now Playing](#Now_Playing) - * [3.14 Open History](#Open_History) - * [3.15 Plugin Manager](#Plugin_Manager) - * [3.16 Reminder](#Reminder) - * [3.17 Snoopstatus](#Snoopstatus) - * [3.18 Urgent](#Urgent) - * [3.19 Urlcmd](#Urlcmd) + * [3.1 Alarm](#Alarm) + * [3.2 Antispam](#Antispam) + * [3.3 Autoanswer](#Autoanswer) + * [3.4 Autosubscribe](#Autosubscribe) + * [3.5 Bldjid](#Bldjid) + * [3.6 Customstatus](#Customstatus) + * [3.7 Flip](#Flip) + * [3.8 Green](#Green) + * [3.9 Hidemuctopic](#Hidemuctopic) + * [3.10 Juick](#Juick) + * [3.11 Killerfeature](#Killerfeature) + * [3.12 Notes](#Notes) + * [3.13 Now Playing](#Now_Playing) + * [3.14 Open History](#Open_History) + * [3.15 Plugin Manager](#Plugin_Manager) + * [3.16 Reminder](#Reminder) + * [3.17 Snoopstatus](#Snoopstatus) + * [3.18 Urgent](#Urgent) + * [3.19 Urlcmd](#Urlcmd) * [4 Неофициальные плагины](#Неофициальные_плагины) - * [4.1 8bitgw](#8bitgw) - * [4.2 Autoconnect](#Autoconnect) - * [4.3 Autoraise](#Autoraise) - * [4.4 Autoretrieve](#Autoretrieve) - * [4.5 Bmuc](#Bmuc) - * [4.6 Bookmarks](#Bookmarks) - * [4.7 Chess-mod](#Chess-mod) - * [4.8 Clienticons](#Clienticons) - * [4.9 Confirm](#Confirm) - * [4.10 CryptoConfig](#CryptoConfig) - * [4.11 Cyrillize2](#Cyrillize2) - * [4.12 Follownick](#Follownick) - * [4.13 Goto (заготовка для плагина)](#Goto_заготовка_для_плагина) - * [4.14 Hihglight XEP and RFC URLs](#Hihglight_XEP_and_RFC_URLs) - * [4.15 Highlightex](#Highlightex) - * [4.16 Histballoon](#Histballoon) - * [4.17 Jdiskurl](#Jdiskurl) - * [4.18 Last Activity](#Last_Activity) - * [4.19 Meebo me](#Meebo_me) - * [4.20 Mimetex](#Mimetex) - * [4.21 Nickomp](#Nickomp) - * [4.22 NickSaneColors](#NickSaneColors) - * [4.23 OSD redux](#OSD_redux) - * [4.24 Patches](#Patches) - * [4.25 Postpone Text (добавлен в транк)](#Postpone_Text_добавлен_в_транк) - * [4.26 Reject subscription](#Reject_subscription) - * [4.27 Remote Commands](#Remote_Commands) - * [4.28 Remote IP Address](#Remote_IP_Address) - * [4.29 Remote Settings](#Remote_Settings) - * [4.30 Roster Avatars](#Roster_Avatars) - * [4.31 Rsssaver](#Rsssaver) - * [4.32 Savebtn](#Savebtn) - * [4.33 Server Info](#Server_Info) - * [4.34 So\_keepalive](#So_keepalive) - * [4.35 Spam filter](#Spam_filter) - * [4.36 Tab number](#Tab_number) - * [4.37 Tkabho](#Tkabho) - * [4.38 Vcardavatars](#Vcardavatars) - * [4.39 Wintweaks (устарел)](#Wintweaks_устарел) - -## Плагинология -В этом разделе рассказано о внешних плагинах Ткаббера. - -Если вы — новичок, прочитайте как минимум первые два раздела. - -### Как подключить плагин - -При старте Ткаббер ищет плагины в двух местах и в указанном порядке: - -1. Каталог, имя которого находится в переменной окружения **TKABBER\_SITE\_PLUGINS** -1. Каталог **[$::configdir]($__configdir.md)/plugins** - -Любой из этих каталогов (в том числе оба) могут отсутствовать. Первый из них, -как и следует из названия соответствующей переменной окружения, предназначен -для использования плагинов всеми пользователями системы, в то время как второй -— конкретным пользователем (то есть лично вами). Строго говоря, переменную -окружения можно установить не на уровне системы, а для конкретного -пользователя, что несколько гибче. К тому же её вообще можно просто прописать в -конфиге: + * [4.1 8bitgw](#8bitgw) + * [4.2 Autoconnect](#Autoconnect) + * [4.3 Autoraise](#Autoraise) + * [4.4 Autoretrieve](#Autoretrieve) + * [4.5 Bmuc](#Bmuc) + * [4.6 Bookmarks](#Bookmarks) + * [4.7 Chess-mod](#Chess-mod) + * [4.8 Clienticons](#Clienticons) + * [4.9 Confirm](#Confirm) + * [4.10 CryptoConfig](#CryptoConfig) + * [4.11 Cyrillize2](#Cyrillize2) + * [4.12 Follownick](#Follownick) + * [4.13 Goto (заготовка для плагина)](#Goto_заготовка_для_плагина) + * [4.14 Hihglight XEP and RFC URLs](#Hihglight_XEP_and_RFC_URLs) + * [4.15 Highlightex](#Highlightex) + * [4.16 Histballoon](#Histballoon) + * [4.17 Jdiskurl](#Jdiskurl) + * [4.18 Last Activity](#Last_Activity) + * [4.19 Meebo me](#Meebo_me) + * [4.20 Mimetex](#Mimetex) + * [4.21 Nickomp](#Nickomp) + * [4.22 NickSaneColors](#NickSaneColors) + * [4.23 OSD redux](#OSD_redux) + * [4.24 Patches](#Patches) + * [4.25 Postpone Text (добавлен в транк)](#Postpone_Text_добавлен_в_транк) + * [4.26 Reject subscription](#Reject_subscription) + * [4.27 Remote Commands](#Remote_Commands) + * [4.28 Remote IP Address](#Remote_IP_Address) + * [4.29 Remote Settings](#Remote_Settings) + * [4.30 Roster Avatars](#Roster_Avatars) + * [4.31 Rsssaver](#Rsssaver) + * [4.32 Savebtn](#Savebtn) + * [4.33 Server Info](#Server_Info) + * [4.34 So\_keepalive](#So_keepalive) + * [4.35 Spam filter](#Spam_filter) + * [4.36 Tab number](#Tab_number) + * [4.37 Tkabho](#Tkabho) + * [4.38 Vcardavatars](#Vcardavatars) + * [4.39 Wintweaks (устарел)](#Wintweaks_устарел) + +# Плагинология +В этом разделе рассказано о внешних плагинах Ткаббера. + +Если вы — новичок, прочитайте как минимум первые два раздела. + +## Как подключить плагин + +При старте Ткаббер ищет плагины в двух местах и в указанном порядке: + +1. Каталог, имя которого находится в переменной окружения TKABBER\_SITE\_PLUGINS +1. Каталог [$::configdir]($__configdir.md)/plugins + +Любой из этих каталогов (в том числе оба) могут отсутствовать. Первый из них, как и следует из названия соответствующей переменной окружения, предназначен для использования плагинов всеми пользователями системы, в то время как второй — конкретным пользователем (то есть лично вами). Строго говоря, переменную окружения можно установить не на уровне системы, а для конкретного пользователя, что несколько гибче. К тому же её вообще можно просто прописать в конфиге: set env(TKABBER_SITE_PLUGINS) Q:/Path/To/TkabberPluginsDirectory -Обратите внимание на прямые слэши, а ещё лучше — ознакомьтесь сначала с -[**этим небольшим отрывком**](Config.tcl.md#Немного_о_синтаксисе_тикля) из статьи про -конфиг. - -Физически плагин Ткаббера представляет собой _каталог_ с файлами, который -следует скопировать в любую из указанных выше директорий (но только в одну из -них). Заметьте, что копировать надо каталог целиком, а не файлы из него; кроме -того, каталог плагина нельзя переименовывать (об этом — ниже). И ещё надо -учесть, что в каталоге **plugins** должны лежать непосредственно директории с -плагинами, и ничего в промежутке, например, если вы работаете в системе как -Vasya Pupkin, и решили поставить плагины **attline**, **georoster** и **chess**, -то если вы всё сделали правильно, вы должны получить такую структуру каталогов: +Обратите внимание на прямые слэши, а ещё лучше — ознакомьтесь сначала с [этим небольшим отрывком](Config.tcl.md#Немного_о_синтаксисе_тикля) из статьи про конфиг. + +Физически плагин Ткаббера представляет собой _каталог_ с файлами, который следует скопировать в любую из указанных выше директорий (но только в одну из них). Заметьте, что копировать надо каталог целиком, а не файлы из него; кроме того, каталог плагина нельзя переименовывать (об этом — ниже). И ещё надо учесть, что в каталоге plugins должны лежать непосредственно директории с плагинами, и ничего в промежутке, например, если вы работаете в системе как Vasya Pupkin, и решили поставить плагины attline, georoster и chess, то если вы всё сделали правильно, вы должны получить такую структуру каталогов: C:\Documents and Settings\ Vasya Pupkin\ Application Data\ Tkabber\ @@ -145,569 +129,343 @@ ... georoster\ georoster.tcl ... -Добавленный плагин Ткаббер загрузит при следующем старте. - -**На заметку:** как ни странно, но некоторых пользователей на поприще -подключения плагина останавливало отсутствие каталога `plugins` в домашнем -каталоге Ткаббера. Это — совершенно нормальное явление; если такого каталога -нет, создайте его. - -**На заметку:** не обязательно копировать каталог с плагином из дистрибутива в -**[$::configdir]($__configdir.md)/plugins** — вполне можно сделать -[**символическую ссылку**](Symlinks.md), например, такую: +Добавленный плагин Ткаббер загрузит при следующем старте. + +**На заметку:** как ни странно, но некоторых пользователей на поприще подключения плагина останавливало отсутствие каталога `plugins` в домашнем каталоге Ткаббера. Это — совершенно нормальное явление; если такого каталога нет, создайте его. + +**На заметку:** не обязательно копировать каталог с плагином из дистрибутива в [$::configdir]($__configdir.md)/plugins — вполне можно сделать [символическую ссылку](Symlinks.md), например, такую: ~/.tkabber/plugins/latex → /usr/local/share/tkabber-svn/tkabber-plugins/latex -Имейте в виду, что Ткаббер не спускается в подкаталоги при поиске плагинов, -поэтому не имеет смысла линковать сам каталог с плагинами из дистрибутива -_под_ какой-либо каталог плагинов Ткаббера. Зато вполне можно его _заместить,_ -создав симлинк, например, так: +Имейте в виду, что Ткаббер не спускается в подкаталоги при поиске плагинов, поэтому не имеет смысла линковать сам каталог с плагинами из дистрибутива _под_ какой-либо каталог плагинов Ткаббера. Зато вполне можно его _заместить,_ создав симлинк, например, так: ~/.tkabber/plugins → /usr/local/share/tkabber-svn/tkabber-plugins -Такой способ, однако, весьма негибок, так как для установки внешних плагинов -Ткаббера вам, во-первых, потребуется иметь право на запись в каталог плагинов -дистрибутива, а во-вторых, хранить "левые" плагины вместе с поставляемыми с -дистрибутивом — не совсем правильно (и может помешать обновлению этого каталога -из репозитория). - -**Внимание:** с появлением в составе Ткаббера так называемого Менеджера -плагинов (в настройках выглядит как кнопка "Plugins Management") очень многие -пользователи (и автор этих строк в том числе) забывают после установки плагина -включить его в этом самом Менеджере. Там всё просто и быстро. Идём в -вышеозначенное место, ищем плагин, включаем галочку, сохраняем изменения. Всё. -Плагин на ходу загружается и работает. При "горячем" отключении, кстати, он _не -выгружается из памяти,_ а просто выключается (его функциональность становится -недоступной). Если точнее, кое-что всё-таки выгружается, и это зависит от -автора (впрочем, полная выгрузка плагинов на данный момент пока невозможна). -Естественно, не все плагины можно включить-выключить таким способом, а лишь те, -чьи авторы об этом позаботились. Очень желательно поэтому, когда вы -выкладываете сюда свой плагин, оборудованный этой возможностью, напоминать -пользователям, чтобы после установки они пошли в Менеджер и включили плагин, -потому что _по умолчанию Ткаббер их не подключает._ Имеется шаблон для вики, -позволяющий вставлять в текст статьи хорошо заметную надпись. В нужное место -(лучше всего в самом начале) следует поместить следующий код разметки: +Такой способ, однако, весьма негибок, так как для установки внешних плагинов Ткаббера вам, во-первых, потребуется иметь право на запись в каталог плагинов дистрибутива, а во-вторых, хранить "левые" плагины вместе с поставляемыми с дистрибутивом — не совсем правильно (и может помешать обновлению этого каталога из репозитория). + +**Внимание:** с появлением в составе Ткаббера так называемого Менеджера плагинов (в настройках выглядит как кнопка Plugins Management) очень многие пользователи (и автор этих строк в том числе) забывают после установки плагина включить его в этом самом Менеджере. Там всё просто и быстро. Идём в вышеозначенное место, ищем плагин, включаем галочку, сохраняем изменения. Всё. Плагин на ходу загружается и работает. При "горячем" отключении, кстати, он _не выгружается из памяти,_ а просто выключается (его функциональность становится недоступной). Если точнее, кое-что всё-таки выгружается, и это зависит от автора (впрочем, полная выгрузка плагинов на данный момент пока невозможна). Естественно, не все плагины можно включить-выключить таким способом, а лишь те, чьи авторы об этом позаботились. Очень желательно поэтому, когда вы выкладываете сюда свой плагин, оборудованный этой возможностью, напоминать пользователям, чтобы после установки они пошли в Менеджер и включили плагин, потому что _по умолчанию Ткаббер их не подключает._ Имеется шаблон для вики, позволяющий вставлять в текст статьи хорошо заметную надпись. В нужное место (лучше всего в самом начале) следует поместить следующий код разметки: == My Plugin == {{plugmgr}} -Выглядеть надпись будет так: ![(!)](../images/Ok_icon.png) **Включить в -Менеджере плагинов ** - -Пользователям, желающим установить себе такой плагин, следует помнить, что -Менеджер плагинов имеется лишь в svn-версии Ткаббера (а если точнее, его не -имеется в 0.11.1 и более древних версиях — есть надежда, что 0.12 всё же -выйдет, и, кстати, выйдет она не раньше, чем _все_ плагины будут снабжены -возможностью динамической загрузки/выгрузки). - -### Подводные камни при обновлении Ткаббера - -Имейте в виду, что большинство плагинов Ткаббера "привязаны" к конкретному -релизу этой программы, так как они используют различные программные интерфейсы -Ткаббера, а те имеют тенденцию изменяться со временем. При подобных изменениях -в Ткаббере, его плагины тоже обновляются. - -Это означает, что обновляя Ткаббер, — не важно, "снимаете" ли вы копию из -репозитория или устанавливаете следующий стабильный релиз — нужно всегда -помнить про установленные плагины и обновлять их вместе с Ткаббером. - -Невнимание к этому факту порождает 99% проблем из серии "после обновления -Ткаббер сыплет ошибками". Обновите плагины и перезапустите Ткаббер. - -**На заметку:** иногда возникает обратная проблема: вы даёте плагин от "свежей" -версии Ткаббера своему товарищу с более старой версией этой программы, и там он -не работает. Решением проблемы, если обновление Ткаббера невозможно, является -установка плагинов от соответствующей более старой версии Ткаббера, которые -доступны вместе со своими плагинами -[здесь](http://jabberstudio.org/projects/tkabber/releases/). - -### Анатомия плагина - -В простейшем случае каталог плагина содержит один-единственный файл формата -".tcl", имя которого совпадает с именем каталога; именно этот файл Ткаббер -читает при загрузке плагина. Если в каталоге есть другие файлы **.tcl**, то они -загружаются, как правило, главным файлом плагина или вообще служат для какой-то -другой цели. - -Вообще же, только главный файл плагина присутствует всегда, а остальное -содержимое каталога плагина может быть в принципе любым. Зачастую там есть -документация (например, файл README), которую, конечно же, стоит изучить. Также -там могут быть различные данные, используемые плагином, например, в плагинах -игр, использующих графику (шахматы, шашки), можно найти ещё подкаталог **pixmaps**, -где хранятся изображения доски и фигур. - -Однако два подкаталога, которые могут вам встретиться внутри плагина, стоит -рассмотреть подробнее. - -Каталог **msgs**, если есть, содержит переводы текстовых ресурсов плагина (текста -сообщений и т.п.) на языки, отличные от английского. Этот каталог может быть -интересен с двух точек зрения: - -* Во-первых, вы можете захотеть, чтобы плагин использовал язык, отличный от - языка интерфейса Ткаббера. В этом случае пойдите в главный файл плагина, - отыщите там строчку с командой - - ::msgcat::mcload ... - - (это загрузка каталогов с текстовыми ресурсами) и окружите её строчками: - - set orig [::msgcat::mclocale] - - ::msgcat::mclocale LC - - сверху и - - ::msgcat::mclocale $orig - - — снизу. Вместо "LC" должна быть интересующая вас локаль (например, ru, - uk, es и т.д.). -* Во-вторых, каталог **msgs** — это именно то, что вам нужно менять, если - вы хотите "перевести" плагин на какой-либо другой язык или исправить уже - имеющийся перевод. Подробнее о технике перевода текстовых ресурсов Tcl - рассказано [**тут**](Tkabber_Wiki_Справка.md#Локализация_Ткаббера). - -Каталог **.svn**, если есть, содержит техническую информацию системы контроля -версий Subversion, которая используется при разработке Ткаббера. Обычно такой -каталог у вас появляется в каждом подкаталоге плагинов, которые вы "вынули" из -репозитория Ткаббера (об этом рассказано ниже, в разделе "Стандартные -плагины"). - -В принципе, этот каталог можно удалить (т.к. он фактически содержит копии всех -файлов плагина + служебные файлы Subversion), но он может и пригодиться. - -Дело в том, что после того, как вы получили из репозитория Subversion рабочую -копию проекта, содержащего каталоги (и подкаталоги, и подкаталоги -подкаталогов...), каждый из этих каталогов (и глубже) технически способен -обновляться из репозитория независмо от остальных частей рабочей копии! Говоря -проще, если вы "вынули" из репозитория все плагины, но используете лишь -пару-тройку из них, вы можете обновлять из репозитория их и только их, просто -выполняя команду - - svn update - -в каталогах этих плагинов. Причём сам каталог с плагином может при этом -находиться где угодно — например, быть установленным в один из директориев для -плагинов Ткаббера. Вот так можно обновить плагин "whiteboard": +Выглядеть надпись будет так: ![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + +Пользователям, желающим установить себе такой плагин, следует помнить, что Менеджер плагинов имеется лишь в svn-версии Ткаббера (а если точнее, его не имеется в 0.11.1 и более древних версиях — есть надежда, что 0.12 всё же выйдет, и, кстати, выйдет она не раньше, чем _все_ плагины будут снабжены возможностью динамической загрузки/выгрузки). + +## Подводные камни при обновлении Ткаббера + +Имейте в виду, что большинство плагинов Ткаббера "привязаны" к конкретному релизу этой программы, так как они используют различные программные интерфейсы Ткаббера, а те имеют тенденцию изменяться со временем. При подобных изменениях в Ткаббере, его плагины тоже обновляются. + +Это означает, что обновляя Ткаббер, — не важно, "снимаете" ли вы копию из репозитория или устанавливаете следующий стабильный релиз — нужно всегда помнить про установленные плагины и обновлять их вместе с Ткаббером. + +Невнимание к этому факту порождает 99% проблем из серии "после обновления Ткаббер сыплет ошибками". Обновите плагины и перезапустите Ткаббер. + +**На заметку:** иногда возникает обратная проблема: вы даёте плагин от "свежей" версии Ткаббера своему товарищу с более старой версией этой программы, и там он не работает. Решением проблемы, если обновление Ткаббера невозможно, является установка плагинов от соответствующей более старой версии Ткаббера, которые доступны вместе со своими плагинами [здесь](http://jabberstudio.org/projects/tkabber/releases/). + +## Анатомия плагина + +В простейшем случае каталог плагина содержит один-единственный файл формата ".tcl", имя которого совпадает с именем каталога; именно этот файл Ткаббер читает при загрузке плагина. Если в каталоге есть другие файлы .tcl, то они загружаются, как правило, главным файлом плагина или вообще служат для какой-то другой цели. + +Вообще же, только главный файл плагина присутствует всегда, а остальное содержимое каталога плагина может быть в принципе любым. Зачастую там есть документация (например, файл README), которую, конечно же, стоит изучить. Также там могут быть различные данные, используемые плагином, например, в плагинах игр, использующих графику (шахматы, шашки), можно найти ещё подкаталог pixmaps, где хранятся изображения доски и фигур. + +Однако два подкаталога, которые могут вам встретиться внутри плагина, стоит рассмотреть подробнее. + +Каталог msgs, если есть, содержит переводы текстовых ресурсов плагина (текста сообщений и т.п.) на языки, отличные от английского. Этот каталог может быть интересен с двух точек зрения: + +* Во-первых, вы можете захотеть, чтобы плагин использовал язык, отличный от языка интерфейса Ткаббера. В этом случае пойдите в главный файл плагина, отыщите там строчку с командой + ::msgcat::mcload ... + (это загрузка каталогов с текстовыми ресурсами) и окружите её строчками: + set orig [::msgcat::mclocale] + + ::msgcat::mclocale LC + сверху и + ::msgcat::mclocale $orig + — снизу. Вместо "LC" должна быть интересующая вас локаль (например, ru, uk, es и т.д.). +* Во-вторых, каталог **msgs** — это именно то, что вам нужно менять, если вы хотите "перевести" плагин на какой-либо другой язык или исправить уже имеющийся перевод. Подробнее о технике перевода текстовых ресурсов Tcl рассказано [тут](Tkabber_Wiki_Справка.md#Локализация_Ткаббера). + +Каталог .svn, если есть, содержит техническую информацию системы контроля версий Subversion, которая используется при разработке Ткаббера. Обычно такой каталог у вас появляется в каждом подкаталоге плагинов, которые вы "вынули" из репозитория Ткаббера (об этом рассказано ниже, в разделе "Стандартные плагины"). + +В принципе, этот каталог можно удалить (т.к. он фактически содержит копии всех файлов плагина + служебные файлы Subversion), но он может и пригодиться. + + svn update $ cd ~/.tkabber/plugins/whiteboard $ svn up -### Сисадмину на заметку - -Системным администраторам следует иметь в виду, что подавляющее большинство -плагинов Ткаббера не имеет средств для своего отключения в процессе работы, то -есть для отключения плагина следует удалить его каталог и перезапустить -Ткаббер. Поэтому нужно вдумчиво подходить к установке плагинов в "общий" -каталог. - -**Примечание:** Начиная с марта 2009 года ведутся работы по переводу плагинов -на динамические рельсы — теперь в Настройках появился пункт **Plugin -Management**, где вы можете включить или выключить нужный вам плагин прямо на -ходу (естественно, если он уже переведён на эти самые рельсы). Но надо -полагать, в новом стабильном релизе Ткаббера по крайней мере все официальные -плагины можно будет загружать/выгружать динамически. - -### Советы разработчику плагинов - -Если вы хотите попробовать свои силы в написании плагина, но не знаете, с -чего начать, возможно, вам поможет -[**статья с некоторыми рекомендациями разработчику**](Разработка_плагинов.md). -Она далека от идеала и не претендует на полноту освещения этой темы, но -кое-какие идеи вам даст. - -## Официальные плагины для Ткаббера -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** Почти все эти -плагины можно и нужно включать через Менеджер плагинов (за исключением, разве -что, osd, latex и Tkabber-khim (последний уже намертво прикручен к Ткабберу)). - -В этом разделе ничего принципиально нового не будет — сводка по существующим -плагинам и краткое вспомоществование для желающих скачать и установить их. - -Итак, на сегодняшний день на -[официальной странице плагинов](http://tkabber.jabber.ru/tkabber-plugins) -насчитывается 17 расширений к Ткабберу: bc, checkers, chess, cyrillize, -ejabberd, georoster, mute, osd, reversi, socials, spy и whiteboard. В двух -словах о каждом: - -1. bc — игра ["Быки и коровы"](http://games.look.ru/bc/). Управление - командами: /bcstart /bcstop /bcnext /bctop -1. checkers — шашки (включает разные версии: обычные, русские, американские, - испанские и итальянские). Плагин весьма проработан - есть много игровых возможностей. -1. chess — шахматы. Тоже весьма продвинут. -1. cyrillize — если при вводе сообщения вы ошиблись раскладкой, дело - можно поправить, нажав Ctrl+'. -1. ejabberd — утилитка, позволяющая удалённо общаться с вашим ejabberd - сервером. -1. georoster — показывает на карте мира, где находятся ваши собеседники - (если у них заполнены соответствующие поля в vCard). -1. mute — экспериментальный плагин для коллективного редактирования - текста. -1. poker — техасский покер (Texas hold'em). -1. osd — выводит некоторые события и сообщения "на широком экране" — - On-Screen Display. Про его минимальную настройку можно почитать - [тут](http://vonderer.blogspot.com/2007/02/tkabber.html). -1. reversi — ещё одна настольная игра. -1. socials — позволяет вводить команды типа **/танцевать** (результат - будет такой: **\*nick пляшет дикий танец!**). -1. spy — шпионит за присутствием, регистрируя появления в онлайне и - уходы в оффлайн. Можно выбрать конкретного человека или нескольких и - получать оповещения при их появлении. -1. whiteboard — доска для рисования. Удобно, когда надо нарисовать схему - проезда к месту распития пива оффлайновой Jabber-тусовки ;) -1. debug — он и в Африке отладчик, пишет в лог ошибки касательно - отмеченных ключевых слов. -1. latex — показывает формулы, написанные в формате LaTeX, в виде - картинок-математических формул. Работает под Windows и \*nix. Нужно - дополнительно установить пакеты latex, dvips, imagemagick. -1. traffic — считает количество байт в несжатом, незашифрованном XML - потоке. Группирует по JID-у отправителя и по типу станцы. - [**Читать подробнее**](Low_traffic_HOWTO.md#Средства_самоконтроля). -1. [**Tkabber-KHIM**](#Tkabber-KHIM) — позволяет вводить в Ткаббере - произвольные символы Unicode значительно более удобным способом, - чем при помощи встроенного механизма - [**"unisymbols"**](Ткаббер_ЧаВо.md#Ввод_хитрых_юникодных_символов). - -В версию [0.11.0](http://tkabber.jabber.ru/node/464) было интегрировано -несколько плагинов: attline, ctcomp, custom-urls, floatinglog, gmail, openurl, -presencecmd, receipts и unixkeys. Краткие справки о них доступны -[здесь](http://www.jabber.ru/node/893) и -[здесь](http://www.jabber.ru/node/641). Некоторые из них подробнее освещены -ниже. ![(!)](../images/Hammer.png) **Сделать:** перенести краткое опиcание из -статьи на j.r. сюда - -Установить самый свежий пакет плагинов можно из SVN. Для этого необходимо -проделать [следующее](http://tkabber.jabber.ru/svn) (естественно, у вас должен -быть установлен пакет svn): - +## Сисадмину на заметку + +Системным администраторам следует иметь в виду, что подавляющее большинство плагинов Ткаббера не имеет средств для своего отключения в процессе работы, то есть для отключения плагина следует удалить его каталог и перезапустить Ткаббер. Поэтому нужно вдумчиво подходить к установке плагинов в "общий" каталог. + +**Примечание:** Начиная с марта 2009 года ведутся работы по переводу плагинов на динамические рельсы — теперь в Настройках появился пункт **Plugin Management**, где вы можете включить или выключить нужный вам плагин прямо на ходу (естественно, если он уже переведён на эти самые рельсы). Но надо полагать, в новом стабильном релизе Ткаббера по крайней мере все официальные плагины можно будет загружать/выгружать динамически. + +## Советы разработчику плагинов + +Если вы хотите попробовать свои силы в написании плагина, но не знаете, с чего начать, возможно, вам поможет [статья с некоторыми рекомендациями разработчику](Разработка_плагинов.md). Она далека от идеала и не претендует на полноту освещения этой темы, но кое-какие идеи вам даст. + +# Официальные плагины для Ткаббера +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** Почти все эти плагины можно и нужно включать через Менеджер плагинов (за исключением, разве что, osd, latex и Tkabber-khim (последний уже намертво прикручен к Ткабберу)). + +В этом разделе ничего принципиально нового не будет — сводка по существующим плагинам и краткое вспомоществование для желающих скачать и установить их. + +Итак, на сегодняшний день на [официальной странице плагинов](http://tkabber.jabber.ru/tkabber-plugins) насчитывается 17 расширений к Ткабберу: bc, checkers, chess, cyrillize, ejabberd, georoster, mute, osd, reversi, socials, spy и whiteboard. В двух словах о каждом: + +1. bc — игра ["Быки и коровы"](http://games.look.ru/bc/). Управление командами: /bcstart /bcstop /bcnext /bctop +1. checkers — шашки (включает разные версии: обычные, русские, американские, испанские и итальянские). Плагин весьма проработан - есть много игровых возможностей. +1. chess — шахматы. Тоже весьма продвинут. +1. cyrillize — если при вводе сообщения вы ошиблись раскладкой, дело можно поправить, нажав Ctrl+'. +1. ejabberd — утилитка, позволяющая удалённо общаться с вашим ejabberd сервером. +1. georoster — показывает на карте мира, где находятся ваши собеседники (если у них заполнены соответствующие поля в vCard). +1. mute — экспериментальный плагин для коллективного редактирования текста. +1. poker — техасский покер (Texas hold'em). +1. osd — выводит некоторые события и сообщения "на широком экране" — On-Screen Display. Про его минимальную настройку можно почитать [тут](http://vonderer.blogspot.com/2007/02/tkabber.html). +1. reversi — ещё одна настольная игра. +1. socials — позволяет вводить команды типа **/танцевать** (результат будет такой: **\*nick пляшет дикий танец!**). +1. spy — шпионит за присутствием, регистрируя появления в онлайне и уходы в оффлайн. Можно выбрать конкретного человека или нескольких и получать оповещения при их появлении. +1. whiteboard — доска для рисования. Удобно, когда надо нарисовать схему проезда к месту распития пива оффлайновой Jabber-тусовки ;) +1. debug — он и в Африке отладчик, пишет в лог ошибки касательно отмеченных ключевых слов. +1. latex — показывает формулы, написанные в формате LaTeX, в виде картинок-математических формул. Работает под Windows и \*nix. Нужно дополнительно установить пакеты latex, dvips, imagemagick. +1. traffic — считает количество байт в несжатом, незашифрованном XML потоке. Группирует по JID-у отправителя и по типу станцы. [Читать подробнее.](Low_traffic_HOWTO.md#Средства_самоконтроля) +1. [Tkabber-KHIM](Плагины.md#Tkabber-KHIM) — позволяет вводить в Ткаббере произвольные символы Unicode значительно более удобным способом, чем при помощи встроенного механизма ["unisymbols"](Ткаббер_ЧаВо.md#Ввод_хитрых_юникодных_символов). + +В версию [0.11.0](http://tkabber.jabber.ru/node/464) было интегрировано несколько плагинов: attline, ctcomp, custom-urls, floatinglog, gmail, openurl, presencecmd, receipts и unixkeys. Краткие справки о них доступны [здесь](http://www.jabber.ru/node/893) и [здесь](http://www.jabber.ru/node/641). Некоторые из них подробнее освещены ниже. ![(!)](../images/Hammer.png) **Сделать:** перенести краткое опиcание из статьи на j.r. сюда + +Установить самый свежий пакет плагинов можно из SVN. Для этого необходимо проделать [следующее](http://tkabber.jabber.ru/svn) (естественно, у вас должен быть установлен пакет svn): +` svn co http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins tkabber-plugins - -### Abbrev - -> **Внимание!** Этот плагин находится в транке в качестве _встроенного_ - средства начиная с ревизии 994 (3 Марта 2007). Интерфейс управления не - изменился; несущественно изменился формат вывода информации командами - плагина. _**Изменился** механизм раскрытия сокращений:_ во встроенном плагине - сокращения раскрываются вводом Shift-space. - -Этот плагин добавляет возможность для управления "сокращениями" на письме, -позволяя, к примеру, динамически разворачивать слово "днк" на письме в -"дезоксирибонуклеиновая кислота". - -Плагин предоставляет три "команды" чата: - -##### /abbrev  -Создаёт сокращение. Форма использования: - +` +## Abbrev + + **Внимание!** Этот плагин находится в транке в качестве _встроенного_ средства начиная с ревизии 994 (3 Марта 2007). Интерфейс управления не изменился; несущественно изменился формат вывода информации командами плагина. _**Изменился** механизм раскрытия сокращений:_ во встроенном плагине сокращения раскрываются вводом Shift-space. + +Этот плагин добавляет возможность для управления "сокращениями" на письме, позволяя, к примеру, динамически разворачивать слово "днк" на письме в "дезоксирибонуклеиновая кислота". + +Плагин предоставляет три "команды" чата: + + /abbrev  + + Создаёт сокращение. Форма использования: /abbrev что на что + привязывает к сокращению "что" строку "на что". -привязывает к сокращению "что" строку "на что". + /unabbrev  -##### /unabbrev  -Удаляет сокращение. Форма использования: - + Удаляет сокращение. Форма использования: /unabbrev что - -удаляет сокращение "что". Аргумент "\*" представляет собой особую форму команды -— удаляются все имеющиеся сокращения. - -##### /listabbrevs  -Показывает текущие сокращения. - -Сокращения разворачиваются динамически при нажатии кнопки **space** после ввода -слова-сокращения. Например, если у нас есть сокращение для "днк", то если после -ввода слова "днк" вы введёте пробел, сокращение "днк" развернётся в -"дезоксирибонуклеиновая кислота". - -**Внимание:** чтобы подавить разворачивание, вводите **Shift-space**. - -Пример: + удаляет сокращение "что". Аргумент "\*" представляет собой особую форму команды — удаляются все имеющиеся сокращения. + + /listabbrevs  + + Показывает текущие сокращения. + +Сокращения разворачиваются динамически при нажатии кнопки space после ввода слова-сокращения. Например, если у нас есть сокращение для "днк", то если после ввода слова "днк" вы введёте пробел, сокращение "днк" развернётся в "дезоксирибонуклеиновая кислота". + +**Внимание:** чтобы подавить разворачивание, вводите Shift-space. + +Пример: /abbrev прив приветствую участников конференции! -(добавили сокращение "прив" с замещением "приветствую участников -конференции!"), далее используем его: +(добавили сокращение "прив" с замещением "приветствую участников конференции!"), далее используем его: хочу всем сказать: прив ^тут вводится пробел -в итоге имеем: +в итоге имеем: хочу всем сказать: приветствую участников конференции! -Сокращения сохраняются в базу данных Customize. Выполнен русский перевод -сообщений плагина. +Сокращения сохраняются в базу данных Customize. Выполнен русский перевод сообщений плагина. -Подробности смотрите в файле README. +Подробности смотрите в файле README. -**Полезный совет:** добавьте следующее сокращение: +**Полезный совет:** добавьте следующее сокращение: /abbrev аббрев /abbrev -По аналогии можно настряпать их целую кучу (следующие пишем, уже пользуясь только что вбитым сокращением): +По аналогии можно настряпать их целую кучу (следующие пишем, уже пользуясь только что вбитым сокращением): /abbrev ме /me /abbrev унаббрев /unabbrev /abbrev листаббр /listabbrevs /abbrev девойс /devoice -и так далее (многие плагины работают с помощью команд, которые не всегда вовремя вспоминаются; вот тут-то и пригодится "листаббр"!). Теперь нет нужды переключаться на английскую раскладку для набора команд :) - -Файл: [*Abbrev.zip*](../files/Abbrev.zip) (~6 кб) - -Автор: [**kostix**](Участник_Kostix.md) - -### Aniemoticons - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -Плагин для любителей анимированных смайликов. -![(!)](../images/Hammer.png) **Сделать:** Развить? - -### Attline - -![(!)](../images/Hammer.png) **Сделать:** Написать. - -### Ctcomp - -> _Внимание!_ Этот плагин вошёл в число официальных внешних плагинов Ткаббера и - находится в транке начиная с ревизии 1256 (7 октября 2007). Версия плагина в - транке была сильно переработана по сравнению с предыдущей версией (1.2). - -**Текущая версия** - -[**kostix**](Участник_Kostix.md) 7 октября 2007 (MSK): v2.0 (является копией версии в транке). - -**Назначение и принцип действия** - -Этот плагин — "Chat Text Completion" — реализует автозавершение слов, вводимых -в окне ввода чата, словами, имеющимися в окне протокола чата и в окне ввода -чата. - -Идея простая: в ходе общения в чат были помещены какие-то (сложные) слова, и -вам хочется воспроизвести одно из таких слов в своём сообщении. Слово есть в -окне протокола чата, но для того, чтобы его поместить в своё сообщение, -необходимо его скопировать в буфер обмена _при помощи мыши_ и затем вставить в -поле ввода чата. А данный плагин позволяет написать несколько первых букв -требуемого слова (минимум — одну) и затем комбинациями клавиш **Ctrl-n** и **Ctrl-p** -циклически "прокрутить" все подходящие под ваш ввод слова прямо "на месте", -выбрать нужное и продолжить редактирование. Кто знает, как работает -"completion" в insert mode текстового редактора [Vim](http://vim.sf.net), -поймёт откуда позаимствован принцип действия этого плагина и, вероятно, найдёт -привязки кнопок по умолчанию удобными. Жест из Emacs **Alt-/** также -поддерживается. - -Также можно вызвать меню со списком имеющихся дополнений слова. - -**Управление** - -Плагин переопределяет две стандартные привязки поля ввода чата (по умолчанию -отвечающие за помещение в поле ввода чата текста следующего/предыдущего -отосланного сообщения): - -* **Ctrl-n** — включает режим автодополнения слова, если он не включен и - показывает первый подходящий вариант; если режим уже работает, показывает - следующий вариант. Соответственно, последовательные нажатия этой комбинации - клавиш перебирают все возможные варианты, циклически. -* **Ctrl-p** — делает то же самое, что и предыдущая комбинация, только - перебирает варианты в обратном порядке. - -Эти комбинации являются основными. Возможно чередовать их использование, -произвольно перемещаясь по "кольцу" возможных вариантов дополнения введённых -букв слова. - -* **Escape** — отменяет режим автозавершения. Текущий вариант - автозавершения удаляется и поле ввода чата приводится в такое же состояние, - которое у него было до включения режима автозавершения. -* **Enter** — выбирает (подтверждает) текущий вариант автозавершения. - Курсор остаётся сразу за полученным словом. Действие этой клавиши по отсылке - сообщения "съедается" в данном режиме. -* **Alt-/** — полностью повторяет действие **Ctrl-n**; этот жест взят из Emacs. -* **Ctrl-Alt-/** — показывает меню с первыми 20 найденными дополнениями. - Активация элемента этого меню вставляет выбранное дополнение вместо исходного - слова. Щелчок мышью вне меню или нажатие клавиши **Escape** отменяют меню, - оставляя исходное слово без изменений. -* Любые клавиши или их комбинации из тех, что не указаны выше, нажатые при - активном режиме автозавершения (то есть когда показывается один из - предложенных вариантов завершения слова) прекращают режим автозавершения как - если бы была нажата клавиша **Enter**; при этом нажатая комбинация клавиш - передаётся окну ввода текста, например, если в режиме автозавершения был - нажат **BackSpace**, текущий вариант автозавершения будет принят, после чего - самый правый его символ будет удалён. - -**Пример** - -Имеем в окне протокола чата несколько слов, среди которых есть: "abbot", -"abridged", "abduction" и "abba". - -Вводим в поле ввода чата: +и так далее (многие плагины работают с помощью команд, которые не всегда вовремя вспоминаются; вот тут-то и пригодится "листаббр"!). Теперь нет нужды переключаться на английскую раскладку для набора команд :) + +Файл: [abbrev.zip](../files/Abbrev.zip) (~6 кб) + +Автор: [kostix](Участник_Kostix.md) + +## Aniemoticons + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + +Плагин для любителей анимированных смайликов. ![(!)](../images/Hammer.png) **Сделать:** Развить? + +## Attline + +![(!)](../images/Hammer.png) **Сделать:** Написать. + +## Ctcomp + + _Внимание!_ Этот плагин вошёл в число официальных внешних плагинов Ткаббера и находится в транке начиная с ревизии 1256 (7 октября 2007). Версия плагина в транке была сильно переработана по сравнению с предыдущей версией (1.2). + +**Текущая версия** + +[kostix](Участник_Kostix.md) 7 октября 2007 (MSK): v2.0 (является копией версии в транке). + +**Назначение и принцип действия** + +Этот плагин — "Chat Text Completion" — реализует автозавершение слов, вводимых в окне ввода чата, словами, имеющимися в окне протокола чата и в окне ввода чата. + +Идея простая: в ходе общения в чат были помещены какие-то (сложные) слова, и вам хочется воспроизвести одно из таких слов в своём сообщении. Слово есть в окне протокола чата, но для того, чтобы его поместить в своё сообщение, необходимо его скопировать в буфер обмена _при помощи мыши_ и затем вставить в поле ввода чата. А данный плагин позволяет написать несколько первых букв требуемого слова (минимум — одну) и затем комбинациями клавиш Ctrl-n и Ctrl-p циклически "прокрутить" все подходящие под ваш ввод слова прямо "на месте", выбрать нужное и продолжить редактирование. Кто знает, как работает "completion" в insert mode текстового редактора [Vim](http://vim.sf.net), поймёт откуда позаимствован принцип действия этого плагина и, вероятно, найдёт привязки кнопок по умолчанию удобными. Жест из Emacs Alt-/ также поддерживается. + +Также можно вызвать меню со списком имеющихся дополнений слова. + +**Управление** + +Плагин переопределяет две стандартные привязки поля ввода чата (по умолчанию отвечающие за помещение в поле ввода чата текста следующего/предыдущего отосланного сообщения): + +* Ctrl-n — включает режим автодополнения слова, если он не включен и показывает первый подходящий вариант; если режим уже работает, показывает следующий вариант. Соответственно, последовательные нажатия этой комбинации клавиш перебирают все возможные варианты, циклически. +* Ctrl-p — делает то же самое, что и предыдущая комбинация, только перебирает варианты в обратном порядке. + +Эти комбинации являются основными. Возможно чередовать их использование, произвольно перемещаясь по "кольцу" возможных вариантов дополнения введённых букв слова. + +* Escape — отменяет режим автозавершения. Текущий вариант автозавершения удаляется и поле ввода чата приводится в такое же состояние, которое у него было до включения режима автозавершения. +* Enter — выбирает (подтверждает) текущий вариант автозавершения. Курсор остаётся сразу за полученным словом. Действие этой клавиши по отсылке сообщения "съедается" в данном режиме. +* Alt-/ — полностью повторяет действие Ctrl-n; этот жест взят из Emacs. +* Ctrl-Alt-/ — показывает меню с первыми 20 найденными дополнениями. Активация элемента этого меню вставляет выбранное дополнение вместо исходного слова. Щелчок мышью вне меню или нажатие клавиши Escape отменяют меню, оставляя исходное слово без изменений. +* Любые клавиши или их комбинации из тех, что не указаны выше, нажатые при активном режиме автозавершения (то есть когда показывается один из предложенных вариантов завершения слова) прекращают режим автозавершения как если бы была нажата клавиша Enter; при этом нажатая комбинация клавиш передаётся окну ввода текста, например, если в режиме автозавершения был нажат BackSpace, текущий вариант автозавершения будет принят, после чего самый правый его символ будет удалён. + +**Пример** + +Имеем в окне протокола чата несколько слов, среди которых есть: "abbot", "abridged", "abduction" и "abba". + +Вводим в поле ввода чата: ab ^тут нажимаем Ctrl-n, Alt-/ или Ctrl-p -переходим в режим автодополнения, в котором Ткаббер будет показывать все слова, -начинающиеся с "ab" на месте введённого вами "ab"; дополненная часть слова -выделяется другим цветом фона: -
-abba
-abduction
-abot
-abridged
-...
-
-Значения в списке отсортированы; **Ctrl-n** и **Alt-/** перебирают значения в -порядке возрастания, **Ctrl-p** — в обратном порядке. - -Далее **Enter** для подтверждения использования текущего варианта, или **Escape** -для выхода из режима автодополнения (и возврата к исходному тексту: "ab"). - -Также можно было нажать **Ctrl-Alt-/** вместо **Ctrl-n** (и прочих) чтобы -получить меню со списком подходящих слов. - -**Проблемы** - -Указанные комбинации клавиш не будут работать на русской раскладке Windows в -силу [**печально известного бага Tk в Windows**](Wish_и_русская_раскладка_в_Windows.md). В -[README](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins/ctcomp/README) -описан костыль для этой проблемы (потребуется написать несколько строчек в -config.tcl. - -**Плагин** - -Большая просьба потестировать, если интересно, и не стесняться сообщать -багрепорты/пожелания. - -_Рекомендуется_ прочитать приложенный -[README](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins/ctcomp/README) -— там описаны доступные настройки плагина и вообще дано больше информации по -нему. - -Файл: [*Ctcomp.zip*](../files/Ctcomp.zip) (~9 кб) - -Автор: [**kostix**](Участник_Kostix.md) - -### Custom URLs - -![(!)](../images/Hammer.png) **Сделать:** Написать. - -### Floating Log - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -> _Внимание!_ Этот плагин вошёл в число официальных внешних плагинов Ткаббера и - находится в транке начиная с ревизии 1245 (6 октября 2007). - -Плагин показывает во всплывающих окнах приходящие сообщения и сообщения статуса. - -Файл: [*Floatinglog.zip*](../files/Floatinglog.zip) - -Текущая версия: 0.4 , 26-August-2007. - -Автор: [**archimed**](Участник_Archimed.md) - -### Floating Roster Contact - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -Proof-of-concept plugin. Позволяет "оторвать" элемент ростера в плавающее окно -без декораций. Перемещение этого окна по Drag'n'Drop. Плагин очень недоделанный -(окошки не запоминаются, при логауте не пропадают, на roster push не реагируют, -наверняка ещё чего-нибудь нужное не делают). - -* **Файл:** [float.tar.gz](http://sgolovan.nes.ru/jabber/tmp/float.tar.gz) (1K) - -[**Teo**](Участник_Teo.md) - -### Gmail Notifications - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -Если вы пользуетесь джаббер-аккаунтом на gmail.com, то этот плагин позволит вам -получать уведомления о почте, приходящей по вашему адресу. Плагин использует -расширение XMPP -[Gmail Notifications](http://code.google.com/apis/talk/jep_extensions/gmail.html). -Уведомления показываются в отдельном окне/вкладке. - -**Примечание:** Если вы не пользуетесь gmail.com в качестве Jabber-сервера, но -хотите получать уведомления о почтовых сообщениях, то этот плагин вам не -поможет. Вместо него можно использовать J2J-транспорт. Но помните, что владелец -J2J-транспорта может подсмотреть ваш пароль на gmail.com и читать вашу почту. -Оно вам надо? Подробнее можно почитать -[на странице проекта J2J](http://wiki.jrudevels.org/index.php/J2J). - -* **Файл:** [gmail-1.0.tar.gz](http://sgolovan.nes.ru/jabber/tmp/gmail-1.0.tar.gz) (3K) - -[**Teo**](Участник_Teo.md) - -### Histool - -> **Внимание!** начиная с 0.10.0-beta2 этот плагин интергирован в Ткаббер в - качестве встроенного средства (пункт главного меню **Службы → Разговоры**) и - дальше развивается там. Этот раздел будет убран через некоторое время. - -"History tool" — браузер истории чата. - -**Внимание!** Плагин предназначен для "новой системы логирования", появившейся -в альфа-версии начиная с релиза 841 (26 Декабря 2006), кроме того код плагина -был частично интегрирован в транк Ткаббера (и сам плагин туда собирается), так -что этот плагин работает только с Ткаббером начиная с релиза 1004 (04 Марта -2007). - -Этот плагин реализует окно, которое можно открыть через пункт главного меню -**Services → Plugins → Chat history**, предоставляющий несколько способов для -доступа ко всей истории чатов: - -* Список JID'ов, для которых есть логи чата; -* Дерево, отражающее структуру логов; -* Полнотекстовый поиск по логам (пока не реализован). - -Двойной клик на любом JID'е открывает стандартный диалог с логом чата для этого -JID'а. - -В списке джидов и дереве логов работает поиск (панель открывается по -`<>`, прибитому по умолчанию на **Ctrl-s**. - -**Баги/ограничения** текущей версии: - -* Код показа лога чата для JID'а в Ткаббере содержит ошибку: если вы - попытаетесь посмотреть лог общения в привате с некоторым поситителем комнаты - при том, что не будете в этот момент находиться в данной комнате, Ткаббер - покажет лог самой комнаты. (исправлено в релизе 987 (28 Февраля 2007). -* На некоторых джидах глючит открытие лога; механизм пока не выявлен. -* Полнотекстовый поиск не реализован. -* Есть мелкие проблемы с клавиатурным фокусом при переключении табов. -* README не дописан. - -Файл: [**Histool.zip**](../files/Histool.zip) (~8 кб) - -Текущая версия: 0.6, 04-Mar-2007. - -Автор: [**kostix**](Участник_Kostix.md) - -### Open URL - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -Добавляет в меню по правой кнопке на URL в окне чата пункты, позволяющие -открыть этот URL в заданном браузере. - -* **Файл:** [openurl.tar.gz](http://sgolovan.nes.ru/jabber/tmp/openurl.tar.gz) (1K) - -[**Teo**](Участник_Teo.md) - -### Presencecmd - -> _**Внимание!** Данный плагин без изменений добавлен в число официальных - внешних плагинов Ткаббера и находится в транке начиная с ревизии 1189 - (17 августа 2007)._ - -Добавляет две новые IRC-команды чата для управления присутствием (глобальным и -направленным). - -Примеры: +переходим в режим автодополнения, в котором Ткаббер будет показывать все слова, начинающиеся с "ab" на месте введённого вами "ab"; дополненная часть слова выделяется другим цветом фона: + + abba + abduction + abot + abridged + ... + +Значения в списке отсортированы; Ctrl-n и Alt-/ перебирают значения в порядке возрастания, Ctrl-p — в обратном порядке. + +Далее Enter для подтверждения использования текущего варианта, или Escape для выхода из режима автодополнения (и возврата к исходному тексту: "ab"). + +Также можно было нажать Ctrl-Alt-/ вместо Ctrl-n (и прочих) чтобы получить меню со списком подходящих слов. + +**Проблемы** + +Указанные комбинации клавиш не будут работать на русской раскладке Windows в силу [печально известного бага Tk в Windows](Wish_и_русская_раскладка_в_Windows.md). В [README](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins/ctcomp/README) описан костыль для этой проблемы (потребуется написать несколько строчек в config.tcl. + +**Плагин** + +Большая просьба потестировать, если интересно, и не стесняться сообщать багрепорты/пожелания. + +_Рекомендуется_ прочитать приложенный [README](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins/ctcomp/README) — там описаны доступные настройки плагина и вообще дано больше информации по нему. + +Файл: [ctcomp.zip](../files/Ctcomp.zip) (~9 кб) + +Автор: [kostix](Участник_Kostix.md) + +## Custom URLs + +![(!)](../images/Hammer.png) **Сделать:** Написать. + +## Floating Log + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + + _Внимание!_ Этот плагин вошёл в число официальных внешних плагинов Ткаббера и находится в транке начиная с ревизии 1245 (6 октября 2007). + +Плагин показывает во всплывающих окнах приходящие сообщения и сообщения статуса. + +Файл: [floatinglog.zip](../files/Floatinglog.zip) + +Текущая версия: 0.4 , 26-August-2007. + +Автор: [archimed](Участник_Archimed.md) + +## Floating Roster Contact + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + +Proof-of-concept plugin. Позволяет "оторвать" элемент ростера в плавающее окно без декораций. Перемещение этого окна по Drag'n'Drop. Плагин очень недоделанный (окошки не запоминаются, при логауте не пропадают, на roster push не реагируют, наверняка ещё чего-нибудь нужное не делают). + +* **Файл:** [float.tar.gz](http://sgolovan.nes.ru/jabber/tmp/float.tar.gz) (1K) + +[Teo](Участник_Teo.md) + +## Gmail Notifications + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + +Если вы пользуетесь джаббер-аккаунтом на gmail.com, то этот плагин позволит вам получать уведомления о почте, приходящей по вашему адресу. Плагин использует расширение XMPP [Gmail Notifications](http://code.google.com/apis/talk/jep_extensions/gmail.html). Уведомления показываются в отдельном окне/вкладке. + +**Примечание:** Если вы не пользуетесь gmail.com в качестве Jabber-сервера, но хотите получать уведомления о почтовых сообщениях, то этот плагин вам не поможет. Вместо него можно использовать J2J-транспорт. Но помните, что владелец J2J-транспорта может подсмотреть ваш пароль на gmail.com и читать вашу почту. Оно вам надо? Подробнее можно почитать [на странице проекта J2J](http://wiki.jrudevels.org/index.php/J2J). + +* **Файл:** [gmail-1.0.tar.gz](http://sgolovan.nes.ru/jabber/tmp/gmail-1.0.tar.gz) (3K) + +[Teo](Участник_Teo.md) + +## Histool + + **Внимание!** начиная с 0.10.0-beta2 этот плагин интергирован в Ткаббер в качестве встроенного средства (пункт главного меню **Службы → Разговоры**) и дальше развивается там. Этот раздел будет убран через некоторое время. + +"History tool" — браузер истории чата. + +**Внимание!** Плагин предназначен для "новой системы логирования", появившейся в альфа-версии начиная с релиза 841 (26 Декабря 2006), кроме того код плагина был частично интегрирован в транк Ткаббера (и сам плагин туда собирается), так что этот плагин работает только с Ткаббером начиная с релиза 1004 (04 Марта 2007). + +Этот плагин реализует окно, которое можно открыть через пункт главного меню **Services → Plugins → Chat history**, предоставляющий несколько способов для доступа ко всей истории чатов: + +* Список JID'ов, для которых есть логи чата; +* Дерево, отражающее структуру логов; +* Полнотекстовый поиск по логам (пока не реализован). + +Двойной клик на любом JID'е открывает стандартный диалог с логом чата для этого JID'а. + +В списке джидов и дереве логов работает поиск (панель открывается по `<>`, прибитому по умолчанию на Ctrl-s. + +**Баги/ограничения** текущей версии: + +* Код показа лога чата для JID'а в Ткаббере содержит ошибку: если вы попытаетесь посмотреть лог общения в привате с некоторым поситителем комнаты при том, что не будете в этот момент находиться в данной комнате, Ткаббер покажет лог самой комнаты. (исправлено в релизе 987 (28 Февраля 2007). +* На некоторых джидах глючит открытие лога; механизм пока не выявлен. +* Полнотекстовый поиск не реализован. +* Есть мелкие проблемы с клавиатурным фокусом при переключении табов. +* README не дописан. + +Файл: [histool.zip](../files/Histool.zip) (~8 кб) + +Текущая версия: 0.6, 04-Mar-2007. + +Автор: [kostix](Участник_Kostix.md) + +## Open URL + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + +Добавляет в меню по правой кнопке на URL в окне чата пункты, позволяющие открыть этот URL в заданном браузере. + +* **Файл:** [openurl.tar.gz](http://sgolovan.nes.ru/jabber/tmp/openurl.tar.gz) (1K) + +[Teo](Участник_Teo.md) + +## Presencecmd + + _**Внимание!** Данный плагин без изменений добавлен в число официальных внешних плагинов Ткаббера и находится в транке начиная с ревизии 1189 (17 августа 2007)._ + +Добавляет две новые IRC-команды чата для управления присутствием (глобальным и направленным). + +Примеры: /presence dnd /presence chat Hey girls! @@ -716,1592 +474,1134 @@ Now read this! /chatpresence xa Gone shopping -Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/presencecmd/README). +Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/presencecmd/README). -Файл: [*Presencecmd.zip*](../files/Presencecmd.zip) (~6k) +Файл: [presencecmd.zip](../files/Presencecmd.zip) (~6k) -Текущая версия: 0.2, 14-July-2007. +Текущая версия: 0.2, 14-July-2007. http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/presencecmd -Автор: [**kostix**](Участник_Kostix.md) - -### Quote Last Message (quotelastmsg) - -Копирует в поле редактирования последнее сообщение из чата и прибавляет к нему -угловые скобки (признак цитирования). Хоткей — **Alt-Q** Если это сочетание уже -занято, вы можете перебиндить его в конфиге. Например, так, как об этом -рассказано в README, который лежит в папке с плагином: +Автор: [kostix](Участник_Kostix.md) + +## Quote Last Message (quotelastmsg) + +Копирует в поле редактирования последнее сообщение из чата и прибавляет к нему угловые скобки (признак цитирования). Хоткей — Alt-Q Если это сочетание уже занято, вы можете перебиндить его в конфиге. Например, так, как об этом рассказано в README, который лежит в папке с плагином: event delete <> event delete <> event add <> -Кстати, с помощью этого плагина удобно редактировать обширный топик. - -### Receipts - -![(!)](../images/Hammer.png) **Сделать:** Написать. - -### Recentstatus - -> _Внимание!_ Плагин интергирован в виде _встроенного_ средства начиная со - стабильной версии [0.11.0](http://tkabber.jabber.ru/node/464), поэтому плагин - следует использовать только на версиях \<= 0.10.0. Если вы "апгрейдитесь" на - 0.11.0 с более старой версии, проверьте — не установлен ли у вас этот плагин; - если установлен, обязательно удалите его, в противном случае это может - привести к мистическим глюкам. - -Плагин меняет штатный виджет Ткаббера для вода "статусного сообщения" (справа -от кнопки, открывающий меню состояний доступности) на комбобокс, который хранит -историю последних установленных статусных сообщений. Каждое установленное -пользователем статусное сообщение записывается в историю. История сохраняется -между перезапусками Ткаббера. Возможно настроить максимальную длину истории. - -**Примечание:** В репозитории tkabber-3rd-party его уже нет. Если вам по -каким-то причинам нужна старая версия, трясите автора ;) - -Автор: [**kostix**](Участник_Kostix.md) - -### Singularity - -![(!)](../images/Hammer.png) **Сделать:** Написать. - -### Stripes +Кстати, с помощью этого плагина удобно редактировать обширный топик. + +## Receipts + +![(!)](../images/Hammer.png) **Сделать:** Написать. + +## Recentstatus + + _Внимание!_ Плагин интергирован в виде _встроенного_ средства начиная со стабильной версии [0.11.0](http://tkabber.jabber.ru/node/464), поэтому плагин следует использовать только на версиях \<= 0.10.0. Если вы "апгрейдитесь" на 0.11.0 с более старой версии, проверьте — не установлен ли у вас этот плагин; если установлен, обязательно удалите его, в противном случае это может привести к мистическим глюкам. + +Плагин меняет штатный виджет Ткаббера для вода "статусного сообщения" (справа от кнопки, открывающий меню состояний доступности) на комбобокс, который хранит историю последних установленных статусных сообщений. Каждое установленное пользователем статусное сообщение записывается в историю. История сохраняется между перезапусками Ткаббера. Возможно настроить максимальную длину истории. + +**Примечание:** В репозитории tkabber-3rd-party его уже нет. Если вам по каким-то причинам нужна старая версия, трясите автора ;) + +Автор: [kostix](Участник_Kostix.md) + +## Singularity + +![(!)](../images/Hammer.png) **Сделать:** Написать. + +## Stripes ![](../images/180px-Stripes.png) + +![](../images/magnify-clip.png) ![](../images/180px-Dark-stripes.png) -> **Внимание!** Этот плагин включён в транк начиная с версии 0.11.1. При этом в - нём был исправлен баг, указанный ниже. +![](../images/magnify-clip.png) -Этот плагин позволяет раскрашивать фон целых нечётных и/или чётных сообщений в -окне чата. Поддерживается раздельная установка цвета фона для чётных и нечётных -сообщений через базу опций Tk (Tk option database) или XRDB, например, так: + **Внимание!** Этот плагин включён в транк начиная с версии 0.11.1. При этом в нём был исправлен баг, указанный ниже. + +Этот плагин позволяет раскрашивать фон целых нечётных и/или чётных сообщений в окне чата. Поддерживается раздельная установка цвета фона для чётных и нечётных сообщений через базу опций Tk (Tk option database) или XRDB, например, так: option add *Chat.oddBackground gray77 option add *Chat.evenBackground gray84 -Если цвет для соотв. типа сообщений не задан, он не устанавливается (остаётся -тем, который используется по умолчанию). - -Настройки цветов должны идти либо в **preload\_hook**, либо быть "на верхнем -уровне" (вне хуков). - -С подбором цветов поможет [**эта статья**](Палитра_цветов.md). - -**Внимание!** плагин имеет баг, связанный с невозможностью (в плагине) узнать -момент окончания отрисовки сообщения: при поступлении нового сообщения в окно -чата плагин раскрашивает _предыдущее_ сообщение, а не текущее. Это приводит к -тому, что последнее сообщение, помещённое в окно чата не будет раскрашено до -поступления следующего сообщения. (Если у кого-то есть идеи как это обойти — -пишите автору.) - -Файл: [*Stripes.zip*](../files/Stripes.zip) (~1.5 кб) - -Текущая версия: 0.1, 07-Mar-2007. - -Автор: [**kostix**](Участник_Kostix.md) - -### Tclchat - -![(!)](../images/Hammer.png) **Сделать:** Написать. - -### Tkabber-KHIM - -> _Внимание!_ С 13 декабря 2006 этот плагин находится в транке, так что если вы - используете версию с SVN, не заморачивайтесь и снимите его оттуда. Тем более, - что версия плагина в транке уже получила несколько изменений, недоступных в - выложенной здесь версии. (Изменения, впрочем, не принципиальные, так что если - у Вас стабильная версия Ткаббера, возьмите плагин отсюда.) - -Этот плагин прикручивает к Ткабберу особый "как бы метод ввода" авторства -[Кевина Кенни](http://wiki.tcl.tk/kbk) — [KHIM](http://wiki.tcl.tk/16343), -позволяя вводить в Ткаббере произвольные символы Unicode значительно более -удобным способом, чем при помощи встроенного механизма -[**"unisymbols"**](Ткаббер_ЧаВо.md#Ввод_хитрых_юникодных_символов): - -* Можно определить особую "кнопку композиции" — например, **Pause**, и список - "входных последовательностей" — пар символов, которые, будучи введены после - нажатия кнопки композиции, "превращаются" в некоторый символ Unicode. Клавиша - композиции, входные последовательности и их отображение на символы Unicode - настраиваются произвольным образом. -* Двойным нажатием упомянутой клавиши композиции можно вызвать специальное - окно, предоставляющее возможность выбрать любой символ Unicode, который будет - вставлен в текущую позицию курсора. - -Примерно это выглядит так: - -* В настройках KHIM вы выбрали клавишу **Scroll\_Lock** в качестве клавиши - композиции, и определили, что последовательность символов **"A** даёт "А - умляут" — Ä. -* Тогда после применения настроек вы можете в любом поле ввода Ткаббера - ввести: **Scroll\_Lock**`"A` и получить Ä. - -После установки плагина и перезапуска Ткаббера посетите меню **Службы → -Расширения** и выберите там пункт "KHIM Options". _Обязательно_ прочтите -справку по работе и настройке KHIM, нажав "Справка..." в появившемся диалоге. - -Пакеты **khim** и **autoscroll**, необходимые для работы Ткаббера, но имеющиеся -только в **tklib**, упакованы прямо в плагин, т.к. **tklib** не очень -распространён, и в текущую стабильную его версию **khim** ещё не входит. - -Плагин должен работать на любой версии Ткаббера, так что приветствуется -тестирование на любых доступных версиях. - -**Пара полезных советов:** Помните, что KHIM включен по умолчанию, то есть -чисто теоретически в настройки ходить не обязательно (в случае, если пакет вам -уже знаком). Но конечно, если вы видите его впервые, сходить туда имеет смысл: -ознакомиться с "прошитыми" комбинациями и, в случае нужды, дополнить и/или -измененить список, ну и почитать справку. После завершения работы с опциями -окно можно закрыть (но можно и оставить, чтобы иметь комбинации перед глазами). -В некоторых европейских раскладках (в частности, в испанской) некоторые -дефолтные комбинации могут не работать. Например, буква "энье" — n, вводящаяся -по умолчанию как **Pause**`~n` — из-за тильды, которая сама по себе висит на -сочетании клавиш "RightAlt-4" и портит весь пирог. Ввод этой буквы можно легко -перевесить на другое сочетание, к примеру, "$n" (доллар вызывается как обычно, -"Shift-4", и проблем не вызывает). Так что если у вас установлен нетрадиционный -дополнительный язык, и вы испытываете трудности с вводом некоторых букв, всё -можно легко поправить. Не бойтесь обновлять плагин — все ваши изменения -сохраняются в файле **~/.tkabber/custom.tcl**, и останутся там даже после -удаления самого плагина. - -Это — предварительная версия плагина, что означает отсутствие документации. - -Файл: [*Tkabber-khim.zip*](../files/Tkabber-khim.zip) - -Автор: [**Kostix**](Участник_Kostix.md) - -Версия: 1.2 - -Размер файла: ~34k - -**Примечание:** если у вас в системе есть свежий **tklib**, то вы можете -удалить подкаталоги **khim** и **autoscroll** из каталога с плагином. Про то, -как снять **tklib** с CVS и поставить его в систему, рассказано -[**здесь**](Установка_tklib_в__nix.md). Имейте в виду, что KHIM вошёл в состав -tklib совсем недавно, и текущая стабильная версия (на 9 декабря 2006 года) его -не содержит — берите с CVS. - -**Однако** имейте в виду, что в той версии **khim**, что идёт с плагином, уже -имеется один багфикс и русский перевод всех окон KHIM. Этого пока нет в -**tklib**. - -### Unixkeys - -> _Внимание!_ Плагин интергирован в виде стандартного внешнего плагина начиная - со стабильной версии [0.11.0](http://tkabber.jabber.ru/node/464). В транке - плагин был доработан: его функциональность была расширена на все поля ввода, - включая однострочные и комбобоксы, а жест **Ctrl-\\** заменён на **Ctrl-/**. - -Плагин приделывает ко всем многострочным полям ввода в Ткаббере (включая поля -ввода сообщений чатов) комбинации клавиш, традиционные для средств -редактирования в Unix. Фактически, в плагин "завёрнута" функциональность, -описанная -[**здесь**](Нетривиальные_настройки.md#Комбинации_кнопок_а-ля_Unix_shell_в_текстовых_виджетах) -(главное отличие — в плагине реализован жест **Ctrl-\\**, означающий "выделить -всё"). - -Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/unixkeys/README). +Если цвет для соотв. типа сообщений не задан, он не устанавливается (остаётся тем, который используется по умолчанию). + +Настройки цветов должны идти либо в **preload\_hook**, либо быть "на верхнем уровне" (вне хуков). + +С подбором цветов поможет [эта статья](Палитра_цветов.md). + +**Внимание!** плагин имеет баг, связанный с невозможностью (в плагине) узнать момент окончания отрисовки сообщения: при поступлении нового сообщения в окно чата плагин раскрашивает _предыдущее_ сообщение, а не текущее. Это приводит к тому, что последнее сообщение, помещённое в окно чата не будет раскрашено до поступления следующего сообщения. (Если у кого-то есть идеи как это обойти — пишите автору.) + +Файл: [stripes.zip](../files/Stripes.zip) (~1.5 кб) + +Текущая версия: 0.1, 07-Mar-2007. + +Автор: [kostix](Участник_Kostix.md) + +## Tclchat + +![(!)](../images/Hammer.png) **Сделать:** Написать. + +## Tkabber-KHIM + + _Внимание!_ С 13 декабря 2006 этот плагин находится в транке, так что если вы используете версию с SVN, не заморачивайтесь и снимите его оттуда. Тем более, что версия плагина в транке уже получила несколько изменений, недоступных в выложенной здесь версии. (Изменения, впрочем, не принципиальные, так что если у Вас стабильная версия Ткаббера, возьмите плагин отсюда.) + +Этот плагин прикручивает к Ткабберу особый "как бы метод ввода" авторства [Кевина Кенни](http://wiki.tcl.tk/kbk) — [KHIM](http://wiki.tcl.tk/16343), позволяя вводить в Ткаббере произвольные символы Unicode значительно более удобным способом, чем при помощи встроенного механизма ["unisymbols"](Ткаббер_ЧаВо.md#Ввод_хитрых_юникодных_символов): + +* Можно определить особую "кнопку композиции" — например, Pause, и список "входных последовательностей" — пар символов, которые, будучи введены после нажатия кнопки композиции, "превращаются" в некоторый символ Unicode. Клавиша композиции, входные последовательности и их отображение на символы Unicode настраиваются произвольным образом. +* Двойным нажатием упомянутой клавиши композиции можно вызвать специальное окно, предоставляющее возможность выбрать любой символ Unicode, который будет вставлен в текущую позицию курсора. + +Примерно это выглядит так: + +* В настройках KHIM вы выбрали клавишу Scroll\_Lock в качестве клавиши композиции, и определили, что последовательность символов **"A** даёт "А умляут" — Ä. +* Тогда после применения настроек вы можете в любом поле ввода Ткаббера ввести: Scroll\_Lock`"A` и получить Ä. + +После установки плагина и перезапуска Ткаббера посетите меню **Службы → Расширения** и выберите там пункт "KHIM Options". _Обязательно_ прочтите справку по работе и настройке KHIM, нажав "Справка..." в появившемся диалоге. + +Пакеты **khim** и **autoscroll**, необходимые для работы Ткаббера, но имеющиеся только в **tklib**, упакованы прямо в плагин, т.к. **tklib** не очень распространён, и в текущую стабильную его версию **khim** ещё не входит. + +Плагин должен работать на любой версии Ткаббера, так что приветствуется тестирование на любых доступных версиях. + +**Пара полезных советов:** Помните, что KHIM включен по умолчанию, то есть чисто теоретически в настройки ходить не обязательно (в случае, если пакет вам уже знаком). Но конечно, если вы видите его впервые, сходить туда имеет смысл: ознакомиться с "прошитыми" комбинациями и, в случае нужды, дополнить и/или измененить список, ну и почитать справку. После завершения работы с опциями окно можно закрыть (но можно и оставить, чтобы иметь комбинации перед глазами). В некоторых европейских раскладках (в частности, в испанской) некоторые дефолтные комбинации могут не работать. Например, буква "энье" — n, вводящаяся по умолчанию как Pause`~n` — из-за тильды, которая сама по себе висит на сочетании клавиш "RightAlt-4" и портит весь пирог. Ввод этой буквы можно легко перевесить на другое сочетание, к примеру, "$n" (доллар вызывается как обычно, "Shift-4", и проблем не вызывает). Так что если у вас установлен нетрадиционный дополнительный язык, и вы испытываете трудности с вводом некоторых букв, всё можно легко поправить. Не бойтесь обновлять плагин — все ваши изменения сохраняются в файле **~/.tkabber/custom.tcl**, и останутся там даже после удаления самого плагина. + +Это — предварительная версия плагина, что означает отсутствие документации. + +Файл: [tkabber-khim.zip](../files/Tkabber-khim.zip) + +Автор: [Kostix](Участник_Kostix.md) + +Версия: 1.2 + +Размер файла: ~34k + +**Примечание:** если у вас в системе есть свежий **tklib**, то вы можете удалить подкаталоги **khim** и **autoscroll** из каталога с плагином. Про то, как снять **tklib** с CVS и поставить его в систему, рассказано [здесь](Установка_tklib_в__nix.md). Имейте в виду, что KHIM вошёл в состав tklib совсем недавно, и текущая стабильная версия (на 9 декабря 2006 года) его не содержит — берите с CVS. + +**Однако** имейте в виду, что в той версии **khim**, что идёт с плагином, уже имеется один багфикс и русский перевод всех окон KHIM. Этого пока нет в **tklib**. + +## Unixkeys + + _Внимание!_ Плагин интергирован в виде стандартного внешнего плагина начиная со стабильной версии [0.11.0](http://tkabber.jabber.ru/node/464). В транке плагин был доработан: его функциональность была расширена на все поля ввода, включая однострочные и комбобоксы, а жест Ctrl-\\ заменён на Ctrl-/. + +Плагин приделывает ко всем многострочным полям ввода в Ткаббере (включая поля ввода сообщений чатов) комбинации клавиш, традиционные для средств редактирования в Unix. Фактически, в плагин "завёрнута" функциональность, описанная [здесь](Нетривиальные_настройки.md#Комбинации_кнопок_а-ля_Unix_shell_в_текстовых_виджетах) (главное отличие — в плагине реализован жест Ctrl-\\, означающий "выделить всё"). + +Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/unixkeys/README). http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/unixkeys -Автор: [**kostix**](Участник_Kostix.md) - -## Полуофициальные плагины для Ткаббера -Здесь ссылки на плагины для Ткаббера, которые не попали в tkabber-plugins, но -их авторы не поленились получить доступ к репозиторию -[tkabber-3rd-party](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins) и -выложили свои творения туда. Скачать их можно командой - +Автор: [kostix](Участник_Kostix.md) + +# Полуофициальные плагины для Ткаббера +Здесь ссылки на плагины для Ткаббера, которые не попали в tkabber-plugins, но их авторы не поленились получить доступ к репозиторию [tkabber-3rd-party](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins) и выложили свои творения туда. Скачать их можно командой +` svn co http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins ~/tkabber-3rd-party-plugins - -### Alarm - -> _Внимание!_ версия этого плагина, доступная в виде архива по ссылке, - перестала работать после очередного изменения внутреннего API обработки - IQ-запросов в Ткаббере; исправленная версия доступна _только_ в "левом" - репозитории (см. ниже). - -Возможность послать собеседнику сигнал. Вид сигнала (звук, сообщение, запись в -чате) выбирает собеседник. Есть фильтр и защита от флуда. Идея -[отсюда](http://forum.jrudevels.org/viewtopic.php?p=546#546) продолжение -[здесь](http://forum.jrudevels.org/viewtopic.php?t=1006). Разработан протокол, -описание внутри. Все ошибки и запросы присылайте [**Feez**](Участник_Feez.md). - -* **Файл:** [*Alarm-0.3.tar.gz*](../files/Alarm-0.3.tar.gz) (15K) -* **Версия:** 0.3 [**Changelog**](Plugins/Alarm/Changelog.md) - -Исправленная версия, работающая на альфах 0.10.1 и выше доступна в репозитории: +` +## Alarm + + _Внимание!_ версия этого плагина, доступная в виде архива по ссылке, перестала работать после очередного изменения внутреннего API обработки IQ-запросов в Ткаббере; исправленная версия доступна _только_ в "левом" репозитории (см. ниже). + +Возможность послать собеседнику сигнал. Вид сигнала (звук, сообщение, запись в чате) выбирает собеседник. Есть фильтр и защита от флуда. Идея [отсюда](http://forum.jrudevels.org/viewtopic.php?p=546#546) продолжение [здесь](http://forum.jrudevels.org/viewtopic.php?t=1006). Разработан протокол, описание внутри. Все ошибки и запросы присылайте [Feez](Участник_Feez.md). + +* **Файл:** [Alarm-0.3.tar.gz](../files/Alarm-0.3.tar.gz) (15K) +* **Версия:** 0.3 [Changelog](Plugins/Alarm/Changelog.md) + +Исправленная версия, работающая на альфах 0.10.1 и выше доступна в репозитории: https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/alarm -### Antispam - -Плагин для борьбы со спамом. Скрывает от пользователя сообщения от неизвестных -контактов, запрашивает у отправителя пароль для прекращения блокировки его -сообщений. - -Известная проблема: оффлайновые сообщения не блокируются, если отключение -произошло до загрузки ростера. +## Antispam + +Плагин для борьбы со спамом. Скрывает от пользователя сообщения от неизвестных контактов, запрашивает у отправителя пароль для прекращения блокировки его сообщений. + +Известная проблема: оффлайновые сообщения не блокируются, если отключение произошло до загрузки ростера. Плагин доступен в репозитории по адресу -[https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/antispam](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/antispam) -Подробности — в [README](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/antispam/README). - -Автор: [**Gebb**](Участник_Gebb.md). - -### Autoanswer - -Автоответчик. Позволяет автоматически посылать пользователю, написавшему вам -личное сообщение (или "в приват" конференции), пока вы находитесь в -"недоступном" состоянии (список таковых поддаётся настройке), некоторое -заготовленное сообщение, например, "Я занят, перезвоните попозже!" ©. Таким -образом, плагин удобен для борьбы с людьми, которые не умеют или не хотят -понимать, что означает ваш текущий статус. - -Автоответчик можно быстро включать/отключать с помощью соответствующей иконки -на тулбаре. - -> Имейте в виду, что если вы пользуетесь "автоэвеем", _настоятельно_ - рекомендуется исключить из состояний, в которых включается автоответчик, - "away" и "xa", оставив только "dnd". Впрочем, плагин в этом плане не очень - назойлив. Он отсылает автоответ только на первое сообщение и дальше уже - помалкивает. При желании число автоответов можно изменить в коде. - -Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/autoanswer/README). + [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/antispam](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/antispam) +Подробности — в [README](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/antispam/README). + +Автор: [Gebb](Участник_Gebb.md). + +## Autoanswer + +Автоответчик. Позволяет автоматически посылать пользователю, написавшему вам личное сообщение (или "в приват" конференции), пока вы находитесь в "недоступном" состоянии (список таковых поддаётся настройке), некоторое заготовленное сообщение, например, "Я занят, перезвоните попозже!" ©. Таким образом, плагин удобен для борьбы с людьми, которые не умеют или не хотят понимать, что означает ваш текущий статус. + +Автоответчик можно быстро включать/отключать с помощью соответствующей иконки на тулбаре. + + Имейте в виду, что если вы пользуетесь "автоэвеем", _настоятельно_ рекомендуется исключить из состояний, в которых включается автоответчик, "away" и "xa", оставив только "dnd". Впрочем, плагин в этом плане не очень назойлив. Он отсылает автоответ только на первое сообщение и дальше уже помалкивает. При желании число автоответов можно изменить в коде. + +Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/autoanswer/README). http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/autoanswer -Авторы: [**Gebb**](Участник_Gebb.md), [**kostix**](Участник_Kostix.md). Иконки сделал [**ART**](Участник_ART.md). - -### Autosubscribe - -![(!)](../images/Hammer.png) **Сделать:** Написать. - -### Bldjid - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -Мощный плагин в помощь админам, позволяющий банить и разбанивать пользователей -по их джидам во всех комнатах, где у вас есть админские права. Кроме этого, -позволяет мониторить заходы пользователей в комнаты (можно задать список -интересующих) даже при выключенной опции `::muc::options(gen_enter_exit_msgs)`. -При этом собирается следующая информация: время захода, ник, реальный джид с -ресурсом (при наличии у вас соответствующих прав в комнате), роль/ранг, версия -клиента и ОС. Эта информация доступна не только во время текущей сессии, но и -записывается в лог, откуда её можно выудить при поиске, что позволяет -отслеживать долгосрочную историю заходов посетителей. Поиск возможен по нику, -джиду, роли/рангу, версии, при этом можно совмещать несколько параметров в -одном поисковом запросе. Кроме того, в плагине имеются команды, дающие -возможность проверить, находится ли искомый джид в списке членов или в чёрном -списке комнаты. Также можно включить "шпиона", уведомляющего о заходе в -контролируемые комнаты нужного вам человека (указав его джид). Есть и -возможность кардинальной чистки бан-листа как целиком, так и указав причину -бана, что помогает разбанивать сонмы товарищей, забаненных ботом (естественно, -если бот указывал определённую причину). - -Описывать каждую команду здесь не имеет смысла, поэтому дальнейшее знакомство с -плагином лучше продолжить -[здесь](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid/README.ru) - -Также имеет смысл напомнить, что следующая команда выведет примеры -использования всех команд, задействованных в плагине: +Авторы: [Gebb](Участник_Gebb.md), [kostix](Участник_Kostix.md). Иконки сделал [ART](Участник_ART.md). + +## Autosubscribe + +![(!)](../images/Hammer.png) **Сделать:** Написать. + +## Bldjid + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + +Мощный плагин в помощь админам, позволяющий банить и разбанивать пользователей по их джидам во всех комнатах, где у вас есть админские права. Кроме этого, позволяет мониторить заходы пользователей в комнаты (можно задать список интересующих) даже при выключенной опции `::muc::options(gen_enter_exit_msgs)`. При этом собирается следующая информация: время захода, ник, реальный джид с ресурсом (при наличии у вас соответствующих прав в комнате), роль/ранг, версия клиента и ОС. Эта информация доступна не только во время текущей сессии, но и записывается в лог, откуда её можно выудить при поиске, что позволяет отслеживать долгосрочную историю заходов посетителей. Поиск возможен по нику, джиду, роли/рангу, версии, при этом можно совмещать несколько параметров в одном поисковом запросе. Кроме того, в плагине имеются команды, дающие возможность проверить, находится ли искомый джид в списке членов или в чёрном списке комнаты. Также можно включить "шпиона", уведомляющего о заходе в контролируемые комнаты нужного вам человека (указав его джид). Есть и возможность кардинальной чистки бан-листа как целиком, так и указав причину бана, что помогает разбанивать сонмы товарищей, забаненных ботом (естественно, если бот указывал определённую причину). + +Описывать каждую команду здесь не имеет смысла, поэтому дальнейшее знакомство с плагином лучше продолжить [здесь](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid/README.ru) + +Также имеет смысл напомнить, что следующая команда выведет примеры использования всех команд, задействованных в плагине: /bldhelp -**Известные проблемы:** - -* Плагин не работает со стабильной версией Ткаббера 0.11.1 — только с SVN-версией. - Впрочем, скоро SVN-версия сама станет стабильной ;) -* Если изменить размер окна ввода сообщения, пока окошко монитора закрыто, - монитор перестаёт открываться (если сделать то же самое при открытом - мониторе, проблем нет). Впрочем, это лечится закрыванием окна комнаты и новым - в неё входом. - -Скачать плагин можно по адресу: -[https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid) - -[**ycbl**](Участник_Bigote.md) 03:32, 29 марта 2010 (MSD) - -### Customstatus - -Плагин позволяет управлять набором пар «статус присутствия "доступен"/текстовое -описание», позволяя делать предустановки для различных статусов присутствия. -Это позволяет быстро устанавливать статус с заранее заданным текстовым -описанием. Набор статусов/описаний доступен в виде меню, привязанного к новой -кнопке тулбара. В этом же меню имеется пункт, вызывающий редактор набора -статусов. - -Набор статусов сохраняется при помощи стандартного механизма Customize. - -Продвинутые пользователи могут попробовать задействовать дополнительные -настройки. Пока что их можно править только напрямую в файле плагина. За -настройки отвечает массив **options**: +**Известные проблемы:** + +* Плагин не работает со стабильной версией Ткаббера 0.11.1 — только с SVN-версией. Впрочем, скоро SVN-версия сама станет стабильной ;) +* Если изменить размер окна ввода сообщения, пока окошко монитора закрыто, монитор перестаёт открываться (если сделать то же самое при открытом мониторе, проблем нет). Впрочем, это лечится закрыванием окна комнаты и новым в неё входом. + +Скачать плагин можно по адресу: + + [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid) + [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid) + +[ycbl](Участник_Bigote.md) 03:32, 29 марта 2010 (MSD) + +## Customstatus + +Плагин позволяет управлять набором пар «статус присутствия "доступен"/текстовое описание», позволяя делать предустановки для различных статусов присутствия. Это позволяет быстро устанавливать статус с заранее заданным текстовым описанием. Набор статусов/описаний доступен в виде меню, привязанного к новой кнопке тулбара. В этом же меню имеется пункт, вызывающий редактор набора статусов. + +Набор статусов сохраняется при помощи стандартного механизма Customize. + +Продвинутые пользователи могут попробовать задействовать дополнительные настройки. Пока что их можно править только напрямую в файле плагина. За настройки отвечает массив **options**: variable options array set options { - subvert_main_presets_menu no - subvert_quick_presets_menu no - add_toolbar_item yes - toolbar_item_image services/icq/chat - accelerate_menus no - extend_quick_presets_panel yes - quick_presets_panel_image services/icq/chat - } - -Разъяснение настроек: - -##### subvert\_main\_presets\_menu  -> Заменяет меню "Присутствие" в главном меню Ткаббера на то, которое - предоставляет этот плагин. - -##### subvert\_quick\_presets\_menu  -> то же самое для "быстрого" меню статусов (на "Панели присутствия/статуса"). - -##### add\_toolbar\_item  -> Управляет добавлением на тулбар кнопки, нажатие на которую показывает меню - статусов. Это — поведение плагина по умолчанию. - -##### toolbar\_item\_image  -> Устанавливает имя загруженной картинки для кнопки на тулбаре. Список - доступных картинок можно получить, выполнив в консоли Ткаббера команду - "`image names`". - -##### accelerate\_menus  -> Если включена, при формировании меню предустановок первые девять опций меню - предваряются префиксами "1.", "2." и т.д., которые являются акселераторами и - могут быть активированы нажатием соотв. клавиши **1**, **2** и т.д., когда меню - открыто. Это может быть полезно, если сам вызов меню предустановок повешен на - комбинацию клавиш, например, таким кодом в файле конфигурации: - - hook::add finload_hook { - bind . { - tk_popup .presence.button.custom_menu [winfo pointerx .] [winfo pointery .] - } - } - -##### extend\_quick\_presets\_panel  -> Добавляет кнопку, аналогичную таковой на тулбаре, справа от кнопки выбора - присутствия на "Панели присутствия/статуса". - -##### quick\_presets\_panel\_image  -> Устанавливает картинку для этой кнопки. - -**Ухищрения:** - -* В полях ввода сообщений для статусов в окне редактора предустановок работают - комбинации клавиш **Ctrl-↑** и **Ctrl-↓**, которые перемещают активный элемент списка - вверх и вниз, соответственно. - -**Основные недоработки/баги:** - -* "Продвинутые" настройки нельзя установить из файла конфигурации. - -Приветствуется самое широкое тестирование. Багрепорты и пожелания шлите автору. - -Файл: [**Customstatus.zip**](../files/Customstatus.zip) (~7кБ) - -Версия: 0.6, 06-Mar-2007 + subvert_main_presets_menu no + subvert_quick_presets_menu no + add_toolbar_item yes + toolbar_item_image services/icq/chat + accelerate_menus no + extend_quick_presets_panel yes + quick_presets_panel_image services/icq/chat + } + +Разъяснение настроек: + + subvert\_main\_presets\_menu  + + Заменяет меню "Присутствие" в главном меню Ткаббера на то, которое предоставляет этот плагин. + + subvert\_quick\_presets\_menu  + + то же самое для "быстрого" меню статусов (на "Панели присутствия/статуса"). + + add\_toolbar\_item  + + Управляет добавлением на тулбар кнопки, нажатие на которую показывает меню статусов. Это — поведение плагина по умолчанию. + + toolbar\_item\_image  + + Устанавливает имя загруженной картинки для кнопки на тулбаре. Список доступных картинок можно получить, выполнив в консоли Ткаббера команду "`image names`". + + accelerate\_menus  + + Если включена, при формировании меню предустановок первые девять опций меню предваряются префиксами "1.", "2." и т.д., которые являются акселераторами и могут быть активированы нажатием соотв. клавиши 1, 2 и т.д., когда меню открыто. Это может быть полезно, если сам вызов меню предустановок повешен на комбинацию клавиш, например, таким кодом в файле конфигурации: + + hook::add finload_hook { + bind . { + tk_popup .presence.button.custom_menu [winfo pointerx .] [winfo pointery .] + } + } + + extend\_quick\_presets\_panel  + + Добавляет кнопку, аналогичную таковой на тулбаре, справа от кнопки выбора присутствия на "Панели присутствия/статуса". + + quick\_presets\_panel\_image  + + Устанавливает картинку для этой кнопки. + +**Ухищрения:** + +* В полях ввода сообщений для статусов в окне редактора предустановок работают комбинации клавиш Ctrl-↑ и Ctrl-↓, которые перемещают активный элемент списка вверх и вниз, соответственно. + +**Основные недоработки/баги:** + +* "Продвинутые" настройки нельзя установить из файла конфигурации. + +Приветствуется самое широкое тестирование. Багрепорты и пожелания шлите автору. + +Файл: [customstatus.zip](../files/Customstatus.zip) (~7кБ) + +Версия: 0.6, 06-Mar-2007 http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/customstatus -Автор: [**kostix**](Участник_Kostix.md) - -### Flip - -Плагин-шутка. 1 апреля при заходе в конференцию с вероятностью 50% -"переворачивает" ваш ник вверх тормашками. Смотрится прикольно :) На следующий -день перевёрнутые ники приходят в норму. - -**Недостаток:** Если выключить Ткаббер до полуночи и включить снова уже 2 -апреля, ники в норму не придут. Для исправления требуется приделать сохранение -в файл. Приделано. Кроме того, обнаружен баг с одной буквой (R), -перевёрнутая версия которой принадлежит арабскому алфавиту. На jabber.ru -запрещено использование ников, состоящих из смеси арабских и не-арабских букв, -поэтому с ником, содержащим R, вас бы не пустили ни в одну из комнат. Пришлось -её выкинуть. Если заметите подобное поведение с другими буквами, просьба -сообщить. Также будем рады дополнениям таблицы букв-перевёртышей (см. код -плагина). - -**URL:** - - https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/flip/ - -**Автор:** [**ycbl**](Участник_Bigote.md) - -### Green - -Плагин предназначен для реализации в Ткаббере слежения за событиями управления -питанием системы, таких как suspend и resume. Идея состоит в том, чтобы -корректно закрыть все активные соединения с серверами при уходе системы в -suspend, запомнив их. Затем, если требуется, восстановить их после того, как -система переходит в нормальный режим работы, предварительно подождав некоторое -время, пока не "поднимется" сеть. - -Поскольку стиль доведения информации о событиях подсистемы управления питанием -до работающих приложений очень сильно отличается между операционными системами, -этот плагин поддерживает два режима работы: - -* В случае работы в Windows (Windows 2000 и выше) он полагается на специальное - расширение Tcl/Tk — [winpm](http://tkwinpm.googlecode.com), которое должно - быть установлено и доступно Ткабберу. При помощи данного расширения плагин - слушает сообщения системы об изменениях в состоянии питания и выполняет - соответствующие им действия. -* В случае работы в системах, основанных на X Window (Linux, \*BSD и подобных), - в которых отсутствует механизм, подобный реализованному в Windows, - используется другой подход, основанный на использовании специального "скрипта - активации", который поставляется вместе с плагином (файл swsusp-tkabber.tcl в - каталоге плагина). Этот скрипт предназначен для запуска из соответствующих - пользовательских скриптов, которые вызывает система управления питанием при - наступлении различных событий, таких как suspend и resume. Скрипт активации - сообщает всем работающим на том же дисплее копиям Ткаббера о наступлении - соответствующего события управления питанием; эти уведомления обрабатываются - плагином. - -Иными словами, в случае с Windows плагин работает "сам собой", а в случае -систем, основанных на X Window, ему помогает внешний скрипт, организация -правильного запуска которого — задача пользователя. - -_Важно понимать,_ что сам плагин должен быть установлен в Ткаббере в любом -случае. - -Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/green/README). - -По поводу работы в Linux, см. -[обсуждение на багзилле Ткаббера](http://www.jabber.ru/bugzilla/show_bug.cgi?id=376). +Автор: [kostix](Участник_Kostix.md) + +## Flip + +Плагин-шутка. 1 апреля при заходе в конференцию с вероятностью 50% "переворачивает" ваш ник вверх тормашками. Смотрится прикольно :) На следующий день перевёрнутые ники приходят в норму. + +**Недостаток:** Если выключить Ткаббер до полуночи и включить снова уже 2 апреля, ники в норму не придут. Для исправления требуется приделать сохранение в файл. Приделано. Кроме того, обнаружен баг с одной буквой (R), перевёрнутая версия которой принадлежит арабскому алфавиту. На jabber.ru запрещено использование ников, состоящих из смеси арабских и не-арабских букв, поэтому с ником, содержащим R, вас бы не пустили ни в одну из комнат. Пришлось её выкинуть. Если заметите подобное поведение с другими буквами, просьба сообщить. Также будем рады дополнениям таблицы букв-перевёртышей (см. код плагина). + +**URL:** + + [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/flip/](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/flip/) + [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/flip/](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/flip/) + +**Автор:** [ycbl](Участник_Bigote.md) + +## Green + +Плагин предназначен для реализации в Ткаббере слежения за событиями управления питанием системы, таких как suspend и resume. Идея состоит в том, чтобы корректно закрыть все активные соединения с серверами при уходе системы в suspend, запомнив их. Затем, если требуется, восстановить их после того, как система переходит в нормальный режим работы, предварительно подождав некоторое время, пока не "поднимется" сеть. + +Поскольку стиль доведения информации о событиях подсистемы управления питанием до работающих приложений очень сильно отличается между операционными системами, этот плагин поддерживает два режима работы: + +* В случае работы в Windows (Windows 2000 и выше) он полагается на специальное расширение Tcl/Tk — [winpm](http://tkwinpm.googlecode.com), которое должно быть установлено и доступно Ткабберу. При помощи данного расширения плагин слушает сообщения системы об изменениях в состоянии питания и выполняет соответствующие им действия. +* В случае работы в системах, основанных на X Window (Linux, \*BSD и подобных), в которых отсутствует механизм, подобный реализованному в Windows, используется другой подход, основанный на использовании специального "скрипта активации", который поставляется вместе с плагином (файл swsusp-tkabber.tcl в каталоге плагина). Этот скрипт предназначен для запуска из соответствующих пользовательских скриптов, которые вызывает система управления питанием при наступлении различных событий, таких как suspend и resume. Скрипт активации сообщает всем работающим на том же дисплее копиям Ткаббера о наступлении соответствующего события управления питанием; эти уведомления обрабатываются плагином. + +Иными словами, в случае с Windows плагин работает "сам собой", а в случае систем, основанных на X Window, ему помогает внешний скрипт, организация правильного запуска которого — задача пользователя. + +_Важно понимать,_ что сам плагин должен быть установлен в Ткаббере в любом случае. + +Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/green/README). + +По поводу работы в Linux, см. [обсуждение на багзилле Ткаббера](http://www.jabber.ru/bugzilla/show_bug.cgi?id=376). http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/green -Автор: [kostix](Участник_Kostix.md) - -### Hidemuctopic - -Небольшой плагин, который, будучи установленным, скрывает поле темы комнаты, -высвобождая несколько ценных миллиметров пространства. Чтобы вновь увидеть его -для доступа к редактированию темы или к настройкам и командам комнаты (плохо -заметная "кнопка" с надписью "Тема" слева от поля с топиком), нужно нажать -**Ctrl-T** - -**URL:** - - https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/hidemuctopic/ - -**Автор:** [**kostix**](Участник_Kostix.md) - -### Juick - -Плагин для жуйкования. То бишь, ведения (микро)блога на -[juick.com](http://juick.com). [**Подробнее**](Плагины/Juick.md). - -### Killerfeature - -Плагин предназначен для ручного -[удаления XMPP-аккаунта с сервера](http://www.xmpp.org/extensions/xep-0077.html#usecases-cancel). - -После установки плагина, в подменю "Tkabber" главного меню Ткаббера появится -новый пункт "Delete account...", активизация которого представит пользователю -диалог с одним или более чекбоксами — по одному на каждый уникальный аккаунт из -числа активных (подключённых) в данный момент. Нажатие кнопки "ОК" данного -диалога отправит серверу команду удаления каждого помеченного пользователем -аккаунта; при этом также происходит отключение этих аккаунтов. Никаких -подтверждений запрошено не будет. Выйти из диалога без удаления аккаунтов -можно, нажав кнопку "Отмена", нажав **Escape** или закрыв окно диалога средствами -оконного менеджера. - -> _**Внимание!** Восстановить удалённый аккаунт не будет никакой возможности - (кроме разве что ползания на коленях перед админом сервера с мольбами - поднять ваш аккаунт из последнего бэкапа)._ - -Текущая версия в репозитории Subversion: +Автор: [kostix](Участник_Kostix.md) + +## Hidemuctopic + +Небольшой плагин, который, будучи установленным, скрывает поле темы комнаты, высвобождая несколько ценных миллиметров пространства. Чтобы вновь увидеть его для доступа к редактированию темы или к настройкам и командам комнаты (плохо заметная "кнопка" с надписью "Тема" слева от поля с топиком), нужно нажать Ctrl-T + +**URL:** + + [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/hidemuctopic/](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/hidemuctopic/) + [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/hidemuctopic/](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/hidemuctopic/) + +**Автор:** [kostix](Участник_Kostix.md) + +## Juick + +Плагин для жуйкования. То бишь, ведения (микро)блога на [juick.com](http://juick.com). [Подробнее](Плагины/Juick.md). + +## Killerfeature + +Плагин предназначен для ручного [удаления XMPP-аккаунта с сервера](http://www.xmpp.org/extensions/xep-0077.html#usecases-cancel). + +После установки плагина, в подменю "Tkabber" главного меню Ткаббера появится новый пункт "Delete account...", активизация которого представит пользователю диалог с одним или более чекбоксами — по одному на каждый уникальный аккаунт из числа активных (подключённых) в данный момент. Нажатие кнопки "ОК" данного диалога отправит серверу команду удаления каждого помеченного пользователем аккаунта; при этом также происходит отключение этих аккаунтов. Никаких подтверждений запрошено не будет. Выйти из диалога без удаления аккаунтов можно, нажав кнопку "Отмена", нажав Escape или закрыв окно диалога средствами оконного менеджера. + + _**Внимание!** Восстановить удалённый аккаунт не будет никакой возможности (кроме разве что ползания на коленях перед админом сервера с мольбами поднять ваш аккаунт из последнего бэкапа)._ http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/killerfeature -Автор: [**kostix**](Участник_Kostix.md) - -### Notes - -Плагин для ведения заметок. Заметки хранятся в связанном с JID'ом хранилище в -соответствии с [XEP-0049](http://www.xmpp.org/extensions/xep-0049.html). Плагин -совместим с аналогичными плагинами для Miranda и Psi+. Поддерживается работа с -несколькими одновременно подключёнными аккаунтами. Есть возможность -отфильтровать заметки по одному или нескольким тегам, а также экспортировать их -в файл. - -Пока что плагин предоставляет только один способ взаимодействия с пользователем -— через несложный графический интерфейс. В будущем планируется добавить набор -команд для управления заметками из чата. - -Также планируется сделать больше привязок к существующим элементам графического -интерфейса для быстрого добавления/редактирования заметок. Пример такого -взаимодействия (из реализованного): по пункту меню, привязанному нажатию к -правой клавишей мыши в чате, можно добавить выделенный в чате текст к заметкам. - -Текущая версия в репозитории Subversion (для Ткаббера с менеджером плагинов): - - https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/notes - -Плагин также доступен через GIT (не рекомендуется для конечного пользователя, -там бывают экспериментальные изменения): - - https://github.com/Totktonada/tkabber4notes - -Некоторая дополнительная информация по плагину собрана тут: - - https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/notes/doc/ - -Автор: [*Totktonada*](Участник_Totktonada.md) - -### Now Playing - -![(!)](../images/Hammer.png) **Сделать:** Написать. - -### Open History - -Небольшой, но полезный плагин, позволяющий открывать историю разговоров в -комнате или с контактом из ростера без использования мыши, с помощью нехитрой -команды. Для истории любого конкретного джида: +Автор: [kostix](Участник_Kostix.md) + +## Notes + +Плагин для ведения заметок. Заметки хранятся в связанном с JID'ом хранилище в соответствии с [XEP-0049](http://www.xmpp.org/extensions/xep-0049.html). Плагин совместим с аналогичными плагинами для Miranda и Psi+. Поддерживается работа с несколькими одновременно подключёнными аккаунтами. Есть возможность отфильтровать заметки по одному или нескольким тегам, а также экспортировать их в файл. [Подробнее](Плагины/Notes.md). + +## Now Playing + +![(!)](../images/Hammer.png) **Сделать:** Написать. + +## Open History + +Небольшой, но полезный плагин, позволяющий открывать историю разговоров в комнате или с контактом из ростера без использования мыши, с помощью нехитрой команды. Для истории любого конкретного джида: /history jid -Для просмотра истории текущего разговора: +Для просмотра истории текущего разговора: /history -**Недостаток:** В случае просто **/history** в привате конференции откроется -история конференции, а не этого привата. - -**URL:** - - https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/openhistory/ - -**Автор:** [*Sceptik*](Участник_Sceptik.md) - -### Plugin Manager - -> _Внимание!_ простым пользователям Ткаббера это средство скорее всего не нужно, - потому что это не "настоящий" плагин; если вы просматриваете список плагинов в - поисках чего-нибудь "вкусненького", пропускайте этот раздел и читайте дальше. - -Это средство было специально написано для Windows-дистрибутивов Ткаббера (пак и -старпак), которые устанавливают в систему все стандартные внешние плагины -вместе с Ткаббером чтобы пользователю не надо было качать их отдельно. Plugin -Manager добавляет в Ткаббер возможность открыть специальное окно со списком -всех стандартных внешних плагинов, выбрать требуемые и установить их одним -нажатием кнопки. Точно так же их можно удалять из пользовательского каталога -плагинов. Таким образом, пользователю не нужно думать о том, как устанавливать -или удалять плагин, а также о том, куда инсталлятор распаковал плагины. - -В настоящий момент (post-0.11.1 девелоперская версия) в Ткаббере реализована -возможность динамической загрузки и выгрузки плагинов в процессе работы без -требования перезагрузки. После того, как во всех стандартных внешних плагинах -будет реализована поддержка этой возможности, Plugin Manager станет не нужен, -поскольку устанавливать стандартные внешние плагины путём копирования их в -пользовательский каталог плагинов будет не нужно: достаточно будет пометить -видимые Ткабберу плагины в группе настроек "Plugins Management" как -используемые и сохранить настройки. - -Следует, однако, отметить что пока ещё у Ткаббера нет специального знания о -том, где лежат его стандартные внешние плагины (это, по-видимому, будет -реализовываться паковщиками Ткаббера под различные ОС при помощи некоего -механизма, который в настоящее время в Ткаббере не реализован), и поэтому уже -переделанные стандартные внешние плагины нужно сначала копировать в каталог -плагинов, а потом ещё после перезагрузки Ткаббера включать в группе настроек -"Plugins Management" (что, понятное дело, нелогично). - -**URL:** - - https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/pluginmanager/ - -**Автор:** [**Archimed**](Участник_Archimed.md) - -### Reminder - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -Плагин, позволяющий задавать напоминания о некоторых грядущих событиях (не -забыть выключить чайник, позвонить кому-либо и т. д.). Время срабатывания можно -задать как в абсолютном формате (полная дата вида **MM/DD/YYYY HH:MM:SS**), так -и в относительном (**HH(H):MM:SS**, **MM(M):SS**, **S(S)**). Относительный -формат также используется при задании тайм-аута с помощью ключевых слов, -например: **tomorrow 1:00:00** — через 25 часов, **week** — через неделю. Когда -наступит заданный вами момент времени, выскочит небольшое окошко с текущим -временем и текстом напоминания и прозвучит сигнал (сигнал можно отключить в -настройках). Кроме обычных одноразовых напоминаний также планируется приделать -повторяющиеся (каждый час, день, неделю, месяц, год), а также напоминания о -днях рождения контактов из ростера и, по желанию, посетителей конференций. - -Формат команды: +**Недостаток:** В случае просто **/history** в привате конференции откроется история конференции, а не этого привата. + +**URL:** + + [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/openhistory/](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/openhistory/) + [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/openhistory/](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/openhistory/) + +**Автор:** [Sceptik](Участник_Sceptik.md) + +## Plugin Manager + +_Внимание!_ простым пользователям Ткаббера это средство скорее всего не нужно, потому что это не "настоящий" плагин; если вы просматриваете список плагинов в поисках чего-нибудь "вкусненького", пропускайте этот раздел и читайте дальше. + +Это средство было специально написано для Windows-дистрибутивов Ткаббера (пак и старпак), которые устанавливают в систему все стандартные внешние плагины вместе с Ткаббером чтобы пользователю не надо было качать их отдельно. Plugin Manager добавляет в Ткаббер возможность открыть специальное окно со списком всех стандартных внешних плагинов, выбрать требуемые и установить их одним нажатием кнопки. Точно так же их можно удалять из пользовательского каталога плагинов. Таким образом, пользователю не нужно думать о том, как устанавливать или удалять плагин, а также о том, куда инсталлятор распаковал плагины. + +В настоящий момент (post-0.11.1 девелоперская версия) в Ткаббере реализована возможность динамической загрузки и выгрузки плагинов в процессе работы без требования перезагрузки. После того, как во всех стандартных внешних плагинах будет реализована поддержка этой возможности, Plugin Manager станет не нужен, поскольку устанавливать стандартные внешние плагины путём копирования их в пользовательский каталог плагинов будет не нужно: достаточно будет пометить видимые Ткабберу плагины в группе настроек "Plugins Management" как используемые и сохранить настройки. + +Следует, однако, отметить что пока ещё у Ткаббера нет специального знания о том, где лежат его стандартные внешние плагины (это, по-видимому, будет реализовываться паковщиками Ткаббера под различные ОС при помощи некоего механизма, который в настоящее время в Ткаббере не реализован), и поэтому уже переделанные стандартные внешние плагины нужно сначала копировать в каталог плагинов, а потом ещё после перезагрузки Ткаббера включать в группе настроек "Plugins Management" (что, понятное дело, нелогично). + +**URL:** + + [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/pluginmanager/](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/pluginmanager/) + [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/pluginmanager/](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/pluginmanager/) + +**Автор:** [Archimed](Участник_Archimed.md) + +## Reminder + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + +Плагин, позволяющий задавать напоминания о некоторых грядущих событиях (не забыть выключить чайник, позвонить кому-либо и т. д.). Время срабатывания можно задать как в абсолютном формате (полная дата вида **MM/DD/YYYY HH:MM:SS**), так и в относительном (**HH(H):MM:SS**, **MM(M):SS**, **S(S)**). Относительный формат также используется при задании тайм-аута с помощью ключевых слов, например: **tomorrow 1:00:00** — через 25 часов, **week** — через неделю. Когда наступит заданный вами момент времени, выскочит небольшое окошко с текущим временем и текстом напоминания и прозвучит сигнал (сигнал можно отключить в настройках). Кроме обычных одноразовых напоминаний также планируется приделать повторяющиеся (каждый час, день, неделю, месяц, год), а также напоминания о днях рождения контактов из ростера и, по желанию, посетителей конференций. + +Формат команды: /remind time message -Кроме этого, можно выводить список текущих напоминаний посредством команды +Кроме этого, можно выводить список текущих напоминаний посредством команды /listrems -а также удалять любое из выведенных ею напоминаний с помощью +а также удалять любое из выведенных ею напоминаний с помощью /delrem # -где \# — номер нужного (а точнее, ненужного) вам напоминания в полученном -списке. Удалить за один раз можно только одно напоминание, при этом помните, -что оно сразу же пропадает из списка, в результате чего нумерация нарушается, -поэтому для гарантии выведите список ещё раз, если вам надо удалить несколько. - -Есть возможность задать выполнение команд в определённое время, при этом -сообщение, указываемое на следующей строке, должно начинаться с ключевого слова -**cmd** (например, 25 ноября в час дня разбанить некоего посетителя): - - /remind 11/25/2010 13:00:00 +где \# — номер нужного (а точнее, ненужного) вам напоминания в полученном списке. Удалить за один раз можно только одно напоминание, при этом помните, что оно сразу же пропадает из списка, в результате чего нумерация нарушается, поэтому для гарантии выведите список ещё раз, если вам надо удалить несколько. + +Есть возможность задать выполнение команд в определённое время, при этом сообщение, указываемое на следующей строке, должно начинаться с ключевого слова **cmd** (например, 25 ноября в час дня разбанить некоего посетителя): + + /remind 11/25/2010 13:00:00 cmd ::muc::unban ::xmpp::1 \ foo@conference.jabber.ru pupkin@jabber.ru -Командой может быть любой кусок кода на тикле; можно даже загрузить и выполнить -скрипт, находящийся в файле: +Командой может быть любой кусок кода на тикле; можно даже загрузить и выполнить скрипт, находящийся в файле: /remind 3 days - cmd source /home/myself/bin/test.tcl - -Напоминания сразу же после их задания сохраняются в файле настроек `custom.tcl` -и восстанавливаются оттуда при следующем запуске Ткаббера. Если какое-либо из -них "протухло" за время, пока Ткаббер был выключен, при старте появится уже -знакомое окошко, где помимо текущего времени и текста напоминания будет ещё -указано время, на которое оно было установлено. - -Краткую помощь по использованию программы можно получить по команде + cmd source /home/myself/bin/test.tcl + +Напоминания сразу же после их задания сохраняются в файле настроек `custom.tcl` и восстанавливаются оттуда при следующем запуске Ткаббера. Если какое-либо из них "протухло" за время, пока Ткаббер был выключен, при старте появится уже знакомое окошко, где помимо текущего времени и текста напоминания будет ещё указано время, на которое оно было установлено. + +Краткую помощь по использованию программы можно получить по команде /remind help -**URL:** - - https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/reminder - -**Автор:** [**ycbl**](Участник_Bigote.md) - -### Snoopstatus - -![(!)](../images/Hammer.png) **Сделать:** Написать. - -### Urgent - -![(!)](../images/Hammer.png) **Сделать:** Написать. - -### Urlcmd - -Добавляет две новые IRC-команды чата для перехода по ссылкам, содержащимся в -сообщениях чата. - -Примеры: - -Команда | Действие ----|--- -/listurls | Показать список ссылок в текущем окне. -/browseurl | Открыть последнюю ссылку в броузере. -/browseurl 1 | Открыть ссылку с номером 1 в списке. - -Плагин доступен в репозитории по адресу - - http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/urlcmd - -Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/urlcmd/README). - -Авторы: [**Gebb**](Участник_Gebb.md), [**kostix**](Участник_Kostix.md). - -## Неофициальные плагины -А здесь собраны плагины, не попавшие ни в официальный, ни в 3rd-party -репозитории. Некоторые из них, вероятно, устарели, так что если какой-то вдруг -у вас не работает, разыскивайте авторов. - -### 8bitgw - -Плагин, позволяющий общаться с "асечниками" и другими страдальцами через -XMPP-гейты, работающие с 8-битным набором символов, отличным от того, с которым -работает клиент "асечника". Например, можно общаться с русским "асечником", -использующим Windows-1251, через "буржуйский" гейт, считающий, что в ICQ-сети -используется Latin-1. - -**Настройка:** - -Параметр `::plugins::8bitgw::gateways` в секции Customize **Plugins → -8bitGateways** содержит (возможно пустой) Tcl-список гейтов и связанных с ними -наборов символов в следующем формате: +**URL:** + + [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/reminder](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/reminder) + [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/reminder](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/reminder) + +**Автор:** [ycbl](Участник_Bigote.md) + +## Snoopstatus + +![(!)](../images/Hammer.png) **Сделать:** Написать. + +## Urgent + +![(!)](../images/Hammer.png) **Сделать:** Написать. + +## Urlcmd + +Добавляет две новые IRC-команды чата для перехода по ссылкам, содержащимся в сообщениях чата. + +Примеры: + + **Команда ****Действие ** + + /listurls Показать список ссылок в текущем окне. + + /browseurl Открыть последнюю ссылку в броузере. + + /browseurl 1 Открыть ссылку с номером 1 в списке. + +Плагин доступен в репозитории по адресу + + [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/urlcmd](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/urlcmd) + +Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/urlcmd/README). + +Авторы: [Gebb](Участник_Gebb.md), [kostix](Участник_Kostix.md). + +# Неофициальные плагины +А здесь собраны плагины, не попавшие ни в официальный, ни в 3rd-party репозитории. Некоторые из них, вероятно, устарели, так что если какой-то вдруг у вас не работает, разыскивайте авторов. + +## 8bitgw + +Плагин, позволяющий общаться с "асечниками" и другими страдальцами через XMPP-гейты, работающие с 8-битным набором символов, отличным от того, с которым работает клиент "асечника". Например, можно общаться с русским "асечником", использующим Windows-1251, через "буржуйский" гейт, считающий, что в ICQ-сети используется Latin-1. + +**Настройка:** + +Параметр `::plugins::8bitgw::gateways` в секции Customize **Plugins → 8bitGateways** содержит (возможно пустой) Tcl-список гейтов и связанных с ними наборов символов в следующем формате: {сервер1 кодировка_сети кодировка_удалённого_клиента} [{сервер2 ...} ...] -(символы [ и ] отделяют необязательную часть). - -Гейты задаются "голым JID'ом" ("bare JID"), т.е. адресом без узловой части и -ресурса, например: `icq.someserver.com`. - -Названия наборов символов сети и удалённого клиента должны быть понятны тиклю; -узнать, что для него понятно, можно, выполнив в `tclsh`, `wish` или консоли -Ткаббера команду +(символы [ и ] отделяют необязательную часть). + +Гейты задаются "голым JID'ом" ("bare JID"), т.е. адресом без узловой части и ресурса, например: `icq.someserver.com`. + +Названия наборов символов сети и удалённого клиента должны быть понятны тиклю; узнать, что для него понятно, можно, выполнив в `tclsh`, `wish` или консоли Ткаббера команду encoding names -Тикль работает с каноническими наименованиями наборов символов, в частности, он -не знает про "Latin-1", зато знает про "iso8859-1". +Тикль работает с каноническими наименованиями наборов символов, в частности, он не знает про "Latin-1", зато знает про "iso8859-1". -Пример: такая настройка +Пример: такая настройка {aim-icq.jabber.anywise.com iso8859-1 cp1251} {icq.ru.biz cp1251 cp1252} -заставит плагин совершать перекодировки исходящих и входящих данных чтобы: - -* общаться с русскими ICQ/AIM-клиентами (использующими cp1251) через сервер - `aim-icq.jabber.anywise.com`, настроенный на использование iso8859-1 в - качестве транспортной кодировки; -* общаться с европейскими "асечниками" (использующими cp1252) через - "русский" гейт, использующий cp1251 в качестве транспортной кодировки. - -**Ошибки/недоработки:** - -* Нельзя настраивать кодировку для каждого удалённого клиента в отдельности; -* Нельзя использовать символы Unicode за пределами "кодировки удалённого - клиента" — вместо них удалённый клиент увидит знаки вопроса ("?"); -* Нет перевода текстовых ресурсов на русский; -* Нет README; -* Неудобная настройка; -* Не тестировался на связках, отличных от "Windows-1251 + Latin-1"; -* Патчит код Ткаббера, что является нестабильным в долгосрочной перспективе - (в идеале Ткабберу нужен хук `rewrite_outgoing_message_hook`). -* Не преобразует другие виды передаваемой и принимаемой текстовой информации, - такие как статус пользователя (в идеале Ткабберу нужен хук, который вызывался - бы для каждого распарсенного и приготовленного к помещению в поток узла типа - CDATA, но это слишком стрёмно, чтобы быть хуком). - -Багрепорты/пожелания шлите автору. - -Файл: [*8bitgw.zip*](../files/8bitgw.zip) (~3 кб) - -Текущая версия: 0.1, 01-June-2007. - -Автор: [**kostix**](Участник_Kostix.md) - -### Autoconnect - -Данный плагин предназначен для автоматического соединения с нужными -транспортами после отсоединения или при старте Ткаббера. Критику и пожелания -направляйте [**eXire**](Участник_EXire.md). - -* **Файл:** [*Autoconnect-0.4.tar.gz*](../files/Autoconnect-0.4.tar.gz) (1K) -* **Версия:** 0.4 - -### Autoraise - -Этот плагин написан в качестве фикса к проблеме, сформулированной -[тут](http://tkabber.jabber.ru/node/320). - -Плагин "поднимает" главное окно Ткаббера, если таковое свёрнуто или скрыто, на -экран при приходе любого нового сообщения (в т. ч. от сервера, сообщений о -присутствии и т. п.). - -Управление: - -* Настройки: опция-флаг `::plugins::autoraise::autoraise` -* Главное меню: **Tkabber→View→Auto raise on new message** - -**Ограничения:** - -* Работает _только_ для "интерфейса с табами", т. к. восстанавливает - главное окно, что является бессмысленным для многооконного интерфейса. -* Не имеет возможностей для фильтрации сообщений — поднимается по любому - пришедшему. -* "Патчит" одну из процедур Ткаббера, что является ненадёжным методом - в долговременной перспективе. - -Тестирование и отзывы приветствуются. - -Файл: [**Autoraise.zip**](../files/Autoraise.zip) (~4 кб) - -Текущая версия: 0.1, 29-Mar-2007. - -Автор: [**kostix**](Участник_Kostix.md) - -### Autoretrieve - -Этот плагин автоматически запрашивает информацию о пользователях в конференции, -т. е. информация сразу доступна в тултипе и не надо открывать окно Userinfo. -Включить/отключить плагин можно в **Customize→Conference Info** - -* **Файл:** [**Autoretrieve.tar.gz**](../files/20081020172036!Autoretrieve.tar.gz) (1К) -* **Файл:** для 0.11.1 [*Autoretrieve.tar.gz*](../files/Autoretrieve21102008.tar.gz) (1К) - -[**eXire**](Участник_EXire.md) - -### Bmuc - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** +заставит плагин совершать перекодировки исходящих и входящих данных чтобы: + +* общаться с русскими ICQ/AIM-клиентами (использующими cp1251) через сервер `aim-icq.jabber.anywise.com`, настроенный на использование iso8859-1 в качестве транспортной кодировки; +* общаться с европейскими "асечниками" (использующими cp1252) через "русский" гейт, использующий cp1251 в качестве транспортной кодировки. + +**Ошибки/недоработки:** + +* Нельзя настраивать кодировку для каждого удалённого клиента в отдельности; +* Нельзя использовать символы Unicode за пределами "кодировки удалённого клиента" — вместо них удалённый клиент увидит знаки вопроса ("?"); +* Нет перевода текстовых ресурсов на русский; +* Нет README; +* Неудобная настройка; +* Не тестировался на связках, отличных от "Windows-1251 + Latin-1"; +* Патчит код Ткаббера, что является нестабильным в долгосрочной перспективе (в идеале Ткабберу нужен хук `rewrite_outgoing_message_hook`). +* Не преобразует другие виды передаваемой и принимаемой текстовой информации, такие как статус пользователя (в идеале Ткабберу нужен хук, который вызывался бы для каждого распарсенного и приготовленного к помещению в поток узла типа CDATA, но это слишком стрёмно, чтобы быть хуком). + +Багрепорты/пожелания шлите автору. + +Файл: [8bitgw.zip](../files/8bitgw.zip) (~3 кб) + +Текущая версия: 0.1, 01-June-2007. + +Автор: [kostix](Участник_Kostix.md) + +## Autoconnect + +Данный плагин предназначен для автоматического соединения с нужными транспортами после отсоединения или при старте Ткаббера. Критику и пожелания направляйте [eXire](Участник_EXire.md). + +* **Файл:** [Media:autoconnect-0.4.tar.gz](../files/Autoconnect-0.4.tar.gz) (1K) +* **Версия:** 0.4 + +## Autoraise + +Этот плагин написан в качестве фикса к проблеме, сформулированной [тут](http://tkabber.jabber.ru/node/320). + +Плагин "поднимает" главное окно Ткаббера, если таковое свёрнуто или скрыто, на экран при приходе любого нового сообщения (в т. ч. от сервера, сообщений о присутствии и т. п.). + +Управление: + +* Настройки: опция-флаг `::plugins::autoraise::autoraise` +* Главное меню: **Tkabber→View→Auto raise on new message** + +**Ограничения:** + +* Работает _только_ для "интерфейса с табами", т. к. восстанавливает главное окно, что является бессмысленным для многооконного интерфейса. +* Не имеет возможностей для фильтрации сообщений — поднимается по любому пришедшему. +* "Патчит" одну из процедур Ткаббера, что является ненадёжным методом в долговременной перспективе. + +Тестирование и отзывы приветствуются. + +Файл: [autoraise.zip](../files/Autoraise.zip) (~4 кб) + +Текущая версия: 0.1, 29-Mar-2007. + +Автор: [kostix](Участник_Kostix.md) + +## Autoretrieve + +Этот плагин автоматически запрашивает информацию о пользователях в конференции, т. е. информация сразу доступна в тултипе и не надо открывать окно Userinfo. Включить/отключить плагин можно в **Customize→Conference Info** + +* **Файл:** [autoretrieve.tar.gz](../files/20081020172036!Autoretrieve.tar.gz) (1К) +* **Файл:** для 0.11.1 [autoretrieve.tar.gz](../files/Autoretrieve21102008.tar.gz) (1К) + +[eXire](Участник_EXire.md) + +## Bmuc + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** ![](../images/180px-Bmuc.png) -Плагин позволяет блокировать все приватные сообщения в конкретной конференции, -отправленные вам участниками с рангом «None». Также есть возможность блокировки -приватных сообщений от модераторов и членов (включается по выбору отдельно). -Управление плагином осуществляется через меню на кнопке «Тема:» в конференции. - -> _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._ - -* **Файл:** [*Bmuc.zip*](../files/Bmuc.zip) - -Автор: [*Jet*](Участник_Jet.md) - -Модифицированный плагин с расширенной возможностью блокировки сообщений в -группчате доступен в репозитории по адресу: - - http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bmucx/ - -Автор модификации: [*ancestor*](Участник_Ancestor.md) - -### Bookmarks - -Плагин автоматически ставит bookmark в окнах чата при автоматическом и ручном -уходе в away, а также при потере фокуса окном Ткаббера. Настраивается через -**Customize → Plugins → Bookmarks**. - -При смене статуса автоматически либо вручную выставляется стандартная (красная) -галочка, при потере фокуса — зелёная. В настройках можно подстроить под себя -интервал тайм-аута для потери фокуса, то есть, по прошествии какого времени -Ткаббер начнёт считать, что вы действительно переключились на другую программу -поработать, а не просто отвлеклись на минутку глянуть почту. - -**Будет работать только с 0.10.0-beta1 и старше.** - -Для работы в Windows требуется пакет tclWinidle. - -[**eXire**](Участник_EXire.md). - -* **Файл** [*Bookmarks-0.4.5.tar.gz*](../files/Bookmarks-0.4.5.tar.gz) (1K) - -Ныне вытеснен плагином attline. Не работает начиная где-то с 1816 ревизии июля -2009г. - -### Chess-mod +![](../images/magnify-clip.png) + +Плагин позволяет блокировать все приватные сообщения в конкретной конференции, отправленные вам участниками с рангом «None». Также есть возможность блокировки приватных сообщений от модераторов и членов (включается по выбору отдельно). Управление плагином осуществляется через меню на кнопке «Тема:» в конференции. + + _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._ + +* **Файл:** [Bmuc.zip](../files/Bmuc.zip) + +Автор: [Jet](Участник_Jet.md) + +Модифицированный плагин с расширенной возможностью блокировки сообщений в группчате доступен в репозитории по адресу: + + [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bmucx/](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bmucx/) + +Автор модификации: [ancestor](Участник_Ancestor.md) + +## Bookmarks + +Плагин автоматически ставит bookmark в окнах чата при автоматическом и ручном уходе в away, а также при потере фокуса окном Ткаббера. Настраивается через **Customize → Plugins → Bookmarks**. + +При смене статуса автоматически либо вручную выставляется стандартная (красная) галочка, при потере фокуса — зелёная. В настройках можно подстроить под себя интервал тайм-аута для потери фокуса, то есть, по прошествии какого времени Ткаббер начнёт считать, что вы действительно переключились на другую программу поработать, а не просто отвлеклись на минутку глянуть почту. + +**Будет работать только с 0.10.0-beta1 и старше.** + +Для работы в Windows требуется пакет tclWinidle. + +[eXire](Участник_EXire.md). + +* **Файл** [Media:bookmarks-0.4.5.tar.gz](../files/Bookmarks-0.4.5.tar.gz) (1K) + +Ныне вытеснен плагином attline. Не работает начиная где-то с 1816 ревизии июля 2009г. + +## Chess-mod ![](../images/180px-Chess-mod.gif) -Модифицированный плагин для игры в шахматы, добавлены координаты для клеток -игровой доски и отмена последнего сделанного хода по обоюдному согласию - -* **Файл:** [*Chess-mod.zip*](../files/Chess-mod.zip) - -Автор плагина: [*Jet*](Участник_Jet.md) - -### Clienticons - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -Добавляет иконки клиентов в ростер и список участников конференции. Иконки -клиентов и идея взяты из Psi+ -([http://psi-dev.googlecode.com/](http://psi-dev.googlecode.com/)) - -> _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._ - -* **Файл:** [*Clienticons.zip*](../files/Clienticons.zip) - -Автор: [*Jet*](Участник_Jet.md) - -- - - - - -Модифицированный [*ancestor*](Участник_Ancestor.md) плагин c обновленными -иконками доступен в репозитории по адресу: - - http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/clienticons/ - -### Confirm - -Добавляет вопрос при закрытии всех/остальных табов и Ткаббера. Есть графические -настройки в **Customize→Plugins→Confirm**. - -[**eXire**](Участник_EXire.md) - -* **Файл:** [*Confirm-0.2.tar.gz*](../files/Confirm-0.2.tar.gz) (1K) - -### CryptoConfig - -Позволяет хранить часть **config.tcl** (например, настройки **loginconf**) или -всё его содержимое в зашифрованном файле. - -При загрузке Ткаббера спрашивает пароль, использованный для шифрования, -дешифрует файл и исполняет код из него. - -Требует наличия в системе OpenSSL или GPG. - -Подробности — в README. - -Файл: [*Cryptoconfig.zip*](../files/Cryptoconfig.zip) - -Текущая версия: 0.1, 16-June-2007. - -Автор: [**kostix**](Участник_Kostix.md) - -### Cyrillize2 - -> _Внимание!_ Стандартная версия этого плагина — "cyrillize" — получила ту же - самую функциональность в ревизии 869 (11 января 2007); "навешена" она на - комбинацию **Ctrl-"** (или **Ctrl-Shift-'**). Кроме того, комбинация **Ctrl-;** - "занята" встроенным средством Ткаббера — - [**unisymbols**](0.9.x/ЧаВо.md#Очень_неудобный_способ). Посему данный плагин - следует считать не рекомендованным к использованию. - -Усовершенствование стандартного плагина cyrillize. В него было добавлено -сокращение C-; по которому можно перевести введенный русский текст в латиницу. - -**Файл**: [*Cyrillize2-0.1.tar.gz*](../files/Cyrillize2-0.1.tar.gz) - Усовершенствовал [**feez**](Участник_Feez.md) - -### Follownick - -Плагин для MUC, позволяющий быстро "прыгать" по сообщениям конкретного -участника: - -* Клик средней кнопкой на нике или сообщении в окне лога делает так, - что предыдущее (т.е. более старое) сообщение от этого участника появляется в - окне с логом чата (то есть устанавливает viewport над "лентой" чата так, - чтобы это сообщение было видно). -* **Shift**+клик средней кнопкой ищет следующее по отношению к текущему сообщение - (т.е. более новое). - -После перемещения ник искомого сообщения подсвечивается. - -Основная идея плагина: быстрое перемещение по постам конкретного человека в "шумных" комнатах. - -**Ошибки/недоработки:** - -* Ничего не настраивается. -* Полное отсутствие сопроводиловки. - -Багрепорты/пожелания шлите автору. - -Файл: [*Follownick.zip*](../files/Follownick.zip) (~1 кб) - -Текущая версия: 0.1, 03-May-2007. - -Автор: [**kostix**](Участник_Kostix.md) - -### Goto (заготовка для плагина) - -Заготовка для плагина активации таба по его заголовку из окна любого чата. -Добавляет команду "/goto tabname" и соответствующие возможности автодополнения -по клавише **Tab**. На данный момент позволяет перейти только на таб с чатом (в том -числе на таб с конференцией). - -Для работы заготовки вставить в config.tcl вне хуков следующий код. +![](../images/magnify-clip.png) + +Модифицированный плагин для игры в шахматы, добавлены координаты для клеток игровой доски и отмена последнего сделанного хода по обоюдному согласию + +* **Файл:** [Chess-mod.zip](../files/Chess-mod.zip) + +Автор плагина: [Jet](Участник_Jet.md) + +## Clienticons + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + +Добавляет иконки клиентов в ростер и список участников конференции. Иконки клиентов и идея взяты из Psi+ ([http://psi-dev.googlecode.com/](http://psi-dev.googlecode.com/)) + + _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._ + +* **Файл:** [Clienticons.zip](../files/Clienticons.zip) + +Автор: [Jet](Участник_Jet.md) + +- - - - + +Модифицированный [ancestor](Участник_Ancestor.md) плагин c обновленными иконками доступен в репозитории по адресу: + + [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/clienticons/](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/clienticons/) + +## Confirm + +Добавляет вопрос при закрытии всех/остальных табов и Ткаббера. Есть графические настройки в **Customize→Plugins→Confirm**. + +[eXire](Участник_EXire.md) + +* **Файл:** [Media:confirm-0.2.tar.gz](../files/Confirm-0.2.tar.gz) (1K) + +## CryptoConfig + +Позволяет хранить часть **config.tcl** (например, настройки **loginconf**) или всё его содержимое в зашифрованном файле. + +При загрузке Ткаббера спрашивает пароль, использованный для шифрования, дешифрует файл и исполняет код из него. + +Требует наличия в системе OpenSSL или GPG. + +Подробности — в README. + +Файл: [cryptoconfig.zip](../files/Cryptoconfig.zip) + +Текущая версия: 0.1, 16-June-2007. + +Автор: [kostix](Участник_Kostix.md) + +## Cyrillize2 + + _Внимание!_ Стандартная версия этого плагина — "cyrillize" — получила ту же самую функциональность в ревизии 869 (11 января 2007); "навешена" она на комбинацию Ctrl-" (или Ctrl-Shift-'). Кроме того, комбинация Ctrl-; "занята" встроенным средством Ткаббера — [unisymbols](0.9.x/ЧаВо.md#Очень_неудобный_способ). Посему данный плагин следует считать не рекомендованным к использованию. + +Усовершенствование стандартного плагина cyrillize. В него было добавлено сокращение C-; по которому можно перевести введенный русский текст в латиницу. + +**Файл**: [Media:Cyrillize2-0.1.tar.gz](../files/Cyrillize2-0.1.tar.gz) + Усовершенствовал [feez](Участник_Feez.md) + +## Follownick + +Плагин для MUC, позволяющий быстро "прыгать" по сообщениям конкретного участника: + +* Клик средней кнопкой на нике или сообщении в окне лога делает так, что предыдущее (т.е. более старое) сообщение от этого участника появляется в окне с логом чата (то есть устанавливает viewport над "лентой" чата так, чтобы это сообщение было видно). +* Shift+клик средней кнопкой ищет следующее по отношению к текущему сообщение (т.е. более новое). + +После перемещения ник искомого сообщения подсвечивается. + +Основная идея плагина: быстрое перемещение по постам конкретного человека в "шумных" комнатах. + +**Ошибки/недоработки:** + +* Ничего не настраивается. +* Полное отсутствие сопроводиловки. + +Багрепорты/пожелания шлите автору. + +Файл: [follownick.zip](../files/Follownick.zip) (~1 кб) + +Текущая версия: 0.1, 03-May-2007. + +Автор: [kostix](Участник_Kostix.md) + +## Goto (заготовка для плагина) + +Заготовка для плагина активации таба по его заголовку из окна любого чата. Добавляет команду "/goto tabname" и соответствующие возможности автодополнения по клавише Tab. На данный момент позволяет перейти только на таб с чатом (в том числе на таб с конференцией). + +Для работы заготовки вставить в config.tcl вне хуков следующий код. # Goto # ==== proc gotochat {name} { foreach chatid [chat::opened] { set tabtitle [lindex [chat::window_titles $chatid] 0] - + if {[string equal $name $tabtitle]} { chat::activate $chatid } } } - + hook::add chat_send_message_hook [namespace current]::handle_goto 15 - + proc handle_goto {chatid user body type} { if {[string equal -length 6 $body "/goto "]} { set tabname [crange $body 6 end] gotochat $tabname return stop } } - + hook::add generate_completions_hook [namespace current]::goto_commands_comps 99 - + proc goto_commands_comps {chatid compsvar wordstart line} { upvar 0 $compsvar comps - + if {!$wordstart} { lappend comps "/goto " } - + if {$wordstart && [string equal -length 6 $line "/goto "]} { set tabtitles {} - + foreach chatid [chat::opened] { set tabtitle [lindex [chat::window_titles $chatid] 0] lappend tabtitles $tabtitle } - + set comps [concat $tabtitles $comps] } } # ==== -Автор: [*Totktonada*](Участник_Totktonada.md). - -### Hihglight XEP and RFC URLs - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -> _Внимание!_ плагин с этой (а точнее — с расширенной) функциональностью - доступен среди стандартных внешних плагинов в репозитории начиная с ревизии - 1145 (12 июня 2007). Называется "custom-urls", помимо XEP, RFC и Debian Bug - IDs, позволяет добавлять обработку своих форматов (примеры есть в коде - плагина). - -Подсвечивает как URL в окне чата слова xep-0123 или jep-0123. При клике -открывает браузер на странице соответствующего XEP (XMPP Extension Proposal, а -не то, что вы подумали). Версия 0.3 перестала соответствовать названию. Теперь -подсвечиваются также и ссылки на RFC. Формат тот же, что и для XEP. В версии -0.4 строка \#12345 превращается в URL, ведущий на Debian BTS. - -**Будет работать только с alpha-20061115 и свежее.** - -* **Файл:** [xeps-0.4.tar.gz](http://sgolovan.nes.ru/jabber/tmp/xeps-0.4.tar.gz) (1K) - -[**Teo**](Участник_Teo.md) - -### Highlightex - -Данный плагин подсвечивает (highlight) всё сообщение целиком при обращении к -вам в конференции. В настройках имеется опция для задания цвета подсветки в -16-теричном формате. - -* **Файл:** [*Highlightex.zip*](../files/Highlightex.zip) - -Автор: [*ancestor*](Участник_Ancestor.md) - -### Histballoon - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -Добавляет всплывающее описание к строке статуса, в котором выводит 20 последних -сообщений. - -* **Файл:** [**Histballoon.zip**](../files/Histballoon.zip) - -Автор: [*Jet*](Участник_Jet.md) - -### Jdiskurl - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -Расширение, которое добавляет в контекстное меню ссылок вида -[http://disk.jabbim.cz/user@sever.tld/filename.ext](http://disk.jabbim.cz/user@sever.tld/filename.ext) -пункт, позволяющий запрашивать файл через джаббер-диск public@disk.jabbim.cz -(должен находиться в ростере). - -> _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._ - -* **Файл:** [*Jdiskurl.zip*](../files/Jdiskurl.zip) - -Автор: [*Jet*](Участник_Jet.md) - -### Last Activity - -Special for kroko :) - -Этот плагин изменяет поведение Ткаббера на запрос last. Теперь в графе Interval -(userinfo) или по команде /last \ показывается время, которое окно -клиента \ неактивно. - -**Будет работать только с alpha-20061110 и старше.** - -* **Файл:** [**Last\_activity.tar.gz**](../files/Last_activity.tar.gz) (1K) - -[**eXire**](Участник_EXire.md) - -### Meebo me - -Плагин автоматически принимает запросы авторизации и отслеживает смену ника -([XEP-0172](http://www.xmpp.org/extensions/xep-0172.html)), но только для -пользователей `*@guest.meebo.org`. Он вам понадобится, если вы собираетесь -использовать виджет [meebome](http://www.meebome.com/) и сообщения принимать в -Ткаббере. Все ошибки и запросы присылайте [**Feez-у**](Участник_Feez.md). - -* **Файл:** [*Meebome-0.2.tar.gz*](../files/Meebome-0.2.tar.gz) (1K) - -### Mimetex - -Плагин предназначен для отображения математических формул в нотации LaTeX в -виде встроенных в окно чата изображений. _Работает только с Ткаббером версии -0.10.0._ - -Плагин работает так же, как и стандартный плагин **latex**, но использует в -качестве "движка" [MimeTex](http://www.forkosh.com/mimetex.html). -Соответственно, _**MimeTeX** должен быть установлен, чтобы этот плагин -работал_. - -**MimeTex**, однако же, представляет собой _один_ исполняемый файл, что даёт -ему соответствующие преимущества перед плагином **latex**: он работает быстрее, -и его намного проще установить; в частности, есть версия для Windows. - -**Установка:** - -1. Установите **MimeTex**: - * Скачайте исходники и соберите бинарь сами, согласно - [соответствующему разделу официальной страницы](http://www.forkosh.dreamhost.com/source_mimetex.html#quickbuild). - Убедитесь, что собираете _без_ ключа `-DOPAQUE`. Если у вас тёмный фон окон чата в Ткаббере, собирайте - с ключом `-DWHITE` чтобы получить белый цвет символов в формулах. - * Или скачайте уже готовую версию [оттуда же](http://www.forkosh.com/mimetex.html#precompiled). - Там же есть версия под Windows. -1. Поставьте плагин, перезапустите Ткаббер, посетите группу настроек - **Plugins → MimeTex** и установите там правильный путь до исполняемого файла - **MimeTex**. - -Имейте в виду, что в [Debian GNU/Linux](http://www.debian.org) есть готовый -пакет (правда, похоже, он собран без поддержки антиалиасинга). - -**Использование:** - -**MimeTex** пытается отобразить всё, что находится между парами токенов "$$", например: +Автор: [Totktonada](Участник_Totktonada.md). + +## Hihglight XEP and RFC URLs + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + + _Внимание!_ плагин с этой (а точнее — с расширенной) функциональностью доступен среди стандартных внешних плагинов в репозитории начиная с ревизии 1145 (12 июня 2007). Называется "custom-urls", помимо XEP, RFC и Debian Bug IDs, позволяет добавлять обработку своих форматов (примеры есть в коде плагина). + +Подсвечивает как URL в окне чата слова xep-0123 или jep-0123. При клике открывает браузер на странице соответствующего XEP (XMPP Extension Proposal, а не то, что вы подумали). Версия 0.3 перестала соответствовать названию. Теперь подсвечиваются также и ссылки на RFC. Формат тот же, что и для XEP. В версии 0.4 строка \#12345 превращается в URL, ведущий на Debian BTS. + +**Будет работать только с alpha-20061115 и свежее.** + +* **Файл:** [xeps-0.4.tar.gz](http://sgolovan.nes.ru/jabber/tmp/xeps-0.4.tar.gz) (1K) + +[Teo](Участник_Teo.md) + +## Highlightex + +Данный плагин подсвечивает (highlight) всё сообщение целиком при обращении к вам в конференции. В настройках имеется опция для задания цвета подсветки в 16-теричном формате. + +* **Файл:** [Highlightex.zip](../files/Highlightex.zip) + +Автор: [ancestor](Участник_Ancestor.md) + +## Histballoon + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + +Добавляет всплывающее описание к строке статуса, в котором выводит 20 последних сообщений. + +* **Файл:** [Histballoon.zip](../files/Histballoon.zip) + +Автор: [Jet](Участник_Jet.md) + +## Jdiskurl + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + +Расширение, которое добавляет в контекстное меню ссылок вида [http://disk.jabbim.cz/user@sever.tld/filename.ext](http://disk.jabbim.cz/user@sever.tld/filename.ext) пункт, позволяющий запрашивать файл через джаббер-диск public@disk.jabbim.cz (должен находиться в ростере). + + _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._ + +* **Файл:** [Jdiskurl.zip](../files/Jdiskurl.zip) + +Автор: [Jet](Участник_Jet.md) + +## Last Activity + +Special for kroko :) + +Этот плагин изменяет поведение Ткаббера на запрос last. Теперь в графе Interval (userinfo) или по команде /last \ показывается время, которое окно клиента \ неактивно. + +**Будет работать только с alpha-20061110 и старше.** + +* **Файл:** [Media:Last\_activity.tar.gz](../files/Last_activity.tar.gz) (1K) + +[eXire](Участник_EXire.md) + +## Meebo me + +Плагин автоматически принимает запросы авторизации и отслеживает смену ника ([XEP-0172](http://www.xmpp.org/extensions/xep-0172.html)), но только для пользователей `*@guest.meebo.org`. Он вам понадобится, если вы собираетесь использовать виджет [meebome](http://www.meebome.com/) и сообщения принимать в Ткаббере. Все ошибки и запросы присылайте [Feez-у](Участник_Feez.md). + +* **Файл:** [Media:Meebome-0.2.tar.gz](../files/Meebome-0.2.tar.gz) (1K) + +## Mimetex + +Плагин предназначен для отображения математических формул в нотации LaTeX в виде встроенных в окно чата изображений. _Работает только с Ткаббером версии 0.10.0._ + +Плагин работает так же, как и стандартный плагин **latex**, но использует в качестве "движка" [MimeTex](http://www.forkosh.com/mimetex.html). Соответственно, _**MimeTeX** должен быть установлен, чтобы этот плагин работал_. + +**MimeTex**, однако же, представляет собой _один_ исполняемый файл, что даёт ему соответствующие преимущества перед плагином **latex**: он работает быстрее, и его намного проще установить; в частности, есть версия для Windows. + +**Установка:** + +1. Установите **MimeTex**: + * Скачайте исходники и соберите бинарь сами, согласно [соответствующему разделу официальной страницы](http://www.forkosh.dreamhost.com/source_mimetex.html#quickbuild). Убедитесь, что собираете _без_ ключа `-DOPAQUE`. Если у вас тёмный фон окон чата в Ткаббере, собирайте с ключом `-DWHITE` чтобы получить белый цвет символов в формулах. + * Или скачайте уже готовую версию [оттуда же](http://www.forkosh.com/mimetex.html#precompiled). Там же есть версия под Windows. + +1. Поставьте плагин, перезапустите Ткаббер, посетите группу настроек **Plugins → MimeTex** и установите там правильный путь до исполняемого файла **MimeTex**. + +Имейте в виду, что в [Debian GNU/Linux](http://www.debian.org) есть готовый пакет (правда, похоже, он собран без поддержки антиалиасинга). + +**Использование:** + +**MimeTex** пытается отобразить всё, что находится между парами токенов "$$", например: Это — $$f(x)=\int_{-\infty}^xe^{-t^2}dt$$ формула -отображается как - -> Это — ![Mimetex-example.gif](../images/Mimetex-example.gif) формула. - -**Ошибки/недоработки:** - -* Не поддерживается преобразование цветов в генерируемых картинках, они - вставляются в текст "как есть". -* Не поддерживается исправление антиалиасинга для цветов фона окна чата, - отличающихся от чисто белого или чисто чёрного. -* Отсутствует README. -* Отсутствует перевод на русский. - -Файл: [*Mimetex.zip*](../files/Mimetex.zip) (~5 кб) - -Текущая версия: 0.3, 16-May-2007. - -Автор: [**kostix**](Участник_Kostix.md) - -**Последние изменения:** - -[**kostix**](Участник_Kostix.md) 21:33, 16 мая 2007 (MSD): Исправлен регексп для -поиска формул в тексте сообщения, изменён приоритет парсера формул с тем, чтобы -он отрабатывал раньше парсеров эмоциконок и стайлкодов (спасибо -[**Gman**](Участник_Gman.md) за наводку). Теперь нормально просекаются формулы -примеров №№ 6 и 9 с оф. сайта. - -### Nickomp - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов** - -Позволяет перебирать ники участников конференции по табу не только в окне ввода -конференции, но и в привате любого участника этой конференции (привет @neris). -Работает только с свн версией. © -[http://juick.com/Jet/583486](http://juick.com/Jet/583486) - -Скачать плагин можно по [ссылке](http://jetftp.narod.ru/nickomp.zip) -в посте автора, но на всякий случай файл потырен и размещён и тут. - -Файл: [**Nickomp.zip**](../files/Nickomp.zip) - -Автор: [*Jet*](Участник_Jet.md) - -### NickSaneColors - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -![Групчат до и после](../images/180px-Nicksanecolors_groupchat_before_after.png) - -**Общая информация** - -Плагин переопределяет дефолтный массив цветов для ников -($::plugins::nickcolors::NickColorPool) в зависимости от текущего цвета фона -чата, установленного цветовой схемой. - -В качестве критерия годности цвета используется расстояние (вернее его квадрат) -от проверяемого цвета до цвета фона, вычисленное с учётом различных весов -красного, зелёного и синего по формуле: - -![Color distance.png](../images/Color_distance.png) - -Пользователю предлагается задать интервал по шкале от 0 до 100 (по умолчанию -40..60), при попадании в который цвет добавляется в массив используемых цветов. -Значение 0 соответствует одинаковым цветам, значение 100 соответствует -максимально отличающимся цветам. - -Цвета выбираются из массива, взятого здесь: -[Colors with Names](http://wiki.tcl.tk/16166). - -**Установка** - -* Распаковать архив в стандартную директорию для плагинов (на \*nix системах - это ~/.tkabber/plugins/) -* Включить плагин в менеджере расширений (Plugins Management) - -**Использование** - -* (Опционально) установить значения для порогового интервала. - -Если в указанный диапазон не попадает ни одного цвета из исходных, -восстанавливается массив цветов по умолчанию. Также массив цветов по умолчанию -восстанавливается при выгрузке плагина. - -**Ошибки/недоработки** - -Возможны. - -Файл: [**NickSaneColors.zip**](../files/Nicksanecolors.zip), 4.5K - -Текущая версия: 0.1, 2010-02-19 +отображается как + + Это — ![Mimetex-example.gif](../images/Mimetex-example.gif) формула. + +**Ошибки/недоработки:** + +* Не поддерживается преобразование цветов в генерируемых картинках, они вставляются в текст "как есть". +* Не поддерживается исправление антиалиасинга для цветов фона окна чата, отличающихся от чисто белого или чисто чёрного. +* Отсутствует README. +* Отсутствует перевод на русский. + +Файл: [mimetex.zip](../files/Mimetex.zip) (~5 кб) + +Текущая версия: 0.3, 16-May-2007. + +Автор: [kostix](Участник_Kostix.md) + +**Последние изменения:** + +[kostix](Участник_Kostix.md) 21:33, 16 мая 2007 (MSD): Исправлен регексп для поиска формул в тексте сообщения, изменён приоритет парсера формул с тем, чтобы он отрабатывал раньше парсеров эмоциконок и стайлкодов (спасибо [Gman](Участник_Gman.md) за наводку). Теперь нормально просекаются формулы примеров №№ 6 и 9 с оф. сайта. + +## Nickomp + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** Позволяет перебирать ники участников конференции по табу не только в окне ввода конференции, но и в привате любого участника этой конференции (привет @neris). Работает только с свн версией. © [http://juick.com/Jet/583486](http://juick.com/Jet/583486) + +Скачать плагин можно по [ссылке](http://jetftp.narod.ru/nickomp.zip) в посте автора, но на всякий случай файл потырен и размещён и тут. + +Файл: [Nickomp.zip](../files/Nickomp.zip) + +Автор: [Jet](Участник_Jet.md) + +## NickSaneColors + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + +![](../images/180px-Nicksanecolors_groupchat_before_after.png) + +![](../images/magnify-clip.png) + +**Общая информация** + +Плагин переопределяет дефолтный массив цветов для ников ($::plugins::nickcolors::NickColorPool) в зависимости от текущего цвета фона чата, установленного цветовой схемой. + +В качестве критерия годности цвета используется расстояние (вернее его квадрат) от проверяемого цвета до цвета фона, вычисленное с учётом различных весов красного, зелёного и синего по формуле: + +![Color distance.png](../images/Color_distance.png) + +Пользователю предлагается задать интервал по шкале от 0 до 100 (по умолчанию 40..60), при попадании в который цвет добавляется в массив используемых цветов. Значение 0 соответствует одинаковым цветам, значение 100 соответствует максимально отличающимся цветам. + +Цвета выбираются из массива, взятого здесь: [Colors with Names](http://wiki.tcl.tk/16166). + +**Установка** + +* Распаковать архив в стандартную директорию для плагинов (на \*nix системах это ~/.tkabber/plugins/) +* Включить плагин в менеджере расширений (Plugins Management) + +**Использование** + +* (Опционально) установить значения для порогового интервала. + +Если в указанный диапазон не попадает ни одного цвета из исходных, восстанавливается массив цветов по умолчанию. Также массив цветов по умолчанию восстанавливается при выгрузке плагина. + +**Ошибки/недоработки** + +Возможны. + +Файл: [NickSaneColors.zip](../files/Nicksanecolors.zip), 4.5K + +Текущая версия: 0.1, 2010-02-19 http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/nicksanecolors -Автор: [**hekp0maht**](Участник_HEKP0MAHT.md) - -### OSD redux - -Попытка привести штатный плагин OSD к удобоваримому — по меркам современного -Ткаббера — виду: - -* Поддержка Customize (**Plugins → XOSD Status Display**) — настройки цвета, - шрифта, тени и таймаутов; -* Управление местоположением вывода XOSD на экране. - -Плагин _**не** доделан_ и выложен тут просто по просьбе одного ткабберовца. Это -означает, что не все опции работают (или работают не так, как задумывалось). - -Несмотря на это, плагин вполне себе работает на машине автора. - -Файл: [**Tkabber-osd.zip**](../files/Tkabber-osd.zip), ~3k - -Автор: [**Kostix**](Участник_Kostix.md) - -**Примечание:** на всякий случай учтите, что: - -* Плагин предназначен для - [X Window System](http://en.wikipedia.org/wiki/X_Window_System) - и не работает в Windows; -* Он требует наличия работающего - [XOSD-сервера и утилиты osd\_cat к нему](http://ignavus.net/software.html), - (подробнее можно почитать [тут](http://ldots.org/xosd-guide/) ). - -### Patches - -Плагин, который использует одну из особенностей языка, на котором написан -Ткаббер, и позволяет «патчить» код Ткаббера без его изменения. Плагин состоит -из 2 частей: сам файл плагина (patches.zip/plugins/patches/patches.tcl) и файлы -пропатченных процедур (patches.zip/patches/\*.tcl). Работает всё достаточно -просто: во время загрузки плагина он (плагин) загружает все файлы с расширением -\*.tcl из папки patches.zip/patches/, которая должна находиться там же, где и -config.tcl. - -**Описание патчей:** - -* 1\_smart-emoticons.tcl — Устанавливает порядок смайлов согласно тому, - как они записаны в icondef.xml и убирает поля в меню смайлов. -* 2\_block-retry-server-messages.tcl — Блокирует повторяющиеся сообщения - о смене статуса и рангов / ролей в конференциях. -* 3\_recoloring-chat.tcl — Меняет цвета элементов окна чата. -* 4\_status-panel-and-window.tcl — Заменяет стандартную статусную панель. - Добавляет окно для установки статуса, приоритета и статусного собщения, - а также значки статусов в меню. -* 5\_draw-subject-of-chat-window.tcl — Показывает тему сообщения (не - путать с темой конференции) в окнах чата. -* 6\_roster-bg-image.tcl (отключён) — Добавляет фоновое изображение - в ростер (расположение задаётся в коде патча). -* 7\_recalc\_position-balloon.tcl — Размещает всплывающую подсказку слева - или сверху от курсора, если недостаточно места для её отображения (Windows). -* 8\_del-roster-horizontal-scrollbar.tcl — Удаляет горизонтальную прокрутку - в ростере. -* 9\_roster-avatars.tcl — Добавляет vCard-аватары в ростер, показывает - сообщение статуса под ником, жирный шрифт для групп контактов. Аватары - обновляются при проверке vCard, сохранение аватар происходит только для - авторизованных пользователей, при удалении аватары из vCard в клиенте она не - удаляется. -* 10\_recursor-chat.tcl — Меняет поведение курсора мыши в окне чата. -* 11\_sorted-jids-in-roster.tcl — Меняет порядок сортировки джидов, - перемещая недоступные контакты в конец списка. -* 12\_disable-autoaway-is-tray — Блокирует выход из автоэвея, если окно - свернуто в трей. - -> _**Внимание!** Несмотря на то, что никаких изменений в коде Ткаббера не - происходит, стоит учитывать, что файлы содержат в себе изменённые процедуры, - которые могут вызывать некорректную работу в различных ревизиях Ткаббера._ - -Пара иллюстраций (возможно, через некоторое время помрут на картинкохостинге; в -общем-то, не жалко :)). [Номер один](http://i38.tinypic.com/728vlu.png). -[Номер два](http://i36.tinypic.com/t6t6h2.png) (непонятно, кому может понадобиться -бэкграунд в виде картинки в ростере; полагаю, что даже если сделать элементы -ростеров прозрачными, общий вид лучше не станет). - -* **Файл:** [*Patches.zip*](../files/Patches.zip) - -Автор: [*Jet*](Участник_Jet.md) - -### Postpone Text (добавлен в транк) - -**Лирическое отступление** - -> _Внимание!_ С ревизии 953 (18 фев 2007) интегрировано в транк в виде - _встроенного_ средства, выполненного [**teo**](Участник_Teo.md) на основе данного - плагина. - -Оно несколько отличается от описанного здесь; отличия сформулированы в конце -этого раздела. - -Пока автору плагина, обсуждаемого в этом разделе, неясно насколько лучше/хуже -новая встроенная версия, поэтому пока что данный плагин "поживёт" здесь. - -**Описание плагина** - -[**Этот плагин**](../files/Postpone.tar.gz) (~5k) реализует достаточно глупую -вещь — с каждым окном ввода сеансов чата связывается собственный скрытый -текстовый буфер + добавляется биндинг, позволяющий: - -* по первой активации биндинга _переместить_ текст из поля ввода в буфер; -* по второй его активации переместить текст обратно. - -Основная идея: лично у меня ([**Kostix**](Участник_Kostix.md)) часто возникает -ситуация, когда я пишу длинный продуманный текст, и вдруг вижу, что надо _бы_ -что-то быстро написать в чат, отослать это, а затем продолжить редактирование. -Причём сделать это быстрее, чем "выделить весь текст и скопировать в клипборд", -и сделать это не трогая клипборд. - -Данный плагин эту возможность реализует. - -Настраивается: - -* Событие (биндинг) для операций с буфером; -* Фон поля ввода при полном буфере (отключабельно); -* Способ вставки текста из буфера. - -Настройки плагина находятся в подгруппе "Postpone Text" группы "Chat". - -Приложен README с подробным описанием. - -**Внимание!** В настоящий момент плагин будет работать только с SVN-версией -Ткаббера, снятой оттуда после того, как в транке появился тип "options" для -элементов Customize (то есть в версиях начиная от 29 сентября 2006 года). Патч, -реализующий "старый" тип "list", возможно, воспоследует. - -**Внимание!** Если вы хотите использовать здешний плагин вместо нового -встроенного вместе с комбинацией Ctrl-q, вам понадобится "отучить" встроенный -плагин от этой комбинации. - -Для этого поместите в файл конфигурации Ткаббера вне любых хуков такой код: - - hook::add postload_hook { - event delete <> - event delete <> - } - -[**Kostix**](Участник_Kostix.md) 18:01, 28 октября 2006 (MSD) - -**Отличия нового плагина [teo](Участник_Teo.md)** - -* Буфер теперь представляет собой _стек (LIFO),_ в который можно последовательно - сохранить несколько кусков текста и потом последовательно извлечь их оттуда. -* Используется два жеста для управления текстом: - * **Ctrl-q** — убрать текст из поля ввода и _добавить его_ в буфер, сделав - там новую запись. Эта привязка связана с виртуальным событием `<>`. - * **Ctrl-g** — удалить последний "кусок" текста из буфера и вставить - его справа от курсора в поле ввода. Эта привязка связана с виртуальным - событием `<>`. -* Отсутствует визуальная индикация факта нахождения сохранённого - текста в буфере. -* Отсутствует настройка методов помещения текста из буфера в поле - ввода — он всегда вставляется справа от курсора, определяющего текущее - место вставки. - -### Reject subscription - -Плагин позволяет автоматически отклонять входящие запросы подписки с адресов, -отсутствующих в вашем ростере. Может быть полезно тем, кому надоедает часто -видеть окно с запросом подписки и каждый раз ее отклонять. - -* **Файл:** [**Reject\_subscription.zip**](../files/Reject_subscription.zip) - -Автор: [**Teo**](Участник_Teo.md) - -### Remote Commands - -Плагин, который стоит использовать с особой осторожностью. Он позволяет -удалённо выполнять команды на компьютере. Необходимые команды со всеми -аргументами необходимо предварительно занести в список в начале файла. Первая -команда будет командой по умолчанию. - -* **Файл**: [*Remote\_commands-0.1.tar.gz*](../files/Remote_commands-0.1.tar.gz) -* **Версия**: 0.1, 01-04-2007 - -[**feez**](Участник_Feez.md) - -### Remote IP Address - -Плагин, добавляющий команду удалённого управления для получения IP-адреса -соединения Tkabber-а с сервером. - -* **Файл**: для Tkabber из trunk: - [remote\_ip\_address-tkabber-trunk.tar.gz](http://www.vsi.ru/~yegor/files/remote_ip_address-tkabber-trunk.tar.gz) -* **Файл**: для Tkabber 0.11.1: - [remote\_ip\_address-tkabber-0.11.1.tar.gz](http://www.vsi.ru/~yegor/files/remote_ip_address-tkabber-0.11.1.tar.gz) -* **Версия**: 07-02-2010 - -[*yegor*](Участник_Yegor.md) - -### Remote Settings - -Плагин, позволяющий удаленно изменять настройки Ткаббера. Кроме того, это PoC -плагин, показывающий, как создавать в плагине команды для удаленного вызова и -как создавать мультишаговые команды (визарды). Будет использоваться в доке -[**How\_to\_add\_a\_new\_remote\_command**](../en/How_to_add_a_new_remote_command.md) -как пример. - -* **Файл**: [*Remote\_settings-0.1.tar.gz*](../files/Remote_settings-0.1.tar.gz) (~4Kb) - -* **Версия**: 0.1, 01-04-2007 - -[**feez**](Участник_Feez.md) - -### Roster Avatars - -Выглядит оно [так](../images/1112349.png). - -То же самое, что в патче «9\_roster-avatars.tcl» [**этого**](#Patches) -плагина. Добавляет vCard-аватары в ростер, показывает сообщение статуса под -ником, жирный шрифт для групп контактов. Аватары обновляются при проверке -vCard, сохранение аватар происходит только для авторизованных пользователей, -при удалении аватары из vCard в клиенте она не удаляется. Аватарки контактов -можно добавлять и самому: положить в папке .tkabber/vcard\_avatars картинку -размером 30\*30 пикселей в формате png с названием, соответствующему полному -jid контакта. - -* Небольшое изменение: изменён (уменьшен) размер аватар до 30\*30 пикс. -* Установка: распаковать архив в папку с плагинами, запустить Ткаббер. - -* **Файл:** [*Rosteravatars.zip*](../files/Rosteravatars.zip) - -Автор: [*Jet*](Участник_Jet.md) - -Выпилил в отдельный плагин: [**BrennendeR**](Участник_Brennende.md) - -### Rsssaver - -Поскольку Ткаббер не кэширует новости при некорректном выходе, то у людей, не -закрывающих Ткаббер днями/неделями, возникали случаи, когда в кэше находились -новости недельной (и более) давности. Данный плагин кэширует новости через %n -пришедших сообщений, а также добавляет кнопку сохранения в окно новостей (для -ручного сохранения). - -[**eXire**](Участник_EXire.md). - -* **Файл** [*Rsssaver-0.2.3.tar.gz*](../files/Rsssaver-0.2.3.tar.gz) (1K) - -### Savebtn - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -Расширение, позволяющее сохранять фото из vCard. После установки в окне -просмотра информации о пользователе, на вкладке "Фотография", появится кнопка -"Сохранить фото". - -* **Файл:** [*Savebtn.zip*](../files/Savebtn.zip) - -Автор: [*Jet*](Участник_Jet.md) - -### Server Info - -Добавляет в меню по правой кнопке для контакта (в контактах или в списке -участников конференции) пункты для получения информации о сервере этого -контакта и для того, чтобы непосредственно открыть окно Service discovery на -контакте или на его сервере. - -* **Файл:** [server\_info.tar.gz](http://sgolovan.nes.ru/jabber/tmp/server_info.tar.gz) (1K) -* **Файл:** для версии 0.11.1 [*server\_info.tar.gz*](../files/Server_info.tar.gz) (1K) - -[**Teo**](Участник_Teo.md) - -### So\_keepalive - -Плагин предназначен для включения опции SO\_KEEPALIVE на сокетах соединений, -устанавливаемых Ткаббером. - -Требует наличия пакета [Tclx](http://tclx.sourceforge.net/). - -"Очень бета" в том смысле, что требует очень серьёзного тестирования, а так же -[настройки _Вашей_ -системы](http://libkeepalive.sourceforge.net/docs/TCP-Keepalive-HOWTO) для -того, чтобы механизм TCP keepalive делал то, что Вы от него ожидаете. - -Читайте README. - -Файл: [**So\_keepalive.zip**](../files/So-keepalive.zip), ~3.5k - -Автор: [**Kostix**](Участник_Kostix.md) - -### Spam filter - -Подтверждает сообщения, которые не сочтёт спамом. - -Для фильтрации требуется: - -1. Джид+ресурс в настройках конференции в качестве фильтра. - -2. Присутствие в конференции. - -* **Файл:** [spamfilter.tar.gz](http://alefix.narod.ru/spamfilter.tar.gz), 511b - -[*alfix*](Участник_Alfix.md) - -### Tab number - -Переделка [**патча**](Патчи.md#Нумерация_закладок) -[**Lknight'а**](Участник_Lknight.md) в плагин. Сделано не очень красиво, -но ничего более умного не придумал. Если есть какие-то идеи, -то прошу сообщить [**eXire**](Участник_EXire.md). - -* **Файл:** [*Tab\_number-0.1.2.tar.gz*](../files/Tab_number-0.1.2.tar.gz) (1K) - -### Tkabho - -Первая попытка приделать бота к Ткабберу для возможности использования простыми -пользователями без настройки чего-либо. Плагин написан на основе моего -jabber-бота на тикле — [taho](http://taho.googlecode.com). - -[архив zip](http://taho.googlecode.com/files/tkabho.zip) - -[архив tar.bz2](http://taho.googlecode.com/files/tkabho.tar.bz2) - -Автор: [*Kellin*](Участник_Kellin.md). - -### Vcardavatars - -![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** - -Показывает аватары из вкард в окне чата. Изображения обновляются при просмотре -информации о пользователе и хранятся локально. Пока нет работы с альфа-каналом. - -> _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._ - -* **Файл:** [*Vcardavatars.zip*](../files/Vcardavatars.zip) - -Автор: [*Jet*](Участник_Jet.md) - -### Wintweaks (устарел) - -> _Внимание!_ Начиная с [версии 0.11.0](http://tkabber.jabber.ru/node/464) - Ткаббер содержит доработанную версию данного хака непосредственно в коде, - поэтому плагин потерял всякий смысл. Если вы "апгрейдите" Ткаббер до 0.11.0, - удалите этот плагин. - -Плагин делает "подтяжку лица" некоторым аспектам интерфейса пользователя -Ткаббера, чтобы сделать его более "родным" для пользователей Windows. Плагин -работает только в Windows. - -В текущей версии плагин допиливает "сплиттеры" (тонкие узкие окна, -предназначенные для изменения взаимного размера окон, окружающих сплиттер с -двух сторон): их можно зацепить мышкой по всей их длине, и они плоские -(невидимы). - -**Ошибки/недоработки:** - -* Сплиттеры надо сделать раза в два уже. - -Файл: [*Wintweaks.zip*](../files/Wintweaks.zip) (~2 кб) - -Текущая версия: 0.1, 24-Apr-2007. - -Автор: [*kostix*](Участник_Kostix.md) +Автор: [hekp0maht](Участник_HEKP0MAHT.md) + +## OSD redux + +Попытка привести штатный плагин OSD к удобоваримому — по меркам современного Ткаббера — виду: + +* Поддержка Customize (**Plugins → XOSD Status Display**) — настройки цвета, шрифта, тени и таймаутов; +* Управление местоположением вывода XOSD на экране. + +Плагин _**не **доделан_ и выложен тут просто по просьбе одного ткабберовца. Это означает, что не все опции работают (или работают не так, как задумывалось). + +Несмотря на это, плагин вполне себе работает на машине автора. + +Файл: [tkabber-osd.zip](../files/Tkabber-osd.zip), ~3k + +Автор: [Kostix](Участник_Kostix.md) + +**Примечание:** на всякий случай учтите, что: + +* Плагин предназначен для [X Window System](http://en.wikipedia.org/wiki/X_Window_System) и не работает в Windows; +* Он требует наличия работающего [XOSD-сервера и утилиты osd\_cat к нему](http://ignavus.net/software.html), (подробнее можно почитать [тут](http://ldots.org/xosd-guide/) ). + +## Patches + +Плагин, который использует одну из особенностей языка, на котором написан Ткаббер, и позволяет «патчить» код Ткаббера без его изменения. Плагин состоит из 2 частей: сам файл плагина (patches.zip/plugins/patches/patches.tcl) и файлы пропатченных процедур (patches.zip/patches/\*.tcl). Работает всё достаточно просто: во время загрузки плагина он (плагин) загружает все файлы с расширением \*.tcl из папки patches.zip/patches/, которая должна находиться там же, где и config.tcl. + +**Описание патчей:** + +* 1\_smart-emoticons.tcl — Устанавливает порядок смайлов согласно тому, как они записаны в icondef.xml и убирает поля в меню смайлов. +* 2\_block-retry-server-messages.tcl — Блокирует повторяющиеся сообщения о смене статуса и рангов / ролей в конференциях. +* 3\_recoloring-chat.tcl — Меняет цвета элементов окна чата. +* 4\_status-panel-and-window.tcl — Заменяет стандартную статусную панель. Добавляет окно для установки статуса, приоритета и статусного собщения, а также значки статусов в меню. +* 5\_draw-subject-of-chat-window.tcl — Показывает тему сообщения (не путать с темой конференции) в окнах чата. +* 6\_roster-bg-image.tcl (отключён) — Добавляет фоновое изображение в ростер (расположение задаётся в коде патча). +* 7\_recalc\_position-balloon.tcl — Размещает всплывающую подсказку слева или сверху от курсора, если недостаточно места для её отображения (Windows). +* 8\_del-roster-horizontal-scrollbar.tcl — Удаляет горизонтальную прокрутку в ростере. +* 9\_roster-avatars.tcl — Добавляет vCard-аватары в ростер, показывает сообщение статуса под ником, жирный шрифт для групп контактов. Аватары обновляются при проверке vCard, сохранение аватар происходит только для авторизованных пользователей, при удалении аватары из vCard в клиенте она не удаляется. +* 10\_recursor-chat.tcl — Меняет поведение курсора мыши в окне чата. +* 11\_sorted-jids-in-roster.tcl — Меняет порядок сортировки джидов, перемещая недоступные контакты в конец списка. +* 12\_disable-autoaway-is-tray — Блокирует выход из автоэвея, если окно свернуто в трей. + + _**Внимание!** Несмотря на то, что никаких изменений в коде Ткаббера не происходит, стоит учитывать, что файлы содержат в себе изменённые процедуры, которые могут вызывать некорректную работу в различных ревизиях Ткаббера._ + +Пара иллюстраций (возможно, через некоторое время помрут на картинкохостинге; в общем-то, не жалко :)). [Номер один](http://i38.tinypic.com/728vlu.png). [Номер два](http://i36.tinypic.com/t6t6h2.png) (непонятно, кому может понадобиться бэкграунд в виде картинки в ростере; полагаю, что даже если сделать элементы ростеров прозрачными, общий вид лучше не станет). + +* **Файл:** [Patches.zip](../files/Patches.zip) + +Автор: [Jet](Участник_Jet.md) + +## Postpone Text (добавлен в транк) + +**Лирическое отступление** + + _Внимание!_ С ревизии 953 (18 фев 2007) интегрировано в транк в виде _встроенного_ средства, выполненного [teo](Участник_Teo.md) на основе данного плагина. + +Оно несколько отличается от описанного здесь; отличия сформулированы в конце этого раздела. + +Пока автору плагина, обсуждаемого в этом разделе, неясно насколько лучше/хуже новая встроенная версия, поэтому пока что данный плагин "поживёт" здесь. + +**Описание плагина** + +[Этот плагин](../files/Postpone.tar.gz) (~5k) реализует достаточно глупую вещь — с каждым окном ввода сеансов чата связывается собственный скрытый текстовый буфер + добавляется биндинг, позволяющий: + +* по первой активации биндинга _переместить_ текст из поля ввода в буфер; +* по второй его активации переместить текст обратно. + +Основная идея: лично у меня ([Kostix](Участник_Kostix.md)) часто возникает ситуация, когда я пишу длинный продуманный текст, и вдруг вижу, что надо _бы_ что-то быстро написать в чат, отослать это, а затем продолжить редактирование. Причём сделать это быстрее, чем "выделить весь текст и скопировать в клипборд", и сделать это не трогая клипборд. + +Данный плагин эту возможность реализует. + +Настраивается: + +* Событие (биндинг) для операций с буфером; +* Фон поля ввода при полном буфере (отключабельно); +* Способ вставки текста из буфера. + +Настройки плагина находятся в подгруппе "Postpone Text" группы "Chat". + +Приложен README с подробным описанием. + +**Внимание!** В настоящий момент плагин будет работать только с SVN-версией Ткаббера, снятой оттуда после того, как в транке появился тип "options" для элементов Customize (то есть в версиях начиная от 29 сентября 2006 года). Патч, реализующий "старый" тип "list", возможно, воспоследует. + +**Внимание!** Если вы хотите использовать здешний плагин вместо нового встроенного вместе с комбинацией Ctrl-q, вам понадобится "отучить" встроенный плагин от этой комбинации. + +Для этого поместите в файл конфигурации Ткаббера вне любых хуков такой код: + + hook::add postload_hook { + event delete <> + event delete <> + } + +[Kostix](Участник_Kostix.md) 18:01, 28 октября 2006 (MSD) + +**Отличия нового плагина [teo](Участник_Teo.md)** + +* Буфер теперь представляет собой _стек (LIFO),_ в который можно последовательно сохранить несколько кусков текста и потом последовательно извлечь их оттуда. +* Используется два жеста для управления текстом: + * Ctrl-q — убрать текст из поля ввода и _добавить его_ в буфер, сделав там новую запись. Эта привязка связана с виртуальным событием `<>`. + * Ctrl-g — удалить последний "кусок" текста из буфера и вставить его справа от курсора в поле ввода. Эта привязка связана с виртуальным событием `<>`. + +* Отсутствует визуальная индикация факта нахождения сохранённого текста в буфере. +* Отсутствует настройка методов помещения текста из буфера в поле ввода — он всегда вставляется справа от курсора, определяющего текущее место вставки. + +## Reject subscription + +Плагин позволяет автоматически отклонять входящие запросы подписки с адресов, отсутствующих в вашем ростере. Может быть полезно тем, кому надоедает часто видеть окно с запросом подписки и каждый раз ее отклонять. + +* **Файл:** [Reject\_subscription.zip](../files/Reject_subscription.zip) + +Автор: [Teo](Участник_Teo.md) + +## Remote Commands + +Плагин, который стоит использовать с особой осторожностью. Он позволяет удалённо выполнять команды на компьютере. Необходимые команды со всеми аргументами необходимо предварительно занести в список в начале файла. Первая команда будет командой по умолчанию. + +* **Файл**: [Media:Remote\_commands-0.1.tar.gz](../files/Remote_commands-0.1.tar.gz) +* **Версия**: 0.1, 01-04-2007 + +[feez](Участник_Feez.md) + +## Remote IP Address + +Плагин, добавляющий команду удалённого управления для получения IP-адреса соединения Tkabber-а с сервером. + +* **Файл**: для Tkabber из trunk: [remote\_ip\_address-tkabber-trunk.tar.gz](http://www.vsi.ru/~yegor/files/remote_ip_address-tkabber-trunk.tar.gz) +* **Файл**: для Tkabber 0.11.1: [remote\_ip\_address-tkabber-0.11.1.tar.gz](http://www.vsi.ru/~yegor/files/remote_ip_address-tkabber-0.11.1.tar.gz) +* **Версия**: 07-02-2010 + +[yegor](Участник_Yegor.md) + +## Remote Settings + +Плагин, позволяющий удаленно изменять настройки Ткаббера. Кроме того, это PoC плагин, показывающий, как создавать в плагине команды для удаленного вызова и как создавать мультишаговые команды (визарды). Будет использоваться в доке [How\_to\_add\_a\_new\_remote\_command](../en/How_to_add_a_new_remote_command.md) как пример. + +* **Файл**: [Media:Remote\_settings-0.1.tar.gz](../files/Remote_settings-0.1.tar.gz) (~4Kb) + +* **Версия**: 0.1, 01-04-2007 + +[feez](Участник_Feez.md) + +## Roster Avatars + +Выглядит оно [так](../images/1112349.png). + +То же самое, что в патче «9\_roster-avatars.tcl» [этого](Плагины.md#Patches) плагина. Добавляет vCard-аватары в ростер, показывает сообщение статуса под ником, жирный шрифт для групп контактов. Аватары обновляются при проверке vCard, сохранение аватар происходит только для авторизованных пользователей, при удалении аватары из vCard в клиенте она не удаляется. Аватарки контактов можно добавлять и самому: положить в папке .tkabber/vcard\_avatars картинку размером 30\*30 пикселей в формате png с названием, соответствующему полному jid контакта. + +* Небольшое изменение: изменён (уменьшен) размер аватар до 30\*30 пикс. +* Установка: распаковать архив в папку с плагинами, запустить Ткаббер. + +* **Файл:** [Rosteravatars.zip](../files/Rosteravatars.zip) + +Автор: [Jet](Участник_Jet.md) + +Выпилил в отдельный плагин: [BrennendeR\_](Участник_Brennende.md) + +## Rsssaver + +Поскольку Ткаббер не кэширует новости при некорректном выходе, то у людей, не закрывающих Ткаббер днями/неделями, возникали случаи, когда в кэше находились новости недельной (и более) давности. Данный плагин кэширует новости через %n пришедших сообщений, а также добавляет кнопку сохранения в окно новостей (для ручного сохранения). + +[eXire](Участник_EXire.md). + +* **Файл** [Media:rsssaver-0.2.3.tar.gz](../files/Rsssaver-0.2.3.tar.gz) (1K) + +## Savebtn + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + +Расширение, позволяющее сохранять фото из vCard. После установки в окне просмотра информации о пользователе, на вкладке "Фотография", появится кнопка "Сохранить фото". + +* **Файл:** [Savebtn.zip](../files/Savebtn.zip) + +Автор: [Jet](Участник_Jet.md) + +## Server Info + +Добавляет в меню по правой кнопке для контакта (в контактах или в списке участников конференции) пункты для получения информации о сервере этого контакта и для того, чтобы непосредственно открыть окно Service discovery на контакте или на его сервере. + +* **Файл:** [server\_info.tar.gz](http://sgolovan.nes.ru/jabber/tmp/server_info.tar.gz) (1K) +* **Файл:** для версии 0.11.1 [server\_info.tar.gz](../files/Server_info.tar.gz) (1K) + +[Teo](Участник_Teo.md) + +## So\_keepalive + +Плагин предназначен для включения опции SO\_KEEPALIVE на сокетах соединений, устанавливаемых Ткаббером. + +Требует наличия пакета [Tclx](http://tclx.sourceforge.net/). + +"Очень бета" в том смысле, что требует очень серьёзного тестирования, а так же [настройки _Вашей_ системы](http://libkeepalive.sourceforge.net/docs/TCP-Keepalive-HOWTO) для того, чтобы механизм TCP keepalive делал то, что Вы от него ожидаете. + +Читайте README. + +Файл: [so\_keepalive.zip](../files/So-keepalive.zip), ~3.5k + +Автор: [Kostix](Участник_Kostix.md) + +## Spam filter + +Подтверждает сообщения, которые не сочтёт спамом. + +Для фильтрации требуется: + +1. Джид+ресурс в настройках конференции в качестве фильтра. + +2. Присутствие в конференции. + +* **Файл:** [spamfilter.tar.gz](http://alefix.narod.ru/spamfilter.tar.gz), 511b + +[alfix](Участник_Alfix.md) + +## Tab number + +Переделка [патча](Патчи.md#Нумерация_закладок) [Lknight'а](Участник_Lknight.md) в плагин. Сделано не очень красиво, но ничего более умного не придумал. Если есть какие-то идеи, то прошу сообщить [eXire](Участник_EXire.md). + +* **Файл:** [Media:tab\_number-0.1.2.tar.gz](../files/Tab_number-0.1.2.tar.gz) (1K) + +## Tkabho + +Первая попытка приделать бота к Ткабберу для возможности использования простыми пользователями без настройки чего-либо. Плагин написан на основе моего jabber-бота на тикле — [taho](http://taho.googlecode.com). + + [архив zip](http://taho.googlecode.com/files/tkabho.zip) + [архив tar.bz2](http://taho.googlecode.com/files/tkabho.tar.bz2) + +Автор: [Kellin](Участник_Kellin.md). + +## Vcardavatars + +![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** + +Показывает аватары из вкард в окне чата. Изображения обновляются при просмотре информации о пользователе и хранятся локально. Пока нет работы с альфа-каналом. + + _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._ + +* **Файл:** [Vcardavatars.zip](../files/Vcardavatars.zip) + +Автор: [Jet](Участник_Jet.md) + +## Wintweaks (устарел) + + _Внимание!_ Начиная с [версии 0.11.0](http://tkabber.jabber.ru/node/464) Ткаббер содержит доработанную версию данного хака непосредственно в коде, поэтому плагин потерял всякий смысл. Если вы "апгрейдите" Ткаббер до 0.11.0, удалите этот плагин. + +Плагин делает "подтяжку лица" некоторым аспектам интерфейса пользователя Ткаббера, чтобы сделать его более "родным" для пользователей Windows. Плагин работает только в Windows. + +В текущей версии плагин допиливает "сплиттеры" (тонкие узкие окна, предназначенные для изменения взаимного размера окон, окружающих сплиттер с двух сторон): их можно зацепить мышкой по всей их длине, и они плоские (невидимы). + +**Ошибки/недоработки:** + +* Сплиттеры надо сделать раза в два уже. + +Файл: [wintweaks.zip](../files/Wintweaks.zip) (~2 кб) + +Текущая версия: 0.1, 24-Apr-2007. + +Автор: [kostix](Участник_Kostix.md) + + Index: wiki/ru/Плагины/AntiSPIM.md ================================================================== --- wiki/ru/Плагины/AntiSPIM.md +++ wiki/ru/Плагины/AntiSPIM.md @@ -1,38 +1,24 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Плагины/AntiSPIM/index.html) + # Плагины/AntiSPIM Материал из Tkabber Wiki -Идея взята из отложенного протокола -[JEP-0159 Spim blocking](http://www.jabber.org/jeps/jep-0159.html) -но там предлагают реализовать на серверах а тут в Ткаббере. Первый вариант -конечно лучше, но протокол то отложен, когда активируют и активируют ли вообще -неизвестно. - -Суть протокола -- фильтровать все входящие сообщения и презенсы по следующим -правилам: - -1. если from есть в ростере, то пропускать. -1. если from есть в списке jid-ов на которые недавно уходили сообщения - (последняя три дня к примеру), то пропускать. -1. возможен еще конфигурируемый фильтр по серверу. К примеру для всех серверов - кроме icq.jabber.ru тоже пропускать. -1. для всех остальных соообщение/презенс сохранить, а в ответ выслать случайную - текстовую капчу, которую можно взять из файлика и ждать ответ некоторое время. - Если ответ пришел и он верен -- показать сохраненное сообщение, иначе через - некоторое время сохраненное сообщение удалить а JID забыть. - -Список JID-ов, на которые отсылались сообщения, список JID-ов которым были -высланы капчи, ответы на эти капчи и сами сохраненные сообщения можно хранить -на сервере в jabber:x:private -([JEP-0049](http://www.jabber.org/jeps/jep-0049.html)) при этом периодически -(можно не по таймеру, а во время очередного обновления данных) удалять записи -с истекшим сроком годности. - -Еще надо предусмотреть: - -* зацикливание, когда на $from висит бот, который будет в ответ на каждую - капчу высылать своё сообщения, например, список доступных команд. -* сообщения от jid-ов из чата. Они не в ростере и им сообщения не высылались, - но высылать им капчи нельзя. Надо как-то тоже обработать. +Идея взята из отложенного протокола [JEP-0159 Spim blocking](http://www.jabber.org/jeps/jep-0159.html) но там предлагают реализовать на серверах а тут в Ткаббере. Первый вариант конечно лучше, но протокол то отложен, когда активируют и активируют ли вообще неизвестно. + +Суть протокола -- фильтровать все входящие сообщения и презенсы по следующим правилам: + +1. если from есть в ростере, то пропускать. +1. если from есть в списке jid-ов на которые недавно уходили сообщения (последняя три дня к примеру), то пропускать. +1. возможен еще конфигурируемый фильтр по серверу. К примеру для всех серверов кроме icq.jabber.ru тоже пропускать. +1. для всех остальных соообщение/презенс сохранить, а в ответ выслать случайную текстовую капчу, которую можно взять из файлика и ждать ответ некоторое время. Если ответ пришел и он верен -- показать сохраненное сообщение, иначе через некоторое время сохраненное сообщение удалить а JID забыть. + +Список JID-ов, на которые отсылались сообщения, список JID-ов которым были высланы капчи, ответы на эти капчи и сами сохраненные сообщения можно хранить на сервере в jabber:x:private ([JEP-0049](http://www.jabber.org/jeps/jep-0049.html)) при этом периодически (можно не по таймеру, а во время очередного обновления данных) удалять записи с истекшим сроком годности. + +Еще надо предусмотреть: + +* зацикливание, когда на $from висит бот, который будет в ответ на каждую капчу высылать своё сообщения, например, список доступных команд. +* сообщения от jid-ов из чата. Они не в ростере и им сообщения не высылались, но высылать им капчи нельзя. Надо как-то тоже обработать. + + Index: wiki/ru/Плагины/Juick.md ================================================================== --- wiki/ru/Плагины/Juick.md +++ wiki/ru/Плагины/Juick.md @@ -1,65 +1,52 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Плагины/Juick/index.html) + # Плагины/Juick Материал из Tkabber Wiki -Плагин для жуйкования. То бишь, ведения (микро)блога на -[juick.com](http://juick.com). - -На данный момент нам известны оригинальная версия авторства -[roche](http://juick.com/roche/) и её форк от -[*Totktonada*](../Участник_Totktonada.md). Поскольку оригинальная версия не -развивается уже достаточно давно, рекомендуется использовать форк (он же — -версия из SVN tkabber-3rd-party, ссылки см. ниже). - -Возможности списком: - -* Подсветка различными цветами сущностей (номеров, ников, тегов). -* Выделение цветом цитат (строк, начинающихся с символа '>'). -* Вставка сущностей в текущую позицию ввода по клику правой клавишей. -* ![(!)](../../images/Ok_icon.png) **Включить в Менеджере плагинов ** -* Меню по правой кнопке мыши: - * Копирование сущностей в буфер обмена. - * Открытие треда/блога/тега в браузере. - * Подписка на тред. -* Подсветка приватных сообщений (PM) в окне чата. По умолчанию подобраны - бросающиеся в глаза цвета: синие буквы на оранжевом фоне. -* Поддержка изменения цветов через xrdb. -* Персональными сообщениями считаются только приватные (PM) (было также для - ответов на комментарии пользователя, но теперь сломано). Индикация остальных - сообщений с Juick'а — как у сообщений из конференции. Это поведение - отключаемо. -* Добавлена команда для подписки и просмотра треда: «S \#123456+». -* Выводится время появления поста на Juick'е (независимо от времени его прихода - клиенту пользователя) из juick-xmpp-api. -* Номерки выделяются во всех чатах. При нажатии на номер фокус перемешается на - окно Juick'а (JID можно указать в настройках), и номер помещается в поле - ввода. -* Удаляется элемент jabber:x:oob из сообщений с Juick'а. Скажи «нет» - всплывающим окнам! -* Дополнение жуйковых команд и сущностей из открытого чата по клавише ``. -* Отображение markdown-ссылок в окне Juick. - -Плагин доступен через Subversion (tkabber-3rd-party) в двух инкарнациях: - -* -* - -На данный момент (14.04.2012) обе ветки абсолютно идентичны и работают как с -Ткаббером 0.11.1, так и с SVN-версией Ткаббера. Достигается это с помощью слоя -совместимости, который подключается, если плагин запущен под релизным (0.11.1) -Ткаббером. Впрочем, некоторые отличия в работе плагина могут наблюдаться; к -примеру, динамическая загрузка/выгрузка будет работать только с новым -Ткаббером. - -Как оригинальная версия, так и форк доступны через Git: - -* Оригинал: -* Форк: - -На Juick’е про плагин обычно пишут с тегом -[\*tkabber4juick](http://juick.com/tag/tkabber4juick). - -Авторы: [roche](http://juick.com/roche), -[*Totktonada*](../Участник_Totktonada.md). +Плагин для жуйкования. То бишь, ведения (микро)блога на [juick.com](http://juick.com). + +На данный момент нам известны оригинальная версия авторства [roche](http://juick.com/roche/) и её форк от [Totktonada](../Участник_Totktonada.md). Поскольку оригинальная версия не развивается уже достаточно давно, рекомендуется использовать форк (он же — версия из SVN tkabber-3rd-party, ссылки см. ниже). + +Возможности списком: + +* Подсветка различными цветами сущностей (номеров, ников, тегов). +* Выделение цветом цитат (строк, начинающихся с символа '>'). +* Вставка сущностей в текущую позицию ввода по клику правой клавишей. +* ![(!)](../../images/Ok_icon.png) **Включить в Менеджере плагинов ** +* Меню по правой кнопке мыши: + * Копирование сущностей в буфер обмена. + * Открытие треда/блога/тега в браузере. + * Подписка на тред. + +* Подсветка приватных сообщений (PM) в окне чата. По умолчанию подобраны бросающиеся в глаза цвета: синие буквы на оранжевом фоне. +* Поддержка изменения цветов через xrdb. +* Персональными сообщениями считаются только приватные (PM) (было также для ответов на комментарии пользователя, но теперь сломано). Индикация остальных сообщений с Juick'а — как у сообщений из конференции. Это поведение отключаемо. +* Добавлена команда для подписки и просмотра треда: «S \#123456+». +* Выводится время появления поста на Juick'е (независимо от времени его прихода клиенту пользователя) из juick-xmpp-api. +* Номерки выделяются во всех чатах. При нажатии на номер фокус перемешается на окно Juick'а (JID можно указать в настройках), и номер помещается в поле ввода. +* Удаляется элемент jabber:x:oob из сообщений с Juick'а. Скажи «нет» всплывающим окнам! +* Дополнение жуйковых команд и сущностей из открытого чата по клавише Tab. +* Отображение markdown-ссылок в окне Juick. + +Плагин доступен через Subversion (tkabber-3rd-party) в двух инкарнациях: + +* + http://svn.xmpp.ru/repos/tkabber-3rd-party/branches/plugins-0.11.1/juick/ + +* + http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/juick/ + +На данный момент (14.04.2012) обе ветки абсолютно идентичны и работают как с Ткаббером 0.11.1, так и с SVN-версией Ткаббера. Достигается это с помощью слоя совместимости, который подключается, если плагин запущен под релизным (0.11.1) Ткаббером. Впрочем, некоторые отличия в работе плагина могут наблюдаться; к примеру, динамическая загрузка/выгрузка будет работать только с новым Ткаббером. + +Как оригинальная версия, так и форк доступны через Git: + +* Оригинал: [https://github.com/feuerbach/tkabber4juick](https://github.com/feuerbach/tkabber4juick) +* Форк: [https://github.com/Totktonada/tkabber4juick](https://github.com/Totktonada/tkabber4juick) + +На Juick’е про плагин обычно пишут с тегом [\*tkabber4juick](http://juick.com/tag/tkabber4juick). + +Авторы: [roche](http://juick.com/roche), [Totktonada](../Участник_Totktonada.md). + + Index: wiki/ru/Планы_на_будущее.md ================================================================== --- wiki/ru/Планы_на_будущее.md +++ wiki/ru/Планы_на_будущее.md @@ -1,659 +1,488 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Планы_на_будущее/index.html) + # Планы на будущее Материал из Tkabber Wiki -Сюда давайте писать то, что собираемся на этой вики (а также просто касательно -Ткаббера) сделать: про что написать статью, что протестировать и т.д. - -То, что уже сделано, можно не стирать, а зачёркивать, чтобы было видно -ход работ. - -Просьба не путать разделы "Разработка" и "Вики". В раздел "Вики" вносите ваши -пожелания, касающиеся организации именно вики, а не проблем с Ткаббером. +Сюда давайте писать то, что собираемся на этой вики (а также просто касательно Ткаббера) сделать: про что написать статью, что протестировать и т.д. + +То, что уже сделано, можно не стирать, а зачёркивать, чтобы было видно ход работ. + +Просьба не путать разделы "Разработка" и "Вики". В раздел "Вики" вносите ваши пожелания, касающиеся организации именно вики, а не проблем с Ткаббером. + +--- ## Содержание * [1 Разработка](#Разработка) - * [1.1 Удаленное управление](#Удаленное_управление) - * [1.2 Контакты онлайн - отображать вверху списка](#sКонтакты_онлайн_-_отображать_вверху_списка_s) - * [1.3 MUC. Пресеты для причин kick/ban](#MUC._Пресеты_для_причин_kick_ban) - * [1.4 Ъ положение Ткаббера на раб. столе](#Ъ_положение_Ткаббера_на_раб._столе) - * [1.5 Шрефты @;%&!](#Шрефты_) - * [1.6 Меню в истории разговоров](#Меню_в_истории_разговоров) - * [1.7 Статусбар в полнотекстовом поиске](#Статусбар_в_полнотекстовом_поиске) - * [1.8 Нормальная закладка при потере фокуса](#Нормальная_закладка_при_потере_фокуса) - * [1.9 ГУЙ для метаконтактов](#ГУЙ_для_метаконтактов) - * [1.10 Сделать сохранение положения ростера (свернут-развернут) (Fixer)](#Сделать_сохранение_положения_ростера_свернут-развернут_Fixer) - * [1.11 Добавить возможность сохранять пароль в md5 виде для автологина (Fixer)](#Добавить_возможность_сохранять_пароль_в_md5_виде_для_автологина__Fixer) - * [1.12 Встроить плагин autoconnect (борьба с "№;%:\*" транспортами) (сомнительно)](#Встроить_плагин_autoconnect_борьба_с_№_транспортами_сомнительно) - * [1.13 Нумерация закладок](#Нумерация_закладок) - * [1.14 Поиск в диско и т.д.](#Поиск_в_диско_и_т.д.) - * [1.15 Звуки к играм](#Звуки_к_играм) - * [1.16 Доработать кое-какие игры](#Доработать_кое-какие_игры) - * [1.17 Кэш новостей](#sКэш_новостей_s) - * [1.18 Игнор в выпадающем меню на JID](#sИгнор_в_выпадающем_меню_на_JID_s) - * [1.19 Подтверждения](#Подтверждения) - * [1.19.1 Сделать хотя бы в виде патча](#sСделать_хотя_бы_в_виде_патча_s) - * [1.19.2 Довести их до уровня плагина](#sДовести_их_до_уровня_плагина_s) - * [1.20 Чебуратор](#Чебуратор) - * [1.21 Закладки](#Закладки) - * [1.21.1 Автоматическая установка](#Автоматическая_установка) - * [1.21.2 Выборочное удаление](#Выборочное_удаление) - * [1.22 Управление ткаббером через командную строку](#Управление_ткаббером_через_командную_строку) - * [1.23 Доделать мультилогин](#Доделать_мультилогин) - * [1.24 Анти SPIM](#Анти_SPIM) - * [1.25 Плагин "Whiteboard" aka "Грифельная доска"](#Плагин_Whiteboard_aka_Грифельная_доска) - * [1.26 Отправка сообщения нескольким контактам](#Отправка_сообщения_нескольким_контактам) - * [1.27 Озвучить бы Spy](#sОзвучить_бы_Spy_s) - * [1.28 !Пофиксить! цвет в Spy](#sПофиксить_цвет_в_Spy_s) - * [1.29 !Пофиксить! цвет по адресу "История разговоров - логи" под темой дарк (Fixer)](#sПофиксить_цвет_по_адресу_История_разговоров_-_логи_под_темой_дарк_Fixer_s) - * [1.30 Довести до ума XHTML](#Довести_до_ума_XHTML) - * [1.31 Мои ожидания от Attline (Attention Line) plugin'а](#Мои_ожидания_от_Attline_Attention_Line_pluginа) - * [1.32 Плагин для взятия ресурса из файла](#Плагин_для_взятия_ресурса_из_файла) - * [1.33 Кнопки быстрого доступа к нужным функциям некоторых плагинов](#Кнопки_быстрого_доступа_к_нужным_функциям_некоторых_плагинов) - * [1.34 Показ во всплывающем окне (тултипе) посетителя конфы всех его ников в данной конфе](#Показ_во_всплывающем_окне_тултипе_посетителя_конфы_всех_его_ников_в_данной_конфе) -* [2 Known Issues](#Known_Issues) -* [3 По Вики](#По_Вики) - * [3.1 Структура вики](#Структура_вики) - * [3.2 Перевод на английский](#Перевод_на_английский) - * [3.3 Перевод на испанский](#Перевод_на_испанский) - * [3.4 Статья "Файл конфигурации"](#Статья_Файл_конфигурации) - * [3.5 Каталанский язык](#sКаталанский_язык_s) - * [3.6 Написать статьи](#Написать_статьи) - * [3.7 Галереи](#Галереи) - * [3.7.1 Глюки](#sГлюки_s) - * [3.7.2 Перезалить их](#Перезалить_их) - * [3.8 Обновить скриншоты к статьям](#Обновить_скриншоты_к_статьям) - * [3.9 Разобраться с многоязычным интерфейсом](#Разобраться_с_многоязычным_интерфейсом) - * [3.10 Ссылки xmpp:](#Ссылки_xmpp) - * [3.11 Интервики на JaWiki](#Интервики_на__JaWiki) - * [3.12 Проблемы, найденные в вики при осмотре Ткаббера 0.10.0-svn-20070521(tcl/tk 8.4.11)](#Проблемы_найденные_в_вики_при_осмотре_Ткаббера_0.10.0-svn-20070521tcl_tk_8.4.11) - -## Разработка -Этот раздел представляет собой что-то вроде feature request. Если у вас есть -какие-то идеи относительно улучшения Ткаббера, можете оставлять тут свои -пожелания. Просьба быть лаконичными и писать ясно, чтобы любой мог себе уяснить -вашу идею. Если у вас чешутся руки чего-то попрограммировать, но нет идей — вот -они перед вами :) - -> _Имейте, однако, в виду, что эта статья — не более, чем сборник пожеланий: - сюда кто угодно может писать свои "хотелки", и это совершенно не означает, - что их кто-либо когда-либо возьмётся реализовывать. Если вам интересны - **намерения разработчиков** (то есть тех, кто активно пишет код для - Ткаббера), читайте ["TODO разработчиков"](../en/TODO.md). Писать туда не - надо. И опять же имейте в виду, что появление чего-либо в том TODO не - означает, что это что-либо **точно** будет реализовано; это всё — типичные - [WIBNIs](http://foldoc.org/foldoc.cgi?WIBNI)._ - -### Удаленное управление - -[http://www.jabber.org/jeps/jep-0146.html](http://www.jabber.org/jeps/jep-0146.html). -С маленькими переделками ткаббера задача постепенно -[решается](http://forum.jrudevels.org/viewtopic.php?t=1014). (c) feez - -[**Kostix**](Участник_Kostix.md) 21:11, 18 сентября 2006 (MSD) первый вариант уже в -транке! :) - -### Контакты онлайн - отображать вверху списка - -Сортировка контактов в ростере таким образом, чтобы контакты, находящиеся в -онлайн, отображались выше оффлайновых контактов. Скорее всего - опционально, -через настройки. - -[**kostix**](Участник_Kostix.md) 22:17, 23 апреля 2008 (MSD) -- два возражения: - -* Как это средство должно взаимодействовать с группами ростера? Отдельная - сортировка для каждой группы? Но в чём смысл тогда? -- при большом ростере с - открытыми группами всё равно не избежать прокрутки. -* В Ткаббере есть возможность переключать ростер в режим показа только тех, кто - в онлайне. Это делается с тулбара или главного меню, а также может легко - навешиваться на комбинацию клавиш, о чём рассказано в статье - [**Нетривиальные настройки**](Нетривиальные_настройки.md). -* Наконец, в Ткаббере уже есть фильтрация ростера по буквам ника контакта. - ---- - -**Gooseman:** Контраргументы: согласен, функциональность добавляется очень -небольшая, но все таки добавляется. Необходимость в прокрутке как раз - -убирается, потому что онлайн-контакты группируются вверху, а группы можно -сворачивать/разворачивать. Второй аргумент: готов проставить автору ясчик -пива.:) Или, скорее, денежный его эквивалент каким-нить электронным способом. - ---- - -[**ycbl**](Участник_Bigote.md) 14:16, 20 июня 2009 (MSD) - -По-моему, товарищ [*Jet*](Участник_Jet.md) -[**заработал себе**](Патчи.md#Отображение_доступных_контактов_сверху_списка) -пресловутый ясчик пива ;) - -### MUC. Пресеты для причин kick/ban - -Добавить выбор причины кика или бана из списка, определяемым пользователем. -Возможны варианты как через меню, т.е. дополнительное подменю, либо после клика -на команду - окно. - -См. этот -[**кусок в конфиг**](Нетривиальные_настройки.md#Собственное_меню_для_киков_в_групчате). - -Впрочем, возможно, реализация этой штуки в виде плагина с визуальным редактором -пресетов (на манер [**customstatus**](Плагины.md#Customstatus)) имеет смысл. - -### Ъ положение Ткаббера на раб. столе - -Сделать так шоб ткаббер сам рассчитывал размеры и положение окна в зависимости -от разрешения, точно по центру экрана и определенное соотношение сторон, + -возможность сохранить положение для будущих сеансов! Вторая часть -пожелания реализована в svn-версии (приблизительно февраль 2009). - -### Шрефты @;%&! - -Добавить наконец полноценную настройку шрифтов, допилить диалоги -поиска... - -### Меню в истории разговоров - -Добавить по всем закоулкам истории разговоров меню с пунктами типа "копировать, -гугл, блабла" (Fixer) - -### Статусбар в полнотекстовом поиске - -Добавить в полнотекстовом поиске правее кнопок "Поиск" и "Отменить" показ -статуса - идет поиск/найдено Н слов/приостановлено. (Fixer) - -### Нормальная закладка при потере фокуса - -Сделать закладку в виде линии при потере фокуса (Fixer) - -Начиная с версии 0.11.0 имеется встроенный плагин attline. - -### ГУЙ для метаконтактов - -Сделать нормальный гуй для создания метаконтактов, т.е. объединения -нескольких контактов в один. (Fixer) - -Реализовано в svn-версии (февраль или март 2009). - -### Сделать сохранение положения ростера (свернут-развернут) (Fixer) - -### Добавить возможность сохранять пароль в md5 виде для автологина (Fixer) - -MD5 хакнут уж несколько лет как. Где-то тут даже на вики мы про это написали. - -[**ycbl**](Участник_Bigote.md) 01:30, 8 мая 2007 (MSD) - -BTW, для целей "чтоб не читали пароль, когда флэшку с Ткаббером кому-то -отдаёшь" MD5 "хватило бы за глаза и за уши". Эту фичу нельзя реализовать по -теоретическим соображениям, т.к. Ткабберу нужен чистый и ничем не замутнённый -пароль для аутентификации на сервере, а любой крипто-хэш по определению (в -теории) нереверсивен. - -[**kostix**](Участник_Kostix.md) 18:59, 8 мая 2007 (MSD) - -Хм, по словам kostix данную фичу реализовать не удастся, имхо, попробовать -написать скрипт и статью по gnupg и config.tcl? - -[*Fixer*](Участник_Fixer.md) 17:54, 8 мая 2007 (MSD) - -Рабочую флэшку с Ткаббером (то есть которой вы сами пользуетесь) я бы вообще -порекомендовал никому не давать, особенно если вы не шарите в тикле. Да если и -шарите, будете каждый раз проверять, наизменял ли ваш заклятый друг в шутку или -всерьёз какой-нибудь тихий закоулок кода? А уж сохранить себе "на память" -зашифрованный конфиг такого доброго дяди и вообще сам бог велел. - -[**ycbl**](Участник_Bigote.md) надевает чёрные очки и удаляется, незаметно -оглядываясь по сторонам. - -Как ни странно, после случая с модом "Pandora" для Bombus'а такая паранойя не -выглядит чересчур излишней. - -[**kostix**](Участник_Kostix.md) 14:42, 9 мая 2007 (MSD) - -Tkabber на флешке? А starpack для чего придумали? :) - -[*Fixer*](Участник_Fixer.md) 23:45, 9 мая 2007 (MSD) - -### Встроить плагин autoconnect (борьба с "№;%:\*" транспортами) (сомнительно) - -Довести до ума транспорт и добавить в официальную сборку? Слишком часто -отпадает аськотранспорт %) .\_. - -[*Fixer*](Участник_Fixer.md) 18:02, 8 мая 2007 (MSD) - -### Нумерация закладок - -Довести до состояния Plugin нумерацию закладок. (c) lknight - **Добавил в [Плагины](Плагины.md#Tab_number). [eXire](Участник_EXire.md)** - -### Поиск в диско и т.д. - -Поиск регэкспы или просто строкой в browse/discovery окне. (искать -конференции) и RSS неплохо бы, а в идеале - заточить под любой элемент -Дискавери (с) bigote (похоже, что RSS в Дискавери уже так и работает, жаль -только, что полный список они убрали - он там совсем не лишний). - -[**Kostix**](Участник_Kostix.md) 03:17, 7 сентября 2006 (MSD) Поиск диско есть -в SVN начиная с 2006-08-17, поиск в RawXML — с 2006-08-18. Не хватает поиска в -Headlines и Message Archive. - -### Звуки к играм - -Как-нибудь надо прикрутить звуковое оповещение к играм (желательно, чтобы -можно было выбрать свой звук, т.е. чтобы он отличался от стандартных). Ещё -можно попробовать сделать шахматные часы, которые вполне могут служить и для -других игровых плагинов. (c) bigote - -Первая часть реализована, причём уже давно (не то в 0.10.0, не то в 0.11.0). - -### Доработать кое-какие игры - -У этих игровых плагинов, как выясняется, имеется ряд серьёзных недостатков. -Один из них: плагин никак не сообщает игроку, если вдруг его оппонент теряет -соединение, случайно или намеренно закрывает таб с игрой. То есть, ты думаешь, -что игра продолжается, а на самом деле противник уже перезапустил Ткаббер, и -игра с его стороны утеряна. В связи с этим два вопроса: - -* Можно ли сделать оповещение о закрытии таба в принципе? Это всё равно, что - позвонить в милицию после того, как тебя застрелили :) Но вдруг??? -* Хорошо бы приделать сохранение состояния игры на диск, чтобы по крайней мере - иметь возможность восстанавливать её после перезапуска клиента (а в идеале — - и после падения). (c) bigote - -### Кэш новостей - -Кстати, очень бы не помешало переделать сохранение кэша новостей в реальном -времени, а не при закрытии Ткаббера — любое вынужденное его прибивание убивает -и текущее состояние окна новостей — в кэше хранятся старые новости (возможно, -недельной давности). (c) bigote - -**Добавил в [Плагины.](Плагины.md#Rsssaver) [eXire.](Участник_EXire.md)** - -### Игнор в выпадающем меню на JID - -Сделать (если вдруг это не сделает **Teo**) в выпадающем на Jid'е по правой -кнопке мышке меню возможность добавить/убрать из игнор списка. (с) lknight - -**Оказывается, давно уже это дело реализовано :)** - -### Подтверждения - -#### Сделать хотя бы в виде патча - -Добавить подтверждения закрытия табов. О закрытии единичного таба - не -обязательно, но до кучи можно. А вот про "Закрыть остальные вкладки" и "Закрыть -все вкладки" - надо бы. Я уже разок закрыл "остальные вкладки"... :) (c) -bigote - -**Добавил в [Патчи](Патчи.md). [eXire](Участник_EXire.md)** - -#### Довести их до уровня плагина - -Сделать плагином, плюс добавить подтверждение на закрытие Ткаббера, плюс -добавить опции в Настройки. - - **Добавил в [Плагины.](Плагины.md#Confirm) [eXire](Участник_EXire.md).** - -### Чебуратор - -Сделать конфигуратор к Ткабберу. Описание выложено -[**отдельной статьёй**](Чебуратор.md). -Обсуждать конфигуратор давайте там же, в отдельной -статье (подробности на месте). - -### Закладки - -#### Автоматическая установка - -Был тут разговор про них... Идея такая: при переходе в автоэвей в каждой -открытой конференции автоматом устанавливается закладка в последней строке. - -Новые идеи: сделать, чтобы закладки самостоятельно втыкались при ручной -смене статуса и потере фокуса окном Ткаббера. Причём, при потере фокуса должна -вставляться закладка другого цвета (добавить другой пиксмап, например, ту же -закладку, только зелёного цвета). Добавить раздельные настройки для включения -каждого вида закладок, потому что потеря фокуса - частое явление, и не всем -может понравиться наблюдать у себя кучи зелёных закладок. - -**Добавил в [Плагины](Плагины.md#Bookmarks). [eXire](Участник_EXire.md).** - -#### Выборочное удаление - -На данный момент удалять можно только все закладки в окне чата. Хорошо бы иметь -возможность удалять ту, которую хочется (через контекстное меню, как и -расставляем). - -### Управление ткаббером через командную строку - -Цель: чтобы при нажатии на ссылку вида `xmpp:user@jabber.ru` открывался Ткаббер -с нужными параметрами и выполнял нужное действие. xmppmime.tcl содержит похожую -функциональность но только для уже устаревших -[xmpp-mime файлов](http://www.jabber.org/jeps/jep-0081.html). - -Сюда же чтобы можно было изменять PEP-стостояния через вызов Ткаббера с определенными параметрами. - -[**Более подробное изложение мыслей**](ТЗ_по_управлению_через_параметры_командной_строки.md) - -### Доделать мультилогин - -Не хватает: - -* автоматическое подключение нескольких профилей и настройка соответствующая. -* выбор содинения в окне disco/browser (или перед открытием) с которого должны - отправлятся запросы -* выбор аккаунта для редактирования личной информации - -[**Kostix**](Участник_Kostix.md) 17:09, 27 октября 2006 (MSD) советует смотреть -[**сюда**](Tkabber.md#Лёгкий_в_использовании_мультилогин). То, чего не хватает, и -так известно прекрасно. Выработка разумного решения проблемы — вопрос более -сложный и более интересный. - -### Анти SPIM - -Реализация антиспама с капчами, а то спама из асечного транспорта все больше и -больше. Идея взята из отложенного протокола -[JEP-0159 Spim blocking](http://www.jabber.org/jeps/jep-0159.html) - -[**Подробнее ...**](Плагины/AntiSPIM.md) - -### Плагин "Whiteboard" aka "Грифельная доска" - -Я тут поковырял плагин "whiteboard", ничего особенного - добавил окружность, -многоугольник, цвет заливки... Хотелось бы узнать, я фигнёй страдаю и этим и -так кто-то занимается? - -Вообщем есть там планы развития какие? - -Просто код для многоугольника в svgrender.tcl уже был. Да и с tcl/tk я всего -два дня знаком, ковыряюсь "just for fun". - -[*Zakon*](Участник_Zakon.md) 02:06, 27 октября 2006 (MSD) - ---- - -Нет, не фигнёй. Там бы ещё очень не помешал экспорт нарисованного во что-то -удобоваримое, например .svg (сейчас есть экспорт в .ps, но это не комильфо, в -векторном редакторе это не отредактируешь), а также .gif или .png (только -рабочей области). И очень не помешал бы импорт из svg нарисованных ранее -рисунков. Правда, специалисты говорят, что это затруднительно, но у кого-то -проскакивала и мысль насчёт сохранения рисунка в своём формате (где будет -храниться не сам рисунок, а станцы, с помощью которых всё отрисовывалось), -тогда при открытии такого файла Ткаббер просто выполнит сценарий и отошлёт -результат всем собеседникам, с кем эта доска открыта. Думаю, **такая** доска -была бы архиудобной для чего хочешь: хоть дорогу на пьянку линуксовку -рисуй, хоть совещание с клиентом или с сотрудниками устраивай, хоть проекты -разрабатывай в UML. - -[**ycbl**](Участник_Bigote.md) 14:57, 22 августа 2009 (MSD) - -### Отправка сообщения нескольким контактам - -Добавить в окно чата возможность отослать сообщение нескольким контактам с -возможностью выбора из ростера. - -### Озвучить бы Spy - -Давно мечтаю о такой фигне: чтобы Spy не просто шпиёнил за кем-нибудь из -ростера, но и извещал звуком (желательно, чтобы можно было задать -индивидуальный звук для каждого, за кем шпиёним) о появлении этого товарища в -онлайне. И чтоб можно было настраивать степень надоедливости: пищать всегда; -пищать, когда я сам онлайн; пищать, когда я в эвее (не в XA); пищать, когда -окно Ткаббера в фокусе или вне фокуса. И чтоб эта настройка была независимой от -просто звуков Ткаббера. То есть, допустим, у меня просто звуки отключаются, -когда окно Ткаббера в ростере и когда я в эвее. А вот извещения о присутствии -кого-нибудь мне бы хотелось получать всегда. А можно присобачить к нему его -собственный тайм-аут, независимый от тайм-аута автоэвея. Отходишь, например, от -компа дела поделать, а неплохо бы знать, что некий нужный чел появился. Если -привязывать озвучку к тайм-ауту автоэвея, то она вскоре перестанет работать, а -если включить её на постоянку, она будет зря надоедать окружающим, когда я -ухожу на работу. А так настроил ему часа полтора-два — и хватит. - -[**ycbl**](Участник_Bigote.md) 04:32, 27 января 2007 (MSK) - -P.S. Что-то сумбурно написал, но если чего непонятно, ловите в конфе или -спрашивайте напрямую. - -* Вот [**тут**](Патчи.md#Звук_на_установленные_к_наблюдению_в_Шпионе_jidы) немного - сделано. Звук срабатывающий вместе с всплывающим окошком. (BrennendeR~) - -### !Пофиксить! цвет в Spy - -Под темой dark синие надписи практически нечитабельны .\_. (Fixer) - -* В \*.xrdb добавить что-то вроде - - *Spy.timestampforeground: white - *Spy.nickforeground: yellow - *Spy.jidforeground: white - *Spy.presenceforeground: red - *Spy.reasonforeground: #9953d9 - -(BrennendeR~) - -### !Пофиксить! цвет по адресу "История разговоров - логи" под темой дарк (Fixer) - -Бо ужоснах. - -* Аналогично предыдущему: крутится за .\*xrdb примерно так - - *JDisco.fill: white - *JDisco.activefill: #020d61 - *JDisco.border: #fcff00 - *JDisco.featurecolor: #37cf45 - *JDisco.identitycolor: #ffff00 - *JDisco.optioncolor: mediumorchid3 - *JDisco.cbackground: #ff0000 - *JDisco.foreground: #ffff00 - *Tree*background: #111111 - *fill: #ffffff - *linesfill: #ff0000 - *crossfill: #ffff00 - -(BrennendeR~) - -### Довести до ума XHTML - -Можете не принимать, но вот мой "официальный" feature request по доведению до -ума поддержки XHTML. - -1) Убрать жёстко прошитую helvetica из кода, пускай всё рисуется дефолтным фонтом. - -2) Убрать изменение размера шрифта (вроде, 12 там жёстко прошито), пускай всё -рисуется дефолтным размером, тем более что огромные "ПРИВЕТ, ДРУЖИЩЕ" по утрам -никому и не нужны. - -3) Убрать жуткие вертикальные пробелы до и после сообщения, зачем они задуманы? - -4) "Полечить" установку weight и underline, не рисует их вообще. - -Таким образом неплохо бы оставить bold/normal, italic/roman и foreground color. - -Весьма надеюсь, что заявка не будет оставлена многоуважаемыми гуру без -внимания. - -### Мои ожидания от Attline (Attention Line) plugin'а - -Версия от JID:timur@a-cube.vsi.ru aka -[mailto:timur.davletshin@gmail.com](mailto:timur.davletshin@gmail.com) по -просьбе kostix. - -В Ткаббере из trunk'а появился новый весьма полезный plugin. Но его поведение -немного отличается от того, что мне хотелось бы видеть как простому -пользователю. - -Т.к. имеется всего одна настройка, меняющая поведение модуля, то разделим всё -на два случая. - -1) Когда plugins::atline::options(remove\_expired) 0 - -Окна чата, когда они открываюся мною: - -Я ожидаю, что я увижу историю предыдущего общения с пользователем, отчерченную -линией-разделителем, которая сползёт вниз через указанный таймаут. - -Окна чата, когда приходит сообщение: - -Я ожидаю, что я увижу вкладку с сообщениями, где непрочитанные сообщения будут -отчерны до тех пор, пока я их не прочитаю, после этого линия-разделитель -сползёт вниз. - -Окна групчата: - -Я ожидаю, что во вновь открытом окне линия будет находиться внизу. Вновь -появившиеся сообщения будут отчёркиваться, после прочтения линия-разделитель -сползёт вниз. - - 2) Когда plugins::atline::options(remove\_expired) 1 - -Окна чата, когда они открываюся мною: - -Я ожидаю, что я увижу историю предыдущего общения с пользователем, отчерченную -линией-разделителем, которая исчезнет через указанный таймаут. - -Окна чата, когда приходит сообщение: - -Я ожидаю, что я увижу вкладку с сообщениями, где непрочитанные сообщения будут -отчерны до тех пор, пока я их не прочитаю. - -Окна групчата: - -Я ожидаю, что во вновь открытом окне не будет никаких линий, а отчёркиваться -будут лишь непрочитанные сообщения, притом, после прочтения линия-разделитель -исчезнет. - -### Плагин для взятия ресурса из файла + * [1.1 Удаленное управление](#Удаленное_управление) + * [1.2 Контакты онлайн - отображать вверху списка](#sКонтакты_онлайн_-_отображать_вверху_списка_s) + * [1.3 MUC. Пресеты для причин kick/ban](#MUC._Пресеты_для_причин_kick_ban) + * [1.4 Ъ положение Ткаббера на раб. столе](#Ъ_положение_Ткаббера_на_раб._столе) + * [1.5 Шрефты @;%&!](#Шрефты_@%&) + * [1.6 Меню в истории разговоров](#Меню_в_истории_разговоров) + * [1.7 Статусбар в полнотекстовом поиске](#Статусбар_в_полнотекстовом_поиске) + * [1.8 Нормальная закладка при потере фокуса](#Нормальная_закладка_при_потере_фокуса) + * [1.9 ГУЙ для метаконтактов](#ГУЙ_для_метаконтактов) + * [1.10 Сделать сохранение положения ростера (свернут-развернут) (Fixer)](#Сделать_сохранение_положения_ростера_свернут-развернут_Fixer) + * [1.11 Добавить возможность сохранять пароль в md5 виде для автологина (Fixer)](#Добавить_возможность_сохранять_пароль_в_md5_виде_для_автологина__Fixer) + * [1.12 Встроить плагин autoconnect (борьба с "№;%:\*" транспортами) (сомнительно)](#Встроить_плагин_autoconnect_борьба_с_№%_транспортами_сомнительно) + * [1.13 Нумерация закладок](#Нумерация_закладок) + * [1.14 Поиск в диско и т.д.](#Поиск_в_диско_и_т.д.) + * [1.15 Звуки к играм](#Звуки_к_играм) + * [1.16 Доработать кое-какие игры](#Доработать_кое-какие_игры) + * [1.17 Кэш новостей](#sКэш_новостей_s) + * [1.18 Игнор в выпадающем меню на JID](#sИгнор_в_выпадающем_меню_на_JID_s) + * [1.19 Подтверждения](#Подтверждения) + * [1.19.1 Сделать хотя бы в виде патча](#sСделать_хотя_бы_в_виде_патча_s) + * [1.19.2 Довести их до уровня плагина](#sДовести_их_до_уровня_плагина_s) + * [1.20 Чебуратор](#Чебуратор) + * [1.21 Закладки](#Закладки) + * [1.21.1 Автоматическая установка](#Автоматическая_установка) + * [1.21.2 Выборочное удаление](#Выборочное_удаление) + * [1.22 Управление ткаббером через командную строку](#Управление_ткаббером_через_командную_строку) + * [1.23 Доделать мультилогин](#Доделать_мультилогин) + * [1.24 Анти SPIM](#Анти_SPIM) + * [1.25 Плагин "Whiteboard" aka "Грифельная доска"](#Плагин_Whiteboard_aka_Грифельная_доска) + * [1.26 Отправка сообщения нескольким контактам](#Отправка_сообщения_нескольким_контактам) + * [1.27 Озвучить бы Spy](#sОзвучить_бы_Spy_s) + * [1.28 !Пофиксить! цвет в Spy](#sПофиксить_цвет_в_Spy_s) + * [1.29 !Пофиксить! цвет по адресу "История разговоров - логи" под темой дарк (Fixer)](#sПофиксить_цвет_по_адресу_История_разговоров_-_логи_под_темой_дарк_Fixer_s) + * [1.30 Довести до ума XHTML](#Довести_до_ума_XHTML) + * [1.31 Мои ожидания от Attline (Attention Line) plugin'а](#Мои_ожидания_от_Attline_Attention_Line_pluginа) + * [1.32 Плагин для взятия ресурса из файла](#Плагин_для_взятия_ресурса_из_файла) + * [1.33 Кнопки быстрого доступа к нужным функциям некоторых плагинов](#Кнопки_быстрого_доступа_к_нужным_функциям_некоторых_плагинов) + * [1.34 Показ во всплывающем окне (тултипе) посетителя конфы всех его ников в данной конфе](#Показ_во_всплывающем_окне_тултипе_посетителя_конфы_всех_его_ников_в_данной_конфе) +* [2 Known Issues](#Known_Issues) +* [3 По Вики](#По_Вики) + * [3.1 Структура вики](#Структура_вики) + * [3.2 Перевод на английский](#Перевод_на_английский) + * [3.3 Перевод на испанский](#Перевод_на_испанский) + * [3.4 Статья "Файл конфигурации"](#Статья_Файл_конфигурации) + * [3.5 Каталанский язык](#sКаталанский_язык_s) + * [3.6 Написать статьи](#Написать_статьи) + * [3.7 Галереи](#Галереи) + * [3.7.1 Глюки](#sГлюки_s) + * [3.7.2 Перезалить их](#Перезалить_их) + * [3.8 Обновить скриншоты к статьям](#Обновить_скриншоты_к_статьям) + * [3.9 Разобраться с многоязычным интерфейсом](#Разобраться_с_многоязычным_интерфейсом) + * [3.10 Ссылки xmpp:](#Ссылки_xmpp) + * [3.11 Интервики на JaWiki](#Интервики_на__JaWiki) + * [3.12 Проблемы, найденные в вики при осмотре Ткаббера 0.10.0-svn-20070521(tcl/tk 8.4.11)](#Проблемы_найденные_в_вики_при_осмотре_Ткаббера_0.10.0-svn-20070521tcl_tk_8.4.11) + +# Разработка +Этот раздел представляет собой что-то вроде feature request. Если у вас есть какие-то идеи относительно улучшения Ткаббера, можете оставлять тут свои пожелания. Просьба быть лаконичными и писать ясно, чтобы любой мог себе уяснить вашу идею. Если у вас чешутся руки чего-то попрограммировать, но нет идей — вот они перед вами :) + + _Имейте, однако, в виду, что эта статья — не более, чем сборник пожеланий: сюда кто угодно может писать свои "хотелки", и это совершенно не означает, что их кто-либо когда-либо возьмётся реализовывать. Если вам интересны **намерения разработчиков** (то есть тех, кто активно пишет код для Ткаббера), читайте ["TODO разработчиков"](../en/TODO.md). Писать туда не надо. И опять же имейте в виду, что появление чего-либо в том TODO не означает, что это что-либо **точно** будет реализовано; это всё — типичные [WIBNIs](http://foldoc.org/foldoc.cgi?WIBNI)._ + +## Удаленное управление + +[http://www.jabber.org/jeps/jep-0146.html](http://www.jabber.org/jeps/jep-0146.html). С маленькими переделками ткаббера задача постепенно [решается](http://forum.jrudevels.org/viewtopic.php?t=1014). (c) feez + +[Kostix](Участник_Kostix.md) 21:11, 18 сентября 2006 (MSD) первый вариант уже в транке! :) + +## Контакты онлайн - отображать вверху списка + +Сортировка контактов в ростере таким образом, чтобы контакты, находящиеся в онлайн, отображались выше оффлайновых контактов. Скорее всего - опционально, через настройки. + +[kostix](Участник_Kostix.md) 22:17, 23 апреля 2008 (MSD) -- два возражения: + +* Как это средство должно взаимодействовать с группами ростера? Отдельная сортировка для каждой группы? Но в чём смысл тогда? -- при большом ростере с открытыми группами всё равно не избежать прокрутки. +* В Ткаббере есть возможность переключать ростер в режим показа только тех, кто в онлайне. Это делается с тулбара или главного меню, а также может легко навешиваться на комбинацию клавиш, о чём рассказано в статье [Нетривиальные настройки](Нетривиальные_настройки.md). +* Наконец, в Ткаббере уже есть фильтрация ростера по буквам ника контакта. + +--- + +**Gooseman:** Контраргументы: согласен, функциональность добавляется очень небольшая, но все таки добавляется. Необходимость в прокрутке как раз - убирается, потому что онлайн-контакты группируются вверху, а группы можно сворачивать/разворачивать. Второй аргумент: готов проставить автору ясчик пива.:) Или, скорее, денежный его эквивалент каким-нить электронным способом. + +--- + +[ycbl](Участник_Bigote.md) 14:16, 20 июня 2009 (MSD) + +По-моему, товарищ [Jet](Участник_Jet.md) [заработал себе](Патчи.md#Отображение_доступных_контактов_сверху_списка) пресловутый ясчик пива ;) + +## MUC. Пресеты для причин kick/ban + +Добавить выбор причины кика или бана из списка, определяемым пользователем. Возможны варианты как через меню, т.е. дополнительное подменю, либо после клика на команду - окно. + +См. этот [кусок в конфиг](Нетривиальные_настройки.md#Собственное_меню_для_киков_в_групчате). + +Впрочем, возможно, реализация этой штуки в виде плагина с визуальным редактором пресетов (на манер [customstatus](Плагины.md#customstatus)) имеет смысл. + +## Ъ положение Ткаббера на раб. столе + +Сделать так шоб ткаббер сам рассчитывал размеры и положение окна в зависимости от разрешения, точно по центру экрана и определенное соотношение сторон, + возможность сохранить положение для будущих сеансов! Вторая часть пожелания реализована в svn-версии (приблизительно февраль 2009). + +## Шрефты @;%&! + +Добавить наконец полноценную настройку шрифтов, допилить диалоги поиска... + +## Меню в истории разговоров + +Добавить по всем закоулкам истории разговоров меню с пунктами типа "копировать, гугл, блабла" (Fixer) + +## Статусбар в полнотекстовом поиске + +Добавить в полнотекстовом поиске правее кнопок "Поиск" и "Отменить" показ статуса - идет поиск/найдено Н слов/приостановлено. (Fixer) + +## Нормальная закладка при потере фокуса + +Сделать закладку в виде линии при потере фокуса (Fixer) + +Начиная с версии 0.11.0 имеется встроенный плагин attline. + +## ГУЙ для метаконтактов + +Сделать нормальный гуй для создания метаконтактов, т.е. объединения нескольких контактов в один. (Fixer) + +Реализовано в svn-версии (февраль или март 2009). + +## Сделать сохранение положения ростера (свернут-развернут) (Fixer) + +## Добавить возможность сохранять пароль в md5 виде для автологина (Fixer) + +MD5 хакнут уж несколько лет как. Где-то тут даже на вики мы про это написали. + +[ycbl](Участник_Bigote.md) 01:30, 8 мая 2007 (MSD) + +BTW, для целей "чтоб не читали пароль, когда флэшку с Ткаббером кому-то отдаёшь" MD5 "хватило бы за глаза и за уши". Эту фичу нельзя реализовать по теоретическим соображениям, т.к. Ткабберу нужен чистый и ничем не замутнённый пароль для аутентификации на сервере, а любой крипто-хэш по определению (в теории) нереверсивен. + +[kostix](Участник_Kostix.md) 18:59, 8 мая 2007 (MSD) + +Хм, по словам kostix данную фичу реализовать не удастся, имхо, попробовать написать скрипт и статью по gnupg и config.tcl? + +[Fixer](Участник_Fixer.md) 17:54, 8 мая 2007 (MSD) + +Рабочую флэшку с Ткаббером (то есть которой вы сами пользуетесь) я бы вообще порекомендовал никому не давать, особенно если вы не шарите в тикле. Да если и шарите, будете каждый раз проверять, наизменял ли ваш заклятый друг в шутку или всерьёз какой-нибудь тихий закоулок кода? А уж сохранить себе "на память" зашифрованный конфиг такого доброго дяди и вообще сам бог велел. + +[ycbl](Участник_Bigote.md) надевает чёрные очки и удаляется, незаметно оглядываясь по сторонам. + +Как ни странно, после случая с модом "Pandora" для Bombus'а такая паранойя не выглядит чересчур излишней. + +[kostix](Участник_Kostix.md) 14:42, 9 мая 2007 (MSD) + +Tkabber на флешке? А starpack для чего придумали? :) + +[Fixer](Участник_Fixer.md) 23:45, 9 мая 2007 (MSD) + +## Встроить плагин autoconnect (борьба с "№;%:\*" транспортами) (сомнительно) + +Довести до ума транспорт и добавить в официальную сборку? Слишком часто отпадает аськотранспорт %) .\_. + +[Fixer](Участник_Fixer.md) 18:02, 8 мая 2007 (MSD) + +## Нумерация закладок + +Довести до состояния Plugin нумерацию закладок. (c) lknight + **Добавил в [Плагины](Плагины.md#Tab_number). [eXire](Участник_EXire.md)** + +## Поиск в диско и т.д. + +Поиск регэкспы или просто строкой в browse/discovery окне. (искать конференции) и RSS неплохо бы, а в идеале - заточить под любой элемент Дискавери (с) bigote (похоже, что RSS в Дискавери уже так и работает, жаль только, что полный список они убрали - он там совсем не лишний). + + [Kostix](Участник_Kostix.md) 03:17, 7 сентября 2006 (MSD) Поиск диско есть в SVN начиная с + +2006-08-17, поиск в RawXML — с 2006-08-18. Не хватает поиска в Headlines и Message Archive. + +## Звуки к играм + +Как-нибудь надо прикрутить звуковое оповещение к играм (желательно, чтобы можно было выбрать свой звук, т.е. чтобы он отличался от стандартных). Ещё можно попробовать сделать шахматные часы, которые вполне могут служить и для других игровых плагинов. (c) bigote + +Первая часть реализована, причём уже давно (не то в 0.10.0, не то в 0.11.0). + +## Доработать кое-какие игры + +У этих игровых плагинов, как выясняется, имеется ряд серьёзных недостатков. Один из них: плагин никак не сообщает игроку, если вдруг его оппонент теряет соединение, случайно или намеренно закрывает таб с игрой. То есть, ты думаешь, что игра продолжается, а на самом деле противник уже перезапустил Ткаббер, и игра с его стороны утеряна. В связи с этим два вопроса: + +* Можно ли сделать оповещение о закрытии таба в принципе? Это всё равно, что позвонить в милицию после того, как тебя застрелили :) Но вдруг??? +* Хорошо бы приделать сохранение состояния игры на диск, чтобы по крайней мере иметь возможность восстанавливать её после перезапуска клиента (а в идеале — и после падения). (c) bigote + +## Кэш новостей + +Кстати, очень бы не помешало переделать сохранение кэша новостей в реальном времени, а не при закрытии Ткаббера — любое вынужденное его прибивание убивает и текущее состояние окна новостей — в кэше хранятся старые новости (возможно, недельной давности). (c) bigote + +**Добавил в [Плагины.](Плагины.md#Rsssaver) [eXire.](Участник_EXire.md)** + +## Игнор в выпадающем меню на JID + +Сделать (если вдруг это не сделает **Teo**) в выпадающем на Jid'е по правой кнопке мышке меню возможность добавить/убрать из игнор списка. (с) lknight + +**Оказывается, давно уже это дело реализовано :)** + +## Подтверждения + +### Сделать хотя бы в виде патча + +Добавить подтверждения закрытия табов. О закрытии единичного таба - не обязательно, но до кучи можно. А вот про "Закрыть остальные вкладки" и "Закрыть все вкладки" - надо бы. Я уже разок закрыл "остальные вкладки"... :) (c) bigote + +**Добавил в [Патчи](Патчи.md). [eXire](Участник_EXire.md)** + +### Довести их до уровня плагина + +Сделать плагином, плюс добавить подтверждение на закрытие Ткаббера, плюс добавить опции в Настройки. + **Добавил в [Плагины.](Плагины.md#Confirm) [eXire](Участник_EXire.md).** + +## Чебуратор + +Сделать конфигуратор к Ткабберу. Описание выложено **[отдельной статьёй](Чебуратор.md).** Обсуждать конфигуратор давайте там же, в отдельной статье (подробности на месте). + +## Закладки + +### Автоматическая установка + +Был тут разговор про них... Идея такая: при переходе в автоэвей в каждой открытой конференции автоматом устанавливается закладка в последней строке. + +Новые идеи: сделать, чтобы закладки самостоятельно втыкались при ручной смене статуса и потере фокуса окном Ткаббера. Причём, при потере фокуса должна вставляться закладка другого цвета (добавить другой пиксмап, например, ту же закладку, только зелёного цвета). Добавить раздельные настройки для включения каждого вида закладок, потому что потеря фокуса - частое явление, и не всем может понравиться наблюдать у себя кучи зелёных закладок. + +**Добавил в [Плагины](Плагины.md#Bookmarks). [eXire](Участник_EXire.md).** + +### Выборочное удаление + +На данный момент удалять можно только все закладки в окне чата. Хорошо бы иметь возможность удалять ту, которую хочется (через контекстное меню, как и расставляем). + +## Управление ткаббером через командную строку + +Цель: чтобы при нажатии на ссылку вида `xmpp:user@jabber.ru` открывался Ткаббер с нужными параметрами и выполнял нужное действие. xmppmime.tcl содержит похожую функциональность но только для уже устаревших [xmpp-mime файлов](http://www.jabber.org/jeps/jep-0081.html). + +Сюда же чтобы можно было изменять PEP-стостояния через вызов Ткаббера с определенными параметрами. + +**[Более подробное изложение мыслей](ТЗ_по_управлению_через_параметры_командной_строки.md)** + +## Доделать мультилогин + +Не хватает: + +* автоматическое подключение нескольких профилей и настройка соответствующая. +* выбор содинения в окне disco/browser (или перед открытием) с которого должны отправлятся запросы +* выбор аккаунта для редактирования личной информации + +[Kostix](Участник_Kostix.md) 17:09, 27 октября 2006 (MSD) советует смотреть [сюда](Tkabber.md#Лёгкий_в_использовании_мультилогин). То, чего не хватает, и так известно прекрасно. Выработка разумного решения проблемы — вопрос более сложный и более интересный. + +## Анти SPIM + +Реализация антиспама с капчами, а то спама из асечного транспорта все больше и больше. Идея взята из отложенного протокола [JEP-0159 Spim blocking](http://www.jabber.org/jeps/jep-0159.html) + +**[Подробнее ...](Плагины/AntiSPIM.md)** + +## Плагин "Whiteboard" aka "Грифельная доска" + +Я тут поковырял плагин "whiteboard", ничего особенного - добавил окружность, многоугольник, цвет заливки... Хотелось бы узнать, я фигнёй страдаю и этим и так кто-то занимается? + +Вообщем есть там планы развития какие? + +Просто код для многоугольника в svgrender.tcl уже был. Да и с tcl/tk я всего два дня знаком, ковыряюсь "just for fun". + +[Zakon](Участник_Zakon.md) 02:06, 27 октября 2006 (MSD) + +--- + +Нет, не фигнёй. Там бы ещё очень не помешал экспорт нарисованного во что-то удобоваримое, например .svg (сейчас есть экспорт в .ps, но это не комильфо, в векторном редакторе это не отредактируешь), а также .gif или .png (только рабочей области). И очень не помешал бы импорт из svg нарисованных ранее рисунков. Правда, специалисты говорят, что это затруднительно, но у кого-то проскакивала и мысль насчёт сохранения рисунка в своём формате (где будет храниться не сам рисунок, а станцы, с помощью которых всё отрисовывалось), тогда при открытии такого файла Ткаббер просто выполнит сценарий и отошлёт результат всем собеседникам, с кем эта доска открыта. Думаю, **такая** доска была бы архиудобной для чего хочешь: хоть дорогу на пьянку линуксовку рисуй, хоть совещание с клиентом или с сотрудниками устраивай, хоть проекты разрабатывай в UML. + +[ycbl](Участник_Bigote.md) 14:57, 22 августа 2009 (MSD) + +## Отправка сообщения нескольким контактам + +Добавить в окно чата возможность отослать сообщение нескольким контактам с возможностью выбора из ростера. + +## Озвучить бы Spy + +Давно мечтаю о такой фигне: чтобы Spy не просто шпиёнил за кем-нибудь из ростера, но и извещал звуком (желательно, чтобы можно было задать индивидуальный звук для каждого, за кем шпиёним) о появлении этого товарища в онлайне. И чтоб можно было настраивать степень надоедливости: пищать всегда; пищать, когда я сам онлайн; пищать, когда я в эвее (не в XA); пищать, когда окно Ткаббера в фокусе или вне фокуса. И чтоб эта настройка была независимой от просто звуков Ткаббера. То есть, допустим, у меня просто звуки отключаются, когда окно Ткаббера в ростере и когда я в эвее. А вот извещения о присутствии кого-нибудь мне бы хотелось получать всегда. А можно присобачить к нему его собственный тайм-аут, независимый от тайм-аута автоэвея. Отходишь, например, от компа дела поделать, а неплохо бы знать, что некий нужный чел появился. Если привязывать озвучку к тайм-ауту автоэвея, то она вскоре перестанет работать, а если включить её на постоянку, она будет зря надоедать окружающим, когда я ухожу на работу. А так настроил ему часа полтора-два — и хватит. + +[ycbl](Участник_Bigote.md) 04:32, 27 января 2007 (MSK) + +P.S. Что-то сумбурно написал, но если чего непонятно, ловите в конфе или спрашивайте напрямую. + +* Вот [тут](Патчи.md#Звук_на_установленные_к_наблюдению_в_Шпионе_jidы) немного сделано. Звук срабатывающий вместе с всплывающим окошком. (BrennendeR~) + +## !Пофиксить! цвет в Spy + +Под темой dark синие надписи практически нечитабельны .\_. (Fixer) + +* В \*.xrdb добавить что-то вроде + + *Spy.timestampforeground: white + *Spy.nickforeground: yellow + *Spy.jidforeground: white + *Spy.presenceforeground: red + *Spy.reasonforeground: #9953d9 + +(BrennendeR~) + +## !Пофиксить! цвет по адресу "История разговоров - логи" под темой дарк (Fixer) + +Бо ужоснах. + +* Аналогично предыдущему: крутится за .\*xrdb примерно так + + *JDisco.fill: white + *JDisco.activefill: #020d61 + *JDisco.border: #fcff00 + *JDisco.featurecolor: #37cf45 + *JDisco.identitycolor: #ffff00 + *JDisco.optioncolor: mediumorchid3 + *JDisco.cbackground: #ff0000 + *JDisco.foreground: #ffff00 + *Tree*background: #111111 + *fill: #ffffff + *linesfill: #ff0000 + *crossfill: #ffff00 + +(BrennendeR~) + +## Довести до ума XHTML + +Можете не принимать, но вот мой "официальный" feature request по доведению до ума поддержки XHTML. + +1) Убрать жёстко прошитую helvetica из кода, пускай всё рисуется дефолтным фонтом. + +2) Убрать изменение размера шрифта (вроде, 12 там жёстко прошито), пускай всё рисуется дефолтным размером, тем более что огромные "ПРИВЕТ, ДРУЖИЩЕ" по утрам никому и не нужны. + +3) Убрать жуткие вертикальные пробелы до и после сообщения, зачем они задуманы? + +4) "Полечить" установку weight и underline, не рисует их вообще. + +Таким образом неплохо бы оставить bold/normal, italic/roman и foreground color. + +Весьма надеюсь, что заявка не будет оставлена многоуважаемыми гуру без внимания. + +## Мои ожидания от Attline (Attention Line) plugin'а + +Версия от JID:timur@a-cube.vsi.ru aka [mailto:timur.davletshin@gmail.com](mailto:timur.davletshin@gmail.com) по просьбе kostix. + +В Ткаббере из trunk'а появился новый весьма полезный plugin. Но его поведение немного отличается от того, что мне хотелось бы видеть как простому пользователю. + +Т.к. имеется всего одна настройка, меняющая поведение модуля, то разделим всё на два случая. + +1) Когда plugins::atline::options(remove\_expired) 0 + +Окна чата, когда они открываюся мною: + +Я ожидаю, что я увижу историю предыдущего общения с пользователем, отчерченную линией-разделителем, которая сползёт вниз через указанный таймаут. + +Окна чата, когда приходит сообщение: + +Я ожидаю, что я увижу вкладку с сообщениями, где непрочитанные сообщения будут отчерны до тех пор, пока я их не прочитаю, после этого линия-разделитель сползёт вниз. + +Окна групчата: + +Я ожидаю, что во вновь открытом окне линия будет находиться внизу. Вновь появившиеся сообщения будут отчёркиваться, после прочтения линия-разделитель сползёт вниз. + + 2) Когда plugins::atline::options(remove\_expired) 1 + +Окна чата, когда они открываюся мною: + +Я ожидаю, что я увижу историю предыдущего общения с пользователем, отчерченную линией-разделителем, которая исчезнет через указанный таймаут. + +Окна чата, когда приходит сообщение: + +Я ожидаю, что я увижу вкладку с сообщениями, где непрочитанные сообщения будут отчерны до тех пор, пока я их не прочитаю. + +Окна групчата: + +Я ожидаю, что во вновь открытом окне не будет никаких линий, а отчёркиваться будут лишь непрочитанные сообщения, притом, после прочтения линия-разделитель исчезнет. + +## Плагин для взятия ресурса из файла [19:17] можещь в ткаббере плаг сделать, чтобы он брал ресурс из файла? [19:17] т.е. я ему говорю: ресурс возьми из файла /etc/roaming/place [19:17] и он считает оттуда, home, work, например [19:18] а то на буке автоматом меняются сетевые профили, хочу чтобы ткаббер тож ловил их -[**kostix**](Участник_Kostix.md) 19:42, 20 августа 2007 (MSD) - -### Кнопки быстрого доступа к нужным функциям некоторых плагинов - -[Tue Feb 09 16:44]\ эх, к некоторым плагинам надо бы для удобства -кнопки на тулбар прикрутить. ощущаю острую нехватку включения/выключения -антиспама и включения/выключения разных режимов в floatinglog. - -[Tue Feb 09 16:45]\ иногда надо на короткое время врубить показ -сообщений во время dnd. приходится лазить в настройки каждый раз. - -### Показ во всплывающем окне (тултипе) посетителя конфы всех его ников в данной конфе - -Есть конференции, где посетители частенько меняют ники, и было бы очень кстати -знать, ху из ху. Отвлёкся на 10 минут, а в чате совершенно другая картина. -Думаю, тултип (где уже есть инфо о версии/системе и прочем) -- самое подходящее -для этого место. Сортировка не нужна. Должен идти хронологический порядок смены -ников и должны быть все, кроме текущего. - -## Known Issues -== Beryl + ATI r300 oss driver + Ubuntu edgy == [*Fixer*](Участник_Fixer.md) - -1) Медленная прорисовка - -2) Смазывается текст в окне настроек - -3) Значок в трее отображается некорректно - становится белым. (возможно -проблема с одним из модулей Х.орг) - -== Compiz + ATI r300 oss driver + Ubuntu feisty == [*Fixer*](Участник_Fixer.md) - -1) Значок в трее отображается некорректно - становится белым. - -## По Вики -Планы пока просты: - -### Структура вики - -Довести до ума структуру. Будем считать, что доведено ;) - -### Перевод на английский - -Когда она утрясётся, заняться переводить то, что уже есть, на English. -_(Процесс пошёл.)_ - -### Перевод на испанский - -Когда будет что-нибудь по-английски готово, покалякать с испанцами, вдруг у них -есть желание сделать испанскую версию. Если нет - потихоньку переводить и на -Spanish. _(Можно начинать пинать ;))_ - -### Статья "Файл конфигурации" - -Приткнуть куда-нибудь статью [**Файл конфигурации**](Файл_конфигурации.md) и -дописать её или перекроить (или вообще выкинуть). - -### Каталанский язык - -Спросить у lknight, нельзя ли добавить каталанский язык, а то в списке его -что-то не вижу. Вроде бы **ca** он должен быть? С другой стороны, уже в полный -рост используются домены .cat - то есть, можно сделать и так: -название\_статьи\_(cat) - -**Добавлено - расширение (ca)** - -### Написать статьи - -Надо бы написать статьи Меню, Настройки - -### Галереи - -#### Глюки - -Разобраться с галереями, почему они глючат - это пинать lknigt'a. - -**Разобрались. Поставил в Помощь ссылку на образец работающего кода.** - -#### Перезалить их - -Надо перезалить галереи в соответствующие статьи (Быстрый старт и куда-то там -ещё). - -### Обновить скриншоты к статьям - -Вообще неплохо бы обновить скриншоты - я делал их по версии 0.9.7, а там -интерфейс был совсем другой. - -### Разобраться с многоязычным интерфейсом - -Работает только русский интерфейс, однако вроде есть возможность сделать, -чтобы и остальные работали. Подсказал вариант, который можно попробовать, -`xmpp:michael@wensley.org.uk` - дать почитать его lknight'у. В связи с -переходом на доменную систему неактуально. - -### Ссылки xmpp: - -Подправить wiki движок, чтобы надпись вида xmpp:user@jabber.ru превращалась в -ссылку, как это сделано для mailto: - -### Интервики на JaWiki - -Сделайте плиз интервики на wiki.jrudevels.org. Ключевое слово, если можно, -jawiki. :) - -> Там уже [сделали](http://wiki.jrudevels.org/index.php/Sandbox) интервики на - ru.tkabber.ru - -### Проблемы, найденные в вики при осмотре Ткаббера 0.10.0-svn-20070521(tcl/tk 8.4.11) - -1) Описание настроек домашней директории устарело. Везде надо поменять старое -использование переменных окружения HOME/HOMEPATH итп, на **TKABBER\_HOME** - -2) Описание настроек домашней директории устарело. Везде надо поменять старую -запись вида ~/.tkabber/ на новую **$configdir** - -3) В разделе "_нетривиальные настройки_", порции "_Команды удаления текста_", -допущена ошибка в названии клавиши  <BackSpace>. Её называли там -<Backspace>. Там поправил, но боюсь где-нибудь ещё так. А если использовать -указанный код - ткаббер ругается :) +[kostix](Участник_Kostix.md) 19:42, 20 августа 2007 (MSD) + +## Кнопки быстрого доступа к нужным функциям некоторых плагинов + +[Tue Feb 09 16:44]\ эх, к некоторым плагинам надо бы для удобства кнопки на тулбар прикрутить. ощущаю острую нехватку включения/выключения антиспама и включения/выключения разных режимов в floatinglog. [Tue Feb 09 16:45]\ иногда надо на короткое время врубить показ сообщений во время dnd. приходится лазить в настройки каждый раз. + +## Показ во всплывающем окне (тултипе) посетителя конфы всех его ников в данной конфе + +Есть конференции, где посетители частенько меняют ники, и было бы очень кстати знать, ху из ху. Отвлёкся на 10 минут, а в чате совершенно другая картина. Думаю, тултип (где уже есть инфо о версии/системе и прочем) -- самое подходящее для этого место. Сортировка не нужна. Должен идти хронологический порядок смены ников и должны быть все, кроме текущего. + +# Known Issues +== Beryl + ATI r300 oss driver + Ubuntu edgy == [Fixer](Участник_Fixer.md) + +1) Медленная прорисовка + +2) Смазывается текст в окне настроек + +3) Значок в трее отображается некорректно - становится белым. (возможно проблема с одним из модулей Х.орг) + +== Compiz + ATI r300 oss driver + Ubuntu feisty == [Fixer](Участник_Fixer.md) + +1) Значок в трее отображается некорректно - становится белым. + +# По Вики +Планы пока просты: + +## Структура вики + +Довести до ума структуру. Будем считать, что доведено ;) + +## Перевод на английский + +Когда она утрясётся, заняться переводить то, что уже есть, на English. _(Процесс пошёл.)_ + +## Перевод на испанский + +Когда будет что-нибудь по-английски готово, покалякать с испанцами, вдруг у них есть желание сделать испанскую версию. Если нет - потихоньку переводить и на Spanish. _(Можно начинать пинать ;))_ + +## Статья "Файл конфигурации" + +Приткнуть куда-нибудь статью **[Файл конфигурации](Файл_конфигурации.md)** и дописать её или перекроить (или вообще выкинуть). + +## Каталанский язык + +Спросить у lknight, нельзя ли добавить каталанский язык, а то в списке его что-то не вижу. Вроде бы **ca** он должен быть? С другой стороны, уже в полный рост используются домены .cat - то есть, можно сделать и так: название\_статьи\_(cat) + +**Добавлено - расширение (ca)** + +## Написать статьи + +Надо бы написать статьи Меню, Настройки + +## Галереи + +### Глюки + +Разобраться с галереями, почему они глючат - это пинать lknigt'a. + +**Разобрались. Поставил в Помощь ссылку на образец работающего кода.** + +### Перезалить их + +Надо перезалить галереи в соответствующие статьи (Быстрый старт и куда-то там ещё). + +## Обновить скриншоты к статьям + +Вообще неплохо бы обновить скриншоты - я делал их по версии 0.9.7, а там интерфейс был совсем другой. + +## Разобраться с многоязычным интерфейсом + +Работает только русский интерфейс, однако вроде есть возможность сделать, чтобы и остальные работали. Подсказал вариант, который можно попробовать, `xmpp:michael@wensley.org.uk` - дать почитать его lknight'у. В связи с переходом на доменную систему неактуально. + +## Ссылки xmpp: + +Подправить wiki движок, чтобы надпись вида xmpp:user@jabber.ru превращалась в ссылку, как это сделано для mailto: + +## Интервики на JaWiki + +Сделайте плиз интервики на wiki.jrudevels.org. Ключевое слово, если можно, jawiki. :) + + Там уже [сделали](http://wiki.jrudevels.org/index.php/Sandbox) интервики на ru.tkabber.ru + +## Проблемы, найденные в вики при осмотре Ткаббера 0.10.0-svn-20070521(tcl/tk 8.4.11) + +1) Описание настроек домашней директории устарело. Везде надо поменять старое использование переменных окружения HOME/HOMEPATH итп, на **TKABBER\_HOME** + +2) Описание настроек домашней директории устарело. Везде надо поменять старую запись вида ~/.tkabber/ на новую **$configdir** + +3) В разделе "_нетривиальные настройки_", порции "_Команды удаления текста_", допущена ошибка в названии клавиши  Back**S**pace. Её называли там  Back**s**pace. Там поправил, но боюсь где-нибудь ещё так. А если использовать указанный код - ткаббер ругается :) --- -Простейший поиск показал, что это слово встречается только в той статье, и уже -исправлено. Будем надеяться, что больше его нигде нет. -[**ycbl**](Участник_Bigote.md) 14:55, 12 июня 2007 (MSD) +Простейший поиск показал, что это слово встречается только в той статье, и уже исправлено. Будем надеяться, что больше его нигде нет. [ycbl](Участник_Bigote.md) 14:55, 12 июня 2007 (MSD) + +4) Изменился путь к цветовым схемам, надо бы в вики его тоже поправить (добавилась поддиректория xrdb) -4) Изменился путь к цветовым схемам, надо бы в вики его тоже поправить -(добавилась поддиректория xrdb) + Index: wiki/ru/Практика.md ================================================================== --- wiki/ru/Практика.md +++ wiki/ru/Практика.md @@ -1,84 +1,67 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Практика/index.html) + # Практика Материал из Tkabber Wiki -Здесь, как нетрудно догадаться, неутомимые исследователи возможностей Ткаббера -могут найти практические советы по устранению неполадок, а также по расширению -существующего функционала. Иными словами, этот раздел написан для тех, кто не -прочь засучить рукава и, вооружившись напильником, превратить подводную лодку в -самолёт ;) + Здесь, как нетрудно догадаться, неутомимые исследователи возможностей Ткаббера могут найти практические советы по устранению неполадок, а также по расширению существующего функционала. Иными словами, этот раздел написан для тех, кто не прочь засучить рукава и, вооружившись напильником, превратить подводную лодку в самолёт ;) ## Содержание * [1 Часто задаваемые вопросы (ЧаВо)](#Часто_задаваемые_вопросы_ЧаВо) * [2 Хохлома](#Хохлома) - * [2.1 Смайлики и аватары](#Смайлики_и_аватары) - * [2.2 Цветовые темы и прочая графика](#Цветовые_темы_и_прочая_графика) - * [2.3 Звуковое сопровождение](#Звуковое_сопровождение) + * [2.1 Смайлики и аватары](#Смайлики_и_аватары) + * [2.2 Цветовые темы и прочая графика](#Цветовые_темы_и_прочая_графика) + * [2.3 Звуковое сопровождение](#Звуковое_сопровождение) * [3 Нетривиальные ковыряния конфига](#Нетривиальные_ковыряния_конфига) * [4 Ковыряния программного кода](#Ковыряния_программного_кода) - * [4.1 Разработка Ткаббера](#Разработка_Ткаббера) - * [4.2 Плагины / Штепсели](#Плагины___Штепсели) - * [4.3 Патчи / Заплатки](#Патчи___Заплатки) + * [4.1 Разработка Ткаббера](#Разработка_Ткаббера) + * [4.2 Плагины / Штепсели](#Плагины___Штепсели) + * [4.3 Патчи / Заплатки](#Патчи___Заплатки) * [5 Разное](#Разное) -## Часто задаваемые вопросы (ЧаВо) - -[**Маленькие хитрости, или Tkabber F.A.Q.**](Ткаббер_ЧаВо.md) - -## Хохлома - -Украшательства и финтифлюшки. Тут будут даны ссылки на готовые цветовые / -звуковые схемы и наборы смайликов, а также на советы по их "прикручиванию" к -Ткабберу. - -### Смайлики и аватары - -[**Смайлики (эмоциконки) и аватары**](Смайлики_и_аватары.md) — для тех, кто не -насмотрелся "Весёлых картинок" в детстве. - -### Цветовые темы и прочая графика - -[**Цветовые темы и прочая графика**](Цветовые_темы_и_пиктограммы.md) — раздел -для практикующих эстетов. - -### Звуковое сопровождение - -[**Звуковые схемы**](Звуковые_схемы.md) — музыканты, ау! - -[**Проблемы со звуком**](Проблемы_со_звуком.md) — в эту статью перенесена -информация из соответствующих разделов [**ЧаВо**](Ткаббер_ЧаВо.md). - -## Нетривиальные ковыряния конфига - -Рассказы про изменения, вносимые в **config.tcl**, более сложные, чем установка -переменных, нанесение боевой раскраски или прикручивание свистелок и -перделок колокольчиков. - -[**Нетривиальные настройки**](Нетривиальные_настройки.md) - -## Ковыряния программного кода - -В этой серии статей мы (да и вы тоже можете ;)) поделимся советами о том, как -можно расширить существующие возможности Ткаббера с помощью плагинов и патчей. - -### Разработка Ткаббера - -[**Разработка**](Разработка.md) — список страниц, посвящённых различным -проблемам, касающимся разработки Ткаббера. - -### Плагины / Штепсели - -[**Плагины**](Плагины.md) — самописные плагины, пока ещё не обретшие -официальный статус. - -### Патчи / Заплатки - -[**Патчи**](Патчи.md) — обработка напильником исходного кода с целью получения -новых возможностей. - -## Разное - -[**Сборка Старпака в домашних условиях**](Tkabber_starpack.md) — в помощь Самоделкиным. +# Часто задаваемые вопросы (ЧаВо) +[Маленькие хитрости, или Tkabber F.A.Q.](Ткаббер_ЧаВо.md) + +# Хохлома +Украшательства и финтифлюшки. Тут будут даны ссылки на готовые цветовые / звуковые схемы и наборы смайликов, а также на советы по их "прикручиванию" к Ткабберу. + +## Смайлики и аватары + +[Смайлики (эмоциконки) и аватары](Смайлики_и_аватары.md) — для тех, кто не насмотрелся "Весёлых картинок" в детстве. + +## Цветовые темы и прочая графика + +[Цветовые темы и прочая графика](Цветовые_темы_и_пиктограммы.md) — раздел для практикующих эстетов. + +## Звуковое сопровождение + +[Звуковые схемы](Звуковые_схемы.md) — музыканты, ау! + +[Проблемы со звуком](Проблемы_со_звуком.md) — в эту статью перенесена информация из соответствующих разделов [ЧаВо](Ткаббер_ЧаВо.md). + +# Нетривиальные ковыряния конфига +Рассказы про изменения, вносимые в **config.tcl**, более сложные, чем установка переменных, нанесение боевой раскраски или прикручивание свистелок и перделок колокольчиков. + +[Нетривиальные настройки](Нетривиальные_настройки.md) + +# Ковыряния программного кода +В этой серии статей мы (да и вы тоже можете ;)) поделимся советами о том, как можно расширить существующие возможности Ткаббера с помощью плагинов и патчей. + +## Разработка Ткаббера + +[Разработка](Разработка.md) — список страниц, посвящённых различным проблемам, касающимся разработки Ткаббера. + +## Плагины / Штепсели + +[Плагины](Плагины.md) — самописные плагины, пока ещё не обретшие официальный статус. + +## Патчи / Заплатки + +[Патчи](Патчи.md) — обработка напильником исходного кода с целью получения новых возможностей. + +# Разное +* [Сборка Старпака в домашних условиях](Tkabber_starpack.md) — в помощь Самоделкиным. + + Index: wiki/ru/Проблемы_X_Window_и_TTF.md ================================================================== --- wiki/ru/Проблемы_X_Window_и_TTF.md +++ wiki/ru/Проблемы_X_Window_и_TTF.md @@ -1,132 +1,96 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Проблемы_X_Window_и_TTF/index.html) + # Проблемы X Window и TTF -Материал из Tkabber Wiki +Материал из Tkabber Wiki. ## Содержание * [1 Симптомы](#Симптомы) * [2 Причины](#Причины) * [3 Лечение](#Лечение) - * [3.1 Шрифты?](#Шрифты) - * [3.2 Сервер шрифтов?](#Сервер_шрифтов) + * [3.1 Шрифты?](#Шрифты) + * [3.2 Сервер шрифтов?](#Сервер_шрифтов) * [4 Дополнительные ссылки по проблеме](#Дополнительные_ссылки_по_проблеме) ## Симптомы -Ткаббер, работающий под "иксами", падает при попытке показать какой-либо символ -из "верхней части" [Unicode](http://www.unicode.org). +Ткаббер, работающий под "иксами", падает при попытке показать какой-либо символ из "верхней части" [Unicode](http://www.unicode.org). -Для начала включите отладочный лог, запустив Ткаббер примерно так: +Для начала включите отладочный лог, запустив Ткаббер примерно так: $ tkabber 2>&1 >/tmp/tkabber.log -(на самом деле, достаточно запустить Ткаббер из X-терминала, без всякого -перенаправления его потоков вывода, тогда ошибка будет просто видна в -терминале). +(на самом деле, достаточно запустить Ткаббер из X-терминала, без всякого перенаправления его потоков вывода, тогда ошибка будет просто видна в терминале). -Вызовите падение Ткаббера, затем смотрите получившийся лог. Если вы видите -нечто вроде: +Вызовите падение Ткаббера, затем смотрите получившийся лог. Если вы видите нечто вроде: X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 45 (X_OpenFont) Value in failed request: 0x22000ef Serial number of failed request: 2263 Current serial number in output stream: 2264 -то вам повезло (относительно), так как корень зла в данном случае известен — -_неправильная работа одного из компонентов X Window с TrueType-шрифтами._ +то вам повезло (относительно), так как корень зла в данном случае известен — _неправильная работа одного из компонентов X Window с TrueType-шрифтами._ -Сразу стоит оговориться, что ни Ткаббер, ни Tk не имеют к происходящему -никакого отношения, так как приведённая выше ошибка — это ошибка, -сгенерированная в "недрах" Xlib. +Сразу стоит оговориться, что ни Ткаббер, ни Tk не имеют к происходящему никакого отношения, так как приведённая выше ошибка — это ошибка, сгенерированная в "недрах" Xlib. ## Причины -Причин, судя по всему, две: +Причин, судя по всему, две: -* "кривые" шрифты в системе; -* "кривая" работа сервера шрифтов c "прямыми" шрифтами. +* "кривые" шрифты в системе; +* "кривая" работа сервера шрифтов c "прямыми" шрифтами. ## Лечение -К сожалению, из-за многообразия комбинаций "X-сервер + сервер шрифтов" и их -настроек однозначно работающее решение привести сложно. Поэтому ниже дана -информация, которую вам понадобится: - -* осмыслить, -* проверить на себе. - -В конце концов, "спасение утопающих — дело рук самих утопающих" ©. +К сожалению, из-за многообразия комбинаций "X-сервер + сервер шрифтов" и их настроек однозначно работающее решение привести сложно. Поэтому ниже дана информация, которую вам понадобится: + +* осмыслить, +* проверить на себе. + +В конце концов, "спасение утопающих — дело рук самих утопающих" ©. ### Шрифты? -В FAQ юниксового клона MSN Messenger — aMSN -[сказано](http://amsn.sourceforge.net/wiki/tiki-index.php?page=Frequently+Asked+Questions#faq-4-24), -что проблема, скорее всего, в том, что в системе установлены шрифты, содержащие -ошибки, и они выбираются сервером шрифтов раньше "правильных" шрифтов (в -предположении что они есть) согласно сконфигурированной вами или стоящей по -умолчанию схеме приоритетов. - -Перевод этой информации: - -1. Проблема может быть в шрифте: попробуйте запустить aMSN с другим шрифтом - (Tools → Preferences → Appearance).1 -1. Можете попробовать запустить aMSN с другой кодировкой (снова Tools → - Preferences → Appearance, и utf-8 как самое безопасное решение).2 -1. Попробуйте очистить ваш кэш фонтов командой **fc-cache -fv**. Затем - убедитесь, что ваша локаль (ваши переменные окружения LC\_ALL или LC\_CTYPE) - установлены в системе (**set | grep LC\_**) и удостоверьтесь, что - соответствующие директории (что выводятся после **=**) имеются в каталоге - **/usr/lib/locale**. Если их там нет, установите их в соответствии с - требованиями вашей системы. -1. Если же ничего из посоветованного не помогает, попробуйте выключать пути к - фонтам (**FontPath**) в конфигах **/etc/X11/XF86Config** или - **/etc/X11/Xorg.conf**, пока не выясните, какой путь ведёт к "кривому" шрифту, - и затем пересоздайте файлы **fonts.cache**, **fonts.dir** и **fonts.scale** в - том директории. - - Примечания: - -1. *Один из пользователей сообщил, что для него оказалось достаточным выбрать в - качестве шрифтов Ткаббера **Arial Monotype** (из Microsoft Core Fonts), а - ошибки у него были со шрифтом **Tahoma**.* -1. *Естественно, в случае с Ткаббером шрифты и кодировки надо менять в его - конфиге. [**Читайте в ЧаВо**](Ткаббер_ЧаВо.md#Шрифты).* +В FAQ юниксового клона MSN Messenger — aMSN [сказано](http://amsn.sourceforge.net/wiki/tiki-index.php?page=Frequently+Asked+Questions#faq-4-24), что проблема, скорее всего, в том, что в системе установлены шрифты, содержащие ошибки, и они выбираются сервером шрифтов раньше "правильных" шрифтов (в предположении что они есть) согласно сконфигурированной вами или стоящей по умолчанию схеме приоритетов. + +Перевод этой информации: + +1. Проблема может быть в шрифте: попробуйте запустить aMSN с другим шрифтом (Tools → Preferences → Appearance). 1 +1. Можете попробовать запустить aMSN с другой кодировкой (снова Tools → Preferences → Appearance, и utf-8 как самое безопасное решение). 2 +1. Попробуйте очистить ваш кэш фонтов командой **fc-cache -fv**. Затем убедитесь, что ваша локаль (ваши переменные окружения LC\_ALL или LC\_CTYPE) установлены в системе (**set | grep LC\_**) и удостоверьтесь, что соответствующие директории (что выводятся после **=** ) имеются в каталоге **/usr/lib/locale**. Если их там нет, установите их в соответствии с требованиями вашей системы. +1. Если же ничего из посоветованного не помогает, попробуйте выключать пути к фонтам (**FontPath**) в конфигах **/etc/X11/XF86Config** или **/etc/X11/Xorg.conf**, пока не выясните, какой путь ведёт к "кривому" шрифту, и затем пересоздайте файлы **fonts.cache**, **fonts.dir** и **fonts.scale** в том директории. + + Примечания: + +1. _Один из пользователей сообщил, что для него оказалось достаточным выбрать в качестве шрифтов Ткаббера **Arial Monotype** (из Microsoft Core Fonts), а ошибки у него были со шрифтом **Tahoma**._ +1. _Естественно, в случае с Ткаббером шрифты и кодировки надо менять в его конфиге. [Читайте в ЧаВо.](Ткаббер_ЧаВо.md#Шрифты)_ ### Сервер шрифтов? -А в этом архиве рассылки про [exmh](http://www.beedub.com/exmh/) -[описывается](http://www.mercea.net/~exmh/html/exmh-users/2005-01/msg00019.html) -решение проблемы, вызванной неправильной работой с TTF-шрифтами, реализованной -в некоторых версиях _X-серверов_ (по видимому, X11R6, если принять во внимание -дату документа), _которые сконфигурированы на раздачу шрифтов._ - -Предложенное решение — поставить специализированный сервер TrueType-шрифтов и -сообщить об этом X-серверу. - -Приведём конфигурацию: - -* Поставить xfs-ttf + xfs; -* Прописать в конфигурационный файл X-сервера: - - FontPath "unix/:7100" # XFS - FontPath "unix/:7110" # XFS-TTF - -* Закомментировать там все остальные вхождения **FontPath**. - -**Примечания:** - -* По-видимому, вместо связки xfs-ttf + xfs вполне можно использовать один - xfs-xtt; -* Проверьте, чтобы сокет, на котором слушает ваш сервер шрифтов, совпадал с - тем, что вы прописали в конфигурации X-сервера, не надо слепо копировать - приведённый пример. Получить список активных сокетов можно, запустив - **netstat -l**. +А в этом архиве рассылки про [exmh](http://www.beedub.com/exmh/) [описывается](http://www.mercea.net/~exmh/html/exmh-users/2005-01/msg00019.html) решение проблемы, вызванной неправильной работой с TTF-шрифтами, реализованной в некоторых версиях _X-серверов_ (по видимому, X11R6, если принять во внимание дату документа), _которые сконфигурированы на раздачу шрифтов._ + +Предложенное решение — поставить специализированный сервер TrueType-шрифтов и сообщить об этом X-серверу. + +Приведём конфигурацию: + +* Поставить xfs-ttf + xfs; +* Прописать в конфигурационный файл X-сервера: + + FontPath "unix/:7100" # XFS + FontPath "unix/:7110" # XFS-TTF + +* Закомментировать там все остальные вхождения **FontPath**. + +**Примечания:** + +* По-видимому, вместо связки xfs-ttf + xfs вполне можно использовать один xfs-xtt; +* Проверьте, чтобы сокет, на котором слушает ваш сервер шрифтов, совпадал с тем, что вы прописали в конфигурации X-сервера, не надо слепо копировать приведённый пример. Получить список активных сокетов можно, запустив **netstat -l**. ## Дополнительные ссылки по проблеме -Если ничего не помогло, придётся вам отправиться в долгое странствие по -интернету. Вот вам от нас на дорожку -[гуглюшка хлеба](http://www.google.com/search?as_q=X+Error+of+failed+request:++BadValue+Tk). +Если ничего не помогло, придётся вам отправиться в долгое странствие по интернету. Вот вам от нас на дорожку [гуглюшка хлеба](http://www.google.com/search?as_q=X+Error+of+failed+request:++BadValue+Tk). + + Index: wiki/ru/Проблемы_со_звуком.md ================================================================== --- wiki/ru/Проблемы_со_звуком.md +++ wiki/ru/Проблемы_со_звуком.md @@ -1,109 +1,90 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Проблемы_со_звуком/index.html) + # Проблемы со звуком Материал из Tkabber Wiki ## Содержание * [1 В старпаке/старките нет звука](#В_старпаке_старките_нет_звука) * [2 Изменение громкости звуковых оповещений](#Изменение_громкости_звуковых_оповещений) - * [2.1 При помощи файла **config.tcl**](#При_помощи_файла_config.tcl) - * [2.2 Во время работы Ткаббера](#Во_время_работы_Ткаббера) - * [2.3 Делаем опцию в настройках Ткаббера](#Делаем_опцию_в_настройках_Ткаббера) + * [2.1 При помощи файла **config.tcl**](#При_помощи_файла_config.tcl) + * [2.2 Во время работы Ткаббера](#Во_время_работы_Ткаббера) + * [2.3 Делаем опцию в настройках Ткаббера](#Делаем_опцию_в_настройках_Ткаббера) * [3 Не работает звук под линуксом в ALSA](#Не_работает_звук_под_линуксом_в_ALSA) -## В старпаке/старките нет звука -Официальные старкиты и старпаки не содержат пакета -[Snack](http://www.speech.kth.se/snack/), который обычно играет звук в -Ткаббере. - -(Далее мы будем говорить про старпак для краткости, но всё сказанное относится -в равной мере и к старкитам.) - -Решение: Возьмите один из готовых -[**старкитов**](Дистрибутивы__которые_мы_выбираем.md#Tclkit_starkits_и_starpacks_немного_теории) -пакета **Snack**, доступных в [архиве старкитов](http://www.tcl.tk/starkits/) и -положите его в тот же каталог, где у вас находится старпак Ткаббера. - -При старте старпак Ткаббера ищет файлы, подходящие под маску `snack*.kit` и -лежащие там же, где сам старпак, и загружает первый найденный. - -В настоящий момент в архиве старкитов есть три версии старкита Snack: - -* "виндовый" ([snack-win.kit](http://www.tcl.tk/starkits/bin/snack-win.kit)) — - содержит библиотеки только для Windows; -* "полный" ([snack.kit](http://www.equi4.com/pub/om/sdarchive/snack.kit) или - [*локально*](../files/Snack.kit)) — содержит библиотеки для всех трёх платформ, - на которых работает Tcl/Tk — при его загрузке будет выбрана нужная; -* "линуксовый" - ([snack-lin.kit](http://www.equi4.com/pub/om/sdarchive/snack-lin.kit) или - [*локально*](../files/Snack-lin.kit)) — для Linux x86. - -Системозависимые старкиты примерно вдвое меньше в размере, чем полный, но их -нельзя таскать за собой в другую ОС. - -**Внимание!** Кажущаяся разумной альтернатива — использовать внешнюю программу -для проигрывания звука — _работать не будет,_ так как звуковые файлы находятся -на виртуальной файловой системе старпака и недоступны для внешних программ. - -## Изменение громкости звуковых оповещений -Дальнейшие советы касаются только случая использования встроенной звуковой -библиотеки **snack**. - -### При помощи файла **config.tcl** - -В раздел **hook::add finload\_hook { ... }** нужно добавить следующие строки: +# В старпаке/старките нет звука +Официальные старкиты и старпаки не содержат пакета [Snack](http://www.speech.kth.se/snack/), который обычно играет звук в Ткаббере. + +(Далее мы будем говорить про старпак для краткости, но всё сказанное относится в равной мере и к старкитам.) + +Решение: Возьмите один из готовых [старкитов](Дистрибутивы__которые_мы_выбираем.md#Tclkit_starkits_и_starpacks_немного_теории) пакета **Snack**, доступных в [архиве старкитов](http://www.tcl.tk/starkits/) и положите его в тот же каталог, где у вас находится старпак Ткаббера. + +При старте старпак Ткаббера ищет файлы, подходящие под маску `snack*.kit` и лежащие там же, где сам старпак, и загружает первый найденный. + +В настоящий момент в архиве старкитов есть три версии старкита Snack: + +* "виндовый" ([snack-win.kit](http://www.tcl.tk/starkits/bin/snack-win.kit)) — содержит библиотеки только для Windows; +* "полный" ([snack.kit](http://www.equi4.com/pub/om/sdarchive/snack.kit) или [локально](../files/Snack.kit)) — содержит библиотеки для всех трёх платформ, на которых работает Tcl/Tk — при его загрузке будет выбрана нужная; +* "линуксовый" ([snack-lin.kit](http://www.equi4.com/pub/om/sdarchive/snack-lin.kit) или [локально](../files/Snack-lin.kit)) — для Linux x86. + +Системозависимые старкиты примерно вдвое меньше в размере, чем полный, но их нельзя таскать за собой в другую ОС. + +**Внимание!** Кажущаяся разумной альтернатива — использовать внешнюю программу для проигрывания звука — _работать не будет,_ так как звуковые файлы находятся на виртуальной файловой системе старпака и недоступны для внешних программ. + +# Изменение громкости звуковых оповещений +Дальнейшие советы касаются только случая использования встроенной звуковой библиотеки **snack**. + +## При помощи файла **config.tcl** + +В раздел **hook::add finload\_hook { ... }** нужно добавить следующие строки: if {$sound::snack} {  ::snack::audio scaling 0.4 } -Здесь 0.4 означает, что звуки в Ткаббере будут проигрываться в 4/10 от общей -громкости системы. Значение может меняться от 0.0 до 1.0. +Здесь 0.4 означает, что звуки в Ткаббере будут проигрываться в 4/10 от общей громкости системы. Значение может меняться от 0.0 до 1.0. + +## Во время работы Ткаббера -### Во время работы Ткаббера - -Открываем консоль через меню **Помощь → Показать консоль**. В ней вводим: +Открываем консоль через меню **Помощь → Показать консоль**. В ней вводим:  ::snack::audio scaling 0.4 -### Делаем опцию в настройках Ткаббера +## Делаем опцию в настройках Ткаббера -В файле **tkabber/plugins/general/sound.tcl** находим строчку: +В файле **tkabber\\plugins\\general\\sound.tcl** находим строчку: custom::defvar options(mute) 0 \ -сразу перед ней вставляем строки: +сразу перед ней вставляем строки: custom::defvar options(volume) 100 \ [::msgcat::mc "Sound volume (from 0 to 100)"] \ -command [list [namespace current]::volume_set] \ -type integer -group Sound -потом находим строчку: +потом находим строчку: proc ::sound::load_sound_file {name args} { -сразу перед ней вставляем строки: +сразу перед ней вставляем строки: proc ::sound::volume_set {args} { variable options if {$options(volume) < 0 } {set options(volume) 0} if {$options(volume) > 100 } {set options(volume) 100}  ::snack::audio scaling [expr {$options(volume) / 100.0}] } -В опциях звука появится ещё один параметр **Sound volume (from 0 to 100)**. -Громкость меняется от минимальной (0) до максимальной (100). Если собираетесь -использовать этот вариант настройки, то не забудьте убрать из **config.tcl** -последствия настройки согласно первому пункту. - -[**Archimed**](Участник_Archimed.md) - -## Не работает звук под линуксом в ALSA - -[2009-12-22 13:52:00]\ kostix\_: libsnack2-alsa не рекомендуется к -использованию. libsnack2 и настройка эмуляции oss в alsa рекомендуется. - -Также можно подключить внешнюю программу. Например, mplayer играет за милую душу. +В опциях звука появится ещё один параметр **Sound volume (from 0 to 100)**. Громкость меняется от минимальной (0) до максимальной (100). Если собираетесь использовать этот вариант настройки, то не забудьте убрать из **config.tcl** последствия настройки согласно первому пункту. + +[Archimed](Участник_Archimed.md) + +# Не работает звук под линуксом в ALSA +[2009-12-22 13:52:00]\ kostix\_: libsnack2-alsa не рекомендуется к использованию. libsnack2 и настройка эмуляции oss в alsa рекомендуется. + +Также можно подключить внешнюю программу. Например, mplayer играет за милую душу. + + Index: wiki/ru/Проверка_сертификата_сервера.md ================================================================== --- wiki/ru/Проверка_сертификата_сервера.md +++ wiki/ru/Проверка_сертификата_сервера.md @@ -1,311 +1,159 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Проверка_сертификата_сервера/index.html) + # Проверка сертификата сервера -Материал из Tkabber Wiki +Материал из Tkabber Wiki. ## Содержание * [1 Теория](#Теория) - * [1.1 Для чего?](#Для_чего) - * [1.2 Как это работает?](#Как_это_работает) - * [1.3 Что значит "самоподписанный сертификат в цепочке сертификатов"?](#Что_значит_самоподписанный_сертификат_в_цепочке_сертификатов) + * [1.1 Для чего?](#Для_чего) + * [1.2 Как это работает?](#Как_это_работает) + * [1.3 Что значит "самоподписанный сертификат в цепочке сертификатов"?](#Что_значит_самоподписанный_сертификат_в_цепочке_сертификатов) * [2 Практика](#Практика) - * [2.1 Получение сертификата доверенного ЦС](#Получение_сертификата_доверенного_ЦС) - * [2.2 Настройка Ткаббера](#Настройка_Ткаббера) - * [2.3 Добавление доверенных сертификатов ЦС в хранилище](#Добавление_доверенных_сертификатов_ЦС_в_хранилище) - * [2.3.1 Приватное хранилище](#Приватное_хранилище) - * [2.3.2 Системное хранилище](#Системное_хранилище) - -## Теория - -Вы можете перейти прямо к разделу "Практика", однако лучше сначала осилить -теорию. А ещё лучше сначала прочитать -[**вводную информацию по поводу соединения "клиент-сервер"**](Между_офлайном_и_онлайном.md#Канал_связи_клиент-сервер_в_Jabber_XMPP), -чтобы понять, какую роль в установлении соединения играют сертификаты. - -### Для чего? - -Проверка сертификата сервера клиентом, о которой идёт речь, производится на -стадии установления TLS-соединения, именуемой _рукопожатием (handshake)._ -Рукопожатие означает не только обмен некоторой чисто технической информацией, -но и нечто большее: как известно, традиция рукопожатия у европейцев произошла -от вполне утилитарного обряда древних людей — показывать при встрече, что у -тебя в руке нет камня. Аналогично, клиент и сервер в ходе TLS-рукопожатия -"показывают друг другу руки" — предъявляют свой _сертификат_ и исследуют чужой. - -Проверка может быть полезна вот по какой причине: существует несколько -различных атак на протокол TCP/IP, которые позволяют атакующему "встроиться" в -соединение и контролировать его. Кроме того, возможны куда более банальные -атаки на аппаратном уровне: например, получив контроль над -[роутером](http://ru.wikipedia.org/wiki/роутер), через который проходят пакеты -между вашим клиентом и сервером, с которым вы хотите соединиться, можно -перенаправить трафик такого соединения на другую специально подготовленную -машину вместо "настоящего" сервера. Сертификат, предъявляемый сервером, -позволяет клиенту удостовериться в том, что сервер "настоящий", и наоборот. - -Следует также заметить, что в отличие, например, от -[VPN](http://ru.wikipedia.org/wiki/VPN), XMPP-сервер в большинстве случаев не -интересуется клиентским сертификатом, и в случае соединения с публичными -серверами (такими, как jabber.ru), именно это и происходит. Однако в Ткаббере -есть возможность указать собственный сертификат и ключ к нему, если требуется. - -### Как это работает? - -Ключевой концепцией в схеме сертификатов является _доверие_ — вы можете -доверять или не доверять конкретному сертификату, причём эта операция -производится автоматически программным обеспечением, реализующим TLS. - -Реализация доверия, однако, является значительно более "хитрым" предметом, чем -хотелось бы некоторым пользователям: вы не можете доверять конкретному -сертификату сервера напрямую — вместо этого _вы должны доверять_ (возможно, -опосредованно — через цепочку других сертификатов) _**центру сертификации,** -который выдал соответствующий сертификат._ - -Причиной подобного устройства является необходимость обеспечения возможности в -любой момент менять сертификат любого участника системы: например, можно -перегенерировать сертификат сервера, и это не нарушит доверие клиентов к этому -серверу. Перегенерация требуется по разным причинам, главная из которых — -истечение срока действия сертификата. Также сертификат и его ключ могут быть -скомпрометированы (могут попасть в руки злоумышленника), и установление -конечного времени жизни сертификата как раз является упреждающей мерой -противодействия компрометации. - -Когда центр сертификации (ЦС) (в оригинале: "Certification Authority (CA)") -выдаёт сертификат, он _подписывает_ сертификат своим секретным ключом, -добиваясь двух целей: - -* Подписанный с помощью [ЭЦП](http://ru.wikipedia.org/wiki/ЭЦП) сертификат - нельзя изменить физически, сохранив его связность с подписью. -* ЦС "заверяет" сертификат своей подписью, как если бы сертификат был бумажным - заявлением, на которым ЦС написал "можно верить". - -После этого любой клиент, доверяющий данному ЦС, получив в ходе рукопожатия -сертификат, выданный этим ЦС, может автоматически доверять и сертификату. - -_Чтобы доверять конкретному ЦС, нужно доверять его сертификату._ Обычно это -достигается импортом такого сертификата в хранилище сертификатов доверенных ЦС. -Этот момент ставит главный барьер для многих пользователей Ткаббера, поэтому -рассмотрен в деталях ниже, в секции "Практика". - -Если "выше" ЦС нет никакой структуры, то доверие к сертификату осуществляется -"в один шаг", однако доверие может быть и "многоступенчатым" в силу возможности -существования _промежуточных центров сертификации_. В этом случае промежуточный -ЦС имеет свой сертификат, и чтобы доверять сертификатам, выданным этим ЦС, -клиент должен доверять не только этому ЦС, но и всем его вышестоящим ЦС, вплоть -до главного, который назвается _корневым_ (в оригинале: "Root CA"). - -### Что значит "самоподписанный сертификат в цепочке сертификатов"? - -![(!)](../images/Hammer.png) **Сделать:** дописать про self-signed + unable to -get local issuer... - -## Практика - -Здесь мы рассмотрим, как сделать сертифкат конкретного центра сертификации -доверенным с точки зрения Ткаббера. - -Существует несколько проблем, связанных с добавлением сертификата ЦС в число -доверенных: - -* Разные системы имеют разные реализации TLS: например, Windows реализует его - поддержку "нативно" при помощи собственных библиотек, API которых ни с чем не - совместим, а большинство "остальных" систем полагаются на библиотеку - [OpenSSL](http://www.openssl.org) и "обёртки" вокруг неё; существуют и другие - свободные реализации, например, [GnuTLS](http://www.gnu.org/software/gnutls/) - и [NSS](http://www.mozilla.org/projects/security/pki/nss/). Ткаббер, как и - большинство кросс-платформенных продуктов, использует OpenSSL, и делает он - это при помощи расширения Tcl — [tls](http://tls.sourceforge.net), которое - экспортирует функциональность OpenSSL на уровень скриптов Tcl. -* Понятие "системное хранилище сертификатов" вообще представляется почти - мифическим, если окинуть взором доступные системы. В частности, в Windows - существует единое хранилище сертификатов; предполагается, что там хранятся - вообще все сертификаты, включая клиентские и доверенные сертификаты ЦС. - Системы, широко использующие OpenSSL (например, популярные дистрибутивы - Linux), обычно реализуют собственные системные хранилища доверенных - сертификатов ЦС, а клиентскими сертификатами каждая программа управляет, как - сочтёт нужным. - -Ткаббер в этом смысле равноудалён от всех решений: пакет -[tls](http://tls.sourceforge.net), который он использует, позволяет указать -путь до каталога с доверенными сертификатами ЦС или путь до файла с ними. -Ткаббер "прячет" обе эти возможности за единственной опцией конфигурации (так -как в состоянии сам разобраться — файл или каталог ему указали), а настройка -этой опции зависит от личных способностей и пожеланий пользователя. - -Сразу следует указать, что по причине, изложенной выше, Ткаббер, увы, не имеет -никакого отношения к системному хранилищу сертификатов Windows, и когда он -работает на этой системе, вы должны сами позаботиться о том, чтобы сложить -нужные вам сертификаты в удобное вам место файловой системы: импортировать их в -систему средствами Windows бессмысленно. - -### Получение сертификата доверенного ЦС - -Прежде чем добавить сертификат доверенного ЦС в хранилище и указать на него -Ткабберу, этот сертификат нужно заполучить. В идеале соответствующая информация -должна быть вам доступна до того, как вы совершите первое подключение к серверу -(например, на его веб-сайте). Однако зачастую это не так, и вам придётся -проявить некоторую смекалку для выяснения местонахождения сертификата. - -Смекалка состоит в том, чтобы по информации о сертификате, которую показывает -Ткаббер при неудавшейся проверке, определить URL веб-сайта соответствующего ЦС. -Вот пара практических примеров. - -Подключение к jabber.ru — сертификат серверу выдан некоммерческой организацией -[CAcert.org](http://www.cacert.org). Как видно при внимательном рассмотрении, -веб-сайт "виден" в сообщении об ошибке аж дважды: в имени организации ("OU" — -"Organisational Unit") и в поле e-mail поддержки: -![Image:CAcert-verification-failed.png](../images/CAcert-verification-failed.png) -В данном случае OpenSSL проверяет сертификат, выданный непосредственно корневым -ЦС, однако этот ЦС не числится в числе доверенных. - -Подключение к одному из серверов, входящих в федерацию -[xmpp.net](http://www.xmpp.net), — сертификат выдан организацией -[Startcom](http://www.startcom.org) (а точнее — промежуточным ЦС, занимающимся -выдачей сертификатов серверам xmpp.net): -![Image:Startcom-verification-failed.png](../images/Startcom-verification-failed.png) -В данном случае OpenSSL проверяет сертификат, выданный промежуточным ЦС, -проверка целостности сертификата удаётся (поскольку он был прислан сервером -вместе со своим сертификатом — это обычная практика для сертификатов, выданных -промежуточными ЦС, которой, впрочем, администраторы серверов придерживаться не -обязаны), но сертификат вышестоящего ЦС в цепочке недоступен. - -Упомянутая смекалка позволит вам заключить, что в первом случае вам следует -посетить сайт [CAcert.org](http://www.cacert.org), а во втором — -[Startcom](http://www.startcom.org). Искать там нужно корневой (root) или -"class 1" сертификат. Если сертификат доступен в нескольких форматах, выбирайте -PEM как самый удобный. - -В данных конкретных случаях этими сертификатами являются: - -* Для CAcert: [http://www.cacert.org/certs/root.crt](http://www.cacert.org/certs/root.crt) -* Для Startcom: [http://cert.startcom.org/ca.crt](http://cert.startcom.org/ca.crt) - -Примечание: CAcert.org также предлагает сертификат в "формате TEXT". На самом -деле такого формата не существует, а внутри там обычный PEM, предварённый -результатом вызова `openssl x509 -text -in class1.crt -noout` на исходном -сертификате. Сия схема работает благодаря тому, что OpenSSL при чтении -сертификата в формате PEM игнорирует любой мусор до строки начала сертификата -"-----BEGIN ..." и после строки его окончания (ниже подробно рассмотрено: в -каких случаях и почему это может пригодиться). Поэтому можете скачать -сертификат и в таком виде. - -### Настройка Ткаббера - -Итак, интересующая нас опция настроек Ткаббера называется -**::loginconf(sslcacertstore)** (от **SSL** **CA** **Cert**ificate **Store**), -задаёт она путь до каталога или файла с сертификатами доверенных ЦС и удобнее -всего настраивается через **Tkabber → Настройки → Login**. - -Если вы используете мультилогин на разные серверы, вам следует изменять -переменную **sslcacertstore** в соответствующих массивах **::loginconf1**, -**::loginconf2** и так далее, как описано в -[руководстве](http://tkabber.jabber.ru/files/doc/tkabber.html#s.postload-login). - -### Добавление доверенных сертификатов ЦС в хранилище - -Как уже было замечено выше, OpenSSL может искать подходящий сертификат либо в -файле с набором сертификатов, либо в каталоге с файлами сертификатов. - -Остановимся подробнее на форматах этих разновидностей хранилищ сертификатов. О -них хорошо рассказано в -[описании функции SSL\_CTX\_load\_verify\_locations](http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html) -API OpenSSL, однако здесь мы приведём вольную интерпретацию. - -**Файл** сертификатов — это текстовый (ASCII) файл, который состоит из любого -числа сертификатов в формате PEM, расположенных друг за другом; между соседними -сертификатами может быть расположен произвольный текст. Это удобно для -размещения информации о сертификатах, чтобы проще было ими управлять. Пример -такого файла: + * [2.1 Получение сертификата доверенного ЦС](#Получение_сертификата_доверенного_ЦС) + * [2.2 Настройка Ткаббера](#Настройка_Ткаббера) + * [2.3 Добавление доверенных сертификатов ЦС в хранилище](#Добавление_доверенных_сертификатов_ЦС_в_хранилище) + * [2.3.1 Приватное хранилище](#Приватное_хранилище) + * [2.3.2 Системное хранилище](#Системное_хранилище) + +# Теория +Вы можете перейти прямо к разделу "Практика", однако лучше сначала осилить теорию. А ещё лучше сначала прочитать [вводную информацию по поводу соединения "клиент-сервер"](Между_офлайном_и_онлайном.md#Канал_связи_клиент-сервер_в_Jabber_XMPP), чтобы понять, какую роль в установлении соединения играют сертификаты. + +## Для чего? + +Проверка сертификата сервера клиентом, о которой идёт речь, производится на стадии установления TLS-соединения, именуемой _рукопожатием (handshake)._ Рукопожатие означает не только обмен некоторой чисто технической информацией, но и нечто большее: как известно, традиция рукопожатия у европейцев произошла от вполне утилитарного обряда древних людей — показывать при встрече, что у тебя в руке нет камня. Аналогично, клиент и сервер в ходе TLS-рукопожатия "показывают друг другу руки" — предъявляют свой _сертификат_ и исследуют чужой. + +Проверка может быть полезна вот по какой причине: существует несколько различных атак на протокол TCP/IP, которые позволяют атакующему "встроиться" в соединение и контролировать его. Кроме того, возможны куда более банальные атаки на аппаратном уровне: например, получив контроль над [роутером](http://ru.wikipedia.org/wiki/роутер), через который проходят пакеты между вашим клиентом и сервером, с которым вы хотите соединиться, можно перенаправить трафик такого соединения на другую специально подготовленную машину вместо "настоящего" сервера. Сертификат, предъявляемый сервером, позволяет клиенту удостовериться в том, что сервер "настоящий", и наоборот. + +Следует также заметить, что в отличие, например, от [VPN](http://ru.wikipedia.org/wiki/VPN), XMPP-сервер в большинстве случаев не интересуется клиентским сертификатом, и в случае соединения с публичными серверами (такими, как jabber.ru), именно это и происходит. Однако в Ткаббере есть возможность указать собственный сертификат и ключ к нему, если требуется. + +## Как это работает? + +Ключевой концепцией в схеме сертификатов является _доверие_ — вы можете доверять или не доверять конкретному сертификату, причём эта операция производится автоматически программным обеспечением, реализующим TLS. + +Реализация доверия, однако, является значительно более "хитрым" предметом, чем хотелось бы некоторым пользователям: вы не можете доверять конкретному сертификату сервера напрямую — вместо этого _вы должны доверять_ (возможно, опосредованно — через цепочку других сертификатов) _**центру сертификации,** который выдал соответствующий сертификат._ + +Причиной подобного устройства является необходимость обеспечения возможности в любой момент менять сертификат любого участника системы: например, можно перегенерировать сертификат сервера, и это не нарушит доверие клиентов к этому серверу. Перегенерация требуется по разным причинам, главная из которых — истечение срока действия сертификата. Также сертификат и его ключ могут быть скомпрометированы (могут попасть в руки злоумышленника), и установление конечного времени жизни сертификата как раз является упреждающей мерой противодействия компрометации. + +Когда центр сертификации (ЦС) (в оригинале: "Certification Authority (CA)") выдаёт сертификат, он _подписывает_ сертификат своим секретным ключом, добиваясь двух целей: + +* Подписанный с помощью [ЭЦП](http://ru.wikipedia.org/wiki/ЭЦП) сертификат нельзя изменить физически, сохранив его связность с подписью. +* ЦС "заверяет" сертификат своей подписью, как если бы сертификат был бумажным заявлением, на которым ЦС написал "можно верить". + +После этого любой клиент, доверяющий данному ЦС, получив в ходе рукопожатия сертификат, выданный этим ЦС, может автоматически доверять и сертификату. + +_Чтобы доверять конкретному ЦС, нужно доверять его сертификату._ Обычно это достигается импортом такого сертификата в хранилище сертификатов доверенных ЦС. Этот момент ставит главный барьер для многих пользователей Ткаббера, поэтому рассмотрен в деталях ниже, в секции "Практика". + +Если "выше" ЦС нет никакой структуры, то доверие к сертификату осуществляется "в один шаг", однако доверие может быть и "многоступенчатым" в силу возможности существования _промежуточных центров сертификации_. В этом случае промежуточный ЦС имеет свой сертификат, и чтобы доверять сертификатам, выданным этим ЦС, клиент должен доверять не только этому ЦС, но и всем его вышестоящим ЦС, вплоть до главного, который назвается _корневым_ (в оригинале: "Root CA"). + +## Что значит "самоподписанный сертификат в цепочке сертификатов"? + +![(!)](../images/Hammer.png) **Сделать:** дописать про self-signed + unable to get local issuer... + +# Практика +Здесь мы рассмотрим, как сделать сертифкат конкретного центра сертификации доверенным с точки зрения Ткаббера. + +Существует несколько проблем, связанных с добавлением сертификата ЦС в число доверенных: + +* Разные системы имеют разные реализации TLS: например, Windows реализует его поддержку "нативно" при помощи собственных библиотек, API которых ни с чем не совместим, а большинство "остальных" систем полагаются на библиотеку [OpenSSL](http://www.openssl.org) и "обёртки" вокруг неё; существуют и другие свободные реализации, например, [GnuTLS](http://www.gnu.org/software/gnutls/) и [NSS](http://www.mozilla.org/projects/security/pki/nss/). Ткаббер, как и большинство кросс-платформенных продуктов, использует OpenSSL, и делает он это при помощи расширения Tcl — [tls](http://tls.sourceforge.net), которое экспортирует функциональность OpenSSL на уровень скриптов Tcl. +* Понятие "системное хранилище сертификатов" вообще представляется почти мифическим, если окинуть взором доступные системы. В частности, в Windows существует единое хранилище сертификатов; предполагается, что там хранятся вообще все сертификаты, включая клиентские и доверенные сертификаты ЦС. Системы, широко использующие OpenSSL (например, популярные дистрибутивы Linux), обычно реализуют собственные системные хранилища доверенных сертификатов ЦС, а клиентскими сертификатами каждая программа управляет, как сочтёт нужным. + +Ткаббер в этом смысле равноудалён от всех решений: пакет [tls](http://tls.sourceforge.net), который он использует, позволяет указать путь до каталога с доверенными сертификатами ЦС или путь до файла с ними. Ткаббер "прячет" обе эти возможности за единственной опцией конфигурации (так как в состоянии сам разобраться — файл или каталог ему указали), а настройка этой опции зависит от личных способностей и пожеланий пользователя. + +Сразу следует указать, что по причине, изложенной выше, Ткаббер, увы, не имеет никакого отношения к системному хранилищу сертификатов Windows, и когда он работает на этой системе, вы должны сами позаботиться о том, чтобы сложить нужные вам сертификаты в удобное вам место файловой системы: импортировать их в систему средствами Windows бессмысленно. + +## Получение сертификата доверенного ЦС + +Прежде чем добавить сертификат доверенного ЦС в хранилище и указать на него Ткабберу, этот сертификат нужно заполучить. В идеале соответствующая информация должна быть вам доступна до того, как вы совершите первое подключение к серверу (например, на его веб-сайте). Однако зачастую это не так, и вам придётся проявить некоторую смекалку для выяснения местонахождения сертификата. + +Смекалка состоит в том, чтобы по информации о сертификате, которую показывает Ткаббер при неудавшейся проверке, определить URL веб-сайта соответствующего ЦС. Вот пара практических примеров. + +Подключение к jabber.ru — сертификат серверу выдан некоммерческой организацией [CAcert.org](http://www.cacert.org). Как видно при внимательном рассмотрении, веб-сайт "виден" в сообщении об ошибке аж дважды: в имени организации ("OU" — "Organisational Unit") и в поле e-mail поддержки: ![Image:CAcert-verification-failed.png](../images/CAcert-verification-failed.png) В данном случае OpenSSL проверяет сертификат, выданный непосредственно корневым ЦС, однако этот ЦС не числится в числе доверенных. + +Подключение к одному из серверов, входящих в федерацию [xmpp.net](http://www.xmpp.net), — сертификат выдан организацией [Startcom](http://www.startcom.org) (а точнее — промежуточным ЦС, занимающимся выдачей сертификатов серверам xmpp.net): ![Image:Startcom-verification-failed.png](../images/Startcom-verification-failed.png) В данном случае OpenSSL проверяет сертификат, выданный промежуточным ЦС, проверка целостности сертификата удаётся (поскольку он был прислан сервером вместе со своим сертификатом — это обычная практика для сертификатов, выданных промежуточными ЦС, которой, впрочем, администраторы серверов придерживаться не обязаны), но сертификат вышестоящего ЦС в цепочке недоступен. + +Упомянутая смекалка позволит вам заключить, что в первом случае вам следует посетить сайт [CAcert.org](http://www.cacert.org), а во втором — [Startcom](http://www.startcom.org). Искать там нужно корневой (root) или "class 1" сертификат. Если сертификат доступен в нескольких форматах, выбирайте PEM как самый удобный. + +В данных конкретных случаях этими сертификатами являются: + +* Для CAcert: [http://www.cacert.org/certs/root.crt](http://www.cacert.org/certs/root.crt) +* Для Startcom: [http://cert.startcom.org/ca.crt](http://cert.startcom.org/ca.crt) + +Примечание: CAcert.org также предлагает сертификат в "формате TEXT". На самом деле такого формата не существует, а внутри там обычный PEM, предварённый результатом вызова `openssl x509 -text -in class1.crt -noout` на исходном сертификате. Сия схема работает благодаря тому, что OpenSSL при чтении сертификата в формате PEM игнорирует любой мусор до строки начала сертификата "-----BEGIN ..." и после строки его окончания (ниже подробно рассмотрено: в каких случаях и почему это может пригодиться). Поэтому можете скачать сертификат и в таком виде. + +## Настройка Ткаббера + +Итак, интересующая нас опция настроек Ткаббера называется **::loginconf(sslcacertstore)** (от **SSL** **CA** **Cert**ificate **Store**), задаёт она путь до каталога или файла с сертификатами доверенных ЦС и удобнее всего настраивается через **Tkabber → Настройки → Login**. + +Если вы используете мультилогин на разные серверы, вам следует изменять переменную **sslcacertstore** в соответствующих массивах **::loginconf1**, **::loginconf2** и так далее, как описано в [руководстве](http://tkabber.jabber.ru/files/doc/tkabber.html#s.postload-login). + +## Добавление доверенных сертификатов ЦС в хранилище + +Как уже было замечено выше, OpenSSL может искать подходящий сертификат либо в файле с набором сертификатов, либо в каталоге с файлами сертификатов. + +Остановимся подробнее на форматах этих разновидностей хранилищ сертификатов. О них хорошо рассказано в [описании функции SSL\_CTX\_load\_verify\_locations](http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html) API OpenSSL, однако здесь мы приведём вольную интерпретацию. + +**Файл** сертификатов — это текстовый (ASCII) файл, который состоит из любого числа сертификатов в формате PEM, расположенных друг за другом; между соседними сертификатами может быть расположен произвольный текст. Это удобно для размещения информации о сертификатах, чтобы проще было ими управлять. Пример такого файла: Сертификат CAcert.org: -----BEGIN CERTIFICATE----- MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290 IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB ... -----END CERTIFICATE----- Конец сертификата CAcert.org - + Сертификат Startcom: -----BEGIN CERTIFICATE----- MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0 ... -----END CERTIFICATE----- Конец сертификата Startcom. -**Каталог** сертификатов должен содержать файлы сертификатов в формате PEM, -_которые должны иметь специально сгенерированные имена._ Имя каждого файла -является хэшем, подсчитанным на основании содержимого файла по специальному -алгоритму, а расширение — номер файла с данным значением хэша, начиная с 0, -например: **9d66eef0.0**. - -С OpenSSL поставляется специальная утилита **c\_rehash**, которая умеет создавать -"правильно названные" [**симлинки**](Symlinks.md) на исходные файлы сертификатов (с -человекопонятными названиями и, возможно, организованные в систему вложенных -каталогов где-то в другом месте файловой системы). Поэтому в Windows, в которой -у пользователей очень редко имеется в наличии установленные утилиты из -комплекта OpenSSL (да и сам **tls** обычно слинкован с библиотекой OpenSSL -статически), данный метод выглядит слишком сложным для реализации, и -рекомендуется использовать файл с сертификатами. - -Кое-какие подсказки про **c\_rehash** в Windows: -[[1]](http://lynx.isc.org/current/README.rootcerts) (**TODO: окучить**). - -Собственно, искомый хэш получается выполнением +**Каталог** сертификатов должен содержать файлы сертификатов в формате PEM, _которые должны иметь специально сгенерированные имена._ Имя каждого файла является хэшем, подсчитанным на основании содержимого файла по специальному алгоритму, а расширение — номер файла с данным значением хэша, начиная с 0, например: 9d66eef0.0. + +С OpenSSL поставляется специальная утилита c\_rehash, которая умеет создавать "правильно названные" [симлинки](Symlinks.md) на исходные файлы сертификатов (с человекопонятными названиями и, возможно, организованные в систему вложенных каталогов где-то в другом месте файловой системы). Поэтому в Windows, в которой у пользователей очень редко имеется в наличии установленные утилиты из комплекта OpenSSL (да и сам **tls** обычно слинкован с библиотекой OpenSSL статически), данный метод выглядит слишком сложным для реализации, и рекомендуется использовать файл с сертификатами. + +Кое-какие подсказки про c\_rehash в Windows: [[1]](http://lynx.isc.org/current/README.rootcerts) (**TODO: окучить**). + +Собственно, искомый хэш получается выполнением openssl x509 -hash -noout -in c:/tmp/root.crt -OpenSSL для виндов берётся -[тут](http://www.slproweb.com/products/Win32OpenSSL.html). Впрочем, это не -работающее решение, возможно, стоит сделать плагин. - -#### Приватное хранилище - -Добавление сертификата в собственное (приватное) хранилище зависит от -выбранного формата хранилища. - -Если вы используете каталог, просто скопируйте файл с новым сертификатом в -него, проследив, чтобы он не перезаписал уже существующий файл. Например, -логично переименовать CAcert'овский сертификат в **cacert-root.pem** при -копировании. После этого создайте требуемые симлинки: +OpenSSL для виндов берётся [тут](http://www.slproweb.com/products/Win32OpenSSL.html). Впрочем, это не работающее решение, возможно, стоит сделать плагин. + +### Приватное хранилище + +Добавление сертификата в собственное (приватное) хранилище зависит от выбранного формата хранилища. + +Если вы используете каталог, просто скопируйте файл с новым сертификатом в него, проследив, чтобы он не перезаписал уже существующий файл. Например, логично переименовать CAcert'овский сертификат в cacert-root.pem при копировании. После этого создайте требуемые симлинки: $ cd ~/path/to/mycacerts $ c_rehash . -Если вы поддерживаете хранилище сертификатов в виде файла, просто добавьте -содержимое файла в конец файла-хранилища, например, так: +Если вы поддерживаете хранилище сертификатов в виде файла, просто добавьте содержимое файла в конец файла-хранилища, например, так: C:\> echo Корневой сертификат CAcert >>c:\mycacerts.pem C:\> type root.crt >>c:\mycacerts.pem -Переменная конфигурации **::loginconf(sslcacertstore)** должна быть установлена -в значение, соответствующее полному пути до каталога или файла с вашим -хранилищем. - -#### Системное хранилище - -Процедура помещения сертификата в хранилище зависит от системы. Обычно -специальное средство следит за поддержанием правильной структуры каталога с -сертификатами и/или файла с ними. - -В [Debian](http://www.debian.org) и [Ubuntu](http://www.ubuntu.com) процедура -такова: - -1. Установите настройку **::loginconf(sslcacertstore)** в значение - **/etc/ssl/certs** (это каталог) или **/etc/ssl/cert/ca-certificates.crt** (это файл). -1. Убедитесь, что установлен пакет - [ca-certificates](http://packages.debian.org/ca-certificates). Дальнейшие - действия нужно выполнять с правами суперпользователя. -1. Скопируйте нужные файлы сертификатов в каталог **/usr/share/ca-certificates**; - этот каталог может содержать подкаталоги, поэтому можете разместить скачанные - сертификаты по подкаталогам по своему усмотрению. -1. Запустите **update-ca-certificates**. - -Теперь Ткаббер будет доверять всем сертификатам ЦС из пакета -**ca-certificates**, а также тем, которые вы добавили. - -_Внимание!_ В пакете **ca-certificates**, идущем с Debian Lenny, уже есть -сертификаты как CACert, так и StartCom, — в итоге всё, что нужно сделать для -работы с jabber.ru и серверами, получившими сертификат от xmpp.net, это -пометить указанные два сертификата как доверенные при конфигурировании пакета. +Переменная конфигурации **::loginconf(sslcacertstore)** должна быть установлена в значение, соответствующее полному пути до каталога или файла с вашим хранилищем. + +### Системное хранилище + +Процедура помещения сертификата в хранилище зависит от системы. Обычно специальное средство следит за поддержанием правильной структуры каталога с сертификатами и/или файла с ними. + +В [Debian](http://www.debian.org) и [Ubuntu](http://www.ubuntu.com) процедура такова: + +1. Установите настройку **::loginconf(sslcacertstore)** в значение /etc/ssl/certs (это каталог) или /etc/ssl/cert/ca-certificates.crt (это файл). +1. Убедитесь, что установлен пакет [ca-certificates](http://packages.debian.org/ca-certificates). Дальнейшие действия нужно выполнять с правами суперпользователя. +1. Скопируйте нужные файлы сертификатов в каталог /usr/share/ca-certificates; этот каталог может содержать подкаталоги, поэтому можете разместить скачанные сертификаты по подкаталогам по своему усмотрению. +1. Запустите update-ca-certificates. + +Теперь Ткаббер будет доверять всем сертификатам ЦС из пакета **ca-certificates**, а также тем, которые вы добавили. + +_Внимание!_ В пакете **ca-certificates**, идущем с Debian Lenny, уже есть сертификаты как CACert, так и StartCom, — в итоге всё, что нужно сделать для работы с jabber.ru и серверами, получившими сертификат от xmpp.net, это пометить указанные два сертификата как доверенные при конфигурировании пакета. + + Index: wiki/ru/Разработка.md ================================================================== --- wiki/ru/Разработка.md +++ wiki/ru/Разработка.md @@ -1,33 +1,30 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Разработка/index.html) + # Разработка Материал из Tkabber Wiki -Это — список страниц, посвящённых разработке Ткаббера. - -Темы для обсуждений: - -* [**Wish и русская раскладка в - Windows**](Wish_и_русская_раскладка_в_Windows.md) — проблемы non-Latin-1 - раскладок клавиатуры в системах, отличных от "иксов". -* [**MUC Ignore**](MUC_Ignore.md) — обсуждение реализации игнорирования - участников конференций. -* [**Nick coloring**](Nick_coloring.md) — обсуждение переделки системы - раскраски ников/сообщений. -* [**Config dir**](Config_dir.md) — обсуждение реализации новой системы выбора - каталога для хранения настроек Ткаббера в Windows (и Mac OS X). -* [**Спамодавка списками приватности**](Спамодавка_списками_приватности.md) -* [**Новый вид Tk в 8.5**](Новый_вид_Tk_в_8.5.md) - -[**Плагины**](Плагины.md): - -* [**Разработка плагинов**](Разработка_плагинов.md) -* [**Чейнджлог плагина Traffic.**](Plugins/Traffic/Changelog.md) - -Прочее: - -* [**SVN disclaimer**](SVN_disclaimer.md) — что нужно знать чтобы начать - использовать тестировать версию Ткаббера, находящуюся в разработке. -* [**Утилита "Сделай-Tkabber-Starpack-сам"**](Tkabber_starpack.md) -* [**Tk Windows keysyms bug explained**](Tk_Windows_keysyms_bug_explained.md) +Это — список страниц, посвящённых разработке Ткаббера. + +Темы для обсуждений: + +* [Wish и русская раскладка в Windows](Wish_и_русская_раскладка_в_Windows.md) — проблемы non-Latin-1 раскладок клавиатуры в системах, отличных от "иксов". +* [MUC Ignore](MUC_Ignore.md) — обсуждение реализации игнорирования участников конференций. +* [Nick coloring](Nick_coloring.md) — обсуждение переделки системы раскраски ников/сообщений. +* [Config dir](Config_dir.md) — обсуждение реализации новой системы выбора каталога для хранения настроек Ткаббера в Windows (и Mac OS X). +* [Спамодавка списками приватности](Спамодавка_списками_приватности.md) +* [Новый вид Tk в 8.5](Новый_вид_Tk_в_8.5.md) + +[Плагины](Плагины.md): + +* [Разработка плагинов](Разработка_плагинов.md) +* [Чейнджлог плагина Traffic.](Plugins/Traffic/Changelog.md) + +Прочее: + +* [SVN disclaimer](SVN_disclaimer.md) — что нужно знать чтобы начать использовать тестировать версию Ткаббера, находящуюся в разработке. +* [Утилита "Сделай-Tkabber-Starpack-сам"](Tkabber_starpack.md) +* [Tk Windows keysyms bug explained](Tk_Windows_keysyms_bug_explained.md) + + Index: wiki/ru/Разработка_плагинов.md ================================================================== --- wiki/ru/Разработка_плагинов.md +++ wiki/ru/Разработка_плагинов.md @@ -1,355 +1,178 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Разработка_плагинов/index.html) + # Разработка плагинов Материал из Tkabber Wiki -В этой статье будет сделана попытка раскрыть волнующую многих тему написания -собственного плагина. Автор практического пособия (первых двух разделов статьи) -— ещё плохой охотник неопытный плагинописатель, зато его набитые шишки и -взгляд на вещи глазами новичка может помочь таким же начинающим. Впрочем, -поправки принимаются. +В этой статье будет сделана попытка раскрыть волнующую многих тему написания собственного плагина. Автор практического пособия (первых двух разделов статьи) — ещё плохой охотник неопытный плагинописатель, зато его набитые шишки и взгляд на вещи глазами новичка может помочь таким же начинающим. Впрочем, поправки принимаются. ## Содержание * [1 С чего начать](#С_чего_начать) - * [1.1 Учите матчасть](#Учите_матчасть) - * [1.1.1 Выучите вы уже этот тикль, не бойтесь — он несложный](#Выучите_вы_уже_этот_тикль_не_бойтесь_-_он_несложный) - * [1.1.2 Изучите документацию и исходники](#Изучите_документацию_и_исходники) + * [1.1 Учите матчасть](#Учите_матчасть) + * [1.1.1 Выучите вы уже этот тикль, не бойтесь — он несложный](#Выучите_вы_уже_этот_тикль_не_бойтесь_-_он_несложный) + * [1.1.2 Изучите документацию и исходники](#Изучите_документацию_и_исходники) * [2 Практические советы](#Практические_советы) - * [2.1 Структура плагина](#Структура_плагина) - * [2.1.1 Структура каталога](#Структура_каталога) - * [2.1.2 Структура файла скрипта](#Структура_файла_скрипта) - * [2.2 Анализируйте чужой код и не бойтесь экспериментировать](#Анализируйте_чужой_код_и_не_бойтесь_экспериментировать) - * [2.2.1 Закончим анализ разбиравшегося плагина](#Закончим_анализ_разбиравшегося_плагина) - * [2.3 Отладка](#Отладка) - * [2.3.1 Спешка нужна лишь при ловле блох](#Спешка_нужна_лишь_при_ловле_блох) - * [2.3.2 Консоль Ткаббера — наше всё](#Консоль_Ткаббера_-_наше_всё) - * [2.3.3 Побольше тестируйте](#Побольше_тестируйте) - * [2.3.4 Научитесь пользоваться системой управления версиями](#Научитесь_пользоваться_системой_управления_версиями) - * [2.4 Тонкости](#Тонкости) - * [2.4.1 Хуки и return stop](#Хуки_и_return_stop) - * [2.5 Делаем плагин динамически подключаемым](#Делаем_плагин_динамически_подключаемым) - * [2.5.1 Добавляем в namespace код для запуска процедур загрузки и выгрузки](#Добавляем_в_namespace_код_для_запуска_процедур_загрузки_и_выгрузки) - * [2.5.2 Создаём эти самые процедуры загрузки и выгрузки](#Создаём_эти_самые_процедуры_загрузки_и_выгрузки) - * [2.5.3 Возможна ли полная выгрузка плагина из памяти?](#Возможна_ли_полная_выгрузка_плагина_из_памяти) - * [2.6 Не бойтесь задавать вопросы](#Не_бойтесь_задавать_вопросы) + * [2.1 Структура плагина](#Структура_плагина) + * [2.1.1 Структура каталога](#Структура_каталога) + * [2.1.2 Структура файла скрипта](#Структура_файла_скрипта) + * [2.1.2 Информация о плагине](#Информация_о_плагине) + * [2.1.2 Задание пространства имён](#Задание_пространства_имён) + * [2.1.2 Настройки плагина](#Настройки_плагина) + * [2.1.2 Тело плагина](#Тело_плагина) + * [2.2 Анализируйте чужой код и не бойтесь экспериментировать](#Анализируйте_чужой_код_и_не_бойтесь_экспериментировать) + * [2.2.1 Закончим анализ разбиравшегося плагина](#Закончим_анализ_разбиравшегося_плагина) + * [2.3 Отладка](#Отладка) + * [2.3.1 Спешка нужна лишь при ловле блох](#Спешка_нужна_лишь_при_ловле_блох) + * [2.3.2 Консоль Ткаббера — наше всё](#Консоль_Ткаббера_-_наше_всё) + * [2.3.3 Побольше тестируйте](#Побольше_тестируйте) + * [2.3.4 Научитесь пользоваться системой управления версиями](#Научитесь_пользоваться_системой_управления_версиями) + * [2.4 Тонкости](#Тонкости) + * [2.4.1 Хуки и return stop](#Хуки_и_return_stop) + * [2.5 Делаем плагин динамически подключаемым](#Делаем_плагин_динамически_подключаемым) + * [2.5.1 Добавляем в namespace код для запуска процедур загрузки и выгрузки](#Добавляем_в_namespace_код_для_запуска_процедур_загрузки_и_выгрузки) + * [2.5.2 Создаём эти самые процедуры загрузки и выгрузки](#Создаём_эти_самые_процедуры_загрузки_и_выгрузки) + * [2.5.2 Процедура загрузки](#Процедура_загрузки) + * [2.5.2 Теперь о процедуре выгрузки](#Теперь_о_процедуре_выгрузки) + * [2.5.3 Возможна ли полная выгрузка плагина из памяти?](#Возможна_ли_полная_выгрузка_плагина_из_памяти) + * [2.6 Не бойтесь задавать вопросы](#Не_бойтесь_задавать_вопросы) * [3 Общие сведения о репозитории](#Общие_сведения_о_репозитории) * [4 Как получить доступ к репозиторию](#Как_получить_доступ_к_репозиторию) * [5 В заключение](#В_заключение) -## С чего начать - -Прежде всего, вам необходимо желание написать плагин. Без этого никак. Если вы -вообще тикль видите впервые, а плагин хочется (и никто его не пишет), то вам -нужно **огромное желание.** - -### Учите матчасть - -#### Выучите вы уже этот тикль, не бойтесь — он несложный - -Первым практическим шагом станет изучение основ этого самого тикля. В статье -[**Ссылки**](Ссылки.md#Tcl_Tk) есть немало линков на различные ресурсы (в том числе -и русскоязычные) по этому языку. В принципе, чтения книги самого Аустерхаута, -дополненное занятиями, предложенными на [этом сайте,](http://tclstudy.narod.ru/index.html) должно хватить, чтобы начать -мало-мальски в нём разбираться. Ещё один ценный источник информации, который -всегда под рукой — мануалы: например, `man 3tcl if` и `man 3tk frame` (маны -доступны и в интернете, но xterm всё же ближе). Могу вас успокоить — это вам не -си-плюс-плюс, не перл и не питон (не знаю ни одного из этих языков, но могу -голову дать на отсечение — тикль вы выучите на порядок быстрее любого из них). -Спорим, что двух недель вам хватит? ;-P - -#### Изучите документацию и исходники - -* Очень рекомендуется прочитать файл README, который лежит в корне - установочного каталога Ткаббера. Там описано буквально всё: начиная от - процесса установки Ткаббера до описания всех его настроек, а также хуков и - прочих интересных вещей, без знания о которых вам будет тяжело. Ваш покорный - слуга свой первый плагин написал, не пользуясь никакими хуками (точнее, без - них не обошлось, но они были благополучно скопипащены из другого плагина). - Сейчас же, продолжая ковырять код Ткаббера, автор этого руководства в полной - мере осознал ценность README и в ближайшие дни собирается его осилить, чего и - вам желает. - -* В принципе, этого уже достаточно, но было бы совсем неплохо пробежаться - глазами по списку наличествующих ткабберовских скриптов, а также бегло - проглядеть их внутренности, обращая внимание на названия процедур — - например, процедура `proc muc::join_group` обрабатывает вход в конференцию, - а идущая за ней `muc::leave_group` — выход из неё. Не забудьте и про хуки. - -* Не знаю, насколько это верно, но мне кажется, что почти любой плагин можно - написать, надёргав кода из самого Ткаббера и/или других плагинов, развесив - этот код по своему скрипту и связав его небольшим количеством продуктов - своей мозговой деятельности, поэтому чем лучше вы ориентируетесь в - исходниках, тем проще для вас. Если вы не пишете что-нибудь из ряда вон - выходящее вроде поддержки jingle, скорее всего, так оно и будет. Более того, - так и надо делать. Зачем изобретать свои детали к велосипеду, когда к вашим - услугам целый склад? Но чтобы воспользоваться этими деталями, надо знать, - где они лежат. Для этого надо твёрдо знать, что именно вы хотите сделать, - каким будет ваш плагин. - -* Например, плагин [**Bldjid**](Плагины.md#Bldjid) для забанивания пользователя по - джиду во всех конференциях, где я админю, я хотел реализовать как команду в - стиле IRC: /bldjid vasya@pupkin.ru. Если точнее, то сначала я хотел сделать - диалог вроде того, который появляется, когда вы хотите послать кому-то - приглашение в конференцию. Но, подумав, что это без подготовки будет - чересчур геморройно, я выбрал более простой и более эффективный путь. - Механизм работы IRC-style-команд я взял в плагине - [**Urlcmd**](Плагины.md#Urlcmd). Поскольку баны тесно связаны с работой в - конференции, мне понадобилось довольно плотно изучить файл muc.tcl. Не - обошлось и без заимствований оттуда. - -## Практические советы - -### Структура плагина - -#### Структура каталога - -Про это коротко, но ясно [**рассказано здесь**](Плагины.md#Анатомия_плагина). - -#### Структура файла скрипта - -##### Информация о плагине - -В самом начале обычно пишутся некоторые данные о плагине и его авторе, в виде -комментариев. Если вы не планируете делать развёрнутое описание плагина в -отдельном файле, можете здесь же вкратце указать, как им пользоваться. Я -поначалу так и сделал. Не забудьте дать свою контактную информацию (мыло, -джаббер). - -##### Задание пространства имён - -"Во первы́х строка́х письма" [© В. С. В.](http://www.world-art.ru/lyric/lyric.php?id=598) -желательно определить -пространство имён для процедур и переменных плагина, на случай, если вам -взбредёт в голову назвать одну из процедур, к примеру, join\_group (в muc.tcl -есть такая процедура, и, чтобы не возникло путаницы и непонятно откуда -берущихся ошибок, лучше это пресечь уже сейчас). Более того, как советуют -[**знающие люди**](Участник_Kostix.md), если вы точно не знаете зачем вам поступать -по-другому, все процедуры и переменные вашего плагина должны быть в своём -пространстве имён. Также следует помнить, что загрузка плагинов делается кодом, -который выполняется внутри `namespace eval ::plugins`, поэтому 1) собственное -пространство имён не должно быть абсолютным (без веской причины) 2) надо везде -использовать `[namespace current]`, если требуется получить полное имя -переменной/процедуры. Чтобы не ходить далеко за примером, разберу свой плагин. +# С чего начать +Прежде всего, вам необходимо желание написать плагин. Без этого никак. Если вы вообще тикль видите впервые, а плагин хочется (и никто его не пишет), то вам нужно **огромное желание.** + +## Учите матчасть + +### Выучите вы уже этот тикль, не бойтесь — он несложный + +Первым практическим шагом станет изучение основ этого самого тикля. В статье [Ссылки](Ссылки.md#Tcl_Tk) есть немало линков на различные ресурсы (в том числе и русскоязычные) по этому языку. В принципе, чтения книги самого Аустерхаута, дополненное занятиями, предложенными на [этом сайте,](http://tclstudy.narod.ru/index.html) должно хватить, чтобы начать мало-мальски в нём разбираться. Ещё один ценный источник информации, который всегда под рукой — мануалы: например, `man 3tcl if` и `man 3tk frame` (маны доступны и в интернете, но xterm всё же ближе). Могу вас успокоить — это вам не си-плюс-плюс, не перл и не питон (не знаю ни одного из этих языков, но могу голову дать на отсечение — тикль вы выучите на порядок быстрее любого из них). Спорим, что двух недель вам хватит? ;-P + +### Изучите документацию и исходники + +* Очень рекомендуется прочитать файл README, который лежит в корне установочного каталога Ткаббера. Там описано буквально всё: начиная от процесса установки Ткаббера до описания всех его настроек, а также хуков и прочих интересных вещей, без знания о которых вам будет тяжело. Ваш покорный слуга свой первый плагин написал, не пользуясь никакими хуками (точнее, без них не обошлось, но они были благополучно скопипащены из другого плагина). Сейчас же, продолжая ковырять код Ткаббера, автор этого руководства в полной мере осознал ценность README и в ближайшие дни собирается его осилить, чего и вам желает. + +* В принципе, этого уже достаточно, но было бы совсем неплохо пробежаться глазами по списку наличествующих ткабберовских скриптов, а также бегло проглядеть их внутренности, обращая внимание на названия процедур — например, процедура `proc muc::join_group` обрабатывает вход в конференцию, а идущая за ней `muc::leave_group` — выход из неё. Не забудьте и про хуки. + +* Не знаю, насколько это верно, но мне кажется, что почти любой плагин можно написать, надёргав кода из самого Ткаббера и/или других плагинов, развесив этот код по своему скрипту и связав его небольшим количеством продуктов своей мозговой деятельности, поэтому чем лучше вы ориентируетесь в исходниках, тем проще для вас. Если вы не пишете что-нибудь из ряда вон выходящее вроде поддержки jingle, скорее всего, так оно и будет. Более того, так и надо делать. Зачем изобретать свои детали к велосипеду, когда к вашим услугам целый склад? Но чтобы воспользоваться этими деталями, надо знать, где они лежат. Для этого надо твёрдо знать, что именно вы хотите сделать, каким будет ваш плагин. + +* Например, плагин [Bldjid](Плагины.md#Bldjid) для забанивания пользователя по джиду во всех конференциях, где я админю, я хотел реализовать как команду в стиле IRC: /bldjid vasya@pupkin.ru. Если точнее, то сначала я хотел сделать диалог вроде того, который появляется, когда вы хотите послать кому-то приглашение в конференцию. Но, подумав, что это без подготовки будет чересчур геморройно, я выбрал более простой и более эффективный путь. Механизм работы IRC-style-команд я взял в плагине [Urlcmd](Плагины.md#urlcmd). Поскольку баны тесно связаны с работой в конференции, мне понадобилось довольно плотно изучить файл muc.tcl. Не обошлось и без заимствований оттуда. + +# Практические советы +## Структура плагина + +### Структура каталога + +Про это коротко, но ясно [рассказано здесь](Плагины.md#Анатомия_плагина). + +### Структура файла скрипта + +#### Информация о плагине + +В самом начале обычно пишутся некоторые данные о плагине и его авторе, в виде комментариев. Если вы не планируете делать развёрнутое описание плагина в отдельном файле, можете здесь же вкратце указать, как им пользоваться. Я поначалу так и сделал. Не забудьте дать свою контактную информацию (мыло, джаббер). + +#### Задание пространства имён + +"Во первы́х строка́х письма" [© В. С. В.](http://www.world-art.ru/lyric/lyric.php?id=598) желательно определить пространство имён для процедур и переменных плагина, на случай, если вам взбредёт в голову назвать одну из процедур, к примеру, join\_group (в muc.tcl есть такая процедура, и, чтобы не возникло путаницы и непонятно откуда берущихся ошибок, лучше это пресечь уже сейчас). Более того, как советуют [знающие люди](Участник_Kostix.md), если вы точно не знаете зачем вам поступать по-другому, все процедуры и переменные вашего плагина должны быть в своём пространстве имён. Также следует помнить, что загрузка плагинов делается кодом, который выполняется внутри `namespace eval ::plugins`, поэтому 1) собственное пространство имён не должно быть абсолютным (без веской причины) 2) надо везде использовать `[namespace current]`, если требуется получить полное имя переменной/процедуры. Чтобы не ходить далеко за примером, разберу свой плагин. namespace eval bldjid {  ::msgcat::mcload [file join [file dirname [info script]] msgs] hook::add generate_completions_hook \ [namespace current]::command_comps hook::add chat_send_message_hook \ [namespace current]::handle_commands 17 } -Как видите, для задания пространства имён нужна команда **namespace**. Внутри -фигурных скобок пишется то, что будет действовать в пределах этого -пространства. Например, можно задавать хуки, устанавливать переменные или -подгружать файлы сообщений, как во второй строчке примера. Немного подробнее о -хуках можно почитать [**тут**](Загрузка_настроек.md#Хуки). Обратите внимание, имена -хуков и их обработчиков я стырил из плагина-донора, но, чтобы мои обработчики -не перепутались с оригинальными, к ним спереди прибавляется текущее -пространство имён: при выполнении скрипта `[namespace current]` заместится -на bldjid и получится `bldjid::command_comps` (см. объяснение ниже). - -Строго говоря, в том плагине они тоже работают внутри своего пространства, -поэтому с нашими не перепутаются, но лучше сделать всё по-человечески. С -пространствами имён надо быть осторожнее и лучше перестраховываться, добавляя -[namespace current]:: перед именем вызываемой процедуры. Дело в том, что -пространство имён плагина само становится "отпрыском" пространства -имён ::plugins — Это означает, что если вызывать процедуру вот так: +Как видите, для задания пространства имён нужна команда **namespace**. Внутри фигурных скобок пишется то, что будет действовать в пределах этого пространства. Например, можно задавать хуки, устанавливать переменные или подгружать файлы сообщений, как во второй строчке примера. Немного подробнее о хуках можно почитать [тут](Загрузка_настроек.md#Хуки). Обратите внимание, имена хуков и их обработчиков я стырил из плагина-донора, но, чтобы мои обработчики не перепутались с оригинальными, к ним спереди прибавляется текущее пространство имён: при выполнении скрипта `[namespace current]` заместится на bldjid и получится `bldjid::command_comps` (см. объяснение ниже). + +Строго говоря, в том плагине они тоже работают внутри своего пространства, поэтому с нашими не перепутаются, но лучше сделать всё по-человечески. С пространствами имён надо быть осторожнее и лучше перестраховываться, добавляя [namespace current]:: перед именем вызываемой процедуры. Дело в том, что пространство имён плагина само становится "отпрыском" пространства имён ::plugins — Это означает, что если вызывать процедуру вот так: bldjid::command_comps -мы получим ошибку о неправильном имени этой команды. Так что если быть точнее, -то при выполнении скрипта **`[namespace current]` заместится -на ::plugins::bldjid**. Или можно ещё вызывать процедуру безо всяких -неймспейсов, если вы уверены, что это имя уникально. _Если же вы использовали -какую-то чужую процедуру и не поменяли ей имя, не забудьте про пространство -имён!_ - -##### Настройки плагина - -Если вы планируете делать плагин настраиваемым, после объявления неймспейса -добавьте необходимые настройки. Вот пара настроек из плагина reversi: +мы получим ошибку о неправильном имени этой команды. Так что если быть точнее, то при выполнении скрипта **`[namespace current]` заместится на ::plugins::bldjid**. Или можно ещё вызывать процедуру безо всяких неймспейсов, если вы уверены, что это имя уникально. _Если же вы использовали какую-то чужую процедуру и не поменяли ей имя, не забудьте про пространство имён!_ + +#### Настройки плагина + +Если вы планируете делать плагин настраиваемым, после объявления неймспейса добавьте необходимые настройки. Вот пара настроек из плагина reversi: custom::defgroup Plugins [::msgcat::mc "Plugins options."] -group Tkabber custom::defgroup Reversi [::msgcat::mc "Reversi plugin options."] -group Plugins custom::defvar options(theme) Checkers \ [::msgcat::mc "Reversi figures theme."] -group Reversi \ -type options -values $values \ -command [namespace current]::load_stored_theme -Смело копируйте эти или другие настройки себе и модифицируйте под свои нужды. - -##### Тело плагина - -Далее идут процедуры. Как минимум должны иметься процедуры-обработчики ваших -хуков. Нужны ли вам другие — решать вам в зависимости от ваших потребностей, -возможностей и стиля программирования. Вот для примера маленькая -процедура-обработчик, которую я взял из urlcmd и адаптировал под себя: +Смело копируйте эти или другие настройки себе и модифицируйте под свои нужды. + +#### Тело плагина + +Далее идут процедуры. Как минимум должны иметься процедуры-обработчики ваших хуков. Нужны ли вам другие — решать вам в зависимости от ваших потребностей, возможностей и стиля программирования. Вот для примера маленькая процедура-обработчик, которую я взял из urlcmd и адаптировал под себя: proc bldjid::command_comps {chatid compsvar wordstart line} { upvar 0 $compsvar comps if {!$wordstart} { lappend comps {/bldjid } {/unbldjid } {/banjid } } } -Обратите внимание на пространство имён bldjid, которое идёт перед именем -процедуры (и отделяется от имени двумя двоеточиями). Его надо добавлять ко всем -именам процедур скрипта, которые должны относиться к объявленному неймспейсу. -Почувствуйте разницу: в utils.tcl имена процедур пишутся без пространства, -потому что это базовые процедуры, и они выполняются в базовом пространстве -Ткаббера — :: — и вызываются потом из других скриптов напрямую. Ещё обратите -внимание на команды {/bldjid } {/unbldjid } {/banjid }, которые добавляются в -список comps. Поначалу у меня были только две первые. Когда они заработали, я -решил добавить бан по джиду в текущей комнате. Процедуру-то соответствующую -дописал, а сюда команду добавить забыл и потом долго удивлялся, почему она не -работает :) - -Структура стандартного плагина примерно такова, но иногда (например, в плагине -custom-urls.tcl) в самом конце снова объявляется пространство имён, но уже с -другой начинкой. - -![(!)](../images/Hammer.png) **Сделать:** Уточнить и рассказать про это. - -### Анализируйте чужой код и не бойтесь экспериментировать - -#### Закончим анализ разбиравшегося плагина - -Вторая процедура — `bldjid::handle_commands` — тоже обработчик хука (помните -объявление пространства имён?). Её начало я тоже слямзил из urlcmd.tcl, а -остальное — из muc.tcl. В процессе допиливания чужого кода выяснилось, что мне -нужны ещё процедуры. Для команды /unbldjid мне идеально подошла внешняя: -`muc::unban`, и я просто вызываю её в цикле. Так что разбанивание у меня -заработало раньше забанивания :) - -С баном вышло посложнее: я не знал, как лучше всё сделать, и поначалу пошёл по -неправильному пути — начал изучать процедуры запроса, получения и отсылки -чёрного списка (последняя из них — `muc::send_list`). Процедуры большие и -выглядят довольно кошмарно (для новичка), но самое главное, что мне не -нравилось — это необходимость вытягивать весь список только для того, чтобы -прибавить к нему своего пациента и отправить весь список снова на сервер. Очень -нерационально! И тут мне случайно на глаза попался такой комментарий в -процедуре-обработчике `muc::change_item_param`, который обрабатывает команды -Ткаббера /ban, /kick, /admin и другие: _For unknown reason banning request MUST -be based on user's bare JID (which may be not known by admin)._ "Опа, — подумал -я, — так значит, серверу всё-таки шлётся реальный джид пользователя, а не -room@conference.jabber.ru/nick". Так что я просто забрал остатки кода после -этого комментария и сделал из него свою процедуру, выкинув ненужное. Также мне -пришлось наприсать свою процедуру проверки на ошибку, основывающуюся на -`muc::test_error_res`, потому что оригинальная меня не устраивала. Процедура -отсылки бана вызывается один раз, если у нас команда /banjid (её я добавил -позже, когда всё заработало), и в цикле, если команда — /bldjid. Вот, -собственно, и всё. - -Ну или почти всё. Плагин работает, но его можно чуть-чуть доделать. Сейчас он -шлёт запросы на бан тупо во все комнаты, где я нахожусь. Но админю-то я не во -всех. Это означает лишний трафик для меня и лишнюю нагрузку на сервер. Значит, -мне надо как-то отфильтровать те комнаты, где я имею права админа. Тут, как -может показаться, заколдованный круг: чтобы узнать, админю ли я в комнате, надо -спросить у сервера. А это как раз лишний трафик и лишний пинок серверу. Но если -подумать хорошо, то мы ведь уже знаем, что если я в ростере комнаты сижу в -группе "Модераторы", то значит, и права тут имею модераторские. Так что надо -проверить ростер каждой конференции и выбрать лишь нужные. Вот и обозначилось -направление для поисков — найти, где рисуется ростер конференции, и выдрать -оттуда нужный код :) На самом деле всё немного сложнее, потому что я могу быть -не админом, а модератором — я буду находиться в группе модеров, но банить не -смогу. Небольшие издержки, но соотношение "количество работы/результат" -получается неплохое. Ещё потребуется добавить исключение комнат вида -`channel%irc.server1.ru@irc.server2.com`, чтобы запросы не слались в комнаты, -не поддерживающие стандарт MUC. Тут уже, скорее всего, придётся писать свой -парсер. - -### Отладка - -#### Спешка нужна лишь при ловле блох - -При отлове багов торопиться не надо. Вот вы получили сообщение об ошибке. -Прочитайте его внимательно: там дана практически вся необходимая для отладки -информация. Если виной всему опечатка в имени команды или аргумента, так и -будет сказано (имя команды не существует или что-то в этом духе). Если вы -позабыли где-то скобку, об этом тоже будет сказано начистоту. Вам дадут ссылку -на ошибку вплоть до седьмого колена: в какой строке какой процедуры, вызванной -кем и откуда находится источник проблем. - -![(!)](../images/Hammer.png) **Сделать:** Развить, если необходимо. - -![(!)](../images/Hammer.png) **Сделать:** Вкратце написать про ::plugins::debug. - -#### Консоль Ткаббера — наше всё - -Она сэкономит вам уйму времени. Чтобы не перегружать Ткаббер после каждого -изменения кода (а поначалу ошибки будут сыпаться как осенние листья, да и потом -не факт, что код будет работать правильно и как вам бы хотелось), откройте -консоль Ткаббера и напишите там: +Обратите внимание на пространство имён bldjid, которое идёт перед именем процедуры (и отделяется от имени двумя двоеточиями). Его надо добавлять ко всем именам процедур скрипта, которые должны относиться к объявленному неймспейсу. Почувствуйте разницу: в utils.tcl имена процедур пишутся без пространства, потому что это базовые процедуры, и они выполняются в базовом пространстве Ткаббера — :: — и вызываются потом из других скриптов напрямую. Ещё обратите внимание на команды {/bldjid } {/unbldjid } {/banjid }, которые добавляются в список comps. Поначалу у меня были только две первые. Когда они заработали, я решил добавить бан по джиду в текущей комнате. Процедуру-то соответствующую дописал, а сюда команду добавить забыл и потом долго удивлялся, почему она не работает :) + +Структура стандартного плагина примерно такова, но иногда (например, в плагине custom-urls.tcl) в самом конце снова объявляется пространство имён, но уже с другой начинкой. ![(!)](../images/Hammer.png) **Сделать:** Рассказать про это. + +## Анализируйте чужой код и не бойтесь экспериментировать + +### Закончим анализ разбиравшегося плагина + +Вторая процедура — `bldjid::handle_commands` — тоже обработчик хука (помните объявление пространства имён?). Её начало я тоже слямзил из urlcmd.tcl, а остальное — из muc.tcl. В процессе допиливания чужого кода выяснилось, что мне нужны ещё процедуры. Для команды /unbldjid мне идеально подошла внешняя: `muc::unban`, и я просто вызываю её в цикле. Так что разбанивание у меня заработало раньше забанивания :) + +С баном вышло посложнее: я не знал, как лучше всё сделать, и поначалу пошёл по неправильному пути — начал изучать процедуры запроса, получения и отсылки чёрного списка (последняя из них — `muc::send_list`). Процедуры большие и выглядят довольно кошмарно (для новичка), но самое главное, что мне не нравилось — это необходимость вытягивать весь список только для того, чтобы прибавить к нему своего пациента и отправить весь список снова на сервер. Очень нерационально! И тут мне случайно на глаза попался такой комментарий в процедуре-обработчике `muc::change_item_param`, который обрабатывает команды Ткаббера /ban, /kick, /admin и другие: _For unknown reason banning request MUST be based on user's bare JID (which may be not known by admin)._ "Опа, — подумал я, — так значит, серверу всё-таки шлётся реальный джид пользователя, а не room@conference.jabber.ru/nick". Так что я просто забрал остатки кода после этого комментария и сделал из него свою процедуру, выкинув ненужное. Также мне пришлось наприсать свою процедуру проверки на ошибку, основывающуюся на `muc::test_error_res`, потому что оригинальная меня не устраивала. Процедура отсылки бана вызывается один раз, если у нас команда /banjid (её я добавил позже, когда всё заработало), и в цикле, если команда — /bldjid. Вот, собственно, и всё. + +Ну или почти всё. Плагин работает, но его можно чуть-чуть доделать. Сейчас он шлёт запросы на бан тупо во все комнаты, где я нахожусь. Но админю-то я не во всех. Это означает лишний трафик для меня и лишнюю нагрузку на сервер. Значит, мне надо как-то отфильтровать те комнаты, где я имею права админа. Тут, как может показаться, заколдованный круг: чтобы узнать, админю ли я в комнате, надо спросить у сервера. А это как раз лишний трафик и лишний пинок серверу. Но если подумать хорошо, то мы ведь уже знаем, что если я в ростере комнаты сижу в группе "Модераторы", то значит, и права тут имею модераторские. Так что надо проверить ростер каждой конференции и выбрать лишь нужные. Вот и обозначилось направление для поисков — найти, где рисуется ростер конференции, и выдрать оттуда нужный код :) На самом деле всё немного сложнее, потому что я могу быть не админом, а модератором — я буду находиться в группе модеров, но банить не смогу. Небольшие издержки, но соотношение "количество работы/результат" получается неплохое. Ещё потребуется добавить исключение комнат вида `channel%irc.server1.ru@irc.server2.com`, чтобы запросы не слались в комнаты, не поддерживающие стандарт MUC. Тут уже, скорее всего, придётся писать свой парсер. + +## Отладка + +### Спешка нужна лишь при ловле блох + +При отлове багов торопиться не надо. Вот вы получили сообщение об ошибке. Прочитайте его внимательно: там дана практически вся необходимая для отладки информация. Если виной всему опечатка в имени команды или аргумента, так и будет сказано (имя команды не существует или что-то в этом духе). Если вы позабыли где-то скобку, об этом тоже будет сказано начистоту. Вам дадут ссылку на ошибку вплоть до седьмого колена: в какой строке какой процедуры, вызванной кем и откуда находится источник проблем. ![(!)](../images/Hammer.png) **Сделать:** Развить, если необходимо. + +![(!)](../images/Hammer.png) **Сделать:** Вкратце написать про ::plugins::debug. + +### Консоль Ткаббера — наше всё + +Она сэкономит вам уйму времени. Чтобы не перегружать Ткаббер после каждого изменения кода (а поначалу ошибки будут сыпаться как осенние листья, да и потом не факт, что код будет работать правильно и как вам бы хотелось), откройте консоль Ткаббера и напишите там: source "/путь/содержащий пробелы/к/вашему/плагину/coolplugin.tcl" -Плагин должен не отходя от кассы загрузиться (при этом в консоли вам ничего не -будет сказано, что говорит о положительном результате). Если в пути ошибка, -консоль изругается. Всё, можно тестировать. Если вам кажется, что он не -загрузился (не делает того, что от него ожидается), проверьте, существует ли -его пространство имён: +Плагин должен не отходя от кассы загрузиться (при этом в консоли вам ничего не будет сказано, что говорит о положительном результате). Если в пути ошибка, консоль изругается. Всё, можно тестировать. Если вам кажется, что он не загрузился (не делает того, что от него ожидается), проверьте, существует ли его пространство имён: namespace exists ::bldjid -Если ответ — 1, всё должно быть в порядке. Если 0, где-то косяки (в ДНК -в коде, скорее всего — может, вы ошиблись в имени команды, и теперь Ткаббер "не -узнаёт" то, что вы ему подсовываете; при этом, кстати, команда выведется в -чате, как простое сообщение). - -На первых порах очень неплохо быть в курсе того, что у вас попадает в -переменные. Воспользуйтесь командой puts. Например, мы хотим узнать, -действительно ли все конференции попали в список. +Если ответ — 1, всё должно быть в порядке. Если 0, где-то косяки (в ДНК в коде, скорее всего — может, вы ошиблись в имени команды, и теперь Ткаббер "не узнаёт" то, что вы ему подсовываете; при этом, кстати, команда выведется в чате, как простое сообщение). + +На первых порах очень неплохо быть в курсе того, что у вас попадает в переменные. Воспользуйтесь командой puts. Например, мы хотим узнать, действительно ли все конференции попали в список. foreach tmpchatid [lsort [lfilter chat::is_groupchat [chat::opened $xlib]]] { lappend groupjids [chat::get_jid $tmpchatid] } puts $groupjids -Результат действия этой команды будет выведен прямо в консоли. Ничто не мешает -вам трассировать таким образом состояние переменных других скриптов Ткаббера. -Просто добавьте печать нужной переменной в нужном месте, сохраните файл и не -забудьте подгрузить его. Ещё одна удобная для тестирования команда — return -stop. Если её поставить в вышеприведённом примере после puts, то дальнейшее -выполнение кода прекратится. Полезно, когда сначала хочется отладить один кусок -кода, не заморачиваясь на другом. - -**Внимание:** _Команда puts полезна, но не забудьте перед релизом их все -убрать, иначе их вывод будет валиться в .xsession-errors пользователей плагина, -что вряд ли кого-то обрадует._ - -Хоть консоль Ткаббера и является отличным отладочным инструментом, живого -тестирования она заменить не может. Ваш покорный слуга погонял свой плагин, -загруженный в Ткаббер через консоль, радостно выложил его сюда на вики, но -когда через несколько дней дело дошло до реального масштабного бана, выскочила -ошибка. В результате у автора плагина прибавилось ума, и он решил развить тему -пространства имён (наверное, вы уже про это прочитали выше). - -![(!)](../images/Hammer.png) **Сделать:** Рассказать про return -code break - -#### Побольше тестируйте - -Прежде чем выкладывать плагин на общее обозрение, погоняйте его самостоятельно. -Проверьте его работу в нескольких версиях Ткаббера (svn и хотя бы одной-двух из -последних стабильных) и на разных тиклях (8.5, 8.4 как минимум). Возможно, вы -воткнули где-то команду, которая есть в одной версии языка или Ткаббера и нет в -других. Решайте сами, что вам нужно: совместимость с ними или более продвинутый -программинг/функциональность. В случае сомнений посоветуйтесь со -[**знающими**](Участник_Kostix.md) [**людьми**](Участник_Teo.md). Скорее всего, можно и -рыбку съесть, и на ёлку влезть, то есть, разрулить ситуацию так, что и -совместимость не пострадает, и работать всё будет хорошо. - -Пробуйте вводить нестандартные параметры, левые символы, и вообще создавать -экстремальные условия для вашего скрипта. Например, для отсеивания каналов IRC -я в проверочном условии использовал поиск вхождения в имя символа процента, -поскольку такие комнаты работают через транспорт: -`somechannel%someserver.ru@irc.server.org`. Однако потом я подумал (и это -подтвердилось на практике), что и обычная MUC-комната может иметь знак процента -в имени. Поэтому я доработал проверку таким образом: +Результат действия этой команды будет выведен прямо в консоли. Ничто не мешает вам трассировать таким образом состояние переменных других скриптов Ткаббера. Просто добавьте печать нужной переменной в нужном месте, сохраните файл и не забудьте подгрузить его. Ещё одна удобная для тестирования команда — return stop. Если её поставить в вышеприведённом примере после puts, то дальнейшее выполнение кода прекратится. Полезно, когда сначала хочется отладить один кусок кода, не заморачиваясь на другом. + +**Внимание:** _Команда puts полезна, но не забудьте перед релизом их все убрать, иначе их вывод будет валиться в .xsession-errors пользователей плагина, что вряд ли кого-то обрадует._ + +Хоть консоль Ткаббера и является отличным отладочным инструментом, живого тестирования она заменить не может. Ваш покорный слуга погонял свой плагин, загруженный в Ткаббер через консоль, радостно выложил его сюда на вики, но когда через несколько дней дело дошло до реального масштабного бана, выскочила ошибка. В результате у автора плагина прибавилось ума, и он решил развить тему пространства имён (наверное, вы уже про это прочитали выше). + +![(!)](../images/Hammer.png) **Сделать:** Рассказать про return -code break + +### Побольше тестируйте + +Прежде чем выкладывать плагин на общее обозрение, погоняйте его самостоятельно. Проверьте его работу в нескольких версиях Ткаббера (svn и хотя бы одной-двух из последних стабильных) и на разных тиклях (8.5, 8.4 как минимум). Возможно, вы воткнули где-то команду, которая есть в одной версии языка или Ткаббера и нет в других. Решайте сами, что вам нужно: совместимость с ними или более продвинутый программинг/функциональность. В случае сомнений посоветуйтесь со [знающими](Участник_Kostix.md) [людьми](Участник_Teo.md). Скорее всего, можно и рыбку съесть, и на ёлку влезть, то есть, разрулить ситуацию так, что и совместимость не пострадает, и работать всё будет хорошо. + +Пробуйте вводить нестандартные параметры, левые символы, и вообще создавать экстремальные условия для вашего скрипта. Например, для отсеивания каналов IRC я в проверочном условии использовал поиск вхождения в имя символа процента, поскольку такие комнаты работают через транспорт: `somechannel%someserver.ru@irc.server.org`. Однако потом я подумал (и это подтвердилось на практике), что и обычная MUC-комната может иметь знак процента в имени. Поэтому я доработал проверку таким образом: foreach tmpchatid [lsort [lfilter chat::is_groupchat [chat::opened $xlib]]] { set tmpgrp [chat::get_jid $tmpchatid] if {([lindex [bldjid::whoami $xlib $tmpgrp] 1] == "admin" \ || [lindex [bldjid::whoami $xlib $tmpgrp] 1] == "owner") \ @@ -356,99 +179,37 @@ && ![string match *%*@*irc* $tmpgrp]} { lappend groupjids $tmpgrp } } -Предполагается, что в имени транспорта обязательно должно присутствовать слово -irc (иначе мы просто не догадаемся, что это IRC-транспорт), то есть, в -теперешнем виде скрипт пропустит комнату `mirc%room@conference.jabber.ru` и не -пропустит комнату `channel%someserver.org@irc.putyourserverhere.ru`. Кстати, -скрипт в этом виде тормознёт и комнату `mirc%room@conference.mirc.com` -(представим себе на мгновение, что на этом сайте есть джаббер-сервер), поэтому -проверку следует изменить на \*%\*@irc\* (точку после слова irc вылавливать не -надо, на случай, если транспорт называется irctransport.server.org). Теперь -максимум, что может случиться — если имя транспорта _не начинается_ на "irc" -(что очень маловероятно), то тогда, отправив запрос на бан в эту комнату, мы -получим сообщение об ошибке. - -Это лишь один пример. Напрягите фантазию, думайте за дурака-пользователя, -предполагайте, что он может сморозить. - -#### Научитесь пользоваться системой управления версиями - -Не поленитесь поставить и освоить что-нибудь вроде -[subversion](http://subversion.tigris.org/). Эта штука избавит вас от великой -головной боли на тему "Блин, как уж я там позавчера эту хрень сделал? Сейчас бы -мне этот кусок сюда, да потёр и не сохранил ту версию". Совсем не обязательно -сходу просить допуск к репозиторию на xmpp.ru (особенно если у вас нет опыта -работы с svn). Устройте себе локальный сервер: и от головной боли избавитесь, и -работать с сабвершеном научитесь. Если вы считаете, что ваше творение должно -находиться в общем репозитории [svn.xmpp.ru](http://svn.xmpp.ru), читайте -дальше — там рассказано о его устройстве и о том, как получить к нему доступ. -Врочем, ради одного плагина не стоит сильно заморачиваться. Выложите его на -вики — делов-то. - -([**kostix**](Участник_Kostix.md) замечает, что для _локальной_ работы над проектом -значительно удобнее Subversion использовать какого-нибудь представителя -семейства -[распределённых систем управления версиями (DVCS)](http://en.wikipedia.org/wiki/Distributed_Version_Control_System), -например, [Bazaar](http://bazaar-vcs.org/), -[Mercurial](http://www.selenic.com/mercurial), [Git](http://git.or.cz), -[Darcs](http://darcs.net), [Monotone](http://monotone.ca) и т.п. — они -позволяют лихо жонглировать кодом, не завися от центрального сервера.) - -([**bigote**](Участник_Bigote.md) восторженно соглашается — не так давно -освоенный им в минимальных количествах Git значительно упростил мышиную возню с -кодом на десктопе. Но если вы планируете в конце концов поместить свой плагин в -репозиторий tkabber-3rd-party-plugins, то лучше сразу вести разработку под svn -или на крайний случай сделать это перед его публикацией туда, сначала -экспортнув код из локального репозитория. Конечно, есть обвязки, позволяющие -публиковать из git в svn, к примеру, но они не про нас, простых смертных -начинающих плагинописателей ;). Вот, кстати, -[интересная притча](http://edward13.livejournal.com/26550.html) -(во всех переводах названная почему-то басней), простыми словами рассказывающая -о мощи git.) - -### Тонкости - -Здесь я попытаюсь рассказать о некоторых подводных камнях, на которые будет -частенько находить ваша коса в процессе доведения плагина до ума. Моя, во -всяком случае, на них натыкается преизрядно. - -#### Хуки и return stop - -Есть тонкая разница между командами `return` и `return stop` — первая не -прерывает выполнения хука, если процедура, в которой она встретилась, является -его обработчиком. Поясню на примере того же плагина Bldjid. Он разросся, и -теперь там есть процедура smart\_enter\_exit\_message, которая обрабатывает хук -client\_presence\_hook (который срабатывает, когда кто-нибудь меняет своё -состояние либо заходит в комнату). Я по незнанию понаставил в некоторые -проверки внутри этой процедуры `return stop` вместо `return`, и в результате -при определённых условиях перестал показываться ростер конференции, да и другие -странности в работе Ткаббера появились. Дело было как раз в том, что вместо -того, чтобы мирно завершить свою работу и отдать бразды правления другим -обработчикам, эта процедура обрывала хук, и само собой, никто уже не заполнял -ростер группы. - -Сложно дать готовый рецепт на все случаи жизни, но можно посоветовать подходить -с осторожностью к использованию `return stop` в обработчиках хуков. В обычных -процедурах наоборот, лучше перестраховаться. Я только что попробовал позаменять -все стопы на обычные return в теле простых процедур — результат плачевный: -команды-то выполняются, но потом их текст выводится в общий чат, что нам -совершенно не нужно. - -### Делаем плагин динамически подключаемым - -С появлением в Ткаббере Менеджера плагинов жизнь пользователя стала намного -проще. Чтобы подключить нужный плагин, достаточно сделать несколько кликов -(**Настройки → Plugins Management → отметить галочкой нужный плагин → сохранить -настройку**). Естественно, сам плагин перед этим всё равно должен быть помещён -в соответствующее место, но согласитесь, что это значительный шаг вперёд, тем -более, что, сняв эту галочку, плагин можно _частично_ из памяти выгрузить. -Почему частично? Не буду забегать вперёд, начну по порядку. - -#### Добавляем в namespace код для запуска процедур загрузки и выгрузки +Предполагается, что в имени транспорта обязательно должно присутствовать слово irc (иначе мы просто не догадаемся, что это IRC-транспорт), то есть, в теперешнем виде скрипт пропустит комнату `mirc%room@conference.jabber.ru` и не пропустит комнату `channel%someserver.org@irc.putyourserverhere.ru`. Кстати, скрипт в этом виде тормознёт и комнату `mirc%room@conference.mirc.com` (представим себе на мгновение, что на этом сайте есть джаббер-сервер), поэтому проверку следует изменить на \*%\*@irc\* (точку после слова irc вылавливать не надо, на случай, если транспорт называется irctransport.server.org). Теперь максимум, что может случиться — если имя транспорта _не начинается_ на "irc" (что очень маловероятно), то тогда, отправив запрос на бан в эту комнату, мы получим сообщение об ошибке. + +Это лишь один пример. Напрягите фантазию, думайте за дурака-пользователя, предполагайте, что он может сморозить. + +### Научитесь пользоваться системой управления версиями + +Не поленитесь поставить и освоить что-нибудь вроде [subversion](http://subversion.tigris.org/). Эта штука избавит вас от великой головной боли на тему "Блин, как уж я там позавчера эту хрень сделал? Сейчас бы мне этот кусок сюда, да потёр и не сохранил ту версию". Совсем не обязательно сходу просить допуск к репозиторию на xmpp.ru (особенно если у вас нет опыта работы с svn). Устройте себе локальный сервер: и от головной боли избавитесь, и работать с сабвершеном научитесь. Если вы считаете, что ваше творение должно находиться в общем репозитории [svn.xmpp.ru](http://svn.xmpp.ru), читайте дальше — там рассказано о его устройстве и о том, как получить к нему доступ. Врочем, ради одного плагина не стоит сильно заморачиваться. Выложите его на вики — делов-то. + +([kostix](Участник_Kostix.md) замечает, что для _локальной_ работы над проектом значительно удобнее Subversion использовать какого-нибудь представителя семейства [распределённых систем управления версиями (DVCS)](http://en.wikipedia.org/wiki/Distributed_Version_Control_System), например, [Bazaar](http://bazaar-vcs.org/), [Mercurial](http://www.selenic.com/mercurial), [Git](http://git.or.cz), [Darcs](http://darcs.net), [Monotone](http://monotone.ca) и т.п. — они позволяют лихо жонглировать кодом, не завися от центрального сервера.) + +([bigote](Участник_Bigote.md) восторженно соглашается — не так давно освоенный им в минимальных количествах Git значительно упростил мышиную возню с кодом на десктопе. Но если вы планируете в конце концов поместить свой плагин в репозиторий tkabber-3rd-party-plugins, то лучше сразу вести разработку под svn или на крайний случай сделать это перед его публикацией туда, сначала экспортнув код из локального репозитория. Конечно, есть обвязки, позволяющие публиковать из git в svn, к примеру, но они не про нас, простых смертных начинающих плагинописателей ;)). Вот, кстати, [интересная притча](http://edward13.livejournal.com/26550.html) (во всех переводах названная почему-то басней), простыми словами рассказывающая о мощи git. + +## Тонкости + +Здесь я попытаюсь рассказать о некоторых подводных камнях, на которые будет частенько находить ваша коса в процессе доведения плагина до ума. Моя, во всяком случае, на них натыкается преизрядно. + +### Хуки и return stop + +Есть тонкая разница между командами `return` и `return stop` — первая не прерывает выполнения хука, если процедура, в которой она встретилась, является его обработчиком. Поясню на примере того же плагина Bldjid. Он разросся, и теперь там есть процедура smart\_enter\_exit\_message, которая обрабатывает хук client\_presence\_hook (который срабатывает, когда кто-нибудь меняет своё состояние либо заходит в комнату). Я по незнанию понаставил в некоторые проверки внутри этой процедуры `return stop` вместо `return`, и в результате при определённых условиях перестал показываться ростер конференции, да и другие странности в работе Ткаббера появились. Дело было как раз в том, что вместо того, чтобы мирно завершить свою работу и отдать бразды правления другим обработчикам, эта процедура обрывала хук, и само собой, никто уже не заполнял ростер группы. + +Сложно дать готовый рецепт на все случаи жизни, но можно посоветовать подходить с осторожностью к использованию `return stop` в обработчиках хуков. В обычных процедурах наоборот, лучше перестраховаться. Я только что попробовал позаменять все стопы на обычные return в теле простых процедур — результат плачевный: команды-то выполняются, но потом их текст выводится в общий чат, что нам совершенно не нужно. + +## Делаем плагин динамически подключаемым + +С появлением в Ткаббере Менеджера плагинов жизнь пользователя стала намного проще. Чтобы подключить нужный плагин, достаточно сделать несколько кликов (**Настройки → Plugins Management → отметить галочкой нужный плагин → сохранить настройку**). Естественно, сам плагин перед этим всё равно должен быть помещён в соответствующее место, но согласитесь, что это значительный шаг вперёд, тем более, что, сняв эту галочку, плагин можно _частично_ из памяти выгрузить. Почему частично? Не буду забегать вперёд, начну по порядку. + +### Добавляем в namespace код для запуска процедур загрузки и выгрузки if {![::plugins::is_registered bldjid]} {  ::plugins::register bldjid \ -namespace [namespace current] \ -source [info script] \ @@ -456,43 +217,33 @@ -loadcommand [namespace code load] \ -unloadcommand [namespace code unload] return } -Помещать его следует в самом начале неймспейса, но _после -строки_ ::msgcat::mcload [file join [file dirname [info script]] msgs], если -таковая у вас имеется, иначе не загрузится локализованный текст пояснительной -строчки. Как видите, тут всё просто. Вам надо только поменять слово bldjid на -название вашего плагина (должно совпадать с именем его каталога). - -#### Создаём эти самые процедуры загрузки и выгрузки - -Если вы взглянете на подобные плагины других авторов, сразу же заметите, что -вышеприведённый код везде одинаков (за исключением имён), а вот процедуры везде -разные. Впрочем, можно выделить общие черты: - -* Почти наверняка ваш плагин использует хуки. _Все_ хуки плагина (не только из - неймспейса, но и из его тела тоже) должны быть собраны в процедуре загрузки. -* Скорее всего у вас есть и парочка глобальных переменных. Их тоже имеет смысл - засунуть сюда. -* Если плагин использует сочетания клавиш (как, например, Ctrl-m в Bldjid для - показа/скрытия монитора), их тоже стоит перенести сюда. -* Редко, но иногда может понадобиться выполнить какие-то действия. Смотрите - пример чуть ниже. - -##### Процедура загрузки - -Рассмотрим разбираемый в этой статье плагин Bldjid: +Помещать его следует в самом начале неймспейса, но _после строки_ ::msgcat::mcload [file join [file dirname [info script]] msgs], если таковая у вас имеется, иначе не загрузится локализованный текст пояснительной строчки. Как видите, тут всё просто. Вам надо только поменять слово bldjid на название вашего плагина (должно совпадать с именем его каталога). + +### Создаём эти самые процедуры загрузки и выгрузки + +Если вы взглянете на подобные плагины других авторов, сразу же заметите, что вышеприведённый код везде одинаков (за исключением имён), а вот процедуры везде разные. Впрочем, можно выделить общие черты: + +* Почти наверняка ваш плагин использует хуки. _Все_ хуки плагина (не только из неймспейса, но и из его тела тоже) должны быть собраны в процедуре загрузки. +* Скорее всего у вас есть и парочка глобальных переменных. Их тоже имеет смысл засунуть сюда. +* Если плагин использует сочетания клавиш (как, например, Ctrl-m в Bldjid для показа/скрытия монитора), их тоже стоит перенести сюда. +* Редко, но иногда может понадобиться выполнить какие-то действия. Смотрите пример чуть ниже. + +#### Процедура загрузки + +Рассмотрим разбираемый в этой статье плагин Bldjid: proc bldjid::load {} { # A variable where the last query result is stored. variable user_list # An array where all user entrances are stored. global jids_by_chats variable ent_cntr 1 event add <> - + hook::add generate_completions_hook \ [namespace current]::visitors_compls hook::add chat_send_message_hook \ [namespace current]::handle_commands 17  ::hook::add open_chat_post_hook [namespace current]::setup_bindings @@ -500,268 +251,163 @@ [namespace current]::smart_enter_exit_message 69 hook::add room_nickname_changed_hook \ [namespace current]::smart_enter_exit_message 51 } -* Как видите, здесь присутствуют все три упомянутых элемента: и хуки, и - переменные, и привязка сочетания клавиш к событию. - - ![(!)](../images/Hammer.png) **Сделать:** Пояснить, как всё это работает - (надо мало-мало разобраться в этом самому). - - Какие именно переменные - переносить сюда — решать вам. Имеет смысл переносить глобальные (которые - объявлены с помощью global и variable). Также можно грузить здесь - переменные, находящиеся в процедуре объявления неймспейса, установленные - командой set (чтобы потом при выгрузке прибить их командой unset, которую мы - увидим ниже): - - set verbosity [list min [::msgcat::mc "Minimum:\ - Log each entrance or nick change of a unique pair nick/jid only once per room\ - (less memory used)."]\ - max [::msgcat::mc "Maximum: All entrances of each user will be logged."]] - - set matching_rules [list \ - exact [::msgcat::mc "Exact match."]\ - loose [::msgcat::mc "Loose match."]] - -* В моём плагине нет действий, которые имеет смысл делать во время процедуры - загрузки, но такое дело есть в плагине attline, откуда я привожу следующий - кусочек кода, идущий после объявления хуков: - - foreach chatid [chat::opened] { - setup_chat_win $chatid "" - } - -##### Теперь о процедуре выгрузки +* Как видите, здесь присутствуют все три упомянутых элемента: и хуки, и переменные, и привязка сочетания клавиш к событию. ![(!)](../images/Hammer.png) **Сделать:** Пояснить, как всё это работает (надо мало-мало разобраться в этом самому). Какие именно переменные переносить сюда — решать вам. Имеет смысл переносить глобальные (которые объявлены с помощью global и variable). Также можно грузить здесь переменные, находящиеся в процедуре объявления неймспейса, установленные командой set (чтобы потом при выгрузке прибить их командой unset, которую мы увидим ниже): + + set verbosity [list min [::msgcat::mc "Minimum:\ + Log each entrance or nick change of a unique pair nick/jid only once per room\ + (less memory used)."]\ + max [::msgcat::mc "Maximum: All entrances of each user will be logged."]] + + set matching_rules [list \ + exact [::msgcat::mc "Exact match."]\ + loose [::msgcat::mc "Loose match."]] + +* В моём плагине нет действий, которые имеет смысл делать во время процедуры загрузки, но такое дело есть в плагине attline, откуда я привожу следующий кусочек кода, идущий после объявления хуков: + + foreach chatid [chat::opened] { + setup_chat_win $chatid "" + } + +#### Теперь о процедуре выгрузки proc bldjid::unload {} { variable user_list global jids_by_chats variable ent_cntr event delete <> - + hook::remove generate_completions_hook \ [namespace current]::visitors_compls hook::remove chat_send_message_hook \ [namespace current]::handle_commands 17  ::hook::remove open_chat_post_hook [namespace current]::setup_bindings hook::remove client_presence_hook \ [namespace current]::smart_enter_exit_message 69 hook::remove room_nickname_changed_hook \ [namespace current]::smart_enter_exit_message 51 - + catch {unset ent_cntr} catch {unset user_list} catch {unset jids_by_chats} - + foreach chatid [chat::opened] { clear_monitor $chatid set ccw [::chat::winid $chatid] if {![catch {pack info $ccw.mon} res]} { pack forget $ccw.mon $ccw.vsb } } } -* В её начале, как и в начале любой процедуры, снова объявляются глобальные - переменные. Нам их надо потом будет прибить, и если мы их не объявим, они - _не будут удалены командой unset,_ хотя и ошибки никакой не выскочит — - можете сами в этом убедиться, закомментировав объявление variable ent\_cntr - и запустив Ткаббер. Убедитесь, что плагин включен, зайдите в какую-нибудь - населённую комнату, откройте консоль Ткаббера и наберите в ней `puts - $plugins::bldjid::ent_cntr` — вы увидите число участников, увеличенное на - единицу. Теперь выгрузите плагин с помощью Менеджера и снова проверьте - состояние переменной. Она содержит всё то же число. Если бы она была - объявлена, вы получили бы сообщение об ошибке, что этой переменной не - существует (что означало бы, что она стёрта из памяти). Я расписываю это так - подробно потому, что не так давно в конференции как раз задавались вопросы - на тему "зачем объявлять переменные, если мы сейчас их убьём". - * Удаление некоторых переменных, возможно, большого выигрыша не даст - (кроме, разве что, морального удовлетворения), но, например, переменная - jids\_by\_chats при параноидальных настройках за несколько дней сидения в - людных комнатах может изрядно распухнуть. - -* Затем я поместил удаление привязки горячих клавиш к событию (в данном - примере: копируем строчку `event add <> ` из - процедуры загрузки и меняем add на delete). -* Далее идёт удаление хуков. Копируем хуки из процедуры load и заменяем add на - remove. -* После этого идёт удаление переменных, на всякий случай обёрнутое в catch {} -* И в самом конце я делаю последнюю проверку на случай, если в какой-то - конференции осталось открытым окошко монитора (его надо закрыть программно, - ведь сочетание клавиш мы отключаем, и если где-нибудь останется болтаться - окошко монитора, пользователь хороших слов о вас не подумает). Для этой - проверки у нас есть цикл foreach, в котором мы сначала принудительно чистим - окошки монитора (некоторые могут быть закрытыми, но содержать текст), а - затем смотрим, есть ли открытый монитор, и если да — закрываем его. - Финальные действия могут быть и сложнее. Например, в игровых плагинах - процедура выгрузки закрывает окно с партией игры, если оно было открыто, и - прибивает все загруженные в память элементы доски (всю графику) и делает - много других подобных вещей. - -Естественно, вам лучше знать, что ваш плагин делает и что нет. Соответственно, -в зависимости от его сложности могут упроститься или усложниться процедуры -загрузки и выгрузки. - -#### Возможна ли полная выгрузка плагина из памяти? - -На сегодняшний день выгрузка плагина из памяти ограничена лишь хуками, -переменными и событиями, о чём я уже написал. Однако в памяти остаётся ещё -немало: - -* Настройки плагина (выключите какой-нибудь в Менеджере плагинов и сходите в - раздел Plugins — его настройки продолжают болтаться там! -* Код плагина (если разработчик позаботился и запихал всё в свой неймспейс, - задача его удаления переводится из разряда невозможных в разряд - трудновыполнимых). -* На диске могут остаться временные файлы. -* Прочие ресурсы, созданные кодом во время выполнения (а не определённые - статически в тексте плагина). - -Из беседы с разработчиками мне удалось узнать следующее (цитирую): - -* _По-моему, выгрузка есть полное изничтожение плагина, включая `namespace - delete ::plugins::pluginname`._ -* _Переменные в настройках регистрируются через `custom::defvar` — Ткаббер же - не святым духом про них узнаёт._ -* _Прибить настройки, наверное, можно, если есть - `custom::противоположное_defvar` :)_ -* _Тебе ничего не мешает убить свой неймспейс (как автору плагина), но грох - неймспейса с живыми переменными кастомайза в нём может дать интересный - эффект._ -* _Вообще, плагин должен знать, что он наделал, и уметь отнаделывать это - обратно. Это ж стандартно. Например, плагин receipts создаёт несколько - картинок (из файлов) и лепит их в окна. При выгрузке логично чтобы он - сначала удалял свои картинки из всех чатов, а потом грохал их._ - -Так что если обозначить планы для дальнейших исследований, их можно свести к -четырём рекомендациям: - -1. Изучить механизм `custom::defvar` и попробовать написать - `custom::противоположное_defvar`. -1. Если заниматься этим ломает, можно попробовать провести эксперимент: сделать - `namespace delete ::plugins::pluginname` при живых переменных кастомайза и - посмотреть, что получится; при этом подразумевается, что весь код плагина - упрятан в его неймспейс; -1. Если плагин создавал какие-то свои временные файлы на диске, не забывать - удалять их при выгрузке (не путайте это с логами, которые создаются для - пользователя! если ему надо будет их убить, он убьёт их сам). -1. Не забывать про открытые окна и прочие ресурсы, создаваемые плагином — я уже - показал, как делается проверка на предмет забытых окошек монитора; кроме того, - вы можете изучить процедуры выгрузки игровых плагинов: chess, reversi и т. д. — - если выключить плагин, когда открыта партия, её окно закроется (сначала плагин - удаляет из памяти всю свою графику, как об этом уже было сказано выше). - -Наверняка я, реализуя выгрузку из памяти своего плагина, что-то не учёл, о -чём-то позабыл и что-то сделал неправильно. Поэтому имеет смысл придумать -универсальный механизм, позволяющий полностью удалять плагин из памяти, не -заботясь о каждой мелочи. Возможно, когда-нибудь он будет реализован, но пока -это не сделано, заботиться об этом нужно автору плагина. - -Вот, собственно, и всё. Если у меня появятся результаты исследований описанных -выше проблем, я непременно их здесь выложу. Призываю сделать то же самое и вас. - -### Не бойтесь задавать вопросы - -Один вопрос специалисту сэкономил мне несколько часов напрасной работы. Камрад -[**kostix**](Участник_Kostix.md) подсказал мне простое решение проблемы, как -узнать, в какой комнате я админю. А ещё через минуту и процедурку сваял: +* В её начале, как и в начале любой процедуры, снова объявляются глобальные переменные. Нам их надо потом будет прибить, и если мы их не объявим, они _не будут удалены командой unset,_ хотя и ошибки никакой не выскочит — можете сами в этом убедиться, закомментировав объявление variable ent\_cntr и запустив Ткаббер. Убедитесь, что плагин включен, зайдите в какую-нибудь населённую комнату, откройте консоль Ткаббера и наберите в ней `puts $plugins::bldjid::ent_cntr` — вы увидите число участников, увеличенное на единицу. Теперь выгрузите плагин с помощью Менеджера и снова проверьте состояние переменной. Она содержит всё то же число. Если бы она была объявлена, вы получили бы сообщение об ошибке, что этой переменной не существует (что означало бы, что она стёрта из памяти). Я расписываю это так подробно потому, что не так давно в конференции как раз задавались вопросы на тему "зачем объявлять переменные, если мы сейчас их убьём". + * Удаление некоторых переменных, возможно, большого выигрыша не даст (кроме, разве что, морального удовлетворения), но, например, переменная jids\_by\_chats при параноидальных настройках за несколько дней сидения в людных комнатах может изрядно распухнуть. + +* Затем я поместил удаление привязки горячих клавиш к событию (в данном примере: копируем строчку `event add <> ` из процедуры загрузки и меняем add на delete). +* Далее идёт удаление хуков. Копируем хуки из процедуры load и заменяем add на remove. +* После этого идёт удаление переменных, на всякий случай обёрнутое в catch {} +* И в самом конце я делаю последнюю проверку на случай, если в какой-то конференции осталось открытым окошко монитора (его надо закрыть программно, ведь сочетание клавиш мы отключаем, и если где-нибудь останется болтаться окошко монитора, пользователь хороших слов о вас не подумает). Для этой проверки у нас есть цикл foreach, в котором мы сначала принудительно чистим окошки монитора (некоторые могут быть закрытыми, но содержать текст), а затем смотрим, есть ли открытый монитор, и если да — закрываем его. Финальные действия могут быть и сложнее. Например, в игровых плагинах процедура выгрузки закрывает окно с партией игры, если оно было открыто, и прибивает все загруженные в память элементы доски (всю графику) и делает много других подобных вещей. + +Естественно, вам лучше знать, что ваш плагин делает и что нет. Соответственно, в зависимости от его сложности могут упроститься или усложниться процедуры загрузки и выгрузки. + +### Возможна ли полная выгрузка плагина из памяти? + +На сегодняшний день выгрузка плагина из памяти ограничена лишь хуками, переменными и событиями, о чём я уже написал. Однако в памяти остаётся ещё немало: + +* Настройки плагина (выключите какой-нибудь в Менеджере плагинов и сходите в раздел Plugins — его настройки продолжают болтаться там! +* Код плагина (если разработчик позаботился и запихал всё в свой неймспейс, задача его удаления переводится из разряда невозможных в разряд трудновыполнимых). +* На диске могут остаться временные файлы. +* Прочие ресурсы, созданные кодом во время выполнения (а не определённые статически в тексте плагина). + +Из беседы с разработчиками мне удалось узнать следующее (цитирую): +_ +* По-моему, выгрузка есть полное изничтожение плагина, включая `namespace delete ::plugins::pluginname`. +* Переменные в настройках регистрируются через `custom::defvar` — Ткаббер же не святым духом про них узнаёт. +* Прибить настройки, наверное, можно, если есть `custom::противоположное_defvar` :) +* Тебе ничего не мешает убить свой неймспейс (как автору плагина), но грох неймспейса с живыми переменными кастомайза в нём может дать интересный эффект. +* Вообще, плагин должен знать, что он наделал, и уметь отнаделывать это обратно. Это ж стандартно. Например, плагин receipts создаёт несколько картинок (из файлов) и лепит их в окна. При выгрузке логично чтобы он сначала удалял свои картинки из всех чатов, а потом грохал их. + _ +Так что если обозначить планы для дальнейших исследований, их можно свести к четырём рекомендациям: + +1. Изучить механизм `custom::defvar` и попробовать написать `custom::противоположное_defvar`. +1. Если заниматься этим ломает, можно попробовать провести эксперимент: сделать `namespace delete ::plugins::pluginname` при живых переменных кастомайза и посмотреть, что получится; при этом подразумевается, что весь код плагина упрятан в его неймспейс; +1. Если плагин создавал какие-то свои временные файлы на диске, не забывать удалять их при выгрузке (не путайте это с логами, которые создаются для пользователя! если ему надо будет их убить, он убьёт их сам). +1. Не забывать про открытые окна и прочие ресурсы, создаваемые плагином — я уже показал, как делается проверка на предмет забытых окошек монитора; кроме того, вы можете изучить процедуры выгрузки игровых плагинов: chess, reversi и т. д. — если выключить плагин, когда открыта партия, её окно закроется (сначала плагин удаляет из памяти всю свою графику, как об этом уже было сказано выше). + +Наверняка я, реализуя выгрузку из памяти своего плагина, что-то не учёл, о чём-то позабыл и что-то сделал неправильно. Поэтому имеет смысл придумать универсальный механизм, позволяющий полностью удалять плагин из памяти, не заботясь о каждой мелочи. Возможно, когда-нибудь он будет реализован, но пока это не сделано, заботиться об этом нужно автору плагина. + +Вот, собственно, и всё. Если у меня появятся результаты исследований описанных выше проблем, я непременно их здесь выложу. Призываю сделать то же самое и вас. + +## Не бойтесь задавать вопросы + +Один вопрос специалисту сэкономил мне несколько часов напрасной работы. Камрад [kostix](Участник_Kostix.md) подсказал мне простое решение проблемы, как узнать, в какой комнате я админю. А ещё через минуту и процедурку сваял: proc whoami {xlib where} { set chatid [chat::chatid $xlib $where] set jid $where/[get_our_groupchat_nick $chatid] list $muc::users(role,$xlib,$jid) $muc::users(affiliation,$xlib,$jid) } -Конечно, задавая вопросы, следует помнить о простых правилах, изложенных в -[**этой статье**](Остров_посланных_на....md). На всякий случай напомню основные: - -* Попробуйте решить проблему самостоятельно и в вопросе изложите шаги, вами - предпринятые. Потенциальный помощник это оценит. -* Спешка нужна лишь при ловле блох. Это ведь не горящий проект, так? Да если и - горящий, кому до этого какое дело? У всех свои заботы — кризис на дворе. От - этого плагина не зависит судьба человечества? (Если зависит, какого чёрта вы - сами столько с ним тянули?) Так что если вам не отвечают сразу, наберитесь - терпения. -* В комментариях к коду не забудьте выразить благодарность этому человеку. - Если он, помогая вам, написал половину или даже хотя бы треть плагина, - можете смело включать его в соавторы. - -## Общие сведения о репозитории - -Для разработки неофициальных проектов, имеющих отношение к Ткабберу (и в том -числе — плагинов), был создан специальный репозиторий -[Subversion](http://subversion.tigris.org): +Конечно, задавая вопросы, следует помнить о простых правилах, изложенных в [этой статье](Остров_посланных_на....md). На всякий случай напомню основные: + +* Попробуйте решить проблему самостоятельно и в вопросе изложите шаги, вами предпринятые. Потенциальный помощник это оценит. +* Спешка нужна лишь при ловле блох. Это ведь не горящий проект, так? Да если и горящий, кому до этого какое дело? У всех свои заботы — кризис на дворе. От этого плагина не зависит судьба человечества? (Если зависит, какого чёрта вы сами столько с ним тянули?) Так что если вам не отвечают сразу, наберитесь терпения. +* В комментариях к коду не забудьте выразить благодарность этому человеку. Если он, помогая вам, написал половину или даже хотя бы треть плагина, можете смело включать его в соавторы. + +# Общие сведения о репозитории +Для разработки неофициальных проектов, имеющих отношение к Ткабберу (и в том числе — плагинов), был создан специальный репозиторий [Subversion](http://subversion.tigris.org): svn.xmpp.ru/repos/tkabber-3rd-party/ -то есть он расположен "рядом" с официальным репозиторием Ткаббера и -поддерживает такие же две схемы доступа: **http** и **https**. +то есть он расположен "рядом" с официальным репозиторием Ткаббера и поддерживает такие же две схемы доступа: **http** и **https**. -Основная структура репозитория на данный момент такова: +Основная структура репозитория на данный момент такова: svn.xmpp.ru/repos/tkabber-3rd-party/ trunk/ plugins/ tags/ branches/ -то есть предполагается, что плагины будут складываться в +то есть предполагается, что плагины будут складываться в svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins -а их "ветки" делаться где-то под +а их "ветки" делаться где-то под svn.xmpp.ru/repos/tkabber-3rd-party/branches/ -Формат веток, в принципе, не важен. Например, юзер vasya может делать ветки в +Формат веток, в принципе, не важен. Например, юзер vasya может делать ветки в svn.xmpp.ru/repos/tkabber-3rd-party/branches/vasya/mycoolplugin/testing-stuff -а может — в +а может — в svn.xmpp.ru/repos/tkabber-3rd-party/branches/plugins/mycoolplugin/testing-other-stuff -Можно и весь "куст" под **trunk'**ом копировать под **branches** — -[ветки в Subversion дёшевы](http://svnbook.red-bean.com/en/1.2/svn.branchmerge.using.html#svn.branchmerge.using.create) -и не зависят от формального объёма копируемой части дерева. +Можно и весь "куст" под **trunk'**ом копировать под **branches** — [ветки в Subversion дёшевы](http://svnbook.red-bean.com/en/1.2/svn.branchmerge.using.html#svn.branchmerge.using.create) и не зависят от формального объёма копируемой части дерева. -Идея состоит в том, чтобы _не_ иметь "побочных" каталогов в каталогах с -плагинами. Это позволит любому пользователю выполнить +Идея состоит в том, чтобы _не_ иметь "побочных" каталогов в каталогах с плагинами. Это позволит любому пользователю выполнить svn co https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins . -и получить себе полный набор "готовых к употреблению" плагинов. - -## Как получить доступ к репозиторию - -1. Заиметь некий готовый код или хотя бы внятную идею, которые можно будет - предъявить в качестве доказательства стремления быть допущеным к репозиторию; -1. Связаться с [**Kostix**](Участник_Kostix.md); -1. Выбрать себе имя пользователя и пароль. Пароль можно сообщить "открытым - текстом" (как есть) или сгенерировать на нём "хэш для htpasswd". Сие делается - либо при помощи программы **htpasswd** из комплекта Web-сервера - [Apache](http://www.apache.org) путём запуска её в виде - - htpasswd -n USERNAME - - или при помощи - [этой Web-формы](http://tkabber.jabber.ru/files/tkabber-contribs/htpasswd.php); -1. Подождать, пока вас не допустят к телу репозитория, о чём -[**Kostix**](Участник_Kostix.md) вам сообщит; -1. Сделать, к примеру, - - svn --username myusername mkdir https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/myplugin - - и убедиться в том, что репозиторий позволил вам сделать изменение в нём, то - есть аккаунт создан правильно. - -## В заключение - -Вышенаписанное руководство никоим образом не претендует на полноту изложения и, -скорее всего, упускает массу нюансов, а то и важных моментов. Впрочем, цель его -не в том, чтобы на примере первого-в-жизни-плагина научить вас программировать, -а в том, чтобы как раз на его примере показать, что написание своего плагина по -плечу даже новичку. - -Удачи вам! И ничего не бойтесь :) +и получить себе полный набор "готовых к употреблению" плагинов. + +# Как получить доступ к репозиторию +1. Заиметь некий готовый код или хотя бы внятную идею, которые можно будет предъявить в качестве доказательства стремления быть допущеным к репозиторию; +1. Связаться с [Kostix](Участник_Kostix.md); +1. Выбрать себе имя пользователя и пароль. Пароль можно сообщить "открытым текстом" (как есть) или сгенерировать на нём "хэш для htpasswd". Сие делается либо при помощи программы **htpasswd** из комплекта Web-сервера [Apache](http://www.apache.org) путём запуска её в виде + htpasswd -n USERNAME + или при помощи [этой Web-формы](http://tkabber.jabber.ru/files/tkabber-contribs/htpasswd.php); +1. Подождать, пока вас не допустят к телу репозитория, о чём [Kostix](Участник_Kostix.md) вам сообщит; +1. Сделать, к примеру, + svn --username myusername mkdir https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/myplugin + и убедиться в том, что репозиторий позволил вам сделать изменение в нём, то есть аккаунт создан правильно. + +# В заключение +Вышенаписанное руководство никоим образом не претендует на полноту изложения и, скорее всего, упускает массу нюансов, а то и важных моментов. Впрочем, цель его не в том, чтобы на примере первого-в-жизни-плагина научить вас программировать, а в том, чтобы как раз на его примере показать, что написание своего плагина по плечу даже новичку. + +Удачи вам! И ничего не бойтесь :) + + Index: wiki/ru/Служебная/Все_страницы.md ================================================================== --- wiki/ru/Служебная/Все_страницы.md +++ wiki/ru/Служебная/Все_страницы.md @@ -4,105 +4,105 @@ ## Все страницы * [$::configdir](../$__configdir.md) (11 ссылок) * [0.10.x/Шрифты](../0.10.x/Шрифты.md) (3 ссылки) -* [0.9.x/ЧаВо](../0.9.x/ЧаВо.md) (4 ссылки) +* [0.9.x/ЧаВо](../0.9.x/ЧаВо.md) (5 ссылок) * [0.9.x/Эмоциконки](../0.9.x/Эмоциконки.md) (4 ссылки) * [Config.tcl](../Config.tcl.md) (17 ссылок) * [Config.tcl для начинающих](../Config.tcl_для_начинающих.md) (14 ссылок) -* [Config dir](../Config_dir.md) (8 ссылок) +* [Config dir](../Config_dir.md) (9 ссылок) * [Google Talk](../Google_Talk.md) (5 ссылок) -* [Low traffic HOWTO](../Low_traffic_HOWTO.md) (12 ссылок, 1 со страниц на других языках) +* [Low traffic HOWTO](../Low_traffic_HOWTO.md) (14 ссылок) * [MUC Ignore](../MUC_Ignore.md) (7 ссылок) * [Nick coloring](../Nick_coloring.md) (5 ссылок) -* [Pages](../Pages.md) (2 ссылки) * [Plugins/Alarm/Changelog](../Plugins/Alarm/Changelog.md) (2 ссылки) * [Plugins/Traffic/Changelog](../Plugins/Traffic/Changelog.md) (2 ссылки) +* [Redirects](../Redirects.md) (2 ссылки) * [SVN disclaimer](../SVN_disclaimer.md) (7 ссылок) * [Sandbox](../Sandbox.md) (4 ссылки) * [Symlinks](../Symlinks.md) (4 ссылки) * [Testimonials, Antimonials, And Eternal Questions](../Testimonials__Antimonials__And_Eternal_Questions.md) (2 ссылки) -* [Tk Windows keysyms bug explained](../Tk_Windows_keysyms_bug_explained.md) (2 ссылки) +* [Tk Windows keysyms bug explained](../Tk_Windows_keysyms_bug_explained.md) (3 ссылки) * [Tkabber](../Tkabber.md) (4 ссылки) * [Tkabber Wiki:Справка](../Tkabber_Wiki_Справка.md) (5 ссылок) -* [Tkabber Windows Mini HOWTO](../Tkabber_Windows_Mini_HOWTO.md) (6 ссылок, 1 со страниц на других языках) -* [Tkabber starpack](../Tkabber_starpack.md) (8 ссылок) +* [Tkabber Windows Mini HOWTO](../Tkabber_Windows_Mini_HOWTO.md) (5 ссылок) +* [Tkabber starpack](../Tkabber_starpack.md) (9 ссылок) * [Tkinactive](../Tkinactive.md) (2 ссылки) -* [Wish и русская раскладка в Windows](../Wish_и_русская_раскладка_в_Windows.md) (6 ссылок) +* [Wish и русская раскладка в Windows](../Wish_и_русская_раскладка_в_Windows.md) (7 ссылок) * [XRDB](../XRDB.md) (22 ссылки) -* [База данных опций Tk](../База_данных_опций_Tk.md) (19 ссылок) +* [База данных опций Tk](../База_данных_опций_Tk.md) (22 ссылки) * [Блокировка MRIM-спама](../Блокировка_MRIM-спама.md) (7 ссылок) -* [Гейты во вражеские сети](../Гейты_во_вражеские_сети.md) (4 ссылки) -* [Дистрибутивы, которые мы выбираем](../Дистрибутивы__которые_мы_выбираем.md) (15 ссылок, 1 со страниц на других языках) +* [Быстрая настройка шрифтов](../Быстрая_настройка_шрифтов.md) (2 ссылки) +* [Гейты во вражеские сети](../Гейты_во_вражеские_сети.md) (5 ссылок) +* [Дистрибутивы, которые мы выбираем](../Дистрибутивы__которые_мы_выбираем.md) (17 ссылок) * [Заглавная страница](../Заглавная_страница.md) (4 ссылки, 1 со страниц на других языках) * [Загрузка настроек](../Загрузка_настроек.md) (8 ссылок) * [Звуковые схемы](../Звуковые_схемы.md) (5 ссылок) * [История вики](../История_вики.md) (3 ссылки, 1 со страниц на других языках) * [История разговоров](../История_разговоров.md) (2 ссылки) -* [Команды](../Команды.md) (1 ссылка) +* [Команды](../Команды.md) (24 ссылки) * [Культ личности Ткаббера](../Культ_личности_Ткаббера.md) (3 ссылки) * [Между офлайном и онлайном](../Между_офлайном_и_онлайном.md) (11 ссылок) * [Настроения](../Настроения.md) (1 ссылка) * [Настройка Ткаббера: азы и глубже](../Настройка_Ткаббера__азы_и_глубже.md) (11 ссылок) -* [Настройки](../Настройки.md) (3 ссылки) -* [Начинающим](../Начинающим.md) (13 ссылок, 1 со страниц на других языках) -* [Нетривиальные настройки](../Нетривиальные_настройки.md) (28 ссылок, 1 со страниц на других языках) +* [Настройки](../Настройки.md) (7 ссылок) +* [Начинающим](../Начинающим.md) (12 ссылок) +* [Нетривиальные настройки](../Нетривиальные_настройки.md) (29 ссылок) * [Новый вид Tk в 8.5](../Новый_вид_Tk_в_8.5.md) (4 ссылки) * [Особенности реализации](../Особенности_реализации.md) (6 ссылок) -* [Остров посланных на...](../Остров_посланных_на....md) (5 ссылок) -* [Палитра цветов](../Палитра_цветов.md) (3 ссылки) -* [Патчи](../Патчи.md) (21 ссылка, 2 со страниц на других языках) -* [Пересылка файлов: теория](../Пересылка_файлов__теория.md) (10 ссылок, 2 со страниц на других языках) -* [Плагины](../Плагины.md) (57 ссылок, 3 со страниц на других языках) +* [Остров посланных на...](../Остров_посланных_на....md) (4 ссылки) +* [Палитра цветов](../Палитра_цветов.md) (4 ссылки) +* [Патчи](../Патчи.md) (20 ссылок, 1 со страниц на других языках) +* [Пересылка файлов: теория](../Пересылка_файлов__теория.md) (9 ссылок) +* [Плагины](../Плагины.md) (56 ссылок) * [Плагины/AntiSPIM](../Плагины/AntiSPIM.md) (4 ссылки) * [Плагины/Juick](../Плагины/Juick.md) (4 ссылки) * [Планы на будущее](../Планы_на_будущее.md) (10 ссылок, 1 со страниц на других языках) -* [Практика](../Практика.md) (4 ссылки) -* [Проблемы X Window и TTF](../Проблемы_X_Window_и_TTF.md) (4 ссылки, 1 со страниц на других языках) -* [Проблемы со звуком](../Проблемы_со_звуком.md) (12 ссылок, 2 со страниц на других языках) +* [Практика](../Практика.md) (6 ссылок) +* [Проблемы X Window и TTF](../Проблемы_X_Window_и_TTF.md) (3 ссылки) +* [Проблемы со звуком](../Проблемы_со_звуком.md) (10 ссылок) * [Проверка сертификата сервера](../Проверка_сертификата_сервера.md) (5 ссылок) -* [Разработка](../Разработка.md) (4 ссылки) -* [Разработка плагинов](../Разработка_плагинов.md) (3 ссылки) -* [Служебная/Все страницы](../Служебная/Все_страницы.md) (2 ссылки) -* [Служебная/Отсутствующие ссылки](../Служебная/Отсутствующие_ссылки.md) (1 ссылка) -* [Смайлики и аватары](../Смайлики_и_аватары.md) (13 ссылок, 1 со страниц на других языках) +* [Разработка](../Разработка.md) (6 ссылок) +* [Разработка плагинов](../Разработка_плагинов.md) (4 ссылки) +* [Служебная/Все страницы](../Служебная/Все_страницы.md) (1 ссылка) +* [Служебная/Отсутствующие ссылки](../Служебная/Отсутствующие_ссылки.md) (**0** ссылок) +* [Смайлики и аватары](../Смайлики_и_аватары.md) (12 ссылок) * [Спамодавка списками приватности](../Спамодавка_списками_приватности.md) (5 ссылок) * [Сравнение XMPP-клиентов](../Сравнение_XMPP-клиентов.md) (2 ссылки) * [Ссылки](../Ссылки.md) (6 ссылок) -* [Старпак и сжатие](../Старпак_и_сжатие.md) (4 ссылки) +* [Старпак и сжатие](../Старпак_и_сжатие.md) (3 ссылки) * [ТЗ по управлению через параметры командной строки](../ТЗ_по_управлению_через_параметры_командной_строки.md) (5 ссылок) -* [Теория](../Теория.md) (7 ссылок) -* [Терминология](../Терминология.md) (16 ссылок) +* [Теория](../Теория.md) (11 ссылок) +* [Терминология](../Терминология.md) (17 ссылок) * [Тестирование TLS](../Тестирование_TLS.md) (1 ссылка) * [Ткаббер - чемпион?](../Ткаббер_-_чемпион_.md) (6 ссылок) * [Ткаббер ЧаВо](../Ткаббер_ЧаВо.md) (35 ссылок) * [Ткаббер ЧаВо/Внешний вид и звук](../Ткаббер_ЧаВо/Внешний_вид_и_звук.md) (16 ссылок) -* [Ткаббер ЧаВо/Глюки](../Ткаббер_ЧаВо/Глюки.md) (44 ссылки) -* [Ткаббер ЧаВо/Как мне...?](../Ткаббер_ЧаВо/Как_мне..._.md) (46 ссылок) +* [Ткаббер ЧаВо/Глюки](../Ткаббер_ЧаВо/Глюки.md) (45 ссылок) +* [Ткаббер ЧаВо/Как мне...?](../Ткаббер_ЧаВо/Как_мне..._.md) (48 ссылок) * [Ткаббер ЧаВо/Разное](../Ткаббер_ЧаВо/Разное.md) (25 ссылок) -* [Ткаббер и DNS](../Ткаббер_и_DNS.md) (5 ссылок) +* [Ткаббер и DNS](../Ткаббер_и_DNS.md) (6 ссылок) * [Ткаббер на КПК](../Ткаббер_на_КПК.md) (4 ссылки) * [Ткаббер наизнанку](../Ткаббер_наизнанку.md) (4 ссылки) * [Токены](../Токены.md) (3 ссылки) -* [Удалённое управление с помощью send](../Удалённое_управление_с_помощью_send.md) (10 ссылок, 2 со страниц на других языках) +* [Удалённое управление с помощью send](../Удалённое_управление_с_помощью_send.md) (8 ссылок) * [Установка tklib в *nix](../Установка_tklib_в__nix.md) (2 ссылки) -* [Установка и настройка в Ubuntu](../Установка_и_настройка_в_Ubuntu.md) (2 ссылки) * [Участник:ART](../Участник_ART.md) (8 ссылок) * [Участник:Archimed](../Участник_Archimed.md) (12 ссылок) -* [Участник:Bigote](../Участник_Bigote.md) (37 ссылок, 3 со страниц на других языках) +* [Участник:Bigote](../Участник_Bigote.md) (35 ссылок) * [Участник:Brennende](../Участник_Brennende.md) (4 ссылки) * [Участник:EXire](../Участник_EXire.md) (19 ссылок) -* [Участник:Feez](../Участник_Feez.md) (13 ссылок, 2 со страниц на других языках) -* [Участник:Gebb](../Участник_Gebb.md) (8 ссылок) +* [Участник:Feez](../Участник_Feez.md) (11 ссылок) +* [Участник:Gebb](../Участник_Gebb.md) (10 ссылок) * [Участник:Gman](../Участник_Gman.md) (2 ссылки) -* [Участник:Kostix](../Участник_Kostix.md) (97 ссылок, 7 со страниц на других языках) -* [Участник:Lknight](../Участник_Lknight.md) (18 ссылок, 5 со страниц на других языках) +* [Участник:Kostix](../Участник_Kostix.md) (97 ссылок, 3 со страниц на других языках) +* [Участник:Lknight](../Участник_Lknight.md) (13 ссылок) * [Участник:Mellon](../Участник_Mellon.md) (3 ссылки) -* [Участник:Teo](../Участник_Teo.md) (23 ссылки) -* [Файл конфигурации](../Файл_конфигурации.md) (9 ссылок, 1 со страниц на других языках) +* [Участник:Teo](../Участник_Teo.md) (22 ссылки) +* [Файл конфигурации](../Файл_конфигурации.md) (8 ссылок) * [Формат логов 0.10.0](../Формат_логов_0.10.0.md) (1 ссылка) * [Цветовые темы и пиктограммы](../Цветовые_темы_и_пиктограммы.md) (8 ссылок) * [Чебуратор](../Чебуратор.md) (4 ссылки) -* [Шифрование в Ткаббере](../Шифрование_в_Ткаббере.md) (10 ссылок, 1 со страниц на других языках) -* [Шрифты](../Шрифты.md) (11 ссылок) +* [Шифрование в Ткаббере](../Шифрование_в_Ткаббере.md) (9 ссылок) +* [Шрифты](../Шрифты.md) (20 ссылок) Index: wiki/ru/Служебная/Отсутствующие_ссылки.md ================================================================== --- wiki/ru/Служебная/Отсутствующие_ссылки.md +++ wiki/ru/Служебная/Отсутствующие_ссылки.md @@ -5,10 +5,15 @@ ## Отсутствующие ссылки #### [0.10.x/Шрифты](../0.10.x/Шрифты.md) * ../../images/Warning.gif +* ../Шрифты.md\#Быстрое\_тестирование\_настроек + +#### [0.9.x/ЧаВо](../0.9.x/ЧаВо.md) + +* ../Low\_traffic\_HOWTO.md\#Старпак\_Ткаббера\_Win32 #### [0.9.x/Эмоциконки](../0.9.x/Эмоциконки.md) * ../../images/36\_10\_20.gif @@ -25,16 +30,55 @@ * ../images/Tkabber-gmail-proxy-conn.png * ../images/Tkabber-gmail-proxy-creds.png * ../images/Tkabber-gmail-proxy-http-polling.png * ../images/Tkabber-gmail-proxy-proxy.png +#### [Low traffic HOWTO](../Low_traffic_HOWTO.md) + +* Проблемы\_со\_звуком.md\#\_В\_старпаке\_старките\_нет\_звука + #### [Nick coloring](../Nick_coloring.md) * Участник\_Hypersw.md + +#### [Redirects](../Redirects.md) + +* Beginners.md +* Color-pics.md +* Dist.md +* Emoticons.md +* Faq-appearance-sound.md +* Faq-glitches.md +* Faq-howto.md +* Faq-misc.md +* Faq.md +* Filetransfer.md +* Fonts.md +* Gates.md +* Gtalk.md +* Login.md +* Mrim-spam.md +* Pages.md +* Patches.md +* Plugins.md +* Remote-control.md +* Sound-themes.md +* Sound.md +* Todo.md +* Topic.md +* Traffic.md +* Tuning.md +* Tweaks.md +* Win-howto.md +* X-ttf.md #### [Sandbox](../Sandbox.md) +* mailto:liam@htmlhelp.com +* mailto:some.user@nowhere.land +* mailto:vasya@gde.to +* news:dejagnu.com * Шаблон\_Button.md * Шаблон\_File.md * Шаблон\_Fixme.md * Шаблон\_Program.md * Шаблон\_Quote.md @@ -43,27 +87,45 @@ * Шаблон\_Warn.md #### [Tkabber Wiki:Справка](../Tkabber_Wiki_Справка.md) * MediaWiki\_Monobook.css.md +* http://tkabber.jabe.ru +* Служебная\_AllPages.md * Служебная\_RecentChanges.md +* Терминология.md\#транк #### [Tkabber starpack](../Tkabber_starpack.md) * ../files/Tkabber\_win32\_starpack\_template.rar +* Tkabber\_starpack.md\#Как\_скачать\_последнюю\_SVN-версию\_Tkabber + +#### [Wish и русская раскладка в Windows](../Wish_и_русская_раскладка_в_Windows.md) + +* Плагины.md\#Postpone\_text #### [Блокировка MRIM-спама](../Блокировка_MRIM-спама.md) * ../images/Mrim-allow-only-contacts.png * ../images/Mrim-lists.png * ../images/Mrim-opts.png + +#### [Быстрая настройка шрифтов](../Быстрая_настройка_шрифтов.md) + +* Установка\_и\_настройка\_в\_Ubuntu.md + +#### [Дистрибутивы, которые мы выбираем](../Дистрибутивы__которые_мы_выбираем.md) + +* Low\_traffic\_HOWTO.md\#Старпак\_Ткаббера\_Win32 #### [Заглавная страница](../Заглавная_страница.md) -* Служебная/Статистика.md -* Служебная/Требуется.md -* Служебная/Участники.md +* Pages.md +* Служебная\_AllPages.md +* Служебная\_ListUsers.md +* Служебная\_Statistics.md +* Служебная\_WantedPages.md #### [Звуковые схемы](../Звуковые_схемы.md) * ../files/3rd-version\_final.zip * ../files/Acoustic.theme\_2nd.version.zip @@ -77,11 +139,16 @@ * ../images/0day-tkabber.png * ../images/180px-Sneg\_01.jpg * ../images/180px-Tkabber-master.jpg * ../images/180px-Tkabber\_jingle.jpg * ../images/Psycho.jpg +* Topic.md * Участник\_Hypersw.md + +#### [Настройки](../Настройки.md) + +* Плагины.md\#customstatus #### [Начинающим](../Начинающим.md) * ../images/116px-Discovery\_conference\_1\_ru.png * ../images/120px-Discovery\_conference\_2\_ru.png @@ -107,10 +174,18 @@ * ../images/Tkabber-Quick-Help.png * ../images/Tkabber-Roster-Tooltip-Subscribed-To.png * ../images/Tkabber-Stoat-headlines-Search.png * ../images/Tkabber-Stoat-headlines-summary.png * ../images/Tkabber-Toolbar.png +* Установка\_и\_настройка\_в\_Ubuntu.md + +#### [Нетривиальные настройки](../Нетривиальные_настройки.md) + +* Патчи.md\#\_Отправка\_сообщений\_по\_нажатию\_Ctrl-Enter +* Плагины.md\#autoanswer +* Плагины.md\#customstatus +* Плагины.md\#unixkeys #### [Остров посланных на...](../Остров_посланных_на....md) * ../images/180px-2faq.gif @@ -124,14 +199,15 @@ * ../files/Chatstatectl.zip * ../files/Highlight.zip * ../files/Iroster.zip * ../files/Muc\_exception\_groups4gen\_enter\_exit\_msgs.zip * ../files/Sound\_patches.tar.gz -* ../files/Spy-rev.1925.zip +* ../files/Spy(rev.1925 * ../files/Spy.zip * ../files/Systray.zip * ../files/Tkabber-MRIM.zip +* Планы\_на\_будущее.md\#Контакты\_онлайн\_-\_отображать\_вверху\_списка * Участник\_Ancestor.md * Участник\_Den\_po.md * Участник\_Jet.md * Участник\_Nicktian.md @@ -168,10 +244,11 @@ * ../files/Tab\_number-0.1.2.tar.gz * ../files/Tkabber-khim.zip * ../files/Vcardavatars.zip * ../files/Wintweaks.zip * ../images/1112349.png +* Плагины/Notes.md * Участник\_Alfix.md * Участник\_Ancestor.md * Участник\_HEKP0MAHT.md * Участник\_Jet.md * Участник\_Kellin.md @@ -183,27 +260,34 @@ * ../Участник\_Totktonada.md #### [Планы на будущее](../Планы_на_будущее.md) +* mailto:timur.davletshin@gmail.com +* Плагины.md\#customstatus * Участник\_Fixer.md * Участник\_Jet.md * Участник\_Zakon.md #### [Проблемы со звуком](../Проблемы_со_звуком.md) * ../files/Snack-lin.kit * ../files/Snack.kit + +#### [Разработка плагинов](../Разработка_плагинов.md) + +* Плагины.md\#urlcmd #### [Смайлики и аватары](../Смайлики_и_аватары.md) * ../files/Emoticons-bombusmod.zip * ../files/Emoticons-tz.zip * ../files/Tkabber\_smiles.zip * ../files/Ultimate\_emoticon\_pack.zip * ../files/Ultimate\_emoticons\_pack.zip * ../images/180px-Teh\_ultimate\_smile.png +* Патчи.md\#Расширенная\_поддержка\_аватаров\_в\_окне\_чата * Участник\_Русский.md #### [ТЗ по управлению через параметры командной строки](../ТЗ_по_управлению_через_параметры_командной_строки.md) * xmpp @@ -251,10 +335,14 @@ #### [Участник:Feez](../Участник_Feez.md) * Служебная\_ListUsers.md * Служебная\_Statistics.md * Служебная\_WantedPages.md + +#### [Участник:Gebb](../Участник_Gebb.md) + +* mailto:ge\_b\_b@ngs.ru?subject=wiki #### [Участник:Kostix](../Участник_Kostix.md) * Служебная\_Contributions/Kostix.md Index: wiki/ru/Смайлики_и_аватары.md ================================================================== --- wiki/ru/Смайлики_и_аватары.md +++ wiki/ru/Смайлики_и_аватары.md @@ -1,333 +1,237 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Смайлики_и_аватары/index.html) + # Смайлики и аватары Материал из Tkabber Wiki ## Содержание * [1 Предупреждение](#Предупреждение) * [2 Смайлики](#Смайлики) - * [2.1 Работа с эмоциконками](#Работа_с_эмоциконками) - * [2.2 Управление эмоциконками](#Управление_эмоциконками) - * [2.3 Готовые комплекты смайликов](#Готовые_комплекты_смайликов) - * [2.3.1 Комплекты анимированных смайликов](#Комплекты_анимированных_смайликов) - * [2.3.2 Комплект emoticons-bombusmod](#Комплект_emoticons-bombusmod) - * [2.3.3 Исправленный набор смайликов "от пуза"](#Исправленный_набор_смайликов_от_пуза) - * [2.3.4 Комплект в стиле "колобки": Big Pack](#Комплект_в_стиле_колобки_Big_Pack) - * [2.3.5 Комплект окончательный](#Комплект_окончательный) - * [2.4 Полное искоренение смайликов](#Полное_искоренение_смайликов) - * [2.5 Клонирование смайликов](#Клонирование_смайликов) - * [2.5.1 Массовое клонирование](#Массовое_клонирование) - * [2.6 Анимированные смайлы](#Анимированные_смайлы) + * [2.1 Работа с эмоциконками](#Работа_с_эмоциконками) + * [2.2 Управление эмоциконками](#Управление_эмоциконками) + * [2.3 Готовые комплекты смайликов](#Готовые_комплекты_смайликов) + * [2.3.1 Комплекты анимированных смайликов](#Комплекты_анимированных_смайликов) + * [2.3.2 Комплект emoticons-bombusmod](#Комплект_emoticons-bombusmod) + * [2.3.3 Исправленный набор смайликов "от пуза"](#Исправленный_набор_смайликов_от_пуза) + * [2.3.4 Комплект в стиле "колобки": Big Pack](#Комплект_в_стиле_колобки_Big_Pack) + * [2.3.5 Комплект окончательный](#Комплект_окончательный) + * [2.4 Полное искоренение смайликов](#Полное_искоренение_смайликов) + * [2.5 Клонирование смайликов](#Клонирование_смайликов) + * [2.5.1 Массовое клонирование](#Массовое_клонирование) + * [2.6 Анимированные смайлы](#Анимированные_смайлы) * [3 Аватары](#Аватары) - * [3.1 Подключение своей аватары](#Подключение_своей_аватары) - * [3.2 Просмотр аватары собеседника](#Просмотр_аватары_собеседника) - * [3.3 Ссылки](#Ссылки) + * [3.1 Подключение своей аватары](#Подключение_своей_аватары) + * [3.2 Просмотр аватары собеседника](#Просмотр_аватары_собеседника) + * [3.3 Ссылки](#Ссылки) # Предупреждение - -> Информация в этом разделе написана, исходя из возможностей Ткаббера 0.10.0 и - выше; если у вас более старая версия, — вам [сюда](0.9.x/Эмоциконки.md). + Информация в этом разделе написана, исходя из возможностей Ткаббера 0.10.0 и выше; если у вас более старая версия, — вам [сюда](0.9.x/Эмоциконки.md). # Смайлики -> *40iN\_KoS Нет в русском языке слов, -> которые могут передать мое настроение..* - -> *40iN\_KoS но есть идеаматика..* - -> *40iN\_KoS* _\*CRAZY\*_ - -> *AmeNO нет у меня в клиенте смайлов, -> которые могут передать твое настроение..* - -> _[Цитата с башорга.](http://bash.org.ru/quote.php?num=93914)_ - -> "Официальное" название этих "улыбаек" в XMPP — "эмоциконки" (от EMOTion - ICONs), посему везде, где используется термин "эмоциконка", можно читать - "смайлик"; обратное также верно. +40iN\_KoS Нет в русском языке слов, + которые могут передать мое настроение.. + +40iN\_KoS но есть идеаматика.. + +40iN\_KoS \*CRAZY\* + +AmeNO нет у меня в клиенте смайлов, + которые могут передать твое настроение.. + +[Цитата с башорга.](http://bash.org.ru/quote.php?num=93914) + + "Официальное" название этих "улыбаек" в XMPP — "эмоциконки" (от EMOTion ICONs), посему везде, где используется термин "эмоциконка", можно читать "смайлик"; обратное также верно. ## Работа с эмоциконками -Комбинация `` в окне ввода чата открывает менюшку, в которой можно -выбрать любой смайлик из подключённой схемы. Об этом и о многом другом, кстати, -рассказано в пункте меню **Помощь → Краткая справка.** - -Примечание: На самом деле есть по меньшей мере три аргумента против такого -подхода: - -* "руками" смайлики набирать ощутимо быстрее, стоит только немного - потренироваться; -* имейте в виду, что "стандартных" (то есть всем понятных) смайликов не так уж - и много (не более четырёх), а схемы у всех стоят разные, с разным - количеством смайликов, поэтому зачастую ваш распрекрасный смайлик будет - увиден читающим в виде чего-нибудь наподобие **:BEER:**, __\*THUMBS UP\*__ - или **(Y)** — неужели это действительно то, что вы хотели? ;-) -* многие вообще отключают смайлики; поразмыслите над этим, имея в виду - предыдущий пункт. +Комбинация Alt-E в окне ввода чата открывает менюшку, в которой можно выбрать любой смайлик из подключённой схемы. Об этом и о многом другом, кстати, рассказано в пункте меню **Помощь → Краткая справка.** + +Примечание: На самом деле есть по меньшей мере три аргумента против такого подхода: + +* "руками" смайлики набирать ощутимо быстрее, стоит только немного потренироваться; +* имейте в виду, что "стандартных" (то есть всем понятных) смайликов не так уж и много (не более четырёх), а схемы у всех стоят разные, с разным количеством смайликов, поэтому зачастую ваш распрекрасный смайлик будет увиден читающим в виде чего-нибудь наподобие **:BEER:**, **\*THUMBS UP\*** или **(Y)** — неужели это действительно то, что вы хотели? ;-) +* многие вообще отключают смайлики; поразмыслите над этим, имея в виду предыдущий пункт. ## Управление эмоциконками -Наборы эмоциконок можно менять на лету при помощи графического интерфейса -настроек — так же как это делается для наборов иконок интерфейса (pixmaps -themes): настройка находится в группе **Chat → Emoticons** и называется -**::plugins::emoticons::options(theme)**. - -Всегда присутствует одна специальная тема с названием "Нет" ("None") — её выбор -(с сохранением) отключает показ смайликов. - -Ткаббер _при запуске_ ищет наборы иконок в двух местах: - -1. Каталоге `emoticons`, находящемся в каталоге с кодом Ткаббера; -1. Каталоге `emoticons`, находящемся в - [**каталоге настроек Ткаббера**](Config.tcl_для_начинающих.md#Где). - -Поэтому для добавления своего набора эмоциконок в Ткаббер: - -* Положите каталог с этим набором в один из каталогов указанных выше - (предпочтительнее — в пользовательский); -* Перезапустите Ткаббер; -* Зайдите в настройки, выберите появившийся в выпадающем списке новый набор, - сохраните эту настройку. - -Во-вторых, можно подключать наборы эмоциконок "по старинке": при помощи -соответствующей команды в [**файле конфигурации**](Config.tcl_для_начинающих.md). -Этот способ _не_ приветствуется, особенно — для использования новичками. -Команда указывается, например, так: - - hook::add postload_hook { -   ::plugins::emoticons::load_dir "Путь_до_каталога_с_набором_иконок" - } - -Обратите внимание, что начиная с версии 0.10.0 пространство имён -`::plugins::emoticons`, содержащее команды для работы с эмоциконками, -"потеряло" лишнюю букву "e", которую оно имело в более ранних версиях, когда -называлось ::plugins::emoteicons. В настоящее время -Ткаббер поддерживает старое название для совместимости, но в следующем -релизе этот "костылёк" будет выброшен, поэтому подумайте об этом заранее. - -Имейте в виду, что если вам нужно сослаться в файле конфигурации на -[**каталог настроек Ткаббера**](Config.tcl_для_начинающих.md#Где), наиболее -разумно использовать специальную переменную Ткаббера — -[**$::configdir**]($__configdir.md). - -Заодно ответим на пару других достаточно часто возникающих вопросов: - -1. Нет, Ткаббер не может увидеть новый набор без перезапуска. В качестве "хака" - можете попробовать выполнить в [**консоли Ткаббера**](Ткаббер_ЧаВо.md#Консоль_Ткаббера) команду - - ::plugins::emoticons::enable_subsystem - - которая, помимо всего прочего, пересканирует каталоги с наборами - эмоциконок, но желаемое действие этой команды, естественно, не - гарантируется. -1. Нет, выбрать набор эмоциконок "руками" из произвольного места нельзя (так - же, как и набор иконок интерфейса, к примеру). Если всё же вам это очень нужно, - можете либо указать прямую команду загрузки набора эмоциконок в файле - конфиурации, либо можете попробовать использовать символические ссылки, - "линкуя" каталоги с наборами эмоциконок из произвольного каталога в один из - известных ткабберу, например, в Unix: - - ln -s /usr/local/share/my-smile-packs/uglyfaces ~/.tkabber/emoticons/uglyfaces - - Ситуация в Windows несколько сложнее; подробности изложены [**тут**](Symlinks.md). -1. Стабильный ткаббер 0.10.0 не умеет грузить ".jisp"-файлы напрямую. Сначала - их нужно распаковать — на самом деле это обычные zip-архивы. +Наборы эмоциконок можно менять на лету при помощи графического интерфейса настроек — так же как это делается для наборов иконок интерфейса (pixmaps themes): настройка находится в группе **Chat → Emoticons** и называется **::plugins::emoticons::options(theme)**. + +Всегда присутствует одна специальная тема с названием "Нет" ("None") — её выбор (с сохранением) отключает показ смайликов. + +Ткаббер _при запуске_ ищет наборы иконок в двух местах: + +1. Каталоге `emoticons`, находящемся в каталоге с кодом Ткаббера; +1. Каталоге `emoticons`, находящемся в [каталоге настроек Ткаббера](Config.tcl_для_начинающих.md#Где). + +Поэтому для добавления своего набора эмоциконок в Ткаббер: + +* Положите каталог с этим набором в один из каталогов указанных выше (предпочтительнее — в пользовательский); +* Перезапустите Ткаббер; +* Зайдите в настройки, выберите появившийся в выпадающем списке новый набор, сохраните эту настройку. + +Во-вторых, можно подключать наборы эмоциконок "по старинке": при помощи соответствующей команды в [файле конфигурации](Config.tcl_для_начинающих.md). Этот способ _не_ приветствуется, особенно — для использования новичками. Команда указывается, например, так: + + hook::add postload_hook { +  ::plugins::emoticons::load_dir "Путь_до_каталога_с_набором_иконок" + } + +Обратите внимание, что начиная с версии 0.10.0 пространство имён `::plugins::emoticons`, содержащее команды для работы с эмоциконками, "потеряло" лишнюю букву "e", которую оно имело в более ранних версиях, когда называлось `::plugins::emot_e_icons`. В настоящее время Ткаббер поддерживает старое название для совместимости, но в следующем релизе этот "костылёк" будет выброшен, поэтому подумайте об этом заранее. + +Имейте в виду, что если вам нужно сослаться в файле конфигурации на [каталог настроек Ткаббера](Config.tcl_для_начинающих.md#Где), наиболее разумно использовать специальную переменную Ткаббера — `[configdir]($__configdir.md).` + +Заодно ответим на пару других достаточно часто возникающих вопросов: + +1. Нет, Ткаббер не может увидеть новый набор без перезапуска. В качестве "хака" можете попробовать выполнить в [консоли Ткаббера](Ткаббер_ЧаВо.md#Консоль_Ткаббера) команду + ::plugins::emoticons::enable_subsystem + которая, помимо всего прочего, пересканирует каталоги с наборами эмоциконок, но желаемое действие этой команды, естественно, не гарантируется. +1. Нет, выбрать набор эмоциконок "руками" из произвольного места нельзя (так же, как и набор иконок интерфейса, к примеру). Если всё же вам это очень нужно, можете либо указать прямую команду загрузки набора эмоциконок в файле конфиурации, либо можете попробовать использовать символические ссылки, "линкуя" каталоги с наборами эмоциконок из произвольного каталога в один из известных ткабберу, например, в Unix: + ln -s /usr/local/share/my-smile-packs/uglyfaces ~/.tkabber/emoticons/uglyfaces + Ситуация в Windows несколько сложнее; подробности изложены [тут](Symlinks.md). +1. Стабильный ткаббер 0.10.0 не умеет грузить ".jisp"-файлы напрямую. Сначала их нужно распаковать — на самом деле это обычные zip-архивы. ## Готовые комплекты смайликов ### Комплекты анимированных смайликов -1) [*Emoticons-tz.zip*](../files/Emoticons-tz.zip) (202 kB) - -Исходник: игра [Timezero](http://www.timezero.ru). - -Количество: 90. - -Автор комплекта: `xmpp:roz@jabber.ru`. - -2) [Big pack.zip](http://kellin.at.tut.by/jabber/tkabb_anim_icons.zip) (520 kB) - -Количество: 132. - -Автор комплекта: `xmpp:kellin@jabber.ru`. - -**Примечание:** смайлики анимированные, и ощутимо забивают процессор даже когда -не используются (просто запущена программа с подключёнными смайликами). При -вызове же окна по `` процессор забивается на все 100%. Просьба знающим людям -посмотреть, что там такое может быть. - -При использовании патча для улучшенной поддержки GIF (см. ниже) забивание -процессора замечено не было. - -[**Archimed**](Участник_Archimed.md) +1) [Emoticons-tz.zip](../files/Emoticons-tz.zip) (202 kB) + +Исходник: игра [Timezero](http://www.timezero.ru). + +Количество: 90. + +Автор комплекта: `xmpp:roz@jabber.ru`. + +2) [Big pack.zip](http://kellin.at.tut.by/jabber/tkabb_anim_icons.zip) (520 kB) + +Количество: 132. + +Автор комплекта: `xmpp:kellin@jabber.ru`. + + Примечание: смайлики анимированные, и ощутимо забивают процессор даже когда не используются (просто запущена программа с подключёнными смайликами). При вызове же окна по Alt-E процессор забивается на все 100%. Просьба знающим людям посмотреть, что там такое может быть. + +При использовании патча для улучшенной поддержки GIF (см. ниже) забивание процессора замечено не было. + +[Archimed](Участник_Archimed.md) ### Комплект emoticons-bombusmod -[*Эти смайлики*](../files/Emoticons-bombusmod.zip) от бомбуса перепакованы для -Ткаббера камрадом SnAkE (`xmpp:3XXL@jabber.ru`). +[Эти смайлики](../files/Emoticons-bombusmod.zip) от бомбуса перепакованы для Ткаббера камрадом SnAkE (`xmpp:3XXL@jabber.ru`). -93 штуки, 39 Кб. +93 штуки, 39 Кб. ### Исправленный набор смайликов "от пуза" -[**Исправленная версия**](../files/Emoticons-puz179_lkpatched.zip) -комплекта ["puzazBox"](http://www.jabber.ru/Members/puz/). +[Исправленная версия](../files/Emoticons-puz179_lkpatched.zip) комплекта ["puzazBox"](http://www.jabber.ru/Members/puz/). + +[Lknight](Участник_Lknight.md) исправил ошибки в **icondef.xml** и добавил мнемонику :-E, которая ссылается на **devil.gif**. -[**Lknight**](Участник_Lknight.md) исправил ошибки в **icondef.xml** и добавил -мнемонику `:-E`, которая ссылается на **devil.gif**. - -66 штук, 38 Кб. +66 штук, 38 Кб. ### Комплект в стиле "колобки": Big Pack -[*Big Pack*](../files/Tkabber_smiles.zip) — большой пак смайлов в стиле -"колобки" также перепакован из "бомбусмодовских" смайлов aka Tasha. - -Очень симпатично вышло, на мой взгляд. Эмоций много: 136 штук. Пак весит 162 -кб. - -Идея создания: `xmpp:artru@jabber.ru`; и, собственно, человек, который долго не -соглашался их подточить для Ткаббера и после длительных уговоров таки -согласился. Спасибо ему: `xmpp:CSander@xmpp.ru`. - -Пак выложил [*Русский*](Участник_Русский.md). +[Big Pack](../files/Tkabber_smiles.zip) — большой пак смайлов в стиле "колобки" также перепакован из "бомбусмодовских" смайлов aka Tasha. + +Очень симпатично вышло, на мой взгляд. Эмоций много: 136 штук. Пак весит 162 кб. + +Идея создания: `xmpp:artru@jabber.ru`; и, собственно, человек, который долго не соглашался их подточить для Ткаббера и после длительных уговоров таки согласился. Спасибо ему: `xmpp:CSander@xmpp.ru`. + +Пак выложил [Русский](Участник_Русский.md). ### Комплект окончательный ![](../images/180px-Teh_ultimate_smile.png) -[*Teh ultimate emoticon pack*](../files/Ultimate_emoticon_pack.zip) — пак с блекджеком -и пр. Выполнен в духе минимализма и любви к литературному русскому языку. +![](../images/magnify-clip.png) + +[Teh ultimate emoticon pack](../files/Ultimate_emoticon_pack.zip) — пак с блекджеком и пр. Выполнен в духе минимализма и любви к литературному русскому языку. -[*Набор из черного и белого шрифта*](../files/Ultimate_emoticons_pack.zip) (как на -скрине) + немного поправлен icondef.xml. +[Набор из черного и белого шрифта](../files/Ultimate_emoticons_pack.zip) (как на скрине) + немного поправлен icondef.xml. ## Полное искоренение смайликов -Выберите тему смайликов с названием "Нет" ("None" в англ. варианте) и сохраните -настройку — смайлики начнут показываться "как есть" — в виде своих текстовых -мнемоник. +Выберите тему смайликов с названием "Нет" ("None" в англ. варианте) и сохраните настройку — смайлики начнут показываться "как есть" — в виде своих текстовых мнемоник. ## Клонирование смайликов -**Задача: сделать так, чтобы некоторые смайлики, для которых в любимом наборе -нет картинок, всё-таки рисовались картинками.** - -**Решение:** "мнемоники" смайлов связаны с соответствующими картинками при -помощи массива `::emoticons::emoticons`. Ключом (индексом) массива является -мнемоника смайлика, а значением — его картинка. Знание этого позволит нам -"клонировать" смайлики. Помещаем в **config.tcl** такой код: - - hook::add finload_hook { - namespace eval ::emoticons { - variable emoticons - set orig :-) - set dest =) - set emoticons($dest) $emoticons($orig) - } - } - -Сие заклинание связывает мнемонику `=)` с картинкой от мнемоники `:-)`. - -**Внимание:** если у вас в конфиге прописана загрузка своего смайл-пака, то -обсуждаемый код должен идти _после_ команды загрузки (т.к. она меняет -содержимое массива со смайликами). Можно поместить их в один `finload_hook`, -лишь бы "клонирование" шло последним. - -**Вынимание:** исходный смайлик, мнемоника которого помещается в переменную -`orig`, _обязан_ иметь картинку, иначе ваш конфиг взорвётся с шумом и дымом при -старте Ткаббера. - -**Внимание** в версиях 0.9.x везде вместо "emoticons" нужно писать -"emoteicons". +**Задача: сделать так, чтобы некоторые смайлики, для которых в любимом наборе нет картинок, всё-таки рисовались картинками.** + +**Решение:** "мнемоники" смайлов связаны с соответствующими картинками при помощи массива `::emoteicons::emoteicons`. Ключом (индексом) массива является мнемоника смайлика, а значением — его картинка. Знание этого позволит нам "клонировать" смайлики. Помещаем в **config.tcl** такой код: + + hook::add finload_hook { + namespace eval ::emoticons { + variable emoticons + set orig :-) + set dest =) + set emoticons($dest) $emoticons($orig) + } + } + +Сие заклинание связывает мнемонику `=)` с картинкой от мнемоники `:-)`. + +**Внимание:** если у вас в конфиге прописана загрузка своего смайл-пака, то обсуждаемый код должен идти _после_ команды загрузки (т.к. она меняет содержимое массива со смайликами). Можно поместить их в один `finload_hook`, лишь бы "клонирование" шло последним. + +**Вынимание:** исходный смайлик, мнемоника которого помещается в переменную `orig`, _обязан_ иметь картинку, иначе ваш конфиг взорвётся с шумом и дымом при старте Ткаббера. + +**Внимание** в версиях 0.9.x везде вместо "emoticons" нужно писать "emoteicons". ### Массовое клонирование -Данный подход был изобретён для 0.9.x с целью обрабатывать "ROTFL/LOL" смайлики -типа `:-)))))))))))))))`. +Данный подход был изобретён для 0.9.x с целью обрабатывать "ROTFL/LOL" смайлики типа `:-)))))))))))))))`. + +Начиная с 0.10.0 данная проблема решается проще — путём включения опции **::plugins::emoticons::options(handle\_lol)** в настройках эмоциконок. -Начиная с 0.10.0 данная проблема решается проще — путём включения опции -**::plugins::emoticons::options(handle\_lol)** в настройках эмоциконок. - -Если у вас 0.9.x, читайте [**здесь**](0.9.x/Эмоциконки.md#Массовое_клонирование_эмоциконок). +Если у вас 0.9.x, читайте [здесь](0.9.x/Эмоциконки.md#Массовое_клонирование_эмоциконок). ## Анимированные смайлы -Поддержка анимированных эмоциконок всегда была и является "нелюбимым ребёнком" -в Ткаббере (наравне с аватарами). Причина в том, что анимированные картинки -очень сильно затрудняют их обработку, поскольку на самом деле они значительно -ближе к видеопотокам, чем к картинкам. Поскольку поддержка анимированных гифов -отсутствует в библиотеках **Tk** и **Img**, которые Ткаббер использует для -поддержки изображений, обработка анигифов требует достаточно извращённых -приседаний со стороны разработчиков. До тех пор, пока кто-нибудь не напишет для -Ткаббера спец. код для работы с картинками, который будет _прозрачно_ -обрабатывать анигифы так же, как и нормальные картинки, ситуация навряд ли -изменится. - -С другой стороны, поддержка анигифов в Ткаббере, в принципе, есть — она -реализована в виде стандартного внешнего плагина **aniemoticons**. Если вы не -знаете как устанавливать плагины Ткаббера, почитайте начало -[**этой статьи**](Плагины.md). +Поддержка анимированных эмоциконок всегда была и является "нелюбимым ребёнком" в Ткаббере (наравне с аватарами). Причина в том, что анимированные картинки очень сильно затрудняют их обработку, поскольку на самом деле они значительно ближе к видеопотокам, чем к картинкам. Поскольку поддержка анимированных гифов отсутствует в библиотеках **Tk** и **Img**, которые Ткаббер использует для поддержки изображений, обработка анигифов требует достаточно извращённых приседаний со стороны разработчиков. До тех пор, пока кто-нибудь не напишет для Ткаббера спец. код для работы с картинками, который будет _прозрачно_ обрабатывать анигифы так же, как и нормальные картинки, ситуация навряд ли изменится. + +С другой стороны, поддержка анигифов в Ткаббере, в принципе, есть — она реализована в виде стандартного внешнего плагина **aniemoticons**. Если вы не знаете как устанавливать плагины Ткаббера, почитайте начало [этой статьи](Плагины.md). # Аватары ## Подключение своей аватары -Чтобы аватара подцепилась, нужно правильно указать путь к ней в конфиге, например, так: +Чтобы аватара подцепилась, нужно правильно указать путь к ней в конфиге, например, так: if {[file exists $::configdir/avatar.gif]} { - avatar::load_file $::configdir/avatar.gif - } else { - avatar::load_file $::rootdir/pixmaps/default/tkabber/tkabber-logo.gif - } - -Как нетрудно заметить, этот код проверяет, имеется ли файл **avatar.gif** в -директории, имя которой содержится в переменной [**$::configdir**]($__configdir.md), -и если его не находит, грузит логотип Ткаббера. Конечно, никто вас не -заставляет называть ваш аватар именно так и класть именно туда. Но не забудьте -написать путь в соответствии с местоположением вашего файла. - -При выборе своей аватары помните, что графический файл может быть только -формата gif. Не делайте аватару больших размеров — это не фотография. -Постарайтесь уложиться в 5 килобайт, такие картинки и так будут грузится долго. -И вообще, берите пример с аватары [**Bigote**](Участник_Bigote.md). - -Если конфиг у вас был изначально пустым, необходимо заключить строчку, грузящую -аватару (ну или весь вышеприведённый код), в хук: + avatar::load_file $::configdir/avatar.gif + } else { + avatar::load_file $::rootdir/pixmaps/default/tkabber/tkabber-logo.gif + } + +Как нетрудно заметить, этот код проверяет, имеется ли файл **avatar.gif** в директории, имя которой содержится в переменной `[configdir]($__configdir.md)`, и если его не находит, грузит логотип Ткаббера. Конечно, никто вас не заставляет называть ваш аватар именно так и класть именно туда. Но не забудьте написать путь в соответствии с местоположением вашего файла. + +При выборе своей аватары помните, что графический файл может быть только формата gif. Не делайте аватару больших размеров — это не фотография. Постарайтесь уложиться в 5 килобайт, такие картинки и так будут грузится долго. И вообще, берите пример с аватары [Bigote](Участник_Bigote.md). + +Если конфиг у вас был изначально пустым, необходимо заключить строчку, грузящую аватару (ну или весь вышеприведённый код), в хук: hook::add finload_hook { - avatar::load_file $::configdir/avatar.gif + avatar::load_file $::configdir/avatar.gif } -Теперь, объявив аватару (**Службы → Расширения → Аватара → Объявление**), вы -можете быть уверенным, что клиент, поддерживающий её просмотр, её увидит. -Проверить это можно, заглянув в собственную персональную информацию, находясь в -какой-нибудь конференции (при редактировании персональной инфы аватара не -видна). Помимо прочих должна появиться вкладка "Аватара". +Теперь, объявив аватару (**Службы → Расширения → Аватара → Объявление**), вы можете быть уверенным, что клиент, поддерживающий её просмотр, её увидит. Проверить это можно, заглянув в собственную персональную информацию, находясь в какой-нибудь конференции (при редактировании персональной инфы аватара не видна). Помимо прочих должна появиться вкладка "Аватара". -Объявление и "расшаривание" аватары можно тоже прописать в конфиг: +Объявление и "расшаривание" аватары можно тоже прописать в конфиг: set avatar::options(announce) 1 set avatar::options(share) 1 -Но вот вопрос: а сам Ткаббер может показывать нам чужие аватары? Краткий ответ: -может. Длинный: надо немного -[**потрудиться**](Патчи.md#Добавление_аватары_в_окно_чата_старый_хак_Badlopа). +Но вот вопрос: а сам Ткаббер может показывать нам чужие аватары? Краткий ответ: может. Длинный: надо немного [потрудиться](Патчи.md#Добавление_аватары_в_окно_чата_старый_хак_Badlopа). ## Просмотр аватары собеседника -Если у человека подключена аватара, то её можно увидеть в персональной инфе. - -Если же вы хотите видеть аватару собеседника в окне чата, то: - -1. [**Хак от Badlop**](Патчи.md#Добавление_аватары_в_окно_чата_старый_хак_Badlopа). - Небольшое изменение файла **chat.tcl** покажет аватару в окне чата. -1. [**Патч от Archimed**](Патчи.md#Расширенная_поддержка_аватар_в_окне_чата) — - расширение возможностей хака от Badlope. Аватары автоматически - масштабируются под размер выделенной области, поддержка прозрачности, - поддержка анимированных аватаров. +Если у человека подключена аватара, то её можно увидеть в персональной инфе. + +Если же вы хотите видеть аватару собеседника в окне чата, то: + +1. [Хак от Badlop](Патчи.md#Добавление_аватары_в_окно_чата_старый_хак_Badlopа). Небольшое изменение файла **chat.tcl** покажет аватару в окне чата. +1. [ Патч от Archimed](Патчи.md#Расширенная_поддержка_аватаров_в_окне_чата) — расширение возможностей хака от Badlope. Аватары автоматически масштабируются под размер выделенной области, поддержка прозрачности, поддержка анимированных аватаров. ## Ссылки -* [Аватары](http://allavatars.ru/) +* [Аватары](http://allavatars.ru/) + + Index: wiki/ru/Спамодавка_списками_приватности.md ================================================================== --- wiki/ru/Спамодавка_списками_приватности.md +++ wiki/ru/Спамодавка_списками_приватности.md @@ -1,64 +1,48 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Спамодавка_списками_приватности/index.html) + # Спамодавка списками приватности Материал из Tkabber Wiki -К вопросу о реализуемости аськиной спамодавки при помощи списков приватности на -сервере... - -Кратко: не работает вследствие -[бага в ejabberd](https://support.process-one.net/browse/EJAB-300). -Баг пока ещё не исправлен; исправление (формально) ожидается в версии 2.1.0. - -Информация к размышлению (носит историко-ностальгический характер): - -Чат на девеле с Алексеем Щепиным от 2 декабря: - -[02:42]\ йандыкс следит за тобой! - -[02:43]\ приветствую! сейчас пытались решить проблему асечного спама, -который приходит с гейта в виде запросов на подписку, при помощи списков -приватности (на ёжике 1.1.2). получается так, что блокировать можно всё, кроме, -собственно, запросов на подписку, хотя в -[RFC 3921](http://tools.ietf.org/html/rfc3921) ясно написано, что, скажем, -запрещение по джиду без указания типов станц блокирует все станцы. можете -что-нибудь подсказать? станцу со списком могу предъявить ;) - -[02:43]\ а помнится там как раз про подписки небыло - -[02:44]\ Server-side privacy lists enable a user to block all stanzas -from and to other entities based on the entity's JID, roster group, or -subscription status (or globally). Note that this includes subscription-related -presence stanzas, which are excluded by Blocking Inbound Presence Notifications -(Blocking Inbound Presence Notifications). - -[02:44]\ пункт 10.13 - -[02:44]\ я вот думаю, может оно не работает из-за того, что гейт в -аську это сервис на сервере? - -[02:45]\ ну так я джид указываю как icq.007spb.ru (к примеру), и запрос -приходит с from='UIN@icq.007spb.ru' type='subscribe' - -[02:45]\ и там спам унутре ;) - -[02:46]\ от блин, и когда это поменять успели - -[02:46]\ ну вот хрен знает, это teo следит за новостями, а я мал ещё ;) - -[02:47]\ кстати, он мне вчера показал, что в IBB добавили IQ транспорт - -[02:47]\ значит, он где-то про это читает. в регулярное перечитывание -джепов я не верю :) - -[02:49]\ aleksey: то есть, если я правильно понял: 1) ёжик это пока не -умеет; 2) мы можем надеяться, что его научат. да? - -[02:52]\ а вообще, я так думаю, что уж если блокировать всё, то -- всё. -а то ведь может и просто какой-нибудь идиот засыпАть юзера запросами на -подписку. - -[02:52]\ ага - -[02:52]\ может :) +К вопросу о реализуемости аськиной спамодавки при помощи списков приватности на сервере... + +Кратко: не работает вследствие [бага в ejabberd](https://support.process-one.net/browse/EJAB-300). Баг пока ещё не исправлен; исправление (формально) ожидается в версии 2.1.0. + +Информация к размышлению (носит историко-ностальгический характер): + +Чат на девеле с Алексеем Щепиным от 2 декабря: + +[02:42]\ йандыкс следит за тобой! + +[02:43]\ приветствую! сейчас пытались решить проблему асечного спама, который приходит с гейта в виде запросов на подписку, при помощи списков приватности (на ёжике 1.1.2). получается так, что блокировать можно всё, кроме, собственно, запросов на подписку, хотя в [RFC 3921](http://tools.ietf.org/html/rfc3921) ясно написано, что, скажем, запрещение по джиду без указания типов станц блокирует все станцы. можете что-нибудь подсказать? станцу со списком могу предъявить ;) + +[02:43]\ а помнится там как раз про подписки небыло + +[02:44]\ Server-side privacy lists enable a user to block all stanzas from and to other entities based on the entity's JID, roster group, or subscription status (or globally). Note that this includes subscription-related presence stanzas, which are excluded by Blocking Inbound Presence Notifications (Blocking Inbound Presence Notifications). + +[02:44]\ пункт 10.13 + +[02:44]\ я вот думаю, может оно не работает из-за того, что гейт в аську это сервис на сервере? + +[02:45]\ ну так я джид указываю как icq.007spb.ru (к примеру), и запрос приходит с from='UIN@icq.007spb.ru' type='subscribe' + +[02:45]\ и там спам унутре ;) + +[02:46]\ от блин, и когда это поменять успели + +[02:46]\ ну вот хрен знает, это teo следит за новостями, а я мал ещё ;) + +[02:47]\ кстати, он мне вчера показал, что в IBB добавили IQ транспорт + +[02:47]\ значит, он где-то про это читает. в регулярное перечитывание джепов я не верю :) + +[02:49]\ aleksey: то есть, если я правильно понял: 1) ёжик это пока не умеет; 2) мы можем надеяться, что его научат. да? + +[02:52]\ а вообще, я так думаю, что уж если блокировать всё, то -- всё. а то ведь может и просто какой-нибудь идиот засыпАть юзера запросами на подписку. + +[02:52]\ ага + +[02:52]\ может :) + + Index: wiki/ru/Сравнение_XMPP-клиентов.md ================================================================== --- wiki/ru/Сравнение_XMPP-клиентов.md +++ wiki/ru/Сравнение_XMPP-клиентов.md @@ -1,51 +1,87 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Сравнение_XMPP-клиентов/index.html) + # Сравнение XMPP-клиентов Материал из Tkabber Wiki -## Черновик. Не трогать до исчезновения этого заголовка - -На это странице (будет) представлена сводная таблица сравнения XMPP-клиентов -перебранных рабами Культа для демонстрации всей ничтожности и убогости других -клиентов по сравнению с Ткаббер. Сравнение будет отличатся полнотой, будут -указаны все возможности клиентов включая возможности их расширений и плагинов. -За единицу сравнения будет принят (что бы вы думали?) Ткаббер. - -Легенда: - -* "+" - характеристика реализована; -* "~" - характеристика реализована частично; -* "-" - характеристика не реализована; - -Также предполагается система оценки от 0 до 1. - -Схема ячейки пока выглядит так: - -1. Вверху, по центру - форма наличия характеристики клиента. -1. В середине - примечание (при необходимости). -1. Внизу, справа, в круглых скобках - оценка степени реализованности характеристики. - -Характеристики | Ткаббер (live) | Psi+ (live) | Pidgin (2.7.3) | Gajim (0.14) | Kopete (4.4.5) | Mcabber (0.10.0) ----|---|---|---|---|---|--- -:**Базовые**:||||||| -XMPP Core ([RFC3920](http://xmpp.org/rfcs/rfc3920.html)) | + | + ||||| -XMPP IM ([RFC3920](http://xmpp.org/rfcs/rfc3921.html)) | + | + ||||| -In-Band Registration ([XEP-0077](http://xmpp.org/extensions/xep-0077.html)) | + | + ||||| -Stream Compression ([XEP-0138](http://xmpp.org/extensions/xep-0138.html)) | + |||||| -:**Криптография**:||||||| -Поддержка OpenPGP ([XEP-0027](http://xmpp.org/extensions/xep-0027.html)) | + | + ||||| -[OTR](http://en.wikipedia.org/wiki/Off-the-Record_Messaging) | - |||||| -:**Поддерживаемые типы proxy**:||||||| -HTTP | + |||||| -HTTPS | + |||||| -SOCKS4a | + |||||| -SOCKS5 | + |||||| -:**Приватность**:||||||| -Privacy Lists ([XEP-0016](http://xmpp.org/extensions/xep-0016.html)) + |||||| -Запрет передачи информации о возможностях программы (CAPS) | + |||||| -:***Выборочное игнорирование IQ-запросов***:||||||| -запросы времени (jabber:iq:time) | + |||||| -запросы о времени на компьютере пользователя (urn:xmpp:time) | + |||||| -запросы версии клиента (jabber:iq:version) | + |||||| -запросы версии ОС (jabber:iq:version) | + |||||| +# Черновик. Не трогать до исчезновения этого заголовка +На это странице (будет) представлена сводная таблица сравнения XMPP-клиентов перебранных рабами Культа для демонстрации всей ничтожности и убогости других клиентов по сравнению с Ткаббер. Сравнение будет отличатся полнотой, будут указаны все возможности клиентов включая возможности их расширений и плагинов. За единицу сравнения будет принят (что бы вы думали?) Ткаббер. + +Легенда: + +* "+" - характеристика реализована; +* "~" - характеристика реализована частично; +* "-" - характеристика не реализована; + +Также предполагается система оценки от 0 до 1. + +Схема ячейки пока выглядит так: + +1. Вверху, по центру - форма наличия характеристики клиента. +1. В середине - примечание (при необходимости). +1. Внизу, справа, в круглых скобках - оценка степени реализованности характеристики. + + ** Характеристики **** Ткаббер (live) **** Psi+ (live) **** Pidgin (2.7.3) **** Gajim (0.14) **** Kopete (4.4.5) **** Mcabber (0.10.0) ** + + ** Базовые ** + + XMPP Core ([RFC3920](http://xmpp.org/rfcs/rfc3920.html)) + + + + + + XMPP IM ([RFC3920](http://xmpp.org/rfcs/rfc3921.html)) + + + + + + In-Band Registration ([XEP-0077](http://xmpp.org/extensions/xep-0077.html)) + + + + + + Stream Compression ([XEP-0138](http://xmpp.org/extensions/xep-0138.html)) + + + ** Криптография ** + + Поддержка OpenPGP ([XEP-0027](http://xmpp.org/extensions/xep-0027.html)) + + + + + + [OTR](http://en.wikipedia.org/wiki/Off-the-Record_Messaging) - + + ** Поддерживаемые типы proxy ** + + HTTP + + + HTTPS + + + SOCKS4a + + + SOCKS5 + + + ** Приватность ** + + Privacy Lists ([XEP-0016](http://xmpp.org/extensions/xep-0016.html)) + + + Запрет передачи информации +о возможностях программы (CAPS) + + + + _**Выборочное игнорирование IQ-запросов:**_ + + запросы времени +(jabber:iq:time) + + + + запросы о времени на компьютере +пользователя (urn:xmpp:time) + + + + запросы версии клиента +(jabber:iq:version) + + + + запросы версии ОС +(jabber:iq:version) + + + + Index: wiki/ru/Ссылки.md ================================================================== --- wiki/ru/Ссылки.md +++ wiki/ru/Ссылки.md @@ -1,190 +1,136 @@ [//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Ссылки/index.html) + # Ссылки Материал из Tkabber Wiki -На этой странице потихоньку будут собираться ссылки на внешние ресурсы, -посвящённые Ткабберу и Джабберу. +На этой странице потихоньку будут собираться ссылки на внешние ресурсы, посвящённые Ткабберу и Джабберу. ## Содержание * [1 Документация и скачивание](#Документация_и_скачивание) - * [1.1 Сайты о Ткаббере на других языках](#Сайты_о_Ткаббере_на_других_языках) - * [1.2 Разное](#Разное) + * [1.1 Сайты о Ткаббере на других языках](#Сайты_о_Ткаббере_на_других_языках) + * [1.2 Разное](#Разное) * [2 Народное творчество](#Народное_творчество) - * [2.1 Цветовые схемы](#Цветовые_схемы) - * [2.2 Смайл-паки, аватары](#Смайл-паки_аватары) - * [2.3 Звуковые схемы](#Звуковые_схемы) - * [2.4 Сторонние плагины](#Сторонние_плагины) + * [2.1 Цветовые схемы](#Цветовые_схемы) + * [2.2 Смайл-паки, аватары](#Смайл-паки_аватары) + * [2.3 Звуковые схемы](#Звуковые_схемы) + * [2.4 Сторонние плагины](#Сторонние_плагины) * [3 Tcl/Tk](#Tcl_Tk) - * [3.1 Документация и книги на английском языке](#Документация_и_книги_на_английском_языке) - * [3.2 Документация и книги на русском языке](#Документация_и_книги_на_русском_языке) - * [3.3 Больше тиклей, хороших и разных!](#Больше_тиклей_хороших_и_разных) - * [3.4 Sources](#Sources) - * [3.4.1 4 Linux](#4_Linux) - * [3.4.2 4 Windows](#4_Windows) - * [3.4.3 4 Mac](#4_Mac) + * [3.1 Документация и книги на английском языке](#Документация_и_книги_на_английском_языке) + * [3.2 Документация и книги на русском языке](#Документация_и_книги_на_русском_языке) + * [3.3 Больше тиклей, хороших и разных!](#Больше_тиклей_хороших_и_разных) + * [3.4 Sources](#Sources) + * [3.4.1 4 Linux](#4_Linux) + * [3.4.2 4 Windows](#4_Windows) + * [3.4.3 4 Mac](#4_Mac) * [4 Jabber](#Jabber) * [5 Разное](#Разное) -## Документация и скачивание - -* [Официальный сайт Ткаббера.](http://tkabber.jabber.ru) - * Здесь вы можете [cкачать](http://tkabber.jabber.ru/download) Ткаббер. - * Здесь — почитать [полную документацию](http://tkabber.jabber.ru/files/doc/tkabber.html) - (правда, на английском языке). - -* [Раздел вики на сайте omsktele.com, посвящённый Ткабберу.](http://wiki.omsktele.com/index.php/Tkabber) - У парней имеется своя сборка Ткаббера, "заточенная" для пользователей - сервера **jabber.lan.omsk.ru**. -* [Комьюнити ЖЖ, посвящённое Ткабберу.](http://community.livejournal.com/tkabber/profile) - Основная его идея — давать информацию о ходе разработки, для обмена идеями и - т. п. Это **не** форум поддержки. Если вам нужна помощь (и вы не нашли ничего - полезного здесь, на вики), идите в конференцию - `xmpp:tkabber@conference.jabber.ru`. -* Кстати, **логи конференции** можно найти по - [этому адресу](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru). - Обратите внимание, что на каждую фразу из чатлога можно ссылаться с помощью - локальной ссылки на время фразы, - [например, вот так](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/07/02.html#23:38:06). -* [Tkabber-SK](http://sourceforge.net/projects/tkabber-sk/) — этакий "форк" - от SVN-версии Ткаббера за конец декабря 2006 года. В эту версию добавлены - разные интересные и не очень штуки. Мы пригласили автора к сотрудничеству с - разработчиками, так как некоторые из его фич могут запросто попасть в транк. - Да и вообще, незачем распылять силы. -* [Tkabbur](http://code.google.com/p/tkabbur) — ещё один форк. -* [Рассылка tkabber-dev](http://lists.jabber.ru/mailman/listinfo/tkabber-dev): - если хотите быть в курсе последних фич и багфиксов, обязательно подпишитесь. - -### Сайты о Ткаббере на других языках - -* [Tkabber-Manía (esp.)](http://tkabber.redlibre.org/) — испанский сайт, - посвящённый Ткабберу. - -### Разное - -* [Сколько стоит Ткаббер?](http://www.ohloh.net/projects/3278) Оказывается, - Ткаббер — один из самых дешёвых клиентов, причём с большим отрывом. Можете - убедиться в этом сами, посмотрев данные по другим аналогичным программам. - -## Народное творчество - -### Цветовые схемы - -* [Новая цветовая схема - Dark Radar](http://tkabber.jabber.ru/files/internal/darkradar-theme.tar.gz) - (Автор: [Bobus](http://w.bo.org.ru/), скриншот: - [смотреть](http://tkabber.jabber.ru/files/internal/tkshot002.png)) - -### Смайл-паки, аватары - -### Звуковые схемы - -### Сторонние плагины - -## Tcl/Tk - -### Документация и книги на английском языке - -* [Официальный сайт Tcl/Tk](http://tcl.tk) - * [База знаний этого сайта](http://wiki.tcl.tk) - * [Раздел этой базы, посвящённый Ткабберу](http://wiki.tcl.tk/11080) -* [J. K. Ousterhout, Tcl and the Tk Toolkit (Reading : Addison-Wesley, 1994)](http://citeseer.ist.psu.edu/ousterhout94tcl.html) - Книга по тиклю, написанная самим его автором — Джоном Оустерхаутом. - Безусловно, начинать стоит с неё: всё разложено по полочкам и подробно - разжёвано. Единственный недостаток — надо читать по-английски. Впрочем, это - относится к подавляющему большниству документации и практически ко всем - книгам по тиклю. -* [Brent Welch, Practical Programming in Tcl and Tk](http://www.beedub.com/book/) - Как видно из названия, эта книга предназначена для практического применения. - Для начинающих и продвинутых тиклеводов. Ссылки как на amazon.com, так и на - электронные версии разных изданий книги. -* [Clif Flynt, Tcl/tk A Developers Guide](http://www.amazon.co.uk/Tcl-Developers-Guide-Clif-Flynt/dp/1558608028) - Тикль для разработчиков. -* [Clif Flynt, Tcl/Tk For Real Programmers](http://www.amazon.com/Tcl-Real-Programmers-Clif-Flynt/dp/0122612051) - Тикль для настоящих программистов. -* [Salvatore Sanfilippo, TCLWISE. Guide to the Tcl programming language.](http://www.invece.org/tclwise/frontcover.html) - Ещё одна книга по тиклю. - -### Документация и книги на русском языке - -* [Документация по тиклю на русском языке](http://www.opennet.ru/docs/RUS/tcltk/) -* [Б. Уэлш, Практическое программирование на Tcl/Tk. Изд-во "Питер".](http://www.book.ru/?page=4&book=87376) - Перевод на русский язык вышеупомянутой книги Брента Уэлша. -* [Помощь начинающим программистам на тикле, не владеющим английским языком](http://tclstudy.narod.ru/index.html) -* [Ещё кое-что о тикле на русском (с Опеннета)](http://www.opennet.ru/links/sml/36.shtml) -* [Ещё один хороший перевод документации по тиклю.](http://jarosh.by.ru/tcltkrus/) - На сайте есть также скрипты на тему квантовой химии, написанные автором сайта. - -### Больше тиклей, хороших и разных! - -![(!)](../images/Hammer.png) **Сделать:** Развить и дополнить - -### Sources - -[Исходники качать здесь.](http://tcl.tk/software/tcltk/download.html) - -#### 4 Linux - -В юниксах он обычно уже входит в состав даже минимального дистрибутива. Если же -по каким-то причинам его нет (вы работаете с каким-нибудь минималистичным -Live-CD) или хочется поставить версию посвежей, обращайтесь к вашему менеджеру -пакетов. Например, в случае с Debian это выглядит так: +# Документация и скачивание +* [Официальный сайт Ткаббера.](http://tkabber.jabber.ru) + * Здесь вы можете [cкачать](http://tkabber.jabber.ru/download) Ткаббер. + * Здесь — почитать [полную документацию](http://tkabber.jabber.ru/files/doc/tkabber.html) (правда, на английском языке). + +* [Раздел вики на сайте omsktele.com, посвящённый Ткабберу.](http://wiki.omsktele.com/index.php/Tkabber) У парней имеется своя сборка Ткаббера, "заточенная" для пользователей сервера **jabber.lan.omsk.ru**. +* [Комьюнити ЖЖ, посвящённое Ткабберу.](http://community.livejournal.com/tkabber/profile) Основная его идея — давать информацию о ходе разработки, для обмена идеями и т. п. Это **не** форум поддержки. Если вам нужна помощь (и вы не нашли ничего полезного здесь, на вики), идите в конференцию `xmpp:tkabber@conference.jabber.ru`. +* Кстати, **логи конференции** можно найти по [этому адресу](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru). Обратите внимание, что на каждую фразу из чатлога можно ссылаться с помощью локальной ссылки на время фразы, [например, вот так](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/07/02.html#23:38:06). +* [Tkabber-SK](http://sourceforge.net/projects/tkabber-sk/) — этакий "форк" от SVN-версии Ткаббера за конец декабря 2006 года. В эту версию добавлены разные интересные и не очень штуки. Мы пригласили автора к сотрудничеству с разработчиками, так как некоторые из его фич могут запросто попасть в транк. Да и вообще, незачем распылять силы. +* [Tkabbur](http://code.google.com/p/tkabbur) — ещё один форк. +* [Рассылка tkabber-dev](http://lists.jabber.ru/mailman/listinfo/tkabber-dev): если хотите быть в курсе последних фич и багфиксов, обязательно подпишитесь. + +## Сайты о Ткаббере на других языках + +* [Tkabber-Manía (esp.)](http://tkabber.redlibre.org/) — испанский сайт, посвящённый Ткабберу. + +## Разное + +* [Сколько стоит Ткаббер?](http://www.ohloh.net/projects/3278) Оказывается, Ткаббер — один из самых дешёвых клиентов, причём с большим отрывом. Можете убедиться в этом сами, посмотрев данные по другим аналогичным программам. + +# Народное творчество +## Цветовые схемы + +* [Новая цветовая схема - Dark Radar](http://tkabber.jabber.ru/files/internal/darkradar-theme.tar.gz) (Автор: [Bobus](http://w.bo.org.ru/), скриншот: [смотреть](http://tkabber.jabber.ru/files/internal/tkshot002.png)) + +## Смайл-паки, аватары + +## Звуковые схемы + +## Сторонние плагины + +# Tcl/Tk +## Документация и книги на английском языке + +* [Официальный сайт Tcl/Tk](http://tcl.tk) + * [База знаний этого сайта](http://wiki.tcl.tk) + * [Раздел этой базы, посвящённый Ткабберу](http://wiki.tcl.tk/11080) + +* [J. K. Ousterhout, Tcl and the Tk Toolkit (Reading : Addison-Wesley, 1994)](http://citeseer.ist.psu.edu/ousterhout94tcl.html) Книга по тиклю, написанная самим его автором — Джоном Оустерхаутом. Безусловно, начинать стоит с неё: всё разложено по полочкам и подробно разжёвано. Единственный недостаток — надо читать по-английски. Впрочем, это относится к подавляющему большниству документации и практически ко всем книгам по тиклю. +* [Brent Welch, Practical Programming in Tcl and Tk](http://www.beedub.com/book/) Как видно из названия, эта книга предназначена для практического применения. Для начинающих и продвинутых тиклеводов. Ссылки как на amazon.com, так и на электронные версии разных изданий книги. +* [Clif Flynt, Tcl/tk A Developers Guide](http://www.amazon.co.uk/Tcl-Developers-Guide-Clif-Flynt/dp/1558608028) Тикль для разработчиков. +* [Clif Flynt, Tcl/Tk For Real Programmers](http://www.amazon.com/Tcl-Real-Programmers-Clif-Flynt/dp/0122612051) Тикль для настоящих программистов. +* [Salvatore Sanfilippo, TCLWISE. Guide to the Tcl programming language.](http://www.invece.org/tclwise/frontcover.html) Ещё одна книга по тиклю. + +## Документация и книги на русском языке + +* [Документация по тиклю на русском языке](http://www.opennet.ru/docs/RUS/tcltk/) +* [Б. Уэлш, Практическое программирование на Tcl/Tk. Изд-во "Питер".](http://www.book.ru/?page=4&book=87376) Перевод на русский язык вышеупомянутой книги Брента Уэлша. +* [Помощь начинающим программистам на тикле, не владеющим английским языком](http://tclstudy.narod.ru/index.html) +* [Ещё кое-что о тикле на русском (с Опеннета)](http://www.opennet.ru/links/sml/36.shtml) +* [Ещё один хороший перевод документации по тиклю.](http://jarosh.by.ru/tcltkrus/) На сайте есть также скрипты на тему квантовой химии, написанные автором сайта. + +## Больше тиклей, хороших и разных! + +![(!)](../images/Hammer.png) **Сделать:** Развить и дополнить + +## Sources + +[Исходники качать здесь.](http://tcl.tk/software/tcltk/download.html) + +### 4 Linux + +В юниксах он обычно уже входит в состав даже минимального дистрибутива. Если же по каким-то причинам его нет (вы работаете с каким-нибудь минималистичным Live-CD) или хочется поставить версию посвежей, обращайтесь к вашему менеджеру пакетов. Например, в случае с Debian это выглядит так: apt-cache search tcl apt-cache search tk -при этом найдётся что-нибудь вроде +при этом найдётся что-нибудь вроде tcl8.5 - Tcl (the Tool Command Language) v8.5 - run-time files tcl8.5-dev - Tcl (the Tool Command Language) v8.5 - development files tcl8.5-doc - Tcl (the Tool Command Language) v8.5 - manual pages - + tk8.5 - Tk toolkit for Tcl and X11, v8.5 - run-time files tk8.5-dev - Tk toolkit for Tcl and X11, v8.5 - development files tk8.5-doc - Tk toolkit for Tcl and X11, v8.5 - manual pages -Установить надо оба пакета (не забывая, что для Ткаббера одного тикля мало, -нужны как минимум ещё tcllib и bwidget): +Установить надо оба пакета (не забывая, что для Ткаббера одного тикля мало, нужны как минимум ещё tcllib и bwidget): sudo apt-get install tcl8.5 tk8.5 -#### 4 Windows - -* [ActiveState Tcl](http://www.activestate.com/Products/ActiveTcl/) — как - уверяют авторы, в этом тикле "включены все батарейки", однако они лукавят: - далеко не все батарейки там есть. Выкачав 21 мег дистра, вы не получите, - например, такой элементарной вещи как tcllib. -* [wintcltk](http://sourceforge.net/projects/wintcltk) — альтернативная - сборка под винды. -* [eTcl](http://www.evolane.com/software/etcl/) (есть сборки под все системы, - кроме того, идёт ещё и на Windows Mobile, что позволяет осуществлять - [**запуск Ткаббера на Pocket PC**](Ткаббер_на_КПК.md)). - -#### 4 Mac - -Кроме упомянутого выше eTcl, который идёт на всём и вся, имеется ещё, например, - -* mactcl, о котором лучше почитать [здесь](http://wiki.tcl.tk/2923). -* Свежую версию TclTkAqua, упомянутой на этой странице, можно найти - [тут](http://sourceforge.net/project/shownotes.php?release_id=288380&group_id=86100). - -## Jabber - -* [Сайт одного из самых крупных российских xmpp-серверов](http://jabber.ru). - Есть FAQ, форумы, много статей. Архиудобная (но к сожалению, не секурная) - регистрация — используется XMPP-логин с jabber.ru. Параноикам лучше завести - отдельный аккаунт на сайте, чтобы не засветить пароль от джаббера. -* [Русскоязычная вики по протоколу XMPP (Jabber).](http://wiki.jrudevels.org) - Написано простым и понятным языком. Рекомендуется для прочтения новичкам в - Jabber. -* [Русскоязычное комьюнити в ЖЖ.](http://community.livejournal.com/ru_jabber) -* [Переход с ICQ на Jabber](http://jabberworld.info/Переход_с_ICQ_на_Jabber) - — тоже архиполезная вики в помощь перебежчикам с других протоколов и просто - новичкам. -* Надо сюда джепов насовать, чтоб в куче лежали. - -## Разное - -* [Jabber и Livejournal.com — теперь друзья навек :) (eng.)](http://community.livejournal.com/lj_dev/716451.html) - * [О том же по-русски, но в общих чертах и не из официальных уст.](http://itnews.com.ua/23336.html) +### 4 Windows + +* [ActiveState Tcl](http://www.activestate.com/Products/ActiveTcl/) — как уверяют авторы, в этом тикле "включены все батарейки", однако они лукавят: далеко не все батарейки там есть. Выкачав 21 мег дистра, вы не получите, например, такой элементарной вещи как tcllib. +* [wintcltk](http://sourceforge.net/projects/wintcltk) — альтернативная сборка под винды. +* [eTcl](http://www.evolane.com/software/etcl/) (есть сборки под все системы, кроме того, идёт ещё и на Windows Mobile, что позволяет осуществлять [запуск Ткаббера на Pocket PC](Ткаббер_на_КПК.md)). + +### 4 Mac + +Кроме упомянутого выше eTcl, который идёт на всём и вся, имеется ещё, например, + +* mactcl, о котором лучше почитать [здесь.](http://wiki.tcl.tk/2923) +* Свежую версию TclTkAqua, упомянутой на этой странице, можно найти [тут.](http://sourceforge.net/project/shownotes.php?release_id=288380&group_id=86100) + +# Jabber +* [Сайт одного из самых крупных российских xmpp-серверов](http://jabber.ru). Есть FAQ, форумы, много статей. Архиудобная (но к сожалению, не секурная) регистрация — используется XMPP-логин с jabber.ru. Параноикам лучше завести отдельный аккаунт на сайте, чтобы не засветить пароль от джаббера. +* [Русскоязычная вики по протоколу XMPP (Jabber).](http://wiki.jrudevels.org) Написано простым и понятным языком. Рекомендуется для прочтения новичкам в Jabber. +* [Русскоязычное комьюнити в ЖЖ.](http://community.livejournal.com/ru_jabber) +* [Переход с ICQ на Jabber](http://jabberworld.info/Переход_с_ICQ_на_Jabber) — тоже архиполезная вики в помощь перебежчикам с других протоколов и просто новичкам. +* Надо сюда джепов насовать, чтоб в куче лежали. + +# Разное +* [Jabber и Livejournal.com — теперь друзья навек :) (eng.)](http://community.livejournal.com/lj_dev/716451.html) + * [О том же по-русски, но в общих чертах и не из официальных уст.](http://itnews.com.ua/23336.html) + + Index: wiki/ru/ТЗ_по_управлению_через_параметры_командной_строки.md ================================================================== --- wiki/ru/ТЗ_по_управлению_через_параметры_командной_строки.md +++ wiki/ru/ТЗ_по_управлению_через_параметры_командной_строки.md @@ -9,20 +9,20 @@ ## Содержание * [1 Зачем это нужно](#Зачем_это_нужно) * [2 Межпроцессное взаимодействие](#Межпроцессное_взаимодействие) - * [2.1 Несколько соединений, несколько клиентов](#Несколько_соединений_несколько_клиентов) + * [2.1 Несколько соединений, несколько клиентов](#Несколько_соединений_несколько_клиентов) * [3 Алгоритмы](#Алгоритмы) - * [3.1 Выполнение XMPP-URI команд](#Выполнение_XMPP-URI_команд) - * [3.1.1 Экранирование](#Экранирование) - * [3.1.2 Кодировки](#Кодировки) - * [3.1.3 Несколько соединений](#Несколько_соединений) - * [3.2 Управление PEP-статусами](#Управление_PEP-статусами) - * [3.2.1 Экранирование](#Экранирование) - * [3.2.2 Кодировки](#Кодировки) - * [3.2.3 Несколько соединений](#Несколько_соединений) + * [3.1 Выполнение XMPP-URI команд](#Выполнение_XMPP-URI_команд) + * [3.1.1 Экранирование](#Экранирование) + * [3.1.2 Кодировки](#Кодировки) + * [3.1.3 Несколько соединений](#Несколько_соединений) + * [3.2 Управление PEP-статусами](#Управление_PEP-статусами) + * [3.2.1 Экранирование](#Экранирование) + * [3.2.2 Кодировки](#Кодировки) + * [3.2.3 Несколько соединений](#Несколько_соединений) * [4 См. также](#См._также) ## Зачем это нужно Для двух вещей: Index: wiki/ru/Теория.md ================================================================== --- wiki/ru/Теория.md +++ wiki/ru/Теория.md @@ -7,20 +7,20 @@ ## Содержание * [1 Глоссарик (словарий)](#Глоссарик_словарий) * [2 Статьи](#Статьи) - * [2.1 Начинающим](#Начинающим) - * [2.1.1 О Ткаббере](#О_Ткаббере) - * [2.1.2 Быстрый старт (с кучей скриншотов)](#Быстрый_старт_с_кучей_скриншотов) - * [2.1.3 Настройка Ткаббера: азы и глубже](#Настройка_Ткаббера_азы_и_глубже) - * [2.2 Продвинутым пользователям](#Продвинутым_пользователям) - * [2.2.1 Тонкая настройка](#Тонкая_настройка) - * [2.2.2 Меню](#Меню) - * [2.2.3 Настройки](#Настройки) - * [2.2.4 Config.tcl с человеческим лицом](#Config.tcl_с_человеческим_лицом) - * [2.3 Другие статьи](#Другие_статьи) + * [2.1 Начинающим](#Начинающим) + * [2.1.1 О Ткаббере](#О_Ткаббере) + * [2.1.2 Быстрый старт (с кучей скриншотов)](#Быстрый_старт_с_кучей_скриншотов) + * [2.1.3 Настройка Ткаббера: азы и глубже](#Настройка_Ткаббера_азы_и_глубже) + * [2.2 Продвинутым пользователям](#Продвинутым_пользователям) + * [2.2.1 Тонкая настройка](#Тонкая_настройка) + * [2.2.2 Меню](#Меню) + * [2.2.3 Настройки](#Настройки) + * [2.2.4 Config.tcl с человеческим лицом](#Config.tcl_с_человеческим_лицом) + * [2.3 Другие статьи](#Другие_статьи) # Глоссарик (словарий) [1001 непонятное слово из тех, что вы хотели, но боялись спросить.](Терминология.md) # Статьи Index: wiki/ru/Терминология.md ================================================================== --- wiki/ru/Терминология.md +++ wiki/ru/Терминология.md @@ -8,25 +8,25 @@ В этом разделе мы постараемся разъяснять некоторые термины, очевидные для одних и непонятные для других. Объяснения будут даны весьма вкратце — времени у нас не вагон. Краткая расшифровка, чтобы можно было понять смысл статьи, где встречается хитрое слово, и ссылка на источник подробной информации (на английском и по возможности на русском). ## Содержание * [1 Tkabber](#Tkabber) - * [1.1 Токен (token)](#Токен_token) - * [1.2 Окно XML](#Окно_XML) + * [1.1 Токен (token)](#Токен_token) + * [1.2 Окно XML](#Окно_XML) * [2 Сети](#Сети) - * [2.1 SOCKS5](#SOCKS5) + * [2.1 SOCKS5](#SOCKS5) * [3 Windows](#Windows) * [4 Linux](#Linux) * [5 Tcl/Tk](#Tcl_Tk) * [6 Jabber](#Jabber) - * [6.1 XML](#XML) - * [6.2 Станца (stanza)](#Станца_stanza) + * [6.1 XML](#XML) + * [6.2 Станца (stanza)](#Станца_stanza) * [7 Разное](#Разное) - * [7.1 Плагин (plugin)](#Плагин_plugin) - * [7.2 Биндинги (bindings)](#Биндинги_bindings) - * [7.3 Транк (trunk)](#Транк_trunk) - * [7.4 Переменные окружения](#Переменные_окружения) + * [7.1 Плагин (plugin)](#Плагин_plugin) + * [7.2 Биндинги (bindings)](#Биндинги_bindings) + * [7.3 Транк (trunk)](#Транк_trunk) + * [7.4 Переменные окружения](#Переменные_окружения) # Tkabber Тут мы будем рассматривать термины, относящиеся (впрочем, весьма условно) к Ткабберу. ## Токен (token) Index: wiki/ru/Ткаббер_ЧаВо.md ================================================================== --- wiki/ru/Ткаббер_ЧаВо.md +++ wiki/ru/Ткаббер_ЧаВо.md @@ -12,109 +12,113 @@ Недавние глюки с некоторыми сильно разросшимися страницами (и в первую очередь с ЧаВо) подтолкнули нас к давно обдуманному шагу: разделить ЧаВо на несколько разных страниц. ## Содержание * [1 Внешний вид и звук](#Внешний_вид_и_звук) - * [1.1 Почему Ткаббер такой страшный?](#Почему_Ткаббер_такой_страшный) - * [1.2 Шрифты](#Шрифты) - * [1.3 Смайлики: 1) вызов из меню; 2) не подключаются; 3) не хочу их; 4) анимированные](#Смайлики_1_вызов_из_меню_2_не_подключаются_3_не_хочу_их_4_анимированные) - * [1.4 Не видны иконки/фото/и т.д. в JPEG/PNG](#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG) - * [1.5 Цветовые схемы](#Цветовые_схемы) - * [1.6 Цвета сообщений "асечников"](#Цвета_сообщений_асечников) - * [1.7 Поддерживает ли Ткаббер аватары?](#Поддерживает_ли_Ткаббер_аватары) - * [1.8 Регулировка громкости звука](#Регулировка_громкости_звука) - * [1.9 В старпаке/старките нет звука/поддержки JPEG,PNG](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG) + * [1.1 Почему Ткаббер такой страшный?](#Почему_Ткаббер_такой_страшный) + * [1.2 Шрифты](#Шрифты) + * [1.3 Смайлики: 1) вызов из меню; 2) не подключаются; 3) не хочу их; 4) анимированные](#Смайлики_1_вызов_из_меню_2_не_подключаются_3_не_хочу_их_4_анимированные) + * [1.4 Не видны иконки/фото/и т.д. в JPEG/PNG](#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG) + * [1.5 Цветовые схемы](#Цветовые_схемы) + * [1.6 Цвета сообщений "асечников"](#Цвета_сообщений_асечников) + * [1.7 Поддерживает ли Ткаббер аватары?](#Поддерживает_ли_Ткаббер_аватары) + * [1.8 Регулировка громкости звука](#Регулировка_громкости_звука) + * [1.9 В старпаке/старките нет звука/поддержки JPEG,PNG](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG) * [2 Глюки, возникающие в процессе работы](#Глюки_возникающие_в_процессе_работы) - * [2.1 Общие вопросы](#Общие_вопросы) - * [2.1.1 Ткаббер и Ufanet](#Ткаббер_и_Ufanet) - * [2.1.2 Долгая загрузка Ткаббера](#Долгая_загрузка_Ткаббера) - * [2.1.3 Ткаббер "виснет" при попытке логина на сервер](#Ткаббер_виснет_при_попытке_логина_на_сервер) - * [2.1.4 Пересылка файлов](#Пересылка_файлов) - * [2.1.5 Ткаббер постоянно держит меня в состоянии "отошёл" ("away")](#Ткаббер_постоянно_держит_меня_в_состоянии_отошёл_away) - * [2.1.6 Не могу приконнектиться к серверу через прокси](#Не_могу_приконнектиться_к_серверу_через_прокси) - * [2.1.7 Keep alive в Ткаббере — возможно ли?](#Keep_alive_в_Ткаббере_-_возможно_ли) - * [2.1.8 Что с грифельной доской?](#Что_с_грифельной_доской) - * [2.1.9 Ткаббер в упор не видит SSL-сертификат для коннекта к серверу](#Ткаббер_в_упор_не_видит_SSL-сертификат_для_коннекта_к_серверу) - * [2.1.10 Не могу отредактировать закладку конференции в ростере](#Не_могу_отредактировать_закладку_конференции_в_ростере) - * [2.1.11 Ткаббер и iChat](#Ткаббер_и_iChat) - * [2.1.12 Конфликт хоткеев в Ткаббере и puntoswitcher, gxneur, etc.](#Конфликт_хоткеев_в_Ткаббере_и_puntoswitcher_gxneur_etc.) - * [2.2 Вопросы, связанные с Линукс](#Вопросы_связанные_с_Линукс) - * [2.2.1 Шифрование в Ткаббере: проблемы с **gpgme/tclgpgme**](#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme) - * [2.2.2 В Ubuntu не вводятся русские буквы в Ткаббере, chto delat?](#В_Ubuntu_не_вводятся_русские_буквы_в_Ткаббере_chto_delat) - * [2.2.3 Ткаббер под X Window падает при попытке показать "странные" символы](#Ткаббер_под_X_Window_падает_при_попытке_показать_странные_символы) - * [2.2.4 Не работает вставка по Control-v под X Window](#Не_работает_вставка_по_Control-v_под_X_Window) - * [2.2.5 В Gentoo не работает сворачивание в трей](#В_Gentoo_не_работает_сворачивание_в_трей) - * [2.2.6 Fedora 8 и Tcl/Tk 8.5](#Fedora_8_и_Tcl_Tk_8.5) - * [2.2.7 Обновил тикль до 8.5, но Ткаббер по-прежнему запускается с 8.4](#Обновил_тикль_до_8.5_но_Ткаббер_по-прежнему_запускается_с_8.4) - * [2.2.8 Проигрывание звука в Linux](#Проигрывание_звука_в_Linux) - * [2.2.9 Userinfo в KDE 4.x](#Userinfo_в_KDE_4.x) - * [2.2.10 Диалоговые окна Tk на многоголовом X11-сервере](#Диалоговые_окна_Tk_на_многоголовом_X11-сервере) - * [2.3 Вопросы, связанные с Виндовс](#Вопросы_связанные_с_Виндовс) - * [2.3.1 В старпаке/старките нет звука/поддержки JPEG,PNG/сжатия](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG_сжатия) - * [2.3.2 Не работает браузер под виндами](#Не_работает_браузер_под_виндами) - * [2.3.3 При клике на URL'е в Ткаббере запускается две Оперы и открывают страницу два раза](#При_клике_на_URLе_в_Ткаббере_запускается_две_Оперы_и_открывают_страницу_два_раза) - * [2.3.4 Странное поведение прокрутки содержимого окна чата колесом мыши](#Странное_поведение_прокрутки_содержимого_окна_чата_колесом_мыши) - * [2.3.5 Ошибка: wrong \# args: should be "zlib option data ?...?", что делать?](#Ошибка_wrong_N_args_should_be_zlib_option_data_..._что_делать) - * [2.3.6 Windows, дистрибутив от ActiveState — "падения" при нажатии Alt-любая кнопка в главном окне](#Windows_дистрибутив_от_ActiveState_-_падения_при_нажатии_Alt-любая_кнопка_в_главном_окне) - * [2.3.7 Windows, дистрибутив от ActiveState — "падения" при открытии в фоне окна со смайликом](#Windows_дистрибутив_от_ActiveState_-_падения_при_открытии_в_фоне_окна_со_смайликом) - * [2.3.8 Фатальная ошибка в wish при запуске полноэкранных приложений под Windows](#Фатальная_ошибка_в_wish_при_запуске_полноэкранных_приложений_под_Windows) + * [2.1 Общие вопросы](#Общие_вопросы) + * [2.1.1 Ткаббер и Ufanet](#Ткаббер_и_Ufanet) + * [2.1.2 Долгая загрузка Ткаббера](#Долгая_загрузка_Ткаббера) + * [2.1.3 Ткаббер "виснет" при попытке логина на сервер](#Ткаббер_виснет_при_попытке_логина_на_сервер) + * [2.1.4 Пересылка файлов](#Пересылка_файлов) + * [2.1.5 Ткаббер постоянно держит меня в состоянии "отошёл" ("away")](#Ткаббер_постоянно_держит_меня_в_состоянии_отошёл_away) + * [2.1.6 Не могу приконнектиться к серверу через прокси](#Не_могу_приконнектиться_к_серверу_через_прокси) + * [2.1.7 Keep alive в Ткаббере — возможно ли?](#Keep_alive_в_Ткаббере_-_возможно_ли) + * [2.1.8 Что с грифельной доской?](#Что_с_грифельной_доской) + * [2.1.9 Ткаббер в упор не видит SSL-сертификат для коннекта к серверу](#Ткаббер_в_упор_не_видит_SSL-сертификат_для_коннекта_к_серверу) + * [2.1.10 Не могу отредактировать закладку конференции в ростере](#Не_могу_отредактировать_закладку_конференции_в_ростере) + * [2.1.11 Ткаббер и iChat](#Ткаббер_и_iChat) + * [2.1.12 Конфликт хоткеев в Ткаббере и puntoswitcher, gxneur, etc.](#Конфликт_хоткеев_в_Ткаббере_и_puntoswitcher_gxneur_etc.) + * [2.2 Вопросы, связанные с Линукс](#Вопросы_связанные_с_Линукс) + * [2.2.1 Шифрование в Ткаббере: проблемы с **gpgme/tclgpgme**](#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme) + * [2.2.1 Не могу скомпилировать tclgpgme](#Не_могу_скомпилировать_tclgpgme) + * [2.2.1 Ткаббер валится при вводе gpg-пароля](#Ткаббер_валится_при_вводе_gpg-пароля) + * [2.2.2 В Ubuntu не вводятся русские буквы в Ткаббере, chto delat?](#В_Ubuntu_не_вводятся_русские_буквы_в_Ткаббере_chto_delat) + * [2.2.3 Ткаббер под X Window падает при попытке показать "странные" символы](#Ткаббер_под_X_Window_падает_при_попытке_показать_странные_символы) + * [2.2.4 Не работает вставка по Control-v под X Window](#Не_работает_вставка_по_Control-v_под_X_Window) + * [2.2.5 В Gentoo не работает сворачивание в трей](#В_Gentoo_не_работает_сворачивание_в_трей) + * [2.2.6 Fedora 8 и Tcl/Tk 8.5](#Fedora_8_и_Tcl_Tk_8.5) + * [2.2.7 Обновил тикль до 8.5, но Ткаббер по-прежнему запускается с 8.4](#Обновил_тикль_до_8.5_но_Ткаббер_по-прежнему_запускается_с_8.4) + * [2.2.8 Проигрывание звука в Linux](#Проигрывание_звука_в_Linux) + * [2.2.9 Userinfo в KDE 4.x](#Userinfo_в_KDE_4.x) + * [2.2.10 Диалоговые окна Tk на многоголовом X11-сервере](#Диалоговые_окна_Tk_на_многоголовом_X11-сервере) + * [2.3 Вопросы, связанные с Виндовс](#Вопросы_связанные_с_Виндовс) + * [2.3.1 В старпаке/старките нет звука/поддержки JPEG,PNG/сжатия](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG_сжатия) + * [2.3.2 Не работает браузер под виндами](#Не_работает_браузер_под_виндами) + * [2.3.3 При клике на URL'е в Ткаббере запускается две Оперы и открывают страницу два раза](#При_клике_на_URLе_в_Ткаббере_запускается_две_Оперы_и_открывают_страницу_два_раза) + * [2.3.4 Странное поведение прокрутки содержимого окна чата колесом мыши](#Странное_поведение_прокрутки_содержимого_окна_чата_колесом_мыши) + * [2.3.5 Ошибка: wrong \# args: should be "zlib option data ?...?", что делать?](#Ошибка_wrong_N_args_should_be_zlib_option_data_..._что_делать) + * [2.3.6 Windows, дистрибутив от ActiveState — "падения" при нажатии Alt-любая кнопка в главном окне](#Windows_дистрибутив_от_ActiveState_-_падения_при_нажатии_Alt-любая_кнопка_в_главном_окне) + * [2.3.7 Windows, дистрибутив от ActiveState — "падения" при открытии в фоне окна со смайликом](#Windows_дистрибутив_от_ActiveState_-_падения_при_открытии_в_фоне_окна_со_смайликом) + * [2.3.8 Фатальная ошибка в wish при запуске полноэкранных приложений под Windows](#Фатальная_ошибка_в_wish_при_запуске_полноэкранных_приложений_под_Windows) * [3 А как мне...?](#А_как_мне...) - * [3.1 Настройка Ткаббера (Не найду файл config.tcl)](#Настройка_Ткаббера_Не_найду_файл_config.tcl) - * [3.2 Как настроить "автологин"?](#Как_настроить_автологин) - * [3.3 Работать с RSS](#Работать_с_RSS) - * [3.4 Отправка сообщений по Ctrl-Enter](#Отправка_сообщений_по_Ctrl-Enter) - * [3.5 Отправка сообщений по NumPad Enter](#Отправка_сообщений_по_NumPad_Enter) - * [3.6 Одновременная работа с несколькими аккаунтами](#Одновременная_работа_с_несколькими_аккаунтами) - * [3.7 Как насчёт автозахода на конференции?](#Как_насчёт_автозахода_на_конференции) - * [3.8 Сжатие трафика в Ткаббере](#Сжатие_трафика_в_Ткаббере) - * [3.9 Выделение текста жирным, курсивом и подчёркиванием](#Выделение_текста_жирным_курсивом_и_подчёркиванием) - * [3.10 Ввод "хитрых" юникодных символов](#Ввод_хитрых_юникодных_символов) - * [3.11 Игнор — великая вещь!](#Игнор_-_великая_вещь) - * [3.12 Подтверждения](#Подтверждения) - * [3.13 Удалённое управление](#Удалённое_управление) - * [3.14 Команды Ткаббера](#Команды_Ткаббера) - * [3.15 Скрытие версий клиента и ОС](#Скрытие_версий_клиента_и_ОС) - * [3.16 Как подключить плагин?](#Как_подключить_плагин) - * [3.17 Как уменьшить трафик?](#Как_уменьшить_трафик) - * [3.18 Самостоятельная сборка Старпака](#Самостоятельная_сборка_Старпака) - * [3.19 "Быстрый" Copy/Paste помимо буфера Windows](#Быстрый_Copy_Paste_помимо_буфера_Windows) - * [3.20 Проверка орфографии](#Проверка_орфографии) - * [3.21 Как перенести ростер с сервера на сервер? Импортировать контакты ICQ?](#Как_перенести_ростер_с_сервера_на_сервер_Импортировать_контакты_ICQ) - * [3.22 Как почитать протокол общения "в привате" с участником групчата, которого больше нет в комнате?](#Как_почитать_протокол_общения_в_привате_с_участником_групчата_которого_больше_нет_в_комнате) - * [3.23 Указать причину кика/бана](#Указать_причину_кика_бана) - * [3.24 Блокировать спам с MRIM-гейта](#Блокировать_спам_с_MRIM-гейта) - * [3.25 Конфигурирование конференции](#Конфигурирование_конференции) - * [3.26 Отключить к (нецензурные слова пропущены) splash-окно](#Отключить_к_нецензурные_слова_пропущены_splash-окно) - * [3.27 Подключить Ткаббер через SOCKS-сервер](#Подключить_Ткаббер_через_SOCKS-сервер) - * [3.28 Подключить Ткаббер через Tor, для анонимного использования](#Подключить_Ткаббер_через_Tor_для_анонимного_использования) - * [3.29 Подключиться к Google Talk](#Подключиться_к_Google_Talk) - * [3.30 Победить предупреждение о проблеме с сертификатом сервера?](#Победить_предупреждение_о_проблеме_с_сертификатом_сервера) - * [3.31 Работать с версией из SVN](#Работать_с_версией_из_SVN) - * [3.32 Задолбало выпадающее меню в контекстном меню MUC-юзера](#Задолбало_выпадающее_меню_в_контекстном_меню_MUC-юзера) - * [3.33 Как мне собрать новый tclgpg с googlecode?](#Как_мне_собрать_новый_tclgpg_с_googlecode) - * [3.34 Как настроить работу с плагином OSD?](#Как_настроить_работу_с_плагином_OSD) - * [3.35 Включить интерфейс на другом языке?](#Включить_интерфейс_на_другом_языке) - * [3.36 Изменить и зафиксировать ширину ростера?](#Изменить_и_зафиксировать_ширину_ростера) - * [3.37 Изменить шрифт в окошке ввода сообщения?](#Изменить_шрифт_в_окошке_ввода_сообщения) - * [3.38 Изменить интервал повторного подключения к серверу?](#Изменить_интервал_повторного_подключения_к_серверу) + * [3.1 Настройка Ткаббера (Не найду файл config.tcl)](#Настройка_Ткаббера_Не_найду_файл_config.tcl) + * [3.2 Как настроить "автологин"?](#Как_настроить_автологин) + * [3.3 Работать с RSS](#Работать_с_RSS) + * [3.4 Отправка сообщений по Ctrl-Enter](#Отправка_сообщений_по_Ctrl-Enter) + * [3.5 Отправка сообщений по NumPad Enter](#Отправка_сообщений_по_NumPad_Enter) + * [3.6 Одновременная работа с несколькими аккаунтами](#Одновременная_работа_с_несколькими_аккаунтами) + * [3.7 Как насчёт автозахода на конференции?](#Как_насчёт_автозахода_на_конференции) + * [3.8 Сжатие трафика в Ткаббере](#Сжатие_трафика_в_Ткаббере) + * [3.9 Выделение текста жирным, курсивом и подчёркиванием](#Выделение_текста_жирным_курсивом_и_подчёркиванием) + * [3.10 Ввод "хитрых" юникодных символов](#Ввод_хитрых_юникодных_символов) + * [3.11 Игнор — великая вещь!](#Игнор_-_великая_вещь) + * [3.12 Подтверждения](#Подтверждения) + * [3.13 Удалённое управление](#Удалённое_управление) + * [3.14 Команды Ткаббера](#Команды_Ткаббера) + * [3.15 Скрытие версий клиента и ОС](#Скрытие_версий_клиента_и_ОС) + * [3.16 Как подключить плагин?](#Как_подключить_плагин) + * [3.17 Как уменьшить трафик?](#Как_уменьшить_трафик) + * [3.18 Самостоятельная сборка Старпака](#Самостоятельная_сборка_Старпака) + * [3.19 "Быстрый" Copy/Paste помимо буфера Windows](#Быстрый_Copy_Paste_помимо_буфера_Windows) + * [3.20 Проверка орфографии](#Проверка_орфографии) + * [3.21 Как перенести ростер с сервера на сервер? Импортировать контакты ICQ?](#Как_перенести_ростер_с_сервера_на_сервер_Импортировать_контакты_ICQ) + * [3.22 Как почитать протокол общения "в привате" с участником групчата, которого больше нет в комнате?](#Как_почитать_протокол_общения_в_привате_с_участником_групчата_которого_больше_нет_в_комнате) + * [3.23 Указать причину кика/бана](#Указать_причину_кика_бана) + * [3.24 Блокировать спам с MRIM-гейта](#Блокировать_спам_с_MRIM-гейта) + * [3.25 Конфигурирование конференции](#Конфигурирование_конференции) + * [3.26 Отключить к (нецензурные слова пропущены) splash-окно](#Отключить_к_нецензурные_слова_пропущены_splash-окно) + * [3.27 Подключить Ткаббер через SOCKS-сервер](#Подключить_Ткаббер_через_SOCKS-сервер) + * [3.28 Подключить Ткаббер через Tor, для анонимного использования](#Подключить_Ткаббер_через_Tor_для_анонимного_использования) + * [3.29 Подключиться к Google Talk](#Подключиться_к_Google_Talk) + * [3.30 Победить предупреждение о проблеме с сертификатом сервера?](#Победить_предупреждение_о_проблеме_с_сертификатом_сервера) + * [3.31 Работать с версией из SVN](#Работать_с_версией_из_SVN) + * [3.32 Задолбало выпадающее меню в контекстном меню MUC-юзера](#Задолбало_выпадающее_меню_в_контекстном_меню_MUC-юзера) + * [3.33 Как мне собрать новый tclgpg с googlecode?](#Как_мне_собрать_новый_tclgpg_с_googlecode) + * [3.34 Как настроить работу с плагином OSD?](#Как_настроить_работу_с_плагином_OSD) + * [3.35 Включить интерфейс на другом языке?](#Включить_интерфейс_на_другом_языке) + * [3.36 Изменить и зафиксировать ширину ростера?](#Изменить_и_зафиксировать_ширину_ростера) + * [3.37 Изменить шрифт в окошке ввода сообщения?](#Изменить_шрифт_в_окошке_ввода_сообщения) + * [3.38 Изменить интервал повторного подключения к серверу?](#Изменить_интервал_повторного_подключения_к_серверу) * [4 Всякая всячина](#Всякая_всячина) - * [4.1 Что такое...?](#Что_такое...) - * [4.1.1 Ростер](#Ростер) - * [4.1.2 Ресурс](#Ресурс) - * [4.1.3 Приоритет](#Приоритет) - * [4.1.4 Консоль Ткаббера](#Консоль_Ткаббера) - * [4.1.5 Репозиторий teo](#Репозиторий_teo) - * [4.2 Разное](#Разное) - * [4.2.1 ...а мне ИГРАТЬ охота!!!](#...а_мне_ИГРАТЬ_охота) - * [4.2.2 Старые версии Ткаббера и плагинов](#Старые_версии_Ткаббера_и_плагинов) - * [4.2.3 Работает ли Ткаббер на КПК?](#Работает_ли_Ткаббер_на_КПК) - * [4.2.4 Почему Ткаббер написан именно на Tcl/Tk?](#Почему_Ткаббер_написан_именно_на_Tcl_Tk) - * [4.2.5 Кто убил Лору Палмер? ©](#Кто_убил_Лору_Палмер_©) - * [4.2.6 У вас в конференции топик с ошибкой написан](#У_вас_в_конференции_топик_с_ошибкой_написан) - * [4.2.7 А добавят ли когда-нибудь в Ткаббер...?](#А_добавят_ли_когда-нибудь_в_Ткаббер...) - * [4.3 Вопросы, связанные с протоколом XMPP](#Вопросы_связанные_с_протоколом_XMPP) - * [4.3.1 MUC](#MUC) + * [4.1 Что такое...?](#Что_такое...) + * [4.1.1 Ростер](#Ростер) + * [4.1.2 Ресурс](#Ресурс) + * [4.1.3 Приоритет](#Приоритет) + * [4.1.4 Консоль Ткаббера](#Консоль_Ткаббера) + * [4.1.5 Репозиторий teo](#Репозиторий_teo) + * [4.2 Разное](#Разное) + * [4.2.1 ...а мне ИГРАТЬ охота!!!](#...а_мне_ИГРАТЬ_охота) + * [4.2.2 Старые версии Ткаббера и плагинов](#Старые_версии_Ткаббера_и_плагинов) + * [4.2.3 Работает ли Ткаббер на КПК?](#Работает_ли_Ткаббер_на_КПК) + * [4.2.4 Почему Ткаббер написан именно на Tcl/Tk?](#Почему_Ткаббер_написан_именно_на_Tcl_Tk) + * [4.2.5 Кто убил Лору Палмер? ©](#Кто_убил_Лору_Палмер_©) + * [4.2.6 У вас в конференции топик с ошибкой написан](#У_вас_в_конференции_топик_с_ошибкой_написан) + * [4.2.7 А добавят ли когда-нибудь в Ткаббер...?](#А_добавят_ли_когда-нибудь_в_Ткаббер...) + * [4.3 Вопросы, связанные с протоколом XMPP](#Вопросы_связанные_с_протоколом_XMPP) + * [4.3.1 MUC](#MUC) + * [4.3.1 Кто есть кто в конференции?](#Кто_есть_кто_в_конференции) + * [4.3.1 Не работают инвайты](#Не_работают_инвайты) # Внешний вид и звук [Ткаббер ЧаВо/Внешний вид и звук](Ткаббер_ЧаВо/Внешний_вид_и_звук.md) ## Почему Ткаббер такой страшный? Index: wiki/ru/Ткаббер_ЧаВо/Внешний_вид_и_звук.md ================================================================== --- wiki/ru/Ткаббер_ЧаВо/Внешний_вид_и_звук.md +++ wiki/ru/Ткаббер_ЧаВо/Внешний_вид_и_звук.md @@ -8,22 +8,22 @@ [Ткаббер ЧаВо](../Ткаббер_ЧаВо.md) разделился на несколько статей. В этой статье рассматриваются вопросы касательно внешнего вида Ткаббера (шрифты, цветовые схемы, иконки, аватары) и его работы со звуком. Для удобства даны ссылки на другие тематические страницы ЧаВо. ## Содержание * [1 Внешний вид и звук](#Внешний_вид_и_звук) - * [1.1 Почему Ткаббер такой страшный?](#Почему_Ткаббер_такой_страшный) - * [1.2 Шрифты](#Шрифты) - * [1.2.1 Ввод западноевропейских символов](#Ввод_западноевропейских_символов) - * [1.3 Смайлики: 1) вызов из меню; 2) не подключаются; 3) не хочу их; 4) анимированные](#Смайлики_1_вызов_из_меню_2_не_подключаются_3_не_хочу_их_4_анимированные) - * [1.4 Не видны иконки/фото/и т.д. в JPEG/PNG](#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG) - * [1.5 Цветовые схемы](#Цветовые_схемы) - * [1.6 Цвета сообщений "асечников"](#Цвета_сообщений_асечников) - * [1.7 Поддерживает ли Ткаббер Tile?](#Поддерживает_ли_Ткаббер_Tile) - * [1.8 Поддерживает ли Ткаббер аватары?](#Поддерживает_ли_Ткаббер_аватары) - * [1.9 Регулировка громкости звука](#Регулировка_громкости_звука) - * [1.10 Проигрывание звука в Linux](#Проигрывание_звука_в_Linux) - * [1.11 В старпаке/старките нет звука/поддержки JPEG,PNG](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG) + * [1.1 Почему Ткаббер такой страшный?](#Почему_Ткаббер_такой_страшный) + * [1.2 Шрифты](#Шрифты) + * [1.2.1 Ввод западноевропейских символов](#Ввод_западноевропейских_символов) + * [1.3 Смайлики: 1) вызов из меню; 2) не подключаются; 3) не хочу их; 4) анимированные](#Смайлики_1_вызов_из_меню_2_не_подключаются_3_не_хочу_их_4_анимированные) + * [1.4 Не видны иконки/фото/и т.д. в JPEG/PNG](#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG) + * [1.5 Цветовые схемы](#Цветовые_схемы) + * [1.6 Цвета сообщений "асечников"](#Цвета_сообщений_асечников) + * [1.7 Поддерживает ли Ткаббер Tile?](#Поддерживает_ли_Ткаббер_Tile) + * [1.8 Поддерживает ли Ткаббер аватары?](#Поддерживает_ли_Ткаббер_аватары) + * [1.9 Регулировка громкости звука](#Регулировка_громкости_звука) + * [1.10 Проигрывание звука в Linux](#Проигрывание_звука_в_Linux) + * [1.11 В старпаке/старките нет звука/поддержки JPEG,PNG](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG) * [2 Глюки, возникающие в процессе работы](#Глюки_возникающие_в_процессе_работы) * [3 А как мне...?](#А_как_мне...) * [4 Всякая всячина](#Всякая_всячина) # Внешний вид и звук Index: wiki/ru/Ткаббер_ЧаВо/Глюки.md ================================================================== --- wiki/ru/Ткаббер_ЧаВо/Глюки.md +++ wiki/ru/Ткаббер_ЧаВо/Глюки.md @@ -8,41 +8,44 @@ [Ткаббер ЧаВо](../Ткаббер_ЧаВо.md) разделился на несколько статей. В этой статье разбираются глюки и баги, терзающие Ткаббер и его пользователей. Для удобства даны ссылки на другие тематические страницы ЧаВо. ## Содержание * [1 Глюки, возникающие в процессе работы](#Глюки_возникающие_в_процессе_работы) - * [1.1 Общие вопросы](#Общие_вопросы) - * [1.1.1 Ткаббер и Ufanet](#Ткаббер_и_Ufanet) - * [1.1.2 Долгая загрузка Ткаббера](#Долгая_загрузка_Ткаббера) - * [1.1.3 Ткаббер "виснет" при попытке логина на сервер](#Ткаббер_виснет_при_попытке_логина_на_сервер) - * [1.1.4 Пересылка файлов](#Пересылка_файлов) - * [1.1.5 Ткаббер постоянно держит меня в состоянии "отошёл" ("away")](#Ткаббер_постоянно_держит_меня_в_состоянии_отошёл_away) - * [1.1.6 Не могу приконнектиться к серверу через прокси](#Не_могу_приконнектиться_к_серверу_через_прокси) - * [1.1.7 Keep alive в Ткаббере — возможно ли?](#Keep_alive_в_Ткаббере_-_возможно_ли) - * [1.1.8 Что с грифельной доской?](#Что_с_грифельной_доской) - * [1.1.9 Ткаббер в упор не видит SSL-сертификат для коннекта к серверу](#Ткаббер_в_упор_не_видит_SSL-сертификат_для_коннекта_к_серверу) - * [1.1.10 Не могу отредактировать закладку конференции в ростере](#Не_могу_отредактировать_закладку_конференции_в_ростере) - * [1.1.11 Ткаббер и iChat](#Ткаббер_и_iChat) - * [1.2 Вопросы, связанные с Линукс](#Вопросы_связанные_с_Линукс) - * [1.2.1 Шифрование в Ткаббере: проблемы с **gpgme/tclgpgme**](#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme) - * [1.2.2 В Ubuntu не вводятся русские буквы в Ткаббере, chto delat?](#В_Ubuntu_не_вводятся_русские_буквы_в_Ткаббере_chto_delat) - * [1.2.3 Ткаббер под X Window падает при попытке показать "странные" символы](#Ткаббер_под_X_Window_падает_при_попытке_показать_странные_символы) - * [1.2.4 Не работает вставка по Control-v под X Window](#Не_работает_вставка_по_Control-v_под_X_Window) - * [1.2.5 В Gentoo не работает сворачивание в трей](#В_Gentoo_не_работает_сворачивание_в_трей) - * [1.2.6 Fedora 8 и Tcl/Tk 8.5](#Fedora_8_и_Tcl_Tk_8.5) - * [1.2.7 Обновил тикль до 8.5, но Ткаббер по-прежнему запускается с 8.4](#Обновил_тикль_до_8.5_но_Ткаббер_по-прежнему_запускается_с_8.4) - * [1.2.8 Userinfo в KDE 4.x](#Userinfo_в_KDE_4.x) - * [1.2.9 Диалоговые окна Tk на многоголовом X11-сервере](#Диалоговые_окна_Tk_на_многоголовом_X11-сервере) - * [1.3 Вопросы, связанные с Виндовс](#Вопросы_связанные_с_Виндовс) - * [1.3.1 В старпаке/старките нет звука/поддержки JPEG,PNG/сжатия](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG_сжатия) - * [1.3.2 Не работает браузер под виндами](#Не_работает_браузер_под_виндами) - * [1.3.3 При клике на URL'е в Ткаббере запускается две Оперы и открывают страницу два раза](#При_клике_на_URLе_в_Ткаббере_запускается_две_Оперы_и_открывают_страницу_два_раза) - * [1.3.4 Странное поведение прокрутки содержимого окна чата колесом мыши](#Странное_поведение_прокрутки_содержимого_окна_чата_колесом_мыши) - * [1.3.5 Ошибка: wrong \# args: should be "zlib option data ?...?", что делать?](#Ошибка_wrong_N_args_should_be_zlib_option_data_..._что_делать) - * [1.3.6 Windows, дистрибутив от ActiveState — "падения" при нажатии Alt-любая кнопка в главном окне](#Windows_дистрибутив_от_ActiveState_-_падения_при_нажатии_Alt-любая_кнопка_в_главном_окне) - * [1.3.7 Windows, дистрибутив от ActiveState — "падения" при открытии в фоне окна со смайликом](#Windows_дистрибутив_от_ActiveState_-_падения_при_открытии_в_фоне_окна_со_смайликом) - * [1.3.8 Фатальная ошибка в wish при запуске полноэкранных приложений под Windows](#Фатальная_ошибка_в_wish_при_запуске_полноэкранных_приложений_под_Windows) + * [1.1 Общие вопросы](#Общие_вопросы) + * [1.1.1 Ткаббер и Ufanet](#Ткаббер_и_Ufanet) + * [1.1.2 Долгая загрузка Ткаббера](#Долгая_загрузка_Ткаббера) + * [1.1.3 Ткаббер "виснет" при попытке логина на сервер](#Ткаббер_виснет_при_попытке_логина_на_сервер) + * [1.1.4 Пересылка файлов](#Пересылка_файлов) + * [1.1.5 Ткаббер постоянно держит меня в состоянии "отошёл" ("away")](#Ткаббер_постоянно_держит_меня_в_состоянии_отошёл_away) + * [1.1.6 Не могу приконнектиться к серверу через прокси](#Не_могу_приконнектиться_к_серверу_через_прокси) + * [1.1.7 Keep alive в Ткаббере — возможно ли?](#Keep_alive_в_Ткаббере_-_возможно_ли) + * [1.1.8 Что с грифельной доской?](#Что_с_грифельной_доской) + * [1.1.9 Ткаббер в упор не видит SSL-сертификат для коннекта к серверу](#Ткаббер_в_упор_не_видит_SSL-сертификат_для_коннекта_к_серверу) + * [1.1.10 Не могу отредактировать закладку конференции в ростере](#Не_могу_отредактировать_закладку_конференции_в_ростере) + * [1.1.11 Ткаббер и iChat](#Ткаббер_и_iChat) + * [1.2 Вопросы, связанные с Линукс](#Вопросы_связанные_с_Линукс) + * [1.2.1 Шифрование в Ткаббере: проблемы с **gpgme/tclgpgme**](#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme) + * [1.2.1 Не могу скомпилировать tclgpgme](#Не_могу_скомпилировать_tclgpgme) + * [1.2.1 Ткаббер валится при вводе gpg-пароля](#Ткаббер_валится_при_вводе_gpg-пароля) + * [1.2.2 В Ubuntu не вводятся русские буквы в Ткаббере, chto delat?](#В_Ubuntu_не_вводятся_русские_буквы_в_Ткаббере_chto_delat) + * [1.2.3 Ткаббер под X Window падает при попытке показать "странные" символы](#Ткаббер_под_X_Window_падает_при_попытке_показать_странные_символы) + * [1.2.4 Не работает вставка по Control-v под X Window](#Не_работает_вставка_по_Control-v_под_X_Window) + * [1.2.5 В Gentoo не работает сворачивание в трей](#В_Gentoo_не_работает_сворачивание_в_трей) + * [1.2.6 Fedora 8 и Tcl/Tk 8.5](#Fedora_8_и_Tcl_Tk_8.5) + * [1.2.7 Обновил тикль до 8.5, но Ткаббер по-прежнему запускается с 8.4](#Обновил_тикль_до_8.5_но_Ткаббер_по-прежнему_запускается_с_8.4) + * [1.2.8 Userinfo в KDE 4.x](#Userinfo_в_KDE_4.x) + * [1.2.9 Диалоговые окна Tk на многоголовом X11-сервере](#Диалоговые_окна_Tk_на_многоголовом_X11-сервере) + * [1.3 Вопросы, связанные с Виндовс](#Вопросы_связанные_с_Виндовс) + * [1.3.1 В старпаке/старките нет звука/поддержки JPEG,PNG/сжатия](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG_сжатия) + * [1.3.2 Не работает браузер под виндами](#Не_работает_браузер_под_виндами) + * [1.3.3 При клике на URL'е в Ткаббере запускается две Оперы и открывают страницу два раза](#При_клике_на_URLе_в_Ткаббере_запускается_две_Оперы_и_открывают_страницу_два_раза) + * [1.3.4 Странное поведение прокрутки содержимого окна чата колесом мыши](#Странное_поведение_прокрутки_содержимого_окна_чата_колесом_мыши) + * [1.3.4 Конкретные мыши и их настройки](#Конкретные_мыши_и_их_настройки) + * [1.3.5 Ошибка: wrong \# args: should be "zlib option data ?...?", что делать?](#Ошибка_wrong_N_args_should_be_zlib_option_data_..._что_делать) + * [1.3.6 Windows, дистрибутив от ActiveState — "падения" при нажатии Alt-любая кнопка в главном окне](#Windows_дистрибутив_от_ActiveState_-_падения_при_нажатии_Alt-любая_кнопка_в_главном_окне) + * [1.3.7 Windows, дистрибутив от ActiveState — "падения" при открытии в фоне окна со смайликом](#Windows_дистрибутив_от_ActiveState_-_падения_при_открытии_в_фоне_окна_со_смайликом) + * [1.3.8 Фатальная ошибка в wish при запуске полноэкранных приложений под Windows](#Фатальная_ошибка_в_wish_при_запуске_полноэкранных_приложений_под_Windows) * [2 Внешний вид и звук](#Внешний_вид_и_звук) * [3 А как мне...?](#А_как_мне...) * [4 Всякая всячина](#Всякая_всячина) # Глюки, возникающие в процессе работы Index: wiki/ru/Ткаббер_ЧаВо/Как_мне..._.md ================================================================== --- wiki/ru/Ткаббер_ЧаВо/Как_мне..._.md +++ wiki/ru/Ткаббер_ЧаВо/Как_мне..._.md @@ -8,48 +8,48 @@ [Ткаббер ЧаВо](../Ткаббер_ЧаВо.md) разделился на несколько статей. В этой статье мы поговорим о "затачивании" Ткаббера под конкретные нужды пользователя. Для удобства даны ссылки на другие тематические страницы ЧаВо. ## Содержание * [1 А как мне...?](#А_как_мне...) - * [1.1 Настройка Ткаббера (Не найду файл config.tcl)](#Настройка_Ткаббера_Не_найду_файл_config.tcl) - * [1.2 Как настроить "автологин"?](#Как_настроить_автологин) - * [1.3 Работать с RSS](#Работать_с_RSS) - * [1.4 Отправка сообщений по Ctrl-Enter](#Отправка_сообщений_по_Ctrl-Enter) - * [1.5 Отправка сообщений по NumPad Enter](#Отправка_сообщений_по_NumPad_Enter) - * [1.6 Одновременная работа с несколькими аккаунтами](#Одновременная_работа_с_несколькими_аккаунтами) - * [1.7 Как насчёт автозахода на конференции?](#Как_насчёт_автозахода_на_конференции) - * [1.8 Сжатие трафика в Ткаббере](#Сжатие_трафика_в_Ткаббере) - * [1.9 Выделение текста жирным, курсивом и подчёркиванием](#Выделение_текста_жирным_курсивом_и_подчёркиванием) - * [1.10 Ввод "хитрых" юникодных символов](#Ввод_хитрых_юникодных_символов) - * [1.11 Игнор — великая вещь!](#Игнор_-_великая_вещь) - * [1.12 Подтверждения](#Подтверждения) - * [1.13 Удалённое управление](#Удалённое_управление) - * [1.14 Команды Ткаббера](#Команды_Ткаббера) - * [1.15 Скрытие версий клиента и ОС](#Скрытие_версий_клиента_и_ОС) - * [1.16 Как подключить плагин?](#Как_подключить_плагин) - * [1.17 Как уменьшить трафик?](#Как_уменьшить_трафик) - * [1.18 Самостоятельная сборка Старпака](#Самостоятельная_сборка_Старпака) - * [1.19 "Быстрый" Copy/Paste помимо буфера Windows](#Быстрый_Copy_Paste_помимо_буфера_Windows) - * [1.20 Проверка орфографии](#Проверка_орфографии) - * [1.21 Как перенести ростер с сервера на сервер? Импортировать контакты ICQ?](#Как_перенести_ростер_с_сервера_на_сервер_Импортировать_контакты_ICQ) - * [1.22 Как почитать протокол общения "в привате" с участником групчата, которого больше нет в комнате?](#Как_почитать_протокол_общения_в_привате_с_участником_групчата_которого_больше_нет_в_комнате) - * [1.23 Указать причину кика/бана](#Указать_причину_кика_бана) - * [1.24 Блокировать спам с MRIM-гейта](#Блокировать_спам_с_MRIM-гейта) - * [1.25 Конфигурирование конференции](#Конфигурирование_конференции) - * [1.26 Отключить к (нецензурные слова пропущены) splash-окно](#Отключить_к_нецензурные_слова_пропущены_splash-окно) - * [1.27 Подключить Ткаббер через SOCKS-сервер](#Подключить_Ткаббер_через_SOCKS-сервер) - * [1.28 Подключить Ткаббер через Tor, для анонимного использования](#Подключить_Ткаббер_через_Tor_для_анонимного_использования) - * [1.29 Подключиться к Google Talk](#Подключиться_к_Google_Talk) - * [1.30 Победить предупреждение о проблеме с сертификатом сервера](#Победить_предупреждение_о_проблеме_с_сертификатом_сервера) - * [1.31 Работать с версией из SVN](#Работать_с_версией_из_SVN) - * [1.32 Задолбало выпадающее меню в контекстном меню MUC-юзера](#Задолбало_выпадающее_меню_в_контекстном_меню_MUC-юзера) - * [1.33 Как мне собрать новый tclgpg с googlecode?](#Как_мне_собрать_новый_tclgpg_с_googlecode) - * [1.34 Как настроить работу с плагином OSD?](#Как_настроить_работу_с_плагином_OSD) - * [1.35 Включить другой язык интерфейса?](#Включить_другой_язык_интерфейса) - * [1.36 Изменить и зафиксировать ширину ростера?](#Изменить_и_зафиксировать_ширину_ростера) - * [1.37 Изменить шрифт в окошке ввода сообщения?](#Изменить_шрифт_в_окошке_ввода_сообщения) - * [1.38 Изменить интервал повторного подключения к серверу?](#Изменить_интервал_повторного_подключения_к_серверу) + * [1.1 Настройка Ткаббера (Не найду файл config.tcl)](#Настройка_Ткаббера_Не_найду_файл_config.tcl) + * [1.2 Как настроить "автологин"?](#Как_настроить_автологин) + * [1.3 Работать с RSS](#Работать_с_RSS) + * [1.4 Отправка сообщений по Ctrl-Enter](#Отправка_сообщений_по_Ctrl-Enter) + * [1.5 Отправка сообщений по NumPad Enter](#Отправка_сообщений_по_NumPad_Enter) + * [1.6 Одновременная работа с несколькими аккаунтами](#Одновременная_работа_с_несколькими_аккаунтами) + * [1.7 Как насчёт автозахода на конференции?](#Как_насчёт_автозахода_на_конференции) + * [1.8 Сжатие трафика в Ткаббере](#Сжатие_трафика_в_Ткаббере) + * [1.9 Выделение текста жирным, курсивом и подчёркиванием](#Выделение_текста_жирным_курсивом_и_подчёркиванием) + * [1.10 Ввод "хитрых" юникодных символов](#Ввод_хитрых_юникодных_символов) + * [1.11 Игнор — великая вещь!](#Игнор_-_великая_вещь) + * [1.12 Подтверждения](#Подтверждения) + * [1.13 Удалённое управление](#Удалённое_управление) + * [1.14 Команды Ткаббера](#Команды_Ткаббера) + * [1.15 Скрытие версий клиента и ОС](#Скрытие_версий_клиента_и_ОС) + * [1.16 Как подключить плагин?](#Как_подключить_плагин) + * [1.17 Как уменьшить трафик?](#Как_уменьшить_трафик) + * [1.18 Самостоятельная сборка Старпака](#Самостоятельная_сборка_Старпака) + * [1.19 "Быстрый" Copy/Paste помимо буфера Windows](#Быстрый_Copy_Paste_помимо_буфера_Windows) + * [1.20 Проверка орфографии](#Проверка_орфографии) + * [1.21 Как перенести ростер с сервера на сервер? Импортировать контакты ICQ?](#Как_перенести_ростер_с_сервера_на_сервер_Импортировать_контакты_ICQ) + * [1.22 Как почитать протокол общения "в привате" с участником групчата, которого больше нет в комнате?](#Как_почитать_протокол_общения_в_привате_с_участником_групчата_которого_больше_нет_в_комнате) + * [1.23 Указать причину кика/бана](#Указать_причину_кика_бана) + * [1.24 Блокировать спам с MRIM-гейта](#Блокировать_спам_с_MRIM-гейта) + * [1.25 Конфигурирование конференции](#Конфигурирование_конференции) + * [1.26 Отключить к (нецензурные слова пропущены) splash-окно](#Отключить_к_нецензурные_слова_пропущены_splash-окно) + * [1.27 Подключить Ткаббер через SOCKS-сервер](#Подключить_Ткаббер_через_SOCKS-сервер) + * [1.28 Подключить Ткаббер через Tor, для анонимного использования](#Подключить_Ткаббер_через_Tor_для_анонимного_использования) + * [1.29 Подключиться к Google Talk](#Подключиться_к_Google_Talk) + * [1.30 Победить предупреждение о проблеме с сертификатом сервера](#Победить_предупреждение_о_проблеме_с_сертификатом_сервера) + * [1.31 Работать с версией из SVN](#Работать_с_версией_из_SVN) + * [1.32 Задолбало выпадающее меню в контекстном меню MUC-юзера](#Задолбало_выпадающее_меню_в_контекстном_меню_MUC-юзера) + * [1.33 Как мне собрать новый tclgpg с googlecode?](#Как_мне_собрать_новый_tclgpg_с_googlecode) + * [1.34 Как настроить работу с плагином OSD?](#Как_настроить_работу_с_плагином_OSD) + * [1.35 Включить другой язык интерфейса?](#Включить_другой_язык_интерфейса) + * [1.36 Изменить и зафиксировать ширину ростера?](#Изменить_и_зафиксировать_ширину_ростера) + * [1.37 Изменить шрифт в окошке ввода сообщения?](#Изменить_шрифт_в_окошке_ввода_сообщения) + * [1.38 Изменить интервал повторного подключения к серверу?](#Изменить_интервал_повторного_подключения_к_серверу) * [2 Внешний вид и звук](#Внешний_вид_и_звук) * [3 Глюки, возникающие в процессе работы](#Глюки_возникающие_в_процессе_работы) * [4 Всякая всячина](#Всякая_всячина) # А как мне...? Index: wiki/ru/Ткаббер_ЧаВо/Разное.md ================================================================== --- wiki/ru/Ткаббер_ЧаВо/Разное.md +++ wiki/ru/Ткаббер_ЧаВо/Разное.md @@ -8,26 +8,28 @@ [Ткаббер ЧаВо](../Ткаббер_ЧаВо.md) разделился на несколько статей. Здесь рассматриваются вопросы разного (подчас совершенно странного) характера. Для удобства даны ссылки на другие тематические страницы ЧаВо. ## Содержание * [1 Всякая всячина](#Всякая_всячина) - * [1.1 Что такое...?](#Что_такое...) - * [1.1.1 Ростер](#Ростер) - * [1.1.2 Ресурс](#Ресурс) - * [1.1.3 Приоритет](#Приоритет) - * [1.1.4 Консоль Ткаббера](#Консоль_Ткаббера) - * [1.1.5 Репозиторий teo](#Репозиторий_teo) - * [1.2 Разное](#Разное) - * [1.2.1 ...а мне ИГРАТЬ охота!!!](#...а_мне_ИГРАТЬ_охота) - * [1.2.2 Старые версии Ткаббера и плагинов](#Старые_версии_Ткаббера_и_плагинов) - * [1.2.3 Работает ли Ткаббер на КПК?](#Работает_ли_Ткаббер_на_КПК) - * [1.2.4 Почему Ткаббер написан именно на Tcl/Tk?](#Почему_Ткаббер_написан_именно_на_Tcl_Tk) - * [1.2.5 Кто убил Лору Палмер? ©](#Кто_убил_Лору_Палмер_©) - * [1.2.6 У вас в конференции топик с ошибкой написан](#У_вас_в_конференции_топик_с_ошибкой_написан) - * [1.2.7 А добавят ли когда-нибудь в Ткаббер...?](#А_добавят_ли_когда-нибудь_в_Ткаббер...) - * [1.3 Вопросы, связанные с протоколом XMPP](#Вопросы_связанные_с_протоколом_XMPP) - * [1.3.1 MUC](#MUC) + * [1.1 Что такое...?](#Что_такое...) + * [1.1.1 Ростер](#Ростер) + * [1.1.2 Ресурс](#Ресурс) + * [1.1.3 Приоритет](#Приоритет) + * [1.1.4 Консоль Ткаббера](#Консоль_Ткаббера) + * [1.1.5 Репозиторий teo](#Репозиторий_teo) + * [1.2 Разное](#Разное) + * [1.2.1 ...а мне ИГРАТЬ охота!!!](#...а_мне_ИГРАТЬ_охота) + * [1.2.2 Старые версии Ткаббера и плагинов](#Старые_версии_Ткаббера_и_плагинов) + * [1.2.3 Работает ли Ткаббер на КПК?](#Работает_ли_Ткаббер_на_КПК) + * [1.2.4 Почему Ткаббер написан именно на Tcl/Tk?](#Почему_Ткаббер_написан_именно_на_Tcl_Tk) + * [1.2.5 Кто убил Лору Палмер? ©](#Кто_убил_Лору_Палмер_©) + * [1.2.6 У вас в конференции топик с ошибкой написан](#У_вас_в_конференции_топик_с_ошибкой_написан) + * [1.2.7 А добавят ли когда-нибудь в Ткаббер...?](#А_добавят_ли_когда-нибудь_в_Ткаббер...) + * [1.3 Вопросы, связанные с протоколом XMPP](#Вопросы_связанные_с_протоколом_XMPP) + * [1.3.1 MUC](#MUC) + * [1.3.1 Кто есть кто в конференции?](#Кто_есть_кто_в_конференции) + * [1.3.1 Не работают инвайты](#Не_работают_инвайты) * [2 Внешний вид и звук](#Внешний_вид_и_звук) * [3 Глюки, возникающие в процессе работы](#Глюки_возникающие_в_процессе_работы) * [4 А как мне...?](#А_как_мне...) # Всякая всячина Index: wiki/ru/Ткаббер_и_DNS.md ================================================================== --- wiki/ru/Ткаббер_и_DNS.md +++ wiki/ru/Ткаббер_и_DNS.md @@ -9,13 +9,13 @@ * [1 Место и роль DNS в процессе соединения с сервером](#Место_и_роль_DNS_в_процессе_соединения_с_сервером) * [2 Первая проблема: "TCP vs UDP"](#Первая_проблема_TCP_vs_UDP) * [3 Вторая проблема: UDP блокируется файрволом](#Вторая_проблема_UDP_блокируется_файрволом) * [4 Ручное разрешение записей DNS](#Ручное_разрешение_записей_DNS) - * [4.1 A-записи](#A-записи) - * [4.2 SRV-записи](#SRV-записи) - * [4.3 TXT-записи для HTTP-poll](#TXT-записи_для_HTTP-poll) + * [4.1 A-записи](#A-записи) + * [4.2 SRV-записи](#SRV-записи) + * [4.3 TXT-записи для HTTP-poll](#TXT-записи_для_HTTP-poll) # Место и роль DNS в процессе соединения с сервером Согласно [RFC \#3920](http://www.xmpp.org/rfcs/rfc3920.html), Ткаббер начинает долгую дорогу в дюнах своего соединения, пытаясь выполнить [SRV](ftp://ftp.isi.edu/in-notes/rfc2782.txt)-запрос к DNS. Запрос этот служит, чтобы выяснить, какой именно компьютер обслуживает _XMPP-домен,_ в котором вы владеете учётной записью. Другими словами, `jabber.ru` в JID'е `vasya@jabber.ru` означает не сервер, а домен. Сервер может иметь совершенно другое имя в DNS, и самих серверов у домена может быть несколько (у jabber.ru, например, их два). Далее Ткабберу может понадобиться выполнить ещё минимум один запрос, чтобы разрешить полученное на первом этапе имя сервера в его IP-адрес. Index: wiki/ru/Удалённое_управление_с_помощью_send.md ================================================================== --- wiki/ru/Удалённое_управление_с_помощью_send.md +++ wiki/ru/Удалённое_управление_с_помощью_send.md @@ -16,22 +16,22 @@ ## Содержание * [1 Управление клиентом локально](#Управление_клиентом_локально) * [2 Управление клиентом удаленно](#Управление_клиентом_удаленно) * [3 Определение основных переменных](#Определение_основных_переменных) - * [3.1 $myconnid](#$myconnid) - * [3.2 $mychatid](#$mychatid) + * [3.1 $myconnid](#$myconnid) + * [3.2 $mychatid](#$mychatid) * [4 Выполнение основных действий](#Выполнение_основных_действий) - * [4.1 смена профиля](#смена_профиля) - * [4.2 Login (подключится к серверу)](#Login_подключится_к_серверу) - * [4.3 Logout (оборвать соединение)](#Logout_оборвать_соединение) - * [4.4 Join (войти в конференцию)](#Join_войти_в_конференцию) - * [4.5 Leave (выйти из конференции)](#Leave_выйти_из_конференции) - * [4.6 смена ника](#смена_ника) - * [4.7 отправка сообщения](#отправка_сообщения) - * [4.8 смена статуса](#смена_статуса) - * [4.9 смена состояния](#смена_состояния) + * [4.1 смена профиля](#смена_профиля) + * [4.2 Login (подключится к серверу)](#Login_подключится_к_серверу) + * [4.3 Logout (оборвать соединение)](#Logout_оборвать_соединение) + * [4.4 Join (войти в конференцию)](#Join_войти_в_конференцию) + * [4.5 Leave (выйти из конференции)](#Leave_выйти_из_конференции) + * [4.6 смена ника](#смена_ника) + * [4.7 отправка сообщения](#отправка_сообщения) + * [4.8 смена статуса](#смена_статуса) + * [4.9 смена состояния](#смена_состояния) * [5 Управление клиентом из скрипта](#Управление_клиентом_из_скрипта) * [6 См. также](#См._также) ## Управление клиентом локально DELETED wiki/ru/Установка_и_настройка_в_Ubuntu.md Index: wiki/ru/Установка_и_настройка_в_Ubuntu.md ================================================================== --- wiki/ru/Установка_и_настройка_в_Ubuntu.md +++ /dev/null @@ -1,28 +0,0 @@ -[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Установка_и_настройка_в_Ubuntu/index.html) - -# Установка и настройка в Ubuntu - -Материал из Tkabber Wiki - -## Быстрая настройка шрифтов - - echo 'deb http://people.debian.org/~sgolovan/debian/ lenny main' | sudo tee -a /etc/apt/sources.list - echo 'deb-src http://people.debian.org/~sgolovan/debian/ lenny main' | sudo tee -a /etc/apt/sources.list && sudo apt-get update - -введите пароль и продолжайте - - sudo apt-get install tkabber tkabber-plugins tk8.5 libsnack2 tktray msttcorefonts - -и это - - sudo update-alternatives --config wish - -нажмите цифорку соответствующую пункту "/usr/bin/wish8.5" а потом на Enter и -используем. - -теперь ваш tkabber установлен и в убунте у него нормальные шрифты. и вам почти -не пришлось ничего читать :) - -Если вам не помогло это руководство, или у вас возникли вопросы, то смело -нажимайте на "Обсуждение" вверху страницы. и опишите в чём именно у вас -возникли трудности. Index: wiki/ru/Участник_Bigote.md ================================================================== --- wiki/ru/Участник_Bigote.md +++ wiki/ru/Участник_Bigote.md @@ -6,27 +6,27 @@ Материал из Tkabber Wiki ## Содержание * [1 По-русски](#По-русски) - * [1.1 Краткие биографические сведения](#Краткие_биографические_сведения) - * [1.2 Языки](#Языки) - * [1.3 Компьютерный опыт](#Компьютерный_опыт) - * [1.4 Творчество и хобби](#Творчество_и_хобби) - * [1.5 Контакты](#Контакты) + * [1.1 Краткие биографические сведения](#Краткие_биографические_сведения) + * [1.2 Языки](#Языки) + * [1.3 Компьютерный опыт](#Компьютерный_опыт) + * [1.4 Творчество и хобби](#Творчество_и_хобби) + * [1.5 Контакты](#Контакты) * [2 In English](#In_English) - * [2.1 Short Bio](#Short_Bio) - * [2.2 Languages](#Languages) - * [2.3 Computer experience](#Computer_experience) - * [2.4 Creativity and Hobbies](#Creativity_and_Hobbies) - * [2.5 Contacts](#Contacts) + * [2.1 Short Bio](#Short_Bio) + * [2.2 Languages](#Languages) + * [2.3 Computer experience](#Computer_experience) + * [2.4 Creativity and Hobbies](#Creativity_and_Hobbies) + * [2.5 Contacts](#Contacts) * [3 En español](#En_español) - * [3.1 Nota biográfica](#Nota_biográfica) - * [3.2 Idiomas](#Idiomas) - * [3.3 Experiencia con los ordenadores](#Experiencia_con_los_ordenadores) - * [3.4 Creatividad y hobby](#Creatividad_y_hobby) - * [3.5 Contactos](#Contactos) + * [3.1 Nota biográfica](#Nota_biográfica) + * [3.2 Idiomas](#Idiomas) + * [3.3 Experiencia con los ordenadores](#Experiencia_con_los_ordenadores) + * [3.4 Creatividad y hobby](#Creatividad_y_hobby) + * [3.5 Contactos](#Contactos) # По-русски ## Краткие биографические сведения * Ф.И.О.: Юдин Сергей Анатольевич. Index: wiki/ru/Участник_Feez.md ================================================================== --- wiki/ru/Участник_Feez.md +++ wiki/ru/Участник_Feez.md @@ -10,47 +10,47 @@ * Языки: Русский, Esperanto, English ## Содержание * [1 Содержание](#Содержание) - * [1.1 Теория](#Теория) - * [1.2 Статьи](#Статьи) - * [1.3 Разработка](#Разработка) - * [1.4 Практика](#Практика) - * [1.5 Запчасти](#Запчасти) - * [1.6 Обсуждения](#Обсуждения) - * [1.7 Cлужебные](#Cлужебные) + * [1.1 [Теория](Теория.md)](#ТеорияТеория.md) + * [1.2 [Статьи](Теория.md#Другие_статьи)](#СтатьиТеория.mdNДругие_статьи) + * [1.3 [Разработка](Разработка.md)](#РазработкаРазработка.md) + * [1.4 [Практика](Практика.md)](#ПрактикаПрактика.md) + * [1.5 Запчасти](#Запчасти) + * [1.6 Обсуждения](#Обсуждения) + * [1.7 Cлужебные](#Cлужебные) ## Содержание (для быстрого поиска) -### [Теория](Теория.md) +### [Теория](Теория.md) * [Терминология](Терминология.md) * [о Ткаббере](Ткаббер_-_чемпион_.md) * [Начинающим](Начинающим.md) * [Настройка Ткаббера: азы и глубже](Настройка_Ткаббера__азы_и_глубже.md) -### [Статьи](Теория.md#Другие_статьи) +### [Статьи](Теория.md#Другие_статьи) * [Пересылка файлов: теория](Пересылка_файлов__теория.md) * [Удалённое управление с помощью send](Удалённое_управление_с_помощью_send.md) * [Шифрование в Ткаббере](Шифрование_в_Ткаббере.md) * [Ткаббер наизнанку](Ткаббер_наизнанку.md) -### [Разработка](Разработка.md) +### [Разработка](Разработка.md) * [Wish и русская раскладка в Windows](Wish_и_русская_раскладка_в_Windows.md) * [MUC Ignore](MUC_Ignore.md) * [Nick coloring](Nick_coloring.md) * [Config dir](Config_dir.md) * [Спамодавка списками приватности](Спамодавка_списками_приватности.md) * [Новый вид Tk в 8.5](Новый_вид_Tk_в_8.5.md) -### [Практика](Практика.md) +### [Практика](Практика.md) * [Ткаббер ЧаВо](Ткаббер_ЧаВо.md) * [Смайлики и аватары](Смайлики_и_аватары.md) * [Цветовые темы и пиктограммы](Цветовые_темы_и_пиктограммы.md) * [Проблемы со звуком](Проблемы_со_звуком.md) Index: wiki/ru/Файл_конфигурации.md ================================================================== --- wiki/ru/Файл_конфигурации.md +++ wiki/ru/Файл_конфигурации.md @@ -10,21 +10,21 @@ Если рабочие программные файлы можно сравнить с мотором Ткаббера, то файл конфигурации - это его рулевая система. В нём хранятся все настройки, мыслимые и немыслимые (если вы хорошо знаете "тикль", то можете сами дописывать что-нибудь новое, и пределы ограничиваются лишь возможностями языка и вашими усердием, знаниями и фантазией). Вы можете написать свой собственный конфиг, а можете использовать опыт других. В этой статье мы рассмотрим четыре конфига, доступные в директории примеров **/usr/share/tkabber/examples**: config.tcl, teo-config.tcl, mtr-config.tcl, badlop-config.tcl. Порядок выбран именно такой - от простого к сложному, хотя возможно, Windows-пользователям захочется побыстрее прочитать про конфиг от **badlop** - он не только "кросс-платформенный", но и вообще весьма разработан. Но если вы новичок, и все эти непонятные строчки в конфигах вас пугают, советуем двигаться постепенно. ## Содержание * [1 Config.tcl](#Config.tcl) - * [1.1 Настройка параметров логина](#Настройка_параметров_логина) - * [1.2 Внешний вид](#Внешний_вид) - * [1.2.1 Цветовые схемы](#Цветовые_схемы) - * [1.2.2 Всплывающие подсказки](#Всплывающие_подсказки) - * [1.2.3 Работа с ссылками](#Работа_с_ссылками) - * [1.2.4 Аватары и смайлики](#Аватары_и_смайлики) + * [1.1 Настройка параметров логина](#Настройка_параметров_логина) + * [1.2 Внешний вид](#Внешний_вид) + * [1.2.1 Цветовые схемы](#Цветовые_схемы) + * [1.2.2 Всплывающие подсказки](#Всплывающие_подсказки) + * [1.2.3 Работа с ссылками](#Работа_с_ссылками) + * [1.2.4 Аватары и смайлики](#Аватары_и_смайлики) * [2 Teo-config.tcl](#Teo-config.tcl) * [3 MTR-config.tcl](#MTR-config.tcl) * [4 Badlop-config.tcl](#Badlop-config.tcl) - * [4.1 Badlop-config-home.tcl](#Badlop-config-home.tcl) - * [4.2 Собственно badlop-config.tcl](#Собственно_badlop-config.tcl) + * [4.1 Badlop-config-home.tcl](#Badlop-config-home.tcl) + * [4.2 Собственно badlop-config.tcl](#Собственно_badlop-config.tcl) * [5 Попытка объяснить конфигурирование Tkabber'a с другой стороны](#Попытка_объяснить_конфигурирование_Tkabbera_с_другой_стороны) # Config.tcl Этот конфиг создан автором Ткаббера - Алексеем Щепиным (**[xmpp:aleksey@jabber.ru](xmpp:aleksey@jabber.ru)**). Он довольно простой и содержит только основные настройки. Для начала в самый раз. Index: wiki/ru/Цветовые_темы_и_пиктограммы.md ================================================================== --- wiki/ru/Цветовые_темы_и_пиктограммы.md +++ wiki/ru/Цветовые_темы_и_пиктограммы.md @@ -8,16 +8,16 @@ На этой странице будут выкладываться файлы самодельных цветовых схем (xrdb) и наборы пиктограмм для ростера, тулбара и прочих мест, где в Ткаббере используются иконки. ## Содержание * [1 Пиктограммы](#Пиктограммы) - * [1.1 Quote](#Quote) - * [1.2 Classic](#Classic) - * [1.3 Quake 3 Arena (q3a)](#Quake_3_Arena_q3a) - * [1.4 2Stars](#2Stars) - * [1.5 Lamps](#Lamps) - * [1.6 Stars](#Stars) + * [1.1 Quote](#Quote) + * [1.2 Classic](#Classic) + * [1.3 Quake 3 Arena (q3a)](#Quake_3_Arena_q3a) + * [1.4 2Stars](#2Stars) + * [1.5 Lamps](#Lamps) + * [1.6 Stars](#Stars) # Пиктограммы Чтобы использовать наборы иконок, надо распаковать их в каталог ~/.tkabber/pixmaps (или его аналог в Windows %APPDATA%\\Tkabber\\pixmaps). Затем перезапустите Ткаббер и идите в **Настройки → Main Interface**. Опция выбора текущей темы находится почти в самом низу. Выбирайте нужную и применяйте изменения — иконки сразу поменяются на выбранные. Если вы собираетесь использовать пиктограммы, выполненные в формате, отличном от [GIF](http://ru.wikipedia.org/wiki/GIF), то у вас должен стоять пакет [Img](http://wiki.tcl.tk/Img). Это не проблема, если у вас установлена полная версия интерпретатора Tcl/Tk, если же вы счастливый обладатель старпака, то вам [сюда](0.9.x/ЧаВо.md#В_старпаке_старките_нет_звука_поддержки_JPEGPNG_сжатия); Index: wiki/ru/Чебуратор.md ================================================================== --- wiki/ru/Чебуратор.md +++ wiki/ru/Чебуратор.md @@ -12,42 +12,42 @@ ## Содержание * [1 Из чего состоит](#Из_чего_состоит) * [2 Идея работы конфигуратора](#Идея_работы_конфигуратора) * [3 Как выглядит](#Как_выглядит) - * [3.1 Цветовая схема](#Цветовая_схема) - * [3.1.1 Fixer](#Fixer) - * [3.1.2 Bigote](#Bigote) - * [3.1.3 Kostix](#Kostix) - * [3.1.4 Bigote](#Bigote) - * [3.2 Набор иконок ростера](#Набор_иконок_ростера) - * [3.2.1 Fixer](#Fixer) - * [3.2.2 Bigote](#Bigote) - * [3.2.3 Archimed](#Archimed) - * [3.2.4 Bigote](#Bigote) - * [3.3 Звуковая схема](#Звуковая_схема) - * [3.3.1 Fixer](#Fixer) - * [3.3.2 Bigote](#Bigote) - * [3.4 Выбор шрифта](#Выбор_шрифта) - * [3.5 Подтверждение](#Подтверждение) - * [3.5.1 Fixer](#Fixer) - * [3.5.2 Bigote](#Bigote) - * [3.5.3 Archimed](#Archimed) - * [3.5.4 Bigote](#Bigote) - * [3.6 Параметры логина](#Параметры_логина) - * [3.7 Параметры передачи файлов](#Параметры_передачи_файлов) - * [3.8 Показ аватар](#Показ_аватар) + * [3.1 Цветовая схема](#Цветовая_схема) + * [3.1.1 Fixer](#Fixer) + * [3.1.2 Bigote](#Bigote) + * [3.1.3 [Kostix](Участник_Kostix.md)](#KostixУчастник_Kostix.md) + * [3.1.4 Bigote](#Bigote) + * [3.2 Набор иконок ростера](#Набор_иконок_ростера) + * [3.2.1 Fixer](#Fixer) + * [3.2.2 Bigote](#Bigote) + * [3.2.3 Archimed](#Archimed) + * [3.2.4 Bigote](#Bigote) + * [3.3 Звуковая схема](#Звуковая_схема) + * [3.3.1 Fixer](#Fixer) + * [3.3.2 Bigote](#Bigote) + * [3.4 Выбор шрифта](#Выбор_шрифта) + * [3.5 Подтверждение](#Подтверждение) + * [3.5.1 Fixer](#Fixer) + * [3.5.2 Bigote](#Bigote) + * [3.5.3 Archimed](#Archimed) + * [3.5.4 Bigote](#Bigote) + * [3.6 Параметры логина](#Параметры_логина) + * [3.7 Параметры передачи файлов](#Параметры_передачи_файлов) + * [3.8 Показ аватар](#Показ_аватар) * [4 Завершение](#Завершение) - * [4 Archimed](#Archimed) + * [4 Archimed](#Archimed) * [5 "Умный" конфигуратор](#Умный_конфигуратор) - * [5 Archimed](#Archimed) - * [5 Kostix](#Kostix) - * [5 Bigote](#Bigote) + * [5 Archimed](#Archimed) + * [5 [Kostix](Участник_Kostix.md)](#KostixУчастник_Kostix.md) + * [5 Bigote](#Bigote) * [6 Остальным участникам обсуждения](#Остальным_участникам_обсуждения) * [7 Конфигуратор на основе xml](#Конфигуратор_на_основе_xml) - * [7 Kostix](#Kostix) - * [7 Archimed](#Archimed) + * [7 [Kostix](Участник_Kostix.md)](#KostixУчастник_Kostix.md) + * [7 Archimed](#Archimed) * [8 Переконфигуратор на основе плагинов****](#Переконфигуратор_на_основе_плагинов) # Из чего состоит * Файл: configurator.tcl * Подкаталог к нему — для скриншотов, файлов мессаджей на разных языках и прочего барахла; может, сам файл имеет смысл в этот каталог засунуть). @@ -68,11 +68,11 @@ ### Bigote А почему для \*nix тёмную? Типа пусть глаза ломают? Я ведь светлую тему не просто так выбрал, а из соображений эргономики ;) -### [Kostix](Участник_Kostix.md) +### [Kostix](Участник_Kostix.md) Никаких тем по дефолту! Повторю ещё раз: @@ -203,11 +203,11 @@ ### Archimed Нужно условно структурировать файл **config.tcl**, например, как конфиг от Badlop. Для простоты, если опция будет находится не на своём месте - нещадно её комментировать. В комментариях проставлять идентификатор опции. -### [Kostix](Участник_Kostix.md) +### [Kostix](Участник_Kostix.md) Господа! Забудьте уже про **config.tcl**! У Ткаббера есть механизм Customize, который: @@ -251,11 +251,11 @@ И так для каждой опции. Интерфейс конфигуратора генерится автоматически при запуске. Соответственно, появляется гибкая система настройки конфигуратора. Например можно сделать несколько уровней (beginner, intermediate, advanced) с разным количеством опций. Конечно протокол еще требует обсуждения, но зачатки я здесь указал. Готов приступит к работе при одобрении данной идеи. P.S.: Если где накосячил с xml, не пинайте сильно. :) Я мало с ним знаком. [eXire](Участник_EXire.md) -### [Kostix](Участник_Kostix.md) +### [Kostix](Участник_Kostix.md) Вспоминаем старика Оккама и идём читать [эту статью](http://www.defmacro.org/ramblings/lisp.html), имея в виду, что тикль умеет всё то же самое, что и LISP, только его код не является S-expressions, а в остальном — позволяет натурально реализовать все идеи, изложенные в статье. Однако, см. про Customize в разделе "Умный" конфигуратор. Index: wiki/ru/Шрифты.md ================================================================== --- wiki/ru/Шрифты.md +++ wiki/ru/Шрифты.md @@ -13,33 +13,33 @@ * [1 Предисловие](#Предисловие) * [2 Где и как Ткаббер получает шрифты](#Где_и_как_Ткаббер_получает_шрифты) * [3 Что настраивать](#Что_настраивать) * [4 Как настраивать](#Как_настраивать) - * [4.1 Настройка системы](#Настройка_системы) - * [4.1.1 Windows](#Windows) - * [4.1.2 Xft/fontconfig](#Xft_fontconfig) - * [4.1.3 XRDB](#XRDB) - * [4.2 Настройка Ткаббера](#Настройка_Ткаббера) - * [4.2.1 Опции конфигурации](#Опции_конфигурации) - * [4.2.2 База данных опций Tk](#База_данных_опций_Tk) - * [4.3 Спецификации шрифтов Tk](#Спецификации_шрифтов_Tk) - * [4.3.1 "Программное имя" шрифта](#Программное_имя_шрифта) - * [4.3.2 Имя системного шрифта](#Имя_системного_шрифта) - * [4.3.3 "Иксовый" формат](#Иксовый_формат) - * [4.3.4 "Свободный" формат](#Свободный_формат) - * [4.3.5 Формат "пары опция/значение"](#Формат_пары_опция_значение) - * [4.4 Проблемы не-XLFD спецификаций в X Window](#Проблемы_не-XLFD_спецификаций_в_X_Window) - * [4.5 Тонкая настройка шрифта интерфейса](#Тонкая_настройка_шрифта_интерфейса) - * [4.6 Быстрый подбор шрифтов](#Быстрый_подбор_шрифтов) - * [4.6.1 Шрифт интерфейса](#Шрифт_интерфейса) - * [4.6.2 Шрифт окон чата и ростера](#Шрифт_окон_чата_и_ростера) - * [4.6.3 Немножко хардкора](#Немножко_хардкора) - * [4.7 Другие полезные средства](#Другие_полезные_средства) + * [4.1 Настройка системы](#Настройка_системы) + * [4.1.1 Windows](#Windows) + * [4.1.2 Xft/fontconfig](#Xft_fontconfig) + * [4.1.3 XRDB](#XRDB) + * [4.2 Настройка Ткаббера](#Настройка_Ткаббера) + * [4.2.1 Опции конфигурации](#Опции_конфигурации) + * [4.2.2 База данных опций Tk](#База_данных_опций_Tk) + * [4.3 Спецификации шрифтов Tk](#Спецификации_шрифтов_Tk) + * [4.3.1 "Программное имя" шрифта](#Программное_имя_шрифта) + * [4.3.2 Имя системного шрифта](#Имя_системного_шрифта) + * [4.3.3 "Иксовый" формат](#Иксовый_формат) + * [4.3.4 "Свободный" формат](#Свободный_формат) + * [4.3.5 Формат "пары опция/значение"](#Формат_пары_опция_значение) + * [4.4 Проблемы не-XLFD спецификаций в X Window](#Проблемы_не-XLFD_спецификаций_в_X_Window) + * [4.5 Тонкая настройка шрифта интерфейса](#Тонкая_настройка_шрифта_интерфейса) + * [4.6 Быстрый подбор шрифтов](#Быстрый_подбор_шрифтов) + * [4.6.1 Шрифт интерфейса](#Шрифт_интерфейса) + * [4.6.2 Шрифт окон чата и ростера](#Шрифт_окон_чата_и_ростера) + * [4.6.3 Немножко хардкора](#Немножко_хардкора) + * [4.7 Другие полезные средства](#Другие_полезные_средства) * [5 Подводные камни](#Подводные_камни) * [6 Примечания](#Примечания) - * [6.1 Борьба с антиалиасингом в Xft](#Борьба_с_антиалиасингом_в_Xft) + * [6.1 Борьба с антиалиасингом в Xft](#Борьба_с_антиалиасингом_в_Xft) # Предисловие [Tk](http://en.wikipedia.org/wiki/Tk (framework)), который используется Ткаббером для создания GUI, является жертвой "true-unix-way" гибкости, которую в него вложили, глядя на [Xt](http://en.wikipedia.org/wiki/Intrinsics), — _настраивать у него можно практически **любые аспекты интерфейса** по отдельности, включая их шрифты._ К сожалению, бесплатно такие вещи не даются, и для владения этим предметом нужно понимать, как работает [база данных опций Tk](База_данных_опций_Tk.md) (и родственная ей [XRDB](XRDB.md) в X Window System). Масла в огонь подливает и тот факт, что у большого количества пользователей систем, основанных на X Window (Linux, xBSD и т.п.), возникают проблемы со шрифтами в Ткаббере, поскольку они (пользователи) запускают его в окружениях, сплошь основанных на [GTK](http://www.gtk.org/) ([GNOME](http://www.gnome.org)) или [Qt](http://trolltech.com/products/qt) ([KDE](http://www.kde.org)), которые имеют свои собственные, глобальные в пределах "десктопа", системы управления шрифтами, "вражеские" для всех других систем поддержки GUI. Здесь мы не будем развивать эту тему — за подробностями обращайтесь к статье [Особенности реализации](Особенности_реализации.md). Index: wiki/uk/Tkabber_Wiki_Довідка.md ================================================================== --- wiki/uk/Tkabber_Wiki_Довідка.md +++ wiki/uk/Tkabber_Wiki_Довідка.md @@ -15,25 +15,28 @@ ## Зміст * [1 Якщо ви не працювали з вікі раніше](#Якщо_ви_не_працювали_з_вікі_раніше) * [2 Тепер про оформлення](#Тепер_про_оформлення) - * [2.1 Для авторів нових статей](#Для_авторів_нових_статей) - * [2.1.1 Застосування відбою пробілом](#Застосування_відбою_пробілом) - * [2.1.2 Застосування HTML](#Застосування_HTML) - * [2.1.3 Застосування тега **\**](#Застосування_тега_tt) - * [2.1.4 Застосування жирного шрифту](#Застосування_жирного_шрифту) - * [2.1.5 Застосування похилого шрифту](#Застосування_похилого_шрифту) - * [2.1.6 Вживання смайликів у тексті](#Вживання_смайликів_у_тексті) - * [2.1.7 Інші елементи оформлення](#Інші_елементи_оформлення) - * [2.1.8 Пісочниця](#Пісочниця) - * [2.2 Перекладачам](#Перекладачам) - * [2.2.1 Що треба робити при перекладі на нову мову з нуля](#Що_треба_робити_при_перекладі_на_нову_мову_з_нуля) - * [2.2.2 Переклад на рідну мову](#Переклад_на_рідну_мову) - * [2.2.3 Переклад на чужу мову](#Переклад_на_чужу_мову) - * [2.2.4 Переклад меню](#Переклад_меню) - * [2.2.5 Локалізація Ткаббера](#Локалізація_Ткаббера) + * [2.1 Для авторів нових статей](#Для_авторів_нових_статей) + * [2.1.1 Застосування відбою пробілом](#Застосування_відбою_пробілом) + * [2.1.2 Застосування HTML](#Застосування_HTML) + * [2.1.3 Застосування тега **\**](#Застосування_тега_tt) + * [2.1.4 Застосування жирного шрифту](#Застосування_жирного_шрифту) + * [2.1.5 Застосування похилого шрифту](#Застосування_похилого_шрифту) + * [2.1.6 Вживання смайликів у тексті](#Вживання_смайликів_у_тексті) + * [2.1.7 Інші елементи оформлення](#Інші_елементи_оформлення) + * [2.1.8 Пісочниця](#Пісочниця) + * [2.2 Перекладачам](#Перекладачам) + * [2.2.1 Що треба робити при перекладі на нову мову з нуля](#Що_треба_робити_при_перекладі_на_нову_мову_з_нуля) + * [2.2.2 Переклад на рідну мову](#Переклад_на_рідну_мову) + * [2.2.3 Переклад на чужу мову](#Переклад_на_чужу_мову) + * [2.2.4 Переклад меню](#Переклад_меню) + * [2.2.5 Локалізація Ткаббера](#Локалізація_Ткаббера) + * [2.2.5 Обновляємо існуючі повідомлення](#Обновляємо_існуючі_повідомлення) + * [2.2.5 Створення нової версії](#Створення_нової_версії) + * [2.2.5 Що ще перекладати?](#Що_ще_перекладати) # Якщо ви не працювали з вікі раніше * Докладна й дуже пристойна [справка](http://ru.wikipedia.org/wiki/Wiki-разметка) по розмітці WikiPedia. На тій сторінці є посилання на більше конкретні теми: "зображення", "як почати нову статтю" та інше. Як теоретична база — ідеальне місце. * Для створення галерей, однак, зручніше скористатися [посиланням на відповідний розділ MediaWiki](http://www.mediawiki.org/w/index.php?title=Sites_using_MediaWiki/gallery&action=submit), що відразу показує правильний приклад коду (на wikipedia.org чомусь про галереї сказано мимохіть, і працюючий код не продемонстрований, а щоб обчислити його самому, треба або довго експеремтувати, або бути генієм ;)) * Подивіться також [документацію по настроюванню інтерфейсу](http://meta.wikipedia.org/wiki/MediaWiki_i18n) і [Мануал користувача](http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide) по використанню й настроюванню довідкової системи. Index: wiki/uk/Дистрибутиви__які_ми_обираємо.md ================================================================== --- wiki/uk/Дистрибутиви__які_ми_обираємо.md +++ wiki/uk/Дистрибутиви__які_ми_обираємо.md @@ -7,26 +7,26 @@ ## Зміст * [1 Начните работу с нажатия этой кнопки (c) Windows](#Начните_работу_с_нажатия_этой_кнопки_c_Windows) * [2 "Самодостаточные" дистрибутивы Ткаббера](#Самодостаточные_дистрибутивы_Ткаббера) - * [2.1 Tclkit, starkits и starpacks: немного теории](#Tclkit_starkits_и_starpacks_немного_теории) - * [2.1.1 Тиклькит](#Тиклькит) - * [2.1.2 Старкиты](#Старкиты) - * [2.1.3 Старпаки](#Старпаки) - * [2.2 Назад, к Ткабберу!](#Назад_к_Ткабберу) - * [2.2.1 Tkabber-pack — особая песня](#Tkabber-pack_-_особая_песня) + * [2.1 Tclkit, starkits и starpacks: немного теории](#Tclkit_starkits_и_starpacks_немного_теории) + * [2.1.1 Тиклькит](#Тиклькит) + * [2.1.2 Старкиты](#Старкиты) + * [2.1.3 Старпаки](#Старпаки) + * [2.2 Назад, к Ткабберу!](#Назад_к_Ткабберу) + * [2.2.1 Tkabber-pack — особая песня](#Tkabber-pack_-_особая_песня) * [3 Быстрее! Выше! Сильнее!](#Быстрее_Выше_Сильнее) * [4 Прилавок](#Прилавок) - * [4.1 Рукоделие](#Рукоделие) + * [4.1 Рукоделие](#Рукоделие) * [5 Кто сильнее: кит или пак? (Что выбрать?)](#Кто_сильнее_кит_или_пак_Что_выбрать) - * [5.1 "Каноническая" установка: Tcl/Tk + Ткаббер](#Каноническая_установка_Tcl_Tk_+_Ткаббер) - * [5.1.1 Осевой вариант](#Осевой_вариант) - * [5.1.2 Windows: не бейсиком единым...](#Windows_не_бейсиком_единым...) - * [5.1.3 Дистрибутив Tcl/Tk в системе: pros et contras](#Дистрибутив_Tcl_Tk_в_системе_pros_et_contras) - * [5.2 Всё своё ношу с собой](#Всё_своё_ношу_с_собой) - * [5.2.1 Ткаббер-пак опять идёт не в ногу](#Ткаббер-пак_опять_идёт_не_в_ногу) + * [5.1 "Каноническая" установка: Tcl/Tk + Ткаббер](#Каноническая_установка_Tcl_Tk_+_Ткаббер) + * [5.1.1 Осевой вариант](#Осевой_вариант) + * [5.1.2 Windows: не бейсиком единым...](#Windows_не_бейсиком_единым...) + * [5.1.3 Дистрибутив Tcl/Tk в системе: pros et contras](#Дистрибутив_Tcl_Tk_в_системе_pros_et_contras) + * [5.2 Всё своё ношу с собой](#Всё_своё_ношу_с_собой) + * [5.2.1 Ткаббер-пак опять идёт не в ногу](#Ткаббер-пак_опять_идёт_не_в_ногу) # Начните работу с нажатия этой кнопки (c) Windows Куда ставить-то?! Index: wiki/uk/Плагіни.md ================================================================== --- wiki/uk/Плагіни.md +++ wiki/uk/Плагіни.md @@ -9,17 +9,17 @@ ## Зміст * [1 Офіційні плагіни для Ткаббера](#Офіційні_плагіни_для_Ткаббера) * [2 Неофіційні плагині для Ткаббера](#Неофіційні_плагині_для_Ткаббера) - * [2.1 Alarm](#Alarm) - * [2.2 Autoconnect](#Autoconnect) - * [2.3 Tab number](#Tab_number) - * [2.4 Confirm](#Confirm) - * [2.5 Rsssaver](#Rsssaver) - * [2.6 Bookmarks](#Bookmarks) - * [2.7 Meebo me](#Meebo_me) + * [2.1 Alarm](#Alarm) + * [2.2 Autoconnect](#Autoconnect) + * [2.3 Tab number](#Tab_number) + * [2.4 Confirm](#Confirm) + * [2.5 Rsssaver](#Rsssaver) + * [2.6 Bookmarks](#Bookmarks) + * [2.7 Meebo me](#Meebo_me) # Офіційні плагіни для Ткаббера У цьому розділі нічого принципово нового не буде — зведення по існуючим плагінам і коротка допомога для бажаючих завантажити їх. Отже, на сьогоднішній день на [офіційній сторінці плагінів](http://tkabber.jabber.ru/tkabber-plugins) налічується 12 розширень до Ткаббера: bc, checkers, chess, cyrillize, ejabberd, georoster, mute, osd, reversi, socials, spy і whiteboard. Двома словами про кожний: Index: wiki/uk/Посилання.md ================================================================== --- wiki/uk/Посилання.md +++ wiki/uk/Посилання.md @@ -8,16 +8,16 @@ На цій сторінці будуть потихеньку збиратися посилання на зовнішні ресурси, присвячені Ткабберу і Джабберу. ## Зміст * [1 Документація і завантаження](#Документація_і_завантаження) - * [1.1 Сайти про Ткаббер на інших мовах](#Сайти_про_Ткаббер_на_інших_мовах) + * [1.1 Сайти про Ткаббер на інших мовах](#Сайти_про_Ткаббер_на_інших_мовах) * [2 Народна творчість](#Народна_творчість) - * [2.1 Кольорові схеми](#Кольорові_схеми) - * [2.2 Смайл-паки, аватари](#Смайл-паки_аватари) - * [2.3 Звукові схеми](#Звукові_схеми) - * [2.4 Сторонні плагіни](#Сторонні_плагіни) + * [2.1 Кольорові схеми](#Кольорові_схеми) + * [2.2 Смайл-паки, аватари](#Смайл-паки_аватари) + * [2.3 Звукові схеми](#Звукові_схеми) + * [2.4 Сторонні плагіни](#Сторонні_плагіни) * [3 Tcl/Tk](#Tcl_Tk) * [4 Jabber](#Jabber) * [5 Різне](#Різне) # Документація і завантаження Index: wiki/uk/Початківцям.md ================================================================== --- wiki/uk/Початківцям.md +++ wiki/uk/Початківцям.md @@ -6,16 +6,16 @@ Матеріал з Tkabber Wiki ## Зміст * [1 Встановлення і швидкий старт](#Встановлення_і_швидкий_старт) - * [1.1 Вікно логіна](#Вікно_логіна) - * [1.2 Створення нового акаунта](#Створення_нового_акаунта) - * [1.3 Дискавери. Первые шаги](#Дискавери._Первые_шаги) - * [1.4 Добавление контактов в ростер](#Добавление_контактов_в_ростер) - * [1.5 Некоторые полезные команды](#Некоторые_полезные_команды) - * [1.6 Дискавери. Добавляем контакты из "асек" и прочих "ирок", добавляем фиды RSS.](#Дискавери._Добавляем_контакты_из_асек_и_прочих_ирок_добавляем_фиды_RSS.) + * [1.1 Вікно логіна](#Вікно_логіна) + * [1.2 Створення нового акаунта](#Створення_нового_акаунта) + * [1.3 Дискавери. Первые шаги](#Дискавери._Первые_шаги) + * [1.4 Добавление контактов в ростер](#Добавление_контактов_в_ростер) + * [1.5 Некоторые полезные команды](#Некоторые_полезные_команды) + * [1.6 Дискавери. Добавляем контакты из "асек" и прочих "ирок", добавляем фиды RSS.](#Дискавери._Добавляем_контакты_из_асек_и_прочих_ирок_добавляем_фиды_RSS.) * [2 Локализация Tkabber](#Локализация_Tkabber) # Встановлення і швидкий старт Вибір [дистрибутива](http://tkabber.jabber.ru/download) залежить від операційної системи, в котрій ви працюєте. Інсталяція Ткаббера в середовищі Linux докладно [описана](http://tkabber.jabber.ru/tuto-install-tkabber) на форумі сайта tkabber.jabber.ru і проблем викликати не повинна. Під Windows інсталяція теж проходить гладко. Єдине, що ми б порадили — це не ставити Tkabber-Starpack версії 0.9.8 і нижче — там немає файла підтримки кодування Windows-1251, тому такий Ткаббер не може розмовляти українською. Але починаючи з версії 0.9.9 ця помилка в старпаці була виправлена. Index: wiki/uk/Практика.md ================================================================== --- wiki/uk/Практика.md +++ wiki/uk/Практика.md @@ -9,17 +9,17 @@ ## Зміст * [1 Часто запитувані питання (ЧЗП)](#Часто_запитувані_питання_ЧЗП) * [2 Хохлома](#Хохлома) - * [2.1 Смайлики й аватари](#Смайлики_й_аватари) - * [2.2 Кольорові теми та інша графіка](#Кольорові_теми_та_інша_графіка) - * [2.3 Звуковий супровід](#Звуковий_супровід) + * [2.1 Смайлики й аватари](#Смайлики_й_аватари) + * [2.2 Кольорові теми та інша графіка](#Кольорові_теми_та_інша_графіка) + * [2.3 Звуковий супровід](#Звуковий_супровід) * [3 Нетривіальні колупання конфіга](#Нетривіальні_колупання_конфіга) * [4 Колупання програмного коду](#Колупання_програмного_коду) - * [4.1 Плагіни / Штепселі](#Плагіни___Штепселі) - * [4.2 Патчі / Заплатки](#Патчі___Заплатки) + * [4.1 Плагіни / Штепселі](#Плагіни___Штепселі) + * [4.2 Патчі / Заплатки](#Патчі___Заплатки) # Часто запитувані питання (ЧЗП) [Маленькі хитрості, або Tkabber F.A.Q.](Ткаббер_ЧЗП.md) # Хохлома Index: wiki/uk/Службова/Всі_сторінки.md ================================================================== --- wiki/uk/Службова/Всі_сторінки.md +++ wiki/uk/Службова/Всі_сторінки.md @@ -11,16 +11,16 @@ * [Користувач:Fixer](../Користувач_Fixer.md) (2 посилання) * [Плагіни](../Плагіни.md) (10 посилань) * [Посилання](../Посилання.md) (2 посилання) * [Початківцям](../Початківцям.md) (5 посилань) * [Практика](../Практика.md) (3 посилання) -* [Службова/Всі сторінки](../Службова/Всі_сторінки.md) (**0** посилань) -* [Службова/Відсутні посилання](../Службова/Відсутні_посилання.md) (1 посилання) +* [Службова/Всі сторінки](../Службова/Всі_сторінки.md) (1 посилання) +* [Службова/Відсутні посилання](../Службова/Відсутні_посилання.md) (**0** посилань) * [Теорія](../Теорія.md) (3 посилання) * [Термінологія](../Термінологія.md) (6 посилань) * [Ткаббер - чемпіон?](../Ткаббер_-_чемпіон_.md) (4 посилання) * [Ткаббер ЧЗП](../Ткаббер_ЧЗП.md) (8 посилань) * [Ткаббер ЧЗП/Зовнішній вигляд і звук](../Ткаббер_ЧЗП/Зовнішній_вигляд_і_звук.md) (1 посилання) * [Учасник:bigote](../Учасник_bigote.md) (4 посилання) -* [Учасник:kostix](../Учасник_kostix.md) (2 посилання) +* [Учасник:kostix](../Учасник_kostix.md) (3 посилання) * [Учасник:lknight](../Учасник_lknight.md) (5 посилань) Index: wiki/uk/Службова/Відсутні_посилання.md ================================================================== --- wiki/uk/Службова/Відсутні_посилання.md +++ wiki/uk/Службова/Відсутні_посилання.md @@ -20,13 +20,18 @@ * http://tkabber.jabe.ru * Службова\_Allpages.md * Службова\_Recentchanges.md * Термінологія.md\#транк * Ткаббер\_НЗП.md +* Учасник\_Bigote.md +* Учасник\_Lknight.md #### [Головна стаття](../Головна_стаття.md) +* ../ru/Участник\_bigote.md +* ../ru/Участник\_kostix.md +* ../ru/Участник\_lknight.md * Користувач\_Archimed.md #### [Дистрибутиви, які ми обираємо](../Дистрибутиви__які_ми_обираємо.md) * Low\_traffic\_HOWTO.md @@ -59,10 +64,11 @@ * Проблеми\_зі\_звуком.md * Смайлики\_й\_аватари.md #### [Теорія](../Теорія.md) +* ../ru/Участник\_feez.md * Віддалене\_керування\_за\_допомогою\_send.md * Відправка\_файлів\_\_теорія.md * Меню.md * Налаштування.md * Налаштування\_Ткаббера\_\_ази\_і\_глибше.md @@ -90,7 +96,19 @@ * Смайлики\_й\_аватари.md * Тим\_\_хто\_починає.md * Файл\_конфигурации.md * Файл\_конфигурації.md * Шифрування\_в\_Ткаббері.md + +#### [Учасник:bigote](../Учасник_bigote.md) + +* ../ru/Участник\_bigote.md + +#### [Учасник:kostix](../Учасник_kostix.md) + +* ../ru/Участник\_kostix.md + +#### [Учасник:lknight](../Учасник_lknight.md) + +* ../ru/Участник\_lknight.md Index: wiki/uk/Теорія.md ================================================================== --- wiki/uk/Теорія.md +++ wiki/uk/Теорія.md @@ -7,20 +7,20 @@ ## Зміст * [1 Глосарій (словарій)](#Глосарій_словарій) * [2 Статті](#Статті) - * [2.1 Початківцям](#Початківцям) - * [2.1.1 Про Ткаббер](#Про_Ткаббер) - * [2.1.2 Швидкий старт (з купою скриншотів)](#Швидкий_старт_з_купою_скриншотів) - * [2.1.3 Налаштування Ткаббера: базис та глибше](#Налаштування_Ткаббера_базис_та_глибше) - * [2.2 Вмілим користувачам](#Вмілим_користувачам) - * [2.2.1 Тонке налаштування](#Тонке_налаштування) - * [2.2.2 Меню](#Меню) - * [2.2.3 Налаштування](#Налаштування) - * [2.2.4 Config.tcl з людським обличчям](#Config.tcl_з_людським_обличчям) - * [2.3 Інші статті](#Інші_статті) + * [2.1 Початківцям](#Початківцям) + * [2.1.1 Про Ткаббер](#Про_Ткаббер) + * [2.1.2 Швидкий старт (з купою скриншотів)](#Швидкий_старт_з_купою_скриншотів) + * [2.1.3 Налаштування Ткаббера: базис та глибше](#Налаштування_Ткаббера_базис_та_глибше) + * [2.2 Вмілим користувачам](#Вмілим_користувачам) + * [2.2.1 Тонке налаштування](#Тонке_налаштування) + * [2.2.2 Меню](#Меню) + * [2.2.3 Налаштування](#Налаштування) + * [2.2.4 Config.tcl з людським обличчям](#Config.tcl_з_людським_обличчям) + * [2.3 Інші статті](#Інші_статті) # Глосарій (словарій) [1001 невідоме слово з тих, що ви хотіли, але боялися спитати.](Термінологія.md) # Статті Index: wiki/uk/Термінологія.md ================================================================== --- wiki/uk/Термінологія.md +++ wiki/uk/Термінологія.md @@ -8,22 +8,22 @@ У цьому розділі ми спробуємо роз'ясняти деякі терміни, звичайні для одних і незрозумілі для інших. Пояснення будуть дані дуже коротенько — часу в нас не вагон. Коротка розшифровка, щоб можна було зрозуміти зміст статті, де зустрічається хитре слово, і посилання на джерело докладної інформації. ## Зміст * [1 Tkabber](#Tkabber) - * [1.1 Токен (token)](#Токен_token) + * [1.1 Токен (token)](#Токен_token) * [2 Windows](#Windows) * [3 Linux](#Linux) * [4 Tcl/Tk](#Tcl_Tk) * [5 Jabber](#Jabber) - * [5.1 XML](#XML) - * [5.2 Станца (stanza)](#Станца_stanza) + * [5.1 XML](#XML) + * [5.2 Станца (stanza)](#Станца_stanza) * [6 Різне](#Різне) - * [6.1 Плагін (plugin)](#Плагін_plugin) - * [6.2 Біндінги (bindings)](#Біндінги_bindings) - * [6.3 Транк (trunk)](#Транк_trunk) - * [6.4 Змінні оточення](#Змінні_оточення) + * [6.1 Плагін (plugin)](#Плагін_plugin) + * [6.2 Біндінги (bindings)](#Біндінги_bindings) + * [6.3 Транк (trunk)](#Транк_trunk) + * [6.4 Змінні оточення](#Змінні_оточення) # Tkabber Тут ми будемо розглядати терміни, що відносяться (втім, дуже умовно) до Ткаббера. ## Токен (token) Index: wiki/uk/Ткаббер_ЧЗП.md ================================================================== --- wiki/uk/Ткаббер_ЧЗП.md +++ wiki/uk/Ткаббер_ЧЗП.md @@ -8,51 +8,51 @@ Якщо проблема, що виникла у вас, тут не освітлена, заходите на `xmpp:tkabber@conference.jabber.ru` — поміркуємо разом, і якщо вирішимо — відповідь з'явиться або тут, або в одній зі статей цієї вікі. ## Зміст * [1 Що таке...?](#Що_таке...) - * [1.1 Ростер](#Ростер) - * [1.2 Ресурс](#Ресурс) - * [1.3 Пріоритет](#Пріоритет) - * [1.4 Консоль Ткаббера](#Консоль_Ткаббера) + * [1.1 Ростер](#Ростер) + * [1.2 Ресурс](#Ресурс) + * [1.3 Пріоритет](#Пріоритет) + * [1.4 Консоль Ткаббера](#Консоль_Ткаббера) * [2 Зовнішній вигляд і звук](#Зовнішній_вигляд_і_звук) - * [2.1 Шрифти](#Шрифти) - * [2.2 Не підключаються нові смайлики (звукові схеми)](#Не_підключаються_нові_смайлики_звукові_схеми) - * [2.3 Як вставляти смайлики "з меню"?](#Як_вставляти_смайлики_з_меню) - * [2.4 чи Можна смайлики **відключити**?](#чи_Можна_смайлики_відключити) - * [2.5 Не бачу іконки/фото/і т.д. в PNG](#Не_бачу_іконки_фото_і_т.д._в_PNG) - * [2.6 Колірні схеми](#Колірні_схеми) - * [2.7 чи Підтримує Ткаббер аватари?](#чи_Підтримує_Ткаббер_аватари) - * [2.8 Проблема зі звуковою схемою](#Проблема_зі_звуковою_схемою) - * [2.9 Регулювання гучності звуку](#Регулювання_гучності_звуку) + * [2.1 Шрифти](#Шрифти) + * [2.2 Не підключаються нові смайлики (звукові схеми)](#Не_підключаються_нові_смайлики_звукові_схеми) + * [2.3 Як вставляти смайлики "з меню"?](#Як_вставляти_смайлики_з_меню) + * [2.4 чи Можна смайлики **відключити**?](#чи_Можна_смайлики_відключити) + * [2.5 Не бачу іконки/фото/і т.д. в PNG](#Не_бачу_іконки_фото_і_т.д._в_PNG) + * [2.6 Колірні схеми](#Колірні_схеми) + * [2.7 чи Підтримує Ткаббер аватари?](#чи_Підтримує_Ткаббер_аватари) + * [2.8 Проблема зі звуковою схемою](#Проблема_зі_звуковою_схемою) + * [2.9 Регулювання гучності звуку](#Регулювання_гучності_звуку) * [3 Глюки, що виникають у процесі роботи](#Глюки_що_виникають_у_процесі_роботи) - * [3.1 Довге завантаження Ткаббера](#Довге_завантаження_Ткаббера) - * [3.2 Пересилання файлів](#Пересилання_файлів) - * [3.3 Шифрування в Ткаббері: проблеми з **gpgme/tclgpgme**](#Шифрування_в_Ткаббері_проблеми_з_gpgme_tclgpgme) - * [3.4 Проблема з новим релізом Ткаббера 0.9.9-1.2](#Проблема_з_новим_релізом_Ткаббера_0.9.9-1.2) - * [3.5 Ткаббер під X Window падає при спробі показати "дивні" символи](#Ткаббер_під_X_Window_падає_при_спробі_показати_дивні_символи) - * [3.6 Не працює вставка по Control-v під X Window](#Не_працює_вставка_по_Control-v_під_X_Window) - * [3.7 Tkabber постійно тримає мене в стані "відійшов" ("away")](#Tkabber_постійно_тримає_мене_в_стані_відійшов_away) - * [3.8 У старпаку/старкиті немає звуку](#У_старпаку_старкиті_немає_звуку) - * [3.9 Пропадає вміст ростера](#Пропадає_вміст_ростера) - * [3.10 Не можу приєднатися до сервера через проксі](#Не_можу_приєднатися_до_сервера_через_проксі) + * [3.1 Довге завантаження Ткаббера](#Довге_завантаження_Ткаббера) + * [3.2 Пересилання файлів](#Пересилання_файлів) + * [3.3 Шифрування в Ткаббері: проблеми з **gpgme/tclgpgme**](#Шифрування_в_Ткаббері_проблеми_з_gpgme_tclgpgme) + * [3.4 Проблема з новим релізом Ткаббера 0.9.9-1.2](#Проблема_з_новим_релізом_Ткаббера_0.9.9-1.2) + * [3.5 Ткаббер під X Window падає при спробі показати "дивні" символи](#Ткаббер_під_X_Window_падає_при_спробі_показати_дивні_символи) + * [3.6 Не працює вставка по Control-v під X Window](#Не_працює_вставка_по_Control-v_під_X_Window) + * [3.7 Tkabber постійно тримає мене в стані "відійшов" ("away")](#Tkabber_постійно_тримає_мене_в_стані_відійшов_away) + * [3.8 У старпаку/старкиті немає звуку](#У_старпаку_старкиті_немає_звуку) + * [3.9 Пропадає вміст ростера](#Пропадає_вміст_ростера) + * [3.10 Не можу приєднатися до сервера через проксі](#Не_можу_приєднатися_до_сервера_через_проксі) * [4 А як мені зробити...?](#А_як_мені_зробити...) - * [4.1 Відправлення повідомлень по Ctrl-Enter](#Відправлення_повідомлень_по_Ctrl-Enter) - * [4.2 Чи можна додати в ростер самого себе?](#Чи_можна_додати_в_ростер_самого_себе) - * [4.3 Одночасна робота з декількома аккаунтами](#Одночасна_робота_з_декількома_аккаунтами) - * [4.4 Як щодо автозаходу на конференції?](#Як_щодо_автозаходу_на_конференції) - * [4.5 Стискання трафіка в Ткаббері](#Стискання_трафіка_в_Ткаббері) - * [4.6 Виділення тексту жирним, курсивом і підкресленням](#Виділення_тексту_жирним_курсивом_і_підкресленням) - * [4.7 Уведення "хитрих" юнікодових символів](#Уведення_хитрих_юнікодових_символів) - * [4.8 Ігнор — велика річ!](#Ігнор_-_велика_річ) - * [4.9 Підтвердження](#Підтвердження) - * [4.10 Віддалене керування](#Віддалене_керування) - * [4.11 Команди Ткаббера](#Команди_Ткаббера) - * [4.12 Приховування версій клієнта і OS](#Приховування_версій_клієнта_і_OS) + * [4.1 Відправлення повідомлень по Ctrl-Enter](#Відправлення_повідомлень_по_Ctrl-Enter) + * [4.2 Чи можна додати в ростер самого себе?](#Чи_можна_додати_в_ростер_самого_себе) + * [4.3 Одночасна робота з декількома аккаунтами](#Одночасна_робота_з_декількома_аккаунтами) + * [4.4 Як щодо автозаходу на конференції?](#Як_щодо_автозаходу_на_конференції) + * [4.5 Стискання трафіка в Ткаббері](#Стискання_трафіка_в_Ткаббері) + * [4.6 Виділення тексту жирним, курсивом і підкресленням](#Виділення_тексту_жирним_курсивом_і_підкресленням) + * [4.7 Уведення "хитрих" юнікодових символів](#Уведення_хитрих_юнікодових_символів) + * [4.8 Ігнор — велика річ!](#Ігнор_-_велика_річ) + * [4.9 Підтвердження](#Підтвердження) + * [4.10 Віддалене керування](#Віддалене_керування) + * [4.11 Команди Ткаббера](#Команди_Ткаббера) + * [4.12 Приховування версій клієнта і OS](#Приховування_версій_клієнта_і_OS) * [5 Різне](#Різне) - * [5.1 ...а мені ГРАТИ хочеться!!!](#...а_мені_ГРАТИ_хочеться) - * [5.2 Старі версії Ткаббера і плагинів](#Старі_версії_Ткаббера_і_плагинів) + * [5.1 ...а мені ГРАТИ хочеться!!!](#...а_мені_ГРАТИ_хочеться) + * [5.2 Старі версії Ткаббера і плагинів](#Старі_версії_Ткаббера_і_плагинів) # Що таке...? ## Ростер Відповідь: Ростер (по-англійському roster) — це "Список контактів". У версіях Ткаббера починаючи з 0.9.8 термін "ростер" зник, чим спантеличив звиклих до англізованої назви ветеранів Jabber.