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.
-** Внимание!**
-
-В систему управления настройками шрифтов версии 0.11.0 были внесены изменения, и данная
-статья относится ко всем версиям, вышедшим до 0.11.0 (как минимум, к 0.9.7–0.10.0); если
-вас интересует современная версия Ткаббера (0.11.0 и выше), читайте [**эту статью**](../Шрифты.md).
+ **  Внимание! **
+
+ В систему управления настройками шрифтов версии 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. Повторяйте процедуру до получения удобоваримого результата.
-
- **Сделать:** Выяснить применимы ли тут команды `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. Повторяйте процедуру до получения удобоваримого результата.
+
+ **Сделать:** Выяснить применимы ли тут команды `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:
-
-
-
-* и скрипт **showgif.tcl** следующего содержания:
-
- source anigif.tcl
- foreach f [glob -nocomplain *.gif] {
- label .[file rootname $f] -image [::anigif::anigif $f]
- pack .[file rootname $f]
- }
-
-При запуске этого скрипта мы увидим вот такую исчезающую улыбку Чеширского кота © Льюис Кэррол.
-Кстати, закиньте в эту папку штуки 4 экземпляра приведённой картинки и посмотрите на загрузку
-процессора при воспроизведении.
-
-
-
-Как оказалось, это лечится лёгким движением руки. В файле **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:
+
+
+
+* и скрипт **showgif.tcl** следующего содержания:
+
+ source anigif.tcl
+ foreach f [glob -nocomplain *.gif] {
+ label .[file rootname $f] -image [::anigif::anigif $f]
+ pack .[file rootname $f]
+ }
+
+При запуске этого скрипта мы увидим вот такую исчезающую улыбку Чеширского кота © Льюис Кэррол. Кстати, закиньте в эту папку штуки 4 экземпляра приведённой картинки и посмотрите на загрузку процессора при воспроизведении.
+
+
+
+Как оказалось, это лечится лёгким движением руки. В файле **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-адреса гейтов).
-
-Если вы столкнулись с этой проблемой, временно отключитесь ("отлогиньтесь") от гейтов в основном Ткаббере.
-
-### Тестирование конфигурации "вживую"
-
- **Сделать:** написать раздел
-
-Пока в качестве примера можно изучить [**это**](Шрифты.md#Быстрый_подбор_шрифтов).
+то есть, в результате, как простой вызов процедуры с двумя параметрами. Что и требовалось получить.
+
+# Тестирование конфигурации
+Несмотря на то, что подавляющее большинство настроек Ткаббера "применяются" сразу, без перезагрузок, некоторые настройки требуют перезапуска Ткаббера. К ним относятся, к примеру, настройки шрифтов (в версиях Ткаббера ниже 0.11.0 либо у приверженцев Tk 8.4), подключение "цветовых схем", изменение стиля интерфейса (многооконный/с табами) и другие. Также перезапуска Ткаббера требует установка/обновление некоторого пакета Tcl, который может использоваться Ткаббером.
+
+Удобнее (и правильнее) всего не перезапускать Ткаббер, а запускать "рядом" его вторую копию.
+
+Достоинства этого способа:
+
+* Не мешает оставаться на связи, так как основной Ткаббер продолжает работать;
+* Может потребоваться несколько раундов редактирования и перезапуска Ткаббера чтобы "допилить" настройку, которую вы делаете, до нужной вам кондиции.
+
+Недостатки:
+
+* Ткаббер прожорлив и медленно стартует, поэтому на некоторых очень старых машинах запуск второй копии Ткаббера нежелателен;
+* При запуске второй копии Ткаббера, если вы собираетесь соединяться из неё с сервером, требуется соблюдать некоторые меры предосторожности, о которых рассказано ниже.
+
+## Как запустить второй Ткаббер, не помешав первому
+
+Большинство требуемых мер предосторожности требуется только если вы собираетесь подключаться к серверу из второй копии Ткаббера.
+
+"Общая" проблема — одна: соревнование при записи настроек. Суть её в том, что все N запущенных "рядом" Ткабберов будут сохранять настройки в один и тот же файл **custom.tcl** (и некоторые другие). Ткаббер использует весьма прямолинейный, но разумный метод сохранения настроек: при изменении некоторой настройки файл **custom.tcl** тут же перезаписывается, отражая новое состояние конфигурации. Понятно, что после редактировании настроек параллельно в нескольких копиях Ткаббера, сохранённым останется набор настроек того Ткаббера, в котором он менялся последним по времени.
+
+Имейте в виду, что это относится только к сохранению настроек "для текущей и следующих сессий"; установка настройки "только для текущей сессии" не вызывает перезапись **custom.tcl**.
+
+Теперь перейдём к мерам предосторожности, которые нужно соблюдать при одновременном соединении с сервером из нескольких копий Ткаббера.
+
+Они чуть отличаются для случев:
+
+* Подключение к тому же серверу с тем же логином;
+* Подключение к другому серверу, или к тому же, но с другим логином.
+
+### Подключение с тем же логином
+
+* _Обязательно_ в окне логина поставьте [ресурс](Ткаббер_ЧаВо.md#Ресурс) отличный от ресурса основного Ткаббера — это позволит Вам создать разные _сессии_ (сеансы работы) с сервером;
+* Там же можете выбрать [приоритет](Ткаббер_ЧаВо.md#Приоритет), меньший, чем у основной копии. Для чего это может пригодиться, читайте в указанной заметке про приоритеты.
+
+Теперь можете подключиться — будет создано второе подключение с тем же логином (к тому же аккаунту), но одно будет являться другой сессией и не будет "пересекаться" с первой.
+
+Прежде чем продолжить тестирование, усвойте ещё несколько вещей:
+
+* Подключаясь к тем же конференциям, в которых вы сидите из основной копии Ткаббера, выбирайте другой ник — ваш уже занят (вами);
+* При таком подключении поведение сообщений, приходящих от гейтов, зависит от [приоритетов](Ткаббер_ЧаВо.md#Приоритет) запущенных копий Ткаббера.
+
+### Подключение с другим логином (или к другому серверу)
+
+В этом случае единственное, о чём нужно думать, это регистрация на гейтах в другие системы быстрого обмена сообщениями: к примеру, если как на первом, так и на втором аккаунте вы зарегистрированы на гейте в ICQ, логин на второй аккаунт также подключит вас к гейту, что вызовет отключение от гейта первого аккаунта. Причина этого не в гейте, а в самой "вражеской" системе быстрого обмена сообщениями, которая не позволяет делать одновременные подключения к одному своему аккаунту с разных IP-адресов (которыми будут выступать IP-адреса гейтов).
+
+Если вы столкнулись с этой проблемой, временно отключитесь ("отлогиньтесь") от гейтов в основном Ткаббере.
+
+## Тестирование конфигурации "вживую"
+
+ **Сделать:** написать раздел
+
+Пока в качестве примера можно изучить [это](Шрифты.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 Выяснение имени хоста по имени сервера](#Выяснение_имени_хоста_по_имени_сервера)
-## Требования к Ткабберу
+# Требования к Ткабберу

-Прежде всего, для подключения к серверу Google Talk (далее GTalk), в вашем Ткаббере ***обязательно**
-должна быть поддержка [**SSL/TLS**](Между_офлайном_и_онлайном.md#SSL_TLS).*
-
-Это необходимо из-за того, что существует, в принципе, два способа подключения,
-но оба они так или иначе требуют использования SSL.
-
-Наличие поддержки SSL можно выяснить, посмотрев на окно логина: оно должно содержать закладку,
-в названии которой содержится слово "SSL". Если в вашем Ткаббере также есть поддержка
-[**сжатия потока**](Low_traffic_HOWTO.md#Stream_Compression_zlib), то на этой закладке
-будет надпись "SSL и сжатие".
-
-## Подключение (просто)
+
+
+Прежде всего, для подключения к серверу Google Talk (далее GTalk), в вашем Ткаббере _**обязательно** должна быть поддержка [SSL/TLS](Между_офлайном_и_онлайном.md#SSL_TLS)._
+
+Это необходимо из-за того, что существует, в принципе, два способа подключения, но оба они так или иначе требуют использования SSL.
+
+Наличие поддержки SSL можно выяснить, посмотрев на окно логина: оно должно содержать закладку, в названии которой содержится слово "SSL". Если в вашем Ткаббере также есть поддержка [сжатия потока](Low_traffic_HOWTO.md#Stream_Compression_zlib), то на этой закладке будет надпись "SSL и сжатие".
+
+# Подключение (просто)

-Во-первых, правильно укажите имя сервера и свою учётную запись в окне логина:
-
-##### Пользователь
-
-> имя аккаунта на `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) за разъяснения.
-
-## Подключение через прокси (вернисаж)
-
-
-
-
-
-
-
-
-
-
-
-
-## Подключение к 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" там _нет._
-  **Сделать:** Выяснить и дописать про версию 0.10.x
-
-Проверить доступную Ткабберу версию **SASL** можно, набрав в его консоли:
+
+
+Во-первых, правильно укажите имя сервера и свою учётную запись в окне логина:
+
+ Пользователь
+
+ имя аккаунта на `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) за разъяснения.
+
+# Подключение через прокси (вернисаж)
+
+
+
+
+
+
+
+
+
+
+
+
+# Подключение к 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" там _нет._  **Сделать:** Выяснить и дописать про версию 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 записей.
-
- **Сделать:** Бла-бла-бла...
-
-Про поддержку 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 записей.
+
+ **Сделать:** Бла-бла-бла...
+
+Про поддержку 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` — перейдёте
- прямо к ней, минуя полный список комнат.
-
- **Сделать:** по-видимому, плагин whiteboard неплохо жрёт трафик
-
-### Настройка сервера
-
-При помощи списков приватности на сервере можно останавливать некоторые виды _входящего_
-трафика _прямо на сервере._
-
- **Сделать:** доработать
-
-## Средства самоконтроля
-### Плагин 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**, к примеру) — без ухищрений можно
-померять только "сколько всего" и "с какой скоростью".
-
- **Поправьте меня:** Впрочем, если память мне не изменяет,
-файерволл [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` — перейдёте прямо к ней, минуя полный список комнат.
+
+ **Сделать:** по-видимому, плагин whiteboard неплохо жрёт трафик
+
+## Настройка сервера
+
+При помощи списков приватности на сервере можно останавливать некоторые виды _входящего_ трафика _прямо на сервере._
+
+ **Сделать:** доработать
+
+# Средства самоконтроля
+## Плагин 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**, к примеру) — без ухищрений можно померять только "сколько всего" и "с какой скоростью".
+
+ **Поправьте меня:** Впрочем, если память мне не изменяет, файерволл [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/)
-(переведённая, между прочим, на русский). Если же всё изложенное — не для вас, не мешайте
-разработчикам разрабатывать и "вкладывайтесь" в тестирование на другой стадии — на стадии
-"пререлиза", о которой рассказано ниже.
-
- **Сделать:** Объяснить отсутствие "ночных билдов"
-
- **Сделать:** Объяснить почему Subversion, а не...
-
-## Пререлизы
-Таковые бывают и у самого Ткаббера (обычно они называются "беты" и информация о них
-помещается как в новостях на [официальном сайте](http://tkabber.jabber.ru), так и
-в [списках рассылки](http://lists.jabber.ru/mailman/listinfo/tkabber-dev)), и у его
-дистрибутивов, которые собираются сразу после выхода релиза Ткаббера и затем обычно
-проходят стадию тестирования перед выпуском окончательных версий.
-
-Беты, как правило, не содержат очевидных проблем, и их использование относительно
-безопасно для ваших нервов.
-
-Тестирование пререлизных версий очень полезно для продукта. Имейте в виду, что проблемы
-в уже выпущенной стабильной версии свободного ПО — это проблемы, прежде всего, самих
-пользователей, так как за разработчиками редко стоит некая организация, способная
-организовать систематическое тестирование (при помощи оплаченной команды специалистов).
-Так что если вы хотите быть уверены, что стабильная версия будет работать так, как надо,
-тестируйте её бета-версии.
-
- **Сделать:** написать про необходимость иметь "каноническую"
-инсталляцию для тестирования "исходников"
+ * [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/) (переведённая, между прочим, на русский). Если же всё изложенное — не для вас, не мешайте разработчикам разрабатывать и "вкладывайтесь" в тестирование на другой стадии — на стадии "пререлиза", о которой рассказано ниже.
+
+ **Сделать:** Объяснить отсутствие "ночных билдов"
+
+ **Сделать:** Объяснить почему Subversion, а не...
+
+# Пререлизы
+Таковые бывают и у самого Ткаббера (обычно они называются "беты" и информация о них помещается как в новостях на [официальном сайте](http://tkabber.jabber.ru), так и в [списках рассылки](http://lists.jabber.ru/mailman/listinfo/tkabber-dev)), и у его дистрибутивов, которые собираются сразу после выхода релиза Ткаббера и затем обычно проходят стадию тестирования перед выпуском окончательных версий.
+
+Беты, как правило, не содержат очевидных проблем, и их использование относительно безопасно для ваших нервов.
+
+Тестирование пререлизных версий очень полезно для продукта. Имейте в виду, что проблемы в уже выпущенной стабильной версии свободного ПО — это проблемы, прежде всего, самих пользователей, так как за разработчиками редко стоит некая организация, способная организовать систематическое тестирование (при помощи оплаченной команды специалистов). Так что если вы хотите быть уверены, что стабильная версия будет работать так, как надо, тестируйте её бета-версии.
+
+ **Сделать:** написать про необходимость иметь "каноническую" инсталляцию для тестирования "исходников"
---
-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
-Первые шаги при использовании альфа-версии Ткаббера под виндами почти ничем не отличаются от
-линуксовых, разве что вместо набора (а то и копи-пейста) одной строчки вам придётся самостоятельно
-продираться сквозь дебри графического интерфейса или штудировать довольно объёмный мануал.
-
- **Сделать:** Впрочем, если какой-нибудь доброволец разовьёт тему виндовс, возражений не будет.
-
-### Как параллельно работать с обычной и альфа-версией Ткаббера
-Удобно иметь в системе установленную из репозиториев ОС стабильную версию Ткаббера, а каталог
-с альфой забросить куда-нибудь к себе в домашний каталог (например, в **~/tkabber-svn** — меньше
-геморроя с правами на запись в файлы, если потребуется или захочется что-нибудь допилить.
-Однако следует помнить, что в любом случае будут читаться рабочие конфигурационные файлы,
-лежащие в вашем домашнем каталоге: **~/.tkabber/config.tcl** и **~/.tkabber/custom.tcl**,
-а у разных версий Ткаббера могут быть разные идеи о доступных настройках, и потому совместно
-использовать одни и те же конфигурационные файлы сильно разными версиями Ткаббера может
-и не получиться.
-
-Для решения этой проблемы рекомендуется заставить Ткаббер использовать другой каталог для
-хранения настроек при помощи установки переменной окружения `TKABBER_HOME`: создайте
-отдельный каталог для настроек альфа-версии Ткаббера, например, **~/.tkabber-svn** а скрипт
-запуска (например, **~/bin/tkabber-svn**) сделайте таким:
+Первые шаги при использовании альфа-версии Ткаббера под виндами почти ничем не отличаются от линуксовых, разве что вместо набора (а то и копи-пейста) одной строчки вам придётся самостоятельно продираться сквозь дебри графического интерфейса или штудировать довольно объёмный мануал.
+
+ **Сделать:** Впрочем, если какой-нибудь доброволец разовьёт тему виндовс, возражений не будет.
+
+## Как параллельно работать с обычной и альфа-версией Ткаббера
+
+Удобно иметь в системе установленную из репозиториев ОС стабильную версию Ткаббера, а каталог с альфой забросить куда-нибудь к себе в домашний каталог (например, в ~/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)
- — возможно, кто-то уже прочитал и ответил на ваш вопрос (те, кто в состоянии ответить,
- обычно читают логи и увидят его). Если ответа на вопрос не было, вежливо спросите,
- не появилось ли у кого идей по поводу вопроса такого-то.
-
- **Сделать:** дописать, если чего не хватает
-
- **Сделать:** вообще-то этот раздел нужно слить с соответствующим
-куском "Острова посланных на..." и оформить в виде отдельной статейки с тупым названием
-"Как правильно задавать вопросы" Согласен.
+Теперь можно скопировать файлы конфигурации из ~/.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) — возможно, кто-то уже прочитал и ответил на ваш вопрос (те, кто в состоянии ответить, обычно читают логи и увидят его). Если ответа на вопрос не было, вежливо спросите, не появилось ли у кого идей по поводу вопроса такого-то.
+
+ **Сделать:** дописать, если чего не хватает
+
+ **Сделать:** вообще-то этот раздел нужно слить с соответствующим куском "Острова посланных на..." и оформить в виде отдельной статейки с тупым названием "Как правильно задавать вопросы" Согласен.
+
+
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  **Поправьте меня:** это надо проверить! bar
-
-[Шаблон:Todo](Шаблон_Todo.md)
-
- **Сделать:** Внедрить эту фигню повсеместно.
-
-[Шаблон:todo2](Шаблон_Todo2.md) — с Psi Wiki:
-
-**TODO: ** И эта фигня должна быть везде!
-
-["Клавиши клавиатуры"](Шаблон_Button.md)
-
-Ctrl-c will kill that boring task
-
-[Предупреждающие таблички](Шаблон_Warn.md)
+Цитата обработана шаблоном ["quote"](Шаблон_Quote.md). Обратите внимание, что для корректного переноса строк необходимо втыкать тег \
без отбивки пустой строкой.
+
+[Шаблон:Fixme](Шаблон_Fixme.md)
+
+foo  **Поправьте меня:** это надо проверить! bar
+
+[Шаблон:Todo](Шаблон_Todo.md)
+
+ **Сделать:** Внедрить эту фигню повсеместно.
+
+[Шаблон: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`**
-
- **Сделать:** Это бы тоже не помешало повсеместно внедрить...
+
+ Обязательно пользуйтесь шаблонами!
+
+[Пути к файлам](Шаблон_File.md)
+
+/dev/null
+
+C:\\Windows\\sralnik
+
+[Названия программ (\\name\\)](Шаблон_Program.md)
+
+`wish`
+
+ **Сделать:** Это бы тоже не помешало повсеместно внедрить...
## Тестовый кусок
+
+
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
-
- **Сделать:** написать что-нибудь про 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.
+
+ **Сделать:** написать что-нибудь про 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.
-
- **Сделать:** 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.
+
+ **Сделать:** write up
---
-A chat with Kevin Kenny (2008-04-10).
-
- **Сделать:** 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).
+
+ **Сделать:** 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]\