Tkabber Wiki

Check-in Differences
Login

Check-in Differences

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Difference From 58c40c3f66b28bc5 To 423ce9de23111eb5

2015-12-10
19:17
Fixed Markdown markup, refreshed auxiliary pages. check-in: 2981ccc72b user: sergei tags: trunk
14:17
Fixed Markdown markup. check-in: 58c40c3f66 user: sgolovan tags: trunk
11:25
Fixed markdown markup and refreshed auxiliary pages. check-in: c4a11d078e user: sgolovan tags: trunk
2015-12-07
10:56
Refreshed missing refs pages. check-in: fc16d1976e user: sgolovan tags: trunk
10:50
Read the files for links searching in UTF-8 encoding. check-in: 423ce9de23 user: sgolovan tags: trunk
09:43
Moved the UTF-8 encoded strings to the message catalog files. This helps with executing the refresh_tocs.tcl script under different locale settings. check-in: f5509f5883 user: sgolovan tags: trunk

Changes to msgs/es.msg.

1

2
3
4
5
6
7
8

1
2
3
4
5
6
7
8
-
+







::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"
::msgcat::mcset es "otherlang" "from other language pages"

Changes to tools/refresh_allpages.tcl.

8
9
10
11
12
13
14
15

16
17
18
19
20
21
22
23
24
25
26

27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

47
48
49
50
51
52
53
8
9
10
11
12
13
14

15


16
17
18
19
20
21
22
23

24





25
26
27
28
29
30
31
32
33
34
35
36
37
38

39
40
41
42
43
44
45
46







-
+
-
-








-
+
-
-
-
-
-














-
+








set langs {en es ru uk}

proc md_filter {fn} {
    expr {[file isfile $fn] && [file extension $fn] eq ".md"}
}

proc find_linked_files {data file} {
proc find_linked_files {data dir} {
    set dir [file dirname $file]
    set norm_file [file normalize $file]
    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]]
	    lappend res [file normalize [file join $dir $name]]
            if {$norm_file ne $norm_name} {
                # Do not store links to the file itself

	        lappend res $norm_name
            }
        }
    }

    return $res
}

proc get_all_links {dir} {
    set res {}
    foreach fn [::fileutil::find $dir md_filter] {
        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} {
    return [string map {" " _} $title].md
}

Changes to tools/refresh_missingrefs.tcl.

82
83
84
85
86
87
88
89

90
91
92
93
94
95
96
82
83
84
85
86
87
88

89
90
91
92
93
94
95
96







-
+







        set data [read $fd]
        close $fd

        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]
            if {$idx == 0} {
                lappend stripped_links $link

Changes to tools/refresh_tocs.tcl.

13
14
15
16
17
18
19
20
21


22
23
24
25
26
27
28
29
30
31
32
33
34
35
13
14
15
16
17
18
19


20
21
22
23
24




25
26
27
28
29
30
31







-
-
+
+



-
-
-
-







    while {[string index $h $offset] eq "#"} {
        incr offset
    }
    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} {
    ::msgcat::mclocale $lang
    ::msgcat::mcload [file join $::scriptdir .. msgs]
117
118
119
120
121
122
123
124
125

126
127
128
129
130
131
132
133
134
135

136
137
138
139
140
141

142
143
144
145
146
147
148
113
114
115
116
117
118
119


120
121
122
123


124
125
126
127

128
129
130
131
132
133

134
135
136
137
138
139
140
141







-
-
+



-
-




-
+





-
+







        set newtoc [list ""]
        foreach {l h} $headers {
            if {![regexp {^(#+)\s*(<a\s+.*\s*</a>)*\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 <a id=\"$newanchor\"></a>$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

        set out [open $fn w]
        fconfigure $out -encoding utf-8 -translation lf

Deleted wiki/en/For_Beginners.md.

1
2
3
4
5
6
7
8
9
10










-
-
-
-
-
-
-
-
-
-
[//]: # (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.











1
2
3
4
5
6
7
8
9
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) 


Changes to wiki/en/Help_Contents.md.

1
2
3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
















36
37
38
39
40
41
42
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17
18
19
















20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42









-
+









-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







[//]: # (Generated from ../selected/en.tkabber.jabe.ru/index.php/Help:Contents/index.html)


# Help:Contents

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. 

## <a id="toc"></a>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 **\<tt>** 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 **\<tt>** 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)

# <a id="If_you_have_no_experience_with_wikis"></a>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). 

# <a id="About_Tkabber_Wiki_style"></a>About Tkabber Wiki style
148
149
150
151
152
153
154
155

156
157
158
159
160

161
162
163
164
165
166
167
168
169

170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185

186
187
188
189
190
191
148
149
150
151
152
153
154

155
156
157
158
159

160
161
162
163
164
165
166
167
168

169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184

185
186
187
188
189
190
191







-
+




-
+








-
+















-
+







Welcome to the **[Sandbox](Sandbox.md)** if you need to check some style or HTML tag behaviour. 

## <a id="For_translators"></a>For translators

### <a id="How_to_begin_making_a_new_language_version"></a>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.) 

### <a id="Translation_into_mother_tongue"></a>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). 

### <a id="Translation_into_a_foreign_language"></a>Translation into a foreign language

All of us know that to do a good translation it is very important to speak fluently the destination language. In most cases, we translate into our native languages but sometimes it is necessary to translate into a foreign one. What can we advise for such cases with reference to our wiki? 

*  Do not translate puns and jokes that we put here and there, if you are not sure if they sound good and adequate. It is better to translate the main sense of the phrase. After all, the people comes here to look for information, not for jokes. So try to translate its **information** component as good as you can. But of course, if you are able to write humorously in other language, nobody will mind a good joke in your translation :) 
*  If there is a possibility to get a native speaker to make a proof-reading of your translation, do not miss it even if your friend knows little about Jabber and computers in general. Although the code is international, one can make mistakes, not only grammatical ones which could be forgivable, but also logical ones which is worse. 
*  Do not neglect spell-checkers. It is true even if you are translating into your mother tongue ;) 
*  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. 

### <a id="Menu_translation"></a>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). 

### <a id="Tkabber_localization"></a>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. 


Changes to wiki/en/How_to_add_a_new_remote_command.md.

9
10
11
12
13
14
15
16
17
18
19
20
21






22
23
24
25
26
27
28
9
10
11
12
13
14
15






16
17
18
19
20
21
22
23
24
25
26
27
28







-
-
-
-
-
-
+
+
+
+
+
+








You'll learn from this article how to create and register your own function for remote control. 

## <a id="toc"></a>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)

## <a id="Understanding"></a>Understanding

Ok. If you are ready let's try to understand base blocks of remote control internals. 

Changes to wiki/en/Main_Page.md.

8
9
10
11
12
13
14
15
16
17
18
19
20
21







22
23
24
25
26
27
28

29
30
31
32
33
34
35
36

37
38
39
40
41
42
43

44
45
46
47
48
49
50
51
52
53

54
55
56
57
58
59
60
8
9
10
11
12
13
14







15
16
17
18
19
20
21
22
23
24
25
26
27

28
29
30
31
32
33
34
35

36
37
38
39
40
41
42

43
44
45
46
47
48
49
50
51
52

53
54
55
56
57
58
59
60







-
-
-
-
-
-
-
+
+
+
+
+
+
+






-
+







-
+






-
+









-
+







 Welcome to the official documentation page of one of the advanced [Jabber (XMPP)](http://jabber.org) client, [Tkabber](http://tkabber.jabber.ru). 

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. 

## <a id="toc"></a>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)

# <a id="Contents"></a>Contents
Made for rapid search by topics. Please don't forget that you can find a full list of pages [here.](Special_AllPages.md) 

## <a id="Theory"></a>[Theory](Theory.md)
## <a id="TheoryTheory.md"></a>[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) 
  
## <a id="Articles"></a>[Articles](Theory.md#For_Advanced_Users)
## <a id="ArticlesTheory.mdNFor_Advanced_Users"></a>[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) 
  
## <a id="Development"></a>[Development](Development.md)
## <a id="DevelopmentDevelopment.md"></a>[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) 

## <a id="Practice"></a>[Practice](Practice.md)
## <a id="PracticePractice.md"></a>[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) 
*  [Troubles With Sound](Troubles_With_Sound.md) 
*  [Sound Schemes](Sound_Schemes.md) 

Changes to wiki/en/Plugins.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14




15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
















33
34
35
36
37
38
39
1
2
3
4
5
6
7
8
9
10




11
12
13
14
15
16
















17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39










-
-
-
-
+
+
+
+


-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







[//]: # (Generated from ../selected/en.tkabber.jabe.ru/index.php/Plugins/index.html)


# Plugins

From Tkabber Wiki

## <a id="toc"></a>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)

# <a id="Плагинология"></a>Плагинология
В этом разделе рассказано о внешних плагинах Ткаббера. 

Если вы — новичок, прочитайте как минимум первые два раздела. 

## <a id="Как_подключить_плагин"></a>Как подключить плагин

Changes to wiki/en/Special/All_Pages.md.

1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
16
17
18



19
20

21
22
23
24
25
26
27
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15



16
17
18
19

20
21
22
23
24
25
26
27







-
+







-
-
-
+
+
+

-
+







# Special/All Pages

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)
* [User:Kostix](../User_Kostix.md) (3 references)

Changes to wiki/en/Special/Missing_References.md.

1
2
3
4
5
6
7
8


9

10
11



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

28
29
30
31
32
33
34
1
2
3
4
5
6
7
8
9
10
11
12
13

14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40








+
+

+

-
+
+
+
















+







# Special/Missing References

From Tkabber Wiki

## 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

#### [Main Page](../Main_Page.md)

* Color\_Schemes\_And\_Icons.md
* Config.tcl\_For\_Beginners.md
* Config\_dir.md
* 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
* Non-trivial\_Settings.md
* Plugins/AntiSPIM.md
68
69
70
71
72
73
74




75
76
77
78
79
80
81
82



















83
84
85
86
87
88
89
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90


91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116







+
+
+
+






-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







* Участник\_Kostix.md
* Участник\_Teo.md
* Участник\_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
* ../Fonts.md
* ../Implementation\_peculiarities.md

Changes to wiki/en/TODO.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14




15
16
17
18
19




20
21
22
23
24
25
26
27
28
29
30
31











32
33
34


35
36
37
38
39
40
41
1
2
3
4
5
6
7
8
9
10




11
12
13
14
15




16
17
18
19
20











21
22
23
24
25
26
27
28
29
30
31
32


33
34
35
36
37
38
39
40
41










-
-
-
-
+
+
+
+

-
-
-
-
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+

-
-
+
+







[//]: # (Generated from ../selected/en.tkabber.jabe.ru/index.php/TODO/index.html)


# TODO

From Tkabber Wiki

## <a id="toc"></a>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)

## <a id="XMPP"></a>XMPP

### <a id="Interface_for_pubsub"></a>Interface for pubsub

Create visual interface for pubsub. 

Changes to wiki/en/Tkabber_FAQ.md.

8
9
10
11
12
13
14
15
16
17
18




19
20
21
22
23
24
25
26
27
28









29
30
31
32
33
34
35
36
37
38
39
40











41
42
43
44
45
46
47
48
49
50
51
52
53
54
55














56
57
58
59



60
61
62


63
64
65
66
67
68
69
8
9
10
11
12
13
14




15
16
17
18
19









20
21
22
23
24
25
26
27
28
29











30
31
32
33
34
35
36
37
38
39
40
41














42
43
44
45
46
47
48
49
50
51
52
53
54
55
56



57
58
59
60


61
62
63
64
65
66
67
68
69







-
-
-
-
+
+
+
+

-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
+
+
+

-
-
+
+







 **THIS PAGE IS BEING TRANSLATED. PLEASE BE PATIENT (OR HELP US IF YOU SPEAK RUSSIAN)** 

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. 

## <a id="toc"></a>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 Не работают инвайты](#Не_работают_инвайты)

# <a id="What_is..."></a>What is...?
## <a id="Roster"></a>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. 

## <a id="Resource"></a>Resource
88
89
90
91
92
93
94
95

96
97
98
99
100
101
102
103
104
105
106

107
108
109
110
111
112
113
88
89
90
91
92
93
94

95
96
97
98
99
100
101
102
103
104
105

106
107
108
109
110
111
112
113







-
+










-
+








    % package present Img

Выяснить список доступных виндовых кодировок: 

    % 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, в отличие от большинства лекарств, допускает как "внутреннее", так и "внешнее" применение на Ткаббере: 

*  Можно запустить Ткаббер "из-под" 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, и дать ссылку на неё отсюда)** 

# <a id="Visual_Appearance_And_Sounds"></a>Visual Appearance And Sounds
## <a id="Fonts"></a>Fonts

**Question: How could I change font/font size for chat windows and menu items?** 
136
137
138
139
140
141
142
143

144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163

164
165
166
167
168
169
170
171
172
173
174
175

176
177
178
179
180
181

182
183
184
185
186
187
188
136
137
138
139
140
141
142

143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162

163
164
165
166
167
168
169
170
171
172
173
174

175
176
177
178
179
180

181
182
183
184
185
186
187
188







-
+



















-
+











-
+





-
+








Unix-users can adapt this solution for them: copying these lines from badlop-config file **/usr/share/tkabber/examples/badlop-config.tcl** to the user's config **~/.tkabber/config.tcl** or writing their own code based on the given options. 

## <a id="Cannot_connect_up_new_smilies_sets_sound_schemes"></a>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. 

## <a id="How_to_enter_smilies_from_a_menu"></a>How to enter smilies "from a menu"?

**Question: I would like to have a small menu that contains all available smilies so that I could choose one by a simple click.** 

Answer: The **Alt-E** hotkey will do this perfectly. By the way, this (and many more) hotkey can be found in the **Help → Quick help** menu of Tkabber. 

Notice: There are at least three arguments against this approach: 

*  after some practice one can type smilies much more rapidly than it takes to look for them in the menu; 
*  note that there are very few "standard" (known to everybody) smilies, and since many people use different smilie sets, often your cool smilie will be seen by your chat pals someway like **:BEER:** — it is understandable but not very cool, isn't it? ;) 
*  many people disabple smilies at all; think about it bearing in mind the previous advice. 

## <a id="Can_I_disable_smilies"></a>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). 

## <a id="Cant_see_smilies_photos_etc_in_PNG_format"></a>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.** 

Answer: Install [tkImg](http://sourceforge.net/projects/tkimg/). 

## <a id="Color_Schemes"></a>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! 

## <a id="Поддерживает_ли_Ткаббер_аватары"></a>Поддерживает ли Ткаббер аватары?

**Вопрос: Вот JAJC с аватарами работает превосходно — и подключает, и показывает собеседникам в систрее. Ткаббер так умеет?** 

Ответ: Систрей для Ткаббера — ахиллесова пята :) Но аватары он поддерживает. Читайте об этом в [**отдельной статье**](../ru/Смайлики_и_аватары.md). 
Ответ: Систрей для Ткаббера — ахиллесова пята :) Но аватары он поддерживает. Читайте об этом в [отдельной статье](Смайлики_и_аватары.md). 

Альтернативное и готовое решение _под Windows_ — скачать старпак ткаббера 0.9.9, собранный Архимедом. Процитируем автора: 

    В окно chat добавлен показ аватара собеседника (hack from badlop).
    По умолчанию эта возможность выключена (по настоянию kostix и teo).
    Включается через настройки в разделе Chat.

196
197
198
199
200
201
202
203

204
205
206
207
208
209
210
211
212
213
214
215
216
217
218

219
220
221
222
223
224
225
196
197
198
199
200
201
202

203
204
205
206
207
208
209
210
211
212
213
214
215
216
217

218
219
220
221
222
223
224
225







-
+














-
+








Ответ: Судя по всему, вы работаете в Linux, а версия Ткаббера у вас — 0.9.7, потому что в версии 0.9.8 уже можно выбрать для каждого события любой звук. Возможно, проблема в том, что программа esdplay, которая установлена по умолчанию, не может проиграть некоторые wav-файлы из схемы Psi, потому что у них частота дискретизации слишком низка — 5000 Hz. Попробуйте прописать другую программу или в звуковом редакторе вроде Audacity отредактируйте файлы, поменяв частоту дискретизации на 11000 Hz. Не забудьте, что если вы указываете в настройках звука просто имя звуковой схемы, то файлы, которые вам нужно редактировать, лежат в **/usr/share/tkabber/sounds/psi**. 

## <a id="Регулировка_громкости_звука"></a>Регулировка громкости звука

**Вопрос: Можно ли в Ткаббере регулировать громкость звука?** 

Ответ: Да, и даже несколькими способами. Почитайте подробно в [**этой статье**](../ru/Проблемы_со_звуком.md). 
Ответ: Да, и даже несколькими способами. Почитайте подробно в [этой статье](Проблемы_со_звуком.md). 

# <a id="Problems_Arising_During_Work"></a>Problems Arising During Work
This section will help you in solving non-standard behaviour of Tkabber in standard situations. 

## <a id="Долгая_загрузка_Ткаббера"></a>Долгая загрузка Ткаббера

**Вопрос: Ткаббер жутко долго грузится. Поначалу я даже думал, что он виснет на старте, но как-то раз набрался тепрения и дождался. Потом работает нормально.** 

Ответ: Посмотрите внимательно, что при этом показывает прогресс-бар сплэш-скрина. Если на нём застыли слова "пользовательский интерфейс", то возможно, дело вот в чём. Если у вас включено кэширование новостей, а самих новостных фидов в ростере — вагон и маленькая тележка, то через некоторое время общее число сообщений может с лёгкостью перевалить за несколько сотен. Естественно, чтобы все их подгрузить из файла, требуется время. Решений несколько: 1) отключить кэширование, тогда при закрытии программы новости, которые вы не успели прочитать, пропадут; 2) избавиться от лишних очень активных фидов или хотя бы просматривать и удалять вручную большие списки новостей перед закрытием программы; 3) смириться с долгой загрузкой или перегружаться как можно реже; 4) проапгрейдить компьютер; 5) оптимизировать код. Выбирать вам :) 

## <a id="Пересылка_файлов"></a>Пересылка файлов

**Вопрос: Так работает в Ткаббере пересылка файлов или нет? Мы с другом пробовали сто раз через все доступные протоколы, и ничего не шлётся.** 

Ответ: Для начала почитайте [**введение**](../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** 

Практическая же реализация (для большинства, но _не всех_ случаев) такова. 

Зайдите в **Настройки → File Transfer** и затем по очереди в **Jidlink** и **SI**. В Jidlink включите опцию 
242
243
244
245
246
247
248
249

250
251
252
253
254
255
256
242
243
244
245
246
247
248

249
250
251
252
253
254
255
256







-
+








Не забудьте сохранить каждую изменяемую опцию для следующих сессий. Если всё равно не работает, перечитайте ещё раз теорию (ссылка в начале ответа). 

## <a id="Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme"></a>Шифрование в Ткаббере: проблемы с **gpgme/tclgpgme**

**Вопрос: Что-то не могу скомпилировать tclgpgme.** 

Ответ: В зависимости от того, какую версию gpgme вы используете и в какой операционной системе работаете, сильно зависит, удастся ли вам подключить шифрование в Ткаббере. Почитайте сначала коротенькую [статью об этом](../ru/Шифрование_в_Ткаббере.md). Исходя из этого ответов может быть несколько. 
Ответ: В зависимости от того, какую версию gpgme вы используете и в какой операционной системе работаете, сильно зависит, удастся ли вам подключить шифрование в Ткаббере. Почитайте сначала коротенькую [статью об этом](Шифрование_в_Ткаббере_(ru).md). Исходя из этого ответов может быть несколько. 

1.  Под Windows шифрование работать не будет. 
1.  Под Linux — в зависимости от дистрибутива: 
 *  В Debian в стабильной ветке всё работает без излишних телодвижений (правда, что там будет в Etch'е — не ясно); 
 *  В rpm-based дистрибутивах проблема пока не исследована (даже неизвестно, есть ли она); 
 *  В source-based дистрибутивах проблема, возможно, решится благодаря следующему совету. 

293
294
295
296
297
298
299
300

301
302
303
304
305
306
307
293
294
295
296
297
298
299

300
301
302
303
304
305
306
307







-
+








    X Error of failed request: BadValue (integer parameter out of range for operation)
    Major opcode of failed request: 45 (X_OpenFont)
    ...

Ответ: Причина может быть либо в "кривых" шрифтах, которые стоят у вас в системе, либо в "кривизне" сервера шрифтов, либо в "кривизне" X-сервера, который сам "раздаёт" шрифты. 

Подробнее читайте [тут](../ru/Проблемы_X_Window_и_TTF.md). 
Подробнее читайте [тут](Проблемы_X_Window_и_TTF_(ru).md). 

## <a id="Не_работает_вставка_по_Control-v_под_X_Window"></a>Не работает вставка по Control-v под X Window

**Вопрос: В многострочных полях ввода не работает вставка текста из буфера обмена, помещённого туда по Control-c (и другим комбинациям).** 

Ответ: В текущих стабильных версиях Tk комбинация **\<Control-KeyPress-v>** в многострочных полях ввода (Tk-виджет "text") привязана к Emacs'овскому действию "прокрутить вниз на полстраницы". 

329
330
331
332
333
334
335
336

337
338
339
340
341
342
343
344
345
346

347
348
349
350
351
352
353
329
330
331
332
333
334
335

336
337
338
339
340
341
342
343
344
345

346
347
348
349
350
351
352
353







-
+









-
+







    % puts [expr 600000*60*1000]
    1640261632
    % 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)` в некоторое разумное количество _минут._ 

Не забудьте сохранить _каждую_ настройку "для текущей и следующих сессий", выбрав соответствующий пункт в меню, вызываемом кнопками "Состояние". 

## <a id="В_старпаке_старките_нет_звука"></a>В старпаке/старките нет звука

**Вопрос: В старпаке (или старките) не работает звук. Его включение/выключение ни к чему не приводит. Что делать?** 

Ответ: Статья о решении этой проблемы перенесена [**сюда**](../ru/Проблемы_со_звуком.md). 
Ответ: Статья о решении этой проблемы перенесена **[сюда](Проблемы_со_звуком_(ru).md)**. 

## <a id="Пропадает_содержимое_ростера"></a>Пропадает содержимое ростера

**Вопрос: Если отключить показ в ростере транспортных иконок `show_transport_user_icons 0` и включить показ активных разговоров `::ifacetk::roster::options(chats_group) 1`, то при попытке открыть хоть один чат с каким-нибудь JID, содержимое ростера пропадает и до перезапуска Ткаббера не восстанавливается.** 

Ответ: Обновитесь с [Tkabber SVN](http://tkabber.jabber.ru/svn) — всё уже исправлено. 

403
404
405
406
407
408
409
410

411
412
413
414
415
416
417
418
419
420
421

422
423
424
425
426
427
428
403
404
405
406
407
408
409

410
411
412
413
414
415
416
417
418
419
420

421
422
423
424
425
426
427
428







-
+










-
+







Ответ: точный ответ на этот вопрос затруднён несколькими обстоятельствами: 

*  Разные люди подразумевают разные вещи под понятием "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: вынести этот чатлог в отдельную страницу, облагородив, т.е. он со временем отэкспайрится и будет удалён на сервере)** 

# <a id="How_Do_I_Do..."></a>How Do I Do...?
Some non-obvious tricks will be explained here. 

## <a id="Отправка_сообщений_по_Ctrl-Enter"></a>Отправка сообщений по Ctrl-Enter

**Вопрос: Можно ли сделать так, чтобы сообщения отправлялись по нажатию Ctrl-Enter, а перевод строки происходил по нажатию Enter, как это сделано в Miranda и других мессенджерах?** 

Ответ: Можно. Вам [**сюда**](../ru/Патчи.md). 
Ответ: Можно. Вам [сюда](Патчи_(ru).md). 

## <a id="Можно_ли_добавить_в_ростер_самого_себя"></a>Можно ли добавить в ростер самого себя?

**Вопрос: У меня запущено два Ткаббера: один дома, другой на работе. Оба запущены от одного аккаунта, просто ресурсы разные (к примеру, **login@jabber.ru/Home** и **login@jabber.ru/Work**). Безуспешно пытаюсь добавить их в ростер, чтобы, находясь дома, видеть и отправлять сообщения самому себе на работу, и наоборот.** 

Ответ: Проблема решаема, правда, придётся пойти на небольшую хитрость. Впрочем, всё по порядку. 

443
444
445
446
447
448
449
450

451
452
453
454
455
456
457
443
444
445
446
447
448
449

450
451
452
453
454
455
456
457







-
+








**Вопрос: Можно ли в одном клиенте открыть сразу несколько аккаунтов? Можно ли сделать так, чтобы клиент автоматически логинился к ним всем?** 

Ответ: 1) Да. 2) Нет. 

Теперь подробнее. 

1.  Сначала логинитесь как обычно, затем снова жмёте Ctrl-L ещё раз и в окне логина идёте на вкладку "Соединение" и **убираете галочку "Закрыть открытые соединения",** если она отмечена. Затем либо вводите в первой вкладке новые параметры логина, либо выбираете их, нажав кнопку "Профили". Чтобы было из чего выбирать, сначала нужно подредактировать [**раздел логина в файле конфигурации**](../ru/Файл_конфигурации.md). После логина в ростере под первым аккаунтом появится второй. Работа с двумя аккаунтами ничем не отличается от обычной, надо только помнить о таких вещах как отправка сообщений, добавление пользователей в контакты и прочие, что имеются в меню Ткаббера **Службы.** При выполнении этих действий у вас появляется окошко, где помимо прочих имеется раскладное (drop-down) меню, которое называется либо "Соединение", либо "От кого", где можно выбрать аккаунт, от имени которого вы будете эти действия совершать.  
1.  Сначала логинитесь как обычно, затем снова жмёте Ctrl-L ещё раз и в окне логина идёте на вкладку "Соединение" и **убираете галочку "Закрыть открытые соединения",** если она отмечена. Затем либо вводите в первой вкладке новые параметры логина, либо выбираете их, нажав кнопку "Профили". Чтобы было из чего выбирать, сначала нужно подредактировать [раздел логина в файле конфигурации](Файл_конфигурации_(ru).md). После логина в ростере под первым аккаунтом появится второй. Работа с двумя аккаунтами ничем не отличается от обычной, надо только помнить о таких вещах как отправка сообщений, добавление пользователей в контакты и прочие, что имеются в меню Ткаббера **Службы.** При выполнении этих действий у вас появляется окошко, где помимо прочих имеется раскладное (drop-down) меню, которое называется либо "Соединение", либо "От кого", где можно выбрать аккаунт, от имени которого вы будете эти действия совершать.  
1.  Если работа с несколькими аккаунтами протекает вполне нормально, то вот автоматически логиниться к ним всем, похоже, нельзя. Во всяком случае, на сегодняшний день это не реализовано. И не будет реализовано, пока кто-нибудь сильно не захочет и не напишет ;) 

## <a id="Как_насчёт_автозахода_на_конференции"></a>Как насчёт автозахода на конференции?

**Вопрос: Надоело каждый раз заходить в десяток комнат. Можно ли это дело автоматизировать?** 

**Ответ:** Начиная с версии 0.9.8, Ткаббер умеет хранить признак автозахода в комнату вместе с самой комнатой в списке контактов. 
467
468
469
470
471
472
473
474

475
476
477
478
479
480
481
482

483
484
485
486
487
488
489
467
468
469
470
471
472
473

474
475
476
477
478
479
480
481

482
483
484
485
486
487
488
489







-
+







-
+








Вполне естественно, что автозаход можно настроить и через конфиг (для версии 0.9.7 и старше это вообще единственная возможность). Как водится, всё уже сделали до нас, осталось только разыскать решение. Надеюсь, вы не обидитесь, если на этом примере я научу вас пользоваться гуглем ;) Когда ищешь что-нибудь в этом самом гугле, главное — правильно задать вопрос. В данном случае ключевые слова: **tkabber**, **autojoin**, **conference**. Первый же [результат](http://lists.jabber.ru/pipermail/tkabber/2005-March/000324.html) [поиска](http://www.google.com/search?q=tkabber+autojoin+conference&start=0&ie=utf-8&oe=utf-8) убивает нам двух зайцев, так как содержит [ссылку на частный случай](http://lists.jabber.ru/pipermail/tkabber/2003-November/000244.html). 

## <a id="Сжатие_трафика_в_Ткаббере"></a>Сжатие трафика в Ткаббере

**Вопрос: В "фичах" версии 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. 

## <a id="Выделение_текста_жирным_курсивом_и_подчёркиванием"></a>Выделение текста жирным, курсивом и подчёркиванием

**Вопрос: Как выделить слово или фразу одним или несколькими из этих стилей?** 

Ответ: Перечитайте статью [**Быстрый старт**](../ru/Начинающим.md) — там всё подробно расписано, и даны примеры. Ещё раз напоминаем, что _в настоящее время_ выделять фразы, содержащие пробелы, лишь двумя форматирующими символами по краям **невозможно.** То есть, выделять надо каждое слово. В будущем ситуация, возможно, изменится. Если да — свистнем ;) А до тех пор \*фраза вот такого типа\* будет выводиться в окне чата "as is". Кроме того, стартовый и стоповый символы выделения должны граничить с пробельными символами (пробел, таб, перевод строки) слева и справа, соответственно. То есть, к примеру: 
Ответ: Перечитайте статью **[Быстрый старт](Начинающим_(ru).md)** — там всё подробно расписано, и даны примеры. Ещё раз напоминаем, что _в настоящее время_ выделять фразы, содержащие пробелы, лишь двумя форматирующими символами по краям **невозможно.** То есть, выделять надо каждое слово. В будущем ситуация, возможно, изменится. Если да — свистнем ;) А до тех пор \*фраза вот такого типа\* будет выводиться в окне чата "as is". Кроме того, стартовый и стоповый символы выделения должны граничить с пробельными символами (пробел, таб, перевод строки) слева и справа, соответственно. То есть, к примеру: 

    watch *this*! → watch *this*! (ошибка: "!" сразу после "*")
    now *watch* this! → now **watch** this!
    
    (*фиг* вам!) → (*фиг* вам!) (ошибка: "(" перед "*")
    (а вот *фиг* вам!) → (а вот **фиг** вам!)

521
522
523
524
525
526
527
528

529
530
531
532
533
534

535
536
537
538
539
540
541
521
522
523
524
525
526
527

528
529
530
531
532
533

534
535
536
537
538
539
540
541







-
+





-
+








**Важное дополнение:** исследования практической стороны показали, что эффективность такого способа игнорирования очень низка. Надоеда меняет ник и тут же появляется в списке участников конференции. Вам же приходится заново вносить новый JID в список, при этом вас снова вышибет из комнаты. Игра не стоит свеч. Впрочем, если надоеде никто не скажет, что его добавили в игнор, то он может и не догадаться сменить ник. На крайний случай у комнаты есть владелец и администраторы. Вряд ли им понравится, если кто-то будет издеваться над посетителями. 

## <a id="Подтверждения"></a>Подтверждения

**Вопрос: Я тут уже несколько раз случайно закрыл "Все вкладки" вместо одной, промазав мышью, а Ткаббер даже не поинтересовался, в своём ли я уме. Не очень-то интеллектуальное поведение для такой продвинутой программы :-P** 

Ответ: Проблема решена. Скачайте соответствующий [**плагин**](../ru/Плагины.md). Заодно Ткаббер станет спрашивать у вас, в своём ли вы уме, закрывая такую продвинутую программу ;-P 
Ответ: Проблема решена. Скачайте соответствующий [плагин](Плагины_(ru).md). Заодно Ткаббер станет спрашивать у вас, в своём ли вы уме, закрывая такую продвинутую программу ;-P 

## <a id="Удалённое_управление"></a>Удалённое управление

**Вопрос: Ткаббер поддерживает удалённое управление, чтобы я, к примеру, мог с домашней машины шурудить Ткаббером, запущенным на работе?** 

Ответ: Ещё как. Курите [теорию](../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-а управляемой машины. Если вам нужно больше, посмотрите настройки. 

## <a id="Команды_Ткаббера"></a>Команды Ткаббера

**Вопрос: Как можно по-быстрому глянуть версию клиента и OS собеседника? Вообще, какими командами располагает Ткаббер и как ими пользоваться?** 

556
557
558
559
560
561
562
563

564
565
566
567
568
569

570
571
572

573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592

593
594
595
596
597
598

599
600
601
602
603
604
605
556
557
558
559
560
561
562

563
564
565
566
567
568

569
570
571

572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591

592
593
594
595
596
597

598
599
600
601
602
603
604
605







-
+





-
+


-
+



















-
+





-
+







 
*  Чтобы вообще никто ничего никогда о вас не узнал, **закройте Ткаббер, выдерните сетевой кабель и выключите компьютер.** Прямо сейчас. Пока этого не сделали МЫ! ;) 

## <a id="Как_подключить_плагин"></a>Как подключить плагин?

**Вопрос: как подключить плагин к ткабберу?** 

Ответ: прочитайте первые два раздела [**здесь**](../ru/Плагины.md). 
Ответ: прочитайте первые два раздела [здесь](Плагины.md). 

## <a id="Как_уменьшить_трафик"></a>Как уменьшить трафик?

**Вопрос: как уменьшить передаваемый/принимаемый Ткаббером трафик (у меня дорогой интернет)?** 

Ответ: прочитайте [**Low traffic HOWTO**](../ru/Low_traffic_HOWTO.md). 
Ответ: прочитайте [Low traffic HOWTO](Low_traffic_HOWTO.md). 

# <a id="Miscellaneous"></a>Miscellaneous
## <a id="Что_случилось_с_сайтом_http__sgolovan.nes.ru__"></a>Что случилось с сайтом [http://sgolovan.nes.ru/](http://sgolovan.nes.ru/) ?
## <a id="Что_случилось_с_сайтом_http__sgolovan.nes.ru_http__sgolovan.nes.ru__"></a>Что случилось с сайтом [http://sgolovan.nes.ru/](http://sgolovan.nes.ru/) ?

**Хочу установить кое-какие пакеты, которые имеются только в его репозитории, но вот уже который день он "в дауне" :( Да и статья там была хорошая про Ткаббер и Windows.** 

Ответ: **5 августа 2006 года. Тео вернулся, сайт работает.** 

На данный момент (конец июля — начало августа 2006 года) сайт закрыт в связи с реконструкцией. Когда он заработает снова, мы пока не знаем (а как узнаем, сообщим), однако можем сказать, что существует зеркало репозитория: 

    [http://sgolovan.jabber.ru/debian/](http://sgolovan.jabber.ru/debian/)

Вписывать в **/etc/apt/sources.list** так: 

    # Sarge:
    deb     http://sgolovan.jabber.ru/debian/ sarge main
    deb-src http://sgolovan.jabber.ru/debian/ sarge main
    
    # 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) 

## <a id="...а_мне_ИГРАТЬ_охота"></a>...а мне ИГРАТЬ охота!!!

**Вопрос: Слышал я, что в Ткаббере можно играть в шахматы, шашки и т.д. Где мне найти соперников, а то из друзей никто не играет?** 

Ответ: Ещё как можно. Для начала вам надо установить игровые [**плагины**](../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)`, по всем вопросам касательно этой комнаты обращайтесь к ней. 

## <a id="Старые_версии_Ткаббера_и_плагинов"></a>Старые версии Ткаббера и плагинов

**Вопрос: Где я могу скачать сабж?** 

Changes to wiki/en/Tkabber_FAQ/Appearance_and_sound.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21









22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12









13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28












-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+







[//]: # (Generated from ../selected/en.tkabber.jabe.ru/index.php/Tkabber_FAQ/Appearance_and_sound/index.html)


# Tkabber FAQ/Appearance and sound

From Tkabber Wiki

[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. 

## <a id="toc"></a>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)

# <a id="Appearance_and_sound"></a>Appearance and sound
## <a id="Why_is_Tkabber_so_ugly"></a>Why is Tkabber so ugly?

Changes to wiki/en/Tkabber_for_Developers.md.

8
9
10
11
12
13
14
15
16
17



18
19
20
21
22
23
24
8
9
10
11
12
13
14



15
16
17
18
19
20
21
22
23
24







-
-
-
+
+
+







[Tips and tricks in debugging Tkabber](Tips_and_tricks_in_debugging_Tkabber.md)
 [How to create your own plugin](How_to_create_your_own_plugin.md) 

## <a id="toc"></a>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)

## <a id="Working_with_Tkabber_internals"></a>Working with Tkabber internals

[What is connid and how to work with it](What_is_connid_and_how_to_work_with_it.md)
 [What is chatid and how to work with it](What_is_chatid_and_how_to_work_with_it.md)
 [What are hooks and avaible hooks list](What_are_hooks_and_avaible_hooks_list.md)

Changes to wiki/es/Especial/Todas_las_Páginas.md.

1
2
3
4
5
6
7
8


9
10
11
12
13
14
1
2
3
4
5
6


7
8
9
10
11
12
13
14






-
-
+
+






# Especial/Todas las Páginas

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)

Changes to wiki/es/Plugin_para_usar_el_muñeco_iBuddy_con_Tkabber.md.

1
2
3
4
5
6

7
8

9
10
11
12

13
14
15
16
17



18
19

20
21

22
23

24
25
26

27
28

29
30
31
32

33
34

35
36
37
38
39

40
41

42
43
44

45
46
47
48

49
50
51

52
53

54
55

56
57

58
59



1
2
3
4
5

6
7

8


9

10
11
12



13
14
15
16

17
18

19
20

21

22

23
24

25


26

27
28

29
30
31
32


33


34

35

36


37

38
39


40
41

42
43

44
45

46
47

48
49
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
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** 
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**.

## <a id="toc"></a>Contenido
## <a id="toc"></a>Содержание

* [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)
* [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)

## <a id="Requisitos"></a>Requisitos
## <a id="Requisitos"></a> Requisitos 

*  pybuddy
*  pybuddy 

Es un demonio escrito en python para controlar el i-buddy. Debes bajarte el código
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 
de [http://code.google.com/p/pybuddy/](http://code.google.com/p/pybuddy/) y tenerlo corriendo en tu máquina.

*  tcludp
*  tcludp 

Proporciona una forma de enviar y recibir paquetes UDP a un socket desde Tcl. Debes
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_ ) 
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_).

## <a id="El_plugin"></a>El plugin
## <a id="el_plugin"></a> el plugin 

*  Copia el siguiente código en un fichero de texto llamado _ibuddy.tcl_ y mételo en
*  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,
*  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. 
   debes marcarlo y guardar los cambios.
*  Tu i-buddy está listo para ser usado. Responderá a los eventos de tu chat moviendo las alas
*  tu i-buddy está listo para ser usado. Responderá a los eventos de tu chat moviendo las alas y emitiendo diversos colores. 
   y emitiendo diversos colores.

*  Si prefieres modificar el código (eres libre de hacerlo) puedes encontrar un listado de los
*  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)] 
   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).

## <a id="El_código"></a>El código
## <a id="el_código"></a> el código 

Este plugin está disponible en el
repositorio [3rd party](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/) de Tkabber.
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).
además, puedes encontrarlo en: [[http://pastebin.com/4qnNxecz](http://pastebin.com/4qnNxecz)] 

[[Download](http://leandro.org/trash/ibuddy.tar.gz)]
[[Download:[download](http://leandro.org/trash/ibuddy.tar.gz)]] 

## <a id="Otros_clientes_de_jabber_con_los_que_también_puedes_utilizar_tu_i-buddy"></a>Otros clientes de jabber con los que también puedes utilizar tu i-buddy
## <a id="otros_clientes_de_jabber_con_los_que_también_puedes_utilizar_tu_i-buddy"></a> otros clientes de jabber con los que también puedes utilizar tu i-buddy 

[[http://www.jabbim.com/](http://www.jabbim.com/)]
[[http://www.jabbim.com/](http://www.jabbim.com/)] 


Changes to wiki/es/Portada.md.

1
2
3
4
5
6

7
8

9
10



1
2
3
4
5

6
7

8
9

10
11
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) 


Changes to wiki/es/Preguntas_frecuentes_sobre_Tkabber.md.

1
2
3
4
5
6

7
8



1
2
3
4
5

6
7

8
9
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) 


Changes to wiki/es/Preguntas_frecuentes_sobre_Tkabber/Apariencia_y_sonido.md.

1
2
3
4
5
6

7
8



1
2
3
4
5

6
7

8
9
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) 


Changes to wiki/es/Tkabber_para_desarrolladores.md.

1
2
3
4
5
6

7
8



1
2
3
4
5

6
7

8
9
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) 


Changes to wiki/ru/$__configdir.md.

1

2
3
4
5

6
7

8
9
10

11
12
13

14
15
16
17
18
19
20
21

22
23
24


25
26
27
28

29
30
31
32




1
2
3
4
5

6
7

8

9

10

11

12




13
14
15

16
17


18
19
20
21
22

23
24



25
26
27
28

+



-
+

-
+
-

-
+
-

-
+
-
-
-
-



-
+

-
-
+
+



-
+

-
-
-
+
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/$::configdir/index.html)


# $::configdir

Материал из Tkabber Wiki
Материал из Tkabber Wiki.

"Магическая переменная" **$::configdir** настолько часто цитируется на страницах нашей вики,
"Магическая переменная" **$::configdir** настолько часто цитируется на страницах нашей вики, что заслужила свою собственную статью. 
что заслужила свою собственную статью.

**$::configdir** — это глобальная переменная Tcl, которая устанавливается Ткаббером на
 **$::configdir** — это глобальная переменная Tcl, которая устанавливается Ткаббером на начальном этапе его загрузки и _содержит полный путь до **каталога настроек** Ткаббера._ 
начальном этапе его загрузки и _содержит полный путь до **каталога настроек** Ткаббера._

Она появилась в версии Ткаббера 0.10.0 в связи с тем, что местоположение настроек этой
Она появилась в версии Ткаббера 0.10.0 в связи с тем, что местоположение настроек этой программы было сделано более "дружелюбным" к системам, не основанным на концепциях Unix. Поскольку это сделало невозможным универсально (то есть платформо-независимо) ссылаться на каталог настроек при помощи "стандартного заклинания" "`~/.tkabber`", была введена сия переменная, а "стандартное заклинание" превратилось просто в 
программы было сделано более "дружелюбным" к системам, не основанным на концепциях 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). 


Changes to wiki/ru/0.10.x/Шрифты.md.

1

2
3
4
5

6
7
8
9



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31















32
33
34
35


36
37
38


39
40
41


42
43

44
45

46
47

48
49
50
51
52
53
54
55

56
57
58

59
60
61
62
63
64
65


66
67
68


69
70

71
72

73
74

75
76
77

78
79

80
81

82
83
84
85

86
87
88
89

90
91

92
93

94
95
96
97

98
99

100
101
102
103

104
105
106
107



108
109
110

111
112
113
114
115

116
117

118
119
120
121
122
123

124
125

126
127
128
129

130
131
132
133

134
135
136
137
138

139
140
141
142

143
144

145
146

147
148
149

150
151
152
153
154
155
156
157

158
159

160
161

162
163

164
165

166
167

168
169

170
171

172
173
174
175

176
177
178
179

180
181

182
183
184
185
186
187

188
189
190
191
192
193
194




195
196

197
198
199
200


201
202

203
204
205

206
207

208
209
210
211

212
213

214
215

216
217
218
219
220
221
222
223
224
225
226
227











228
229

230
231
232
233
234
235

236
237

238
239
240
241

242
243

244
245

246
247

248
249

250
251

252
253

254
255

256
257

258
259

260
261

262
263

264
265

266
267

268
269
270


271
272

273
274
275
276
277
278

279
280

281
282
283
284

285
286
287
288
289

290
291
292

293
294
295


296
297

298
299

300
301
302
303

304
305

306
307
308

309
310
311
312

313
314

315
316
317
318
319



320
321

322
323

324
325

326
327

328
329

330
331
332

333
334

335
336
337
338



339
340
341
342



343
344
345
346



347
348
349
350



351
352

353
354

355
356

357
358

359
360
361
362
363
364

365
366
367
368
369

370
371
372
373

374
375

376
377

378
379

380
381
382
383

384
385
386
387


388
389
390
391
392




393
394

395
396

397
398
399
400
401

402
403
404
405

406
407

408
409
410


411
412
413
414
415




416
417

418
419

420
421

422
423
424

425
426

427
428
429
430



431
432

433
434

435
436

437
438

439
440
441
442

443
444

445
446
447


448
449
450
451

452
453
454
455


456
457

458
459
460

461
462

463
464
465
466
467

468
469
470
471
472

473
474
475

476
477
478
479
480
481
482
483
484
485
486
487

488
489
490
491
492
493
494
495
496
1
2
3
4
5

6
7



8
9
10


11
12
13
14
15















16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32


33
34
35


36
37
38


39
40
41

42
43

44
45

46






47

48

49

50




51


52
53
54


55
56
57

58
59

60
61

62

63

64
65

66
67

68


69

70


71

72
73

74
75

76

77
78

79
80

81

82
83

84
85



86
87
88
89
90

91



92

93
94

95




96

97
98

99


100

101


102

103



104

105


106

107
108

109
110

111

112

113
114
115
116
117
118
119
120

121
122

123
124

125
126

127
128

129
130

131
132

133
134

135
136
137
138

139
140
141
142

143
144

145




146

147


148




149
150
151
152
153

154

155


156
157
158

159

160

161
162

163
164
165
166

167
168

169
170

171
172











173
174
175
176
177
178
179
180
181
182
183
184

185
186
187
188
189
190

191
192

193
194
195
196

197
198

199
200

201
202

203
204

205
206

207
208

209
210

211
212

213
214

215
216

217
218

219
220

221
222

223
224


225
226
227

228
229
230
231
232
233

234
235

236


237

238



239

240

241

242
243


244
245
246

247
248

249


250

251
252

253



254


255

256
257

258





259
260
261


262


263
264

265
266

267
268

269

270

271
272

273




274
275
276




277
278
279




280
281
282




283
284
285


286
287

288
289

290
291

292



293


294



295

296


297

298
299

300
301

302
303

304


305

306

307


308
309





310
311
312
313
314

315
316

317



318

319
320
321
322

323
324

325
326


327
328





329
330
331
332
333

334
335

336
337

338

339

340
341

342




343
344
345


346
347

348
349

350
351

352
353
354
355

356
357

358
359


360
361


362

363

364


365
366
367

368

369

370
371

372



373

374



375

376

377

378
379
380
381
382
383
384
385
386
387
388
389

390


391
392
393
394
395
396
397

+



-
+

-
-
-
+
+
+
-
-





-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


-
-
+
+

-
-
+
+

-
-
+
+

-
+

-
+

-
+
-
-
-
-
-
-

-
+
-

-
+
-
-
-
-

-
-
+
+

-
-
+
+

-
+

-
+

-
+
-

-
+

-
+

-
+
-
-

-
+
-
-

-
+

-
+

-
+
-


-
+

-
+
-


-
+

-
-
-
+
+
+


-
+
-
-
-

-
+

-
+
-
-
-
-

-
+

-
+
-
-

-
+
-
-

-
+
-
-
-

-
+
-
-

-
+

-
+

-
+
-

-
+







-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+



-
+



-
+

-
+
-
-
-
-

-
+
-
-

-
-
-
-
+
+
+
+

-
+
-

-
-
+
+

-
+
-

-
+

-
+



-
+

-
+

-
+

-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+

-
+





-
+

-
+



-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
-
+
+

-
+





-
+

-
+
-
-

-
+
-
-
-

-
+
-

-
+

-
-
+
+

-
+

-
+
-
-

-
+

-
+
-
-
-
+
-
-

-
+

-
+
-
-
-
-
-
+
+
+
-
-
+
-
-
+

-
+

-
+

-
+
-

-
+

-
+
-
-
-
-
+
+
+
-
-
-
-
+
+
+
-
-
-
-
+
+
+
-
-
-
-
+
+
+
-
-
+

-
+

-
+

-
+
-
-
-

-
-
+
-
-
-

-
+
-
-

-
+

-
+

-
+

-
+
-
-

-
+
-

-
-
+
+
-
-
-
-
-
+
+
+
+

-
+

-
+
-
-
-

-
+



-
+

-
+

-
-
+
+
-
-
-
-
-
+
+
+
+

-
+

-
+

-
+
-

-
+

-
+
-
-
-
-
+
+
+
-
-
+

-
+

-
+

-
+



-
+

-
+

-
-
+
+
-
-

-
+
-

-
-
+
+

-
+
-

-
+

-
+
-
-
-

-
+
-
-
-

-
+
-

-
+











-
+
-
-







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/0.10.x/Шрифты/index.html)


# 0.10.x/Шрифты

Материал из Tkabber Wiki
Материал из Tkabber Wiki.

**![(!)](../../images/Warning.gif) Внимание!**

В систему управления настройками шрифтов версии 0.11.0 были внесены изменения, и данная
 ** ![(!)](../../images/Warning.gif) Внимание! **
 
  В систему управления настройками шрифтов версии 0.11.0 были внесены изменения, и данная статья относится ко всем версиям, вышедшим до 0.11.0 (как минимум, к 0.9.7 – 0.10.0); если вас интересует современная версия Ткаббера (0.11.0 и выше), читайте [эту статью](../Шрифты.md). 
статья относится ко всем версиям, вышедшим до 0.11.0 (как минимум, к 0.9.7–0.10.0); если
вас интересует современная версия Ткаббера (0.11.0 и выше), читайте [**эту статью**](../Шрифты.md).

## <a id="toc"></a>Содержание

* [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 Другие полезные средства](#Другие_полезные_средства)
 * [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)
 * [4.1 Отдельная настройка шрифта ростеров](#Отдельная_настройка_шрифта_ростеров)
 * [4.2 Борьба с антиалиасингом в Xft](#Борьба_с_антиалиасингом_в_Xft)

## <a id="Что_настраивать"></a>Что настраивать
У Ткаббера можно "покрутить" настройки двух шрифтов:
# <a id="Что_настраивать"></a>Что настраивать
У Ткаббера можно "покрутить" настройки двух шрифтов: 

*  Шрифт интерфейса (меню, всевозможные подписи, поля ввода и т.д.);
*  Шрифт окна чата и ростера.
*  Шрифт интерфейса (меню, всевозможные подписи, поля ввода и т.д.); 
*  Шрифт окна чата и ростера. 

Первый шрифт является главным, и если второй не задан явно, то шрифт интерфейса используется для отрисовки всего и везде.
Первый шрифт является главным, и если второй не задан явно, то шрифт интерфейса используется для отрисовки всего и везде. 

Если ни один из шрифтов не задан явно, для всего используется _шрифт по умолчанию данной оконной системы_.
Если ни один из шрифтов не задан явно, для всего используется _шрифт по умолчанию данной оконной системы_. 

Это означает, что в X Window System, в которой [Tk](http://ru.wikipedia.org/wiki/Tk) "поднимает"
Это означает, что в X Window System, в которой [Tk](http://ru.wikipedia.org/wiki/Tk) "поднимает" настройки из [XRDB](../XRDB.md), если таковая есть, будет взят указанный там шрифт. Если подходящего шрифта там нет, Tk попросит сервер шрифтов выдать нечто, удовлетворяющее формулировке "шрифт по умолчанию в такой-то кодировке". Поскольку в "иксах" достоверно существует только шрифт "fixed", подобный запрос для случая отрисовки кириллического текста обычно удовлетворяется первым попавшимся кириллическим шрифтом семейства "fixed"; нередко это совершенно не то, что вы хотели бы видеть. 
настройки из [**XRDB**](../XRDB.md), если таковая есть, будет взят указанный там шрифт.
Если подходящего шрифта там нет, Tk попросит сервер шрифтов выдать нечто, удовлетворяющее
формулировке "шрифт по умолчанию в такой-то кодировке". Поскольку в "иксах" достоверно
существует только шрифт "fixed", подобный запрос для случая отрисовки кириллического текста
обычно удовлетворяется первым попавшимся кириллическим шрифтом семейства "fixed"; нередко это
совершенно не то, что вы хотели бы видеть.

Непонимание этого факта порождает печально известный миф о "кривых шрифтах в Ткаббере";
Непонимание этого факта порождает печально известный миф о "кривых шрифтах в Ткаббере"; так вот: в Ткаббере не бывает кривых шрифтов — бывают криво настроенные системы. 
так вот: в Ткаббере не бывает кривых шрифтов — бывают криво настроенные системы.

**Примечание:** приведённая выше дихотомия настроек шрифтов является сознательным упрощением,
**Примечание:** приведённая выше дихотомия настроек шрифтов является сознательным упрощением, так как [база данных опций Tk](../База_данных_опций_Tk.md) (и родственная ей [XRDB](../XRDB.md)) позволяют настраивать шрифты отдельно для разных классов виджетов и даже отдельно — для каждого виджета, поддерживающего настройку шрифта. Тема чуть подробнее изложена [ниже](../Шрифты.md#Тонкая_настройка_шрифта_интерфейса). 
так как [**база данных опций Tk**](../База_данных_опций_Tk.md) (и родственная ей [**XRDB**](../XRDB.md))
позволяют настраивать шрифты отдельно для разных классов виджетов и даже отдельно — для каждого
виджета, поддерживающего настройку шрифта. Тема чуть подробнее
изложена [**ниже**](#Тонкая_настройка_шрифта_интерфейса).

## <a id="Как_настраивать"></a>Как настраивать
Есть два варианта:
# <a id="Как_настраивать"></a>Как настраивать
Есть два варианта: 

*  Настроить систему;
*  Настроить Ткаббер.
*  Настроить систему; 
*  Настроить Ткаббер. 

А также можно сначала настроить систему, а потом отдельно настроить шрифт для чата и ростера.
А также можно сначала настроить систему, а потом отдельно настроить шрифт для чата и ростера. 

### <a id="Настройка_системы"></a>Настройка системы
## <a id="Настройка_системы"></a>Настройка системы

В Microsoft® Windows™ шрифты системы можно настроить штатным конфигуратором,
В Microsoft® Windows™ шрифты системы можно настроить штатным конфигуратором, который доступен в виде апплета "Экран" "Панели инструментов". 
который доступен в виде апплета "Экран" "Панели инструментов".

В X Window настраивать нужно [**XRDB**](../XRDB.md).
В X Window настраивать нужно [XRDB](../XRDB.md). 

### <a id="Настройка_Ткаббера"></a>Настройка Ткаббера
## <a id="Настройка_Ткаббера"></a>Настройка Ткаббера

Придётся отредактировать файл [**config.tcl**](../Config.tcl.md) в [**каталоге настроек**](../$__configdir.md)
Придётся отредактировать файл [**config.tcl**](../Config.tcl.md) в [каталоге настроек](../$__configdir.md) Ткаббера. Если вы собираетесь делать это первый раз, _обязательно_ прочитайте [эту статью](../Config.tcl_для_начинающих.md)! 
Ткаббера. Если вы собираетесь делать это первый раз, _обязательно_
прочитайте [**эту статью**](../Config.tcl_для_начинающих.md)!

Настройки, интересующие нас, должны находиться либо "на верхнем уровне" файла конфигурации
Настройки, интересующие нас, должны находиться либо "на верхнем уровне" файла конфигурации (проще говоря, на чистом месте: вне каких-либо блоков) или в обработчике [хука](../Загрузка_настроек.md#Хуки) **postload\_hook**. 
(проще говоря, на чистом месте: вне каких-либо блоков) или в обработчике [**хука**](../Загрузка_настроек.md#Хуки)
**postload\_hook**.

Настроек, как говорилось, две:
Настроек, как говорилось, две: 

##### <a id="Шрифт_интерфейса"></a>Шрифт интерфейса
 Шрифт интерфейса 

Настраивается через базу данных опций Tk с использованием команды [option](http://www.tcl.tk/man/tcl8.4/TkCmd/option.htm), например:
 Настраивается через базу данных опций Tk с использованием команды [option](http://www.tcl.tk/man/tcl8.4/TkCmd/option.htm), например: 

    option add *font -monotype-arial-medium-r-*-*-11-*-100-100-*-*-iso10646-1

##### <a id="Шрифт_окон_чата_и_ростера"></a>Шрифт окон чата и ростера
 Шрифт окон чата и ростера 

Настраивается установкой глобальной переменной **font**, например:
 Настраивается установкой глобальной переменной **font**, например: 

    set font -monotype-arial-medium-r-*-*-11-*-100-100-*-*-iso10646-1

Итак, минимальный пример куска конфигурации, устанавливающего оба шрифта Ткаббера, выглядит следующим образом:
Итак, минимальный пример куска конфигурации, устанавливающего оба шрифта Ткаббера, выглядит следующим образом: 

    # Шрифт элементов интерфейса:
    option add *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** необходимо ссылаться на глобальную
**Внимание!** Внутри обработчика хука **postload\_hook** необходимо ссылаться на глобальную переменную **font**, используя её полностью квалифицированное имя: **::font**, либо вначале объявить, что эта переменная глобальна, такой командой: `global font`. В противном случае тикль создаст локальную (в пределах обработчика хука) переменную и будет изменять её. 
переменную **font**, используя её полностью квалифицированное имя: **::font**, либо вначале
объявить, что эта переменная глобальна, такой командой: `global font`. В противном случае
тикль создаст локальную (в пределах обработчика хука) переменную и будет изменять её.

**Интересный факт:** даже в X Window System кодировка шрифта не обязана совпадать с локалью.
**Интересный факт:** даже в X Window System кодировка шрифта не обязана совпадать с локалью. 

**Подсказка:** в любой системе удобнее всего сначала подобрать требуемый шрифт при помощи
**Подсказка:** в любой системе удобнее всего сначала подобрать требуемый шрифт при помощи какого-либо специального программного средства, а затем уже указывать этот шрифт в конфигурации Ткаббера. В X Window такой программой является, к примеру, **xfontsel**, а в Windows можно воспользоваться средствами упомянутого апплета "Экран". Шрифты в Ткаббере также можно подбирать [интерактивно](../Шрифты.md#Быстрое_тестирование_настроек). 
какого-либо специального программного средства, а затем уже указывать этот шрифт в
конфигурации Ткаббера. В X Window такой программой является, к примеру, **xfontsel**,
а в Windows можно воспользоваться средствами упомянутого апплета "Экран". Шрифты в
Ткаббере также можно подбирать [**интерактивно**](#Быстрый_подбор_шрифтов).

### <a id="Продвинутые_спецификации_шрифтов"></a>Продвинутые спецификации шрифтов
## <a id="Продвинутые_спецификации_шрифтов"></a>Продвинутые спецификации шрифтов

Если шрифты настраиваются в файле конфигурации Ткаббера (а не средствами системы),
Если шрифты настраиваются в файле конфигурации Ткаббера (а не средствами системы), для их спецификации можно использовать дополнительные возможности подсистемы Tk для работы со шрифтами. 
для их спецификации можно использовать дополнительные возможности подсистемы Tk
для работы со шрифтами.

Строго говоря, все эти возможности подробно изложены на
Строго говоря, все эти возможности подробно изложены на соответствующей [странице руководства](http://www.tcl.tk/man/tcl8.4/TkCmd/font.htm), однако тут мы "расшифруем" основные её положения. 
соответствующей [странице руководства](http://www.tcl.tk/man/tcl8.4/TkCmd/font.htm),
однако тут мы "расшифруем" основные её положения.

Tk поддерживает пять способов указания шрифтов; приведённый в "каноническом" примере
Tk поддерживает пять способов указания шрифтов; приведённый в "каноническом" примере стиль ["XLFD"](http://ftp.xfree86.org/pub/XFree86/4.5.0/doc/xlfd.txt) ("X Logical Font Description") является одним из них, и вообще говоря, для пользователей систем, не основанных на X Window System, он является непонятным и неудобным. 
стиль ["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 имеет проблемы с не-XLFD спецификациями шрифтов в X Window. Подробнее об
этом написано [**ниже**](#Проблемы_не-XLFD_спецификаций_в_X_Window).

Вот эти пять способов:
Вот эти пять способов: 

#### <a id="Программное_имя_шрифта"></a>"Программное имя" шрифта
### <a id="Программное_имя_шрифта"></a>"Программное имя" шрифта

Это имя шрифта, созданного при помощи команды Tk `font create`: Это — наименее
Это имя шрифта, созданного при помощи команды Tk `font create`: Это — наименее интересный для нас способ, так как в основном предназначен для облегчения написания программ. 
интересный для нас способ, так как в основном предназначен для облегчения написания программ.

Пример:
Пример: 

    # Создаём новый шрифт:
    set myfont [font create {"Comic Sans MS" 12}]
    # Теперь переменная myfont содержит программное имя созданного шрифта.
    # Используем наш новый шрифт для настройки Ткаббера:
    set font $myfont

#### <a id="Имя_системного_шрифта"></a>Имя системного шрифта
### <a id="Имя_системного_шрифта"></a>Имя системного шрифта

Имеет смысл только в Windows и Macintosh. Позволяет сослаться на один из шрифтов, настроенных для использования в системе.
Имеет смысл только в Windows и Macintosh. Позволяет сослаться на один из шрифтов, настроенных для использования в системе. 

##### <a id="Системные_шрифты_Windows"></a>Системные шрифты Windows
 Системные шрифты Windows

system, ansi, device, systemfixed, ansifixed, oemfixed
 system, ansi, device, systemfixed, ansifixed, oemfixed 

##### <a id="Системные_шрифты_Macintosh"></a>Системные шрифты Macintosh
 Системные шрифты Macintosh

system, application
 system, application 

#### <a id="Иксовый_формат"></a>"Иксовый" формат
### <a id="Иксовый_формат"></a>"Иксовый" формат

Это формат XLFD, представляющий собой строку вида
Это формат XLFD, представляющий собой строку вида 

    -foundry-family-weight-slant-setwidth-addstyle-pixel-point-resx-resy-spacing-width-charset-encoding

Любое из полей может быть заменено символом "\*", что означает "любое значение".
Любое из полей может быть заменено символом "\*", что означает "любое значение". 

---

Теперь перейдём к наиболее интересным форматам.
Теперь перейдём к наиболее интересным форматам. 

Следует заметить, что совокупность параметров, формирующих представление шрифта в этих форматах,
Следует заметить, что совокупность параметров, формирующих представление шрифта в этих форматах, должна представлять собой "правильно сформированный список". Академическое описание этого понятия, как ни странно, достаточно трудно для понимания; полные правила, которыми руководствуется тикль, осуществляя группировку, можно изучить [здесь](http://wiki.tcl.tk/14940). А в рамках данной статьи мы просто дадим пару советов, как получить такой список из набора параметров: 
должна представлять собой "правильно сформированный список". Академическое описание этого
понятия, как ни странно, достаточно трудно для понимания; полные правила, которыми
руководствуется тикль, осуществляя группировку, можно изучить [здесь](http://wiki.tcl.tk/14940).
А в рамках данной статьи мы просто дадим пару советов, как получить такой список из набора параметров:

*  Список с точки зрения тикля должен представлять собой одно _слово._ Это значит, что _элементы_
*  Список с точки зрения тикля должен представлять собой одно _слово._ Это значит, что _элементы_ списка нужно _сгруппировать_ друг с другом. Проще всего это сделать фигурными скобками или двойными кавычками, например: 
списка нужно _сгруппировать_ друг с другом. Проще всего это сделать фигурными скобками или двойными
кавычками, например:

        # Список из трёх элементов:
        {a b c}
        # Список из четырёх элементов:
        "d ef gh ij"
    # Список из трёх элементов:
    {a b c}
    # Список из четырёх элементов:
    "d ef gh ij"

*  Список состоит из _слов_, слова отделяются друг от друга пробельными символами. Это означает,
*  Список состоит из _слов_, слова отделяются друг от друга пробельными символами. Это означает, что если элементы-слова вашего списка сами содержат пробелы, их придётся сгруппировать, например: 
что если элементы-слова вашего списка сами содержат пробелы, их придётся сгруппировать, например:

        # Список из трёх элементов:
        {{первый элемент} второй {и третий элемент}}
    # Список из трёх элементов:
    {{первый элемент} второй {и третий элемент}}

Не стоит отчаиваться, если правила группировки вам не вполне понятны — ниже приводятся
Не стоит отчаиваться, если правила группировки вам не вполне понятны — ниже приводятся готовые примеры, которые позволят вам "почувствовать", как работают эти правила. 
готовые примеры, которые позволят вам "почувствовать", как работают эти правила.

#### <a id="Свободный_формат"></a>"Свободный" формат
### <a id="Свободный_формат"></a>"Свободный" формат

Является "человекопонятным" и представляет собой _список_ из одного или более значений в указанном порядке:
Является "человекопонятным" и представляет собой _список_ из одного или более значений в указанном порядке: 

    семейство ?размер? ?стиль? ?стиль ...?

(Запись **?foo?** означает "необязательный параметр класса foo".)
(Запись **?foo?** означает "необязательный параметр класса foo".) 

Обязательным является только семейство шрифта (font family).
Обязательным является только семейство шрифта (font family). 

Доступные стили:
Доступные стили: 

*  Толщина начертания:
 *  **normal** — обычная;
 *  **bold** — полужирный шрифт;

*  Наклон символов:
 *  **roman** — обычное (прямое) начертание;
 *  **italic** — курсивное начертание;

*  Дополнительные стили:
 *  **underline** — подчёркнутый шрифт;
 *  **overstrike** — перечёркнутый шрифт.
*  Толщина начертания: 
 *  **normal** — обычная; 
 *  **bold** — полужирный шрифт; 
 
*  Наклон символов: 
 *  **roman** — обычное (прямое) начертание; 
 *  **italic** — курсивное начертание; 
 
*  Дополнительные стили: 
 *  **underline** — подчёркнутый шрифт; 
 *  **overstrike** — перечёркнутый шрифт. 

Примеры:
Примеры: 

    set font Tahoma
    set font {Arial 12}
    option add *font {{Times New Roman} 14 bold italic}

#### <a id="Формат_пары_опция_значение"></a>Формат "пары опция/значение"
### <a id="Формат_пары_опция_значение"></a>Формат "пары опция/значение"

Представляет собой _список_ пар опция/значение:
Представляет собой _список_ пар опция/значение: 

    опция значение ?опция значение ...?

Доступные опции и значения:
Доступные опции и значения: 

##### <a id="-family"></a>-family
 -family

Семейство шрифтов.
 Семейство шрифтов. 

##### <a id="-size"></a>-size
 -size

Размер шрифта.
 Размер шрифта. 

##### <a id="-weight"></a>-weight
 -weight

Толщина начертания шрифта. Доступные значения: **bold** (полужирный) и **normal** (обычный).
 Толщина начертания шрифта. Доступные значения: **bold** (полужирный) и **normal** (обычный). 

##### <a id="-slant"></a>-slant
 -slant

Наклон символов шрифта. Доступные значения: **italic** (курсив) и **roman** (прямой).
 Наклон символов шрифта. Доступные значения: **italic** (курсив) и **roman** (прямой). 

##### <a id="-underline"></a>-underline
 -underline

Подчёркивание. Значением является значение булевого типа (**true**, **yes**, ненулевое число — истина; **false**, **no**, 0 — ложь).
 Подчёркивание. Значением является значение булевого типа (**true**, **yes**, ненулевое число — истина; **false**, **no**, 0 — ложь). 

##### <a id="-overstrike"></a>-overstrike
 -overstrike

Зачёркивание. Доступные значения: истина и ложь.
 Зачёркивание. Доступные значения: истина и ложь. 

В отличие от предыдущего способа, в этом:
В отличие от предыдущего способа, в этом: 

*  Пары могут следовать в произвольном порядке;
*  Возможно не указывать семейство шрифтов и/или размер, а указать только один или несколько стилей начертания.
*  Пары могут следовать в произвольном порядке; 
*  Возможно не указывать семейство шрифтов и/или размер, а указать только один или несколько стилей начертания. 

Примеры:
Примеры: 

    set font "-family {Comic Sans MS} -overstrike yes"
    option add *font {-weight bold -size 12}
    set font {-underline 1}

### <a id="Проблемы_не-XLFD_спецификаций_в_X_Window"></a>Проблемы не-XLFD спецификаций в X Window
## <a id="Проблемы_не-XLFD_спецификаций_в_X_Window"></a>Проблемы не-XLFD спецификаций в X Window

К сожалению, версия Tk для X Window имеет баг с подбором глифов к символам, не входящим
К сожалению, версия Tk для X Window имеет баг с подбором глифов к символам, не входящим в Latin-1 (и поэтому он затрагивает русскоговорящих, а точнее, кириллически пишущих пользователей Ткаббера). 
в Latin-1 (и поэтому он затрагивает русскоговорящих, а точнее, кириллически пишущих пользователей
Ткаббера).

Баг проявляется в том, что _при использовании не-XLFD спецификаций шрифтов_ Tk иногда сильно
Баг проявляется в том, что _при использовании не-XLFD спецификаций шрифтов_ Tk иногда сильно ошибается с подбором глифов к символам, отсутствующим в шрифте, который был выбран в соответствии со специфиацией как основной. Выглядит это, например, как сильно отличающиеся от основного шрифта глифы кириллических символов. 
ошибается с подбором глифов к символам, отсутствующим в шрифте, который был выбран в
соответствии со специфиацией как основной. Выглядит это, например, как сильно отличающиеся
от основного шрифта глифы кириллических символов.

Насколько нам известно, работы по переписыванию алгоритма подбора шрифтов в X Window ведутся,
Насколько нам известно, работы по переписыванию алгоритма подбора шрифтов в X Window ведутся, но проблема всё ещё не решена. 
но проблема всё ещё не решена.

Выходов из данной ситуации два:
Выходов из данной ситуации два: 

*  Использовать XLFD-спецификацию для шрифтов.
*  Использовать версию 8.5 Tcl/Tk, собранную с поддержкой технологии [Xft](http://www.fontconfig.org/).
*  Использовать XLFD-спецификацию для шрифтов. 
*  Использовать версию 8.5 Tcl/Tk, собранную с поддержкой технологии [Xft](http://www.fontconfig.org/). 

Остановимся подробнее на втором варианте.
Остановимся подробнее на втором варианте. 

Поддержка [Xft](http://wiki.tcl.tk/9015) появилась в Tk начиная с версии 8.5. Как для подбора,
Поддержка [Xft](http://wiki.tcl.tk/9015) появилась в Tk начиная с версии 8.5. Как для подбора, так и для отображения шрифтов используются совершенно другие механизмы, и, в частности, при использовании Xft полностью отсутствует обсуждаемая проблема. 
так и для отображения шрифтов используются совершенно другие механизмы, и, в частности,
при использовании Xft полностью отсутствует обсуждаемая проблема.

Однако, надо понимать последствия перехода на Xft:
Однако, надо понимать последствия перехода на Xft: 

*  Подсистема Xft имеет собственные настройки, не имеющие отношения к стандартным механизмам
*  Подсистема Xft имеет собственные настройки, не имеющие отношения к стандартным механизмам X Window. В частности, вам, возможно, придётся познакомиться с [fontconfig](http://fontconfig.org/fontconfig-user.html). 
   X Window. В частности, вам, возможно, придётся познакомиться
   с [fontconfig](http://fontconfig.org/fontconfig-user.html).
*  Несмотря на поддержку TrueType и полную поддержку Unicode шрифтов, Xft также
*  Несмотря на поддержку TrueType и полную поддержку Unicode шрифтов, Xft также использует [антиалиасинг](http://en.wikipedia.org/wiki/Anti-aliasing), который нравится далеко не всем. 
   использует [антиалиасинг](http://en.wikipedia.org/wiki/Anti-aliasing), который
   нравится далеко не всем.

Узнать, поддерживает ли ваша версия **wish** Xft, можно двумя способами:
Узнать, поддерживает ли ваша версия **wish** Xft, можно двумя способами: 

*  В Linux можно узнать, слинкован ли **wish** с соответствующей динамической библиотекой,
*  В Linux можно узнать, слинкован ли **wish** с соответствующей динамической библиотекой, примерно так: 
   примерно так:

        $ ldd `which wish` | grep -i xft

*  В любой системе можно запустить **wish** и выполнить там команду:
    $ ldd `which wish` | grep -i xft
 
*  В любой системе можно запустить **wish** и выполнить там команду: 

        tk::pkgconfig get fontsystem
    tk::pkgconfig get fontsystem

Если она не "заругалась" и выдала строку "xft", — ваш Tcl/Tk поддеживает Xft.
 Если она не "заругалась" и выдала строку "xft", — ваш Tcl/Tk поддеживает Xft. 

О борьбе с антиалиазингом в Xft рассказано [**ниже**](#Борьба_с_антиалиасингом_в_Xft).
О борьбе с антиалиазингом в Xft рассказано [ниже](../Шрифты.md#Борьба_с_антиалиасингом_в_Xft). 

### <a id="Тонкая_настройка_шрифта_интерфейса"></a>Тонкая настройка шрифта интерфейса
## <a id="Тонкая_настройка_шрифта_интерфейса"></a>Тонкая настройка шрифта интерфейса

Для понимания того, чего и где крутить, нужно осмыслить
Для понимания того, чего и где крутить, нужно осмыслить работу [базы данных опций Tk](../База_данных_опций_Tk.md) и [XRDB](../XRDB.md). 
работу [**базы данных опций Tk**](../База_данных_опций_Tk.md) и [**XRDB**](../XRDB.md).

Приведём пару готовых примеров:
Приведём пару готовых примеров: 

*  Шрифт меню:
*  Шрифт меню: 

        option add *Menu.font "Arial 10"

*  Шрифт однострочных полей ввода:
    option add *Menu.font "Arial 10"
 
*  Шрифт однострочных полей ввода: 

        option add *Entry.font {-weight bold}

*  Шрифт меток (статического текста):
    option add *Entry.font {-weight bold}
 
*  Шрифт меток (статического текста): 

        option add *Label.font {-slant italic}

*  Шрифт табов (\<= 0.10.0):
    option add *Label.font {-slant italic}
 
*  Шрифт табов (\<= 0.10.0): 

        option add *nb.font {-size 8}

*  Шрифт "новых табов" (альфа 0.10.1):
    option add *nb.font {-size 8}
 
*  Шрифт "новых табов" (альфа 0.10.1): 

        option add *nb.Button.font {-size 9}
    option add *nb.Button.font {-size 9}

...
... 

### <a id="Быстрый_подбор_шрифтов"></a>Быстрый подбор шрифтов
## <a id="Быстрый_подбор_шрифтов"></a>Быстрый подбор шрифтов

Вовсе необязательно "до посинения" повторять цикл "редактирование файла конигурации +
Вовсе необязательно "до посинения" повторять цикл "редактирование файла конигурации + перезапуск Ткаббера" — Ткаббер написан на тикле и поэтому позволяет управлять собой интерактивно. Это можно использовать для быстрого — "натурного" — подбора подходящих шрифтов чтобы затем один раз вписать правильные строчки в файл конфигурации. 
перезапуск Ткаббера" — Ткаббер написан на тикле и поэтому позволяет управлять собой
интерактивно. Это можно использовать для быстрого — "натурного" — подбора подходящих
шрифтов чтобы затем один раз вписать правильные строчки в файл конфигурации.

Откройте [**консоль Ткаббера**](../Ткаббер_ЧаВо.md#Консоль_Ткаббера). Здесь можно
вводить те же самые команды, которые предназначены для помещения в файл конфигурации,
Откройте [консоль Ткаббера](../Ткаббер_ЧаВо.md#Консоль_Ткаббера). Здесь можно вводить те же самые команды, которые предназначены для помещения в файл конфигурации, в точно таком же формате. Имейте также в виду, что как встроенная консоль Ткаббера, так и tkcon, поддерживают историю введённых команд, доступную по нажатиям клавиш ↑ и ↓. 
в точно таком же формате. Имейте также в виду, что как встроенная консоль Ткаббера,
так и **tkcon**, поддерживают историю введённых команд, доступную по нажатиям
клавиш ↑ и ↓.

Как было сказано выше, у Ткаббера есть две группы элементов интерфейса, у которых
Как было сказано выше, у Ткаббера есть две группы элементов интерфейса, у которых можно настроить шрифты. Для быстрого тестирования нам нужно понять, как заставить Ткаббер "применить" изменённый шрифт. 
можно настроить шрифты. Для быстрого тестирования нам нужно понять, как заставить
Ткаббер "применить" изменённый шрифт.

Это несложно:
Это несложно: 

#### <a id="Шрифт_интерфейса"></a>Шрифт интерфейса
### <a id="Шрифт_интерфейса"></a>Шрифт интерфейса

Используется, помимо прочего, для отрисовки всевозможных меню.
Используется, помимо прочего, для отрисовки всевозможных меню. 

Это означает, что для того, чтобы посмотреть настройку, изменённую при помощи
Это означает, что для того, чтобы посмотреть настройку, изменённую при помощи `option add *font ...`, нужно просто открыть какое-либо _динамически создаваемое_ меню. Главное меню для этого не подходит, а вот меню на элементах ростера подходят замечательно. 
`option add *font ...`, нужно просто открыть какое-либо _динамически создаваемое_ меню.
Главное меню для этого не подходит, а вот меню на элементах ростера подходят замечательно.

Итак, для быстрого подбора шрифта для элементов интерфейса выполняйте такую
Итак, для быстрого подбора шрифта для элементов интерфейса выполняйте такую последовательность действий: 
последовательность действий:

1.  Запустите Ткаббер, залогиньтесь на сервер, чтобы получить ростер, откройте консоль.
1.  Напишите там
1.  Запустите Ткаббер, залогиньтесь на сервер, чтобы получить ростер, откройте консоль. 
1.  Напишите там 

        option add *font ваша_спецификация_шрифта

1.  Откройте меню на любом контакте в ростере, рассмотрите шрифт.
1.  Повторяйте процедуру до получения удобоваримого результата.
    option add *font ваша_спецификация_шрифта
 
1.  Откройте меню на любом контакте в ростере, рассмотрите шрифт. 
1.  Повторяйте процедуру до получения удобоваримого результата. 

#### <a id="Шрифт_окон_чата_и_ростера"></a>Шрифт окон чата и ростера
### <a id="Шрифт_окон_чата_и_ростера"></a>Шрифт окон чата и ростера

Для тестирования этого шрифта нам нужно открыть (или переоткрыть) какое-либо окно чата.
Для тестирования этого шрифта нам нужно открыть (или переоткрыть) какое-либо окно чата. Лучше всего для этого подходит какая-либо специальная тестовая комната, например, `test@conference.jabber.ru`. Также ничего не мешает вам открыть окно чата с самим собой (или со второй копией Ткаббера). 
Лучше всего для этого подходит какая-либо специальная тестовая комната, например,
`test@conference.jabber.ru`. Также ничего не мешает вам открыть окно чата с самим собой
(или со второй копией Ткаббера).

Есть и более быстрый способ: вызов процедуры Ткаббера
Есть и более быстрый способ: вызов процедуры Ткаббера 

    ::ifacetk::roster::redraw

перерисовывает основной ростер, применяя установленный шрифт.
перерисовывает основной ростер, применяя установленный шрифт. 

Итак, для быстрого подбора шрифта для окон чата выполняйте такую последовательность действий:
Итак, для быстрого подбора шрифта для окон чата выполняйте такую последовательность действий: 

1.  Запустите Ткаббер, залогиньтесь на сервер, чтобы получить доступ к чатам, откройте консоль.
1.  Напишите там
1.  Запустите Ткаббер, залогиньтесь на сервер, чтобы получить доступ к чатам, откройте консоль. 
1.  Напишите там 

        set font ваша_спецификация_шрифта

1.  (Пере)откройте какое-либо окно чата или вызовите указанную выше процедуру, рассмотрите шрифт.
1.  Повторяйте процедуру до получения удобоваримого результата.
    set font ваша_спецификация_шрифта
 
1.  (Пере)откройте какое-либо окно чата или вызовите указанную выше процедуру, рассмотрите шрифт. 
1.  Повторяйте процедуру до получения удобоваримого результата. 

![(!)](../../images/Hammer.png) **Сделать:** Выяснить применимы ли тут команды `ifacetk::switch_font` и `ifacetk::define_fonts`
![(!)](../../images/Hammer.png) **Сделать:** Выяснить применимы ли тут команды `ifacetk::switch_font` и `ifacetk::define_fonts` 

#### <a id="Немножко_хардкора"></a>Немножко хардкора
### <a id="Немножко_хардкора"></a>Немножко хардкора

Вы можете узнать, что именно думает Tk по поводу шрифта, который вы установили. Для этого
Вы можете узнать, что именно думает Tk по поводу шрифта, который вы установили. Для этого используется команда `font actual`. 
используется команда `font actual`.

Используется она следующим образом:
Используется она следующим образом: 

*  Для шрифта интерфейса:
*  Для шрифта интерфейса: 

        font actual [option get . font [winfo class .]]

*  Для шрифта чатов и ростера:
    font actual [option get . font [winfo class .]]
 
*  Для шрифта чатов и ростера: 

        font actual $font
    font actual $font

За подробностями обращайтесь к соответствующей [странице руководства](http://www.tcl.tk/man/tcl8.4/TkCmd/font.htm).
За подробностями обращайтесь к соответствующей [странице руководства](http://www.tcl.tk/man/tcl8.4/TkCmd/font.htm). 

### <a id="Другие_полезные_средства"></a>Другие полезные средства
## <a id="Другие_полезные_средства"></a>Другие полезные средства

Интерес может представлять команда
Интерес может представлять команда 

    font families

которая возвращает список всех семейств шрифтов, доступных Ткабберу.
которая возвращает список всех семейств шрифтов, доступных Ткабберу. 

Её можно ввести с консоли работающего Ткаббера.
Её можно ввести с консоли работающего Ткаббера. 

## <a id="Подводные_камни"></a>Подводные камни
Файлы с настройками Tk ("Tk option database") — те самые файлы с расширением ".xrdb",
# <a id="Подводные_камни"></a>Подводные камни
Файлы с настройками Tk ("Tk option database") — те самые файлы с расширением ".xrdb", называемые кое-кем "темами", — иногда содержат настройку шрифтов интерфейса. Подгрузка такого файла при помощи `option readfile` "перекроет" системную настройку. 
называемые кое-кем "темами", — иногда содержат настройку шрифтов интерфейса. Подгрузка
такого файла при помощи `option readfile` "перекроет" системную настройку.

Иногда это то, что вам нужно, иногда — нет. В таком случае _после_ подгрузки xrdb-файла
Иногда это то, что вам нужно, иногда — нет. В таком случае _после_ подгрузки xrdb-файла нужно переписать настройку шрифта при помощи `option add` как описано выше. 
нужно переписать настройку шрифта при помощи `option add` как описано выше.

## <a id="Примечания"></a>Примечания
### <a id="Отдельная_настройка_шрифта_ростеров"></a>Отдельная настройка шрифта ростеров
# <a id="Примечания"></a>Примечания
## <a id="Отдельная_настройка_шрифта_ростеров"></a>Отдельная настройка шрифта ростеров

Существует [**"хак"**](../Нетривиальные_настройки.md#Собственный_шрифт_для_ростеров), позволяющий
Существует ["хак"](../Нетривиальные_настройки.md#Собственный_шрифт_для_ростеров), позволяющий отдельно настраивать шрифт ростеров. 
отдельно настраивать шрифт ростеров.

### <a id="Борьба_с_антиалиасингом_в_Xft"></a>Борьба с антиалиасингом в Xft
## <a id="Борьба_с_антиалиасингом_в_Xft"></a>Борьба с антиалиасингом в Xft

Известно, что антиалиасинг был "введён в оборот" для борьбы с дешёвыми китайскими TFT-мониторами
Известно, что антиалиасинг был "введён в оборот" для борьбы с дешёвыми китайскими TFT-мониторами и нравится [далеко не всем](http://www.joelonsoftware.com/articles/fog0000000041.html). Те, кто  обладает качественным монитором и нормальным набором шрифтов под его рабочий DPI, вероятно, захотят антиалиасинг отключить. 
и нравится [далеко не всем](http://www.joelonsoftware.com/articles/fog0000000041.html). Те, кто
обладает качественным монитором и нормальным набором шрифтов под его рабочий DPI, вероятно,
захотят антиалиасинг отключить.

Это делается при помощи настройки [fontconfig](http://www.fontconfig.org/). Настраивать
Это делается при помощи настройки [fontconfig](http://www.fontconfig.org/). Настраивать эту подсистему можно как на уровне _параметров_ отдельных шрифтов (то есть, к примеру, можно отключить антиалиасинг для определённых семейств шрифтов, если используется размер символов менее определённого порога, и т.д.), так и глобально — для всех шрифтов с любыми параметрами. 
эту подсистему можно как на уровне _параметров_ отдельных шрифтов (то есть, к примеру,
можно отключить антиалиасинг для определённых семейств шрифтов, если используется размер
символов менее определённого порога, и т.д.), так и глобально — для всех шрифтов с любыми параметрами.

Потребуется отредактировать либо **~/.fonts.conf** — файл настроек конкретного пользователя,
Потребуется отредактировать либо **~/.fonts.conf** — файл настроек конкретного пользователя, либо **/etc/fonts/fonts.conf** — системный файл настроек. 
либо **/etc/fonts/fonts.conf** — системный файл настроек.

Полное отключение антиалиасинга делается так:
Полное отключение антиалиасинга делается так: 

    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
    <fontconfig>
      <match target="font" >
        <edit mode="assign" name="antialias">
          <bool>false</bool>
        </edit>
      </match>
    </fontconfig>

В качестве примера конфигурирования избирательного отключения антиалиасинга приведём настройку
В качестве примера конфигурирования избирательного отключения антиалиасинга приведём настройку его подавления для шрифтов с размером символов от 8 до 15 пунктов (points) (позаимствовано [отсюда](http://www.wlug.org.nz/AntiAliasedFonts)): 
его подавления для шрифтов с размером символов от 8 до 15 пунктов (points)
(позаимствовано [отсюда](http://www.wlug.org.nz/AntiAliasedFonts)):

    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
    <fontconfig>
      <match target="font" >
        <test compare="more" name="size" qual="any">
          <double>8</double>
511
512
513
514
515
516
517
518

519
520

521
522
523
524



412
413
414
415
416
417
418

419
420

421

422


423
424
425







-
+

-
+
-

-
-
+
+
+
        </test>
        <edit mode="assign" name="antialias">
          <bool>false</bool>
        </edit>
      </match>
    </fontconfig>

Для того, чтобы новые настройки вступили в силу, достаточно перезапустить приложения, использующие Xft.
Для того, чтобы новые настройки вступили в силу, достаточно перезапустить приложения, использующие Xft. 

За подробностями по поводу конфигурирования [fontconfig](http://www.fontconfig.org/) обращайтесть
За подробностями по поводу конфигурирования [fontconfig](http://www.fontconfig.org/) обращайтесть к [его вики](http://fontconfig.org/fontconfig-user.html), а также официальной документации: **fonts.conf(5)**. 
к [его вики](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). 


Changes to wiki/ru/0.9.x/ЧаВо.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23



24
25
26
27

28
29
30
31
32
33
34

35
36
37
38

39
40
41
42

43
44
45

46
47
48
49
50
51
52

53
54
55
56
57

58
59

60
61
62
63

64
65
66

67
68
69
70
71
72
73
74
75
76
77

78
79

80
81

82
83
84
85
86
87
88
89
90
91





92
93
94
95

96
97

98
99
100

101
102
103

104
105
106
107
108
109

110
111
112
113
114
115
116
117
118
119
120

121
122
123
124
125
126
127

128
129
130
131
132
133
134
135
136
137

138
139

140
141

142
143
144
145
146

147
148
149
150
151

152
153

154
155

156
157
158


159
160

161
162

163
164
165
166
167

168
169

170
171
172
173
174
175

176
177

178
179
180
181
182
183

184
185
186
187
188
189
190
191
192
193
194

195
196
197
198

199
200
201
202
203
204
205
206
207

208
209
210
211
212
213
214
215
216
217
218
219

















220
221

222
223
224
225
226
227
228

229
230
231
232
233

234
235
236
237

238
239

240
241

242
243
244
245

246
247
248
249


250
251

252
253
254
255

256
257
258

259
260
261
262

263
264
265
266

267
268
269
270
271
272
273

274
275
276

277
278
279
280

281
282
283

284
285

286
287
288
289
290



291
292

293
294
295

296
297

298
299
300
301
302
303
304

305
306
307
308
309
310
311
312

313
314
315
316



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21



22
23
24
25
26
27

28



29
30
31

32


33

34
35
36
37

38

39

40





41

42

43
44
45

46
47

48
49
50
51

52

53

54







55
56
57

58
59

60
61

62




63





64
65
66
67
68
69
70
71

72
73

74

75

76

77

78




79

80









81

82





83

84






85
86
87

88
89

90
91

92



93

94

95
96
97

98
99

100


101



102
103


104
105

106

107
108
109

110
111

112


113
114
115

116
117

118


119
120
121

122









123

124


125

126





127
128
129

130

131










132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149

150



151
152
153

154



155

156


157

158
159

160


161




162




163
164


165




166



167


168

169


170

171



172
173
174

175

176

177
178
179
180

181

182

183
184

185

186



187
188
189
190

191

192

193
194

195



196
197
198

199



200
201
202


203


204

205
206
207

+



















-
-
-
+
+
+



-
+
-
-
-



-
+
-
-

-
+



-
+
-

-
+
-
-
-
-
-

-
+
-



-
+

-
+



-
+
-

-
+
-
-
-
-
-
-
-



-
+

-
+

-
+
-
-
-
-

-
-
-
-
-
+
+
+
+
+



-
+

-
+
-

-
+
-

-
+
-
-
-
-

-
+
-
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-

-
+
-
-
-
-
-
-



-
+

-
+

-
+
-
-
-

-
+
-



-
+

-
+
-
-
+
-
-
-
+
+
-
-
+

-
+
-



-
+

-
+
-
-



-
+

-
+
-
-



-
+
-
-
-
-
-
-
-
-
-

-
+
-
-

-
+
-
-
-
-
-



-
+
-

-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+
-
-
-



-
+
-
-
-

-
+
-
-

-
+

-
+
-
-
+
-
-
-
-
+
-
-
-
-
+
+
-
-
+
-
-
-
-
+
-
-
-
+
-
-

-
+
-
-

-
+
-
-
-



-
+
-

-
+



-
+
-

-
+

-
+
-

-
-
-
+
+
+

-
+
-

-
+

-
+
-
-
-



-
+
-
-
-



-
-
+
-
-

-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/0.9.x/ЧаВо/index.html)


# 0.9.x/ЧаВо

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 В старпаке/старките нет звука/поддержки JPEG,PNG/сжатия](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG_сжатия)
* [2 Пропадает содержимое ростера](#Пропадает_содержимое_ростера)
* [3 Не подключаются новые смайлики (звуковые схемы)](#Не_подключаются_новые_смайлики_звуковые_схемы)
* [4 Можно ли смайлики **отключить**?](#Можно_ли_смайлики_отключить)
* [5 Проблема со звуковой схемой](#Проблема_со_звуковой_схемой)
* [6 Выделение текста жирным, курсивом и подчёркиванием](#Выделение_текста_жирным_курсивом_и_подчёркиванием)
* [7 Игнор — великая вещь!](#Игнор_-_великая_вещь)
* [8 Как почитать протокол общения "в привате" с участником групчата, которого больше нет в комнате?](#Как_почитать_протокол_общения_в_привате_с_участником_групчата_которого_больше_нет_в_комнате)
* [9 Проверка орфографии](#Проверка_орфографии)
* [10 Стайлкоды](#Стайлкоды)
* [11 Можно ли добавить в ростер самого себя?](#Можно_ли_добавить_в_ростер_самого_себя)
* [12 Ввод "хитрых" юникодных символов](#Ввод_хитрых_юникодных_символов)
   * [12.1 Очень неудобный способ](#Очень_неудобный_способ)
   * [12.2 Умеренно неудобный способ](#Умеренно_неудобный_способ)
   * [12.3 Наименее неудобный способ](#Наименее_неудобный_способ)
 * [12.1 Очень неудобный способ](#Очень_неудобный_способ)
 * [12.2 Умеренно неудобный способ](#Умеренно_неудобный_способ)
 * [12.3 Наименее неудобный способ](#Наименее_неудобный_способ)

## <a id="В_старпаке_старките_нет_звука_поддержки_JPEGPNG_сжатия"></a>В старпаке/старките нет звука/поддержки JPEG,PNG/сжатия

Без переделки старпака эту проблему не решить. Однако, [**Kostix**](../Участник_Kostix.md) добавил в
Без переделки старпака эту проблему не решить. Однако, [Kostix](../Участник_Kostix.md) добавил в официальный старпак под win32 поддержку сжатия и возможность подгружать [img.kit](http://mini.net/sdarchive/img.kit), содержащий пакет [TkImg](../Ткаббер_ЧаВо.md#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG). Подробнее читайте [здесь](../Low_traffic_HOWTO.md#Старпак_Ткаббера_Win32). 
официальный старпак под win32 поддержку сжатия и возможность подгружать [img.kit](http://mini.net/sdarchive/img.kit),
содержащий пакет [**TkImg**](../Ткаббер_ЧаВо.md#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG). Подробнее
читайте [**здесь**](../Старпак_и_сжатие.md).

## <a id="Пропадает_содержимое_ростера"></a>Пропадает содержимое ростера

**Вопрос: Если отключить показ в ростере транспортных иконок `show_transport_user_icons 0` и включить показ
**Вопрос: Если отключить показ в ростере транспортных иконок `show_transport_user_icons 0` и включить показ активных разговоров `::ifacetk::roster::options(chats_group) 1`, то при попытке открыть хоть один чат с каким-нибудь JID, содержимое ростера пропадает и до перезапуска Ткаббера не восстанавливается.** 
активных разговоров `::ifacetk::roster::options(chats_group) 1`, то при попытке открыть хоть
один чат с каким-нибудь JID, содержимое ростера пропадает и до перезапуска Ткаббера не восстанавливается.**

Ответ: Обновитесь с [Tkabber SVN](http://tkabber.jabber.ru/svn) — всё уже исправлено.
Ответ: Обновитесь с [Tkabber SVN](http://tkabber.jabber.ru/svn) — всё уже исправлено. 

## <a id="Не_подключаются_новые_смайлики_звуковые_схемы"></a>Не подключаются новые смайлики (звуковые схемы)

**Вопрос: Подправил конфиг, прописав там путь к новым смайликам (звуковым схемам), но
**Вопрос: Подправил конфиг, прописав там путь к новым смайликам (звуковым схемам), но при перезагрузке они не подключаются.** 
при перезагрузке они не подключаются.**

Ответ: Для начала ознакомьтесь с уже имеющейся [**информацией**](../Смайлики_и_аватары.md#Смайлики) на
Ответ: Для начала ознакомьтесь с уже имеющейся [информацией](../Смайлики_и_аватары.md#Смайлики) на эту тему. Далее убедитесь, что путь ведёт именно туда, где лежат файлы. В файле конфигурации (например, от badlop) путь к смайликам указан такой: **/usr/share/tkabber/emoticons-tkabber** — в установочный директорий. При добавлении новых смайл-паков их обычно кладут в домашний каталог, в **~/.tkabber/emoticons-tkabber**, и если вы только дописали в конец строки название нового директория, эффекта не будет :-) 
эту тему. Далее убедитесь, что путь ведёт именно туда, где лежат файлы. В файле конфигурации
(например, от badlop) путь к смайликам указан такой: **/usr/share/tkabber/emoticons-tkabber** — в
установочный директорий. При добавлении новых смайл-паков их обычно кладут в домашний каталог,
в **~/.tkabber/emoticons-tkabber**, и если вы только дописали в конец строки название нового
директория, эффекта не будет :-)

Кстати, звуковые схемы как таковые в Ткаббере уже не подключаются. Начиная с версии 0.9.8
Кстати, звуковые схемы как таковые в Ткаббере уже не подключаются. Начиная с версии 0.9.8 можно назначить любой звуковой файл (в формате wav) для каждого из событий отдельно. 
можно назначить любой звуковой файл (в формате wav) для каждого из событий отдельно.

## <a id="Можно_ли_смайлики_отключить"></a>Можно ли смайлики **отключить**?

**Вопрос: Сабж. Не хочу никаких смайликов, даже дефолтных.**
**Вопрос: Сабж. Не хочу никаких смайликов, даже дефолтных.** 

Ответ: это легко сделать. Рассказка — [**здесь**](../Смайлики_и_аватары.md#Полное_искоренение_смайликов)
Ответ: это легко сделать. Рассказка — [здесь](../Смайлики_и_аватары.md#Полное_искоренение_смайликов) 

## <a id="Проблема_со_звуковой_схемой"></a>Проблема со звуковой схемой

**Вопрос: Поменял стандартную звуковую схему на Psi, и теперь звуки не работают (или работают
**Вопрос: Поменял стандартную звуковую схему на Psi, и теперь звуки не работают (или работают не все). При этом xmms эти файлы проигрывает нормально.** 
не все). При этом xmms эти файлы проигрывает нормально.**

Ответ: Судя по всему, вы работаете в Linux, а версия Ткаббера у вас — 0.9.7, потому
Ответ: Судя по всему, вы работаете в Linux, а версия Ткаббера у вас — 0.9.7, потому что в версии 0.9.8 уже можно выбрать для каждого события любой звук. Возможно, проблема в том, что программа esdplay, которая установлена по умолчанию, не может проиграть некоторые wav-файлы из схемы Psi, потому что у них частота дискретизации слишком низка — 5000 Hz. Попробуйте прописать другую программу или в звуковом редакторе вроде Audacity отредактируйте файлы, поменяв частоту дискретизации на 11000 Hz. Не забудьте, что если вы указываете в настройках звука просто имя звуковой схемы, то файлы, которые вам нужно редактировать, лежат в **/usr/share/tkabber/sounds/psi** 
что в версии 0.9.8 уже можно выбрать для каждого события любой звук. Возможно, проблема
в том, что программа **esdplay**, которая установлена по умолчанию, не может проиграть
некоторые wav-файлы из схемы Psi, потому что у них частота дискретизации слишком
низка — 5000 Hz. Попробуйте прописать другую программу или в звуковом редакторе
вроде Audacity отредактируйте файлы, поменяв частоту дискретизации на 11000 Hz. Не
забудьте, что если вы указываете в настройках звука просто имя звуковой схемы,
то файлы, которые вам нужно редактировать, лежат в **/usr/share/tkabber/sounds/psi**

## <a id="Выделение_текста_жирным_курсивом_и_подчёркиванием"></a>Выделение текста жирным, курсивом и подчёркиванием

**Вопрос: Как выделить слово или фразу одним или несколькими из этих стилей?**
**Вопрос: Как выделить слово или фразу одним или несколькими из этих стилей?** 

Ответ: Перечитайте статью [**Быстрый старт**](../Начинающим.md#Некоторые_полезные_команды) — там всё подробно расписано, и даны примеры.
Ответ: Перечитайте статью **[Быстрый старт](../Начинающим.md#Некоторые_полезные_команды)** — там всё подробно расписано, и даны примеры. 

В версиях до 0.10.0 выделять фразы, содержащие пробелы, лишь двумя форматирующими символами
В версиях до 0.10.0 выделять фразы, содержащие пробелы, лишь двумя форматирующими символами по краям _невозможно._ То есть, выделять надо каждое слово. В будущем ситуация, возможно, изменится. Если да — свистнем ;) А до тех пор \*фраза вот такого типа\* будет выводиться в окне чата "as is". Кроме того, стартовый и стоповый символы выделения должны граничить с пробельными символами (пробел, таб, перевод строки) слева и справа, соответственно. То есть, к примеру: 
по краям _невозможно._ То есть, выделять надо каждое слово. В будущем ситуация, возможно,
изменится. Если да — свистнем ;) А до тех пор \*фраза вот такого типа\* будет выводиться
в окне чата "as is". Кроме того, стартовый и стоповый символы выделения должны граничить с
пробельными символами (пробел, таб, перевод строки) слева и справа, соответственно. То есть, к примеру:

watch \*this\*! → watch \*this\*! (ошибка: "!" сразу после "\*")  
now \*watch\* this! → now **watch** this!

(\*фиг\* вам!) → (\*фиг\* вам!) (ошибка: "(" перед "\*")  
(а вот \*фиг\* вам!) → (а вот **фиг** вам!)
    watch *this*! → watch *this*! (ошибка: "!" сразу после "*")
    now *watch* this! → now **watch** this!
    
    (*фиг* вам!) → (*фиг* вам!) (ошибка: "(" перед "*")
    (а вот *фиг* вам!) → (а вот **фиг** вам!)

## <a id="Игнор_-_великая_вещь"></a>Игнор — великая вещь!

**Вопрос: А доступен ли пользователям Jabber игнор, который так здорово помогал избегать конфликтов на IRC-каналах?**
**Вопрос: А доступен ли пользователям Jabber игнор, который так здорово помогал избегать конфликтов на IRC-каналах?** 

Ответ \#1: В Ткаббере 0.10.0 реализовано игнорирование сообщений от участников
Ответ \#1: В Ткаббере 0.10.0 реализовано игнорирование сообщений от участников конференций на стороне клиента (Ткаббера). 
конференций на стороне клиента (Ткаббера).

Ответ \#2: В спецификациях MUC (Multi-User Chat) игнорирование не заложено, однако
Ответ \#2: В спецификациях MUC (Multi-User Chat) игнорирование не заложено, однако кое-что можно сделать. Для начала немного теории. 
кое-что можно сделать. Для начала немного теории.

Сообщения из комнат приходят от джида комнаты. Сообщения от присутствующих там — в виде джида
Сообщения из комнат приходят от джида комнаты. Сообщения от присутствующих там — в виде джида комнаты с ресурсом, который является ником автора сообщения. То есть сообщение от пользователя `pupkin` из комнаты `rotten-chatter@conference.jabber.ru` приходят от джида `rotten-chatter@conference.jabber.ru/pupkin`. Это можно использовать для _эмуляции_ игнор-листов: добавлять в список приватности "игнорируемый" вот такие полные джиды. 
комнаты с ресурсом, который является ником автора сообщения. То есть сообщение от пользователя
`pupkin` из комнаты `rotten-chatter@conference.jabber.ru` приходят от джида
`rotten-chatter@conference.jabber.ru/pupkin`. Это можно использовать для _эмуляции_
игнор-листов: добавлять в список приватности "игнорируемый" вот такие полные джиды.

В Ткаббере защита приватности обеспечивается двумя списками: "невидимый" и "игнорируемый"
В Ткаббере защита приватности обеспечивается двумя списками: "невидимый" и "игнорируемый" (о грамматической корректности этих названий промолчим). Нас интересует второй. Вызываем список на редактирование (**Tkabber → Обеспечение приватности → Изменить игнорируемый список**) и добавляем в него JID ненавистного вам человека так, как было описано выше: `room_name@conference.jabber-server.org/trolls_nick`. После нажатия на кнопку "Отправить" неведомая сила вышибает вас из комнаты. Перезайдите, и voila! — теперь вы не увидите не только фраз этого человека, но и его самого в комнате, равно как любые iq-запросы с его стороны. Само собой, это верно только для одной комнаты и только для одного ника. Для других надо сделать отдельные записи в списке. Игнор будет работать до тех пор, пока тролль не сменит ник или пока вы не удалите эту запись из игнорируемого списка (потребуется перезайти в комнату). 
(о грамматической корректности этих названий промолчим). Нас интересует второй. Вызываем
список на редактирование (**Tkabber → Обеспечение приватности → Изменить игнорируемый список**)
и добавляем в него JID ненавистного вам человека так, как было описано выше:
`room_name@conference.jabber-server.org/trolls_nick`. После нажатия на кнопку "Отправить"
неведомая сила вышибает вас из комнаты. Перезайдите, и voila! — теперь вы не увидите не
только фраз этого человека, но и его самого в комнате, равно как любые iq-запросы с его стороны.
Само собой, это верно только для одной комнаты и только для одного ника. Для других надо
сделать отдельные записи в списке. Игнор будет работать до тех пор, пока тролль не сменит
ник или пока вы не удалите эту запись из игнорируемого списка (потребуется перезайти в комнату).

**Важное дополнение:** исследования практической стороны показали, что эффективность такого
**Важное дополнение:** исследования практической стороны показали, что эффективность такого способа игнорирования очень низка. Надоеда меняет ник и тут же появляется в списке участников конференции. Вам же приходится заново вносить новый JID в список, при этом вас снова вышибет из комнаты. Игра не стоит свеч. Впрочем, если надоеде никто не скажет, что его добавили в игнор, то он может и не догадаться сменить ник. На крайний случай у комнаты есть владелец и администраторы. Вряд ли им понравится, если кто-то будет издеваться над посетителями. 
способа игнорирования очень низка. Надоеда меняет ник и тут же появляется в списке участников
конференции. Вам же приходится заново вносить новый JID в список, при этом вас снова вышибет
из комнаты. Игра не стоит свеч. Впрочем, если надоеде никто не скажет, что его добавили в игнор,
то он может и не догадаться сменить ник. На крайний случай у комнаты есть владелец и администраторы.
Вряд ли им понравится, если кто-то будет издеваться над посетителями.

**Внимание, баг!** Если включать игнор через контекстное меню привата (а тролли часто достают
**Внимание, баг!** Если включать игнор через контекстное меню привата (а тролли часто достают именно в приватах), то в игнор-список заносится джид комнаты без ресурса, то есть после вышибания вас из комнаты попасть туда снова вы не сможете. А поскольку править записи в игнор-листе нельзя (можно только удалять), то вносить правильный полный джид в лист следует через главное меню Ткаббера, как было описано выше. Баг этот, возможно, будет исправлен в одной из грядущих svn-версий, но пока этого не случилось, а также для пользователей стабильных релизов рекомендация будет такой: игнорить ручками, хоть это гораздо более неудобно... 
именно в приватах), то в игнор-список заносится джид комнаты без ресурса, то есть после
вышибания вас из комнаты попасть туда снова вы не сможете. А поскольку править записи в
игнор-листе нельзя (можно только удалять), то вносить правильный полный джид в лист следует
через главное меню Ткаббера, как было описано выше. Баг этот, возможно, будет исправлен в
одной из грядущих svn-версий, но пока этого не случилось, а также для пользователей стабильных
релизов рекомендация будет такой: игнорить ручками, хоть это гораздо более неудобно...

## <a id="Как_почитать_протокол_общения_в_привате_с_участником_групчата_которого_больше_нет_в_комнате"></a>Как почитать протокол общения "в привате" с участником групчата, которого больше нет в комнате?

**Вопрос: Беседовал в привате с человеком из комнаты, потом закрыл окно чата, участник из комнаты ушёл, как посмотреть протокол общения с ним?**
**Вопрос: Беседовал в привате с человеком из комнаты, потом закрыл окно чата, участник из комнаты ушёл, как посмотреть протокол общения с ним?** 

Ответ \#1: Начиная с версии 0.10.0 в Ткаббере реализован браузер истории разговоров.
Ответ \#1: Начиная с версии 0.10.0 в Ткаббере реализован браузер истории разговоров. 

Ответ \#2: Открыть протокол общения в Ткаббере можно только из контекстного меню на
Ответ \#2: Открыть протокол общения в Ткаббере можно только из контекстного меню на контакте в одном из ростеров — основном или группового чата. Соответственно, если нужного вам контакта нет ни в одном из ростеров, а почитать протокол общения нужно, придётся прибегнуть к обходному манёвру. 
контакте в одном из ростеров — основном или группового чата. Соответственно, если нужного
вам контакта нет ни в одном из ростеров, а почитать протокол общения нужно, придётся
прибегнуть к обходному манёвру.

Вам потребуется вручную вызвать процедуру Ткаббера, открывающую окно с протоколом чата
Вам потребуется вручную вызвать процедуру Ткаббера, открывающую окно с протоколом чата для выбранного JID. Для этого в консоли Ткаббера введите: 
для выбранного JID. Для этого в консоли Ткаббера введите:

     logger::show_log room@service.host.dom/nick

где
где 

*  `logger::show_log` — команда Ткаббера, открывающая окно с протоколом чата. Принимает
*  `logger::show_log` — команда Ткаббера, открывающая окно с протоколом чата. Принимает один аргумент — JID, протокол общения с которым мы хотим почитать; 
   один аргумент — JID, протокол общения с которым мы хотим почитать;
*  `room@service.host.dom/nick` — _полный_ JID комнаты. Он состоит из следующих частей
*  `room@service.host.dom/nick` — _полный_ JID комнаты. Он состоит из следующих частей (слева направо): 
   (слева направо):
 1.  `room` — имя комнаты на соответствующем сервисе сервера;
 1.  `service.host.dom` — имя сервиса, реализующего групповой чат; для `jabber.ru` это
 1.  `room` — имя комнаты на соответствующем сервисе сервера; 
 1.  `service.host.dom` — имя сервиса, реализующего групповой чат; для `jabber.ru` это `conference.jabber.ru`; 
     `conference.jabber.ru`;
 1.  `nick` — участник конференции `room`, протокол общения с которым вас интересует.
 1.  `nick` — участник конференции `room`, протокол общения с которым вас интересует. 

Итого, для просмотра истории общения с пользователем "vasya" комнаты "linux-talks"
Итого, для просмотра истории общения с пользователем "vasya" комнаты "linux-talks" сервера "jabber.ru" вам нужно написать в комнате: 
сервера "jabber.ru" вам нужно написать в комнате:

    logger::show_log vasya@conference.jabber.ru/vasya

После появления диалога консоль можно закрыть.
После появления диалога консоль можно закрыть. 

**Примечание:** естественно, что этот способ работает для любых контактов, то есть параметром для
**Примечание:** естественно, что этот способ работает для любых контактов, то есть параметром для `logger::show_log` может быть любой JID, с которым вы вели диалог. Это может пригодиться, к примеру, для чтения протокола общения с контактом, которого вы удалили из своего ростера. 
`logger::show_log` может быть любой JID, с которым вы вели диалог. Это может пригодиться, к примеру,
для чтения протокола общения с контактом, которого вы удалили из своего ростера.

## <a id="Проверка_орфографии"></a>Проверка орфографии

**Вопрос: Можно ли "прикрутить" к Ткабберу какую-нибудь программу, чтобы проверять орфографию на лету?**
**Вопрос: Можно ли "прикрутить" к Ткабберу какую-нибудь программу, чтобы проверять орфографию на лету?** 

Ответ: Да, можно. Для начала надо установить пакет [ispell](http://www.gnu.org/software/ispell/ispell.html)
Ответ: Да, можно. Для начала надо установить пакет [ispell](http://www.gnu.org/software/ispell/ispell.html) и настроить его, убедившись, что он работает сам по себе. Установите также необходимые словари. Затем в конфиг вне всяких хуков надо вписать строчку 
и настроить его, убедившись, что он работает сам по себе. Установите также необходимые словари.
Затем в конфиг вне всяких хуков надо вписать строчку

    set use_ispell 1

Запустив Ткаббер (или перезапустив, если он был открыт), идите в **Настройки → Плагины → Ispell**
Запустив Ткаббер (или перезапустив, если он был открыт), идите в **Настройки → Плагины → Ispell** и там проверьте, соответствует ли действительности путь к исполняемому файлу ispell (для \*nix это обычно **/usr/bin/ispell**). Ещё вам необходимо указать, какой словарь вы собираетесь использовать, а также его кодировку. В поле настройки `::plugins::ispell::options(dictionary)` пишем russian, а в следующем — скажем, koi8-r. Вторую опцию лучше не трогать, ибо она сильно загрузит ваш процессор ненужными проверками недописанных слов на каждой новой букве. Не забудьте сохранить изменённые настройки для будущих сессий и перезапустите Ткаббер снова. Теперь, когда вы будете писать сообщения, все слова с орфоргафическими ошибками, а также слова, отсуствующие в словаре, будут выделяться красным цветом прямо в поле ввода (не подумайте вдруг, что ispell станет проверять орфографию в приходящих сообщениях). Учтите, что одновременно можно работать лишь с одним словарём. 
и там проверьте, соответствует ли действительности путь к исполняемому файлу ispell (для \*nix это
обычно **/usr/bin/ispell**). Ещё вам необходимо указать, какой словарь вы собираетесь использовать,
а также его кодировку. В поле настройки `::plugins::ispell::options(dictionary)` пишем russian, а в
следующем — скажем, koi8-r. Вторую опцию лучше не трогать, ибо она сильно загрузит ваш процессор
ненужными проверками недописанных слов на каждой новой букве. Не забудьте сохранить изменённые
настройки для будущих сессий и перезапустите Ткаббер снова. Теперь, когда вы будете писать сообщения,
все слова с орфоргафическими ошибками, а также слова, отсуствующие в словаре, будут выделяться красным
цветом прямо в поле ввода (не подумайте вдруг, что ispell станет проверять орфографию в приходящих
сообщениях). Учтите, что одновременно можно работать лишь с одним словарём.

В Windows процесс настройки точно такой же. Вот вам в
В Windows процесс настройки точно такой же. Вот вам в помощь [небольшое руководство](http://ficus-www.cs.ucla.edu/geoff/ispell-winnt.html) по сборке и настройке самого ispell в виндах (англ.) Не забудьте указать кодировку cp1251. ) 
помощь [небольшое руководство](http://ficus-www.cs.ucla.edu/geoff/ispell-winnt.html) по сборке и
настройке самого ispell в виндах (англ.) Не забудьте указать кодировку cp1251. )

К сожалению, с [aspell](http://www.gnu.org/software/aspell/) (бинарники для Win32 можете
К сожалению, с [aspell](http://www.gnu.org/software/aspell/) (бинарники для Win32 можете найти [тут](http://aspell.net/win32/)) имеются проблемы, и это вполне понятно, потому что синтаксис у этих программ немного разный. Ткаббер сразу же просекает, что работает не с той программой, и выдаёт ошибку, предлагая указать правильный путь к ispell. Тем не менее, при наличии прямых рук и некоторого количества мозгов наверняка можно решить и эту проблему. Если вам известно, как это сделать, просим поделиться информацией. 
найти [тут](http://aspell.net/win32/)) имеются проблемы, и это вполне понятно, потому что
синтаксис у этих программ немного разный. Ткаббер сразу же просекает, что работает не с той
программой, и выдаёт ошибку, предлагая указать правильный путь к ispell. Тем не менее, при
наличии прямых рук и некоторого количества мозгов наверняка можно решить и эту проблему.
Если вам известно, как это сделать, просим поделиться информацией.

## <a id="Стайлкоды"></a>Стайлкоды

В принципе, общение в групповом чате или с глазу на глаз ничем не отличается от общения
В принципе, общение в групповом чате или с глазу на глаз ничем не отличается от общения в других программах - ICQ, IRC и так далее. Но свои тонкости есть, и лучше сразу с ними познакомиться. 
в других программах - ICQ, IRC и так далее. Но свои тонкости есть, и лучше сразу с ними познакомиться.

Пишем | Получаем
---|---
/me хочет спать | \* testirovanie хочет спать
\_подчёркнутый\_ \_текст\_ | <u>подчёркнутый</u> <u>текст</u>
\*жирный\* \*текст\* | **жирный текст**
/наклонный/ /текст/ | _наклонный текст_
/\*можно\*/ /\_смешивать\_/ | _**можно** <u>смешивать</u>_
\_\*разные\*\_ \*/\_стили\_/\* | **<u>разные</u> _<u>стили</u>_**
\_/\*но-надо-быть-аккуратным\_/\* | \_\*/но-надо-быть-аккуратным\_/\*
\*и помнить о пробелах\* | \*и помнить о пробелах\*
 Пишем: Получаем: 
 
 /me хочет спать \* testirovanie хочет спать 
 
 \_подчёркнутый\_ \_текст\_ <u>подчёркнутый</u> <u>текст</u> 
 
 \*жирный\* \*текст\* **жирный текст** 
 
 /наклонный/ /текст/ _наклонный текст_ 
 
 /\*можно\*/ /\_смешивать\_/ _**можно** <u>смешивать</u>_ 
 
 \_\*разные\*\_ \*/\_стили\_/\* **<u>разные</u> _<u>стили</u>_** 
 
 \_/\*но-надо-быть-аккуратным\_/\* \_\*/но-надо-быть-аккуратным\_/\* 
 
 \*и помнить о пробелах\* \*и помнить о пробелах\* 

Как видите, текст можно делать жирным, подчёркнутым и курсивом, но выделять приходится
Как видите, текст можно делать жирным, подчёркнутым и курсивом, но выделять приходится каждое слово, иначе всё напечатается как есть. Можно смешивать разные стили. Главное, помнить про вложение символов выделения. Если эта возможность вам мешает, её можно отключить в Настройках (группа Chat, Включить выделение). 
каждое слово, иначе всё напечатается как есть. Можно смешивать разные стили. Главное,
помнить про вложение символов выделения. Если эта возможность вам мешает, её можно
отключить в Настройках (группа Chat, Включить выделение).

## <a id="Можно_ли_добавить_в_ростер_самого_себя"></a>Можно ли добавить в ростер самого себя?

**Вопрос: У меня запущено два Ткаббера: один дома, другой на работе. Оба запущены от одного
**Вопрос: У меня запущено два Ткаббера: один дома, другой на работе. Оба запущены от одного аккаунта, просто ресурсы разные (к примеру, **login@jabber.ru/Home** и **login@jabber.ru/Work**). Безуспешно пытаюсь добавить их в ростер, чтобы, находясь дома, видеть и отправлять сообщения самому себе на работу, и наоборот.** 
аккаунта, просто ресурсы разные (к примеру, login@jabber.ru/Home и login@jabber.ru/Work).
Безуспешно пытаюсь добавить их в ростер, чтобы, находясь дома, видеть и отправлять сообщения
самому себе на работу, и наоборот.**

Ответ: С марта 2007 года в транке svn-версии (а стало быть, и в стабильной "десятке" — версии 0.10.0)
Ответ: С марта 2007 года в транке svn-версии (а стало быть, и в стабильной "десятке" — версии 0.10.0) имеется пункт ростера "Мои ресурсы", где за небольшую плату можно обнаружить все соединения вашего JID. Если по каким-либо причинам вы вынуждены сидеть на более древней версии, читайте дальше.  
имеется пункт ростера "Мои ресурсы", где за небольшую плату можно обнаружить все соединения
вашего JID. Если по каким-либо причинам вы вынуждены сидеть на более древней версии, читайте дальше.

Проблема решаема, правда, придётся пойти на небольшую хитрость. Впрочем, всё по порядку.
Проблема решаема, правда, придётся пойти на небольшую хитрость. Впрочем, всё по порядку. 

1.  Убедитесь, что открыт **только** "домашний" Ткаббер, то есть, вы работаете как **login@jabber.ru/Home**.
1.  Убедитесь, что открыт **только** "домашний" Ткаббер, то есть, вы работаете как **login@jabber.ru/Home**. Если на работе запущен другой, надо бы его сначала прибить. 
    Если на работе запущен другой, надо бы его сначала прибить.
1.  Добавьте в ростер (в версиях начиная с 0.9.8 он называется "Контакты") пользователя **login@jabber.ru/Work**.
1.  Добавьте в ростер (в версиях начиная с 0.9.8 он называется "Контакты") пользователя **login@jabber.ru/Work**. Появится запрос для этого пользователя с просьбой авторизации. Отправьте его, и когда откроется окно редактирования контакта, добавьте его в нужную группу, если надо, но самое главное, не забудьте отредактировать его имя — напишите, к примеру, **login/Work**. 
    Появится запрос для этого пользователя с просьбой авторизации. Отправьте его, и когда откроется окно
    редактирования контакта, добавьте его в нужную группу, если надо, но самое главное, не забудьте отредактировать
    его имя — напишите, к примеру, **login/Work**.
1.  Разлогиньтесь и залогиньтесь снова как **login@jabber.ru**, указав теперь в качестве ресурса **Work**.
1.  Разлогиньтесь и залогиньтесь снова как **login@jabber.ru**, указав теперь в качестве ресурса **Work**. Это важно — "домашний" аккаунт должен быть закрыт! Заметьте, что, залогинившись, мы не получили запрос на авторизацию. Так и должно быть. 
    Это важно — "домашний" аккаунт должен быть закрыт! Заметьте, что, залогинившись, мы не получили запрос
    на авторизацию. Так и должно быть.
1.  Проделайте шаг 2), на этот раз отредактировав добавляемый контакт как **login/Home**.
1.  Запустите ещё один Ткаббер и залогиньтесь как **login@jabber.ru**, указав в качестве ресурса **Home**.
1.  Проделайте шаг 2), на этот раз отредактировав добавляемый контакт как **login/Home**. 
1.  Запустите ещё один Ткаббер и залогиньтесь как **login@jabber.ru**, указав в качестве ресурса **Home**. Запрос на авторизацию не пришёл и сейчас. Это хорошо. 
    Запрос на авторизацию не пришёл и сейчас. Это хорошо.
1.  Посмотрите в ростеры обоих Ткабберов — теперь "домашний" клиент видит там болтающегося в онлайне **login/Work**,
1.  Посмотрите в ростеры обоих Ткабберов — теперь "домашний" клиент видит там болтающегося в онлайне **login/Work**, а рабочий — **login/Home**. Можно также и слать друг другу сообщения. Если включить показ пользователей, находящихся в оффлайне, вы увидите, что в "домашнем" и "рабочем" Ткабберах "свои" контакты показываются именно находящимися в оффлайне, да ещё в ожидании авторизации. Ещё раз повторяю: так и должно быть. 
    а рабочий — **login/Home**. Можно также и слать друг другу сообщения. Если включить показ пользователей,
    находящихся в оффлайне, вы увидите, что в "домашнем" и "рабочем" Ткабберах "свои" контакты показываются
    именно находящимися в оффлайне, да ещё в ожидании авторизации. Ещё раз повторяю: так и должно быть.
1.  В зависимости от того, где вы производили эти манипуляции — на работе или дома — закройте соответствующий
1.  В зависимости от того, где вы производили эти манипуляции — на работе или дома — закройте соответствующий Ткаббер, с тем чтобы открыть его уже дома/на работе и продолжать пользоваться этим дуэтом в соответствии с потребностями. 
    Ткаббер, с тем чтобы открыть его уже дома/на работе и продолжать пользоваться этим
    дуэтом в соответствии с потребностями.
1.  Если вы пытались авторизовать какой-либо из этих контактов, пока было запущено оба Ткаббера,
1.  Если вы пытались авторизовать какой-либо из этих контактов, пока было запущено оба Ткаббера, вы несомненно должны были получить запрос на авторизацию от другого клиента. Если так оно и случилось, в ростере вы друг друга (сам себя) в онлайне уже не увидите. Придётся удалять их обоих из ростера и начинать сначала. 
    вы несомненно должны были получить запрос на авторизацию от другого клиента. Если так оно и случилось,
    в ростере вы друг друга (сам себя) в онлайне уже не увидите. Придётся удалять их обоих из ростера и начинать сначала.

Учтите, что для того, чтобы заходить обоими этими клиентами в одни и те же конференции, нужно,
Учтите, что для того, чтобы заходить обоими этими клиентами в одни и те же конференции, нужно, чтобы ники для конференций были разные для каждого Ткаббера. Вам придётся либо отредактировать конфиг на каждой из машин, либо проделывать это вручную. Но это уже отдельный вопрос ;) 
чтобы ники для конференций были разные для каждого Ткаббера. Вам придётся либо отредактировать
конфиг на каждой из машин, либо проделывать это вручную. Но это уже отдельный вопрос ;)

**На заметку:** Польский коллега [desnajpa](http://sourceforge.net/users/desnajpa/), в одиночку ковыряющий
**На заметку:** Польский коллега [desnajpa](http://sourceforge.net/users/desnajpa/), в одиночку ковыряющий бедную чернозёмом землю Ткаббера, добился некоторых результатов в плане развития шизофрении у пользователей этого клиента. В его вариации программы — [Tkabber-SK](http://sourceforge.net/projects/tkabber-sk/) — уже имеется self-contact, добавленный в ростер. Тестируйте. 
бедную чернозёмом землю Ткаббера, добился некоторых результатов в плане развития шизофрении у пользователей
этого клиента. В его вариации программы — [Tkabber-SK](http://sourceforge.net/projects/tkabber-sk/) — уже
имеется self-contact, добавленный в ростер. Тестируйте.

## <a id="Ввод_хитрых_юникодных_символов"></a>Ввод "хитрых" юникодных символов

**Вопрос: У меня стоит русская локаль, следовательно, я не могу вводить в Ткаббере спец-символы вроде
**Вопрос: У меня стоит русская локаль, следовательно, я не могу вводить в Ткаббере спец-символы вроде акцентов и прочих хитроумных западноевропейских букв. Как-то можно это наладить?** 
акцентов и прочих хитроумных западноевропейских букв. Как-то можно это наладить?**

Ответ: Можно, и пока есть три способа сделать это, все довольно неудобные.
Ответ: Можно, и пока есть три способа сделать это, все довольно неудобные. 

### <a id="Очень_неудобный_способ"></a>Очень неудобный способ

При помощи встроенного плагина **unisymbols** единичные юникодные символы вводятся в поле
При помощи встроенного плагина **unisymbols** единичные юникодные символы вводятся в поле редактирования сообщений в следующем формате: 
редактирования сообщений в следующем формате:

    &шестнадцатиричный_код_символаCtrl+;
    &шестнадцатиричный_код_символаCtrl;

Это напоминает ввод подобных символов в HTML-коде: `&#код_символа;` (обратите внимание,
Это напоминает ввод подобных символов в HTML-коде: `&#код_символа;` (обратите внимание, что в Ткаббере вводить "решётку" **\#** не нужно). Поясним: 
что в Ткаббере вводить "решётку" **\#** не нужно). Поясним:

*  Сначала идёт значок амперсанда — **&**,
*  затем _шестнадцатеричный_ код нужного вам символа (без \# впереди),
*  и в конце надо нажать одновременно клавишу **Control** и клавишу точки с запятой (не в русской раскладке).
*  Сначала идёт значок амперсанда — **&**, 
*  затем _шестнадцатеричный_ код нужного вам символа (без \# впереди), 
*  и в конце надо нажать одновременно клавишу **Control** и клавишу точки с запятой (не в русской раскладке). 

При этом ткаббер заменит вашу конструкцию (включительно, от **&** до последнего введённого
При этом ткаббер заменит вашу конструкцию (включительно, от **&** до последнего введённого перед нажатием **Ctrl-;** символа) на соответствующий символ юникода. 
перед нажатием **Ctrl-;** символа) на соответствующий символ юникода.

Например, **&c2;** → **Â**.
Например, **&c2;** → **Â**. 

**На заметку:** символ ";" находится в основном регистре английской раскладки (то есть
**На заметку:** символ ";" находится в основном регистре английской раскладки (то есть вводится простым нажатием на соответствующую клавишу), но в других раскладках её расположение может отличаться. Например, в испанской точка с запятой вызывается нажатием **Shift** и клавиши запятой. То есть, после набора амперсанда и кода символа надо нажать **Ctrl-Shift-,**. 
вводится простым нажатием на соответствующую клавишу), но в других раскладках её расположение
может отличаться. Например, в испанской точка с запятой вызывается нажатием **Shift** и
клавиши запятой. То есть, после набора амперсанда и кода символа надо нажать **Ctrl-Shift-,**.

### <a id="Умеренно_неудобный_способ"></a>Умеренно неудобный способ

Вот ещё один способ попроще. Можно открыть рядом текстовый редактор, поддерживающий юникодные
Вот ещё один способ попроще. Можно открыть рядом текстовый редактор, поддерживающий юникодные символы (например, **Vim, gedit** или тот же **Word**), вбить туда все нужные вам символы и копировать их в поле ввода Ткаббера, когда требуется. Тоже не очень красивое решение, но тем не менее, может пригодиться. 
символы (например, **Vim, gedit** или тот же **Word**), вбить туда все нужные вам символы и
копировать их в поле ввода Ткаббера, когда требуется. Тоже не очень красивое решение, но
тем не менее, может пригодиться.

### <a id="Наименее_неудобный_способ"></a>Наименее неудобный способ

Прямиком отправляем вас к [**статье о плагине Tkabber-KHIM**](../Плагины.md#Tkabber-KHIM),
позволяющем вводить любые юникодные символы буквально в три нажатия клавиш. Самые главные
Прямиком отправляем вас к [статье о плагине Tkabber-KHIM](../Плагины.md#Tkabber-KHIM), позволяющем вводить любые юникодные символы буквально в три нажатия клавиш. Самые главные его достоинства — возможность определения произвольных символов и их ввод с помощью "клавиши композиции" и заданного сочетания двух "обычных" символов. 
его достоинства — возможность определения произвольных символов и их ввод с помощью
"клавиши композиции" и заданного сочетания двух "обычных" символов.

Ткаббер версии 0.10.0 содержит этот плагин в качестве встроенного средства.
Ткаббер версии 0.10.0 содержит этот плагин в качестве встроенного средства. 


Changes to wiki/ru/0.9.x/Эмоциконки.md.

1

2
3
4
5

6
7
8
9
10
11
12
13

14
15
16
17

18
19
20
21
22

23
24
25
26

27
28
29
30
31
32


33
34

35
36

37
38
39
40
41

42
43
44
45
46

47
48
49


50
51

52
53

54
55
56
57
58
59





60
61

62
63
64
65

66
67

68
69
70
71
72
73

74
75
76
77
78
79

80
81
82

83
84

85
86
87
88
89
90

91
92

93
94

95
96

97
98
99

100
101
102

103
104

105
106

107
108

109
110
111
112



113
114
115
116

117
118
119
120

121
122
123

124
125
126
127

128
129
130
131
132
133
134






135
136
137

138
139
140
141
142

143
144
145
146

147
148

149
150
151
152
153

154
155
156

157
158
159
160

161
162
163
164
165

166
167
168
169

170
171
172


173
174
175

176
177
178
179

180
181

182
183
184
185

186
187
188

189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204

205
206
207
208
209




210
211
1
2
3
4
5

6
7
8
9
10
11
12
13

14
15
16
17

18



19

20
21
22
23

24


25
26


27
28
29

30
31

32

33
34
35

36



37

38
39


40
41
42

43
44

45
46





47
48
49
50
51
52

53


54

55
56

57
58
59
60
61
62

63
64
65
66
67
68

69

70

71
72

73



74
75

76
77

78
79

80
81

82
83
84

85
86
87

88
89

90
91

92
93

94
95
96


97
98
99
100



101
102
103
104

105

106

107


108

109
110






111
112
113
114
115
116
117
118

119
120
121
122
123

124
125
126
127

128
129

130
131
132
133
134

135

136

137
138
139
140

141



142

143
144
145
146

147
148


149
150
151
152

153
154
155
156

157
158

159
160
161
162

163

164

165

166
167
168
169
170
171
172
173
174
175
176
177
178
179

180

181



182
183
184
185
186


+



-
+







-
+



-
+
-
-
-

-
+



-
+
-
-


-
-
+
+

-
+

-
+
-



-
+
-
-
-

-
+

-
-
+
+

-
+

-
+

-
-
-
-
-
+
+
+
+
+

-
+
-
-

-
+

-
+





-
+





-
+
-

-
+

-
+
-
-
-


-
+

-
+

-
+

-
+


-
+


-
+

-
+

-
+

-
+


-
-
+
+
+

-
-
-
+



-
+
-

-
+
-
-

-
+

-
-
-
-
-
-
+
+
+
+
+
+


-
+




-
+



-
+

-
+




-
+
-

-
+



-
+
-
-
-

-
+



-
+

-
-
+
+


-
+



-
+

-
+



-
+
-

-
+
-














-
+
-

-
-
-
+
+
+
+

-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/0.9.x/Эмоциконки/index.html)


# 0.9.x/Эмоциконки

Материал из Tkabber Wiki
Материал из Tkabber Wiki.

## <a id="toc"></a>Содержание

* [1 Добавление новых (внешних) комплектов](#Добавление_новых_внешних_комплектов)
* [2 Улучшение поддержки анимированных GIF](#Улучшение_поддержки_анимированных_GIF)
* [3 Настройка высоты окна смайликов](#Настройка_высоты_окна_смайликов)
* [4 Полное искоренение смайликов](#Полное_искоренение_смайликов)
   * [4.1 Массовое клонирование эмоциконок](#Массовое_клонирование_эмоциконок)
 * [4.1 Массовое клонирование эмоциконок](#Массовое_клонирование_эмоциконок)

## <a id="Добавление_новых_внешних_комплектов"></a>Добавление новых (внешних) комплектов

В двух словах расскажем здесь, как добавлять смайл-паки. Скачайте нужный вам архив и распакуйте
В двух словах расскажем здесь, как добавлять смайл-паки. Скачайте нужный вам архив и распакуйте его куда-нибудь. Лучше всего — в домашний директорий, где уже лежит файл конфигурации и должен находиться каталог 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). Там описано почти то же самое (правда, по-английски), а также даны ссылки на некоторые смайл-паки. 
то же самое (правда, по-английски), а также даны ссылки на некоторые смайл-паки.

## <a id="Улучшение_поддержки_анимированных_GIF"></a>Улучшение поддержки анимированных GIF

За отображение анимированных gif в Tkabber отвечает файл **tkabber\\aniemoteicons\\anigif.tcl**.
За отображение анимированных gif в Tkabber отвечает файл **tkabber\\aniemoteicons\\anigif.tcl**. Если сравнивать реализацию со [спецификацией формата GIF89a](http://www.r-t-f-m.info/_books/15001/index.php) (это как раз и есть нужные нам анимированные gif-картинки), то обнаруживаем отсутствие поддержки вывода с возвратом к предыдущему изображению. Чтобы было понятно, чем это грозит, можно провести эксперимент. 
Если сравнивать реализацию со [спецификацией формата GIF89a](http://www.r-t-f-m.info/_books/15001/index.php)
(это как раз и есть нужные нам анимированные gif-картинки), то обнаруживаем отсутствие поддержки
вывода с возвратом к предыдущему изображению. Чтобы было понятно, чем это грозит, можно провести эксперимент.

В пустой каталог помещаем три файла:
В пустой каталог помещаем три файла: 

*  файл **tkabber\\aniemoteicons\\anigif.tcl** из состава дистрибутива Ткаббера,
*  вот этот анимированный gif:
*  файл **tkabber\\aniemoteicons\\anigif.tcl** из состава дистрибутива Ткаббера, 
*  вот этот анимированный gif: 

![Изображение:36_10_20.gif](../../images/36_10_20.gif)
![Изображение:36_10_20.gif](../../images/36_10_20.gif)  

*  и скрипт **showgif.tcl** следующего содержания:
*  и скрипт **showgif.tcl** следующего содержания: 

        source anigif.tcl
        foreach f [glob -nocomplain *.gif] {
            label .[file rootname $f] -image [::anigif::anigif $f]
            pack .[file rootname $f]
        }
    source anigif.tcl
    foreach f [glob -nocomplain *.gif] {
       label .[file rootname $f] -image [::anigif::anigif $f]
       pack .[file rootname $f]
    }

При запуске этого скрипта мы увидим вот такую исчезающую улыбку Чеширского кота © Льюис Кэррол.
При запуске этого скрипта мы увидим вот такую исчезающую улыбку Чеширского кота © Льюис Кэррол. Кстати, закиньте в эту папку штуки 4 экземпляра приведённой картинки и посмотрите на загрузку процессора при воспроизведении. 
Кстати, закиньте в эту папку штуки 4 экземпляра приведённой картинки и посмотрите на загрузку
процессора при воспроизведении.

![Изображение:36_10_20_1.gif](../../images/36_10_20_1.gif)
![Изображение:36_10_20_1.gif](../../images/36_10_20_1.gif)  

Как оказалось, это лечится лёгким движением руки. В файле **anigif.tcl** ищем строчки:
Как оказалось, это лечится лёгким движением руки. В файле **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** и наслаждаемся нормальной анимацией.
Снова запускаем скрипт **showgif.tcl** и наслаждаемся нормальной анимацией. 

P.S. В заголовке файла **anigif.tcl** написано, что при формировании изображений используются
P.S. В заголовке файла **anigif.tcl** написано, что при формировании изображений используются опции **-zoom** и **-subsample** для сохранения прозрачности изображений. Практика показала, что прозрачность сохраняется и без этого трюка. Вероятно, с тех пор, когда писался код **anigif.tcl**, поддержка прозрачности в Tk была доработана. Поэтому меняем строки в **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) 

## <a id="Настройка_высоты_окна_смайликов"></a>Настройка высоты окна смайликов

Для начала отредактируем файл **/usr/lib/tkabber/emoticons.tcl** — вам потребуется
Для начала отредактируем файл **/usr/lib/tkabber/emoticons.tcl** — вам потребуется войти рутом по команде **su**. 
войти рутом по команде **su**.

**Примечание:** _в svn-версии Ткаббера файл этот поменял своё местоположение, теперь он
_Примечание: в svn-версии Ткаббера файл этот поменял своё местоположение, теперь он находится тут: **/path/to/your/svn\_tkabber/plugins/richtext/emoticons.tcl** и вообще весьма поменялся внутренне, так что предлагаемый патч работает лишь для стабильной версии 0.9.9 и младше._ 
находится тут:_ **/path/to/your/svn\_tkabber/plugins/richtext/emoticons.tcl** _и вообще весьма
поменялся внутренне, так что предлагаемый патч работает лишь для стабильной версии 0.9.9 и младше._

В самом начале его идёт процедура `namespace eval emoteicons`:
В самом начале его идёт процедура _namespace eval emoteicons_: 

    namespace eval emoteicons {
       array set emoteicons {}

       variable lasttext ""
       variable lastX
       variable lastY
    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
При следующей загрузке Ткаббера удостоверьтесь, что всё правильно: при нажатии Alt-E должно вывестись окно со смайликами высотой в 8 строчек. Если оно вас не устраивает, попробуйте увеличить или уменьшить число в конфиге. Зная количество смайликов в наборе, можно легко подобрать нужную высоту окна, чтобы оно целиком помещалось на экране. 
должно вывестись окно со смайликами высотой в 8 строчек. Если оно вас не устраивает,
попробуйте увеличить или уменьшить число в конфиге. Зная количество смайликов в наборе,
можно легко подобрать нужную высоту окна, чтобы оно целиком помещалось на экране.

Автор патча — [**LKnight**](../Участник_Lknight.md)
Автор патча — [Участник:lknight](../Участник_Lknight.md) 

## <a id="Полное_искоренение_смайликов"></a>Полное искоренение смайликов

Это не проблема — добавьте в **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) 

### <a id="Массовое_клонирование_эмоциконок"></a>Массовое клонирование эмоциконок

В конце-концов, **config.tcl** представляет собой полноценную программу на Tcl,
В конце-концов, **config.tcl** представляет собой полноценную программу на Tcl, и ничто серьёзное ему, следовательно, не чуждо. 
и ничто серьёзное ему, следовательно, не чуждо.

Для примера реализуем поддержку ROTFL/LOL-смайлов — таких, которые собеседник использует,
Для примера реализуем поддержку ROTFL/LOL-смайлов — таких, которые собеседник использует, когда ему _ну очень_ смешно: 
когда ему _ну очень_ смешно:

    hook::add finload_hook {
      namespace eval ::emoteicons {
        variable emoteicons
        set orig :-)
        set dest :-)))))))))))
        for {set i [expr [string first ) $dest] + 1]} \
          {$i < [string length $dest]} \
          {incr i} {
            set emoteicons([string range $dest 0 $i]) $emoteicons($orig)
        }
      }
    }

Данное заклинание связывает картинку от `:-)` с со смайликами: `:-)), :-))), :-)))` и так
Данное заклинание связывает картинку от `:-)` с со смайликами: `:-)), :-))), :-)))` и так далее, включая тот, который помещён в переменную `dest`. 
далее, включая тот, который помещён в переменную `dest`.

Тикль очень "прозрачен" — постарайтесь разобраться в том, как работает это заклинание
самостоятельно. Если после достижения успеха на этом поприще вы всё ещё будете думать,
что Ткаббер это не ваш выбор, — смело стреляйтесь. (Если вы не достигли успеха, — смело учитесь.)
Тикль очень "прозрачен" — постарайтесь разобраться в том, как работает это заклинание самостоятельно. Если после достижения успеха на этом поприще вы всё ещё будете думать, что Ткаббер это не ваш выбор, — смело стреляйтесь. (Если вы не достигли успеха, — смело учитесь.) 

Смайлики клонировал [Kostix](../Участник_Kostix.md). 


Смайлики клонировал [**Kostix**](../Участник_Kostix.md).

Changes to wiki/ru/Config.tcl.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17




18
19
20


21
22
23
24

25
26
27

28
29

30
31
32

33
34
35
36
37

38
39

40
41
42

43
44
45
46
47
48



49
50
51

52
53
54



55
56
57
58
59
60
61

62
63
64
65
66


67
68
69
70
71
72



73
74
75

76
77
78

79
80

81
82

83
84

85
86

87
88

89
90

91
92

93
94

95
96
97
98



99
100
101

102
103
104

105
106
107
108

109
110
111

112
113
114
115

116
117
118
119

120
121

122
123
124

125
126

127
128
129
130

131
132

133
134

135
136
137
138
139

140
141
142
143

144
145
146
147
148


149
150
151
152

153
154
155
156


157
158
159

160
161
162
163
164


165
166
167
168

169
170

171
172
173
174

175
176
177
178
179
180

181
182
183
184

185
186
187
188
189



190
191
192

193
194

195
196
197
198
199
200




201
202
203

204
205
206
207
208
209

210
211
212
213

214
215
216

217
218
219
220

221
222
223
224

225
226
227

228
229
230

231
232
233


234
235
236
237

238
239

240
241
242
243
244


245
246

247
248

249
250

251
252
253

254
255
256
257
258



259
260
261

262
263

264
265
266

267
268
269
270

271
272
273

274
275
276

277
278
279

280
281
282
283

284
285
286
287
288
289
290
291

292
293
294

295
296
297

298
299
300

301
302
303
304

305
306

307
308
309

310
311
312
313

314
315
316
317

318
319
320


321
322
323
324
325
326

327
328

329
330
331


332
333
334

335
336

337
338

339
340
341

342
343

344
345
346

347
348
349
350
351
352
353

354
355
356

357
358
359

360
361
362


363
364

365
366

367
368

369
370
371

372
373
374

375
376

377
378

379
380
381

382
383

384
385
386
387
388
389
390

391
392

393
394

395
396



1
2
3
4
5
6
7
8
9
10
11
12
13
14




15
16
17
18
19


20
21


22

23

24

25
26

27

28

29



30

31
32

33



34






35
36
37

38

39

40

41
42
43
44






45


46


47
48


49



50
51
52

53

54

55

56
57

58
59

60
61

62
63

64
65

66
67

68
69

70
71

72
73



74
75
76



77

78

79
80
81
82

83
84
85

86
87
88
89

90
91
92
93

94
95

96
97
98

99
100

101
102
103
104

105
106

107
108

109
110
111
112
113

114
115
116
117

118
119
120
121


122
123


124

125
126
127


128
129
130
131

132
133
134
135


136
137
138
139
140

141
142

143


144

145


146
147
148

149
150
151
152

153
154
155



156
157
158
159
160

161
162

163
164
165




166
167
168
169
170
171

172




173

174
175
176
177

178
179
180

181
182
183
184

185
186
187
188

189
190
191

192
193
194

195
196


197
198


199

200
201

202

203
204


205
206
207

208
209

210
211

212
213
214

215
216
217



218
219
220
221
222

223
224

225

226

227

228
229

230
231
232

233
234
235

236
237
238

239
240
241
242

243





244
245

246
247
248

249
250
251

252
253
254

255
256
257
258

259
260

261
262
263

264
265
266
267

268
269
270
271

272
273


274
275




276

277
278

279
280


281
282

283

284
285

286


287

288

289
290

291

292

293





294

295

296

297

298

299
300


301
302
303

304
305

306


307

308

309

310

311
312

313


314

315

316
317

318





319

320
321

322
323

324
325

326
327
328

+












-
-
-
-
+
+
+
+

-
-
+
+
-
-

-
+
-

-
+

-
+
-

-
+
-
-
-

-
+

-
+
-
-
-
+
-
-
-
-
-
-
+
+
+
-

-
+
-

-
+
+
+

-
-
-
-
-
-
+
-
-

-
-
+
+
-
-

-
-
-
+
+
+
-

-
+
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
-
-
+
+
+
-
-
-
+
-

-
+



-
+


-
+



-
+



-
+

-
+


-
+

-
+



-
+

-
+

-
+




-
+



-
+



-
-
+
+
-
-

-
+


-
-
+
+


-
+



-
-
+
+



-
+

-
+
-
-

-
+
-
-



-
+



-
+


-
-
-
+
+
+


-
+

-
+


-
-
-
-
+
+
+
+


-
+
-
-
-
-

-
+



-
+


-
+



-
+



-
+


-
+


-
+

-
-
+
+
-
-

-
+

-
+
-


-
-
+
+

-
+

-
+

-
+


-
+


-
-
-
+
+
+


-
+

-
+
-

-
+
-


-
+


-
+


-
+


-
+



-
+
-
-
-
-
-


-
+


-
+


-
+


-
+



-
+

-
+


-
+



-
+



-
+

-
-
+
+
-
-
-
-

-
+

-
+

-
-
+
+
-

-
+

-
+
-
-
+
-

-
+

-
+
-

-
+
-
-
-
-
-

-
+
-

-
+
-

-
+

-
-
+
+

-
+

-
+
-
-
+
-

-
+
-

-
+

-
+
-
-
+
-

-
+

-
+
-
-
-
-
-

-
+

-
+

-
+

-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Config.tcl)


# Config.tcl

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 Общие сведения](#Общие_сведения)
* [2 Немного о синтаксисе тикля](#Немного_о_синтаксисе_тикля)
* [3 Временное исключение кусков кода конфигурации](#Временное_исключение_кусков_кода_конфигурации)
* [4 Хуки](#Хуки)
* [5 Тестирование конфигурации](#Тестирование_конфигурации)
   * [5.1 Как запустить второй Ткаббер, не помешав первому](#Как_запустить_второй_Ткаббер_не_помешав_первому)
      * [5.1.1 Подключение с тем же логином](#Подключение_с_тем_же_логином)
      * [5.1.2 Подключение с другим логином (или к другому серверу)](#Подключение_с_другим_логином_или_к_другому_серверу)
   * [5.2 Тестирование конфигурации "вживую"](#Тестирование_конфигурации_вживую)
 * [5.1 Как запустить второй Ткаббер, не помешав первому](#Как_запустить_второй_Ткаббер_не_помешав_первому)
  * [5.1.1 Подключение с тем же логином](#Подключение_с_тем_же_логином)
  * [5.1.2 Подключение с другим логином (или к другому серверу)](#Подключение_с_другим_логином_или_к_другому_серверу)
 * [5.2 Тестирование конфигурации "вживую"](#Тестирование_конфигурации_вживую)

## <a id="Общие_сведения"></a>Общие сведения
Прежде чем читать эту статью, подумайте, достаточно ли вы хорошо представляете себе, что такое
# <a id="Общие_сведения"></a>Общие сведения
Прежде чем читать эту статью, подумайте, достаточно ли вы хорошо представляете себе, что такое файл **config.tcl** (в частности, где Ткаббер ищет его при старте); если нет, начните с чтения [этой статьи](Config.tcl_для_начинающих.md). 
файл **config.tcl** (в частности, где Ткаббер ищет его при старте); если нет, начните с
чтения [**этой статьи**](Config.tcl_для_начинающих.md).

Чтобы понять место и роль файла **config.tcl** в процедуре загрузки Ткаббера,
Чтобы понять место и роль файла **config.tcl** в процедуре загрузки Ткаббера, прочитайте [ещё одну статью](Загрузка_настроек.md). 
прочитайте [**ещё одну статью**](Загрузка_настроек.md).

А после прочтения данного опуса можно со знанием дела переходить к [**"книге рецептов"**](Нетривиальные_настройки.md).
А после прочтения данного опуса можно со знанием дела переходить к ["книге рецептов"](Нетривиальные_настройки.md). 

Файл конфигурации — **config.tcl** — читается на ранней стадии запуска Ткаббера и поэтому
Файл конфигурации — **config.tcl** — читается на ранней стадии запуска Ткаббера и поэтому позволяет влиять на большинство аспектов работы этой программы. 
позволяет влиять на большинство аспектов работы этой программы.

Файл конфигурации _выполняется_ интерпретатором тикля, который исполняет код Ткаббера. То есть этот
 Файл конфигурации _выполняется_ интерпретатором тикля, который исполняет код Ткаббера. То есть этот файл является полноценной программой на тикле. Этот аспект следует хорошо прочувствовать, имея в виду беспрецедентный динамизм языка Tcl, позволяющий, среди прочего, переопределять процедуры Ткаббера и "перепаковывать" его окна. 
файл является полноценной программой на тикле. Этот аспект следует хорошо прочувствовать, имея в виду
беспрецедентный динамизм языка Tcl, позволяющий, среди прочего, переопределять процедуры Ткаббера
и "перепаковывать" его окна.

Наиболее важные способы влияния на Ткаббер из его конфига можно условно разделить на три группы:
Наиболее важные способы влияния на Ткаббер из его конфига можно условно разделить на три группы: 

*  Установка предопределённых (документированных) переменных Ткаббера. Например, переменная `debug_lvls`
*  Установка предопределённых (документированных) переменных Ткаббера. Например, переменная `debug_lvls` управляет "темами" отладочных сообщений Ткаббера, а `ifacetk::options(use_tabbar)` — стилем интерфейса (0 — многооконный, 1 — "с табами"). Эти переменные описаны в официальной документации к Ткабберу. 
   управляет "темами" отладочных сообщений Ткаббера, а `ifacetk::options(use_tabbar)` — стилем интерфейса
   (0 — многооконный, 1 — "с табами"). Эти переменные описаны в официальной документации к Ткабберу.
*  Переопределение процедур Ткаббера. Например, таким образом
*  Переопределение процедур Ткаббера. Например, таким образом можно ["деактивировать" IRC-команду чата `/exec`](Нетривиальные_настройки.md#Запрет_IRC-команды__exec_в_окнах_чата), которую некоторые считают опасной, или переделать реакцию Ткаббера на запрос `jabber:iq:last` (см. код [плагина "Last Activity"](Плагины.md#Last_Activity)). 
   можно [**"деактивировать" IRC-команду чата** `/exec`](Нетривиальные_настройки.md#Запрет_IRC-команды__exec_в_окнах_чата),
   которую некоторые считают опасной, или переделать реакцию Ткаббера на запрос `jabber:iq:last`
   (см. код [**плагина "Last Activity"**](Плагины.md#Last_Activity)).
*  Изменение привязок событий Tk (нажатий комбинаций клавиш, к примеру) к определённым действиям.
*  Просто выполнение некоторого кода, который может, к примеру, менять изначальный "лук и фил" Ткаббера.
*  Установка обработчиков определённых _хуков_ (см. ниже). Внутри этих обработчиков можно делать
*  Изменение привязок событий Tk (нажатий комбинаций клавиш, к примеру) к определённым действиям. 
*  Просто выполнение некоторого кода, который может, к примеру, менять изначальный "лук и фил" Ткаббера. 
*  Установка обработчиков определённых _хуков_ (см. ниже). Внутри этих обработчиков можно делать интересные вещи, описанные в предыдущих пунктах. 
   интересные вещи, описанные в предыдущих пунктах.

Вообще же, вещи, которые можно сделать с Ткаббером при помощи файла его конфигурации,
Вообще же, вещи, которые можно сделать с Ткаббером при помощи файла его конфигурации, ограничены, в основном, лишь фантазией и знаниями ковыряющегося. 
ограничены, в основном, лишь фантазией и знаниями ковыряющегося.

Важно осмыслить и запомнить следующее правило:
Важно осмыслить и запомнить следующее правило: 

 Ткаббер читает свой файл конфигурации ровно _один раз за сеанс_ своей работы. Механизма "перечитывания" файла конфигурации _нет_ (и не будет). Это означает, что после внесения изменений в файл конфигурации Ткаббер нужно перезапустить (а лучше для начала запустить его вторую копию "рядом" — см. ниже обсуждение тестирования конфигурации). 

Ткаббер читает свой файл конфигурации ровно _один раз за сеанс_ своей работы. Механизма "перечитывания"
файла конфигурации _нет_ (и не будет). Это означает, что после внесения изменений в файл
конфигурации Ткаббер нужно перезапустить (а лучше для начала запустить его вторую копию
"рядом" — см. ниже обсуждение тестирования конфигурации).

Ткаббер прекрасно обходится без **config.tcl** — как он, так и "парный" файл **custom.tcl** не
Ткаббер прекрасно обходится без **config.tcl** — как он, так и "парный" файл **custom.tcl** не нужны Ткабберу для запуска и работы. Поэтому, если у Вас нет файла **config.tcl** в условленном месте, просто создайте его сами. 
нужны Ткабберу для запуска и работы. Поэтому, если у Вас нет файла **config.tcl** в условленном
месте, просто создайте его сами.

## <a id="Немного_о_синтаксисе_тикля"></a>Немного о синтаксисе тикля
Вообще, если вы собираетесь заняться "продвинутым" конфигурированием Ткаббера всерьёз
# <a id="Немного_о_синтаксисе_тикля"></a>Немного о синтаксисе тикля
Вообще, если вы собираетесь заняться "продвинутым" конфигурированием Ткаббера всерьёз (а не просто применять [готовые рецепты](Нетривиальные_настройки.md) не задумываясь), подумайте о самообразовании. Для начала можно порекомендовать такую последовательность действий: 
(а не просто применять [**готовые рецепты**](Нетривиальные_настройки.md) не задумываясь),
подумайте о самообразовании. Для начала можно порекомендовать такую последовательность действий:

1.  Изучить [туториал](http://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html);
1.  Изучить ["додекалогию"](http://wiki.tcl.tk/10259);
1.  Почитать [классику](http://www.beedub.com/book) (переведённую и
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/)). 
    на [язык родных осин](http://www.ozon.ru/context/detail/id/1820838/)).

В качестве "быстрого погружения" для нетерпеливых предложим самые главные правила, про которые
В качестве "быстрого погружения" для нетерпеливых предложим самые главные правила, про которые нужно помнить, занимаясь правкой конфига на тикле: 
нужно помнить, занимаясь правкой конфига на тикле:

##### Любые пробельные символы являются разделителем слов 
 Любые пробельные символы являются разделителем слов 

Это означает, что символы логически цельных строк (они именуются в тикле "словами"), содержащих пробелы, нужно _группировать_.
 Это означает, что символы логически цельных строк (они именуются в тикле "словами"), содержащих пробелы, нужно _группировать_. 

##### Для группировки используются ограничители {} и "" 
 Для группировки используются ограничители {} и "" 

Внутри {} не выполняется никакая интерпретация содержимого, внутри "" тикль выполняет подстановку переменных (нотация `$имя_переменной`), выполняет команды (нотация `[команда аргументы...]`) и раскрывает "escape-последовательности" (нотация `\X`, где "X" — спецсимвол).
 Внутри {} не выполняется никакая интерпретация содержимого, внутри "" тикль выполняет подстановку переменных (нотация `$имя_переменной`), выполняет команды (нотация `[команда аргументы...]`) и раскрывает "escape-последовательности" (нотация `\X`, где "X" — спецсимвол). 

##### Путевые имена файлов в Windows могут содержать прямые слэши 
 Путевые имена файлов в Windows могут содержать прямые слэши 

То есть имя "C:/Program files/FrobozzMagic 2000" является вполне допустимым.
 То есть имя "C:/Program files/FrobozzMagic 2000" является вполне допустимым. 

##### Строка без пробелов и группирующих символов также интерполируется 
 Строка без пробелов и группирующих символов также интерполируется 

То есть используйте прямые слэши под Windows, если данная строка — путевое имя файла.
 То есть используйте прямые слэши под Windows, если данная строка — путевое имя файла. 

Следствия этих правил:
Следствия этих правил: 

*  Всегда заключайте имена файлов в "" или {}, если эти имена содержат пробелы.
*  Предпочтительно заключайте такие имена в {} чтобы подавить интерпретацию содержимого строки.
*  Если вы всё-таки хотите использовать "", указывайте прямые слэши в путевых именах
*  Всегда заключайте имена файлов в "" или {}, если эти имена содержат пробелы. 
*  Предпочтительно заключайте такие имена в {} чтобы подавить интерпретацию содержимого строки. 
*  Если вы всё-таки хотите использовать "", указывайте прямые слэши в путевых именах файлов Windows — это убережёт имена от раскрытия "escape-последовательностей", вводимых обратными слэшами. 
   файлов 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

## <a id="Временное_исключение_кусков_кода_конфигурации"></a>Временное исключение кусков кода конфигурации
Для временного исключения некоторого куска кода длиннее одной строчки удобно использовать стандартную
# <a id="Временное_исключение_кусков_кода_конфигурации"></a>Временное исключение кусков кода конфигурации
Для временного исключения некоторого куска кода длиннее одной строчки удобно использовать стандартную идиому 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} {
            ...
        }
      if {some conditional expr} {
      ...
      }
    }

и вы хотите изменить условное выражение, закомментировав старое.
и вы хотите изменить условное выражение, закомментировав старое. 

Разумный на первый взгляд способ
Разумный на первый взгляд способ 

    proc foo {a b} {
        # if {some conditional expr} {
        if {some other cond expr} {
            ...
        }
      # if {some conditional expr} {
      if {some other cond expr} {
      ...
      }
    }

вызовет ошибку интерпретатора на этапе формирования аргументов для
вызовет ошибку интерпретатора на этапе формирования аргументов для команды [proc](http://www.tcl.tk/man/tcl8.4/TclCmd/proc.htm), так как в комментарии есть несбалансированный символ "{", но этот комментарий игнорируется до фактического выполнения точки кода, в которой он находится, и символ "{" в комментарии "уравновешивается" символом "}", закрывающем тело процедуры, а скобка, открывающая тело процедуры, оказывается без пары. 
команды [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).
Хардкорные подробности этих "странностей" описаны [тут](http://wiki.tcl.tk/462). 

## <a id="Хуки"></a>Хуки
Большинство полезных настроек использует механизм "хуков" — обработчиков различных событий
# <a id="Хуки"></a>Хуки
Большинство полезных настроек использует механизм "хуков" — обработчиков различных событий Ткаббера; подробнее о них можно прочитать [тут](Загрузка_настроек.md). Здесь приведены некоторые неочевидные особенности работы с ними. 
Ткаббера; подробнее о них можно прочитать [**тут**](Загрузка_настроек.md). Здесь приведены
некоторые неочевидные особенности работы с ними.

На каждый хук можно "навесить" произвольное количество обработчиков.
На каждый хук можно "навесить" произвольное количество обработчиков. 

С другой стороны, код для _одних и тех же_ хуков можно объединять. К примеру, вы хотите
С другой стороны, код для _одних и тех же_ хуков можно объединять. К примеру, вы хотите использовать два рецепта, которые вешают свой код на один и тот же хук: 
использовать два рецепта, которые вешают свой код на один и тот же хук:

    hook::add finload_hook {
        do_this
        do_that
      do_this
      do_that
    }

    
    ...

    
    hook:add finload_hook {
        foo -config bar
      foo -config bar
    }

ничего не мешает вам написать в конфиг:
ничего не мешает вам написать в конфиг: 

    hook::add finload_hook {
        do_this
        do_that
        foo -config bar
      do_this
      do_that
      foo -config bar
    }

То есть по сути это вопрос стиля.
То есть по сути это вопрос стиля. 

Имейте, однако, в виду, что обработчики хуков могут иметь приоритет, и объединять
Имейте, однако, в виду, что обработчики хуков могут иметь приоритет, и объединять код обработчиков, имеющих разный приоритет, естественно, нельзя. 
код обработчиков, имеющих разный приоритет, естественно, нельзя.

Код обработчиков хуков выполняется интерпретатором тикля при помощи
Код обработчиков хуков выполняется интерпретатором тикля при помощи команды [eval](http://tcl.tk/man/tcl8.4/TclCmd/eval.htm). То есть, если мы имеем, к примеру, 
команды [eval](http://tcl.tk/man/tcl8.4/TclCmd/eval.htm). То есть, если мы имеем, к примеру,

    hook::add finload_hook {
        frobnicate foo
      frobnicate foo
    }

то этот код в соответствующий момент будет выполнен примерно так:
то этот код в соответствующий момент будет выполнен примерно так: 

    eval {
        frobnicate foo
      frobnicate foo
    }

что в данном случае приведёт к выполнению команды
что в данном случае приведёт к выполнению команды 

    fronbnicate foo

Ситуация усложняется в том случае, когда коду хука передаются  некоторые _параметры_ (аргументы).
Ситуация усложняется в том случае, когда коду хука передаются  некоторые _параметры_ (аргументы). Пример такого хука — `open_chat_post_hook`: он принимает параметры **chatid** и **type** (описание хука см. в официальной документации). Текущие значения параметров хука "присоединяются" (или "дописываются через пробел", если так мыслить удобнее) к коду хука, после чего полученная конструкция вычисляется с помощью **eval**. В этом случае выполнение, скажем, такой реализации обработчика данного хука: 
Пример такого хука — `open_chat_post_hook`: он принимает параметры **chatid** и **type** (описание
хука см. в официальной документации). Текущие значения параметров хука "присоединяются" (или
"дописываются через пробел", если так мыслить удобнее) к коду хука, после чего полученная
конструкция вычисляется с помощью **eval**. В этом случае выполнение, скажем, такой
реализации обработчика данного хука:

    hook::add open_chat_post_hook {
        frobnicate foo
      frobnicate foo
    }

будет произведено так:
будет произведено так: 

    eval {
        frobnicate foo
      frobnicate foo
    } some_chatid some_type

что "развернётся" командой **eval** в следующий код:
что "развернётся" командой **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

то есть, в результате, как простой вызов процедуры с двумя параметрами. Что и требовалось получить.
то есть, в результате, как простой вызов процедуры с двумя параметрами. Что и требовалось получить. 

## <a id="Тестирование_конфигурации"></a>Тестирование конфигурации
Несмотря на то, что подавляющее большинство настроек Ткаббера "применяются" сразу, без перезагрузок,
# <a id="Тестирование_конфигурации"></a>Тестирование конфигурации
Несмотря на то, что подавляющее большинство настроек Ткаббера "применяются" сразу, без перезагрузок, некоторые настройки требуют перезапуска Ткаббера. К ним относятся, к примеру, настройки шрифтов (в версиях Ткаббера ниже 0.11.0 либо у приверженцев Tk 8.4), подключение "цветовых схем", изменение стиля интерфейса (многооконный/с табами) и другие. Также перезапуска Ткаббера требует установка/обновление некоторого пакета Tcl, который может использоваться Ткаббером. 
некоторые настройки требуют перезапуска Ткаббера. К ним относятся, к примеру, настройки шрифтов
(в версиях Ткаббера ниже 0.11.0 либо у приверженцев Tk 8.4), подключение "цветовых схем",
изменение стиля интерфейса (многооконный/с табами) и другие. Также перезапуска Ткаббера требует
установка/обновление некоторого пакета Tcl, который может использоваться Ткаббером.

Удобнее (и правильнее) всего не перезапускать Ткаббер, а запускать "рядом" его вторую копию.
Удобнее (и правильнее) всего не перезапускать Ткаббер, а запускать "рядом" его вторую копию. 

Достоинства этого способа:
Достоинства этого способа: 

*  Не мешает оставаться на связи, так как основной Ткаббер продолжает работать;
*  Может потребоваться несколько раундов редактирования и перезапуска Ткаббера чтобы "допилить"
*  Не мешает оставаться на связи, так как основной Ткаббер продолжает работать; 
*  Может потребоваться несколько раундов редактирования и перезапуска Ткаббера чтобы "допилить" настройку, которую вы делаете, до нужной вам кондиции. 
   настройку, которую вы делаете, до нужной вам кондиции.

Недостатки:
Недостатки: 

*  Ткаббер прожорлив и медленно стартует, поэтому на некоторых очень старых машинах запуск второй
*  Ткаббер прожорлив и медленно стартует, поэтому на некоторых очень старых машинах запуск второй копии Ткаббера нежелателен; 
   копии Ткаббера нежелателен;
*  При запуске второй копии Ткаббера, если вы собираетесь соединяться из неё с сервером,
*  При запуске второй копии Ткаббера, если вы собираетесь соединяться из неё с сервером, требуется соблюдать некоторые меры предосторожности, о которых рассказано ниже. 
   требуется соблюдать некоторые меры предосторожности, о которых рассказано ниже.

### <a id="Как_запустить_второй_Ткаббер_не_помешав_первому"></a>Как запустить второй Ткаббер, не помешав первому
## <a id="Как_запустить_второй_Ткаббер_не_помешав_первому"></a>Как запустить второй Ткаббер, не помешав первому

Большинство требуемых мер предосторожности требуется только если вы собираетесь подключаться к
Большинство требуемых мер предосторожности требуется только если вы собираетесь подключаться к серверу из второй копии Ткаббера. 
серверу из второй копии Ткаббера.

"Общая" проблема — одна: соревнование при записи настроек. Суть её в том, что все N запущенных
"Общая" проблема — одна: соревнование при записи настроек. Суть её в том, что все N запущенных "рядом" Ткабберов будут сохранять настройки в один и тот же файл **custom.tcl** (и некоторые другие). Ткаббер использует весьма прямолинейный, но разумный метод сохранения настроек: при изменении некоторой настройки файл **custom.tcl** тут же перезаписывается, отражая новое состояние конфигурации. Понятно, что после редактировании настроек параллельно в нескольких копиях Ткаббера, сохранённым останется набор настроек того Ткаббера, в котором он менялся последним по времени. 
"рядом" Ткабберов будут сохранять настройки в один и тот же файл **custom.tcl** (и некоторые другие).
Ткаббер использует весьма прямолинейный, но разумный метод сохранения настроек: при изменении некоторой
настройки файл **custom.tcl** тут же перезаписывается, отражая новое состояние конфигурации.
Понятно, что после редактировании настроек параллельно в нескольких копиях Ткаббера, сохранённым
останется набор настроек того Ткаббера, в котором он менялся последним по времени.

Имейте в виду, что это относится только к сохранению настроек "для текущей и следующих сессий";
Имейте в виду, что это относится только к сохранению настроек "для текущей и следующих сессий"; установка настройки "только для текущей сессии" не вызывает перезапись **custom.tcl**. 
установка настройки "только для текущей сессии" не вызывает перезапись **custom.tcl**.

Теперь перейдём к мерам предосторожности, которые нужно соблюдать при одновременном соединении
Теперь перейдём к мерам предосторожности, которые нужно соблюдать при одновременном соединении с сервером из нескольких копий Ткаббера. 
с сервером из нескольких копий Ткаббера.

Они чуть отличаются для случев:
Они чуть отличаются для случев: 

*  Подключение к тому же серверу с тем же логином;
*  Подключение к другому серверу, или к тому же, но с другим логином.
*  Подключение к тому же серверу с тем же логином; 
*  Подключение к другому серверу, или к тому же, но с другим логином. 

#### <a id="Подключение_с_тем_же_логином"></a>Подключение с тем же логином
### <a id="Подключение_с_тем_же_логином"></a>Подключение с тем же логином

*  _Обязательно_ в окне логина поставьте [**ресурс**](Ткаббер_ЧаВо.md#Ресурс) отличный от
*  _Обязательно_ в окне логина поставьте [ресурс](Ткаббер_ЧаВо.md#Ресурс) отличный от ресурса основного Ткаббера — это позволит Вам создать разные _сессии_ (сеансы работы) с сервером; 
   ресурса основного Ткаббера — это позволит Вам создать разные _сессии_ (сеансы работы) с сервером;
*  Там же можете выбрать [**приоритет**](Ткаббер_ЧаВо.md#Приоритет), меньший, чем у основной копии.
*  Там же можете выбрать [приоритет](Ткаббер_ЧаВо.md#Приоритет), меньший, чем у основной копии. Для чего это может пригодиться, читайте в указанной заметке про приоритеты. 
   Для чего это может пригодиться, читайте в указанной заметке про приоритеты.

Теперь можете подключиться — будет создано второе подключение с тем же логином (к тому же
Теперь можете подключиться — будет создано второе подключение с тем же логином (к тому же аккаунту), но одно будет являться другой сессией и не будет "пересекаться" с первой. 
аккаунту), но одно будет являться другой сессией и не будет "пересекаться" с первой.

Прежде чем продолжить тестирование, усвойте ещё несколько вещей:
Прежде чем продолжить тестирование, усвойте ещё несколько вещей: 

*  Подключаясь к тем же конференциям, в которых вы сидите из основной копии Ткаббера, выбирайте
*  Подключаясь к тем же конференциям, в которых вы сидите из основной копии Ткаббера, выбирайте другой ник — ваш уже занят (вами); 
   другой ник — ваш уже занят (вами);
*  При таком подключении поведение сообщений, приходящих от гейтов, зависит
*  При таком подключении поведение сообщений, приходящих от гейтов, зависит от [приоритетов](Ткаббер_ЧаВо.md#Приоритет) запущенных копий Ткаббера. 
   от [**приоритетов**](Ткаббер_ЧаВо.md#Приоритет) запущенных копий Ткаббера.

#### <a id="Подключение_с_другим_логином_или_к_другому_серверу"></a>Подключение с другим логином (или к другому серверу)
### <a id="Подключение_с_другим_логином_или_к_другому_серверу"></a>Подключение с другим логином (или к другому серверу)

В этом случае единственное, о чём нужно думать, это регистрация на гейтах в другие системы быстрого
В этом случае единственное, о чём нужно думать, это регистрация на гейтах в другие системы быстрого обмена сообщениями: к примеру, если как на первом, так и на втором аккаунте вы зарегистрированы на гейте в ICQ, логин на второй аккаунт также подключит вас к гейту, что вызовет отключение от гейта первого аккаунта. Причина этого не в гейте, а в самой "вражеской" системе быстрого обмена сообщениями, которая не позволяет делать одновременные подключения к одному своему аккаунту с разных IP-адресов (которыми будут выступать IP-адреса гейтов). 
обмена сообщениями: к примеру, если как на первом, так и на втором аккаунте вы зарегистрированы на
гейте в ICQ, логин на второй аккаунт также подключит вас к гейту, что вызовет отключение от гейта
первого аккаунта. Причина этого не в гейте, а в самой "вражеской" системе быстрого обмена сообщениями,
которая не позволяет делать одновременные подключения к одному своему аккаунту с разных
IP-адресов (которыми будут выступать IP-адреса гейтов).

Если вы столкнулись с этой проблемой, временно отключитесь ("отлогиньтесь") от гейтов в основном Ткаббере.
Если вы столкнулись с этой проблемой, временно отключитесь ("отлогиньтесь") от гейтов в основном Ткаббере. 

### <a id="Тестирование_конфигурации_вживую"></a>Тестирование конфигурации "вживую"
## <a id="Тестирование_конфигурации_вживую"></a>Тестирование конфигурации "вживую"

![(!)](../images/Hammer.png) **Сделать:** написать раздел
![(!)](../images/Hammer.png) **Сделать:** написать раздел 

Пока в качестве примера можно изучить [**это**](Шрифты.md#Быстрый_подбор_шрифтов).
Пока в качестве примера можно изучить [это](Шрифты.md#Быстрый_подбор_шрифтов). 


Changes to wiki/ru/Config.tcl_для_начинающих.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17


18
19
20

21
22
23


24
25

26
27
28


29
30
31
32

33
34
35


36
37

38
39
40

41
42
43
44


45
46

47
48
49
50

51
52
53

54
55
56
57

58
59

60
61

62
63
64
65



66
67

68
69

70
71
72
73
74

75
76

77
78

79
80
81
82
83

84
85
86
87
88

89
90
91


92
93

94
95
96
97
98
99

100
101
102

103
104
105

106
107

108
109
110
111
112

113
114
115
116
117

118
119
120
121



122
123
124

125
126
127
128


129
130
131
132
133






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16


17
18

19

20
21


22
23
24

25
26


27
28


29

30
31


32
33
34

35

36

37

38


39
40
41

42


43

44

45

46
47
48
49

50
51

52


53




54
55
56


57
58

59



60

61
62

63
64

65

66
67
68

69

70
71
72

73
74


75
76
77

78




79

80

81

82

83

84


85



86

87



88

89
90



91
92
93

94

95

96


97
98
99




100
101
102
103
104
105

+














-
-
+
+
-

-
+

-
-
+
+

-
+

-
-
+
+
-
-

-
+

-
-
+
+

-
+
-

-
+
-

-
-
+
+

-
+
-
-

-
+
-

-
+



-
+

-
+
-
-
+
-
-
-
-
+
+
+
-
-
+

-
+
-
-
-

-
+

-
+

-
+
-



-
+
-



-
+

-
-
+
+

-
+
-
-
-
-

-
+
-

-
+
-

-
+
-
-
+
-
-
-

-
+
-
-
-

-
+

-
-
-
+
+
+
-

-
+
-

-
-
+
+

-
-
-
-
+
+
+
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Config.tcl_для_начинающих)


# Config.tcl для начинающих

Материал из Tkabber Wiki.

## <a id="toc"></a>Содержание

* [1 Введение](#Введение)
* [2 Что?](#Что)
* [3 Зачем?](#Зачем)
* [4 Где?](#Где)
* [5 Как?](#Как)
* [6 Что дальше?](#Что_дальше)

## <a id="Введение"></a>Введение
К сожалению, пользователи по разным причинам часто совершают целый букет довольно странных ошибок,
# <a id="Введение"></a>Введение
К сожалению, пользователи по разным причинам часто совершают целый букет довольно странных ошибок, относящихся к нахождению и правке файла конфигурации Ткаббера. 
относящихся к нахождению и правке файла конфигурации Ткаббера.

Поэтому была написана эта статья. Здесь даны самые базовые сведения о файле конфигурации Ткаббера.
Поэтому была написана эта статья. Здесь даны самые базовые сведения о файле конфигурации Ткаббера. 

## <a id="Что"></a>Что?
Для хранения _нетривиальных_ настроек пользователя в Ткаббере предусмотрен ровно _один_ файл.
# <a id="Что"></a>Что?
Для хранения _нетривиальных_ настроек пользователя в Ткаббере предусмотрен ровно _один_ файл. 

Он называется **config.tcl**.
Он называется **config.tcl**. 

## <a id="Зачем"></a>Зачем?
Обязательно семь раз подумайте: _нужно ли вам **вообще**_ лезть в этот файл, ведь _подавляющее большинство_
# <a id="Зачем"></a>Зачем?
Обязательно семь раз подумайте: _нужно ли вам **вообще**_ лезть в этот файл, ведь _подавляющее большинство_ аспектов конфигурации Ткаббера настраивается через встроенный интерфейс конфигурации, доступный через пункт главного меню **Tkabber → Настройки**. 
аспектов конфигурации Ткаббера настраивается через встроенный интерфейс конфигурации, доступный через пункт
главного меню **Tkabber → Настройки**.

Файл config.tcl предназначен для "ковыряния" умелыми пользователями, которые:
Файл config.tcl предназначен для "ковыряния" умелыми пользователями, которые: 

*  понимают, что делают;
*  способны _внимательно и вдумчиво_ читать документацию.
*  понимают, что делают; 
*  способны _внимательно и вдумчиво_ читать документацию. 

Поэтому, если выполнение указанных условий по каким-то причинам не для вас, лучше относитесь
Поэтому, если выполнение указанных условий по каким-то причинам не для вас, лучше относитесь к этому файлу настроек как к несуществующей функциональности. 
к этому файлу настроек как к несуществующей функциональности.

Иначе не удивляйтесь, если к вам будут относиться, мягко говоря, прохладно, когда вы начнёте задавать
Иначе не удивляйтесь, если к вам будут относиться, мягко говоря, прохладно, когда вы начнёте задавать тривиальные вопросы о файле конфигурации Ткаббера. 
тривиальные вопросы о файле конфигурации Ткаббера.

## <a id="Где"></a>Где?
При запуске Ткаббер ищет файл config.tcl _ровно в одном месте — в каталоге своих **настроек.**_
# <a id="Где"></a>Где?
При запуске Ткаббер ищет файл config.tcl _ровно в одном месте — в каталоге своих **настроек.**_ 

Это нужно понять совершенно чётко: в самом _коде_ Ткаббера нет и быть не может никаких файлов
Это нужно понять совершенно чётко: в самом _коде_ Ткаббера нет и быть не может никаких файлов конфигурации! Даже если вы обнаружите в каталоге, куда поставлен Ткаббер, тридцать файлов с названием config.tcl, знайте: _это **не те** файлы!_ 
конфигурации! Даже если вы обнаружите в каталоге, куда поставлен Ткаббер, тридцать файлов с
названием config.tcl, знайте: _это **не те** файлы!_

Местоположения каталога настроек Ткаббера зависит от операционной системы, хотя
Местоположения каталога настроек Ткаббера зависит от операционной системы, хотя и [поддаётся настройке пользователем](Config_dir.md). 
и [**поддаётся настройке пользователем**](Config_dir.md).

В Unix этим каталогом всегда является
В Unix этим каталогом всегда является 

    ~/.tkabber

В Windows ситуация сложнее:
В Windows ситуация сложнее: 

*  В версиях Ткаббера начиная с 0.10.0 на системах Windows каталог настроек хранится в области
*  В версиях Ткаббера начиная с 0.10.0 на системах Windows каталог настроек хранится в области файловой системы, известной как "application data": 
   файловой системы, известной как "application data":
 *  На Windows 2000 и Windows XP это
 *  На Windows 2000 и Windows XP это 

            C:\Documents and Settings\USER\Application Data\Tkabber

 *  На Windows Vista и Windows 7 это
    C:\Documents and Settings\USER\Application Data\Tkabber
 
 *  На Windows Vista и Windows 7 это 

            C:\Users\USER\Tkabber
    C:\Users\USER\Tkabber

Здесь — **USER** это имя пользователя, зарегистрировавшегося в системе. Также начиная с версии 0.10.0,
Здесь — **USER** это имя пользователя, зарегистрировавшегося в системе. Также начиная с версии 0.10.0, Ткаббер "знает" про переменную окружения **TKABBER\_HOME** — если она есть, для хранения настроек используется путь, указанный в ней. Подробности можно узнать [в этой статье](Config.tcl.md) или в [разделе "Configuration" официальной документации](http://tkabber.jabber.ru/files/doc/tkabber.html#s.configuration). 
Ткаббер "знает" про переменную окружения **TKABBER\_HOME** — если она есть, для хранения настроек
используется путь, указанный в ней. Подробности можно узнать [**в этой статье**](Config.tcl.md) или
в [разделе "Configuration" официальной документации](http://tkabber.jabber.ru/files/doc/tkabber.html#s.configuration).

*  В версиях Ткаббера до 0.9.9 включительно настройки хранятся в каталоге
*  В версиях Ткаббера до 0.9.9 включительно настройки хранятся в каталоге 

        ~/.tkabber
    ~/.tkabber

а символ "~", означающий "домашний каталог пользователя", зависит от версии Windows. На
а символ "~", означающий "домашний каталог пользователя", зависит от версии Windows. На Windows XP это обычно 
Windows XP это обычно

    C:\Documents and Settings\USER\.tkabber

где **USER** это имя пользователя, зарегистрировавшегося в системе. Под Windows 9x "~"
где **USER** это имя пользователя, зарегистрировавшегося в системе. Под Windows 9x "~" раскрывается в имя системного диска, и каталог оказывается чем-то вроде 
раскрывается в имя системного диска, и каталог оказывается чем-то вроде

    C:\.TKABBER

Подробно о механизме "раскрытия тильды" можно прочитать [**здесь**](Настройка_Ткаббера__азы_и_глубже.md).
Подробно о механизме "раскрытия тильды" можно прочитать [здесь](Настройка_Ткаббера__азы_и_глубже.md). 

## <a id="Как"></a>Как?
Для начала уясните себе, что _файл настроек **не нужен** Ткабберу!_ То есть он вовсе не обязан существовать.
# <a id="Как"></a>Как?
Для начала уясните себе, что _файл настроек **не нужен** Ткабберу!_ То есть он вовсе не обязан существовать. 

Поэтому, если вы не нашли файл config.tcl в каталоге настроек Ткаббера, но уверены, что
Поэтому, если вы не нашли файл config.tcl в каталоге настроек Ткаббера, но уверены, что определили этот каталог правильно (если был произведён хотя бы один сеанс работы с Ткаббером, в этом каталоге будет присутствовать файл custom.tcl, а также могут быть файлы: nick\_colors.tcl, headlines.tcl, каталог logs и т. д.), не паникуйте и не пытайтесь искать этот файл в "исходниках" Ткаббера — его там нет. Вам придётся создать файл config.tcl самим. Это несложно. 
определили этот каталог правильно (если был произведён хотя бы один сеанс работы с Ткаббером,
в этом каталоге будет присутствовать файл custom.tcl, а также могут быть файлы: nick\_colors.tcl,
headlines.tcl, каталог logs и т. д.), не паникуйте и не пытайтесь искать этот файл в "исходниках"
Ткаббера — его там нет. Вам придётся создать файл config.tcl самим. Это несложно.

config.tcl представляет собой простой текстовый файл в системной кодировке. В Windows
config.tcl представляет собой простой текстовый файл в системной кодировке. В Windows это — **Windows-1251**, в Unix она зависит от настроек локали. 
это — **Windows-1251**, в Unix она зависит от настроек локали.

Таким образом, как создавать, так и редактировать этот файл в Windows можно простым
Таким образом, как создавать, так и редактировать этот файл в Windows можно простым "Блокнотом". При этом, однако, следует помнить о некоторых возможных проблемах: 
"Блокнотом". При этом, однако, следует помнить о некоторых возможных проблемах:

*  Файл config.tcl должен сохраняться в "Кодировке ANSI" (термин "Блокнота"). Эта кодировка
*  Файл config.tcl должен сохраняться в "Кодировке ANSI" (термин "Блокнота"). Эта кодировка выбирается по умолчанию при сохранении только что созданного файла, так что беспокоиться особо не о чем. 
   выбирается по умолчанию при сохранении только что созданного файла, так что беспокоиться особо не о чем.
*  Как "Проводник Windows", так и "Блокнот", пытаются ревностно блюсти тип файла — "текстовый" у
*  Как "Проводник Windows", так и "Блокнот", пытаются ревностно блюсти тип файла — "текстовый" у текстовых файлов; а он в Windows определяется расширением ".txt". Поэтому следите за расширением файла! Оно должно быть ".tcl", а не ".txt" или, допустим, ".tcl.txt". Не давайте "Блокноту" и "Проводнику" поменять расширение, боритесь за него! 
   текстовых файлов; а он в Windows определяется расширением ".txt". Поэтому следите за
   расширением файла! Оно должно быть ".tcl", а не ".txt" или, допустим, ".tcl.txt". Не давайте
   "Блокноту" и "Проводнику" поменять расширение, боритесь за него!

Строго говоря, файл config.tcl представляет собой полноценную программу на
Строго говоря, файл config.tcl представляет собой полноценную программу на языке [Tcl](http://ru.wikipedia.org/wiki/Tcl), которая _выполняется_ Ткаббером. Однако, тикль — весьма прост в том плане, что имеет очень простой синтаксис, и его конструкции читаются "практически по-английски". 
языке [Tcl](http://ru.wikipedia.org/wiki/Tcl), которая _выполняется_ Ткаббером. Однако,
тикль — весьма прост в том плане, что имеет очень простой синтаксис, и его конструкции
читаются "практически по-английски".

Несколько простых правил, формулировка которых не вполне точна технически, но подойдёт для нашей цели:
Несколько простых правил, формулировка которых не вполне точна технически, но подойдёт для нашей цели: 

*  Одна строка — одна _команда._
*  Если первым непробельным символом в строке является "\#", то эта строка является комментарием.
*  Фигурные скобки ("{" и "}") ограничивают _блоки,_ которые в тикле именуются "словами".
*  Одна строка — одна _команда._ 
*  Если первым непробельным символом в строке является "\#", то эта строка является комментарием. 
*  Фигурные скобки ("{" и "}") ограничивают _блоки,_ которые в тикле именуются "словами". Также слова ограничиваются двойными кавычками. 
   Также слова ограничиваются двойными кавычками.

Помещая в конфиг готовый кусок настроек (например, "подсмотренный" в других статьях этой вики),
Помещая в конфиг готовый кусок настроек (например, "подсмотренный" в других статьях этой вики), помещайте его на "свободное место" — вне всяких блоков. Например, просто дописывайте в конец файла. 
помещайте его на "свободное место" — вне всяких блоков. Например, просто дописывайте в конец файла.

## <a id="Что_дальше"></a>Что дальше?
Дальше — больше:
# <a id="Что_дальше"></a>Что дальше?
Дальше — больше: 

*  [**Полное описание**](Config_dir.md) алгоритма определения расположения каталога настроек в современных версиях Ткаббера.
*  [**Рассказ**](Настройка_Ткаббера__азы_и_глубже.md) о странном символе "~", переменных окружения и прочих захватывающих вещах.
*  [**"Config.tcl для уже начавших"**](Config.tcl.md).
*  [**Нетривиальные настройки**](Нетривиальные_настройки.md).
*  [Полное описание](Config_dir.md) алгоритма определения расположения каталога настроек в современных версиях Ткаббера. 
*  [Рассказ](Настройка_Ткаббера__азы_и_глубже.md) о странном символе "~", переменных окружения и прочих захватывающих вещах. 
*  ["Config.tcl для уже начавших"](Config.tcl.md). 
*  [Нетривиальные настройки](Нетривиальные_настройки.md). 


Changes to wiki/ru/Config_dir.md.

1

2
3
4
5
6
7

8
9
10

11
12
13
14
15
16
17
18
19
20
21
22
23




24
25
26
27

28
29

30
31
32
33

34
35
36

37
38
39
40
41
42
43
44
45
46
47










48
49
50
51
52
53
54
55
56
57
58
59
60
61











62
63
64
65
66
67
68
69
70








71
72

73
74
75
76

77
78
79
80
81
82
83
84







85
86

87
88

89
90
91
92
93



94
95

96
97
98
99

100
101

102
103
104
105
106
107
108
109







110
111

112
113
114


115
116
117
118

119
120
121
122
123
124

125
126
127
128



129
130

131
132
133
134

135
136
137

138
139

140
141
142
143
144
145
146
147

148
149
150
151
152
153

154
155
156
157
158
159
160
161
162

163
164

165
166
167

168
169
170

171
172

173
174
175
176



177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251










































































252
253

254
255
256

257
258
259
260

261
262

263
264
265
266

267
268
269
270

271
272
273
274

275
276

277
278
279
280

281
282
283
284


285
286
287
288

289
290
291
292
293





1
2
3
4
5
6
7

8

9

10
11
12
13
14
15
16
17
18
19




20
21
22
23
24
25
26

27
28

29


30

31

32

33
34










35
36
37
38
39
40
41
42
43
44
45
46
47











48
49
50
51
52
53
54
55
56
57
58









59
60
61
62
63
64
65
66
67

68
69
70
71

72
73







74
75
76
77
78
79
80
81

82
83

84





85
86
87


88
89
90
91

92
93

94








95
96
97
98
99
100
101
102

103
104


105
106

107


108
109
110
111
112
113

114
115



116
117
118
119

120


121

122



123


124




125
126
127

128




129

130



131
132
133
134
135

136
137

138

139

140
141
142

143
144

145
146



147
148
149
150










































































151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225

226
227
228

229
230
231
232

233
234

235
236
237
238

239
240
241
242

243
244
245
246

247


248


249

250
251
252


253
254
255
256
257

258
259




260
261
262
263
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 на своей системе. 

## <a id="toc"></a>Содержание

* [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 Реализация в Ткаббере](#Реализация_в_Ткаббере)

## <a id="Введение"></a>Введение

Обсуждение новой схемы поддержки каталога конфигурации Ткаббера.
Обсуждение новой схемы поддержки каталога конфигурации Ткаббера. 

Идея: отказаться от схемы **~/.tkabber** в Windows по причине того, что при существующей
Идея: отказаться от схемы **~/.tkabber** в Windows по причине того, что при существующей схеме каталог конфигурации на любой Windows-системе оказывается не там, где предполагается хранить конфигурацию на данной системе. 
схеме каталог конфигурации на любой Windows-системе оказывается не там, где предполагается
хранить конфигурацию на данной системе.

Конкретно нас интересует т.н. каталог "application data" ("appdata"). Предполагается
Конкретно нас интересует т.н. каталог "application data" ("appdata"). Предполагается хранить настройки Ткаббера в подкаталоге "Tkabber" этого каталога. 
хранить настройки Ткаббера в подкаталоге "Tkabber" этого каталога.

Получить путь каталога "appdata" можно тремя способами:
Получить путь каталога "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}.
*  Переменная окружения **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}. 

## <a id="Инфа_по_системам"></a>Инфа по системам

*  Win98 (SE):
 *  Каталог: `%windir%\Application Data`;
 *  **%APPDATA%** — **нет;**
 *  Ключ "Shell Folders" — есть;
 *  Примечание: уже есть **%windir%**.

*  WinNT 4.0 (русская):
 *  Каталог: `%USERPROFILE%\Данные`;
 *  **%APPDATA%** — **нет;**
 *  Ключ "Shell Folders" — есть;
 *  Примечание: кривое значение %HOMEPATH% (корень загрузочного диска), в правильное место
*  Win98 (SE): 
 *  Каталог: `%windir%\Application Data`; 
 *  **%APPDATA%** — **нет;** 
 *  Ключ "Shell Folders" — есть; 
 *  Примечание: уже есть **%windir%**. 
 
*  WinNT 4.0 (русская): 
 *  Каталог: `%USERPROFILE%\Данные`; 
 *  **%APPDATA%** — **нет;** 
 *  Ключ "Shell Folders" — есть; 
 *  Примечание: кривое значение %HOMEPATH% (корень загрузочного диска), в правильное место показывает %USERPROFILE% (%windir%\\Profiles\\\<USERNAME>). 
    показывает %USERPROFILE% (%windir%\\Profiles\\\<USERNAME>).

*  w2k, w2k3, XP:
 *  Каталог: **%APPDATA%**;
 *  Ключ "Shell Folders" — есть, но, откровенно говоря, он всегда был deprecated;

*  Vista:
 *  Каталог: **%APPDATA%**;
 *  Ключ "Shell Folders" — есть, _но deprecated._
 
*  w2k, w2k3, XP: 
 *  Каталог: **%APPDATA%**; 
 *  Ключ "Shell Folders" — есть, но, откровенно говоря, он всегда был deprecated; 
 
*  Vista: 
 *  Каталог: **%APPDATA%**; 
 *  Ключ "Shell Folders" — есть, _но deprecated._ 

**(TODO): 95? ME?**
**(TODO): 95? ME?** 

## <a id="Проблемы"></a>Проблемы

Наиболее разумным представляется вызов SHGetSpecialFolderPath, однако это не самый простой путь:
Наиболее разумным представляется вызов SHGetSpecialFolderPath, однако это не самый простой путь: 

*  Данную функциональность в готовом виде обеспечивает пакет [TWAPI](http://twapi.sourceforge.net/shell.html#get_shell_folder), однако, он:
 *  Не поставляется вместе с дистром AS;
 *  Весит >600к в архиве, что будет препятствовать его попаданию в старпак и вообще отобьёт охоту у пользователей его устанавливать.

*  Возможно "цеплять" DLL, предоставляющую данный вызов API, например, при помощи [Ffidl](http://wiki.tcl.tk/2?Ffidl), однако:
 *  Этот пакет так же не поставляется с AS;
 *  Прямой вызов функции из DLL выглядит "не очень".
*  Данную функциональность в готовом виде обеспечивает пакет [TWAPI](http://twapi.sourceforge.net/shell.html#get_shell_folder), однако, он: 
 *  Не поставляется вместе с дистром AS; 
 *  Весит >600к в архиве, что будет препятствовать его попаданию в старпак и вообще отобьёт охоту у пользователей его устанавливать. 
 
*  Возможно "цеплять" DLL, предоставляющую данный вызов API, например, при помощи [Ffidl](http://wiki.tcl.tk/2?Ffidl), однако: 
 *  Этот пакет так же не поставляется с AS; 
 *  Прямой вызов функции из DLL выглядит "не очень". 

Путь с реестром и окружением не имеет такой "идеологической чистоты", как вызов SHGetSpecialFolderPath.
Путь с реестром и окружением не имеет такой "идеологической чистоты", как вызов SHGetSpecialFolderPath. 

*  Недостаток: прямое чтение реестра и окружения в условиях огульного изменения своих же
*  Недостаток: прямое чтение реестра и окружения в условиях огульного изменения своих же "стандартов" соответствующей фирмой является "ненадёжным"; кроме того, в ОС, следующей за Vista, соотв. раздел реестра может быть изъят полностью. 
   "стандартов" соответствующей фирмой является "ненадёжным"; кроме того, в ОС, следующей за
   Vista, соотв. раздел реестра может быть изъят полностью.
*  Достоинства:
 *  Работа с переменными окружения доступна непосредственно;
 *  Пакет **registry** для работы с реестром входит в "ядро" виндовой версии тикля,
*  Достоинства: 
 *  Работа с переменными окружения доступна непосредственно; 
 *  Пакет **registry** для работы с реестром входит в "ядро" виндовой версии тикля, то есть очень велика вероятность его доступности даже в старпаке; 
    то есть очень велика вероятность его доступности даже в старпаке;
 *  Обсуждаемый ключ реестра доступен на всех исследованных системах.
 *  Обсуждаемый ключ реестра доступен на всех исследованных системах. 

## <a id="Рабочий_вариант"></a>Рабочий вариант

При старте:
При старте: 

*  Ткаббер проверяет наличие переменной окружения **TKABBER\_HOME**, если она есть, Ткаббер использует
*  Ткаббер проверяет наличие переменной окружения **TKABBER\_HOME**, если она есть, Ткаббер использует её как путь до каталога своих настроек. 
   её как путь до каталога своих настроек.
*  Если её нет, то:
 *  В Unix каталог настроек устанавливается в **~/.tkabber**.
 *  В Windows применяются описанные выше эвристики:

 1.  Проверяется переменная окружения **APPDATA**;
 1.  Проверяется ключ реестра "Shell Folders", если доступен пакет **registry**;
 1.  К полученному каталогу добавляется элемент пути "Tkabber", и этот каталог используется как каталог настроек.
*  Если её нет, то: 
 *  В Unix каталог настроек устанавливается в **~/.tkabber**. 
 *  В Windows применяются описанные выше эвристики: 
 
 1.  Проверяется переменная окружения **APPDATA**; 
 1.  Проверяется ключ реестра "Shell Folders", если доступен пакет **registry**; 
 1.  К полученному каталогу добавляется элемент пути "Tkabber", и этот каталог используется как каталог настроек. 

Вопросы:
Вопросы: 

*  Возможно, стоит сначала смотреть в реестр, а потом — в окружение;
*  Нужно предусмотреть разумный Fallback для различных версий Windows; идея **~/.tkabber** для
*  Возможно, стоит сначала смотреть в реестр, а потом — в окружение; 
*  Нужно предусмотреть разумный Fallback для различных версий Windows; идея **~/.tkabber** для этого случая представляется не очень разумной. 
   этого случая представляется не очень разумной.

[_Juriks_](Участник_Juriks.md), посовещавшись с [**Kostix**](Участник_Kostix.md), предлагает:
Запускать несколько Ткабберов с разными настройками с помощью таких вот скриптов:
[Juriks](Участник_Juriks.md), посовещавшись с [kostix](Участник_Kostix.md), предлагает: Запускать несколько Ткабберов с разными настройками с помощью таких вот скриптов: 

    @echo off
    set TKABBER_HOME=c:\home\vasya_pupkin
    start tkabber.exe

То есть искать папку с конфигами в таком порядке:
То есть искать папку с конфигами в таком порядке: 

1.  переменная окружения **TKABBER\_HOME**
1.  реестр
1.  прочие переменные оружения
1.  переменная окружения **TKABBER\_HOME** 
1.  реестр 
1.  прочие переменные оружения 

[Kostix](Участник_Kostix.md) комментирует: реализованный в альфе Ткаббера вариант
[kostix](Участник_Kostix.md) комментирует: реализованный в альфе Ткаббера вариант сначала ищет переменную окружения **APPDATA**, и только в случае неудачи смотрит реестр. Причины простые: 
сначала ищет переменную окружения **APPDATA**, и только в случае неудачи
смотрит реестр. Причины простые:

*  Пакет **registry**, хоть и входит в "ядро" виндового тикля, технически может
*  Пакет **registry**, хоть и входит в "ядро" виндового тикля, технически может отсутствовать (в ткаббер-паке или старпаке, к примеру), а вот помешать тиклю работать с окружением не может никакая конфигурация его рантайма; 
   отсутствовать (в ткаббер-паке или старпаке, к примеру), а вот помешать тиклю работать
   с окружением не может никакая конфигурация его рантайма;
*  Загрузка пакета — это доп. время для старта + доп. расход памяти. А пакет **registry**
*  Загрузка пакета — это доп. время для старта + доп. расход памяти. А пакет **registry** пока что больше нигде в Ткаббере не используется. 
   пока что больше нигде в Ткаббере не используется.
*  Реестр ничем не лучше переменной **APPDATA** в плане надёжности: точно так же, как в
*  Реестр ничем не лучше переменной **APPDATA** в плане надёжности: точно так же, как в системе может быть кривое значение **APPDATA**, может быть крив ключ **Shell Folders** реестра. Только вызов соотв. функции Win32 API из **shell32.dll** даёт гарантии. Но он требует "неядерного" (и отсутствующего в дистре от AS) пакета **Ffidl**. Поэтому включение соответствующего кода в Ткаббер — вопрос сложный... 
   системе может быть кривое значение **APPDATA**, может быть крив ключ **Shell Folders**
   реестра. Только вызов соотв. функции Win32 API из **shell32.dll** даёт гарантии. Но он
   требует "неядерного" (и отсутствующего в дистре от AS) пакета **Ffidl**. Поэтому
   включение соответствующего кода в Ткаббер — вопрос сложный...

## <a id="Добавка_про_SHGetSpecialFolderPath"></a>Добавка про SHGetSpecialFolderPath

[SHGetSpecialFolderPath](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetspecialfolderpath.asp)
[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 необходимо использовать старую версию. 
«замещена» процедурой
[SHGetFolderPath](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetfolderpath.asp)
начиная с w2k, хотя и доступна на всех системах. Для нас это ничего не значит,
так как нам для совместимости со старыми OS необходимо использовать старую версию.

На современных системах SHGetSpecialFolderPath реализована в **shell32.dll**. Также
На современных системах SHGetSpecialFolderPath реализована в **shell32.dll**. Также эта функция содержится в _redistributable_ library **SHFolder.dll**, которая может включаться в поставку продукта и худо-бедно работать на любой OS. Starpack это, пожалуй, не спасёт, а вот Pack и выше может спокойно её использовать. 
эта функция содержится в _redistributable_ library **SHFolder.dll**, которая
может включаться в поставку продукта и худо-бедно работать на любой OS. Starpack это,
пожалуй, не спасёт, а вот Pack и выше может спокойно её использовать.

## <a id="Тестовая_реализация_SHGetSpecialFolderPath_через_Ffidl"></a>Тестовая реализация SHGetSpecialFolderPath через Ffidl

### <a id="Скрипт"></a>Скрипт

Скрипт, печатающий путевое имя каталога "application data" в Windows.
Скрипт, печатающий путевое имя каталога "application data" в Windows. 

Создаваемая команда Tcl "SHGetSpecialFolderPath" способна возвращать имя
Создаваемая команда Tcl "SHGetSpecialFolderPath" способна возвращать имя любого стандартного каталога Windows (заданного соотв. ключом "CSIDL\_..."). 
любого стандартного каталога 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. 

### <a id="Замечания"></a>Замечания

Вписал [статью в тиклевое вики](http://wiki.tcl.tk/17492).
Вписал [статью в тиклевое вики](http://wiki.tcl.tk/17492). 

#### <a id="ANSI_8-bit_vs_Unicode_UTF-16"></a>ANSI (8-bit) vs Unicode (UTF-16)

*  Не совсем ясно, доступна ли юникодная версия (SHGetSpecialFolderPathW)
*  Не совсем ясно, доступна ли юникодная версия (SHGetSpecialFolderPathW) в старых Win9x. Похоже, что доступна. 
   в старых Win9x. Похоже, что доступна.
*  Не совсем ясно поведение Ffild по отношению к строкам в UTF-16: приёмный
*  Не совсем ясно поведение Ffild по отношению к строкам в UTF-16: приёмный буфер должен быть MAX\_PATH _символов_? Тогда что имеется в виду: тиклевые символы UTF-8 или виндовые символы 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]

#### <a id="Реализация_в_Ткаббере"></a>Реализация в Ткаббере

Потребует более серьёзного подхода:
Потребует более серьёзного подхода: 

*  Пространство имён **config**;
*  "Пустая" реализация SHGetSpecialFolderPath для платформ, отличных от Windows;
*  Отслеживание успешного завершения создания callout'а для SHGetSpecialFolderPath
   с созданием пустой реализации (см. выше) в случае ошибки.
*  Пространство имён **config**; 
*  "Пустая" реализация SHGetSpecialFolderPath для платформ, отличных от Windows; 
*  Отслеживание успешного завершения создания callout'а для SHGetSpecialFolderPath с созданием пустой реализации (см. выше) в случае ошибки. 


Changes to wiki/ru/Google_Talk.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16



17
18

19
20
21


22

23
24
25

26
27
28

29
30
31
32
33

34
35
36


37

38
39

40
41

42
43

44
45

46
47

48
49

50
51

52
53

54
55

56
57

58
59

60
61

62
63

64
65

66
67

68
69

70
71

72
73
74


75
76
77

78
79
80


81
82

83
84
85

86
87
88
89
90
91

92
93
94
95
96
97

98
99

100
101
102

103
104

105
106
107
108
109
110

111
112
113

114
115
116
117

118
119

120
121

122
123
124
125

126
127
128
129


130
131
132
133

134
135

136
137
138
139
140




141
142
143
144


145
146
147
148
149
150



151
152
153

154
155
156
157
158

159
160
161
162
163
164
165
166

167
168
169


170
171

172
173

174
175

176
177

178
179

180
181
182


183
184

185
186
187

188
189

190
191

192
193
194

195
196
197
198
199
200

201
202
203

204
205
206

207
208
209

210
211
212
213

214
215
216
217

218
219
220
221

222
223
224
225

226
227

228
229
230
231
232

233
234

235
236

237
238

239
240
241
242
243



1
2
3
4
5
6
7
8
9
10
11
12
13
14



15
16
17
18

19
20
21
22
23
24

25

26

27

28

29



30

31
32
33
34
35
36

37
38

39
40

41
42

43
44

45
46

47
48

49
50

51
52

53
54

55
56

57
58

59
60

61
62

63
64

65
66

67
68

69
70

71
72


73
74

75

76
77


78
79
80

81

82

83




84

85




86

87
88

89

90

91
92

93




94

95



96


97

98
99

100
101

102


103

104
105



106
107




108


109





110
111
112
113




114
115






116
117
118



119



120

121






122

123
124


125
126
127

128
129

130
131

132
133

134
135

136
137


138
139
140

141

142

143
144

145
146

147

148

149




150

151

152

153



154

155

156


157

158


159

160
161
162
163

164
165
166
167

168
169

170



171

172
173

174
175

176
177

178


179


180
181
182

+












-
-
-
+
+
+

-
+



+
+
-
+
-

-
+
-

-
+
-
-
-

-
+



+
+
-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
-
+
+
-

-
+

-
-
+
+

-
+
-

-
+
-
-
-
-

-
+
-
-
-
-

-
+

-
+
-

-
+

-
+
-
-
-
-

-
+
-
-
-
+
-
-

-
+

-
+

-
+
-
-

-
+

-
-
-
+
+
-
-
-
-
+
-
-
+
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
-
-
-

-
+
-
-
-
-
-
-

-
+

-
-
+
+

-
+

-
+

-
+

-
+

-
+

-
-
+
+

-
+
-

-
+

-
+

-
+
-

-
+
-
-
-
-

-
+
-

-
+
-
-
-
+
-

-
+
-
-

-
+
-
-

-
+



-
+



-
+

-
+
-
-
-

-
+

-
+

-
+

-
+
-
-

-
-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Google_Talk/index.html)


# Google Talk

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [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 Выяснение имени хоста по имени сервера](#Выяснение_имени_хоста_по_имени_сервера)

## <a id="Требования_к_Ткабберу"></a>Требования к Ткабберу
# <a id="Требования_к_Ткабберу"></a>Требования к Ткабберу

![](../images/180px-Tkabber-Login-SSL.png)

![](../images/magnify-clip.png)

Прежде всего, для подключения к серверу Google Talk (далее GTalk), в вашем Ткаббере ***обязательно**
Прежде всего, для подключения к серверу Google Talk (далее GTalk), в вашем Ткаббере _**обязательно** должна быть поддержка [SSL/TLS](Между_офлайном_и_онлайном.md#SSL_TLS)._ 
должна быть поддержка [**SSL/TLS**](Между_офлайном_и_онлайном.md#SSL_TLS).*

Это необходимо из-за того, что существует, в принципе, два способа подключения,
Это необходимо из-за того, что существует, в принципе, два способа подключения, но оба они так или иначе требуют использования SSL. 
но оба они так или иначе требуют использования SSL.

Наличие поддержки SSL можно выяснить, посмотрев на окно логина: оно должно содержать закладку,
Наличие поддержки SSL можно выяснить, посмотрев на окно логина: оно должно содержать закладку, в названии которой содержится слово "SSL". Если в вашем Ткаббере также есть поддержка [сжатия потока](Low_traffic_HOWTO.md#Stream_Compression_zlib), то на этой закладке будет надпись "SSL и сжатие". 
в названии которой содержится слово "SSL". Если в вашем Ткаббере также есть поддержка
[**сжатия потока**](Low_traffic_HOWTO.md#Stream_Compression_zlib), то на этой закладке
будет надпись "SSL и сжатие".

## <a id="Подключение_просто"></a>Подключение (просто)
# <a id="Подключение_просто"></a>Подключение (просто)

![](../images/180px-Tkabber-GTalk-creds.png)

![](../images/magnify-clip.png)

Во-первых, правильно укажите имя сервера и свою учётную запись в окне логина:
Во-первых, правильно укажите имя сервера и свою учётную запись в окне логина: 

##### Пользователь 
 Пользователь 

> имя аккаунта на `gmail.com`; например, для `vasya@gmail.com` это будет "vasya"
 имя аккаунта на `gmail.com`; например, для `vasya@gmail.com` это будет "vasya" 

##### Сервер 
 Сервер 

> `gmail.com`
 `gmail.com` 

##### Пароль 
 Пароль 

> пароль от аккаунта на `gmail.com`
 пароль от аккаунта на `gmail.com` 

Теперь опишем "канонический" вариант настроек для подключения:
Теперь опишем "канонический" вариант настроек для подключения: 

##### Вкладка "Соединение" 
 Вкладка "Соедниение" 

> Убедитесь, что флажок "Явно указать адрес и порт для подключения" выключен.
 Убедитесь, что флажок "Явно указать адрес и порт для подключения" выключен. 

##### Вкладка "Аутентификация" 
 Вкладка "Аутентификация" 

> Убедитесь, что включен флажок "Использовать SASL для аутентификации".
 Убедитесь, что включен флажок "Использовать SASL для аутентификации". 

##### Вкладка "SSL" 
 Вкладка "SSL" 

> Убедитесь, что включена опция "Шифрование (STARTTLS)".
 Убедитесь, что включена опция "Шифрование (STARTTLS)". 

##### Вкладка "HTTP-соедниение" 
 Вкладка "HTTP-соедниение" 

> Флажок "Подключиться с использованием HTTP" должен быть выключен.
 Флажок "Подключиться с использованием HTTP" должен быть выключен. 

Жмите "Подключиться" — на современном Ткаббере с обычным подключением к сети всё должно получиться.
Жмите "Подключиться" — на современном Ткаббере с обычным подключением к сети всё должно получиться. 

Если "всё само" не получилось, придётся осиливать следующий раздел.
Если "всё само" не получилось, придётся осиливать следующий раздел. 

## <a id="Подключение_сложно"></a>Подключение (сложно)
Может возникнуть несколько проблем с подключением. И они могут зависеть как
# <a id="Подключение_сложно"></a>Подключение (сложно)
Может возникнуть несколько проблем с подключением. И они могут зависеть как от вашего подключения к сети, так и от версий пакетов Tcl, доступных к Ткабберу. 
от вашего подключения к сети, так и от версий пакетов Tcl, доступных к Ткабберу.

С сетью могут возникнуть два класса проблем:
С сетью могут возникнуть два класса проблем: 

1.  Проблемы с DNS при попытке получить SRV-записи для XMPP-сервера, обслуживающего домен "gmail.com".
1.  Проблемы с HTTP/HTTPS-прокси и "хитрой" аутентификацией на серверах Google Talk.
1.  Проблемы с DNS при попытке получить SRV-записи для XMPP-сервера, обслуживающего домен "gmail.com". 
1.  Проблемы с HTTP/HTTPS-прокси и "хитрой" аутентификацией на серверах Google Talk. 

Первая проблема воспета в [**отдельной статье**](Ткаббер_и_DNS.md), и на ней мы останавливаться
Первая проблема воспета в [отдельной статье](Ткаббер_и_DNS.md), и на ней мы останавливаться не будем: симптомы и решения изложены там, а вот вторая проблема заслуживает развёрнутого рассмотрения. 
не будем: симптомы и решения изложены там, а вот вторая проблема заслуживает развёрнутого рассмотрения.

Серверы GTalk нарушают [букву стандарта](http://www.xmpp.org/rfcs/rfc3920.html#security-mandatory) в том,
Серверы 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://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)
Дело в том, что хотя свежие версии [пакета SASL](http://tcllib.sourceforge.net/doc/sasl.html) из **Tcllib**, которым обычно пользуется Ткаббер для поддержки SASL, и умеют **X-GOOGLE-TOKEN**, этот механизм отличается от обычных (стандартных) механизмов тем, что _для его работы клиенту требуется устанавливать **HTTPS-соединение** с сервером._ При этом _настройки прокси-сервера, предлагаемые Ткаббером_ (в окне логина) к этому соединению _**не** относятся._ 
из **Tcllib**, которым обычно пользуется Ткаббер для поддержки SASL, и умеют **X-GOOGLE-TOKEN**,
этот механизм отличается от обычных (стандартных) механизмов тем, что _для его работы клиенту
требуется устанавливать **HTTPS-соединение** с сервером._ При этом _настройки прокси-сервера,
предлагаемые Ткаббером_ (в окне логина) к этому соединению ***не** относятся.*

Это создаёт главную проблему:
Это создаёт главную проблему: 

> Если вы соединяетесь с интернетом через прокси-сервер, вы не можете использовать
 Если вы соединяетесь с интернетом через прокси-сервер, вы не можете использовать аутентификацию при помощи **X-GOOGLE-TOKEN**. 
  аутентификацию при помощи **X-GOOGLE-TOKEN**.

Во всяком случае, это верно для всех версий Ткаббера, включая 0.10.0 и текущую "альфу".
Во всяком случае, это верно для всех версий Ткаббера, включая 0.10.0 и текущую "альфу". 

Как (будет) объяснено [**здесь**](Между_офлайном_и_онлайном.md), защита канала при помощи
Как (будет) объяснено [здесь](Между_офлайном_и_онлайном.md), защита канала при помощи TLS, если она используется, должна быть установлена раньше, чем будет произведена аутентификация (например, при помощи SASL). При этом механизмы аутентификации, предлагаемые сервером в зависимости от того, защищён канал или нет, могут различаться. Именно это делают серверы GTalk: 
TLS, если она используется, должна быть установлена раньше, чем будет произведена
аутентификация (например, при помощи SASL). При этом механизмы аутентификации, предлагаемые
сервером в зависимости от того, защищён канал или нет, могут различаться.
Именно это делают серверы GTalk:

*  Если клиент не установил защиту канала при помощи TLS, сервер предложит ровно один
*  Если клиент не установил защиту канала при помощи TLS, сервер предложит ровно один механизм аутентификации — **X-GOOGLE-TOKEN**; он является нестандартным, но обеспечиывает аутентификацию без передачи пароля по линии связи. 
   механизм аутентификации — **X-GOOGLE-TOKEN**; он является нестандартным, но
   обеспечиывает аутентификацию без передачи пароля по линии связи.
*  Если клиент защитил канал при помощи TLS, сервер предложит два механизма: **X-GOOGLE-TOKEN**
*  Если клиент защитил канал при помощи TLS, сервер предложит два механизма: **X-GOOGLE-TOKEN** и (стандартный) **PLAIN**, который передаёт пароль в открытом виде (именно поэтому он предлагается только при наличии TLS). 
   и (стандартный) **PLAIN**, который передаёт пароль в открытом виде
   (именно поэтому он предлагается только при наличии TLS).

Посему имеем два варианта подключения: с использованием **X-GOOGLE-TOKEN** и без него — с использованием **PLAIN**.
Посему имеем два варианта подключения: с использованием **X-GOOGLE-TOKEN** и без него — с использованием **PLAIN**. 

> Нелишним будет подчеркнуть, что _оба метода требуют наличия поддержки TLS/SSL в Ткаббере._
 Нелишним будет подчеркнуть, что _оба метода требуют наличия поддержки TLS/SSL в Ткаббере._ 

О наличии таковой поддержки можно легко узнать, посмотрев в окно логина: если там есть
О наличии таковой поддержки можно легко узнать, посмотрев в окно логина: если там есть вкладка "SSL" (или "SSL и сжатие"), то поддержка SSL/TLS Ткабберу доступна. Если её там нет, ставьте  необходимый [пакет поддержки TLS](http://tls.sourceforge.net). 
вкладка "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**
1.  Используем **X-GOOGLE-TOKEN**. Этот метод является "станартным" для Google Talk, но он _не работает через HTTP(S)-прокси._ Требования к системе и настройки таковы: 
 *  Доступный Ткабберу [модуль SASL](http://tcllib.sourceforge.net/doc/sasl.html) из **Tcllib** должен иметь поддержку данного метода аутентификации. Проверить это можно, выполнив в [консоли Ткаббера](Ткаббер_ЧаВо.md#Консоль_Ткаббера) команду 
     должен иметь поддержку данного метода аутентификации. Проверить это можно, выполнив
     в [**консоли Ткаббера**](Ткаббер_ЧаВо.md#Консоль_Ткаббера) команду

            package require SASL::XGoogleToken
    package require SASL::XGoogleToken

     Если она выполнилась успешно, вернув версию пакета (например, "1.0.1"), поддержка **X-GOOGLE-TOKEN**
 Если она выполнилась успешно, вернув версию пакета (например, "1.0.1"), поддержка **X-GOOGLE-TOKEN** Ткабберу доступна, иначе — читайте про второй вариант или обновляйте **Tcllib**. 
     Ткабберу доступна, иначе — читайте про второй вариант или обновляйте **Tcllib**.
   * На странице "Аутентификация" окна логина включите флажки "Использовать SASL для аутентификации".
   * Если у вас Ткаббер версии 0.10.1 и выше, убедитесь, что включён  флажок
     "Разрешить механизм SASL X-GOOGLE-TOKEN" на той же странице.
1. Не используем **X-GOOGLE-TOKEN**, но подключаемся через STARTTLS или SSL. Этот метод
 *  На странице "Аутентификация" окна логина включите флажки "Использовать SASL для аутентификации". 
 *  Если у вас Ткаббер версии 0.10.1 и выше, убедитесь, что включён  флажок "Разрешить механизм SASL X-GOOGLE-TOKEN" на той же странице. 
 
1.  Не используем **X-GOOGLE-TOKEN**, но подключаемся через STARTTLS или SSL. Этот метод несколько менее стандартен с точки зрения Google Talk, зато работает через любые прокси. Требования к системе и настройки таковы: 
   несколько менее стандартен с точки зрения Google Talk, зато работает через любые прокси.
   Требования к системе и настройки таковы:
   * Нужно запретить использование **X-GOOGLE-TOKEN**:
      * Если у вас Ткаббер версии ниже 0.10.1, и у вас нет на странице "Аутентификация"
 *  Нужно запретить использование **X-GOOGLE-TOKEN**: 
  *  Если у вас Ткаббер версии ниже 0.10.1, и у вас нет на странице "Аутентификация" окна логина флажка "Разрешить механизм SASL X-GOOGLE-TOKEN", то вам нужно отключить флажок "Использовать SASL для аутентификации". (При этом аутентификация через SASL отключается полностью, но соединению с Google Talk это не помешает.) 
        окна логина флажка "Разрешить механизм SASL X-GOOGLE-TOKEN", то вам нужно отключить
        флажок "Использовать SASL для аутентификации". (При этом аутентификация через SASL
        отключается полностью, но соединению с Google Talk это не помешает.)
      * Если у вас Ткаббер версии 0.10.1 и выше, просто отключите флажок "Разрешить
        механизм SASL X-GOOGLE-TOKEN" на странице "Аутентификация" окна логина.
   * Нужно включить использование TLS. Для этого переключатель на странице "SSL"
  *  Если у вас Ткаббер версии 0.10.1 и выше, просто отключите флажок "Разрешить механизм SASL X-GOOGLE-TOKEN" на странице "Аутентификация" окна логина. 
 
 *  Нужно включить использование TLS. Для этого переключатель на странице "SSL" (или "SSL и сжатие") должен находиться либо в положении "Шифрование (STARTTLS)" либо — "Шифрование (старый SSL)". 
     (или "SSL и сжатие") должен находиться либо в положении "Шифрование (STARTTLS)"
     либо — "Шифрование (старый SSL)".
   * Нужно разрешить использовать передачу пароля в виде открытого текста при аутентификации,
 *  Нужно разрешить использовать передачу пароля в виде открытого текста при аутентификации, включив флажок "Разрешить механизмы аутентификации, использующие открытый текст" на странице "Аутентификация" окна логина. (Пароль это не скомпрометирует, т.к. на момент его передачи канал связи будет защищён с помощью TLS.) 
     включив флажок "Разрешить механизмы аутентификации, использующие открытый текст" на
     странице "Аутентификация" окна логина. (Пароль это не скомпрометирует, т.к.
     на момент его передачи канал связи будет защищён с помощью TLS.)

**Небольшая подсказка:** приняв указанный вами [**ресурс**](Ткаббер_ЧаВо.md#Ресурс), сервер
**Небольшая подсказка:** приняв указанный вами [ресурс](Ткаббер_ЧаВо.md#Ресурс), сервер Google Talk добавит к нему случайным образом сгенерированную галиматью. Чтобы этого не происходило, отключите использование SASL для аутентификации, отключив флажок "Использовать SASL для аутентификации" на странице "Аутентификация" окна логина, а так же переставьте переключатель на странице "SSL" ("SSL и сжатие") в позицию "Шифрование (старый SSL)". При этом отключается механизм ["resource binding"](http://www.xmpp.org/rfcs/rfc3920.html#bind) и сервер примет тот ресурс, который вы указали, без изменений. 
Google Talk добавит к нему случайным образом сгенерированную галиматью. Чтобы этого не
происходило, отключите использование SASL для аутентификации, отключив флажок "Использовать
SASL для аутентификации" на странице "Аутентификация" окна логина, а так же переставьте
переключатель на странице "SSL" ("SSL и сжатие") в позицию "Шифрование (старый SSL)".
При этом отключается механизм ["resource binding"](http://www.xmpp.org/rfcs/rfc3920.html#bind)
и сервер примет тот ресурс, который вы указали, без изменений.

Отдельное спасибо [**Teo**](Участник_Teo.md) за разъяснения.
Отдельное спасибо [teo](Участник_Teo.md) за разъяснения. 

## <a id="Подключение_через_прокси_вернисаж"></a>Подключение через прокси (вернисаж)
![Tkabber-gmail-proxy-creds.png](../images/Tkabber-gmail-proxy-creds.png)
# <a id="Подключение_через_прокси_вернисаж"></a>Подключение через прокси (вернисаж)
![Tkabber-gmail-proxy-creds.png](../images/Tkabber-gmail-proxy-creds.png) 

![Tkabber-gmail-proxy-conn.png](../images/Tkabber-gmail-proxy-conn.png)
![Tkabber-gmail-proxy-conn.png](../images/Tkabber-gmail-proxy-conn.png) 

![Tkabber-gmail-proxy-auth.png](../images/Tkabber-gmail-proxy-auth.png)
![Tkabber-gmail-proxy-auth.png](../images/Tkabber-gmail-proxy-auth.png) 

![Tkabber-gmail-proxy-SSL.png](../images/Tkabber-gmail-proxy-SSL.png)
![Tkabber-gmail-proxy-SSL.png](../images/Tkabber-gmail-proxy-SSL.png) 

![Tkabber-gmail-proxy-http-polling.png](../images/Tkabber-gmail-proxy-http-polling.png)
![Tkabber-gmail-proxy-http-polling.png](../images/Tkabber-gmail-proxy-http-polling.png) 

![Tkabber-gmail-proxy-proxy.png](../images/Tkabber-gmail-proxy-proxy.png)
![Tkabber-gmail-proxy-proxy.png](../images/Tkabber-gmail-proxy-proxy.png) 

## <a id="Подключение_к_Google_Talk_старый_вариант_заметки"></a>Подключение к Google Talk (старый вариант заметки)
### <a id="Сюита_для_бубна_и_трёх_напильников"></a>Сюита для бубна и трёх напильников
# <a id="Подключение_к_Google_Talk_старый_вариант_заметки"></a>Подключение к Google Talk (старый вариант заметки)
## <a id="Сюита_для_бубна_и_трёх_напильников"></a>Сюита для бубна и трёх напильников

Некоторые настройки при подключении к gtalk зависят от версии Ткаббера _и_ от
Некоторые настройки при подключении к gtalk зависят от версии Ткаббера _и_ от версии пакетов **dns** и **SASL** (они входят в **tcllib**), доступных Ткабберу. 
версии пакетов **dns** и **SASL** (они входят в **tcllib**), доступных Ткабберу.

Вот эти настройки:
Вот эти настройки: 

#### <a id="Защита_канала_аутентификация"></a>Защита канала/аутентификация
### <a id="Защита_канала_аутентификация"></a>Защита канала/аутентификация

Аутентификация в gtalk возможна _только_ при помощи протокола SASL, non-SASL
Аутентификация в gtalk возможна _только_ при помощи протокола SASL, non-SASL аутентификация не поддерживается. 
аутентификация не поддерживается.

Gtalk реализует собственный механизм аутентификации для протокола
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". 
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 вам требуется включённая опция
Это означает, что для успешной аутентификации на GTalk вам требуется включённая опция "Использовать SASL для аутентификации", а также минимум одно из двух: 
"Использовать SASL для аутентификации", а также минимум одно из двух:

* Если доступный Ткабберу пакет **SASL** поддерживает механизм "X-GOOGLE-TOKEN", то Вы можете
*  Если доступный Ткабберу пакет **SASL** поддерживает механизм "X-GOOGLE-TOKEN", то Вы можете не использовать STARTTLS и _не_ включать опцию "Разрешить механизмы аутентификации, использующие открытый текст" (то есть механизм SASL "PLAIN"); 
  не использовать STARTTLS и _не_ включать опцию "Разрешить механизмы аутентификации,
  использующие открытый текст" (то есть механизм SASL "PLAIN");
* В противном случае вам понадобится включить опцию "Шифрование (STARTTLS)" _и_ опцию
*  В противном случае вам понадобится включить опцию "Шифрование (STARTTLS)" _и_ опцию "Разрешить механизмы аутентификации, использующие открытый текст". 
  "Разрешить механизмы аутентификации, использующие открытый текст".

SASL в Ткаббере поддерживается при помощи пакета **SASL** из библиотеки **tcllib**. Поддержка
SASL в Ткаббере поддерживается при помощи пакета **SASL** из библиотеки **tcllib**. Поддержка указанного механизма появилась в **tcllib** в апреле 2006 года; стабильная версия **tcllib** с этой фичей — 1.9, версия **SASL** из неё — 1.1.0. 
указанного механизма появилась в **tcllib** в апреле 2006 года; стабильная версия **tcllib**
с этой фичей — 1.9, версия **SASL** из неё — 1.1.0.

> Текущий официальный старкит/старпак Ткаббера 0.9.9 содержит **tcllib** версии
 Текущий официальный старкит/старпак Ткаббера 0.9.9 содержит **tcllib** версии 1.7 и **SASL** версии 1.0.0, то есть поддержки "X-GOOGLE-TOKEN" там _нет._ ![(!)](../images/Hammer.png) **Сделать:** Выяснить и дописать про версию 0.10.x 
  1.7 и **SASL** версии 1.0.0, то есть поддержки "X-GOOGLE-TOKEN" там _нет._
  ![(!)](../images/Hammer.png) **Сделать:** Выяснить и дописать про версию 0.10.x

Проверить доступную Ткабберу версию **SASL** можно, набрав в его консоли:
Проверить доступную Ткабберу версию **SASL** можно, набрав в его консоли: 

    package versions SASL

Также для подключения к GTalk требуется наличие пакета **tls**. При отсутствии этого пакета, в окошке логина отсутствует закладка **SSL**. Проверить доступную Ткабберу версию **tls** можно, набрав в его консоли:
Также для подключения к GTalk требуется наличие пакета **tls**. При отсутствии этого пакета, в окошке логина отсутствует закладка **SSL**. Проверить доступную Ткабберу версию **tls** можно, набрав в его консоли: 

    package version tls

#### <a id="Выяснение_имени_хоста_по_имени_сервера"></a>Выяснение имени хоста по имени сервера
### <a id="Выяснение_имени_хоста_по_имени_сервера"></a>Выяснение имени хоста по имени сервера

Имя хоста (компьютера), к которому должен присоединиться XMPP-клиент, в общем случае
Имя хоста (компьютера), к которому должен присоединиться XMPP-клиент, в общем случае не обязано совпадать с именем XMPP-сервера. Например, если Вася имеет аккаунт на сервере `lamerz.net` (и имеет JID вроде `vasya@lamerz.net`), то имя реального сервера, обслуживающего Васю, не обязано быть "lamerz.net". 
не обязано совпадать с именем XMPP-сервера. Например, если Вася имеет аккаунт на
сервере `lamerz.net` (и имеет JID вроде `vasya@lamerz.net`), то имя реального сервера,
обслуживающего Васю, не обязано быть "lamerz.net".

Для выяснения имени хоста по имени сервера существует стандартный механизм SRV DNS записей.
Для выяснения имени хоста по имени сервера существует стандартный механизм SRV DNS записей. 

![(!)](../images/Hammer.png) **Сделать:** Бла-бла-бла...
![(!)](../images/Hammer.png) **Сделать:** Бла-бла-бла... 

Про поддержку SRV записей читайте [**здесь**](Между_офлайном_и_онлайном.md).
Про поддержку SRV записей читайте [здесь](Между_офлайном_и_онлайном.md). 

Если такой поддержки у пакета **dns**, доступной Вашей версии Ткаббера, нет, то Вам
Если такой поддержки у пакета **dns**, доступной Вашей версии Ткаббера, нет, то Вам придётся прописать имя хоста "talk.google.com" в настройке "Хост", которая разрешается включением флажка "Явно указать сервер и порт для соединения". Номер порта должен быть 5222. 
придётся прописать имя хоста "talk.google.com" в настройке "Хост", которая разрешается
включением флажка "Явно указать сервер и порт для соединения". Номер порта должен быть 5222.

Текущие официальные старкиты/старпаки 0.9.9 содержат пакет **dns** версии 1.2.0, поэтому
поддержки SRV DNS записей там _нет._
 Текущие официальные старкиты/старпаки 0.9.9 содержат пакет **dns** версии 1.2.0, поэтому поддержки SRV DNS записей там _нет._ 


Changes to wiki/ru/Low_traffic_HOWTO.md.

1

2
3
4
5
6
7

8
9

10
11
12
13
14
15
16
17
18
19
20






21
22
23
24
25




26
27
28


29
30
31
32


33
34

35
36
37

38
39

40
41
42
43

44
45

46
47
48

49
50
51
52
53
54

55
56

57
58

59
60
61
62

63
64
65
66
67

68
69
70

71
72
73
74
75
76
77

78
79

80
81

82
83
84

85
86
87

88
89
90
91



92
93

94
95
96

97
98

99
100

101
102
103
104



105
106

107
108

109
110
111

112
113

114
115
116

117
118

119
120
121
122
123



124
125

126
127
128
129

130
131
132

133
134

135
136
137

138
139

140
141
142

143
144

145
146
147

148
149
150

151
152
153

154
155
156

157
158

159
160
161

162
163
164
165
166

167
168
169
170


171
172
173
174

175
176
177

178
179

180
181
182
183
184

185
186

187
188
189

190
191

192
193

194
195

196
197

198
199
200

201
202

203
204
205
206

207
208

209
210
211
212

213
214

215
216
217

218
219

220
221
222

223
224

225
226
227
228
229

230
231
232
233
234
235
236

237

238
239

240
241
242

243
244

245
246
247
248

249
250

251
252

253
254

255
256

257
258

259
260
261
262
263
264

265
266

267
268
269
270

271
272

273
274

275
276

277
278

279
280
281
282

283
284

285
286
287
288
289
290
291
292
293
294

295
296

297
298

299
300
301
302


303
304
305
306
307

308
309
310
311
312
313




314

315
316
317


318
319

320
321
322
323
324
325

326
327

328
329
330
331
332
333
334
335
336

337
338
339
340
341
342
343
344
345

346
347
348
349
350
351

352
353
354
355
356
357
358





359
360
361
362
363



364
365

366
367
368


369
370

371
372

373
374

375
376
377

378
379
380

381
382
383

384
385
386
387

388
389
390
391
392
393


394
395
396
397
398

399
400
401
402
403

404
405
406
407

408
409
410
411
412
413
414
415
416
417
418
419
420
421















422
423

424
425
426
427
428
429



430
431
432
433
434
1
2
3
4
5
6
7

8
9

10


11
12
13
14





15
16
17
18
19
20
21




22
23
24
25
26


27
28
29
30


31
32
33

34

35

36
37

38


39

40
41

42



43






44
45

46
47

48


49

50



51

52
53


54





55

56
57

58
59

60

61

62

63

64
65



66
67
68
69

70

71

72


73


74




75
76
77
78

79
80

81

82

83
84

85

86

87
88

89

90



91
92
93
94

95


96

97



98


99

100

101
102

103

104

105
106

107

108

109

110

111

112

113

114

115
116

117
118


119





120

121


122
123


124

125

126

127
128

129



130

131
132

133

134

135
136

137
138

139
140

141
142

143

144

145
146

147


148

149
150

151




152


153



154


155



156


157



158

159






160
161

162


163

164

165
166

167




168


169


170


171
172

173
174

175






176


177


178

179
180

181
182

183
184

185
186

187


188

189
190

191








192

193
194

195
196

197




198
199



200

201





202
203
204
205
206

207
208


209
210
211

212




213

214
215

216







217

218







219

220




221

222

223





224
225
226
227
228





229
230
231


232



233
234


235
236

237
238

239

240

241

242

243

244

245


246

247



248


249
250



251

252

253
254
255

256
257
258
259

260

261












262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277

278


279



280
281
282






+





-
+

-
+
-
-




-
-
-
-
-
+
+
+
+
+
+

-
-
-
-
+
+
+
+

-
-
+
+


-
-
+
+

-
+
-

-
+

-
+
-
-

-
+

-
+
-
-
-
+
-
-
-
-
-
-
+

-
+

-
+
-
-

-
+
-
-
-

-
+

-
-
+
-
-
-
-
-

-
+

-
+

-
+
-

-
+
-

-
+

-
-
-
+
+
+

-
+
-

-
+
-
-
+
-
-
+
-
-
-
-
+
+
+

-
+

-
+
-

-
+

-
+
-

-
+

-
+
-

-
-
-
+
+
+

-
+
-
-

-
+
-
-
-
+
-
-
+
-

-
+

-
+
-

-
+

-
+
-

-
+
-

-
+
-

-
+
-

-
+

-
+

-
-
+
-
-
-
-
-
+
-

-
-
+
+
-
-

-
+
-

-
+

-
+
-
-
-

-
+

-
+
-

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+
-
-

-
+

-
+
-
-
-
-
+
-
-
+
-
-
-
+
-
-
+
-
-
-
+
-
-
+
-
-
-

-
+
-
-
-
-
-
-

+
-
+
-
-
+
-

-
+

-
+
-
-
-
-
+
-
-
+
-
-
+
-
-
+

-
+

-
+
-
-
-
-
-
-
+
-
-
+
-
-

-
+

-
+

-
+

-
+

-
+
-
-

-
+

-
+
-
-
-
-
-
-
-
-

-
+

-
+

-
+
-
-
-
-
+
+
-
-
-

-
+
-
-
-
-
-

+
+
+
+
-
+

-
-
+
+

-
+
-
-
-
-

-
+

-
+
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-
-

-
+
-
-
-
-

-
+
-

-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
-
-
+
-
-
-
+
+
-
-
+

-
+

-
+
-

-
+
-

-
+
-

-
+
-
-

-
+
-
-
-

-
-
+
+
-
-
-

-
+
-



-
+



-
+
-

-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+
-
-

-
-
-
+
+
+
-
-
-
-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Low_traffic_HOWTO/index.html)


# Low traffic HOWTO

Материал из Tkabber Wiki

Здесь рассказано как уменьшить трафик, "развиваемый" Ткаббером, для пользователей очень дорого интернета.
Здесь рассказано как уменьшить трафик, "развиваемый" Ткаббером, для пользователей очень дорого интернета. 

Важно понимать, что далеко не все описанные здесь приёмы проходят без последствий: большинство
Важно понимать, что далеко не все описанные здесь приёмы проходят без последствий: большинство действий по уменьшению трафика, не относящихся к его сжатию, означают _отключение_ тех или иных "фич" Ткаббера, то есть — _уменьшение функциональности_ этого клиента. 
действий по уменьшению трафика, не относящихся к его сжатию, означают _отключение_ тех или иных
"фич" Ткаббера, то есть — _уменьшение функциональности_ этого клиента.

## <a id="toc"></a>Содержание

* [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 Невошедшее](#Невошедшее)

## <a id="Сжатие_трафика"></a>Сжатие трафика
Это — единственный по-настоящему действенный способ уменьшить трафик.
# <a id="Сжатие_трафика"></a>Сжатие трафика
Это — единственный по-настоящему действенный способ уменьшить трафик. 

Существует, в принципе, три варианта сжатия трафика, из них реальный интерес представляет
Существует, в принципе, три варианта сжатия трафика, из них реальный интерес представляет только первый — "Stream Compression": 
только первый — "Stream Compression":

##### [XEP-0138: Stream Compression](http://www.xmpp.org/extensions/xep-0138.html) 
 [XEP-0138: Stream Compression](http://www.xmpp.org/extensions/xep-0138.html) 

> Использует один из зарегистрированных (и поддерживаемых) в XMPP методов сжатия и
 Использует один из зарегистрированных (и поддерживаемых) в XMPP методов сжатия и сжимает _весь_ XML-поток (то есть компрессор находится между XML-потоком и TCP/IP-потоком в сетевом стеке). Ткаббер поддерживает метод сжатия **zlib**. 
  сжимает _весь_ XML-поток (то есть компрессор находится между XML-потоком и TCP/IP-потоком
  в сетевом стеке). Ткаббер поддерживает метод сжатия **zlib**.

##### Сжатие в протоколе TLS 
 Сжатие в протоколе TLS 

> Формально протокол TLS (SSL) поддерживает сжатие, однако, этот вопрос на уровне
 Формально протокол TLS (SSL) поддерживает сжатие, однако, этот вопрос на уровне спецификации протокола проработан плохо — процитируем **[SSL\_COMP\_add\_compression\_method(3)](http://www.openssl.org/docs/ssl/SSL_COMP_add_compression_method.html)** из OpenSSL: 
  спецификации протокола проработан плохо — процитируем [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 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._
   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 в Ткаббере невозможно._
 Кроме того, в пакете [tcltls](http://tls.sourceforge.net), который служит прослойкой между Ткаббером и OpenSSL, отсутствуют "крутилки" для управления сжатием; статус этой фичи в драйвере TLS, реализованном в [ejabberd](http://ejabberd.jabber.ru), также неизвестен. Одним словом, _сжатие средствами TLS в Ткаббере невозможно._ 

##### PGP (GnuPG) 
 PGP (GnuPG) 

> _PGP сжимает данные перед их шифрованием,_ что, в принципе, способно уменьшить трафик.
 _PGP сжимает данные перед их шифрованием,_ что, в принципе, способно уменьшить трафик. Однако, не надо быть чрезмерно оптимистичными относительно этого способа; об этом — читайте [ниже](Low_traffic_HOWTO.md#PGP_GnuPG). 
  Однако, не надо быть чрезмерно оптимистичными относительно этого способа;
  об этом — читайте [**ниже**](#PGP_GnuPG).

_Важно понимать, что **Stream Compression не может работать вместе с TLS (SSL),** то есть Вам
_Важно понимать, что **Stream Compression не может работать вместе с TLS (SSL),** то есть Вам придётся выбирать между сжатием и защитой канала._ По крайней мере [в ejabberd они вместе не работают](https://support.process-one.net/browse/EJAB-499), а потому и Ткаббер не даст включить их одновременно. 
придётся выбирать между сжатием и защитой канала._ По крайней
мере [в ejabberd они вместе не работают](https://support.process-one.net/browse/EJAB-499),
а потому и Ткаббер не даст включить их одновременно.

О том, что Вы теряете, отказываясь от SSL, можно прочитать [**здесь**](Между_офлайном_и_онлайном.md#Защита_потока).
О том, что Вы теряете, отказываясь от SSL, можно прочитать [здесь](Между_офлайном_и_онлайном.md#Защита_потока). 

Стоит добавить, что в контексте XMPP практически невозможно достичь такой же степени
сжатия, которую способны показать алгортимы zlib на "простых файлах", в силу того,
Стоит добавить, что в контексте XMPP практически невозможно достичь такой же степени сжатия, которую способны показать алгортимы zlib на "простых файлах", всилу того, что в Stream Compression они рассматривают отдельно каждую [станцу](Терминология.md#Станца_stanza), а не весь сплошной XML-поток. Это происходит из-за того, что требуется обеспечивать передачу "почти в реальном времени" и передавать станцы по мере их готовности к передаче; сжатие же файлов может рассматривать такое количество байт, которое ограничено лишь размерами внутренних буферов, словаря, и требованиями к вычислительным ресурсам. 
что в Stream Compression они рассматривают отдельно каждую [**станцу**](Терминология.md#Станца_stanza),
а не весь сплошной XML-поток. Это происходит из-за того, что требуется обеспечивать
передачу "почти в реальном времени" и передавать станцы по мере их готовности к передаче;
сжатие же файлов может рассматривать такое количество байт, которое ограничено лишь
размерами внутренних буферов, словаря, и требованиями к вычислительным ресурсам.

### <a id="Stream_Compression_zlib"></a>Stream Compression/zlib
## <a id="Stream_Compression_zlib"></a>Stream Compression/zlib

#### <a id="Обычный_Ткаббер"></a>"Обычный" Ткаббер
### <a id="Обычный_Ткаббер"></a>"Обычный" Ткаббер

Для включения сжатия в "обычном" Ткаббере Вам потребуется установить пакет **ztcl**
Для включения сжатия в "обычном" Ткаббере Вам потребуется установить пакет **ztcl** и пакет **tclmore**, от которого тот зависит (о том, где их взять, — чуть ниже). 
и пакет **tclmore**, от которого тот зависит (о том, где их взять, — чуть ниже).

Установив пакет, перезапустите Ткаббер. При этом в окне логина закладка **SSL** будет
Установив пакет, перезапустите Ткаббер. При этом в окне логина закладка **SSL** будет называться теперь **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)
*  Исходный код: 
 *  [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/)
(Раньше они хостились в [соответствующих](https://gna.org/projects/ztcl/) [проектах](https://gna.org/projects/tclmore/) на gna.org, но они были удалены из-за неактивности автора.) 
на gna.org, но они были удалены из-за неактивности автора.)

* Неофициальные сборки:
*  Неофициальные сборки: 
   * Пакеты для Debian sarge авторства Сергея Голованя [**Teo**](Участник_Teo.md) доступны
     в [его репозитории](http://people.debian.org/~sgolovan/debian/) — найдите ниже вопрос
 *  Пакеты для Debian sarge авторства Сергея Голованя (`xmpp:sgolovan@nes.ru`) доступны в [его репозитории](http://people.debian.org/~sgolovan/debian/) — найдите ниже вопрос про этот репозиторий и действуйте в соответствии с инструкциями. 
     про этот репозиторий и действуйте в соответствии с инструкциями.
   * [**eXire**](Участник_EXire.md) поддерживает [пакеты для Arch Linux](http://exire.dyndns.org:8081/arch/repo).
 *  [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; их установке посвящён следующий раздел.
 *  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; их установке посвящён следующий раздел. 

##### <a id="Установка_ztcl_и_tclmore_в_Windows"></a>Установка ztcl и tclmore в Windows
#### <a id="Установка_ztcl_и_tclmore_в_Windows"></a>Установка ztcl и tclmore в Windows

Во-первых, вам понадобятся сами пакеты **ztcl** и **tclmore**, собранные под Win32.
Во-первых, вам понадобятся сами пакеты **ztcl** и **tclmore**, собранные под Win32. Они доступны [здесь](http://sgolovan.nes.ru/jabber/ztcl/). 
Они доступны [здесь](http://sgolovan.nes.ru/jabber/ztcl/).

Для установки необходимо распаковать пакеты в каталог модулей тикля (обычно это **C:\\Tcl\\lib**).
Для установки необходимо распаковать пакеты в каталог модулей тикля (обычно это **C:\\Tcl\\lib**). 

Во-вторых, Вам понадобится поставить Win32-версию библиотеки **zlib**, которую следует
Во-вторых, Вам понадобится поставить Win32-версию библиотеки **zlib**, которую следует взять [здесь](http://gnuwin32.sourceforge.net/packages/zlib.htm). 
взять [здесь](http://gnuwin32.sourceforge.net/packages/zlib.htm).

**Установка библиотеки zlib**
**Установка библиотеки zlib** 

Из скачанного архива вам потребуется файл **zlib1.dll**. Его нужно положить в любой каталог,
Из скачанного архива вам потребуется файл **zlib1.dll**. Его нужно положить в любой каталог, содержащийся в переменной окружения **PATH**. Если эта фраза Вам ни о чём не говорит, у Вас есть три варианта: 
содержащийся в переменной окружения **PATH**. Если эта фраза Вам ни о чём не говорит, у Вас есть три варианта:

* [**Обучить**](Настройка_Ткаббера__азы_и_глубже.md) себя локально;
* [Обучить](http://www.ozon.ru/context/detail/id/2988356/) себя глобально;
* Тупо положить **zlib1.dll** в каталог **C:\\Windows\\system32**, если с предыдущими пунктами ничего не вышло.
*  [Обучить](Настройка_Ткаббера__азы_и_глубже.md) себя локально; 
*  [Обучить](http://www.ozon.ru/context/detail/id/2988356/) себя глобально; 
*  Тупо положить **zlib1.dll** в каталог **C:\\Windows\\system32**, если с предыдущими пунктами ничего не вышло. 

**Вниманию пользователей Windows XP 64-bit Edition:** поскольку **ztcl** и **tclmore** собраны
**Вниманию пользователей Windows XP 64-bit Edition:** поскольку **ztcl** и **tclmore** собраны под x86, они требуют **zlib**, собранную также под x86 (именно такая и находится по ссылке, приведённой выше). Однако, имейте в виду две вещи: 
под x86, они требуют **zlib**, собранную также под x86 (именно такая и находится по ссылке,
приведённой выше). Однако, имейте в виду две вещи:

* **zlib1.dll** из пакета **zlib** _не должна_ лежать в **%WINDIR%\\system32** из-за того,
*  **zlib1.dll** из пакета **zlib** _не должна_ лежать в **%WINDIR%\\system32** из-за того, что там ищутся только "родные" (64-битные) библиотеки. Положите её в **%WINDIR%\\system** — она как раз предназначена для "старых", 32-битных библиотек. 
  что там ищутся только "родные" (64-битные) библиотеки. Положите её в **%WINDIR%\\system** — она
  как раз предназначена для "старых", 32-битных библиотек.
* [Доступная в Интернет версия **zlib1.dll**, собранная под x64](http://www.winimage.com/zLibDll/),
*  [Доступная в Интернет версия **zlib1.dll**, собранная под x64](http://www.winimage.com/zLibDll/), с ztcl _не работает._ 
  с ztcl _не работает._
* На всякий случай: бессмысленно просить авторов собрать библиотеки под x64 — это потребует
*  На всякий случай: бессмысленно просить авторов собрать библиотеки под x64 — это потребует 64-битных версий всего Tcl/Tk и всех остальных бинарных пакетов. 
  64-битных версий всего Tcl/Tk и всех остальных бинарных пакетов.

#### <a id="Ткаббер-пак_Win32"></a>Ткаббер-пак (Win32)
### <a id="Ткаббер-пак_Win32"></a>Ткаббер-пак (Win32)

[**Kostix**](Участник_Kostix.md) собрал [Ткаббер-пак под Windows](http://tkabber.jabber.ru/tkabber-pack/).
[Kostix](Участник_Kostix.md) собрал [Ткаббер-пак под Windows](http://tkabber.jabber.ru/tkabber-pack/). Он поддерживает сжатие (как и все возможные расширения Ткаббера и стандартные плагины) "из коробки". 
Он поддерживает сжатие (как и все возможные расширения Ткаббера и стандартные плагины) "из коробки".

#### <a id="Старпаки_Ткаббера"></a>Старпаки Ткаббера
### <a id="Старпаки_Ткаббера"></a>Старпаки Ткаббера

_Пользователи старпака_ использовать внешние модули, в принципе, могут, но их прикручивание
_Пользователи старпака_ использовать внешние модули, в принципе, могут, но их прикручивание связано с серьёзными трудностями (особенно в случае с **ztcl**). 
связано с серьёзными трудностями (особенно в случае с **ztcl**).

Вследствие [**некоторых проблем**](Старпак_и_сжатие.md) поддержка сжатия в старпаке — вещь
Вследствие [некоторых проблем](Старпак_и_сжатие.md) поддержка сжатия в старпаке — вещь нетривиальная и требующая серьёзных "приседаний" для реализации. 
нетривиальная и требующая серьёзных "приседаний" для реализации.

Посему официальные старпаки пока что сжатие _не поддерживают_. Про неофициальные
Посему официальные старпаки пока что сжатие _не поддерживают_. Про неофициальные старпаки с поддержкой сжатия нам также неизвестно. 
старпаки с поддержкой сжатия нам также неизвестно.

Более подробно о внешних старкитах к "упакованным" дистрибутивам Ткаббера
Более подробно о внешних старкитах к "упакованным" дистрибутивам Ткаббера рассказано [здесь](Проблемы_со_звуком.md#_В_старпаке_старките_нет_звука). 
рассказано [**здесь**](Проблемы_со_звуком.md#В_старпаке_старките_нет_звука).

### <a id="PGP_GnuPG"></a>PGP/GnuPG
## <a id="PGP_GnuPG"></a>PGP/GnuPG

У сжатия в PGP есть две проблемы:
У сжатия в PGP есть две проблемы: 

* В отличие от Stream Compression, который сжимает каждую [**станцу**](Терминология.md#Станца_stanza)
  перед отправкой, PGP сжимает _текст_ каждого сообщения перед шифрованием. После этого зашифрованный
*  В отличие от Stream Compression, который сжимает каждую [станцу](Терминология.md#Станца_stanza) перед отправкой, PGP сжимает _текст_ каждого сообщения перед шифрованием. После этого зашифрованный текст передаётся "вместо" оригинального сообщения, _будучи закодирован при помощи [base64](http://ru.wikipedia.org/wiki/Base64)._ Как известно, этот метод кодирования потока байтов с кодами 0..255 в поток символов ASCII способен увеличить размер оригинального сообщения на 30%, что может эффективно "сожрать" выгоду от сжатия, особенно на небольших сообщениях. 
  текст передаётся "вместо" оригинального сообщения, _будучи закодирован при помощи
  [base64](http://ru.wikipedia.org/wiki/Base64)._ Как известно, этот метод кодирования потока байтов
  с кодами 0..255 в поток символов ASCII способен увеличить размер оригинального сообщения на 30%,
  что может эффективно "сожрать" выгоду от сжатия, особенно на небольших сообщениях.
* Кроме того, PGP подписывает каждое отправляемое сообщение, и эта подпись также
*  Кроме того, PGP подписывает каждое отправляемое сообщение, и эта подпись также представляет собой элемент XML, содержащий около 100 символов **base64**. 
  представляет собой элемент XML, содержащий около 100 символов **base64**.

## <a id="Уменьшение_XML-трафика"></a>Уменьшение XML-трафика
Следовать указаниям этого раздела стоит лишь в том случае, если у вас ничего не вышло с **zlib**,
# <a id="Уменьшение_XML-трафика"></a>Уменьшение XML-трафика
Следовать указаниям этого раздела стоит лишь в том случае, если у вас ничего не вышло с **zlib**, или вы по каким-то причинам не можете его использовать (хотя единственная _серьёзная_ причина — это необходимость использовать SSL). 
или вы по каким-то причинам не можете его использовать (хотя единственная _серьёзная_
причина — это необходимость использовать SSL).

Действия, предложенные здесь, преследуют цель уменьшения количества XML-данных,
Действия, предложенные здесь, преследуют цель уменьшения количества XML-данных, пересылаемых в ходе соединения. 
пересылаемых в ходе соединения.

### <a id="Замечание_о_бинарных_данных"></a>Замечание о бинарных данных
## <a id="Замечание_о_бинарных_данных"></a>Замечание о бинарных данных

Протокол XMPP является в некотором роде "ASCII-протоколом" — любые бинарные данные
Протокол XMPP является в некотором роде "ASCII-протоколом" — любые бинарные данные вроде RAR-архивов и картинок передаются им в виде **base64**-представления оригинальных данных. Поэтому имейте в виду, что картинка размером 5 килобайт "на линии" будет весить до 6.5 килобайт. 
вроде RAR-архивов и картинок передаются им в виде **base64**-представления
оригинальных данных. Поэтому имейте в виду, что картинка размером 5 килобайт
"на линии" будет весить до 6.5 килобайт.

### <a id="Настройки_Ткаббера"></a>Настройки Ткаббера
## <a id="Настройки_Ткаббера"></a>Настройки Ткаббера

Ещё раз напомним, что в борьбе с трафиком вы легко можете побороть функциональность
Ещё раз напомним, что в борьбе с трафиком вы легко можете побороть функциональность и удобство работы! Поэтому руководствуйтесь принципом: 
и удобство работы! Поэтому руководствуйтесь принципом:

> _семь раз отмерь, один — отрежь_
 _семь раз отмерь, один — отрежь_ 

и глубоко обдумывайте каждый пункт.
и глубоко обдумывайте каждый пункт. 

Пункты расположены по _предполагаемой_ (автором) "трафикопрожорливости".
Пункты расположены по _предполагаемой_ (автором) "трафикопрожорливости". 

##### Внутриканальная передача файлов 
 Внутриканальная передача файлов 

> весьма неэффективна в плане использования трафика, так как файл фактически передаётся
 весьма неэффективна в плане использования трафика, так как файл фактически передаётся в виде шестибитного текста (**base64**). 
  в виде шестибитного текста (**base64**).

##### Аватары 
 Аватары 

> В отличие от эмоциконок (смайликов) аватары посылаются _и принимаются_ в виде картинок.
 В отличие от эмоциконок (смайликов) аватары посылаются _и принимаются_ в виде картинок. Картинки бывают довольно большими. Поэтому, если Вы не хотите тратить свой трафик на эту чушь, убедитесь, что у Вас выключена опция меню **Службы → Расширения → Аватара → Разрешение загрузки**. 
  Картинки бывают довольно большими. Поэтому, если Вы не хотите тратить свой трафик на эту
  чушь, убедитесь, что у Вас выключена опция меню **Службы → Расширения → Аватара → Разрешение загрузки**.

##### История комнат 
 История комнат 

> При заходе в комнату Ткаббер запрашивает у сервера некоторое количество последних
 При заходе в комнату Ткаббер запрашивает у сервера некоторое количество последних сообщений чтобы поместить пользователя в контекст происходящей в комнате дискуссии. Возможно настроить несколько параметров, находящихся в **Customize → Chat**: 
  сообщений чтобы поместить пользователя в контекст происходящей в комнате дискуссии.
  Возможно настроить несколько параметров, находящихся в **Customize → Chat**:

>     ::muc::options(history_maxstanzas)
    ::muc::options(history_maxstanzas)

> задаёт максимальное количество сообщений, которые Ткаббер попросит у сервера.
 задаёт максимальное количество сообщений, которые Ткаббер попросит у сервера. 0 означает, что сообщения запрошены не будут. 
  0 означает, что сообщения запрошены не будут.

>     ::muc::options(history_maxchars)
    ::muc::options(history_maxchars)

> определяет максимальный объём текста сообщений в символах. 0 означает, что ничего
 определяет максимальный объём текста сообщений в символах. 0 означает, что ничего принято не будет. 
  принято не будет.

>     ::muc::options(request_only_unseen_history)
    ::muc::options(request_only_unseen_history)

> эта опция _полезна при переконнектах к серверу _— если она включена, Ткаббер
 эта опция _полезна при переконнектах к серверу _— если она включена, Ткаббер вынимает только те сообщения, которые пользователь ещё не прочитал, _если окно с конференцией открыто._ Одним словом, не выгребаются те сообщения, которые уже есть в окне комнаты. 
  вынимает только те сообщения, которые пользователь ещё не прочитал, _если окно
  с конференцией открыто._ Одним словом, не выгребаются те сообщения, которые уже
  есть в окне комнаты.

##### Модуль Conference Info 
 Модуль Conference Info 

> Этот модуль, который включен по умолчанию, осуществляет периодические запросы списков
  участников тех конференций, закладки на которые присутствуют в вашем ростере, но в
  которых вы не находитесь в данный момент. Делается это для того, чтобы вы могли увидеть
  список участников конференции во всплывающей подсказке к закладке комнаты в ростере,
  не входя в комнату и не рассматривая её в дискавери. Чтобы отключить эти запросы, выключите флаг

 Этот модуль, который включен по умолчанию, осуществляет периодические запросы списков участников тех конференций, закладки на которые присутствуют в вашем ростере, но в которых вы не находитесь в данный момент. Делается это для того, чтобы вы могли увидеть список участников конференции во всплывающей подсказке к закладке комнаты в ростере, не входя в комнату и не рассматривая её в дискавери. Чтобы отключить эти запросы, выключите флаг 
>     ::plugins::conferenceinfo::options(autoask)
    ::plugins::conferenceinfo::options(autoask)

> в **Customize → Conference Info**. Вместо отключения запросов можно настроить их частоту
 в **Customize → Conference Info**. Вместо отключения запросов можно настроить их частоту в том же разделе настроек. 
  в том же разделе настроек.

##### Уведомления о событиях чата 
 Уведомления о событиях чата 

> это отсылка информации о Вашей активности в окне приватного чата Вашему корреспонденту.
 это отсылка информации о Вашей активности в окне приватного чата Вашему корреспонденту. Сюда входит информация вроде "пишет ответ", "увидел сообщение" и т.п. Отключить это можно, выключив флаги 
  Сюда входит информация вроде "пишет ответ", "увидел сообщение" и т.п. Отключить это можно,
  выключив флаги

>     ::plugins::chatstate::options(enable)
    ::plugins::chatstate::options(enable)

> в **Customize → Chat → Chatstate** и
 в **Customize → Chat → Chatstate** и 

>     ::plugins::events::options(enable)
    ::plugins::events::options(enable)

> в **Customize → Chat → Events**.
 в **Customize → Chat → Events**. 

##### Ответы на IQ-запросы 
 Ответы на IQ-запросы 

> На некоторые IQ-запросы отвечает Jabber-клиент. Сюда относятся запросы версии клиента,
 На некоторые IQ-запросы отвечает Jabber-клиент. Сюда относятся запросы версии клиента, времени, запрос jabber:iq:last (время неактивности пользователя) и прочие, на которые не может ответить сервер. Посему, если вы хотите сэкономить трафик на ответах, запретите все или некоторые опции в **Customize → IQ**, начинающиеся со строк "reply\_" и "report\_"; наиболее "прожорливой", по-видимому, является опция 
  времени, запрос jabber:iq:last (время неактивности пользователя) и прочие, на которые
  не может ответить сервер. Посему, если вы хотите сэкономить трафик на ответах, запретите
  все или некоторые опции в **Customize → IQ**, начинающиеся со строк "reply\_" и "report\_";
  наиболее "прожорливой", по-видимому, является опция

>     ::muc::options(report_muc_rooms)
    ::muc::options(report_muc_rooms)

> Имейте, однако, в виду, что на запрещённые в конфигурации IQ-запросы Ткаббер всё же
 Имейте, однако, в виду, что на запрещённые в конфигурации IQ-запросы Ткаббер всё же посылает IQ-ответы с уведомлениями о неудавшемся запросе; это может "съесть" часть выгоды от запрещения нормальных ответов. 
  посылает IQ-ответы с уведомлениями о неудавшемся запросе; это может "съесть"
  часть выгоды от запрещения нормальных ответов.

Некоторые плагины также могут "втихую" пожирать ваш траффик, например:
Некоторые плагины также могут "втихую" пожирать ваш траффик, например: 

##### georoster 
 georoster 

> Для выяснения географических координат пользоватей запрашивает vCard у каждого контакта в вашем ростере.
 Для выяснения географических координат пользоватей запрашивает vCard у каждого контакта в вашем ростере. 

##### [**Autoretrieve (неофициальный плагин)**](Плагины.md#Autoretrieve)
 [Autoretrieve (неофициальный плагин)](Плагины.md#Autoretrieve) 

> автоматически запрашивает vCard у каждого пользователя, входящего в комнату. Собственно,
 автоматически запрашивает vCard у каждого пользователя, входящего в комнату. Собственно, в этом и состоит цель его работы, но некоторые пользователи отличаются оголтелым стремлением к установке всех плагинов, до которых дотягиваются их руки... Так что глядите в оба. 
  в этом и состоит цель его работы, но некоторые пользователи отличаются оголтелым
  стремлением к установке всех плагинов, до которых дотягиваются их руки... Так что глядите в оба.

##### Списки приватности 
 Списки приватности 

> Если какой-то негодяй льёт вам в приват тонны сообщений, пытаясь завесить клиент
 Если какой-то негодяй льёт вам в приват тонны сообщений, пытаясь завесить клиент или раскрутить на трафик, вы можете [внести его в списки приватности](Блокировка_MRIM-спама.md) (войти в меню **Tkabber → Обеспечение приватности** и внести в правила либо реальный джид (если флуд идёт напрямую, либо "комнатный" джид вида `room_name@conference.jabber.ru/flooder's_nick`). Не путайте списки приватности с игнором, который можно включить, щёлкнув правой кнопкой мыши на участнике конференции — игнор не блокирует трафик, он лишь скрывает сообщения от глаз. Списки же приватности обрабатываются на сервере, поэтому вы перестанете получать от этого джида _всё, что отметите, устанавливая на него правило, включая его запросы и презенс._ Но помните, что если флудер сменит ник в комнате, правило придётся либо переписывать, либо добавлять новое. 
  или раскрутить на трафик, вы можете [**внести его в списки приватности**](Блокировка_MRIM-спама.md)
  (войти в меню **Tkabber → Обеспечение приватности** и внести в правила либо реальный джид
  (если флуд идёт напрямую, либо "комнатный" джид вида `room_name@conference.jabber.ru/flooder's_nick`).
  Не путайте списки приватности с игнором, который можно включить, щёлкнув правой кнопкой
  мыши на участнике конференции — игнор не блокирует трафик, он лишь скрывает сообщения от
  глаз. Списки же приватности обрабатываются на сервере, поэтому вы перестанете получать от
  этого джида _всё, что отметите, устанавливая на него правило, включая его запросы и презенс._
  Но помните, что если флудер сменит ник в комнате, правило придётся либо переписывать, либо добавлять новое.

### <a id="Настройка_пользователя"></a>Настройка пользователя
## <a id="Настройка_пользователя"></a>Настройка пользователя

(То есть настройка себя.)
(То есть настройка себя.) 

* Ограничьте себя в просмотре чужих vCards — они зачастую содержат фотографии большого размера
*  Ограничьте себя в просмотре чужих vCards — они зачастую содержат фотографии большого размера (и, к сожалению, подавляющее большинство из них содержат какую угодно ахинею, но не фотографию владельца). 
  (и, к сожалению, подавляющее большинство из них содержат какую угодно ахинею, но не фотографию владельца).
* Не используйте плагины типа [**Autoretrieve**](Плагины.md#Autoretrieve), которые запрашивают
  vCard у каждого заходящего в комнату пользователя.
* Старайтесь попусту не "ходить" в дискавери на список конференций — к примеру, таковой
*  Не используйте плагины типа [Autoretrieve](Плагины.md#Autoretrieve), которые запрашивают vCard у каждого заходящего в комнату пользователя. 
*  Старайтесь попусту не "ходить" в дискавери на список конференций — к примеру, таковой на jabber.ru "весит" примерно 180 килобайт; если вам интересна информация по конкретной комнате, наберите её имя в адресной строке окна дискавери в виде `имя_комнаты@conference.jabber.ru` — перейдёте прямо к ней, минуя полный список комнат. 
  на jabber.ru "весит" примерно 180 килобайт; если вам интересна информация по конкретной
  комнате, наберите её имя в адресной строке окна дискавери в виде `имя_комнаты@conference.jabber.ru` — перейдёте
  прямо к ней, минуя полный список комнат.

![(!)](../images/Hammer.png) **Сделать:** по-видимому, плагин whiteboard неплохо жрёт трафик
![(!)](../images/Hammer.png) **Сделать:** по-видимому, плагин whiteboard неплохо жрёт трафик 

### <a id="Настройка_сервера"></a>Настройка сервера

При помощи списков приватности на сервере можно останавливать некоторые виды _входящего_
трафика _прямо на сервере._

## <a id="Настройка_сервера"></a>Настройка сервера

При помощи списков приватности на сервере можно останавливать некоторые виды _входящего_ трафика _прямо на сервере._ 

![(!)](../images/Hammer.png) **Сделать:** доработать
![(!)](../images/Hammer.png) **Сделать:** доработать 

## <a id="Средства_самоконтроля"></a>Средства самоконтроля
### <a id="Плагин_Traffic"></a>Плагин Traffic
# <a id="Средства_самоконтроля"></a>Средства самоконтроля
## <a id="Плагин_Traffic"></a>Плагин Traffic

В Ткаббере имеется [**плагин Traffic**](Плагины.md#Официальные_плагины_для_Ткаббера) авторства
В Ткаббере имеется [плагин Traffic](Плагины.md#Официальные_плагины_для_Ткаббера) авторства [feez'а](Участник_Feez.md). Установив его и запустив через **Службы → Расширения → Статистика по трафику**, вы сможете следить за тем, какие "примочки" Ткаббера поедают драгоценный трафик. Имейте, однако, в виду, что этот плагин меряет только объём XML-трафика, то есть он не способен учесть выгоду от применения Stream Compression, которое происходит "ниже" — перед передачей данных стеку TCP/IP. 
[**feez'а**](Участник_Feez.md). Установив его и запустив через **Службы → Расширения → Статистика по трафику**,
вы сможете следить за тем, какие "примочки" Ткаббера поедают драгоценный трафик. Имейте,
однако, в виду, что этот плагин меряет только объём XML-трафика, то есть он не способен
учесть выгоду от применения Stream Compression, которое происходит "ниже" — перед передачей данных стеку TCP/IP.

Расскажем вкратце о том, как пользоваться этим плагином.
Расскажем вкратце о том, как пользоваться этим плагином. 

Итак, окно плагина открыто, и теперь нам надо выбрать соединение, которое мы хотим мониторить.
Итак, окно плагина открыто, и теперь нам надо выбрать соединение, которое мы хотим мониторить. Справа вверху есть выпадающий список, в котором видна надпись "0 None". Разверните список и выберите в нём нужное соединение (если их открыто больше одного). Установите интервал обновления в поле "Таймер" (5 секунд вполне достаточно) и удостоверьтесь, что кнопка справа от него стоит в значении "Выкл" (это означает, что автообновление работает, и при нажатии на кнопку отключится). Если вы не хотите пользоваться автообновлением окна (оно всё-таки потребляет ресурсы), можете обновлять его вручную с помощью кнопки "Обновить", расположенной справа от выпадающего списка. 
Справа вверху есть выпадающий список, в котором видна надпись "0 None". Разверните список
и выберите в нём нужное соединение (если их открыто больше одного). Установите интервал обновления
в поле "Таймер" (5 секунд вполне достаточно) и удостоверьтесь, что кнопка справа от него
стоит в значении "Выкл" (это означает, что автообновление работает, и при нажатии на
кнопку отключится). Если вы не хотите пользоваться автообновлением окна (оно всё-таки
потребляет ресурсы), можете обновлять его вручную с помощью кнопки "Обновить",
расположенной справа от выпадающего списка.

Автоматически ли или вручную, окно рано или поздно заполнится информацией. По горизонтали идут
Автоматически ли или вручную, окно рано или поздно заполнится информацией. По горизонтали идут контакты ростера (в **Настройках → Плагины → Traffic** можно указать, показывать ли их в виде ника или джида): ваши друзья, а также конференции и фиды RSS. Самой последней строкой идёт суммарный трафик соединения. По вертикали — типы трафика: **Pres** (Presence, присутствие), **Iq** (Info-query, информация-запросы), **Msg** (Messages, сообщения), **All** (всего). **IN** — входящий трафик, **OUT** — исходящий. Нетрудно заметить, что наибольшую проблему создаёт сервис Info-query, особенно если у каких-либо контактов в vcard вставлены аватары и фотографии — их сразу же видно по увеличению трафика в разы. 
контакты ростера (в **Настройках → Плагины → Traffic** можно указать, показывать ли их в виде
ника или джида): ваши друзья, а также конференции и фиды RSS. Самой последней строкой идёт суммарный
трафик соединения. По вертикали — типы трафика: **Pres** (Presence, присутствие), **Iq** (Info-query,
информация-запросы), **Msg** (Messages, сообщения), **All** (всего). **IN** — входящий трафик,
**OUT** — исходящий. Нетрудно заметить, что наибольшую проблему создаёт сервис Info-query,
особенно если у каких-либо контактов в vcard вставлены аватары и фотографии — их сразу же
видно по увеличению трафика в несколько раз.

Когда плагин установлен, статистика считается автоматически с момента старта Ткаббера.
Когда плагин установлен, статистика считается автоматически с момента старта Ткаббера. Её можно сохранить для последуюего анализа с помощью скриптов или других инструментов (правда, нельзя загрузить сохранённый файл), а можно и обнулить, чтобы начать считать заново (к примеру, чтобы промерить отдельно "час пик"). Напоминаем ещё раз, что меряется **только** XML-трафик. 
Её можно сохранить для последуюего анализа с помощью скриптов или других инструментов
(правда, нельзя загрузить сохранённый файл), а можно и обнулить, чтобы начать считать
заново (к примеру, чтобы промерить отдельно "час пик"). Напоминаем ещё раз, что
меряется **только** XML-трафик.

Проведём интересный опыт (он будет просто потрясающ, если среди ваших контактов есть
Проведём интересный опыт (он будет просто потрясающ, если среди ваших контактов есть пользователи MSN Messenger'а). 
пользователи MSN Messenger'а).

1.  Выберите момент затишья, чтобы собеседники не забивали статистику лишними строчками в окне.
1.  Поставьте ручное обновление окна.
1.  Обнулите счётчики.
1.  Отлогиньтесь от MSN-гейта.
1.  Обновите статистику. Если некоторые из контактов были в онлайне, они появятся в
1.  Выберите момент затишья, чтобы собеседники не забивали статистику лишними строчками в окне. 
1.  Поставьте ручное обновление окна. 
1.  Обнулите счётчики. 
1.  Отлогиньтесь от MSN-гейта. 
1.  Обновите статистику. Если некоторые из контактов были в онлайне, они появятся в списке, имея чуть меньше 250 байт трафика Pres IN. Сам транспорт, естественно, тоже вышлет свой презенс в 87 байт размером в обмен на ваш ему Pres OUT. 
    списке, имея чуть меньше 250 байт трафика Pres IN. Сам транспорт, естественно, тоже
    вышлет свой презенс в 87 байт размером в обмен на ваш ему Pres OUT.
1.  Сбросьте счётчики снова.
1.  Снова залогиньтесь к гейту и снова обновите статистику.
   *  При логине трафик презенса увеличивается: у транспорта в три раза, у контактов — больше,
1.  Сбросьте счётчики снова. 
1.  Снова залогиньтесь к гейту и снова обновите статистику. 
 *  При логине трафик презенса увеличивается: у транспорта в три раза, у контактов — больше, чем в четыре! 
      чем в четыре!
   *  Но это ещё цветочки: один-единственный запрос Iq порождает трафик в 40-70 килобайт
 *  Но это ещё цветочки: один-единственный запрос Iq порождает трафик в 40-70 килобайт (если у контакта в vcard не вставлена фотка размером с wallpaper)!!! 
      (если у контакта в vcard не вставлена фотка размером с wallpaper)!!!
   *  Вход или выход одного человека из конференции увеличивают её входящий презенс-трафик
      на 250-500 байт. На первый взгляд немного, но в час пик, когда входит и выходит
 *  Вход или выход одного человека из конференции увеличивают её входящий презенс-трафик на 250-500 байт. На первый взгляд немного, но в час пик, когда входит и выходит много народу, набегает... 
 
      много народу, набегает...
1.  Померяйте сами трафик, создаваемый плагинами chess, checkers, reversi, whiteboard и так далее.
1.  Померяйте сами трафик, создаваемый плагинами chess, checkers, reversi, whiteboard и так далее. 

### <a id="Сетевые_средства"></a>Сетевые средства
## <a id="Сетевые_средства"></a>Сетевые средства

Существуют всевозможные мерялки трафика, которые как раз способны вести учёт
Существуют всевозможные мерялки трафика, которые как раз способны вести учёт того, что оказывается непосредственно "на линии". 
того, что оказывается непосредственно "на линии".

Для измерения TCP/IP трафика под виндами можно порекоммендовать бесплатный (для
Для измерения TCP/IP трафика под виндами можно порекоммендовать бесплатный (для простых применений) [TMeter](http://www.TMeter.RU). 
простых применений) [TMeter](http://www.TMeter.RU).

Если у вас модем, то очень хорошим решением является [ModemSpd](http://www.online.az/modemspdV0.902beta.zip)
Если у вас модем, то очень хорошим решением является [ModemSpd](http://www.online.az/modemspdV0.902beta.zip) с [модулем декодирования Unimodem-диагностики](http://www.rampitec.spb.ru/modem.htm#ud). 
с [модулем декодирования Unimodem-диагностики](http://www.rampitec.spb.ru/modem.htm#ud).

К сожалению, измерения такими средствами страдают от невозможности классифицировать
К сожалению, измерения такими средствами страдают от невозможности классифицировать трафик XMPP (так, как это делает плагин **Traffic**, к примеру) — без ухищрений можно померять только "сколько всего" и "с какой скоростью". 
трафик XMPP (так, как это делает плагин **Traffic**, к примеру) — без ухищрений можно
померять только "сколько всего" и "с какой скоростью".

![(?)](../images/Attention.png) **Поправьте меня:** Впрочем, если память мне не изменяет,
![(?)](../images/Attention.png) **Поправьте меня:** Впрочем, если память мне не изменяет, файерволл [Agnitum Outpost](http://www.agnitum.com/products/outpost/) даже в [бесплатной версии](http://www.agnitum.com/download/OutpostInstall.exe) меряет трафик, который накручивает каждая программа в отдельности. 
файерволл [Agnitum Outpost](http://www.agnitum.com/products/outpost/) даже
в [бесплатной версии](http://www.agnitum.com/download/OutpostInstall.exe) меряет трафик,
который накручивает каждая программа в отдельности.

## <a id="Невошедшее"></a>Невошедшее
В процессе разбирательств с добрым Йоххо-тяном в комнате Ткаббера по поводу сравнительного
# <a id="Невошедшее"></a>Невошедшее
В процессе разбирательств с добрым Йоххо-тяном в комнате Ткаббера по поводу сравнительного меряния трафика с включённым сжатием между Бомбусом и Ткаббером, [kostix](Участник_Kostix.md) 02:36, 22 апреля 2008 (MSD) выяснил, что Ткаббер жмёт трафик, используя степерь сжатия, которую zlib использует по умолчанию ([Mellon](Участник_Mellon.md) сообщает, что она равна 6). 
меряния трафика с включённым сжатием между Бомбусом и Ткаббером, [**kostix**](Участник_Kostix.md)
02:36, 22 апреля 2008 (MSD) выяснил, что Ткаббер жмёт трафик, используя степерь сжатия,
которую zlib использует по умолчанию ([**Mellon**](Участник_Mellon.md) сообщает, что она равна 6).

Увеличить её до максимального значения можно, изменив в процедуре `transport::zlib::import`,
Увеличить её до максимального значения можно, изменив в процедуре `transport::zlib::import`, определённой в файле jabberlib/transports.tcl, строку 
определённой в файле jabberlib/transports.tcl, строку

    zlib stream $sock RDWR -output compress -input decompress

на
на 

    zlib stream $sock RDWR -output compress -input decompress -level 9

Тестирование на получении ростера (~120 контактов + закладки на конференции + аннотации к
Тестирование на получении ростера (~120 контактов + закладки на конференции + аннотации к некоторым элементам) и начального присутствия от JID'ов всех его элементов, к которым это относится: 
некоторым элементам) и начального присутствия от 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 байтов
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 — наше всё. Он сам уже жмёт всё в два раза, и надо быть <s>завидным
Комментарий: TLS — наше всё. Он сам уже жмёт всё в два раза, и надо быть <s>завидным скупердяем</s> очень бедным человеком, чтобы пожертвовать защищённым соединением ради сжатия ещё в два раза. 
скупердяем</s> очень бедным человеком, чтобы пожертвовать защищённым соединением
ради сжатия ещё в два раза.

Следует также понимать, что изменение коэффициента сжатия на клиенте никак не влияет
на коэффициент сжатия на сервере, который скорее всего установлен в значение по умолчанию
(как минимум, в [ejabberd](http://www.ejabberd.im) нет опций конфигурации для
Следует также понимать, что изменение коэффициента сжатия на клиенте никак не влияет на коэффициент сжатия на сервере, который скорее всего установлен в значение по умолчанию (как минимум, в [ejabberd](http://www.ejabberd.im) нет опций конфигурации для управления коэффициентом сжатия потока). В итоге, "хакнув" указанный кусок кода в Ткаббере, можно добиться только практически незаметного уменьшения трафика, идущего "вверх" — от клиента на сервер; при этом трафик "вниз" (от сервера — клиенту) обычно значительно выше (если только мы не занимаемся активной посылкой файлов при помощи [внутриканальных протоколов передачи](Пересылка_файлов__теория.md#Внутри_и_снаружи)). 


управления коэффициентом сжатия потока). В итоге, "хакнув" указанный кусок кода в Ткаббере,
можно добиться только практически незаметного уменьшения трафика, идущего "вверх" — от клиента
на сервер; при этом трафик "вниз" (от сервера — клиенту) обычно значительно выше (если
только мы не занимаемся активной посылкой файлов при
помощи [**внутриканальных протоколов передачи**](Пересылка_файлов__теория.md#Внутри_и_снаружи)).

Changes to wiki/ru/MUC_Ignore.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15



16
17
18


19
20

21
22

23
24
25
26


27
28
29


30
31
32

33
34

35
36

37
38
39
40


41
42
43


44
45

46
47

48
49
50

51
52
53
54
55
56
57
58
59
60
61
62
63











64
65
66
67
68
69
70






71
72

73
74

75
76
77

78
79
80
81
82


83
84

85
86
87
88
89

90
91
92

93
94

95
96
97

98
99
100

101
102
103

104
105

106
107

108
109
110
111

112
113
114

115
116
117
118
119

120
121
122
123
124

125
126

127
128

129
130
131
132

133
134

135
136
137

138
139
140
141

142
143

144
145
146
147

148
149
150
151
152

153
154
155
156
157
158

159
160
161
162



163
1
2
3
4
5
6
7
8
9
10
11
12
13



14
15
16
17


18
19
20

21
22

23

24


25
26
27


28
29



30
31

32
33

34

35


36
37
38


39
40


41
42

43

44

45

46











47
48
49
50
51
52
53
54
55
56
57
58






59
60
61
62
63
64
65

66
67

68

69

70


71


72
73
74

75



76

77

78

79
80

81

82

83

84

85

86

87
88

89
90

91
92
93
94

95

96

97



98

99



100

101
102

103
104

105


106

107
108

109



110




111
112

113


114

115



116

117




118

119
120



121
122
123


+











-
-
-
+
+
+

-
-
+
+

-
+

-
+
-

-
-
+
+

-
-
+
+
-
-
-
+

-
+

-
+
-

-
-
+
+

-
-
+
+
-
-
+

-
+
-

-
+
-

-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
+
+
+
+
+
+

-
+

-
+
-

-
+
-
-

-
-
+
+

-
+
-
-
-

-
+
-

-
+

-
+
-

-
+
-

-
+
-

-
+

-
+

-
+



-
+
-

-
+
-
-
-

-
+
-
-
-

-
+

-
+

-
+
-
-

-
+

-
+
-
-
-
+
-
-
-
-
+

-
+
-
-

-
+
-
-
-

-
+
-
-
-
-

-
+

-
-
-
+
+
+
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/MUC_Ignore/index.html)


# MUC Ignore

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 Вступление](#Вступление)
* [2 Минимум теории](#Минимум_теории)
* [3 Реализация](#Реализация)
* [4 Проблемы](#Проблемы)
   * [4.1 Ненадёжность (нестабильность) ников](#Ненадёжность_нестабильность_ников)
      * [4.1.1 "Запачканные" ники](#Запачканные_ники)
   * [4.2 Переконфигурации комнаты](#Переконфигурации_комнаты)
 * [4.1 Ненадёжность (нестабильность) ников](#Ненадёжность_нестабильность_ников)
  * [4.1.1 "Запачканные" ники](#Запачканные_ники)
 * [4.2 Переконфигурации комнаты](#Переконфигурации_комнаты)

## <a id="Вступление"></a>Вступление
[**Kostix**](Участник_Kostix.md) 03:32, 15 декабря 2006 (MSK)
# <a id="Вступление"></a>Вступление
[Kostix](Участник_Kostix.md) 03:32, 15 декабря 2006 (MSK) 

Это нечто вроде Request For Comments на реализацию "MUC Ignoring" в Ткаббере.
Это нечто вроде Request For Comments на реализацию "MUC Ignoring" в Ткаббере. 

Реализация оказалась не _настолько_ простой, как я изначально предполагал: есть некоторые
Реализация оказалась не _настолько_ простой, как я изначально предполагал: есть некоторые проблемы "теоретического" характера, которые и предлагается обсудить желающим. Выдвигайте варианты. 
проблемы "теоретического" характера, которые и предлагается обсудить желающим. Выдвигайте варианты.

## <a id="Минимум_теории"></a>Минимум теории
Комнаты в XMPP делятся на три группы по "видимости" _реальных JID'ов_ участников для остальных участников:
# <a id="Минимум_теории"></a>Минимум теории
Комнаты в XMPP делятся на три группы по "видимости" _реальных JID'ов_ участников для остальных участников: 

*  полностью анонимные — реальные джиды не видны никому;
*  полуанонимные — (дефолтный тип комнаты в "ёжике") — все модераторы (role == moderator),
*  полностью анонимные — реальные джиды не видны никому; 
*  полуанонимные — (дефолтный тип комнаты в "ёжике") — все модераторы (role == moderator), в том числе и временные, видят джиды всех участников; единственное отличие временных от постоянных в том, что они видят джиды лишь тех, кто вошёл в комнату в течение времени, пока они у "руля"); 
   в том числе и временные, видят джиды всех участников; единственное отличие временных от
   постоянных в том, что они видят джиды лишь тех, кто вошёл в комнату в течение времени, пока они у "руля");
*  неанонимные — все видят реальные джиды всех.
*  неанонимные — все видят реальные джиды всех. 

Сообщения в комнату `node@server` от юзера с ником `nick` приходят от джида `node@server/nick`, то есть это полный джид.
Сообщения в комнату `node@server` от юзера с ником `nick` приходят от джида `node@server/nick`, то есть это полный джид. 

В соответствующих типах комнат те участники, которым разрешено видеть реальные джиды других участников,
В соответствующих типах комнат те участники, которым разрешено видеть реальные джиды других участников, вместе с присутствием "доступен" от участника комнаты получают и его реальный джид. 
вместе с присутствием "доступен" от участника комнаты получают и его реальный джид.

## <a id="Реализация"></a>Реализация
Идея (в формулировке [**Teo**](Участник_Teo.md)):
# <a id="Реализация"></a>Реализация
Идея (в формулировке [Teo](Участник_Teo.md)): 

*  Раздельный игнор сообщений в комнату и приват:
   *  Сообщения в комнату от игнорируемого участника помещаются, но скрываются; снятие игнора
*  Раздельный игнор сообщений в комнату и приват: 
 *  Сообщения в комнату от игнорируемого участника помещаются, но скрываются; снятие игнора "показывает" сообщения, и наоборот; 
      "показывает" сообщения, и наоборот;
   *  Сообщения в приват от игнорируемого участника молча удушаются.
 *  Сообщения в приват от игнорируемого участника молча удушаются. 

Ткаббер умеет прекрасно просекать смену ника участником в комнате, то есть смены ника не
Ткаббер умеет прекрасно просекать смену ника участником в комнате, то есть смены ника не мешают обоим игнорам, т. к.  механизм игноров отслеживает их. 
мешают обоим игнорам, т. к.  механизм игноров отслеживает их.

Требуется хранить правила игнора между сеансами работы Ткаббера. Предполагается хранить
Требуется хранить правила игнора между сеансами работы Ткаббера. Предполагается хранить правила (логически) в таком виде: 
правила (логически) в таком виде:

*  SESSION\_JID1
   *  ROOM\_JID1 (комната анонимная)
      *  NICK1
      *  NICK2  
         ...

   *  ROOM\_JID2 (комната анонимная)
      *  NICK1  
         ...
      *  NICKN  
         ...
*  SESSION\_JID1 
 *  ROOM\_JID1 (комната анонимная) 
  *  NICK1 
  *  NICK2
... 
 
 *  ROOM\_JID2 (комната анонимная) 
  *  NICK1
... 
  *  NICKN
... 

*  SESSION\_JID2
   *  ROOM\_JID1 (комната неанонимная)
      *  REAL\_JID1  
         ...
      *  REAL\_JIDN  
         ...
*  SESSION\_JID2 
 *  ROOM\_JID1 (комната неанонимная) 
  *  REAL\_JID1
... 
  *  REAL\_JIDN
... 

! "SESSION\_JID" это "наш" джид подключения.
! "SESSION\_JID" это "наш" джид подключения. 

Идея такая, что для игнорируемого участника хранится реальный джид, если он доступен,
Идея такая, что для игнорируемого участника хранится реальный джид, если он доступен, в противном случае -- ник. 
в противном случае -- ник.

> Обоснование: реальный джид намного "стабильнее", чем ник; несмотря на то, что ник
 Обоснование: реальный джид намного "стабильнее", чем ник; несмотря на то, что ник может быть зарегистрирован, никакого способа узнать об этом факте, по-видимому, не существует; как минимум, — в Ткаббере. 
  может быть зарегистрирован, никакого способа узнать об этом факте, по-видимому,
  не существует; как минимум, — в Ткаббере.

## <a id="Проблемы"></a>Проблемы
### <a id="Ненадёжность_нестабильность_ников"></a>Ненадёжность (нестабильность) ников
# <a id="Проблемы"></a>Проблемы
## <a id="Ненадёжность_нестабильность_ников"></a>Ненадёжность (нестабильность) ников

Засранец легко может генерить ники вида "freak01 ", "freak02", "freak03" и реально игнор
Засранец легко может генерить ники вида "freak01 ", "freak02", "freak03" и реально игнор будет полезен только пока засранец не покинул комнату. После этого смысл хранить забаненным ник "freak03" в такой-то комнате представляется сомнительным — при следующем сеансе работы этот ник в этой комнате может не иметь никакого смысла. 
будет полезен только пока засранец не покинул комнату. После этого смысл хранить забаненным
ник "freak03" в такой-то комнате представляется сомнительным — при следующем сеансе
работы этот ник в этой комнате может не иметь никакого смысла.

С другой стороны, если в комнате есть, скажем, просто очень скучная персона, флудер
С другой стороны, если в комнате есть, скажем, просто очень скучная персона, флудер и т.п., с постоянным ником, хранение подобного правила имеет смысл. 
и т.п., с постоянным ником, хранение подобного правила имеет смысл.

> В Customize есть опция "transient\_rules" — если она включена, правила не сохраняются.
 В Customize есть опция "transient\_rules" — если она включена, правила не сохраняются. 

Также: какой ник сохранять в правилах, если недоступен реальный джид, — тот, который
Также: какой ник сохранять в правилах, если недоступен реальный джид, — тот, который заигнорили, или тот, который засранец имел при выходе из комнаты/нашем от неё отключении? 
заигнорили, или тот, который засранец имел при выходе из комнаты/нашем от неё отключении?

Если сохранять "первый" ник, то нужно либо сразу флашить правила в базу данных Customize,
Если сохранять "первый" ник, то нужно либо сразу флашить правила в базу данных Customize, либо запоминать этот первый ник, если база сбрасывается в какой-то другой момент (см. ниже про UID). 
либо запоминать этот первый ник, если база сбрасывается в какой-то другой момент (см. ниже про UID).

**Текущая реализация:** запоминаем текущий ник или реальный джид, если доступен;
**Текущая реализация:** запоминаем текущий ник или реальный джид, если доступен; флашим базу Customize. 
флашим базу Customize.

#### <a id="Запачканные_ники"></a>"Запачканные" ники
### <a id="Запачканные_ники"></a>"Запачканные" ники

[**Kostix**](Участник_Kostix.md) 03:00, 17 декабря 2006 (MSK) обновление реализации:
[Kostix](Участник_Kostix.md) 03:00, 17 декабря 2006 (MSK) обновление реализации: 

"Сокрытие" сообщений от засранца в комнате делается заключением всего сообщения в тэг вида
"Сокрытие" сообщений от засранца в комнате делается заключением всего сообщения в тэг вида 

    IGNORED-$id

с `-elide 1`, где $id -- некий уникальный в пределах сессии идентификатор засранца;
с `-elide 1`, где $id -- некий уникальный в пределах сессии идентификатор засранца; при переименовании засранца его идентификатор не меняется. 
при переименовании засранца его идентификатор не меняется.

Остаётся проблема: если за время пребывания в комнате засранец сменил несколько
Остаётся проблема: если за время пребывания в комнате засранец сменил несколько ников, то если мы перезайдём в комнату, нам прилетит история, в которой могут быть сообщения с этих ников; при этом игнорированы будут только сообщения, пришедшие с текущего ника игнорируемого, если он в данный момент находится в комнате. 
ников, то если мы перезайдём в комнату, нам прилетит история, в которой могут быть
сообщения с этих ников; при этом игнорированы будут только сообщения, пришедшие с
текущего ника игнорируемого, если он в данный момент находится в комнате.

Бороться с этим злом, видимо, нельзя, т.к. с сообщениями истории реальные джиды не
Бороться с этим злом, видимо, нельзя, т.к. с сообщениями истории реальные джиды не передаются, даже если они доступны. Хранить историю смены ников — глупо, т. к. опять встаёт проблема "запачканных" ников: что если в комнате появится нормальная персона, взявшая себе один из таких ников? 
передаются, даже если они доступны. Хранить историю смены ников — глупо, т. к. опять
встаёт проблема "запачканных" ников: что если в комнате появится нормальная персона,
взявшая себе один из таких ников?

C'est la vie.
C'est la vie. 

### <a id="Переконфигурации_комнаты"></a>Переконфигурации комнаты
## <a id="Переконфигурации_комнаты"></a>Переконфигурации комнаты

Уровень анонимности комнаты может меняться; текущая версия ёжика не умеет генерить уведомления
Уровень анонимности комнаты может меняться; текущая версия ёжика не умеет генерить уведомления об этом, а ткаббер не умеет их просекать, так что проблема "рантайма" нас (пока) не интересует. Интересует проблема соотношения сохранённых правил и новой конфигурации комнаты. 
об этом, а ткаббер не умеет их просекать, так что проблема "рантайма" нас (пока) не интересует.
Интересует проблема соотношения сохранённых правил и новой конфигурации комнаты.

Интересны 2 случая:
Интересны 2 случая: 

*  "Реальные джиды доступны → Сохранены правила с реальными джидами → Комната переконфигурирована
*  "Реальные джиды доступны → Сохранены правила с реальными джидами → Комната переконфигурирована и реальные джиды больше недоступны" — в этом случае соответствующие сохранённые правила перестают иметь смысл, так как их больше не применить к участникам. 
   и реальные джиды больше недоступны" — в этом случае соответствующие сохранённые правила перестают
   иметь смысл, так как их больше не применить к участникам.
*  "Реальные джиды недоступны → Сохранены правила с джидами комнаты → Комната переконфигурирована
*  "Реальные джиды недоступны → Сохранены правила с джидами комнаты → Комната переконфигурирована и реальные джиды доступны" — в этом случае, по идее, следует "продвинуть" джиды комнаты до реальных при первой возможности; насколько это правильно? (нет гарантии, что комнатный джид в момент сохранения соответствовал человеку, который с ним объявился в комнате в данный момент). 
   и реальные джиды доступны" — в этом случае, по идее, следует "продвинуть" джиды комнаты до
   реальных при первой возможности; насколько это правильно? (нет гарантии, что комнатный джид
   в момент сохранения соответствовал человеку, который с ним объявился в комнате в данный момент).
*  Ещё варианты?
*  Ещё варианты? 

Прямолинейный подход — хранить _и_ комнатный, _и_ реальный джиды, если возможно, — страдает от
Прямолинейный подход — хранить _и_ комнатный, _и_ реальный джиды, если возможно, — страдает от той же проблемы: связь между этими джидами можно проверить только при наличии доступа к реальным джидам. Кроме того, это затрудняет хранение правил. 
той же проблемы: связь между этими джидами можно проверить только при наличии доступа к
реальным джидам. Кроме того, это затрудняет хранение правил.

**Текущая реализация:** храним либо реальный джид, либо -- ник; первый имеет преимущество.
**Текущая реализация:** храним либо реальный джид, либо -- ник; первый имеет преимущество. На проблемы с переконфигурацией плюём, руководствуясь принципами бритвы "brAun Occam". :) Кроме того, скорее всего будет приделан диалог формального редактирования правил, при помощи которого можно будет обороть такие проблемы. 
На проблемы с переконфигурацией плюём, руководствуясь принципами бритвы "brAun Occam". :)
Кроме того, скорее всего будет приделан диалог формального редактирования правил, при
помощи которого можно будет обороть такие проблемы.

**Вопрос:** не следует ли хранить вместе с джидом комнаты статус её анонимности и каким-либо
**Вопрос:** не следует ли хранить вместе с джидом комнаты статус её анонимности и каким-либо образом пердуперждать пользователя, если он изменился с момента последнего сохранения правил? (Выглядит разумным компромиссом.) Собственно, не мудрствуя лукаво: факт доступности реального джида во время обработки присутствия от первого же присутствующего позволяет узнать изменился ли статус анонимности комнаты. 
образом пердуперждать пользователя, если он изменился с момента последнего сохранения
правил? (Выглядит разумным компромиссом.) Собственно, не мудрствуя лукаво: факт доступности
реального джида во время обработки присутствия от первого же присутствующего позволяет узнать
изменился ли статус анонимности комнаты.

[**Archimed**](Участник_Archimed.md) 17:06, 18 декабря 2006 (MSK)
[Archimed](Участник_Archimed.md) 17:06, 18 декабря 2006 (MSK) 

Хранить статус комнаты вместе с её JID - мне кажется хорошим решением. Может вместо
формального диалога редактирования правил сделать просто ещё одну группу «Игнор», вдобавок
к «Модераторы» и «Участники» в списке участников конференции? И добавить возможность
Хранить статус комнаты вместе с её JID - мне кажется хорошим решением. Может вместо формального диалога редактирования правил сделать просто ещё одну группу «Игнор», вдобавок к «Модераторы» и «Участники» в списке участников конференции? И добавить возможность перетаскивать ники в/из этой группы. 


перетаскивать ники в/из этой группы.

Changes to wiki/ru/Nick_coloring.md.

1
2

3
4
5
6
7

8
9

10
11

12
13
14


15
16

17
18

19
20
21

22
23
24
25



26
27
28

29
30
31
32

33
34

35
36
37
38
39
40

41
42
43


44
45

46
47
48
49
50
51
52

53
54
55
56

57
58

59
60

61
62
63
64
65
66

67
68
69
70
71
72
73
74

75
76
77
78
79
80
81
82
83
1
2
3
4
5
6
7

8
9

10
11

12



13
14
15

16
17

18

19

20
21



22
23
24

25

26


27

28
29

30


31
32
33

34
35


36
37
38

39
40
41
42
43
44
45

46
47
48
49

50
51

52
53

54
55
56
57
58
59

60
61
62
63
64
65
66
67

68


69
70
71
72
73
74
75


+




-
+

-
+

-
+
-
-
-
+
+

-
+

-
+
-

-
+

-
-
-
+
+
+
-

-
+
-
-

-
+

-
+
-
-



-
+

-
-
+
+

-
+






-
+



-
+

-
+

-
+





-
+







-
+
-
-







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Nick_coloring/index.html)


# Nick coloring

Материал из Tkabber Wiki

Предлагается переделать систему раскраски ников/сообщений.
Предлагается переделать систему раскраски ников/сообщений. 

В настоящее время схема такая:
В настоящее время схема такая: 

*  Если ник неизвестен ткабберу, он выбирает цвет случайным образом из некоторого
*  Если ник неизвестен ткабберу, он выбирает цвет случайным образом из некоторого предварительно сформированного пула; 
   предварительно сформированного пула;
*  Этот цвет закрепляется за ником, соответствия ников и цветов сохраняются;
*  Цвет ника можно менять вручную.
*  Этот цвет закрепляется за ником, соответствия ников и цветов сохраняются; 
*  Цвет ника можно менять вручную. 

Идея [*hypersw*](Участник_Hypersw.md):
Идея [hypersw](Участник_Hypersw.md): 

*  Убрать пул и случайность; генерировать цвет из набора ярких цветов на
*  Убрать пул и случайность; генерировать цвет из набора ярких цветов на основе (некоторого) хэша строки ника; 
   основе (некоторого) хэша строки ника;

Идея [**teo**](Участник_Teo.md):
Идея [teo](Участник_Teo.md): 

*  Не хранить соответствие цветов никам для "автосгенерированных" цветов;
*  Запоминать только ручные изменения;
*  Не делать даже run-time карту отображения ников в цвета, считать цвет
*  Не хранить соответствие цветов никам для "автосгенерированных" цветов; 
*  Запоминать только ручные изменения; 
*  Не делать даже run-time карту отображения ников в цвета, считать цвет для каждого сообщения при помощи упомянутой хэш-функции. 
   для каждого сообщения при помощи упомянутой хэш-функции.

[16:55]\<kostix> teo: насчёт раскраски ников: если ты не хочешь хранить соответствие
[16:55]\<kostix> teo: насчёт раскраски ников: если ты не хочешь хранить соответствие цветов никам, то как их вручную редактировать? или мы будем хранить только эти вручную заданные цвета? 
цветов никам, то как их вручную редактировать? или мы будем хранить только эти вручную
заданные цвета?

[16:55]\<teo> kostix: да
[16:55]\<teo> kostix: да 

[16:56]\<teo> там надо просто вынести все обращения к массиву NickColors в
[16:56]\<teo> там надо просто вынести все обращения к массиву 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): 

\<hypersw> kostix: Алгоритм примерно такой.
\<hypersw> kostix: Алгоритм примерно такой. 

    nickname-string => hash
    hash % 252 => hue
    (hue, default-luminosity, default-saturation) => color

\<hypersw> kostix:
\<hypersw> 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):
[два](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2006/12/24.html#02:18:45): \<hypersw> kostix: 

\<hypersw> kostix:

    /// <summary>
    /// Converts an HLS color to an RGB color and returns three byte components.
    /// </summary>
    public static void HLStoRGB(UInt16 H, UInt16 L, UInt16 S, out Byte R, out Byte G, out Byte B)
    {
     UInt16 Magic1, Magic2; /* calculated magic numbers (really!) */
102
103
104
105
106
107
108
109

110
111

112
113
114
115
116
117
118
94
95
96
97
98
99
100

101
102

103
104
105
106
107
108
109
110







-
+

-
+







       /* get RGB, change units from c_nMaxHLS to c_nMaxRGB */
       R = (byte)((HueToRGB(Magic1, Magic2, (ushort)(H + (c_nMaxHLS / 3))) * c_nMaxRGB + (c_nMaxHLS / 2)) / c_nMaxHLS);
       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): 

\<hypersw> kostix: и ещё
\<hypersw> kostix: и ещё 

    /// <summary>
    /// Utility routine for HLStoRGB.
    /// </summary>
    public static UInt16 HueToRGB(UInt16 n1, UInt16 n2, UInt16 hue)
    {
     /* range check: note values passed add/subtract thirds of range */
129
130
131
132
133
134
135
136

137
138

139
140
141
142
143
144

145
146
147
148
149
150

151
152
153
154
155
156
157
158

159
160
161
162
163
164
165
166
167

168
169
170
171
172
173
174
175



176
177
121
122
123
124
125
126
127

128
129

130




131

132




133

134




135
136
137

138






139


140


141
142
143



144
145
146









-
+

-
+
-
-
-
-

-
+
-
-
-
-

-
+
-
-
-
-



-
+
-
-
-
-
-
-

-
-
+
-
-



-
-
-
+
+
+
-
-
      return (ushort)(n1 + (((n2 - n1) * (((c_nMaxHLS * 2) / 3) - hue) + (c_nMaxHLS / 12)) / (c_nMaxHLS / 6)));
     else
      return (n1);
    }

---

Теория от [*hypersw*](Участник_Hypersw.md):
Теория от [hypersw](Участник_Hypersw.md): 

\<hypersw> kostix: В системе координат HLS можно сгенерить разные цвета примерно одной
\<hypersw> kostix: В системе координат HLS можно сгенерить разные цвета примерно одной яркости, отличающиеся оттенком. В координатах RGB ты это так просто не сделаешь. Хотя попробовать можно — задаёшь 3 или 6 базовых цветов (равномерно отстоящих на цветовом круге), делаешь одномерную координату, по ней определяешь, между какими двумя цветами попала точка, намешиваешь их пропорционально. По сути получится эмуляция HLS, зачем, если всё уже придумано до нас :) 
яркости, отличающиеся оттенком. В координатах RGB ты это так просто не сделаешь. Хотя
попробовать можно — задаёшь 3 или 6 базовых цветов (равномерно отстоящих на цветовом круге),
делаешь одномерную координату, по ней определяешь, между какими двумя цветами попала точка,
намешиваешь их пропорционально. По сути получится эмуляция HLS, зачем, если всё уже придумано до нас :)

\<hypersw> kostix: Если рассмотреть пространство RGB, где R, G, B — три перпендикулярные
\<hypersw> kostix: Если рассмотреть пространство RGB, где R, G, B — три перпендикулярные координатные оси (каждая от 0 до 255), то получится кубик. Цвета с одинаковой яркостью (примерно…) будут сидеть в плоскости, перпендикулярной большой диагонали (0,0,0) — (255,255,255). На этой диагонали — серые цвета, чем дальше от неё, тем сочнее. Таким образом, нас интересует линия, получающаяся при пересечении той плоскостью граней куба. 
координатные оси (каждая от 0 до 255), то получится кубик. Цвета с одинаковой яркостью
(примерно…) будут сидеть в плоскости, перпендикулярной большой диагонали (0,0,0) — (255,255,255).
На этой диагонали — серые цвета, чем дальше от неё, тем сочнее. Таким образом, нас
интересует линия, получающаяся при пересечении той плоскостью граней куба.

\<hypersw> kostix: в зависимости от точки на большой диагонали, через которую проходит
\<hypersw> kostix: в зависимости от точки на большой диагонали, через которую проходит плоскость, наша линия будет либо треугольником, либо шестиугольником. Ну или точкой, на концах :) Пространство HLS делает из этой хрени два конуса, состыкованных основаниями. Ось (линия между вершинами) — бывшая большая диагональ куба, с серыми цветами. На поверхности конуса — самые сочные цвета. 
плоскость, наша линия будет либо треугольником, либо шестиугольником. Ну или точкой, на
концах :) Пространство HLS делает из этой хрени два конуса, состыкованных основаниями. Ось
(линия между вершинами) — бывшая большая диагональ куба, с серыми цветами. На поверхности
конуса — самые сочные цвета.

---

[**ycbl**](Участник_Bigote.md) предлагает: в случае возможности видеть джиды участников (в
[ycbl](Участник_Bigote.md) предлагает: в случае возможности видеть джиды участников (в полуанонимных комнатах для админов и в неанонимных — для всех) генерировать цвета не по никам, а именно по джидам участников. Таким образом, например, некто kostix, любящий переименовываться в кого ни попадя, зимой и летом будет виден одним цветом. Собственно, ничто не мешает также отслеживать переименования участников и пристёгивать старые цвета к новым никам → решение проблемы для анонимных и полуанонимных комнат (для не-админов). Механизм отслеживания можно взять из плагина игноров. 
полуанонимных комнатах для админов и в неанонимных — для всех) генерировать цвета не по
никам, а именно по джидам участников. Таким образом, например, некто kostix, любящий
переименовываться в кого ни попадя, зимой и летом будет виден одним цветом. Собственно,
ничто не мешает также отслеживать переименования участников и пристёгивать старые цвета к
новым никам → решение проблемы для анонимных и полуанонимных комнат (для не-админов).
Механизм отслеживания можно взять из плагина игноров.

[**Kostix**](Участник_Kostix.md) 03:29, 27 декабря 2006 (MSK) Идея с джидами интересна.
Возможно, так и стоит сделать. Отслеживание ников требует более сложных заморочек типа
[Kostix](Участник_Kostix.md) 03:29, 27 декабря 2006 (MSK) Идея с джидами интересна. Возможно, так и стоит сделать. Отслеживание ников требует более сложных заморочек типа таблицы связей "канонических" ников (на которых считается хэш) с текущими. Это противоречит идее _не хранить таблицу отображения ников на их цвета в памяти_ (см. выше). 
таблицы связей "канонических" ников (на которых считается хэш) с текущими. Это противоречит
идее _не хранить таблицу отображения ников на их цвета в памяти_ (см. выше).

---

[**ycbl**](Участник_Bigote.md) 00:06, 24 марта 2008 (MSK) Ещё одна мысль: если уж переделывать,
то стоит учесть разные цветовые схемы и добавить в настройки возможность выбора цветовой
гаммы ников. Потому что если у человека установлена тёмная схема, чёрные и синие цвета
[ycbl](Участник_Bigote.md) 00:06, 24 марта 2008 (MSK) Ещё одна мысль: если уж переделывать, то стоит учесть разные цветовые схемы и добавить в настройки возможность выбора цветовой гаммы ников. Потому что если у человека установлена тёмная схема, чёрные и синие цвета ников будут практически не видны, как не видны в стандартной схеме разные розовые, бледно-оранжевые и прочие пастельные цвета. 


ников будут практически не видны, как не видны в стандартной схеме разные розовые,
бледно-оранжевые и прочие пастельные цвета.

Deleted wiki/ru/Pages.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136








































































































































-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Pages/index.html)

# Pages

Материал из Tkabber Wiki

Эта страница была предназначена для перенаправлений с искусственных "коротких"
ссылок, которые ставятся в темы комнат и вообще проще.

Однако в один прекрасный день мы подумали: "А что это мы маемся дурью? У нас же
теперь поддомены есть. Мы можем создавать странички с короткими английскими именами,
которые будут перенаправлять пользователей на страницы с контентом.
И при этом не мешать английским статьям, которые находятся  на другом домене". Так и порешили.

Но страница эта пускай останется тут. Она не повредит и как в качестве удобного
списка "заредирекченных" статей, так и в качестве полигона для создания новых
англоязычных страниц (потому что их проще всего создавать, просто воткнув некое
имя в двойные квадратные скобки на какой-то существующей странице — как раз на этой).

Давать ссылку надо так:

> <s>http://ru.tkabber.jabe.ru/index.php/pages\#РАЗДЕЛ\_ТУТ</s>
  http://ru.tkabber.jabe.ru/index.php/РАЗДЕЛ_ТУТ

к примеру (регистр первой буквы имени статьи в данном случае неважен):

> <s>http://ru.tkabber.jabe.ru/index.php/pages\#fonts</s>
  http://ru.tkabber.jabe.ru/index.php/Fonts

#### <a id="beginners"></a>  beginners

[**Начинающим**](Начинающим.md)

#### <a id="color-pics"></a>  color-pics

[**Цветовые темы и пиктограммы**](Цветовые_темы_и_пиктограммы.md)

#### <a id="dist"></a>  dist

[**Дистрибутивы, которые мы выбираем**](Дистрибутивы__которые_мы_выбираем.md)

#### <a id="emoticons"></a>  emoticons

[**Смайлики и аватары**](Смайлики_и_аватары.md)

#### <a id="FAQ"></a>  FAQ

[**Ткаббер ЧаВо**](Ткаббер_ЧаВо.md)

#### <a id="FAQ-appearance-sound"></a>  FAQ-appearance-sound

[**Ткаббер ЧаВо/Внешний вид и звук**](Ткаббер_ЧаВо/Внешний_вид_и_звук.md)

#### <a id="FAQ-glitches"></a>  FAQ-glitches

[**Ткаббер ЧаВо/Глюки**](Ткаббер_ЧаВо/Глюки.md)

#### <a id="FAQ-howto"></a>  FAQ-howto

[**Ткаббер ЧаВо/Как мне...?**](Ткаббер_ЧаВо/Как_мне..._.md)

#### <a id="FAQ-miscellanea"></a>  FAQ-miscellanea

[**Ткаббер ЧаВо/Разное**](Ткаббер_ЧаВо/Разное.md)

#### <a id="filetransfer"></a>  filetransfer

[**Пересылка файлов: теория**](Пересылка_файлов__теория.md)

#### <a id="fonts"></a>  fonts

[**Пуско-наладка шрифтов в Ткаббере**](Шрифты.md)

#### <a id="gates"></a>  gates

[**Гейты во вражеские сети**](Гейты_во_вражеские_сети.md)

#### <a id="gtalk"></a>  gtalk

[**Google Talk**](Google_Talk.md)

#### <a id="login"></a>  login

[**Между офлайном и онлайном**](Между_офлайном_и_онлайном.md)

#### <a id="mrim-spam"></a>  mrim-spam

[**Блокировка MRIM-спама**](Блокировка_MRIM-спама.md)

#### <a id="plugins"></a>  plugins

[**Плагины**](Плагины.md)

#### <a id="patches"></a>  patches

[**Патчи**](Патчи.md)

#### <a id="remote-control"></a>  remote-control

[**Удалённое управление с помощью send**](Удалённое_управление_с_помощью_send.md)

#### <a id="sound"></a>  sound

[**Проблемы со звуком**](Проблемы_со_звуком.md)

#### <a id="sound_themes"></a>  sound themes

[**Звуковые схемы**](Звуковые_схемы.md)

#### <a id="todo"></a>  todo

[**Планы на будущее**](Планы_на_будущее.md)

#### <a id="topic"></a>  topic

[**Ну очень развёрнутый топик конференции** `tkabber@conference.jabber.ru`](Остров_посланных_на....md)

#### <a id="traffic"></a>  traffic

[**Low traffic HOWTO**](Low_traffic_HOWTO.md)

#### <a id="tuning"></a>  tuning

[**Настройка Ткаббера: азы и глубже**](Настройка_Ткаббера__азы_и_глубже.md)

#### <a id="tweaks"></a>  tweaks

[**Нетривиальные настройки**](Нетривиальные_настройки.md)

#### <a id="win-howto"></a>  win-howto

[**Tkabber Windows Mini HOWTO**](Tkabber_Windows_Mini_HOWTO.md)

#### <a id="x-ttf"></a>  x-ttf

[**Проблемы X Window и TTF**](Проблемы_X_Window_и_TTF.md)

Changes to wiki/ru/Plugins/Alarm/Changelog.md.

1
2

3
4
5

6
7

8
9
10


11
12

13
14

15
16

17
18
19


20
21

22
23

24
25
26
27
28
29
30








1
2
3
4
5

6
7

8
9


10
11


12


13
14

15
16


17
18


19
20

21
22






23
24
25
26
27
28
29
30


+


-
+

-
+

-
-
+
+
-
-
+
-
-
+

-
+

-
-
+
+
-
-
+

-
+

-
-
-
-
-
-
+
+
+
+
+
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Plugins/Alarm/Changelog/index.html)


# Plugins/Alarm/Changelog

Материал из Tkabber Wiki
Материал из Tkabber Wiki.

### <a id="version_0.3"></a> version 0.3
### <a id="version_0.3"></a> version 0.3 

*  Better errors handling
*  Support for incoming \<ding> keyword. [JAJC plugin buzz](http://www.remiq.net/jajc/#buzz)
*  Better errors handling 
*  Support for incoming \<ding> keyword. [JAJC plugin buzz](http://www.remiq.net/jajc/#buzz) and yahoo uses it for their alarms. 
   and yahoo uses it for their alarms.
*  Smart sending: plugin sends inbound alarms only to clients which supports them and
*  Smart sending: plugin sends inbound alarms only to clients which supports them and keyword \<ding> to others. It is disabled by default.  
   keyword \<ding> to others. It is disabled by default.
*  Now "alarm!" is not hardcoded keyword and you can change it as you wish.
*  Now "alarm!" is not hardcoded keyword and you can change it as you wish.  

### <a id="version_0.2"></a> version 0.2
### <a id="version_0.2"></a> version 0.2 

*  Fix: Alarm sound now plays under windows too
*  Now it's possible to receive alarm with keyword "alarm!" instead of
*  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) 
   using iq stanza (inbound alarm) (for other clients)
*  Resort default rule list for better usability
*  Resort default rule list for better usability 

### <a id="version_0.1"></a> version 0.1
### <a id="version_0.1"></a> 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
*  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 


Changes to wiki/ru/Plugins/Traffic/Changelog.md.

1
2

3
4
5

6
7

8
9
10
11
12
13
14
15
16
17
18










19
20

21
22
23


24
25

26
27
28




1
2
3
4
5

6
7

8
9










10
11
12
13
14
15
16
17
18
19
20

21
22


23
24
25

26
27


28
29
30
31


+


-
+

-
+

-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+

-
+

-
-
+
+

-
+

-
-
+
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Plugins/Traffic/Changelog/index.html)


# Plugins/Traffic/Changelog

Материал из Tkabber Wiki
Материал из Tkabber Wiki.

### <a id="version_0.3"></a> version 0.3
### <a id="version_0.3"></a> 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
*  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 

### <a id="version_0.2"></a> version 0.2
### <a id="version_0.2"></a> version 0.2 

*  remove autoopen on the start
*  add some documents (TODO, Changelog)
*  remove autoopen on the start 
*  add some documents (TODO, Changelog) 

### <a id="version_0.1"></a> version 0.1
### <a id="version_0.1"></a> version 0.1 

*  Patch for tkabber
*  Base features: grab statistics, GUI, sorting, multiconnection support
*  Patch for tkabber 
*  Base features: grab statistics, GUI, sorting, multiconnection support 


Added wiki/ru/Redirects.md.







































































































































1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Pages/index.html)


# Redirects

Материал из Tkabber Wiki

[Pages](Pages.md)

 Эта страница была предназначена для перенаправлений с искусственных "коротких" ссылок, которые ставятся в темы комнат и вообще проще. 

Однако в один прекрасный день мы подумали: "А что это мы маемся дурью? У нас же теперь поддомены есть. Мы можем создавать странички с короткими английскими именами,  которые будут перенаправлять пользователей на страницы с контентом.  И при этом не мешать английским статьям, которые находятся  на другом домене". Так и порешили. 

Но страница эта пускай останется тут. Она не повредит и как в качестве удобного списка "заредирекченных" статей, так и в качестве полигона для создания новых англоязычных страниц (потому что их проще всего создавать, просто воткнув некое имя в двойные квадратные скобки на какой-то существующей странице — как раз на этой). 

Давать ссылку надо так: 

    <s>http://ru.tkabber.jabe.ru/index.php/pages\#РАЗДЕЛ\_ТУТ</s>
    http://ru.tkabber.jabe.ru/index.php/РАЗДЕЛ_ТУТ

к примеру (регистр первой буквы имени статьи в данном случае неважен): 

    <s>http://ru.tkabber.jabe.ru/index.php/pages\#fonts</s>
    http://ru.tkabber.jabe.ru/index.php/Fonts

#### <a id="beginners"></a>  beginners 

[beginners](Beginners.md) \#beginners → [Начинающим](Начинающим.md) 

#### <a id="color-pics"></a>  color-pics 

[color-pics](Color-pics.md) \#color-pics → [Цветовые темы и пиктограммы](Цветовые_темы_и_пиктограммы.md) 

#### <a id="dist"></a>  dist 

[dist](Dist.md) \#dist → [Дистрибутивы, которые мы выбираем](Дистрибутивы__которые_мы_выбираем.md) 

#### <a id="emoticons"></a>  emoticons 

[emoticons](Emoticons.md) \#emoticons → [Смайлики и аватары](Смайлики_и_аватары.md) 

#### <a id="FAQ"></a>  FAQ 

[faq](Faq.md) \#FAQ → [Ткаббер ЧаВо](Ткаббер_ЧаВо.md) 

#### <a id="FAQ-appearance-sound"></a>  FAQ-appearance-sound 

[faq-appearance-sound](Faq-appearance-sound.md) \#FAQ-appearance-sound → [Ткаббер ЧаВо/Внешний вид и звук](Ткаббер_ЧаВо/Внешний_вид_и_звук.md) 

#### <a id="FAQ-glitches"></a>  FAQ-glitches 

[faq-glitches](Faq-glitches.md) \#FAQ-glitches → [Ткаббер ЧаВо/Глюки](Ткаббер_ЧаВо/Глюки.md) 

#### <a id="FAQ-howto"></a>  FAQ-howto 

[faq-howto](Faq-howto.md) \#FAQ-howto → [Ткаббер ЧаВо/Как мне...?](Ткаббер_ЧаВо/Как_мне..._.md) 

#### <a id="FAQ-miscellanea"></a>  FAQ-miscellanea 

[faq-misc](Faq-misc.md) \#FAQ-misc → [Ткаббер ЧаВо/Разное](Ткаббер_ЧаВо/Разное.md) 

#### <a id="filetransfer"></a>  filetransfer 

[filetransfer](Filetransfer.md) \#filetransfer → [Пересылка файлов: теория](Пересылка_файлов__теория.md) 

#### <a id="fonts"></a>  fonts 

[fonts](Fonts.md) \#fonts → [Пуско-наладка шрифтов в Ткаббере](Шрифты.md) 

#### <a id="gates"></a>  gates 

[gates](Gates.md) \#gates → [Гейты во вражеские сети](Гейты_во_вражеские_сети.md) 

#### <a id="gtalk"></a>  gtalk 

[gtalk](Gtalk.md) \#gtalk → [Google Talk](Google_Talk.md) 

#### <a id="login"></a>  login 

[login](Login.md) \#login → [Между офлайном и онлайном](Между_офлайном_и_онлайном.md) 

#### <a id="mrim-spam"></a>  mrim-spam 

[mrim-spam](Mrim-spam.md) \#mrim-spam → [Блокировка MRIM-спама](Блокировка_MRIM-спама.md) 

#### <a id="plugins"></a>  plugins 

[plugins](Plugins.md) \#plugins → [Плагины](Плагины.md) 

#### <a id="patches"></a>  patches 

[patches](Patches.md) \#patches → [Патчи](Патчи.md) 

#### <a id="remote-control"></a>  remote-control 

[remote-control](Remote-control.md) \#remote-control → [Удалённое управление с помощью send](Удалённое_управление_с_помощью_send.md) 

#### <a id="sound"></a>  sound 

[sound](Sound.md) \#sound → [Проблемы со звуком](Проблемы_со_звуком.md) 

#### <a id="sound_themes"></a>  sound themes 

[sound-themes](Sound-themes.md) \#sound → [Звуковые схемы](Звуковые_схемы.md) 

#### <a id="todo"></a>  todo 

[todo](Todo.md) \#todo → [Планы на будущее](Планы_на_будущее.md) 

#### <a id="topic"></a>  topic 

[topic](Topic.md) \#topic → [Ну очень развёрнутый топик конференции `tkabber@conference.jabber.ru`](Остров_посланных_на....md) 

#### <a id="traffic"></a>  traffic 

[traffic](Traffic.md) \#traffic → [Low traffic HOWTO](Low_traffic_HOWTO.md) 

#### <a id="tuning"></a>  tuning 

[tuning](Tuning.md) \#tuning → [Настройка Ткаббера: азы и глубже](Настройка_Ткаббера__азы_и_глубже.md) 

#### <a id="tweaks"></a>  tweaks 

[tweaks](Tweaks.md) \#tweaks → [Нетривиальные настройки](Нетривиальные_настройки.md) 

#### <a id="win-howto"></a>  win-howto 

[win-howto](Win-howto.md) \#win-howto → [Tkabber Windows Mini HOWTO](Tkabber_Windows_Mini_HOWTO.md) 

#### <a id="x-ttf"></a>  x-ttf 

[x-ttf](X-ttf.md) \#x-ttf → [Проблемы X Window и TTF](Проблемы_X_Window_и_TTF.md) 


Changes to wiki/ru/SVN_disclaimer.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20






21
22
23


24
25
26
27
28
29
30

31
32
33

34
35
36
37

38
39
40
41

42
43
44

45
46
47
48



49
50
51
52



53
54

55
56
57
58
59
60
61
62
63
64




65
66

67
68

69
70
71
72
73
74
75
76
77

78
79
80
81

82
83
84
85
86
87
88
89

90
91
92
93


94
95
96
97
98



99
100

101
102

103
104
105
106
107

108
109

110
111
112


113
114
115
116
117
118

119
120
121

122
123
124
125
126
127
128

129
130
131
132
133

134
135
136
137
138
139
140






141
142
143
144

145
146
147



148
149
150
151
152
153



154
155
156
157
158
159

160
161
162
163
164

165
166
167
168
169

170
171
172
173
174

175
176
177
178
179

180

181
182


183
184
185
186

187
188
189
190

191
192

193

194
195

196
197
198
199
200

201
202
203
204

205
206
207



208
209
210
211
212
213
214
215
216

217
218
219
220
221
222
223
224
225

226
227
228
229

230
231
232
233
234

235
236

237
238
239


240
241

242
243
244
245

246
247
248
249

250
251

252
253
254

255
256

257
258
259

260
261
262

263
264
265
266
267
268
269
270
271
272

273
274
275
276



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15






16
17
18
19
20
21
22


23
24





25

26

27

28




29




30

31

32

33


34
35
36
37



38
39
40
41

42





43




44
45
46
47
48

49
50

51







52

53


54

55






56

57

58


59
60





61
62
63


64
65

66



67

68
69

70
71


72
73




74

75

76

77





78

79

80
81
82

83


84




85
86
87
88
89
90
91
92
93

94
95


96
97
98



99


100
101
102


103
104
105

106

107
108
109

110
111
112
113


114

115
116
117

118
119
120
121
122

123
124
125


126
127
128
129
130

131
132
133
134

135
136
137
138

139
140

141
142
143
144
145

146


147

148
149


150
151
152







153

154



155
156
157
158
159

160


161

162



163

164
165

166



167
168


169




170




171


172

173

174
175

176



177



178








179

180
181



182
183
184

+













-
-
-
-
-
-
+
+
+
+
+
+

-
-
+
+
-
-
-
-
-

-
+
-

-
+
-
-
-
-
+
-
-
-
-
+
-

-
+
-

-
-
+
+
+

-
-
-
+
+
+

-
+
-
-
-
-
-

-
-
-
-
+
+
+
+

-
+

-
+
-
-
-
-
-
-
-

-
+
-
-

-
+
-
-
-
-
-
-

-
+
-

-
-
+
+
-
-
-
-
-
+
+
+
-
-
+

-
+
-
-
-

-
+

-
+

-
-
+
+
-
-
-
-

-
+
-

-
+
-
-
-
-
-

-
+
-



-
+
-
-

-
-
-
-
+
+
+
+
+
+



-
+

-
-
+
+
+
-
-
-

-
-
+
+
+
-
-



-
+
-



-
+



-
-
+
-



-
+




-
+

+
-
-
+
+



-
+



-
+


+
-
+

-
+




-
+
-
-

-
+

-
-
+
+
+
-
-
-
-
-
-
-

-
+
-
-
-





-
+
-
-

-
+
-
-
-

-
+

-
+
-
-
-
+
+
-
-
+
-
-
-
-
+
-
-
-
-
+
-
-
+
-

-
+

-
+
-
-
-
+
-
-
-
+
-
-
-
-
-
-
-
-

-
+

-
-
-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/SVN_disclaimer/index.html)


# SVN disclaimer

Материал из Tkabber Wiki.

[башорг](http://bash.org.ru/quote/392575)

## <a id="toc"></a>Содержание

* [1 Введение](#Введение)
* [2 "На переднем крае"](#На_переднем_крае)
* [3 Пререлизы](#Пререлизы)
* [4 В помощь начинающему тестеру](#В_помощь_начинающему_тестеру)
   * [4.1 Установка](#Установка)
      * [4.1.1 В Линукс](#В_Линукс)
      * [4.1.2 В Виндовс](#В_Виндовс)
   * [4.2 Первые шаги](#Первые_шаги)
   * [4.3 Как параллельно работать с обычной и альфа-версией Ткаббера](#Как_параллельно_работать_с_обычной_и_альфа-версией_Ткаббера)
   * [4.4 Как сообщать о баге](#Как_сообщать_о_баге)
 * [4.1 Установка](#Установка)
  * [4.1.1 В Линукс](#В_Линукс)
  * [4.1.2 В Виндовс](#В_Виндовс)
 * [4.2 Первые шаги](#Первые_шаги)
 * [4.3 Как параллельно работать с обычной и альфа-версией Ткаббера](#Как_параллельно_работать_с_обычной_и_альфа-версией_Ткаббера)
 * [4.4 Как сообщать о баге](#Как_сообщать_о_баге)

## <a id="Введение"></a>Введение
Увы, но у подавляющего большинства начинающих пользователей, пожелавших по какой-либо причине
# <a id="Введение"></a>Введение
Увы, но у подавляющего большинства начинающих пользователей, пожелавших по какой-либо причине "попробовать" "версию из репозитория" (а то и "пересесть" на неё), есть серьёзное непонимание того, что такое "альфа версия" применительно к разработке программного обеспечения и под чем вы "подписываетесь", начиная использовать версию, находящуюся в разработке. Сюда же относятся вопросы в стиле "как мне получить версию из SVN???", которые обычно остаются неотвеченными в комнате Ткаббера. 
"попробовать" "версию из репозитория" (а то и "пересесть" на неё), есть серьёзное непонимание
того, что такое "альфа версия" применительно к разработке программного обеспечения и под чем вы
"подписываетесь", начиная использовать версию, находящуюся в разработке. Сюда же относятся
вопросы в стиле "как мне получить версию из SVN???", которые обычно остаются неотвеченными
в комнате Ткаббера.

Итак, в начале — основа-основ: "зрелое" программное обеспечение обычно разрабатывается циклически,
Итак, в начале — основа-основ: "зрелое" программное обеспечение обычно разрабатывается циклически, путём повторения трёх этапов: 
путём повторения трёх этапов:

1. _Добавление новой функциональности_ (новых "фич"), улучшение старой. Самый главный и самый
1.  _Добавление новой функциональности_ (новых "фич"), улучшение старой. Самый главный и самый длинный период. Обычно про ПО, находящееся на этом этапе разработки, говорят, что оно "в альфа версии". Код в данном состоянии предназначен для "обкатки" только разработчиками и _очень_ опытными пользователями. 
   длинный период. Обычно про ПО, находящееся на этом этапе разработки, говорят, что оно "в альфа
   версии". Код в данном состоянии предназначен для "обкатки" только разработчиками и _очень_
   опытными пользователями.
1. _"Заморозка"_ следует после того, как ведущий ("мейнтейнер") проекта принял решение выпустить
1.  _"Заморозка"_ следует после того, как ведущий ("мейнтейнер") проекта принял решение выпустить следующую _стабильную_ версию. На этом этапе новая функциональность не добавляется (за исключением тривиальных вещей), только исправляются найденные ошибки. Обычно в этот период выпускается несколько "бета" версий, предназначенных для тестирования широкой публикой. 
   следующую _стабильную_ версию. На этом этапе новая функциональность не добавляется (за
   исключением тривиальных вещей), только исправляются найденные ошибки. Обычно в этот период
   выпускается несколько "бета" версий, предназначенных для тестирования широкой публикой.
1. _Выпуск._ После того, как ведущий проекта считает, что все очевидные ошибки найдены и
1.  _Выпуск._ После того, как ведущий проекта считает, что все очевидные ошибки найдены и исправлены, следует выпуск ("релиз") новой стабильной версии ПО. 
исправлены, следует выпуск ("релиз") новой стабильной версии ПО.

Применительно к Ткабберу, эти три стадии определяют три варианта "доступности" Ткаббера для
Применительно к Ткабберу, эти три стадии определяют три варианта "доступности" Ткаббера для использования: 
использования:

##### Разработка 
> Код официально доступен только через [репозиторий](http://tkabber.jabber.ru/svn).
 Разработка 

 Код официально доступен только через [репозиторий](http://tkabber.jabber.ru/svn). 

##### "Заморозка" и широкое тестирование 
> Код доступен в виде стандартных архивов с "бета версиями"; они содержат то, что обычно
  (не совсем верно) называется "исходниками Ткаббера".
 "Заморозка" и широкое тестирование 

 Код доступен в виде стандартных архивов с "бета версиями"; они содержат то, что обычно (не совсем верно) называется "исходниками Ткаббера". 

##### Релиз 
 Релиз 
> Код доступен в виде "архива с исходниками"; он является единственной "референсной"
  формой распространения Ткаббера. Однако разработчики Ткаббера обычно выпускают Ткаббер
  в виде специальных дистрибутивов, предназначенных для удобного использования Ткаббера
  на конкретных системах и пригодных даже для совершенно неопытных пользователей,
  например, [**старпаков и инсталляторов**](Дистрибутивы__которые_мы_выбираем.md#Прилавок).

## <a id="На_переднем_крае"></a>"На переднем крае"
Настало время поподробнее остановиться на "нестабильной версии", которая "живёт" в репозитории
[системы управления версиями](http://ru.wikipedia.org/wiki/Система управления версиями)
[Subversion](http://ru.wikipedia.org/wiki/Subversion).
 Код доступен в виде "архива с исходниками"; он является единственной "референсной" формой распространения Ткаббера. Однако разработчики Ткаббера обычно выпускают Ткаббер в виде специальных дистрибутивов, предназначенных для удобного использования Ткаббера на конкретных системах и пригодных даже для совершенно неопытных пользователей, например, [старпаков и инсталляторов](Дистрибутивы__которые_мы_выбираем.md#Прилавок). 

# <a id="На_переднем_крае"></a>"На переднем крае"
Настало время поподробнее остановиться на "нестабильной версии", которая "живёт" в репозитории [системы управления версиями](http://ru.wikipedia.org/wiki/!8AB5<0 C?@02;5=8O 25@A8O<8) [Subversion](http://ru.wikipedia.org/wiki/Subversion). 

Существует несколько мифов и непониманий, связанных с нестабильной версией Ткаббера.
Существует несколько мифов и непониманий, связанных с нестабильной версией Ткаббера. 

Во-первых, несмотря на то, что Ткаббер разрабатывается таким способом, что "голова"
Во-первых, несмотря на то, что Ткаббер разрабатывается таким способом, что "голова" репозитория обычно вполне работоспособна, иногда туда вносятся баги. Иногда это весьма серьёзные баги, которые вполне могут приводить к частичной потери трудоспособности Ткаббером до тех пор, пока баг не будет исправлен. Непонимание того, что "нестабильная" версия в любой момент "вдруг" может оказаться неработающей — одна из главных проблем начинающих. Причем проблемы могуть быть самыми разными. Например, в одночасье может быть изменена система хранения протоколов чата, а код для автоматической конвертации старого формата в новый ещё не будет написан. 
репозитория обычно вполне работоспособна, иногда туда вносятся баги. Иногда это весьма
серьёзные баги, которые вполне могут приводить к частичной потери трудоспособности
Ткаббером до тех пор, пока баг не будет исправлен. Непонимание того, что "нестабильная"
версия в любой момент "вдруг" может оказаться неработающей — одна из главных проблем
начинающих. Причем проблемы могуть быть самыми разными. Например, в одночасье может быть
изменена система хранения протоколов чата, а код для автоматической конвертации старого
формата в новый ещё не будет написан.

Посему совершенно неправильным является отношение к репозиторию просто как к неудобному
Посему совершенно неправильным является отношение к репозиторию просто как к неудобному (или, наоборот, удобному) способу получать новую функциональность в Ткаббере. Если что-то ломается, вы оказываетесь предоставлены сами себе. 
(или, наоборот, удобному) способу получать новую функциональность в Ткаббере. Если что-то
ломается, вы оказываетесь предоставлены сами себе.

Во-вторых, если вы не разработчик, и если вы, прочитав первый пункт, согласны быть
Во-вторых, если вы не разработчик, и если вы, прочитав первый пункт, согласны быть "подопытным кроликом" (а наличие таких пользователей на самом деле весьма важно для разработчиков), вы принимаете на себя ответственность<sup>1</sup> действовать по определённой схеме. Самое главное: вы _обязательно_ должны читать логи коммитов в репозиторий или файл ChangeLog — без этого вы становитесь мишенью для несуществующих багов: изменившуюся функциональность или её конфликт со старыми настройками, плагинами и чем угодно ещё вы воспринимаете как баг и тратите время разработчиков на ковыряния с вашей проблемой. 
"подопытным кроликом" (а наличие таких пользователей на самом деле весьма важно для
разработчиков), вы принимаете на себя ответственность<sup>1</sup> действовать по
определённой схеме. Самое главное: вы _обязательно_ должны читать логи коммитов в
репозиторий или файл **ChangeLog** — без этого вы становитесь мишенью для несуществующих багов:
изменившуюся функциональность или её конфликт со старыми настройками, плагинами и чем угодно
ещё вы воспринимаете как баг и тратите время разработчиков на ковыряния с вашей проблемой.

Итак, подытожим: чтобы следить за нестабильной версией и помогать разработчикам выявлять
Итак, подытожим: чтобы следить за нестабильной версией и помогать разработчикам выявлять ошибки, вы должны: 
ошибки, вы должны:

1. _Знать матчасть._ В нашем случае это означает:
   1. Понимание принципа работы систем управления версиями и принципа работы Subversion;
1.  _Знать матчасть._ В нашем случае это означает: 
 1.  Понимание принципа работы систем управления версиями и принципа работы Subversion; в частности, вы должны совершенно чётко представлять себе, что происходит, когда вы делаете svn update и что означают сообщения клиента в ходе выполнения этой операции. 
      в частности, вы должны совершенно чётко представлять себе, что происходит, когда
      вы делаете **svn update** и что означают сообщения клиента в ходе выполнения этой операции.
   1. Умение "откатывать" версию вашего рабочего каталога назад, если вы наткнулись на баг
      в свежем коммите, который препятствует вашей нормальной работе с Ткаббером.
1. Читать логи изменений в обязательном порядке. Сопоставлять наблюдаемые вами
 1.  Умение "откатывать" версию вашего рабочего каталога назад, если вы наткнулись на баг в свежем коммите, который препятствует вашей нормальной работе с Ткаббером. 
 
1.  Читать логи изменений в обязательном порядке. Сопоставлять наблюдаемые вами изменения в работе, проблемы Ткаббера с этой информацией. 
   изменения в работе, проблемы Ткаббера с этой информацией.
1. Уметь сообщать о багах так, чтобы разработчикам было понятно, о чём идёт речь.
1.  Уметь сообщать о багах так, чтобы разработчикам было понятно, о чём идёт речь. 

Изучить матчасть поможет свободно доступная [книга по Subversion](http://svnbook.red-bean.com/)
Изучить матчасть поможет свободно доступная [книга по Subversion](http://svnbook.red-bean.com/) (переведённая, между прочим, на русский). Если же всё изложенное — не для вас, не мешайте разработчикам разрабатывать и "вкладывайтесь" в тестирование на другой стадии — на стадии "пререлиза", о которой рассказано ниже. 
(переведённая, между прочим, на русский). Если же всё изложенное — не для вас, не мешайте
разработчикам разрабатывать и "вкладывайтесь" в тестирование на другой стадии — на стадии
"пререлиза", о которой рассказано ниже.

![(!)](../images/Hammer.png) **Сделать:** Объяснить отсутствие "ночных билдов"
![(!)](../images/Hammer.png) **Сделать:** Объяснить отсутствие "ночных билдов" 

![(!)](../images/Hammer.png) **Сделать:** Объяснить почему Subversion, а не...
![(!)](../images/Hammer.png) **Сделать:** Объяснить почему Subversion, а не... 

## <a id="Пререлизы"></a>Пререлизы
Таковые бывают и у самого Ткаббера (обычно они называются "беты" и информация о них
# <a id="Пререлизы"></a>Пререлизы
Таковые бывают и у самого Ткаббера (обычно они называются "беты" и информация о них помещается как в новостях на [официальном сайте](http://tkabber.jabber.ru), так и в [списках рассылки](http://lists.jabber.ru/mailman/listinfo/tkabber-dev)), и у его дистрибутивов, которые собираются сразу после выхода релиза Ткаббера и затем обычно проходят стадию тестирования перед выпуском окончательных версий. 
помещается как в новостях на [официальном сайте](http://tkabber.jabber.ru), так и
в [списках рассылки](http://lists.jabber.ru/mailman/listinfo/tkabber-dev)), и у его
дистрибутивов, которые собираются сразу после выхода релиза Ткаббера и затем обычно
проходят стадию тестирования перед выпуском окончательных версий.

Беты, как правило, не содержат очевидных проблем, и их использование относительно
Беты, как правило, не содержат очевидных проблем, и их использование относительно безопасно для ваших нервов. 
безопасно для ваших нервов.

Тестирование пререлизных версий очень полезно для продукта. Имейте в виду, что проблемы
Тестирование пререлизных версий очень полезно для продукта. Имейте в виду, что проблемы в уже выпущенной стабильной версии свободного ПО — это проблемы, прежде всего, самих пользователей, так как за разработчиками редко стоит некая организация, способная организовать систематическое тестирование (при помощи оплаченной команды специалистов). Так что если вы хотите быть уверены, что стабильная версия будет работать так, как надо, тестируйте её бета-версии. 
в уже выпущенной стабильной версии свободного ПО — это проблемы, прежде всего, самих
пользователей, так как за разработчиками редко стоит некая организация, способная
организовать систематическое тестирование (при помощи оплаченной команды специалистов).
Так что если вы хотите быть уверены, что стабильная версия будет работать так, как надо,
тестируйте её бета-версии.

![(!)](../images/Hammer.png) **Сделать:** написать про необходимость иметь "каноническую"
![(!)](../images/Hammer.png) **Сделать:** написать про необходимость иметь "каноническую" инсталляцию для тестирования "исходников" 
инсталляцию для тестирования "исходников"

---

<sup>1</sup> Понятно, что в мире free software (и в мире проприетарного ПО, кстати, тоже)
<sup>1</sup> Понятно, что в мире free software (и в мире проприетарного ПО, кстати, тоже) никто никому ничего "по настоящему" не обязан и ничего не должен. Здесь мы имеем в виду чисто "социальные" и моральные обязательства, которые влечёт за собой участие в программном проекте. 
никто никому ничего "по настоящему" не обязан и ничего не должен. Здесь мы имеем в виду
чисто "социальные" и моральные обязательства, которые влечёт за собой участие в программном проекте.

## <a id="В_помощь_начинающему_тестеру"></a>В помощь начинающему тестеру
### <a id="Установка"></a>Установка
#### <a id="В_Линукс"></a>В Линукс
Установка в линуксе проблем вызвать не должна. В Дебиане это вообще проще простого:
# <a id="В_помощь_начинающему_тестеру"></a>В помощь начинающему тестеру
## <a id="Установка"></a>Установка

### <a id="В_Линукс"></a>В Линукс

Установка в линуксе проблем вызвать не должна. В Дебиане это вообще проще простого: 

    sudo apt-get install subversion subversion-tools

По желанию можно установить какой-нибудь графический front-end.
По желанию можно установить какой-нибудь графический front-end. 

#### <a id="В_Виндовс"></a>В Виндовс
Одним из самых популярных клиентов Subversion под Виндовс можно смело назвать
### <a id="В_Виндовс"></a>В Виндовс

Одним из самых популярных клиентов Subversion под Виндовс можно смело назвать [TortoiseSVN](http://tortoisesvn.tigris.org/). На странице скачивания можно найти как последнюю версию программы (32 и 64 бит), так и языковые пакеты. Русский пакет тоже присутствует, есть и мануал, пересказывать который здесь особого смысла нет. 
[TortoiseSVN](http://tortoisesvn.tigris.org/). На странице скачивания можно найти как
последнюю версию программы (32 и 64 бит), так и языковые пакеты. Русский пакет тоже
присутствует, есть и мануал, пересказывать который здесь особого смысла нет.

### <a id="Первые_шаги"></a>Первые шаги
Самый первый шаг, который нужно предпринять, чтобы начать тестирование альфа-версии,
## <a id="Первые_шаги"></a>Первые шаги

Самый первый шаг, который нужно предпринять, чтобы начать тестирование альфа-версии, [описан на официальном сайте Ткаббера](http://tkabber.jabber.ru/svn). Он сводится к скачиванию при помощи клиента SVN исходного кода Ткаббера куда-нибудь на жёсткий диск: 
[описан на официальном сайте Ткаббера](http://tkabber.jabber.ru/svn). Он сводится к
скачиванию при помощи клиента SVN исходного кода Ткаббера куда-нибудь на жёсткий диск:

    svn co http://svn.xmpp.ru/repos/tkabber/trunk/tkabber tkabber-svn

Эта команда скачает весь транк Ткаббера в каталог **tkabber-svn**, _который создастся в том
Эта команда скачает весь транк Ткаббера в каталог tkabber-svn, _который создастся в том месте, откуда вы её (команду) запускаете._ Если вам нужны плагины, можете скачать и их: 
месте, откуда вы её (команду) запускаете._ Если вам нужны плагины, можете скачать и их:

    svn co http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins tkabber-plugins-svn

Можно скачать и их, и Ткаббер одной командой:
Можно скачать и их, и Ткаббер одной командой: 

    svn co http://svn.xmpp.ru/repos/tkabber/trunk tkabber-svn

В этом случае внутри каталога **tkabber-svn** вы найдёте два других: **tkabber** и **tkabber-plugins**.
Если вам нужны неофициальные плагины, содержащиеся в соответствующем репозитории
В этом случае внутри каталога tkabber-svn вы найдёте два других: tkabber и tkabber-plugins. Если вам нужны неофициальные плагины, содержащиеся в соответствующем репозитории (там можно найти далеко не все плагины, описанные на этой вики), качайте их отсюда: 
(там можно найти далеко не все плагины, описанные на этой вики), качайте их отсюда:

    svn co https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins tkabber-3rd

Запуск тоже прост (предположим, Ткаббер установлен в **~/bin/tkabber-svn**):
Запуск тоже прост (предположим, Ткаббер установлен в ~/bin/tkabber-svn): 

    cd ~/bin/tkabber-svn
    ./tkabber.tcl

Ещё одна полезная команда — **update** 
Ещё одна полезная команда — 

 update 
> После скачивания Ткаббера нет нужды проделывать процедуру checkout (co) каждый раз.
  Достаточно зайти в каталог Ткаббера или его плагинов и набрать

 После скачивания Ткаббера нет нужды проделывать процедуру checkout (co) каждый раз. Достаточно зайти в каталог Ткаббера или его плагинов и набрать 

    svn update

Если вам нужно откатиться на какую-то конкретную ревизию, пишите что-нибудь вроде
Если вам нужно откатиться на какую-то конкретную ревизию, пишите что-нибудь вроде 

    svn update -r 1000

Для автоматизации обновления в Windows (при использовании TortoiseSVN) можно создать батник с таким содержанием:
Для автоматизации обновления в Windows (при использовании TortoiseSVN) можно создать батник с таким содержанием: 

    "C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe"/path:"c:\Program Files\TkabberSVN\" /command:update /closeonend:2
    
    "C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe"/path:"c:\Documents and Settings\User\Application Data\Tkabber\plugins\" /command:update /closeonend:2
    "C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe"/path:"c:\Documents and Settings\User\Application Data\Tkabber\plugins\" /command:update /closeonend:2 

Подробности использования этих двух основных команд можно узнать, запросив помощи, например:
Подробности использования этих двух основных команд можно узнать, запросив помощи, например: 

    svn help co
    svn help up

Первые шаги при использовании альфа-версии Ткаббера под виндами почти ничем не отличаются от
Первые шаги при использовании альфа-версии Ткаббера под виндами почти ничем не отличаются от линуксовых, разве что вместо набора (а то и копи-пейста) одной строчки вам придётся самостоятельно продираться сквозь дебри графического интерфейса или штудировать довольно объёмный мануал. 
линуксовых, разве что вместо набора (а то и копи-пейста) одной строчки вам придётся самостоятельно
продираться сквозь дебри графического интерфейса или штудировать довольно объёмный мануал.

![(!)](../images/Hammer.png) **Сделать:** Впрочем, если какой-нибудь доброволец разовьёт тему виндовс, возражений не будет.
![(!)](../images/Hammer.png) **Сделать:** Впрочем, если какой-нибудь доброволец разовьёт тему виндовс, возражений не будет. 

### <a id="Как_параллельно_работать_с_обычной_и_альфа-версией_Ткаббера"></a>Как параллельно работать с обычной и альфа-версией Ткаббера
Удобно иметь в системе установленную из репозиториев ОС стабильную версию Ткаббера, а каталог
## <a id="Как_параллельно_работать_с_обычной_и_альфа-версией_Ткаббера"></a>Как параллельно работать с обычной и альфа-версией Ткаббера

Удобно иметь в системе установленную из репозиториев ОС стабильную версию Ткаббера, а каталог с альфой забросить куда-нибудь к себе в домашний каталог (например, в ~/tkabber-svn — меньше геморроя с правами на запись в файлы, если потребуется или захочется что-нибудь допилить. Однако следует помнить, что в любом случае будут читаться рабочие конфигурационные файлы, лежащие в вашем домашнем каталоге: ~/.tkabber/config.tcl и ~/.tkabber/custom.tcl, а у разных версий Ткаббера могут быть разные идеи о доступных настройках, и потому совместно использовать одни и те же конфигурационные файлы сильно разными версиями Ткаббера может и не получиться. 
с альфой забросить куда-нибудь к себе в домашний каталог (например, в **~/tkabber-svn** — меньше
геморроя с правами на запись в файлы, если потребуется или захочется что-нибудь допилить.
Однако следует помнить, что в любом случае будут читаться рабочие конфигурационные файлы,
лежащие в вашем домашнем каталоге: **~/.tkabber/config.tcl** и **~/.tkabber/custom.tcl**,
а у разных версий Ткаббера могут быть разные идеи о доступных настройках, и потому совместно
использовать одни и те же конфигурационные файлы сильно разными версиями Ткаббера может
и не получиться.

Для решения этой проблемы рекомендуется заставить Ткаббер использовать другой каталог для
Для решения этой проблемы рекомендуется заставить Ткаббер использовать другой каталог для хранения настроек при помощи установки переменной окружения `TKABBER_HOME`: создайте отдельный каталог для настроек альфа-версии Ткаббера, например, ~/.tkabber-svn а скрипт запуска (например, ~/bin/tkabber-svn) сделайте таким: 
хранения настроек при помощи установки переменной окружения `TKABBER_HOME`: создайте
отдельный каталог для настроек альфа-версии Ткаббера, например, **~/.tkabber-svn** а скрипт
запуска (например, **~/bin/tkabber-svn**) сделайте таким:

    #!/bin/sh
    export TKABBER_HOME=~/.tkabber-svn
    exec wish ~/tkabber-svn/tkabber/tkabber.tcl "$@"

Теперь можно скопировать файлы конфигурации из **~/.tkabber** в **~/.tkabber-svn** и запускать
Теперь можно скопировать файлы конфигурации из ~/.tkabber в ~/.tkabber-svn и запускать альфа-версию как ~/bin/tkabber-svn (или просто tkabber-svn, если ~/bin находится у вас в переменной окружения `PATH`). 
альфа-версию как **~/bin/tkabber-svn** (или просто **tkabber-svn**, если **~/bin** находится
у вас в переменной окружения `PATH`).

Возможно, вы захотите, чтобы логи обе версии вели совместно (формат хранения логов меняется
Возможно, вы захотите, чтобы логи обе версии вели совместно (формат хранения логов меняется куда реже настроек). Для этого убедитесь, что переменные `::logger::options(logdir)` (группа настроек "Customize" → "Chat" → "Logging") показывают на один и тот же каталог. Ну, или можно создать симлинк ~/.tkabber-svn/logs → ~/.tkabber/logs. 
куда реже настроек). Для этого убедитесь, что переменные `::logger::options(logdir)` (группа
настроек "Customize" → "Chat" → "Logging") показывают на один и тот же каталог. Ну, или можно
создать симлинк **~/.tkabber-svn/logs** → **~/.tkabber/logs**.

### <a id="Как_сообщать_о_баге"></a>Как сообщать о баге
## <a id="Как_сообщать_о_баге"></a>Как сообщать о баге

*  Перво-наперво, как уже было посоветовано выше, внимательно прочитайте **ChangeLog**: возможно,
*  Перво-наперво, как уже было посоветовано выше, внимательно прочитайте ChangeLog: возможно, ваш баг — на самом деле фича :) 
   ваш баг — на самом деле фича :)
*  Обновитесь — вдруг проблему уже разрешили?
*  Сохраните лог ошибки, чтобы потом было чего предъявлять разработчикам (иначе в лучшем
*  Обновитесь — вдруг проблему уже разрешили? 
*  Сохраните лог ошибки, чтобы потом было чего предъявлять разработчикам (иначе в лучшем случае не поверят). 
   случае не поверят).
*  Иногда бывает нелишним сделать скриншот эпицентра. Вывесьте его на каком-нибудь
*  Иногда бывает нелишним сделать скриншот эпицентра. Вывесьте его на каком-нибудь публичном фотохостинге (например, [imageshack](http://imageshack.us) (обязательно копируйте самую последнюю ссылку на закачанную картинку из предложенных — она без рекламы) или [keep4u](http://www.keep4u.ru)), и не надо предлагать скинуть скрин в приват или закинуть на почту. 
   публичном фотохостинге (например, [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) — возможно, кто-то уже прочитал и ответил на ваш вопрос (те, кто в состоянии ответить, обычно читают логи и увидят его). Если ответа на вопрос не было, вежливо спросите, не появилось ли у кого идей по поводу вопроса такого-то. 
   принцип **"NATAJA**" (**N**ever **A**sk **T**o **A**sk, **J**ust **A**sk) должен
   исповедоваться неукоснительно: посетители конфы не сидят всё своё время перед
   компьютерами, а также живут в разных часовых поясах. Посему просто чётко и максимально
   подробно сформулируйте свой вопрос и ждите. Если ждать нет возможности, через некоторое
   время проверьте [логи конференции](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru)
   — возможно, кто-то уже прочитал и ответил на ваш вопрос (те, кто в состоянии ответить,
   обычно читают логи и увидят его). Если ответа на вопрос не было, вежливо спросите,
   не появилось ли у кого идей по поводу вопроса такого-то.

![(!)](../images/Hammer.png) **Сделать:** дописать, если чего не хватает
![(!)](../images/Hammer.png) **Сделать:** дописать, если чего не хватает 

![(!)](../images/Hammer.png) **Сделать:** вообще-то этот раздел нужно слить с соответствующим
куском "Острова посланных на..." и оформить в виде отдельной статейки с тупым названием
"Как правильно задавать вопросы" Согласен.
![(!)](../images/Hammer.png) **Сделать:** вообще-то этот раздел нужно слить с соответствующим куском "Острова посланных на..." и оформить в виде отдельной статейки с тупым названием "Как правильно задавать вопросы" Согласен. 


Changes to wiki/ru/Sandbox.md.

1

2
3
4
5

6
7
8
9
10

11
12
13

14
15
16
17
18
19
20
1
2
3
4
5

6
7
8
9
10

11
12
13

14
15
16
17
18
19
20
21

+



-
+




-
+


-
+







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Sandbox/index.html)


# Sandbox

Материал из Tkabber Wiki
Материал из Tkabber Wiki.

## <a id="toc"></a>Содержание

* [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 Шаблоны решают!](#Шаблоны_решают)
* [9 Тестовый кусок](#Тестовый_кусок)

29
30
31
32
33
34
35
36

37
38
39
40
41
42

43
44
45
46
47
48

49
50

51
52
53
54
55
56

57
58
59

60
61
62
63

64
65

66
67
68
69

70
71
72
73

74
75

76
77
78
79

80
81

82
83
84


85
86

87
88

89
90

91
92

93
94
95
96

97
98
99
100
101
102
103
104
105
106

107
108
109
110
111
112

113
114

115
116

117
118

119
120

121
122

123
124

125
126
127
128
129
130
131
132
133
134
135



136
137
138
139
140
141
142
143
144

145
146

147
148
149
150

151
152

153
154

155
156

157
158

159
160

161
162

163
164

165
166

167
168

169
170
171
172


173
174

175
176

177
178

179
180

181
182

183
184

185
186


30
31
32
33
34
35
36

37
38
39
40
41


42


43
44


45


46


47
48


49

50

51
52
53
54

55
56

57
58
59
60

61
62
63
64

65
66

67
68
69
70

71
72

73
74


75
76
77

78
79

80
81

82
83

84
85
86
87

88
89
90
91
92
93
94
95
96
97

98
99
100
101
102
103

104
105

106
107

108
109

110
111

112
113

114
115

116
117
118
119
120
121
122
123
124



125
126
127
128
129
130
131
132
133
134
135

136
137

138
139
140
141

142
143

144
145

146
147

148
149

150
151

152
153

154
155

156
157

158
159

160
161
162


163
164
165

166
167

168
169

170
171

172
173

174
175

176
177
178
179
180







-
+




-
-
+
-
-


-
-
+
-
-
+
-
-


-
-
+
-

-
+



-
+

-
+



-
+



-
+

-
+



-
+

-
+

-
-
+
+

-
+

-
+

-
+

-
+



-
+









-
+





-
+

-
+

-
+

-
+

-
+

-
+

-
+








-
-
-
+
+
+








-
+

-
+



-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+


-
-
+
+

-
+

-
+

-
+

-
+

-
+

-
+


+
+
    Maximum number of status messages to keep.
    If the history size reaches this threshold,\
    the oldest message will be deleted automatically\
    when a new one is recorded.

    Clear history

Перевод:
Перевод: 

### <a id="Ответ_Gebbа_Чемберлену"></a>Ответ Gebb'а Чемберлену

Описание плагина на английском я бы сделал такое.

This plugin keeps the history of avalability status messages entered manually in the
 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. 
status combobox and allows to select them from a drop-down list. The history is
preserved across restarts.

**Перевод.**

Настройки расширения Recent Status.
 Настройки расширения Recent Status.

Это расширение хранит историю статусных сообщений (описаний статуса), вручную
 Это расширение хранит историю статусных сообщений (описаний статуса), вручную установленных пользователем, и позволяет выбирать их из выпадающего списка. История сохраняется при перезапуске Ткаббера. 
установленных пользователем, и позволяет выбирать их из выпадающего списка.
История сохраняется при перезапуске Ткаббера.

Максимальное число хранимых сообщений.

Если размер истории достигает этого лимита, наиболее старое сообщение удаляется
 Если размер истории достигает этого лимита, наиболее старое сообщение удаляется при добавлении нового. 
при добавлении нового.

Очистить историю.
Очистить историю. 

## <a id="Разная_хрень"></a>Разная хрень

Текст с `vasya@jabber.org/Tkabber` тэгом **tt**.
Текст с `vasya@jabber.org/Tkabber` тэгом **tt**. 

Опция
Опция 

    ::options(suxx) rulez

конфигурации.
конфигурации. 

## <a id="Для_bigote"></a>Для bigote

Тут — Ваша правка!
Тут — Ваша правка! 

Правим-поправим, выправить не можем...
Правим-поправим, выправить не можем... 

### <a id="Батоны"></a>Батоны

\<span class="button">Ctrl-q\</span> → Ctrl-q
\<span class="button">Ctrl-q\</span> → Ctrl-q 

Дружат с пробелами и идущими следом знаками препинания.
Дружат с пробелами и идущими следом знаками препинания.  

*  хри-хри, хрю-хрю хря-хря и хрё-хрё.
*  хры-хры
*  хри-хри, хрю-хрю хря-хря и хрё-хрё. 
*  хры-хры 

А чтобы не наслаивались друг на друга батоны, стоящие на одной вертикали в соседних строчках, нужно разделять их пустой строкой:
А чтобы не наслаивались друг на друга батоны, стоящие на одной вертикали в соседних строчках, нужно разделять их пустой строкой: 

*  хри-хри
*  хри-хри 

*  хрюк-хрюк
*  хрюк-хрюк 

Не фонтан, но всё же...
Не фонтан, но всё же... 

## <a id="Для_kostix"></a>Для kostix

Тут — Ваша правка!
Тут — Ваша правка! 

    Control;

    Control+;

    Ctrl + ;

    Enter

Кнопка с `padding-left` и `padding-right`:
Кнопка с `padding-left` и `padding-right`: 

    Ctrl-q + верх/низ: Ctrl-q

## <a id="HREFs"></a>HREFs

\<a href="[mailto:some.user@nowhere.land](mailto:some.user@nowhere.land)">mail me\</a> \<a href="[xmpp:some.user@nowhere.land](xmpp:some.user@nowhere.land)">bug me\</a>
\<a href="[mailto:some.user@nowhere.land](mailto:some.user@nowhere.land)">mail me\</a> \<a href="[xmpp:some.user@nowhere.land](xmpp:some.user@nowhere.land)">bug me\</a> 

[mailto:vasya@gde.to](mailto:vasya@gde.to)
[mailto:vasya@gde.to](mailto:vasya@gde.to) 

[news:dejagnu.com](news:dejagnu.com)
[news:dejagnu.com](news:dejagnu.com) 

gopher:somebody.still.use.it
gopher:somebody.still.use.it 

[xmpp:petya@tam.zhe](xmpp:petya@tam.zhe)
[xmpp:petya@tam.zhe](xmpp:petya@tam.zhe) 

\<html> \<A HREF="[mailto:liam@htmlhelp.com](mailto:liam@htmlhelp.com)" TITLE="Feedback on HTML 4.0 Reference">liam@htmlhelp.com\</A> \</html>
\<html> \<A HREF="[mailto:liam@htmlhelp.com](mailto:liam@htmlhelp.com)" TITLE="Feedback on HTML 4.0 Reference">liam@htmlhelp.com\</A> \</html> 

[shurik](xmpp:vasya@cool.de)
[shurik](xmpp:vasya@cool.de) 

## <a id="быки"></a>быки

    proc a b {
      puts ouch!
      • • •
      puts {some code}
      puts heh

      · · · · ·

      
      · · · · · 
      
      puts suxx
      puts text
      . . . . . .
      puts yo!
    }

## <a id="Комментарии_в_коде_страницы"></a>Комментарии в коде страницы

Начало
Начало 

Конец
 Конец 

## <a id="Шаблоны_решают"></a>Шаблоны решают!

Цитата обработана шаблоном ["quote"](Шаблон_Quote.md). Обратите внимание, что для корректного переноса строк необходимо втыкать тег \<br> без отбивки пустой строкой.
Цитата обработана шаблоном ["quote"](Шаблон_Quote.md). Обратите внимание, что для корректного переноса строк необходимо втыкать тег \<br> без отбивки пустой строкой. 

[Шаблон:Fixme](Шаблон_Fixme.md)
[Шаблон:Fixme](Шаблон_Fixme.md) 

foo ![(?)](../images/Attention.png) **Поправьте меня:** это надо проверить! bar
foo ![(?)](../images/Attention.png) **Поправьте меня:** это надо проверить! bar 

[Шаблон:Todo](Шаблон_Todo.md)
[Шаблон:Todo](Шаблон_Todo.md) 

![(!)](../images/Hammer.png) **Сделать:** Внедрить эту фигню повсеместно.
![(!)](../images/Hammer.png) **Сделать:** Внедрить эту фигню повсеместно. 

[Шаблон:todo2](Шаблон_Todo2.md) — с Psi Wiki:
[Шаблон:todo2](Шаблон_Todo2.md) — с Psi Wiki: 

**TODO: ** И эта фигня должна быть везде!
**TODO: ** И эта фигня должна быть везде! 

["Клавиши клавиатуры"](Шаблон_Button.md)
["Клавиши клавиатуры"](Шаблон_Button.md) 

Ctrl-c will kill that boring task
Ctrl-c will kill that boring task 

[Предупреждающие таблички](Шаблон_Warn.md)
[Предупреждающие таблички](Шаблон_Warn.md) 

 ** Внимание! **

  Обязательно пользуйтесь шаблонами!
 
  Обязательно пользуйтесь шаблонами! 

[Пути к файлам](Шаблон_File.md)
[Пути к файлам](Шаблон_File.md) 

/dev/null
/dev/null 

C:\\Windows\\sralnik
C:\\Windows\\sralnik 

[Названия программ (\<b>\<tt>name\</tt>\</b>)](Шаблон_Program.md)
[Названия программ (\<b>\<tt>name\</tt>\</b>)](Шаблон_Program.md) 

**`wish`**
`wish` 

![(!)](../images/Hammer.png) **Сделать:** Это бы тоже не помешало повсеместно внедрить...
![(!)](../images/Hammer.png) **Сделать:** Это бы тоже не помешало повсеместно внедрить... 

## <a id="Тестовый_кусок"></a>Тестовый кусок


Changes to wiki/ru/Symlinks.md.

1
2

3
4
5

6
7

8
9

10
11
12
13
14

15
16

17
18

19
20
21
22
23
24



1
2
3
4
5

6
7

8
9

10



11

12
13

14


15






16
17
18


+


-
+

-
+

-
+
-
-
-

-
+

-
+
-
-
+
-
-
-
-
-
-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Symlinks/index.html)


# Symlinks

Материал из Tkabber Wiki
Материал из Tkabber Wiki.

![(!)](../images/Hammer.png) **Сделать:** написать что-нибудь про Unix
![(!)](../images/Hammer.png) **Сделать:** написать что-нибудь про Unix 

В Windows, _только_ на файловой системе [NTFS](http://en.wikipedia.org/wiki/NTFS) версии 3
В Windows, _только_ на файловой системе [NTFS](http://en.wikipedia.org/wiki/NTFS) версии 3 и выше (то есть начиная с Windows NT 5.0 и выше, что означает: "Windows 2000 и выше") можно делать аналог символических ссылок, но только на каталоги. Там они называются "directory junctions" и являются частным случаем механизма "reparse points". 
и выше (то есть начиная с Windows NT 5.0 и выше, что означает: "Windows 2000 и выше")
можно делать аналог символических ссылок, но только на каталоги. Там они называются
"directory junctions" и являются частным случаем механизма "reparse points".

Для создания "симлинков" на каталоги в Windows можно использовать:
Для создания "симлинков" на каталоги в Windows можно использовать: 

*  Утилиту [junction](http://www.microsoft.com/technet/sysinternals/Utilities/Junction.mspx)
*  Утилиту [junction](http://www.microsoft.com/technet/sysinternals/Utilities/Junction.mspx) от Марка Руссиновича. 
   от Марка Руссиновича.
*  Знаменитый [FAR](http://www.farmanager.com/) file manager умеет делать ссылки на NTFS;
*  Знаменитый [FAR](http://www.farmanager.com/) file manager умеет делать ссылки на NTFS; соответствующая команда прибита на комбинацию клавиш Alt-F6 и работает аналогично копированию каталога: то есть на одной панели вы переходите в каталог назначения (который будет содержать ссылку), на другой — ставите курсор на "линкуемый" каталог и "используете" на нём упомянутую команду. 
   соответствующая команда прибита на комбинацию клавиш **Alt-F6** и работает аналогично
   копированию каталога: то есть на одной панели вы переходите в каталог назначения
   (который будет содержать ссылку), на другой — ставите курсор на "линкуемый" каталог
   и "используете" на нём упомянутую команду.
*  Ворох других внешних утилит и средств, которые (вместе с теорией) описаны,
   например, [тут](http://shell-shocked.org/article.php?id=284).
*  Ворох других внешних утилит и средств, которые (вместе с теорией) описаны, например, [тут](http://shell-shocked.org/article.php?id=284). 


Changes to wiki/ru/Testimonials__Antimonials__And_Eternal_Questions.md.

1

2
3
4
5
6
7

8
9

10
11
12
13
14
15
16
17


18
19
20
21
22
23
24
25


26
27
28
29


30
31
32
33
34
35
36

37
38
39
40
41
42


43
44
45
46

47
48

49
50



1
2
3
4
5
6
7

8
9

10





11


12
13





14


15
16

17


18
19





20

21



22


23
24


25

26


27


28
29
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-м годом! :-)
Во-первых, с Новым 2010-м годом! :-) 

А во-вторых, вот что. За без малого восемь лет своей истории Ткаббер получил широкое признание
А во-вторых, вот что. За без малого восемь лет своей истории Ткаббер получил широкое признание в узком кругу более-менее известных лиц. Более того, автору сих строк доподлинно известно, что по меньшей мере десять девушек используют для общения Ткаббер. Давно пора предоставить слово пользователям и пользовательницам этого клиента, дабы узнать, что им в Ткаббере нравится, а что неплохо бы улучшить. Просим высказываться только тех, кто работал с Ткаббером хотя бы с неделю. Нам не нужны перепевки чужих мнений. 
в узком кругу более-менее известных лиц. Более того, автору сих строк доподлинно известно,
что по меньшей мере десять девушек используют для общения Ткаббер. Давно пора предоставить
слово пользователям и пользовательницам этого клиента, дабы узнать, что им в Ткаббере нравится,
а что неплохо бы улучшить. Просим высказываться только тех, кто работал с Ткаббером хотя бы с
неделю. Нам не нужны перепевки чужих мнений.

## <a id="Testimonials"></a>Testimonials
Тут идут положительные отзывы. Если вам есть что сказать хорошего про Ткаббер, про то, чем
# <a id="Testimonials"></a>Testimonials
Тут идут положительные отзывы. Если вам есть что сказать хорошего про Ткаббер, про то, чем он облегчил вашу жизнь, когда вы перешли на него с другого клиента, а может, чем он привлёк вас до такой степени, что вы и другие не стали пробовать, не стесняйтесь — либо зарегистрируйтесь и оставьте свой отзыв, либо зайдите к нам в конференцию и выскажите его там. Не бойтесь приводить сравнения с другими клиентами. У нас не пиар-агентство ;-) Мы стремимся к объективности через субъективные взгляды. 
он облегчил вашу жизнь, когда вы перешли на него с другого клиента, а может, чем он привлёк
вас до такой степени, что вы и другие не стали пробовать, не стесняйтесь — либо зарегистрируйтесь
и оставьте свой отзыв, либо зайдите к нам в конференцию и выскажите его там. Не бойтесь
приводить сравнения с другими клиентами. У нас не пиар-агентство ;-) Мы стремимся к объективности
через субъективные взгляды.

1. \<tihvin> ...настройки интуитивно понятны и на русском.
1. \<kapsh> Вот формат логов в ткабере мне понравился очень. plain text - самое Ъ, надоели
1.  \<tihvin> ...настройки интуитивно понятны и на русском. 
1.  \<kapsh> Вот формат логов в ткабере мне понравился очень. plain text - самое Ъ, надоели везде всякие sqlite и прочие говны. 
   везде всякие sqlite и прочие говны.

## <a id="Antimonials"></a>Antimonials
Это хитрое слово можно перевести с английского как "рвотное". Думаю, понятно, что здесь
# <a id="Antimonials"></a>Antimonials
Это хитрое слово можно перевести с английского как "рвотное". Думаю, понятно, что здесь будут собираться менее лестные отзывы о Ткаббере. Наверняка есть какие-то мелочи, которые затрудняют работу, сложны для понимания, а то и просто бесят. Если вы думаете, что какие-то фичи других клиентов очень бы пригодились Ткабберу, тоже можете писать здесь, но лучше сделать это в статье [Планы на будущее](Планы_на_будущее.md) (а здесь оставить ссылку на вопрос). Ну или опять же, можете зайти в конференцию и высказаться там. 
будут собираться менее лестные отзывы о Ткаббере. Наверняка есть какие-то мелочи, которые
затрудняют работу, сложны для понимания, а то и просто бесят. Если вы думаете, что какие-то
фичи других клиентов очень бы пригодились Ткабберу, тоже можете писать здесь, но лучше
сделать это в статье [**Планы на будущее**](Планы_на_будущее.md) (а здесь оставить ссылку
на вопрос). Ну или опять же, можете зайти в конференцию и высказаться там.

1. \<kapsh> tk - как оно выглядит, это ещё фигня, но другое дело что он себя ведёт не так,
1.  \<kapsh> tk - как оно выглядит, это ещё фигня, но другое дело что он себя ведёт не так, как другие тулкиты. Даже при вводе текста - скажем, я привык в гуе пользоваться ctrl-backspace, в tk оно не работает. И скорость ввода текста, как мне показалось, какая-то "другая". Как-то так %) 
   как другие тулкиты. Даже при вводе текста - скажем, я привык в гуе пользоваться ctrl-backspace,
   в tk оно не работает. И скорость ввода текста, как мне показалось, какая-то "другая".
   Как-то так %)

## <a id="Eternal_Questions"></a>Eternal Questions
А здесь мы попросим пользователей Ткаббера ответить на вековечный вопрос, мучающий умы
# <a id="Eternal_Questions"></a>Eternal Questions
А здесь мы попросим пользователей Ткаббера ответить на вековечный вопрос, мучающий умы аналитиков ЛОРа: почему же Ткаббер такой страшный? А если точнее, _считаете ли его страшным вы?_ Если да, то _почему продолжаете использовать его?_ 
аналитиков ЛОРа: почему же Ткаббер такой страшный? А если точнее, _считаете ли его страшным вы?_
Если да, то _почему продолжаете использовать его?_

1. \<SoulThreads> успешно пользовался когда-то, и даже нравилось (очень), только те,
1.  \<SoulThreads> успешно пользовался когда-то, и даже нравилось (очень), только те, кто подходили к монитору, спрашивали - что это за бяка такая? 
   кто подходили к монитору, спрашивали - что это за бяка такая?
1. \<natalie> под виндой не страшный..не знаю, чо страшного в нём..я к нему тольк и
1.  \<natalie> под виндой не страшный..не знаю, чо страшного в нём..я к нему тольк и привыкла..больш никакой и не нравится с компа клиент 
   привыкла..больш никакой и не нравится с компа клиент
1. \<LOR/Methane> под вендой - няшка, под линаксом - немного хуже (виджеты олдскульные)
1.  \<LOR/Methane> под вендой - няшка, под линаксом - немного хуже (виджеты олдскульные) 


Changes to wiki/ru/Tk_Windows_keysyms_bug_explained.md.

1

2
3
4
5

6
7
8
9
10
11
12
13
14
15
16


17
18
19
20
21

22
23
24

25
26
27
28
29

30
31
32
33
34
35
36

37
38
39
40
41


42
43
44
45
46

47
48
49
50


51
52
53

54
55
56
57
58
59
60
61
62
63

64
65

66
67

68
69
70
71
72

73
74
75
76
77
78
79






80
81

82
83
84
85
86
87
88






89
90

91
92
93
94
95
96
97
98
99

100
101
102
103
104


105
106
107
108
109
110

111
112
113
114
115

116
117
118
119
120
121

122
123
124
125
126

127
128
129
130

131
132
133
134
135
136
137

138
139
140
141
142
143
144
145


146
147
148
149
150

151
152
153
154

155
156

157
158

159
160
161

162
163

164
165

166
167

168
169

170
171

172
173
174
175

176
177
178
179

180
181

182
183

184
185
186
187
188
189

190
191

192
193

194
195

196
197

198
199

200
201

202
203

204
205
206

207
208
209

210
211

212
213
214

215
216

217
218
219

220
221

222
223

224
225

226
227

228
229
230

231
232

233
234

235
236

237
238

239
240

241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
1
2
3
4
5

6
7
8
9
10
11
12
13
14
15


16
17



18

19

20

21



22

23


24
25
26
27

28


29


30
31

32
33
34

35

36


37
38

39

40

41
42
43
44
45
46
47
48

49
50

51
52

53



54

55
56






57
58
59
60
61
62
63

64
65






66
67
68
69
70
71
72

73
74
75
76
77
78
79
80
81

82


83


84
85




86

87



88

89




90

91



92

93


94

95





96

97





98


99
100



101

102
103
104
105

106
107

108
109

110

111

112
113

114
115

116
117

118
119

120
121

122


123

124


125

126
127

128
129

130




131

132
133

134
135

136
137

138
139

140
141

142
143

144
145

146

147

148

149

150
151

152

153

154
155

156

157

158
159

160
161

162
163

164
165

166

167

168
169

170
171

172
173

174
175

176
177

178

179

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.

## <a id="toc"></a>Содержание

* [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)

## <a id="Multiple_keymaps"></a>Multiple keymaps
Russian (and, in fact, most "non-Latin-1") users use several "keymaps" when typing.
# <a id="Multiple_keymaps"></a>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. 
"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
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. 
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
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. 
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
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: 
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
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) 
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 id="A_small_testbed"></a>A small testbed
Now let's create a small testbed that will serve as a demonstration tool for the
# <a id="A_small_testbed"></a>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: 
further explanations. In the freshly started **wish** I type:

    bind . <Key> { puts "%K - %A" }

i.e. when I press a key on the Tk root window I will get the keysym and the
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. 
corresponding character for that key printed in the console window.

## <a id="The_problem"></a>The problem
Let's start with the example which demonstrates why translation of keypresses
# <a id="The_problem"></a>The problem
Let's start with the example which demonstrates why translation of keypresses to keysyms is broken in Windows Tk. 
to keysyms is broken in Windows Tk.

At first I ensure I'm on the English keymap and type the standard
At first I ensure I'm on the English keymap and type the standard encantation — "qwerty". So I get 
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.
printed at the console. This is perfectly OK. 

Then I switch to the Russian keymap.
Then I switch to the Russian keymap. 

Now take a break and guess what scenarios should a user expect when typing our
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: 
"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):
*  They will be the same as on the English keymap (q, w, etc): 

        q - й
        w - ц
        e - у
        r - к
        t - е
        y - н
    q - й
    w - ц
    e - у
    r - к
    t - е
    y - н 

*  They will correspond to the characters, so they will be (as per the [keysyms] man page):
*  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 - н
    Cyrillic_shorti - й
    Cyrillic_tse - ц
    Cyrillic_u - у
    Cyrillic_ka - к
    Cyrillic_e - е
    Cyrillic_en - н

Now let's see at the actual output. It will be:
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
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). 
to some Latin-1 characters of code points >= 0x80 from any appropriate charset
(ISO8859-1 for instance or the 1st BMP from Unicode).

## <a id="The_explanation"></a>The explanation
Windows Tk uses two functions from the win\\tkWinKey.c file to translate the "virtual-key
# <a id="The_explanation"></a>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). 
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
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. 
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
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. 
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
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. 
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)
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. 
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
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. 
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)
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. 
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.

## <a id="Two_ways_to_fix_the_problem"></a>Two ways to fix the problem
Unfortunately, it appears that there's no one clean solution that would "just fix"
# <a id="Two_ways_to_fix_the_problem"></a>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. 
the current behaviour while keeping absolute backwards compatibility. Also the
outlined problem reveals somthing that I would qualify as a "blind spot" of Tk's
handling of keyboard events.

![(!)](../images/Hammer.png) **Сделать:** write up
![(!)](../images/Hammer.png) **Сделать:** write up 

---

A chat with Kevin Kenny (2008-04-10).
A chat with Kevin Kenny (2008-04-10). 

![(!)](../images/Hammer.png) **Сделать:** prettyfy
![(!)](../images/Hammer.png) **Сделать:** prettyfy 

[01:46]\<kostix> if I ever write a patch for Tk this will be fixes for how keysyms are implemented
[01:46]\<kostix> 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 :) 
in Windows. looks like only cyrillic speakers/writers care about these problems, so our happiness is in our hands :)

[01:47]\<dkf\_> it's not so much that only you care, as the rest of us find it hard to reproduce :/
[01:47]\<dkf\_> it's not so much that only you care, as the rest of us find it hard to reproduce :/ 

[01:47]\<dkf\_> (I don't have cyrillic keyboard support, or a cyrillic keyboard either)
[01:47]\<dkf\_> (I don't have cyrillic keyboard support, or a cyrillic keyboard either) 

[01:47]\<hat0> kostix, i've had no end of difficulty using cyrillic text in a tk application in windows
[01:47]\<hat0> kostix, i've had no end of difficulty using cyrillic text in a tk application in windows 

[01:47]\<hat0> i'll be happy to test that out or help if i can
[01:47]\<hat0> i'll be happy to test that out or help if i can 

[01:49]\<kostix> ok, "don't care" is not the right wording, I do understand this
[01:49]\<kostix> ok, "don't care" is not the right wording, I do understand this 

[01:51]\<kostix> also I think Tk on X also has some problems. for instance, you can't have
[01:51]\<kostix> 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 
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]\<kbk> kostix - "you can't have russian locale and write accented Latin-5 letters in Tk" ...
[01:57]\<kbk> 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. 
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]\<kbk> )
[01:57]\<kbk> ) 

[01:58]\* kbk just entered those letters, but isn't running in a Russian locale...
[01:58]\* kbk just entered those letters, but isn't running in a Russian locale... 

[02:00]\<kostix> kbk: to put it simple: I have a russian friend who lives in spain. so he
[02:00]\<kostix> 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. 
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]\<kostix> I can request from him some more strict description, if needed
[02:00]\<kostix> I can request from him some more strict description, if needed 

[02:01]\<kbk> Oh.  Ok.  I remember discussing this problem with you before.
[02:01]\<kbk> Oh.  Ok.  I remember discussing this problem with you before. 

[02:01]\<kostix> "it works" means he can write those funky characters with tildas, acute sign, etc ;)
[02:01]\<kostix> "it works" means he can write those funky characters with tildas, acute sign, etc ;) 

[02:01]\<kbk> Is there any application in which it works?
[02:01]\<kbk> Is there any application in which it works? 

[02:01]\<kostix> uh, any non Tk app (such as GTK), as I understand ;)
[02:01]\<kostix> uh, any non Tk app (such as GTK), as I understand ;) 

[02:02]\* dkf\_ wonders wtf is going on in that situation
[02:02]\* dkf\_ wonders wtf is going on in that situation 

[02:02]\<kbk> Really?  And he doesn't need to swap keyboard maps to do it?
[02:02]\<kbk> Really?  And he doesn't need to swap keyboard maps to do it? 

[02:03]\<kostix> dkf\_: I can say that on windows it's "just fundamentally wrong", so may be
[02:03]\<kostix> dkf\_: I can say that on windows it's "just fundamentally wrong", so may be X code also has some issues. 
X code also has some issues.

[02:03]\<kostix> kbk: I think I should stop now, ask that guy for exhaustive explanations and
[02:03]\<kostix> kbk: I think I should stop now, ask that guy for exhaustive explanations and file a bug report ;) 
file a bug report ;)

[02:04]\* kbk routinely switches between US and US-International keyboards, and \*that\* much works, at least.
[02:04]\* kbk routinely switches between US and US-International keyboards, and \*that\* much works, at least. 

[02:05]\<kostix> [http://ru.tkabber.jabe.ru/index.php/Tk\_Windows\_keysyms\_bug\_explained](../ru/Tk_Windows_keysyms_bug_explained.md) --
[02:05]\<kostix> [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 
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]\<kostix> unfortunately, the most interesting part isn't written :}
[02:06]\<kostix> unfortunately, the most interesting part isn't written :} 

[02:07]\<stu> How does one enable keyboard layouts & foreign chars in X? There seems
[02:07]\<stu> 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. 
to be more than one way ... this is all rather unclear to me.

[02:07]\<kostix> stu: indeed, there are about 4 or 5 ways to configure Xkb
[02:07]\<kostix> 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 isn't even sure if it's Xkb that requires configuring .. or something else. 

[02:08]\<kostix> 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:08]\<kostix> 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]\<kbk> kostix - OK, so...
[02:10]\<kbk> kostix - OK, so... 

[02:10]\<kostix> stu: I beleive you can have up to four active groups in Xkb + "modifier
[02:10]\<kostix> 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 
keys" in each which allow to temporatily switch from one group to another

[02:10]\<stu> thanks. what if I don't have an xorg.conf? it there a command-line utility to switch layouts?
[02:10]\<stu> thanks. what if I don't have an xorg.conf? it there a command-line utility to switch layouts? 

[02:11]\<stu> I don't have to use xkbcomp, do I?
[02:11]\<stu> I don't have to use xkbcomp, do I? 

[02:11]\<kbk> kostix - So %A is correct all the time, but the keysym is not?
[02:11]\<kbk> kostix - So %A is correct all the time, but the keysym is not? 

[02:11]\<kostix> kbk: yes, and this breaks bindings
[02:11]\<kostix> kbk: yes, and this breaks bindings 

[02:12]\<kostix> kbk: but in fact I beleive the problem is more fundamental and want to write even more text on it
[02:12]\<kostix> kbk: but in fact I beleive the problem is more fundamental and want to write even more text on it 

[02:13]\<kbk> And what you'd loke to see is that if someone presses Alt+й, the bindings will
[02:13]\<kbk> And what you'd loke to see is that if someone presses Alt+й, the bindings will see \<Alt-Cyrillic\_shorti> and not \<Alt-q>? [02:13]\<kbk> like to see... sheesh, I can't type. [02:15]\<kostix> 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]\<kbk> I'm not convinced that what you're asking for (make it \<Alt-q>) is either desirable or possible.  (But I concede that making it Alt-eacute is Just Plain Wrong...) [02:17]\<kostix> 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]\<kostix> kbk: sure [02:17]\<kostix> that's why it's complicated [02:17]\<kostix> I have a thought that it would be cool to provide both ways [02:17]\<kostix> may be by having somethin like \<Key-U+0463> [02:18]\<kostix> in bindings [02:18]\<kbk> kostix - But... Consider switching to a German keymap... [02:18]\<kostix> I've used it for about a year some time ago :) [02:18]\<kbk> In that case, I press the key marked 'Q' on my keyboard, and %A gives me 'a'... [02:19]\<kbk> Firing the 'Q' binding for the key that types 'a' would be, uhm, peculiar. [02:19]\<kostix> kbk: my (first) idea is simple: bindings are mostly for firing something up [02:20]\<kostix> 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]\<kostix> she doesn't care what symbol it would provide if used for entering text [02:21]\<kostix> so when I use event add \<\<EmoticonsPalette>> \<Alt-e> it should just work on any keymap [02:21]\<kbk> So for that case, you have a binding on \<Alt-Cyillic\_u>, another on \<Alt-e> and probably (as a workaround for the bug) \<Alt-oacute> as well? [02:21]\<kostix> but with menu accelerators the situation is reversed, as I've pointed out earlier :\\ [02:22]\<kostix> kbk: yes, except for cyrillic binding, they're nonexistent in Windows. and in X too [02:22]\<kostix> you just can't manage to type anything which would hit that binding [02:22]\<kostix> so we have alt-q + alt-oacute [02:23]\<kbk> 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]\<kostix> in fact we have some special remapping for some keys ;) [02:23]\<kostix> kbk: no, because that would require me to insert one special binding for every conceivable keymap in existence [02:24]\<kostix> i.e. it would be no better than currently [02:24]\<kostix> but just for such bindings like firing something up, like posting a menu or opening some window [02:25]\<kostix> which is bound to a physical key (I stress the word "physical" here) [02:25]\<kbk> It's not clear to me that there \*is\* a better way that doesn't totally break AZERTY keyboards. [02:25]\<kostix> kbk: i.e. in such case I would prefer to bind to scancode [02:25]\<kostix> for such bindings keymaps just get in the way [02:29]\<kostix> kbk: just to clear up a bit: in X pressing alt-q works the same way irrelevant to the currently active keymap. [02:30]\<kbk> 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]\<kbk> A French user wants that to be invoked by \<Alt-a> - and a Canadian user wants that to be invoked by \<Alt-a>. [02:31]\<kostix> I said this about binding that just do something, menu accelerators are \*completely\* different story, I mentioned this and agree on it [02:31]\<kostix> that's why I said the problem is more fundamental than it appears on the first glance [02:32]\<kbk> 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]\<kostix> yes, exactly [02:33]\<kostix> so there are two distinct cases about this problem [02:33]\<kbk> Both the French and Canadian users want \<Alt-a> to be &Annuler -- but the French user has the A key on the key that to the Canadian user is Q [02:35]\<kostix> 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]\<kostix> no matter whether I'm French or Africaans ;) [02:36]\<kbk> 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]\<kostix> kbk: I dunno. it appears that 99% users have L where it usually is on a "typical US QWERTY keyboard" [02:37]\<kostix> 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]\<kbk> 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]\<kostix> hm, really? I didn't know about this French feature [02:38]\<kostix> it appears more idiotic I thought it is :( [02:39]\<kbk> 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]\<kbk> 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]\<kostix> 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]\<kostix> kbk: so, for any non-ascii keymap I have to add yet another binding, you say? [02:41]\<kostix> or may be provide "national keyboard plugins"? [02:41]\<kbk> Either that, or localize bindings... [02:41]\<kbk> they're likely to be more mnemonic that way, anyway. [02:42]\<kbk> If an English speaker wants to have Control-C == "Close", then a French one might well want to have Control-F = "Fermer" [02:42]\<kostix> if we go this route this also means the same part is broken in X, just in some other way [02:44]\<kbk> In any case, generating a keysym of "aring" for "Cyrillic-ye" is crazy. [02:45]\<kostix> 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]\<kostix> and anyway it would be better for this problem to be discussed in more detail with more people, I think [02:46]\<kostix> before really implementing any fixes [02:47]\<kostix> 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]\<kbk> 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]\<kostix> when I have seen some code related to this, which I was likely about to break, I started to scratch my head [02:48]\<kostix> so I would like to talk to a CJK person on this (if the community has one) [02:48]\<kbk> Well... in Windows, when someone hits a dead-key sequence, generally the app doesn't see any keystroke except the last. [02:48]\<kostix> dead != compose, I think [02:49]\<kostix> on Japanese keyboards it switches alphabets, as I understand this [02:49]\<kostix> may be pickhq could help here -- he appears to know Japanese and is able to enter it [02:50]\<kbk> Right - but the 'compose' key is itself dead, AFAIK, or at the very least ignorable. [02:51]\<kbk> suchenwi is a fluent Chinese speaker and may very well know how Chinese keyboards work. [02:51]\<kostix> kbk: I think he just has another hack like "ruslish" in his sleeve :P [02:53]\<kbk> Well, yes, he does.  But he's lived in China and may well have insight into how real Chinese input methods work. [02:53]\<kbk> There are a lot of them... [02:53]\<kbk> [http://zsigri.tripod.com/fontboard/cjk/input.html](http://zsigri.tripod.com/fontboard/cjk/input.html) [03:02]\<kbk> 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\*. 
see \<Alt-Cyrillic\_shorti> and not \<Alt-q>?

[02:13]\<kbk> like to see... sheesh, I can't type.

[02:15]\<kostix> 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]\<kbk> I'm not convinced that what you're asking for (make it \<Alt-q>) is either
desirable or possible.  (But I concede that making it Alt-eacute is Just Plain Wrong...)

[02:17]\<kostix> 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]\<kostix> kbk: sure

[02:17]\<kostix> that's why it's complicated

[02:17]\<kostix> I have a thought that it would be cool to provide both ways

[02:17]\<kostix> may be by having somethin like \<Key-U+0463>

[02:18]\<kostix> in bindings

[02:18]\<kbk> kostix - But... Consider switching to a German keymap...

[02:18]\<kostix> I've used it for about a year some time ago :)

[02:18]\<kbk> In that case, I press the key marked 'Q' on my keyboard, and %A gives me 'a'...

[02:19]\<kbk> Firing the 'Q' binding for the key that types 'a' would be, uhm, peculiar.

[02:19]\<kostix> kbk: my (first) idea is simple: bindings are mostly for firing something up

[02:20]\<kostix> 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]\<kostix> she doesn't care what symbol it would provide if used for entering text

[02:21]\<kostix> so when I use event add \<\<EmoticonsPalette>> \<Alt-e> it should just
work on any keymap

[02:21]\<kbk> So for that case, you have a binding on \<Alt-Cyillic\_u>, another on \<Alt-e>
and probably (as a workaround for the bug) \<Alt-oacute> as well?

[02:21]\<kostix> but with menu accelerators the situation is reversed, as I've pointed
out earlier :\\

[02:22]\<kostix> kbk: yes, except for cyrillic binding, they're nonexistent in Windows.
and in X too

[02:22]\<kostix> you just can't manage to type anything which would hit that binding

[02:22]\<kostix> so we have alt-q + alt-oacute

[02:23]\<kbk> 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]\<kostix> in fact we have some special remapping for some keys ;)

[02:23]\<kostix> kbk: no, because that would require me to insert one special
binding for every conceivable keymap in existence

[02:24]\<kostix> i.e. it would be no better than currently

[02:24]\<kostix> but just for such bindings like firing something up, like posting a menu
or opening some window

[02:25]\<kostix> which is bound to a physical key (I stress the word "physical" here)

[02:25]\<kbk> It's not clear to me that there \*is\* a better way that doesn't totally
break AZERTY keyboards.

[02:25]\<kostix> kbk: i.e. in such case I would prefer to bind to scancode

[02:25]\<kostix> for such bindings keymaps just get in the way

[02:29]\<kostix> kbk: just to clear up a bit: in X pressing alt-q works the
same way irrelevant to the currently active keymap.

[02:30]\<kbk> 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]\<kbk> A French user wants that to be invoked by \<Alt-a> - and a Canadian
user wants that to be invoked by \<Alt-a>.

[02:31]\<kostix> I said this about binding that just do something, menu accelerators
are \*completely\* different story, I mentioned this and agree on it

[02:31]\<kostix> that's why I said the problem is more fundamental than it
appears on the first glance

[02:32]\<kbk> 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]\<kostix> yes, exactly

[02:33]\<kostix> so there are two distinct cases about this problem

[02:33]\<kbk> Both the French and Canadian users want \<Alt-a> to be &Annuler -- but
the French user has the A key on the key that to the Canadian user is Q

[02:35]\<kostix> 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]\<kostix> no matter whether I'm French or Africaans ;)

[02:36]\<kbk> 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]\<kostix> kbk: I dunno. it appears that 99% users have L where it usually
is on a "typical US QWERTY keyboard"

[02:37]\<kostix> 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]\<kbk> 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]\<kostix> hm, really? I didn't know about this French feature

[02:38]\<kostix> it appears more idiotic I thought it is :(

[02:39]\<kbk> 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]\<kbk> 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]\<kostix> 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]\<kostix> kbk: so, for any non-ascii keymap I have to add yet another
binding, you say?

[02:41]\<kostix> or may be provide "national keyboard plugins"?

[02:41]\<kbk> Either that, or localize bindings...

[02:41]\<kbk> they're likely to be more mnemonic that way, anyway.

[02:42]\<kbk> If an English speaker wants to have Control-C == "Close",
then a French one might well want to have Control-F = "Fermer"

[02:42]\<kostix> if we go this route this also means the same part is broken
in X, just in some other way

[02:44]\<kbk> In any case, generating a keysym of "aring" for "Cyrillic-ye" is crazy.

[02:45]\<kostix> 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]\<kostix> and anyway it would be better for this problem to be discussed in
more detail with more people, I think

[02:46]\<kostix> before really implementing any fixes

[02:47]\<kostix> 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]\<kbk> 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]\<kostix> when I have seen some code related to this, which I was likely
about to break, I started to scratch my head

[02:48]\<kostix> so I would like to talk to a CJK person on this (if the
community has one)

[02:48]\<kbk> Well... in Windows, when someone hits a dead-key sequence, generally
the app doesn't see any keystroke except the last.

[02:48]\<kostix> dead != compose, I think

[02:49]\<kostix> on Japanese keyboards it switches alphabets, as I understand this

[02:49]\<kostix> may be pickhq could help here -- he appears to know Japanese and is
able to enter it

[02:50]\<kbk> Right - but the 'compose' key is itself dead, AFAIK, or at the very least ignorable.

[02:51]\<kbk> suchenwi is a fluent Chinese speaker and may very well know how Chinese keyboards work.

[02:51]\<kostix> kbk: I think he just has another hack like "ruslish" in his sleeve :P

[02:53]\<kbk> Well, yes, he does.  But he's lived in China and may well have insight into
how real Chinese input methods work.

[02:53]\<kbk> There are a lot of them...

[02:53]\<kbk> [http://zsigri.tripod.com/fontboard/cjk/input.html](http://zsigri.tripod.com/fontboard/cjk/input.html)

[03:02]\<kbk> 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\*.

Changes to wiki/ru/Tkabber.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31






















32
33
34
35
36
37
38






39
40
41
42
43
44





45
46
47


48
49

50
51

52
53
54
55
56




57
58

59
60
61


62
63

64
65
66

67
68

69
70
71
72
73

74
75

76
77
78

79
80

81
82

83
84
85
86

87
88
89
90

91
92

93
94
95

96
97
98
99



100
101

102
103
104
105

106
107

108
109
110

111
112
113
114

115
116

117
118

119
120

121
122
123
124
125
126
127
128
129
130
131










132
133

134
135
136
137
138




139
140
141


142
143

144
145

146
147
148
149
150




151
152

153
154

155
156

157
158

159
160

161
162
163


164
165
166

167
168

169
170

171
172

173
174

175
176

177
178

179
180

181
182
183
184



185
186

187
188
189


190
191
192
193
194
195
196
197
198
199
200
201
202
203













204
205

206
207

208
209

210
211
212
213
214




215
216

217
218

219
220

221
222
223
224
225

226
227

228
229

230
231
232


233
234

235
236
237
238
239
240

241
242

243
244

245
246
247
248
249
250

251
252

253
254
255

256
257

258
259
260
261
262
263




264

265
266
267
268
269
270
271
272
273

274
275
276

277
278
279
280
281

282
283

284
285
286
287
288

289
290

291
292

293
294
295
296
297
298

299
300

301
302
303


304
305

306
307

308
309

310
311



1
2
3
4
5
6
7
8
9
10






















11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33






34
35
36
37
38
39
40





41
42
43
44
45
46


47
48
49

50
51

52
53




54
55
56
57
58

59
60


61
62
63

64

65

66
67

68



69

70
71

72

73

74
75

76
77

78


79

80


81

82
83

84

85

86
87



88
89
90
91

92


93

94
95

96

97

98


99

100
101

102
103

104
105

106
107










108
109
110
111
112
113
114
115
116
117
118

119
120




121
122
123
124



125
126


127
128

129
130




131
132
133
134
135

136
137

138
139

140
141

142
143

144
145


146
147

148

149
150

151
152

153
154

155
156

157
158

159
160

161
162

163
164



165
166
167
168

169
170


171
172














173
174
175
176
177
178
179
180
181
182
183
184
185
186

187
188

189
190

191
192




193
194
195
196
197

198
199

200


201



202

203
204

205
206

207
208


209
210
211

212




213

214
215

216


217




218

219
220

221

222

223
224

225






226
227
228
229

230
231








232

233

234



235

236
237

238



239

240
241

242
243

244




245

246
247

248
249


250
251
252

253
254

255
256

257
258

259
260
261

+








-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
+
+
+
+
+
+

-
-
-
-
-
+
+
+
+
+

-
-
+
+

-
+

-
+

-
-
-
-
+
+
+
+

-
+

-
-
+
+

-
+
-

-
+

-
+
-
-
-

-
+

-
+
-

-
+

-
+

-
+
-
-

-
+
-
-

-
+

-
+
-

-
+

-
-
-
+
+
+

-
+
-
-

-
+

-
+
-

-
+
-
-

-
+

-
+

-
+

-
+

-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+

-
+

-
-
-
-
+
+
+
+
-
-
-
+
+
-
-
+

-
+

-
-
-
-
+
+
+
+

-
+

-
+

-
+

-
+

-
+

-
-
+
+
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
-
-
+
+
+

-
+

-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+

-
+

-
+

-
-
-
-
+
+
+
+

-
+

-
+
-
-
+
-
-
-

-
+

-
+

-
+

-
-
+
+

-
+
-
-
-
-

-
+

-
+
-
-
+
-
-
-
-

-
+

-
+
-

-
+

-
+
-
-
-
-
-
-
+
+
+
+
-
+

-
-
-
-
-
-
-
-
+
-

-
+
-
-
-

-
+

-
+
-
-
-

-
+

-
+

-
+
-
-
-
-

-
+

-
+

-
-
+
+

-
+

-
+

-
+

-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Tkabber/index.html)


# Tkabber

Материал из Tkabber Wiki.

## <a id="toc"></a>Содержание

* [1 Может](#Может)
   * [1.1 Соединение с сервером и логин](#Соединение_с_сервером_и_логин)
      * [1.1.1 Типы соединений с сервером](#Типы_соединений_с_сервером)
      * [1.1.2 Прокси](#Прокси)
      * [1.1.3 (Авто)определение параметров соединения](#Автоопределение_параметров_соединения)
      * [1.1.4 Логин/автологин](#Логин_автологин)
      * [1.1.5 Мультилогин](#Мультилогин)
   * [1.2 Browse/Discovery](#Browse_Discovery)
   * [1.3 Обмен сообщениями (messaging)](#Обмен_сообщениями_messaging)
      * [1.3.1 Чат](#Чат)
      * [1.3.2 Групповой чат и MUC](#Групповой_чат_и_MUC)
   * [1.4 Присутствие (presence)](#Присутствие_presence)
   * [1.5 Info/Query (IQ)](#Info_Query_IQ)
   * [1.6 Privacy](#Privacy)
   * [1.7 Передача файлов](#Передача_файлов)
   * [1.8 Publish/Subscribe (pubsub)](#Publish_Subscribe_pubsub)
   * [1.9 Интерфейс](#Интерфейс)
   * [1.10 Список контактов (ростер)](#Список_контактов_ростер)
   * [1.11 Смайлики AKA emoticons](#Смайлики_AKA_emoticons)
   * [1.12 История](#История)
   * [1.13 Стандартные плагины](#Стандартные_плагины)
   * [1.14 Расширяемость](#Расширяемость)
   * [1.15 Управляемость](#Управляемость)
 * [1.1 Соединение с сервером и логин](#Соединение_с_сервером_и_логин)
  * [1.1.1 Типы соединений с сервером](#Типы_соединений_с_сервером)
  * [1.1.2 Прокси](#Прокси)
  * [1.1.3 (Авто)определение параметров соединения](#Автоопределение_параметров_соединения)
  * [1.1.4 Логин/автологин](#Логин_автологин)
  * [1.1.5 Мультилогин](#Мультилогин)
 * [1.2 Browse/Discovery](#Browse_Discovery)
 * [1.3 Обмен сообщениями (messaging)](#Обмен_сообщениями_messaging)
  * [1.3.1 Чат](#Чат)
  * [1.3.2 Групповой чат и MUC](#Групповой_чат_и_MUC)
 * [1.4 Присутствие (presence)](#Присутствие_presence)
 * [1.5 Info/Query (IQ)](#Info_Query_IQ)
 * [1.6 Privacy](#Privacy)
 * [1.7 Передача файлов](#Передача_файлов)
 * [1.8 Publish/Subscribe (pubsub)](#Publish_Subscribe_pubsub)
 * [1.9 Интерфейс](#Интерфейс)
 * [1.10 Список контактов (ростер)](#Список_контактов_ростер)
 * [1.11 Смайлики AKA emoticons](#Смайлики_AKA_emoticons)
 * [1.12 История](#История)
 * [1.13 Стандартные плагины](#Стандартные_плагины)
 * [1.14 Расширяемость](#Расширяемость)
 * [1.15 Управляемость](#Управляемость)
* [2 Не может](#Не_может)
   * [2.1 SO\_KEEPALIVE на сокете](#SO_KEEPALIVE_на_сокете)
   * [2.2 Сжатие потока при использовании SSL](#Сжатие_потока_при_использовании_SSL)
   * [2.3 "Лёгкий в использовании" мультилогин](#Лёгкий_в_использовании_мультилогин)
   * [2.4 Voice IP](#Voice_IP)
   * [2.5 Хистори на сервере / сжатие логов](#Хистори_на_сервере___сжатие_логов)
   * [2.6 Поддержка PGP под Windows](#Поддержка_PGP_под_Windows)
 * [2.1 SO\_KEEPALIVE на сокете](#SO_KEEPALIVE_на_сокете)
 * [2.2 Сжатие потока при использовании SSL](#Сжатие_потока_при_использовании_SSL)
 * [2.3 "Лёгкий в использовании" мультилогин](#Лёгкий_в_использовании_мультилогин)
 * [2.4 Voice IP](#Voice_IP)
 * [2.5 Хистори на сервере / сжатие логов](#Хистори_на_сервере___сжатие_логов)
 * [2.6 Поддержка PGP под Windows](#Поддержка_PGP_под_Windows)
* [3 "Слабые места"](#Слабые_места)
   * [3.1 Ресурсоёмкость и скорость работы](#Ресурсоёмкость_и_скорость_работы)
   * [3.2 Поддержка PGP](#Поддержка_PGP)
   * [3.3 Доступность требуемых модулей Tcl/Tk](#Доступность_требуемых_модулей_Tcl_Tk)
   * [3.4 ОС-зависимые баги](#ОС-зависимые_баги)
   * [3.5 Поддержка ОС-зависимых особенностей](#Поддержка_ОС-зависимых_особенностей)
 * [3.1 Ресурсоёмкость и скорость работы](#Ресурсоёмкость_и_скорость_работы)
 * [3.2 Поддержка PGP](#Поддержка_PGP)
 * [3.3 Доступность требуемых модулей Tcl/Tk](#Доступность_требуемых_модулей_Tcl_Tk)
 * [3.4 ОС-зависимые баги](#ОС-зависимые_баги)
 * [3.5 Поддержка ОС-зависимых особенностей](#Поддержка_ОС-зависимых_особенностей)

## <a id="Может"></a>Может
### <a id="Соединение_с_сервером_и_логин"></a>Соединение с сервером и логин
# <a id="Может"></a>Может
## <a id="Соединение_с_сервером_и_логин"></a>Соединение с сервером и логин

#### <a id="Типы_соединений_с_сервером"></a>Типы соединений с сервером
### <a id="Типы_соединений_с_сервером"></a>Типы соединений с сервером

Поддерживаются следующие типы соединений:
Поддерживаются следующие типы соединений: 

*  plaintext (на порт 5222).
*  SSL (на порт 5223, "Старый SSL").
*  STARTTLS (на порт 5222).
*  HTTP poll (на порт 5280).
*  plaintext (на порт 5222). 
*  SSL (на порт 5223, "Старый SSL"). 
*  STARTTLS (на порт 5222). 
*  HTTP poll (на порт 5280). 

Возможны два вида аутентификации пользователя:
Возможны два вида аутентификации пользователя: 

*  обычный (plaintext)
*  SASL
*  обычный (plaintext) 
*  SASL 

Поддерживается сжатие потока (stream compression) только для plaintext соединений
Поддерживается сжатие потока (stream compression) только для plaintext соединений через пакет **ztcl**. Сжатие потока на SSL-соединениях не поддерживается (см. секцию "Не может"). 
через пакет **ztcl**. Сжатие потока на SSL-соединениях не поддерживается (см. секцию "Не может").

#### <a id="Прокси"></a>Прокси
### <a id="Прокси"></a>Прокси

Любое соединение может "ходить" через HTTP-прокси; любые соединения, кроме HTTP
Любое соединение может "ходить" через HTTP-прокси; любые соединения, кроме HTTP poll, требуют от прокси поддержки метода CONNECT на соответствующий порт. HTTP poll использует HTTP, то есть от прокси требуется только разрешение HTTP-запросов на соответствующий порт. 
poll, требуют от прокси поддержки метода CONNECT на соответствующий порт. HTTP
poll использует HTTP, то есть от прокси требуется только разрешение
HTTP-запросов на соответствующий порт.

На прокси поддерживаются типы авторизации basic и NTLM.
На прокси поддерживаются типы авторизации basic и NTLM. 

Имеется возможность поддерживать соединение через прокси путём периодической
Имеется возможность поддерживать соединение через прокси путём периодической посылки в выходной поток байта 0x20. 
посылки в выходной поток байта 0x20.

HTTPS и SOCKSx прокси в настоящее время не поддерживаются.
HTTPS и SOCKSx прокси в настоящее время не поддерживаются. 

#### <a id="Автоопределение_параметров_соединения"></a>(Авто)определение параметров соединения
### <a id="Автоопределение_параметров_соединения"></a>(Авто)определение параметров соединения

Возможно ручное указание хоста и порта для соединения. Также Ткаббер умеет
Возможно ручное указание хоста и порта для соединения. Также Ткаббер умеет запрашивать необходимые SRV или TXT записи в DNS для выяснения точных параметров подключения по доменной части JID'а пользователя. 
запрашивать необходимые SRV или TXT записи в DNS для выяснения точных
параметров подключения по доменной части JID'а пользователя.

Корректная работа с DNS требует достаточно свежей **tcllib**, а также — в
Корректная работа с DNS требует достаточно свежей **tcllib**, а также — в большинстве случаев — пакета **tcludp** для возможности выполнения DNS-запросов по протоколу UDP. 
большинстве случаев — пакета **tcludp** для возможности выполнения DNS-запросов
по протоколу UDP.

#### <a id="Логин_автологин"></a>Логин/автологин
### <a id="Логин_автологин"></a>Логин/автологин

Имеется удобная форма для изменения параметров логина. Все настройки логина
Имеется удобная форма для изменения параметров логина. Все настройки логина можно изменить через механизм Customize. 
можно изменить через механизм Customize.

Поддерживаются три варианта логина:
Поддерживаются три варианта логина: 

*  Показ формы логина при старте и ожидание действий пользователя.
*  Старт без показа формы логина и ожидание действий пользователя.
*  Автологин.
*  Показ формы логина при старте и ожидание действий пользователя. 
*  Старт без показа формы логина и ожидание действий пользователя. 
*  Автологин. 

Имеется поддержка "профилей" (или "профайлов", если угодно) логинов: в конфиге
Имеется поддержка "профилей" (или "профайлов", если угодно) логинов: в конфиге Ткаббера можно ввести произвольное количество независимых групп настроек логина и затем выбирать их в форме логина хоткеями Control+1 (первый профиль) и т.д. 
Ткаббера можно ввести произвольное количество независимых групп настроек логина
и затем выбирать их в форме логина хоткеями Control+1 (первый профиль) и т.д.

#### <a id="Мультилогин"></a>Мультилогин
### <a id="Мультилогин"></a>Мультилогин

"Мультилогин" (одновременная регистрация и работа с несколькими аккаунтами)
"Мультилогин" (одновременная регистрация и работа с несколькими аккаунтами) _официально_ считается нереализованным. 
_официально_ считается нереализованным.

На деле бо&#769;льшая часть кода ткаббера поддерживает одновременную  работу с
На деле бОльшая часть кода ткаббера поддерживает одновременную  работу с несколькими аккаунтами, и добиться такой работы в Ткаббере _можно,_ причём без особых усилий. 
несколькими аккаунтами, и добиться такой работы в Ткаббере _можно,_ причём без
особых усилий.

(Так же по этой теме см. ниже.)
(Так же по этой теме см. ниже.) 

### <a id="Browse_Discovery"></a>Browse/Discovery
## <a id="Browse_Discovery"></a>Browse/Discovery

### <a id="Обмен_сообщениями_messaging"></a>Обмен сообщениями (messaging)
## <a id="Обмен_сообщениями_messaging"></a>Обмен сообщениями (messaging)

Поддерживается:
Поддерживается: 

*  Обычные (normal) сообщения и чат.
*  Рендеринг XHTML-сообщений.
*  Обычные сообщения архивируются и доступны для просмотра через интерфейс, напоминающий читалку e-mail.
*  Хэдлайны (headlines) (и, в частности, поддержка RSS-сервисов). Возможно кэширование хэдлайнов.
*  Обработка урлов, смайлов и стайлкодов в тексте сообщений.
*  Обработка /me-сообщений.
*  Поддержка некоторых атрибутов сообщений, передаваемых в опциональном элементе \<x>.
*  Поддержка "хайлайтов" (цветовыделения заданных пользователем ключевых слов).
*  Подписывание любых сообщений (включая групчат) при помощи PGP.
*  Возможность выбора типа сообщения по умолчанию для исходящих сообщений (normal/chat).
*  Обычные (normal) сообщения и чат. 
*  Рендеринг XHTML-сообщений. 
*  Обычные сообщения архивируются и доступны для просмотра через интерфейс, напоминающий читалку e-mail. 
*  Хэдлайны (headlines) (и, в частности, поддержка RSS-сервисов). Возможно кэширование хэдлайнов. 
*  Обработка урлов, смайлов и стайлкодов в тексте сообщений. 
*  Обработка /me-сообщений. 
*  Поддержка некоторых атрибутов сообщений, передаваемых в опциональном элементе \<x>. 
*  Поддержка "хайлайтов" (цветовыделения заданных пользователем ключевых слов). 
*  Подписывание любых сообщений (включая групчат) при помощи PGP. 
*  Возможность выбора типа сообщения по умолчанию для исходящих сообщений (normal/chat). 

Для окон чата и групчата поддерживается:
Для окон чата и групчата поддерживается: 

*  Поиск (по Ctrl-S).
*  Закладки и перемещение по ним.
*  "Команды в стиле IRC" (/ban /kick /time /vcard /leave и т.д.) с автозавершением (completion) по Tab.
*  "Умная" обработка кликов мышкой в окне лога чата (клик на нике помещает его в поле ввода
*  Поиск (по Ctrl-S). 
*  Закладки и перемещение по ним. 
*  "Команды в стиле IRC" (/ban /kick /time /vcard /leave и т.д.) с автозавершением (completion) по Tab. 
*  "Умная" обработка кликов мышкой в окне лога чата (клик на нике помещает его в поле ввода чата, клик на URL'е запускает на нём браузер). 
   чата, клик на URL'е запускает на нём браузер).
*  Поддержка неограниченного undo/redo в поле ввода чата:
 *  Control-z (и Control-underscore в Unix, если включена опция `tk_strictMotif`)
*  Поддержка неограниченного undo/redo в поле ввода чата: 
 *  Control-z (и Control-underscore в Unix, если включена опция `tk_strictMotif`) отменяет последнее действие редактирования текста. 
    отменяет последнее действие редактирования текста.
 *  Control-Z (или Control-y в Windows) перевыполняет последнюю отменённую операцию редактирования.
 *  Control-Z (или Control-y в Windows) перевыполняет последнюю отменённую операцию редактирования. 

Недоработки/баги:
Недоработки/баги: 

*  Достаточно дубовый интерфейс обработки стандартных сообщений и элементов \<x>.
*  То же самое касается архива сообщений.
*  Невозможно удалять закладки.
*  Нет ограничения на максимальное число сообщений в окне чата/групчата.
*  Достаточно дубовый интерфейс обработки стандартных сообщений и элементов \<x>. 
*  То же самое касается архива сообщений. 
*  Невозможно удалять закладки. 
*  Нет ограничения на максимальное число сообщений в окне чата/групчата. 

(Работы по улучшению положения в этой области ведутся).
(Работы по улучшению положения в этой области ведутся). 

#### <a id="Чат"></a>Чат
### <a id="Чат"></a>Чат

Поддерживаются уведомления о состоянии хода беседы (chat state notifications).
Поддерживаются уведомления о состоянии хода беседы (chat state notifications). 

#### <a id="Групповой_чат_и_MUC"></a>Групповой чат и MUC
### <a id="Групповой_чат_и_MUC"></a>Групповой чат и MUC

Поддерживается:
Поддерживается: 

*  Автозавершение (completion) ников в комнате (по Tab).
*  Подробное меню с возможностью полного управления конфигурацией комнаты (кнопка
*  Автозавершение (completion) ников в комнате (по Tab). 
*  Подробное меню с возможностью полного управления конфигурацией комнаты (кнопка вызова меню замаскирована под метку "Тема"). 
вызова меню замаскирована под метку "Тема").

### <a id="Присутствие_presence"></a>Присутствие (presence)
## <a id="Присутствие_presence"></a>Присутствие (presence)

### <a id="Info_Query_IQ"></a>Info/Query (IQ)
## <a id="Info_Query_IQ"></a>Info/Query (IQ)

### <a id="Privacy"></a>Privacy
## <a id="Privacy"></a>Privacy

### <a id="Передача_файлов"></a>Передача файлов
## <a id="Передача_файлов"></a>Передача файлов

### <a id="Publish_Subscribe_pubsub"></a>Publish/Subscribe (pubsub)
## <a id="Publish_Subscribe_pubsub"></a>Publish/Subscribe (pubsub)

### <a id="Интерфейс"></a>Интерфейс
## <a id="Интерфейс"></a>Интерфейс

### <a id="Список_контактов_ростер"></a>Список контактов (ростер)
## <a id="Список_контактов_ростер"></a>Список контактов (ростер)

В ростер могут быть помещены:
В ростер могут быть помещены: 

*  Обычные контакты (с людьми).
*  Закладки на комнаты (groupchat, MUC).
*  Сервисы (АКА транспорты АКА гейты).
*  Обычные контакты (с людьми). 
*  Закладки на комнаты (groupchat, MUC). 
*  Сервисы (АКА транспорты АКА гейты). 

Поддерживается:
Поддерживается: 

*  Возможность произвольного переименования контактов.
*  Иконки транспортов для сервисов и обычных контактов с этих сервисах;
*  Возможность произвольного переименования контактов. 
*  Иконки транспортов для сервисов и обычных контактов с этих сервисах; тип сервисов узнаётся при помощи IQ-запросов. 
   тип сервисов узнаётся при помощи IQ-запросов.
*  Автовход в выбранные конференции из ростера.
*  Автологин на выбранные сервисы.
*  Drag'n'drop комнат из дискавери в ростер.
*  Приглашение контакта из ростера в комнату при помощи drag'n'drop (invitation).
*  Вложенные группы.
*  Перетаскивание мышкой контактов по ростеру.
*  "Склеивание" нескольких ресурсов одного контакта, находящихся в онлайне, в один.
*  Аннотации контактов (с показам в окне просмотра vCard'ов).
*  Экспорт ростера в текстовый файл и импорт оттуда.
*  Возможность послать список контактов из ростера другому контакту (send users).
*  Переключение между видимостью всех контактов или только находящихся в онлайне.
*  Возможность убрать/показать ростер (при работе в "tabbed" режиме) по хоткею Ctrl-R.
*  Тултипы (tooltips, balloon hints, всплывающие подсказки) с информацией о контакте.
*  Автовход в выбранные конференции из ростера. 
*  Автологин на выбранные сервисы. 
*  Drag'n'drop комнат из дискавери в ростер. 
*  Приглашение контакта из ростера в комнату при помощи drag'n'drop (invitation). 
*  Вложенные группы. 
*  Перетаскивание мышкой контактов по ростеру. 
*  "Склеивание" нескольких ресурсов одного контакта, находящихся в онлайне, в один. 
*  Аннотации контактов (с показам в окне просмотра vCard'ов). 
*  Экспорт ростера в текстовый файл и импорт оттуда. 
*  Возможность послать список контактов из ростера другому контакту (send users). 
*  Переключение между видимостью всех контактов или только находящихся в онлайне. 
*  Возможность убрать/показать ростер (при работе в "tabbed" режиме) по хоткею Ctrl-R. 
*  Тултипы (tooltips, balloon hints, всплывающие подсказки) с информацией о контакте. 

### <a id="Смайлики_AKA_emoticons"></a>Смайлики AKA emoticons
## <a id="Смайлики_AKA_emoticons"></a>Смайлики AKA emoticons

### <a id="История"></a>История
## <a id="История"></a>История

Поддерживается:
Поддерживается: 

*  Запись всех сообщений чатов и комнат в текстовые файлы; файлы истории именуются по JID'ам контактов/комнат.
*  Окно для просмотра истории общения в комнате/с контактом. Доступно в соответствующих контекстных меню.
*  В окне просмотра лога поддерживается поиск (по Ctrl-S).
*  Архивация лога при его открытии (перенос записей старше одного месяца в спец. подкаталог).
*  Запись всех сообщений чатов и комнат в текстовые файлы; файлы истории именуются по JID'ам контактов/комнат. 
*  Окно для просмотра истории общения в комнате/с контактом. Доступно в соответствующих контекстных меню. 
*  В окне просмотра лога поддерживается поиск (по Ctrl-S). 
*  Архивация лога при его открытии (перенос записей старше одного месяца в спец. подкаталог). 

Не поддерживается/баги:
Не поддерживается/баги: 

*  Пока что отсутствует возможность лёгкого навешивания собственных обработчиков на событие
*  Пока что отсутствует возможность лёгкого навешивания собственных обработчиков на событие "архивация лога" (далее читайте ниже в разделе "Не может"). 
   "архивация лога" (далее читайте ниже в разделе "Не может").
*  Ошибки времени выполнения при общении с идиотскими никами, содержащими символы, запрещённые
*  Ошибки времени выполнения при общении с идиотскими никами, содержащими символы, запрещённые для использования в именах файлов текущей ОС. Это — ошибки попытки открыть файл с именем, образованным из такого ника при общении с подобным ником в привате комнаты (в этом случае лог имеет имя `ROOMNAME_SERVERNAME_NICK`). Лечится временным отключением логов групчата. 
   для использования в именах файлов текущей ОС. Это — ошибки попытки открыть файл с именем,
   образованным из такого ника при общении с подобным ником в привате комнаты (в этом случае
   лог имеет имя `ROOMNAME_SERVERNAME_NICK`). Лечится временным отключением логов групчата.

### <a id="Стандартные_плагины"></a>Стандартные плагины
## <a id="Стандартные_плагины"></a>Стандартные плагины

### <a id="Расширяемость"></a>Расширяемость
## <a id="Расширяемость"></a>Расширяемость

### <a id="Управляемость"></a>Управляемость
## <a id="Управляемость"></a>Управляемость

## <a id="Не_может"></a>Не может
### <a id="SO_KEEPALIVE_на_сокете"></a>SO\_KEEPALIVE на сокете
# <a id="Не_может"></a>Не может
## <a id="SO_KEEPALIVE_на_сокете"></a>SO\_KEEPALIVE на сокете

"Низкоуровневое" API сокетов в настоящий момент не "экспортировано" на уровень
"Низкоуровневое" API сокетов в настоящий момент не "экспортировано" на уровень скриптов в тикле; также не известно ни одного расширения тикля, позволяющего это делать. Поэтому поддержка "настоящего keep alive" (каковое реализовано в программах, написанных на C/C++, вроде Psi или Gaim), в настоящий момент невозможно. 
скриптов в тикле; также не известно ни одного расширения тикля, позволяющего
это делать. Поэтому поддержка "настоящего keep alive" (каковое реализовано в
программах, написанных на C/C++, вроде Psi или Gaim), в настоящий момент
невозможно.

Разработчики Ткаббера наметили два пути решения этой проблемы:
Разработчики Ткаббера наметили два пути решения этой проблемы: 

*  Написание простого компонента на Си для тикля, экспортирующего socket API на уровень
*  Написание простого компонента на Си для тикля, экспортирующего socket API на уровень скриптов. Это сложный, но полезный путь. 
   скриптов. Это сложный, но полезный путь.
*  Реализация высокоуровнего "forced keep-alive" (как это назвал автор идеи — teo) или —
*  Реализация высокоуровнего "forced keep-alive" (как это назвал автор идеи — teo) или — точнее — "keep-alive с обратной связью". Суть идеи: после неактивности входного потока более N единиц времени посылать серверу произвольный IQ-запрос (например, IQ version) и ждать ответа некоторое (настраиваемое) число секунд. Если ответ не появляется за отведённое время, считать соединение физически потерянным и закрывать его на стороне Ткаббера. 
   точнее — "keep-alive с обратной связью". Суть идеи: после неактивности входного потока
   более N единиц времени посылать серверу произвольный IQ-запрос (например, IQ version)
   и ждать ответа некоторое (настраиваемое) число секунд. Если ответ не появляется за
   отведённое время, считать соединение физически потерянным и закрывать его на стороне Ткаббера.

### <a id="Сжатие_потока_при_использовании_SSL"></a>Сжатие потока при использовании SSL
## <a id="Сжатие_потока_при_использовании_SSL"></a>Сжатие потока при использовании SSL

Stream Compression в XMPP не может работать внутри SSL-соединения физически. Однако,
Stream Compression в XMPP не может работать внутри SSL-соединения физически. Однако, SSL позволяет использовать собственные механизмы сжатия данных в потоке. 
SSL позволяет использовать собственные механизмы сжатия данных в потоке.

Использованию их в Ткаббере мешает два фактора:
Использованию их в Ткаббере мешает два фактора: 

*  Пакет **tcltls**, предоставляющий обвязку вокруг OpenSSL для Tcl, не содержит
*  Пакет **tcltls**, предоставляющий обвязку вокруг OpenSSL для Tcl, не содержит "крутилок" для управления сжатием данных в потоке, то есть, чтобы эта фича появилась в Ткаббере, кто-то должен сделать соответствующий патч на **tcltls**. 
   "крутилок" для управления сжатием данных в потоке, то есть, чтобы эта фича
   появилась в Ткаббере, кто-то должен сделать соответствующий патч на
   **tcltls**.
*  Возможности для синхронизации SSL-сокетов относительно используемых методов
   сжатия достаточно плохо продуманы в стандарте SSLv3. Более того, в (нём?)
   даже не определены стандартные методы сжатия. OpenSSL поддерживает RLE и
*  Возможности для синхронизации SSL-сокетов относительно используемых методов сжатия достаточно плохо продуманы в стандарте SSLv3. Более того, в (нём?) даже не определены стандартные методы сжатия. OpenSSL поддерживает RLE и Zlib. 

## <a id="Лёгкий_в_использовании_мультилогин"></a>"Лёгкий в использовании" мультилогин

   Zlib.
Основная причина того, что эта фича не принимает статус официально поддерживаемой, состоит в том, что в настоящий момент в Ткаббере нет способов логичной/удачной/удобной поддержки этой концепции в интерфейсе пользователя. Особенно это касается механизма Customize. 

### <a id="Лёгкий_в_использовании_мультилогин"></a>"Лёгкий в использовании" мультилогин

Основная причина того, что эта фича не принимает статус официально
поддерживаемой, состоит в том, что в настоящий момент в Ткаббере нет способов
логичной/удачной/удобной поддержки этой концепции в интерфейсе пользователя.
Особенно это касается механизма Customize.

Если у вас есть _продуманный_ вариант решения этой проблемы, не потребующий
Если у вас есть _продуманный_ вариант решения этой проблемы, не потребующий переписывать тонны кода, обратитесь к разработчикам. 
переписывать тонны кода, обратитесь к разработчикам.

Одновременно хотелось бы заметить, что поддержка мультилогина, в сущности,
Одновременно хотелось бы заметить, что поддержка мультилогина, в сущности, противоестественна, поскольку "невозможность" ("неудобство" и т.д.) одновременной работы с несколькими копиями Ткаббера — достаточно надуманная проблема. 
противоестественна, поскольку "невозможность" ("неудобство" и т.д.)
одновременной работы с несколькими копиями Ткаббера — достаточно надуманная
проблема.

### <a id="Voice_IP"></a>Voice IP
## <a id="Voice_IP"></a>Voice IP

Таковая поддержка требует очень трудоёмкого прикручивания как минимум
Таковая поддержка требует очень трудоёмкого прикручивания как минимум библиотеки libmediastream (которую использует gtalk'овская libjingle). В настоящий момент эта фича никому не нужна настолько, чтобы заняться её реализацией. 
библиотеки libmediastream (которую использует gtalk'овская libjingle). В
настоящий момент эта фича никому не нужна настолько, чтобы заняться её
реализацией.

Если вы не можете без неё жить, посмотрите на Coccinella или Linphone.
Если вы не можете без неё жить, посмотрите на Coccinella или Linphone. 

### <a id="Хистори_на_сервере___сжатие_логов"></a>Хистори на сервере / сжатие логов
## <a id="Хистори_на_сервере___сжатие_логов"></a>Хистори на сервере / сжатие логов

В настоящее время Ткаббер умеет только архивировать (в _настоящем_ значении
В настоящее время Ткаббер умеет только архивировать (в _настоящем_ значении этого слова) логи с историей чатов и групчатов/MUC. Однако, т.к. были запросы отправлять логи "на мыло" или сжимать их, не исключено, что будут приделаны специальные хуки, из которых пытливые умы смогут запускать произвольные обработчики этих логов. 
этого слова) логи с историей чатов и групчатов/MUC. Однако, т.к. были запросы
отправлять логи "на мыло" или сжимать их, не исключено, что будут приделаны
специальные хуки, из которых пытливые умы смогут запускать произвольные
обработчики этих логов.

### <a id="Поддержка_PGP_под_Windows"></a>Поддержка PGP под Windows
## <a id="Поддержка_PGP_под_Windows"></a>Поддержка PGP под Windows

По всей видимости, это нереально. Неутешительные подробности читать [**тут**](Шифрование_в_Ткаббере.md).
По всей видимости, это нереально. Неутешительные подробности читать [тут](Шифрование_в_Ткаббере.md). 

## <a id="Слабые_места"></a>"Слабые места"
### <a id="Ресурсоёмкость_и_скорость_работы"></a>Ресурсоёмкость и скорость работы
# <a id="Слабые_места"></a>"Слабые места"
## <a id="Ресурсоёмкость_и_скорость_работы"></a>Ресурсоёмкость и скорость работы

### <a id="Поддержка_PGP"></a>Поддержка PGP
## <a id="Поддержка_PGP"></a>Поддержка PGP

### <a id="Доступность_требуемых_модулей_Tcl_Tk"></a>Доступность требуемых модулей Tcl/Tk
## <a id="Доступность_требуемых_модулей_Tcl_Tk"></a>Доступность требуемых модулей Tcl/Tk

### <a id="ОС-зависимые_баги"></a>ОС-зависимые баги
## <a id="ОС-зависимые_баги"></a>ОС-зависимые баги

### <a id="Поддержка_ОС-зависимых_особенностей"></a>Поддержка ОС-зависимых особенностей
## <a id="Поддержка_ОС-зависимых_особенностей"></a>Поддержка ОС-зависимых особенностей


Changes to wiki/ru/Tkabber_Wiki_Справка.md.

1

2
3
4
5
6
7

8
9
10
11
12
13
14
15

16
17
18
19

20
21
22
23

24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46





















47
48
49

50
51
52
53

54
55
56
57
58
59

60
61
62
63
64

65
66
67
68
69
70
71
72

73
74
75
76
77
78
79
80
81
82
83
84
85
86
87

88
89
90
91

92
93
94
95
96

97
98
99
100
101
102
103





104
105
106

107
108
109
110

111
112
113
114



115
116

117
118
119
120
121

122
123
124
125
126
127
128
129
130

131
132
133
134
135
136
137
138





139
140
141

142
143
144
145
146
147
148
149

150
151
152
153
154

155
156
157
158
159

160
161

162
163
164
165

166
167
168
169
170
171





172
173
174
175

176
177
178
179
180
181
182
183
184
185
186
187
188
189

190
191
192
193
194

195
196
197
198
199
200
201
202

203
204
205
206
207
208
209
210
211
212
213
214

215
216
217
218
219
220
221
222
223
224
225
226
227
228

229
230
231
232

233
234

235
236
237

238
239

240
241
242
243
244
245
246
247

248
249
250
251


252
253

254
255
256
257
258
259
260
261
262

263
264
265
266
267
268

269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287

288
289
290
291

292
293
294
295

296
297
298
299
300
301

302
303
304
305
306
307
308
309
310
311

312
313
314
315
316

317
318
319

320
321
322
323
324
325

326
327
328
329
330
331

332
333
334
335

336
337
338

339
340
341
342
343
344
345
346
347

348
349
350
351
352
353
354
355
356
357
358

359
360
361
362
363
364
365
366
367
368
369


370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385

386
387
388
389
390
391
392

393
394
395
396
397
398
399
400
401
402
403
404
405
406
407

408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424

425
426
427
428
429

430
431
432
433
434
435
436
437
438

439
440
441
442
443

444
445

446
447
448
449
450
451

452
453
454
455
456
457
458
459
460

461
462
463
464
465

466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482




483
484

485
486
487


488
489

490
491
492
493



494
495
496


497
498
499


500
501
502
503



504
505
506
507
508




509
510
511
512
513
514
515
516
517
518









519
520
521


522
523
524
525
526
527


528
529

530
531
532
533
534
535
536

537
538
539
540
541
542
543
544

545
546
547
548
549
550
551
552

553
554
555
556
557

558
559
560
561
562
563
564



565
566
567
568
1
2
3
4
5
6
7

8






9

10


11

12


13

14
15
16
17
18
19


















20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

43




44






45


46
47

48




49
50
51

52













53

54
55
56
57

58



59

60
61
62





63
64
65
66
67
68
69

70
71
72
73

74
75



76
77
78
79

80

81
82
83

84







85

86

87
88





89
90
91
92
93
94
95

96




97
98
99

100





101

102
103
104

105
106

107




108






109
110
111
112
113
114
115
116

117












118

119

120
121
122

123




124
125
126

127








128
129
130

131












132

133
134
135
136

137
138

139

140

141
142

143






144

145

146


147
148
149

150





151
152
153

154
155
156
157
158
159

160

















161

162




163




164






165










166



167

168

169

170

171
172
173


174






175




176



177









178











179











180
181
















182



183
184
185

186













187

188













189
190
191

192



193

194









195





196


197






198





199
200
201

202

203
204
205

206







207



208
209




210
211
212
213


214



215
216


217




218
219
220
221


222
223
224


225
226
227



228
229
230





231
232
233
234










235
236
237
238
239
240
241
242
243



244
245






246
247


248







249




250
251
252

253




254
255
256

257





258







259
260
261





+





-
+
-
-
-
-
-
-

-
+
-
-

-
+
-
-

-
+





-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


-
+
-
-
-
-
+
-
-
-
-
-
-
+
-
-


-
+
-
-
-
-



-
+
-
-
-
-
-
-
-
-
-
-
-
-
-

-
+



-
+
-
-
-

-
+


-
-
-
-
-
+
+
+
+
+


-
+



-
+

-
-
-
+
+
+

-
+
-



-
+
-
-
-
-
-
-
-

-
+
-


-
-
-
-
-
+
+
+
+
+


-
+
-
-
-
-



-
+
-
-
-
-
-
+
-



-
+

-
+
-
-
-
-
+
-
-
-
-
-
-
+
+
+
+
+



-
+
-
-
-
-
-
-
-
-
-
-
-
-

-
+
-



-
+
-
-
-
-



-
+
-
-
-
-
-
-
-
-



-
+
-
-
-
-
-
-
-
-
-
-
-
-

-
+



-
+

-
+
-

-
+

-
+
-
-
-
-
-
-

-
+
-

-
-
+
+

-
+
-
-
-
-
-



-
+





-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
+
-
-
-
-
+
-
-
-
-
+
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
+
-
-
-

-
+
-

-
+
-



-
-
+
-
-
-
-
-
-
+
-
-
-
-
+
-
-
-
+
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-



-
+
-
-
-
-
-
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-



-
+
-
-
-

-
+
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
+
-
-
+
-
-
-
-
-
-
+
-
-
-
-
-



-
+
-



-
+
-
-
-
-
-
-
-

-
-
-


-
-
-
-
+
+
+
+
-
-
+
-
-
-
+
+
-
-
+
-
-
-
-
+
+
+

-
-
+
+

-
-
+
+

-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
-
-
-
-
+
+
-
-
+
-
-
-
-
-
-
-
+
-
-
-
-



-
+
-
-
-
-



-
+
-
-
-
-
-
+
-
-
-
-
-
-
-
+
+
+
-
-
-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Tkabber_Wiki:Справка/index.html)


# Tkabber Wiki:Справка

Материал из Tkabber Wiki

Эта страница предназначена для тех, кто пожелал принять участие в проекте
 Эта страница предназначена для тех, кто пожелал принять участие в проекте Tkabber Wiki в качестве автора статей или переводчика. Главное назначение нижеследующего — определить стиль оформления, принятый на вики, чтобы все статьи смотрелись более-менее одинаково, не слишком пестрели жирным и наклонным шрифтом и были ясными для понимания. (Просьба учесть, что в настоящий момент не всё на вики оформлено в соответствии с этими правилами, но исправления ведутся, и в конце концов всё будет приведено к единому стилю.) 
Tkabber Wiki в качестве автора статей или переводчика. Главное назначение
нижеследующего — определить стиль оформления, принятый на вики, чтобы все
статьи смотрелись более-менее одинаково, не слишком пестрели жирным и наклонным
шрифтом и были ясными для понимания. (Просьба учесть, что в настоящий момент не
всё на вики оформлено в соответствии с этими правилами, но исправления ведутся,
и в конце концов всё будет приведено к единому стилю.)

Если у вас есть какие-то предложения по оформлению, пожалуйста, свяжитесь либо
Если у вас есть какие-то предложения по оформлению, пожалуйста, свяжитесь либо с [Участник:bigote](Участник_Bigote.md), либо с [Участник:kostix](Участник_Kostix.md), либо с [Участник:lknight](Участник_Lknight.md). 
с [**Bigote**](Участник_Bigote.md), либо с [**kostix**](Участник_Kostix.md),
либо с [**lknight**](Участник_Lknight.md).

Для обсуждения работ на вики создана отдельная конференция
Для обсуждения работ на вики создана отдельная конференция `xmpp:tkabber-wiki@confernce.jabber.ru`. Вход на неё — по приглашению, то есть вам сначала надо выловить кого-нибудь из нас. 
`xmpp:tkabber-wiki@confernce.jabber.ru`. Вход на неё — по приглашению, то есть
вам сначала надо выловить кого-нибудь из нас.

Итак, приступим.
Итак, приступим. 

## <a id="toc"></a>Содержание

* [1 Если вы не работали с вики раньше](#Если_вы_не_работали_с_вики_раньше)
* [2 Теперь об оформлении](#Теперь_об_оформлении)
   * [2.1 Для авторов новых статей](#Для_авторов_новых_статей)
      * [2.1.1 Применение отбоя пробелом](#Применение_отбоя_пробелом)
      * [2.1.2 Применение HTML](#Применение_HTML)
      * [2.1.3 Применение тэга **\<tt>**](#Применение_тэга_tt)
      * [2.1.4 Применение жирного шрифта](#Применение_жирного_шрифта)
      * [2.1.5 Применение наклонного шрифта](#Применение_наклонного_шрифта)
      * [2.1.6 Применение CSS](#Применение_CSS)
      * [2.1.7 Употребление смайликов в тексте](#Употребление_смайликов_в_тексте)
      * [2.1.8 Употребление буквы "Ё"](#Употребление_буквы_Ё)
      * [2.1.9 Прочие элементы оформления](#Прочие_элементы_оформления)
      * [2.1.10 Песочница](#Песочница)
   * [2.2 Переводчикам](#Переводчикам)
      * [2.2.1 OmegaT](#OmegaT)
      * [2.2.2 Рекомендуемый порядок действий при переводе на новый язык с нуля](#Рекомендуемый_порядок_действий_при_переводе_на_новый_язык_с_нуля)
      * [2.2.3 Перевод на родной язык](#Перевод_на_родной_язык)
      * [2.2.4 Перевод на чужой язык](#Перевод_на_чужой_язык)
      * [2.2.5 Перевод меню](#Перевод_меню)
      * [2.2.6 Локализация Ткаббера](#Локализация_Ткаббера)
 * [2.1 Для авторов новых статей](#Для_авторов_новых_статей)
  * [2.1.1 Применение отбоя пробелом](#Применение_отбоя_пробелом)
  * [2.1.2 Применение HTML](#Применение_HTML)
  * [2.1.3 Применение тэга **\<tt>**](#Применение_тэга_tt)
  * [2.1.4 Применение жирного шрифта](#Применение_жирного_шрифта)
  * [2.1.5 Применение наклонного шрифта](#Применение_наклонного_шрифта)
  * [2.1.6 Применение CSS](#Применение_CSS)
  * [2.1.7 Употребление смайликов в тексте](#Употребление_смайликов_в_тексте)
  * [2.1.8 Употребление буквы "Ё"](#Употребление_буквы_Ё)
  * [2.1.9 Прочие элементы оформления](#Прочие_элементы_оформления)
  * [2.1.10 Песочница](#Песочница)
 * [2.2 Переводчикам](#Переводчикам)
  * [2.2.1 OmegaT](#OmegaT)
  * [2.2.2 Рекомендуемый порядок действий при переводе на новый язык с нуля](#Рекомендуемый_порядок_действий_при_переводе_на_новый_язык_с_нуля)
  * [2.2.3 Перевод на родной язык](#Перевод_на_родной_язык)
  * [2.2.4 Перевод на чужой язык](#Перевод_на_чужой_язык)
  * [2.2.5 Перевод меню](#Перевод_меню)
  * [2.2.6 Локализация Ткаббера](#Локализация_Ткаббера)
   * [2.2.6 Обновляем существующие сообщения](#Обновляем_существующие_сообщения)
   * [2.2.6 Создание новой версии](#Создание_новой_версии)
   * [2.2.6 Что ещё переводить?](#Что_ещё_переводить)

# <a id="Если_вы_не_работали_с_вики_раньше"></a>Если вы не работали с вики раньше
*  Подробная и очень приличная [справка](http://ru.wikipedia.org/wiki/Википедия:Как_править_статьи)
*  Подробная и очень приличная [справка](http://ru.wikipedia.org/wiki/Википедия:Как_править_статьи) по разметке WikiPedia. На той странице есть ссылки на более конкретные темы: "изображения", "как начать новую статью" и прочее. В качестве теоретической базы — идеальное место. 
   по разметке WikiPedia. На той странице есть ссылки на более конкретные темы:
   "изображения", "как начать новую статью" и прочее. В качестве теоретической
   базы — идеальное место.
*  Для создания галерей, однако, удобнее воспользоваться
*  Для создания галерей, однако, удобнее воспользоваться [ссылкой на соответствующий раздел MediaWiki](http://www.mediawiki.org/w/index.php?title=Sites_using_MediaWiki/gallery&action=submit), которая сразу показывает правильный пример кода (на wikipedia.org почему-то о галереях сказано вскользь, и работающий код не продемонстрирован, а чтобы вычислить его самому, надо или долго пробовать, или быть семи пядей во лбу ;)) 
   [ссылкой на соответствующий раздел MediaWiki](http://www.mediawiki.org/w/index.php?title=Sites_using_MediaWiki/gallery&action=submit),
   которая сразу показывает правильный пример кода (на wikipedia.org почему-то
   о галереях сказано вскользь, и работающий код не продемонстрирован, а чтобы
   вычислить его самому, надо или долго пробовать, или быть семи пядей во
   лбу ;))
*  Смотрите также [документацию по настройке интерфейса](http://meta.wikipedia.org/wiki/MediaWiki_i18n)
*  Смотрите также [документацию по настройке интерфейса](http://meta.wikipedia.org/wiki/MediaWiki_i18n) и [Мануал пользователя](http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide) по использованию и настройке справочной системы. 
   и [Мануал пользователя](http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide)
   по использованию и настройке справочной системы.

# <a id="Теперь_об_оформлении"></a>Теперь об оформлении
Во первых строках просим помнить, что структура вики может меняться (в том
Во первых строках просим помнить, что структура вики может меняться (в том числе и вами), но делать это нужно очень осторожно, предварительно обсудив изменения с администраторами проекта (см. ссылки выше). Если у статьи, которую вы хотите передвинуть по вики, есть "двойники" на других языках, то же самое надо сделать и с ними. Потому мы и просим уведомлять о желаемых изменениях. 
числе и вами), но делать это нужно очень осторожно, предварительно обсудив
изменения с администраторами проекта (см. ссылки выше). Если у статьи, которую
вы хотите передвинуть по вики, есть "двойники" на других языках, то же самое
надо сделать и с ними. Потому мы и просим уведомлять о желаемых изменениях.

## <a id="Для_авторов_новых_статей"></a>Для авторов новых статей

Перед тем как писать новую статью, посмотрите, нет ли уже другой статьи, более
Перед тем как писать новую статью, посмотрите, нет ли уже другой статьи, более или менее полно раскрывающей эту тему. Если такая статья есть, возможно, вам стоит просто дополнить её. Если же это не так, то для начала определитесь, в какой раздел поместить ссылку на неё, и... поместите эту ссылку :) А затем можно уже приступать к написанию. Не пожалейте пяти минут и ознакомьтесь с правилами оформления статей. Может оказаться полезным и просмотр исходного кода (по команде "править" в верхнем меню) какой-нибудь существующей статьи, где есть элементы, которые вы собираетесь использовать в своей статье. И конечно, мы не хотим загонять всех в жёсткие рамки — в конце концов, содержание важнее формы. Оформление статьи — дело вкуса автора, но постарайтесь понять и читателей — ведь это им будет тяжело разбираться в каше из стилей, если автор об этом не позаботится. Не забывайте, что перед сохранением страницы её можно предварительно просмотреть (есть кнопка "Предварительный просмотр"). Да, и постарайтесь писать без ошибок ;) 
или менее полно раскрывающей эту тему. Если такая статья есть, возможно, вам
стоит просто дополнить её. Если же это не так, то для начала определитесь, в
какой раздел поместить ссылку на неё, и... поместите эту ссылку :) А затем
можно уже приступать к написанию. Не пожалейте пяти минут и ознакомьтесь с
правилами оформления статей. Может оказаться полезным и просмотр исходного кода
(по команде "править" в верхнем меню) какой-нибудь существующей статьи, где
есть элементы, которые вы собираетесь использовать в своей статье. И конечно,
мы не хотим загонять всех в жёсткие рамки — в конце концов, содержание важнее
формы. Оформление статьи — дело вкуса автора, но постарайтесь понять и
читателей — ведь это им будет тяжело разбираться в каше из стилей, если автор
об этом не позаботится. Не забывайте, что перед сохранением страницы её можно
предварительно просмотреть (есть кнопка "Предварительный просмотр"). Да, и
постарайтесь писать без ошибок ;)

Теперь о стилях.
Теперь о стилях. 

### <a id="Применение_отбоя_пробелом"></a>Применение отбоя пробелом

Один из встроенных стилей разметки вики — отбой пробелом, то есть выделяемая
Один из встроенных стилей разметки вики — отбой пробелом, то есть выделяемая строка начинается с пробела. В результате применения этого стиля выделенный текст помещается в красивую рамочку с розовым фоном. У нас этот стиль будет применяться для: 
строка начинается с пробела. В результате применения этого стиля выделенный
текст помещается в красивую рамочку с розовым фоном. У нас этот стиль будет
применяться для:

*  выделения кусков кода:
*  выделения кусков кода: 

    namespace eval emoteicons {
        array set emoteicons {}

        variable lasttext ""
        variable lastX
        variable lastY
      array set emoteicons {}
    
      variable lasttext ""
      variable lastX
      variable lastY
    }

*  выделения опций настроек, когда они встречаются в тексте статьи в первый раз:
*  выделения опций настроек, когда они встречаются в тексте статьи в первый раз: 

    ::jidlink::transport(allowed,dtcp-active)

*  выделения пути к файлам, когда этот путь:
*  выделения пути к файлам, когда этот путь: 

1. довольно длинный,
1. вводится в тексте статьи впервые,
1. хочется обратить на него особое внимание.
1.  довольно длинный, 
1.  вводится в тексте статьи впервые, 
1.  хочется обратить на него особое внимание. 

Постарайтесь построить предложение так, чтобы выделение не разрывало его или по
Постарайтесь построить предложение так, чтобы выделение не разрывало его или по крайней мере смотрелось прилично. 
крайней мере смотрелось прилично.

### <a id="Применение_HTML"></a>Применение HTML

Основные стили разметки уже встроены в вики, так что особой нужды в
Основные стили разметки уже встроены в вики, так что особой нужды в использовании тэгов HTML нет. Больше того: злоупотребление ими загрязняет исходный текст статей, затрудняет перевод и правку. Тем не менее, в некоторых случаях применение HTML вполне оправдано. Пример **—** это вот длинное тире (&mdash;), которое и должно по идее использоваться вместо популярного нынче дефиса **-**. Ещё один пример — стрелки → и ← (&rarr; и &larr;), угловые скобки \< и > (&lt; и &gt;), значок акцента **&\#769;**, ставящийся следом за буквой, над которой хотим поставить ударение. 
использовании тэгов HTML нет. Больше того: злоупотребление ими загрязняет
исходный текст статей, затрудняет перевод и правку. Тем не менее, в некоторых
случаях применение HTML вполне оправдано. Пример **—** это вот длинное тире
(\&mdash;), которое и должно по идее использоваться вместо популярного нынче
дефиса **-**. Ещё один пример — стрелки → и ← (\&rarr; и \&larr;), угловые скобки
\< и > (\&lt; и \&gt;), значок акцента **&\#769;**, ставящийся следом за буквой,
над которой хотим поставить ударение.

Если вам нужно оформить пропуск куска кода в примере, используйте спец-символ
Если вам нужно оформить пропуск куска кода в примере, используйте спец-символ &middot; — "·" Например: 
\&middot; — "·" Например:

    proc a b {
        puts ouch!

        · · · · ·

        puts text
      puts ouch!
      
      · · · · · 
      
      puts text
    }

При использовании ссылок знаки препинания, "касающиеся" последнего слова в
При использовании ссылок знаки препинания, "касающиеся" последнего слова в ссылке, из неё исключаются. Пример: _В случае сомнений не забывайте о предварительном просмотре и о **'''[[Sandbox|Песочнице]].'''** → В случае сомнений не забывайте о предварительном просмотре и о **[Песочнице](Sandbox.md).**_ 
ссылке, из неё исключаются. Пример: _В случае сомнений не забывайте о
предварительном просмотре и о **'''[[Sandbox\|Песочнице]].'''** → В случае
сомнений не забывайте о предварительном просмотре и о
**[Песочнице](Sandbox.md).**_

### <a id="Применение_тэга_tt"></a>Применение тэга **\<tt>**

*  JID авторов патчей, статей и просто хороших людей, а также конференций и прочих
*  JID авторов патчей, статей и просто хороших людей, а также конференций и прочих ресурсов выделяются с помощью тэга **\<tt>**: `xmpp:loginname@jabberserver.org`, `xmpp:conferencename@conference.jabberserver.org`, `rss@jabberserver.org`. Если непосредственно после JID или ресурса идёт знак препинания, ставить его следует **после** закрывающего тэга **\</tt>**. 
   ресурсов выделяются с помощью тэга **\<tt>**: `xmpp:loginname@jabberserver.org`,
   `xmpp:conferencename@conference.jabberserver.org`, `rss@jabberserver.org`.
   Если непосредственно после JID или ресурса идёт знак препинания, ставить его
   следует **после** закрывающего тэга **\</tt>**.
*  Выделение опций настроек (например, `::jidlink::transport(allowed,dtcp-active)`),
*  Выделение опций настроек (например, `::jidlink::transport(allowed,dtcp-active)`), когда они встречаются в тексте статьи во второй и более раз. 
   когда они встречаются в тексте статьи во второй и более раз.

### <a id="Применение_жирного_шрифта"></a>Применение жирного шрифта

В этой вики жирный шрифт используется для:
В этой вики жирный шрифт используется для: 

*  выделения путей до файлов, о которых идёт речь (например, **~/.tkabber/avatar.gif**),
*  выделения путей до файлов, о которых идёт речь (например, **~/.tkabber/avatar.gif**), когда не стоит нарушать текучесть предложения. При этом постарайтесь построить предложение так, чтобы к этому пути не примешивалась естественная пунктуация. Если же это невозможно, выключайте знаки препинания из выделения. 
   когда не стоит нарушать текучесть предложения. При этом постарайтесь построить
   предложение так, чтобы к этому пути не примешивалась естественная пунктуация.
   Если же это невозможно, выключайте знаки препинания из выделения.
*  обозначения пути к какому-либо пункту Настроек Ткаббера или для ориентации в его
*  обозначения пути к какому-либо пункту Настроек Ткаббера или для ориентации в его меню (например, **Настройки → File Transfer → Jidlink** или **Службы → Расширения → Шпионить за присутствием**); 
   меню (например, **Настройки → File Transfer → Jidlink** или **Службы → Расширения → Шпионить за присутствием**);
*  выделения ссылок на статьи данной вики (например, "О плагинах читайте [**эту статью**](Плагины.md).");
*  чтобы обратить внимание на какое-либо **важное слово;**
 *  обратите внимание, что в случае с выделенным "просто текстом", в отличие от
    кода или путей, знаки препинания включаются в выделение.
*  вопросы в [**ЧаВо**](Ткаббер_ЧаВо.md) — выделяются целиком, вместе со словом "Вопрос".
*  выделения ссылок на статьи данной вики (например, "О плагинах читайте **[эту статью](Плагины.md).**"); 
*  чтобы обратить внимание на какое-либо **важное слово;** 
 *  обратите внимание, что в случае с выделенным "просто текстом", в отличие от кода или путей, знаки препинания включаются в выделение. 
 
*  вопросы в **[ЧаВо](Ткаббер_ЧаВо.md)** — выделяются целиком, вместе со словом "Вопрос". 

### <a id="Применение_наклонного_шрифта"></a>Применение наклонного шрифта

Наклонный шрифт в нашей вики применяется для выделения довольно длинных кусков
Наклонный шрифт в нашей вики применяется для выделения довольно длинных кусков текста в общем повествовании (одно предложение или часть сложносочинённого или сложноподчинённого предложения как минимум), то есть в случаях, когда жирный шрифт слишком обращает на себя внимание. В этом случае знаки пунктуации, завершающие выделенный текст, включаются в выделение. _Если вам понадобилось акцентировать какое-либо слово в наклонном тексте, допустимо воспользоваться для этого жирным шрифтом. При этом знаки пунктуации, вплотную прилегающие к жирному слову, из выделения жирным **включаются,** если это обычное слово, и исключается, если это кусок кода или путь до файла: **~/.tkabber/config.tcl**._ (Понимаю, что на словах это выглядит запутанно — просмотрите код этой страницы, и вы всё поймёте. Или же просто присмотритесь к финальной точке предыдущего предложения — она обычная :)) Постарайтесь не злоупотреблять смешением стилей или близким соседством жирного и наклонного текста. 
текста в общем повествовании (одно предложение или часть сложносочинённого или
сложноподчинённого предложения как минимум), то есть в случаях, когда жирный
шрифт слишком обращает на себя внимание. В этом случае знаки пунктуации,
завершающие выделенный текст, включаются в выделение. _Если вам понадобилось
акцентировать какое-либо слово в наклонном тексте, допустимо воспользоваться
для этого жирным шрифтом. При этом знаки пунктуации, вплотную прилегающие к
жирному слову, из выделения жирным **включаются,** если это обычное слово, и
исключается, если это кусок кода или путь до файла: **~/.tkabber/config.tcl**._
(Понимаю, что на словах это выглядит запутанно — просмотрите код этой страницы,
и вы всё поймёте. Или же просто присмотритесь к финальной точке предыдущего
предложения — она обычная :)) Постарайтесь не злоупотреблять смешением стилей
или близким соседством жирного и наклонного текста.

Если вам требуется выделить курсивом целый абзац или несколько предложений,
Если вам требуется выделить курсивом целый абзац или несколько предложений, лучше воспользоваться тэгом \<cite>. 
лучше воспользоваться тэгом \<cite>.

### <a id="Применение_CSS"></a>Применение CSS

На вики имеется возможность использовать в коде статей
На вики имеется возможность использовать в коде статей [стили CSS](http://www.w3.org/Style/CSS/). Имеющиеся стили можете посмотреть на специальной странице [MediaWiki:Monobook.css](MediaWiki_Monobook.css.md). Редактировать её могут только админы вики, так что если у вас есть идеи по части оформления текста, для реализации которых нужно править стили, ловите [Bigote](Участник_Bigote.md). 
[стили CSS](http://www.w3.org/Style/CSS/). Имеющиеся стили можете посмотреть
на специальной странице [*MediaWiki:Monobook.css*](MediaWiki_Monobook.css.md).
Редактировать её могут только админы вики, так что если у вас есть идеи по части
оформления текста, для реализации которых нужно править стили, ловите [**Bigote**](Участник_Bigote.md).

### <a id="Употребление_смайликов_в_тексте"></a>Употребление смайликов в тексте

Если вам нравятся смайлики, пользуйтесь на здоровье, но, как говорит один мой
Если вам нравятся смайлики, пользуйтесь на здоровье, но, как говорит один мой знакомый, без остервенения ;) То есть, постарайтесь свести их употребление к минимуму. Я долго размышлял, как быть со знаками препинания в конце предложения, после которого вставляется смайлик, и мне кажется, что смайлик вполне заменяет точку ;) После знака препинания он как-то не смотрится. В середине предложения употреблять с осторожностью, лучше разделить предложение на два более простых, как я только что продемонстрировал (_...заменяет точку, **потому что** после знака препинания..._). Но вообще помните, что хорошая шутка должна хорошо смотреться и без смайликов :-))))) 
знакомый, без остервенения ;) То есть, постарайтесь свести их употребление к
минимуму. Я долго размышлял, как быть со знаками препинания в конце
предложения, после которого вставляется смайлик, и мне кажется, что смайлик
вполне заменяет точку ;) После знака препинания он как-то не смотрится. В
середине предложения употреблять с осторожностью, лучше разделить предложение
на два более простых, как я только что продемонстрировал (_...заменяет точку,
**потому что** после знака препинания..._). Но вообще помните, что хорошая
шутка должна хорошо смотреться и без смайликов :-)))))

### <a id="Употребление_буквы_Ё"></a>Употребление буквы "Ё"

Несмотря на мнения многих весьма известных людей, что буква "ё" в наше время
Несмотря на мнения многих весьма известных людей, что буква "ё" в наше время должна использоваться лишь в случае смысловых неясностей (это рекомендует также и сайт [gramota.ru](http://gramota.ru)), авторы подавляющего большинства статей этой вики считают, что эта буква незаслуженно обижена, и стараются реабилитировать её всеми доступными средствами, в том числе и с помощью этой вики. Если Вы в силу привычки пишете "е" вместо "ё", ничего страшного — мы потом всё поправим ;) Если же Вы непримиримый противник использования этой буквы в общедоступных для чтения и редактирования текстах, большая просьба сообщить об этом либо в Вашем профиле (Участник:Ваш\_ник), либо в странице обсуждения написанной Вами статьи или в комментарии к ней (поле "краткое описание изменений"). Мы люди мирные, и ссориться по этому поводу не собираемся — в конце концов, информация превыше всего. Однако в этом случае просим и Вас не исправлять уже написанные буквы "ё" на "е" в статьях, написанных другими. 
должна использоваться лишь в случае смысловых неясностей (это рекомендует также
и сайт [gramota.ru](http://gramota.ru)), авторы подавляющего большинства статей
этой вики считают, что эта буква незаслуженно обижена, и стараются
реабилитировать её всеми доступными средствами, в том числе и с помощью этой
вики. Если Вы в силу привычки пишете "е" вместо "ё", ничего страшного — мы
потом всё поправим ;) Если же Вы непримиримый противник использования этой
буквы в общедоступных для чтения и редактирования текстах, большая просьба
сообщить об этом либо в Вашем профиле (Участник:Ваш\_ник), либо в странице
обсуждения написанной Вами статьи или в комментарии к ней (поле "краткое
описание изменений"). Мы люди мирные, и ссориться по этому поводу не собираемся
— в конце концов, информация превыше всего. Однако в этом случае просим и Вас
не исправлять уже написанные буквы "ё" на "е" в статьях, написанных другими.

Ребята, давайте жить дружно. © Кот Леопольд ;)
Ребята, давайте жить дружно. © Кот Леопольд ;) 

### <a id="Прочие_элементы_оформления"></a>Прочие элементы оформления

*  Вот такие вот "пули" очень удобно отбивают пункты списков.
*  Вот такие вот "пули" очень удобно отбивают пункты списков. 

1.  Нумерованные списки, тоже могут пригодиться (обратите внимание, они
1.  Нумерованные списки, тоже могут пригодиться (обратите внимание, они могут быть и вложенными, как сейчас). 
    могут быть и вложенными, как сейчас).

Подробнее о них читайте в [статье о разметке Википедии](http://ru.wikipedia.org/wiki/Wiki-разметка).
Подробнее о них читайте в [статье о разметке Википедии](http://ru.wikipedia.org/wiki/Wiki-разметка). 

Если нужно поставить ударение над гласной в русском слове, не используйте
Если нужно поставить ударение над гласной в русском слове, не используйте "эрзац-ударения" — акцентированные западноевропейские гласные (повторюсь, речь не идёт о "законных" случаях, когда употребляется иностранное слово). Для знака ударения в Unicode существует [специальный символ U+0301](http://www.fileformat.info/info/unicode/char/0301/index.htm). В коде HTML он записывается как **&\#769;** и ставится **после** "ударяемой" гласной: **Тка&\#769;ббер → Тка́ббер**. Очень подробно о различных символах, которые могут пригодиться при оформлении статей, [написано в Википедии](http://ru.wikipedia.org/wiki/Википедия:Специальные_символы). 
"эрзац-ударения" — акцентированные западноевропейские гласные (повторюсь, речь
не идёт о "законных" случаях, когда употребляется иностранное слово). Для знака
ударения в Unicode существует [специальный символ U+0301](http://www.fileformat.info/info/unicode/char/0301/index.htm). В коде
HTML он записывается как **&\#769;** и ставится **после** "ударяемой" гласной:
**Тка&\#769;ббер → Тка́ббер**. Очень подробно о различных символах, которые
могут пригодиться при оформлении статей, [написано в Википедии](http://ru.wikipedia.org/wiki/Википедия:Специальные_символы).

Если вам требуется вставить "подпись", например, как автора патча, введите
Если вам требуется вставить "подпись", например, как автора патча, введите в любом месте строки: 
в любом месте строки:

*  ~~~ (заменится на [[Участник:Пупкин|Пупкин]])
*  ~~~~ (заменится на [[Участник:Пупкин|Пупкин]] ЧЧ:ММ, число месяц год (MSD))
*  ~~~ (заменится на [[Участник:Пупкин|Пупкин]]) 
*  ~~~~ (заменится на [[Участник:Пупкин|Пупкин]] ЧЧ:ММ, число месяц год (MSD)) 

Не ограничивайте себя только теми способами форматирования текста, что указаны
Не ограничивайте себя только теми способами форматирования текста, что указаны здесь. На странице разметки Википедии можно найти целую уйму других, и если что-то подходит как нельзя кстати для вашей статьи — смело добавляйте этот приём сюда. Однако хотелось бы попросить не усердствовать чрезмерно в употреблении разнообразных стилей. Старайтесь держаться золотой середины и применять выделение лишь там, где без него не обойтись. 
здесь. На странице разметки Википедии можно найти целую уйму других, и если
что-то подходит как нельзя кстати для вашей статьи — смело добавляйте этот
приём сюда. Однако хотелось бы попросить не усердствовать чрезмерно в
употреблении разнообразных стилей. Старайтесь держаться золотой середины и
применять выделение лишь там, где без него не обойтись.

### <a id="Песочница"></a>Песочница

Порезвиться с разметкой можно в [**Песочнице**](Sandbox.md).
Порезвиться с разметкой можно в **[Песочнице](Sandbox.md).** 

## <a id="Переводчикам"></a>Переводчикам

### <a id="OmegaT"></a>OmegaT

Крайне рекомендую при переводе пользоваться какой-нибудь системой
Крайне рекомендую при переводе пользоваться какой-нибудь системой автоматизированного перевода типа [OmegaT](http://www.omegat.org/ru/omegat.html). Я сам пользуюсь этой программой, и могу сказать, что она очень облегчает работу переводчика (не путать с печально известным Промтом!) Системы CAT (Computer-Assisted Translation) не переводят текст автоматически, они лишь запоминают все переведённые фразы и затем, при полном или частичном совпадении какой-либо фразы оригинала предлагают запомненный перевод, который можно вставить и отредактировать. По-быстрому освоить OmegaT можно за пару вечеров — на сайте, а также в помощи к программе имеется быстрый старт. Да и вообще помощь довольно неплохая. Чтобы не изобретать велосипед, то есть, не создавать всем и каждому свою память перевода (это называется TM — Translation Memory), я буду выкладывать здесь на вики свой архив с TM, который у меня потихоньку накапливается в процессе перевода. В этом архиве, помимо файлов Омеги, имеется ещё скрытый каталог .git, где хранятся старые версии TM (на случай <s>ядерной войны</s> зависаний особо крупных статей). Вы можете воспользоваться неслабыми возможностями [git](http://git.org) по бэкапу текстовых данных, если установите его себе на компьютер. Теперь пара советов по использованию Омеги. 
автоматизированного перевода типа
[OmegaT](http://www.omegat.org/ru/omegat.html). Я сам пользуюсь этой
программой, и могу сказать, что она очень облегчает работу переводчика (не
путать с печально известным Промтом!) Системы CAT (Computer-Assisted
Translation) не переводят текст автоматически, они лишь запоминают все
переведённые фразы и затем, при полном или частичном совпадении какой-либо
фразы оригинала предлагают запомненный перевод, который можно вставить и
отредактировать. По-быстрому освоить OmegaT можно за пару вечеров — на сайте, а
также в помощи к программе имеется быстрый старт. Да и вообще помощь довольно
неплохая. Чтобы не изобретать велосипед, то есть, не создавать всем и каждому
свою память перевода (это называется TM — Translation Memory), я буду
выкладывать здесь на вики свой архив с TM, который у меня потихоньку
накапливается в процессе перевода. В этом архиве, помимо файлов Омеги, имеется
ещё скрытый каталог .git, где хранятся старые версии TM (на случай <s>ядерной
войны</s> зависаний особо крупных статей). Вы можете воспользоваться неслабыми
возможностями [git](http://git.org) по бэкапу текстовых данных, если установите
его себе на компьютер. Теперь пара советов по использованию Омеги.

*  Я для перевода исходные файлы создаю в текстовом формате в кодировке utf-8,
*  Я для перевода исходные файлы создаю в текстовом формате в кодировке utf-8, предлагаю так же поступать и вам. В качестве расширения я выбрал .utf8 (если не ошибаюсь, у Омеги уже есть настроенные фильтры для этого расширения, но на всякий случай я сейчас расскажу, как там чего настраивать). 
   предлагаю так же поступать и вам. В качестве расширения я выбрал .utf8 (если
   не ошибаюсь, у Омеги уже есть настроенные фильтры для этого расширения, но
   на всякий случай я сейчас расскажу, как там чего настраивать).
*  Идите в меню Options → File filters..., выделите элемент Text Files и загляните
*  Идите в меню Options → File filters..., выделите элемент Text Files и загляните сначала в Options. Там надо поставить (если не установлено) End Of Lines (могу соврать, у меня интерфейс испанский), тогда Омега будет делить текст на сегменты по предложениям, а не по пустым строчкам. 
   сначала в Options. Там надо поставить (если не установлено) End Of Lines
   (могу соврать, у меня интерфейс испанский), тогда Омега будет делить текст
   на сегменты по предложениям, а не по пустым строчкам.
*  Нажав ОК, идите теперь в Edit. Там среди фильтров должен иметься один, отвечающий
*  Нажав ОК, идите теперь в Edit. Там среди фильтров должен иметься один, отвечающий за utf-8. Если его нет, создайте новый по аналогии с имеющимися, только в качестве шаблона напишите \*.utf8, ну и обе кодировки поставьте такими же. Можно работать и с Unicode. Тогда создайте новый фильтр с нужным вам расширением, в качестве кодировки укажите utf-16, ну и не забывайте исходным файлам ставить это расширение. 
   за utf-8. Если его нет, создайте новый по аналогии с имеющимися, только в
   качестве шаблона напишите \*.utf8, ну и обе кодировки поставьте такими же.
   Можно работать и с Unicode. Тогда создайте новый фильтр с нужным вам
   расширением, в качестве кодировки укажите utf-16, ну и не забывайте исходным
   файлам ставить это расширение.
*  Ещё одна тонкость. При загрузке файлов проекта в окошке можно увидеть кнопку
*  Ещё одна тонкость. При загрузке файлов проекта в окошке можно увидеть кнопку "Import Files From MediaWiki". Это очень удобная кнопка, но, к сожалению, с русскими названиями страниц это не сработает. Вы вводите в поле для URL ссылку на страницу, жмёте ОК, но в список файлов ничего не добавляется, хотя в каталоге source появляется пустой файл с русским именем. Поэтому лучше всего самому создать в sources нужный файл (для гарантии с английским именем и расширением utf8, не забыли?), открыть его в редакторе, открыть в нашей вики нужную статью на редактирование, скопировать весь исходный текст со всем форматированием и вставить его в файл. Теперь, если обновить проект, нажав F5, у вас появится новый файл, и вы можете начать работу. 
   "Import Files From MediaWiki". Это очень удобная кнопка, но, к сожалению, с
   русскими названиями страниц это не сработает. Вы вводите в поле для URL
   ссылку на страницу, жмёте ОК, но в список файлов ничего не добавляется, хотя
   в каталоге source появляется пустой файл с русским именем. Поэтому лучше
   всего самому создать в sources нужный файл (для гарантии с английским именем
   и расширением utf8, не забыли?), открыть его в редакторе, открыть в нашей
   вики нужную статью на редактирование, скопировать весь исходный текст со
   всем форматированием и вставить его в файл. Теперь, если обновить проект,
   нажав F5, у вас появится новый файл, и вы можете начать работу.
*  Не забывайте периодически сохраняться (Ctrl-S) и создавать финальные документы
*  Не забывайте периодически сохраняться (Ctrl-S) и создавать финальные документы (Ctrl-D) — мало ли что... У меня один раз гаркнулось часа 4 работы (именно работы, и дедлайн поджимал), и с тех пор я умный :) Для того и поставил git и настроил автокоммит в нём с помощью cron каждые 15 минут ;) 
   (Ctrl-D) — мало ли что... У меня один раз гаркнулось часа 4 работы (именно
   работы, и дедлайн поджимал), и с тех пор я умный :) Для того и поставил git
   и настроил автокоммит в нём с помощью cron каждые 15 минут ;)

Если будут дополнительные вопросы по Омеге, их лучше задать в конфе
Если будут дополнительные вопросы по Омеге, их лучше задать в конфе \<xmpp:translate@conference.jabber.ru>. 
\<xmpp:translate@conference.jabber.ru>.

Для вышеописанных целей создан [репозиторий](http://github.com/bigote/Tkabber-Wiki-Translation)
Для вышеописанных целей создан [репозиторий](http://github.com/bigote/Tkabber-Wiki-Translation) на [http://github.com](http://github.com), где и будет храниться весь перевод этой вики. 
на [http://github.com](http://github.com), где и будет храниться весь перевод этой вики.

### <a id="Рекомендуемый_порядок_действий_при_переводе_на_новый_язык_с_нуля"></a>Рекомендуемый порядок действий при переводе на новый язык с нуля

1.  Если вашего языка нет в [**списке наличествующих**](../index.md), обращайтесь к
    самому главному админу вики [**LKnight'у**](Участник_Lknight.md) или, если
1.  Если вашего языка нет в [списке наличествующих](http://tkabber.jabe.ru), обращайтесь к самому главному админу вики [LKnight'у](Участник_Lknight.md) или, если он не вылавливается, к [Bigote](Участник_Bigote.md). Bigote новый субдомен сам сделать не может, но может попробовать выловить LKnight'а ;) Кроме того, нужно будет помочь администраторам проекта отредактировать навигационное меню новой вики, а также поставить ссылку на свою вики на Самой Главной Странице [http://tkabber.jabe.ru](http://tkabber.jabe.ru) и подправить и её навигационное меню. 
    он не вылавливается, к [**Bigote**](Участник_Bigote.md). Bigote новый субдомен
    сам сделать не может, но может попробовать выловить LKnight'а ;) Кроме
    того, нужно будет помочь администраторам проекта отредактировать
    навигационное меню новой вики, а также поставить ссылку на свою вики на
    [**Самой Главной Странице**](../index.md) и подправить и её навигационное меню.
1.  Субдомен создан. Зарегистрируйтесь на вновь созданной версии вики, а также на
1.  Субдомен создан. Зарегистрируйтесь на вновь созданной версии вики, а также на остальных версиях (потому что иначе вы не получите доступа к коду статей-источников, и кроме того, вам ведь придётся добавлять ссылки на ваши статьи во все иноязычные их версии). 
    остальных версиях (потому что иначе вы не получите доступа к коду
    статей-источников, и кроме того, вам ведь придётся добавлять ссылки на ваши
    статьи во все иноязычные их версии).
1.  С какой статьи лучше всего начать перевод? Конечно же, с этой вот самой справки!
1.  С какой статьи лучше всего начать перевод? Конечно же, с этой вот самой справки! Так вы и сами вникнете в стиль оформления статей, и другим авторам, говорящим на языке назначения, поможете. 
    Так вы и сами вникнете в стиль оформления статей, и другим авторам,
    говорящим на языке назначения, поможете.
1.  Набирайте в браузере http://код\_вашего\_языка.tkabber.jabe.ru, и вашему взору
1.  Набирайте в браузере http://код\_вашего\_языка.tkabber.jabe.ru, и вашему взору откроется заглавная страница новой версии вики (пустая, естественно). В левой части страницы, под логотипом, расположено навигационное меню. Жмите там на ссылку, ведущую на локальную страницу помощи. В отдельном окне или табе браузера откройте оригинальную статью Помощи, с которой вы делаете перевод, откройте обе на редактирование и скопируйте исходный код статьи-источника в пустое окно редактирования вашей статьи. Сохраните вашу статью и нажмите "Отменить" в статье-источнике. Затем снова откройте на редактирование вашу статью, и можете переводить. 
    откроется заглавная страница новой версии вики (пустая, естественно). В
    левой части страницы, под логотипом, расположено навигационное меню. Жмите
    там на ссылку, ведущую на локальную страницу помощи. В отдельном окне или
    табе браузера откройте оригинальную статью Помощи, с которой вы делаете
    перевод, откройте обе на редактирование и скопируйте исходный код
    статьи-источника в пустое окно редактирования вашей статьи. Сохраните вашу
    статью и нажмите "Отменить" в статье-источнике. Затем снова откройте на
    редактирование вашу статью, и можете переводить.
1.  Не забудьте, что теперь надо обеспечить перекрёстность ссылок на другие
1.  Не забудьте, что теперь надо обеспечить перекрёстность ссылок на другие языковые версии этой статьи. Для этого в каком-нибудь месте кода вашей статьи (лучше всего в самом начале) включите строчку такого вида: **[[en:Main Page]]**, где префикс "en" означает язык другой версии, а "Main Page" — это её название на этом языке. Двоеточие, идущее между префиксом и названием статьи, пробелами не отделяется, а пишется слитно и с префиксом, и с первым словом названия. Сохраняйте статью, и теперь вы увидите в нижней части навигационного меню новый раздел: ссылки на иноязычные версии данной статьи. Необходимо добавить столько ссылок, сколько имеется других версий статьи. Естественно, необходимо также отредактировать также все эти версии, внеся в них ссылку на новый перевод. 
    языковые версии этой статьи. Для этого в каком-нибудь месте кода вашей
    статьи (лучше всего в самом начале) включите строчку такого вида:
    **[[en:Main Page]]**, где префикс "en" означает язык другой версии, а "Main
    Page" — это её название на этом языке. Двоеточие, идущее между префиксом и
    названием статьи, пробелами не отделяется, а пишется слитно и с префиксом,
    и с первым словом названия. Сохраняйте статью, и теперь вы увидите в нижней
    части навигационного меню новый раздел: ссылки на иноязычные версии данной
    статьи. Необходимо добавить столько ссылок, сколько имеется других версий
    статьи. Естественно, необходимо также отредактировать также все эти версии,
    внеся в них ссылку на новый перевод.
1.  Какие ещё статьи имеют приоритет? Следующей по важности является, конечно,
1.  Какие ещё статьи имеют приоритет? Следующей по важности является, конечно, **Заглавная страница** — та, что появляется, когда вы просто набираете в адресной строке "голый" адрес вики. За ней идёт статья **Ткаббер ЧаВо** — коллекция ответов на самые распространённые вопросы, которые могут помочь многим читателям новой версии вики. Затем мы рекомендуем перевести статьи, на которые есть ссылки из ЧаВо, и если есть дальнейшие отсылки — то и их тоже. Ну а дальше выбор за вами :) Не забудьте, что на вики есть специальная служебная статья [Служебная:Allpages](Служебная_AllPages.md), где вы можете окинуть взором предстоящий фронт работ и быть в курсе, что ещё ждёт своей очереди на перевод. 
    **Заглавная страница** — та, что появляется, когда вы просто набираете в
    адресной строке "голый" адрес вики. За ней идёт статья **Ткаббер ЧаВо** —
    коллекция ответов на самые распространённые вопросы, которые могут помочь
    многим читателям новой версии вики. Затем мы рекомендуем перевести статьи,
    на которые есть ссылки из ЧаВо, и если есть дальнейшие отсылки — то и их
    тоже. Ну а дальше выбор за вами :) Не забудьте, что на вики есть
    специальная служебная статья [**Служебная/Все страницы**](Служебная/Все_страницы.md),
    где вы можете окинуть взором предстоящий фронт работ и быть в курсе, что
    ещё ждёт своей очереди на перевод.
1.  Пара советов по переводу таких понятий как [[Участник:bigote]], [[Служебная:Recentchanges]] и так далее.
 *  Вы уже отредактировали и сохранили страницу помощи, теперь идите на
1.  Пара советов по переводу таких понятий как [[Участник:bigote]], [[Служебная:Recentchanges]] и так далее. 
 *  Вы уже отредактировали и сохранили страницу помощи, теперь идите на [страницу последних правок](Служебная_RecentChanges.md) (на вашем языке она будет называться чуть по-другому), и там вы увидите ссылку на только что созданную статью, а рядом будет красоваться ваш ник. Щёлкните по нему мышью, и в открывшейся на редактирование вашей персональной странице (которую, кстати, не помешает заполнить, сообщив хотя бы ваш JID для связи с вами) посмотрите на её название. Должно фигурировать что-то вроде "Редагування Користувач:Bigote" (это на украинском, но можно привести пример и на другом языке). То есть, если вам потребуется вставить ссылку на персональную страницу участника, зарегистрированного на вашей версии вики, используйте шаблон [[Користувач:bigote]]. Если же у этого участника нету персональной страницы на вашем языке, но есть, к примеру, русская или английская страничка, то можете дать интервики-ссылку на неё таким образом: [[:ru:Участник:bigote|Bigote]] — она будет выглядеть как локальная ссылка, но вести будет на персональную статью другой версии. Код языка, естественно, будет зависеть от того, на какую версию вики вы ссылаетесь. 
    [*страницу последних правок*](Служебная_RecentChanges.md) (на вашем языке
    она будет называться чуть по-другому), и там вы увидите ссылку на только
    что созданную статью, а рядом будет красоваться ваш ник. Щёлкните по нему
    мышью, и в открывшейся на редактирование вашей персональной странице
    (которую, кстати, не помешает заполнить, сообщив хотя бы ваш JID для связи
    с вами) посмотрите на её название. Должно фигурировать что-то вроде
    "Редагування Користувач:Bigote" (это на украинском, но можно привести
    пример и на другом языке). То есть, если вам потребуется вставить ссылку на
    персональную страницу участника, зарегистрированного на вашей версии вики,
    используйте шаблон [[Користувач:bigote]]. Если же у этого участника нету
    персональной страницы на вашем языке, но есть, к примеру, русская или
    английская страничка, то можете дать интервики-ссылку на неё таким образом:
    [[:ru:Участник:bigote|Bigote]] — она будет выглядеть как локальная ссылка,
    но вести будет на персональную статью другой версии. Код языка,
    естественно, будет зависеть от того, на какую версию вики вы ссылаетесь.
 *  Таким же образом узнаются названия остальных специальных статей. (Можно
 *  Таким же образом узнаются названия остальных специальных статей. (Можно просто навести на интересующую вас ссылку мышью, и тогда в статус-баре браузера вы увидите полную ссылку, из которой надо вычленить название статьи для вставки в ссылку в исходном коде статьи.) 
    просто навести на интересующую вас ссылку мышью, и тогда в статус-баре
    браузера вы увидите полную ссылку, из которой надо вычленить название
    статьи для вставки в ссылку в исходном коде статьи.)

### <a id="Перевод_на_родной_язык"></a>Перевод на родной язык

Когда вы переводите на родной язык, часто возникает проблема в использовании
Когда вы переводите на родной язык, часто возникает проблема в использовании специфических терминов, относящихся к миру IT. С одной стороны, в русском языке уже давным-давно прижились транслитерации некоторых терминов, такие как "файл", "биндинг", а также адаптированные иностранные слова: "винт", "аська". С другой стороны, для некоторых вещей имеет смысл дать адекватный русский перевод, например, "список контактов" вместо "ростер" (хотя в этом конкретном случае можно поспорить). Какой вариант выбрать — решать вам, но в любом случае пострайтесь не ударяться в крайности. Глупо переводить "binding" как "привязка" — подавляющее большинство читателей вас попросту не поймёт. Но так же глупо транслитерировать какой-то термин только потому, что он иностранный. Часто вполне можно писать в статье по-русски, в самом начале дав исходный термин и расшифровав его. На нашей вики есть специальный раздел — **[Терминология](Терминология.md),** где вы можете проконсультироваться относительно непонятных слов, а также дополнить его, если считаете нужным. 
специфических терминов, относящихся к миру IT. С одной стороны, в русском языке
уже давным-давно прижились транслитерации некоторых терминов, такие как "файл",
"биндинг", а также адаптированные иностранные слова: "винт", "аська". С другой
стороны, для некоторых вещей имеет смысл дать адекватный русский перевод,
например, "список контактов" вместо "ростер" (хотя в этом конкретном случае
можно поспорить). Какой вариант выбрать — решать вам, но в любом случае
пострайтесь не ударяться в крайности. Глупо переводить "binding" как "привязка"
— подавляющее большинство читателей вас попросту не поймёт. Но так же глупо
транслитерировать какой-то термин только потому, что он иностранный. Часто
вполне можно писать в статье по-русски, в самом начале дав исходный термин и
расшифровав его. На нашей вики есть специальный раздел —
[**Терминология**](Терминология.md), где вы можете проконсультироваться
относительно непонятных слов, а также дополнить его, если считаете нужным.

Ещё одна проблема перевода на русский язык (в общем случае, между языками
Ещё одна проблема перевода на русский язык (в общем случае, между языками разных языковых групп) — кальки. Постарайтесь избегать дословных переводов. Если какая-то фраза вам не очень понятна, дословный перевод её не спасёт, а наоборот — искалечит. В большинстве случаев при затруднениях подобного рода вполне можно добиться хорошего перевода, упростив смысл фразы или разбив длинное предложение на два простых. В крайнем случае, оставьте рядом в скобках исходную фразу — вики тем и хороша, что всё можно поправить и подредактировать не один раз. Что-то не можете сделать вы — сделают другие. Кстати говоря, если при чтении статьи, переведённой кем-нибудь другим, вы видите очевидную кальку, которая режет слух, не поленитесь посмотреть это место в статье-исходнике и поправьте перевод. Если вы не знаете языка-исходника, но какое-то место в переводе вам всё же не нравится, не стесняйтесь воспользоваться Обсуждением (ссылку можно найти в верхнем служебном меню, расположенном над каждой статьёй). 
разных языковых групп) — кальки. Постарайтесь избегать дословных переводов.
Если какая-то фраза вам не очень понятна, дословный перевод её не спасёт, а
наоборот — искалечит. В большинстве случаев при затруднениях подобного рода
вполне можно добиться хорошего перевода, упростив смысл фразы или разбив
длинное предложение на два простых. В крайнем случае, оставьте рядом в скобках
исходную фразу — вики тем и хороша, что всё можно поправить и подредактировать
не один раз. Что-то не можете сделать вы — сделают другие. Кстати говоря, если
при чтении статьи, переведённой кем-нибудь другим, вы видите очевидную кальку,
которая режет слух, не поленитесь посмотреть это место в статье-исходнике и
поправьте перевод. Если вы не знаете языка-исходника, но какое-то место в
переводе вам всё же не нравится, не стесняйтесь воспользоваться Обсуждением
(ссылку можно найти в верхнем служебном меню, расположенном над каждой
статьёй).

### <a id="Перевод_на_чужой_язык"></a>Перевод на чужой язык

Все мы знаем, что для того, чтобы сделать хороший перевод, надо в первую
Все мы знаем, что для того, чтобы сделать хороший перевод, надо в первую очередь очень хорошо владеть языком, на который переводишь. Чаще всего и переводят на родной язык, но иногда приходится переводить на чужой. Что можно порекомендовать для этого случая применительно к нашей вики? 
очередь очень хорошо владеть языком, на который переводишь. Чаще всего и
переводят на родной язык, но иногда приходится переводить на чужой. Что можно
порекомендовать для этого случая применительно к нашей вики?

*  Не переводите каламбуры и шутливые фразы, которые мы тут иногда вкрапляем,
*  Не переводите каламбуры и шутливые фразы, которые мы тут иногда вкрапляем, если вы не уверены, что это прозвучит хорошо и адекватно на другом языке (попробуйте-ка перевести, скажем, на английский связку "Глоссарик — Словарий" ;)). Лучше просто передайте основную идею фразы (в нашем примере не заморачивайтесь и напишите Glossary). В конце концов, народ сюда приходит не за приколами, а в поисках информации. Вот и постарайтесь наиболее точно перевести **информационную** составляющую статьи. Но конечно же, если вы способны писать с юмором на другом языке (не обязательно переводить существующие шутки, можно придумывать свои), мы будем только "за" :) 
   если вы не уверены, что это прозвучит хорошо и адекватно на другом языке
   (попробуйте-ка перевести, скажем, на английский связку "Глоссарик —
   Словарий" ;)). Лучше просто передайте основную идею фразы (в нашем примере
   не заморачивайтесь и напишите Glossary). В конце концов, народ сюда приходит
   не за приколами, а в поисках информации. Вот и постарайтесь наиболее точно
   перевести **информационную** составляющую статьи. Но конечно же, если вы
   способны писать с юмором на другом языке (не обязательно переводить
   существующие шутки, можно придумывать свои), мы будем только "за" :)
*  Если есть возможность привлечь к вычитке готового перевода носителя языка,
*  Если есть возможность привлечь к вычитке готового перевода носителя языка, не упускайте её, даже если ваш знакомый слабо разбирается в Jabber и вообще далёк от компьютерной темы. В конце концов, код интернационален, но вот в обычном тексте можно наделать ошибок, не только грамматических, что может быть простительно, но и логических — а это хуже. 
   не упускайте её, даже если ваш знакомый слабо разбирается в Jabber и вообще
   далёк от компьютерной темы. В конце концов, код интернационален, но вот в
   обычном тексте можно наделать ошибок, не только грамматических, что может
   быть простительно, но и логических — а это хуже.
*  Вообще не пренебрегайте спелл-чекерами. Это справедливо даже в случае перевода
*  Вообще не пренебрегайте спелл-чекерами. Это справедливо даже в случае перевода на родной язык ;) 
   на родной язык ;)
*  При переводе статей вики также следует помнить о правилах синтаксиса языка
*  При переводе статей вики также следует помнить о правилах синтаксиса языка назначения. Например, во французском языке все знаки препинания, состоящие из двух элементов (двоеточие, точка с запятой, восклицательный и вопросительный знаки) отделяются от идущего перед ними слова пробелом. Вследствие этого отпадают вопросы по включению этих знаков в выделение жирным шрифтом. 
   назначения. Например, во французском языке все знаки препинания, состоящие
   из двух элементов (двоеточие, точка с запятой, восклицательный и
   вопросительный знаки) отделяются от идущего перед ними слова пробелом.
   Вследствие этого отпадают вопросы по включению этих знаков в выделение
   жирным шрифтом.
*  Как следствие из предыдущего пункта, рекомендуем **не** придерживаться
*  Как следствие из предыдущего пункта, рекомендуем **не** придерживаться изложенных выше правил оформления, если они идут вразрез со стилистикой другого языка. Привести конкретный пример сложно, но если, допустим, вам кажется, что выделение курсивом смотрится на другом языке плохо (я вот понятия не имею, можно ли выделять курсивом японские иероглифы), придумайте другой способ акцентировать нужный фрагмент текста. 
   изложенных выше правил оформления, если они идут вразрез со стилистикой
   другого языка. Привести конкретный пример сложно, но если, допустим, вам
   кажется, что выделение курсивом смотрится на другом языке плохо (я вот
   понятия не имею, можно ли выделять курсивом японские иероглифы), придумайте
   другой способ акцентировать нужный фрагмент текста.

### <a id="Перевод_меню"></a>Перевод меню

В нашей вики редактировать меню можно лишь администраторам проекта. Свяжитесь
В нашей вики редактировать меню можно лишь администраторам проекта. Свяжитесь либо с [Участник:Bigote](Участник_Bigote.md), либо с [Участник:Lknight](Участник_Lknight.md). 
либо с [**Bigote**](Участник_Bigote.md), либо с [**Lknight**](Участник_Lknight.md).

### <a id="Локализация_Ткаббера"></a>Локализация Ткаббера

В установочном каталоге Ткаббера есть директорий под названием **msgs**, внутри
В установочном каталоге Ткаббера есть директорий под названием **msgs**, внутри которого лежат файлы сообщений на разных языках. Если вы видите, что вашего языка среди них нет, и вам хотелось бы Ткаббер локализовать, можете заняться переводом самостоятельно. Также может иметь смысл обновить существующий перевод, потому что процесс разработки не стоит на месте. В Ткаббере есть встроенное средство, облегчающее жизнь переводчику, но лучше опишем весь процесс по порядку. (Кстати, на официальном сайте появилась более подробная [статья о локализации Ткаббера (на английском)](http://tkabber.jabber.ru/translate/how-to-start-new). ![(!)](../images/Hammer.png) **Сделать:** Перевести бы её на русский да здесь выложить...) 
которого лежат файлы сообщений на разных языках. Если вы видите, что вашего
языка среди них нет, и вам хотелось бы Ткаббер локализовать, можете заняться
переводом самостоятельно. Также может иметь смысл обновить существующий
перевод, потому что процесс разработки не стоит на месте. В Ткаббере есть
встроенное средство, облегчающее жизнь переводчику, но лучше опишем весь
процесс по порядку. (Кстати, на официальном сайте появилась более подробная
[статья о локализации Ткаббера (на английском)](http://tkabber.jabber.ru/translate/how-to-start-new).

![(!)](../images/Hammer.png) **Сделать:** Перевести бы её на русский да здесь
выложить...)

#### <a id="Обновляем_существующие_сообщения"></a>Обновляем существующие сообщения

1.  Сначала надо установить самую последнюю версию Ткаббера с svn-репозитория.
 *  Установите, если у вас нет, клиент [subversion](http://subversion.tigris.org/);
 *  создайте рабочий каталог, например, **~/tkabber-svn**, и перейдите в него **cd tkabber-svn**;
 *  затем в терминале наберите
1.  Сначала надо установить самую последнюю версию Ткаббера с svn-репозитория. 
 *  Установите, если у вас нет, клиент [subversion](http://subversion.tigris.org/); 
 *  создайте рабочий каталог, например, **~/tkabber-svn**, и перейдите в него **cd tkabber-svn**; 
 *  затем в терминале наберите 

            svn co https://svn.xmpp.ru/repos/tkabber/trunk .
    svn co https://svn.xmpp.ru/repos/tkabber/trunk .

    (Сие означает: "получить содержимое [транка](Терминология.md#Транк_trunk) проекта Ткаббер в текущий каталог".)
 *  Если у вас выскочила ошибка "svn: SSL is not supported", наберите ту же команду,
 (Сие означает: "получить содержимое [транка](Терминология.md#транк) проекта Ткаббер в текущий каталог".) 
 *  Если у вас выскочила ошибка "svn: SSL is not supported", наберите ту же команду, только вместо **https** напишите **http**. 
    только вместо **https** напишите **http**.
 *  В результате описанных заклинаний у вас в рабочем каталоге появится два
 *  В результате описанных заклинаний у вас в рабочем каталоге появится два подкаталога: **tkabber** и **tkabber-plugins** — собственно программа и её плагины. 
    подкаталога: **tkabber** и **tkabber-plugins** — собственно программа и её плагины.

1.  Начинаем работу (в примере даётся итальянский язык, вам надо ставить свой).
 *
 
1.  Начинаем работу (в примере даётся итальянский язык, вам надо ставить свой). 
 *  
    cd tkabber

 *
 
 *  
    tclsh ./contrib/extract-translations/extract.tcl . msgs/it.msg >../it.msg

 *
 
 *  
    tclsh ./contrib/extract-translations/extract.tcl . -v msgs/it.msg >../it.msg.1

 *  Файл it.msg содержит непереведённые строки,
 *  файл it.msg.1 — лишние (которые были переведены ранее, но потом были исключены
 
 *  Файл it.msg содержит непереведённые строки, 
 *  файл it.msg.1 — лишние (которые были переведены ранее, но потом были исключены из оригинальной английской версии). 
    из оригинальной английской версии).

1.  Переводим.
 *  Редактор годится любой, лишь бы он корректно работал с UTF-8.
 *  Сначала ознакомьтесь с существующим текстом перевода **msgs/it.msg**,
 
1.  Переводим. 
 *  Редактор годится любой, лишь бы он корректно работал с UTF-8. 
 *  Сначала ознакомьтесь с существующим текстом перевода **msgs/it.msg**, чтобы знать, как устроен файл, как выглядят строки сообщений. 
    чтобы знать, как устроен файл, как выглядят строки сообщений.
 *  Вот пример такой строки:
  *  ::msgcat::mcset it "Select" "Seleziona"
  *  ::msgcat::mcset — по этому началу вы распознаете сообщение;
  *  it — язык;
  *  "Select" — английская версия сообщения;
  *  "Seleziona" — итальянский перевод.

 *  Что трогать не надо:
  *  %s — Ткаббер превращает этот дуэт символов в ник собеседника или название
 *  Вот пример такой строки: 
  *  ::msgcat::mcset it "Select" "Seleziona" 
  *  ::msgcat::mcset — по этому началу вы распознаете сообщение; 
  *  it — язык; 
  *  "Select" — английская версия сообщения; 
  *  "Seleziona" — итальянский перевод. 
 
 *  Что трогать не надо: 
  *  %s — Ткаббер превращает этот дуэт символов в ник собеседника или название комнаты ("Send file to %s" "Invia il file a %s"); 
     комнаты ("Send file to %s" "Invia il file a %s");
  *  \\n — символ перевода строки, \\t — табуляции ("\\n\\tClient: %s" "\\n\\tProgramma: %s");
  *  Если строка содержит знак $, удалите или закоменнтируйте её — последовательности
  *  \\n — символ перевода строки, \\t — табуляции ("\\n\\tClient: %s" "\\n\\tProgramma: %s"); 
  *  Если строка содержит знак $, удалите или закоменнтируйте её — последовательности вида `$foo` означают раскрытие переменной _в время выполнения программы_ и их перевод бессмыслен, так как реально переводятся те строки, которые эта переменная будет содержать, и они скорее всего содержатся где-то в других местах файла сообщений. 
     вида `$foo` означают раскрытие переменной _в время выполнения программы_ и
     их перевод бессмыслен, так как реально переводятся те строки, которые эта
     переменная будет содержать, и они скорее всего содержатся где-то в других
     местах файла сообщений.

 *  В начале файла добавьте в комментарии ваше имя и контактную информацию на случай
 
 *  В начале файла добавьте в комментарии ваше имя и контактную информацию на случай того, если кто-то найдёт в переводе ошибки и захочет вас о них известить. 
    того, если кто-то найдёт в переводе ошибки и захочет вас о них известить.
 *  Завершив перевод, потестируйте его хотя бы на предмет того, запустится ли Ткаббер
 *  Завершив перевод, потестируйте его хотя бы на предмет того, запустится ли Ткаббер с этим файлом. Пропишите в конфиге строчку **::msgcat::mclocale it** и запустите Ткаббер. Если на старте выскочила ошибка, просмотрите её внимательно, и если она относится к файлу, который вы только что перевели, то скорее всего, вы чего-то там либо не дописали, либо написали лишнего, например, воткнули или стёрли символ кавычек. В сообщении об ошибке обычно говорится, в какой строке файла следует её искать. 
    с этим файлом. Пропишите в конфиге строчку **::msgcat::mclocale it** и
    запустите Ткаббер. Если на старте выскочила ошибка, просмотрите её
    внимательно, и если она относится к файлу, который вы только что перевели,
    то скорее всего, вы чего-то там либо не дописали, либо написали лишнего,
    например, воткнули или стёрли символ кавычек. В сообщении об ошибке обычно
    говорится, в какой строке файла следует её искать.
 *  Если всё работает нормально, сообщите о проделанной работе авторам программы,
 *  Если всё работает нормально, сообщите о проделанной работе авторам программы, лучше всего teo (`xmpp:sgolovan@nes.ru`) и вышлите ему готовый файл, чтобы проверил всё перед включением обновлённого перевода в транк. Вообще неплохо было бы прежде чем садиться за перевод, проконсультироваться с ним: вдруг уже кто-то этим языком занимается? 
    лучше всего teo (`xmpp:sgolovan@nes.ru`) и вышлите ему готовый файл, чтобы
    проверил всё перед включением обновлённого перевода в транк. Вообще неплохо
    было бы прежде чем садиться за перевод, проконсультироваться с ним: вдруг
    уже кто-то этим языком занимается?

#### <a id="Создание_новой_версии"></a>Создание новой версии

Шаги, описанные выше, вам надо будет проделать и в случае перевода с нуля, разве
Шаги, описанные выше, вам надо будет проделать и в случае перевода с нуля, разве что придётся взять за образец оформления вашего файла какой-либо из существующих (тот же английский, к примеру). В первой строке не забудьте поставить дату создания файла, а чуть ниже — оставить ваше имя и контакты (в виде комментария, естественно). 
что придётся взять за образец оформления вашего файла какой-либо из
существующих (тот же английский, к примеру). В первой строке не забудьте
поставить дату создания файла, а чуть ниже — оставить ваше имя и контакты (в
виде комментария, естественно).

#### <a id="Что_ещё_переводить"></a>Что ещё переводить?

1.  Кроме файла сообщений **ваш\_язык.msg** неплохо бы создать файл ресурсов
1.  Кроме файла сообщений **ваш\_язык.msg** неплохо бы создать файл ресурсов BWidget — **ваш\_язык.rc**, если его ещё нет. Говоря простыми словами, в этом файле лежат названия кнопок и прочих элементов интерфейса Ткаббера. В каталоге **msgs** уже имеются русская и польская версии, которые могут служить в качестве образца для оформления. 
    BWidget — **ваш\_язык.rc**, если его ещё нет. Говоря простыми словами, в
    этом файле лежат названия кнопок и прочих элементов интерфейса Ткаббера. В
    каталоге **msgs** уже имеются русская и польская версии, которые могут
    служить в качестве образца для оформления.
1.  Разнообразные плагины тоже имеют свои сообщения. Скачайте с svn-репозитория
1.  Разнообразные плагины тоже имеют свои сообщения. Скачайте с svn-репозитория свежие плагины: **svn co http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins tkabber-plugins** и посмотрите — в каждом плагине имеется свой каталог **msgs**. Вперёд и с песней! ;) 
    свежие плагины: **svn co
    http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins tkabber-plugins** и
    посмотрите — в каждом плагине имеется свой каталог **msgs**. Вперёд и с
    песней! ;)
1.  В установочном директории Ткаббера есть каталог **trans**, где находятся
    сообщения, используемые новым плагином "Remote Control" ("Удалённое
    управление"). На данный момент является основной (и единственной) русская
1.  В установочном директории Ткаббера есть каталог **trans**, где находятся сообщения, используемые новым плагином "Remote Control" ("Удалённое управление"). На данный момент является основной (и единственной) русская версия, но надеемся, что в ближайшем будущем файл будет переведён на английский и таким образом станет доступен для перевода на многие другие языки. Формат файла похожий, за исключением начала строки сообщения: ::trans::trset ru 


    версия, но надеемся, что в ближайшем будущем файл будет переведён на
    английский и таким образом станет доступен для перевода на многие другие
    языки. Формат файла похожий, за исключением начала строки
    сообщения: ::trans::trset ru

Changes to wiki/ru/Tkabber_Windows_Mini_HOWTO.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19






20
21
22
23



24
25
26
27
28

29
30
31
32

33
34
35

36
37
38
39

40
41
42



43
44
45



46
47

48
49
50



51
52
53



54
55
56
57

58
59

60
61

62
63
64
65
66
67
68
69

70
71
72
73
74
75
76






77
78
79
80
81

82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98

99
100
101

102
103
104
105
106
107
108
109

110
111
112
113
114
115

116
117
118
119

120
121
122
123
124
125

126
127
128
129

130
131
132

133
134
135
136
137
138

139
140

141
142
143

144
145
146
147
148

149
150
151
152
153

154
155
156

157
158
159
160
161
162
163
164
165
166
167
168
169
170

171
172
173

174
175
176
177

178
179
180
181
182
183
184

185
186
187

188
189
190

191
192
193
194
195
196
197
198

199
200
201

202
203
204
205
206
207
208

209
210
211

212
213
214
215
216
217
218
219

220
221
222
223
224
225

226
227
228
229
230
231

232
233

234
235
236
237

238
239
240

241
242
243
244
245
246

247
248
249
250
251

252
253
254

255
256
257
258

259
260
261
262
263

264
265
266
267
268
269



270
271
272

273
274

275
276
277

278
279
280
281
282

283
284
285
286
287
288
289
290

291
292
293

294
295
296
297
298



1
2
3
4
5
6
7
8
9
10
11
12
13
14






15
16
17
18
19
20
21



22
23
24
25
26
27
28

29


30

31

32

33
34
35
36

37
38


39
40
41
42


43
44
45
46

47
48


49
50
51
52


53
54
55
56
57
58

59
60

61
62

63




64
65
66

67
68






69
70
71
72
73
74



75

76











77
78
79
80
81

82

83

84






85

86




87

88
89
90
91

92
93
94
95



96
97
98
99

100

101

102


103
104
105

106
107

108

109

110



111

112


113


114



115

116
117
118
119
120
121
122
123
124
125
126
127

128

129

130
131
132
133

134



135
136
137

138

139

140

141

142



143
144
145
146

147

148

149
150
151
152
153
154
155

156

157

158




159
160
161

162




163

164
165
166
167
168
169

170
171

172


173

174

175

176




177

178


179


180

181

182
183
184
185

186



187

188






189
190
191



192


193

194

195

196
197
198

199



200
201
202
203

204

205

206
207
208
209


210
211
212

+












-
-
-
-
-
-
+
+
+
+
+
+

-
-
-
+
+
+




-
+
-
-

-
+
-

-
+



-
+

-
-
+
+
+

-
-
+
+
+

-
+

-
-
+
+
+

-
-
+
+
+



-
+

-
+

-
+
-
-
-
-



-
+

-
-
-
-
-
-
+
+
+
+
+
+
-
-
-

-
+
-
-
-
-
-
-
-
-
-
-
-





-
+
-

-
+
-
-
-
-
-
-

-
+
-
-
-
-

-
+



-
+



-
-
-
+



-
+
-

-
+
-
-



-
+

-
+
-

-
+
-
-
-

-
+
-
-

-
-
+
-
-
-
+
-












-
+
-

-
+



-
+
-
-
-



-
+
-

-
+
-

-
+
-
-
-




-
+
-

-
+






-
+
-

-
+
-
-
-
-



-
+
-
-
-
-

-
+





-
+

-
+
-
-

-
+
-

-
+
-
-
-
-

-
+
-
-

-
-
+
-

-
+



-
+
-
-
-

-
+
-
-
-
-
-
-
+
+
+
-
-
-
+
-
-
+
-

-
+
-



-
+
-
-
-




-
+
-

-
+



-
-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Tkabber_Windows_Mini_HOWTO/index.html)


# Tkabber Windows Mini HOWTO

Материал из Tkabber Wiki.

## <a id="toc"></a>Содержание

* [1 Предисловие с объяснением](#Предисловие_с_объяснением)
* [2 Авторы](#Авторы)
* [3 Введение](#Введение)
* [4 Что нам нужно](#Что_нам_нужно)
* [5 Установка](#Установка)
   * [5.1 ActiveState Tcl](#ActiveState_Tcl)
   * [5.2 Winico](#Winico)
   * [5.3 TLS](#TLS)
   * [5.4 WinIdle](#WinIdle)
   * [5.5 Ispell](#Ispell)
   * [5.6 Tkabber](#Tkabber)
 * [5.1 ActiveState Tcl](#ActiveState_Tcl)
 * [5.2 Winico](#Winico)
 * [5.3 TLS](#TLS)
 * [5.4 WinIdle](#WinIdle)
 * [5.5 Ispell](#Ispell)
 * [5.6 Tkabber](#Tkabber)
* [6 Настройка](#Настройка)
   * [6.1 Конфигурационный файл config.tcl](#Конфигурационный_файл_config.tcl)
   * [6.2 Плагины](#Плагины)
   * [6.3 Шрифты](#Шрифты)
 * [6.1 Конфигурационный файл config.tcl](#Конфигурационный_файл_config.tcl)
 * [6.2 Плагины](#Плагины)
 * [6.3 Шрифты](#Шрифты)
* [7 Благодарности](#Благодарности)

## <a id="Предисловие_с_объяснением"></a>Предисловие с объяснением

Это — _временная_ копия статьи "Tkabber Windows Mini HOWTO" с сайта Сергея
Это — _временная_ копия статьи "Tkabber Windows Mini HOWTO" с сайта Сергея Голованя. Этот сайт не работает, так что информация на время помещена в этом вики. 
Голованя. Этот сайт не работает, так что информация на время помещена в этом
вики.

[**Kostix**](Участник_Kostix.md) 15:24, 19 октября 2006 (MSD) Сайт давно
[Kostix](Участник_Kostix.md) 15:24, 19 октября 2006 (MSD) Сайт давно доступен, но статью оставим. 
доступен, но статью оставим.

Оригинал документа доступен [здесь](http://sgolovan.nes.ru/jabber/Tkabber-Windows-Mini-Howto.html).
Оригинал документа доступен [здесь](http://sgolovan.nes.ru/jabber/Tkabber-Windows-Mini-Howto.html). 

## <a id="Авторы"></a>Авторы

© Александр Куприн (aka ru\_classic), 31 января 2003 г.
© Александр Куприн (aka ru\_classic), 31 января 2003 г. 

##### e-mail
`ru_classic at mail ru`
 e-mail 

 `ru_classic at mail ru` 

##### JID
`ru_classic at jabber ru`
 JID 

 `ru_classic at jabber ru` 

© Сергей Головань (aka teo), 29 ноября 2005 г. (обновления)
© Сергей Головань (aka teo), 29 ноября 2005 г. (обновления) 

##### e-mail
 `sgolovan at nes ru`
 e-mail 

 `sgolovan at nes ru` 

##### JID
 `sgolovan at nes ru`
 JID 

 `sgolovan at nes ru` 

## <a id="Введение"></a>Введение

_90% всего — это вода. Закон Старджона._
_90% всего — это вода. Закон Старджона._ 

(в стиле разговоров, ведущихся в `talks@conference.jabber.ru`)
(в стиле разговоров, ведущихся в `talks@conference.jabber.ru`) 

_`ru_classic` смотрит на эпиграф и полностью с ним согласен. Поэтому не будем
_ `ru_classic` смотрит на эпиграф и полностью с ним согласен. Поэтому не будем лить воду красноречия на мельницу вашего внимания, а перейдём к делу. Хочу сразу заметить, что этот документ не претендует на полноту изложения — его целью было описать шаги, позволяющие настроить Tkabber в среде Windows, а не пересказывать оригинальное руководство по настройке Tkabber. _ 
лить воду красноречия на мельницу вашего внимания, а перейдём к делу. Хочу
сразу заметить, что этот документ не претендует на полноту изложения — его
целью было описать шаги, позволяющие настроить Tkabber в среде Windows, а не
пересказывать оригинальное руководство по настройке Tkabber._

## <a id="Что_нам_нужно"></a>Что нам нужно

Для того, чтобы Tkabber заработал в Windows, вам понадобятся следующие пакеты:
Для того, чтобы Tkabber заработал в Windows, вам понадобятся следующие пакеты: 

*  [Tkabber](http://tkabber.jabber.ru/) — без комментариев.
*  [ActiveState Tcl](http://www.activestate.com/Products/ActiveTcl) — собственно «тикль» под Windows.
*  [Winico](http://sourceforge.net/projects/tktable/) — пакет позволяющий работать с системным треем.
*  **TLS** — поддержка SSL.
*  [TclWinIdle](http://sgolovan.nes.ru/jabber/tclWinidle/) — поддержка auto-away.
*  [Ispell](ftp://ftp.kiarchive.ru/pub/.3/djgpp/v2gnu/isp3206b.zip) — программа проверки
*  [Tkabber](http://tkabber.jabber.ru/) — без комментариев. 
*  [ActiveState Tcl](http://www.activestate.com/Products/ActiveTcl) — собственно «тикль» под Windows. 
*  [Winico](http://sourceforge.net/projects/tktable/) — пакет позволяющий работать с системным треем. 
*  **TLS** — поддержка SSL. 
*  [TclWinIdle](http://sgolovan.nes.ru/jabber/tclWinidle/) — поддержка auto-away. 
*  [Ispell](ftp://ftp.kiarchive.ru/pub/.3/djgpp/v2gnu/isp3206b.zip) — программа проверки орфографии и совмещенный [русский/английский](ftp://ftp.vsu.ru/mirrors/scon155.phys.msu.su/pub/russian/ispell/ruseng/ruseng.tar.gz) словарь к ней. 
   орфографии и совмещенный
   [русский/английский](ftp://ftp.vsu.ru/mirrors/scon155.phys.msu.su/pub/russian/ispell/ruseng/ruseng.tar.gz)
   словарь к ней.

**Примечание** (написанное по просьбе автора Tkabber): Вообще-то, для того
**Примечание** (написанное по просьбе автора Tkabber): Вообще-то, для того чтобы Tkabber заработал, достаточно только двух пакетов — Active State Tcl и Tkabber, но остальные пакеты «рекомендованы» к использованию. Посудите сами, неужели вам захочется, чтобы ваш трафик мог читать любой, кто в состоянии запустить сетевой сниффер. А это не так уж и трудно. Поэтому вам просто необходим TLS. Всегда удобно прятать в трее работающую программу, чтобы она не захламляла рабочий стол. Вот и Winico пригодился. Ну, а WinIdle — это мелочь, которая приятна. :) Вы надолго отошли от компьютера, а ваш собеседник уверен, что вы слышите его и продолжает общаться с вами. А вас на самом деле нет. Вот и пригодился пакет WinIdle — он будет отслеживать простой системы и автоматически выставлять статус клиента (away или ext-away). Ну, и если вы с орфографией на «вы», то вам совсем не помешает костыль в виде Ispell. 
чтобы Tkabber заработал, достаточно только двух пакетов — Active State Tcl и
Tkabber, но остальные пакеты «рекомендованы» к использованию. Посудите сами,
неужели вам захочется, чтобы ваш трафик мог читать любой, кто в состоянии
запустить сетевой сниффер. А это не так уж и трудно. Поэтому вам просто
необходим TLS. Всегда удобно прятать в трее работающую программу, чтобы она не
захламляла рабочий стол. Вот и Winico пригодился. Ну, а WinIdle — это мелочь,
которая приятна. :) Вы надолго отошли от компьютера, а ваш собеседник уверен,
что вы слышите его и продолжает общаться с вами. А вас на самом деле нет. Вот и
пригодился пакет WinIdle — он будет отслеживать простой системы и автоматически
выставлять статус клиента (away или ext-away). Ну, и если вы с орфографией на
«вы», то вам совсем не помешает костыль в виде Ispell.

## <a id="Установка"></a>Установка

### <a id="ActiveState_Tcl"></a>ActiveState Tcl

На момент написания обновлений к статье рекомендуется устанавливать последнюю
На момент написания обновлений к статье рекомендуется устанавливать последнюю стабильную версию ActiveTcl (из ветки 8.4). 
стабильную версию ActiveTcl (из ветки 8.4).

Установка не вызывает особых проблем. Оставляйте настройки по-умолчанию. За
Установка не вызывает особых проблем. Оставляйте настройки по-умолчанию. За исключением одной — укажите, что Tcl устанавливается для всех пользователей компьютера. Обратите внимание, что имена каталогов содержат в качестве разделителей обратный слеш «/». Так, как это принято в среде \*nix. Пусть вас это не смущает. И последнее — после установки не забудьте добавить в переменную среды `PATH` путь к C:\\Tcl\\bin или к тому каталогу, в который вы установили «тикль» (здесь и далее я буду ссылаться на каталог C:\\Tcl). 
исключением одной — укажите, что Tcl устанавливается для всех пользователей
компьютера. Обратите внимание, что имена каталогов содержат в качестве
разделителей обратный слеш «/». Так, как это принято в среде \*nix. Пусть вас
это не смущает. И последнее — после установки не забудьте добавить в переменную
среды `PATH` путь к **C:\\Tcl\\bin** или к тому каталогу, в который вы установили
«тикль» (здесь и далее я буду ссылаться на каталог **C:\\Tcl**).

Если при пробном пуске Tkabber вы видите ошибку, аналогичную “`Error in startup
Если при пробном пуске Tkabber вы видите ошибку, аналогичную “`Error in startup script: can't find package sha1`”, значит, ваш свежий ActiveState ActiveTcl (например, 8.5.x) не содержит предустановленных пакетов, необходимых для запуска Tkabber. Взамен он содержит инсталлятор пакетов, с помощью которого можно восполнить недостачу: teacup.exe. 
script: can't find package sha1`”, значит, ваш свежий ActiveState ActiveTcl
(например, 8.5.x) не содержит предустановленных пакетов, необходимых для
запуска Tkabber. Взамен он содержит инсталлятор пакетов, с помощью которого
можно восполнить недостачу: **teacup.exe**.

Запустите
Запустите 

    C:\Tcl\bin\teacup.exe install tcllib

затем
затем 

    C:\Tcl\bin\teacup.exe install udp

После того, как Teacup скачает с
[http://teapot.activestate.com](http://teapot.activestate.com) и установит
изрядное количество пакетов, проблема будет устранена.
После того, как Teacup скачает с [http://teapot.activestate.com](http://teapot.activestate.com) и установит изрядное количество пакетов, проблема будет устранена. 

### <a id="Winico"></a>Winico

Если вы устанавливаете Tkabber версии 0.9.8 или более раннюю, то устанавливайте
Если вы устанавливаете Tkabber версии 0.9.8 или более раннюю, то устанавливайте Winico версии 0.5. Для версии Tkabber'а из CVS лучше установить Winico 0.6. 
Winico версии 0.5. Для версии Tkabber'а из CVS лучше установить Winico 0.6.

Для установки Winico просто распакуйте загруженный архив в каталог
Для установки Winico просто распакуйте загруженный архив в каталог **c:\\tcl\\lib**. Запустите демонстрационный скрипт demo.tcl, чтобы убедиться в работоспособности пакета Winico (скрипт включен только в Winico 0.6). 
**c:\\tcl\\lib**. Запустите демонстрационный скрипт demo.tcl, чтобы убедиться в
работоспособности пакета Winico (скрипт включен только в Winico 0.6).

### <a id="TLS"></a>TLS

Пакет TLS используется для создания шифрованного соединения с сервером.
Пакет TLS используется для создания шифрованного соединения с сервером. 

Этого пакета не было в составе дистрибутивов Tcl/Tk от
Этого пакета не было в составе дистрибутивов Tcl/Tk от [ActiveState](http://www.activestate.com/) вплоть до версии 8.4.15. 
[ActiveState](http://www.activestate.com/) вплоть до версии 8.4.15.

Поэтому, если у вас Tcl/Tk \<= 8.4.14, скачайте **tls**
Поэтому, если у вас Tcl/Tk \<= 8.4.14, скачайте **tls** [отсюда](http://sourceforge.net/projects/tls/) и распакуйте содержимое этого архива в каталог с модулями Tcl (обычно это C:\\Tcl\\lib); больше ничего делать не нужно. 
[отсюда](http://sourceforge.net/projects/tls/) и распакуйте содержимое этого
архива в каталог с модулями Tcl (обычно это **C:\\Tcl\\lib**); больше ничего делать
не нужно.

Вошедший же в состав 8.4.15 пакет **tls** содержит ошибку в загрузчике этого
Вошедший же в состав 8.4.15 пакет **tls** содержит ошибку в загрузчике этого пакета, в результате чего на большинстве систем этот пакет загрузить невозможно. Существует два решения этой проблемы: 
пакета, в результате чего на большинстве систем этот пакет загрузить
невозможно. Существует два решения этой проблемы:

*  Либо скопируйте файлы **libeay32.dll** и **ssleay32.dll** из каталога с пакетом
   **tls** (в стандартно установленном дистрибутиве 8.4.15 это
*  Либо скопируйте файлы libeay32.dll и ssleay32.dll из каталога с пакетом **tls** (в стандартно установленном дистрибутиве 8.4.15 это C:\\Tcl\\lib\\tls1.5.1) в C:\\WINDOWS\\system32 (или любой другой каталог, содержащийся в списке каталогов переменной окружения **PATH**); 
   **C:\\Tcl\\lib\\tls1.5.1**) в **C:\\WINDOWS\\system32** (или любой другой каталог,
   содержащийся в списке каталогов переменной окружения **PATH**);
*  Либо замените содержимое файла **pkgIndex.tcl** в каталоге пакета
*  Либо замените содержимое файла pkgIndex.tcl в каталоге пакета **tls** (см. выше) на такое: 
   **tls** (см. выше) на такое:

    package ifneeded tls 1.5.1 "namespace eval tls {
        variable cd \[pwd\]
      };
      cd [list $dir];
      [list load [file join $dir tls151.dll]];
      [list source [file join $dir tls.tcl]];
      namespace eval tls {
        cd \[set cd\]
        unset cd
      }"

(желательно предварительно скопировать оригинальный файл на случай ошибки
(желательно предварительно скопировать оригинальный файл на случай ошибки редактирования). 
редактирования).

После этого модуль **tls** будет успешно загружаться.
После этого модуль **tls** будет успешно загружаться. 

### <a id="WinIdle"></a>WinIdle

Для того чтобы включить в Tkabber возможность функции auto-away, вам необходимо
Для того чтобы включить в Tkabber возможность функции auto-away, вам необходимо установить пакет **TclWinIdle**. Распакуйте его в подкаталог **c:\\tcl\\lib**. В архиве есть тестовый скрипт **test.tcl**. Запустите его, чтобы проверить работает пакет WinIdle или нет. 
установить пакет **TclWinIdle**. Распакуйте его в подкаталог **c:\\tcl\\lib**.
В архиве есть тестовый скрипт **test.tcl**. Запустите его, чтобы проверить
работает пакет WinIdle или нет.

### <a id="Ispell"></a>Ispell

Программа проверки орфографии (на сленге — спеллер). Вещь удобная и незаменимая
Программа проверки орфографии (на сленге — спеллер). Вещь удобная и незаменимая в тех случаях, если вы не в ладах с правописанием. 
в тех случаях, если вы не в ладах с правописанием.

Итак. Я расположил Ispell на диске **C:**. Поэтому все пути, которые тут будут
Итак. Я расположил Ispell на диске **C:**. Поэтому все пути, которые тут будут указаны, даны в привязке к моей машине. Куда вы установите Ispell — дело ваше. 
указаны, даны в привязке к моей машине. Куда вы установите Ispell — дело ваше.

Создайте подкаталог c:\\ispell. Скопируйте в него содержимое архива
Создайте подкаталог c:\\ispell. Скопируйте в него содержимое архива **isp3206b.zip** (для поиска файла можете воспользоваться ссылкой, которая дана выше или, что будет правильней, поискать файл с таким именем через поисковую машину FileSearch). Кроме этого настройте следующие переменные окружения: 
**isp3206b.zip** (для поиска файла можете воспользоваться ссылкой, которая дана
выше или, что будет правильней, поискать файл с таким именем через поисковую
машину FileSearch). Кроме этого настройте следующие переменные окружения:

    ISPELL_DICTDIR=c:\ispell\lib
    ISPELL_HOME=c:\ispell

А к переменной **PATH** добавьте путь **c:\\ispell\\bin**. Перегрузите
А к переменной **PATH** добавьте путь **c:\\ispell\\bin**. Перегрузите компьютер, чтобы изменения вступили в силу. 
компьютер, чтобы изменения вступили в силу.

Теперь распакуйте файл **ruseng.tar.gz** во временный каталог и выполните команды
Теперь распакуйте файл **ruseng.tar.gz** во временный каталог и выполните команды 

    buildhash ruseng.dict ruseng.aff c:\ispell\lib\ruseng.hash
    del c:\ispell\lib\ruseng.cnt
    del c:\ispell\lib\ruseng.stat
    copy ruseng.aff c:\ispell\lib\ruseng.aff

В результате этого в подкаталоге **c:\\ispell\\lib** появится два файла —
В результате этого в подкаталоге **c:\\ispell\\lib** появится два файла — **ruseng.hash** и **ruseng.aff**. 
**ruseng.hash** и **ruseng.aff**.

Всё. Ispell готов к «употреблению». Что вам ещё осталось сделать, так это
Всё. Ispell готов к «употреблению». Что вам ещё осталось сделать, так это (после того как установите Tkabber) скопировать скрипт **ispell.tcl** из каталога **tkabber/plugins/unix** в **~/.tkabber/plugins/ispell** (подробнее про каталог **~/.tkabber** см. ниже) и настроить плагин, указав словарь ruseng и кодировку словаря koi8-r. 
(после того как установите Tkabber) скопировать скрипт **ispell.tcl** из
каталога **tkabber/plugins/unix** в **~/.tkabber/plugins/ispell** (подробнее
про каталог **~/.tkabber** см. ниже) и настроить плагин, указав словарь ruseng
и кодировку словаря koi8-r.

### <a id="Tkabber"></a>Tkabber

А вот и «виновник» происходящего. :) Скачать последнюю версию Tkabber вы можете
А вот и «виновник» происходящего. :) Скачать последнюю версию Tkabber вы можете отсюда. Распакуйте архив там, где вам удобно (я расположил Tkabber в **D:\\Tkabber**) и создайте на рабочем столе ярлык для файла **tkabber.tcl**. **tkabber.tcl** — это основной скрипт пакета. Он занимает настройкой переменных, загрузкой дополнительных модулей и «прочая, прочая». :) 
отсюда. Распакуйте архив там, где вам удобно (я расположил Tkabber в
**D:\\Tkabber**) и создайте на рабочем столе ярлык для файла **tkabber.tcl**.
**tkabber.tcl** — это основной скрипт пакета. Он занимает настройкой
переменных, загрузкой дополнительных модулей и «прочая, прочая». :)

Теперь перейдём к настройке.
Теперь перейдём к настройке. 

## <a id="Настройка"></a>Настройка

### <a id="Конфигурационный_файл_config.tcl"></a>Конфигурационный файл config.tcl

Конфигурационный файл Tkabber (config.tcl) располагается в подкаталоге **~/.tkabber**.
Конфигурационный файл Tkabber (config.tcl) располагается в подкаталоге **~/.tkabber**. 

Если вы не работали в среде \*nix, то такое имя каталога для вас немного
Если вы не работали в среде \*nix, то такое имя каталога для вас немного необычно. Для тех, кто не в курсе — символ тильды в имени файла (каталога) «~» обозначает домашний каталог пользователя. 
необычно. Для тех, кто не в курсе — символ тильды в имени файла (каталога) «~»
обозначает домашний каталог пользователя.

Точка «.» в начале имени файла или каталога указывает, что каталог «скрытый»
Точка «.» в начале имени файла или каталога указывает, что каталог «скрытый» (используется в \*nix). 
(используется в \*nix).

В случае с ОС Windows ситуация следующая — если вы работаете с Windows'95/98/2K
В случае с ОС Windows ситуация следующая — если вы работаете с Windows'95/98/2K (и возможно ME — не могу однозначно сказать — не проверял), то каталог **.tkabber** должен располагаться в корневом каталоге того логического диска, на котором установлена Windows. В моём случае это диск **D:** (**D:\\.tkabber\\**). 
(и возможно ME — не могу однозначно сказать — не проверял), то каталог
**.tkabber** должен располагаться в корневом каталоге того логического диска,
на котором установлена Windows. В моём случае это диск **D:**
(**D:\\.tkabber\\**).

Если вы работатете в среде Windows NT, то подкаталог **.tkabber** будет
Если вы работатете в среде Windows NT, то подкаталог **.tkabber** будет располагаться в **$WINDIR\\Profiles\\имя\_пользователя** (где **$WINDIR** — переменная среды окружения, содержащая путь к установленной системе). 
располагаться в **$WINDIR\\Profiles\\имя\_пользователя** (где **$WINDIR** —
переменная среды окружения, содержащая путь к установленной системе).

Для WIndows XP — это **$SYSTEMDRIVE\\Documents and
Settings\\имя\_пользователя** (**$SYSTEMDRIVE** — диск, на котором установлена
Для WIndows XP — это **$SYSTEMDRIVE\\Documents and Settings\\имя\_пользователя** (**$SYSTEMDRIVE** — диск, на котором установлена Windows). 
Windows).

Надеюсь, не слишком запутано?
Надеюсь, не слишком запутано? 

### <a id="Плагины"></a>Плагины

Интересные возможности предоставляют плагины для Tkabber. Где их взять?
Интересные возможности предоставляют плагины для Tkabber. Где их взять? Последние версии доступны на CVS. Версии, выпущенные с релизами Tkabber'а, находятся на JabberStudio в разделе «Download». Из всего набора наибольший интерес представляют несколько модулей: 
Последние версии доступны на CVS. Версии, выпущенные с релизами Tkabber'а,
находятся на JabberStudio в разделе «Download». Из всего набора наибольший
интерес представляют несколько модулей:

*  chess — игра в шахматы по Сети с пользователем Tkabber'а (наведите курсор
*  chess — игра в шахматы по Сети с пользователем Tkabber'а (наведите курсор мыши на пользователя и нажмите правую кнопку — выберите пункт меню «Шахматы» — надеюсь, вы понимаете, что у вашего оппонента тоже должен стоять Tkabber и настроен соответствующий плагин) 
   мыши на пользователя и нажмите правую кнопку — выберите пункт меню «Шахматы»
   — надеюсь, вы понимаете, что у вашего оппонента тоже должен стоять Tkabber и
   настроен соответствующий плагин)
*  checkers — игра в шашки.
*  reversi — игра в реверси.
*  cyrillize — удобная возможность перевода русского текста, случайно
*  checkers — игра в шашки. 
*  reversi — игра в реверси. 
*  cyrillize — удобная возможность перевода русского текста, случайно набранного в латинице, в нормальную форму (горячая клавиша — Ctrl+'). Очень полезный плагин! 
   набранного в латинице, в нормальную форму (горячая клавиша — Ctrl+'). Очень
   полезный плагин!
*  socials — использование в чатах стандартного набора «социальных» фраз —
*  socials — использование в чатах стандартного набора «социальных» фраз — типа /dance, /scream и т.д. (смотрите файл socials.ru) 
   типа /dance, /scream и т.д. (смотрите файл socials.ru)
*  whiteboard — доска для рисования в конференциях; инструментарий рисования
*  whiteboard — доска для рисования в конференциях; инструментарий рисования небольшой, но идея интересна и перспективна. 
   небольшой, но идея интересна и перспективна.

Для использования плагинов создайте в **~/.tkabber** подкаталог plugins и
Для использования плагинов создайте в **~/.tkabber** подкаталог plugins и скопируйте каталоги с плагинами туда. 
скопируйте каталоги с плагинами туда.

### <a id="Шрифты"></a>Шрифты

Ну, и чтобы Tkabber выглядел совсем как конфетка, советую поменять шрифты,
Ну, и чтобы Tkabber выглядел совсем как конфетка, советую поменять шрифты, используемые в нём. Для это вам достаточно добавить две строки в конфигурационный файл **~/.tkabber/config.tcl** (впишите их в самое начало конфигурационного файла, не помещайте внутрь какой-либо процедуры): 
используемые в нём. Для это вам достаточно добавить две строки в
конфигурационный файл **~/.tkabber/config.tcl** (впишите их в самое начало
конфигурационного файла, не помещайте внутрь какой-либо процедуры):

    set font "-monotype-tahoma-medium-r-normal-*-11-*-*-*-*-*-iso10646-1"
    option add *font "-monotype-tahoma-medium-r-normal-*-11-*-*-*-*-*-iso10646-1" userDefault

Число 11 — это размер шрифта. Если вы не поклонник шрифта Tahoma, укажите любой
Число 11 — это размер шрифта. Если вы не поклонник шрифта Tahoma, укажите любой другой установленный в системе. 
другой установленный в системе.

Всё. Вот теперь можно запускать Tkabber.
Всё. Вот теперь можно запускать Tkabber. 

## <a id="Благодарности"></a>Благодарности

Спасибо ermine, aleksey и thunder за то, что нашли время и силы выслушать и
ответить на глупые вопросы. :)
Спасибо ermine, aleksey и thunder за то, что нашли время и силы выслушать и ответить на глупые вопросы. :) 


Changes to wiki/ru/Tkabber_starpack.md.

1

2
3
4
5
6
7

8
9
10
11
12
13
14
15
16



17
18
19
20
21
22

23
24
25
26

27
28
29
30
31
32

33
34

35
36

37
38
39
40

41
42
43
44
45
46

47
48

49
50
51


52
53

54
55

56
57
58
59



60
61

62
63

64
65

66
67
68
69
70

71
72
73
74
75
76

77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95












96
97

98
99
100
101
102


103
104
105
106


107
108
109



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
























127
128
129
130



131
132
133
134

135
136
137
138
139

140
141
142
143

144
145
146
147

148
149
150

151
152
153
154
155
156
157

158
159
160
161



1
2
3
4
5
6
7

8
9
10
11
12
13
14



15
16
17
18
19
20
21


22


23

24




25

26
27

28


29




30


31
32
33

34
35

36
37


38
39
40

41
42

43
44



45
46
47
48

49
50

51
52

53



54

55


56
57
58

59




60
61
62












63
64
65
66
67
68
69
70
71
72
73
74
75

76
77
78
79


80
81




82
83



84
85
86
87
88
89














90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113




114
115
116
117
118
119

120



121

122
123
124
125

126
127
128
129

130

131

132





133

134


135

136
137
138

+





-
+






-
-
-
+
+
+




-
-
+
-
-

-
+
-
-
-
-

-
+

-
+
-
-
+
-
-
-
-
+
-
-



-
+

-
+

-
-
+
+

-
+

-
+

-
-
-
+
+
+

-
+

-
+

-
+
-
-
-

-
+
-
-



-
+
-
-
-
-



-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+

-
+



-
-
+
+
-
-
-
-
+
+
-
-
-
+
+
+



-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+



-
+
-
-
-

-
+



-
+



-
+
-

-
+
-
-
-
-
-

-
+
-
-

-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Tkabber_starpack/index.html)


# Tkabber starpack

Материал из Tkabber Wiki

Статья посвящена сборке дистрибутива Tkabber Starpack для операционной системы MS Windows.
Статья посвящена сборке дистрибутива Tkabber Starpack для операционной системы MS Windows. 

## <a id="toc"></a>Содержание

* [1 Как это работает](#Как_это_работает)
* [2 Инструмент «Сделай-Tkabber-Starpack-сам»](#Инструмент_«Сделай-Tkabber-Starpack-сам»)
* [3 Убираем "лишнее" в Ткаббере](#Убираем_лишнее_в_Ткаббере)
   * [3.1 Библиотеки Tcl/Tk, необходимые для нормальной работы Ткаббера](#Библиотеки_Tcl_Tk_необходимые_для_нормальной_работы_Ткаббера)
   * [3.2 Опциональные библиотеки Tcl/Tk](#Опциональные_библиотеки_Tcl_Tk)
   * [3.3 Компоненты Ткаббера](#Компоненты_Ткаббера)
 * [3.1 Библиотеки Tcl/Tk, необходимые для нормальной работы Ткаббера](#Библиотеки_Tcl_Tk_необходимые_для_нормальной_работы_Ткаббера)
 * [3.2 Опциональные библиотеки Tcl/Tk](#Опциональные_библиотеки_Tcl_Tk)
 * [3.3 Компоненты Ткаббера](#Компоненты_Ткаббера)
* [4 Как скачать последнюю SVN-версию Ткаббера](#Как_скачать_последнюю_SVN-версию_Ткаббера)

## <a id="Как_это_работает"></a>Как это работает

По сути, Tkabber Starpack представляет собой
[cамораспаковывающийся архив](http://ru.wikipedia.org/wiki/Самораспаковывающийся_архив). Но в отличие
По сути, Tkabber Starpack представляет собой [cамораспаковывающийся архив](http://ru.wikipedia.org/wiki/Самораспаковывающийся_архив). Но в отличие от последнего, Старпак распаковывается в оперативную память компьютера и имитирует структуру файлов и каталогов Ткаббера на диске. 
от последнего, Старпак распаковывается в оперативную память компьютера и
имитирует структуру файлов и каталогов Ткаббера на диске.

Для уменьшения размеров файл Старпака
Для уменьшения размеров файл Старпака [сжимается](http://ru.wikipedia.org/wiki/Упаковка_исполняемых_файлов) упаковщиком [UPX](http://ru.wikipedia.org/wiki/UPX). Именно поэтому запуск Старпака происходит с некоторой, довольно ощутимой на многих системах, задержкой.  
[сжимается](http://ru.wikipedia.org/wiki/Упаковка_исполняемых_файлов)
упаковщиком [UPX](http://ru.wikipedia.org/wiki/UPX). Именно поэтому запуск
Старпака происходит с некоторой, довольно ощутимой на многих системах,
задержкой.

После запуска Старпака происходит следующее:
После запуска Старпака происходит следующее: 

1. распаковывается сам Старпак (восстанавливается [исполняемый файл](http://ru.wikipedia.org/wiki/Исполнимый_модуль)
1.  распаковывается сам Старпак (восстанавливается [исполняемый файл](http://ru.wikipedia.org/wiki/Исполнимый_модуль) Старпака из архива, полученного с помощью упаковщика [UPX](http://ru.wikipedia.org/wiki/UPX)); 
   Старпака из архива, полученного с помощью упаковщика [UPX](http://ru.wikipedia.org/wiki/UPX));
1. в оперативной памяти создаётся структура каталогов и файлов Ткаббера (точнее
1.  в оперативной памяти создаётся структура каталогов и файлов Ткаббера (точнее сказать, имитируется таким образом, чтобы интерпретатор [Tcl/Tk](http://tcl.tk), "поверил" в то, что он имеет дело со структурой каталогов и файлов на диске); 
   сказать, имитируется таким образом, чтобы интерпретатор
   [Tcl/Tk](http://tcl.tk), "поверил" в то, что он имеет дело со структурой
   каталогов и файлов на диске);
1. собственно Ткаббер и запускается (происходит передача управления интерпретатору
1.  собственно Ткаббер и запускается (происходит передача управления интерпретатору Тикля, последнему передаётся в качестве параметра файл tkabber.tcl. с запуска оного и начинается запуск ткаббера). 
   Тикля, последнему передаётся в качестве параметра файл tkabber.tcl. с
   запуска оного и начинается запуск ткаббера).

## <a id="Инструмент_«Сделай-Tkabber-Starpack-сам»"></a>Инструмент «Сделай-Tkabber-Starpack-сам»

Инструмент позволит в несколько кликов мыши собрать собственный Starpack.
Инструмент позволит в несколько кликов мыши собрать собственный Starpack. 

Для этого вам понадобится:
Для этого вам понадобится: 

1.  Сам инструмент. Можно взять [*здесь*](../files/Tkabber_win32_starpack_template.rar) (2.59 Мб);
1.  Ткаббер. Версия должна быть не ниже 0.9.9-SVN-20070317 (ревизия 1051 от 17 Марта 2007).
1.  Сам инструмент. Можно взять [здесь](../files/Tkabber_win32_starpack_template.rar) (2.59 Мб); 
1.  Ткаббер. Версия должна быть не ниже 0.9.9-SVN-20070317 (ревизия 1051 от 17 Марта 2007). 

Для особо ленивых [**ниже**](#Как_скачать_последнюю_SVN-версию_Ткаббера) описано, как скачать и использовать версию SVN.
Для особо ленивых [ниже](Tkabber_starpack.md#Как_скачать_последнюю_SVN-версию_Tkabber) описано, как скачать и использовать версию SVN. 

Собираем Starpack:
Собираем Starpack: 

1.  Распаковываем инструмент и получаем каталог **tkabber\_win32\_starpack\_template**;
1.  Копируем файлы Ткаббера в каталог **tkabber\_win32\_starpack\_template\\tkabber\_win32\_starpack.vfs\\tkabber**;
1.  Запускаем `build.cmd` из каталога **tkabber\_win32\_starpack\_template**.
1.  Распаковываем инструмент и получаем каталог **tkabber\_win32\_starpack\_template**; 
1.  Копируем файлы Ткаббера в каталог **tkabber\_win32\_starpack\_template\\tkabber\_win32\_starpack.vfs\\tkabber**; 
1.  Запускаем `build.cmd` из каталога **tkabber\_win32\_starpack\_template**. 

Всё! Tkabber Starpack готов.
Всё! Tkabber Starpack готов. 

**Ваша** свеженькая сборка находится в каталоге **tkabber\_win32\_starpack\_template\\tkabber\_starpack**.
**Ваша** свеженькая сборка находится в каталоге **tkabber\_win32\_starpack\_template\\tkabber\_starpack**. 

Вы можете использовать `tkabber_win32_starpack.exe` сам по себе или запускать
Вы можете использовать `tkabber_win32_starpack.exe` сам по себе или запускать его через `mobile_tkabber.cmd`. В последнем случае вы получаете мобильную версию Ткаббера, который использует каталог **tkabberhome**, находящийся рядом с ним, в качестве каталога с настройками. 
его через `mobile_tkabber.cmd`. В последнем случае вы получаете мобильную
версию Ткаббера, который использует каталог **tkabberhome**, находящийся рядом
с ним, в качестве каталога с настройками.

Ткаббер поставляется с базовым набором плагинов. Если вас интересуют игры,
Ткаббер поставляется с базовым набором плагинов. Если вас интересуют игры, измеритель траффика, доска для рисования и т.д. — вы можете скачать эти плагины отдельно и поместить в **tkabberhome\\plugins**. 
измеритель траффика, доска для рисования и т.д. — вы можете скачать эти плагины
отдельно и поместить в **tkabberhome\\plugins**.

## <a id="Убираем_лишнее_в_Ткаббере"></a>Убираем "лишнее" в Ткаббере

Когда я был маленьким, то очень любил разбирать механические часы. В те редкие
Когда я был маленьким, то очень любил разбирать механические часы. В те редкие случаи, когда я их собирал обратно, у меня оставалось много "лишних" деталей. Часы, естественно, после этого переставали работать. В этом разделе попробуем разобраться, какие компоненты Ткаббера и библиотеки Tcl/Tk необязательны для работы нашего Starpack. 
случаи, когда я их собирал обратно, у меня оставалось много "лишних" деталей.
Часы, естественно, после этого переставали работать. В этом разделе попробуем
разобраться, какие компоненты Ткаббера и библиотеки Tcl/Tk необязательны для
работы нашего Starpack.

### <a id="Библиотеки_Tcl_Tk_необходимые_для_нормальной_работы_Ткаббера"></a>Библиотеки Tcl/Tk, необходимые для нормальной работы Ткаббера

*  base64
*  BWidget
*  dns
*  itcl
*  log
*  md5
*  sha1
*  tcl8.4
*  textutil
*  tk8.4
*  uri
*  vfs
*  base64 
*  BWidget 
*  dns 
*  itcl 
*  log 
*  md5 
*  sha1 
*  tcl8.4 
*  textutil 
*  tk8.4 
*  uri 
*  vfs 

Примечание: если Ткаббер не запустился, попробуйте установить более новые бибиотеки.
Примечание: если Ткаббер не запустился, попробуйте установить более новые бибиотеки. 

### <a id="Опциональные_библиотеки_Tcl_Tk"></a>Опциональные библиотеки Tcl/Tk

*  **TclWinIdle**  — поддержка auto-away. Если вы трудоголик, от компьютера
   вас относят в бессознательном состоянии, то эта функция вам точно не нужна.
*  **TclWinIdle**  — поддержка auto-away. Если вы трудоголик, от компьютера вас относят в бессознательном состоянии, то эта функция вам точно не нужна. Примечание: если старпак собирался на tcl/tk 8.4, то для работы autoaway необходим tclWinidle-0.2. 

   Примечание: если старпак собирался на tcl/tk 8.4, то для работы autoaway
   необходим tclWinidle-0.2.
*  **Winico** — пакет добавляет в Ткаббер возможность работать с областью
   системных уведомлений ("systray", "трей"). Позволяет
*  **Winico** — пакет добавляет в Ткаббер возможность работать с областью системных уведомлений ("systray", "трей"). Позволяет сворачивать/разворачивать программу в systray. 

   сворачивать/разворачивать программу в systray.
*  **tls** — поддержка SSL.
*  **sasl** — поддержка SASL авторизации.
*  **tls** — поддержка SSL. 

*  **sasl** — поддержка SASL авторизации. 

### <a id="Компоненты_Ткаббера"></a>Компоненты Ткаббера

*  **authors** — мы их уважаем, а потому оставим этот файл.
*  **ChangeLog** — прочитали, удалили...
*  **copying** — лицензия  — это святое!
*  **install** — файл-заглушка. Удаляем.
*  **Makefile** — уже собрали :) Удаляем.
*  **readme** — не думаю, что этот файл пригодится нам в запакованном виде. Удаляем.
*  **DOC** — документация. Так же как и readme — бесполезна в starpack. Удаляем.
*  **EMOTICONS** — смайлики. Можете свободно удалять, добавлять свои...
*  **EXAMPLES** — здесь собраны примеры конфигурационных файлов, цветовых
   схем, утилит... Если вам не нужна конфигурация от Teo или Badlop, то смело можете удалять.
*  **MSGS** — переводы сообщений Ткаббера на разные языки. Можете оставить только нужные вам.
*  **PIXMAPS** — наборы иконок ростера. Удаляйте, добавляйте на ваше усмотрение.
*  **SOUNDS** — звуки без пакета [snack](http://www.speech.kth.se/snack/) всё
   равно не воспроизводятся. Но можно [**дополнительно подключить**](Проблемы_со_звуком.md)
*  **authors** — мы их уважаем, а потому оставим этот файл. 

*  **ChangeLog** — прочитали, удалили... 

*  **copying** — лицензия  — это святое! 

*  **install** — файл-заглушка. Удаляем. 

*  **Makefile** — уже собрали :) Удаляем. 

*  **readme** — не думаю, что этот файл пригодится нам в запакованном виде. Удаляем. 

*  **DOC** — документация. Так же как и readme — бесполезна в starpack. Удаляем. 

*  **EMOTICONS** — смайлики. Можете свободно удалять, добавлять свои... 

*  **EXAMPLES** — здесь собраны примеры конфигурационных файлов, цветовых схем, утилит... Если вам не нужна конфигурация от Teo или Badlop, то смело можете удалять. 

*  **MSGS** — переводы сообщений Ткаббера на разные языки. Можете оставить только нужные вам. 

*  **PIXMAPS** — наборы иконок ростера. Удаляйте, добавляйте на ваше усмотрение. 

*  **SOUNDS** — звуки без пакета [snack](http://www.speech.kth.se/snack/) всё равно не воспроизводятся. Но можно [дополнительно подключить](Проблемы_со_звуком.md) **snack.kit**. Тогда пригодятся. 

   **snack.kit**. Тогда пригодятся.
*  **TRANS** — аналогично MSGS.
*  **tkabber-plugins** — встроенные плагины-игры для ткаббера, их можно
   удалить; в случае необходимости — легко подключаются через конфиг.
*  **TRANS** — аналогично MSGS. 

*  **tkabber-plugins** — встроенные плагины-игры для ткаббера, их можно удалить; в случае необходимости — легко подключаются через конфиг. 

## <a id="Как_скачать_последнюю_SVN-версию_Ткаббера"></a>Как скачать последнюю SVN-версию Ткаббера

Прежде всего нам понадобится программа-клиент для доступа к репозиториям
Прежде всего нам понадобится программа-клиент для доступа к репозиториям [системы контроля версий](http://ru.wikipedia.org/wiki/!8AB5<0 :>=B@>;O 25@A89) [Subversion](http://subversion.tigris.org/). Версия для Windows находится [здесь](http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91&expandFolder=91&folderID=74). 
[системы контроля версий](http://ru.wikipedia.org/wiki/Система_управления_версиями)
[Subversion](http://subversion.tigris.org/). Версия для Windows находится
[здесь](http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91&expandFolder=91&folderID=74).

После установки svn создаём в удобном для вас месте каталог **tkabber**, делаем его текущим в консоли и пишем сначала:
После установки svn создаём в удобном для вас месте каталог **tkabber**, делаем его текущим в консоли и пишем сначала: 

    svn co http://svn.xmpp.ru/repos/tkabber/trunk/tkabber tkabber-svn

а затем
а затем 

    svn co http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins tkabber-plugins-svn

В каталоге **tkabber-svn** находится сам Ткаббер, а в **tkabber-plugins-svn** —
В каталоге **tkabber-svn** находится сам Ткаббер, а в **tkabber-plugins-svn** — дополнительные плагины к нему. 
дополнительные плагины к нему.

Если вы собираете Starpack из версии svn, то не забудьте после выполнения
Если вы собираете Starpack из версии svn, то не забудьте после выполнения пункта 2 сборки удалить из каталога **tkabber** служебную информацию svn. Проще это сделать через поиск системы MS Windows. В качестве имени файла вводим ".svn", в поле "Поиск в:" выбираем каталог с Ткаббером, в дополнительных настройках отмечаем пункт "Поиск в скрытых файлах и папках". Все найденные файлы удаляем. 
пункта 2 сборки удалить из каталога **tkabber** служебную информацию svn. Проще
это сделать через поиск системы MS Windows. В качестве имени файла вводим
".svn", в поле "Поиск в:" выбираем каталог с Ткаббером, в дополнительных
настройках отмечаем пункт "Поиск в скрытых файлах и папках". Все найденные
файлы удаляем.

**Важно!** Если вы хотите собирать старпак из SVN-версии, вам следует помнить о
**Важно!** Если вы хотите собирать старпак из SVN-версии, вам следует помнить о её _нестабильности и теоретическом наличии неприятных багов,_ поэтому почитайте-ка для общего развития [эту статью](SVN_disclaimer.md). 
её _нестабильности и теоретическом наличии неприятных багов,_ поэтому
почитайте-ка для общего развития [**эту статью**](SVN_disclaimer.md).

[**Archimed**](Участник_Archimed.md)
[Archimed](Участник_Archimed.md) 


Changes to wiki/ru/Tkinactive.md.

1

2
3
4
5
6
7

8
9
10

11
12
13
14

15
16
17
18
19
20
21
22
23
24

25
26
27
28
29
30
31
32
33





34
35
36
37
38
39
40
41
42
43
44
45
46

47
48
49


50
51
52

53
54
55

56
57
58
59
60



1
2
3
4
5
6
7

8

9

10


11

12








13

14





15



16
17
18
19
20

21











22
23


24
25

26

27

28

29



30

31
32
33

+





-
+
-

-
+
-
-

-
+
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-

-
-
-
+
+
+
+
+
-

-
-
-
-
-
-
-
-
-
-
-
+

-
-
+
+
-

-
+
-

-
+
-
-
-

-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Tkinactive/index.html)


# Tkinactive

Материал из Tkabber Wiki.

Как известно, подсистема AutoAway у Ткаббера в Windows вначале зависела от
Как известно, подсистема AutoAway у Ткаббера в Windows вначале зависела от расширения тикля [tclWinidle](http://sgolovan.nes.ru/jabber/tclWinidle/). 
расширения тикля [tclWinidle](http://sgolovan.nes.ru/jabber/tclWinidle/).

Начиная с версии 0.10.0 Ткаббер умеет пользоваться _встроенным_ средством Tk —
Начиная с версии 0.10.0 Ткаббер умеет пользоваться _встроенным_ средством Tk — командой [tk inactive](http://www.tcl.tk/cgi-bin/tct/tip/245.html), которая, однако, появилась только в Tcl/Tk 8.5. 
командой [tk inactive](http://www.tcl.tk/cgi-bin/tct/tip/245.html), которая,
однако, появилась только в Tcl/Tk 8.5.

Расширение **tclWinidle**, к сожалению, имеет некоторые поблемы: при некоторых
Расширение **tclWinidle**, к сожалению, имеет некоторые поблемы: при некоторых обстоятельствах (которые не удаётся пока чётко отследить) оно начинает "врать" относительно периода неактивности пользователя. Выглядит это как внезапный самостоятельный переход Ткаббера в состояние "extended away", из которого его нельзя вывести никаким образом, кроме запрещения механизма AutoAway (установкой обоих периодов неактивности в 0 минут) или перезагрузкой. Ещё одна проблема с **tclWinidle** не видна пользователю и заключается в том, что это расширение использует для работы приём, известный как ["DLL injection"](http://en.wikipedia.org/wiki/DLL_Injection). 
обстоятельствах (которые не удаётся пока чётко отследить) оно начинает "врать"
относительно периода неактивности пользователя. Выглядит это как внезапный
самостоятельный переход Ткаббера в состояние "extended away", из которого его
нельзя вывести никаким образом, кроме запрещения механизма AutoAway (установкой
обоих периодов неактивности в 0 минут) или перезагрузкой. Ещё одна проблема с
**tclWinidle** не видна пользователю и заключается в том, что это расширение
использует для работы приём, известный как
["DLL injection"](http://en.wikipedia.org/wiki/DLL_Injection).

Эта страница посвящена "внедрению в Ткаббер" нового (для него) расширения Tk:
Эта страница посвящена "внедрению в Ткаббер" нового (для него) расширения Tk: [tkinactive](http://wiki.tcl.tk/14765). Данное расширение интересно тем, что представляет собой код, реализующий упомянутую команду Tk 8.5 **tk inactive**, только в виде самостоятельного пакета, _который может работть с Tcl/Tk 8.4_ (а возможно и 8.3). Использование **tkinactive** вместо **tclWinidle** призвано решить указанные выше проблемы. 
[tkinactive](http://wiki.tcl.tk/14765). Данное расширение интересно тем, что
представляет собой код, реализующий упомянутую команду Tk 8.5 **tk inactive**,
только в виде самостоятельного пакета, _который может работть с Tcl/Tk 8.4_ (а
возможно и 8.3). Использование **tkinactive** вместо **tclWinidle** призвано
решить указанные выше проблемы.

Единственная новая "проблема", известная у **tkinactive**, состоит в том, что
это расширение не работает под Win9x, однако поскольку ОС этого класса не
поддерживаются даже фирмой, их создавших, это ограничение не выглядит
Единственная новая "проблема", известная у **tkinactive**, состоит в том, что это расширение не работает под Win9x, однако поскольку ОС этого класса не поддерживаются даже фирмой, их создавших, это ограничение не выглядит существенным. 

[Kostix](Участник_Kostix.md) портировал **tkinactive** под современное состояние [TEA](http://www.tcl.tk/doc/tea/), чтобы пакет нормально собирался как под Unix, так и под Win32, а [teo](Участник_Teo.md) [выложил](http://sgolovan.nes.ru/jabber/tkinactive/) виндовую сборку на своём сайте. Параллельно с этим код подсистемы AuwoAway Ткаббера был изменён так, чтобы грузить пакет **tkinactive** _вместо_ **tclWinidle**, если он доступен. 

Таким образом, открыто тестирование комбинации этого расширения с Ткаббером под Windows. Широкие массы убедительно призываются к тестированию. 
существенным.

[**Kostix**](Участник_Kostix.md) портировал **tkinactive** под современное
состояние [TEA](http://www.tcl.tk/doc/tea/), чтобы пакет нормально собирался
как под Unix, так и под Win32, а [**teo**](Участник_Teo.md)
[выложил](http://sgolovan.nes.ru/jabber/tkinactive/) виндовую сборку на своём
сайте. Параллельно с этим код подсистемы AuwoAway Ткаббера был изменён так,
чтобы грузить пакет **tkinactive** _вместо_ **tclWinidle**, если он доступен.

Таким образом, открыто тестирование комбинации этого расширения с Ткаббером под
Windows. Широкие массы убедительно призываются к тестированию.

Что потребуется:
Что потребуется: 

1. Ткаббер из репозитория, не старее ревизии 1125;
1. [Виндовая сборка](http://sgolovan.nes.ru/jabber/tkinactive/)
1.  Ткаббер из репозитория, не старее ревизии 1125; 
1.  [Виндовая сборка](http://sgolovan.nes.ru/jabber/tkinactive/) расширения **tkinactive**. 
   расширения **tkinactive**.

Распакуйте каталог с расширением в каталог с остальными расширениями  тикля
Распакуйте каталог с расширением в каталог с остальными расширениями  тикля (обычно это `C:\Tcl\lib`), обновите Ткаббер из репозитория и перезапустите его. 
(обычно это `C:\Tcl\lib`), обновите Ткаббер из репозитория и перезапустите его.

Обо всех глюках докладывайте в комнате
Обо всех глюках докладывайте в комнате `[xmpp:tkabber@conference.jabber.ru](xmpp:tkabber@conference.jabber.ru)`, на [багзилле Ткаббера](http://www.jabber.ru/bugzilla/) или сообщайте напрямую [kostix](Участник_Kostix.md). 
[`xmpp:tkabber@conference.jabber.ru`](xmpp:tkabber@conference.jabber.ru), на
[багзилле Ткаббера](http://www.jabber.ru/bugzilla/) или сообщайте напрямую
[**kostix**](Участник_Kostix.md).

Да, о стабильной работе тоже сообщайте. Только не в багзиллу :)
Да, о стабильной работе тоже сообщайте. Только не в багзиллу :) 


Changes to wiki/ru/Wish_и_русская_раскладка_в_Windows.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18








19
20
21


22
23
24
25
26
27

28
29
30


31
32
33
34
35
36

37
38
39

40
41
42
43




44
45
46
47
48
49

50
51
52
53
54

55
56

57
58

59
60

61
62

63
64

65
66
67
68

69
70
71
72
73
74
75

76
77
78
79
80
81

82
83

84
85
86

87
88
89

90
91
92
93
94
95
96
97

98
99

100
101
102
103
104
105





106
107
108

109
110

111
112
113
114
115

116
117

118
119
120
121

122
123
124
125
126


127
128

129
130
131

132
133

134
135
136
137
138
139
140

141
142
143
144
145
146
147

148
149

150
151
152


153
154

155
156

157
158
159
160
161




162
163

164
165
166
167

168
169
170
171

172
173
174
175
176
177
178

179
180
181
182
183
184
185

186
187
188

189
190
191
192
193
194



195
196
197
1
2
3
4
5
6
7
8
9
10
11








12
13
14
15
16
17
18
19
20


21
22




23

24
25


26
27




28

29

30

31

32


33
34
35
36

37




38



39

40
41

42


43
44

45
46

47
48

49


50

51
52
53
54
55
56
57

58




59

60
61

62

63

64

65

66

67
68
69
70
71
72

73
74

75






76
77
78
79
80

81

82
83

84



85

86
87

88




89





90
91
92

93

94

95
96

97





98

99





100

101
102

103
104


105
106
107

108
109

110
111




112
113
114
115
116

117
118
119
120

121


122

123





124

125



126
127
128

129

130

131


132



133
134
135




+









-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+

-
-
+
+
-
-
-
-

-
+

-
-
+
+
-
-
-
-

-
+
-

-
+
-

-
-
+
+
+
+
-

-
-
-
-
+
-
-
-

-
+

-
+
-
-
+

-
+

-
+

-
+
-
-

-
+






-
+
-
-
-
-

-
+

-
+
-

-
+
-

-
+
-






-
+

-
+
-
-
-
-
-
-
+
+
+
+
+
-

-
+

-
+
-
-
-

-
+

-
+
-
-
-
-
+
-
-
-
-
-
+
+

-
+
-

-
+

-
+
-
-
-
-
-

-
+
-
-
-
-
-

-
+

-
+

-
-
+
+

-
+

-
+

-
-
-
-
+
+
+
+

-
+



-
+
-
-

-
+
-
-
-
-
-

-
+
-
-
-



-
+
-

-
+
-
-

-
-
-
+
+
+
-
-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Wish_и_русская_раскладка_в_Windows/index.html)


# Wish и русская раскладка в Windows

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 Проблема](#Проблема)
* [2 Решение](#Решение)
   * [2.1 Ткаббер](#Ткаббер)
   * [2.2 Как узнать альтернативный keysym](#Как_узнать_альтернативный_keysym)
   * [2.3 Как применить полученные знания](#Как_применить_полученные_знания)
   * [2.4 Полезные советы](#Полезные_советы)
      * [2.4.1 Привязки](#Привязки)
      * [2.4.2 Обработчики](#Обработчики)
   * [2.5 Дополнительная информация](#Дополнительная_информация)
   * [2.6 Примечания](#Примечания)
 * [2.1 Ткаббер](#Ткаббер)
 * [2.2 Как узнать альтернативный keysym](#Как_узнать_альтернативный_keysym)
 * [2.3 Как применить полученные знания](#Как_применить_полученные_знания)
 * [2.4 Полезные советы](#Полезные_советы)
  * [2.4.1 Привязки](#Привязки)
  * [2.4.2 Обработчики](#Обработчики)
 * [2.5 Дополнительная информация](#Дополнительная_информация)
 * [2.6 Примечания](#Примечания)

## <a id="Проблема"></a>Проблема
Windows-версия библиотеки Tk имеет неприятный баг: нажатия одних и тех же
# <a id="Проблема"></a>Проблема
Windows-версия библиотеки Tk имеет неприятный баг: нажатия одних и тех же клавиш на разных языках ввода клавиатуры (например, английской и русской) генирируют разные ["символы клавиш" ("keysyms")](http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm), которые Tk использует при сопоставлении нажатия клавиши со списком клавиатурных акселераторов (они же "хоткеи", они же "горячие клавиши"). 
клавиш на разных языках ввода клавиатуры (например, английской и русской)
генирируют разные ["символы клавиш" ("keysyms")](http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm), которые Tk
использует при сопоставлении нажатия клавиши со списком клавиатурных
акселераторов (они же "хоткеи", они же "горячие клавиши").

На самом деле в Windows-версии Tk имеет место "двойной" баг:
На самом деле в Windows-версии Tk имеет место "двойной" баг: 

*  keysyms зависят от языка ввода (это не так в [X Window System](http://www.xfree86.org/current/X.7.html));
*  от кода keysym'а берутся почему-то только младшие 8 бит из-за чего эти
*  keysyms зависят от языка ввода (это не так в [X Window System](http://www.xfree86.org/current/X.7.html)); 
*  от кода keysym'а берутся почему-то только младшие 8 бит из-за чего эти коды "отображаются" в нижние 256 байт таблицы [Unicode](http://www.unicode.org), которые фактически представляют собой набор символов, известный как ["Latin-1"](http://czyborra.com/charsets/iso8859.html#ISO-8859-1)<sup>1</sup>. 
   коды "отображаются" в нижние 256 байт таблицы
   [Unicode](http://www.unicode.org), которые фактически представляют собой
   набор символов, известный как
   ["Latin-1"](http://czyborra.com/charsets/iso8859.html#ISO-8859-1)<sup>1</sup>.

К примеру, нажатие клавиши a на английской раскладке возвращает keysym "a", а
К примеру, нажатие клавиши a на английской раскладке возвращает keysym "a", а на русской — "ocircumflex". 
на русской — "ocircumflex".

В X (с [xkb](http://pascal.tsu.ru/en/xkb/)) keysym для клавиши a всегда — "a"
В X (с [xkb](http://pascal.tsu.ru/en/xkb/)) keysym для клавиши a всегда — "a" независимо от текущего языка ввода. 
независимо от текущего языка ввода.

Описанная проблема приводит к тому, что хоткеи в Ткаббере, запущенном под
Windows, без дополнительных усилий работают только на оригинальной английской
Описанная проблема приводит к тому, что хоткеи в Ткаббере, запущенном под Windows, без дополнительных усилий работают только на оригинальной английской раскладке<sup>2</sup>. 

# <a id="Решение"></a>Решение
## <a id="Ткаббер"></a>Ткаббер
раскладке<sup>2</sup>.

## <a id="Решение"></a>Решение
### <a id="Ткаббер"></a>Ткаббер

Этот баг _частично_ обойдён разработчиками Ткаббера путём создания
Этот баг _частично_ обойдён разработчиками Ткаббера путём создания альтернативных привязок клавиш для описанных "странных" keysym'ов, парных соответствующим "нормальным". Например, такая привязка есть для палитры эмоциконок — Alt-e. 
альтернативных привязок клавиш для описанных "странных" keysym'ов, парных
соответствующим "нормальным". Например, такая привязка есть для палитры
эмоциконок — Alt-e.

К сожалению, остаются две проблемы:
К сожалению, остаются две проблемы: 

*  Не все стандартные хоткеи имеют в Ткаббере привязки для обхода описанного
*  Не все стандартные хоткеи имеют в Ткаббере привязки для обхода описанного бага<sup>3</sup>. 
   бага<sup>3</sup>.
*  Когда вы определяете собственный хоткей, вы встречаетесь с этим же багом.
*  Когда вы определяете собственный хоткей, вы встречаетесь с этим же багом. 

О том, как решать эти проблемы, написано ниже.
О том, как решать эти проблемы, написано ниже. 

### <a id="Как_узнать_альтернативный_keysym"></a>Как узнать альтернативный keysym
## <a id="Как_узнать_альтернативный_keysym"></a>Как узнать альтернативный keysym

Придётся написать микроскопическую программу на Tcl/Tk. Набить её можно прямо в
Придётся написать микроскопическую программу на Tcl/Tk. Набить её можно прямо в консоли Ткаббера, хотя, конечно же, подойдёт и просто **wish** или **tkcon** (в нём понадобится вначале выполнить команду `package require Tk`). 
консоли Ткаббера, хотя, конечно же, подойдёт и просто **wish** или **tkcon** (в
нём понадобится вначале выполнить команду `package require Tk`).

Вот эта программка:
Вот эта программка: 

    toplevel .keytest
    label .keytest.l -text {Нажимайте клавиши}
    pack .keytest.l -fill both -expand true
    bind .keytest <KeyPress> [list puts %K]

После выполнения этой программы вы увидите новое окно верхнего уровня с текстом
После выполнения этой программы вы увидите новое окно верхнего уровня с текстом "Нажимайте клавиши" внутри. Сделайте это окно активным, смените раскладку и нажимайте там интересующие вас клавиши. При этом вы увидите, что в вашу консоль (туда, где вы набрали программу) пишутся названия клавиш — те самые keysyms<sup>4</sup>. 
"Нажимайте клавиши" внутри. Сделайте это окно активным, смените раскладку и
нажимайте там интересующие вас клавиши. При этом вы увидите, что в вашу консоль
(туда, где вы набрали программу) пишутся названия клавиш — те самые
keysyms<sup>4</sup>.

### <a id="Как_применить_полученные_знания"></a>Как применить полученные знания
## <a id="Как_применить_полученные_знания"></a>Как применить полученные знания

Возьмём практический пример: предположим, вы хотите "русифицировать" хоткеи
Возьмём практический пример: предположим, вы хотите "русифицировать" хоткеи Ctrl-L и Ctrl-J (действия: "Подключиться" и "Отключиться", соответственно). 
Ctrl-L и Ctrl-J (действия: "Подключиться" и "Отключиться", соответственно).

Для этого, во-первых, вам нужно выяснить названия соответствующих клавиш на
Для этого, во-первых, вам нужно выяснить названия соответствующих клавиш на русской раскладке. 
русской раскладке.

Узнав, что клавише "l" на русской раскладке соответствует keysym "adiaresis", а
Узнав, что клавише "l" на русской раскладке соответствует keysym "adiaresis", а клавише "j" — "icircumflex", мы можем написать в конфиг Ткаббера "русификацию": 
клавише "j" — "icircumflex", мы можем написать в конфиг Ткаббера "русификацию":

    hook::add finload_hook {
      bind . <Control-KeyPress-adiaeresis> [bind . <Control-KeyPress-l>]
      bind . <Control-KeyPress-icircumflex> [bind . <Control-KeyPress-j>]
    }

Смысл этого куска кода состоит в следующем:
Смысл этого куска кода состоит в следующем: 

1. Наш код "вешается" на хук "finload\_hook", который выполняется по наступлению
1.  Наш код "вешается" на хук "finload\_hook", который выполняется по наступлению события "инициализация Ткаббера окончена, главное окно сконфигурировано и показано"; 
   события "инициализация Ткаббера окончена, главное окно сконфигурировано и показано";
1. Команда
        bind . <Control-KeyPress-КЛАВИША>
 возвращяет код Tcl, являющийся текущим обработчиком указанной комбинации клавиш;
1. Этот код связывается с нашей новой комбинацией клавиш.
1. Данная операция повторяется для каждой интересующей нас комбинации клавиш
1.  Команда 
    bind . <Control-KeyPress-КЛАВИША>
 возвращяет код Tcl, являющийся текущим обработчиком указанной комбинации клавиш; 
1.  Этот код связывается с нашей новой комбинацией клавиш. 
1.  Данная операция повторяется для каждой интересующей нас комбинации клавиш и окна, к которому она привязана. 
   и окна, к которому она привязана.

### <a id="Полезные_советы"></a>Полезные советы
## <a id="Полезные_советы"></a>Полезные советы

![(!)](../images/Hammer.png) **Сделать:** вообще-то напрашивается
![(!)](../images/Hammer.png) **Сделать:** вообще-то напрашивается самостоятельный раздел "Собственные хоткеи в Ткаббере" где должно быть написано о привязке клавиш "вообще"; после чего бОльшая часть нижеприведённых советов должна уйти в этот раздел 
самостоятельный раздел "Собственные хоткеи в Ткаббере" где должно быть написано
о привязке клавиш "вообще"; после чего бОльшая часть нижеприведённых советов
должна уйти в этот раздел

#### <a id="Привязки"></a>Привязки
### <a id="Привязки"></a>Привязки

* Имейте в виду, что хоткей не привязывается "вообще" к Ткабберу, — он
*  Имейте в виду, что хоткей не привязывается "вообще" к Ткабберу, — он привязывается к _конкретному окну._ В нашем примере это ".", то есть главное окно программы, то это не обязано выполняться для всех хоткеев. 
  привязывается к _конкретному окну._ В нашем примере это ".", то есть главное
  окно программы, то это не обязано выполняться для всех хоткеев.
* Некоторые хоткеи привязаны не к окнам, а к
  [виртуальным событиям Tk](http://www.tcl.tk/man/tcl8.4/TkCmd/event.htm). К
*  Некоторые хоткеи привязаны не к окнам, а к [виртуальным событиям Tk](http://www.tcl.tk/man/tcl8.4/TkCmd/event.htm). К примеру, так устроена работа палитры смайликов или панели поиска<sup>5</sup>. 
  примеру, так устроена работа палитры смайликов или панели поиска<sup>5</sup>.

Всё это означает, что в некоторых (если не во всех) случаях не обойтись без
ковыряния в исходиках Ткаббера с целью выяснения как и к чему привязан
интересующий Вас хоткей.

Всё это означает, что в некоторых (если не во всех) случаях не обойтись без ковыряния в исходиках Ткаббера с целью выяснения как и к чему привязан интересующий Вас хоткей. 

Иногда соответствующие виртуальные события описаны в документации (Ткаббера,
Иногда соответствующие виртуальные события описаны в документации (Ткаббера, или, например, плагина к нему)<sup>6</sup>. 
или, например, плагина к нему)<sup>6</sup>.

#### <a id="Обработчики"></a>Обработчики
### <a id="Обработчики"></a>Обработчики

Если у вас плохо со знанием Tcl и вам трудно разбираться с исходниками
Если у вас плохо со знанием Tcl и вам трудно разбираться с исходниками Ткаббера, то самый простой способ повесить свой хоткей на действие, за которым некий хоткей уже закреплён, это "клонировать" существующий хоткей. Именно этим мы и занимались в нашем примере: брали обработчик существующего хоткея и связывали его с новым, собственным, хоткеем. Однако, иногда удобнее (и концептуально чище) указывать обработчик при создании привязки. 
Ткаббера, то самый простой способ повесить свой хоткей на действие, за которым
некий хоткей уже закреплён, это "клонировать" существующий хоткей. Именно этим
мы и занимались в нашем примере: брали обработчик существующего хоткея и
связывали его с новым, собственным, хоткеем. Однако, иногда удобнее (и
концептуально чище) указывать обработчик при создании привязки.

> _При "клонировании" хоткеев, привязанных к окнам (а не виртуальным событиям
 _При "клонировании" хоткеев, привязанных к окнам (а не виртуальным событиям Тк), имейте в виду, что такое клонирование можно производить только в `finload_hook`, т.к. окно, к которому привязан интересующий нас хоткей должно существовать к моменту клонирования._ Привязывать хоткеи к виртуальным событиям Tk можно в любой момент времени (и, соответственно, помещать код привязок в любое место конфига). 
  Тк), имейте в виду, что такое клонирование можно производить только в
  `finload_hook`, т.к. окно, к которому привязан интересующий нас хоткей должно
  существовать к моменту клонирования._ Привязывать хоткеи к виртуальным
  событиям Tk можно в любой момент времени (и, соответственно, помещать код
  привязок в любое место конфига).

### <a id="Дополнительная_информация"></a>Дополнительная информация
## <a id="Дополнительная_информация"></a>Дополнительная информация

... находится на [Tclers' Wiki](http://wiki.tcl.tk):
...находится на [Tclers' Wiki](http://wiki.tcl.tk): 

*  [Keysyms на платформах, отличных от X11](http://wiki.tcl.tk/6182).
*  [Keysyms в "акве"](http://wiki.tcl.tk/14529).
*  [Keysyms на платформах, отличных от X11](http://wiki.tcl.tk/6182). 
*  [Keysyms в "акве"](http://wiki.tcl.tk/14529). 

### <a id="Примечания"></a>Примечания
## <a id="Примечания"></a>Примечания

<sup>1</sup> Можете проверить сами:
<sup>1</sup> Можете проверить сами: 

*  Открываете [список keysyms](http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm);
*  Ищете там, к примеру, keysym "Cyrillic\_a"; замечаете, что он имеет шестнадцатеричный код 0x06C1;
*  Мысленно накладываете на него маску 0xFF и получаете код 0xC1;
*  Теперь ищете этот код в таблице — получаете "Aacute".
*  Открываете [список keysyms](http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm); 
*  Ищете там, к примеру, keysym "Cyrillic\_a"; замечаете, что он имеет шестнадцатеричный код 0x06C1; 
*  Мысленно накладываете на него маску 0xFF и получаете код 0xC1; 
*  Теперь ищете этот код в таблице — получаете "Aacute". 

Маску можно накладывать и не мысленно, например, напишите в консоли Ткаббера:
Маску можно накладывать и не мысленно, например, напишите в консоли Ткаббера: 

    format 0x%X [expr {0x06C1 & 0xFF}]

<sup>2</sup> Она является "оригинальной" потому, что в Ткаббере привязки клавиш
<sup>2</sup> Она является "оригинальной" потому, что в Ткаббере привязки клавиш деляются через их "английское" именование, например, `<Ctrl-KeyPress-r>`, поскольку это позволяет им без всяких пинков работать в X. 
деляются через их "английское" именование, например, `<Ctrl-KeyPress-r>`,
поскольку это позволяет им без всяких пинков работать в X.

<sup>3</sup> Строго говоря, наличие специальных "хаков" для поддержки русского
<sup>3</sup> Строго говоря, наличие специальных "хаков" для поддержки русского языка прямо в программе "попахивает" не очень хорошо, ведь подобные проблемы имеют место с любым языком, у которого коды клавиш ≥ 256, а таких языков много. По этой причине обход этого бага неплохо бы вынести во внешние плагины (по одному для каждого языка). Для этого было бы _очень_ удобно иметь виртуальные события Тк для всех действий, для которых определены хоткеи. 
языка прямо в программе "попахивает" не очень хорошо, ведь подобные проблемы
имеют место с любым языком, у которого коды клавиш ≥ 256, а таких языков много.
По этой причине обход этого бага неплохо бы вынести во внешние плагины (по
одному для каждого языка). Для этого было бы _очень_ удобно иметь виртуальные
события Тк для всех действий, для которых определены хоткеи.

<sup>4</sup> Учтите, что вывод будет попадать в консоль только в том случае,
<sup>4</sup> Учтите, что вывод будет попадать в консоль только в том случае, если вы не [перенаправили стандартный поток вывода интерпретатора Tcl в файл](Нетривиальные_настройки.md#Отладочный_лог_под_Windows); в этом случае либо ищите их там, либо поменяйте последнюю команду на такую: 
если вы не
[**перенаправили стандартный поток вывода интерпретатора Tcl в файл**](Нетривиальные_настройки.md#Отладочный_лог_под_Windows);
в этом случае либо ищите их там, либо поменяйте последнюю команду на такую:

    bind .keytest <KeyPress> [list .keytest.l config -text %K]

в этом случае названия клавиш будут рисоваться прямо в окне, в котором вы эти
в этом случае названия клавиш будут рисоваться прямо в окне, в котором вы эти клавиши нажимаете. 
клавиши нажимаете.

<sup>5</sup> Существует идея постепенно перевести все клавиатурные привязки,
<sup>5</sup> Существует идея постепенно перевести все клавиатурные привязки, существующие в Ткаббере, на виртуальные события Tk. Это сильно упростит создание пользовательских привязок. 
существующие в Ткаббере, на виртуальные события Tk. Это сильно упростит
создание пользовательских привязок.

<sup>6</sup> Разработчикам плагинов настоятельно рекоммендуется использовать
виртуальные события Тк, если требуется поддержка управления хоткеями или
определёнными событиями мыши, а так же _**обязательно** документировать_ эти
<sup>6</sup> Разработчикам плагинов настоятельно рекоммендуется использовать виртуальные события Тк, если требуется поддержка управления хоткеями или определёнными событиями мыши, а так же _**обязательно** документировать_ эти события — пользователь не должен ковыряться в коде плагина для того, чтобы поменять настройку хоткея. В качестве примера может выступить документация от [плагина "Postpone Text"](Плагины.md#Postpone_text). 


события — пользователь не должен ковыряться в коде плагина для того, чтобы
поменять настройку хоткея. В качестве примера может выступить документация от
[**плагина "Postpone Text"**](Плагины.md#Postpone_Text_добавлен_в_транк).

Changes to wiki/ru/XRDB.md.

1

2
3
4
5
6
7

8
9
10

11
12

13
14

15
16
17



1
2
3
4
5
6
7

8

9

10
11

12
13

14

15

16
17
18

+





-
+
-

-
+

-
+

-
+
-

-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/XRDB/index.html)


# XRDB

Материал из Tkabber Wiki

![(!)](../images/Hammer.png) **Сделать:** Написать про Tk option database, его
![(!)](../images/Hammer.png) **Сделать:** Написать про Tk option database, его отношении к XRDB; место и роль xrdb-файлов во всём этом 
отношении к XRDB; место и роль xrdb-файлов во всём этом

[**База данных опций Tk**](База_данных_опций_Tk.md)
[База данных опций Tk](База_данных_опций_Tk.md) 

[Краткая рассказка про основы XRDB (англ.)](http://www.tau.ac.il/cc/internal/X-terminals/5-6-1.html)
[Краткая рассказка про основы XRDB (англ.)](http://www.tau.ac.il/cc/internal/X-terminals/5-6-1.html) 

Команда Tk для управления базой данных настроек:
Команда Tk для управления базой данных настроек: [option](http://www.tcl.tk/man/tcl8.4/TkCmd/option.htm) 
[option](http://www.tcl.tk/man/tcl8.4/TkCmd/option.htm)

[[1]](http://www.cit.gu.edu.au/~anthony/info/X/Resources.hints)
[[1]](http://www.cit.gu.edu.au/~anthony/info/X/Resources.hints) 


Changes to wiki/ru/База_данных_опций_Tk.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15





16
17
18

19
20
21
22

23
24
25
26
27
28

29
30
31
32
33

34
35
36
37

38
39
40
41
42
43
44

45
46
47
48

49
50

51
52
53
54
55

56
57
58
59
60
61

62
63
64
65



66
67

68
69

70
71
72
73

74
75
76
77
78
79

80
81
82
83
84

85
86
87
88
89




90
91
92

93
94
95
96
97
98


99
100

101
102

103
104
105
106

107
108
109
110
111
112

113
114
115
116

117
118
119
120
121
122
123
124
125













126
127

128
129
130
131

132
133
134
135
136
137
138

139
140
141
142
143
144
145

146
147
148
149
150
151
152
153

154
155
156
157
158



159
160

161
162
163
164

165
166
167
168
169

170
171

172
173
174

175
176

177
178
179
180
181

182
183
184

185
186
187
188
189
190
191
192
193
194

195
196
197
198
199
200
201
202
203

204
205
206
207
208
209
210
211

212
213
214
215
216
217



218
219
220
1
2
3
4
5
6
7
8
9
10
11





12
13
14
15
16
17
18

19
20
21
22

23




24

25


26
27

28
29
30
31

32





33

34


35

36
37

38





39




40

41
42



43
44
45
46

47
48

49




50


51
52
53

54



55

56
57




58
59
60
61

62

63



64


65
66
67

68
69

70


71

72


73
74
75

76
77
78
79

80
81








82
83
84
85
86
87
88
89
90
91
92
93
94
95

96


97

98

99
100
101
102
103

104





105

106


107
108
109
110
111

112

113



114
115
116
117

118


119

120

121
122
123

124
125

126
127
128

129
130

131
132
133
134
135

136
137
138

139




140
141
142
143
144

145



146
147
148
149
150

151


152
153
154
155
156

157
158
159
160



161
162
163




+









-
-
-
-
-
+
+
+
+
+


-
+



-
+
-
-
-
-

-
+
-
-


-
+



-
+
-
-
-
-
-

-
+
-
-

-
+

-
+
-
-
-
-
-
+
-
-
-
-

-
+

-
-
-
+
+
+

-
+

-
+
-
-
-
-
+
-
-



-
+
-
-
-

-
+

-
-
-
-
+
+
+
+
-

-
+
-
-
-

-
-
+
+

-
+

-
+
-
-

-
+
-
-



-
+



-
+

-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+
-
-

-
+
-





-
+
-
-
-
-
-

-
+
-
-





-
+
-

-
-
-
+
+
+

-
+
-
-

-
+
-



-
+

-
+


-
+

-
+




-
+


-
+
-
-
-
-





-
+
-
-
-





-
+
-
-





-
+



-
-
-
+
+
+
-
-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/База_данных_опций_Tk/index.html)


# База данных опций Tk

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 Введение](#Введение)
* [2 Глоссарик (словарий)](#Глоссарик_словарий)
   * [2.1 Виджеты](#Виджеты)
   * [2.2 Классы виджетов](#Классы_виджетов)
   * [2.3 Опции виджетов](#Опции_виджетов)
      * [2.3.1 Откуда виджеты берут значения своих опций?](#Откуда_виджеты_берут_значения_своих_опций)
   * [2.4 Классы опций виджетов](#Классы_опций_виджетов)
 * [2.1 Виджеты](#Виджеты)
 * [2.2 Классы виджетов](#Классы_виджетов)
 * [2.3 Опции виджетов](#Опции_виджетов)
  * [2.3.1 Откуда виджеты берут значения своих опций?](#Откуда_виджеты_берут_значения_своих_опций)
 * [2.4 Классы опций виджетов](#Классы_опций_виджетов)
* [3 Структура](#Структура)
* [4 Подводные камни](#Подводные_камни)
   * [4.1 Имя приложения](#Имя_приложения)
 * [4.1 Имя приложения](#Имя_приложения)
* [5 Примечания](#Примечания)

# <a id="Введение"></a>Введение
База данных опций Tk ("Tk option database") это набор пар строк
База данных опций Tk ("Tk option database") это набор пар строк `ключ/значение`, присутствующих в любом интерпретаторе Tcl, загрузившем библиотеку Tk, независимо от платформы, позволяющая весьма гибко задавать настройки для различных виджетов, составляющих графический интерфейс пользователя программы. 
`ключ/значение`, присутствующих в любом интерпретаторе Tcl, загрузившем
библиотеку Tk, независимо от платформы, позволяющая весьма гибко задавать
настройки для различных виджетов, составляющих графический интерфейс
пользователя программы.

База данных опций Tk имеет прямое отношение к [**XRDB**](XRDB.md) (и
База данных опций Tk имеет прямое отношение к [XRDB](XRDB.md) (и инициализируется из неё на тех платформах, на которых та доступна), работает очень похожим образом, однако имеет некоторые тонкие отличия. 
инициализируется из неё на тех платформах, на которых та доступна), работает
очень похожим образом, однако имеет некоторые тонкие отличия.

# <a id="Глоссарик_словарий"></a>Глоссарик (словарий)
Начнём с определения необходимых терминов.
Начнём с определения необходимых терминов. 

## <a id="Виджеты"></a>Виджеты

Слово "ви́джет" является калькой с английского "widget", которое является хитрым
Слово "ви́джет" является калькой с английского "widget", которое является хитрым объединением слов "window" (окно) и "gadget" (штуковина, хреновина, прибор, девайс и т.п.). Появилось в X Window и обозначает элемент графического пользовательского интерфейса, представленный окном и обладающий определённым набором свойств и поведением. Виндовые программисты обычно назвают виджеты "контро́лами" ("control", "windowed control"). 
объединением слов "window" (окно) и "gadget" (штуковина, хреновина, прибор,
девайс и т.п.). Появилось в X Window и обозначает элемент графического
пользовательского интерфейса, представленный окном и обладающий определённым
набором свойств и поведением. Виндовые программисты обычно назвают виджеты
"контро́лами" ("control", "windowed control").

Говоря проще, виджетами являются все чётко выделяемые пользователем элементы
Говоря проще, виджетами являются все чётко выделяемые пользователем элементы интерфейса: кнопки, поля ввода, скроллбары и т.п. Мнение википедии по этому вопросу изложено [тут](http://ru.wikipedia.org/wiki/Виджет). 
интерфейса: кнопки, поля ввода, скроллбары и т.п. Мнение википедии по этому
вопросу изложено [тут](http://ru.wikipedia.org/wiki/Виджет).

Для нас важнее всего понять два свойства виджетов Tk:
Для нас важнее всего понять два свойства виджетов Tk: 

* Виджеты Tk организованы иерархически. То есть некоторые виджеты могут
*  Виджеты Tk организованы иерархически. То есть некоторые виджеты могут содержать дочерние виджеты и сами, в свою очередь, могут являться чьими-то дочерними виджетами. Строго говоря, все виджеты графического интерфейса пользователя организованы в виде однонаправленного ациклического графа — дерева. Корневым узлом этого графа является _главное окно Tk_. 
  содержать дочерние виджеты и сами, в свою очередь, могут являться чьими-то
  дочерними виджетами. Строго говоря, все виджеты графического интерфейса
  пользователя организованы в виде однонаправленного ациклического графа —
  дерева. Корневым узлом этого графа является _главное окно Tk_.
* Каждый виджет в Tk имеет _имя,_ которое однозначно определяет положение
*  Каждый виджет в Tk имеет _имя,_ которое однозначно определяет положение виджета в иерархии виджетов. Оно аналогично _полному_ путевому имени файла в операционных системах. Имя виджета состоит из имён всех его родительских виджетов, разделённых точками ("."). Именем главного окна является точка (".")<sup>[1](База_данных_опций_Tk.md#Примечания)</sup>. 
  виджета в иерархии виджетов. Оно аналогично _полному_ путевому имени файла в
  операционных системах. Имя виджета состоит из имён всех его родительских
  виджетов, разделённых точками ("."). Именем главного окна является точка
  (".")<sup>[**1**](#Примечания)</sup>.

Примеры имён виджетов:
Примеры имён виджетов: 

* `.` — главное окно приложения;
* `.roster` — окно списка контактов;
* `.mainframe.topf.tb0.bbox` — контейнер с кнопками главного (и единственного) тулбара.
*  `.` — главное окно приложения; 
*  `.roster` — окно списка контактов; 
*  `.mainframe.topf.tb0.bbox` — контейнер с кнопками главного (и единственного) тулбара. 

Имена виджетов обязаны подчиняться двум правилам:
Имена виджетов обязаны подчиняться двум правилам: 

* Имена виджетов должны быть полными (так как в отличие, к примеру, от командных
*  Имена виджетов должны быть полными (так как в отличие, к примеру, от командных оболочек операционных систем, в программах, использующих Tk, нет концепции "текущий виджет", аналогичной концепции "текущего каталога"), — то есть они должны начинаться с точки; 
  оболочек операционных систем, в программах, использующих Tk, нет концепции
  "текущий виджет", аналогичной концепции "текущего каталога"), — то есть они
  должны начинаться с точки;
* Имя каждого виджета в цепочке, составляющей полное имя, обязано начинаться
*  Имя каждого виджета в цепочке, составляющей полное имя, обязано начинаться со строчной буквы или цифры<sup>[2](База_данных_опций_Tk.md#Примечания)</sup> — заглавные буквы зарезервированы за _классами виджетов._ 
  со строчной буквы или цифры<sup>[**2**](#Примечания)</sup> — заглавные буквы
  зарезервированы за _классами виджетов._

## <a id="Классы_виджетов"></a>Классы виджетов

Каждый виджет принадлежит к определённому _классу._ Так же, как в некоторых
Каждый виджет принадлежит к определённому _классу._ Так же, как в некоторых объектно-ориентированных языках программирования класс реализует (обозначает) _тип_ объекта, класс виджета определяет тип этого виджета — поведение и набор характеристик, общих для всех виджетов данного класса. 
объектно-ориентированных языках программирования класс реализует (обозначает)
_тип_ объекта, класс виджета определяет тип этого виджета — поведение и набор
характеристик, общих для всех виджетов данного класса.

Примеры классов:
Примеры классов: 

* `Button` — кнопка;
* `Entry` — однострочное поле ввода;
* `Menu` — меню;
* `Frame` — "фрейм" (окно, чьей единственной задачей обычно является хранение
*  `Button` — кнопка; 
*  `Entry` — однострочное поле ввода; 
*  `Menu` — меню; 
*  `Frame` — "фрейм" (окно, чьей единственной задачей обычно является хранение дочерних окон и управление их взаимным расположением (их _"геометрией"_)). 
  дочерних окон и управление их взаимным расположением (их _"геометрией"_)).

Имена классов стандартных для Tk виджетов просто и однозначно связаны с
Имена классов стандартных для Tk виджетов просто и однозначно связаны с _командами Tcl,_ предоставляемыми Tk для создания этих виджетов: команды назваются так же, как классы, но отличаются от них строчной "капитализацией", например: 
_командами Tcl,_ предоставляемыми Tk для создания этих виджетов: команды
назваются так же, как классы, но отличаются от них строчной "капитализацией",
например:

* `Button` → `button`
* `Labelframe` → `labelframe`
*  `Button` → `button` 
*  `Labelframe` → `labelframe` 

и т.д.
и т.д. 

Имена классов виджетов в Tk всегда начинаются с заглавной буквы. Это нужно для
Имена классов виджетов в Tk всегда начинаются с заглавной буквы. Это нужно для того, чтобы можно было отличать их от имён конкретных виджетов в спецификациях запросов к базе данных опций Tk, которые будут объяснены ниже. 
того, чтобы можно было отличать их от имён конкретных виджетов в спецификациях
запросов к базе данных опций Tk, которые будут объяснены ниже.

Нетрудно видеть, что можно взять имя любого виджета и заменить имя каждого
Нетрудно видеть, что можно взять имя любого виджета и заменить имя каждого (родительского) виджета в цепочке его классом. Например, для первой (слева) кнопки на нашем тулбаре, которая имеет имя 
(родительского) виджета в цепочке его классом. Например, для первой (слева)
кнопки на нашем тулбаре, которая имеет имя

    .mainframe.topf.tb0.bbox.b0

это будет:
это будет: 

    Tkabber.Frame.Frame.Frame.ButtonBox.Button

что соответствует такой таблице:
что соответствует такой таблице: 

Виджет                     |Класс
---------------------------|---------
.                          |Tkabber
.mainframe                 |Frame
.mainframe.topf            |Frame
.mainframe.topf.tb0        |Frame
.mainframe.topf.tb0.bbox   |ButtonBox
.mainframe.topf.tb0.bbox.b0|Button
 ** Виджет **** Класс **
 
  .  Tkabber 
 
  .mainframe  Frame 
 
  .mainframe.topf  Frame 
 
  .mainframe.topf.tb0  Frame 
 
  .mainframe.topf.tb0.bbox  ButtonBox 
 
  .mainframe.topf.tb0.bbox.b0  Button 

Обратите внимание на класс основного окна (".") — он имеет значение "Tkabber" и
Обратите внимание на класс основного окна (".") — он имеет значение "Tkabber" и вообще говоря совпадает с _именем приложения,_ о котором подробно рассказано [ниже](База_данных_опций_Tk.md#Имя_приложения). 
вообще говоря совпадает с _именем приложения,_ о котором подробно рассказано
[**ниже**](#Имя_приложения).

**Примечание:** класс виджета можно узнать при помощи команды
**Примечание:** класс виджета можно узнать при помощи команды [winfo](http://tcl.tk/man/tcl8.4/TkCmd/winfo.htm): 
[winfo](http://tcl.tk/man/tcl8.4/TkCmd/winfo.htm):

    winfo class .path.to.the.widget

## <a id="Опции_виджетов"></a>Опции виджетов

Внешний вид и поведение виджетов контролируется их _опциями._ Свои опции
Внешний вид и поведение виджетов контролируется их _опциями._ Свои опции виджеты получают от своих классов, например, все кнопки (виджеты класса Button) имеют совершенно одинаковый набор опций. _Значения_ же этих опций обычно разные, что и делает разные виджеты одного класса выглядящими и ведущими себя по-разному (сравните, к примеру, кнопку на тулбаре с кнопкой, закрывающей окно "О программе"). 
виджеты получают от своих классов, например, все кнопки (виджеты класса Button)
имеют совершенно одинаковый набор опций. _Значения_ же этих опций обычно
разные, что и делает разные виджеты одного класса выглядящими и ведущими себя
по-разному (сравните, к примеру, кнопку на тулбаре с кнопкой, закрывающей окно
"О программе").

Опции виджетов тоже имеют имена. Эти имена как бы продолжают иерархию виджетов
Опции виджетов тоже имеют имена. Эти имена как бы продолжают иерархию виджетов ещё на один уровень, например, имя опции, определяющей шрифт текста на нашей многострадальной кнопке тулбара таково: 
ещё на один уровень, например, имя опции, определяющей шрифт текста на нашей
многострадальной кнопке тулбара таково:

    .mainframe.topf.tb0.bbox.b0.font

### <a id="Откуда_виджеты_берут_значения_своих_опций"></a>Откуда виджеты берут значения своих опций?

Виджеты Tk получают свои параметры (то есть значения своих опций) из трёх
Виджеты Tk получают свои параметры (то есть значения своих опций) из трёх источников, перечисленных ниже, в указанном порядке: 
источников, перечисленных ниже, в указанном порядке:

1.  Значения по умолчанию, "прибитые гвоздями" в библиотеку Tk;
1.  Значения из базы данных опций Tk;
1.  Значения, динамически присваемые опциям в ходе выполнения программы.
1.  Значения по умолчанию, "прибитые гвоздями" в библиотеку Tk; 
1.  Значения из базы данных опций Tk; 
1.  Значения, динамически присваемые опциям в ходе выполнения программы. 

Нетрудно видеть, что параметры по умолчанию имеют самый низкий приоритет, а
Нетрудно видеть, что параметры по умолчанию имеют самый низкий приоритет, а значения, которые опции виджета получают в ходе выполнения программы имеют максимальный приоритет. 
значения, которые опции виджета получают в ходе выполнения программы имеют
максимальный приоритет.

Важно понимать, что первые два источника являются "статичными" в том смысле,
Важно понимать, что первые два источника являются "статичными" в том смысле, что Tk пользуется ими _только при создании_ виджета. 
что Tk пользуется ими _только при создании_ виджета.

## <a id="Классы_опций_виджетов"></a>Классы опций виджетов

Да, опции виджетов тоже имеют классы.
Да, опции виджетов тоже имеют классы. 

![(!)](../images/Hammer.png) **Сделать:** развить
![(!)](../images/Hammer.png) **Сделать:** развить 

# <a id="Структура"></a>Структура
База данных опций Tk отображает...
База данных опций Tk отображает... 

![(!)](../images/Hammer.png) **Сделать:** развить
![(!)](../images/Hammer.png) **Сделать:** развить 

# <a id="Подводные_камни"></a>Подводные камни
## <a id="Имя_приложения"></a>Имя приложения

![(!)](../images/Hammer.png) **Сделать:** написать
![(!)](../images/Hammer.png) **Сделать:** написать 

# <a id="Примечания"></a>Примечания
<sup>1</sup> В именовании виджетов Tk используется тот же "трюк" (или "то же
<sup>1</sup> В именовании виджетов Tk используется тот же "трюк" (или "то же несоответствие", если угодно), которое присутствует в файловых системах Unix: в последних именем корневого каталога является "/", и этот же символ является разделителем имён в пути, однако в путевых именах файлов именем корневого каталога является пустая строка, а путевое имя начинается с разделителя: 
несоответствие", если угодно), которое присутствует в файловых системах Unix: в
последних именем корневого каталога является "/", и этот же символ является
разделителем имён в пути, однако в путевых именах файлов именем корневого
каталога является пустая строка, а путевое имя начинается с разделителя:

    / — корневой каталог
    /foo/bar.txt — путевое имя файла bar.txt в каталоге /foo
    ^разделитель

Нетрудно видеть, что в именах виджетов Tk то же самое происходит с символом
Нетрудно видеть, что в именах виджетов Tk то же самое происходит с символом ".": он одновременно является именем главного окна и разделителем частей имени виджета, поэтому в именах виджетов именем главного окна является пустая строка, а имя начинается с разделителя: 
".": он одновременно является именем главного окна и разделителем частей имени
виджета, поэтому в именах виджетов именем главного окна является пустая строка,
а имя начинается с разделителя:

    . — главное окно
    .mywindow.mybutton — виджет mybutton в окне .mywindow
    ^разделитель

<sup>2</sup> Строго говоря, в имени виджета можно использовать _любой
<sup>2</sup> Строго говоря, в имени виджета можно использовать _любой допустимый символ [Unicode](http://www.unicode.org),_ кроме заглавных символов и точки. Например, вполне допустим код: 
допустимый символ [Unicode](http://www.unicode.org),_ кроме заглавных символов
и точки. Например, вполне допустим код:

    label .метко
    pack .метко
    .метко config -text {Медведы идут на udaff.com}

Более того, имена виджетов могут содержать пробелы:
Более того, имена виджетов могут содержать пробелы: 

    label ". " ;# метка с именем, состоящим из одного пробела

Понятно, что как по причинам читабельности, так и удобства
программирования/поддержки кода, так делать не стоит. Кроме того, в
руководствах по Tk этот вопрос практически не освещён, а значит, ничего особо
Понятно, что как по причинам читабельности, так и удобства программирования/поддержки кода, так делать не стоит. Кроме того, в руководствах по Tk этот вопрос практически не освещён, а значит, ничего особо не гарантируется. Также совершенно непонятен вопрос взамодействия таких имён виджетов с базой данных опций Tk и — главное — взаимодействие последней с [XRDB](XRDB.md). 


не гарантируется. Также совершенно непонятен вопрос взамодействия таких имён
виджетов с базой данных опций Tk и — главное — взаимодействие последней с
[**XRDB**](XRDB.md).

Changes to wiki/ru/Блокировка_MRIM-спама.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

17
18
19
20

21
22
23
24
25
26





27
28

29
30
31
32
33
34
35

36
37
38

39
40

41
42
43
44
45

46
47
48
49

50
51

52
53
54
55

56
57
58
59
60

61
62

63
64
65
66
67

68
69
70
71
72

73
74
75
76
77
78
79
80




81
82
83
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

17


18

19
20





21
22
23
24
25
26

27




28
29

30

31

32
33

34


35
36

37


38

39
40

41

42
43

44



45

46
47

48


49
50

51





52








53
54
55
56

57


+














-
+
-
-

-
+

-
-
-
-
-
+
+
+
+
+

-
+
-
-
-
-


-
+
-

-
+

-
+
-
-


-
+
-
-

-
+

-
+
-


-
+
-
-
-

-
+

-
+
-
-


-
+
-
-
-
-
-
+
-
-
-
-
-
-
-
-
+
+
+
+
-

-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Блокировка_MRIM-спама/index.html)


# Блокировка MRIM-спама

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 Пролог](#Пролог)
* [2 Экспозиция — опции главного меню](#Экспозиция_-_опции_главного_меню)
* [3 Завязка — добавление нового списка приватности](#Завязка_-_добавление_нового_списка_приватности)
* [4 Кульминация — редактирование созданного списка](#Кульминация_-_редактирование_созданного_списка)
* [5 Эпилог — предупреждения](#Эпилог_-_предупреждения)

# <a id="Пролог"></a>Пролог
Здесь по-простому (в картинках) рассказано, как настроить блокирование спама с
Здесь по-простому (в картинках) рассказано, как настроить блокирование спама с [MRIM](http://agent.mail.ru)-гейта средствами списков приватности на стороне сервера, поддержка которых реализована в Ткаббере. 
[MRIM](http://agent.mail.ru)-гейта средствами списков приватности на стороне
сервера, поддержка которых реализована в Ткаббере.

Блокировка основана на простых правилах:
Блокировка основана на простых правилах: 

1. Пропускать только сообщения от контактов "из ростера", а именно:
 * тех, на чьё присутствие мы подписаны;
 * контактов с взаимной подпиской на присутствие.

1. Блокировать _все_ сообщения с MRIM-гейта, не попавшие под предыдущий критерий.
1.  Пропускать только сообщения от контактов "из ростера", а именно: 
 *  тех, на чьё присутствие мы подписаны; 
 *  контактов с взаимной подпиской на присутствие. 
 
1.  Блокировать _все_ сообщения с MRIM-гейта, не попавшие под предыдущий критерий. 

Перед тем как продолжить чтение, нелишним будет совершить небольшой экскурс в
Перед тем как продолжить чтение, нелишним будет совершить небольшой экскурс в теорию (она очень доходчиво и в то же время кратко [изложена](http://bombus-im.org/wiki/jabber/privacy_lists) на сайте Бомбуса; единственное, что можно пропустить — это последнюю главу, где дан практический пример). 
теорию (она очень доходчиво и в то же время кратко
[изложена](http://bombus-im.org/wiki/jabber/privacy_lists) на сайте Бомбуса;
единственное, что можно пропустить — это последнюю главу, где дан практический
пример).

# <a id="Экспозиция_-_опции_главного_меню"></a>Экспозиция — опции главного меню
Вначале следует убедиться, что интересующие нас опции главного меню,
Вначале следует убедиться, что интересующие нас опции главного меню, относящиеся к обеспечению приватности, выглядят так, как показано на скриншоте: 
относящиеся к обеспечению приватности, выглядят так, как показано на скриншоте:

![Опции главного меню](../images/Mrim-opts.png)
![Опции главного меню](../images/Mrim-opts.png) 

А именно: опция **Активировать списки при подключении** _выключена_. Это нужно
А именно: опция **Активировать списки при подключении** _выключена_. Это нужно для того, чтобы Ткаббер не использовал свои встроенные списки приватности вместо нашего, который мы добавим прямо сейчас. 
для того, чтобы Ткаббер не использовал свои встроенные списки приватности
вместо нашего, который мы добавим прямо сейчас.

# <a id="Завязка_-_добавление_нового_списка_приватности"></a>Завязка — добавление нового списка приватности
Для настройки требуется создать новый список приватности, активизировав пункт
Для настройки требуется создать новый список приватности, активизировав пункт основного меню: **Tkabber → Обеспечение приватности → Изменить правила вручную**; в нашем примере новый список называется "mrim-allow-only-contacts": 
основного меню: **Tkabber → Обеспечение приватности → Изменить правила
вручную**; в нашем примере новый список называется "mrim-allow-only-contacts":

![Окно со списками приватности](../images/Mrim-lists.png)
![Окно со списками приватности](../images/Mrim-lists.png) 

Этот список в том же диалоге должен быть сделан списком _по умолчанию_ и
Этот список в том же диалоге должен быть сделан списком _по умолчанию_ и _активным_ списком. 
_активным_ списком.

# <a id="Кульминация_-_редактирование_созданного_списка"></a>Кульминация — редактирование созданного списка
Далее переходим к редактированию списка. Вводим правила так, как указано на
Далее переходим к редактированию списка. Вводим правила так, как указано на скриншоте. Единственное, на что вам нужно обратить особое внимание, это последнее правило, в котором фигурирует JID `mrim.007spb.ru` — у вас там должен быть JID вашего MRIM-гейта, например, `mrim.jabber.ru`. 
скриншоте. Единственное, на что вам нужно обратить особое внимание, это
последнее правило, в котором фигурирует JID `mrim.007spb.ru` — у вас там должен
быть JID вашего MRIM-гейта, например, `mrim.jabber.ru`.

![Окно с активным списком приватности](../images/Mrim-allow-only-contacts.png)
![Окно с активным списком приватности](../images/Mrim-allow-only-contacts.png) 

Важно, чтобы правила следовали именно в таком порядке, как указано на
Важно, чтобы правила следовали именно в таком порядке, как указано на скриншоте, а именно, правило для JID MRIM-гейта должно идти после правил, проверяющих состояние подписки на присутствие. 
скриншоте, а именно, правило для JID MRIM-гейта должно идти после правил,
проверяющих состояние подписки на присутствие.

# <a id="Эпилог_-_предупреждения"></a>Эпилог — предупреждения
* Встроенные списки приватности Ткаббера перестают работать; в частности, это
*  Встроенные списки приватности Ткаббера перестают работать; в частности, это означает, что помещение контакта в **Невидимый** или **Игнорируемый** списки штатными средствами Ткаббера никакого реального эффекта иметь не будет. Если вам понадобилось кого-то заигнорить, придётся лезть в список Mrim'а и добавлять нужные правила туда. 
  означает, что помещение контакта в **Невидимый** или **Игнорируемый** списки
  штатными средствами Ткаббера никакого реального эффекта иметь не будет. Если
  вам понадобилось кого-то заигнорить, придётся лезть в список Mrim'а и
  добавлять нужные правила туда.
* Спам в виде запросов на подписку _не_ блокируется этим способом; к сожалению,
*  Спам в виде запросов на подписку _не_ блокируется этим способом; к сожалению, в текущей версии [ejabberd](http://ejabberd.jabber.ru), под управлением которого работают `jabber.ru` и `jabber.org` это [невозможно по техническим причинам](Спамодавка_списками_приватности.md). **Примечание:** этот вид спама успешно отсекается плагином [Antispam](Плагины.md#Antispam). 
  в текущей версии [ejabberd](http://ejabberd.jabber.ru), под управлением
  которого работают `jabber.ru` и `jabber.org` это
  [**невозможно по техническим причинам**](Спамодавка_списками_приватности.md).
  **Примечание:** этот вид спама успешно отсекается плагином
  [**Antispam**](Плагины.md#Antispam).
* Редактирование списков приватности вручную аналогично ручной настройке
  файрвола на компьютере — вы должны понимать возможные последствия. Поэтому
  очень рекомендуется ознакомиться с
*  Редактирование списков приватности вручную аналогично ручной настройке файрвола на компьютере — вы должны понимать возможные последствия. Поэтому очень рекомендуется ознакомиться с [теорией](http://www.xmpp.org/rfcs/rfc3921.html#privacy). 

Спам давил [kostix](Участник_Kostix.md). 

  [теорией](http://www.xmpp.org/rfcs/rfc3921.html#privacy).

Спам давил [**kostix**](Участник_Kostix.md).

Added wiki/ru/Быстрая_настройка_шрифтов.md.




























1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Установка_и_настройка_в_Ubuntu/index.html)


# Быстрая настройка шрифтов

Материал из Tkabber Wiki

[Установка и настройка в Ubuntu](Установка_и_настройка_в_Ubuntu.md)

    echo 'deb     http://people.debian.org/~sgolovan/debian/ lenny main'  |  sudo tee -a /etc/apt/sources.list
    echo 'deb-src http://people.debian.org/~sgolovan/debian/ lenny main'  |  sudo tee -a /etc/apt/sources.list && sudo apt-get update

введите пароль и продолжайте 

    sudo apt-get install tkabber tkabber-plugins tk8.5 libsnack2 tktray msttcorefonts

и это 

    sudo update-alternatives --config wish

нажмите цифорку соответствующую пункту "/usr/bin/wish8.5" а потом на Enter и используем. 

теперь ваш tkabber установлен и в убунте у него нормальные шрифты. и вам почти не пришлось ничего  читать :) 

Если вам не помогло это руководство, или у вас возникли вопросы, то смело нажимайте на "Обсуждение" вверху страницы. и опишите в чём именно у вас возникли трудности. 


Changes to wiki/ru/Гейты_во_вражеские_сети.md.

1

2
3
4
5
6
7
8

9
10

11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26










27
28
29
30
31
32
33






34
35
36

37
38
39
40
41
42

43
44
45
46
47
48
49

50
51
52
53
54
55

56
57
58
59
60

61
62

63
64
65


66
67
68


69
70

71
72
73
74


75
76
77
78
79
80
81
82
83
84
85

86
87
88
89




90
91
92
93
94
95

96
97

98
99
100
101



102
103
104
105
106
107
108
109
110
111
112

113
114
115
116
117

118
119
120
121
122
123
124
125

126
127
128
129
130
131
132
133
134

135
136
137
138
139
140
141
142

143
144
145
146
147

148
149
150
151
152
153
154
155
156
157
158

159
160
161
162
163
164
165
166
167
168
169

170
171
172
173
174
175

176
177
178
179
180
181

182
183

184
185
186
187

188
189
190
191
192


193
194
195
196

197
198
199
200
201

202

203
204
205
206
207
208
209
210









211
212

213
214

215
216
217
218
219
220

221
222
223
224
225


226
227

228
229
230
231
232

233
234
235
236



237
238
239
240

241
242
243
244

245
246
247
248
249
250

251
252
253
254
255
256
257
258
259
260

261
262
263

264
265
266
267


268
269

270
271
272
273
274
275
276

277
278
279
280
281
282
283
284
285
286

287
288

289
290
291
292
293
294

295
296
297

298
299
300
301
302

303
304
305
306

307
308
309

310
311
312
313
314
315
316
317
318
319
320
321

322
323
324
325
326

327
328
329
330
331



332
333

334
335
336
337
338
339
340

341
342
343
344
345
346
347
348
349
350
351
352
353

354
355
356
357
358
359
360

361
362
363
364
365
366
367
368

369
370
371
372
373
374
375
376
377
378

379
380
381
382
383
384

385
386
387
388
389
390
391
392
393
394
395
396
397
398
399



400
401
402
403
404
405
406
407
408
409
410
1
2
3
4
5
6
7


8


9
10
11
12
13
14
15










16
17
18
19
20
21
22
23
24
25
26






27
28
29
30
31
32
33
34

35




36

37




38
39

40




41

42



43

44


45



46
47



48
49


50




51
52











53




54
55
56
57






58


59




60
61
62











63



64

65



66
67
68
69

70






71


72






73

74


75


76








77


78








79


80




81

82


83
84
85

86
87

88
89
90
91

92


93


94
95




96

97
98
99

100
101
102








103
104
105
106
107
108
109
110
111
112

113
114

115


116
117
118

119


120


121
122
123

124

125
126
127

128
129



130
131
132
133
134
135

136


137

138
139
140
141
142
143

144








145

146
147


148




149
150
151

152





153

154








155

156
157

158




159

160
161


162





163




164

165

166










167

168

169
170
171

172

173



174
175
176
177

178




179
180

181









182
183
184

185



186
187
188

189




190
191
192

193






194
195
196

197


198
199
200

201









202
203
204



205
206
207












+





-
-
+
-
-
+






-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
+
+
+
+
+
+


-
+
-
-
-
-

-
+
-
-
-
-


-
+
-
-
-
-

-
+
-
-
-

-
+
-
-
+
-
-
-
+
+
-
-
-
+
+
-
-
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
+
-
-
+
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-

-
+
-
-
-




-
+
-
-
-
-
-
-

-
-
+
-
-
-
-
-
-

-
+
-
-

-
-
+
-
-
-
-
-
-
-
-

-
-
+
-
-
-
-
-
-
-
-

-
-
+
-
-
-
-

-
+
-
-



-
+

-
+



-
+
-
-

-
-
+
+
-
-
-
-
+
-



-
+

+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+

-
+

-
+
-
-



-
+
-
-

-
-
+
+

-
+
-



-
+

-
-
-
+
+
+



-
+
-
-

-
+





-
+
-
-
-
-
-
-
-
-

-
+

-
-
+
-
-
-
-
+
+

-
+
-
-
-
-
-

-
+
-
-
-
-
-
-
-
-

-
+

-
+
-
-
-
-

-
+

-
-
+
-
-
-
-
-
+
-
-
-
-
+
-

-
+
-
-
-
-
-
-
-
-
-
-

-
+
-



-
+
-

-
-
-
+
+
+

-
+
-
-
-
-


-
+
-
-
-
-
-
-
-
-
-



-
+
-
-
-



-
+
-
-
-
-



-
+
-
-
-
-
-
-



-
+
-
-



-
+
-
-
-
-
-
-
-
-
-



-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Гейты_во_вражеские_сети/index.html)


# Гейты во вражеские сети

Материал из Tkabber Wiki

> _Тятя, тятя, наши сети  
> Притащили мертвеца._
Притащили мертвеца. 

> _© А. С. Пушкин ["Утопленник"](http://www.lib.ru/LITRA/PUSHKIN/p2.txt)_
["Утопленник"](http://www.lib.ru/LITRA/PUSHKIN/p2.txt)

## <a id="toc"></a>Содержание

* [1 Введение](#Введение)
* [2 Регистрация на транспорте](#Регистрация_на_транспорте)
* [3 Некоторые гейты в другие сети](#Некоторые_гейты_в_другие_сети)
   * [3.1 ICQ](#ICQ)
      * [3.1.1 icq.jabber.ru](#icq.jabber.ru)
      * [3.1.2 Переезд на другой транспорт с минимумом головной боли](#Переезд_на_другой_транспорт_с_минимумом_головной_боли)
      * [3.1.3 Общедоступные транспорты в ICQ](#Общедоступные_транспорты_в_ICQ)
   * [3.2 MRIM](#MRIM)
   * [3.3 MSN](#MSN)
   * [3.4 Yahoo](#Yahoo)
   * [3.5 AIM](#AIM)
   * [3.6 IRC](#IRC)
   * [3.7 XMPP (свой среди чужих ;))](#XMPP_свой_среди_чужих_)
 * [3.1 ICQ](#ICQ)
  * [3.1.1 icq.jabber.ru](#icq.jabber.ru)
  * [3.1.2 Переезд на другой транспорт с минимумом головной боли](#Переезд_на_другой_транспорт_с_минимумом_головной_боли)
  * [3.1.3 Общедоступные транспорты в ICQ](#Общедоступные_транспорты_в_ICQ)
 * [3.2 MRIM](#MRIM)
 * [3.3 MSN](#MSN)
 * [3.4 Yahoo](#Yahoo)
 * [3.5 AIM](#AIM)
 * [3.6 IRC](#IRC)
 * [3.7 XMPP (свой среди чужих ;))](#XMPP_свой_среди_чужих_)
* [4 Проблемы при работе с гейтами](#Проблемы_при_работе_с_гейтами)
   * [4.1 Unavailable](#Unavailable)
   * [4.2 Low Level Network Error](#Low_Level_Network_Error)
   * [4.3 Unrecoverable Error (Remote Server Not Found)](#Unrecoverable_Error_Remote_Server_Not_Found)
   * [4.4 Disconnected by unknown reason](#Disconnected_by_unknown_reason)
   * [4.5 Temporary Error (Component 'msnlinker' is not connected to server)](#Temporary_Error_Component_msnlinker_is_not_connected_to_server)
   * [4.6 "Намерзание" участников в ростере](#Намерзание_участников_в_ростере)
 * [4.1 Unavailable](#Unavailable)
 * [4.2 Low Level Network Error](#Low_Level_Network_Error)
 * [4.3 Unrecoverable Error (Remote Server Not Found)](#Unrecoverable_Error_Remote_Server_Not_Found)
 * [4.4 Disconnected by unknown reason](#Disconnected_by_unknown_reason)
 * [4.5 Temporary Error (Component 'msnlinker' is not connected to server)](#Temporary_Error_Component_msnlinker_is_not_connected_to_server)
 * [4.6 "Намерзание" участников в ростере](#Намерзание_участников_в_ростере)

# <a id="Введение"></a>Введение
Один из часто задаваемых на конференции вопросов: может ли Ткаббер "общаться" с
Один из часто задаваемых на конференции вопросов: может ли Ткаббер "общаться" с пользователями других сетей, например, ICQ, Yahoo, MSN и прочих. Строго говоря, Ткаббер тут совершенно ни при чём, и вопрос не по адресу. Но поскольку мы люди добрые, вопрос сей проясним :) К тому же неплохо иметь под рукой базу работающих гейтов ;) 
пользователями других сетей, например, ICQ, Yahoo, MSN и прочих. Строго говоря,
Ткаббер тут совершенно ни при чём, и вопрос не по адресу. Но поскольку мы люди
добрые, вопрос сей проясним :) К тому же неплохо иметь под рукой базу
работающих гейтов ;)

За связь с другими сетями отвечает сервер, к которому вы подключены, а точнее,
За связь с другими сетями отвечает сервер, к которому вы подключены, а точнее, специальные транспорты (или гейты, как их ещё называют), расположенные на нём. Если быть ещё более точным, то совсем не обязательно использовать транспорт того сервера, на котором у вас зарегистрирован аккаунт. Впрочем, всё по порядку. 
специальные транспорты (или гейты, как их ещё называют), расположенные на нём.
Если быть ещё более точным, то совсем не обязательно использовать транспорт
того сервера, на котором у вас зарегистрирован аккаунт. Впрочем, всё по
порядку.

# <a id="Регистрация_на_транспорте"></a>Регистрация на транспорте
Начнём с того, что напомним о необходимости иметь зарегистрированный аккаунт в
Начнём с того, что напомним о необходимости иметь зарегистрированный аккаунт в той сети, с которой вы хотите "дружить". Если аккаунта нет, гейт за вас его создать не сможет. Ставьте родной клиент и регистрируйтесь. Также имейте в виду, что у большого количества IM-сетей работает регистрация на главном Web-сайте. 
той сети, с которой вы хотите "дружить". Если аккаунта нет, гейт за вас его
создать не сможет. Ставьте родной клиент и регистрируйтесь. Также имейте в
виду, что у большого количества IM-сетей работает регистрация на главном
Web-сайте.

На практике же аккаунт уже имеется, задача лишь — "подрубиться" к сети, чтобы
На практике же аккаунт уже имеется, задача лишь — "подрубиться" к сети, чтобы общаться с друзьями, упорно не хотящими переходить на джаббер (или понятия о нём не имеющими). Процесс регистрации на гейте может варьироваться в некоторых пределах, но основные шаги, которые нам надо предпринять, следующие: 
общаться с друзьями, упорно не хотящими переходить на джаббер (или понятия о
нём не имеющими). Процесс регистрации на гейте может варьироваться в некоторых
пределах, но основные шаги, которые нам надо предпринять, следующие:

1. Открыть Дискавери: вторая слева кнопка "Обзор служб" либо пункт меню
1.  Открыть Дискавери: вторая слева кнопка "Обзор служб" либо пункт меню **Службы → Обзор служб**; 
   **Службы → Обзор служб**;
1. Найти в списке доступных служб нужный вам гейт (например, icq.jabber.ru) и
1.  Найти в списке доступных служб нужный вам гейт (например, icq.jabber.ru) и открыть его двойным кликом; 
   открыть его двойным кликом;
1. Сделать двойной клик на элементе "Register";
1. В появившемся окошке ввести информацию о вашем аккаунте в сети, к которой вы
1.  Сделать двойной клик на элементе "Register"; 
1.  В появившемся окошке ввести информацию о вашем аккаунте в сети, к которой вы коннектитесь: 
   коннектитесь:
   * Для ICQ это будет UIN и пароль,
   * для AIM — его логин и пароль или UIN вашей "аськи" и её пароль,
 *  Для ICQ это будет UIN и пароль, 
 *  для AIM — его логин и пароль или UIN вашей "аськи" и её пароль, 
   * Для MSN — ваш Windows Live ID (в девичестве Microsoft Passport, он же .NET
     Passport, в общем, ваше мыло, на которое вы зарегистрированы в любых
 *  Для MSN — ваш Windows Live ID (в девичестве Microsoft Passport, он же .NET Passport, в общем, ваше мыло, на которое вы зарегистрированы в любых службах микрософта), ник, под которым вас будут видеть собеседники, и, само собой, пароль, 
     службах микрософта), ник, под которым вас будут видеть собеседники, и,
     само собой, пароль,
   * Для Yahoo — ваш ID (то, что расположено до "собачки") и пароль,
   * Для IRC — читайте [**ниже**](#IRC) (регистрация там
 *  Для Yahoo — ваш ID (то, что расположено до "собачки") и пароль, 
 *  Для IRC — читайте [ниже](Гейты_во_вражеские_сети.md#IRC) (регистрация там опциональна). 
     опциональна).
1. Если всё введено правильно, и не возникло никаких ошибок, появляется окошко,
   извещающее нас об успешной регистрации. Жмём Ok.
1. Появится запрос подписки от имени выбранного Вами гейта, соответственно даем
   ему подписку и он повляется в ростере. Делаем правый клик на нём и выбираем
   в меню "Log in".
1. В этот момент гейт подключается от Вашего имени к "вражеской сети" и
   получает список ваших контактов, после чего отправляет их список вам.
   * Классический вариант(старые гейты): в ростере появляется куча ваших
     контактов из этой сети в виде 1234567@icq.jabber.ru, которую надо теперь
     как-то упорядочить и вообще выяснить, "ху из ху". Вытягивание ников
 
     асикушников — больное место Ткаббера, но некоторую помощь может оказать
     такой трюк: делаем правый клик на контакте и выбираем "Показать инфо".
     Появляется окошко vcard пользователя, и если подождать немного, то в
     подавляющем большинстве случаев "вытянется" как минимум ник. Закрываем
1.  Если всё введено правильно, и не возникло никаких ошибок, появляется окошко, извещающее нас об успешной регистрации. Жмём Ok. 
1.  Появится запрос подписки от имени выбранного Вами гейта, соответственно даем ему подписку и он повляется в ростере. Делаем правый клик на нём и выбираем в меню "Log in". 
1.  В этот момент гейт подключается от Вашего имени к "вражеской сети" и получает список ваших контактов, после чего отправляет их список вам. 
 *  Классический вариант(старые гейты): в ростере появляется куча ваших контактов из этой сети в виде 1234567@icq.jabber.ru, которую надо теперь как-то упорядочить и вообще выяснить, "ху из ху". Вытягивание ников асикушников — больное место Ткаббера, но некоторую помощь может оказать такой трюк: делаем правый клик на контакте и выбираем "Показать инфо". Появляется окошко vcard пользователя, и если подождать немного, то в подавляющем большинстве случаев "вытянется" как минимум ник. Закрываем инфо, и теперь можно редактировать контакт: правый клик → **Редактировать элемент**. Ник юзверя автоматически появится в соответствующем поле. Назначаем нужную группу (для разделения вложенных групп пользуйтесь двумя двоеточиями: "Друзья::Институт") и жмём Ок. 
     инфо, и теперь можно редактировать контакт: правый клик → **Редактировать
     элемент**. Ник юзверя автоматически появится в соответствующем поле.
     Назначаем нужную группу (для разделения вложенных групп пользуйтесь двумя
     двоеточиями: "Друзья::Институт") и жмём Ок.
   * Современный вариант(Spectrum Transport): для того, чтобы практически
     прозрачно получить свои контакты и не терять время на выяснение их ников и
 *  Современный вариант(Spectrum Transport): для того, чтобы практически прозрачно получить свои контакты и не терять время на выяснение их ников и групп, необходимы следующие условия: 
     групп, необходимы следующие условия:
      * Tkabber из [SVN](SVN_disclaimer.md) ревизии 1975 и выше.
  *  Tkabber из [SVN](SVN_disclaimer.md) ревизии 1975 и выше. 
      * Плагин autosubscribe из
        [репозитория 3rd-party](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/autosubscribe/)
1. При использовании современного варианта - сразу после регистрации гейт
   вышлет список контактов и их групп посредством специального
  *  Плагин autosubscribe из [репозитория 3rd-party](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/autosubscribe/) 

1.  При использовании современного варианта - сразу после регистрации гейт вышлет список контактов и их групп посредством специального [расширения](http://xmpp.org/extensions/xep-0144.html|) XMPP-протокола, а Ткаббер отобразит форму со списком их(контактов) имен и галочек, которые необходимо соответственно выставить и подтвердить добавление контактов. Если включен плагин autosubscribe, то в этот же момент все эти контакты окажутся в нашем ростере, строго под теми никами и в тех же группах, по которым они были отсортированы Вами при использовании "официальных" клиентов "вражеских сетей". ![(!)](../images/Hammer.png) **Сделать:**  Исправить недочеты плагина autosubscribe В случае если плагин не установлен, как и в "классическом" варианте посыпятся запросы подписки, но после подтверждения их ники и группы все равно будут правильными сразу. 
   [расширения](http://xmpp.org/extensions/xep-0144.html) XMPP-протокола, а
   Ткаббер отобразит форму со списком их(контактов) имен и галочек, которые
   необходимо соответственно выставить и подтвердить добавление контактов. Если
   включен плагин autosubscribe, то в этот же момент все эти контакты окажутся
   в нашем ростере, строго под теми никами и в тех же группах, по которым они
   были отсортированы Вами при использовании "официальных" клиентов "вражеских
   сетей". ![(!)](../images/Hammer.png) **Сделать:**  Исправить недочеты
   плагина autosubscribe В случае если плагин не установлен, как и в
   "классическом" варианте посыпятся запросы подписки, но после подтверждения
   их ники и группы все равно будут правильными сразу.
1. Помимо "Register" в дереве транспорта есть и такие полезные опции как Uptime
1.  Помимо "Register" в дереве транспорта есть и такие полезные опции как Uptime (время работы) и Version (выдаёт версию программы-гейта; при проблемах с транспортами может помочь вам разобраться в их причинах: например, устаревшая версия гейта). 
   (время работы) и Version (выдаёт версию программы-гейта; при проблемах с
   транспортами может помочь вам разобраться в их причинах: например,
   устаревшая версия гейта).

Диско позволяет лазить и регистрироваться на любом общедоступном сервере. Вам
Диско позволяет лазить и регистрироваться на любом общедоступном сервере. Вам нужно только ввести в адресную строку имя сервера или сервиса, например: `jabber.anywise.com`, `icq.jabbe.net.ru`. Дальнейшие телодвижения ничем не отличаются от описанных выше. 
нужно только ввести в адресную строку имя сервера или сервиса, например:
`jabber.anywise.com`, `icq.jabbe.net.ru`. Дальнейшие телодвижения ничем не
отличаются от описанных выше.

# <a id="Некоторые_гейты_в_другие_сети"></a>Некоторые гейты в другие сети
## <a id="ICQ"></a>ICQ

На данный момент (зима 2010) известно несколько разных icq-транспортов. Каждый
На данный момент (зима 2010) известно несколько разных icq-транспортов. Каждый обладает своими достоинствами и недостатками, например, в плане поддерживаемых возможностей icq-протокола. Соответственно, и "глюками" они обладают своими уникальными, и желательно разбираться, что icq-транспорт - это такая же программа, как и Tkabber, только запущена у кого-то на сервере, и так же как и Tkabber, в ней могут быть ошибки, а разработчики, если им грамотно сообщать об ошибках - могут их устранить. 
обладает своими достоинствами и недостатками, например, в плане поддерживаемых
возможностей icq-протокола. Соответственно, и "глюками" они обладают своими
уникальными, и желательно разбираться, что icq-транспорт - это такая же
программа, как и Tkabber, только запущена у кого-то на сервере, и так же как и
Tkabber, в ней могут быть ошибки, а разработчики, если им грамотно сообщать об
ошибках - могут их устранить.

* [JIT](http://sourceforge.net/projects/jit/) - самый старый из "живых"
  icq-транспорт. Если на запрос версии ваш транспорт отвечает нечто типа
*  [JIT](http://sourceforge.net/projects/jit/) - самый старый из "живых" icq-транспорт. Если на запрос версии ваш транспорт отвечает нечто типа `Jabber ICQ Transport by Lukas Jabber: Jabberd 1.1.1 stable / with real threads / by Lukas Karwacki ICQ: 1.1.6 (Linux 2.6.16.13-4-smp)` - значит у вас именно он. Имел массу модификаций от разных авторов, наиболее годная к употреблению была версия 1.2 от администраторов mytlt.ru. В настоящее время известных "живых" модификаций нету, пользоваться этим транспортом крайне не рекомендуется. 
  `Jabber ICQ Transport by Lukas Jabber: Jabberd 1.1.1 stable / with real
  threads / by Lukas Karwacki ICQ: 1.1.6 (Linux 2.6.16.13-4-smp)` - значит у
  вас именно он. Имел массу модификаций от разных авторов, наиболее годная к
  употреблению была версия 1.2 от администраторов mytlt.ru. В настоящее время
  известных "живых" модификаций нету, пользоваться этим транспортом крайне не
  рекомендуется.

    Ключевая возможность - поиск ICQ-пользователей. В версии от mytlt - частично
Ключевая возможность - поиск ICQ-пользователей. В версии от mytlt - частично поддерживаются ICQ X-Statuses(прием); не поддерживаются message typing notifications, аватары, передача файлов. 
    поддерживаются ICQ X-Statuses(прием); не поддерживаются message typing
    notifications, аватары, передача файлов.

* [PyICQ-t](http://groups.google.com/group/py-transports) - более молодой,
  более требовательный к ресурсам сервера транспорт, однако и обладающий
*  [PyICQ-t](http://groups.google.com/group/py-transports) - более молодой, более требовательный к ресурсам сервера транспорт, однако и обладающий бОльшими возможностями - в последнем релизе 0.8.1.5 имеется полная поддержка ICQ X-Statuses(и прием и передача, гибкая настройка), typing notifications, delivery confirmations, аватары, синхронизация vcard и много чего еще. Последний релиз значительно повысил стабильность транспорта - патчи от коммерческой конторы сделали его очень стабильным - поэтому даже если у вас 0.8.1.4, то желательно обновиться на 0.8.1.5. В настоящее время не развивается, но собственно серьезных багов за последней версией не замечено и это наиболее рекомендуемый транспорт, если надо чтоб "поставил и забыл". 
  бОльшими возможностями - в последнем релизе 0.8.1.5 имеется полная поддержка
  ICQ X-Statuses(и прием и передача, гибкая настройка), typing notifications,
  delivery confirmations, аватары, синхронизация vcard и много чего еще.
  Последний релиз значительно повысил стабильность транспорта - патчи от
  коммерческой конторы сделали его очень стабильным - поэтому даже если у вас
  0.8.1.4, то желательно обновиться на 0.8.1.5. В настоящее время не
  развивается, но собственно серьезных багов за последней версией не замечено и
  это наиболее рекомендуемый транспорт, если надо чтоб "поставил и забыл".

* [Spectrum](http://spectrum.im) - новейший транспорт на базе libpurple,
  библиотеки, являющейся основой Pidgin - мультипротокольного клиента.
*  [Spectrum](http://spectrum.im) - новейший транспорт на базе libpurple, библиотеки, являющейся основой Pidgin - мультипротокольного клиента. Разрабатывается в настоящий момент, в том числе авторами PyICQ-t и pidgin. Основное преимущество - умеет транспорты во многие сети "в одном флаконе" - aim, facebook, gg, icq, irc, msn, myspace, qq, simple, xmpp, yahoo, twitter, и еще куда-то. Умеет импортировать контакты с никами и даже группами одним нажатием. Пока нет <s>поддержки x-статусов и</s> подтверждения доставки, но вполне возможно в ближайшее время будет. Рекомендуется использовать всем, кто хочет помогать развивать транспорты, так как этот транспорт разрабатывается в данный момент, автор охотно отвечает на вопросы, исправляет ошибки. 
  Разрабатывается в настоящий момент, в том числе авторами PyICQ-t и pidgin.
  Основное преимущество - умеет транспорты во многие сети "в одном флаконе" -
  aim, facebook, gg, icq, irc, msn, myspace, qq, simple, xmpp, yahoo, twitter,
  и еще куда-то. Умеет импортировать контакты с никами и даже группами одним
  нажатием. Пока нет <s>поддержки x-статусов и</s> подтверждения доставки, но
  вполне возможно в ближайшее время будет. Рекомендуется использовать всем, кто
  хочет помогать развивать транспорты, так как этот транспорт разрабатывается в
  данный момент, автор охотно отвечает на вопросы, исправляет ошибки.

* менее популярные виды - встроенный в
  [Openfire](http://www.igniterealtime.org/projects/openfire/) транспорт и
*  менее популярные виды - встроенный в [Openfire](http://www.igniterealtime.org/projects/openfire/) транспорт и встроенный в коммерческую версию [ejabberd](http://www.process-one.net/en/solutions/imgateways/). Имеют не так много пользователей и отзывов, потому ни плохого, ни хорошего о них писать здесь не будем. 
  встроенный в коммерческую версию
  [ejabberd](http://www.process-one.net/en/solutions/imgateways/). Имеют не так
  много пользователей и отзывов, потому ни плохого, ни хорошего о них писать
  здесь не будем.

Соответственно, найдя публичный icq-транспорт свежей версии (а еще более
Соответственно, найдя публичный icq-транспорт свежей версии (а еще более надежнее - настроив свой), можно добиться достаточно удобного общения с icq-пользователями. 
надежнее - настроив свой), можно добиться достаточно удобного общения с
icq-пользователями.

### <a id="icq.jabber.ru"></a>icq.jabber.ru

"Впереди планеты всей" раньше шёл гейт `icq.jabber.ru`, однако,
"Впереди планеты всей" раньше шёл гейт `icq.jabber.ru`, однако, 

> *этот гейт прекратил работу с 1 июля 2007 года.* Подробности — [здесь](http://www.jabber.ru/node/379).
_этот гейт прекратил работу с 1 июля 2007 года. _ Подробности — [здесь](http://www.jabber.ru/node/379). 

### <a id="Переезд_на_другой_транспорт_с_минимумом_головной_боли"></a>Переезд на другой транспорт с минимумом головной боли

Компания AOL здорово позаботилась о пользователях, запретив хранить список
Компания AOL здорово позаботилась о пользователях, запретив хранить список контактов самостоятельно, потому требовавшиеся на старых версиях JIT танцы с бубном по сохранению и переименованию контактов более не нужны. Достаточно: 
контактов самостоятельно, потому требовавшиеся на старых версиях JIT танцы с
бубном по сохранению и переименованию контактов более не нужны. Достаточно:

* отрегистрироваться на старом транспорте и удалить его из контактов.
* убедившись, что транспорт неактивен, можно выделить всех icq-контактов в
*  отрегистрироваться на старом транспорте и удалить его из контактов. 
*  убедившись, что транспорт неактивен, можно выделить всех icq-контактов в группу по маске \*@icq.bla-bla.ru (Tkabber → Контакты → Добавить группу по регулярному выражению JID... → ".\*@icq\\.bla-bla\\.ru") и удалить их все разом ("Удалить все контакты в группе..." на заголовке группы) 
  группу по маске \*@icq.bla-bla.ru (Tkabber → Контакты → Добавить группу по
  регулярному выражению JID... → ".\*@icq\\.bla-bla\\.ru") и удалить их все
  разом ("Удалить все контакты в группе..." на заголовке группы)
* зарегистрироваться на новом транспорте, и повторить процедуры, описанные
*  зарегистрироваться на новом транспорте, и повторить процедуры, описанные выше, необходимые для регистрации. 
  выше, необходимые для регистрации.

### <a id="Общедоступные_транспорты_в_ICQ"></a>Общедоступные транспорты в ICQ

(частично взято [отсюда](http://lists.jabber.ru/pipermail/jabber-users/2007-February/003062.html)):
(частично взято [отсюда](http://lists.jabber.ru/pipermail/jabber-users/2007-February/003062.html)): 

* 
*  `jit.mytlt.ru` (JIT 1.2 - теоретически, наиболее надежный)
*  `icq.jabber.sib.ru` (JIT)
*  `icq.jabber.org.ru` (PyICQt)
*  `icq.jabbe.net.ru` (PyICQt)
*  `icq.udaff.com` (JIT)
*  `picq.udaff.com` (PyICQt)
*  `pyicq.jabber.te.ua` (PyICQt)
*  `icq.sudouser.ru` (PyICQt)
 *  `jit.mytlt.ru` (JIT 1.2 - теоретически, наиболее надежный) 
 
*  `icq.jabber.sib.ru` (JIT) 
*  `icq.jabber.org.ru` (PyICQt) 
*  `icq.jabbe.net.ru` (PyICQt) 
*  `icq.udaff.com` (JIT) 
*  `picq.udaff.com` (PyICQt) 
*  `pyicq.jabber.te.ua` (PyICQt) 
*  `icq.sudouser.ru` (PyICQt) 

Большой список ICQ-гейтов поддерживается [на wiki Bombus'а](http://bombus-im.org/wiki/howto/howto_icq).
Большой список ICQ-гейтов поддерживается [на wiki Bombus'а](http://bombus-im.org/wiki/howto/howto_icq). 

Существуют гейты в ICQ и на "буржуйских" серверах. Для российских пользователей
Существуют гейты в ICQ и на "буржуйских" серверах. Для российских пользователей они, как водится, не подходят по той простой причине, что не поддерживают наших кодировок. 
они, как водится, не подходят по той простой причине, что не поддерживают наших
кодировок.

## <a id="MRIM"></a>MRIM

На данный момент (апрель 2007 года) в мире насчитывается по крайней мере два
На данный момент (апрель 2007 года) в мире насчитывается по крайней мере два гейта, позволяющих получать спам от пользователей Mail.Ru Instant Messenger, кратко — MRIM. Зарегистрироваться на них можно по следующим адресам: 
гейта, позволяющих получать спам от пользователей Mail.Ru Instant Messenger,
кратко — MRIM. Зарегистрироваться на них можно по следующим адресам:

* `mrim.jabber.ru`
* `mrim.udaff.com`
*  `mrim.jabber.ru` 
*  `mrim.udaff.com` 

Нелишним будет сразу же порекомендовать
Нелишним будет сразу же порекомендовать [дополнительную литературу](Блокировка_MRIM-спама.md) по теме. 
[**дополнительную литературу**](Блокировка_MRIM-спама.md) по теме.

## <a id="MSN"></a>MSN

Можем предложить
Можем предложить 

* `msn.jabber.anywise.com` (тоже иногда глючит, но не так откровенно).
* `msn.jabber.kiev.ua`
* `msn.jaim.at`
*  `msn.jabber.anywise.com` (тоже иногда глючит, но не так откровенно). 
*  `msn.jabber.kiev.ua` 
*  `msn.jaim.at` 

## <a id="Yahoo"></a>Yahoo

* `yahoo.draugr.de` отлично работает, хотя и забугорный. Гейт логинится в сеть
*  `yahoo.draugr.de` отлично работает, хотя и забугорный. Гейт логинится в сеть яху сам, с кодировками проблем нет, кроме того, что в пользователи в родном Yahoo! Messenger видят статусное сообщение кракозяблами. 
  яху сам, с кодировками проблем нет, кроме того, что в пользователи в родном
  Yahoo! Messenger видят статусное сообщение кракозяблами.

Приветствуются адреса работающих транспортов.
Приветствуются адреса работающих транспортов. 

## <a id="AIM"></a>AIM

## <a id="IRC"></a>IRC

При регистрации на IRC-транспорте у вас есть возможность задать кодировки для
При регистрации на IRC-транспорте у вас есть возможность задать кодировки для разных IRC-серверов, к которым вы обычно коннектитесь. Читайте помощь, выводящуюся при двойном клике на "Register". Однако заходить на конференции вы можете и без регистрации. Для этого щёлкните на "Join conference" и в поле "Группа" введите имя комнаты и имя IRC-сервера в таком формате: **mycoolroom%irc.server.org**, а в поле "Сервер" — имя гейта, через который вы собираетесь общаться в "ирке". ![(!)](../images/Hammer.png) **Сделать:** Выяснить, работает ли тут поле "Пароль", и если да, то для чего служит. По идее, для комнаты, потому что для ника пароль отдаётся Никсерву, см. ниже. 
разных IRC-серверов, к которым вы обычно коннектитесь. Читайте помощь,
выводящуюся при двойном клике на "Register". Однако заходить на конференции вы
можете и без регистрации. Для этого щёлкните на "Join conference" и в поле
"Группа" введите имя комнаты и имя IRC-сервера в таком формате:
**mycoolroom%irc.server.org**, а в поле "Сервер" — имя гейта, через который вы
собираетесь общаться в "ирке". ![(!)](../images/Hammer.png) **Сделать:**
Выяснить, работает ли тут поле "Пароль", и если да, то для чего служит. По
идее, для комнаты, потому что для ника пароль отдаётся Никсерву, см. ниже.

Некоторые гейти в IRC:
Некоторые гейти в IRC: 

* <s>`irc.e.jabber.ru` — хитро спрятанный IRC-гейт сервера jabber.ru. Его не
  видно в Диско, но он существует и очень даже работает.</s> Мир его праху. В
*  <s>`irc.e.jabber.ru` — хитро спрятанный IRC-гейт сервера jabber.ru. Его не видно в Диско, но он существует и очень даже работает.</s> Мир его праху. В эпоху массового отстрела транспортов на jabber.ru ему не помогла даже хитрая спрятанность (уж админы-то не могли про него не знать :)). 
  эпоху массового отстрела транспортов на jabber.ru ему не помогла даже хитрая
  спрятанность (уж админы-то не могли про него не знать :)).
* `irc.jabber.kiev.ua` — гейт на украинском джаббер-сервере.
* `irc.jabe.ru` — гейт компании, которая хостит нашу вики.
*  `irc.jabber.kiev.ua` — гейт на украинском джаббер-сервере. 
*  `irc.jabe.ru` — гейт компании, которая хостит нашу вики. 

В силу разных обстоятельств случается, что тот или иной гейт не работает. Это
В силу разных обстоятельств случается, что тот или иной гейт не работает. Это сразу видно по абсолютно пустому окну канала, на который вы якобы вошли. В этом случае просто попробуйте другой гейт. Учитывайте также нетсплиты — временные разъединения серверов, формирующих IRC-сеть. Если вы и собеседник, нужный вам, подключены к разным серверам, то при нетсплите вы не сможете общаться. Чтобы избежать этого, укажите нужный IRC-сервер при заполнении поля "Группа". 
сразу видно по абсолютно пустому окну канала, на который вы якобы вошли. В этом
случае просто попробуйте другой гейт. Учитывайте также нетсплиты — временные
разъединения серверов, формирующих IRC-сеть. Если вы и собеседник, нужный вам,
подключены к разным серверам, то при нетсплите вы не сможете общаться. Чтобы
избежать этого, укажите нужный IRC-сервер при заполнении поля "Группа".

Бывает, что NickServ спрашивает ваш пароль (если, конечно, ваш ник
Бывает, что NickServ спрашивает ваш пароль (если, конечно, ваш ник зарегистрирован). Его запрос появляется в отдельном окне или табе. Попытка отослать ему стандартную команду **/identify password** ни к чему не приводит. Однако всё получается, если просто убрать слэш и оправить Никсерву только **identify password**. Это происходит, например, в сети [WeNet](http://www.wenet.ru) (irc.wenet.ru). Но как показывает практика, не везде такой подход срабатывает. Например, если проделать то же самое при идентификации в сети [RusNet](http://www.rus-net.org/) (irc.rusnet.ru), Никсерв изругается и скажет в ответ на команду что-то вроде следующего: 
зарегистрирован). Его запрос появляется в отдельном окне или табе. Попытка
отослать ему стандартную команду **/identify password** ни к чему не приводит.
Однако всё получается, если просто убрать слэш и оправить Никсерву только
**identify password**. Это происходит, например, в сети
[WeNet](http://www.wenet.ru) (irc.wenet.ru). Но как показывает практика, не
везде такой подход срабатывает. Например, если проделать то же самое при
идентификации в сети [RusNet](http://www.rus-net.org/) (irc.rusnet.ru), Никсерв
изругается и скажет в ответ на команду что-то вроде следующего:

> [Вск Ноя 11 19:50]\<nickserv!irc.rusnet.ru> NOTICE: Use /chanserv, not /MSG chanserv
 [Вск Ноя 11 19:50]\<nickserv!irc.rusnet.ru> NOTICE: Use /chanserv, not /MSG chanserv 

Оно и верно: написав в приват Никсерву запрос об аутентификации, мы просто
Оно и верно: написав в приват Никсерву запрос об аутентификации, мы просто послали ему сообщение (как бы командой **/msg identify password**). Как видно, некоторые сервера требуют прямой команды. В этом случае следует "завернуть" её в "бумажку" quote, которая поможет команде дойти до сервера в неизменном виде: **/quote nickserv identify your\_password**. 
послали ему сообщение (как бы командой **/msg identify password**). Как видно,
некоторые сервера требуют прямой команды. В этом случае следует "завернуть" её
в "бумажку" quote, которая поможет команде дойти до сервера в неизменном виде:
**/quote nickserv identify your\_password**.

Вот ещё пара полезных команд:
Вот ещё пара полезных команд: 

* **/quote mode \#channel +o nick** — дать "опа" участнику nick. Ровно таким же
  образом должны работать и остальные аналогичные команды: -o, +v, -v, +h, -h,
*  **/quote mode \#channel +o nick** — дать "опа" участнику nick. Ровно таким же образом должны работать и остальные аналогичные команды: -o, +v, -v, +h, -h, +b, -b. Обратите внимание, что раздача привилегий посредством меню MUC, вызываемого правым кликом на нике участника, ничего не даст, потому что IRC просто не поймёт, что вы ему толкуете. 
  +b, -b. Обратите внимание, что раздача привилегий посредством меню MUC,
  вызываемого правым кликом на нике участника, ничего не даст, потому что IRC
  просто не поймёт, что вы ему толкуете.
* **/quote chanserv help**, **/quote nickserv help** и **/quote memoserv help**
  выведут в привате список команд, которые можно данному серву отсылать.
*  **/quote chanserv help**, **/quote nickserv help** и **/quote memoserv help** выведут в привате список команд, которые можно данному серву отсылать. Собственно, объединив ваши собственные знания об IRC и только что описанный трюк с quote, вы могли бы и сами об этом догадаться, но уж пусть эта подсказка будет. 
  Собственно, объединив ваши собственные знания об IRC и только что описанный
  трюк с quote, вы могли бы и сами об этом догадаться, но уж пусть эта
  подсказка будет.
* Если набрать просто **/quote help**, то irc-сервер, к которому вы
*  Если набрать просто **/quote help**, то irc-сервер, к которому вы присоединены, выдаст список команд для этого сервера. 
  присоединены, выдаст список команд для этого сервера.

Дадим ещё один совет на тему общения с сервами. Обычно их имя в интерпретации
Дадим ещё один совет на тему общения с сервами. Обычно их имя в интерпретации джаббер-протокола выглядит примерно таким образом: **chanserv!irc.rusnet.ru@irc.jabberserver.ru**. Изменяя необходимые параметры при открытии чата с интересующим сервом, можно общаться с любым из них, даже не коннектясь к irc-серверу — гейт сам всё отошлёт куда надо и доставит вам ответ. Это полезно, если вы хотите узнать, какие команды поддерживает интересующий вас Ник- или Чансерв. Все эти сервы довольно полезны, однако не все из них скромны. Например, wenet!irc.wenet.ru довёл вашего покорного слугу своими постоянными сообщениями до того, что тот занёс его JID в виде wenet!irc.wenet.ru@irc.e.jabber.ru в игнор (это типа намёк, что нужно делать в подобных ситуациях ;)). 
джаббер-протокола выглядит примерно таким образом:
**chanserv!irc.rusnet.ru@irc.jabberserver.ru**. Изменяя необходимые параметры
при открытии чата с интересующим сервом, можно общаться с любым из них, даже не
коннектясь к irc-серверу — гейт сам всё отошлёт куда надо и доставит вам ответ.
Это полезно, если вы хотите узнать, какие команды поддерживает интересующий вас
Ник- или Чансерв. Все эти сервы довольно полезны, однако не все из них скромны.
Например, wenet!irc.wenet.ru довёл вашего покорного слугу своими постоянными
сообщениями до того, что тот занёс его JID в виде
wenet!irc.wenet.ru@irc.e.jabber.ru в игнор (это типа намёк, что нужно делать в
подобных ситуациях ;)).

Работы по исследованию irc-гейтов будут продолжаться; тем не менее, если у вас
Работы по исследованию irc-гейтов будут продолжаться; тем не менее, если у вас есть что добавить в эту статью, никто этого не запрещает. 
есть что добавить в эту статью, никто этого не запрещает.

## <a id="XMPP_свой_среди_чужих_"></a>XMPP (свой среди чужих ;))

Позволяет подключить XMPP учётную запись на другом сервере. Можно использовать
Позволяет подключить XMPP учётную запись на другом сервере. Можно использовать как альтернативу мультилогина. Общедоступные транспорты замечены на: 
как альтернативу мультилогина. Общедоступные транспорты замечены на:

* `xmpp.jrudevels.org`
* `gtalk.jrudevels.org` — для подключения учётной записи GTalk
* `j2j.udaff.com`
*  `xmpp.jrudevels.org` 
*  `gtalk.jrudevels.org` — для подключения учётной записи GTalk 
*  `j2j.udaff.com` 

**Будьте осторожны!** Не регистрируйте активную учётную запись гостевой в самой
**Будьте осторожны!** Не регистрируйте активную учётную запись гостевой в самой себе. После этого не сможете зайти в неё. Не создавайте циклов из учётных записей, например, user1@server1.org является гостевым для user2@server2.org, и одновременно user2@server2.org является гостевым для user1@server1.org. Вы можете придумать более сложные циклические схемы, воздержитесь и от них. 
себе. После этого не сможете зайти в неё. Не создавайте циклов из учётных
записей, например, user1@server1.org является гостевым для user2@server2.org, и
одновременно user2@server2.org является гостевым для user1@server1.org. Вы
можете придумать более сложные циклические схемы, воздержитесь и от них.

# <a id="Проблемы_при_работе_с_гейтами"></a>Проблемы при работе с гейтами
Поскольку работа других сетей чаще всего основана на закрытых протоколах, не
Поскольку работа других сетей чаще всего основана на закрытых протоколах, не следует удивляться и огорчаться, если транспорты подглючивают, падают и просто не работают. Отнюдь не помогает их работе и отношение админов Jabber-серверов к "иноземцам" именно как к иноземцам: даже в самых доброжелательных ответах админов (если их удаётся получить) сквозит презрение к "асикушникам" и прочему плебсу. Чаще всего разруливать ситуацию приходится самостоятельно, причём радикальным способом — сменой гейта. Как и на что их менять, рассказано выше, а здесь мы попробуем дать список ошибок, которые могут возникнуть, и их расшифровку. Ошибку можно прочитать в тултипе, появляющемся, если навести мышь на транспорт, находящийся у вас в ростере. 
следует удивляться и огорчаться, если транспорты подглючивают, падают и просто
не работают. Отнюдь не помогает их работе и отношение админов Jabber-серверов к
"иноземцам" именно как к иноземцам: даже в самых доброжелательных ответах
админов (если их удаётся получить) сквозит презрение к "асикушникам" и прочему
плебсу. Чаще всего разруливать ситуацию приходится самостоятельно, причём
радикальным способом — сменой гейта. Как и на что их менять, рассказано выше, а
здесь мы попробуем дать список ошибок, которые могут возникнуть, и их
расшифровку. Ошибку можно прочитать в тултипе, появляющемся, если навести мышь
на транспорт, находящийся у вас в ростере.

## <a id="Unavailable"></a>Unavailable

Строго говоря, это не ошибка, а состояние сервиса: "Недоступен". Однако если вы
Строго говоря, это не ошибка, а состояние сервиса: "Недоступен". Однако если вы видите, что кроме этого ничего больше в той же строке не написано, скорее всего, вы либо забыли залогиниться на гейт, либо он сам как-то отвалился. Решение проблемы простое: правый клик, и выбрать Log in. 
видите, что кроме этого ничего больше в той же строке не написано, скорее
всего, вы либо забыли залогиниться на гейт, либо он сам как-то отвалился.
Решение проблемы простое: правый клик, и выбрать Log in.

## <a id="Low_Level_Network_Error"></a>Low Level Network Error

Эта надпись иногда появляется в качестве комментария к вышеупомянутому
Эта надпись иногда появляется в качестве комментария к вышеупомянутому состоянию Unavailable. Перевод: "низкоуровневая ошибка сети". Замечена при работе со старыми версиями JIT, имевшими ограничение в 1024 одновременных соединения. В настоящее время наверняка является сигналом к тому, что вам пора сменить свой ICQ-транспорт на что-то более свежее и стабильное. 
состоянию Unavailable. Перевод: "низкоуровневая ошибка сети". Замечена при
работе со старыми версиями JIT, имевшими ограничение в 1024 одновременных
соединения. В настоящее время наверняка является сигналом к тому, что вам пора
сменить свой ICQ-транспорт на что-то более свежее и стабильное.

## <a id="Unrecoverable_Error_Remote_Server_Not_Found"></a>Unrecoverable Error (Remote Server Not Found)

Как видно из названия, эта ошибка сообщает нам о том, что удалённый сервер не
Как видно из названия, эта ошибка сообщает нам о том, что удалённый сервер не найден. Причины могут быть разными: начиная с очень паршивой связи гейта с сервером вражеской сети и заканчивая обычным падением этого самого сервера. Если вы обнаружили эту ошибку, вернувшись к компьютеру после долгого отсутствия, попробуйте перелогиниться на транспорте — вдруг связь уже наладилась. Если ничего не получается, ждите — <s>за вами придут</s> когда-нибудь она наладится. Попингуйте сервер: станет ясно, жив он или нет. 
найден. Причины могут быть разными: начиная с очень паршивой связи гейта с
сервером вражеской сети и заканчивая обычным падением этого самого сервера.
Если вы обнаружили эту ошибку, вернувшись к компьютеру после долгого
отсутствия, попробуйте перелогиниться на транспорте — вдруг связь уже
наладилась. Если ничего не получается, ждите — <s>за вами придут</s>
когда-нибудь она наладится. Попингуйте сервер: станет ясно, жив он или нет.

## <a id="Disconnected_by_unknown_reason"></a>Disconnected by unknown reason

Серия ошибок py-transports (pyicq-t, pymsn-t, и т.д.) - большинство их глюков
Серия ошибок py-transports (pyicq-t, pymsn-t, и т.д.) - большинство их глюков содержит эти слова ![(!)](../images/Hammer.png) **Сделать:**  дописать подробные примеры. Обычно достаточно перелогиниться на транспорте. 
содержит эти слова ![(!)](../images/Hammer.png) **Сделать:**  дописать
подробные примеры. Обычно достаточно перелогиниться на транспорте.

## <a id="Temporary_Error_Component_msnlinker_is_not_connected_to_server"></a>Temporary Error (Component 'msnlinker' is not connected to server)

Судя по всему, некий компонент транспорта MSN, необходимый для полноценной
Судя по всему, некий компонент транспорта MSN, необходимый для полноценной работы, не подключён к серверу. Результат плачевен: при попытке коннекта к серверу от транспорта приходит ответ такого типа: "Sorry. You do not appear to be registered with this transport. Please register and try again. If you are having trouble registering please contact your Jabber administrator". Иными словами, транспорт в упор вас не знает. Прежде чем внять этой просьбе зарегистрироваться, имеет смысл подождать, ведь мы знаем, что это глюк сервера, а не отсутствие регистрации. Обычно через некоторое время всё само собой налаживается. Если ничего не налаживается, просьба жаловаться не нам, а хозяевам транспорта. 
работы, не подключён к серверу. Результат плачевен: при попытке коннекта к
серверу от транспорта приходит ответ такого типа: "Sorry. You do not appear to
be registered with this transport. Please register and try again. If you are
having trouble registering please contact your Jabber administrator". Иными
словами, транспорт в упор вас не знает. Прежде чем внять этой просьбе
зарегистрироваться, имеет смысл подождать, ведь мы знаем, что это глюк сервера,
а не отсутствие регистрации. Обычно через некоторое время всё само собой
налаживается. Если ничего не налаживается, просьба жаловаться не нам, а
хозяевам транспорта.

## <a id="Намерзание_участников_в_ростере"></a>"Намерзание" участников в ростере

Такая проблема часто возникает при работе с гейтами ICQ, когда Ткаббер не
выключается долгое время, и за это время происходили дисконнекты. Вы общаетесь
себе, общаетесь; мама зовёт вас обедать, вы отходите от компа, потом снова
Такая проблема часто возникает при работе с гейтами ICQ, когда Ткаббер не выключается долгое время, и за это время происходили дисконнекты. Вы общаетесь себе, общаетесь; мама зовёт вас обедать, вы отходите от компа, потом снова садитесь за него; вечером вы идёте в гости, по возвращении снова лезете в Ткаббер; часв в четыре утра ложитесь спать, на следующий день общаетесь снова, и всё это время он вроде бы нормально работает. Но где-нибудь на третий день вы вдруг обращаете внимание на то, что некоторые ваши друзья из аськи против обыкновения тоже сидят в интернете круглосуточно, причём не наблюдается никаких автоэвеев. Может случиться и так, что вы обнаруживаете транспорт упавшим, однако эти товарищи несмотря ни на что упорно не желают исчезать из ростера. Разлогинивание от гейта не помогает, а ситуацию разруливает лишь полный перелогин Ткаббера. Что же при этом происходит? ![(!)](../images/Hammer.png) **Сделать:** Расспросить авторов гейта либо авторов Ткаббера либо просто очень умных людей либо волшебников и написать тут. 


садитесь за него; вечером вы идёте в гости, по возвращении снова лезете в
Ткаббер; часв в четыре утра ложитесь спать, на следующий день общаетесь снова,
и всё это время он вроде бы нормально работает. Но где-нибудь на третий день вы
вдруг обращаете внимание на то, что некоторые ваши друзья из аськи против
обыкновения тоже сидят в интернете круглосуточно, причём не наблюдается никаких
автоэвеев. Может случиться и так, что вы обнаруживаете транспорт упавшим,
однако эти товарищи несмотря ни на что упорно не желают исчезать из ростера.
Разлогинивание от гейта не помогает, а ситуацию разруливает лишь полный
перелогин Ткаббера. Что же при этом происходит?
![(!)](../images/Hammer.png) **Сделать:** Расспросить авторов гейта либо
авторов Ткаббера либо просто очень умных людей либо волшебников и написать тут.

Changes to wiki/ru/Дистрибутивы__которые_мы_выбираем.md.

1

2
3
4
5
6
7
8
9
10
11
12
13







14
15

16
17
18
19
20
21
22
23
24
25
26






27
28
29

30
31
32
33
34
35
36






37
38
39
40

41
42

43
44

45
46
47
48
49
50
51

52
53
54

55
56
57
58

59
60

61
62

63
64
65
66

67
68
69

70
71

72
73

74
75
76
77
78
79
80
81

82
83

84
85
86
87
88

89
90
91
92
93
94

95
96
97
98
99

100
101
102
103


104
105
106

107
108
109

110
111
112

113
114
115

116
117
118
119
120

121
122
123
124
125
126
127

128
129
130
131
132

133
134
135
136
137
138
139





140
141

142
143
144

145
146
147
148

149
150
151
152
153

154
155
156
157
158
159
160

161
162
163
164

165
166
167

168
169
170
171
172

173
174
175

176
177
178

179
180
181

182
183
184
185

186
187
188

189
190
191



192
193
194



195
196
197
198

199
200
201
202

203
204

205
206
207
208

209
210
211
212

213
214
215

216
217
218
219

220
221
222
223
224
225
226

227
228
229

230
231
232
233

234
235
236
237
238



239
240
241
242
243
244



245
246
247
248
249
250
251



252
253
254
255



256
257
258
259
260
261
262
263



264
265
266
267
268



269
270
271
272

273
274
275
276
277
278
279



280
281
282
283
284
285
286



287
288
289
290
291
292



293
294
295
296
297



298
299
300
301
302
303
304
305



306
307
308
309
310
311



312
313

314
315

316
317
318
319
320

321
322
323
324
325

326
327
328
329
330
331
332
333

334
335

336
337
338
339
340
341

342
343
344
345
346

347
348
349
350
351
352
353

354
355

356
357
358

359
360
361
362

363
364
365

366
367
368
369

370
371
372
373
374
375
376

377
378
379
380

381
382
383
384
385
386

387
388
389
390
391
392
393
394
395

396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411

412
413
414
415
416
417
418
419
420

421
422
423
424


425
426
427

428
429
430
431

432
433

434
435
436
437
438
439

440
441
442

443
444

445
446

447
448
449

450
451
452

453
454
455
456
457
458
459
460

461
462

463
464
465

466
467
468
469

470
471
472
473
474
475

476
477
478

479
480

481
482
483

484
485
486

487
488
489
490

491
492

493
494
495
496

497
498
499



500
501
502
503
504

505
506
507
508
509
510

511
512
513
514

515
516
517
518
519

520
521
522

523
524
525
526
527
528
529
530
531



532
533
1
2
3
4
5
6
7







8
9
10
11
12
13
14
15

16
17
18
19
20
21






22
23
24
25
26
27
28
29

30
31






32
33
34
35
36
37
38
39
40

41
42

43
44

45





46

47

48

49


50

51
52

53
54

55


56

57

58

59


60
61

62






63

64
65

66



67

68




69

70



71

72

73


74
75

76

77
78
79

80

81

82



83



84

85

86
87
88
89
90

91



92

93

94





95
96
97
98
99
100

101

102

103


104

105

106
107
108

109





110

111


112

113

114

115

116
117
118

119

120

121

122

123

124

125
126
127
128

129

130

131
132


133
134
135
136


137
138
139
140
141
142

143


144

145
146

147


148

149

150
151

152

153

154


155

156





157

158

159

160

161
162

163

164



165
166
167


168



169
170
171



172



173
174
175
176



177
178
179





180


181
182
183

184



185
186
187
188
189
190

191



192



193
194
195



196



197
198
199


200



201
202
203

204



205
206
207





208


209
210
211
212
213
214



215
216
217
218

219
220

221



222

223



224

225






226

227
228

229


230
231
232

233

234
235
236

237





238

239
240

241



242


243

244

245

246


247

248





249

250


251

252


253
254
255

256







257

258














259

260






261


262

263


264
265

266

267
268
269
270

271
272

273






274



275


276


277

278

279

280

281






282

283
284

285



286


287

288


289
290
291

292

293

294
295

296



297



298


299

300
301

302




303



304
305
306



307

308


309
310
311

312


313

314



315

316

317

318





319



320
321
322



+





-
-
-
-
-
-
-
+
+
+
+
+
+
+

-
+





-
-
-
-
-
-
+
+
+
+
+
+


-
+

-
-
-
-
-
-
+
+
+
+
+
+



-
+

-
+

-
+
-
-
-
-
-

-
+
-

-
+
-
-

-
+

-
+

-
+
-
-

-
+
-

-
+
-
-
+

-
+
-
-
-
-
-
-

-
+

-
+
-
-
-

-
+
-
-
-
-

-
+
-
-
-

-
+
-

-
-
+
+
-

-
+


-
+
-

-
+
-
-
-
+
-
-
-

-
+
-





-
+
-
-
-

-
+
-

-
-
-
-
-
+
+
+
+
+

-
+
-

-
+
-
-

-
+
-



-
+
-
-
-
-
-

-
+
-
-

-
+
-

-
+
-



-
+
-

-
+
-

-
+
-

-
+



-
+
-

-
+

-
-
+
+
+

-
-
+
+
+



-
+
-
-

-
+

-
+
-
-

-
+
-


-
+
-

-
+
-
-

-
+
-
-
-
-
-

-
+
-

-
+
-


-
+
-

-
-
-
+
+
+
-
-

-
-
-
+
+
+
-
-
-

-
-
-
+
+
+

-
-
-
+
+
+
-
-
-
-
-

-
-
+
+
+
-

-
-
-
+
+
+



-
+
-
-
-

-
-
-
+
+
+
-
-
-

-
-
-
+
+
+
-
-

-
-
-
+
+
+
-

-
-
-
+
+
+
-
-
-
-
-

-
-
+
+
+



-
-
-
+
+
+

-
+

-
+
-
-
-

-
+
-
-
-

-
+
-
-
-
-
-
-

-
+

-
+
-
-



-
+
-



-
+
-
-
-
-
-

-
+

-
+
-
-
-
+
-
-

-
+
-

-
+
-
-

-
+
-
-
-
-
-

-
+
-
-

-
+
-
-



-
+
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-

-
-
+
-

-
-
+
+
-

-
+



-
+

-
+
-
-
-
-
-
-
+
-
-
-
+
-
-
+
-
-
+
-

-
+
-

-
+
-
-
-
-
-
-

-
+

-
+
-
-
-
+
-
-

-
+
-
-



-
+
-

-
+

-
+
-
-
-
+
-
-
-
+
-
-

-
+

-
+
-
-
-
-
+
-
-
-
+
+
+
-
-
-

-
+
-
-



-
+
-
-

-
+
-
-
-

-
+
-

-
+
-
-
-
-
-

-
-
-
+
+
+
-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Дистрибутивы,_которые_мы_выбираем/index.html)


# Дистрибутивы, которые мы выбираем

Материал из Tkabber Wiki

> *– Скажите, пожалуйста, куда мне отсюда идти?  
> – А куда ты хочешь попасть? – ответил Кот.  
> – Мне все равно… – сказала Алиса.  
> – Тогда все равно, куда и идти, – заметил Кот.  
> – … только бы попасть куда-нибудь, – пояснила Алиса.  
> – Куда-нибудь ты обязательно попадешь, – сказал Кот.  
> – Нужно только достаточно долго идти.*
– Скажите, пожалуйста, куда мне отсюда идти?
 – А куда ты хочешь попасть? – ответил Кот.
 – Мне все равно… – сказала Алиса.
 – Тогда все равно, куда и идти, – заметил Кот.
 – … только бы попасть куда-нибудь, – пояснила Алиса.
 – Куда-нибудь ты обязательно попадешь, – сказал Кот.
 – Нужно только достаточно долго идти. 

> *© [Льюис Кэрролл "Алиса в стране чудес", пер. Демуровой](http://fictionbook.ru/author/kyerroll_lyuis/priklyucheniya_alisiy_v_strane_chudes_pe/kyerroll_priklyucheniya_alisiy_v_strane_chudes_pe.html#TOC_id3507814)*
© [Льюис Кэрролл "Алиса в стране чудес", пер. Демуровой](http://fictionbook.ru/author/kyerroll_lyuis/priklyucheniya_alisiy_v_strane_chudes_pe/kyerroll_priklyucheniya_alisiy_v_strane_chudes_pe.html#TOC_id3507814) 

## <a id="toc"></a>Содержание

* [1 Начните работу с нажатия этой кнопки (c) Windows](#Начните_работу_с_нажатия_этой_кнопки_c_Windows)
* [2 "Самодостаточные" дистрибутивы Ткаббера](#Самодостаточные_дистрибутивы_Ткаббера)
   * [2.1 Tclkit, starkits и starpacks: немного теории](#Tclkit_starkits_и_starpacks_немного_теории)
      * [2.1.1 Тиклькит](#Тиклькит)
      * [2.1.2 Старкиты](#Старкиты)
      * [2.1.3 Старпаки](#Старпаки)
   * [2.2 Назад, к Ткабберу!](#Назад_к_Ткабберу)
      * [2.2.1 Tkabber-pack — особая песня](#Tkabber-pack_-_особая_песня)
 * [2.1 Tclkit, starkits и starpacks: немного теории](#Tclkit_starkits_и_starpacks_немного_теории)
  * [2.1.1 Тиклькит](#Тиклькит)
  * [2.1.2 Старкиты](#Старкиты)
  * [2.1.3 Старпаки](#Старпаки)
 * [2.2 Назад, к Ткабберу!](#Назад_к_Ткабберу)
  * [2.2.1 Tkabber-pack — особая песня](#Tkabber-pack_-_особая_песня)
* [3 Быстрее! Выше! Сильнее!](#Быстрее_Выше_Сильнее)
* [4 Прилавок](#Прилавок)
   * [4.1 Рукоделие](#Рукоделие)
 * [4.1 Рукоделие](#Рукоделие)
* [5 Кто сильнее: кит или пак? (Что выбрать?)](#Кто_сильнее_кит_или_пак_Что_выбрать)
   * [5.1 "Каноническая" установка: Tcl/Tk + Ткаббер](#Каноническая_установка_Tcl_Tk_+_Ткаббер)
      * [5.1.1 Осевой вариант](#Осевой_вариант)
      * [5.1.2 Windows: не бейсиком единым...](#Windows_не_бейсиком_единым...)
      * [5.1.3 Дистрибутив Tcl/Tk в системе: pros et contras](#Дистрибутив_Tcl_Tk_в_системе_pros_et_contras)
   * [5.2 Всё своё ношу с собой](#Всё_своё_ношу_с_собой)
      * [5.2.1 Ткаббер-пак опять идёт не в ногу](#Ткаббер-пак_опять_идёт_не_в_ногу)
 * [5.1 "Каноническая" установка: Tcl/Tk + Ткаббер](#Каноническая_установка_Tcl_Tk_+_Ткаббер)
  * [5.1.1 Осевой вариант](#Осевой_вариант)
  * [5.1.2 Windows: не бейсиком единым...](#Windows_не_бейсиком_единым...)
  * [5.1.3 Дистрибутив Tcl/Tk в системе: pros et contras](#Дистрибутив_Tcl_Tk_в_системе_pros_et_contras)
 * [5.2 Всё своё ношу с собой](#Всё_своё_ношу_с_собой)
  * [5.2.1 Ткаббер-пак опять идёт не в ногу](#Ткаббер-пак_опять_идёт_не_в_ногу)

# <a id="Начните_работу_с_нажатия_этой_кнопки_c_Windows"></a>Начните работу с нажатия этой кнопки (c) Windows

> *Куда ставить-то?!*
Куда ставить-то?! 

> *© х/ф "Посторонним вход воспрещается"*
© х/ф "Посторонним вход воспрещается" 

Итак, вы решили установить Ткаббер и в настоящий момент чешете голову,
Итак, вы решили установить Ткаббер и в настоящий момент чешете голову, рассматривая [эту страницу](http://tkabber.jabber.ru/download). Не унывайте! Во-первых, разбегающиеся глаза красят человека, во-вторых, не вы первый, не вы — последний: почти все "практикующие ткабберисты" были  в своё время мучимы выбором, подобным вашему. Для того, чтобы помочь вам с выбором, написана эта статья. 
рассматривая [эту страницу](http://tkabber.jabber.ru/download). Не унывайте!
Во-первых, разбегающиеся глаза красят человека, во-вторых, не вы первый, не вы
— последний: почти все "практикующие ткабберисты" были  в своё время мучимы
выбором, подобным вашему. Для того, чтобы помочь вам с выбором, написана эта
статья.

В этой статье рассказывается о различных ипостасях Ткаббера — его
В этой статье рассказывается о различных ипостасях Ткаббера — его дистрибутивах, — и производится их сравнительное препарирование.  
дистрибутивах, — и производится их сравнительное препарирование.

Здесь достаточно много теории, так как цель статьи — предоставить вам
Здесь достаточно много теории, так как цель статьи — предоставить вам возможность сделать _осмысленный выбор._ Если же вы ленивы или (думаете что) всё знаете, можете перейти [прямо сюда](Дистрибутивы__которые_мы_выбираем.md#Прилавок). 
возможность сделать _осмысленный выбор._ Если же вы ленивы или (думаете что)
всё знаете, можете перейти [**прямо сюда**](#Прилавок).

Приступим.
Приступим. 

Первое, что вам следует заучить как "Отче наш":
Первое, что вам следует заучить как "Отче наш": 

> _Ткаббер написан на **интерпретируемом языке программирования,** и это
 _Ткаббер написан на **интерпретируемом языке программирования,** и это означает, что для работы ему нужен "движок", выполняющий программы этого самого языка — Tcl/Tk, а также необходимые библиотеки._ 
  означает, что для работы ему нужен "движок", выполняющий программы этого
  самого языка — Tcl/Tk, а также необходимые библиотеки._

То есть, несмотря на некоторую техническую неточность, можно утверждать, что
То есть, несмотря на некоторую техническую неточность, можно утверждать, что Ткаббер состоит из двух частей: 
Ткаббер состоит из двух частей:

*  Интерпретатора языка Tcl, а также библиотек (Tk, Tcllib и BWidget —
*  Интерпретатора языка Tcl, а также библиотек (Tk, Tcllib и BWidget — минимально необходимый набор); 
   минимально необходимый набор);
*  Самого кода Ткаббера.
*  Самого кода Ткаббера. 

Этот самый "код Ткаббера", в принципе, самодостаточен в том смысле, что не
Этот самый "код Ткаббера", в принципе, самодостаточен в том смысле, что не зависит от операционный системы и является общим для всех систем, на которых работает Tcl/Tk. То есть, если на вашей системе уже установлен дистрибутив Tcl/Tk, вы можете произвольно менять сам код Ткаббера: к примеру, вытягивать его еженощно из [репозитория](http://tkabber.jabber.ru/svn). Или вы, скажем, можете просто перенести каталог с Ткаббером с Windows-машины на Linux-машину, и он будет там прекрасно работать. 
зависит от операционный системы и является общим для всех систем, на которых
работает Tcl/Tk. То есть, если на вашей системе уже установлен дистрибутив
Tcl/Tk, вы можете произвольно менять сам код Ткаббера: к примеру, вытягивать
его еженощно из [репозитория](http://tkabber.jabber.ru/svn). Или вы, скажем,
можете просто перенести каталог с Ткаббером с Windows-машины на Linux-машину, и
он будет там прекрасно работать.

И именно "этот самый код..." и является основным дистрибутивом Ткаббера.
И именно "этот самый код..." и является основным дистрибутивом Ткаббера. 

К сожалению, Tcl/Tk поставляется в комплекте только с такими серьёзными
К сожалению, Tcl/Tk поставляется в комплекте только с такими серьёзными операционными системами, как Linux или FreeBSD; пользователи Windows вынуждены скачивать дистрибутив Tcl/Tk из интернета или использовать альтернативные дистрибутивы Ткаббера, о которых рассказано ниже. 
операционными системами, как Linux или FreeBSD; пользователи Windows вынуждены
скачивать дистрибутив Tcl/Tk из интернета или использовать альтернативные
дистрибутивы Ткаббера, о которых рассказано ниже.

Однако, многие (и не только в Windows) по разным причинам не хотят иметь дело с
Однако, многие (и не только в Windows) по разным причинам не хотят иметь дело с установкой этого "рантайма". Наиболее часто встречающаяся причина — вопрос трафика: дистрибутив Tcl/Tk под Windows "весит" примерно 20 мегабайт в архиве. Многие пользователи, обрадовавшись, что основной дистрибутив Ткаббера "весит" около 700 килобайт, бывают разочарованы, узнав, что "это ещё не всё". 
установкой этого "рантайма". Наиболее часто встречающаяся причина — вопрос
трафика: дистрибутив Tcl/Tk под Windows "весит" примерно 20 мегабайт в архиве.
Многие пользователи, обрадовавшись, что основной дистрибутив Ткаббера "весит"
около 700 килобайт, бывают разочарованы, узнав, что "это ещё не всё".

Вторая по частоте появления причина — желание использовать "Ткаббер на флэшке":
Вторая по частоте появления причина — желание использовать "Ткаббер на флэшке": обычно на "чужих" компьютерах (на работе, в университете и т.д.) нет возможности установить дистрибутив Tcl/Tk, и, следовательно, его нужно как-то "носить с собой". 
обычно на "чужих" компьютерах (на работе, в университете и т.д.) нет
возможности установить дистрибутив Tcl/Tk, и, следовательно, его нужно как-то
"носить с собой".

Итак, подведём первый промежуточный итог. У вас есть два варианта для работы с
Итак, подведём первый промежуточный итог. У вас есть два варианта для работы с Ткаббером: 
Ткаббером:

1.  Установить себе дистрибутив Tcl/Tk + необходимые библиотеки.
1.  Скачать специальный дистрибутив Ткаббера, который "содержит в себе"
1.  Установить себе дистрибутив Tcl/Tk + необходимые библиотеки. 
1.  Скачать специальный дистрибутив Ткаббера, который "содержит в себе" микро-дистрибутив Tcl/Tk. 
    микро-дистрибутив Tcl/Tk.

Сравнение их отложим до поры, а пока окинем взглядом
Сравнение их отложим до поры, а пока окинем взглядом 

# <a id="Самодостаточные_дистрибутивы_Ткаббера"></a>"Самодостаточные" дистрибутивы Ткаббера
Есть, в общем, два подхода к созданию "вещи в себе" из программы, написанной на
Есть, в общем, два подхода к созданию "вещи в себе" из программы, написанной на Tcl: 
Tcl:

*  Сделать инсталлятор, который устанавливает в систему как минимальный, (но
*  Сделать инсталлятор, который устанавливает в систему как минимальный, (но "настоящий") дистрибутив Tcl/Tk с необходимыми библиотеками, так и саму программу; 
   "настоящий") дистрибутив Tcl/Tk с необходимыми библиотеками, так и саму
   программу;
*  Использовать специальное средство под названием _tclkit (тиклькит),_
*  Использовать специальное средство под названием _tclkit (тиклькит),_ позволяющее "завернуть" и программу, и Tcl/Tk, и необходимые библиотеки в один  файл — _старкит (starkit),_ который может быть исполняемым, и тогда становится _старпаком (starpack)._ 
   позволяющее "завернуть" и программу, и Tcl/Tk, и необходимые библиотеки в
   один  файл — _старкит (starkit),_ который может быть исполняемым, и тогда
   становится _старпаком (starpack)._

Ткаббер доступен в каждом из этих обличий. И если первое из них (надеемся)
Ткаббер доступен в каждом из этих обличий. И если первое из них (надеемся) вполне понятно, то второе, скорее всего, требует разъяснений. 
вполне понятно, то второе, скорее всего, требует разъяснений.

## <a id="Tclkit_starkits_и_starpacks_немного_теории"></a>Tclkit, starkits и starpacks: немного теории

### <a id="Тиклькит"></a>Тиклькит

Tclkit был изобретён для решения проблемы быстрого и удобного размещения
Tclkit был изобретён для решения проблемы быстрого и удобного размещения программы, написанной на Tcl/Tk, на компьютере пользователя. Автор идеи, первой реализации и лидер проекта — [Jean-Claude Wippler](http://wiki.tcl.tk/jcw), официальный сайт тиклькита — [здесь](http://www.equi4.com/tclkit/). 
программы, написанной на Tcl/Tk, на компьютере пользователя. Автор идеи, первой
реализации и лидер проекта — [Jean-Claude Wippler](http://wiki.tcl.tk/jcw),
официальный сайт тиклькита — [здесь](http://www.equi4.com/tclkit/).

Тиклькит — это _один_ исполняемый файл небольшого размера (версия 8.4.13 для
Тиклькит — это _один_ исполняемый файл небольшого размера (версия 8.4.13 для Linux x86 "весит" примерно 1.5M), содержащий в себе: 
Linux x86 "весит" примерно 1.5M), содержащий в себе:

*  интерпретатор языка Tcl;
*  графическую библиотеку Tk;
*  объектное расширение для тикля [incr Tcl];
*  библиотеку поддержки виртуальной файловой системы TclVFS;
*  встроенную систему управления базами данных _Metakit._
*  интерпретатор языка Tcl; 
*  графическую библиотеку Tk; 
*  объектное расширение для тикля [incr Tcl]; 
*  библиотеку поддержки виртуальной файловой системы TclVFS; 
*  встроенную систему управления базами данных _Metakit._ 

Тиклькит не требует инсталляции и исполняет файлы специального формата —
Тиклькит не требует инсталляции и исполняет файлы специального формата — старкиты. 
старкиты.

Скачать тиклькит для своей платформы можно
Скачать тиклькит для своей платформы можно [отсюда](http://www.equi4.com/pub/tk/downloads.html), выбрав нужный пакет из доступной матрицы. 
[отсюда](http://www.equi4.com/pub/tk/downloads.html), выбрав нужный пакет из
доступной матрицы.

Итак, тиклькит это "движок". Посмотрим теперь на то, что он "приводит в
Итак, тиклькит это "движок". Посмотрим теперь на то, что он "приводит в движение". 
движение".

### <a id="Старкиты"></a>Старкиты

Старкит — это _один_ файл, представляющий собой базу данных (!) в формате
Старкит — это _один_ файл, представляющий собой базу данных (!) в формате Metakit. Собственно данными этой базы являются файлы исходной программы, из которой изготавливается тиклькит, файлы необходимых библиотек и произвольные файлы данных. TclVFS из тиклькита делает так, что интерпретатор тикля (из этого же тиклькита) считает, что работает с обычной файловой системой, а не базой данных. 
Metakit. Собственно данными этой базы являются файлы исходной программы, из
которой изготавливается тиклькит, файлы необходимых библиотек и произвольные
файлы данных. TclVFS из тиклькита делает так, что интерпретатор тикля (из этого
же тиклькита) считает, что работает с обычной файловой системой, а не базой
данных.

Название "starkit" — это (довольно неуклюжий) акроним от "**St**and**A**lone
Название "starkit" — это (довольно неуклюжий) акроним от "**St**and**A**lone **R**untime, called Tcl**kit**" ("Самодостаточный исполняемый модуль, который называется тиклькит"). 
**R**untime, called Tcl**kit**" ("Самодостаточный исполняемый модуль, который
называется тиклькит").

Таким образом, вы можете скачать тиклькит под свою ОС, затем скачать старкит
Таким образом, вы можете скачать тиклькит под свою ОС, затем скачать старкит Ткаббера и далее обновлять только его по мере выхода новых версий. 
Ткаббера и далее обновлять только его по мере выхода новых версий.

Для запуска старкита Ткаббера на другой операционной системе вам понадобится
Для запуска старкита Ткаббера на другой операционной системе вам понадобится скачать тиклькит для неё. 
скачать тиклькит для неё.

### <a id="Старпаки"></a>Старпаки

Старпак — это просто комбинация тиклькита для одной конкретной операционной
Старпак — это просто комбинация тиклькита для одной конкретной операционной системы и старкита. 
системы и старкита.

Старпак обладает одним чудным свойством: он представляет собой _один
Старпак обладает одним чудным свойством: он представляет собой _один исполняемый файл, не требующий инсталляции._ 
исполняемый файл, не требующий инсталляции._

К сожалению, при этом теряется одно из достоинств старкитов — независимость от
К сожалению, при этом теряется одно из достоинств старкитов — независимость от целевой платформы. 
целевой платформы.

Подробнее про [**Tkabber starpack**](Tkabber_starpack.md).
Подробнее про [Tkabber starpack](Tkabber_starpack.md). 

## <a id="Назад_к_Ткабберу"></a>Назад, к Ткабберу!

Выше мы сказали, что Ткаббер доступен в виде каждой из разновидностей
Выше мы сказали, что Ткаббер доступен в виде каждой из разновидностей "самодостаточных" дистрибутивов. 
"самодостаточных" дистрибутивов.

Итак, настало время поприветствовать наших красавиц!
Итак, настало время поприветствовать наших красавиц! 

##### [Tkabber-Starkit](http://tkabber.jabber.ru/node/73) 
> Старкит. Требует наличия тиклькита для вашей ОС.
 [Tkabber-Starkit](http://tkabber.jabber.ru/node/73) 

 Старкит. Требует наличия тиклькита для вашей ОС. 

##### [Tkabber-Starpack](http://tkabber.jabber.ru/node/160) 
> Старпак. Для запуска не требует ничего.
 [Tkabber-Starpack](http://tkabber.jabber.ru/node/160) 

 Старпак. Для запуска не требует ничего. 

### <a id="Tkabber-pack_-_особая_песня"></a>Tkabber-pack — особая песня

Если помните, одним из вариантов дистрибутива "всё в одном" был инсталлятор,
Если помните, одним из вариантов дистрибутива "всё в одном" был инсталлятор, устанавливающий в систему минимальный дистрибутив Tcl/Tk, необходимые библиотеки и саму программу. 
устанавливающий в систему минимальный дистрибутив Tcl/Tk, необходимые
библиотеки и саму программу.

Когда-то это задачу решал Ткаббер-пак.
Когда-то это задачу решал Ткаббер-пак. 

Однако, начиная с версии 0.9.9, _официальный_ Ткаббер-пак больше не содержит в
Однако, начиная с версии 0.9.9, _официальный_ Ткаббер-пак больше не содержит в себе микродистрибутива Tcl/Tk; автор предлагает использовать его вместе с "полным" дистрибутивом этого языка. 
себе микродистрибутива Tcl/Tk; автор предлагает использовать его вместе с
"полным" дистрибутивом этого языка.

С другой стороны, существует _неофициальная_ модификация Ткаббер-пака,
С другой стороны, существует _неофициальная_ модификация Ткаббер-пака, содержащая Tcl/Tk. О ней будет рассказано ниже. 
содержащая Tcl/Tk. О ней будет рассказано ниже.

# <a id="Быстрее_Выше_Сильнее"></a>Быстрее! Выше! Сильнее!
Ткаббер написан таким образом, что может использовать различные _модули_ для
Ткаббер написан таким образом, что может использовать различные _модули_ для Tcl/Tk (которые мы называем "расширениями"), если они доступны (установлены). 
Tcl/Tk (которые мы называем "расширениями"), если они доступны (установлены).

Несмотря на то, что ни одно из расширений не требуется для нормальной работы
Несмотря на то, что ни одно из расширений не требуется для нормальной работы Ткаббера, некоторые из них _очень_ полезны, и даже рассматриваются многими как необходимые. 
Ткаббера, некоторые из них _очень_ полезны, и даже рассматриваются многими как
необходимые.

Важно понимать, что эти модули не являются частью Ткаббера; их необходимо
Важно понимать, что эти модули не являются частью Ткаббера; их необходимо устанавливать отдельно. Они могут поставляться вместе с вашей ОС или вашим дистрибутивом Tcl/Tk, а возможно, устанавливать их вам придётся "руками". Посему, не исключено, что вопрос наличия тех или иных модулей в "готовом" виде, или тот факт, что они поставляются "внутри" некоторого дистрибутива Ткаббера, может сыграть решающую роль в вашем выборе. 
устанавливать отдельно. Они могут поставляться вместе с вашей ОС или вашим
дистрибутивом Tcl/Tk, а возможно, устанавливать их вам придётся "руками".
Посему, не исключено, что вопрос наличия тех или иных модулей в "готовом" виде,
или тот факт, что они поставляются "внутри" некоторого дистрибутива Ткаббера,
может сыграть решающую роль в вашем выборе.

Здесь мы рассмотрим доступные модули Tcl/Tk, которые может использовать
Здесь мы рассмотрим доступные модули Tcl/Tk, которые может использовать Ткаббер, чтобы учитывать это при сравнении дистрибутивов Ткаббера. 
Ткаббер, чтобы учитывать это при сравнении дистрибутивов Ткаббера.

![(!)](../images/Hammer.png) **Сделать:** рассказать про модули + доступность
![(!)](../images/Hammer.png) **Сделать:** рассказать про модули + доступность каждого модуля). Возможно, просто отослать к соотв. таблице на офсайте 
каждого модуля). Возможно, просто отослать к соотв. таблице на офсайте

# <a id="Прилавок"></a>Прилавок
Пробежимся по  доступным дистрибутивам Ткаббера, имеющим статус официальных,
Пробежимся по  доступным дистрибутивам Ткаббера, имеющим статус официальных, давая краткие пояснения: 
давая краткие пояснения:

##### Ткаббер из состава ОС 
> Проверьте, возможно, что Ткаббер входит в состав вашей ОС! К примеру, он
  входит в состав [Debian GNU/Linux](http://www.debian.org),
 Ткаббер из состава ОС 

 Проверьте, возможно, что Ткаббер входит в состав вашей ОС! К примеру, он входит в состав [Debian GNU/Linux](http://www.debian.org), [Gentoo](http://www.gentoo.org), [Mandrake](http://www.mandrakelinux.com/), [FreeBSD](http://www.freebsd.org). Возможно, есть и в других POSIX-системах. 
  [Gentoo](http://www.gentoo.org), [Mandrake](http://www.mandrakelinux.com/),
  [FreeBSD](http://www.freebsd.org). Возможно, есть и в других POSIX-системах.

##### ["Просто Ткаббер"](http://www.jabberstudio.org/projects/tkabber/releases/) 
> Официальный _стабильный_ дистрибутив ткаббера. На [официальном
  сайте](http://tkabber.jabber.ru/download) он называется "Source Package". Для
 ["Просто Ткаббер"](http://www.jabberstudio.org/projects/tkabber/releases/) 

 Официальный _стабильный_ дистрибутив ткаббера. На [официальном сайте](http://tkabber.jabber.ru/download) он называется "Source Package". Для работы требует наличия в системе дистрибутива Tcl/Tk и необходимых библиотек (Tcllib и BWidget). Не содержит опциональных расширений. Поствляется в виде двух архивов: собственно Ткаббер и плагины к нему. 
  работы требует наличия в системе дистрибутива Tcl/Tk и необходимых библиотек
  (Tcllib и BWidget). Не содержит опциональных расширений. Поствляется в виде
  двух архивов: собственно Ткаббер и плагины к нему.

##### [Ткаббер с SVN](http://tkabber.jabber.ru/node/55)
> Это — для любителей "быть на переднем крае" и разработчиков. Эта версия
  _нестабильна,_ то есть вообще не обязана работать.
 [Ткаббер с SVN](http://tkabber.jabber.ru/node/55) 

 Это — для любителей "быть на переднем крае" и разработчиков. Эта версия _нестабильна,_ то есть вообще не обязана работать. 

##### [Tkabber-pack](http://tkabber.jabber.ru/tkabber-pack)
> Это — инсталлятор для Windows, содержащий Ткаббер, плагины к нему, а так же
  наиболее полезные расширения. _**Внимание, будьте бдительны:** этот
 [Tkabber-pack](http://tkabber.jabber.ru/tkabber-pack) 

 Это — инсталлятор для Windows, содержащий Ткаббер, плагины к нему, а так же наиболее полезные расширения. _**Внимание, будьте бдительны:** этот дистрибутив **не** включает в себя Tcl/Tk!_ Точнее говоря, он включал Tcl/Tk, но только до версии Ткаббера 0.9.8. Начиная с 0.9.9 — уже не включает. (Если вам нужен Ткаббер-пак с тиклем внутри, обратите внимание на "TkabberOTC", который описан ниже, в разделе ["Рукоделие"](Дистрибутивы__которые_мы_выбираем.md#Рукоделие). 
  дистрибутив **не** включает в себя Tcl/Tk!_ Точнее говоря, он включал Tcl/Tk,
  но только до версии Ткаббера 0.9.8. Начиная с 0.9.9 — уже не включает. (Если
  вам нужен Ткаббер-пак с тиклем внутри, обратите внимание на "TkabberOTC",
  который описан ниже, в разделе
  [**"Рукоделие"**](#Рукоделие).

##### [Tkabber-Starkit](http://tkabber.jabber.ru/node/73)
> Это — старкит Ткаббера. Требует для работы [тиклькит под вашу ОС](http://www.equi4.com/pub/tk/downloads.html).
 [Tkabber-Starkit](http://tkabber.jabber.ru/node/73) 

 Это — старкит Ткаббера. Требует для работы [тиклькит под вашу ОС](http://www.equi4.com/pub/tk/downloads.html). _**Внимание!** имеющийся старкит сильно устарел (версия 0.9.7) и не рекомендуется к использованию._ 
  _**Внимание!** имеющийся старкит сильно устарел (версия 0.9.7) и не рекомендуется к использованию._

##### [Tkabber-Starpack](http://tkabber.jabber.ru/node/160) 
> Это — старпак Ткаббера. Имеются версии под Linux x86 и Windows. Включает
  наиболее полезные расширения Ткаббера. Для работы не требует абсолютно ничего.
 [Tkabber-Starpack](http://tkabber.jabber.ru/node/160) 

 Это — старпак Ткаббера. Имеются версии под Linux x86 и Windows. Включает наиболее полезные расширения Ткаббера. Для работы не требует абсолютно ничего. 

## <a id="Рукоделие"></a>Рукоделие

В силу языка своей реализации Ткаббер довольно лекго поддаётся изменениям.
В силу языка своей реализации Ткаббер довольно лекго поддаётся изменениям. Также не представляет сложностей изменение готового старкита или старпака. Поэтому существует несколько неофициальных дистрибутивов. Перечислим те, о которых знаем: 
Также не представляет сложностей изменение готового старкита или старпака.
Поэтому существует несколько неофициальных дистрибутивов. Перечислим те, о
которых знаем:

##### [Старпак с поддержкой сжатия](ftp://netbsd.rusc.ru/tkabber/tkabber-starpack_0.9.9-win32+zlib+img.exe) 
>  Официальный стапак под Win32, в который [**Kostix**](Участник_Kostix.md) добавил
  поддержку сжатия, а также возможность подгружать
 [Старпак с поддержкой сжатия](ftp://netbsd.rusc.ru/tkabber/tkabber-starpack_0.9.9-win32+zlib+img.exe) 

 Официальный стапак под Win32, в который [Kostix](Участник_Kostix.md) добавил поддержку сжатия, а также возможность подгружать [старкит пакета Img](http://mini.net/sdarchive/img.kit), позволяющий работать с картинками в формате JPEG, PNG и другими. Подробности — [здесь](Low_traffic_HOWTO.md#Старпак_Ткаббера_Win32). 
  [старкит пакета Img](http://mini.net/sdarchive/img.kit), позволяющий работать с картинками в
  формате JPEG, PNG и другими. Подробности —
  [**здесь**](Low_traffic_HOWTO.md#Старпаки_Ткаббера).

##### [Tkabber-pack toon'а](http://lfor.narod.ru/) 
> Ткаббер-пак под Windows. Содержит некие изменения, о которых автор ленится
  написать. Основная идея: минимизировать трафик, требуемый для получения
 [Tkabber-pack toon'а](http://lfor.narod.ru/) 

 Ткаббер-пак под Windows. Содержит некие изменения, о которых автор ленится написать. Основная идея: минимизировать трафик, требуемый для получения обновлений. С этой целью всё пожато архиватором 7zip, а новые версии Ткаббера распространяются в виде апдейтов. 
  обновлений. С этой целью всё пожато архиватором 7zip, а новые версии Ткаббера
  распространяются в виде апдейтов.

##### [TkabberOTC](http://wiki.omsktele.com/index.php/TkabberOTC) 
> Ткаббер-пак от админов провайдера "Омские Телекоммуникации". Допилен на
  предмет более глубокой русификации + другие изменения. Читайте официальную
 [TkabberOTC](http://wiki.omsktele.com/index.php/TkabberOTC) 

 Ткаббер-пак от админов провайдера "Омские Телекоммуникации". Допилен на предмет более глубокой русификации + другие изменения. Читайте официальную страницу. _Включает минимальный дистрибутив Tcl/Tk._ 
  страницу. _Включает минимальный дистрибутив Tcl/Tk._

##### [Tkabber-SK](http://sourceforge.net/projects/tkabber-sk/) 
> Этакий "форк" от SVN-версии Ткаббера за конец декабря 2006 года. Автор —
  `xmpp:tomasz@mastahizm.mooo.com`. В эту версию добавлены разные интересные и
 [Tkabber-SK](http://sourceforge.net/projects/tkabber-sk/) 

 Этакий "форк" от SVN-версии Ткаббера за конец декабря 2006 года. Автор — `xmpp:tomasz@mastahizm.mooo.com`. В эту версию добавлены разные интересные и не очень штуки (подробности читайте в чейнджлогах на странице проекта). Мы пригласили автора к сотрудничеству с разработчиками, так как некоторые из его фич могут запросто попасть в транк. Да и вообще незачем распылять силы. Фичи, которые в транк не попадут, он вроде обещал выложить в виде патчей на английской версии соответствующего раздела. 
  не очень штуки (подробности читайте в чейнджлогах на странице проекта). Мы
  пригласили автора к сотрудничеству с разработчиками, так как некоторые из его
  фич могут запросто попасть в транк. Да и вообще незачем распылять силы. Фичи,
  которые в транк не попадут, он вроде обещал выложить в виде патчей на
  английской версии соответствующего раздела.

##### [Страница Ткаббера на Tcl Wiki](http://wiki.tcl.tk/11080) 
> Содержит ссылки на как минимум два старкита. За подробностями идите по ссылке.
 [Страница Ткаббера на Tcl Wiki](http://wiki.tcl.tk/11080) 

 Содержит ссылки на как минимум два старкита. За подробностями идите по ссылке. 

# <a id="Кто_сильнее_кит_или_пак_Что_выбрать"></a>Кто сильнее: кит или пак? (Что выбрать?)

> _Какой же я могу, сеньора,
> Подать совет там, где решает
> Единственно ваш личный вкус?_
Какой же я могу, сеньора,
 Подать совет там, где решает
 Единственно ваш личный вкус?

> _[Лопе Де Вега. "Собака на сене"](http://www.lib.ru/DEVEGA/vega2.txt)_
[Лопе Де Вега. "Собака на сене"](http://www.lib.ru/DEVEGA/vega2.txt) 

Изложенное здесь есть частное мнение авторов статьи, которое не обязано
Изложенное здесь есть частное мнение авторов статьи, которое не обязано совпадать с вашим, так что имейте в виду известный девиз: _"на наше мнение можно положить(ся)"_ © [AG.ru](http://www.ag.ru). Включайте голову, изучайте и делайте свой выбор. 
совпадать с вашим, так что имейте в виду известный девиз: _"на наше мнение
можно положить(ся)"_ © [AG.ru](http://www.ag.ru). Включайте голову, изучайте и
делайте свой выбор.

Совокупность доступных дистрибутивов воплощает в жизнь принцип
Совокупность доступных дистрибутивов воплощает в жизнь принцип "камень-ножницы-бумага": решения, идеального по всем возможным параметрам, не существует. Поэтому мы постараемся описать эти параметры и дать минимальные рекоммендации. 
"камень-ножницы-бумага": решения, идеального по всем возможным параметрам, не
существует. Поэтому мы постараемся описать эти параметры и дать минимальные
рекоммендации.

Полезно понимать, что стандартно запущенный Ткаббер хранит свои настройки в
Полезно понимать, что стандартно запущенный Ткаббер хранит свои настройки в домашнем каталоге пользователя, то есть эти настройки разделяются всеми копиями Ткаббера в системе (если только вы или разработчик не приняли мер против этого), поэтому вам ничего не мешает иметь несколько копий Ткаббера в системе, даже совершенно различных по идеологии, к примеру, пару старпаков, восемь старкитов, "просто Ткаббер" и Ткаббер с SVN. Они будут жить дружно, поэтому не бойтесь экспериментировать. 
домашнем каталоге пользователя, то есть эти настройки разделяются всеми копиями
Ткаббера в системе (если только вы или разработчик не приняли мер против
этого), поэтому вам ничего не мешает иметь несколько копий Ткаббера в системе,
даже совершенно различных по идеологии, к примеру, пару старпаков, восемь
старкитов, "просто Ткаббер" и Ткаббер с SVN. Они будут жить дружно, поэтому не
бойтесь экспериментировать.

Следует иметь в виду, сравнивая дистрибутивы:
Следует иметь в виду, сравнивая дистрибутивы: 

> _Важен может быть не только тип дистрибутива, но и наличие в нём (или для
 _Важен может быть не только тип дистрибутива, но и наличие в нём (или для него) готовых расширений, а также возможность изменять дистрибутив (к примеру, накладывать неофициальные патчи)._ 
  него) готовых расширений, а также возможность изменять дистрибутив (к
  примеру, накладывать неофициальные патчи)._

## <a id="Каноническая_установка_Tcl_Tk_+_Ткаббер"></a>"Каноническая" установка: Tcl/Tk + Ткаббер

Вначале рассмотрим вариант с наличием полноценного дистрибутива Tcl/Tk в
Вначале рассмотрим вариант с наличием полноценного дистрибутива Tcl/Tk в системе. 
системе.

### <a id="Осевой_вариант"></a>Осевой вариант

Выбор авторов статьи (при этих словах вы должны представлять себе везде седых и
Выбор авторов статьи (при этих словах вы должны представлять себе везде седых и лысых везде, где не седы, старцев с хитрым прищуром мудрых глаз) — "дистрибутив из вашей ОС". Действительно ли вам нужна Самая Последняя Версия? Признайтесь себе: вы знаете чем она отличается от предыдущей? Есть ли в версии из вашего дистрибутива Ужасные Баги, С Которыми Вы Не Можете Жить? Имейте в виду мудрый принцип: "не сломалось — не чини". 
лысых везде, где не седы, старцев с хитрым прищуром мудрых глаз) — "дистрибутив
из вашей ОС". Действительно ли вам нужна Самая Последняя Версия? Признайтесь
себе: вы знаете чем она отличается от предыдущей? Есть ли в версии из вашего
дистрибутива Ужасные Баги, С Которыми Вы Не Можете Жить? Имейте в виду мудрый
принцип: "не сломалось — не чини".

Кроме того, данный подход имеет другие достоинства:
Кроме того, данный подход имеет другие достоинства: 

*  Стандартный пакет означает стандартный подход к управлению ПО. Вы всегда
*  Стандартный пакет означает стандартный подход к управлению ПО. Вы всегда знаете, "чей это файл", можете удалить пакет, а ещё он обновится вместе с дистрибутивом в ходе очередного апгрейда. 
   знаете, "чей это файл", можете удалить пакет, а ещё он обновится вместе с
   дистрибутивом в ходе очередного апгрейда.
*  Если вам повезло с мейнтейнером пакета, ваша пакетная система не только
*  Если вам повезло с мейнтейнером пакета, ваша пакетная система не только поставит вам всё, от чего зависит Ткаббер, но и предложит поставить то, с чем он любит работать. 
   поставит вам всё, от чего зависит Ткаббер, но и предложит поставить то, с
   чем он любит работать.

Безусловно, если в вашей системе есть Ткаббер, то в ней, как минимум, есть
Безусловно, если в вашей системе есть Ткаббер, то в ней, как минимум, есть дистрибутив Tcl/Tk и набор необходимых Ткабберу компонентов. 
дистрибутив Tcl/Tk и набор необходимых Ткабберу компонентов.

Имейте, однако, в виду, что "Ткаббер из ОС" это, в основном, роскошь
Имейте, однако, в виду, что "Ткаббер из ОС" это, в основном, роскошь линуксоидов и эээ... пользователей FreeBSD. Адептам Windows предлагается изучить альтернативы. 
линуксоидов и эээ... пользователей FreeBSD. Адептам Windows предлагается
изучить альтернативы.

Больше всех, пожалуй, повезло пользователям [Debian GNU/Linux](http://www.debian.org):
Больше всех, пожалуй, повезло пользователям [Debian GNU/Linux](http://www.debian.org): один из разработчиков Ткаббера (`xmpp:sgolovan@nes.ru`) является пользователем этой ОС и поддерживает [собственный репозиторий пакетов](http://sgolovan.nes.ru/jabber/), содержащий, помимо прочего, готовые пакеты с наиболее полезными расширениями для Ткаббера. Так что любителям Дебиана достаточно вписать себе в **sources.list** дополнительный репозиторий и наслаждаться. 
один из разработчиков Ткаббера (`xmpp:sgolovan@nes.ru`) является пользователем этой ОС
и поддерживает [собственный репозиторий пакетов](http://sgolovan.nes.ru/jabber/),
содержащий, помимо прочего, готовые пакеты с наиболее полезными расширениями
для Ткаббера. Так что любителям Дебиана достаточно вписать себе в **sources.list**
дополнительный репозиторий и наслаждаться.

В любом случае, почти со стопроцентной уверенностью можно сказать, что
В любом случае, почти со стопроцентной уверенностью можно сказать, что дистрибутив Tcl и Tk есть в любой "десктопной" POSIX-системе. О том, что делать, когда его нет, читайте ниже. 
дистрибутив Tcl и Tk есть в любой "десктопной" POSIX-системе. О том, что
делать, когда его нет, читайте ниже.

Если ваша система не имеет дистрибутива Ткаббера, но имеет дистрибутив Tcl/Tk,
Если ваша система не имеет дистрибутива Ткаббера, но имеет дистрибутив Tcl/Tk, возможно, следует просто скачать стандартный дистрибутив Ткаббера ("исходники") и развернуть его куда-нибудь под **/usr/local/share**. 
возможно, следует просто скачать стандартный дистрибутив Ткаббера ("исходники")
и развернуть его куда-нибудь под **/usr/local/share**.

### <a id="Windows_не_бейсиком_единым..."></a>Windows: не бейсиком единым...

Сотрудники Майкрософт обладают достаточно извращённым вкусом в области языков
Сотрудники Майкрософт обладают достаточно извращённым вкусом в области языков программирования. Поэтому в вашей Windows-системе есть минимум два бейсика и, возможно, минимум одна джава. И ни одного тикля. Не исключено, что недостаток внимания этой фирмы к данному языку сыграл последнему на пользу, избавив его от  смертельного дыхания [одного известного принципа](http://en.wikipedia.org/wiki/Embrace_and_extend). В любом случае, вас касается одна проблема: дистрибутива Tcl/Tk с Windows не поставляется. 
программирования. Поэтому в вашей Windows-системе есть минимум два бейсика и,
возможно, минимум одна джава. И ни одного тикля. Не исключено, что недостаток
внимания этой фирмы к данному языку сыграл последнему на пользу, избавив его от
смертельного дыхания
[одного известного принципа](http://en.wikipedia.org/wiki/Embrace_and_extend).
В любом случае, вас касается одна проблема: дистрибутива Tcl/Tk с Windows не
поставляется.

Стандартом де-факто в области Tcl/Tk под Windows является дистрибутив от фирмы
Стандартом де-факто в области Tcl/Tk под Windows является дистрибутив от фирмы [ActiveState](http://www.activestate.com), скачать который можно [здесь](http://www.activestate.com/Products/ActiveTcl/). Как уверяют авторы, в этом тикле "включены все батарейки", однако они лукавят: далеко не все батарейки там есть. Выкачав 21 мег дистра, вы не получите, например, такой элементарной вещи как [tcllib](http://tcllib.sourceforge.net/). Этот дистрибутив имеет удобную справочную систему, программу **tkcon** и массу других вещей, которая _может_ вам понадобиться (а может — и нет), например, в windows-версиях включает в себя средства интеграции с [Windows Script Host](http://ru.wikipedia.org/wiki/Windows_Script_Host). Какие-либо инструментальные средства, облегчающие жизнь программиста, отсутствуют. Фирма продаёт пакет TclDevKit, содержащий средства отладки и создания автономных программ (последнее на базе технологии StarKit), и Komodo — универсальное IDE для скриптовых языков, включающее средства визуального программирования Tk-форм. 
[ActiveState](http://www.activestate.com), скачать который можно
[здесь](http://www.activestate.com/Products/ActiveTcl/). Как уверяют авторы, в
этом тикле "включены все батарейки", однако они лукавят: далеко не все
батарейки там есть. Выкачав 21 мег дистра, вы не получите, например, такой
элементарной вещи как [tcllib](http://tcllib.sourceforge.net/). Этот
дистрибутив имеет удобную справочную систему, программу **tkcon** и массу
других вещей, которая _может_ вам понадобиться (а может — и нет), например, в
windows-версиях включает в себя средства интеграции с
[Windows Script Host](http://ru.wikipedia.org/wiki/Windows_Script_Host). Какие-либо
инструментальные средства, облегчающие жизнь программиста, отсутствуют. Фирма
продаёт пакет TclDevKit, содержащий средства отладки и создания автономных
программ (последнее на базе технологии StarKit), и Komodo — универсальное IDE
для скриптовых языков, включающее средства визуального программирования
Tk-форм.

[WinTclTk](http://sourceforge.net/projects/wintcltk) — более компактный,
[WinTclTk](http://sourceforge.net/projects/wintcltk) — более компактный, активно развивающийся дистрибутив для Windows. В этот дистрибутив входят Tloona IDE — среда разработки традиционного типа и ХOTclIde — среда объектно-ориентированного программирования в стиле Smalltalk, обе — с отладчиками. Также на сайте разработчиков свободно доступен пакет для создания единого запускаемого файла TkWrapper основанный на FreeWrap — технологии, альтернативной StarKit, основанной на простом ZIP-сжатии. 
активно развивающийся дистрибутив для Windows. В этот дистрибутив входят Tloona
IDE — среда разработки традиционного типа и ХOTclIde — среда
объектно-ориентированного программирования в стиле Smalltalk, обе — с
отладчиками. Также на сайте разработчиков свободно доступен пакет для создания
единого запускаемого файла TkWrapper основанный на FreeWrap — технологии,
альтернативной StarKit, основанной на простом ZIP-сжатии.

> _Внимание!_ Если вы решили установить дистрибутив от
  [ActiveState](http://www.activestate.com), настоятельно рекомендуется принять
 _Внимание!_ Если вы решили установить дистрибутив от [ActiveState](http://www.activestate.com), настоятельно рекомендуется принять к сведению два совета: 
  к сведению два совета:

*  Ставьте стабильную версию (8.4.x и 8.5.x в настоящий момент).
*  _**Не** ставьте_ версию 8.4.15 — она содержит пару неприятных проблем,
*  Ставьте стабильную версию (8.4.x и 8.5.x в настоящий момент). 
*  _**Не** ставьте_ версию 8.4.15 — она содержит пару неприятных проблем, затрагивающих Ткаббер. 
   затрагивающих Ткаббер.

Настало время поговорить по поводу "может".
Настало время поговорить по поводу "может". 

### <a id="Дистрибутив_Tcl_Tk_в_системе_pros_et_contras"></a>Дистрибутив Tcl/Tk в системе: pros et contras

Два основных "за" наличие дистрибутива в системе:
Два основных "за" наличие дистрибутива в системе: 

*  _Расширение возможностей системы_ — вам становится доступен мощный и в то же
*  _Расширение возможностей системы_ — вам становится доступен мощный и в то же время лёгкий  в изучении язык программирования. Возможно, вы захотите использовать его. Кроме того, _на Ткаббере свет клином не сошёлся_ — в мире хватает хороших программ, написанных на тикле; устанавливая дистрибутив Tcl/Tk, вы даёте себе возможность использовать их без дополнительного "геморроя". 
   время лёгкий  в изучении язык программирования. Возможно, вы захотите
   использовать его. Кроме того, _на Ткаббере свет клином не сошёлся_ — в мире
   хватает хороших программ, написанных на тикле; устанавливая дистрибутив
   Tcl/Tk, вы даёте себе возможность использовать их без дополнительного
   "геморроя".
*  _Работа с кодом Ткаббера._ По разным причинам у вас может возникнуть
*  _Работа с кодом Ткаббера._ По разным причинам у вас может возникнуть желание/необходимость работать непосредственно с кодом Ткаббера. Вот эти причины: 
   желание/необходимость работать непосредственно с кодом Ткаббера. Вот эти
   причины:
 *  Вы хотите быть "на переднем крае" разработки и иметь версию, отражающую
 *  Вы хотите быть "на переднем крае" разработки и иметь версию, отражающую текущее состояние репозитория SVN. 
    текущее состояние репозитория SVN.
 *  Вы хотите накладывать на Ткаббер неофициальные и экспериментальные патчи,
 *  Вы хотите накладывать на Ткаббер неофициальные и экспериментальные патчи, или патчи, которые не принимают в основную ветку разработки. 
    или патчи, которые не принимают в основную ветку разработки.
 *  Вы хотите ковыряться с кодом Ткаббера (пусть даже и в режиме "только
 *  Вы хотите ковыряться с кодом Ткаббера (пусть даже и в режиме "только чтение", например, изучения ради), а то и участвовать в разработке. 
    чтение", например, изучения ради), а то и участвовать в разработке.

Несмотря на то, что всё это технически можно делать и со старкитом/старпаком,
Несмотря на то, что всё это технически можно делать и со старкитом/старпаком, при наличии дистрибутива Tcl/Tk это делать значительно проще. 
при наличии дистрибутива Tcl/Tk это делать значительно проще.

Наличие "микро-дистрибутива" в Ткаббер-паке также может быть обманчивым: этот
Наличие "микро-дистрибутива" в Ткаббер-паке также может быть обманчивым: этот дистрибутив, как правило, урезан до максимально возможного уровня, а новые "фичи", добавленные разработчиками в последнюю версию Ткаббера, которую вы хотите потестировать, могут потребовать тех самых "отрезанных" возможностей тикля. (Для справки: именно с такой проблемой сталкивались некоторые владельцы Ткаббер-пака 0.9.8, пытаясь "завести" на своей системе скачанный "основной дистрибутив" версии 0.9.9). 
дистрибутив, как правило, урезан до максимально возможного уровня, а новые
"фичи", добавленные разработчиками в последнюю версию Ткаббера, которую вы
хотите потестировать, могут потребовать тех самых "отрезанных" возможностей
тикля. (Для справки: именно с такой проблемой сталкивались некоторые владельцы
Ткаббер-пака 0.9.8, пытаясь "завести" на своей системе скачанный "основной
дистрибутив" версии 0.9.9).

Ради сохранения баланса Силы, скрепя сердце, приведём и два основных "против":
Ради сохранения баланса Силы, скрепя сердце, приведём и два основных "против": 

*  _Интернет-трафик._ Под Windows скачивание 20-мегабайтного архива из Интернет
*  _Интернет-трафик._ Под Windows скачивание 20-мегабайтного архива из Интернет — единственная возможность получить полноценный дистрибутив Tcl/Tk. На POSIX-системах, возможно, также потребуется качать нужные пакеты. 
   — единственная возможность получить полноценный дистрибутив Tcl/Tk. На
   POSIX-системах, возможно, также потребуется качать нужные пакеты.
*  _Борьба за "чистоту рядов"._ Некоторые пользователи (чрезмерно) ревниво
*  _Борьба за "чистоту рядов"._ Некоторые пользователи (чрезмерно) ревниво относятся к "чистоте" своей системы и противятся установке любого "ах, ещё одного языка программирования!". 
   относятся к "чистоте" своей системы и противятся установке любого "ах, ещё
   одного языка программирования!".

Иногда, впрочем, установка дистрибутива Tcl/Tk не только нежелательна, но и
 Иногда, впрочем, установка дистрибутива Tcl/Tk не только нежелательна, но и невозможна. Если это — ваш случай <s>или, читая предыдущие строчки, вы решили встать на тёмную сторону Силы</s>, следующий раздел — для вас. 
невозможна. Если это — ваш случай <s>или, читая предыдущие строчки, вы решили
встать на тёмную сторону Силы</s>, следующий раздел — для вас.

## <a id="Всё_своё_ношу_с_собой"></a>Всё своё ношу с собой

Собственно, преимущества и недостатки использования "завёрнутых" версий
Собственно, преимущества и недостатки использования "завёрнутых" версий Ткаббера примерно обратны использованию "канонической" установки. 
Ткаббера примерно обратны использованию "канонической" установки.

Плюсы:
Плюсы: 

*  _"Всё в одном"_ — Ткаббер-старпак представляет собой один выполняемый файл,
*  _"Всё в одном"_ — Ткаббер-старпак представляет собой один выполняемый файл, который нужно просто запустить. Ткаббер-старкит — два файла, которые тоже не нужно не только куда-то ставить, но и даже распаковывать. 
   который нужно просто запустить. Ткаббер-старкит — два файла, которые тоже не
   нужно не только куда-то ставить, но и даже распаковывать.
*  При некотором (несложном) "допиливании" Ткаббер-старпак прекрасно умеет
*  При некотором (несложном) "допиливании" Ткаббер-старпак прекрасно умеет работать с носимого устройства хранения данных, например, с флэш-драйва. То же самое относится и к старкиту, только таскать нужно опять же два файла. 
   работать с носимого устройства хранения данных, например, с флэш-драйва. То
   же самое относится и к старкиту, только таскать нужно опять же два файла.
*  Официальные старпаки содержат большинство самых полезных модулей Tcl/Tk,
*  Официальные старпаки содержат большинство самых полезных модулей Tcl/Tk, расширяющих возможности Ткаббера — _отсутствие необходимости в дополнительной установке расширений._ 
   расширяющих возможности Ткаббера — _отсутствие необходимости в
   дополнительной установке расширений._

Минусы проистекают из всё той же "упакованности":
Минусы проистекают из всё той же "упакованности": 

*  Любое изменение "внутренностей" старпака/старкита требует его
*  Любое изменение "внутренностей" старпака/старкита требует его _"разворачивания" (unwrap)_ и последующего _"заворачивания" (wrap)_ (подробнее эти процедуры обсуждаются [здесь](Tkabber_starpack.md)). Это вам понадобится делать, если вы хотите: 
   _"разворачивания" (unwrap)_ и последующего _"заворачивания" (wrap)_
   (подробнее эти процедуры обсуждаются [**здесь**](Tkabber_starpack.md)). Это вам
   понадобится делать, если вы хотите:
 *  добавить модуль Tcl/Tk, расширяющий возможности Ткаббера, которого нет в
 *  добавить модуль Tcl/Tk, расширяющий возможности Ткаббера, которого нет в стандартной поставке старпака/старкита; 
    стандартной поставке старпака/старкита;
 *  наложить какой-либо патч.
*  Официальные дистрибутивы Ткаббера — это стабильные релизы. Если вы хотите
 *  наложить какой-либо патч. 
 
*  Официальные дистрибутивы Ткаббера — это стабильные релизы. Если вы хотите быть "на переднем крае" разработки, но при этом использовать старпак/старкит, то фактически вам придётся поддерживать свою версию такого дистрибутива. 
   быть "на переднем крае" разработки, но при этом использовать
   старпак/старкит, то фактически вам придётся поддерживать свою версию такого
   дистрибутива.

![(!)](../images/Hammer.png) **Сделать:** Вообще-то, конечно, нужна обобщённая
![(!)](../images/Hammer.png) **Сделать:** Вообще-то, конечно, нужна обобщённая статейка про старкиты и старпаки, со ссылкой на систему сборки бадлопа и утилиту архимеда... 
статейка про старкиты и старпаки, со ссылкой на систему сборки бадлопа и
утилиту архимеда...

### <a id="Ткаббер-пак_опять_идёт_не_в_ногу"></a>Ткаббер-пак опять идёт не в ногу

Нелишним будет снова повторить, что последний _официальный_ Ткаббер-пак больше
Нелишним будет снова повторить, что последний _официальный_ Ткаббер-пак больше не содержит Tcl/Tk, поэтому фактически нам нужно рассматривать два воплощения Ткаббер-пака: оснащённое Tcl/Tk и обделённое им. 
не содержит Tcl/Tk, поэтому фактически нам нужно рассматривать два воплощения
Ткаббер-пака: оснащённое Tcl/Tk и обделённое им.

Преимущество Ткаббер-пака по сравнению со старпаками/старкитами Ткаббера
Преимущество Ткаббер-пака по сравнению со старпаками/старкитами Ткаббера заключается в том, что его значительно легче _изменять_ — Ткаббер включён в этот дистрибутив "как есть": не нужно ничего "разворачивать" и потом "сворачивать" обратно для того, чтобы потестировать патч или почитать код. 
заключается в том, что его значительно легче _изменять_ — Ткаббер включён в
этот дистрибутив "как есть": не нужно ничего "разворачивать" и потом
"сворачивать" обратно для того, чтобы потестировать патч или почитать код.

К недостаткам в сравнении со старпаками/старкитами, пожалуй, можно причислить
К недостаткам в сравнении со старпаками/старкитами, пожалуй, можно причислить только то, что он занимает больше места (но зато и стартует быстрее). 
только то, что он занимает больше места (но зато и стартует быстрее).

Ткаббер-пак, _оснащённый дистрибутивом Tcl/Tk,_ обладает таким же уровнем
Ткаббер-пак, _оснащённый дистрибутивом Tcl/Tk,_ обладает таким же уровнем мобильности как и старпак/старкит (например, умеет работать с флэш-драйва), и привязан к конкретной ОС так же, как и старпак (нам известно только о Windows-версиях Ткаббер-пака). Несмотря на то, что в подобном дистрибутиве есть "настоящий" Tcl/Tk, относитесь к этому с определённым скепсисом: это достаточно урезанная версия, содержащая только то, без чего не может обойтись Ткаббер. 
мобильности как и старпак/старкит (например, умеет работать с флэш-драйва), и
привязан к конкретной ОС так же, как и старпак (нам известно только о
Windows-версиях Ткаббер-пака). Несмотря на то, что в подобном дистрибутиве есть
"настоящий" Tcl/Tk, относитесь к этому с определённым скепсисом: это достаточно
урезанная версия, содержащая только то, без чего не может обойтись Ткаббер.

Может возникнуть вопрос: а в чём смысл Ткаббер-пака _без_ микро-дистрибутива
Tcl/Tk внутри? Ответ прост: Ткаббер-пак включает в себя наиболее полезные
пакеты Tcl/Tk, которые делают доступными дополнительные возможности Ткаббера.
Может возникнуть вопрос: а в чём смысл Ткаббер-пака _без_ микро-дистрибутива Tcl/Tk внутри? Ответ прост: Ткаббер-пак включает в себя наиболее полезные пакеты Tcl/Tk, которые делают доступными дополнительные возможности Ткаббера. Можете думать о нём как о "Ткаббере на стероидах". Естественно, можно скачать и поставить дополнительные пакеты "руками", но зачем вам лишний труд? 


Можете думать о нём как о "Ткаббере на стероидах". Естественно, можно скачать и
поставить дополнительные пакеты "руками", но зачем вам лишний труд?

Changes to wiki/ru/Заглавная_страница.md.

1

2
3
4
5
6
7
8
9
10
11
12

13
14
15

16
17
18
19
20
21
22
23
24
25
26
27
28








29
30
31
32
33


34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61


























62
63
64
65
66
67
68
69
70
71









72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96










97
98
99
100
101


102
103
104


105

106
107
108
109
110






111
112
113
114
115
116



117
118
119




120
121
122


123
124
125
126
127

128
129
130
131
132

133
134
135
136
137
138
139
140
141



142
1
2
3
4
5
6
7






8

9

10


11
12
13








14
15
16
17
18
19
20
21
22
23
24


25
26

27


























28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54









55
56
57
58
59
60
61
62
63

























64
65
66
67
68
69
70
71
72
73





74
75



76
77

78
79




80
81
82
83
84
85






86
87
88



89
90
91
92
93


94
95



96

97



98

99





100



101
102
103


+





-
-
-
-
-
-
+
-

-
+
-
-



-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+



-
-
+
+
-

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
-
-
-
+
+
-
+

-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
+

-
-
+
+
-
-
-

-
+
-
-
-

-
+
-
-
-
-
-

-
-
-
+
+
+
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php?title=Заглавная_страница&printable=yes)


# Заглавная страница

Материал из Tkabber Wiki

> _<Существо> Клиент делался не для юзеров.  
> А для тех, кто ценит функциональность и не боится руками работать._

> _(из xmpp:tkabber@conference.jabber.ru)_

Добро пожаловать на официальную страницу документации одного из самых продвинутых клиентов
Добро пожаловать на официальную страницу документации одного из самых продвинутых клиентов протокола [Jabber (XMPP)](http://jabber.org) — [Tkabber](http://tkabber.jabber.ru). 
протокола [Jabber (XMPP)](http://jabber.org) — [Tkabber](http://tkabber.jabber.ru).

Давайте сразу договоримся, что в этом руководстве (по крайней мере в русской версии) писать
Давайте сразу договоримся, что в этом руководстве (по крайней мере в русской версии) писать название программы будем русскими буквами: в конце концов, это отечественный продукт, да и склонять по правилам русского языка проще ;) 
название программы будем русскими буквами: в конце концов, это отечественный продукт, да и
склонять по правилам русского языка проще ;)

## <a id="toc"></a>Содержание

* [1 Содержание вики](#Содержание_вики)
   * [1.1 Теория](#Теория)
   * [1.2 Статьи](#Статьи)
   * [1.3 Разработка](#Разработка)
   * [1.4 Практика](#Практика)
   * [1.5 Запчасти](#Запчасти)
   * [1.6 Обсуждения](#Обсуждения)
   * [1.7 Cлужебные](#Cлужебные)
* [1 Содержание](#Содержание)
 * [1.1 [Теория](Теория.md)](#ТеорияТеория.md)
 * [1.2 [Статьи](Теория.md#Продвинутым_пользователям)](#СтатьиТеория.mdNПродвинутым_пользователям)
 * [1.3 [Разработка](Разработка.md)](#РазработкаРазработка.md)
 * [1.4 [Практика](Практика.md)](#ПрактикаПрактика.md)
 * [1.5 Запчасти](#Запчасти)
 * [1.6 Обсуждения](#Обсуждения)
 * [1.7 Cлужебные](#Cлужебные)
* [2 Краткое описание некоторых статей](#Краткое_описание_некоторых_статей)
* [3 О вики](#О_вики)

## <a id="Содержание_вики"></a>Содержание вики
Для быстрого тематического поиска. Не забудьте, что полный список страниц можно
# <a id="Содержание"></a>Содержание
Для быстрого тематического поиска. Не забудьте, что полный список страниц можно посмотреть [тут.](Служебная_AllPages.md) 
посмотреть [**тут**](Служебная/Все_страницы.md).

### <a id="Теория"></a>[Теория](Теория.md)

*  [**Терминология**](Терминология.md)
*  [**О Ткаббере**](Ткаббер_-_чемпион_.md)
*  [**Config.tcl для начинающих**](Config.tcl_для_начинающих.md)
*  [**Начинающим**](Начинающим.md)
*  [**Настройка Ткаббера: азы и глубже**](Настройка_Ткаббера__азы_и_глубже.md)
*  [**Testimonials, Antimonials, And Eternal Questions**](Testimonials__Antimonials__And_Eternal_Questions.md)

### <a id="Статьи"></a>[Статьи](Теория.md#Продвинутым_пользователям)

*  [**Пересылка файлов: теория**](Пересылка_файлов__теория.md)
*  [**Удалённое управление с помощью send**](Удалённое_управление_с_помощью_send.md)
*  [**Шифрование в Ткаббере**](Шифрование_в_Ткаббере.md)
*  [**Ткаббер наизнанку**](Ткаббер_наизнанку.md)
*  [**Сравнение XMPP-клиентов**](Сравнение_XMPP-клиентов.md)

### <a id="Разработка"></a>[Разработка](Разработка.md)

*  [**Старпак своими руками**](Tkabber_starpack.md)
*  [**Wish и русская раскладка в Windows**](Wish_и_русская_раскладка_в_Windows.md)
*  [**MUC Ignore**](MUC_Ignore.md)
*  [**Nick coloring**](Nick_coloring.md)
*  [**Config dir**](Config_dir.md)
*  [**Спамодавка списками приватности**](Спамодавка_списками_приватности.md)
*  [**Новый вид Tk в 8.5**](Новый_вид_Tk_в_8.5.md)
## <a id="ТеорияТеория.md"></a>[Теория](Теория.md)
 
*  [Терминология](Терминология.md) 
*  [о Ткаббере](Ткаббер_-_чемпион_.md) 
*  [Config.tcl для начинающих](Config.tcl_для_начинающих.md) 
*  [Начинающим](Начинающим.md) 
*  [Настройка Ткаббера: азы и глубже](Настройка_Ткаббера__азы_и_глубже.md) 
*  [Testimonials, Antimonials, And Eternal Questions](Testimonials__Antimonials__And_Eternal_Questions.md) 
  
## <a id="СтатьиТеория.mdNПродвинутым_пользователям"></a>[Статьи](Теория.md#Продвинутым_пользователям)
 
*  [Пересылка файлов: теория](Пересылка_файлов__теория.md) 
*  [Удалённое управление с помощью send](Удалённое_управление_с_помощью_send.md) 
*  [Шифрование в Ткаббере](Шифрование_в_Ткаббере.md) 
*  [Ткаббер наизнанку](Ткаббер_наизнанку.md) 
*  [Сравнение XMPP-клиентов](Сравнение_XMPP-клиентов.md) 
  
## <a id="РазработкаРазработка.md"></a>[Разработка](Разработка.md)
 
*  [Старпак своими руками](Tkabber_starpack.md) 
*  [Wish и русская раскладка в Windows](Wish_и_русская_раскладка_в_Windows.md) 
*  [MUC Ignore](MUC_Ignore.md) 
*  [Nick coloring](Nick_coloring.md) 
*  [Config dir](Config_dir.md) 
*  [Спамодавка списками приватности](Спамодавка_списками_приватности.md) 
*  [Новый вид Tk в 8.5](Новый_вид_Tk_в_8.5.md) 

### <a id="Практика"></a>[Практика](Практика.md)

*  [**Ткаббер ЧаВо**](Ткаббер_ЧаВо.md)
*  [**Шрифты**](Шрифты.md)
*  [**Смайлики и аватары**](Смайлики_и_аватары.md)
*  [**Цветовые темы и пиктограммы**](Цветовые_темы_и_пиктограммы.md)
*  [**Проблемы со звуком**](Проблемы_со_звуком.md)
*  [**Звуковые схемы**](Звуковые_схемы.md)
*  [**Нетривиальные настройки**](Нетривиальные_настройки.md)
## <a id="ПрактикаПрактика.md"></a>[Практика](Практика.md)
 
*  [Ткаббер ЧаВо](Ткаббер_ЧаВо.md) 
*  [Шрифты](Шрифты.md) 
*  [Смайлики и аватары](Смайлики_и_аватары.md) 
*  [Цветовые темы и пиктограммы](Цветовые_темы_и_пиктограммы.md) 
*  [Проблемы со звуком](Проблемы_со_звуком.md) 
*  [Звуковые схемы](Звуковые_схемы.md) 
*  [Нетривиальные настройки](Нетривиальные_настройки.md) 

### <a id="Запчасти"></a>Запчасти

*  [**Плагины**](Плагины.md)
*  [**Патчи**](Патчи.md)

### <a id="Обсуждения"></a>Обсуждения

*  [**Планы на будущее**](Планы_на_будущее.md)
*  [**Плагины/AntiSPIM**](Плагины/AntiSPIM.md)
*  [**Чебуратор**](Чебуратор.md)

### <a id="Cлужебные"></a>Cлужебные

[*Статистика*](Служебная/Статистика.md) :: [*Участники*](Служебная/Участники.md) :: [*Требуется*](Служебная/Требуется.md)

## <a id="Краткое_описание_некоторых_статей"></a>Краткое описание некоторых статей
*  В статье [**"О Ткаббере"**](Ткаббер_-_чемпион_.md) мы пытаемся рассказать потенциальному
   пользователю об основных плюсах и минусах (да-да, они тоже есть ;)) этого клиента.
*  В разделе [**"Теория"**](Теория.md) вашему вниманию предложен ряд статей разного
   уровня сложности, посвящённых различным аспектам работы с Ткаббером, начиная с
   "Быстрого старта" и заканчивая попытками простым языком рассказать о довольно-таки
   сложных вещах. Очень рекомендуется потихоньку ознакомиться со всеми статьями этого раздела.
*  В разделе [**"Практика"**](Практика.md) вы найдёте полезные советы по "укрощению"
   Ткаббера, а также описания различных патчей и плагинов, расширяющих его функциональность.
  
## <a id="Запчасти"></a>Запчасти
 
*  лагины](Плагины.md) 
*  атчи](Патчи.md) 
  
## <a id="Обсуждения"></a>Обсуждения
 
*  [Планы на будущее](Планы_на_будущее.md) 
*  лагины/AntiSPIM](Плагины/AntiSPIM.md) 
   В общем, это для тех, кто любит ручной труд.
*  [**"Ткаббер ЧаВо"**](Ткаббер_ЧаВо.md) — **Ча**сто задаваемые **Во**просы по Ткабберу
   (или F.A.Q., если так будет привычнее). Здесь потихоньку собираются решения самых
   распространённых проблем.
*  Страница [**"Ссылки"**](Ссылки.md) — коллекция линков на внешние ресурсы, посвящённые
*  [Чебуратор](Чебуратор.md) 

   как самому Ткабберу, так и протоколу Jabber, языку, на котором Ткаббер
   написан — [Tcl/Tk](http://tcl.tk) и прочим вещам, имеющим ко всему этому отношение.

## <a id="Cлужебные"></a>Cлужебные
 
Ещё несколько ссылок на крупные разделы вики:
[Статистика](Служебная_Statistics.md) :: [Участники](Служебная_ListUsers.md) :: [Требуется](Служебная_WantedPages.md) 

*  [**"Терминология"**](Терминология.md) — небольшой глоссарий, цель которого — облегчить
   новичкам понимание некоторых терминов из сфер, сопряжённых с IM, Jabber, Tcl/Tk, программированием.
*  [**"Плагины"**](Плагины.md) — раздел, посвящённый официальным и неофициальным
   (самописным) плагинам к Ткабберу.
# <a id="Краткое_описание_некоторых_статей"></a>Краткое описание некоторых статей
*  В статье **["О Ткаббере"](Ткаббер_-_чемпион_.md)** мы пытаемся рассказать потенциальному пользователю об основных плюсах и минусах (да-да, они тоже есть ;)) этого клиента. 
*  В разделе **["Теория"](Теория.md)** вашему вниманию предложен ряд статей разного уровня сложности, посвящённых различным аспектам работы с Ткаббером, начиная с "Быстрого старта" и заканчивая попытками простым языком рассказать о довольно-таки сложных вещах. Очень рекомендуется потихоньку ознакомиться со всеми статьями этого раздела. 
*  В разделе **["Практика"](Практика.md)** вы найдёте полезные советы по "укрощению" Ткаббера, а также описания различных патчей и плагинов, расширяющих его функциональность. В общем, это для тех, кто любит ручной труд. 
*  **["Ткаббер ЧаВо"](Ткаббер_ЧаВо.md)** — **Ча**сто задаваемые **Во**просы по Ткабберу (или F.A.Q., если так будет привычнее). Здесь потихоньку собираются решения самых распространённых проблем. 
*  Страница **["Ссылки"](Ссылки.md)** — коллекция линков на внешние ресурсы, посвящённые как самому Ткабберу, так и протоколу Jabber, языку, на котором Ткаббер написан — [Tcl/Tk](http://tcl.tk) и прочим вещам, имеющим ко всему этому отношение. 
*  [**"Патчи"**](Патчи.md) — тут речь идёт о правках кода Ткаббера, позволяющих расширить
   его функциональность.
*  [**"Pages"**](Pages.md) — этакий реестр статей этой вики (неполный). Создана для того,
   чтобы можно было давать ссылки на статьи в конференциях и других местах, где не поддерживаются
   тэги HTML. Например, вместо того, чтобы давать ссылку вида
   **https://chiselapp.com/user/sgolovan/repository/tkabber-wiki/doc/tip/wiki/ru/%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B.md**

Ещё несколько ссылок на крупные разделы вики: 

   (далеко не самый жуткий вариант) можно добавить линк на неё на странице pages и дать уже эту ссылку:
   **https://chiselapp.com/user/sgolovan/repository/tkabber-wiki/doc/tip/wiki/ru/Pages#plugins**.
   Лишний клик окупается более внятным и коротким написанием.
*  **["Терминология"](Терминология.md)** — небольшой глоссарий, цель которого — облегчить новичкам понимание некоторых терминов из сфер, сопряжённых с IM, Jabber, Tcl/Tk, программированием. 
*  **["Плагины"](Плагины.md)** — раздел, посвящённый официальным и неофициальным (самописным) плагинам к Ткабберу. 
*  **["Патчи"](Патчи.md)** — тут речь идёт о правках кода Ткаббера, позволяющих расширить его функциональность. 
*  **["Pages"](Pages.md)** — этакий реестр статей этой вики (неполный). Создана для того, чтобы можно было давать ссылки на статьи в конференциях и других местах, где не поддерживаются тэги HTML. Например, вместо того, чтобы давать ссылку вида http://ru.tkabber.jabe.ru/index.php/%D0%9F%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B (далеко не самый жуткий вариант) можно добавить линк на неё на странице pages и дать уже эту ссылку: **http://tkabber.jabe.ru/index.php/pages\#plugins**. Лишний клик окупается более внятным и коротким написанием. 

## <a id="О_вики"></a>О вики
По вопросам организации этой вики обращайтесь к [**Bigote**](Участник_Bigote.md) (русский,
# <a id="О_вики"></a>О вики
По вопросам организации этой вики обращайтесь к [Участник:bigote](Участник_Bigote.md) (русский, английский, испанский, каталанский), [Участник:kostix](Участник_Kostix.md) (русский, английский) или [Участник:lknight](Участник_Lknight.md) (русский, английский) — нас можно найти также на вышеупомянутой конференции `xmpp:tkabber@conference.jabber.ru`. 
английский, испанский, каталанский), [**Kostix**](Участник_Kostix.md) (русский,
английский) или [**LKnight**](Участник_Lknight.md) (русский, английский) — нас можно
найти также на вышеупомянутой конференции `xmpp:tkabber@conference.jabber.ru`.

Работа над вики доступна для всех — регистрация свободна. Проект многоязычный, в настоящий
Работа над вики доступна для всех — регистрация свободна. Проект многоязычный, в настоящий момент существует четыре языковые версии: русский, английский, испанский и украинский. Если вы хотите перевести статьи вики на какой-либо другой язык, пожалуйста, свяжитесь с нами. При работе над переводом вам поможет наша **[Справка](Tkabber_Wiki_Справка.md).** 
момент существует четыре языковые версии: русский, английский, испанский и украинский.
Если вы хотите перевести статьи вики на какой-либо другой язык, пожалуйста, свяжитесь с нами.
При работе над переводом вам поможет наша [**Справка**](Tkabber_Wiki_Справка.md).

Если вы настроены серьёзно в плане помочь этой вики и Ткабберу мозгами и руками, просьба
Если вы настроены серьёзно в плане помочь этой вики и Ткабберу мозгами и руками, просьба ознакомиться с нашими **[планами на будущее](Планы_на_будущее.md)**, чтобы не изобретать велосипед. Если у вас есть свои идеи по части новшеств, которые вы хотите воплотить, просьба добавлять их на той странице, чтобы они были видны остальным участникам проекта. Если у вас нету опыта работы с вики, на странице **[Справки](Tkabber_Wiki_Справка.md)** есть очень полезные ссылки на тему оформления тегов, ссылок и прочего. 
ознакомиться с нашими [**планами на будущее**](Планы_на_будущее.md), чтобы не изобретать
велосипед. Если у вас есть свои идеи по части новшеств, которые вы хотите воплотить,
просьба добавлять их на той странице, чтобы они были видны остальным участникам проекта.
Если у вас нету опыта работы с вики, на странице [**Справки**](Tkabber_Wiki_Справка.md)
есть очень полезные ссылки на тему оформления тегов, ссылок и прочего.

В последнее время нас спрашивают, who is who в конференции и на вики. Старожил конференции
и один из основателей вики [**Bigote**](Участник_Bigote.md) готов рассказать
вам [**историю их создания**](История_вики.md), если вы не пожалеете для старика пинты
В последнее время нас спрашивают, who is who в конференции и на вики. Старожил конференции и один из основателей вики [Bigote](Участник_Bigote.md) готов рассказать вам [историю их создания](История_вики.md), если вы не пожалеете для старика пинты пива — промочить глотку ;-D 


пива — промочить глотку ;-D

Changes to wiki/ru/Загрузка_настроек.md.

1

2
3
4
5
6
7

8
9

10
11
12
13
14
15

16
17
18
19

20
21
22
23
24

25
26
27
28

29
30
31

32
33

34
35

36
37
38
39



40
41
42

43
44
45


46
47
48
49
50
51





52
53
54
55
56




57
58
59

60
61
62
63

64
65
66
67
68
69
70
71
72
73



1
2
3
4
5
6
7

8
9

10




11

12


13

14



15

16


17

18

19

20
21

22
23

24
25



26
27
28



29



30
31






32
33
34
35
36





37
38
39
40

41

42
43
44
45

46






47



48
49
50

+





-
+

-
+
-
-
-
-

-
+
-
-

-
+
-
-
-

-
+
-
-

-
+
-

-
+

-
+

-
+

-
-
-
+
+
+
-
-
-
+
-
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
-

-
+



-
+
-
-
-
-
-
-

-
-
-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Загрузка_настроек/index.html)


# Загрузка настроек

Материал из Tkabber Wiki

## <a id="Хуки"></a>  Хуки
## <a id="Хуки"></a>  Хуки 

"Хуком" в Ткаббере называется некоторое _событие_ (условия наступления которого
"Хуком" в Ткаббере называется некоторое _событие_ (условия наступления которого строго оговорены и обычно отражены в названии хука), с которым связаны _обработчики_ данного события. Некоторые события происходят лишь однократно в ходе работы Ткаббера (например, "выход из программы"), другие — многократно (например, "обработка нового входящего сообщения"). 
строго оговорены и обычно отражены в названии хука), с которым связаны
_обработчики_ данного события. Некоторые события происходят лишь однократно в
ходе работы Ткаббера (например, "выход из программы"), другие — многократно
(например, "обработка нового входящего сообщения").

Механизм хуков предоставляет интерфейс для закрепления обработчиков за
Механизм хуков предоставляет интерфейс для закрепления обработчиков за соответствующими хуками. В качестве обработчиков выступают _скрипты_<sup>1</sup>. 
соответствующими хуками. В качестве обработчиков выступают
_скрипты_<sup>1</sup>.

С каждым обработчиком связан _приоритет,_ который определяет очерёдность
С каждым обработчиком связан _приоритет,_ который определяет очерёдность выполнения данного обработчика по отношению к остальным обработчикам данного хука. Очерёдность выполнения обработчиков с одинаковым приоритетом не определена. 
выполнения данного обработчика по отношению к остальным обработчикам данного
хука. Очерёдность выполнения обработчиков с одинаковым приоритетом не
определена.

Приоритет обработчика задаётся в виде целого числа. Меньшее число означает
Приоритет обработчика задаётся в виде целого числа. Меньшее число означает более высокий приоритет; обработчики вызываются в порядке уменьшения приоритета (увеличения соответствующих чисел). 
более высокий приоритет; обработчики вызываются в порядке уменьшения приоритета
(увеличения соответствующих чисел).

Если приоритет не указан явно, обработчик получает _приоритет по умолчанию,_
Если приоритет не указан явно, обработчик получает _приоритет по умолчанию,_ который равен 50<sup>2</sup>. 
который равен 50<sup>2</sup>.

![(!)](../images/Hammer.png) **Сделать:** написать про "return stop"
![(!)](../images/Hammer.png) **Сделать:** написать про "return stop" 

## <a id="Ход_загрузки_Ткаббера"></a>  Ход загрузки Ткаббера
## <a id="Ход_загрузки_Ткаббера"></a>  Ход загрузки Ткаббера 

Процесс **wish**:
Процесс **wish**: 

1. Читает стартовый (главный) модуль Ткаббера, который:
   1. Грузит модуль, реализующий механизм работы с хуками.
   1. Определяет хуки **postload\_hook** и **finload\_hook**; вешает на каждый
1.  Читает стартовый (главный) модуль Ткаббера, который: 
 1.  Грузит модуль, реализующий механизм работы с хуками. 
 1.  Определяет хуки **postload\_hook** и **finload\_hook**; вешает на каждый хук по обработчику: процедуру **postload** на **postload\_hook** и **finload** — на **finload\_hook**. 
      хук по обработчику: процедуру **postload** на **postload\_hook** и
      **finload** — на **finload\_hook**.
   1. Если определена переменная окружения **TKABBER\_SITE\_CONFIG**, читает
 1.  Если определена переменная окружения **TKABBER\_SITE\_CONFIG**, читает файл с названием, хранящимся в этой переменной окружения. 
      файл с названием, хранящимся в этой переменной окружения.
   1. Читает _конфиг пользователя_ — **~/.tkabber/config.tcl**.
   1. Грузит модуль, реализующий механизм работы с базой данных настроек (customize).
 1.  Читает _конфиг пользователя_ — **~/.tkabber/config.tcl**. 
 1.  Грузит модуль, реализующий механизм работы с базой данных настроек (customize). 
      1. Этот модуль регистрирует обработчик хука **postload\_hook** с
	 приоритетом **60**. Задача обработчика — прочитать настройки Ткаббера
	 из файла **~/.tkabber/custom.tcl**.
   1. Загружает [**плагины сайта**](Плагины.md#Плагинология).
   1. Загружает [**плагины пользователя**](Плагины.md#Плагинология).
   1. Выполняет зарегистрированные на данный момент обработчики хука
  1.  Этот модуль регистрирует обработчик хука **postload\_hook** с приоритетом **60**. Задача обработчика — прочитать настройки Ткаббера из файла **~/.tkabber/custom.tcl**. 
 
 1.  Загружает [плагины сайта](Плагины.md#Плагинология). 
 1.  Загружает [плагины пользователя](Плагины.md#Плагинология). 
 1.  Выполняет зарегистрированные на данный момент обработчики хука **postload\_hook** (при этом читается содержимое базы данных настроек). 
      **postload\_hook** (при этом читается содержимое базы данных настроек).
   1. Загружает модуль **iface.tcl**, который
      ![(!)](../images/Hammer.png) **Сделать:**  написать
   1. Выполняет обработчики хука **finload\_hook**.
1.  Переходит к выполнению главного цикла событий Tk, то есть начиная с этого
 1.  Загружает модуль **iface.tcl**, который ![(!)](../images/Hammer.png) **Сделать:**  написать 
 1.  Выполняет обработчики хука **finload\_hook**. 
 
1.  Переходит к выполнению главного цикла событий Tk, то есть начиная с этого момента загрузка Ткаббера завершена. 
    момента загрузка Ткаббера завершена.

## <a id="Следствия"></a>  Следствия
## <a id="Следствия"></a>  Следствия 

---

<sup>1</sup> Чтобы не забивать голову, достаточно считать, что скрипт это
<sup>1</sup> Чтобы не забивать голову, достаточно считать, что скрипт это самостоятельный "кусок кода", то есть нечто такое, что интерпретатор тикля может "выполнить". Главное условие, которе должно соблюдаться при написании скрипта: он должен представлять собой [_одно слово (word)_ в терминах тикля](http://wiki.tcl.tk/14940); поэтому многострочный скрипт обычно заключают в фигурные скобки `{ }`, т.к. они как раз выполняют группировку текста в слово. 
самостоятельный "кусок кода", то есть нечто такое, что интерпретатор тикля
может "выполнить". Главное условие, которе должно соблюдаться при написании
скрипта: он должен представлять собой
[_одно слово (word)_ в терминах тикля](http://wiki.tcl.tk/14940); поэтому
многострочный скрипт обычно заключают в фигурные скобки `{ }`, т.к. они как раз
выполняют группировку текста в слово.

<sup>2</sup> Приоритет, равный 100, обычно назначается "обработчику по
умолчанию" ("fall-through handler"). ![(!)](../images/Hammer.png) **Сделать:**
написать -- зачем
<sup>2</sup> Приоритет, равный 99, обычно назначается "обработчику по умолчанию" ("fall-through handler"). ![(!)](../images/Hammer.png) **Сделать:**  написать -- зачем 


Changes to wiki/ru/Звуковые_схемы.md.

1

2
3
4
5
6
7

8
9
10
11
12
13
14
15
16
17
18
19







20
21
22
23
24


25

26
27
28
29
30

31
32
33
34
35
36

37
38

39
40
41
42

43
44
45
46
47
48
49
50
51
52

53
54

55
56
57
58

59
60
61
62
63

64
65

66
67
68
69

70
71
72
73
74
75
76
77

78
79
80
81

82
83
84
85

86
87

88
89
90
91

92
93
94



1
2
3
4
5
6
7

8

9
10
11
12







13
14
15
16
17
18
19
20
21
22
23
24
25
26

27



28

29


30
31
32

33
34

35
36
37
38

39








40

41
42

43
44
45
46

47



48

49
50

51
52
53
54

55




56
57
58

59


60

61
62
63
64

65
66

67
68
69
70

71

72

73
74
75

+





-
+
-




-
-
-
-
-
-
-
+
+
+
+
+
+
+





+
+
-
+
-
-
-

-
+
-
-



-
+

-
+



-
+
-
-
-
-
-
-
-
-

-
+

-
+



-
+
-
-
-

-
+

-
+



-
+
-
-
-
-



-
+
-
-

-
+



-
+

-
+



-
+
-

-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Звуковые_схемы/index.html)


# Звуковые схемы

Материал из Tkabber Wiki

На этой странице когда-нибудь появится огромное количество новых звуковых схем
На этой странице когда-нибудь появится огромное количество новых звуковых схем для Ткаббера. 
для Ткаббера.

## <a id="toc"></a>Содержание

* [1 Схема "Акустика" (она же будущая дефолтная)](#Схема_Акустика_она_же_будущая_дефолтная)
   * [1.1 1-я версия](#1-я_версия)
   * [1.2 2-я версия](#2-я_версия)
   * [1.3 3-я версия](#3-я_версия)
   * [1.4 4-я версия, вошедшая в транк](#4-я_версия_вошедшая_в_транк)
      * [1.4.1 Та же версия, но уже в стерео](#Та_же_версия_но_уже_в_стерео)
      * [1.4.2 Та же версия, но уже в Hi-Fi качестве](#Та_же_версия_но_уже_в_Hi-Fi_качестве)
   * [1.5 Creative Common License](#Creative_Common_License)
 * [1.1 1-я версия](#1-я_версия)
 * [1.2 2-я версия](#2-я_версия)
 * [1.3 3-я версия](#3-я_версия)
 * [1.4 4-я версия, вошедшая в транк](#4-я_версия_вошедшая_в_транк)
  * [1.4.1 Та же версия, но уже в стерео](#Та_же_версия_но_уже_в_стерео)
  * [1.4.2 Та же версия, но уже в Hi-Fi качестве](#Та_же_версия_но_уже_в_Hi-Fi_качестве)
 * [1.5 Creative Common License](#Creative_Common_License)

# <a id="Схема_Акустика_она_же_будущая_дефолтная"></a>Схема "Акустика" (она же будущая дефолтная)

![](../images/180px-Acoustic_sound_scheme_instruments.jpg)

![](../images/magnify-clip.png)

Пока что выкладываю первый блин — схему, претендующую на то, чтобы стать новой
Пока что выкладываю первый блин — схему, претендующую на то, чтобы стать новой дефолтной схемой. Буду признателен за отзывы, пожелания, замечания и конструктивную критику. Направлять их либо прямиком мне, либо высказывать в конференции, либо оставлять тут в обсуждении статьи. 
дефолтной схемой. Буду признателен за отзывы, пожелания, замечания и
конструктивную критику. Направлять их либо прямиком мне, либо высказывать в
конференции, либо оставлять тут в обсуждении статьи.

Звуки записаны и смикшированы буквально сегодня, поэтому конвертацией в более
Звуки записаны и смикшированы буквально сегодня, поэтому конвертацией в более лёгкие файлы пока не занимался, так что весит изрядно. Окончательный вариант, конечно же, подгоню по громкости, размеру и т.п. 
лёгкие файлы пока не занимался, так что весит изрядно. Окончательный вариант,
конечно же, подгоню по громкости, размеру и т.п.

## <a id="1-я_версия"></a>1-я версия

*  **Файл:** [*New\_default\_tkabber\_sound\_theme.zip*](../files/New_default_tkabber_sound_theme.zip) (1218 Кб)
*  **Файл:** [Media:New\_default\_tkabber\_sound\_theme.zip](../files/New_default_tkabber_sound_theme.zip) (1218 Кб) 

[**ycbl**](Участник_Bigote.md) 03:31, 14 сентября 2008 (MSD)
[ycbl](Участник_Bigote.md) 03:31, 14 сентября 2008 (MSD) 

## <a id="2-я_версия"></a>2-я версия

Я воткнул сюда несколько разных вариантов звука disconnect. Большая просьба
Я воткнул сюда несколько разных вариантов звука disconnect. Большая просьба выбрать наилучший. Лично мне нравится disconnect4. Ещё одно пояснение: chat\_my\_message и groupchat\_my\_message по идее было решено сделать одинаковыми, потому что и так ясно, что этот звук сопровождает отправку собственного сообщения. Но всё же я решил сделать один (для групчата) покороче, подрезав более длинный. На то две причины: во-первых, кому-то эта разница на слух может оказаться полезной, и он решит использовать оба звука; во-вторых, даже если захочется оставить лишь один звук, есть возможность выбрать, какой именно взять. 
выбрать наилучший. Лично мне нравится disconnect4. Ещё одно пояснение:
chat\_my\_message и groupchat\_my\_message по идее было решено сделать
одинаковыми, потому что и так ясно, что этот звук сопровождает отправку
собственного сообщения. Но всё же я решил сделать один (для групчата) покороче,
подрезав более длинный. На то две причины: во-первых, кому-то эта разница на
слух может оказаться полезной, и он решит использовать оба звука; во-вторых,
даже если захочется оставить лишь один звук, есть возможность выбрать, какой
именно взять.

*  **Файл:** [*Acoustic.theme\_2nd.version.zip*](../files/Acoustic.theme_2nd.version.zip) (1540 Кб)
*  **Файл:** [Media:Acoustic.theme\_2nd.version.zip](../files/Acoustic.theme_2nd.version.zip) (1540 Кб) 

[**ycbl**](Участник_Bigote.md) 23:32, 16 сентября 2008 (MSD)
[ycbl](Участник_Bigote.md) 23:32, 16 сентября 2008 (MSD) 

## <a id="3-я_версия"></a>3-я версия

Звуки выверены, громкости отлажены. Предлагается к усиленному тестированию,
Звуки выверены, громкости отлажены. Предлагается к усиленному тестированию, чтобы устранить все возможно оставшиеся изъяны. Если поправок не будет, можно использовать этот файл как Hi-Fi (ну, почти Hi-Fi) версию схемы, потому что в состав Ткаббера она попадёт уже не в 44100-качестве. 
чтобы устранить все возможно оставшиеся изъяны. Если поправок не будет, можно
использовать этот файл как Hi-Fi (ну, почти Hi-Fi) версию схемы, потому что в
состав Ткаббера она попадёт уже не в 44100-качестве.

*  **Файл:** [*3rd-version\_final.zip*](../files/3rd-version_final.zip) (547 Кб)
*  **Файл:** [Media:3rd-version\_final.zip](../files/3rd-version_final.zip) (547 Кб) 

[**ycbl**](Участник_Bigote.md) 08:46, 22 сентября 2008 (MSD)
[ycbl](Участник_Bigote.md) 08:46, 22 сентября 2008 (MSD) 

## <a id="4-я_версия_вошедшая_в_транк"></a>4-я версия, вошедшая в транк

Практически идентична 3-й версии, буквально пара мелких поправок. В транк
Практически идентична 3-й версии, буквально пара мелких поправок. В транк попала моно-версия звуков, сконвертированных в 11025 Hz (тем не менее, два-три звука пришлось сконвертировать в 22050, потому что в 11025 у них сильно терялось качество). Здесь эта версия не выкладывается, скачать её можно через [SVN](SVN_disclaimer.md). 
попала моно-версия звуков, сконвертированных в 11025 Hz (тем не менее, два-три
звука пришлось сконвертировать в 22050, потому что в 11025 у них сильно
терялось качество). Здесь эта версия не выкладывается, скачать её можно через
[**SVN**](SVN_disclaimer.md).

### <a id="Та_же_версия_но_уже_в_стерео"></a>Та же версия, но уже в стерео

Те же 11025 Hz, но уже стерео — для тех, кто хочет дёшево и сердито
Те же 11025 Hz, но уже стерео — для тех, кто хочет дёшево и сердито наслаждаться объёмным звучанием :) Правда, два звука всё равно остались в моно, потому что так были записаны. 
наслаждаться объёмным звучанием :) Правда, два звука всё равно остались в моно,
потому что так были записаны.

*  **Файл:** [*New\_default\_theme\_11k-22k\_stereo.zip*](../files/New_default_theme_11k-22k_stereo.zip) (173 Кб)
*  **Файл:** [Media:New\_default\_theme\_11k-22k\_stereo.zip](../files/New_default_theme_11k-22k_stereo.zip) (173 Кб) 

### <a id="Та_же_версия_но_уже_в_Hi-Fi_качестве"></a>Та же версия, но уже в Hi-Fi качестве

44100 Hz, 32 bit. Для тех, кому процессор не помеха :)
44100 Hz, 32 bit. Для тех, кому процессор не помеха :) 

*  **Файл:** [*New\_default\_theme\_44100.zip*](../files/New_default_theme_44100.zip) (544 Кб)
*  **Файл:** [Media:New\_default\_theme\_44100.zip](../files/New_default_theme_44100.zip) (544 Кб) 

## <a id="Creative_Common_License"></a>Creative Common License

Эта звуковая схема (все версии, начиная с самой первой) распространяется под
Эта звуковая схема (все версии, начиная с самой первой) распространяется под лицензией [Creative Common License](http://creativecommons.org/licenses/by-nc-sa/3.0/). 
лицензией [Creative Common License](http://creativecommons.org/licenses/by-nc-sa/3.0/).

[**ycbl**](Участник_Bigote.md) 00:55, 27 сентября 2008 (MSD)
[ycbl](Участник_Bigote.md) 00:55, 27 сентября 2008 (MSD) 


Changes to wiki/ru/История_вики.md.

1

2
3
4
5
6
7
8


9
10

11
12
13

14
15

16
17
18
19
20
21
22
23
24
25
26


27
28
29
30
31
32
33
34
35
36
37
38
39
40
41


42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60


61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79


80
81
82
83
84
85
86
87
88
89
90
91
92




93
94
95
96
1
2
3
4
5
6
7


8
9
10

11

12

13
14

15
16
17
18
19
20
21
22
23
24


25
26












27


28
29
















30


31
32
















33


34
35








36




37
38
39
40





+





-
-
+
+

-
+
-

-
+

-
+









-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-

-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
-
+
+
-
-
-
-
-
-
-
-

-
-
-
-
+
+
+
+
-
-
-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/История_вики/index.html)


# История вики

Материал из Tkabber Wiki

> *— Подымите мне вики: не вижу! — сказал подземным голосом Вий,  
> — и все сонмище кинулось подымать ему вики.*
— Подымите мне вики: не вижу! — сказал подземным голосом Вий,
 — и все сонмище кинулось подымать ему вики. 

> *почти © ["Вий"](http://www.fictionbook.ru/en/author/gogol_nikolayi_vasilevich/mirgorod_3_viyi/),
почти © ["Вий"](http://www.fictionbook.ru/en/author/gogol_nikolayi_vasilevich/mirgorod_3_viyi/), [Н. В. Гоголь](http://www.fictionbook.ru/en/author/gogol_nikolayi_vasilevich/) 
  [Н. В. Гоголь](http://www.fictionbook.ru/en/author/gogol_nikolayi_vasilevich/)*

Возьму на себя смелость осветить историю конференции и вики. Начнём, как водится, с самого начала.
Возьму на себя смелость осветить историю конференции и вики. Начнём, как водится, с самого начала. 

(Следует отметить, что изложение ведётся от лица трилобита [**Bigote**](Участник_Bigote.md).)
(Следует отметить, что изложение ведётся от лица трилобита [Bigote](Участник_Bigote.md).) 

## <a id="toc"></a>Содержание

* [1 Палеолит](#Палеолит)
* [2 Мезолит](#Мезолит)
* [3 Неолит](#Неолит)
* [4 Бронзовый век](#Бронзовый_век)
* [5 Железный век](#Железный_век)

## <a id="Палеолит"></a>Палеолит
Когда я осваивал Jabber и выбирал себе программу-клиент, после нескольких проб
# <a id="Палеолит"></a>Палеолит
Когда я осваивал Jabber и выбирал себе программу-клиент, после нескольких проб остановился на Ткаббере. Клиент мне понравился своей мощью, но как водится, много чего я не понимал и не умел. Когда я добрался до Дискавери и обнаружил в списке конференций название Tkabber, радости моей не было предела — наконец-то авторы Ткаббера или по крайней мере компетентные пользователи разъяснят мне волнующие вопросы. Зайдя внутрь, я обнаружил несколько строчек вида "Есть тут кто?" — всё, что осталось от предыдущих посетителей. Я понял, что авторы и опытные пользователи просто редко сюда заглядывают, и решил их подождать, благо условия интернета позволяли. Ожидая, я отпустил длинные усы и сам стал немного более опытным пользователем, чем был вначале. Время от времени заходили посетители, и если набирались терпения и дожидались меня, мы иногда обсуждали проблемы, возникающие при работе с Ткаббером. Но потом они уходили, и я снова оставался один. 
остановился на Ткаббере. Клиент мне понравился своей мощью, но как водится,
много чего я не понимал и не умел. Когда я добрался до Дискавери и обнаружил в
списке конференций название Tkabber, радости моей не было предела — наконец-то
авторы Ткаббера или по крайней мере компетентные пользователи разъяснят мне
волнующие вопросы. Зайдя внутрь, я обнаружил несколько строчек вида "Есть тут
кто?" — всё, что осталось от предыдущих посетителей. Я понял, что авторы и
опытные пользователи просто редко сюда заглядывают, и решил их подождать, благо
условия интернета позволяли. Ожидая, я отпустил длинные усы и сам стал немного
более опытным пользователем, чем был вначале. Время от времени заходили
посетители, и если набирались терпения и дожидались меня, мы иногда обсуждали
проблемы, возникающие при работе с Ткаббером. Но потом они уходили, и я снова
оставался один.

## <a id="Мезолит"></a>Мезолит
И вот в один прекрасный день в комнату зашёл [**Lknight**](Участник_Lknight.md). Он
# <a id="Мезолит"></a>Мезолит
И вот в один прекрасный день в комнату зашёл [Lknight](Участник_Lknight.md). Он не ушёл, как другие, а остался и стал активно помогать другим пользователям (которые, видя в списке конференций в Дискавери больше одного человека напротив слова Tkabber, стали заходить почаще). Я к тому времени пришёл к мысли, что неплохо бы написать что-то вроде мануала по Ткабберу "для чайников", потому что большинство заходивших посетителей не интересовали тонкие нюансы протокола XMPP, но более приземлённые вопросы: "Почему у меня видны такие корявые шрифты?" Опыт в написании документации у меня [был](http://netroad.ru/~bigote/articles.htm), но после совещания с Lknight'ом я понял, что обычные мануалы — это прошлый век. Сейчас такие вещи надо делать в виде базы знаний на движках wiki. Кроме того, мы подумали, что не помешало бы включить ведение логов конференции, чтобы решения некоторых задач можно было найти поисковиками. Окрылённый, я понёсся на `xmpp:devel@conference.jabber.ru` — просить админов включить логи и "поднять" вики на сервере jabber.ru. Мне было предложено вести логи путём установки на моём сервере собственного бота, который бы на этот сервер логи и складывал. Относительно вики помощь была тоже в виде совета: заняться этим самостоятельно, а "через полгодика посмотрим". 
не ушёл, как другие, а остался и стал активно помогать другим пользователям
(которые, видя в списке конференций в Дискавери больше одного человека напротив
слова Tkabber, стали заходить почаще). Я к тому времени пришёл к мысли, что
неплохо бы написать что-то вроде мануала по Ткабберу "для чайников", потому что
большинство заходивших посетителей не интересовали тонкие нюансы протокола
XMPP, но более приземлённые вопросы: "Почему у меня видны такие корявые
шрифты?" Опыт в написании документации у меня
[был](http://netroad.ru/~bigote/articles.htm), но после совещания с Lknight'ом
я понял, что обычные мануалы — это прошлый век. Сейчас такие вещи надо делать в
виде базы знаний на движках wiki. Кроме того, мы подумали, что не помешало бы
включить ведение логов конференции, чтобы решения некоторых задач можно было
найти поисковиками. Окрылённый, я понёсся на `xmpp:devel@conference.jabber.ru`
— просить админов включить логи и "поднять" вики на сервере jabber.ru. Мне было
предложено вести логи путём установки на моём сервере собственного бота,
который бы на этот сервер логи и складывал. Относительно вики помощь была тоже
в виде совета: заняться этим самостоятельно, а "через полгодика посмотрим".

## <a id="Неолит"></a>Неолит
Опять выручил Lknight, подняв вики на своём сервере. На пару с ним мы придумали
# <a id="Неолит"></a>Неолит
Опять выручил Lknight, подняв вики на своём сервере. На пару с ним мы придумали основную структуру сайта и начали писать статьи. Между тем на конференции в один прекрасный день появился и остался один из авторов Ткаббера — [Teo](Участник_Teo.md), а затем в другой не менее прекрасный день пришла ermine и привела за собой бота sulci. Конференцию, кстати, я уже давно зарегистрировал на себя, потому что хозяина у неё не было, хоть она и была найдена мной в списке комнат на Диско. А логи, оказывается, на jabber.ru вообще включаются на стороне сервера, так что бот у нас просто прохлаждался, оказывая мелкие услуги и треплясь за жизнь. Мы обучили его некоторым полезным знаниям, которые могут помочь посетителям (читайте об этом в топике конференции). В общем, так прошло ещё какое-то время, пока в комнате не появился [Kostix](Участник_Kostix.md). Этот Kostix оказался опытным бойцом и рьяно принялся за дело: на пару с ним мы практически полностью переделали структуру вики и дописали и переделали многие статьи. Он и сам написал изрядное их количество — познавательных и интересных. На конференцию стало заходить ещё больше народу; благодаря общению с этими людьми улучшилась вики, а в какой-то мере оно повлияло и на новшества, введённые в версию 0.9.9 Ткаббера. 
основную структуру сайта и начали писать статьи. Между тем на конференции в
один прекрасный день появился и остался один из авторов Ткаббера —
[**Teo**](Участник_Teo.md), а затем в другой не менее прекрасный день пришла ermine
и привела за собой бота sulci. Конференцию, кстати, я уже давно зарегистрировал
на себя, потому что хозяина у неё не было, хоть она и была найдена мной в
списке комнат на Диско. А логи, оказывается, на jabber.ru вообще включаются на
стороне сервера, так что бот у нас просто прохлаждался, оказывая мелкие услуги
и треплясь за жизнь. Мы обучили его некоторым полезным знаниям, которые могут
помочь посетителям (читайте об этом в топике конференции). В общем, так прошло
ещё какое-то время, пока в комнате не появился [**Kostix**](Участник_Kostix.md).
Этот Kostix оказался опытным бойцом и рьяно принялся за дело: на пару с ним мы
практически полностью переделали структуру вики и дописали и переделали многие
статьи. Он и сам написал изрядное их количество — познавательных и интересных.
На конференцию стало заходить ещё больше народу; благодаря общению с этими
людьми улучшилась вики, а в какой-то мере оно повлияло и на новшества,
введённые в версию 0.9.9 Ткаббера.

## <a id="Бронзовый_век"></a>Бронзовый век
В завершение этого краткого экскурса в историю вики следует отметить
# <a id="Бронзовый_век"></a>Бронзовый век
В завершение этого краткого экскурса в историю вики следует отметить [Feez](Участник_Feez.md), написавшего ряд плагинов для Ткаббера и очень интересную статью. Ещё один старатель, добывающий золото плагинов из словесной руды команд тикля: [eXire](Участник_EXire.md). Кстати, некоторые из этих самодельных плагинов вошли в альфа-версию Ткаббера. Надеемся, список участников проекта на этом не завершится. Например, камрад [ART](Участник_ART.md) вот уже который месяц рисует новый набор иконок, который, судя по всему, станет дефолтным в грядущем релизе (если, конечно, будет когда-нибудь дорисован ;)). Тебе нужен Ткаббер — Ты нужен Ткабберу! ;) 
[**Feez**](Участник_Feez.md), написавшего ряд плагинов для Ткаббера и очень
интересную статью. Ещё один старатель, добывающий золото плагинов из словесной
руды команд тикля: [**eXire**](Участник_EXire.md). Кстати, некоторые из этих
самодельных плагинов вошли в альфа-версию Ткаббера. Надеемся, список участников
проекта на этом не завершится. Например, камрад [**ART**](Участник_ART.md) вот уже
который месяц рисует новый набор иконок, который, судя по всему, станет
дефолтным в грядущем релизе (если, конечно, будет когда-нибудь дорисован ;)).
Тебе нужен Ткаббер — Ты нужен Ткабберу! ;)

## <a id="Железный_век"></a>Железный век
Начинается новая эра для Ткаббера, ибо недавно вышла свежая его версия 0.10.0.
Точнее, даже не вышла, а выехала на новенькой железной колеснице. Разработчики
навнедряли в неё (в версию) кучи различных железных приспособ,
# <a id="Железный_век"></a>Железный век
Начинается новая эра для Ткаббера, ибо недавно вышла свежая его версия 0.10.0. Точнее, даже не вышла, а выехала на новенькой железной колеснице. Разработчики навнедряли в неё (в версию) кучи различных железных приспособ, [ART](Участник_ART.md) изукрасил её, а тестеры поубивали всех тараканов. Следом вышли новый Старпак и Ткаббер-пак. Пора приниматься и за вики: надо новыми железными мотыгами прополоть её статьи от устаревшей инфы и с помощью новых железных лопат пересадить хотя бы часть этой инфы на иностранные грядки. 


[**ART**](Участник_ART.md) изукрасил её, а тестеры поубивали всех тараканов. Следом
вышли новый Старпак и Ткаббер-пак. Пора приниматься и за вики: надо новыми
железными мотыгами прополоть её статьи от устаревшей инфы и с помощью новых
железных лопат пересадить хотя бы часть этой инфы на иностранные грядки.

Changes to wiki/ru/История_разговоров.md.

1

2
3
4
5
6
7

8
9
10
11
12
13
14
15



16
17

18
19

20
21

22
23

24
25
26
27

28
29
30

31
32
33

34
35

36
37
38
39

40
41
42

43
44
45

46
47

48
49
50
51

52
53
54

55
56
57
58

59
60
61
62
63
64



1
2
3
4
5
6
7

8

9
10
11
12



13
14
15
16

17


18
19

20
21

22


23

24

25

26

27

28
29

30


31

32

33

34

35

36
37

38


39

40

41

42


43

44


45



46
47
48

+





-
+
-




-
-
-
+
+
+

-
+
-
-
+

-
+

-
+
-
-

-
+
-

-
+
-

-
+

-
+
-
-

-
+
-

-
+
-

-
+

-
+
-
-

-
+
-

-
+
-
-

-
+
-
-

-
-
-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/История_разговоров/index.html)


# История разговоров

Материал из Tkabber Wiki.

В Ткаббере реализован браузер истории разговоров. Он доступен через главное
В Ткаббере реализован браузер истории разговоров. Он доступен через главное меню: **Службы → Разговоры**. 
меню: **Службы → Разговоры**.

## <a id="toc"></a>Содержание

* [1 Окна браузера](#Окна_браузера)
   * [1.1 Список всех JID'ов](#Список_всех_JIDов)
   * [1.2 Дерево истории разговоров](#Дерево_истории_разговоров)
   * [1.3 Полнотекстовый поиск](#Полнотекстовый_поиск)
 * [1.1 Список всех JID'ов](#Список_всех_JIDов)
 * [1.2 Дерево истории разговоров](#Дерево_истории_разговоров)
 * [1.3 Полнотекстовый поиск](#Полнотекстовый_поиск)

## <a id="Окна_браузера"></a>Окна браузера
# <a id="Окна_браузера"></a>Окна браузера

Браузер предоставляет три "вида" доступа к соответствующей информации:
Браузер предоставляет три "вида" доступа к соответствующей информации: 

### <a id="Список_всех_JIDов"></a>Список всех JID'ов
## <a id="Список_всех_JIDов"></a>Список всех JID'ов

Список всех JID'ов, с которыми вы вели беседы. Сюда входят JID'ы пользователей,
Список всех JID'ов, с которыми вы вели беседы. Сюда входят JID'ы пользователей, JID'ы комнат и JID'ы участников комнат (именно с ними ведутся бесды "в привате" комнаты). 
JID'ы комнат и JID'ы участников комнат (именно с ними ведутся бесды "в привате"
комнаты).

Нажатие Enter или двойной клик левой кнопкой мышки на элементе списка открывает
Нажатие Enter или двойной клик левой кнопкой мышки на элементе списка открывает стандартное окно с протоколом разговора для данного JID'а. 
стандартное окно с протоколом разговора для данного JID'а.

Поиск по списку можно произвести, открыв стандартную панель поиска, которая
Поиск по списку можно произвести, открыв стандартную панель поиска, которая вызывается нажатием Ctrl-s. 
вызывается нажатием Ctrl-s.

### <a id="Дерево_истории_разговоров"></a>Дерево истории разговоров
## <a id="Дерево_истории_разговоров"></a>Дерево истории разговоров

Дерево истории разговоров соответствует структуре каталогов с файлами истории,
Дерево истории разговоров соответствует структуре каталогов с файлами истории, поддерживаемой Ткаббером. В нём JID'ы сгруппированы по месяцам, которые, в свою очередь, сгруппированы по годам. 
поддерживаемой Ткаббером. В нём JID'ы сгруппированы по месяцам, которые, в свою
очередь, сгруппированы по годам.

Открытие стандартного окна с протоколом для выбранного JID'а осуществляется так
Открытие стандартного окна с протоколом для выбранного JID'а осуществляется так же, как и в списке всех JID'ов. 
же, как и в списке всех JID'ов.

Поиск по дереву можно произвести, открыв стандартную панель поиска, которая
Поиск по дереву можно произвести, открыв стандартную панель поиска, которая вызывается нажатием Ctrl-s. 
вызывается нажатием Ctrl-s.

### <a id="Полнотекстовый_поиск"></a>Полнотекстовый поиск
## <a id="Полнотекстовый_поиск"></a>Полнотекстовый поиск

Полнотекстовый поиск позволяет произвести поиск подстроки/шаблона по _всем_
Полнотекстовый поиск позволяет произвести поиск подстроки/шаблона по _всем_ имеющимся файлам протоколов. Используются выбранный в настройках Ткаббера метод поиска (группа настроек **Plugins → Search**). 
имеющимся файлам протоколов. Используются выбранный в настройках Ткаббера метод
поиска (группа настроек **Plugins → Search**).

Поиск не блокирует интерфейс. Результаты помещаются в соответствующее окно по
Поиск не блокирует интерфейс. Результаты помещаются в соответствующее окно по мере их поступления. 
мере их поступления.

Двойной клик левой кнопкой мышки на тексте с результатом поиска или его
Двойной клик левой кнопкой мышки на тексте с результатом поиска или его заголовке открывает стандартное окно с протоколом для соответствующего JID'а; оно будет "перемотано" чтобы показать нужное (найденное) сообщение. 
заголовке открывает стандартное окно с протоколом для соответствующего JID'а;
оно будет "перемотано" чтобы показать нужное (найденное) сообщение.

Дополнительный поиск (аналог функции "искать в найденном" некоторых поисковых
Дополнительный поиск (аналог функции "искать в найденном" некоторых поисковых служб) доступен в виде стандартной панели поиска, которую можно активизировать нажатием Ctrl-s. Искать в найденном можно и до окончания "основного" поиска. 
служб) доступен в виде стандартной панели поиска, которую можно активизировать
нажатием Ctrl-s. Искать в найденном можно и до окончания "основного" поиска.

Поиск называется "полнотекстовым", поскольку в качестве информации для поиска
он использует не только сообщения, но и JID'ы их источников. Название
"позаимствовано" у систем управления базами данных.
Поиск называется "полнотекстовым", поскольку в качестве информации для поиска он использует не только сообщения, но и JID'ы их источников. Название "позаимствовано" у систем управления базами данных. 


Changes to wiki/ru/Команды.md.

1

2
3
4
5
6
7

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

































46
47
48
49
50
51

52
53
54
55
56
57
58
59

60
61
62
63
64

65
66
67
68
69

70
71
72
73

74
75
76
77
78
79
80
81
82
83
84
85

86
87
88
89
90
91


92
93
94
95

96
97
98
99
100
101
102
103
104
105


106
107
108
109

110
111
112
113
114
115
116
117


118
119
120
121

122
123
124
125
126
127


128
129
130
131

132
133
134
135
136


137
138
139
140

141
142
143
144

145
146
147
148

149
150
151
152

153
154
155
156

157
158
159


160
161
162
163

164
165
166
167
168
169

170
171
172
173
174
175
176
177


178
179
180
181

182
183
184


185
186

187
188

189
190
191
192

193
194

195
196

197
198
199
200
201
202

203
204

205
206
207
208

209
210
211
212
213
214
215
216


217
218
219
220

221
222
223
224
225
226
227
228
229
230
231
232


233
234
235
236
237
238
239


240
241
242
243

244
245
246

247
248

249
250

251
252

253
254

255
256
257
258



259
260

261
262

263
264

265
266
267

268
269
270
271
272
273
274
275
276
277

278
279
280
281
282


283
284
285
286

287
288
289
290
291
292
293
294
295

296
297
298
299

300
301
302
303
304


305
306
307
308

309
310
311
312

313
314
315
316

317
318

319
320

321
322
323
324

325
326
327


328
329
330
331

332
333

334
335

336
337
338
339
340


341
342
343
344
345
346



347
348
349
350

351
352
353
354
355
356
357
358



359
360
361
362

363
364

365
366
367
368

369
370
371
372


373
374
375
376

377
378
379
380
381
382
383
384



385
386
387
388
389
390



391
392
393
394

395
396
397
398
399
400


401
402
403
404

405
406
407
408
409



410
411
412
413

414
415
416

417
418
419

420
421

422
423

424
425

426
427
428

429
430
431
432
433
434

435
436
437
438
439
440
441
442



443
444
445
446

447
448
449
450

451
452
453
454

455
456
457


458
459
460

461
462
463
464
465
466
467
468
469
1
2
3
4
5
6
7

8
9
10
11
12
13

































14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

52






53

54



55

56



57

58


59

60







61
62
63
64

65






66
67
68
69
70

71










72
73
74
75
76

77








78
79
80
81
82

83






84
85
86
87
88

89





90
91
92
93
94

95




96
97
98
99

100




101
102
103
104

105



106
107
108
109
110

111

112
113
114
115

116





117


118
119
120
121
122

123



124
125


126


127
128
129
130

131


132


133






134


135
136
137
138

139








140
141
142
143
144

145












146
147







148
149
150
151
152

153

154

155
156

157
158

159
160

161
162

163
164



165
166
167
168

169
170

171


172

173

174






175
176
177

178





179
180
181
182
183

184





185
186
187

188
189
190
191

192





193
194
195
196
197

198




199
200
201
202

203


204


205
206
207
208

209



210
211
212
213
214

215


216


217





218
219
220
221
222



223
224
225
226
227
228

229








230
231
232
233
234
235

236


237
238
239
240

241




242
243
244
245
246

247








248
249
250
251
252
253



254
255
256
257
258
259

260






261
262
263
264
265

266





267
268
269
270
271
272

273

274

275

276

277
278

279
280

281
282

283



284


285
286
287

288








289
290
291
292
293
294

295




296
297
298
299

300



301
302
303
304

305


306
307
308
309
310
311
312

+





-
+





-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+





-
+
-
-
-
-
-
-

-
+
-
-
-

-
+
-
-
-

-
+
-
-

-
+
-
-
-
-
-
-
-




-
+
-
-
-
-
-
-
+
+



-
+
-
-
-
-
-
-
-
-
-
-
+
+



-
+
-
-
-
-
-
-
-
-
+
+



-
+
-
-
-
-
-
-
+
+



-
+
-
-
-
-
-
+
+



-
+
-
-
-
-
+



-
+
-
-
-
-
+



-
+
-
-
-
+
+



-
+
-




-
+
-
-
-
-
-

-
-
+
+



-
+
-
-
-
+
+
-
-
+
-
-
+



-
+
-
-
+
-
-
+
-
-
-
-
-
-
+
-
-
+



-
+
-
-
-
-
-
-
-
-
+
+



-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
+
+



-
+
-

-
+

-
+

-
+

-
+

-
+

-
-
-
+
+
+

-
+

-
+
-
-
+
-

-
+
-
-
-
-
-
-



-
+
-
-
-
-
-
+
+



-
+
-
-
-
-
-



-
+



-
+
-
-
-
-
-
+
+



-
+
-
-
-
-
+



-
+
-
-
+
-
-
+



-
+
-
-
-
+
+



-
+
-
-
+
-
-
+
-
-
-
-
-
+
+



-
-
-
+
+
+



-
+
-
-
-
-
-
-
-
-
+
+
+



-
+
-
-
+



-
+
-
-
-
-
+
+



-
+
-
-
-
-
-
-
-
-
+
+
+



-
-
-
+
+
+



-
+
-
-
-
-
-
-
+
+



-
+
-
-
-
-
-
+
+
+



-
+
-

-
+
-

-
+

-
+

-
+

-
+
-
-
-
+
-
-



-
+
-
-
-
-
-
-
-
-
+
+
+



-
+
-
-
-
-
+



-
+
-
-
-
+
+


-
+
-
-







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Команды/index.html)


# Команды

Материал из Tkabber Wiki

Статья ещё не дописана, см. [**TODO: дописать статью**](#TODO_дописать_статью).
Статья ещё не дописана, см. [TODO: дописать статью](Команды.md#TODO_дописать_статью). 

## <a id="toc"></a>Содержание

* [1 Общая информация](#Общая_информация)
* [2 Встроенные команды](#Встроенные_команды)
   * [2.1 /admin nickname ['\\n' reason]](#_admin_nickname_n_reason)
   * [2.2 /ban nickname ['\\n' reason]](#_ban_nickname_n_reason)
   * [2.3 /banjid jid ['\\n' reason]](#_banjid_jid_n_reason)
   * [2.4 /deadmin nickname ['\\n' reason]](#_deadmin_nickname_n_reason)
   * [2.5 /demember nickname ['\\n' reason]](#_demember_nickname_n_reason)
   * [2.6 /demoderator nickname ['\\n' reason]](#_demoderator_nickname_n_reason)
   * [2.7 /devoice nickname ['\\n' reason]](#_devoice_nickname_n_reason)
   * [2.8 /disco [jid]](#_disco_jid)
   * [2.9 /exec command](#_exec_command)
   * [2.10 /invite jid ['\\n' reason]](#_invite_jid_n_reason)
   * [2.11 /join [room [password]]](#_join_room_password)
   * [2.12 /kick nickname ['\\n' reason]](#_kick_nickname_n_reason)
   * [2.13 /last [user]](#_last_user)
      * [2.13.1 Раскрытие аргумента [user]](#Раскрытие_аргумента_user)
   * [2.14 /leave [status]](#_leave_status)
   * [2.15 /me text](#_me_text)
   * [2.16 /member nickname ['\\n' reason]](#_member_nickname_n_reason)
   * [2.17 /moderator nickname ['\\n' reason]](#_moderator_nickname_n_reason)
   * [2.18 /msg nickname '\\n' body](#_msg_nickname_n_body)
   * [2.19 /nick nickname](#_nick_nickname)
   * [2.20 /open user\_a](#_open_user_a)
   * [2.21 /part [status]](#_part_status)
   * [2.22 /ping [user]](#_ping_user)
   * [2.23 /rejoin](#_rejoin)
   * [2.24 /subject [text]](#_subject_text)
   * [2.25 /time [user]](#_time_user)
   * [2.26 /topic [text]](#_topic_text)
   * [2.27 /unban jid](#_unban_jid)
   * [2.28 /vcard [user\_b]](#_vcard_user_b)
      * [2.28.1 Раскрытие аргумента [user\_b]](#Раскрытие_аргумента_user_b)
   * [2.29 /version [user]](#_version_user)
   * [2.30 /voice nickname ['\\n' reason]](#_voice_nickname_n_reason)
   * [2.31 /whois nickname](#_whois_nickname)
 * [2.1 /admin nickname ['\\n' reason]](#_admin_nickname_n_reason)
 * [2.2 /ban nickname ['\\n' reason]](#_ban_nickname_n_reason)
 * [2.3 /banjid jid ['\\n' reason]](#_banjid_jid_n_reason)
 * [2.4 /deadmin nickname ['\\n' reason]](#_deadmin_nickname_n_reason)
 * [2.5 /demember nickname ['\\n' reason]](#_demember_nickname_n_reason)
 * [2.6 /demoderator nickname ['\\n' reason]](#_demoderator_nickname_n_reason)
 * [2.7 /devoice nickname ['\\n' reason]](#_devoice_nickname_n_reason)
 * [2.8 /disco [jid]](#_disco_jid)
 * [2.9 /exec command](#_exec_command)
 * [2.10 /invite jid ['\\n' reason]](#_invite_jid_n_reason)
 * [2.11 /join [room [password]]](#_join_room_password)
 * [2.12 /kick nickname ['\\n' reason]](#_kick_nickname_n_reason)
 * [2.13 /last [user]](#_last_user)
  * [2.13.1 Раскрытие аргумента [user]](#Раскрытие_аргумента_user)
 * [2.14 /leave [status]](#_leave_status)
 * [2.15 /me text](#_me_text)
 * [2.16 /member nickname ['\\n' reason]](#_member_nickname_n_reason)
 * [2.17 /moderator nickname ['\\n' reason]](#_moderator_nickname_n_reason)
 * [2.18 /msg nickname '\\n' body](#_msg_nickname_n_body)
 * [2.19 /nick nickname](#_nick_nickname)
 * [2.20 /open user\_a](#_open_user_a)
 * [2.21 /part [status]](#_part_status)
 * [2.22 /ping [user]](#_ping_user)
 * [2.23 /rejoin](#_rejoin)
 * [2.24 /subject [text]](#_subject_text)
 * [2.25 /time [user]](#_time_user)
 * [2.26 /topic [text]](#_topic_text)
 * [2.27 /unban jid](#_unban_jid)
 * [2.28 /vcard [user\_b]](#_vcard_user_b)
  * [2.28.1 Раскрытие аргумента [user\_b]](#Раскрытие_аргумента_user_b)
 * [2.29 /version [user]](#_version_user)
 * [2.30 /voice nickname ['\\n' reason]](#_voice_nickname_n_reason)
 * [2.31 /whois nickname](#_whois_nickname)
* [3 Ссылки](#Ссылки)
* [4 TODO: дописать статью](#TODO_дописать_статью)
* [5 Немного мыслей о развитии механизма команд](#Немного_мыслей_о_развитии_механизма_команд)

# <a id="Общая_информация"></a>Общая информация
Не все команды имеют «защиту от дурака». В данном списке указаны только
Не все команды имеют «защиту от дурака». В данном списке указаны только разумные наборы параметров. В случае использования другого набора параметров команда может быть отправлена собеседнику (как обычное сообщение), может возникнуть исключение (на уровне интерпретатора tcl), может быть выведено сообщение об ошибке под сообщениями активного окна, может не случиться ничего. Эти ситуации никак не оговариваются в данном списке, поскольку недостатки лучше исправлять, а не документировать. 
разумные наборы параметров. В случае использования другого набора параметров
команда может быть отправлена собеседнику (как обычное сообщение), может
возникнуть исключение (на уровне интерпретатора tcl), может быть выведено
сообщение об ошибке под сообщениями активного окна, может не случиться ничего.
Эти ситуации никак не оговариваются в данном списке, поскольку недостатки лучше
исправлять, а не документировать.

Аргументы-слова не должны содержать пробельных символов (например, пробела или
Аргументы-слова не должны содержать пробельных символов (например, пробела или перевода строки) и должны разделяться строго одним пробелом. В некоторых случаях аргумент представляет собой произвольный текст или текст, не содержащий символа перевода строки. Типы аргументов указаны в описаниях к командам. 
перевода строки) и должны разделяться строго одним пробелом. В некоторых
случаях аргумент представляет собой произвольный текст или текст, не содержащий
символа перевода строки. Типы аргументов указаны в описаниях к командам.

Аргументы команд, записанные в квадратных скобках, являются необязательными (т.
Аргументы команд, записанные в квадратных скобках, являются необязательными (т. е. могут присутствовать или не присутствовать в записи команды). Иногда наличие или отсутствие аргумента влияет на семантику команды, например на то, отображается некоторое свойство командой или изменяется. 
е. могут присутствовать или не присутствовать в записи команды). Иногда наличие
или отсутствие аргумента влияет на семантику команды, например на то,
отображается некоторое свойство командой или изменяется.

В окне чата работает автодополнение по клавише Tab. Его можно использовать для
В окне чата работает автодополнение по клавише Tab. Его можно использовать для дополнения псевдонима участника конференции, команды, аргумента команды и, иногда, чего-нибудь другого (см., например, [плагин Juick](Плагины/Juick.md)). 
дополнения псевдонима участника конференции, команды, аргумента команды и,
иногда, чего-нибудь другого (см., например, [**плагин Juick**](Плагины/Juick.md)).

Для формалистов. Текст команд можно воспринимать как запись шаблона команды в
Для формалистов. Текст команд можно воспринимать как запись шаблона команды в форме [расширенной БНФ](http://ru.wikipedia.org/wiki/Расширенная_форма_Бэкуса_—_Наура), причём слова, начинающиеся с символа '/', а также '\\n' являются терминалами, остальные — нетерминалами, формат нетерминалов определяется типом нетерминала как аргумента. Разделителем между командой и аргументом, а также между аргументами-словами является пробел. Если между идентификаторами (терминалами или нетерминалами) присутствует терминал '\\n', то других разделитей не подразумевается. 
форме [расширенной БНФ](http://ru.wikipedia.org/wiki/Расширенная_форма_Бэкуса_—_Наура), причём
слова, начинающиеся с символа '/', а также '\\n' являются терминалами,
остальные — нетерминалами, формат нетерминалов определяется типом нетерминала
как аргумента. Разделителем между командой и аргументом, а также между
аргументами-словами является пробел. Если между идентификаторами (терминалами
или нетерминалами) присутствует терминал '\\n', то других разделитей не
подразумевается.

# <a id="Встроенные_команды"></a>Встроенные команды
## <a id="_admin_nickname_n_reason"></a>/admin nickname ['\\n' reason]

*  Активное окно — окно конференции. Сменить [**тип членства**](#Ссылки)
*  Активное окно — окно конференции. Сменить [тип членства](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Admin” (если у него менее привилегированный тип членства). Обычно это также подразумевает назначение [роли](Команды.md#Ссылки) “Moderator”. В запрос включается, если указан, текст `reason`. 
   участника активной конференции с псевдонимом `nickname` на “Admin” (если у
   него менее привилегированный тип членства). Обычно это также подразумевает
   назначение [**роли**](#Ссылки) “Moderator”. В запрос включается, если
   указан, текст `reason`.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст.
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl)
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст. 
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) 

## <a id="_ban_nickname_n_reason"></a>/ban nickname ['\\n' reason]

*  Активное окно — окно конференции. Сменить [**тип членства**](#Ссылки)
*  Активное окно — окно конференции. Сменить [тип членства](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Outcast”, т. е. забанить его (выгнать без возможности вернуться). Бан осуществляется по real JID пользователя, значит последний должен быть известен осуществляющему бан. Участник должен присутствовать в конференции. В запрос включается, если указан, текст `reason`. Согласно [XEP-0045](http://xmpp.org/extensions/xep-0045.html), передача забаненному участнику и остальным участникам информации о псевдониме или bare JID осуществляющего бан, а также причины `reason` является опциональной. 
   участника активной конференции с псевдонимом `nickname` на “Outcast”, т. е.
   забанить его (выгнать без возможности вернуться). Бан осуществляется по real
   JID пользователя, значит последний должен быть известен осуществляющему бан.
   Участник должен присутствовать в конференции. В запрос включается, если
   указан, текст `reason`. Согласно
   [XEP-0045](http://xmpp.org/extensions/xep-0045.html), передача забаненному
   участнику и остальным участникам информации о псевдониме или bare JID
   осуществляющего бан, а также причины `reason` является опциональной.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст.
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl)
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст. 
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) 

## <a id="_banjid_jid_n_reason"></a>/banjid jid ['\\n' reason]

*  Активное окно — окно конференции. Сменить [**тип членства**](#Ссылки)
*  Активное окно — окно конференции. Сменить [тип членства](Команды.md#Ссылки) пользователя с bare JID `jid` на “Outcast”, т. е. внести его в список забаненных и, если он присутствует в конференции, выгнать. В запрос включается, если указан, текст `reason`. Согласно [XEP-0045](http://xmpp.org/extensions/xep-0045.html), передача забаненному участнику и остальным участникам информации о псевдониме или bare JID осущестляющего бан, а также причины `reason` является опциональной. 
   пользователя с bare JID `jid` на “Outcast”, т. е. внести его в список
   забаненных и, если он присутствует в конференции, выгнать. В запрос
   включается, если указан, текст `reason`. Согласно
   [XEP-0045](http://xmpp.org/extensions/xep-0045.html), передача забаненному
   участнику и остальным участникам информации о псевдониме или bare JID
   осущестляющего бан, а также причины `reason` является опциональной.
*  `jid` — текст без символов перевода строки, `reason` — произвольный текст.
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl)
*  `jid` — текст без символов перевода строки, `reason` — произвольный текст. 
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) 

## <a id="_deadmin_nickname_n_reason"></a>/deadmin nickname ['\\n' reason]

*  Активное окно — окно конференции. Сменить [**тип членства**](#Ссылки)
*  Активное окно — окно конференции. Сменить [тип членства](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Member” (если у него более привилегированный тип членства). Обычно это также подразумевает назначение [роли](Команды.md#Ссылки) “Participant”. В запрос включается, если указан, текст `reason`. 
   участника активной конференции с псевдонимом `nickname` на “Member” (если у
   него более привилегированный тип членства). Обычно это также подразумевает
   назначение [**роли**](#Ссылки) “Participant”. В запрос включается,
   если указан, текст `reason`.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст.
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl)
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст. 
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) 

## <a id="_demember_nickname_n_reason"></a>/demember nickname ['\\n' reason]

*  Активное окно — окно конференции. Сменить [**тип членства**](#Ссылки)
*  Активное окно — окно конференции. Сменить [тип членства](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “None” (если у него более привилегированный тип членства). В запрос включается, если указан, текст `reason`. 
   участника активной конференции с псевдонимом `nickname` на “None” (если у
   него более привилегированный тип членства). В запрос включается, если
   указан, текст `reason`.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст.
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl)
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст. 
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) 

## <a id="_demoderator_nickname_n_reason"></a>/demoderator nickname ['\\n' reason]

*  Активное окно — окно конференции. Сменить [**роль**](#Ссылки) участника
*  Активное окно — окно конференции. Сменить [роль](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Participant” (если у него более привилегированная роль). В запрос включается, если указан, текст `reason`. 
   активной конференции с псевдонимом `nickname` на “Participant” (если у него
   более привилегированная роль). В запрос включается, если указан, текст
   `reason`.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст. 

## <a id="_devoice_nickname_n_reason"></a>/devoice nickname ['\\n' reason]

*  Активное окно — окно конференции. Сменить [**роль**](#Ссылки) участника
*  Активное окно — окно конференции. Сменить [роль](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Visitor” (если у него более привилегированная роль). В запрос включается, если указан, текст `reason`. 
   активной конференции с псевдонимом `nickname` на “Visitor” (если у него
   более привилегированная роль). В запрос включается, если указан, текст
   `reason`.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст. 

## <a id="_disco_jid"></a>/disco [jid]

*  Открывает окно обзора сервисов для `jid` или, если `jid` не указан, для
*  Открывает окно обзора сервисов для `jid` или, если `jid` не указан, для собеседника из активного окна. 
   собеседника из активного окна.
*  `jid` — произвольный текст, справа удаляются пробельные символы.
*  [plugins/chat/disco.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/disco.tcl)
*  `jid` — произвольный текст, справа удаляются пробельные символы. 
*  [plugins/chat/disco.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/disco.tcl) 

## <a id="_exec_command"></a>/exec command

*  Выполнить команду `command` и подставить её вывод или сообщение об ошибке в
*  Выполнить команду `command` и подставить её вывод или сообщение об ошибке в поле ввода в форме: 
   поле ввода в форме:

    $ `command`
    output/error message

Синтаксис, вообще говоря, отличается от привычного по совместимым с Bourne
Синтаксис, вообще говоря, отличается от привычного по совместимым с Bourne Shell командным интерпретаторам. Например, несколько слов, разделённых пробелами или символами перевода строки, объединяются в один аргумент с помощью фигурных скобок, а не кавычек. Подробнее см. в “man n exec”. Можно использовать синтаксис системного командного интерпретатора с помощью такого приёма: “/exec sh -c {some command}” 
Shell командным интерпретаторам. Например, несколько слов, разделённых
пробелами или символами перевода строки, объединяются в один аргумент с помощью
фигурных скобок, а не кавычек. Подробнее см. в “man n exec”. Можно использовать
синтаксис системного командного интерпретатора с помощью такого приёма: “/exec
sh -c {some command}”

*  `command` — произвольный текст.
*  [plugins/chat/exec\_command.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/exec_command.tcl)
*  `command` — произвольный текст. 
*  [plugins/chat/exec\_command.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/exec_command.tcl) 

## <a id="_invite_jid_n_reason"></a>/invite jid ['\\n' reason]

*  Пригласить пользователя в конференцию. Текст `reason`, если указан, будет
*  Пригласить пользователя в конференцию. Текст `reason`, если указан, будет передан вместе с приглашением. 
   передан вместе с приглашением.
*  В окне конференции `jid` — это JID приглашаемого.
*  В окне 1-vs-1 разговора (в том числе приватного разговора через конференцию)
*  В окне конференции `jid` — это JID приглашаемого. 
*  В окне 1-vs-1 разговора (в том числе приватного разговора через конференцию) `jid` — это JID комнаты, с него приходит приглашение. 
   `jid` — это JID комнаты, с него приходит приглашение.
*  `jid` — произвольный текст, не содержащий символов перевода строки, `reason`
*  `jid` — произвольный текст, не содержащий символов перевода строки, `reason` — произвольный текст, справа удаляются пробельные символы. 
   — произвольный текст, справа удаляются пробельные символы.
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl)
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) 

## <a id="_join_room_password"></a>/join [room [password]]

*  Присоединиться к конференции `room` с паролем `password` или без пароля,
*  Присоединиться к конференции `room` с паролем `password` или без пароля, если он не указан. 
   если он не указан.
*  Если активное окно не является окном конференции, то аргумент `room`
*  Если активное окно не является окном конференции, то аргумент `room` трактуется как JID конференции. 
   трактуется как JID конференции.
*  В случае когда активное окно является окном конференции (на некотором
*  В случае когда активное окно является окном конференции (на некотором сервере server), действуют следующие правила. Если аргумент `room` отсутствует, то производится попытка присоединиться к конференции в активном окне. Если аргумент `room` присутствует, но не является JID'ом, то производится попытка присоединиться к конференции `room`@server. В противном случае производится попытка присоединиться к конференции с JID'ом `room`. 
   сервере server), действуют следующие правила. Если аргумент `room`
   отсутствует, то производится попытка присоединиться к конференции в активном
   окне. Если аргумент `room` присутствует, но не является JID'ом, то
   производится попытка присоединиться к конференции `room`@server. В противном
   случае производится попытка присоединиться к конференции с JID'ом `room`.
*  `room` — слово, `password` — произвольный текст, справа удаляются пробельные
*  `room` — слово, `password` — произвольный текст, справа удаляются пробельные символы. 
   символы.
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl)
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) 

## <a id="_kick_nickname_n_reason"></a>/kick nickname ['\\n' reason]

*  Активное окно — окно конференции. Сменить [**роль**](#Ссылки)
*  Активное окно — окно конференции. Сменить [роль](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “None”, т. е. выгнать из конференции (участник может вернуться). Участник должен присутствовать в конференции. В запрос включается, если указан, текст `reason`. Согласно [XEP-0045](http://xmpp.org/extensions/xep-0045.html), передача выгнанному участнику и остальным участникам информации о псевдониме или bare JID выгоняющего, а также причины `reason` является опциональной. 
   участника активной конференции с псевдонимом `nickname` на “None”, т. е.
   выгнать из конференции (участник может вернуться). Участник должен
   присутствовать в конференции. В запрос включается, если указан, текст
   `reason`. Согласно [XEP-0045](http://xmpp.org/extensions/xep-0045.html),
   передача выгнанному участнику и остальным участникам информации о псевдониме
   или bare JID выгоняющего, а также причины `reason` является опциональной.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст.
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl)
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст. 
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) 

## <a id="_last_user"></a>/last [user]

*  Запросить информацию о времени с момента последнего подключения, времени
*  Запросить информацию о времени с момента последнего подключения, времени бездействия или времени с последнего рестарта сервиса (uptime) в соответствии с [XEP-0012](http://www.xmpp.org/extensions/xep-0012.html). Согласно этому стандарту, если запрос адресован bare JID (localpart@domain.tld), то возвращённый интервал — это время с момента последнего подключения. Если запрос адресован full JID (localpart@domain.tld/resource), то интервал означает время бездействия пользователя. Если запрос адресован серверу или сервису с JID'ом вида domain.tld, то возвращается время с последнего рестарта сервера или сервиса (uptime). Ответ выводится под последним сообщением активного на момент отправки запроса окна. 
   бездействия или времени с последнего рестарта сервиса (uptime) в
   соответствии с [XEP-0012](http://www.xmpp.org/extensions/xep-0012.html).
   Согласно этому стандарту, если запрос адресован bare JID
   (localpart@domain.tld), то возвращённый интервал — это время с момента
   последнего подключения. Если запрос адресован full JID
   (localpart@domain.tld/resource), то интервал означает время бездействия
   пользователя. Если запрос адресован серверу или сервису с JID'ом вида
   domain.tld, то возвращается время с последнего рестарта сервера или сервиса
   (uptime). Ответ выводится под последним сообщением активного на момент
   отправки запроса окна.
*  Ракрытие аргумента — см. далее.
*  Поскольку закладки на конференции в Ткаббере с точки зрения интерфейса
*  Ракрытие аргумента — см. далее. 
*  Поскольку закладки на конференции в Ткаббере с точки зрения интерфейса пользователя относятся к ростеру, псевдоним или JID конференции обрабатывается так же, как ростерный псевдоним или JID пользователя. При этом конференция, участником которой мы не являемся, обрабатывается как отключённый пользователь. А если мы являемся участником конференции, пользователи конференции обрабатываются как подключённые ресурсы. 
   пользователя относятся к ростеру, псевдоним или JID конференции
   обрабатывается так же, как ростерный псевдоним или JID пользователя. При
   этом конференция, участником которой мы не являемся, обрабатывается как
   отключённый пользователь. А если мы являемся участником конференции,
   пользователи конференции обрабатываются как подключённые ресурсы.
*  `user` — произвольный текст.
*  [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl)
*  `user` — произвольный текст. 
*  [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) 

### <a id="Раскрытие_аргумента_user"></a>Раскрытие аргумента [user]

Для краткости изложения будем указывать bare JID и full JID собеседника (или
Для кратности изложения будем указывать bare JID и full JID собеседника (или конференции) как chat\_jid и chat\_jid/resource соответственно. 
конференции) как chat\_jid и chat\_jid/resource соответственно.

Команда `/last` в конференции:
Команда `/last` в конференции: 

*  запрос к chat\_jid.
*  запрос к chat\_jid. 

Команда `/last user` в конференции:
Команда `/last user` в конференции: 

*  запрос к chat\_jid/user.
*  запрос к chat\_jid/user. 

Команда `/last` в обычном чате:
Команда `/last` в обычном чате: 

*  chat\_jid/resource подключён => запрос к нему (т. е. к chat\_jid/resource);
*  не подключён, но подключены другие ресурсы => запрос к ним (т. е. к chat\_jid/\*);
*  нет подключённых ресурсов => запрос к chat\_jid/resource.
*  chat\_jid/resource подключён => запрос к нему (т. е. к chat\_jid/resource); 
*  не подключён, но подключены другие ресурсы => запрос к ним (т. е. к chat\_jid/\*); 
*  нет подключённых ресурсов => запрос к chat\_jid/resource. 

Команда `/last user` в обычном чате:
Команда `/last user` в обычном чате: 

*  Есть контакты с псевдонимом `user`; для каждого контакта: запрос ко всем
*  Есть контакты с псевдонимом `user`; для каждого контакта: запрос ко всем подключённым full JID или если таких нет, то запрос по bare JID. 
   подключённым full JID или если таких нет, то запрос по bare JID.
*  Если таких контактов нет, то запрос к `user` (подразумевается, что `user`
*  Если таких контактов нет, то запрос к `user` (подразумевается, что `user` должен быть валидным JID'ом). 
   должен быть валидным JID'ом).

![(!)](../images/Hammer.png) **Сделать:** Было бы неплохо проверять, совпадает
![(!)](../images/Hammer.png) **Сделать:** Было бы неплохо проверять, совпадает ли `user` с псевдонимом одного из участников конференции и, если нет, то попытаться отождествить `user` с псевдонимом пользователя из ростера или, если и это не удалось, делать запрос по JID'у `user`. Да и команду было бы неплохо разбить на две или три более осмысленных, при этом для каждой команды осуществлять приведению JID'а к необходимому виду, а для uptime — принимать только обращения по JID'ам вида domain.tld. 
ли `user` с псевдонимом одного из участников конференции и, если нет, то
попытаться отождествить `user` с псевдонимом пользователя из ростера или, если
и это не удалось, делать запрос по JID'у `user`. Да и команду было бы неплохо
разбить на две или три более осмысленных, при этом для каждой команды
осуществлять приведению JID'а к необходимому виду, а для uptime — принимать
только обращения по JID'ам вида domain.tld.

## <a id="_leave_status"></a>/leave [status]

*  Закрыть активное окно разговора, если это окно конференции — покинуть её.
*  Закрыть активное окно разговора, если это окно конференции — покинуть её. Если активным окном является окно конференции, то в информацию об изменении характера присутствия в конференции в качестве статуса добавляется текст `status`. 
   Если активным окном является окно конференции, то в информацию об изменении
   характера присутствия в конференции в качестве статуса добавляется текст
   `status`.
*  `status` — произвольный текст.
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl)
*  `status` — произвольный текст. 
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) 

## <a id="_me_text"></a>/me text

*  Не является командой в смысле Ткаббера, т. е. не обрабатывается специальным
*  Не является командой в смысле Ткаббера, т. е. не обрабатывается специальным образом при отправке. Но в соответствии с [XEP-0245](http://www.xmpp.org/extensions/xep-0245.html) обрабатывается особым образом при получении. Сообщение, начинающееся с "/me " отобразится в клиентах, соответствующих данному стандарту, будет включать ник отправителя и выглядеть, например, так: 
   образом при отправке. Но в соответствии с
   [XEP-0245](http://www.xmpp.org/extensions/xep-0245.html) обрабатывается
   особым образом при получении. Сообщение, начинающееся с "/me " отобразится в
   клиентах, соответствующих данному стандарту, будет включать ник отправителя
   и выглядеть, например, так:

    * your_nickname `text`

*  `text` — произвольный текст.
*  `text` — произвольный текст. 

## <a id="_member_nickname_n_reason"></a>/member nickname ['\\n' reason]

*  Активное окно — окно конференции. Сменить [**тип членства**](#Ссылки)
*  Активное окно — окно конференции. Сменить [тип членства](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Member” (если у него менее привилегированный тип членства). В запрос включается, если указан, текст `reason`. 
   участника активной конференции с псевдонимом `nickname` на “Member” (если у
   него менее привилегированный тип членства). В запрос включается, если
   указан, текст `reason`.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст.
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl)
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст. 
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) 

## <a id="_moderator_nickname_n_reason"></a>/moderator nickname ['\\n' reason]

*  Активное окно — окно конференции. Сменить [**роль**](#Ссылки) участника
*  Активное окно — окно конференции. Сменить [роль](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Moderator” (если у него менее привилегированная роль). В запрос включается, если указан, текст `reason`. 
   активной конференции с псевдонимом `nickname` на “Moderator” (если у него
   менее привилегированная роль). В запрос включается, если указан, текст
   `reason`.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст. 

## <a id="_msg_nickname_n_body"></a>/msg nickname '\\n' body

*  Активное окно — окно конференции. Отправить посетителю данной конференции с
*  Активное окно — окно конференции. Отправить посетителю данной конференции с псевдонимом `nickname` сообщение `body`. 
   псевдонимом `nickname` сообщение `body`.
*  `nickname` — текст без символов перевода строки, `body` — произвольный
*  `nickname` — текст без символов перевода строки, `body` — произвольный текст. 
   текст.
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl)
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) 

## <a id="_nick_nickname"></a>/nick nickname

*  Если активное окно является окном конференции, то сменить псевдоним в данной
*  Если активное окно является окном конференции, то сменить псевдоним в данной конференции на `nickname`. 
   конференции на `nickname`.
*  `nickname` — произвольный текст.
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl)
*  `nickname` — произвольный текст. 
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) 

## <a id="_open_user_a"></a>/open user\_a

*  Если аргумент содержит символ '@', то открывается окно разговора с JID'ом
*  Если аргумент содержит символ '@', то открывается окно разговора с JID'ом `user_a`. 
   `user_a`.
*  Иначе предпологается, что активное окно является окном конференции, и
*  Иначе предпологается, что активное окно является окном конференции, и открывается окно разговора с участником `user_a` этой конференции. 
   открывается окно разговора с участником `user_a` этой конференции.
*  ![(!)](../images/Hammer.png) **Сделать:** Комментарий "What if conference
*  ![(!)](../images/Hammer.png) **Сделать:** Комментарий "What if conference nickname contains "@"?", кто-нибудь хочет исправить? Думаю, нужно сделать проверку [string equal $type groupchat] как в некоторый командах в irc\_commands.tcl. 
   nickname contains "@"?", кто-нибудь хочет исправить? Думаю, нужно сделать
   проверку [string equal $type groupchat] как в некоторый командах в
   irc\_commands.tcl.
*  `user_a` — произвольный текст.
*  [plugins/chat/open\_chat.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/open_chat.tcl)
*  `user_a` — произвольный текст. 
*  [plugins/chat/open\_chat.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/open_chat.tcl) 

## <a id="_part_status"></a>/part [status]

*  Полный синоним [**/leave [status]**](#_leave_status).
*  `status` — произвольный текст.
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl)
*  Полный синоним [/leave [status]](Команды.md#_leave_status). 
*  `status` — произвольный текст. 
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) 

## <a id="_ping_user"></a>/ping [user]

*  Пинг-запрос на прикладном уровне ISO OSI в соответствии с
*  Пинг-запрос на прикладном уровне ISO OSI в соответствии с [XEP-0199](http://www.xmpp.org/extensions/xep-0199.html). Запрос адресованный по full JID направляется к клиенту, на запрос по bare JID или по JID'у вида server.tld отвечает соответствующий сервер или сервис. Ответ выводится под последним сообщением активного на момент отправки запроса окна. 
   [XEP-0199](http://www.xmpp.org/extensions/xep-0199.html). Запрос
   адресованный по full JID направляется к клиенту, на запрос по bare JID или
   по JID'у вида server.tld отвечает соответствующий сервер или сервис. Ответ
   выводится под последним сообщением активного на момент отправки запроса
   окна.
*  Семантика `user` или его отсутствия — см. [**/last [user]**](#_last_user).
*  `user` — произвольный текст.
*  [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl)
*  Семантика `user` или его отсутствия — см. [/last [user]](Команды.md#_last_user). 
*  `user` — произвольный текст. 
*  [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) 

## <a id="_rejoin"></a>/rejoin

*  Если активное окно является окном конференции, то покинуть конференцию и
*  Если активное окно является окном конференции, то покинуть конференцию и присоединиться к ней снова (похоже, что без пароля). 
   присоединиться к ней снова (похоже, что без пароля).
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl)
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) 

## <a id="_subject_text"></a>/subject [text]

*  Активное окно — окно конференции. Установить в качестве темы конференции
*  Активное окно — окно конференции. Установить в качестве темы конференции текст `text`. Если аргумент `text` не указан — отобразить тему конференции под последним сообщением. 
   текст `text`. Если аргумент `text` не указан — отобразить тему конференции
   под последним сообщением.
*  `text` — произвольный текст.
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl)
*  `text` — произвольный текст. 
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) 

## <a id="_time_user"></a>/time [user]

*  Запросить информацию о локальном времени и часовом поясе пользователя (см.
*  Запросить информацию о локальном времени и часовом поясе пользователя (см. [XEP-0090](http://www.xmpp.org/extensions/xep-0090.html)). В соответствии со стандартом, ответ должен содержать время по UTC, может содержать часовой пояс и время в читаемом формате (видимо, подразумевается локальное время). Ответ выводится под последним сообщением активного на момент отправки запроса окна. 
   [XEP-0090](http://www.xmpp.org/extensions/xep-0090.html)). В соответствии со
   стандартом, ответ должен содержать время по UTC, может содержать часовой
   пояс и время в читаемом формате (видимо, подразумевается локальное время).
   Ответ выводится под последним сообщением активного на момент отправки
   запроса окна.
*  Семантика `user` или его отсутствия — см. [**/last [user]**](#_last_user).
*  `user` — произвольный текст.
*  [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl)
*  Семантика `user` или его отсутствия — см. [/last [user]](Команды.md#_last_user). 
*  `user` — произвольный текст. 
*  [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) 

## <a id="_topic_text"></a>/topic [text]

*  Полный синоним [**/subject [text]**](#_subject_text).
*  `text` — произвольный текст.
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl)
*  Полный синоним [/subject [text]](Команды.md#_subject_text). 
*  `text` — произвольный текст. 
*  [plugins/chat/irc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/irc_commands.tcl) 

## <a id="_unban_jid"></a>/unban jid

*  Активное окно — окно конференции. Если пользователь с bare JID `jid`
*  Активное окно — окно конференции. Если пользователь с bare JID `jid` присутствует в списке забаненных (т. е. пользователей с [типом членства](Команды.md#Ссылки) “Outcast”), то сменить тип членства пользователя на “None”. Иначе говоря, разбанить пользователя с bare JID `jid`. 
   присутствует в списке забаненных (т. е. пользователей с [**типом членства**](#Ссылки)
   “Outcast”), то сменить тип членства
   пользователя на “None”. Иначе говоря, разбанить пользователя с bare JID
   `jid`.
*  `jid` — текст без символов перевода строки.
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl)
*  `jid` — текст без символов перевода строки. 
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) 

## <a id="_vcard_user_b"></a>/vcard [user\_b]

*  Запросить VCard пользователя, см.
*  Запросить VCard пользователя, см. [XEP-0054](http://www.xmpp.org/extensions/xep-0054.html). Ответ выводится под последним сообщением активного на момент отправки запроса окна. 
   [XEP-0054](http://www.xmpp.org/extensions/xep-0054.html). Ответ выводится
   под последним сообщением активного на момент отправки запроса окна.
*  Раскрытие аргумента — см. далее.
*  `user_b` — произвольный текст.
*  [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl)
*  Раскрытие аргумента — см. далее. 
*  `user_b` — произвольный текст. 
*  [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) 

### <a id="Раскрытие_аргумента_user_b"></a>Раскрытие аргумента [user\_b]

Порядок раскрытия аргумента `user_b` (буква b от bare JID) и интерпретации его
Порядок раскрытия аргумента `user_b` (буква b от bare JID) и интерпретации его отсутствия несколько отличнен от подобного для команды [/last [user]](Команды.md#_last_user). 
отсутствия несколько отличнен от подобного для команды [**/last [user]**](#_last_user).

Команда `/vcard [user_b]` в конференции: отличий от [user] нет, т. е. запрос к
Команда `/vcard [user_b]` в конференции: отличий от [user] нет, т. е. запрос к chat\_jid или chat\_jid/user\_b. 
chat\_jid или chat\_jid/user\_b.

Команда `/vcard` в обычном чате:
Команда `/vcard` в обычном чате: 

*  запрос к chat\_jid.
*  запрос к chat\_jid. 

Команда `/vcard user_b`:
Команда `/vcard user_b`: 

*  Если `user_b` является псевдонимом одного или нескольких
*  Если `user_b` является псевдонимом одного или нескольких пользователей/конференций из ростера, то запрос будет адресован каждому из них по bare JID. 
   пользователей/конференций из ростера, то запрос будет адресован каждому из
   них по bare JID.
*  Если это отождествление не удалось, то запрос будет адресован JID'у `user_b`
*  Если это отождествление не удалось, то запрос будет адресован JID'у `user_b` (даже если это full JID, каким должен быть ответ на такого рода запрос не определяется [XEP-0054](http://www.xmpp.org/extensions/xep-0054.html)). 
   (даже если это full JID, каким должен быть ответ на такого рода запрос не
   определяется [XEP-0054](http://www.xmpp.org/extensions/xep-0054.html)).

## <a id="_version_user"></a>/version [user]

*  Запросить информацию о названии и версии клиента пользователя, а также
*  Запросить информацию о названии и версии клиента пользователя, а также информацию об операционной системе (см. [XEP-0092](http://www.xmpp.org/extensions/xep-0092.html)). Согласно этому стандарту, ответ должен содержать название и версию клиента и может содержать информацию об ОС. Ответ выводится под последним сообщением активного на момент отправки запроса окна. 
   информацию об операционной системе (см.
   [XEP-0092](http://www.xmpp.org/extensions/xep-0092.html)). Согласно этому
   стандарту, ответ должен содержать название и версию клиента и может
   содержать информацию об ОС. Ответ выводится под последним сообщением
   активного на момент отправки запроса окна.
*  Семантика `user` или его отсутствия — см. [**/last [user]**](#_last_user).
*  `user` — произвольный текст.
*  [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl)
*  Семантика `user` или его отсутствия — см. [/last [user]](Команды.md#_last_user). 
*  `user` — произвольный текст. 
*  [plugins/chat/info\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/info_commands.tcl) 

## <a id="_voice_nickname_n_reason"></a>/voice nickname ['\\n' reason]

*  Активное окно — окно конференции. Сменить [**роль**](#Ссылки) участника
*  Активное окно — окно конференции. Сменить [роль](Команды.md#Ссылки) участника активной конференции с псевдонимом `nickname` на “Participant” (если у него менее привилегированная роль). В запрос включается, если указан, текст `reason`. 
   активной конференции с псевдонимом `nickname` на “Participant” (если у него
   менее привилегированная роль). В запрос включается, если указан, текст
   `reason`.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст.
*  `nickname` — текст без символов перевода строки, `reason` — произвольный текст. 

## <a id="_whois_nickname"></a>/whois nickname

*  Активное окно — окно конференции. Вывести информацию о real JID пользователя
*  Активное окно — окно конференции. Вывести информацию о real JID пользователя или сообщение об отсутствии информации о real JID. 
   или сообщение об отсутствии информации о real JID.
*  `nickname` — текст без символов перевода строки.
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl)
*  `nickname` — текст без символов перевода строки. 
*  [plugins/chat/muc\_commands.tcl](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber/plugins/chat/muc_commands.tcl) 

# <a id="Ссылки"></a>Ссылки
*  Про роли и типы членства можно почитать [тут](http://www.jabber.ru/node/118)
*  Про роли и типы членства можно почитать [тут](http://www.jabber.ru/node/118) (по-русски) или [XEP-0045](http://xmpp.org/extensions/xep-0045.html) (с понятными простым смертным таблицами). 
   (по-русски) или [XEP-0045](http://xmpp.org/extensions/xep-0045.html) (с
   понятными простым смертным таблицами).

# <a id="TODO_дописать_статью"></a>TODO: дописать статью
    $ ls -1
    3rd-party-plugins
    tkabber
    tkabber-plugins

494
495
496
497
498
499
500
501

502
503
504
505
506
507
508
337
338
339
340
341
342
343

344
345
346
347
348
349
350
351







-
+







    tkabber/doc/tkabber.xml:2135:chat_send_message_hook $chatid $user $body $type
    tkabber/chats.tcl:893:    hook::run chat_send_message_hook $chatid $user $body $type
    tkabber/chats.tcl:997:	hook::run chat_send_message_hook $chatid [connection_user $xlib] \
    tkabber/README:2426:   chat_send_message_hook $chatid $user $body $type
    3rd-party-plugins/juick/juick.tcl:76:    hook::add chat_send_message_hook   \
    3rd-party-plugins/juick/juick.tcl:113:    hook::remove chat_send_message_hook   \
    3rd-party-plugins/openhistory/openhistory.tcl:8:    hook::add chat_send_message_hook [namespace current]::handle_command 15
    3rd-party-plugins/tastebin/tastebin.tcl:48:	hook::add chat_send_message_hook ${NS}::handle_command
    3rd-party-plugins/tastebin/tastebin.tcl:48:	hook::add chat_send_message_hook ${NS}::handle_command	
    3rd-party-plugins/ibuddy/ibuddy.tcl:35:hook::add chat_send_message_hook [list [namespace current]::ibuddy::udp_puts "MACRO_GREEN"]
    3rd-party-plugins/reminder/reminder.tcl:71:    hook::add chat_send_message_hook \
    3rd-party-plugins/reminder/reminder.tcl:85:    hook::remove chat_send_message_hook \
    3rd-party-plugins/urlcmd/urlcmd.tcl:25:	hook::add chat_send_message_hook \
    3rd-party-plugins/bldjid2/bldjid2.tcl:186:    hook::add chat_send_message_hook \
    3rd-party-plugins/bldjid2/bldjid2.tcl:208:    hook::remove chat_send_message_hook \
    3rd-party-plugins/autoanswer/autoanswer.tcl:232:	hook::add chat_send_message_hook  \
517
518
519
520
521
522
523
524

525
526
527
528
529
530
531
532
533
534
535
536
537



360
361
362
363
364
365
366

367









368



369
370
371







-
+
-
-
-
-
-
-
-
-
-

-
-
-
+
+
+
    tkabber-plugins/tclchat/tclchat_commands.tcl:16:    hook::remove chat_send_message_hook \
    tkabber-plugins/bc/bc.tcl:57:    hook::add chat_send_message_hook \
    tkabber-plugins/bc/bc.tcl:72:    hook::remove chat_send_message_hook \
    tkabber-plugins/presencecmd/presencecmd.tcl:27:    hook::add chat_send_message_hook [namespace current]::handle_command 15
    tkabber-plugins/presencecmd/presencecmd.tcl:32:    hook::remove chat_send_message_hook [namespace current]::handle_command 15

# <a id="Немного_мыслей_о_развитии_механизма_команд"></a>Немного мыслей о развитии механизма команд
Проверку синтаксиса, лучше делать не для каждой команды индивидуально, а
Проверку синтаксиса, лучше делать не для каждой команды индивидуально, а централизованно. Регистрируем набор команд со специфицированным форматом аргументов. При отправке сообщения проверяем ввод на соответствие данному формату, осуществляя в сущности ту же работу, которую делает парсер команд shell'а. Остаётся вопрос, что делать, если пользователем набрана существующая команда с неправильным форматом аргументов или несуществующая команда. Я думаю, все сообщения, начинающиеся с символа '/', нужно либо обрабатывать как команды, либо выдавать сообщение о невозможности выполнить команду. А для возможности отправки сообщения с первым символом '/' предусмотреть специальный хак, например команду //. 
централизованно. Регистрируем набор команд со специфицированным форматом
аргументов. При отправке сообщения проверяем ввод на соответствие данному
формату, осуществляя в сущности ту же работу, которую делает парсер команд
shell'а. Остаётся вопрос, что делать, если пользователем набрана существующая
команда с неправильным форматом аргументов или несуществующая команда. Я думаю,
все сообщения, начинающиеся с символа '/', нужно либо обрабатывать как команды,
либо выдавать сообщение о невозможности выполнить команду. А для возможности
отправки сообщения с первым символом '/' предусмотреть специальный хак,
например команду //.

Ещё в тему единого парсера команд: тип аргумента `user`, раскрывается как в
команде [**/last [user]**](#_last_user), и тип `user_b`, раскрывается как
в команде [**/vcard [user\_b]**](#_vcard_user_b).
Ещё в тему единого парсера команд: тип аргумента `user`, раскрывается как в команде [/last [user]](Команды.md#_last_user), и тип `user_b`, раскрывается как в команде [/vcard [user\_b]](Команды.md#_vcard_user_b). 


Changes to wiki/ru/Культ_личности_Ткаббера.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24










25
26
27
28


29
30
31

32
33

34

35
36


37
38
39
40

41
42

43
44
45
46
47
48
49
50
51
52
53

54
55

56
57
58
59







60
61
62

63
64
65
66

67
68

69
70
71


72
73

74
75

76
77
78


79
80
81

82
83

84
85
86

87
88

89
90

91
92

93
94
95

96
97

98
99

100
101

102
103

104
105
106

107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122

123
124
125
126
127

128
129

130
131

132
133
134

135
136

137
138
139
140
141
142

143
144

145
146

147
148
149

150
151

152
153
154
155
156

157
158
159


160
161
162
163
164
165
166
167
168
169

170
171

172
173
174
175
176
177
178

179
180

181
182
183
184
185
186
187
188
189
190
191
192
193


194

195
196
197
198
199
200
201
202
203
204
205

206
207
208
209
210
211
212

213
214
215
216
217
218

219
220
221
222
223


224
225
226
227
228
229

230
231
232
233

234
235
236
237
238

239
240
241
242
243
244
245
246
247
248
249
250

251
252
253
254
255
256
257
258
259
260
261
262






263
264
265
266

267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292

293
294
295
296
297



298
299
300
301


302
303





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15










16
17
18
19
20
21
22
23
24
25
26
27


28
29

30

31
32

33
34
35


36
37


38

39
40

41
42










43
44

45

46


47
48
49
50
51
52
53
54


55


56

57
58

59
60


61
62
63

64


65



66
67



68


69

70

71
72

73
74

75
76

77

78

79
80

81
82

83
84

85
86

87

88

89














90

91



92

93
94

95
96

97
98
99

100
101

102
103
104
105
106
107

108
109

110
111

112
113
114

115
116

117
118
119
120
121

122
123


124
125








126

127
128

129





130

131
132

133












134
135
136

137









138

139





140

141




142

143


144


145
146






147
148



149



150

151










152

153







154




155
156
157
158
159
160




161





162




















163

164



165
166
167




168
169
170

171
172
173
174
175

+













-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+


-
-
+
+
-

-
+

-
+

+
-
-
+
+
-
-

-
+

-
+

-
-
-
-
-
-
-
-
-
-
+

-
+
-

-
-
+
+
+
+
+
+
+

-
-
+
-
-

-
+

-
+

-
-
+
+

-
+
-
-
+
-
-
-
+
+
-
-
-
+
-
-
+
-

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+

-
+
-

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
+
-
-
-

-
+

-
+

-
+


-
+

-
+





-
+

-
+

-
+


-
+

-
+




-
+

-
-
+
+
-
-
-
-
-
-
-
-

-
+

-
+
-
-
-
-
-

-
+

-
+
-
-
-
-
-
-
-
-
-
-
-
-

+
+
-
+
-
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-

-
+
-
-
-
-

-
+
-
-

-
-
+
+
-
-
-
-
-
-
+

-
-
-
+
-
-
-

-
+
-
-
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-
-

-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
-
-
-
-
-

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-

-
-
-
+
+
+
-
-
-
-
+
+

-
+
+
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Культ_личности_Ткаббера/index.html)


# Культ личности Ткаббера

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 Рождение легенды](#Рождение_легенды)
* [2 Трансцендентная сущность](#Трансцендентная_сущность)
* [3 Пророческий сон](#Пророческий_сон)
* [4 Святая равноапостольская церковь](#Святая_равноапостольская_церковь)
* [5 Ткаббер правит миром](#Ткаббер_правит_миром)
* [6 Игра "Задай вопрос про Ткаббер и выиграй приз!"](#Игра_Задай_вопрос_про_Ткаббер_и_выиграй_приз)
   * [6.1 Список Славы](#Список_Славы)
      * [6.1.1 Октябрь 2007 (Compiz, meet Tkabber. Tkabber, meet Compiz)](#Октябрь_2007_Compiz_meet_Tkabber._Tkabber_meet_Compiz)
      * [6.1.2 Ноябрь 2007 (не.жужжи.насекомое)](#Ноябрь_2007_не.жужжи.насекомое)
      * [6.1.3 Февраль 2008 (ткаббер версия 4.0 финал)](#Февраль_2008_ткаббер_версия_4.0_финал)
      * [6.1.4 Май 2008 (скрытие версии клиента)](#Май_2008_скрытие_версии_клиента)
* [7 Как правильно троллить в конференции tkabber@c.j.r.](#Как_правильно_троллить_в_конференции_tkabberc.j.r.)
   * [7.1 Толстый троллинг](#Толстый_троллинг)
   * [7.2 Тонкий троллинг](#Тонкий_троллинг)
   * [7.3 Очень тонкий троллинг](#Очень_тонкий_троллинг)
   * [7.4 Резюмируя](#Резюмируя)
 * [6.1 Список Славы](#Список_Славы)
  * [6.1.1 Октябрь 2007 (Compiz, meet Tkabber. Tkabber, meet Compiz)](#Октябрь_2007_Compiz_meet_Tkabber._Tkabber_meet_Compiz)
  * [6.1.2 Ноябрь 2007 (не.жужжи.насекомое)](#Ноябрь_2007_не.жужжи.насекомое)
  * [6.1.3 Февраль 2008 (ткаббер версия 4.0 финал)](#Февраль_2008_ткаббер_версия_4.0_финал)
  * [6.1.4 Май 2008 (скрытие версии клиента)](#Май_2008_скрытие_версии_клиента)
* [7 Как правильно троллить в конференции tkabber@c.j.r.](#Как_правильно_троллить_в_конференции_tkabber@c.j.r.)
 * [7.1 Толстый троллинг](#Толстый_троллинг)
 * [7.2 Тонкий троллинг](#Тонкий_троллинг)
 * [7.3 Очень тонкий троллинг](#Очень_тонкий_троллинг)
 * [7.4 Резюмируя](#Резюмируя)
* [8 TODO](#TODO)

## <a id="Рождение_легенды"></a>Рождение легенды
Ткаббер трёх дней от роду (найдено в архивах НКВД):
# <a id="Рождение_легенды"></a>Рождение легенды
Ткаббер трёх дней от роду (найдено в архивах НКВД): ![картинка с трёхдневным Ткаббером](../images/0day-tkabber.png) 
![картинка с трёхдневным Ткаббером](../images/0day-tkabber.png)

## <a id="Трансцендентная_сущность"></a>Трансцендентная сущность
# <a id="Трансцендентная_сущность"></a>Трансцендентная сущность

![Альтер эго Ткаббера](../images/180px-Sneg_01.jpg)
![](../images/180px-Sneg_01.jpg)

![](../images/magnify-clip.png)
Культисту [*hypersw*](Участник_Hypersw.md), медитировавшему однажды в холодном
январском сугробе, внезапно открылась трансцендентная сущность Ткаббера —

Культисту [hypersw](Участник_Hypersw.md), медитировавшему однажды в холодном январском сугробе, внезапно открылась трансцендентная сущность Ткаббера — самого "фичастого" XMPP-клиента, и Провидние указало ему [Тот Самый URL](http://www.deposviblovo.ru/photo/vagon/sneg/sneg_01.jpg) (уже недоступен). 
самого "фичастого" XMPP-клиента, и Провидние указало ему
[Тот Самый URL](http://www.deposviblovo.ru/photo/vagon/sneg/sneg_01.jpg) (уже недоступен).

## <a id="Пророческий_сон"></a>Пророческий сон
# <a id="Пророческий_сон"></a>Пророческий сон

![Bigote видит индюка с квазипериодическим пульсом](../images/Psycho.jpg)
![Bigote видит индюка с квазипериодическим пульсом](../images/Psycho.jpg) [12:32]\* [bigote](Участник_Bigote.md) приснился сон, что [teo](Участник_Teo.md) велел ему посчитать пульс какого-то не то индюка, не то петуха. но что-то шло не так в этом мире, и секундная стрелка часов носилась как бешеная, и [bigote](Участник_Bigote.md) не успевал за ней даже следить, не то что считать пульс. тогда [teo](Участник_Teo.md) сказал: "сейчас настрою" и [сделал как-то так](http://ru.wikipedia.org/wiki/Специальная_теория_относительности#.D0.A1.D1.83.D1.89.D0.BD.D0.BE.D1.81.D1.82.D1.8C_.D0.A1.D0.A2.D0.9E), что движение стрелки замедлилось, а размер [шрифта в чате](Шрифты.md) уменьшился (именно так я и понял, что время замедлилось). 

[12:32]\* [**bigote**](Участник_Bigote.md) приснился сон, что [**teo**](Участник_Teo.md)
велел ему посчитать пульс какого-то не то индюка, не то петуха. но что-то шло
не так в этом мире, и секундная стрелка часов носилась как бешеная, и
[**bigote**](Участник_Bigote.md) не успевал за ней даже следить, не то что считать
пульс. тогда [**teo**](Участник_Teo.md) сказал: "сейчас настрою" и
[сделал как-то так](http://ru.wikipedia.org/wiki/Специальная_теория_относительности#.D0.A1.D1.83.D1.89.D0.BD.D0.BE.D1.81.D1.82.D1.8C_.D0.A1.D0.A2.D0.9E),
что движение стрелки замедлилось, а размер [**шрифта в чате**](Шрифты.md)
уменьшился (именно так я и понял, что время замедлилось).

Оригинал — [здесь](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/10/13.html#12:32:48).
Оригинал — [здесь](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/10/13.html#12:32:48). 

Дополнительные материалы — <s>[здесь](http://ru.wikipedia.org/wiki/Бред)</s>
Дополнительные материалы — <s>[здесь](http://ru.wikipedia.org/wiki/Бред)</s> [здесь](http://ru.wikipedia.org/wiki/Сновидение). 
[здесь](http://ru.wikipedia.org/wiki/Сновидение).

## <a id="Святая_равноапостольская_церковь"></a>Святая равноапостольская церковь
[Первые апостолы](http://www.jabber.ru/node/223#comment-228)
# <a id="Святая_равноапостольская_церковь"></a>Святая равноапостольская церковь
[Первые апостолы](http://www.jabber.ru/node/223#comment-228) 

Примечание: к [синдрому ПГМ](http://lurkmore.ru/wiki/ПГМ) отношения не имеет. 

# <a id="Ткаббер_правит_миром"></a>Ткаббер правит миром
Сертификат порабощения Мира предоставлен [[1]](http://thepr.ru)]. 

Примечание: к [синдрому ПГМ](http://lurkmore.ru/wiki/ПГМ) отношения не имеет.

![](../images/180px-Tkabber-master.jpg)
## <a id="Ткаббер_правит_миром"></a>Ткаббер правит миром
Сертификат порабощения Мира предоставлен [[1]](http://thepr.ru).

![Сертификат порабощения мира](../images/180px-Tkabber-master.jpg)
![](../images/magnify-clip.png)

[Ссылка на сам сертификат (осторожно, трафик!).](http://thepr.ru/index.php?cert=tkabber243821)
[Ссылка на сам сертификат (осторожно, трафик!).](http://thepr.ru/index.php?cert=tkabber243821) 

## <a id="Игра_Задай_вопрос_про_Ткаббер_и_выиграй_приз"></a>Игра "Задай вопрос про Ткаббер и выиграй приз!"
Правила несложные:
# <a id="Игра_Задай_вопрос_про_Ткаббер_и_выиграй_приз"></a>Игра "Задай вопрос про Ткаббер и выиграй приз!"
Правила несложные: 

*  Задай вопрос, относящийся к Ткабберу, ответа на который нет на вики и в
*  Задай вопрос, относящийся к Ткабберу, ответа на который нет на вики и в интернете (см. раздел [Ссылки](Ссылки.md)). 
   интернете (см. раздел [Ссылки](Ссылки.md)).
*  Если и вправду на него нет ответа, мы постараемся ответ найти, а человек,
*  Если и вправду на него нет ответа, мы постараемся ответ найти, а человек, вопрос задавший, автоматически становится победителем. 
   вопрос задавший, автоматически становится победителем.
*  Подведение итогов — последний день каждого месяца.
*  Победителю разрешается в день подведения итогов в течение получаса нарушать
*  Подведение итогов — последний день каждого месяца. 
*  Победителю разрешается в день подведения итогов в течение получаса нарушать правила, изложенные в топике, а админы конфы в этот день будут говорить ему два раза "ку". 
   правила, изложенные в топике, а админы конфы в этот день будут говорить ему
   два раза "ку".
*  Имя победителя появится в Списке Славы, который будет публиковаться тут же,
*  Имя победителя появится в Списке Славы, который будет публиковаться тут же, чуть ниже. 
   чуть ниже.
*  Победитель снискает почёт и уважение на просторах конференции, и ему
*  Победитель снискает почёт и уважение на просторах конференции, и ему пожизненно присвоится ранг "член-корреспондент". 
   пожизненно присвоится ранг "член-корреспондент".

### <a id="Список_Славы"></a>Список Славы
## <a id="Список_Славы"></a>Список Славы

#### <a id="Октябрь_2007_Compiz_meet_Tkabber._Tkabber_meet_Compiz"></a>Октябрь 2007 (Compiz, meet Tkabber. Tkabber, meet Compiz)
### <a id="Октябрь_2007_Compiz_meet_Tkabber._Tkabber_meet_Compiz"></a>Октябрь 2007 (Compiz, meet Tkabber. Tkabber, meet Compiz)

Победил вопрос Vit@liy (а также ответ teo):
Победил вопрос Vit@liy (а также ответ teo): 

\<Vit@liy> У меня в окне настроек при перемотке смазывается содержимое окна. Не
\<Vit@liy> У меня в окне настроек при перемотке смазывается содержимое окна. Не подскажите из-за чего это может быть? 
подскажите из-за чего это может быть?

\<teo> ничего нового. ткаббер так же глючит в компизе
\<teo> ничего нового. ткаббер так же глючит в компизе 

\<teo> или компиз так же глючит на ткаббере
\<teo> или компиз так же глючит на ткаббере 

[Читать весь лог.](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/10/01.html#22:07:10)
[Читать весь лог.](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/10/01.html#22:07:10) 

#### <a id="Ноябрь_2007_не.жужжи.насекомое"></a>Ноябрь 2007 (не.жужжи.насекомое)
### <a id="Ноябрь_2007_не.жужжи.насекомое"></a>Ноябрь 2007 (не.жужжи.насекомое)

Досрочно победил вопрос astja (над решением бились всей конфой всё утро, так
Досрочно победил вопрос astja (над решением бились всей конфой всё утро, так что лучше читать [весь чатлог](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/11/20.html#11:10:31)): 
что лучше читать [весь чатлог](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/11/20.html#11:10:31)):

[11:35:11](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/11/20.html#11:35:11)
[11:35:11](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/11/20.html#11:35:11) \<astja> Спасибо за понимание. [http://slil.ru/25125380](http://slil.ru/25125380) Здесь скриншот _(в формате BMP, 3Mb. Лёгкая версия в 132 Kb (хоть и тоже с расширением BMP) — [тут](http://slil.ru/25125415). Прим. ред.)._ Сегодня когда я вошла в программу, открыла свою конференцию (на скриншоте она называется svoiludi...) и общалась в ней - все было вполне обычно, все мои сообщения были под моим ником. Но когда мне написал кто-то из контактов - вкладка открылась не под ником контакта а под ником "не.жужжи.насекомое", а мои сообщения ему уходили под этим же ником. У меня ранее в контактах была сохранена одноименная конференция, в которой я бывала пару раз. Теперь когда я нахожу в списке эту конференцию и просматриваю ее информацию - там отображается моя личная информация. Удалить эту конференция нельзя. К тому же, если я сама первая пишу кому-то из своего контакт-листа - на примере - Vitaliys, то снова видно какой у меня ник...Но вкладка называется нормально. И ваша конференция тоже называется "не.жужжи.насекомое" на снимке она же...открыта крайняя правая. 
\<astja> Спасибо за понимание. [http://slil.ru/25125380](http://slil.ru/25125380) Здесь
скриншот _(в формате BMP, 3Mb. Лёгкая версия в 132 Kb (хоть и тоже с
расширением BMP) — [тут](http://slil.ru/25125415). Прим. ред.)._ Сегодня когда
я вошла в программу, открыла свою конференцию (на скриншоте она называется
svoiludi...) и общалась в ней - все было вполне обычно, все мои сообщения были
под моим ником. Но когда мне написал кто-то из контактов - вкладка открылась не
под ником контакта а под ником "не.жужжи.насекомое", а мои сообщения ему
уходили под этим же ником. У меня ранее в контактах была сохранена одноименная
конференция, в которой я бывала пару раз. Теперь когда я нахожу в списке эту
конференцию и просматриваю ее информацию - там отображается моя личная
информация. Удалить эту конференция нельзя. К тому же, если я сама первая пишу
кому-то из своего контакт-листа - на примере - Vitaliys, то снова видно какой у
меня ник...Но вкладка называется нормально. И ваша конференция тоже называется
"не.жужжи.насекомое" на снимке она же...открыта крайняя правая.

_Прим. ред.: Ссылки уже не работают, так как подобные сервисы долго файлы не
_Прим. ред.: Ссылки уже не работают, так как подобные сервисы долго файлы не хранят. Надо было нам  файлик скачать к себе, конечно, но... поздно пить боржоми, когда почки в унитазе :) Можем подтвердить, что на скриншоте всё было именно так, как описывает astja._ 
хранят. Надо было нам  файлик скачать к себе, конечно, но... поздно пить
боржоми, когда почки в унитазе :) Можем подтвердить, что на скриншоте всё было
именно так, как описывает astja._

#### <a id="Февраль_2008_ткаббер_версия_4.0_финал"></a>Февраль 2008 (ткаббер версия 4.0 финал)
### <a id="Февраль_2008_ткаббер_версия_4.0_финал"></a>Февраль 2008 (ткаббер версия 4.0 финал)

Похоже, этот вопрос тоже победит досрочно, уж больно хорош ;)
Похоже, этот вопрос тоже победит досрочно, уж больно хорош ;) 

    [13:51:24] <alengina > привет всем :) где можно скачать
    [13:51:24] <alengina > привет всем :) где можно скачать 
    ткабер версию 4.0 финал?
    [13:51:46] <alengina > version
    [13:51:46] <sulci> alengina : у тебя клиент Tkabber 0.10.1-beta2
    [13:51:46] <sulci> alengina : у тебя клиент Tkabber 0.10.1-beta2 
    (Tcl/Tk 8.4.16 (pack rev.2)) - Windows XP
    [13:52:06] <sceptik> alengina : если найдешь скажи..
    [13:52:06] <sceptik> alengina : если найдешь скажи.. 
    а то мы на старой 0.10.1 сидим..
    [13:53:14] <alengina > vlf e;
    [13:53:20] <alengina > мда уж
    [13:54:15] <alengina > ну ладно пока ...

© [http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/02/03.html\#13:51:24](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/02/03.html#13:51:24)
© [http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/02/03.html\#13:51:24](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/02/03.html#13:51:24) 

#### <a id="Май_2008_скрытие_версии_клиента"></a>Май 2008 (скрытие версии клиента)
### <a id="Май_2008_скрытие_версии_клиента"></a>Май 2008 (скрытие версии клиента)

На сей раз побеждает (тоже досрочно) не вопрос, а ответ камрада [Gebb](Участник_Gebb.md):
На сей раз побеждает (тоже досрочно) не вопрос, а ответ камрада [Gebb](Участник_Gebb.md): 

    [07:25:56] <ackerman1994> утра
    [07:26:28] <ackerman1994> не подскажете как поменять Client ID
    [07:26:28] <ackerman1994> не подскажете как поменять Client ID 
    или как там в tkabber? а то палят что я под виндой сижу
    [07:50:57] <Gebb> Если бы господь считал винду отстойной осью,
    [07:50:57] <Gebb> Если бы господь считал винду отстойной осью, 
    допустил бы он существование Ткаббера под ней?
    Так им и скажи. И не стесняйся винды.
    [08:13:24] <_vt_> в фортунки %)

© [http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/05/21.html\#07:25:56](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/05/21.html#07:25:56)
© [http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/05/21.html\#07:25:56](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2008/05/21.html#07:25:56) 

## <a id="Как_правильно_троллить_в_конференции_tkabberc.j.r."></a>Как правильно троллить в конференции tkabber@c.j.r.
В связи с недавними гонениями AOL на пасынков ICQ всё больше и больше народу
# <a id="Как_правильно_троллить_в_конференции_tkabber@c.j.r."></a>Как правильно троллить в конференции tkabber@c.j.r.
В связи с недавними гонениями AOL на пасынков ICQ всё больше и больше народу переходит на Jabber. Бродя по Discovery сервера jabber.ru, многие новички, случается, заходят и в нашу конференцию, совершенно не зная, как себя при этом вести (топик комнаты освещает этот момент, но его мало кто читает). Часто люди пробуют в конфе разнообразные фичи свежепоставленного джаббер-клиента, разглядывают собственные смайлики или просто спамят или троллят. Причём в 90% случаев делают это из рук вон плохо. В нижеследующем коротком мануальчике мы постараемся рассказать об основных аспектах труЪ-тролленья, дающего невероятное количество лулзов при минимальных затратах сил. 
переходит на Jabber. Бродя по Discovery сервера jabber.ru, многие новички,
случается, заходят и в нашу конференцию, совершенно не зная, как себя при этом
вести (топик комнаты освещает этот момент, но его мало кто читает). Часто люди
пробуют в конфе разнообразные фичи свежепоставленного джаббер-клиента,
разглядывают собственные смайлики или просто спамят или троллят. Причём в 90%
случаев делают это из рук вон плохо. В нижеследующем коротком мануальчике мы
постараемся рассказать об основных аспектах труЪ-тролленья, дающего невероятное
количество лулзов при минимальных затратах сил.

### <a id="Толстый_троллинг"></a>Толстый троллинг
## <a id="Толстый_троллинг"></a>Толстый троллинг

К сожалению, толстый троллинг (налёты, спам и злоупотребление олбанским) очень
К сожалению, толстый троллинг (налёты, спам и злоупотребление олбанским) очень неэффективен в этой конференции, потому что пресекается админами жестоко и на корню: им ничего не стоит забанить на полгода целый сервер или поставить комнату в read-only mode. Поэтому сосредоточимся на тонком и _очень тонком_ троллинге. Он, как и сам Ткаббер, — не для средних умов, но зато (как и сам Ткаббер) невероятно эффективен. 
неэффективен в этой конференции, потому что пресекается админами жестоко и на
корню: им ничего не стоит забанить на полгода целый сервер или поставить
комнату в read-only mode. Поэтому сосредоточимся на тонком и _очень тонком_
троллинге. Он, как и сам Ткаббер, — не для средних умов, но зато (как и сам
Ткаббер) невероятно эффективен.

### <a id="Тонкий_троллинг"></a>Тонкий троллинг
## <a id="Тонкий_троллинг"></a>Тонкий троллинг

*  Перво-наперво, надо поставить Ткаббер и научиться в нём работать. После
*  Перво-наперво, надо поставить Ткаббер и научиться в нём работать. После этого надо с месяцок потусоваться в конференции, втираясь в доверие. Пока вы этим занимаетесь, можете прочитать [Ткаббер ЧаВо](Ткаббер_ЧаВо.md), а лучше всю вики, чтобы быть осведомлённее самих разработчиков и при случае затыкать им рот цитатами оттуда. Не спешите в первые же дни задавать вопросы, иначе вы можете чего-нибудь не того ляпнуть, и вас примут за толстого тролля и сразу выгонят, а то и забанят. Но даже если и не выгонят, на вас ляжет пятно подозрения, и втереться в доверие станет на порядок сложнее. 
   этого надо с месяцок потусоваться в конференции, втираясь в доверие. Пока вы
   этим занимаетесь, можете прочитать [**Ткаббер ЧаВо**](Ткаббер_ЧаВо.md), а лучше
   всю вики, чтобы быть осведомлённее самих разработчиков и при случае затыкать
   им рот цитатами оттуда. Не спешите в первые же дни задавать вопросы, иначе
   вы можете чего-нибудь не того ляпнуть, и вас примут за толстого тролля и
   сразу выгонят, а то и забанят. Но даже если и не выгонят, на вас ляжет пятно
   подозрения, и втереться в доверие станет на порядок сложнее.

*  Немного поосвоившись, можно начинать троллить, например, спрашивая, почему в
   Ткаббере нету фичи, которая есть в твоём _на самом деле любимом_ клиенте.
   Разработчики рвут на груди рубаху, защищая свой сраный тикль и свой
   недоделанный Ткаббер, а ты валяешься под стулом, ловя лулзы.

*  Немного поосвоившись, можно начинать троллить, например, спрашивая, почему в Ткаббере нету фичи, которая есть в твоём _на самом деле любимом_ клиенте. Разработчики рвут на груди рубаху, защищая свой сраный тикль и свой недоделанный Ткаббер, а ты валяешься под стулом, ловя лулзы. 

*  Плохого тролля сразу выдаёт плохой русский язык. Пишите грамотно, если
*  Плохого тролля сразу выдаёт плохой русский язык. Пишите грамотно, если хотите сойти в конференции за своего. Половина пользователей конфы и все её админы — настоящие граммар-наци. Если у вас в школе по русскому языку была тройка с длинным минусом, вам тут нечего делать. Вместо того чтобы получить удовольствие самому, вы доставите удовольствие этим глумливым грамотеям. И никакого олбанского! Вы же не хотите одной фразой испортить игру, рассчитанную на целые годы удовольствия? Хинт: если вам посоветовали спросить у бота в привате "wtf русский\_язык", это значит, что ваша фальшивая борода грамотного человека отклеилась. Бегите перечитывать [Розенталя.](http://www.spelling.spb.ru/rosenthal/alpha/) 
   хотите сойти в конференции за своего. Половина пользователей конфы и все её
   админы — настоящие граммар-наци. Если у вас в школе по русскому языку была
   тройка с длинным минусом, вам тут нечего делать. Вместо того чтобы получить
   удовольствие самому, вы доставите удовольствие этим глумливым грамотеям. И
   никакого олбанского! Вы же не хотите одной фразой испортить игру,
   рассчитанную на целые годы удовольствия? Хинт: если вам посоветовали
   спросить у бота в привате "wtf русский\_язык", это значит, что ваша
   фальшивая борода грамотного человека отклеилась. Бегите перечитывать
   [Розенталя.](http://www.spelling.spb.ru/rosenthal/alpha/)

*  Та же история с так называемыми "слепыми смайлами с двойными подбородками",
*  Та же история с так называемыми "слепыми смайлами с двойными подбородками", вот такими — )))))) Чего им взбрендило за них банить??????? Весь интернет так смеётся!!!!1111 Не может же быть, что весь интернет — идиоты, и лишь одни разработчики Ткаббера — умные. Что же они тогда строем не ходят? Тем не менее, чтобы не проколоться, пишите смайлики с глазками, вот так — :) А ещё лучше — даже не заикайтесь в конференции ни про них, ни про аватары. 
   вот такими — )))))) Чего им взбрендило за них банить??????? Весь интернет
   так смеётся!!!!1111 Не может же быть, что весь интернет — идиоты, и лишь
   одни разработчики Ткаббера — умные. Что же они тогда строем не ходят? Тем не
   менее, чтобы не проколоться, пишите смайлики с глазками, вот так — :) А ещё
   лучше — даже не заикайтесь в конференции ни про них, ни про аватары.

*  Можно, прикидываясь нубом, попросить написать какой-нибудь плагин и потом
*  Можно, прикидываясь нубом, попросить написать какой-нибудь плагин и потом долго ухохатываться, читая их советы выучить тикль, который проще пареной репы, и написать плагин самому и потом поделиться с общественностью (на самом деле плагин давно написал ты сам и даже собираешься выложить его на вики, но потроллить — это же святое!) 
   долго ухохатываться, читая их советы выучить тикль, который проще пареной
   репы, и написать плагин самому и потом поделиться с общественностью (на
   самом деле плагин давно написал ты сам и даже собираешься выложить его на
   вики, но потроллить — это же святое!)

*  Очень весело бывает спросить, почему Ткаббер такой страшный, хотя на самом
*  Очень весело бывает спросить, почему Ткаббер такой страшный, хотя на самом деле ты давно приделал к нему tile, просто не хочешь делиться тайной. То же самое относится к jingle. 
   деле ты давно приделал к нему tile, просто не хочешь делиться тайной. То же
   самое относится к jingle.

*  Самый писк тонкого тролленья — это сидеть в конфе через сам Ткаббер,
   допиленный таким образом, чтобы при выходе из конфы он выдавал что-нибудь
*  Самый писк тонкого тролленья — это сидеть в конфе через сам Ткаббер, допиленный таким образом, чтобы при выходе из конфы он выдавал что-нибудь вроде "QIP Infium: Спокойное общение" (ну и версию клиента и OS показывал соответствующую). Задаёшь свой глупый вопрос, ловишь лулзы, а потом выходишь из конференции и идёшь читать её логи, потому что самое интересное начинается, когда они видят твоё выходное сообщение. Естественно, допиливать Ткаббер надо самостоятельно, не прося помощи у разработчиков. Они не такие дураки, чтобы не связать эти два события в логическую цепочку. 

   вроде "QIP Infium: Спокойное общение" (ну и версию клиента и OS показывал
   соответствующую). Задаёшь свой глупый вопрос, ловишь лулзы, а потом выходишь
   из конференции и идёшь читать её логи, потому что самое интересное
   начинается, когда они видят твоё выходное сообщение. Естественно, допиливать
   Ткаббер надо самостоятельно, не прося помощи у разработчиков. Они не такие
   дураки, чтобы не связать эти два события в логическую цепочку.
## <a id="Очень_тонкий_троллинг"></a>Очень тонкий троллинг

### <a id="Очень_тонкий_троллинг"></a>Очень тонкий троллинг

*  Теоретическая подготовка очень продвинутого тролля должна быть сравнимой с
*  Теоретическая подготовка очень продвинутого тролля должна быть сравнимой с подготовкой разработчиков. Поэтому очень не помешает выучить тикль, благо он учится за три дня. В коде Ткаббера разбираться необязательно — там чёрт ногу сломит, но самые основные модули стоит выучить близко к тексту.  
   подготовкой разработчиков. Поэтому очень не помешает выучить тикль, благо он
   учится за три дня. В коде Ткаббера разбираться необязательно — там чёрт ногу
   сломит, но самые основные модули стоит выучить близко к тексту.

*  Если вы выбрали амплуа нуба, можете попробовать тонко поиграть на доброте
*  Если вы выбрали амплуа нуба, можете попробовать тонко поиграть на доброте админов к тем, кто стремится к знаниям, а не идёт по лёгкому пути, донимая разрабов вопросами, давно разжёванными на вики. Поэтому перед тем как идти в конфу с каким-то вопросом, освежите в памяти официальную документацию и [Ткаббер ЧаВо](Ткаббер_ЧаВо.md). Погуглите, наконец. Подучив матчасть, можно не бояться сморозить какую-нибудь глупость, которая сразу выдаст вас с головой. Вопрос стоит задать [так](Topic.md), чтобы казалось, что вы мало чего понимаете, но из кожи вон лезете, чтобы разобраться. Разработчики таких любят :) Они сразу бросят все свои дела и наперебой кинутся помогать вам. Классно же, а? У вас-то ведь на самом деле всё работает! Ну или чинится двумя щёлканьями пальцев. 
   админов к тем, кто стремится к знаниям, а не идёт по лёгкому пути, донимая
   разрабов вопросами, давно разжёванными на вики. Поэтому перед тем как идти в
   конфу с каким-то вопросом, освежите в памяти официальную документацию и
   [**Ткаббер ЧаВо**](Ткаббер_ЧаВо.md). Погуглите, наконец. Подучив матчасть, можно
   не бояться сморозить какую-нибудь глупость, которая сразу выдаст вас с
   головой. Вопрос стоит задать [**так**](Остров_посланных_на....md), чтобы казалось, что вы мало
   чего понимаете, но из кожи вон лезете, чтобы разобраться. Разработчики таких
   любят :) Они сразу бросят все свои дела и наперебой кинутся помогать вам.
   Классно же, а? У вас-то ведь на самом деле всё работает! Ну или чинится
   двумя щёлканьями пальцев.

*  Однако _очень тонкий троллинг_ теряет много остроты, если вы сидите на
*  Однако _очень тонкий троллинг_ теряет много остроты, если вы сидите на стабильной версии и прикидываетесь новичком. Научитесь пользоваться subversion, поставьте себе свежую версию из репозитория (ради смеха предварительно ознакомившись с [этой статьёй](SVN_disclaimer.md)). Так вы убьёте двух зайцев: во-первых, получите самые свежие фичи и исправления багов Ткаббера, а во-вторых, — это же круто, вы типа "сидите на голове репа"! Сейчас мы расскажем, как можно с выгодой использовать svn-версию для продвинутого тролленья. 
   стабильной версии и прикидываетесь новичком. Научитесь пользоваться
   subversion, поставьте себе свежую версию из репозитория (ради смеха
   предварительно ознакомившись с [**этой статьёй**](SVN_disclaimer.md)). Так вы
   убьёте двух зайцев: во-первых, получите самые свежие фичи и исправления
   багов Ткаббера, а во-вторых, — это же круто, вы типа "сидите на голове
   репа"! Сейчас мы расскажем, как можно с выгодой использовать svn-версию для
   продвинутого тролленья.

*  Время от времени вы можете "помочь разработке", показав девелоперам
   найденный баг (сидя на голове репа, вы получаете не только свежие фичи, но и
   свежие баги). Обязательно сделайте это по всей форме: залив текст ошибки на
   paste.org.ru, а скриншот — на tinypic.com. Расскажите, какие условия вызвали
*  Время от времени вы можете "помочь разработке", показав девелоперам найденный баг (сидя на голове репа, вы получаете не только свежие фичи, но и свежие баги). Обязательно сделайте это по всей форме: залив текст ошибки на paste.org.ru, а скриншот — на tinypic.com. Расскажите, какие условия вызвали этот баг, как вы пытались с ним бороться, ну и так далее. Вот прикол — наивные ткабберовцы начнут уважать вас и считаться с вашим мнением, и невдомёк им, что на самом-то деле вы просто корчитесь от смеха! Троллить в этом стиле очень трудно, потому что можно, самому того не замечая, втянуться в разработку и полюбить эту кривую прогу и тупой тикль ([по словам одного из их гуру](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2009/02/04.html#14:49:23.893658), у него нету даже синтаксиса), который надо было выбросить на свалку ещё в прошлом тысячелетии и переписать Ткаббер на сишарпе, питоне или каком-нибудь другом [православном языке.](http://okante.narod.ru/D/) 

*  Ещё один путь "примкнуть" к разработке — сделать свою цветовую схему, свой набор смайликов, иконок или звуков, написать свой плагин, как это делают некоторые олухи, которым не жаль своего времени. Да, вы тоже потратите на это время, но разница в том, что они это сделали за свою опенсорсную идею, а вы сделаете, чтобы потом втайне простебаться над всеми пользователями, которые вам поверили ;) Сколько ни рисуй к Ткабберу красивых иконок и цветовых схем — он так и останется, к удовольствию анонимусов с ЛОРа, **самым страшным клиентом.** 

*  Чуть не забыл добавить: обладая Ткаббером, вы получаете в нагрузку ещё одну конференцию, где можно оттянуться: xmpp:tkabber-games@conference.jabber.ru. Поставьте себе игровые плагины, заходите и прикидывайтесь шахматистом или любителем шашек/рэндзю/реверси. Если не потроллите, то хоть развлечётесь в поддавки :) Кстати, можно ещё написать плагины для го, преферанса и морского боя — представляете, сколько славы и лулзов вы оторвёте за один такой плагин?! ;) 

   этот баг, как вы пытались с ним бороться, ну и так далее. Вот прикол —
   наивные ткабберовцы начнут уважать вас и считаться с вашим мнением, и
   невдомёк им, что на самом-то деле вы просто корчитесь от смеха! Троллить в
   этом стиле очень трудно, потому что можно, самому того не замечая, втянуться
## <a id="Резюмируя"></a>Резюмируя
   в разработку и полюбить эту кривую прогу и тупой тикль
   ([по словам одного из их гуру](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2009/02/04.html#14:49:23.893658),
   у него нету даже синтаксиса), который надо было выбросить на свалку ещё в
   прошлом тысячелетии и переписать Ткаббер на сишарпе, питоне или каком-нибудь
   другом [православном языке.](http://okante.narod.ru/D/)

*  Ещё один путь "примкнуть" к разработке — сделать свою цветовую схему, свой
   набор смайликов, иконок или звуков, написать свой плагин, как это делают
   некоторые олухи, которым не жаль своего времени. Да, вы тоже потратите на
   это время, но разница в том, что они это сделали за свою опенсорсную идею, а
   вы сделаете, чтобы потом втайне простебаться над всеми пользователями,
   которые вам поверили ;) Сколько ни рисуй к Ткабберу красивых иконок и
   цветовых схем — он так и останется, к удовольствию анонимусов с ЛОРа,
   **самым страшным клиентом.**

*  Чуть не забыл добавить: обладая Ткаббером, вы получаете в нагрузку ещё одну
   конференцию, где можно оттянуться: xmpp:tkabber-games@conference.jabber.ru.
   Поставьте себе игровые плагины, заходите и прикидывайтесь шахматистом или
   любителем шашек/рэндзю/реверси. Если не потроллите, то хоть развлечётесь в
   поддавки :) Кстати, можно ещё написать плагины для го, преферанса и морского
   боя — представляете, сколько славы и лулзов вы оторвёте за один такой
   плагин?! ;)

### <a id="Резюмируя"></a>Резюмируя

Эти две конференции — непаханое поле для умных, тонких ценителей настоящих
Эти две конференции — непаханое поле для умных, тонких ценителей настоящих лулзов. Было бы кому и чем пахать... Мы ждём вас, дорогие тролли! 
лулзов. Было бы кому и чем пахать... Мы ждём вас, дорогие тролли!

## <a id="TODO"></a>TODO
*  Устроить первый Вселенский Собор.
*  Заказать у Церетели чугунное изваяние Ткаббера в виде официального логотипа
# <a id="TODO"></a>TODO
*  Устроить первый Вселенский Собор. 
*  Заказать у Церетели чугунное изваяние Ткаббера в виде официального логотипа — "Лампочки-Земли" в масштабе 1:1; измерения доступны [здесь](http://ru.wikipedia.org/wiki/Земля). 
   — "Лампочки-Земли" в масштабе 1:1; измерения доступны
   [здесь](http://ru.wikipedia.org/wiki/Земля).
*  Сочинить гимн и девиз Ткаббера; разработать флаг и герб.
*  Таки сделать что-нибудь из этого! Или догнать хотя бы пиджин.
*  Сочинить гимн и девиз Ткаббера; разработать флаг и герб. 
*  Таки сделать что-нибудь из этого! Или догнать хотя бы пиджин. 

![Что ты сделал, чтобы догнать пиджин?](../images/180px-Tkabber_jingle.jpg)
![](../images/180px-Tkabber_jingle.jpg)

![](../images/magnify-clip.png)


Changes to wiki/ru/Между_офлайном_и_онлайном.md.

1

2
3
4
5
6
7

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25









26
27
28


29
30
31
32

33
34
35

36
37
38
39
40

41
42

43
44
45
46
47


48
49
50
51
52
53
54
55
56
57
58

59
60

61
62
63
64

65
66

67
68
69
70
71

72
73
74
75
76
77
78

79
80
81
82
83

84
85

86
87

88
89

90
91
92
93

94
95
96
97

98
99
100
101
102
103

104
105
106
107
108

109
110

111
112
113
114
115

116
117
118
119
120
121
122
123
124

125
126
127

128
129

130
131
132
133
134

135
136
137
138
139
140

141
142
143
144
145
146
147

148
149
150
151

152
153
154

155
156
157
158
159
160
161
162
163

164
165

166
167

168
169

170
171
172

173
174
175
176
177

178
179

180
181
182
183
184
185




186
187

188
189

190
191
192
193
194

195
196
197

198
199
200
201
202
203
204
205
206
207
208
209
210


211
212
213
214
215
216
217

218
219
220
221
222


223
224
225


226
227
228
229

230
231
232
233
234

235
236
237
238
239

240
241
242
243

244
245
246
247

248
249
250

251
252
253
254
255
256

257
258
259

260
261
262
263

264
265

266
267
268
269
270
271

272
273
274
275

276
277

278
279
280

281
282
283

284
285

286
287

288
289
290
291
292
293
294
295
296



297
298

299
300
301
302



303
304

305
306

307
308

309
310

311
312
313
314

315
316
317
318
319
320

321
322
323
324


325
326
327
328
329
330
331
332
333
334

335
336
337
338
339
340

341
342
343
344

345
346
347
348
349
350
351
352
353

354
355



1
2
3
4
5
6
7

8



9
10
11
12
13
14









15
16
17
18
19
20
21
22
23
24


25
26
27
28
29

30

31

32



33

34


35





36
37









38

39
40

41

42
43

44
45

46



47

48





49

50



51

52
53

54


55


56

57
58

59


60

61


62
63
64

65



66

67


68





69







70

71

72

73
74

75



76

77
78
79
80
81
82

83



84
85
86

87


88

89

90

91







92

93
94

95


96


97

98

99

100
101
102

103
104

105
106
107
108



109
110
111
112
113

114
115

116



117

118

119

120













121
122





123

124


125


126
127



128
129


130

131



132

133

134
135
136

137
138
139
140

141
142
143
144

145
146
147

148


149
150
151

152

153

154




155


156




157

158


159

160


161

162

163

164

165
166

167
168

169









170
171
172


173




174
175
176


177


178


179
180

181


182

183




184

185

186


187
188







189
190

191


192
193
194

195
196
197


198







199

200
201

202
203
204

+





-
+
-
-
-






-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+

-
-
+
+



-
+
-

-
+
-
-
-

-
+
-
-
+
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-

-
+

-
+
-


-
+

-
+
-
-
-

-
+
-
-
-
-
-

-
+
-
-
-

-
+

-
+
-
-
+
-
-
+
-


-
+
-
-

-
+
-
-



-
+
-
-
-

-
+
-
-
+
-
-
-
-
-
+
-
-
-
-
-
-
-

-
+
-

-
+

-
+
-
-
-

-
+





-
+
-
-
-



-
+
-
-

-
+
-

-
+
-
-
-
-
-
-
-

-
+

-
+
-
-
+
-
-
+
-

-
+
-



-
+

-
+



-
-
-
+
+
+
+

-
+

-
+
-
-
-

-
+
-

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-

-
+
-
-

-
-
+
+
-
-
-
+
+
-
-

-
+
-
-
-

-
+
-



-
+



-
+



-
+


-
+
-
-



-
+
-

-
+
-
-
-
-
+
-
-
+
-
-
-
-

-
+
-
-

-
+
-
-
+
-

-
+
-

-
+

-
+

-
+
-
-
-
-
-
-
-
-
-
+
+
+
-
-
+
-
-
-
-
+
+
+
-
-
+
-
-
+
-
-
+

-
+
-
-

-
+
-
-
-
-

-
+
-

-
-
+
+
-
-
-
-
-
-
-


-
+
-
-



-
+


-
-
+
-
-
-
-
-
-
-

-
+

-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Между_офлайном_и_онлайном/index.html)


# Между офлайном и онлайном

Материал из Tkabber Wiki

В этой статье рассказывается от том, как Ткаббер переходит грань между
В этой статье рассказывается от том, как Ткаббер переходит грань между "офлайном" и "онлайном", подключаясь к серверу: какие протоколы при этом используются, что означают "все эти странные настройки" в окне регистрации пользователя и какие "галочки понавключать" чтобы "оно всё заработало". 
"офлайном" и "онлайном", подключаясь к серверу: какие протоколы при этом
используются, что означают "все эти странные настройки" в окне регистрации
пользователя и какие "галочки понавключать" чтобы "оно всё заработало".

## <a id="toc"></a>Содержание

* [1 Для самых маленьких](#Для_самых_маленьких)
* [2 Ветхий и Новый заветы XMPP](#Ветхий_и_Новый_заветы_XMPP)
* [3 Канал связи клиент-сервер в Jabber/XMPP](#Канал_связи_клиент-сервер_в_Jabber_XMPP)
   * [3.1 Концепции](#Концепции)
   * [3.2 Куда и как подключаться?](#Куда_и_как_подключаться)
   * [3.3 Защита потока](#Защита_потока)
      * [3.3.1 SSL/TLS](#SSL_TLS)
      * [3.3.2 Сертификаты SSL/TLS](#Сертификаты_SSL_TLS)
   * [3.4 Аутентификация пользователя](#Аутентификация_пользователя)
   * [3.5 Реализация в XMPP](#Реализация_в_XMPP)
   * [3.6 Реализация в Jabber](#Реализация_в_Jabber)
   * [3.7 Поддержка в Ткаббере](#Поддержка_в_Ткаббере)
 * [3.1 Концепции](#Концепции)
 * [3.2 Куда и как подключаться?](#Куда_и_как_подключаться)
 * [3.3 Защита потока](#Защита_потока)
  * [3.3.1 SSL/TLS](#SSL_TLS)
  * [3.3.2 Сертификаты SSL/TLS](#Сертификаты_SSL_TLS)
 * [3.4 Аутентификация пользователя](#Аутентификация_пользователя)
 * [3.5 Реализация в XMPP](#Реализация_в_XMPP)
 * [3.6 Реализация в Jabber](#Реализация_в_Jabber)
 * [3.7 Поддержка в Ткаббере](#Поддержка_в_Ткаббере)
* [4 Подключение к XMPP-серверу: практика](#Подключение_к_XMPP-серверу_практика)
   * [4.1 "Стандартный" XMPP сервер](#Стандартный_XMPP_сервер)
   * [4.2 Серверы Google Talk](#Серверы_Google_Talk)
 * [4.1 "Стандартный" XMPP сервер](#Стандартный_XMPP_сервер)
 * [4.2 Серверы Google Talk](#Серверы_Google_Talk)
* [5 Примечания](#Примечания)

# <a id="Для_самых_маленьких"></a>Для самых маленьких
Здесь приведены "рекомендованные" настройки для _типичного_ случая, под которым
Здесь приведены "рекомендованные" настройки для _типичного_ случая, под которым мы понимаем соединение с сервером jabber.ru. 
мы понимаем соединение с сервером jabber.ru.

Рассмотрим самый простой случай: вы подключены к интернету напрямую, безо
Рассмотрим самый простой случай: вы подключены к интернету напрямую, безо всяких прокси, вместе с Ткаббером установлены все нужные и ненужные пакеты, перечисленные, например, [тут](http://tkabber.jabber.ru/dependencies2). В этом случае на 95% подойдут следующие настройки: 
всяких прокси, вместе с Ткаббером установлены все нужные и ненужные пакеты,
перечисленные, например, [тут](http://tkabber.jabber.ru/dependencies2). В этом
случае на 95% подойдут следующие настройки:

*  На вкладке "Соединение" окошка логина (которое вызывается по Ctrl-L) ничего
*  На вкладке "Соединение" окошка логина (которое вызывается по Ctrl-L) ничего отмечать не надо. 
   отмечать не надо.
*  На вкладке "Аутентификация" включить две галочки: "Использовать SASL для
*  На вкладке "Аутентификация" включить две галочки: "Использовать SASL для аутентификации" и "Разрешить механизм SASL X-GOOGLE-TOKEN". Строго говоря, вторая из них нужна для подключения к аккаунту на гугль-талке, но пусть уж будет. 
   аутентификации" и "Разрешить механизм SASL X-GOOGLE-TOKEN". Строго говоря,
   вторая из них нужна для подключения к аккаунту на гугль-талке, но пусть уж
   будет.
*  На вкладке "SSL & Сжатие" отметьте "Шифрование (STARTTLS)".
*  Вот, в общем-то, всё. Должно работать. Если вдруг не работает, попробуйте на
*  На вкладке "SSL & Сжатие" отметьте "Шифрование (STARTTLS)". 
*  Вот, в общем-то, всё. Должно работать. Если вдруг не работает, попробуйте на вкладке "Шифрование" сменить опцию на "Шифрование (Старый SSL)" или рискните "Открытый несжатый текст". Эту последнюю опцию следует пробовать лишь в самых крайних случаях. Если с ней подключиться удалось, следующий ваш шаг должен быть сделан в направлении настройки защищённого (шифрованного) соединения. Прямым ходом идите к нам в [xmpp:tkabber@conference.jabber.ru конференцию] и просите помощи (дочитав перед этим статью до конца!) И ни в коем случае не злоупотребляйте опцией "Открытый текст". Тоже в качестве крайней меры можно попробовать и первую опцию про открытый текст на вкладке "Аутентификация" — с теми же оговорками. 
   вкладке "Шифрование" сменить опцию на "Шифрование (Старый SSL)" или рискните
   "Открытый несжатый текст". Эту последнюю опцию следует пробовать лишь в
   самых крайних случаях. Если с ней подключиться удалось, следующий ваш шаг
   должен быть сделан в направлении настройки защищённого (шифрованного)
   соединения. Прямым ходом идите к нам в [xmpp:tkabber@conference.jabber.ru
   конференцию] и просите помощи (дочитав перед этим статью до конца!) И ни в
   коем случае не злоупотребляйте опцией "Открытый текст". Тоже в качестве
   крайней меры можно попробовать и первую опцию про открытый текст на вкладке
   "Аутентификация" — с теми же оговорками.

![(!)](../images/Hammer.png) **Сделать:** развить
![(!)](../images/Hammer.png) **Сделать:** развить 

![(!)](../images/Hammer.png) **Сделать:** вынести в отдельную статью раздел
![(!)](../images/Hammer.png) **Сделать:** вынести в отдельную статью раздел фака "Не могу подключиться ... через прокси" и поставить отсюда ссылку на него 
фака "Не могу подключиться ... через прокси" и поставить отсюда ссылку на него

# <a id="Ветхий_и_Новый_заветы_XMPP"></a>Ветхий и Новый заветы XMPP
Настало время развеять один укоренившийся миф.
Настало время развеять один укоренившийся миф. 

Принято считать, что XMPP ≈ Jabber. В принципе, так и есть: XMPP обратно
Принято считать, что XMPP ≈ Jabber. В принципе, так и есть: XMPP обратно совместим с Jabber, но и довольно серьёзные различия также имеют место. Большая, если не бо́льшая часть этих различий как раз приходится на механизм установки соединения с сервером. 
совместим с Jabber, но и довольно серьёзные различия также имеют место.
Большая, если не бо́льшая часть этих различий как раз приходится на механизм
установки соединения с сервером.

Относительная сложность диалога логина в Ткаббере как раз отражает эти
Относительная сложность диалога логина в Ткаббере как раз отражает эти различия, причём (возможно, к неудовольствию новичков) — с сугубо технических позиций. Однако здесь мы попытаемся поставить всё на свои места. С другой стороны, мы покажем, что дёргать настройки приходится, как правило, только при переходе со "старого" сервера на "новый" и наоборот. ![(!)](../images/Hammer.png) **Сделать:** написать понятнее 
различия, причём (возможно, к неудовольствию новичков) — с сугубо технических
позиций. Однако здесь мы попытаемся поставить всё на свои места. С другой
стороны, мы покажем, что дёргать настройки приходится, как правило, только при
переходе со "старого" сервера на "новый" и наоборот.
![(!)](../images/Hammer.png) **Сделать:** написать понятнее

[RFC \#3920](http://www.xmpp.org/rfcs/rfc3920.html) назвает "старый Jabber"
[RFC \#3920](http://www.xmpp.org/rfcs/rfc3920.html) назвает "старый Jabber" терминами "pre-XMPP" и "XMPP 0.9"; это, конечно, неофициальные наименования. Мы будем использовать термин "Jabber", ссылаясь на устаревшие версии протокола, и "XMPP", — ссылаясь на текущую, стандартную, версию. 
терминами "pre-XMPP" и "XMPP 0.9"; это, конечно, неофициальные наименования. Мы
будем использовать термин "Jabber", ссылаясь на устаревшие версии протокола, и
"XMPP", — ссылаясь на текущую, стандартную, версию.

Чтобы было понятнее "кто есть кто" и чего ожидать от конкретного сервера:
Чтобы было понятнее "кто есть кто" и чего ожидать от конкретного сервера: 

*  [jabberd 1.4](http://jabberd.jabberstudio.org/) — Jabber сервер; кое-где всё
*  [jabberd 1.4](http://jabberd.jabberstudio.org/) — Jabber сервер; кое-где всё ещё используется, но больше не развивается. 
   ещё используется, но больше не развивается.
*  [jabberd2](http://jabberd.jabberstudio.org/2/) — XMPP-сервер. Используется
*  [jabberd2](http://jabberd.jabberstudio.org/2/) — XMPP-сервер. Используется не очень часто. 
   не очень часто.
*  [ejabberd](http://ejabberd.jabber.ru) — XMPP-сервер. Используется очень
*  [ejabberd](http://ejabberd.jabber.ru) — XMPP-сервер. Используется очень широко; в частности, jabber.org и jabber.ru работают на нём. 
   широко; в частности, jabber.org и jabber.ru работают на нём.

# <a id="Канал_связи_клиент-сервер_в_Jabber_XMPP"></a>Канал связи клиент-сервер в Jabber/XMPP
Этот раздел предназначен для тех, кто хочет понять суть происходящего, когда
Этот раздел предназначен для тех, кто хочет понять суть происходящего, когда Ткаббер устанавливает соединение с сервером и затем обменивается с ним сообщениями. 
Ткаббер устанавливает соединение с сервером и затем обменивается с ним
сообщениями.

Фактически, всё, здесь рассказанное, изложено в стандарте на протокол XMPP:
Фактически, всё, здесь рассказанное, изложено в стандарте на протокол XMPP: [RFC \#3920](http://www.xmpp.org/rfcs/rfc3920.html). Здесь же мы попытаемся описать это всё попроще и на языке родных осин. 
[RFC \#3920](http://www.xmpp.org/rfcs/rfc3920.html). Здесь же мы попытаемся
описать это всё попроще и на языке родных осин.

## <a id="Концепции"></a>Концепции

Передача информации — смысл и цель соединения между XMPP-клиентом и
Передача информации — смысл и цель соединения между XMPP-клиентом и XMPP-сервером. Это соединение представлено двумя XML-потоками: от к клиента к серверу и от сервера к клиенту. Однако, прежде чем такая передача станет возможной, нужно решить три проблемы: 
XMPP-сервером. Это соединение представлено двумя XML-потоками: от к клиента к
серверу и от сервера к клиенту. Однако, прежде чем такая передача станет
возможной, нужно решить три проблемы:

*  Клиент должен выяснить, с каким физическим компьютером в сети и каким
*  Клиент должен выяснить, с каким физическим компьютером в сети и каким способом он должен установить соединение. 
   способом он должен установить соединение.
*  Сервер должен знать, что клиент — именно тот, за кого он себя выдаёт. Проще
*  Сервер должен знать, что клиент — именно тот, за кого он себя выдаёт. Проще говоря, если с сервером хочет работать пользователь Вася, он должен подтвердить, что он именно Вася, а не Петя или Маша. Этот процесс называется _аутентификацией потока_ ("stream authentication"). Обычно таким подтверждением является знание васиного пароля на сервере. 
   говоря, если с сервером хочет работать пользователь Вася, он должен
   подтвердить, что он именно Вася, а не Петя или Маша. Этот процесс называется
   _аутентификацией потока_ ("stream authentication"). Обычно таким
   подтверждением является знание васиного пароля на сервере.
*  Если не приняты какие либо специальные меры, информация в XMPP передаётся в
*  Если не приняты какие либо специальные меры, информация в XMPP передаётся в открытом виде, то есть её можно "подслушивать" (англ. "to eavesdrop"), получая, к примеру, пароли к каким-либо ресурсам, которые наивный пользователь сообщил в чате другому пользователю. Также ни у одной из сторон TCP-канала связи нет гарантий того, что "та сторона" всё ещё "та": известно несколько атак на TCP/IP-соединение, позволяющих нарушить его целостность. Это называется влиянием на канал (англ. "tampering"). Специальные меры, решающие эти проблемы называются _защитой потока_ (англ. "stream security"). 
   открытом виде, то есть её можно "подслушивать" (англ. "to eavesdrop"),
   получая, к примеру, пароли к каким-либо ресурсам, которые наивный
   пользователь сообщил в чате другому пользователю. Также ни у одной из сторон
   TCP-канала связи нет гарантий того, что "та сторона" всё ещё "та": известно
   несколько атак на TCP/IP-соединение, позволяющих нарушить его целостность.
   Это называется влиянием на канал (англ. "tampering"). Специальные меры,
   решающие эти проблемы называются _защитой потока_ (англ. "stream security").

Вместо термина "поток" мы также будем часто использовать термин "канал". Сути
Вместо термина "поток" мы также будем часто использовать термин "канал". Сути это не меняет. 
это не меняет.

XMPP чётко определяет стандартные способы защиты канала и аутентификации.
XMPP чётко определяет стандартные способы защиты канала и аутентификации. 

Кроме того, перед тем, как подключившийся клиент сможет начать обмен данными с
Кроме того, перед тем, как подключившийся клиент сможет начать обмен данными с сервером, должна произойти так называемая "привязка ресурса" ("resource binding") к созданному каналу — сервер должен закрепить за созданным каналом определённый "ресурс" клиента. 
сервером, должна произойти так называемая "привязка ресурса" ("resource
binding") к созданному каналу — сервер должен закрепить за созданным каналом
определённый "ресурс" клиента.

![(!)](../images/Hammer.png) **Сделать:** расписать про ресурсы
![(!)](../images/Hammer.png) **Сделать:** расписать про ресурсы 

## <a id="Куда_и_как_подключаться"></a>Куда и как подключаться?

## <a id="Защита_потока"></a>Защита потока

Традиционно как в Jabber-, так и XMPP-серверах процедура защиты канала, если
Традиционно как в Jabber-, так и XMPP-серверах процедура защиты канала, если таковая производится, выполняется раньше, чем аутентификация. Это разумно, так как в случае успешного завершения процедуры установления защиты потока, протокол аутентификации пользователя будет надёжно защищён от атак. 
таковая производится, выполняется раньше, чем аутентификация. Это разумно, так
как в случае успешного завершения процедуры установления защиты потока,
протокол аутентификации пользователя будет надёжно защищён от атак.

### <a id="SSL_TLS"></a>SSL/TLS

Существует достаточно много протоколов для защиты потока связи в IP-сетях,
Существует достаточно много протоколов для защиты потока связи в IP-сетях, однако наибольшее распространение получил протокол [SSL](http://ru.wikipedia.org/wiki/SSL) (Secure Sockets Layer). 
однако наибольшее распространение получил протокол
[SSL](http://ru.wikipedia.org/wiki/SSL) (Secure Sockets Layer).

Именно SSL используется как в Jabber, так и в XMPP для защиты канала. Однако,
Именно SSL используется как в Jabber, так и в XMPP для защиты канала. Однако, используется несколько по-разному (об этом — ниже). 
используется несколько по-разному (об этом — ниже).

Также путаницу вносит то, что в SSL, первоначально разработанный Netscape, был
Также путаницу вносит то, что в SSL, первоначально разработанный Netscape, был стандартизован IETF; при этом IETF переименовала протокол в [TLS](http://ru.wikipedia.org/wiki/TLS) (Transport Layer Security). TLS основан на "версии 3" протокола SSL (обычно она именуется "SSLv3") и отличается от последнего довольно слабо, из-за чего обычно термины "SSL" и "TLS" используются вместо друг друга. Это совершенно неверно с формальной точки зрения, и немного неверно — с технической, однако удобно для пользователя: можете считать, что это один и тот же протокол. 
стандартизован IETF; при этом IETF переименовала протокол в
[TLS](http://ru.wikipedia.org/wiki/TLS) (Transport Layer Security). TLS основан
на "версии 3" протокола SSL (обычно она именуется "SSLv3") и отличается от
последнего довольно слабо, из-за чего обычно термины "SSL" и "TLS" используются
вместо друг друга. Это совершенно неверно с формальной точки зрения, и немного
неверно — с технической, однако удобно для пользователя: можете считать, что
это один и тот же протокол.

SSL реализует:
SSL реализует: 

*  _Целостность передаваемых данных_ — гарантируется, что передаваемые данные
*  _Целостность передаваемых данных_ — гарантируется, что передаваемые данные не могут быть незаметно изменены. 
   не могут быть незаметно изменены.
*  _Конфиденциальнось передаваемых данных_ — данные могут шифроваться
*  _Конфиденциальнось передаваемых данных_ — данные могут шифроваться различными (в том числе весьма криптостойкими, например, AES) алгоритмами. 
   различными (в том числе весьма криптостойкими, например, AES) алгоритмами.
*  Взаимное удостоверение сторон, создающих канал связи, в том, что они именно
*  Взаимное удостоверение сторон, создающих канал связи, в том, что они именно те, за кого себя выдают. 
   те, за кого себя выдают.

Ключевым моментом в реализации этих возможностей является использование
Ключевым моментом в реализации этих возможностей является использование _сертификатов_. 
_сертификатов_.

### <a id="Сертификаты_SSL_TLS"></a>Сертификаты SSL/TLS

SSL использует [сертификаты X.509](http://www.apps.ietf.org/rfc/rfc3280.html).
SSL использует [сертификаты X.509](http://www.apps.ietf.org/rfc/rfc3280.html). 

![(!)](../images/Hammer.png) **Сделать:** развить тему
![(!)](../images/Hammer.png) **Сделать:** развить тему 

## <a id="Аутентификация_пользователя"></a>Аутентификация пользователя

> *\<hiddenman> какая-то китайка уже SHA-1  
> вслед за MD5 и прочим "поломала".  
> \<ilyak> hiddenman: И теперь сидит, как дура, без SHA-1*
\<hiddenman> какая-то китайка уже SHA-1
 вслед за MD5 и прочим "поломала". 

\<ilyak> hiddenman: И теперь сидит, как дура, без SHA-1 

> *[Цитата с башорга](http://bash.org.ru/quote.php?num=93945)*
[Цитата с башорга](http://bash.org.ru/quote.php?num=93945) 

Теоретически аутентификацию возможно произвести несколькими различными
Теоретически аутентификацию возможно произвести несколькими различными способами, однако ввод пароля используется наиболее часто в интерактивных системах. Система обмена быстрыми сообщениями на основе протколола XMPP, клиентом которой является Ткаббер, — не исключение. 
способами, однако ввод пароля используется наиболее часто в интерактивных
системах. Система обмена быстрыми сообщениями на основе протколола XMPP,
клиентом которой является Ткаббер, — не исключение.

Технически клиент может доказать серверу, что знает правильный пароль,
Технически клиент может доказать серверу, что знает правильный пароль, несколькими способами. 
несколькими способами.

Самый простой — просто передать пароль, введённый пользователем, серверу "как
Самый простой — просто передать пароль, введённый пользователем, серверу "как есть", то есть в открытом виде. Это самый плохой способ с точки зрения защиты данных: если трафик между клиентом и сервером может прослушать третье лицо (это, к примеру, общий случай на сегменте сети Ethernet, повсеместно применяемой в офисах), оно получит готовые данные для использования учётной записи клиента (его "аккаунта") по своему усмотрению. Такой вид передачи данных (без защиты) называется "открытым" ("plain text"). Резюмируя простыми словами, такой пароль обязательно перехватит даже самый ленивый хакер — просто чтоб неповадно было. 
есть", то есть в открытом виде. Это самый плохой способ с точки зрения защиты
данных: если трафик между клиентом и сервером может прослушать третье лицо
(это, к примеру, общий случай на сегменте сети Ethernet, повсеместно
применяемой в офисах), оно получит готовые данные для использования учётной
записи клиента (его "аккаунта") по своему усмотрению. Такой вид передачи данных
(без защиты) называется "открытым" ("plain text"). Резюмируя простыми словами,
такой пароль обязательно перехватит даже самый ленивый хакер — просто чтоб
неповадно было.

Чуть более защищённый способ — закодировать пароль при передаче. Такой способ,
к примеру, используется в ходе "простой" ("basic") аутентификации на
HTTP-прокси серверах. Однако такой способ защищает пароль только от глаз
смотрящего на распечатку сетевого трафика. Так как человек, желающий заполучить

Чуть более защищённый способ — закодировать пароль при передаче. Такой способ, к примеру, используется в ходе "простой" ("basic") аутентификации на HTTP-прокси серверах. Однако такой способ защищает пароль только от глаз смотрящего на распечатку сетевого трафика. Так как человек, желающий заполучить пароль, скорее всего знает, _где именно_ он его ищет, он также знает, какой способ используется для шифровки и, соответственно, не будет иметь трудностей с расшифровкой. Таким образом, уровень защиты пароля в этом случае ненамного выше, чем у открытого текста, ибо спасает лишь от глупого или очень зелёного хакера. 
пароль, скорее всего знает, _где именно_ он его ищет, он также знает, какой
способ используется для шифровки и, соответственно, не будет иметь трудностей с
расшифровкой. Таким образом, уровень защиты пароля в этом случае ненамного
выше, чем у открытого текста, ибо спасает лишь от глупого или очень зелёного
хакера.

Значительно более эффективны алгоритмы аутентификации, основанные на механизме
Значительно более эффективны алгоритмы аутентификации, основанные на механизме "вызов-ответ" ("challenge-response"), позволяющие обойтись без передачи пароля между клиентом и сервером. Их идея в следующем: 
"вызов-ответ" ("challenge-response"), позволяющие обойтись без передачи пароля
между клиентом и сервером. Их идея в следующем:

*  Сервер посылает клиенту некоторые _случайные_ данные.
*  Клиент добавляет к ним свой пароль и считает на получившемся массиве данных
*  Сервер посылает клиенту некоторые _случайные_ данные. 
*  Клиент добавляет к ним свой пароль и считает на получившемся массиве данных _криптографический хэш_. 
   _криптографический хэш_.
*  Клиент посылает полученный хэш серверу.
*  Сервер, зная пароль клиента, сам считает такой же хэш и сравнивает хэш
*  Клиент посылает полученный хэш серверу. 
*  Сервер, зная пароль клиента, сам считает такой же хэш и сравнивает хэш клиента с результатом своих вычислений. Если они совпадают, клиент знает пароль. 
   клиента с результатом своих вычислений. Если они совпадают, клиент знает
   пароль.

Этот метод использует главное свойство криптографических хэшей: по ним
Этот метод использует главное свойство криптографических хэшей: по ним невозможно восстановить исходное сообщение, на котором даный хэш рассчитан. То есть даже перехватив соответствующий трафик, злоумышленник не сможет получить пароль. 
невозможно восстановить исходное сообщение, на котором даный хэш рассчитан. То
есть даже перехватив соответствующий трафик, злоумышленник не сможет получить
пароль.

Чаще всего для вычисления хэша применяют [алгоритм MD5](ftp://ftp.umbc.edu/pub/unix/rfc/rfc1321.txt.gz)
Чаще всего для вычисления хэша применяют [алгоритм MD5](ftp://ftp.umbc.edu/pub/unix/rfc/rfc1321.txt.gz) (см. также [материал в Википедии](http://ru.wikipedia.org/wiki/MD5))<sup>1</sup>. 
(см. также [материал в Википедии](http://ru.wikipedia.org/wiki/MD5))<sup>1</sup>.

## <a id="Реализация_в_XMPP"></a>Реализация в XMPP

![(!)](../images/Hammer.png) **Сделать:** написать
![(!)](../images/Hammer.png) **Сделать:** написать 

## <a id="Реализация_в_Jabber"></a>Реализация в Jabber

![(!)](../images/Hammer.png) **Сделать:** написать
![(!)](../images/Hammer.png) **Сделать:** написать 

## <a id="Поддержка_в_Ткаббере"></a>Поддержка в Ткаббере

![(!)](../images/Hammer.png) **Сделать:** написать
![(!)](../images/Hammer.png) **Сделать:** написать 

# <a id="Подключение_к_XMPP-серверу_практика"></a>Подключение к XMPP-серверу: практика
Здесь подробно рассказано, что предпринять для подключения к XMPP-серверу в
Здесь подробно рассказано, что предпринять для подключения к XMPP-серверу в особо тяжёлых случаях (к примеру, параноидально настроенный прокси-сервер). Акцент сделан на подключение к `jabber.ru`. 
особо тяжёлых случаях (к примеру, параноидально настроенный прокси-сервер).
Акцент сделан на подключение к `jabber.ru`.

## <a id="Стандартный_XMPP_сервер"></a>"Стандартный" XMPP сервер

Итак, что можно сделать, если соединение с Вашим сервером через прокси не
Итак, что можно сделать, если соединение с Вашим сервером через прокси не проходит: 
проходит:

*  Попробуйте присоединиться на каждый из стандартных портов; возможно,
*  Попробуйте присоединиться на каждый из стандартных портов; возможно, какой-то из них будет работать (имейте в виду, что при выборе 5222 следует включать опцию "Шифрование (STARTTLS)", а при выборе 5223 — "Шифрование (старый SSL)". 
   какой-то из них будет работать (имейте в виду, что при выборе 5222 следует
   включать опцию "Шифрование (STARTTLS)", а при выборе 5223 — "Шифрование
   (старый SSL)".
*  Проверьте, принимает ли ваш Jabber-сервер соединения на порт 443 (следует
*  Проверьте, принимает ли ваш Jabber-сервер соединения на порт 443 (следует выбрать "старый SSL" в настройках). 
   выбрать "старый SSL" в настройках).
*  Если ничего не помогло, попробуйте использовать механизм HTTP-poll, если ваш
*  Если ничего не помогло, попробуйте использовать механизм HTTP-poll, если ваш сервер его поддерживает. Протокол HTTP-poll позволяет реализовать связь с сервером путём посылки серверу HTTP-запросов (стандартно — на порт 5280), что, в принципе, должно сделать возможной работу через любой прокси-сервер, кроме совсем уж параноидально настроенных. 
   сервер его поддерживает. Протокол HTTP-poll позволяет реализовать связь с
   сервером путём посылки серверу HTTP-запросов (стандартно — на порт 5280),
   что, в принципе, должно сделать возможной работу через любой прокси-сервер,
   кроме совсем уж параноидально настроенных.

Пользователи сервера [jabber.ru](http://jabber.ru) имеют несколько
Пользователи сервера [jabber.ru](http://jabber.ru) имеют несколько дополнительных опций благодаря тому, что вокруг этого сервера построена дополнительная "обвязка": 
дополнительных опций благодаря тому, что вокруг этого сервера построена
дополнительная "обвязка":

*  `ssl.jabber.ru` поддерживает соединения с шифрованием "старый SSL" на порт
*  `ssl.jabber.ru` поддерживает соединения с шифрованием "старый SSL" на порт 443; 
   443;
*  `allports.jabber.ru` поддерживает соединения на _любой_ порт с поддержкой
*  `allports.jabber.ru` поддерживает соединения на _любой_ порт с поддержкой протокола STARTTLS. 
   протокола STARTTLS.

Эти имена хостов и порты следует вводить в поля "хост" и "порт",
Эти имена хостов и порты следует вводить в поля "хост" и "порт", соответственно, настройки "Явно указать адрес и порт для подключения". 
соответственно, настройки "Явно указать адрес и порт для подключения".

(Информацию про `jabber.ru` нечаянно сболтнул [**teo**](Участник_Teo.md).)
(Информацию про `jabber.ru` нечаянно сболтнул [teo](Участник_Teo.md).) 

**Дополнительная информация про HTTP-poll:**
**Дополнительная информация про HTTP-poll:** 

Для того, чтобы подключиться к серверу по HTTP-poll, нужно знать URL для
Для того, чтобы подключиться к серверу по HTTP-poll, нужно знать URL для отправки HTTP-запросов. Есть два источника подобной информации: 
отправки HTTP-запросов. Есть два источника подобной информации:

*  На веб-сайте сервера опубликованы настройки — просто впишите их себе.
*  В идеале, сервер должен иметь специальную TXT-запись в DNS, содержащую
   информацию о HTTP-poll. Начиная с версии 0.9.9, Ткаббер способен сам
   выполнить соответствующий запрос, так что поле "URL для подключения" в
   настройках соединения по HTTP-poll можно оставить пустым (однако, см. ниже).
   Если у вас более старая версия Ткаббера, вы можете выполнить соответствующий
   запрос вручную и ввести полученный URL в настройки HTTP-poll. Запрос

*  На веб-сайте сервера опубликованы настройки — просто впишите их себе. 
*  В идеале, сервер должен иметь специальную TXT-запись в DNS, содержащую информацию о HTTP-poll. Начиная с версии 0.9.9, Ткаббер способен сам выполнить соответствующий запрос, так что поле "URL для подключения" в настройках соединения по HTTP-poll можно оставить пустым (однако, см. ниже). Если у вас более старая версия Ткаббера, вы можете выполнить соответствующий запрос вручную и ввести полученный URL в настройки HTTP-poll. Запрос выполняется так: 
   выполняется так:
   *  Windows (в командной оболочке):
 *  Windows (в командной оболочке): 

            nslookup "-set type=TXT" _xmppconnect.jabber.ru

   *  Unix:
    nslookup "-set type=TXT" _xmppconnect.jabber.ru
 
 *  Unix: 

            dig +short _xmppconnect.jabber.ru txt
    dig +short _xmppconnect.jabber.ru txt

        или
 или 

            host -t txt _xmppconnect.jabber.ru
    host -t txt _xmppconnect.jabber.ru

Понятно, что в случае сервера, отличного от `jabber.ru`, доменная часть
Понятно, что в случае сервера, отличного от `jabber.ru`, доменная часть "псевдо-имени хоста" `_xmppconnect.jabber.ru` должна быть другой (например, `_xmppconnect.my.cool.server.org`). 
"псевдо-имени хоста" `_xmppconnect.jabber.ru` должна быть другой (например,
`_xmppconnect.my.cool.server.org`).

Эта команда должна вернуть строку, содержащую URL для подключения, например,
Эта команда должна вернуть строку, содержащую URL для подключения, например, для `jabber.ru` возвращается  `"_xmpp-client-httppoll=http://httppoll.jabber.ru"`. В настройках, соответственно, следует указать URL `http://httppoll.jabber.ru`. Естественно, для другого сервера URL будет другим. 
для `jabber.ru` возвращается
`"_xmpp-client-httppoll=http://httppoll.jabber.ru"`. В настройках,
соответственно, следует указать URL `http://httppoll.jabber.ru`. Естественно,
для другого сервера URL будет другим.

Подробнее про "ручное общение" с DNS-серверами написано
Подробнее про "ручное общение" с DNS-серверами написано [здесь](Ткаббер_и_DNS.md#Ручное_разрешение_записей_DNS). 
[**здесь**](Ткаббер_и_DNS.md#Ручное_разрешение_записей_DNS).

Примечание:

Примечание: 
**tcllib****dns****tcllib****dns****tclsh, wish, tckon**
для работы с TXT-записями в DNS Ткабберу требуется наличие в системе библиотеки
**tcllib** версии 1.7 и выше, а для работы с SRV-записями — 1.8 и выше. Реально,
значение имеет версия пакета **dns** в библиотеке **tcllib**: поддержка SRV-записей
появилась в версии 1.2.1 пакета, поддержка TXT-записей — в версии 1.1.8, но имела
баг, который был исправлен в версии 1.3.1. Узнать версию пакета **dns**, доступную
Ткабберу, можно, выполнив в консоли Ткаббера (или в **tclsh, wish, tckon**) команду

    package versions dns

(За информацию про DNS TXT-записи, о HTTP-poll и за разъяснение ситуации с
(За информацию про DNS TXT-записи, о HTTP-poll и за разъяснение ситуации с версиями пакета **dns** — отдельное спасибо тиклевому хакеру [Pat Thoyts](http://wiki.tcl.tk/Pat Thoyts).) 
версиями пакета **dns** — отдельное спасибо тиклевому хакеру
[Pat Thoyts](http://wiki.tcl.tk/Pat Thoyts).)

## <a id="Серверы_Google_Talk"></a>Серверы Google Talk

Подробно о подключении к серверам Google Talk рассказано [**здесь**](Google_Talk.md).
Подробно о подключении к серверам Google Talk рассказано [здесь](Google_Talk.md). 

# <a id="Примечания"></a>Примечания
<sup>1</sup> Алгоритм MD5 был
[взломан](http://www.technewsworld.com/perl/board/mboard.pl?board=lnitalkback&thread=895&id=896&display=1)
<sup>1</sup> Алгоритм MD5 был [взломан](http://www.technewsworld.com/perl/board/mboard.pl?board=lnitalkback&thread=895&id=896&display=1) в 2004 году. Есть [теоретическая возможность](http://www.cryptography.com/cnews/hash.html) фальсификации документов, основанная на этом хаке: существуют так называемые коллизии, когда двум разным документам соответствует один и тот же хэш. Кроме того, наличие в интернете [ресурсов](http://ru.wikipedia.org/wiki/MD5#.D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8), посвящённых подбору пароля MD5 или SHA1 с помощью словаря (полу-брутфорс), заставляет крепко подумать на тему выбора более надёжного алгоритма (при желании можно нагуглить уже готовые генераторы коллизий). 
в 2004 году. Есть [теоретическая возможность](http://www.cryptography.com/cnews/hash.html)
фальсификации документов, основанная на этом хаке: существуют так называемые коллизии,
когда двум разным документам соответствует один и тот же хэш. Кроме того, наличие в интернете
[ресурсов](http://ru.wikipedia.org/wiki/MD5#.D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8),
посвящённых подбору пароля MD5 или SHA1 с помощью словаря (полу-брутфорс),
заставляет крепко подумать на тему выбора более надёжного алгоритма (при
желании можно нагуглить уже готовые генераторы коллизий).

SHA-1 тоже ["готов"...](http://en.epochtimes.com/news/7-1-11/50336.html)
SHA-1 тоже ["готов"...](http://en.epochtimes.com/news/7-1-11/50336.html) 

![(!)](../images/Hammer.png) **Сделать:** порыть...
![(!)](../images/Hammer.png) **Сделать:** порыть... 


Changes to wiki/ru/Настроения.md.

1

2
3
4
5
6
7

8
9
10
11
12
13



14
15
16
17
18
19
















































20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67















































68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129






















































































































130
131
132
133
134
135
136
137
138
139
140
141
























142
143
144
145
146
147
148
149
150
151

















152
153

154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217



























































































































218
219
220

221
222

223
224

225
226

227
228

229
230
231
232
233
234

235
236

237
238

239
240

241
242

243
244

245
246

247
248

249
250

251
252

253
254
255

256
257

258
259

260
261

262
263

264
265

266
267
268

269
270

271
272

273
274

275
276
277

278
279

280
281

282
283
284

285
286

287
288
289

290
291

292
293

294
295

296
297

298
299

300
301

302
303
304

305
306

307
308
309
310
311

312
313

314
315

316
317

318
319

320
321
322

323
324
325

326
327

328
329
330

331
332

333
334

335
336

337
338

339
340
341

342
343

344
345

346
347

348
349

350
351

352
353

354
355

356
357

358
359
360

361
362

363
364

365
366
367

368
369

370
371

372
373

374
375

376
377

378
379

380
381

382
383

384
385

386
387

388
389

390
391

392
393
394
395

396
397

398
399

400
401
402

403
404
405

406
407

408
409

410
411

412
413

414
415
416

417
418

419
420
421

422
423

424
425

426
427

428
429

430
431

432
433

434
435

436
437

438
439
440

441
442

443
444

445
446

447
448

449
450
451

452
453
454

455
456
457

458
459
460

461
462

463
464

465
466

467
468
469

470
471

472
473

474
475

476
477

478
479

480
481

482
483

484
485

486
487

488
489

490
491

492
493
494

495
496
497
498
499
500

501
502
503

504
505

506
507

508
509

510
511

512
513

514
515

516
517
518

519
520
521
522
523

524
525

526
527
528

529
530

531
532
533

534
535
536

537
538

539
540

541
542

543
544

545
546
547
548

549
550
551
552

553
554

555
556

557
558
559

560
561

562
563
564

565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
































583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645





























































































646
647
648

649
650
651
652

653
654
655
656


1
2
3
4
5
6
7

8
9
10
11



12
13
14
15
16
17
18


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
















































67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113






























































114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231












232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255










256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273

274
275































































276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400

401
402

403
404

405
406

407
408

409




410

411
412

413
414

415
416

417
418

419
420

421
422

423
424

425
426

427
428

429

430

431
432

433
434

435
436

437
438

439
440

441

442

443
444

445
446

447
448

449

450

451
452

453
454

455

456

457
458

459

460

461
462

463
464

465
466

467
468

469
470

471
472

473

474

475
476

477



478

479
480

481
482

483
484

485
486

487

488

489

490

491
492

493

494

495
496

497
498

499
500

501
502

503

504

505
506

507
508

509
510

511
512

513
514

515
516

517
518

519
520

521

522

523
524

525
526

527

528

529
530

531
532

533
534

535
536

537
538

539
540

541
542

543
544

545
546

547
548

549
550

551
552

553


554

555
556

557
558

559

560

561

562

563
564

565
566

567
568

569
570

571

572

573
574

575

576

577
578

579
580

581
582

583
584

585
586

587
588

589
590

591
592

593

594

595
596

597
598

599
600

601
602

603

604

605

606

607

608

609

610

611
612

613
614

615
616

617

618

619
620

621
622

623
624

625
626

627
628

629
630

631
632

633
634

635
636

637
638

639
640

641

642

643




644

645

646

647
648

649
650

651
652

653
654

655
656

657
658

659

660

661



662

663
664

665

666

667
668

669

670

671

672

673
674

675
676

677
678

679
680

681


682

683
684
685
686

687
688

689
690

691

692

693
694

695

696

697

698
699















700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731































































732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826

827


828

829
830
831
832
833
834
835

+





-
+



-
-
-
+
+
+




-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


-
+

-
+

-
+

-
+

-
+
-
-
-
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+
-

-
+

-
+
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+
-
-
-

-
+

-
+

-
+

-
+

-
+
-

-
+
-

-
+

-
+
-

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-
-

-
+

-
+

-
+
-

-
+
-

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+

-
+
-

-
+
-

-
+
-

-
+
-

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-

-
+
-
-
-
-

-
+
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-

-
+
-
-
-

-
+

-
+
-

-
+

-
+
-

-
+
-

-
+

-
+

-
+

-
+

-
+
-
-

-
+



-
+

-
+

-
+
-

-
+

-
+
-

-
+
-


-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


-
+
-
-

-
+




+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Настроения/index.html)


# Настроения

Материал из Tkabber Wiki.

Исходные термины взяты из [XEP-0107](http://www.xmpp.org/extensions/xep-0107.html#moods).
Исходные термины взяты из [XEP-0107](http://www.xmpp.org/extensions/xep-0107.html#moods). 

## <a id="toc"></a>Содержание

* [1 Вариант перевода bigote](#Вариант_перевода_bigote)
* [2 "Unisex" от kostix](#Unisex_от_kostix)
* [3 "Что чувствую" от Gebb](#Что_чувствую_от_Gebb)
* [1 Вариант перевода bigote[](Участник_Bigote.md)](#Вариант_перевода_bigoteУчастник_Bigote.md)
* [2 "Unisex" от kostix[](Участник_Kostix.md)](#Unisex_от_kostixУчастник_Kostix.md)
* [3 "Что чувствую" от Gebb[](Участник_Gebb.md)](#Что_чувствую_от_GebbУчастник_Gebb.md)
* [4 Чат с носителями языка (АКА просветление)](#Чат_с_носителями_языка_АКА_просветление)
* [5 Претендент на окончательный вариант (основан на "Unisex")](#Претендент_на_окончательный_вариант_основан_на_Unisex)
* [6 Согласование с "User Activity" (XEP-0108)](#Согласование_с_User_Activity_XEP-0108)

# <a id="Вариант_перевода_bigote"></a>Вариант перевода [bigote](Участник_Bigote.md)

# <a id="Вариант_перевода_bigoteУчастник_Bigote.md"></a>Вариант перевода bigote[](Участник_Bigote.md)
 
 ** Оригинал **** Перевод **
 
   afraid  испуганный 
 
   amazed  изумлённый 
 
   angry  сердитый 
 
   annoyed  раздражённый 
 
   anxious  обеспокоенный 
 
   aroused  возбуждённый 
 
   ashamed  пристыжённый 
 
   bored  скучающий 
 
   brave  храбрый 
 
   calm  спокойный 
 
   cold  холодный 
 
   confused  сбитый с толку 
 
   contented  довольный 
 
   cranky  недовольный 
 
   curious  любопытный 
 
   depressed  подавленный 
 
   disappointed  разочарованный 
 
   disgusted  чувствует отвращение 
 
   distracted  растерянный 
 
   embarrassed  смущённый 
 
   excited  взволнованный 
 
   flirtatious  кокетливый 
 
Оригинал | Перевод
---|---
afraid | испуганный
amazed | изумлённый
angry | сердитый
annoyed | раздражённый
anxious | обеспокоенный
aroused | возбуждённый
ashamed | пристыжённый
bored | скучающий
brave | храбрый
calm | спокойный
cold | холодный
confused | сбитый с толку
contented | довольный
cranky | недовольный
curious | любопытный
depressed | подавленный
disappointed | разочарованный
disgusted | чувствует отвращение
distracted | растерянный
embarrassed | смущённый
excited | взволнованный
flirtatious | кокетливый
frustrated | расстроенный
grumpy | сварливый
guilty | виноватый
happy | счастливый
hot | пылкий
humbled | скромный
humiliated | униженный
hungry | голодный
hurt | раненый
impressed | впечатлённый
in\_awe | благоговеющий
in\_love | влюблённый
indignant | возмущённый
interested | заинтересованный
intoxicated | одурманенный
invincible | неукротимый
jealous | ревнивый
lonely | одинокий
mean | подлый
moody | унылый
nervous | нервный
neutral | безразличный
offended | обиженный
playful | игривый
   frustrated  расстроенный 
 
   grumpy  сварливый 
 
   guilty  виноватый 
 
   happy  счастливый 
 
   hot  пылкий 
 
   humbled  скромный 
 
   humiliated  униженный 
 
   hungry  голодный 
 
   hurt  раненый 
 
   impressed  впечатлённый 
 
   in\_awe  благоговеющий 
 
   in\_love  влюблённый 
 
   indignant  возмущённый 
 
   interested  заинтересованный 
 
   intoxicated  одурманенный 
 
   invincible  неукротимый 
 
   jealous  ревнивый 
 
   lonely  одинокий 
 
   mean  подлый 
 
   moody  унылый 
 
   nervous  нервный 
 
   neutral  безразличный 
 
   offended  обиженный 
 
   playful  игривый 
proud | гордый
relieved | успокоенный
remorseful | сожалеющий
restless | неустанный
sad | печальный
sarcastic | язвительный
serious | серьёзный
shocked | потрясённый
shy | робкий
sick | больной
sleepy | сонный
stressed | напряжённый
surprised | удивлённый
thirsty | хочет пить
worried | обеспокоенный

# <a id="Unisex_от_kostix"></a>"Unisex" от [kostix](Участник_Kostix.md)

Оригинал | Перевод
---|---
afraid | напуган(а)
amazed | изумлен(а)
angry | сержусь
annoyed | в раздражении
anxious | беспокоюсь
aroused | в возбуждении
ashamed | стыжусь
bored | скучаю
brave | всё нипочём
calm | в спокойствии
cold | мне холодно
confused | сбит(а) с толку
contented | доволен/довольна
cranky | недоволен/недовольна
curious | любопытствую
depressed | подавлен(а)
disappointed | разочарован(а)
disgusted | чувствую отвращение
distracted | в растерянности
embarrassed | в смущении
excited | волнуюсь
flirtatious | кокетничаю
frustrated | расстроен(а)
grumpy | сварлив(а)
guilty | чувствую вину
happy | счастлив(а)
hot | пылаю
humbled | скромничаю
humiliated | унижен(а)
hungry | хочу есть
hurt | ранен(а)
impressed | под впечатлением
in\_awe | благоговею
in\_love | влюблён/влюблена
indignant | в возмущении
interested | заинтересован(а)
intoxicated | одурманен(а)
invincible | неукротим(а)
jealous | ревную
lonely | одинок(а)
mean | готов(а) на пакость
moody | в унынии
 
   proud  гордый 
 
   relieved  успокоенный 
 
   remorseful  сожалеющий 
 
   restless  неустанный 
 
   sad  печальный 
 
   sarcastic  язвительный 
 
   serious  серьёзный 
 
   shocked  потрясённый 
 
   shy  робкий 
 
   sick  больной 
 
   sleepy  сонный 
 
   stressed  напряжённый 
 
   surprised  удивлённый 
 
   thirsty  хочет пить 
 
   worried  обеспокоенный 

# <a id="Unisex_от_kostixУчастник_Kostix.md"></a>"Unisex" от kostix[](Участник_Kostix.md)
 
 ** Оригинал **** Перевод **
 
  afraid  напуган(а) 
 
  amazed  изумлен(а) 
 
  angry  сержусь 
 
  annoyed  в раздражении 
 
  anxious  беспокоюсь 
 
  aroused  в возбуждении 
 
  ashamed  стыжусь 
 
  bored  скучаю 
 
  brave  всё нипочём 
 
  calm  в спокойствии 
 
  cold  мне холодно 
 
  confused  сбит(а) с толку 
 
  contented  доволен/довольна 
 
  cranky  недоволен/недовольна 
 
  curious  любопытствую 
 
  depressed  подавлен(а) 
 
  disappointed  разочарован(а) 
 
  disgusted  чувствую отвращение 
 
  distracted  в растерянности 
 
  embarrassed  в смущении 
 
  excited  волнуюсь 
 
  flirtatious  кокетничаю 
 
  frustrated  расстроен(а) 
 
  grumpy  сварлив(а) 
 
  guilty  чувствую вину 
 
  happy  счастлив(а) 
 
  hot  пылаю 
 
  humbled  скромничаю 
 
  humiliated  унижен(а) 
 
  hungry  хочу есть 
 
  hurt  ранен(а) 
 
  impressed  под впечатлением 
 
  in\_awe  благоговею 
 
  in\_love  влюблён/влюблена 
 
  indignant  в возмущении 
 
  interested  заинтересован(а) 
 
  intoxicated  одурманен(а) 
 
  invincible  неукротим(а) 
 
  jealous  ревную 
 
  lonely  одинок(а) 
 
  mean  готов(а) на пакость 
 
  moody  в унынии 
nervous | нервничаю
neutral | в безразличии
offended | обижен(а)
playful | игрив(а)
proud | горжусь
relieved | успокоенный(ая)
remorseful | сожалею
restless | не знаю усталости
sad | в печали
sarcastic | хочется язвить
serious | серьёзен/серьёзна
shocked | потрясён/потрясена
 
  nervous  нервничаю 
 
  neutral  в безразличии 
 
  offended  обижен(а) 
 
  playful  игрив(а) 
 
  proud  горжусь 
 
  relieved  успокоенный(ая) 
 
  remorseful  сожалею 
 
  restless  не знаю усталости 
 
  sad  в печали 
 
  sarcastic  хочется язвить 
 
  serious  серьёзен/серьёзна 
 
  shocked  потрясён/потрясена 
shy | стесняюсь
sick | болею
sleepy | хочу спать
stressed | в напряжении
surprised | удивляюсь
thirsty | хочу пить
worried | беспокоюсь

# <a id="Что_чувствую_от_Gebb"></a>"Что чувствую" от [Gebb](Участник_Gebb.md)
Предполагается, что настроения в программе будут отображаться так:
 
  shy  стесняюсь 
 
  sick  болею 
 
  sleepy  хочу спать 
 
  stressed  в напряжении 
 
  surprised  удивляюсь 
 
  thirsty  хочу пить 
 
  worried  беспокоюсь 

# <a id="Что_чувствую_от_GebbУчастник_Gebb.md"></a>"Что чувствую" от Gebb[](Участник_Gebb.md)
Предполагается, что настроения в программе будут отображаться так: 

что чувствую: _настроение-в-винительном-падеже_
что чувствую: _настроение-в-винительном-падеже_ 

Оригинал | Перевод
---|---
afraid | испуг
amazed | изумление
angry | гнев
annoyed | раздражение
anxious | тревогу
aroused | возбуждение
ashamed | стыд
bored | скуку
brave | храбрость
calm | спокойствие
cold | хладнокровие (вариант: хладнокровный настрой)
confused | замешательство
contented | удовлетворённость
cranky | вспыльчивость (вариант: вспыльчивый настрой)
curious | любопытство
depressed | подавленность
disappointed | разочарование
disgusted | отвращение
distracted | растерянность
embarrassed | смущение
excited | волнение
flirtatious | кокетливый настрой (варианты: хочу флиртовать, приступ кокетства)
frustrated | расстройство
grumpy | сварливость (вариант: сварливый настрой)
guilty | вину
happy | счастье
hot | разгорячённость
humbled | поверженность
humiliated | унижение
hungry | голод
hurt | боль
impressed | впечатление (вариант: я впечатлён)
in\_awe | благоговение
in\_love | любовь
indignant | возмущение
interested | интерес
intoxicated | опьянение
invincible | непобедимость
jealous | ревность
lonely | одиночество
mean | недоброжелательность
moody | уныние
nervous | нервозность
neutral | ничего особенного
offended | обиду
playful | игривость (вариант: игривый настрой)
proud | гордость
relieved | облегчение
remorseful | раскаяние
restless | неугомонность
sad | печаль
sarcastic | язвительность (вариант: язвительный настрой)
serious | серьёзность (вариант: серьёзный настрой)
shocked | потрясение
shy | стеснение
sick | болезнь (вариант: я болен)
sleepy | сонливость
stressed | напряжение
surprised | удивление
thirsty | жажду
worried | обеспокоенность
 ** Оригинал **** Перевод **
 
 afraid испуг 
 
 amazed изумление 
 
 angry гнев 
 
 annoyed раздражение 
 
 anxious тревогу 
 
 aroused возбуждение 
 
 ashamed стыд 
 
 bored скуку 
 
 brave храбрость 
 
 calm спокойствие 
 
 cold хладнокровие (вариант: хладнокровный настрой) 
 
 confused замешательство 
 
 contented удовлетворённость 
 
 cranky вспыльчивость (вариант: вспыльчивый настрой) 
 
 curious любопытство 
 
 depressed подавленность 
 
 disappointed разочарование 
 
 disgusted отвращение 
 
 distracted растерянность 
 
 embarrassed смущение 
 
 excited волнение 
 
 flirtatious кокетливый настрой (варианты: хочу флиртовать, приступ кокетства) 
 
 frustrated расстройство 
 
 grumpy сварливость (вариант: сварливый настрой) 
 
 guilty вину 
 
 happy счастье 
 
 hot разгорячённость 
 
 humbled поверженность 
 
 humiliated унижение 
 
 hungry голод 
 
 hurt боль 
 
 impressed впечатление (вариант: я впечатлён) 
 
 in\_awe благоговение 
 
 in\_love любовь 
 
 indignant возмущение 
 
 interested интерес 
 
 intoxicated опьянение 
 
 invincible непобедимость 
 
 jealous ревность 
 
 lonely одиночество 
 
 mean недоброжелательность 
 
 moody уныние 
 
 nervous нервозность 
 
 neutral ничего особенного 
 
 offended обиду 
 
 playful игривость (вариант: игривый настрой) 
 
 proud гордость 
 
 relieved облегчение 
 
 remorseful раскаяние 
 
 restless неугомонность 
 
 sad печаль 
 
 sarcastic язвительность (вариант: язвительный настрой) 
 
 serious серьёзность (вариант: серьёзный настрой) 
 
 shocked потрясение 
 
 shy стеснение 
 
 sick болезнь (вариант: я болен) 
 
 sleepy сонливость 
 
 stressed напряжение 
 
 surprised удивление 
 
 thirsty жажду 
 
 worried обеспокоенность 

# <a id="Чат_с_носителями_языка_АКА_просветление"></a>Чат с носителями языка (АКА просветление)
[00:06]\<kostix> Hi! mind if I ask a question regarding English language?
[00:06]\<kostix> Hi! mind if I ask a question regarding English language? 

[00:06]\<hypnotoad> Fire away
[00:06]\<hypnotoad> Fire away 

[00:07]\<jim> away: YOU'RE FIRED!
[00:07]\<jim> away: YOU'RE FIRED! 

[00:07]\<kbk> Don't ask to ask, just ask.
[00:07]\<kbk> Don't ask to ask, just ask. 

[00:08]\<kostix> We have just implemented Jabber extention called "User mood"
[00:08]\<kostix> We have just implemented Jabber extention called "User mood" in Tkabber ([http://www.xmpp.org/extensions/xep-0107.html](http://www.xmpp.org/extensions/xep-0107.html)) but when translating that "moods" into russian we have problems. Basically how \*in this context\* the mood "mean" should be translated? 
in Tkabber
([http://www.xmpp.org/extensions/xep-0107.html](http://www.xmpp.org/extensions/xep-0107.html))
but when translating that "moods" into russian we have problems. Basically how
\*in this context\* the mood "mean" should be translated?

[00:08]\<kostix> Webster gives a horrible lot of meanings
[00:08]\<kostix> Webster gives a horrible lot of meanings 

[00:08]\<kostix> which even contradict one another
[00:08]\<kostix> which even contradict one another 

[00:08]\<patthoyts> Its emotional state.
[00:08]\<patthoyts> Its emotional state. 

[00:08]\<hypnotoad> it's a state of sexual arousal
[00:08]\<hypnotoad> it's a state of sexual arousal 

[00:08]\<patthoyts> ie: is the user angry, happy, etc
[00:08]\<patthoyts> ie: is the user angry, happy, etc 

[00:09]\<patthoyts> (waste of time IMO)
[00:09]\<patthoyts> (waste of time IMO) 

[00:09]\<kostix> patthoyts: yeah, so what's with mean?
[00:09]\<kostix> patthoyts: yeah, so what's with mean? 

[00:09]\<kbk> "Mean" - petty, nasty, angry at a low level.
[00:09]\<kbk> "Mean" - petty, nasty, angry at a low level. 

[00:09]\<patthoyts> but I guess you have to keep the kids happy.
[00:09]\<patthoyts> but I guess you have to keep the kids happy. 

[00:09]\<jim> mood is related to mode (like an emacs document mode, or the vi
[00:09]\<jim> mood is related to mode (like an emacs document mode, or the vi mode of typing versus commands) 
mode of typing versus commands)

[00:09]\<kostix> patthoyts: are you talking about that extension? ;)
[00:09]\<kostix> patthoyts: are you talking about that extension? ;) 

[00:09]\<hypnotoad> Wait, what emotion?
[00:09]\<hypnotoad> Wait, what emotion? 

[00:09]\<hypnotoad> OHHH MEAN
[00:09]\<hypnotoad> OHHH MEAN 

[00:09]\<hypnotoad> Mean is "vindictive"
[00:09]\<hypnotoad> Mean is "vindictive" 

[00:10]\<jim> mode is also related to musical sound/"color"
[00:10]\<jim> mode is also related to musical sound/"color" 

[00:10]\<kostix> patthoyts: I've done it to test PEP (personal eventing) thing
[00:10]\<kostix> patthoyts: I've done it to test PEP (personal eventing) thing in Tkabber and fixed some misc problems in it. so it's not in vain ;) 
in Tkabber and fixed some misc problems in it. so it's not in vain ;)

[00:10]\<patthoyts> If you are pulling the wings of a fly you are being mean.
[00:10]\<patthoyts> If you are pulling the wings of a fly you are being mean. 

[00:10]\<hypnotoad> It can be playful, but it's always taunting
[00:10]\<hypnotoad> It can be playful, but it's always taunting 

[00:10]\<jim> that depends on the fly :P
[00:10]\<jim> that depends on the fly :P 

[00:11]\<patthoyts> My yougest is always complaining that her sister is being
[00:11]\<patthoyts> My yougest is always complaining that her sister is being mean. Normally when the little one cant get onto the computer. 
mean. Normally when the little one cant get onto the computer.

[00:11]\<hypnotoad> "That was a mean spirited trick"
[00:11]\<hypnotoad> "That was a mean spirited trick" 

[00:11]\<kbk> offensive. selfish. malicious. small-minded. ignoble.
[00:11]\<kbk> offensive. selfish. malicious. small-minded. ignoble. 

[00:12]\<kostix> so it's basicaly "to contrive something evil in one's mind"
[00:12]\<kostix> so it's basicaly "to contrive something evil in one's mind" (pardon my english), right? 
(pardon my english), right?

[00:12]\<patthoyts> yeah. sounds good.
[00:12]\<patthoyts> yeah. sounds good. 

[00:12]\<hypnotoad> "YOU MEANIE!" (Said when someone says something
[00:12]\<hypnotoad> "YOU MEANIE!" (Said when someone says something deliberately hurtful) 
deliberately hurtful)

[00:12]\<patthoyts> grumpy with a dash of vindictive.
[00:12]\<patthoyts> grumpy with a dash of vindictive. 

[00:12]\<hypnotoad> It's more "evil with intent"
[00:12]\<hypnotoad> It's more "evil with intent" 

[00:12]\<kostix> damn, I didn't even know that word - vindictive ;)
[00:12]\<kostix> damn, I didn't even know that word - vindictive ;) 

[00:12]\<bschwarz> basically, how people are on some other channels ;)
[00:12]\<bschwarz> basically, how people are on some other channels ;) 

[00:12]\<hypnotoad> You can't think mean, just act mean
[00:12]\<hypnotoad> You can't think mean, just act mean 

[00:13]\* Emiliano feeling mean
[00:13]\* Emiliano feeling mean 

[00:13]\<kbk> "Mean" suggests pettiness and small-mindedness.  It's an insult
[00:13]\<kbk> "Mean" suggests pettiness and small-mindedness.  It's an insult of a small child; it doesn't sink to the level of "evil." 
of a small child; it doesn't sink to the level of "evil."

[00:13]\<kostix> hm, interesting insight...
[00:13]\<kostix> hm, interesting insight... 

[00:13]\<jim> well the contriving is not sufficient probably, but you're on the
[00:13]\<jim> well the contriving is not sufficient probably, but you're on the right track... that is only to be mean in one's mind... to -actually- be mean, you have to do something mean to another (I would think)... that is, you have to be perceived as being mean by the party you're being mean to 
right track... that is only to be mean in one's mind... to -actually- be mean,
you have to do something mean to another (I would think)... that is, you have
to be perceived as being mean by the party you're being mean to

[00:14]\<kostix> hm, even more interesting...
[00:14]\<kostix> hm, even more interesting... 

[00:14]\<hypnotoad> Telling a joke that embarrases someone is condidered "Mean"
[00:14]\<hypnotoad> Telling a joke that embarrases someone is condidered "Mean" 

[00:14]\<miguel> you guys still talking about me?
[00:14]\<miguel> you guys still talking about me? 

[00:14]\<hypnotoad> Sorry God
[00:14]\<hypnotoad> Sorry God 

[00:14]\<jim> but that's exactly as you're using it in the application...
[00:14]\<jim> but that's exactly as you're using it in the application... you're giving people the ability to be perceived as being in a mean mood 
you're giving people the ability to be perceived as being in a mean mood

[00:15]\<jim> hypnotoad: but that also depends on intent... if it was intended
[00:15]\<jim> hypnotoad: but that also depends on intent... if it was intended to embarrass, that would qualify as mean 
to embarrass, that would qualify as mean

[00:15]\<miguel> albert said I am raffiniert, not mean
[00:15]\<miguel> albert said I am raffiniert, not mean 

[00:16]\<hypnotoad> Jim: I see, if you advertise that you are "mean" than
[00:16]\<hypnotoad> Jim: I see, if you advertise that you are "mean" than people should not be surprised by hurtful things 
people should not be surprised by hurtful things

[00:16]\<jim> hypnotoad: that too :)
[00:16]\<jim> hypnotoad: that too :) 

[00:16]\<kostix> hypnotoad: that's almost perfect explanation to me
[00:16]\<kostix> hypnotoad: that's almost perfect explanation to me 

[00:16]\<kbk> "mean mood" - probably something like "irritable," "irascible," "testy" is intended.
[00:16]\<kbk> "mean mood" - probably something like "irritable," "irascible," "testy" is intended. 

[00:16]\<kostix> hypnotoad said "use that explanation"
[00:16]\<kostix> hypnotoad said "use that explanation" 

[00:17]\<jim> perhaps people who are only just grumpy might advertise
[00:17]\<jim> perhaps people who are only just grumpy might advertise themselves as being mean so as to be left alone 
themselves as being mean so as to be left alone

[00:17]\* hypnotoad Bzzzzzzzz
[00:17]\* hypnotoad Bzzzzzzzz 

[00:17]\* kostix raises and heads to the window to jump into...
[00:17]\* kostix raises and heads to the window to jump into... 

[00:17]\<kbk> "petulant"
[00:17]\<kbk> "petulant" 

[00:17]\<hypnotoad> "petty"
[00:17]\<hypnotoad> "petty" 

[00:17]\<kostix> (so many new words...)
[00:17]\<kostix> (so many new words...) 

[00:18]\<jim> "petrudinous"
[00:18]\<jim> "petrudinous" 

[00:18]\<hypnotoad> English is great for that.
[00:18]\<hypnotoad> English is great for that. 

[00:18]\<jim> wait, not that one
[00:18]\<jim> wait, not that one 

[00:18]\<kbk> Not being Russian speakers, we're throwing out English
[00:18]\<kbk> Not being Russian speakers, we're throwing out English synonymies, in hopes that something will resonate. 
synonymies, in hopes that something will resonate.

[00:19]\<hypnotoad> Pipes resonate
[00:19]\<hypnotoad> Pipes resonate 

[00:19]\<hypnotoad> As to wine glasses...
[00:19]\<hypnotoad> As to wine glasses... 

[00:19]\* steveo thought he was loggin in to the tclers chat, not synonyms
[00:19]\* steveo thought he was loggin in to the tclers chat, not synonyms anonymous ... \<:-) 
anonymous ... \<:-)

[00:19]\<kbk> Spiteful.   "Mean" can also suggest "niggardly."
[00:19]\<kbk> Spiteful.   "Mean" can also suggest "niggardly." 

[00:20]\<kostix> kbk: that's what I intended to ignite ;)
[00:20]\<kostix> kbk: that's what I intended to ignite ;) 

[00:20]\<hypnotoad> synonomous anonymous?
[00:20]\<hypnotoad> synonomous anonymous? 

[00:20]\<kbk> seasoned with a little bit of nutmeg and synonym.
[00:20]\<kbk> seasoned with a little bit of nutmeg and synonym. 

[00:20]\<jim> anomalous anonymous?
[00:20]\<jim> anomalous anonymous? 

[00:21]\<hypnotoad> anonymous anonymous
[00:21]\<hypnotoad> anonymous anonymous 

[00:21]\<hypnotoad> "Hi my name is (state you name), and I am nobody"
[00:21]\<hypnotoad> "Hi my name is (state you name), and I am nobody" 

[00:21]\* steveo wonders just how badly we are confusing kostix
[00:21]\* steveo wonders just how badly we are confusing kostix 

[00:22]\<hypnotoad> Not badly enough
[00:22]\<hypnotoad> Not badly enough 

[00:23]\<steveo> now, \*that's" mean ;)
[00:23]\<steveo> now, \*that's" mean ;) 

[00:23]\<kbk> All this punning is being mean to a non-native speaker.
[00:23]\<kbk> All this punning is being mean to a non-native speaker. 

[00:23]\* kbk xed
[00:23]\* kbk xed 

[00:23]\<kostix> sorry, I have another words at hand in the same context, they
[00:23]\<kostix> sorry, I have another words at hand in the same context, they are: cold (is it really about feeling cold or what?), cranky and thirsty (is that really about thirst or what?) 
are: cold (is it really about feeling cold or what?), cranky and thirsty (is
that really about thirst or what?)

[00:23]\<hypnotoad> But I didn't mean to be mean!
[00:23]\<hypnotoad> But I didn't mean to be mean! 

[00:23]\<kostix> actually, that person who invented the set of moods is... strange
[00:23]\<kostix> actually, that person who invented the set of moods is... strange 

[00:24]\<hypnotoad> Cold: (references to reptiles) Cold blooded, not caring
[00:24]\<hypnotoad> Cold: (references to reptiles) Cold blooded, not caring about the feelings of others 
about the feelings of others

[00:24]\<kbk> cranky - irascible, touchy, swift to anger (often because of
[00:24]\<kbk> cranky - irascible, touchy, swift to anger (often because of tiredness or illness) 
tiredness or illness)

[00:24]\<hypnotoad> thirsty is just plain "needs something to drink"
[00:24]\<hypnotoad> thirsty is just plain "needs something to drink" 

[00:25]\<kostix> ok, seems like we got cranky wrong, thanks
[00:25]\<kostix> ok, seems like we got cranky wrong, thanks 

[00:25]\<hat0> thirsty is "khochit' pit'"
[00:25]\<hat0> thirsty is "khochit' pit'" 

[00:25]\<hat0> that's all
[00:25]\<hat0> that's all 

[00:25]\<kbk> A perfect example of "cranky" is the behaviour of any toddler in
[00:25]\<kbk> A perfect example of "cranky" is the behaviour of any toddler in need of sleep. 
need of sleep.

[00:25]\<hypnotoad> Cranky is also like an old car engine.
[00:25]\<hypnotoad> Cranky is also like an old car engine. 

[00:26]\<kostix> hat0: one person suggested it's about "mentally drained out"
[00:26]\<kostix> hat0: one person suggested it's about "mentally drained out" or so... that's why I asked ;) 
or so... that's why I asked ;)

[00:26]\<hypnotoad> (where we get the word)
[00:26]\<hypnotoad> (where we get the word) 

[00:26]\<kostix> now what's about "cold"?
[00:26]\<kostix> now what's about "cold"? 

[00:26]\<kbk> hypnotoad - Nonsense - the word was in use in the 1780s.
[00:26]\<kbk> hypnotoad - Nonsense - the word was in use in the 1780s. 

[00:26]\<kostix> (notice that the set of moods also has "hot")
[00:26]\<kostix> (notice that the set of moods also has "hot") 

[00:27]\<hypnotoad> Hot is "excited"
[00:27]\<hypnotoad> Hot is "excited" 

[00:27]\<kbk> cranky - ill-tempered, grouchy, cross.
[00:27]\<kbk> cranky - ill-tempered, grouchy, cross. 

[00:27]\* hypnotoad Learn someting new every day, Thanks Kevin
[00:27]\* hypnotoad Learn someting new every day, Thanks Kevin 

[00:27]\<hypnotoad> "Hot under the collar" is excited in an angry way
[00:27]\<hypnotoad> "Hot under the collar" is excited in an angry way 

[00:28]\<hypnotoad> "Hot and bothered" is sexually aroused (but oddly only with
[00:28]\<hypnotoad> "Hot and bothered" is sexually aroused (but oddly only with a female) 
a female)

[00:28]\* Emiliano 's doughter getting "cranky"
[00:28]\* Emiliano 's doughter getting "cranky" 

[00:28]\<kbk> toad - Although a guy can say that he's hot for a lady...
[00:28]\<kbk> toad - Although a guy can say that he's hot for a lady... 

[00:28]\<kostix> hypnotoad: what if we have "excited" in the \*same\* set of moods? ;)
[00:28]\<kostix> hypnotoad: what if we have "excited" in the \*same\* set of moods? ;) 

[00:28]\<hypnotoad> True, and a lady can "look hot"
[00:28]\<hypnotoad> True, and a lady can "look hot" 

[00:29]\<hat0> also, if you thirst for something, that is not the same as to be
[00:29]\<hat0> also, if you thirst for something, that is not the same as to be thirsty..  it is a strong desire for it (like "on zhazhdal mesti") 
thirsty..  it is a strong desire for it (like "on zhazhdal mesti")

[00:29]\<kbk> kostix - In that case, 'hot' probably has a specifically sexual
[00:29]\<kbk> kostix - In that case, 'hot' probably has a specifically sexual connotation.  Your list does indeed sound a lottle strange. 
connotation.  Your list does indeed sound a lottle strange.

[00:29]\<hypnotoad> Well just about every mood involves and excitement of one
[00:29]\<hypnotoad> Well just about every mood involves and excitement of one form or another ;) 
form or another ;)

[00:31]\<hat0> cold, you could think "unfeeling" - this dictionary i have
[00:31]\<hat0> cold, you could think "unfeeling" - this dictionary i have suggests "kholodniy' chelovek" (which makes me laugh) 
suggests "kholodniy' chelovek" (which makes me laugh)

[00:31]\<Cameron\_> Do Russians say that?!
[00:31]\<Cameron\_> Do Russians say that?! 

[00:31]\<Cameron\_> 'Twould be new to me.
[00:31]\<Cameron\_> 'Twould be new to me. 

[00:34]\<kostix> hat0: thanks. your knowledge of Russian keeps impress me ;)
[00:34]\<kostix> hat0: thanks. your knowledge of Russian keeps impress me ;) 

[00:34]\<hypnotoad> hat0: What does that "kholodniy' chelovek" loosely
[00:34]\<hypnotoad> hat0: What does that "kholodniy' chelovek" loosely translate back to? 
translate back to?

[00:34]\<hat0> hypnotoad:  cold person
[00:34]\<hat0> hypnotoad:  cold person 

[00:34]\<kostix> yes
[00:34]\<kostix> yes 

[00:34]\<hypnotoad> Cold as in "was out in the siberian weather"
[00:34]\<hypnotoad> Cold as in "was out in the siberian weather" 

[00:35]\<hypnotoad> or cold as in "psychopathic killer"
[00:35]\<hypnotoad> or cold as in "psychopathic killer" 

[00:35]\<kostix> yes, cold as if put in refrigerator
[00:35]\<kostix> yes, cold as if put in refrigerator 

[00:35]\<Cameron\_> kholodniy is from hot-cold.
[00:35]\<Cameron\_> kholodniy is from hot-cold. 

[00:35]\<hypnotoad> Ah
[00:35]\<hypnotoad> Ah 

[00:35]\<kbk> "Many are cold, but few are frozen."
[00:35]\<kbk> "Many are cold, but few are frozen." 

[00:35]\<Cameron\_> That's it!  That's the one!
[00:35]\<Cameron\_> That's it!  That's the one! 

[00:36]\<Cameron\_> My pun acceptor overflowed its daily limit.
[00:36]\<Cameron\_> My pun acceptor overflowed its daily limit. 

[00:36]\<kostix> :)
[00:36]\<kostix> :) 

[00:37]\<kbk> This is nearly the only milieu that I've been in where
[00:37]\<kbk> This is nearly the only milieu that I've been in where multilingual puns are commonplace. 
multilingual puns are commonplace.

[00:38]\<hypnotoad> There is a bit of a legend that in the early days of the
[00:38]\<hypnotoad> There is a bit of a legend that in the early days of the cold war the East and West devised an automatic translator that would operate by teletype. After a few million dollars, they took it for a test spin to see how well it worked, by entering a phrase in english, translating to russian, and then back to english. 
cold war the East and West devised an automatic translator that would operate
by teletype. After a few million dollars, they took it for a test spin to see
how well it worked, by entering a phrase in english, translating to russian,
and then back to english.

On phrase was "The spirit is willing, but the flesh is weak" The result was
On phrase was "The spirit is willing, but the flesh is weak" The result was "The vokda is watered down and the meat is rancid" 
"The vokda is watered down and the meat is rancid"

[00:38]\<kbk> No, "the vodka is agreeable."
[00:38]\<kbk> No, "the vodka is agreeable." 

[00:39]\<kbk> "but the meat has gone soft"
[00:39]\<kbk> "but the meat has gone soft" 

[00:39]\<hypnotoad> Kevin with the assist... Thank you thank you
[00:39]\<hypnotoad> Kevin with the assist... Thank you thank you 

[00:39]\<kbk> I liked "out of sight, out of mind" -> "blind idiot"
[00:39]\<kbk> I liked "out of sight, out of mind" -> "blind idiot" 

[00:39]\<hypnotoad> So wait.. it was real?
[00:39]\<hypnotoad> So wait.. it was real? 

[00:39]\<kbk> No, translation software \*still\* isn't that good.
[00:39]\<kbk> No, translation software \*still\* isn't that good. 

[00:40]\<Cameron\_> Why, that's no multilingual pun--I'm keeping my only tongue
[00:40]\<Cameron\_> Why, that's no multilingual pun--I'm keeping my only tongue in my own mouth. 
in my own mouth.

[00:42]\<kbk> A true story, though: there was one document (about a French-made
[00:42]\<kbk> A true story, though: there was one document (about a French-made minicomputer) that I got from a translation service that contained gems like "each forefinger guestbook is divided into two pastures: the word address and the byte rebate within the word" 
minicomputer) that I got from a translation service that contained gems like
"each forefinger guestbook is divided into two pastures: the word address and
the byte rebate within the word"

[00:42]\<hypnotoad> [http://ray.tomes.biz/b2/index.php/c/2007/04/26/p117](http://ray.tomes.biz/b2/index.php/c/2007/04/26/p117)
[00:42]\<hypnotoad> [http://ray.tomes.biz/b2/index.php/c/2007/04/26/p117](http://ray.tomes.biz/b2/index.php/c/2007/04/26/p117) 

[00:43]\<kbk> I had to translate that semimechanically back into French for it
[00:43]\<kbk> I had to translate that semimechanically back into French for it to make any sense. 
to make any sense.

[00:43]\<hypnotoad> Quality
[00:43]\<hypnotoad> Quality 

[00:43]\<kbk> "forefinger guestbook" -> "index register"; "pasture" -> "field";
[00:43]\<kbk> "forefinger guestbook" -> "index register"; "pasture" -> "field"; "rebate" -> "offset" 
"rebate" -> "offset"

[00:43]\<kostix> kbk: we have similar difficulties with chinese shit^Wgoods
[00:43]\<kostix> kbk: we have similar difficulties with chinese shit^Wgoods with Russian-translated labels and texts 
with Russian-translated labels and texts

[00:45]\<hat0> i bought a chinese razor in tashkent, called the "BIG BUG RAZOR"
[00:45]\<hat0> i bought a chinese razor in tashkent, called the "BIG BUG RAZOR" 

[00:45]\<kostix> Tcl NEEDS one :)
[00:45]\<kostix> Tcl NEEDS one :) 

[00:45]\<hypnotoad> Well a tartula has a lot of hair you know
[00:45]\<hypnotoad> Well a tartula has a lot of hair you know 

[00:46]\<hypnotoad> (Tarantula... not the caribbean island....)
[00:46]\<hypnotoad> (Tarantula... not the caribbean island....) 

[00:47]\<kbk> The document also contained numerous references to a K7 - I had
[00:47]\<kbk> The document also contained numerous references to a K7 - I had to read that aloud in French before the forehead-slapping "cassette" came to mind. 
to read that aloud in French before the forehead-slapping "cassette" came to
mind.

[00:48]\<kbk> Una tortuga (a tortoise) generally has no hair at all.
[00:48]\<kbk> Una tortuga (a tortoise) generally has no hair at all. 

---

[18:53]\* kostix coughs... anyone to help me out with English again? :}
[18:53]\* kostix coughs... anyone to help me out with English again? :} 

[18:57]\<dkf> ask away...
[18:57]\<dkf> ask away... 

[18:58]\<kostix> re that "user mood" thing from jabber: what's the difference
[18:58]\<kostix> re that "user mood" thing from jabber: what's the difference between "humbled" and "humiliated"? wordnet counts them as synonyms. 
between "humbled" and "humiliated"? wordnet counts them as synonyms.

[18:59]\<kostix> so we're stuck again with translation
[18:59]\<kostix> so we're stuck again with translation 

[19:00]\<kbk> kostix - "humbled" has a positive connotation - I'd use it for,
[19:00]\<kbk> kostix - "humbled" has a positive connotation - I'd use it for, say, a monk contemplating the majesty of the Universe. 
say, a monk contemplating the majesty of the Universe.

[19:00]\<kbk> "humiliated" in modern colloquial usage has a more negative
[19:00]\<kbk> "humiliated" in modern colloquial usage has a more negative connotation - I'd use it of an athlete that lost badly in a competition. 
connotation - I'd use it of an athlete that lost badly in a competition.

# <a id="Претендент_на_окончательный_вариант_основан_на_Unisex"></a>Претендент на окончательный вариант (основан на "Unisex")
Этот вариант сделан с учётом многочисленных пожеланий переводчиков и лингвистов с
[ru\_translate](http://community.livejournal.com/ru_translate/9082757.html) и
[pishu\_pravilno](http://community.livejournal.com/pishu_pravilno/2804037.html),
а также вышепроцитированного чата с тиклерами. [**Автор**](Участник_Bigote.md)
этого варианта склоняется к переводу самого слова "mood" не как "настроение", а
как "состояние", взяв себе в союзники
[этот комментарий](http://community.livejournal.com/pishu_pravilno/2804037.html?thread=48256837#t48256837).
Соответственно, бо́льшая часть терминов будет в среднем роде, согласовываясь со
словом "состояние". Пару слов я решил перевести существительным в родительном
падеже, убрав при этом двоеточие после "состояния". Думаю, это легко
реализовать, поставив в файле перевода не "Состояние:", а просто "Состояние",
сами настроения-состояния писать как ": испуганное", ": всё нипочём", "
удивления". Критика приветствуется. (Кое-какие слова я ещё не доделал, допишу
завтра-послезавтра.)

Этот вариант сделан с учётом многочисленных пожеланий переводчиков и лингвистов с **[ru\_translate](http://community.livejournal.com/ru_translate/9082757.html)** и **[pishu\_pravilno](http://community.livejournal.com/pishu_pravilno/2804037.html)**, а также вышепроцитированного чата с тиклерами. [Автор](Участник_Bigote.md) этого варианта склоняется к переводу самого слова "mood" не как "настроение", а как "состояние", взяв себе в союзники [этот комментарий](http://community.livejournal.com/pishu_pravilno/2804037.html?thread=48256837#t48256837). Соответственно, бо́льшая часть терминов будет в среднем роде, согласовываясь со словом "состояние". Пару слов я решил перевести существительным в родительном падеже, убрав при этом двоеточие после "состояния". Думаю, это легко реализовать, поставив в файле перевода не "Состояние:", а просто "Состояние", сами настроения-состояния писать как ": испуганное", ": всё нипочём", " удивления". Критика приветствуется. (Кое-какие слова я ещё не доделал, допишу завтра-послезавтра.) 

 ** Оригинал **** Перевод **
 
  afraid  Состояние: испуганное 
 
  amazed  Состояние: изумлённое 
 
  angry  Состояние: рассерженное 
 
  annoyed  Состояние: раздражённое 
 
  anxious  Состояние: беспокойное 
 
  aroused  Состояние: возбуждённое 
 
  ashamed  Состояние: пристыжённое 
 
  bored  Состояние: скукотища! 
 
  brave  Состояние: всё нипочём 
 
  calm  Состояние: спокойное 
 
  cold  Состояние: равнодушное 
 
  confused  Состояние: в замешательстве 
 
  contented  Состояние: довольное 
 
  cranky  Состояние: недовольное 
 
Оригинал | Перевод
---|---
afraid | Состояние: испуганное
amazed | Состояние: изумлённое
angry | Состояние: рассерженное
annoyed | Состояние: раздражённое
anxious | Состояние: беспокойное
aroused | Состояние: возбуждённое
ashamed | Состояние: пристыжённое
bored | Состояние: скукотища!
brave | Состояние: всё нипочём
calm | Состояние: спокойное
cold | Состояние: равнодушное
confused | Состояние: в замешательстве
contented | Состояние: довольное
cranky | Состояние: недовольное
curious | Состояние: любознательное
depressed | Состояние: подавленное
disappointed | Состояние: разочарованное
disgusted | Состояние: чувствую отвращение
distracted | Состояние: растерянное
embarrassed | Состояние: смущённое
excited | Состояние: взволнованное
flirtatious | Состояние: кокетливое
frustrated | Состояние: расстроенное
grumpy | Состояние: ворчливое
guilty | Состояние: виноватое
happy | Состояние: счастливое
hot | Состояние: пылаю
humbled | Состояние: смиренное
humiliated | Состояние: униженное
hungry | Состояние: хочу есть
hurt | Состояние: уязвлённое
impressed | Состояние: под впечатлением
in\_awe | Состояние: благоговейное
in\_love | Состояние: влюблённое
indignant | Состояние: возмущённое
interested | Состояние: заинтересованное
intoxicated | Состояние: одурманенное
invincible | Состояние: неукротимое
jealous | Состояние: ревнивое
lonely | Состояние: одинокое
mean | Состояние: сволочное
moody | Состояние: унылое
nervous | Состояние: на нервах
neutral | Состояние: безразличное
offended | Состояние: обиженное
playful | Состояние: игривое
proud | Состояние: горделивое
relieved | Состояние: гора с плеч
remorseful | Состояние: раскаиваюсь
restless | Состояние: неугомонное
sad | Состояние: печальное
sarcastic | Состояние: язвительное
serious | Состояние: серьёзное
shocked | Состояние: потрясённое
shy | Состояние: застенчивое
sick | Состояние: болезненное
sleepy | Состояние: сонное
stressed | Состояние: напряжённое
surprised | Состояние: удивлённое
thirsty | Состояние: хочу пить
worried | Состояние: беспокойное
  curious  Состояние: любознательное 
 
  depressed  Состояние: подавленное 
 
  disappointed  Состояние: разочарованное 
 
  disgusted  Состояние: чувствую отвращение 
 
  distracted  Состояние: растерянное 
 
  embarrassed  Состояние: смущённое 
 
  excited  Состояние: взволнованное 
 
  flirtatious  Состояние: кокетливое 
 
  frustrated  Состояние: расстроенное 
 
  grumpy  Состояние: ворчливое 
 
  guilty  Состояние: виноватое 
 
  happy  Состояние: счастливое 
 
  hot  Состояние: пылаю 
 
  humbled  Состояние: смиренное 
 
  humiliated  Состояние: униженное 
 
  hungry  Состояние: хочу есть 
 
  hurt  Состояние: уязвлённое 
 
  impressed  Состояние: под впечатлением 
 
  in\_awe  Состояние: благоговейное 
 
  in\_love  Состояние: влюблённое 
 
  indignant  Состояние: возмущённое 
 
  interested  Состояние: заинтересованное 
 
  intoxicated  Состояние: одурманенное 
 
  invincible  Состояние: неукротимое 
 
  jealous  Состояние: ревнивое 
 
  lonely  Состояние: одинокое 
 
  mean  Состояние: сволочное 
 
  moody  Состояние: унылое 
 
  nervous  Состояние: на нервах 
 
  neutral  Состояние: безразличное 
 
  offended  Состояние: обиженное 
 
  playful  Состояние: игривое 
 
  proud  Состояние: горделивое 
 
  relieved  Состояние: гора с плеч 
 
  remorseful  Состояние: раскаиваюсь 
 
  restless  Состояние: неугомонное 
 
  sad  Состояние: печальное 
 
  sarcastic  Состояние: язвительное 
 
  serious  Состояние: серьёзное 
 
  shocked  Состояние: потрясённое 
 
  shy  Состояние: застенчивое 
 
  sick  Состояние: болезненное 
 
  sleepy  Состояние: сонное 
 
  stressed  Состояние: напряжённое 
 
  surprised  Состояние: удивлённое 
 
  thirsty  Состояние: хочу пить 
 
  worried  Состояние: беспокойное 

# <a id="Согласование_с_User_Activity_XEP-0108"></a>Согласование с "User Activity" (XEP-0108)
Существует некоторая проблема в согласовании перевода термина "mood" из "User
Существует некоторая проблема в согласовании перевода термина "mood" из "User Mood" и перевода термина "activity" из "User Activity" ([XEP-0108](http://www.xmpp.org/extensions/xep-0108.html)). 
Mood" и перевода термина "activity" из "User Activity"
([XEP-0108](http://www.xmpp.org/extensions/xep-0108.html)).

[**Gebb**](Участник_Gebb.md) [предложил](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/08/26.html#18:04:56):
[Gebb](Участник_Gebb.md) [предложил](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/08/26.html#18:04:56): 

    <gebb> Насчёт мудов и активити.
    user mood = настроение/состояние, activity = занятие.
    Таково моё предложение.


Changes to wiki/ru/Настройка_Ткаббера__азы_и_глубже.md.

1

2
3
4
5
6
7
8
9
10
11
12
13

14
15

16
17
18
19
20
21

22
23
24
25
26
27
28
29

30
31
32
33
34
35

36
37
38
39

40
41
42
43

44
45
46
47
48
49
50
51
52

53
54
55
56
57
58
59

60
61
62
63
64
65
66

67
68
69
70
71

72
73
74

75
76
77

78
79
80

81
82

83
84
85
86

87
88
89
90
91
92

93
94
95
96
97

98
99
100
101
102
103
104
105
106
107
108

109
110
111
112
113

114
115
116
117
118

119
120
121
122
123

124
125
126

127
128
129

130
131
132
133
134

135
136
137
138
139
140

141
142
143
144

145
146
147
148
149

150
151
152
153

154
155
156
157
158
159

160
161
162
163
164
165
166

167
168
169
170

171
172
173
174

175
176
177
178
179

180
181
182
183

184
185
186
187
188
189

190
191
192

193
194

195
196

197
198

199
200
201
202
203
204
205

206
207
208
209

210
211

212
213
214
215



216
217

218
219

220
221
222
223
224
225

226
227
228

229
230
231
232
233
234
235

236
237
238
239
240

241
242
243
244
245
246
247
248

249
250
251
252
253

254
255
256
257
258


259
260

261
262
263
264

265
266

267
268
269
270
271
272
273
274

275
276

277
278
279
280
281
282
283
284
285

286
287
288


289
290
291
292
293

294
295
296
297
298

299
300

301
302
303
304

305
306
307
308
309

310
311
312
313
314
315
316

317
318
319
320
321
322

323
324
325
326
327
328

329
330
331
332
333
334
335
336

337
338
339
340

341
342
343
344

345
346
347
348
349

350
351
352

353
354
355
356

357
358
359
360

361
362
363
364

365
366
367

368
369
370
371



372
373

374
375
376


377
378
379
380



381
382

383
384
385
386

387
388
389
390
391

392
393

394
395

396
397
398

399
400
401
402
403
404

405
406

407
408
409

410
411
412
413
414
415
416
417



1
2
3
4
5
6
7
8
9
10
11
12
13

14
15

16
17
18
19
20
21

22






23

24




25

26


27

28
29
30
31

32







33

34





35

36





37

38

39
40
41

42

43

44



45



46


47


48

49




50

51



52

53









54

55



56

57



58

59

60
61
62

63

64

65

66

67



68

69


70
71
72

73
74
75
76

77

78
79
80

81
82
83
84

85


86
87
88

89





90

91
92
93
94

95

96


97



98

99


100

101




102

103

104

105
106

107
108

109
110

111





112

113


114

115
116

117
118



119
120
121
122

123
124

125




126

127

128

129




130


131



132

133






134

135



136

137


138


139
140
141

142
143
144
145

146
147

148


149
150
151
152
153

154
155

156







157

158
159


160
161



162

163



164

165
166

167


168

169



170

171





172

173

174
175
176
177

178




179

180






181

182
183
184
185

186


187

188



189

190

191

192


193

194
195
196
197

198


199

200

201

202
203



204
205
206
207

208
209


210
211




212
213
214
215

216


217

218
219
220
221
222

223
224

225


226

227

228


229
230
231

232
233

234
235


236



237
238
239


240
241
242

+











-
+

-
+





-
+
-
-
-
-
-
-

-
+
-
-
-
-

-
+
-
-

-
+



-
+
-
-
-
-
-
-
-

-
+
-
-
-
-
-

-
+
-
-
-
-
-

-
+
-



-
+
-

-
+
-
-
-
+
-
-
-
+
-
-
+
-
-

-
+
-
-
-
-

-
+
-
-
-

-
+
-
-
-
-
-
-
-
-
-

-
+
-
-
-

-
+
-
-
-

-
+
-



-
+
-

-
+
-

-
+
-
-
-

-
+
-
-



-
+



-
+
-



-
+



-
+
-
-



-
+
-
-
-
-
-

-
+



-
+
-

-
-
+
-
-
-

-
+
-
-

-
+
-
-
-
-

-
+
-

-
+

-
+

-
+

-
+
-
-
-
-
-

-
+
-
-

-
+

-
+

-
-
-
+
+
+

-
+

-
+
-
-
-
-

-
+
-

-
+
-
-
-
-

-
-
+
-
-
-

-
+
-
-
-
-
-
-

-
+
-
-
-

-
+
-
-

-
-
+
+

-
+



-
+

-
+
-
-





-
+

-
+
-
-
-
-
-
-
-

-
+

-
-
+
+
-
-
-

-
+
-
-
-

-
+

-
+
-
-

-
+
-
-
-

-
+
-
-
-
-
-

-
+
-




-
+
-
-
-
-

-
+
-
-
-
-
-
-

-
+



-
+
-
-

-
+
-
-
-

-
+
-

-
+
-
-

-
+



-
+
-
-

-
+
-

-
+

-
-
-
+
+
+

-
+

-
-
+
+
-
-
-
-
+
+
+

-
+
-
-

-
+




-
+

-
+
-
-
+
-

-
+
-
-



-
+

-
+

-
-
+
-
-
-



-
-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Настройка_Ткаббера:_азы_и_глубже/index.html)


# Настройка Ткаббера: азы и глубже

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 Вместо предисловия](#Вместо_предисловия)
* [2 Введение](#Введение)
* [3 Места скопления настроек](#Места_скопления_настроек)
* [4 Где лежат файлы конфигурации?](#Где_лежат_файлы_конфигурации)
   * [4.1 Тильда: большие возможности маленького символа](#Тильда_большие_возможности_маленького_символа)
 * [4.1 Тильда: большие возможности маленького символа](#Тильда_большие_возможности_маленького_символа)
* [5 Файл **custom.tcl** — руками не трогать!](#Файл_custom.tcl_-_руками_не_трогать)
   * [5.1 Формат файла **custom.tcl**](#Формат_файла_custom.tcl)
 * [5.1 Формат файла **custom.tcl**](#Формат_файла_custom.tcl)
* [6 Файл **config.tcl** — швейцарский нож для Ткаббера](#Файл_config.tcl_-_швейцарский_нож_для_Ткаббера)
* [7 XRDB! как много в этом слове...](#XRDB_как_много_в_этом_слове...)

## <a id="Вместо_предисловия"></a>Вместо предисловия

Эта статья является попыткой объяснить новообращённым ткабберистам и
Эта статья является попыткой объяснить новообращённым ткабберистам и ткабберинам азы настройки Ткаббера и — главное — _объяснить, **как именно** работает_ механизм его конфигурирования. Впрочем, текст содержит далеко не только азы, но и достаточно глубокие погружения в детали. При этом авторами были приложены некоторые усилия для того, чтобы организовать текст в каждом разделе по нарастанию сложности (это так авторы сняли с себя ответственность за качество материала). 
ткабберинам азы настройки Ткаббера и — главное — _объяснить, **как именно**
работает_ механизм его конфигурирования. Впрочем, текст содержит далеко не
только азы, но и достаточно глубокие погружения в детали. При этом авторами
были приложены некоторые усилия для того, чтобы организовать текст в каждом
разделе по нарастанию сложности (это так авторы сняли с себя ответственность за
качество материала).

Несмотря на то, что по _возможностям_ конфигурирования Ткаббер может спокойно
Несмотря на то, что по _возможностям_ конфигурирования Ткаббер может спокойно заткнуть за пояс большинство аналогичных программ, его подход к решению данной проблемы сродни пресловутому "Unix-way": в руки пользователю даётся некоторое количество рычагов различной формы, конструкции и сложности, умело дёргая за которые, пользователь может добиться весьма многого. И даже странного. 
заткнуть за пояс большинство аналогичных программ, его подход к решению данной
проблемы сродни пресловутому "Unix-way": в руки пользователю даётся некоторое
количество рычагов различной формы, конструкции и сложности, умело дёргая за
которые, пользователь может добиться весьма многого. И даже странного.

С другой стороны, подобная свобода часто (и закономерно) пугает людей (особенно
С другой стороны, подобная свобода часто (и закономерно) пугает людей (особенно новичков) — хочется некой накатанной схемы. Часто также пользователям недостаёт элементарного знания системы, с которой они работают. 
новичков) — хочется некой накатанной схемы. Часто также пользователям недостаёт
элементарного знания системы, с которой они работают.

Часть описанных проблем будет препарирована на данной странице.
Часть описанных проблем будет препарирована на данной странице. 

## <a id="Введение"></a>Введение

Ткаббер написан на языке [Tcl](http://ru.wikipedia.org/wiki/Tcl) (произносится
Ткаббер написан на языке [Tcl](http://ru.wikipedia.org/wiki/Tcl) (произносится "тикл" или "тикль") с использованием "родного" для тикля графического тулкита [Tk](http://ru.wikipedia.org/wiki/Tk). Связка [Tcl/Tk](http://www.tcl.tk) является переносимой, и это означает, что Ткаббер работает как минимум под различными вариантами Unix, под Win32 и под MacOS (справедливости ради надо отметить,  что пользователям последней системы придётся приложить для этого куда больше усилий;  во всяком случае, нам пока неизвестны случаи работы Ткаббера на "маках" с полпинка). 
"тикл" или "тикль") с использованием "родного" для тикля графического тулкита
[Tk](http://ru.wikipedia.org/wiki/Tk). Связка [Tcl/Tk](http://www.tcl.tk)
является переносимой, и это означает, что Ткаббер работает как минимум под
различными вариантами Unix, под Win32 и под MacOS (справедливости ради надо
отметить,  что пользователям последней системы придётся приложить для этого
куда больше усилий;  во всяком случае, нам пока неизвестны случаи работы
Ткаббера на "маках" с полпинка).

Также это означает, что тщетно ждать от Ткаббера наличия некоего "специального"
Также это означает, что тщетно ждать от Ткаббера наличия некоего "специального" конфигуратора для \<впишите сюда вашу любимую ОС>. С другой стороны, в плане _хранения конфигурационных файлов_ у перечисленных операционных систем больше общих черт, чем различий; поэтому владея таким понятием как _"домашний каталог пользователя",_ можно чувствовать себя уверенно при конфигурировании Ткаббера на любой из систем, в которых он работает. 
конфигуратора для \<впишите сюда вашу любимую ОС>. С другой стороны, в плане
_хранения конфигурационных файлов_ у перечисленных операционных систем больше
общих черт, чем различий; поэтому владея таким понятием как _"домашний каталог
пользователя",_ можно чувствовать себя уверенно при конфигурировании Ткаббера
на любой из систем, в которых он работает.

И ещё: существует (неправильное) мнение, что для того, чтобы работать с
И ещё: существует (неправильное) мнение, что для того, чтобы работать с Ткаббером, нужно редактировать какие-то файлы конфигурации. Это неверно — для конфигурирования 90% того, что нужно "обычному пользователю", достаточно встроенного в Ткаббер графического конфигуратора. Проблемы, которые нельзя решить этим путём (например, "кривые шрифты"), обычно являются результатом недоделок в настройке операционной системы. 
Ткаббером, нужно редактировать какие-то файлы конфигурации. Это неверно — для
конфигурирования 90% того, что нужно "обычному пользователю", достаточно
встроенного в Ткаббер графического конфигуратора. Проблемы, которые нельзя
решить этим путём (например, "кривые шрифты"), обычно являются результатом
недоделок в настройке операционной системы.

![(!)](../images/Hammer.png) **Сделать:** плавно подвести к идее "замочи свой
![(!)](../images/Hammer.png) **Сделать:** плавно подвести к идее "замочи свой ~/.tkabber, потом — разбирайся" 
~/.tkabber, потом — разбирайся"

## <a id="Места_скопления_настроек"></a>Места скопления настроек

Tkabber использует четыре источника для получения сведений о своей
Tkabber использует четыре источника для получения сведений о своей конфигурации: 
конфигурации:

1. Настройки по умолчанию — то, что "прибито гвоздями" к коду, и используется,
1.  Настройки по умолчанию — то, что "прибито гвоздями" к коду, и используется, если нет соответствующих настроек из других источников. 
   если нет соответствующих настроек из других источников.
1. Файл **custom.tcl** в _каталоге с файлами настроек_ (см. ниже). Этот файл
   создаётся Ткаббером и содержит те настройки, которые пользователь может
1.  Файл **custom.tcl** в _каталоге с файлами настроек_ (см. ниже). Этот файл создаётся Ткаббером и содержит те настройки, которые пользователь может изменять при помощи окна конфигурации Ткаббера. 
   изменять при помощи окна конфигурации Ткаббера.
1. Файл **config.tcl**, находящийся там же. Это файл содержит код на языке
   Tcl, который _выполняется_ Ткаббером при старте, и позволяет делать
1.  Файл **config.tcl**, находящийся там же. Это файл содержит код на языке Tcl, который _выполняется_ Ткаббером при старте, и позволяет делать наиболее тонкую настройку. 
   наиболее тонкую настройку.
1. X Resource DataBase (XRDB) — на Unix-системах — база данных
1.  X Resource DataBase (XRDB) — на Unix-системах — база данных [X-сервера](http://ru.wikipedia.org/wiki/X_Window_System), хранящая информацию о конфигурации различных [элементов управления GUI](http://ru.wikipedia.org/wiki/Виджет). 
   [X-сервера](http://ru.wikipedia.org/wiki/X_Window_System), хранящая
   информацию о конфигурации различных [элементов управления GUI](http://ru.wikipedia.org/wiki/Виджет).

Важно понимать, что в принципе Ткаббер не нуждается ни в каких настройках,
Важно понимать, что в принципе Ткаббер не нуждается ни в каких настройках, кроме "встроенных", из пункта 1, которые есть всегда. А это означает, что ничего страшного не произойдёт, если вы просто сотрёте (или переместите куда-нибудь до поры) файлы текущей конфигурации. Этим нельзя "испортить" Ткаббер. 
кроме "встроенных", из пункта 1, которые есть всегда. А это означает, что
ничего страшного не произойдёт, если вы просто сотрёте (или переместите
куда-нибудь до поры) файлы текущей конфигурации. Этим нельзя "испортить"
Ткаббер.

**На заметку:** Подобный подход может помочь "в борьбе" с некоторыми
**На заметку:** Подобный подход может помочь "в борьбе" с некоторыми дистрибутивами ткаббера, в которых по умолчанию подключены "навороченные" файлы конфигурации, которые полезны для изучения, но "вываливают" на неподготовленного пользователя слишком много информации. 
дистрибутивами ткаббера, в которых по умолчанию подключены "навороченные" файлы
конфигурации, которые полезны для изучения, но "вываливают" на
неподготовленного пользователя слишком много информации.

Ещё важнее понимать, что каталог с файлами настроек — _единственное_ место в
Ещё важнее понимать, что каталог с файлами настроек — _единственное_ место в системе, которое Ткаббер использует для управления своей конфигурацией (это не совсем верно для случая XRDB, но об этом ниже). То есть никакого реестра или других системно-зависимых средств. А благодаря способности тикля читать текстовые файлы независимо от используемых символов перевода строки (а они разные во всех трёх классах систем, на которых работает тикль), вам достаточно просто скопировать каталог конфигурации на другую машину, а тикль с Ткаббером позаботятся об остальном. И это означает, что вы можете "таскать за собой" этот каталог не только с компьютера на компьютер, но и между разными операционными системами! 
системе, которое Ткаббер использует для управления своей конфигурацией (это не
совсем верно для случая XRDB, но об этом ниже). То есть никакого реестра или
других системно-зависимых средств. А благодаря способности тикля читать
текстовые файлы независимо от используемых символов перевода строки (а они
разные во всех трёх классах систем, на которых работает тикль), вам достаточно
просто скопировать каталог конфигурации на другую машину, а тикль с Ткаббером
позаботятся об остальном. И это означает, что вы можете "таскать за собой" этот
каталог не только с компьютера на компьютер, но и между разными операционными
системами!

Проблемы при переносе могут возникнуть только в том случае, если вы используете
Проблемы при переносе могут возникнуть только в том случае, если вы используете не-ASCII символы (например, русские) в значениях параметров, которые устанавливаются в файле **config.tcl**. Подробнее об этом — в секции, посвящённой этому файлу. 
не-ASCII символы (например, русские) в значениях параметров, которые
устанавливаются в файле **config.tcl**. Подробнее об этом — в секции,
посвящённой этому файлу.

**На заметку:** те из читателей, для которых слова "система контроля версий" —
**На заметку:** те из читателей, для которых слова "система контроля версий" — не пустой звук, могут поразмыслить какие удобства можно получить при использовании этого подхода, учитывая, что клиенты для популярных СКВ существуют для каждой из систем, на которых работает Ткаббер. 
не пустой звук, могут поразмыслить какие удобства можно получить при
использовании этого подхода, учитывая, что клиенты для популярных СКВ
существуют для каждой из систем, на которых работает Ткаббер.

Следующий раздел обсуждает в деталях где и как Ткаббер ожидает увидеть каталог
Следующий раздел обсуждает в деталях где и как Ткаббер ожидает увидеть каталог со своими настройками. 
со своими настройками.

## <a id="Где_лежат_файлы_конфигурации"></a>Где лежат файлы конфигурации?

Короткий ответ: они находятся в подкаталоге **.tkabber** домашнего каталога
Короткий ответ: они находятся в подкаталоге **.tkabber** домашнего каталога пользователя. 
пользователя.

Если имя **.tkabber** — фиксированно, то с последним всё не так просто. Точнее,
Если имя **.tkabber** — фиксированно, то с последним всё не так просто. Точнее, просто, но допускает некоторые вариации. 
просто, но допускает некоторые вариации.

Для начала полезно запомнить, что при операциях с файлами в Tcl домашний
Для начала полезно запомнить, что при операциях с файлами в Tcl домашний каталог пользователя обозначается символом "~" (тильда), который имеет такой же смысл, как и "~" в командных оболочках Unix-систем (что неудивительно, т.к. Tcl был "рождён" в Unix). 
каталог пользователя обозначается символом "~" (тильда), который имеет такой же
смысл, как и "~" в командных оболочках Unix-систем (что неудивительно, т.к. Tcl
был "рождён" в Unix).

При операциях с файлами тильда "раскрывается" в полный путь до вашего домашнего
При операциях с файлами тильда "раскрывается" в полный путь до вашего домашнего каталога. К примеру, на моей домашней системе Debian GNU/Linux она раскрывается в 
каталога. К примеру, на моей домашней системе Debian GNU/Linux она раскрывается
в

    /home/kostix

а на моей рабочей станции Windows XP она "скрывает в себе"
а на моей рабочей станции Windows XP она "скрывает в себе" 

    C:\Documents and Settings\Дормидонт Евлампиевич

Это означает, что в первом случае файлы конфигурации Tkabber хранятся в
Это означает, что в первом случае файлы конфигурации Tkabber хранятся в каталоге 
каталоге

    /home/kostix/.tkabber

а во втором — в каталоге
а во втором — в каталоге 

    C:\Documents and Settings\Дормидонт Евлампиевич\Application Data\Tkabber

Системы Win9x/WinME являются однопользовательскими, и по причинам, которые
Системы Win9x/WinME являются однопользовательскими, и по причинам, которые будут показаны ниже, каталог настроек Ткаббера на таких системах находится в корне первого логического диска: 
будут показаны ниже, каталог настроек Ткаббера на таких системах находится в
корне первого логического диска:

    C:\.TKABBER

Тильда может использоваться при указании различных каталогов в настройках
Тильда может использоваться при указании различных каталогов в настройках Tkabber'а (например, история чатов может храниться в каталоге ~/.tkabber/logs). Так же вам могут "показать" подобный каталог в ходе диалога в [комнате обсуждения Ткаббера] — не стоит удивляться: вам показывают "обобщённый" вариант, который (должен быть) понятен пользователям любой ОС, в которой работает Ткаббер. 
Tkabber'а (например, история чатов может храниться в каталоге ~/.tkabber/logs).
Так же вам могут "показать" подобный каталог в ходе диалога в [комнате
обсуждения Ткаббера] — не стоит удивляться: вам показывают "обобщённый"
вариант, который (должен быть) понятен пользователям любой ОС, в которой
работает Ткаббер.

Теперь — о более сложном.
Теперь — о более сложном. 

### <a id="Тильда_большие_возможности_маленького_символа"></a>Тильда: большие возможности маленького символа

На самом деле, интерпретатор тикля "раскрывает" тильду, пользуясь информацией
На самом деле, интерпретатор тикля "раскрывает" тильду, пользуясь информацией из нескольких (проверенных) источников. 
из нескольких (проверенных) источников.

1\. Во-первых, тикль сверяется с [**переменной окружения**](Терминология.md#Переменные_окружения)
**HOME**. На Unix-системах эта переменная есть всегда (за исключением
1. Во-первых, тикль сверяется с [переменной окружения](Терминология.md#Переменные_окружения) **HOME**. На Unix-системах эта переменная есть всегда (за исключением клинических случаев). В Windows — напротив — её по умолчанию нет. Если такая переменная есть, тикль использует её значение, и никакие силы не заставят его в этом случае использовать что-то другое. 
клинических случаев). В Windows — напротив — её по умолчанию нет. Если такая
переменная есть, тикль использует её значение, и никакие силы не заставят его в
этом случае использовать что-то другое.

Такое поведение удобно для того, чтобы заставить Ткаббер использовать
Такое поведение удобно для того, чтобы заставить Ткаббер использовать какой-нибудь странный каталог для своей конфигурации, что может понадобиться, к примеру, при изготовлении системы "джаббер клиент на флэшке". 
какой-нибудь странный каталог для своей конфигурации, что может понадобиться, к
примеру, при изготовлении системы "джаббер клиент на флэшке".

Этот же аспект используется дистрибутивом
Этот же аспект используется дистрибутивом [Tkabber-Pack](Дистрибутивы__которые_мы_выбираем.md#Прилавок), который в скрипте запуска Ткаббера устанавливает переменную **HOME** в значение "." (точка, т.е. "текущий каталог"), перемещая таким образом каталог **.tkabber** "к себе". 
[**Tkabber-Pack**](Дистрибутивы__которые_мы_выбираем.md#Прилавок), который в
скрипте запуска Ткаббера устанавливает переменную **HOME** в значение "."
(точка, т.е. "текущий каталог"), перемещая таким образом каталог **.tkabber**
"к себе".

2\. Во-вторых, если переменная окружения **HOME** не найдена, тикль использует
2. Во-вторых, если переменная окружения **HOME** не найдена, тикль использует следующий набор правил: 
следующий набор правил:

2.1. **Unix:**
2.1. **Unix:** 

![(!)](../images/Hammer.png) **Сделать:** Написать про Unix
![(!)](../images/Hammer.png) **Сделать:** Написать про Unix 

2.2. **Windows:**
2.2. **Windows:** 

* Под Windows интерпретатор тикля сначала пытается использовать каталог,
*  Под Windows интерпретатор тикля сначала пытается использовать каталог, полученный "склеиванием" значений переменных окружения **HOMEDRIVE** (имя диска с домашним каталогом) и **HOMEPATH** (путь на этом диске до домашнего каталога). Эти переменные по умолчанию есть на любой Windows системе класса NT, но их нет в Win9x/WinME, так как и понятие "домашний каталог пользователя" в них не завезли. 
  полученный "склеиванием" значений переменных окружения **HOMEDRIVE** (имя
  диска с домашним каталогом) и **HOMEPATH** (путь на этом диске до домашнего
  каталога). Эти переменные по умолчанию есть на любой Windows системе класса
  NT, но их нет в Win9x/WinME, так как и понятие "домашний каталог
  пользователя" в них не завезли.

    Посмотреть значения этих переменных в Windows 2000 и выше можно, запустив
Посмотреть значения этих переменных в Windows 2000 и выше можно, запустив оболочку командной строки **cmd.exe** (это можно сделать, выбрав "Пуск → Программы → Стандартные → Командная Строка"), и выполнив там: 
    оболочку командной строки **cmd.exe** (это можно сделать, выбрав "Пуск →
    Программы → Стандартные → Командная Строка"), и выполнив там:

        set | findstr HOME
    set | findstr HOME

    на моей системе это выглядит так:
на моей системе это выглядит так: 

        C:\> set | findstr HOME
        HOMEDRIVE=C:
        HOMEPATH=\Documents and Settings\Дормидонт Евлампиевич
    C:\> set | findstr HOME
    HOMEDRIVE=C:
    HOMEPATH=\Documents and Settings\Дормидонт Евлампиевич

    Команда **findstr** была здесь использована для фильтрации вывода команды **set**.
Команда **findstr** была здесь использована для фильтрации вывода команды **set**. 

    В Unix-системах эквивалентом **findstr** является программа **grep** (на
В Unix-системах эквивалентом **findstr** является программа **grep** (на самом  деле это **findstr** является ограниченным эквивалентом **grep**). В Windows NT и Win9x/WinME нет команды **findstr**, так что придётся просматривать всю информацию глазами (или установить [grep для Win32](http://gnuwin32.sourceforge.net/packages/grep.htm)). 
    самом  деле это **findstr** является ограниченным эквивалентом **grep**). В
    Windows NT и Win9x/WinME нет команды **findstr**, так что придётся
    просматривать всю информацию глазами (или установить
    [grep для Win32](http://gnuwin32.sourceforge.net/packages/grep.htm)).

    Кроме того, пользователи Win9x/WinME лишены даже **cmd.exe** и вынуждены
Кроме того, пользователи Win9x/WinME лишены даже **cmd.exe** и вынуждены запускать **command.com**. 
    запускать **command.com**.

    **На заметку:** Команда **set** вообще очень удобна для изучения состояния
**На заметку:** Команда **set** вообще очень удобна для изучения состояния переменных окружения в системе. Будучи запущена без параметров (как в примере выше), она выводит пары **ПЕРЕМЕННАЯ**=**ЗНАЧЕНИЕ**. Для ограничения её вывода можно применять **findstr** или **grep** как описано выше. 
    переменных окружения в системе. Будучи запущена без параметров (как в
    примере выше), она выводит пары **ПЕРЕМЕННАЯ**=**ЗНАЧЕНИЕ**. Для
    ограничения её вывода можно применять **findstr** или **grep** как описано
    выше.

* Если же нет и переменных **HOMEDRIVE**/**HOMEPATH,** тикль заламывает руки и
  использует в качестве домашнего каталога пользователя каталог **C:\\**.
*  Если же нет и переменных **HOMEDRIVE**/**HOMEPATH,** тикль заламывает руки и использует в качестве домашнего каталога пользователя каталог **C:\\**. Простенько и со вкусом. В системах Win9x/WinME эти переменных окружения отсутствуют так же, как и **HOME**, и это означает, что в них каталогом с настройками Ткаббера является "C:\\.TKABBER". 
  Простенько и со вкусом. В системах Win9x/WinME эти переменных окружения
  отсутствуют так же, как и **HOME**, и это означает, что в них каталогом с
  настройками Ткаббера является "C:\\.TKABBER".

Не исключено, что прочитав про весь этот кошмар, доходчивый читатель задастся
Не исключено, что прочитав про весь этот кошмар, доходчивый читатель задастся вопросом: "а почему бы не прописать себе в окружение переменную **HOME** с правильным значением раз и навсегда?". И будет прав. Такая настройка используется многими, так как облегчает жизнь и многим другим программам, знающим о существовании этой переменной окружения, например, [редактору Vim](http://vim.sf.net) и [клиенту системы Subversion](http://www.subversion.tigris.org). 
вопросом: "а почему бы не прописать себе в окружение переменную **HOME** с
правильным значением раз и навсегда?". И будет прав. Такая настройка
используется многими, так как облегчает жизнь и многим другим программам,
знающим о существовании этой переменной окружения, например,
[редактору Vim](http://vim.sf.net) и
[клиенту системы Subversion](http://www.subversion.tigris.org).

Сделать это весьма просто: откройте свойства "Моего Компьютера", щёлкнув по его
Сделать это весьма просто: откройте свойства "Моего Компьютера", щёлкнув по его иконке правой кнопкой и выбрав "Свойства", затем выберите закладку "Дополнительно" и нажмите на появившейся форме кномку "Переменные среды" (спасибо переводчикам, что не "вторника"). 
иконке правой кнопкой и выбрав "Свойства", затем выберите закладку
"Дополнительно" и нажмите на появившейся форме кномку "Переменные среды"
(спасибо переводчикам, что не "вторника").

В появившемся окне есть два списка переменных: вверху — для текущего
В появившемся окне есть два списка переменных: вверху — для текущего пользователя, внизу — глобальных для системы. Нас интересует верхний. Нажмите кнопку "Создать" и введите: 
пользователя, внизу — глобальных для системы. Нас интересует верхний. Нажмите
кнопку "Создать" и введите:

*  _Имя переменной:_ **HOME**
*  _Значение переменной:_ **%USERPROFILE%** (или **%HOMEDRIVE%/%HOMEPATH%**)
*  _Имя переменной:_ **HOME** 
*  _Значение переменной:_ **%USERPROFILE%** (или **%HOMEDRIVE%/%HOMEPATH%**) 

Конструкция
Конструкция 

    %ИМЯ_ПЕРЕМЕННОЙ%

означает: "подставить значение из переменной с именем **ИМЯ\_ПЕРЕМЕННОЙ**".
означает: "подставить значение из переменной с именем **ИМЯ\_ПЕРЕМЕННОЙ**". 

Закройте оба диалога, нажимая "ОК", и выполните команду для вывода переменных
Закройте оба диалога, нажимая "ОК", и выполните команду для вывода переменных окружения ещё раз _в новой оболочке_ (т.к. старая не "увидит" сделанных вами изменений). Теперь вывод должен выглядеть примерно так: 
окружения ещё раз _в новой оболочке_ (т.к. старая не "увидит" сделанных вами
изменений). Теперь вывод должен выглядеть примерно так:

    HOME=C:\Documents and Settings\Дормидонт Евлампиевич
    HOMEDRIVE=C:
    HOMEPATH=\Documents and Settings\Дормидонт Евлампиевич

Вуаля!
Вуаля! 

**Внимание:** Замечено, что на разных версиях Windows встречаются различные
**Внимание:** Замечено, что на разных версиях Windows встречаются различные комбинации переменных **USERPROFILE**, **HOMEDRIVE** и **HOMEPATH** (да, c'est la vie!). К примеру, авторам встречалась Windows NT 4.x, на которой были все три переменные, но **HOMEDRIVE** и **HOMEPATH** в комбинации давали полную чушь, в то время как **USERPROFILE** содержала достаточно вменяемое значение. В Windows 2000 и Windows XP переменная **USERPROFILE** почти всегда содержит правильное значение, однако, опять же, авторам встречались машины, на которых эта переменная отсутствовала. 
комбинации переменных **USERPROFILE**, **HOMEDRIVE** и **HOMEPATH** (да, c'est
la vie!). К примеру, авторам встречалась Windows NT 4.x, на которой были все
три переменные, но **HOMEDRIVE** и **HOMEPATH** в комбинации давали полную
чушь, в то время как **USERPROFILE** содержала достаточно вменяемое значение. В
Windows 2000 и Windows XP переменная **USERPROFILE** почти всегда содержит
правильное значение, однако, опять же, авторам встречались машины, на которых
эта переменная отсутствовала.

Выводов из этого — два:
Выводов из этого — два: 

*  **set** — ваш друг!
*  в крайнем случае всегда можно записать в **HOME** непосредственное значение.
*  **set** — ваш друг! 
*  в крайнем случае всегда можно записать в **HOME** непосредственное значение. Это даже может оказаться полезным — установить "необычное" значение этой переменной "в глобальном масштабе", например, для случая "набор программ на винчестере в USB-салазках". 
   Это даже может оказаться полезным — установить "необычное" значение этой
   переменной "в глобальном масштабе", например, для случая "набор программ на
   винчестере в USB-салазках".

**На заметку:** Имейте в виду, что подстановки значений в переменных окружения
**На заметку:** Имейте в виду, что подстановки значений в переменных окружения Windows выполняются только один раз, то есть, говоря проще, нельзя определить переменную, которая будет ссылаться на другую переменную, которая будет ссылаться на третью — подстановка этой третьей переменной выполнена не будет. 
Windows выполняются только один раз, то есть, говоря проще, нельзя определить
переменную, которая будет ссылаться на другую переменную, которая будет
ссылаться на третью — подстановка этой третьей переменной выполнена не будет.

**Напоследок — ещё один трюк для сильных духом.**
**Напоследок — ещё один трюк для сильных духом.** 

Можно легко узнать что думает тикль по поводу вашего домашнего каталога (и при
Можно легко узнать что думает тикль по поводу вашего домашнего каталога (и при случае внушит это Ткабберу), выполнив заклинание **"file norm ~"** без кавычек в любой оболочке тикля, установленной в вашей системе. 
случае внушит это Ткабберу), выполнив заклинание **"file norm ~"** без кавычек
в любой оболочке тикля, установленной в вашей системе.

Очень вероятно, что у вас как минимум есть **wish.exe** или **wish84.exe**, так
Очень вероятно, что у вас как минимум есть **wish.exe** или **wish84.exe**, так же, возможно, у вас есть **tclsh.exe**. Если же у вас есть **tkcon.tcl**, и вы об этом знали, то вам, скорее всего, не стоит тратить время на чтение этого руководства. Для нашей благородной цели сгодится любая из указанных программ. 
же, возможно, у вас есть **tclsh.exe**. Если же у вас есть **tkcon.tcl**, и вы
об этом знали, то вам, скорее всего, не стоит тратить время на чтение этого
руководства. Для нашей благородной цели сгодится любая из указанных программ.

С другой стороны, если у вас Ткаббер в виде tclkit или starpack, то вам, скорее
С другой стороны, если у вас Ткаббер в виде tclkit или starpack, то вам, скорее всего, не повезло (т.к. подобный дистрибутив это "вещь в себе"), но ниже приведено решение и для этого случая. Если же у вас Tkabber Pack, то вы — обладатель урезанного, но "нормального" дистрибутива Tcl/Tk, только находится он там, куда вы установили Tkabber Pack, и указанный **wish.exe** следует искать именно там. 
всего, не повезло (т.к. подобный дистрибутив это "вещь в себе"), но ниже
приведено решение и для этого случая. Если же у вас Tkabber Pack, то вы —
обладатель урезанного, но "нормального" дистрибутива Tcl/Tk, только находится
он там, куда вы установили Tkabber Pack, и указанный **wish.exe** следует
искать именно там.

Итак, запускаем то, что вам удалось обнаружить из приведённого списка и вводим
Итак, запускаем то, что вам удалось обнаружить из приведённого списка и вводим указанную команду. Примерный вид происходящего таков: 
указанную команду. Примерный вид происходящего таков:

    % file norm ~
    C:/Documents and Settings/Дормидонт Евлампиевич

Внимательные из вас заметят, что в этом выводе — "неправильные" слэши: прямые,
Внимательные из вас заметят, что в этом выводе — "неправильные" слэши: прямые, а не обратные, как принято в ОС от Microsoft. В этом нет ничего странного: тикль, работая под Windows, оперирует именно "прямыми", "юниксовыми" слэшами, так как Windows на самом деле прекрасно понимает эту нотацию, только умело скрывает это от пользователей. 
а не обратные, как принято в ОС от Microsoft. В этом нет ничего странного:
тикль, работая под Windows, оперирует именно "прямыми", "юниксовыми" слэшами,
так как Windows на самом деле прекрасно понимает эту нотацию, только умело
скрывает это от пользователей.

**На заметку:** Не лишним также будет заметить, что Ткаббер имеет возможность
**На заметку:** Не лишним также будет заметить, что Ткаббер имеет возможность сам обеспечить вас [консолью для ввода команд Tcl](http://wiki.tcl.tk/672) (и управления собой, в числе прочего; но эта тема [отдельной статьи](Удалённое_управление_с_помощью_send.md)). В виндовой версии Ткаббера консоль встроена, в \*nix у вас должен быть установлен пакет tkcon. Получить оную можно, выбрав опцию "Показать консоль" пункта "Помощь" главного меню Ткаббера. 
сам обеспечить вас [консолью для ввода команд Tcl](http://wiki.tcl.tk/672) (и
управления собой, в числе прочего; но эта тема
[**отдельной статьи**](Удалённое_управление_с_помощью_send.md)). В виндовой версии Ткаббера
консоль встроена, в \*nix у вас должен быть установлен пакет tkcon. Получить
оную можно, выбрав опцию "Показать консоль" пункта "Помощь" главного меню
Ткаббера.

Это может оказаться полезным для пользователей "упакованных" версий Ткаббера.
Это может оказаться полезным для пользователей "упакованных" версий Ткаббера. 

## <a id="Файл_custom.tcl_-_руками_не_трогать"></a>Файл **custom.tcl** — руками не трогать!

Файл **custom.tcl** это собственность Ткаббера. Ткаббер использует этот файл в
Файл **custom.tcl** это собственность Ткаббера. Ткаббер использует этот файл в качестве постоянного хранилища своих настроек. Ткаббер читает **custom.tcl** при старте и _перезаписывает_ его при выходе. 
качестве постоянного хранилища своих настроек. Ткаббер читает **custom.tcl**
при старте и _перезаписывает_ его при выходе.

Это означает, что хотя и ничего не мешает вам изменить этот файл при помощи
Это означает, что хотя и ничего не мешает вам изменить этот файл при помощи любимого текстового редактора (и Ткаббер при следующем старте примет к сведению вашу правку), никто не может гарантировать постоянство сделанных вами изменений. 
любимого текстового редактора (и Ткаббер при следующем старте примет к сведению
вашу правку), никто не может гарантировать постоянство сделанных вами
изменений.

Кроме того, несмотря на то, что формат этого файла весьма прозрачен, нет
Кроме того, несмотря на то, что формат этого файла весьма прозрачен, нет никаких гарантий того, что он не изменится в следующей версии Ткаббера. 
никаких гарантий того, что он не изменится в следующей версии Ткаббера.

Посему тем, кто не собирается нарочно копаться во внутренностях Ткаббера, лучше
Посему тем, кто не собирается нарочно копаться во внутренностях Ткаббера, лучше всего относиться к этому файлу как к "чёрному ящику" — в духе времени уважать права Ткаббера на частную собственность. 
всего относиться к этому файлу как к "чёрному ящику" — в духе времени уважать
права Ткаббера на частную собственность.

А ещё лучше — отнеситесь к нему как к трансформаторной будке.
А ещё лучше — отнеситесь к нему как к трансформаторной будке. 

### <a id="Формат_файла_custom.tcl"></a>Формат файла **custom.tcl**

Доскональное понимание формата файла **custom.tcl** требует определённых знаний
Доскональное понимание формата файла **custom.tcl** требует определённых знаний по языку Tcl, поскольку данные в нём хранятся в формате, который удобно читать и писать интерпретатору тикля. 
по языку Tcl, поскольку данные в нём хранятся в формате, который удобно читать
и писать интерпретатору тикля.

С другой стороны, формат можно назвать "дружественным", так как в конце-концов
С другой стороны, формат можно назвать "дружественным", так как в конце-концов это обычный текст, только "хитро" отформатированный. 
это обычный текст, только "хитро" отформатированный.

Элементы Tcl, которые полезно знать для полного понимания предмета:
Элементы Tcl, которые полезно знать для полного понимания предмета: 

*  [Списки](http://wiki.tcl.tk/440)
*  [Массивы](http://wiki.tcl.tk/1032)
*  [Пространства имён](http://wiki.tcl.tk/1489)
*  [Списки](http://wiki.tcl.tk/440) 
*  [Массивы](http://wiki.tcl.tk/1032) 
*  [Пространства имён](http://wiki.tcl.tk/1489) 

Итак, файл **custom.tcl:**
Итак, файл **custom.tcl:** 

*  Использует кодировку [UTF-8](http://ru.wikipedia.org/wiki/UTF-8)
*  Является набором строк, каждая из которых представляет собой _"правильно
*  Использует кодировку [UTF-8](http://ru.wikipedia.org/wiki/UTF-8) 
*  Является набором строк, каждая из которых представляет собой _"правильно сформированный список"_ с точки зрения языка Tcl. 
   сформированный список"_ с точки зрения языка Tcl.
*  Каждый из этих списков состоит из двух элементов:
 1.  _Полное_ имя переменной, представляющей одну из опций конфигурации Ткаббера.
 1.  Значение этой переменной.
*  Каждый из этих списков состоит из двух элементов: 
 1.  _Полное_ имя переменной, представляющей одну из опций конфигурации Ткаббера. 
 1.  Значение этой переменной. 

Значение переменной само может быть списком, а элементы этого списка, в свою
Значение переменной само может быть списком, а элементы этого списка, в свою очередь так же могут быть списками. Такая структура может иметь произвольную вложенность. 
очередь так же могут быть списками. Такая структура может иметь произвольную
вложенность.

Вот, к примеру, кусочек (не)типичного файла **custom.tcl:**
Вот, к примеру, кусочек (не)типичного файла **custom.tcl:** 

    {::ifacetk::roster::options(nested) 1}
    {::::loginconf(httpproxy) gates.of.hell.microsoft.com}

Технически этот пример означает:
Технически этот пример означает: 

1.  Устанавливается истинным (1) значение переменной, заданной ключом "nested"
1.  Устанавливается истинным (1) значение переменной, заданной ключом "nested" в массиве "options", входящим в пространство имён "::ifacetk::roster". 
    в массиве "options", входящим в пространство имён "::ifacetk::roster".
1.  Переменная, заданная ключом "httpproxy" в глобальном массиве "::loginconf",
1.  Переменная, заданная ключом "httpproxy" в глобальном массиве "::loginconf", устанавливается в значение "gates.of.hell.microsoft.com". 
    устанавливается в значение "gates.of.hell.microsoft.com".

Как видно, имена переменных вполне самоописательны, и могут быть "прочитаны",
Как видно, имена переменных вполне самоописательны, и могут быть "прочитаны", например: "включить поддержку вложенности для элементов у Tk-виджета, ответственного за отображение списка контактов (ростера)". 
например: "включить поддержку вложенности для элементов у Tk-виджета,
ответственного за отображение списка контактов (ростера)".

## <a id="Файл_config.tcl_-_швейцарский_нож_для_Ткаббера"></a>Файл **config.tcl** — швейцарский нож для Ткаббера

![(!)](../images/Hammer.png) **Сделать:** некоторое введение...
![(!)](../images/Hammer.png) **Сделать:** некоторое введение... 

Про этот файл рассказано [**тут**](Config.tcl.md).
Про этот файл рассказано [тут](Config.tcl.md). 

Также имеется [**список готовых "рецептов"**](Нетривиальные_настройки.md), поместив
которые в **config.tcl**, можно добиться интересного поведения от Ткаббера.
Также имеется [список готовых "рецептов"](Нетривиальные_настройки.md), поместив которые в **config.tcl**, можно добиться интересного поведения от Ткаббера. Изучение статьи про **config.tcl** не нужно для использования рецептов, однако оно очень вам пригодится, если вы захотите реализовать какое-то сложное изменение конфигурации своими руками. 
Изучение статьи про **config.tcl** не нужно для использования рецептов, однако
оно очень вам пригодится, если вы захотите реализовать какое-то сложное
изменение конфигурации своими руками.

## <a id="XRDB_как_много_в_этом_слове..."></a>XRDB! как много в этом слове...

Описание XRDB и его связи с "базой данных настроек Tk" вынесено в
[**отдельную статью**](XRDB.md).
Описание XRDB и его связи с "базой данных настроек Tk" вынесено в [отдельную статью](XRDB.md). 


Changes to wiki/ru/Настройки.md.

1
2

3
4
5
6
7

8
9
10
11
12
13
14
15
16
17
18
19
20

21
22
23

24
25
26
27
28
29
30
31
32

33
34
35
36
37
38
39
40
41
42

43
44
45
46
47
48
49
50
51
52
53




54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100














































101
102
103
104



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120















121
122
123
124
125
126





127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144





















145
146
147
148
149
150
151
152
153
154
155
156











157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187






























188
189
190
191
192
193
194






195
196
197
198
199
200




201
202
203
204



205
206
207
208
209
210
211
212
213
214
215
216
217
218













219
220
221
222

223
224
225


226
227
228
229
230
231
232
233

234
235
236
237
238
239
240
241

242
243

244
245
246

247
248

249
250

251
252

253
254
255
256
257

258
259

260
261
262
263
264


265
266
267
268
269
270
271
272




273
274

275
276

277
278
279
280
281
282
283
284

285
286

287
288
289
290
291
292
293
294
295

296
297

298
299
300
301
302
303
304

305
306

307
308
309
310
311
312
313

314
315
316

317
318
319
320
321
322
323
324
325
326
327
328
329
330

331
332
333
334
335
336








337
338

339
340

341
342
343
344
345
346





347
348

349
350
351

352
353
354
355
356
357
358
359

360
361

362
363
364
365
366
367
368
369
370

371
372

373
374
375
376
377
378

379

380


381
382

383
384

385
386

387
388
389
390



391
392
393
394
395

396
397
398
399
400
401
402



403
404

405
406
407

408
409

410
411

412
413
414
415

416
417
418
419
420
421
422
423

424
425
426
427
428
429
430
431
432

433
434
435
436
437
438

439
440
441
442
443
444
445
446
447

448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474

475
476

477
478

479
480
481
482
483
484

485
486
487
488
489

490
491
492
493
494

495
496

497
498
499
500

501
502

503
504

505
506

507
508
509
510

511
512

513
514
515
516

517
518

519
520
521
522



523
524
525
526
527

528
529

530
531
532
533

534
535
536

537
538
539

540
541

542
543

544
545





546
547
548
549
550
551

552
553
554
555
556
557

558
559
560
561
562
563
564
565
566














567
568
569



570
571

572
573

574
575
576
577
578
579
580
581

582
583

584
585

586
587
588

589
590

591

592


593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618

619
620
621

622
623

624
625
626
627

628
629
630
631
632
633
634

635
636
637
638
639

640
641

642
643
644
645
646
647
648
649


650
651
652
653

654
655

656
657
658

659
660

661
662
663
664
665
666

667
668

669
670
671
672
673


674
675
676
677

678
679

680
681

682
683
684
685

686
687

688
689
690
691
692
693

694
695
696
697

698
699

700
701

702
703

704
705
706
707

708
709

710
711

712
713

714
715
716
717

718
719

720
721

722
723

724
725

726
727

728
729
730
731


732

733
734

735
736

737
738

739
740

741
742
743
744
745

746
747

748
749
750
751

752
753
754

755
756
757

758
759

760
761
762
763


764
765
766
767
768
769

770
771

772
773

774
775

776
777
778

779
780

781
782

783
784

785
786
787
788

789
790

791
792
793


794
795

796
797
798
799
800
801




802

803
804
805
806

807
808

809
810
811

812
813

814
815
816
817
818
819

820
821

822
823
824

825
826

827
828
829
830
831

832
833

834
835
836
837
838

839
840
841
842
843
844
845
846
847
848

849
850

851
852
853
854
855
856
857
858

859
860

861
862
863
864

865
866

867
868
869
870

871
872
873
874
875
876
877
878
879
880
881

882
883
884
885
886

887
888
889

890
891

892
893
894
895
896
897
898

899
900

901
902
903
904
905
906
907

908
909

910
911
912
913
914
915





916
917
918
919
920
921
922
923
924
925

926
927

928
929

930
931
932
933
934
935

936
937
938

939
940

941
942

943
944
945

946
947
948
949
950
951

952
953

954
955
956
957
958
959
960

961
962

963
964

965
966

967
968

969
970

971
972

973
974

975
976
977


978
979
980
981
982
983

984
985

986
987
988
989

990
991

992
993
994

995
996

997
998
999

1000
1001

1002
1003

1004
1005

1006
1007
1008
1009

1010
1011

1012
1013

1014
1015

1016
1017
1018
1019

1020
1021

1022
1023

1024
1025

1026
1027
1028

1029
1030

1031
1032
1033
1034
1035

1036
1037

1038
1039
1040
1041
1042
1043





1044
1045
1046
1047
1048
1049
1050
1051

1052
1053



1054
1055
1056
1057
1058
1059
1060
1061

1062
1063

1064
1065

1066
1067

1068
1069

1070
1071

1072
1073

1074
1075

1076
1077

1078
1079

1080
1081
1082

1083
1084

1085
1086

1087
1088
1089

1090
1091
1092
1093
1094
1095
1096

1097
1098

1099
1100

1101
1102
1103
1104

1105
1106
1107

1108
1109

1110
1111
1112

1113
1114
1115
1116

1117
1118

1119
1120

1121
1122

1123
1124

1125
1126

1127
1128

1129
1130

1131
1132

1133
1134

1135
1136

1137
1138

1139
1140

1141
1142

1143
1144

1145
1146

1147
1148

1149
1150

1151
1152

1153
1154

1155
1156

1157
1158

1159
1160

1161
1162

1163
1164

1165
1166

1167
1168

1169
1170

1171
1172
1173
1174

1175
1176

1177
1178

1179
1180

1181
1182

1183
1184

1185
1186

1187
1188

1189
1190
1191

1192
1193

1194
1195
1196

1197
1198

1199
1200

1201
1202

1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221


1222
1223
1224
1225
1226

1227
1228
1229

1230
1231
1232
1233
1234
1235

1236
1237

1238
1239
1240
1241

1242
1243
1244

1245
1246
1247
1248
1249
1250
1251
1252

1253
1254
1255
1256

1257
1258
1259
1260
1261
1262

1263
1264
1265
1266
1267

1268

1269
1270
1271

1272
1273
1274


1275

1276

1277
1278
1279
1280
1281

1282
1283
1284
1285
1286
1287
1288
1289
1290
1291

1292
1293
1294
1295
1296
1297
1298
1299





1300
1301
1302
1303
1304
1305
1306
1307

1308
1309

1310
1311

1312
1313


1314
1315



1316

1317


1318
1319
1320
1321

1322










1323
1324


1325
1326

1327
1328

1329
1330
1331
1332
1333
1334
1335
1336

1337
1338

1339
1340
1341
1342

1343
1344
1345
1346
1347
1348

1349
1350
1351

1352
1353
1354
1355

1356
1357
1358

1359
1360
1361

1362
1363

1364
1365

1366
1367

1368
1369
1370
1371
1372
1373

1374
1375

1376
1377
1378

1379
1380

1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
















1408
1409
1410

1411
1412

1413
1414
1415
1416

1417
1418

1419
1420
1421
1422
1423
1424
1425
1426
1427


1428

1429
1430
1431
1432
1433
1434

1435
1436

1437
1438
1439
1440

1441
1442
1443
1444
1445

1446
1447
1448

1449
1450

1451
1452
1453
1454

1455
1456

1457
1458
1459
1460
1461

1462
1463

1464
1465
1466
1467
1468

1469
1470

1471
1472
1473
1474
1475
1476
1477
1478
1479
1480


1481
1482
1483


1484
1485
1486


1487
1488

1489
1490

1491
1492

1493
1494
1495
1496
1497
1498
1499
1500
1501
1502



1503
1504
1505
1
2
3
4
5
6
7

8











9

10

11

12







13

14








15

16



17
18
19
20




21
22
23
24
25














































26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72



73
74
75
76















77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92





93
94
95
96
97
98

















99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120











121
122
123
124
125
126
127
128
129
130
131
132






























133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163






164
165
166
167
168
169
170
171




172
173
174
175
176



177
178
179
180













181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196

197
198


199
200






201

202






203

204
205

206

207

208
209

210
211

212
213

214



215

216
217

218


219


220
221








222
223
224
225
226

227
228

229






230

231
232

233







234

235
236

237





238

239
240

241





242

243
244


245












246

247
248





249
250
251
252
253
254
255
256


257
258

259
260





261
262
263
264
265
266

267
268


269






270

271
272

273







274

275
276

277




278

279
280
281

282
283
284

285
286

287
288

289
290



291
292
293



294

295
296






297
298
299
300

301
302


303
304

305
306

307


308

309
310







311

312







313



314


315






316


317









318

















319
320

321
322

323




324

325



326

327



328

329
330

331


332

333
334

335
336

337
338

339


340

341
342

343


344

345
346

347


348

349
350
351
352




353
354

355


356

357

358

359

360

361
362

363
364

365
366

367
368
369
370
371
372





373




374

375
376








377
378
379
380
381
382
383
384
385
386
387
388
389
390



391
392
393
394

395
396

397






398

399
400

401
402

403
404


405
406

407
408
409

410
411
412

























413

414

415
416

417


418

419





420

421



422

423
424

425





426


427
428


429

430
431

432

433

434
435

436




437

438
439

440


441


442
443


444

445
446

447
448

449


450

451
452

453


454
455
456

457


458

459
460

461
462

463
464

465


466

467
468

469
470

471
472

473


474

475
476

477
478

479
480

481
482

483
484

485



486
487
488

489
490

491
492

493
494

495
496

497



498

499
500

501


502

503
504


505

506

507
508

509

510


511
512




513

514
515

516
517

518
519

520

521

522
523

524
525

526
527

528


529

530
531

532
533


534
535
536

537





538
539
540
541
542

543


544

545
546

547

548

549
550

551




552

553
554

555

556

557
558

559



560

561
562

563



564

565








566

567
568

569






570

571
572

573


574

575
576

577

578


579









580

581



582

583

584

585
586

587





588

589
590

591





592

593
594

595




596

597
598
599
600
601
602









603
604

605
606

607




608

609

610

611
612

613
614

615

616

617




618

619
620

621





622

623
624

625
626

627
628

629
630

631
632

633
634

635
636

637
638


639
640




641

642
643

644


645

646
647

648

649

650
651

652

653

654
655

656
657

658
659

660


661

662
663

664
665

666
667

668


669

670
671

672
673

674
675

676

677

678
679

680



681

682
683

684

685




686
687
688
689
690








691
692

693
694
695
696







697
698

699
700

701
702

703
704

705
706

707
708

709
710

711
712

713
714

715

716

717
718

719
720

721



722





723

724
725

726
727

728


729

730

731

732
733

734
735


736


737

738
739

740
741

742
743

744
745

746
747

748
749

750
751

752
753

754
755

756
757

758
759

760
761

762
763

764
765

766
767

768
769

770
771

772
773

774
775

776
777

778
779

780
781

782
783

784
785

786
787

788
789

790
791

792


793

794
795

796
797

798
799

800
801

802
803

804
805

806
807

808

809

810
811

812

813

814
815

816
817

818
819

820
















821


822
823



824

825
826


827

828




829
830

831

832


833

834

835






836

837

838


839




840

841
842




843
844
845

846

847

848

849
850
851
852

853



854

855





856




857
858







859
860
861
862
863


864





865
866

867
868

869
870

871
872
873

874
875
876
877
878

879
880
881



882
883
884
885
886
887
888
889
890
891
892
893


894
895
896

897
898

899






900

901
902

903


904

905



906


907

908

909


910

911

912

913



914
915

916
917

918
919

920




921

922
923

924

925

926
927

928









929

















930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945

946

947
948

949


950

951
952

953








954
955
956

957




958

959
960

961


962

963



964

965

966

967
968

969


970

971
972

973



974

975
976

977



978

979
980

981







982


983
984
985


986
987
988


989
990
991

992
993

994
995

996






997



998
999
1000





+




-
+
-
-
-
-
-
-
-
-
-
-
-

-
+
-

-
+
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-
-
-

-
+
-
-
-




-
-
-
-
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
+
+
+
+
+
+


-
-
-
-
+
+
+
+

-
-
-
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+



-
+

-
-
+
+
-
-
-
-
-
-

-
+
-
-
-
-
-
-

-
+

-
+
-

-
+

-
+

-
+

-
+
-
-
-

-
+

-
+
-
-

-
-
+
+
-
-
-
-
-
-
-
-
+
+
+
+

-
+

-
+
-
-
-
-
-
-

-
+

-
+
-
-
-
-
-
-
-

-
+

-
+
-
-
-
-
-

-
+

-
+
-
-
-
-
-

-
+

-
-
+
-
-
-
-
-
-
-
-
-
-
-
-

-
+

-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+

-
+

-
-
-
-
-
+
+
+
+
+

-
+

-
-
+
-
-
-
-
-
-

-
+

-
+
-
-
-
-
-
-
-

-
+

-
+
-
-
-
-

-
+

+
-
+
+

-
+

-
+

-
+

-
-
-
+
+
+
-
-
-

-
+

-
-
-
-
-
-
+
+
+

-
+

-
-
+

-
+

-
+
-
-

-
+

-
-
-
-
-
-
-
+
-

-
-
-
-
-
-
-
+
-
-
-

-
-
+
-
-
-
-
-
-

-
-
+
-
-
-
-
-
-
-
-
-

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+

-
+

-
+
-
-
-
-

-
+
-
-
-

-
+
-
-
-

-
+

-
+
-
-

-
+

-
+

-
+

-
+
-
-

-
+

-
+
-
-

-
+

-
+
-
-

-
+
+
+

-
-
-
-
+

-
+
-
-

-
+
-

-
+
-

-
+

-
+

-
+

-
+
+
+
+
+

-
-
-
-
-
+
-
-
-
-

-
+

-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+

-
+

-
+
-
-
-
-
-
-

-
+

-
+

-
+

-
-
+

-
+

+
-
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-

-
+

-
+
-
-

-
+
-
-
-
-
-

-
+
-
-
-

-
+

-
+
-
-
-
-
-

-
-
+
+
-
-

-
+

-
+
-

-
+

-
+
-
-
-
-

-
+

-
+
-
-

-
-
+
+
-
-

-
+

-
+

-
+
-
-

-
+

-
+
-
-



-
+
-
-

-
+

-
+

-
+

-
+
-
-

-
+

-
+

-
+

-
+
-
-

-
+

-
+

-
+

-
+

-
+

-
+
-
-
-

+
+
-
+

-
+

-
+

-
+

-
+
-
-
-

-
+

-
+
-
-

-
+

-
-
+
-

-
+

-
+
-

-
-
+
+
-
-
-
-

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+
-
-

-
+

-
+

-
-
+
+

-
+
-
-
-
-
-

+
+
+
+
-
+
-
-

-
+

-
+
-

-
+

-
+
-
-
-
-

-
+

-
+
-

-
+

-
+
-
-
-

-
+

-
+
-
-
-

-
+
-
-
-
-
-
-
-
-

-
+

-
+
-
-
-
-
-
-

-
+

-
+
-
-

-
+

-
+
-

-
-
+
-
-
-
-
-
-
-
-
-

-
+
-
-
-

-
+
-

-
+

-
+
-
-
-
-
-

-
+

-
+
-
-
-
-
-

-
+

-
+
-
-
-
-

-
+
+
+
+
+

-
-
-
-
-
-
-
-
-
+

-
+

-
+
-
-
-
-

-
+
-

-
+

-
+

-
+
-

-
+
-
-
-
-

-
+

-
+
-
-
-
-
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
-
+
+
-
-
-
-

-
+

-
+
-
-

-
+

-
+
-

-
+

-
+
-

-
+

-
+

-
+

-
+
-
-

-
+

-
+

-
+

-
+
-
-

-
+

-
+

-
+

-
+
-

-
+

-
+
-
-
-

-
+

-
+
-

-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
+

-
+
+
+

-
-
-
-
-
-
-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+
-
-
-
+
-
-
-
-
-

-
+

-
+

-
+
-
-

-
+
-

-
+

-
+

-
-
+
-
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+
-

-
+

-
+

-
+

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
-
+
+
-
-
-

-
+

-
-
+
-

-
-
-
-
+

-
+
-

-
-
+
-

-
+
-
-
-
-
-
-

-
+
-

-
-
+
-
-
-
-

-
+

-
-
-
-
+

+
-

-
+
-

-
+
+

+
-
+
-
-
-

-
+
-
-
-
-
-

-
-
-
-
+

-
-
-
-
-
-
-
+
+
+
+
+
-
-

-
-
-
-
-
+

-
+

-
+

-
+
+

-
+
+
+

+
-
+
+

-
-
-
+

+
+
+
+
+
+
+
+
+
+
-
-
+
+

-
+

-
+
-
-
-
-
-
-

-
+

-
+
-
-

-
+
-
-
-

-
-
+
-

-
+
-
-

-
+
-

-
+
-
-
-
+

-
+

-
+

-
+
-
-
-
-

-
+

-
+
-

-
+

-
+
-
-
-
-
-
-
-
-
-

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-

-
+

-
+
-
-

-
+

-
+
-
-
-
-
-
-
-
-

+
+
-
+
-
-
-
-

-
+

-
+
-
-

-
+
-
-
-

-
+
-

-
+

-
+
-
-

-
+

-
+
-
-
-

-
+

-
+
-
-
-

-
+

-
+
-
-
-
-
-
-
-

-
-
+
+

-
-
+
+

-
-
+
+

-
+

-
+

-
+
-
-
-
-
-
-

-
-
-
+
+
+
-
-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Настройки/index.html)


# Настройки

Материал из Tkabber Wiki.

Попасть в окно настроек просто: меню **Tkabber → Настройки**. Откроется
Попасть в окно настроек просто: меню **Tkabber → Настройки**. Откроется вкладка, полная кнопок, каждая из которых ведёт в свой раздел и содержит настройки определённых элементов интерфейса, логина, плагинов, звука и прочих всякостей. В этой статье мы попробуем подробно рассказать о наиболее важных настройках и упомянуть вскользь не очень важные. Но все настройки, имеющиеся в Ткаббере на данный момент (версия 10.0.1-beta, а точнее, ревизия 1401 из svn), попадут в эту статью с минимальным описанием хотя бы для того, чтобы проще было искать нужную по ключевым словам. Стоит напомнить, что в окне настроек, как и почти везде в Ткаббере, работает поиск: Ctrl-s. Но ищет он, к сожалению, лишь в пределах открытого раздела. Полного поиска по всем настройкам нет (то есть, если из главного окна вы будете искать какую-нибудь настройку логина, вы её не найдёте). 
вкладка, полная кнопок, каждая из которых ведёт в свой раздел и содержит
настройки определённых элементов интерфейса, логина, плагинов, звука и прочих
всякостей. В этой статье мы попробуем подробно рассказать о наиболее важных
настройках и упомянуть вскользь не очень важные. Но все настройки, имеющиеся в
Ткаббере на данный момент (версия 10.0.1-beta, а точнее, ревизия 1401 из svn),
попадут в эту статью с минимальным описанием хотя бы для того, чтобы проще было
искать нужную по ключевым словам. Стоит напомнить, что в окне настроек, как и
почти везде в Ткаббере, работает поиск: Ctrl-s. Но ищет он, к сожалению, лишь в
пределах открытого раздела. Полного поиска по всем настройкам нет (то есть,
если из главного окна вы будете искать какую-нибудь настройку логина, вы её не
найдёте).

Ну что ж, перейдём непосредственно к настройкам, однако перед этим ознакомим
Ну что ж, перейдём непосредственно к настройкам, однако перед этим ознакомим вас с одной тонкой, но важной вещью: 
вас с одной тонкой, но важной вещью:

Пробуя настройки в этом конфигураторе, мало пометить чекбокс, нужно ещё
Пробуя настройки в этом конфигураторе, мало пометить чекбокс, нужно ещё _применить изменение,_ чтобы Ткаббер о нём узнал. Для этого нажмите на кнопку Состояние, расположенную рядом с изменённой настройкой, и выберите нужный вариант. Можно сохранить настройку только для текущей сессии (равносильно включению настроек через пункты меню), а можно сохранить и для будущих, тогда при следующем старте вам не придётся ничего настраивать заново. Кроме того, можно восстановить значение по умолчанию, в случае, если вы напортачили во время экспериментов. 
_применить изменение,_ чтобы Ткаббер о нём узнал. Для этого нажмите на кнопку
Состояние, расположенную рядом с изменённой настройкой, и выберите нужный
вариант. Можно сохранить настройку только для текущей сессии (равносильно
включению настроек через пункты меню), а можно сохранить и для будущих, тогда
при следующем старте вам не придётся ничего настраивать заново. Кроме того,
можно восстановить значение по умолчанию, в случае, если вы напортачили во
время экспериментов.

Продвинутым пользователям стоит заметить одну важную идею, лежащую в основе
Продвинутым пользователям стоит заметить одну важную идею, лежащую в основе механизма конфигурирования Ткаббера (и пока ещё нигде на этой вики более не освещённую): любую настройку, которую вы видите в интерфейсе настроек, можно установить программно из [файла конфигурации](Config.tcl.md); при этом длинные непонятные "имена настроек" Ткаббера именно потому длинны и непонятны, что это на самом деле — имена переменных, управляющих настройками, и эти имена можно скопировать (физически, "натянув" на них выделение мышкой прямо в интерфейсе настроек) и вставить в файл конфигурации, открытый в любимом текстовом редакторе. 
механизма конфигурирования Ткаббера (и пока ещё нигде на этой вики более не
освещённую): любую настройку, которую вы видите в интерфейсе настроек, можно
установить программно из [**файла конфигурации**](Config.tcl.md); при этом длинные
непонятные "имена настроек" Ткаббера именно потому длинны и непонятны, что это
на самом деле — имена переменных, управляющих настройками, и эти имена можно
скопировать (физически, "натянув" на них выделение мышкой прямо в интерфейсе
настроек) и вставить в файл конфигурации, открытый в любимом текстовом
редакторе.

Имейте также в виду, что любая группа настроек может иметь несколько
Имейте также в виду, что любая группа настроек может иметь несколько "родителей": например, группа настроек "Emoticons", посвящённая эмоциконкам (смайлам), доступна как из группы "Chat", так и из группы "Plugins" → "Rich Text". 
"родителей": например, группа настроек "Emoticons", посвящённая эмоциконкам
(смайлам), доступна как из группы "Chat", так и из группы "Plugins" → "Rich
Text".

## <a id="toc"></a>Содержание

* [1 AutoAway](#AutoAway)
   * [1.1 ::plugins::autoaway::options(awaytime)](#pluginsautoawayoptionsawaytime)
   * [1.2 ::plugins::autoaway::options(xatime)](#pluginsautoawayoptionsxatime)
   * [1.3 ::plugins::autoaway::options(status)](#pluginsautoawayoptionsstatus)
   * [1.4 ::plugins::autoaway::options(drop\_priority)](#pluginsautoawayoptionsdrop_priority)
 * [1.1 ::plugins::autoaway::options(awaytime)](#pluginsautoawayoptionsawaytime)
 * [1.2 ::plugins::autoaway::options(xatime)](#pluginsautoawayoptionsxatime)
 * [1.3 ::plugins::autoaway::options(status)](#pluginsautoawayoptionsstatus)
 * [1.4 ::plugins::autoaway::options(drop\_priority)](#pluginsautoawayoptionsdrop_priority)
* [2 Chat](#Chat)
   * [2.1 ::chat::options(stop\_scroll)](#chatoptionsstop_scroll)
   * [2.2 ::chat::options(smart\_scroll)](#chatoptionssmart_scroll)
   * [2.3 ::chat::options(display\_status\_description)](#chatoptionsdisplay_status_description)
   * [2.4 ::chat::options(default\_message\_type)](#chatoptionsdefault_message_type)
   * [2.5 ::chat::options(gen\_status\_change\_msgs)](#chatoptionsgen_status_change_msgs)
   * [2.6 ::plugins::completion::options(completion\_expire)](#pluginscompletionoptionscompletion_expire)
   * [2.7 ::plugins::options(timestamp\_format)](#pluginsoptionstimestamp_format)
   * [2.8 ::plugins::options(delayed\_timestamp\_format)](#pluginsoptionsdelayed_timestamp_format)
   * [2.9 ::plugins::xhtml::options(enable)](#pluginsxhtmloptionsenable)
   * [2.10 ::plugins::log\_on\_open::options(max\_messages)](#pluginslog_on_openoptionsmax_messages)
   * [2.11 ::plugins::log\_on\_open::options(max\_interval)](#pluginslog_on_openoptionsmax_interval)
   * [2.12 ::plugins::nickcolors::options(use\_colored\_nicks)](#pluginsnickcolorsoptionsuse_colored_nicks)
   * [2.13 ::plugins::nickcolors::options(use\_colored\_roster\_nicks)](#pluginsnickcolorsoptionsuse_colored_roster_nicks)
   * [2.14 ::plugins::nickcolors::options(use\_colored\_messages)](#pluginsnickcolorsoptionsuse_colored_messages)
   * [2.15 ::muc::options(gen\_enter\_exit\_msgs)](#mucoptionsgen_enter_exit_msgs)
   * [2.16 ::muc::options(gen\_muc\_status\_change\_msgs)](#mucoptionsgen_muc_status_change_msgs)
   * [2.17 ::muc::options(gen\_muc\_position\_change\_msgs)](#mucoptionsgen_muc_position_change_msgs)
   * [2.18 ::muc::options(propose\_configure)](#mucoptionspropose_configure)
   * [2.19 ::muc::options(history\_maxchars)](#mucoptionshistory_maxchars)
   * [2.20 ::muc::options(history\_maxstanzas)](#mucoptionshistory_maxstanzas)
   * [2.21 ::muc::options(request\_only\_unseen\_history)](#mucoptionsrequest_only_unseen_history)
   * [2.22 ::plugins::tclchat::options(use\_tkchat\_colors)](#pluginstclchatoptionsuse_tkchat_colors)
   * [2.23 Chatstate](#Chatstate)
      * [2.23.1 ::plugins::chatstate::options(enable)](#pluginschatstateoptionsenable)
   * [2.24 Emoticons](#Emoticons)
      * [2.24.1 ::plugins::emoticons::options(show\_emoticons)](#pluginsemoticonsoptionsshow_emoticons)
      * [2.24.2 ::plugins::emoticons::options(theme)](#pluginsemoticonsoptionstheme)
      * [2.24.3 ::plugins::emoticons::options(match\_whole\_word)](#pluginsemoticonsoptionsmatch_whole_word)
      * [2.24.4 ::plugins::emoticons::options(handle\_lol)](#pluginsemoticonsoptionshandle_lol)
   * [2.25 Events](#Events)
      * [2.25.1 ::plugins::events::options(enable)](#pluginseventsoptionsenable)
   * [2.26 Highlight](#Highlight)
      * [2.26.1 ::plugins::highlight::options(enable\_highlighting)](#pluginshighlightoptionsenable_highlighting)
      * [2.26.2 ::plugins::highlight::options(highlight\_nick)](#pluginshighlightoptionshighlight_nick)
      * [2.26.3 ::plugins::highlight::options(highlight\_substrings)](#pluginshighlightoptionshighlight_substrings)
      * [2.26.4 ::plugins::highlight::options(highlight\_whole\_words)](#pluginshighlightoptionshighlight_whole_words)
   * [2.27 Logging](#Logging)
      * [2.27.1 ::logger::options(logdir)](#loggeroptionslogdir)
      * [2.27.2 ::logger::options(log\_chat)](#loggeroptionslog_chat)
      * [2.27.3 ::logger::options(log\_groupchat)](#loggeroptionslog_groupchat)
   * [2.28 MUC Ignoring](#MUC_Ignoring)
      * [2.28.1 ::plugins::mucignore::options(transient\_rules)](#pluginsmucignoreoptionstransient_rules)
   * [2.29 Stylecodes](#Stylecodes)
      * [2.29.1 ::plugins::stylecodes::options(emphasize)](#pluginsstylecodesoptionsemphasize)
      * [2.29.2 ::plugins::stylecodes::options(hide\_markup)](#pluginsstylecodesoptionshide_markup)
   * [2.30 Vcard](#Vcard)
 * [2.1 ::chat::options(stop\_scroll)](#chatoptionsstop_scroll)
 * [2.2 ::chat::options(smart\_scroll)](#chatoptionssmart_scroll)
 * [2.3 ::chat::options(display\_status\_description)](#chatoptionsdisplay_status_description)
 * [2.4 ::chat::options(default\_message\_type)](#chatoptionsdefault_message_type)
 * [2.5 ::chat::options(gen\_status\_change\_msgs)](#chatoptionsgen_status_change_msgs)
 * [2.6 ::plugins::completion::options(completion\_expire)](#pluginscompletionoptionscompletion_expire)
 * [2.7 ::plugins::options(timestamp\_format)](#pluginsoptionstimestamp_format)
 * [2.8 ::plugins::options(delayed\_timestamp\_format)](#pluginsoptionsdelayed_timestamp_format)
 * [2.9 ::plugins::xhtml::options(enable)](#pluginsxhtmloptionsenable)
 * [2.10 ::plugins::log\_on\_open::options(max\_messages)](#pluginslog_on_openoptionsmax_messages)
 * [2.11 ::plugins::log\_on\_open::options(max\_interval)](#pluginslog_on_openoptionsmax_interval)
 * [2.12 ::plugins::nickcolors::options(use\_colored\_nicks)](#pluginsnickcolorsoptionsuse_colored_nicks)
 * [2.13 ::plugins::nickcolors::options(use\_colored\_roster\_nicks)](#pluginsnickcolorsoptionsuse_colored_roster_nicks)
 * [2.14 ::plugins::nickcolors::options(use\_colored\_messages)](#pluginsnickcolorsoptionsuse_colored_messages)
 * [2.15 ::muc::options(gen\_enter\_exit\_msgs)](#mucoptionsgen_enter_exit_msgs)
 * [2.16 ::muc::options(gen\_muc\_status\_change\_msgs)](#mucoptionsgen_muc_status_change_msgs)
 * [2.17 ::muc::options(gen\_muc\_position\_change\_msgs)](#mucoptionsgen_muc_position_change_msgs)
 * [2.18 ::muc::options(propose\_configure)](#mucoptionspropose_configure)
 * [2.19 ::muc::options(history\_maxchars)](#mucoptionshistory_maxchars)
 * [2.20 ::muc::options(history\_maxstanzas)](#mucoptionshistory_maxstanzas)
 * [2.21 ::muc::options(request\_only\_unseen\_history)](#mucoptionsrequest_only_unseen_history)
 * [2.22 ::plugins::tclchat::options(use\_tkchat\_colors)](#pluginstclchatoptionsuse_tkchat_colors)
 * [2.23 Chatstate](#Chatstate)
  * [2.23.1 ::plugins::chatstate::options(enable)](#pluginschatstateoptionsenable)
 * [2.24 Emoticons](#Emoticons)
  * [2.24.1 ::plugins::emoticons::options(show\_emoticons)](#pluginsemoticonsoptionsshow_emoticons)
  * [2.24.2 ::plugins::emoticons::options(theme)](#pluginsemoticonsoptionstheme)
  * [2.24.3 ::plugins::emoticons::options(match\_whole\_word)](#pluginsemoticonsoptionsmatch_whole_word)
  * [2.24.4 ::plugins::emoticons::options(handle\_lol)](#pluginsemoticonsoptionshandle_lol)
 * [2.25 Events](#Events)
  * [2.25.1 ::plugins::events::options(enable)](#pluginseventsoptionsenable)
 * [2.26 Highlight](#Highlight)
  * [2.26.1 ::plugins::highlight::options(enable\_highlighting)](#pluginshighlightoptionsenable_highlighting)
  * [2.26.2 ::plugins::highlight::options(highlight\_nick)](#pluginshighlightoptionshighlight_nick)
  * [2.26.3 ::plugins::highlight::options(highlight\_substrings)](#pluginshighlightoptionshighlight_substrings)
  * [2.26.4 ::plugins::highlight::options(highlight\_whole\_words)](#pluginshighlightoptionshighlight_whole_words)
 * [2.27 Logging](#Logging)
  * [2.27.1 ::logger::options(logdir)](#loggeroptionslogdir)
  * [2.27.2 ::logger::options(log\_chat)](#loggeroptionslog_chat)
  * [2.27.3 ::logger::options(log\_groupchat)](#loggeroptionslog_groupchat)
 * [2.28 MUC Ignoring](#MUC_Ignoring)
  * [2.28.1 ::plugins::mucignore::options(transient\_rules)](#pluginsmucignoreoptionstransient_rules)
 * [2.29 Stylecodes](#Stylecodes)
  * [2.29.1 ::plugins::stylecodes::options(emphasize)](#pluginsstylecodesoptionsemphasize)
  * [2.29.2 ::plugins::stylecodes::options(hide\_markup)](#pluginsstylecodesoptionshide_markup)
 * [2.30 Vcard](#Vcard)
* [3 Conference Info](#Conference_Info)
   * [3.1 ::plugins::conferenceinfo::options(autoask)](#pluginsconferenceinfooptionsautoask)
   * [3.2 ::plugins::conferenceinfo::options(interval)](#pluginsconferenceinfooptionsinterval)
   * [3.3 ::plugins::conferenceinfo::options(err\_interval)](#pluginsconferenceinfooptionserr_interval)
 * [3.1 ::plugins::conferenceinfo::options(autoask)](#pluginsconferenceinfooptionsautoask)
 * [3.2 ::plugins::conferenceinfo::options(interval)](#pluginsconferenceinfooptionsinterval)
 * [3.3 ::plugins::conferenceinfo::options(err\_interval)](#pluginsconferenceinfooptionserr_interval)
* [4 File Transfer](#File_Transfer)
   * [4.1 ::ft::options(download\_dir)](#ftoptionsdownload_dir)
   * [4.2 ::ft::options(default\_proto)](#ftoptionsdefault_proto)
   * [4.3 HTTP](#HTTP)
      * [4.3.1 ::plugins::http::options(port)](#pluginshttpoptionsport)
      * [4.3.2 ::plugins::http::options(host)](#pluginshttpoptionshost)
   * [4.4 Jidlink](#Jidlink)
      * [4.4.1 ::jidlink::transport(allowed,dtcp-active)](#jidlinktransportalloweddtcp-active)
      * [4.4.2 ::jidlink::transport(allowed,dtcp-passive)](#jidlinktransportalloweddtcp-passive)
      * [4.4.3 ::jidlink::transport(allowed,inband-bytestream)](#jidlinktransportallowedinband-bytestream)
   * [4.5 Stream Initiation](#Stream_Initiation)
      * [4.5.1 ::si::socks5::initiator::options(enable\_mediated\_connection)](#sisocks5initiatoroptionsenable_mediated_connection)
      * [4.5.2 ::si::socks5::initiator::options(proxy\_servers)](#sisocks5initiatoroptionsproxy_servers)
      * [4.5.3 ::si::transport(allowed,http://jabber.org/protocol/bytestreams)](#sitransportallowedhttp__jabber.org_protocol_bytestreams)
      * [4.5.4 ::si::transport(allowed,http://jabber.org/protocol/iqibb)](#sitransportallowedhttp__jabber.org_protocol_iqibb)
      * [4.5.5 ::si::transport(allowed,http://jabber.org/protocol/ibb)](#sitransportallowedhttp__jabber.org_protocol_ibb)
 * [4.1 ::ft::options(download\_dir)](#ftoptionsdownload_dir)
 * [4.2 ::ft::options(default\_proto)](#ftoptionsdefault_proto)
 * [4.3 HTTP](#HTTP)
  * [4.3.1 ::plugins::http::options(port)](#pluginshttpoptionsport)
  * [4.3.2 ::plugins::http::options(host)](#pluginshttpoptionshost)
 * [4.4 Jidlink](#Jidlink)
  * [4.4.1 ::jidlink::transport(allowed,dtcp-active)](#jidlinktransportalloweddtcp-active)
  * [4.4.2 ::jidlink::transport(allowed,dtcp-passive)](#jidlinktransportalloweddtcp-passive)
  * [4.4.3 ::jidlink::transport(allowed,inband-bytestream)](#jidlinktransportallowedinband-bytestream)
 * [4.5 Stream Initiation](#Stream_Initiation)
  * [4.5.1 ::si::socks5::initiator::options(enable\_mediated\_connection)](#sisocks5initiatoroptionsenable_mediated_connection)
  * [4.5.2 ::si::socks5::initiator::options(proxy\_servers)](#sisocks5initiatoroptionsproxy_servers)
  * [4.5.3 ::si::transport(allowed,[http://jabber.org/protocol/bytestreams](http://jabber.org/protocol/bytestreams))](#sitransportallowedhttp__jabber.org_protocol_bytestreamshttp__jabber.org_protocol_bytestreams)
  * [4.5.4 ::si::transport(allowed,[http://jabber.org/protocol/iqibb](http://jabber.org/protocol/iqibb))](#sitransportallowedhttp__jabber.org_protocol_iqibbhttp__jabber.org_protocol_iqibb)
  * [4.5.5 ::si::transport(allowed,[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb))](#sitransportallowedhttp__jabber.org_protocol_ibbhttp__jabber.org_protocol_ibb)
* [5 GPGME](#GPGME)
   * [5.1 ::ssj::options(one-passphrase)](#ssjoptionsone-passphrase)
   * [5.2 ::ssj::options(sign-traffic)](#ssjoptionssign-traffic)
   * [5.3 ::ssj::options(encrypt-traffic)](#ssjoptionsencrypt-traffic)
   * [5.4 ::ssj::options(key)](#ssjoptionskey)
   * [5.5 ::ssj::options(display\_sig\_warnings)](#ssjoptionsdisplay_sig_warnings)
 * [5.1 ::ssj::options(one-passphrase)](#ssjoptionsone-passphrase)
 * [5.2 ::ssj::options(sign-traffic)](#ssjoptionssign-traffic)
 * [5.3 ::ssj::options(encrypt-traffic)](#ssjoptionsencrypt-traffic)
 * [5.4 ::ssj::options(key)](#ssjoptionskey)
 * [5.5 ::ssj::options(display\_sig\_warnings)](#ssjoptionsdisplay_sig_warnings)
* [6 Main Interface](#Main_Interface)
   * [6.1 ::ifacetk::options(use\_tabbar)](#ifacetkoptionsuse_tabbar)
   * [6.2 ::ifacetk::options(tabs\_side)](#ifacetkoptionstabs_side)
   * [6.3 ::ifacetk::options(tab\_minwidth)](#ifacetkoptionstab_minwidth)
   * [6.4 ::ifacetk::options(tab\_maxwidth)](#ifacetkoptionstab_maxwidth)
   * [6.5 ::ifacetk::options(show\_toolbar)](#ifacetkoptionsshow_toolbar)
   * [6.6 ::ifacetk::options(show\_presencebar)](#ifacetkoptionsshow_presencebar)
   * [6.7 ::ifacetk::options(show\_statusbar)](#ifacetkoptionsshow_statusbar)
   * [6.8 ::ifacetk::options(raise\_new\_tab)](#ifacetkoptionsraise_new_tab)
   * [6.9 ::ifacetk::options(message\_numbers\_in\_tabs)](#ifacetkoptionsmessage_numbers_in_tabs)
   * [6.10 ::ifacetk::options(update\_title\_delay)](#ifacetkoptionsupdate_title_delay)
   * [6.11 ::ifacetk::options(show\_tearoffs)](#ifacetkoptionsshow_tearoffs)
   * [6.12 ::ifacetk::options(closebuttonaction)](#ifacetkoptionsclosebuttonaction)
   * [6.13 ::pixmaps::options(pixmaps\_theme)](#pixmapsoptionspixmaps_theme)
   * [6.14 ::webbrowser](#webbrowser)
   * [6.15 Systray](#Systray)
      * [6.15.1 Общие настройки](#Общие_настройки)
      * [6.15.2 Настройки расширений работы с треем](#Настройки_расширений_работы_с_треем)
 * [6.1 ::ifacetk::options(use\_tabbar)](#ifacetkoptionsuse_tabbar)
 * [6.2 ::ifacetk::options(tabs\_side)](#ifacetkoptionstabs_side)
 * [6.3 ::ifacetk::options(tab\_minwidth)](#ifacetkoptionstab_minwidth)
 * [6.4 ::ifacetk::options(tab\_maxwidth)](#ifacetkoptionstab_maxwidth)
 * [6.5 ::ifacetk::options(show\_toolbar)](#ifacetkoptionsshow_toolbar)
 * [6.6 ::ifacetk::options(show\_presencebar)](#ifacetkoptionsshow_presencebar)
 * [6.7 ::ifacetk::options(show\_statusbar)](#ifacetkoptionsshow_statusbar)
 * [6.8 ::ifacetk::options(raise\_new\_tab)](#ifacetkoptionsraise_new_tab)
 * [6.9 ::ifacetk::options(message\_numbers\_in\_tabs)](#ifacetkoptionsmessage_numbers_in_tabs)
 * [6.10 ::ifacetk::options(update\_title\_delay)](#ifacetkoptionsupdate_title_delay)
 * [6.11 ::ifacetk::options(show\_tearoffs)](#ifacetkoptionsshow_tearoffs)
 * [6.12 ::ifacetk::options(closebuttonaction)](#ifacetkoptionsclosebuttonaction)
 * [6.13 ::pixmaps::options(pixmaps\_theme)](#pixmapsoptionspixmaps_theme)
 * [6.14 ::webbrowser](#webbrowser)
 * [6.15 Systray](#Systray)
  * [6.15.1 Общие настройки](#Общие_настройки)
   * [6.15.1 ::ifacetk::systray::options(display\_status)](#ifacetksystrayoptionsdisplay_status)
   * [6.15.1 ::ifacetk::systray::options(blink)](#ifacetksystrayoptionsblink)
  * [6.15.2 Настройки расширений работы с треем](#Настройки_расширений_работы_с_треем)
   * [6.15.2 ::plugins::taskbar::options(enable)](#pluginstaskbaroptionsenable)
   * [6.15.2 ::plugins::tktray::options(enable)](#pluginstktrayoptionsenable)
* [7 IQ](#IQ)
   * [7.1 ::iq::options(show\_iq\_requests)](#iqoptionsshow_iq_requests)
   * [7.2 ::iq::options(shorten\_iq\_namespaces)](#iqoptionsshorten_iq_namespaces)
   * [7.3 ::plugins::options(reply\_iq\_last)](#pluginsoptionsreply_iq_last)
   * [7.4 ::plugins::ping::options(ping)](#pluginspingoptionsping)
   * [7.5 ::plugins::ping::options(timeout)](#pluginspingoptionstimeout)
   * [7.6 ::plugins::ping::options(pong)](#pluginspingoptionspong)
   * [7.7 ::plugins::options(reply\_iq\_time)](#pluginsoptionsreply_iq_time)
   * [7.8 ::plugins::options(reply\_xmpp\_time)](#pluginsoptionsreply_xmpp_time)
   * [7.9 ::plugins::options(reply\_iq\_version)](#pluginsoptionsreply_iq_version)
   * [7.10 ::plugins::options(reply\_iq\_os\_version)](#pluginsoptionsreply_iq_os_version)
   * [7.11 ::muc::options(report\_muc\_rooms)](#mucoptionsreport_muc_rooms)
 * [7.1 ::iq::options(show\_iq\_requests)](#iqoptionsshow_iq_requests)
 * [7.2 ::iq::options(shorten\_iq\_namespaces)](#iqoptionsshorten_iq_namespaces)
 * [7.3 ::plugins::options(reply\_iq\_last)](#pluginsoptionsreply_iq_last)
 * [7.4 ::plugins::ping::options(ping)](#pluginspingoptionsping)
 * [7.5 ::plugins::ping::options(timeout)](#pluginspingoptionstimeout)
 * [7.6 ::plugins::ping::options(pong)](#pluginspingoptionspong)
 * [7.7 ::plugins::options(reply\_iq\_time)](#pluginsoptionsreply_iq_time)
 * [7.8 ::plugins::options(reply\_xmpp\_time)](#pluginsoptionsreply_xmpp_time)
 * [7.9 ::plugins::options(reply\_iq\_version)](#pluginsoptionsreply_iq_version)
 * [7.10 ::plugins::options(reply\_iq\_os\_version)](#pluginsoptionsreply_iq_os_version)
 * [7.11 ::muc::options(report\_muc\_rooms)](#mucoptionsreport_muc_rooms)
* [8 Login](#Login)
   * [8.1 ::::loginconf(user)](#loginconfuser)
   * [8.2 ::::loginconf(server)](#loginconfserver)
   * [8.3 ::::loginconf(password)](#loginconfpassword)
   * [8.4 ::::loginconf(resource)](#loginconfresource)
   * [8.5 ::::loginconf(priority)](#loginconfpriority)
   * [8.6 ::::loginconf(connect\_forever)](#loginconfconnect_forever)
   * [8.7 ::::loginconf(allowauthplain)](#loginconfallowauthplain)
   * [8.8 ::::loginconf(allowgoogletoken)](#loginconfallowgoogletoken)
   * [8.9 ::::loginconf(usesasl)](#loginconfusesasl)
   * [8.10 ::::loginconf(stream\_options)](#loginconfstream_options)
   * [8.11 ::::loginconf(sslcertfile)](#loginconfsslcertfile)
   * [8.12 ::::loginconf(sslcacertstore)](#loginconfsslcacertstore)
   * [8.13 ::::loginconf(sslkeyfile)](#loginconfsslkeyfile)
   * [8.14 ::::loginconf(proxy)](#loginconfproxy)
   * [8.15 ::::loginconf(proxyhost)](#loginconfproxyhost)
   * [8.16 ::::loginconf(proxyport)](#loginconfproxyport)
   * [8.17 ::::loginconf(proxyusername)](#loginconfproxyusername)
   * [8.18 ::::loginconf(proxypassword)](#loginconfproxypassword)
   * [8.19 ::::loginconf(proxyuseragent)](#loginconfproxyuseragent)
   * [8.20 ::::loginconf(usealtserver)](#loginconfusealtserver)
   * [8.21 ::::loginconf(altserver)](#loginconfaltserver)
   * [8.22 ::::loginconf(altport)](#loginconfaltport)
   * [8.23 ::::loginconf(replace\_opened)](#loginconfreplace_opened)
   * [8.24 ::::loginconf(usehttppoll)](#loginconfusehttppoll)
   * [8.25 ::::loginconf(pollurl)](#loginconfpollurl)
   * [8.26 ::::loginconf(usepollkeys)](#loginconfusepollkeys)
   * [8.27 ::::loginconf(numberofpollkeys)](#loginconfnumberofpollkeys)
   * [8.28 ::::loginconf(polltimeout)](#loginconfpolltimeout)
   * [8.29 ::::loginconf(pollmin)](#loginconfpollmin)
   * [8.30 ::::loginconf(pollmax)](#loginconfpollmax)
 * [8.1 ::::loginconf(user)](#loginconfuser)
 * [8.2 ::::loginconf(server)](#loginconfserver)
 * [8.3 ::::loginconf(password)](#loginconfpassword)
 * [8.4 ::::loginconf(resource)](#loginconfresource)
 * [8.5 ::::loginconf(priority)](#loginconfpriority)
 * [8.6 ::::loginconf(connect\_forever)](#loginconfconnect_forever)
 * [8.7 ::::loginconf(allowauthplain)](#loginconfallowauthplain)
 * [8.8 ::::loginconf(allowgoogletoken)](#loginconfallowgoogletoken)
 * [8.9 ::::loginconf(usesasl)](#loginconfusesasl)
 * [8.10 ::::loginconf(stream\_options)](#loginconfstream_options)
 * [8.11 ::::loginconf(sslcertfile)](#loginconfsslcertfile)
 * [8.12 ::::loginconf(sslcacertstore)](#loginconfsslcacertstore)
 * [8.13 ::::loginconf(sslkeyfile)](#loginconfsslkeyfile)
 * [8.14 ::::loginconf(proxy)](#loginconfproxy)
 * [8.15 ::::loginconf(proxyhost)](#loginconfproxyhost)
 * [8.16 ::::loginconf(proxyport)](#loginconfproxyport)
 * [8.17 ::::loginconf(proxyusername)](#loginconfproxyusername)
 * [8.18 ::::loginconf(proxypassword)](#loginconfproxypassword)
 * [8.19 ::::loginconf(proxyuseragent)](#loginconfproxyuseragent)
 * [8.20 ::::loginconf(usealtserver)](#loginconfusealtserver)
 * [8.21 ::::loginconf(altserver)](#loginconfaltserver)
 * [8.22 ::::loginconf(altport)](#loginconfaltport)
 * [8.23 ::::loginconf(replace\_opened)](#loginconfreplace_opened)
 * [8.24 ::::loginconf(usehttppoll)](#loginconfusehttppoll)
 * [8.25 ::::loginconf(pollurl)](#loginconfpollurl)
 * [8.26 ::::loginconf(usepollkeys)](#loginconfusepollkeys)
 * [8.27 ::::loginconf(numberofpollkeys)](#loginconfnumberofpollkeys)
 * [8.28 ::::loginconf(polltimeout)](#loginconfpolltimeout)
 * [8.29 ::::loginconf(pollmin)](#loginconfpollmin)
 * [8.30 ::::loginconf(pollmax)](#loginconfpollmax)
* [9 Messages](#Messages)
   * [9.1 ::plugins::headlines::options(cache)](#pluginsheadlinesoptionscache)
   * [9.2 ::plugins::headlines::options(multiple)](#pluginsheadlinesoptionsmultiple)
   * [9.3 ::plugins::headlines::options(display\_subject\_only)](#pluginsheadlinesoptionsdisplay_subject_only)
   * [9.4 ::plugins::headlines::options(timestamp\_format)](#pluginsheadlinesoptionstimestamp_format)
   * [9.5 ::plugins::headlines::options(show\_balloons)](#pluginsheadlinesoptionsshow_balloons)
   * [9.6 ::plugins::offline::options(flexible\_retrieval)](#pluginsofflineoptionsflexible_retrieval)
 * [9.1 ::plugins::headlines::options(cache)](#pluginsheadlinesoptionscache)
 * [9.2 ::plugins::headlines::options(multiple)](#pluginsheadlinesoptionsmultiple)
 * [9.3 ::plugins::headlines::options(display\_subject\_only)](#pluginsheadlinesoptionsdisplay_subject_only)
 * [9.4 ::plugins::headlines::options(timestamp\_format)](#pluginsheadlinesoptionstimestamp_format)
 * [9.5 ::plugins::headlines::options(show\_balloons)](#pluginsheadlinesoptionsshow_balloons)
 * [9.6 ::plugins::offline::options(flexible\_retrieval)](#pluginsofflineoptionsflexible_retrieval)
* [10 Plugins](#Plugins)
* [11 Privacy](#Privacy)
   * [11.1 ::filters::options(enable)](#filtersoptionsenable)
   * [11.2 ::privacy::options(activate\_at\_startup)](#privacyoptionsactivate_at_startup)
   * [11.3 MUC Ignoring](#MUC_Ignoring)
      * [11.3.1 ::plugins::mucignore::options(transient\_rules)](#pluginsmucignoreoptionstransient_rules)
 * [11.1 ::filters::options(enable)](#filtersoptionsenable)
 * [11.2 ::privacy::options(activate\_at\_startup)](#privacyoptionsactivate_at_startup)
 * [11.3 MUC Ignoring](#MUC_Ignoring)
  * [11.3.1 ::plugins::mucignore::options(transient\_rules)](#pluginsmucignoreoptionstransient_rules)
* [12 Remote Control](#Remote_Control)
   * [12.1 ::remote::options(enable)](#remoteoptionsenable)
   * [12.2 ::remote::options(accept\_from\_myjid)](#remoteoptionsaccept_from_myjid)
   * [12.3 ::remote::options(accept\_list)](#remoteoptionsaccept_list)
 * [12.1 ::remote::options(enable)](#remoteoptionsenable)
 * [12.2 ::remote::options(accept\_from\_myjid)](#remoteoptionsaccept_from_myjid)
 * [12.3 ::remote::options(accept\_list)](#remoteoptionsaccept_list)
* [13 Roster](#Roster)
   * [13.1 ::ifacetk::roster::use\_aliases](#ifacetkrosteruse_aliases)
   * [13.2 ::ifacetk::roster::show\_only\_online](#ifacetkrostershow_only_online)
   * [13.3 ::ifacetk::roster::show\_transport\_icons](#ifacetkrostershow_transport_icons)
   * [13.4 ::ifacetk::roster::show\_transport\_user\_icons](#ifacetkrostershow_transport_user_icons)
   * [13.5 ::ifacetk::roster::options(nested)](#ifacetkrosteroptionsnested)
   * [13.6 ::ifacetk::roster::options(nested\_delimiter)](#ifacetkrosteroptionsnested_delimiter)
   * [13.7 ::ifacetk::roster::options(show\_own\_resources)](#ifacetkrosteroptionsshow_own_resources)
   * [13.8 ::ifacetk::roster::options(chats\_group)](#ifacetkrosteroptionschats_group)
   * [13.9 ::ifacetk::roster::options(use\_filter)](#ifacetkrosteroptionsuse_filter)
   * [13.10 ::ifacetk::roster::options(match\_jids)](#ifacetkrosteroptionsmatch_jids)
   * [13.11 ::ifacetk::roster::options(free\_drop)](#ifacetkrosteroptionsfree_drop)
   * [13.12 ::ifacetk::roster::options(show\_subscription)](#ifacetkrosteroptionsshow_subscription)
   * [13.13 ::ifacetk::roster::options(show\_conference\_user\_info)](#ifacetkrosteroptionsshow_conference_user_info)
 * [13.1 ::ifacetk::roster::use\_aliases](#ifacetkrosteruse_aliases)
 * [13.2 ::ifacetk::roster::show\_only\_online](#ifacetkrostershow_only_online)
 * [13.3 ::ifacetk::roster::show\_transport\_icons](#ifacetkrostershow_transport_icons)
 * [13.4 ::ifacetk::roster::show\_transport\_user\_icons](#ifacetkrostershow_transport_user_icons)
 * [13.5 ::ifacetk::roster::options(nested)](#ifacetkrosteroptionsnested)
 * [13.6 ::ifacetk::roster::options(nested\_delimiter)](#ifacetkrosteroptionsnested_delimiter)
 * [13.7 ::ifacetk::roster::options(show\_own\_resources)](#ifacetkrosteroptionsshow_own_resources)
 * [13.8 ::ifacetk::roster::options(chats\_group)](#ifacetkrosteroptionschats_group)
 * [13.9 ::ifacetk::roster::options(use\_filter)](#ifacetkrosteroptionsuse_filter)
 * [13.10 ::ifacetk::roster::options(match\_jids)](#ifacetkrosteroptionsmatch_jids)
 * [13.11 ::ifacetk::roster::options(free\_drop)](#ifacetkrosteroptionsfree_drop)
 * [13.12 ::ifacetk::roster::options(show\_subscription)](#ifacetkrosteroptionsshow_subscription)
 * [13.13 ::ifacetk::roster::options(show\_conference\_user\_info)](#ifacetkrosteroptionsshow_conference_user_info)
* [14 Sound](#Sound)
* [15 State](#State)
* [16 Warnings](#Warnings)
   * [16.1 ::tls\_warnings](#tls_warnings)
 * [16.1 ::tls\_warnings](#tls_warnings)

## <a id="AutoAway"></a>AutoAway
Параметры модуля, автоматически устанавливающего состояние "Отошёл" после
# <a id="AutoAway"></a>AutoAway
Параметры модуля, автоматически устанавливающего состояние "Отошёл" после установленного периода бездействия. Для того, чтобы у вас автоэвей работал, необходимо установить [дополнительный пакет](http://tkabber.jabber.ru/dependencies) (кстати говоря, без него и пункт настроек этот не появится). Об установке пакета в Виндовс можно почитать [здесь](Tkabber_Windows_Mini_HOWTO.md#WinIdle). И вот до кучи [дополнительное чтиво](Ткаббер_ЧаВо/Глюки.md#Ткаббер_постоянно_держит_меня_в_состоянии_отошёл_away) о возможных проблемах с AutoAway. 
установленного периода бездействия. Для того, чтобы у вас автоэвей работал,
необходимо установить [дополнительный пакет](http://tkabber.jabber.ru/dependencies) (кстати говоря, без него и пункт
настроек этот не появится). Об установке пакета в Виндовс можно почитать
[**здесь**](Tkabber_Windows_Mini_HOWTO.md#WinIdle). И вот до кучи
[**дополнительное чтиво**](Ткаббер_ЧаВо/Глюки.md#Ткаббер_постоянно_держит_меня_в_состоянии_отошёл_away)
о возможных проблемах с AutoAway.

Имейте в виду, что автоэвей в Ткаббере следит за неактивностью прользователя в
Имейте в виду, что автоэвей в Ткаббере следит за неактивностью прользователя в масштабах системы, а не самого Ткаббера, поэтому если излишек нервных клеток заставил вас запустить Doom 3, перед этим выставьте руками статус "Отошёл" или "Отошёл давно" иначе для остальных вы продолжите оставаться доступным даже будучи на [Фобосе](http://en.wikipedia.org/wiki/Doom_(video_game)). (Справляться со статусами доступности может помочь [этот плагин](Плагины.md#customstatus).) 
масштабах системы, а не самого Ткаббера, поэтому если излишек нервных клеток
заставил вас запустить Doom 3, перед этим выставьте руками статус "Отошёл" или
"Отошёл давно" иначе для остальных вы продолжите оставаться доступным даже
будучи на [Фобосе](http://en.wikipedia.org/wiki/Doom_(video_game)).
(Справляться со статусами доступности может помочь
[**этот плагин**](Плагины.md#Customstatus).)

### <a id="pluginsautoawayoptionsawaytime"></a>::plugins::autoaway::options(awaytime)
## <a id="pluginsautoawayoptionsawaytime"></a>::plugins::autoaway::options(awaytime)

Время, через которое Ткаббер перейдёт в состояние "Отошёл", если не нажимать
Время, через которое Ткаббер перейдёт в состояние "Отошёл", если не нажимать никаких кнопок и не двигать мышью. Значение по умолчанию: 5 минут. 
никаких кнопок и не двигать мышью. Значение по умолчанию: 5 минут.

### <a id="pluginsautoawayoptionsxatime"></a>::plugins::autoaway::options(xatime)
## <a id="pluginsautoawayoptionsxatime"></a>::plugins::autoaway::options(xatime)

То же самое, но для состояния "Отошёл давно". По умолчанию стоит 15 минут.
То же самое, но для состояния "Отошёл давно". По умолчанию стоит 15 минут. 

### <a id="pluginsautoawayoptionsstatus"></a>::plugins::autoaway::options(status)
## <a id="pluginsautoawayoptionsstatus"></a>::plugins::autoaway::options(status)

В этом поле можно дать описание статуса, то есть, причину, по которой Ткаббер
В этом поле можно дать описание статуса, то есть, причину, по которой Ткаббер перешёл в состояние Away. По умолчанию там написано "Автоматически в состоянии 'отошёл' по бездействию", однако вы можете написать что-нибудь своё, не забывая, впрочем, отразить факт **автоматической** смены статуса. 
перешёл в состояние Away. По умолчанию там написано "Автоматически в состоянии
'отошёл' по бездействию", однако вы можете написать что-нибудь своё, не
забывая, впрочем, отразить факт **автоматической** смены статуса.

### <a id="pluginsautoawayoptionsdrop_priority"></a>::plugins::autoaway::options(drop\_priority)
## <a id="pluginsautoawayoptionsdrop_priority"></a>::plugins::autoaway::options(drop\_priority)

По умолчанию галочка отмечена, и действие её — сбрасывать приоритет в 0 при
По умолчанию галочка отмечена, и действие её — сбрасывать приоритет в 0 при достижении состояния "Отошёл давно". Что такое приоритет, [читайте отдельно](Ткаббер_ЧаВо/Разное.md#Приоритет). 
достижении состояния "Отошёл давно". Что такое приоритет,
[**читайте отдельно**](Ткаббер_ЧаВо/Разное.md#Приоритет).

## <a id="Chat"></a>Chat
Параметры разговора.
# <a id="Chat"></a>Chat
Параметры разговора. 

### <a id="chatoptionsstop_scroll"></a>::chat::options(stop\_scroll)

Эта опция в настройках идёт второй, но здесь мы опишем её раньше, чтобы вам
было понятней, что к чему. По умолчанию она выключена, и это правильно: если её
включить, то при получении новых сообщений в чат окошко скроллиться не будет, и
вам придётся прокручивать его вручную (с помощью полосы прокрутки или колесом
мыши), чтобы следить за разговором.

## <a id="chatoptionsstop_scroll"></a>::chat::options(stop\_scroll)

Эта опция в настройках идёт второй, но здесь мы опишем её раньше, чтобы вам было понятней, что к чему. По умолчанию она выключена, и это правильно: если её включить, то при получении новых сообщений в чат окошко скроллиться не будет, и вам придётся прокручивать его вручную (с помощью полосы прокрутки или колесом мыши), чтобы следить за разговором. 

### <a id="chatoptionssmart_scroll"></a>::chat::options(smart\_scroll)
## <a id="chatoptionssmart_scroll"></a>::chat::options(smart\_scroll)

Если автопрокрутка у нас включена, имеет смысл улучшить её поведение. Умная
Если автопрокрутка у нас включена, имеет смысл улучшить её поведение. Умная прокрутка следит, где вы в данный момент читаете сообщения разговора: если вы выдите самое последнее сообщение, то приход нового сообщения сдвинет уже имеющиеся в окне вверх (сработает прокрутка) и вы увидите это новое сообщение, если же вы читаете ход дискуссии где-то в её середине и не видите последнего сообщения, то поступление нового ничего прокручивать не будет, не отрывая вас от созерцания интересной вам части излитого потока сознания. 
прокрутка следит, где вы в данный момент читаете сообщения разговора: если вы
выдите самое последнее сообщение, то приход нового сообщения сдвинет уже
имеющиеся в окне вверх (сработает прокрутка) и вы увидите это новое сообщение,
если же вы читаете ход дискуссии где-то в её середине и не видите последнего
сообщения, то поступление нового ничего прокручивать не будет, не отрывая вас
от созерцания интересной вам части излитого потока сознания.

### <a id="chatoptionsdisplay_status_description"></a>::chat::options(display\_status\_description)
## <a id="chatoptionsdisplay_status_description"></a>::chat::options(display\_status\_description)

Если эта опция включена, то при открытии окна разговора (с человеком из ростера
Если эта опция включена, то при открытии окна разговора (с человеком из ростера или приват в конференции) в верхней части, над окном слева рядом с иконкой, показывающей состояние собеседника ("Отошёл", "Доступен" и т. д.), пишется и детальное описание этого состояния, то есть сами слова "Отошёл", "Доступен" и прочие. Кстати, если навести мышь на иконку или на эту надпись, то в тултипе можно прочитать описание, которое пользователь ввёл либо в настройках автоэвея, либо в поле описания рядом с кнопкой принудительной смены состояния в нижней части ростера. 
или приват в конференции) в верхней части, над окном слева рядом с иконкой,
показывающей состояние собеседника ("Отошёл", "Доступен" и т. д.), пишется и
детальное описание этого состояния, то есть сами слова "Отошёл", "Доступен" и
прочие. Кстати, если навести мышь на иконку или на эту надпись, то в тултипе
можно прочитать описание, которое пользователь ввёл либо в настройках автоэвея,
либо в поле описания рядом с кнопкой принудительной смены состояния в нижней
части ростера.

### <a id="chatoptionsdefault_message_type"></a>::chat::options(default\_message\_type)
## <a id="chatoptionsdefault_message_type"></a>::chat::options(default\_message\_type)

По умолчанию стоит "Разговор". Это означает, что при двойном клике на контакте
По умолчанию стоит "Разговор". Это означает, что при двойном клике на контакте из ростера у вас запустится окно разговора в виде нового таба (или же нового окна разговора, если у вас отключён режим с табами). Если же включить опцию "Обычное", то при двойном клике запускается окно отправки сообщения, которое пропадёт после его отправки. Окно разговора при отправке сообщения не закрывается. 
из ростера у вас запустится окно разговора в виде нового таба (или же нового
окна разговора, если у вас отключён режим с табами). Если же включить опцию
"Обычное", то при двойном клике запускается окно отправки сообщения, которое
пропадёт после его отправки. Окно разговора при отправке сообщения не
закрывается.

### <a id="chatoptionsgen_status_change_msgs"></a>::chat::options(gen\_status\_change\_msgs)
## <a id="chatoptionsgen_status_change_msgs"></a>::chat::options(gen\_status\_change\_msgs)

Значение по умолчанию — включено, что означает "Генерировать сообщения о том,
Значение по умолчанию — включено, что означает "Генерировать сообщения о том, что собеседник сменил своё присутствие или статусное сообщение". Сообщения о смене статуса появляются в самом окне или табе разговора (не путайте с окном конференции): "[Чтв. Апрель 17 22:19]--- bigote свободен для разговора (Свободен для разговора)". Эта опция может быть полезной для мягкого шпионажа за вашими собеседниками. 
что собеседник сменил своё присутствие или статусное сообщение". Сообщения о
смене статуса появляются в самом окне или табе разговора (не путайте с окном
конференции): "[Чтв. Апрель 17 22:19]--- bigote свободен для разговора
(Свободен для разговора)". Эта опция может быть полезной для мягкого шпионажа
за вашими собеседниками.

### <a id="pluginscompletionoptionscompletion_expire"></a>::plugins::completion::options(completion\_expire)
## <a id="pluginscompletionoptionscompletion_expire"></a>::plugins::completion::options(completion\_expire)

Число сообщений, необходимое для того, чтобы отключить автодополнение
псевдонима автора последнего сообщения, адресованного персонально. По умолчанию
Число сообщений, необходимое для того, чтобы отключить автодополнение псевдонима автора последнего сообщения, адресованного персонально. По умолчанию стоит 10. Сейчас расшифруем, что это означает. В Ткаббере можно слать персональные сообщения в общем чате. Для этого надо либо ткнуть в ник человека мышью, либо набрать первые символы его ника и нажать табуляцию. При этом в окне ввода сообщения появится его ник, отделённый от последующего текста двоеточием и пробелом. Теперь пишите свой текст, жмите ввод, и этот человек увидит свой ник в этом сообщении подсвеченным и, если включен звук и настроено уведомление о персональных сообщениях, то услышит, что кто-то персонально к нему обратился. Этот человек теперь может легко ответить так же персонально и вам, просто нажав табуляцию: при этом ваш ник окажется в его окошке ввода текста, и история повторится. Так вот. Если он сразу не воспользуется этой возможностью, то после прихода в чат 10 сообщений и больше нажатие табуляции выведет уже первую доступную по алфавиту команду Ткаббера или социал. 
стоит 10. Сейчас расшифруем, что это означает. В Ткаббере можно слать
персональные сообщения в общем чате. Для этого надо либо ткнуть в ник человека
мышью, либо набрать первые символы его ника и нажать табуляцию. При этом в окне
ввода сообщения появится его ник, отделённый от последующего текста двоеточием
и пробелом. Теперь пишите свой текст, жмите ввод, и этот человек увидит свой
ник в этом сообщении подсвеченным и, если включен звук и настроено уведомление
о персональных сообщениях, то услышит, что кто-то персонально к нему обратился.
Этот человек теперь может легко ответить так же персонально и вам, просто нажав
табуляцию: при этом ваш ник окажется в его окошке ввода текста, и история
повторится. Так вот. Если он сразу не воспользуется этой возможностью, то после
прихода в чат 10 сообщений и больше нажатие табуляции выведет уже первую
доступную по алфавиту команду Ткаббера или социал.

### <a id="pluginsoptionstimestamp_format"></a>::plugins::options(timestamp\_format)
## <a id="pluginsoptionstimestamp_format"></a>::plugins::options(timestamp\_format)

Формат вывода даты/времени в сообщениях. (Подробнее описание формата можно
узнать из документации к команде Tcl 'clock'.) Значение по умолчанию — [%R],
что означает лишь часы и минуты. Это мало. В конференциях можно сидеть днями, и
тогда бывает необходимо знать, какого числа (а то и месяца) была сказана та или
иная фраза. Если не хотите читать документацию к команде 'clock', можете
Формат вывода даты/времени в сообщениях. (Подробнее описание формата можно узнать из документации к команде Tcl 'clock'.) Значение по умолчанию — [%R], что означает лишь часы и минуты. Это мало. В конференциях можно сидеть днями, и тогда бывает необходимо знать, какого числа (а то и месяца) была сказана та или иная фраза. Если не хотите читать документацию к команде 'clock', можете воспользоваться либо примерами, приведёнными рядом с опцией, либо моим выбором: [%a %b %d %H:%M]. 

## <a id="pluginsoptionsdelayed_timestamp_format"></a>::plugins::options(delayed\_timestamp\_format)

Формат "отложенных" сообщений, то есть отправленных более суток назад. Это те сообщения, которые ваши приятели шлют вам, когда вы долго не появляетесь в онлайне, и они начинают волноваться, жмакать кнопку "Показать пользователей в оффлайне" и интересоваться причинами вашего отсутствия. Значение по умолчанию — [%m/%d %R]. Обычно его хватает. 

## <a id="pluginsxhtmloptionsenable"></a>::plugins::xhtml::options(enable)

воспользоваться либо примерами, приведёнными рядом с опцией, либо моим выбором:
[%a %b %d %H:%M].
Отображать сообщения, форматированные с помощью XHTML, то есть такие, при составлении которых использовались выделения кусков текста цветами, шрифтами и размерами символов (что поддерживается некоторыми клиентами). По умолчанию отключено, потому что эта опция нужна очень редко, и только тем очень смелым людям, кто знает или хочет узнать, что такое XHTML, отрендеренный Ткаббером. Для повседневной работы она не нужна, поскольку XHTML сообщение всегда содержит "неисковерканую" копию себя, содержащую просто текст сообщения, который и покажет Ткаббер, если опция отключена. 

### <a id="pluginsoptionsdelayed_timestamp_format"></a>::plugins::options(delayed\_timestamp\_format)
## <a id="pluginslog_on_openoptionsmax_messages"></a>::plugins::log\_on\_open::options(max\_messages)

Формат "отложенных" сообщений, то есть отправленных более суток назад. Это те
сообщения, которые ваши приятели шлют вам, когда вы долго не появляетесь в
онлайне, и они начинают волноваться, жмакать кнопку "Показать пользователей в
оффлайне" и интересоваться причинами вашего отсутствия. Значение по умолчанию —
[%m/%d %R]. Обычно его хватает.
Максимальное число запротоколированных сообщений, которое надо показывать во вновь открываемом окне разговора (если положить отрицательным, то неограниченное). По умолчанию стоит 20. Когда мы открываем окно разговора с каким-либо из своих контактов, в окне появляется кусок предыдущей с ним беседы, что весьма полезно, если эта предыдущая беседа состоялась месяц назад, и с того момента собеседник вдруг ответил на вашу последнюю реплику. Если вы не помните, о чём был разговор, трудно бывает врубиться, с какого перепугу он вам пишет эту муть. 

## <a id="pluginslog_on_openoptionsmax_interval"></a>::plugins::log\_on\_open::options(max\_interval)

Максимальный интервал (в часах) для которого запротоколированные сообщения надо показывать во вновь открываемом окне разговора (если положить отрицательным, то неограниченный интервал). По умолчанию стоит 24 часа, что для описанного выше случая с разрывом в один месяц явно не подходит. Надо поставить отрицательное значение. 

### <a id="pluginsxhtmloptionsenable"></a>::plugins::xhtml::options(enable)
## <a id="pluginsnickcolorsoptionsuse_colored_nicks"></a>::plugins::nickcolors::options(use\_colored\_nicks)

Отображать сообщения, форматированные с помощью XHTML, то есть такие, при
составлении которых использовались выделения кусков текста цветами, шрифтами и
Использовать цветные псевдонимы в окнах разговоров/конференций. 
размерами символов (что поддерживается некоторыми клиентами). По умолчанию
отключено, потому что эта опция нужна очень редко, и только тем очень смелым
людям, кто знает или хочет узнать, что такое XHTML, отрендеренный Ткаббером.
Для повседневной работы она не нужна, поскольку XHTML сообщение всегда содержит
"неисковерканую" копию себя, содержащую просто текст сообщения, который и
покажет Ткаббер, если опция отключена.

### <a id="pluginslog_on_openoptionsmax_messages"></a>::plugins::log\_on\_open::options(max\_messages)
## <a id="pluginsnickcolorsoptionsuse_colored_roster_nicks"></a>::plugins::nickcolors::options(use\_colored\_roster\_nicks)

Максимальное число запротоколированных сообщений, которое надо показывать во
Использовать цветные псевдонимы в списках участников конференций. 
вновь открываемом окне разговора (если положить отрицательным, то
неограниченное). По умолчанию стоит 20. Когда мы открываем окно разговора с
каким-либо из своих контактов, в окне появляется кусок предыдущей с ним беседы,
что весьма полезно, если эта предыдущая беседа состоялась месяц назад, и с того
момента собеседник вдруг ответил на вашу последнюю реплику. Если вы не помните,
о чём был разговор, трудно бывает врубиться, с какого перепугу он вам пишет эту
муть.

### <a id="pluginslog_on_openoptionsmax_interval"></a>::plugins::log\_on\_open::options(max\_interval)
## <a id="pluginsnickcolorsoptionsuse_colored_messages"></a>::plugins::nickcolors::options(use\_colored\_messages)

Максимальный интервал (в часах) для которого запротоколированные сообщения надо
Использовать цветные сообщения в окнах разговора. Эта и предыдущие две опции отвечает за раскрашивание ников собеседников и их сообщений. Эти опции из разряда тех, которые проще попробовать, чем читать о них или рассказывать. Так что оставляем вас наедине с ними ;) И вот до кучи [информация о возможных проблемах](Ткаббер_ЧаВо/Внешний_вид_и_звук.md#Цвета_сообщений_асечников), связанных с цветами. 
показывать во вновь открываемом окне разговора (если положить отрицательным, то
неограниченный интервал). По умолчанию стоит 24 часа, что для описанного выше
случая с разрывом в один месяц явно не подходит. Надо поставить отрицательное
значение.

### <a id="pluginsnickcolorsoptionsuse_colored_nicks"></a>::plugins::nickcolors::options(use\_colored\_nicks)
## <a id="mucoptionsgen_enter_exit_msgs"></a>::muc::options(gen\_enter\_exit\_msgs)

Генерировать статусные сообщения о входе/выходе участников в MUC-конференциях. Выше описывалась опция генерации сообщений о смене статуса собеседника. Она похожа на эту, только здесь генерируются сообщения вида "bigote вышел(а) из комнаты: Disconnected", которые показываются в общем чате (другие названия: конференция, MUC). По умолчанию стоит, и правильно делает, что стоит. Так мы знаем, кто и во сколько заходил в конфу и покидал её. 
Использовать цветные псевдонимы в окнах разговоров/конференций.

## <a id="mucoptionsgen_muc_status_change_msgs"></a>::muc::options(gen\_muc\_status\_change\_msgs)

### <a id="pluginsnickcolorsoptionsuse_colored_roster_nicks"></a>::plugins::nickcolors::options(use\_colored\_roster\_nicks)
А это — близнец описанной гораздо выше и упомянутой чуть выше опции про генерацию смены статусов. На этот раз — в MUC (Multi-User Conference). 

Использовать цветные псевдонимы в списках участников конференций.
## <a id="mucoptionsgen_muc_position_change_msgs"></a>::muc::options(gen\_muc\_position\_change\_msgs)

### <a id="pluginsnickcolorsoptionsuse_colored_messages"></a>::plugins::nickcolors::options(use\_colored\_messages)
Генерировать сообщения о том, что положение, занимаемое участником конференции (его ранг и/или роль), изменились. Ещё одна шпионская опция. Эта и предыдущая опции по умолчанию выключены, потому что надоедают больше, чем приносят пользы. 

Использовать цветные сообщения в окнах разговора. Эта и предыдущие две опции
отвечает за раскрашивание ников собеседников и их сообщений. Эти опции из
разряда тех, которые проще попробовать, чем читать о них или рассказывать. Так
## <a id="mucoptionspropose_configure"></a>::muc::options(propose\_configure)

Предлагать конфигурировать вновь созданную конференцию. Если установить в false, то автоматически принимается конфигурация по умолчанию. Как ясно из описания опции, она про конфигурацию созданных вами конференций. Поскольку по умолчанию она выключена, не забывайте при создании новой комнаты зайти в её меню (кнопка "Тема" в верхней части окна, которая выглядит совсем не кнопкой) и настроить её (**MUC → Конфигурировать комнату**). 
что оставляем вас наедине с ними ;) И вот до кучи
[**информация о возможных проблемах**](Ткаббер_ЧаВо/Внешний_вид_и_звук.md#Цвета_сообщений_асечников),
связанных с цветами.

### <a id="mucoptionsgen_enter_exit_msgs"></a>::muc::options(gen\_enter\_exit\_msgs)
## <a id="mucoptionshistory_maxchars"></a>::muc::options(history\_maxchars)

Генерировать статусные сообщения о входе/выходе участников в MUC-конференциях.
Выше описывалась опция генерации сообщений о смене статуса собеседника. Она
похожа на эту, только здесь генерируются сообщения вида "bigote вышел(а) из
комнаты: Disconnected", которые показываются в общем чате (другие названия:
конференция, MUC). По умолчанию стоит, и правильно делает, что стоит. Так мы
знаем, кто и во сколько заходил в конфу и покидал её.
Максимальное число символов в запрашиваемой истории конференции, совместимой с MUC. По умолчанию 10000. Это напоминает описанную выше опцию про вывод старых разговоров в свежеоткрытом окне. Отличие состоит в том, что тут история выводится даже в том случае, если вы зашли в комнату впервые в жизни. Это делается для того, чтобы вы были в курсе, о чём идёт беседа. Если история вам мешает, вы её можете либо ограничить, либо отключить, вписав 0. 

Важно понимать, что эта и следующие две опции управляют получением истории _с сервера,_ в то время как опции группы `::plugins::log_on_open::options` ведают выемкой сообщений из локальной истории разговоров, которую ведёт Ткаббер. 

### <a id="mucoptionsgen_muc_status_change_msgs"></a>::muc::options(gen\_muc\_status\_change\_msgs)
## <a id="mucoptionshistory_maxstanzas"></a>::muc::options(history\_maxstanzas)

А это — близнец описанной гораздо выше и упомянутой чуть выше опции про
генерацию смены статусов. На этот раз — в MUC (Multi-User Conference).
То же самое, что и предыдущая опция, но уже не про количество символов, а про количество строк в истории. Если быть точным, то речь идёт не о строках как таковых, а о ["станцах"](Терминология.md#Станца_stanza), то есть отправленных в конференцию сообщениях. Так, одно сообщение может содержать несколько строк, но считаться будет всего одна станца. По умолчанию (и кажется, по максимуму тоже) 20. 

### <a id="mucoptionsgen_muc_position_change_msgs"></a>::muc::options(gen\_muc\_position\_change\_msgs)
## <a id="mucoptionsrequest_only_unseen_history"></a>::muc::options(request\_only\_unseen\_history)

Генерировать сообщения о том, что положение, занимаемое участником конференции
Запрашивать только те сообщения из истории, которые не показаны в уже открытом окне (для конференции, совместимой с MUC). Это на случай кратковременного дисконнекта. Допустим, вы брыкнули ногой и выдернули сетевой кабель, однако вовремя спохватились и быстро воткнули его обратно. Однако часть разговора прошла без вас. Спасибо предыдущим двум опциям, она не потерялась, и сервер заботливо её вам вывел. Но тут вот и фишка данной опции: если история "перехлёстывается" с содержимым открытого окна чата, то вам в окно выведутся только те фразы, которые прозвучали, когда вас реально не было, а не все 20 строчек и 10000 символов, прибитые гвоздями предыдущими опциями. 
(его ранг и/или роль), изменились. Ещё одна шпионская опция. Эта и предыдущая
опции по умолчанию выключены, потому что надоедают больше, чем приносят пользы.

### <a id="mucoptionspropose_configure"></a>::muc::options(propose\_configure)
## <a id="pluginstclchatoptionsuse_tkchat_colors"></a>::plugins::tclchat::options(use\_tkchat\_colors)

Предлагать конфигурировать вновь созданную конференцию. Если установить в
false, то автоматически принимается конфигурация по умолчанию. Как ясно из
описания опции, она про конфигурацию созданных вами конференций. Поскольку по
умолчанию она выключена, не забывайте при создании новой комнаты зайти в её
меню (кнопка "Тема" в верхней части окна, которая выглядит совсем не кнопкой) и
настроить её (**MUC → Конфигурировать комнату**).

Использовать встроенные цвета TkChat. Это не вам, дорогие начинающие пользователи. Это вот [им](http://wiki.tcl.tk/tkchat). 
### <a id="mucoptionshistory_maxchars"></a>::muc::options(history\_maxchars)

Максимальное число символов в запрашиваемой истории конференции, совместимой с
MUC. По умолчанию 10000. Это напоминает описанную выше опцию про вывод старых
разговоров в свежеоткрытом окне. Отличие состоит в том, что тут история
выводится даже в том случае, если вы зашли в комнату впервые в жизни. Это
делается для того, чтобы вы были в курсе, о чём идёт беседа. Если история вам
мешает, вы её можете либо ограничить, либо отключить, вписав 0.

---
Важно понимать, что эта и следующие две опции управляют получением истории _с
сервера,_ в то время как опции группы `::plugins::log_on_open::options` ведают
выемкой сообщений из локальной истории разговоров, которую ведёт Ткаббер.

### <a id="mucoptionshistory_maxstanzas"></a>::muc::options(history\_maxstanzas)

Далее идут кнопки некоторых как встроенных, так и внешних плагинов, расширяющих функциональность Ткаббера. Кнопки внешних плагинов на самом деле расположены в своём месте (см. раздел Plugins данной статьи), но для удобства конфигурации настройки плагинов, относящихся к чату, выведены и сюда. Ниже я постараюсь вспомнить, какие из тех кнопок, которые я вижу у себя, относятся к встроенным плагинам. 
То же самое, что и предыдущая опция, но уже не про количество символов, а про
количество строк в истории. Если быть точным, то речь идёт не о строках как
таковых, а о [**"станцах"**](Терминология.md#Станца_stanza), то есть отправленных в
конференцию сообщениях. Так, одно сообщение может содержать несколько строк, но
считаться будет всего одна станца. По умолчанию (и кажется, по максимуму тоже)
20.

### <a id="mucoptionsrequest_only_unseen_history"></a>::muc::options(request\_only\_unseen\_history)

## <a id="Chatstate"></a>Chatstate
Запрашивать только те сообщения из истории, которые не показаны в уже открытом
окне (для конференции, совместимой с MUC). Это на случай кратковременного
дисконнекта. Допустим, вы брыкнули ногой и выдернули сетевой кабель, однако
вовремя спохватились и быстро воткнули его обратно. Однако часть разговора
прошла без вас. Спасибо предыдущим двум опциям, она не потерялась, и сервер
заботливо её вам вывел. Но тут вот и фишка данной опции: если история
"перехлёстывается" с содержимым открытого окна чата, то вам в окно выведутся
только те фразы, которые прозвучали, когда вас реально не было, а не все 20
строчек и 10000 символов, прибитые гвоздями предыдущими опциями.

### <a id="pluginstclchatoptionsuse_tkchat_colors"></a>::plugins::tclchat::options(use\_tkchat\_colors)

Использовать встроенные цвета TkChat. Это не вам, дорогие начинающие
пользователи. Это вот [им](http://wiki.tcl.tk/tkchat).

---

Далее идут кнопки некоторых как встроенных, так и внешних плагинов, расширяющих
функциональность Ткаббера. Кнопки внешних плагинов на самом деле расположены в
своём месте (см. раздел Plugins данной статьи), но для удобства конфигурации
настройки плагинов, относящихся к чату, выведены и сюда. Ниже я постараюсь
вспомнить, какие из тех кнопок, которые я вижу у себя, относятся к встроенным
плагинам.

### <a id="Chatstate"></a>Chatstate

Настройки расширения, отвечающего за уведомление о состоянии окна разговора.
Настройки расширения, отвечающего за уведомление о состоянии окна разговора. 

#### <a id="pluginschatstateoptionsenable"></a>::plugins::chatstate::options(enable)
### <a id="pluginschatstateoptionsenable"></a>::plugins::chatstate::options(enable)

Включить рассылку уведомлений о состоянии окна разговора
Включить рассылку уведомлений о состоянии окна разговора ([XEP-0085](http://www.xmpp.org/extensions/xep-0085.html)). Если вы включите эту опцию, то будете получать уведомления типа "собеседник пишет письмо турецкому султану" в верхней части окна. Таким образом вы знаете, что он не балду гоняет, не игнорит вас, а честно пишет ответ. Полезная опция. 
([XEP-0085](http://www.xmpp.org/extensions/xep-0085.html)). Если вы включите
эту опцию, то будете получать уведомления типа "собеседник пишет письмо
турецкому султану" в верхней части окна. Таким образом вы знаете, что он не
балду гоняет, не игнорит вас, а честно пишет ответ. Полезная опция.

В настоящее время Ткаббер способен посылать только два состояния: `<active/>` и
В настоящее время Ткаббер способен посылать только два состояния: `<active/>` и `<composing/>` (на что уже пожаловались [тут](http://www.jabber.ru/bugzilla/show_bug.cgi?id=360)), однако понимает он все состояния. 
`<composing/>` (на что уже пожаловались
[тут](http://www.jabber.ru/bugzilla/show_bug.cgi?id=360)), однако понимает он
все состояния.

Имейте в виду, что в Ткаббере есть
Имейте в виду, что в Ткаббере есть [аналогичная настройка](Настройки.md#Events), управляющая _другим механизмом_ реализации той же самой, в принципе, функциональности, но на основе устаревшего в настоящее время [расширения XMPP](http://www.xmpp.org/extensions/xep-0022.html). 
[**аналогичная настройка**](#Events), управляющая _другим механизмом_ реализации той
же самой, в принципе, функциональности, но на основе устаревшего в настоящее
время [расширения XMPP](http://www.xmpp.org/extensions/xep-0022.html).

### <a id="Emoticons"></a>Emoticons
## <a id="Emoticons"></a>Emoticons

Обработка эмоциконок. Эмоциконки (или улыбки) это небольшие картинки, похожие
Обработка эмоциконок. Эмоциконки (или улыбки) это небольшие картинки, похожие на человеческое лицо, используемые для отображения эмоций. Могут быть введены мнемонически, например как :), или вставлены через меню. 
на человеческое лицо, используемые для отображения эмоций. Могут быть введены
мнемонически, например как :), или вставлены через меню.

#### <a id="pluginsemoticonsoptionsshow_emoticons"></a>::plugins::emoticons::options(show\_emoticons)
### <a id="pluginsemoticonsoptionsshow_emoticons"></a>::plugins::emoticons::options(show\_emoticons)

Показывать эмоциконки в виде картинок.
Показывать эмоциконки в виде картинок. 

#### <a id="pluginsemoticonsoptionstheme"></a>::plugins::emoticons::options(theme)
### <a id="pluginsemoticonsoptionstheme"></a>::plugins::emoticons::options(theme)

Если в каталоге для эмоциконок у вас есть несколько установленных наборов
Если в каталоге для эмоциконок у вас есть несколько установленных наборов (подробнее читать тут), то в настройках появляется возможность выбрать один из этих наборов либо отключить показ картиночных смайликов. 
(подробнее читать тут), то в настройках появляется возможность выбрать один из
этих наборов либо отключить показ картиночных смайликов.

#### <a id="pluginsemoticonsoptionsmatch_whole_word"></a>::plugins::emoticons::options(match\_whole\_word)
### <a id="pluginsemoticonsoptionsmatch_whole_word"></a>::plugins::emoticons::options(match\_whole\_word)

Только целые слова превращать в эмоциконки (не части слов). Этот параметр
Только целые слова превращать в эмоциконки (не части слов). Этот параметр установлен по умолчанию, а отвечает он за то, чтобы в картинку преобразовывался лишь полноценный смайлик, не прижатый к впереди идущему слову. 
установлен по умолчанию, а отвечает он за то, чтобы в картинку преобразовывался
лишь полноценный смайлик, не прижатый к впереди идущему слову.

#### <a id="pluginsemoticonsoptionshandle_lol"></a>::plugins::emoticons::options(handle\_lol)
### <a id="pluginsemoticonsoptionshandle_lol"></a>::plugins::emoticons::options(handle\_lol)

Отдельные очень улыбчивые личности любят писать в чатах смайлики с двойными, а
Отдельные очень улыбчивые личности любят писать в чатах смайлики с двойными, а то и тройными подбородками — :)))))) Эта опция приводит такие улыбки к нормальному виду и потом преобразует в нормальный графический смайл. 
то и тройными подбородками — :)))))) Эта опция приводит такие улыбки к
нормальному виду и потом преобразует в нормальный графический смайл.

### <a id="Events"></a>Events
## <a id="Events"></a>Events

Настройки расширения, отвечающего за уведомление об обработке сообщений в окне разговора. 

Настройки расширения, отвечающего за уведомление об обработке сообщений в окне
разговора.

#### <a id="pluginseventsoptionsenable"></a>::plugins::events::options(enable)
### <a id="pluginseventsoptionsenable"></a>::plugins::events::options(enable)

Реализация устаревшего в настоящее время
Реализация устаревшего в настоящее время [XEP-0022](http://www.xmpp.org/extensions/xep-0022.html), которое было замещено другим механизмом, который управляется [соответствующей группой настроек](Настройки.md#Chatstate). 
[XEP-0022](http://www.xmpp.org/extensions/xep-0022.html), которое было замещено
другим механизмом, который управляется [**соответствующей группой настроек**](#Chatstate).

Эту опцию имеет смысл держать включённой только если вы общаетесь с владельцами
Эту опцию имеет смысл держать включённой только если вы общаетесь с владельцами дремучих клиентов. 
дремучих клиентов.

![(!)](../images/Hammer.png) **Сделать:** хорошо бы выяснить что гейтуют и что
![(!)](../images/Hammer.png) **Сделать:** хорошо бы выяснить что гейтуют и что не гейтуют из этого распространённые ICQ-гейты 
не гейтуют из этого распространённые ICQ-гейты

По умолчанию включена.
По умолчанию включена. 

### <a id="Highlight"></a>Highlight
## <a id="Highlight"></a>Highlight

Настройки модуля выделения слов в сообщениях конференций.
Настройки модуля выделения слов в сообщениях конференций. 

#### <a id="pluginshighlightoptionsenable_highlighting"></a>::plugins::highlight::options(enable\_highlighting)
### <a id="pluginshighlightoptionsenable_highlighting"></a>::plugins::highlight::options(enable\_highlighting)

Включить модуль выделения слов. По умолчанию включён. 

### <a id="pluginshighlightoptionshighlight_nick"></a>::plugins::highlight::options(highlight\_nick)

Включить модуль выделения слов. По умолчанию включён.

#### <a id="pluginshighlightoptionshighlight_nick"></a>::plugins::highlight::options(highlight\_nick)

Выделять текущий псевдоним в сообщениях. Выше я рассказал про автодополнение
Выделять текущий псевдоним в сообщениях. Выше я рассказал про автодополнение ников, опция ::plugins::completion::options(completion\_expire). Там приводил пример о подсвечивании собственного ника, если кто-то его в чате пишет (например, обращаясь ко мне). Вот здесь оно и настраивается, то бишь, это подсвечивание можно и выключить. 
ников, опция ::plugins::completion::options(completion\_expire). Там приводил
пример о подсвечивании собственного ника, если кто-то его в чате пишет
(например, обращаясь ко мне). Вот здесь оно и настраивается, то бишь, это
подсвечивание можно и выключить.

#### <a id="pluginshighlightoptionshighlight_substrings"></a>::plugins::highlight::options(highlight\_substrings)
### <a id="pluginshighlightoptionshighlight_substrings"></a>::plugins::highlight::options(highlight\_substrings)

Подстроки, которые следует выделять в сообщениях. Ещё один полушпионский
модуль, позволяет подсвечивать ключевые слова, указанные в поле. Разделителем
является пробел, регистр надо учитывать. Введём для примера три слова,
разделённых пробелами: **вот такой тест**. Теперь любое из этих слов,
появившись в окне чата, будет подсвечено. Если попытаться подсвечивать не
отдельные слова, а подстроку, содержащую пробелы (несколько слов), то возникают
проблемы. Допустим, мы пытаемся указать Ткабберу, что подстрока ограничена
кавычками (как для точного поиска в Гугле): **"вот такой тест"**. Теперь пишем
Подстроки, которые следует выделять в сообщениях. Ещё один полушпионский модуль, позволяет подсвечивать ключевые слова, указанные в поле. Разделителем является пробел, регистр надо учитывать. Введём для примера три слова, разделённых пробелами: **вот такой тест**. Теперь любое из этих слов, появившись в окне чата, будет подсвечено. Если попытаться подсвечивать не отдельные слова, а подстроку, содержащую пробелы (несколько слов), то возникают проблемы. Допустим, мы пытаемся указать Ткабберу, что подстрока ограничена кавычками (как для точного поиска в Гугле): **"вот такой тест"**. Теперь пишем в чате одно из этих слов — не подсвечивает. Пишем строку целиком, но без кавычек: **вот такой тест** — не подсвечивает. Пишем строку с кавычками: **"вот такой тест"** — подсвечивает. 

### <a id="pluginshighlightoptionshighlight_whole_words"></a>::plugins::highlight::options(highlight\_whole\_words)

Выделять только целые слова. Если выключить эту опцию (а по умолчанию она включена), то подсвечиваться будут как целые слова, так и части слов, подпадающие под заданные вами паттерны. Например, продолжая начатый выше пример, напишем в чате слово "живот", имея в качестве ключевых слов **вот такой тест**. При включённой опции ничего не выделится, но если её отключить, то получим "жи**вот**" (кавычки здесь написаны лишь для отделения слова-примера от повествования). 

## <a id="Logging"></a>Logging

Параметры протоколирования. 

### <a id="loggeroptionslogdir"></a>::logger::options(logdir)

Директория, в которой сохраняются протоколы. Надо указать что-нибудь осмысленное. 

в чате одно из этих слов — не подсвечивает. Пишем строку целиком, но без
кавычек: **вот такой тест** — не подсвечивает. Пишем строку с кавычками: **"вот
такой тест"** — подсвечивает.
### <a id="loggeroptionslog_chat"></a>::logger::options(log\_chat)

Сохранять протоколы персональных разговоров. По умолчанию включено. 

#### <a id="pluginshighlightoptionshighlight_whole_words"></a>::plugins::highlight::options(highlight\_whole\_words)
### <a id="loggeroptionslog_groupchat"></a>::logger::options(log\_groupchat)

Выделять только целые слова. Если выключить эту опцию (а по умолчанию она
Сохранять протоколы конференций.  По умолчанию включено. 
включена), то подсвечиваться будут как целые слова, так и части слов,
подпадающие под заданные вами паттерны. Например, продолжая начатый выше
пример, напишем в чате слово "живот", имея в качестве ключевых слов **вот такой
тест**. При включённой опции ничего не выделится, но если её отключить, то
получим "жи**вот**" (кавычки здесь написаны лишь для отделения слова-примера от
повествования).

### <a id="Logging"></a>Logging
## <a id="MUC_Ignoring"></a>MUC Ignoring

Параметры протоколирования.
Игнорирование групповых и приватных сообщений от выбранных посетителей многопользовательской конференции. 

#### <a id="loggeroptionslogdir"></a>::logger::options(logdir)
### <a id="pluginsmucignoreoptionstransient_rules"></a>::plugins::mucignore::options(transient\_rules)

Директория, в которой сохраняются протоколы. Надо указать что-нибудь
осмысленное.
Если параметр установлен, то все изменения правил игнорирования будут действовать только до того, как Ткаббер закроется, и не будут восстановлены при следующем запуске. По умолчанию выключено, то есть, правила сохраняются. [Читать подробнее об игнорировании в конференциях](MUC_Ignore.md). 

#### <a id="loggeroptionslog_chat"></a>::logger::options(log\_chat)
## <a id="Stylecodes"></a>Stylecodes

Обработка стилевых кодов. Стилевые коды — это специальные символы для выделения частей текста полужирным, курсивным или подчеркнутым начертанием и их комбинациями. 
Сохранять протоколы персональных разговоров. По умолчанию включено.

### <a id="pluginsstylecodesoptionsemphasize"></a>::plugins::stylecodes::options(emphasize)

#### <a id="loggeroptionslog_groupchat"></a>::logger::options(log\_groupchat)

Сохранять протоколы конференций.  По умолчанию включено.

### <a id="MUC_Ignoring"></a>MUC Ignoring

Игнорирование групповых и приватных сообщений от выбранных посетителей
многопользовательской конференции.

#### <a id="pluginsmucignoreoptionstransient_rules"></a>::plugins::mucignore::options(transient\_rules)

Если параметр установлен, то все изменения правил игнорирования будут
действовать только до того, как Ткаббер закроется, и не будут восстановлены при
следующем запуске. По умолчанию выключено, то есть, правила сохраняются.
[**Читать подробнее об игнорировании в конференциях**](MUC_Ignore.md).

### <a id="Stylecodes"></a>Stylecodes

Обработка стилевых кодов. Стилевые коды — это специальные символы для выделения
частей текста полужирным, курсивным или подчеркнутым начертанием и их
комбинациями.

#### <a id="pluginsstylecodesoptionsemphasize"></a>::plugins::stylecodes::options(emphasize)

Выделять сообщения со стилевыми кодами, используя разные шрифты. Про это вы
Выделять сообщения со стилевыми кодами, используя разные шрифты. Про это вы уже, надеюсь, [прочитали](Начинающим.md#Некоторые_полезные_команды). 
уже, надеюсь, [**прочитали**](Начинающим.md#Некоторые_полезные_команды).

#### <a id="pluginsstylecodesoptionshide_markup"></a>::plugins::stylecodes::options(hide\_markup)
### <a id="pluginsstylecodesoptionshide_markup"></a>::plugins::stylecodes::options(hide\_markup)

Скрывать символы, задающие разметку стилевых кодов. Выделяет точно так же, как
Скрывать символы, задающие разметку стилевых кодов. Выделяет точно так же, как и в предыдущей опции, но при этом ещё и показывает сами управляющие коды, то есть, мы так и видим: **\*жирный текст\***. 
и в предыдущей опции, но при этом ещё и показывает сами управляющие коды, то
есть, мы так и видим: __\*жирный текст\*__.

Эту опцию полезно включить тем, кому нравится использовать/видеть выделение
Эту опцию полезно включить тем, кому нравится использовать/видеть выделение стайлкодами, но кто так же достаточно часто пишет/видит текст, который вызывает "ложные срабатывания" движка, ответственного за "отлов" символов разметки, определяющих выделения. Например, наиболее известная проблема движка стайлкодов — срабатывание на именах каталогов Unix: `/usr/share/` отображается как `/usr_share_`; если же данная опция включена, вы будете видеть `/usr_/share/_`. 
стайлкодами, но кто так же достаточно часто пишет/видит текст, который вызывает
"ложные срабатывания" движка, ответственного за "отлов" символов разметки,
определяющих выделения. Например, наиболее известная проблема движка стайлкодов
— срабатывание на именах каталогов Unix: `/usr/share/` отображается как
`/usr`*<code>share</code>*; если же данная опция включена, вы будете видеть `/usr`*`/share/`*.

С другой стороны, имейте в виду, что скрытые символы разметки стайлкодов не
С другой стороны, имейте в виду, что скрытые символы разметки стайлкодов не влияют на текст, который помещается в буфер обмена при копировании: если вы выделите описанный выше текст `/usr_share_` и затем вставите его куда-нибудь, то вставлен будет текст `/usr/share/`, а не `/usrshare`. 
влияют на текст, который помещается в буфер обмена при копировании: если вы
выделите описанный выше текст `/usr`*<code>share</code>* и затем вставите его куда-нибудь,
то вставлен будет текст `/usr/share/`, а не `/usrshare`.

### <a id="Vcard"></a>Vcard
## <a id="Vcard"></a>Vcard

Параметры отображения полей vCard в окне разговора. Зайдя внутрь, вы выпадете в
Параметры отображения полей vCard в окне разговора. Зайдя внутрь, вы выпадете в осадок. Там находится здоровенный список опций, позволяющих настроить внешний вид, а точнее, показ нужных вам полей vCard. Если вы хотите быть готовыми к любой, даже самой полной карточке, надо включить все поля. Если вы точно уверены, что никто из ваших собеседников не будет пользоваться телефоном ISDN, то можно соответствующее поле отключить. 
осадок. Там находится здоровенный список опций, позволяющих настроить внешний
вид, а точнее, показ нужных вам полей vCard. Если вы хотите быть готовыми к
любой, даже самой полной карточке, надо включить все поля. Если вы точно
уверены, что никто из ваших собеседников не будет пользоваться телефоном ISDN,
то можно соответствующее поле отключить.

## <a id="Conference_Info"></a>Conference Info
Параметры модуля информации о конференциях, позволяющего видеть список
# <a id="Conference_Info"></a>Conference Info
Параметры модуля информации о конференциях, позволяющего видеть список участников конференции, закладка на которую находится в вашем списке контактов, во всплывающем окне, независимо от того, подключены Вы к конференции или нет. 
участников конференции, закладка на которую находится в вашем списке контактов,
во всплывающем окне, независимо от того, подключены Вы к конференции или нет.

### <a id="pluginsconferenceinfooptionsautoask"></a>::plugins::conferenceinfo::options(autoask)
## <a id="pluginsconferenceinfooptionsautoask"></a>::plugins::conferenceinfo::options(autoask)

Подключить данный модуль. По умолчанию он отключён. Надеюсь, понятно, зачем он
Подключить данный модуль. По умолчанию он отключён. Надеюсь, понятно, зачем он нужен (см. чуть выше). Осторожнее с этой фичей: она гонит неслабый трафик. 
нужен (см. чуть выше). Осторожнее с этой фичей: она гонит неслабый трафик.

### <a id="pluginsconferenceinfooptionsinterval"></a>::plugins::conferenceinfo::options(interval)
## <a id="pluginsconferenceinfooptionsinterval"></a>::plugins::conferenceinfo::options(interval)

Интервал (в минутах) между запросами списка участников. Если вы мигрировали на
Интервал (в минутах) между запросами списка участников. Если вы мигрировали на новую версию Ткаббера с какой-нибудь старой, и у вас остались старые настройки в конфиге, проверьте интервал обновления. Старые настройки были в секундах, и если нынешний Ткаббер начнёт запрашивать списки с интервалом в 300 минут, пользы от такой опции мало :) 
новую версию Ткаббера с какой-нибудь старой, и у вас остались старые настройки
в конфиге, проверьте интервал обновления. Старые настройки были в секундах, и
если нынешний Ткаббер начнёт запрашивать списки с интервалом в 300 минут,
пользы от такой опции мало :)

### <a id="pluginsconferenceinfooptionserr_interval"></a>::plugins::conferenceinfo::options(err\_interval)
## <a id="pluginsconferenceinfooptionserr_interval"></a>::plugins::conferenceinfo::options(err\_interval)

Интервал (в минутах) после ошибки в ответ на запрос списка участников. В старых
Интервал (в минутах) после ошибки в ответ на запрос списка участников. В старых настройках по умолчанию стояло 3600 (секунд), так что если вы переехали со старой версии Ткаббера, напишите в этом поле 60. 
настройках по умолчанию стояло 3600 (секунд), так что если вы переехали со
старой версии Ткаббера, напишите в этом поле 60.

## <a id="File_Transfer"></a>File Transfer
Параметры передачи файлов. Тема эта интересная, но сложноватая для новичка.
# <a id="File_Transfer"></a>File Transfer
Параметры передачи файлов. Тема эта интересная, но сложноватая для новичка. Подробнее о пересылке файлов можно почитать в [этой статье](Пересылка_файлов__теория.md). 
Подробнее о пересылке файлов можно почитать в
[**этой статье**](Пересылка_файлов__теория.md).

### <a id="ftoptionsdownload_dir"></a>::ft::options(download\_dir)
## <a id="ftoptionsdownload_dir"></a>::ft::options(download\_dir)

Директория в которой по умолчанию сохраняются полученные файлы.
Директория в которой по умолчанию сохраняются полученные файлы. 

Отнеситесь к ней с исключительным вниманием, так как в настоящее время Ткаббер
Отнеситесь к ней с исключительным вниманием, так как в настоящее время Ткаббер не умеет спрашивать куда сохранить файл, который вы собираетесь принять, и нет никакого способа повлиять на это, кроме данной опции. 
не умеет спрашивать куда сохранить файл, который вы собираетесь принять, и нет
никакого способа повлиять на это, кроме данной опции.

### <a id="ftoptionsdefault_proto"></a>::ft::options(default\_proto)
## <a id="ftoptionsdefault_proto"></a>::ft::options(default\_proto)

Протокол передачи файлов по умолчанию. Здесь уже установлен Stream Initiation,
Протокол передачи файлов по умолчанию. Здесь уже установлен Stream Initiation, и он обычно подходит для большинства соединений. Если у вас проблемы при передаче файлов, чтения вышеупомянутой статьи не избежать. 
и он обычно подходит для большинства соединений. Если у вас проблемы при
передаче файлов, чтения вышеупомянутой статьи не избежать.

---

Ниже идут кнопки, ведущие к настройкам конкретных протоколов. Настройки по
Ниже идут кнопки, ведущие к настройкам конкретных протоколов. Настройки по умолчанию обычно работают. Детально о всех параметрах рассказано в статье, так что здесь мы ограничимся описаниями опций, взятыми из самих настроек. 
умолчанию обычно работают. Детально о всех параметрах рассказано в статье, так
что здесь мы ограничимся описаниями опций, взятыми из самих настроек.

### <a id="HTTP"></a>HTTP
## <a id="HTTP"></a>HTTP

Параметры HTTP-транспорта.
Параметры HTTP-транспорта. 

#### <a id="pluginshttpoptionsport"></a>::plugins::http::options(port)
### <a id="pluginshttpoptionsport"></a>::plugins::http::options(port)

Порт для исходящей передачи файлов по HTTP (если равен 0, то выбирается
Порт для исходящей передачи файлов по HTTP (если равен 0, то выбирается автоматически). Применяется, когда файл посылается через NAT через пробрасываемый порт. По умолчанию стоит 0. 
автоматически). Применяется, когда файл посылается через NAT через
пробрасываемый порт. По умолчанию стоит 0.

#### <a id="pluginshttpoptionshost"></a>::plugins::http::options(host)
### <a id="pluginshttpoptionshost"></a>::plugins::http::options(host)

Объявлять указанное имя (или IP-адрес) для исходящей передачи файлов по HTTP.
Объявлять указанное имя (или IP-адрес) для исходящей передачи файлов по HTTP. 

### <a id="Jidlink"></a>Jidlink
## <a id="Jidlink"></a>Jidlink

Настройки Jidlink. Jidlink — устаревший протокол, по-видимому, кроме Ткаббера
Настройки Jidlink. Jidlink — устаревший протокол, по-видимому, кроме Ткаббера нигде и не реализованный, но тем не менее может использоваться на связке Ткаббер-Ткаббер, если остальные варианты не работают. 
нигде и не реализованный, но тем не менее может использоваться на связке
Ткаббер-Ткаббер, если остальные варианты не работают.

#### <a id="jidlinktransportalloweddtcp-active"></a>::jidlink::transport(allowed,dtcp-active)
### <a id="jidlinktransportalloweddtcp-active"></a>::jidlink::transport(allowed,dtcp-active)

Разрешить использование Jidlink-транспорта dtcp-active. По умолчанию включён.
Разрешить использование Jidlink-транспорта dtcp-active. По умолчанию включён. 

#### <a id="jidlinktransportalloweddtcp-passive"></a>::jidlink::transport(allowed,dtcp-passive)
### <a id="jidlinktransportalloweddtcp-passive"></a>::jidlink::transport(allowed,dtcp-passive)

Разрешить использование Jidlink-транспорта dtcp-passive. По умолчанию выключён.
Разрешить использование Jidlink-транспорта dtcp-passive. По умолчанию выключён. 

#### <a id="jidlinktransportallowedinband-bytestream"></a>::jidlink::transport(allowed,inband-bytestream)
### <a id="jidlinktransportallowedinband-bytestream"></a>::jidlink::transport(allowed,inband-bytestream)

Разрешить использование Jidlink-транспорта inband-bytestream. По умолчанию
Разрешить использование Jidlink-транспорта inband-bytestream. По умолчанию включён. 
включён.

### <a id="Stream_Initiation"></a>Stream Initiation

## <a id="Stream_Initiation"></a>Stream Initiation

Параметры SI-транспорта.
Параметры SI-транспорта. 

#### <a id="sisocks5initiatoroptionsenable_mediated_connection"></a>::si::socks5::initiator::options(enable\_mediated\_connection)
### <a id="sisocks5initiatoroptionsenable_mediated_connection"></a>::si::socks5::initiator::options(enable\_mediated\_connection)

Использовать соединение SOCKS5 через посредника, если он доступен. Включён.
Использовать соединение SOCKS5 через посредника, если он доступен. Включён. 

#### <a id="sisocks5initiatoroptionsproxy_servers"></a>::si::socks5::initiator::options(proxy\_servers)
### <a id="sisocks5initiatoroptionsproxy_servers"></a>::si::socks5::initiator::options(proxy\_servers)

Список прокси-серверов для передачи потока SOCKS5 (попытка использовать в
Список прокси-серверов для передачи потока SOCKS5 (попытка использовать в качестве посредника будет предпринята для всех доступных серверов). Тут уже прописаны некоторые сервера. Если что-то идёт не так, можете попробовать указать свои. 
качестве посредника будет предпринята для всех доступных серверов). Тут уже
прописаны некоторые сервера. Если что-то идёт не так, можете попробовать
указать свои.

#### <a id="sitransportallowedhttp__jabber.org_protocol_bytestreams"></a>::si::transport(allowed,[http://jabber.org/protocol/bytestreams](http://jabber.org/protocol/bytestreams))
### <a id="sitransportallowedhttp__jabber.org_protocol_bytestreamshttp__jabber.org_protocol_bytestreams"></a>::si::transport(allowed,[http://jabber.org/protocol/bytestreams](http://jabber.org/protocol/bytestreams))

Разрешить использование SI-транспорта
Разрешить использование SI-транспорта [http://jabber.org/protocol/bytestreams](http://jabber.org/protocol/bytestreams). Включён. 
[http://jabber.org/protocol/bytestreams](http://jabber.org/protocol/bytestreams).
Включён.

#### <a id="sitransportallowedhttp__jabber.org_protocol_iqibb"></a>::si::transport(allowed,[http://jabber.org/protocol/iqibb](http://jabber.org/protocol/iqibb))
### <a id="sitransportallowedhttp__jabber.org_protocol_iqibbhttp__jabber.org_protocol_iqibb"></a>::si::transport(allowed,[http://jabber.org/protocol/iqibb](http://jabber.org/protocol/iqibb))

Разрешить использование SI-транспорта
[http://jabber.org/protocol/iqibb](http://jabber.org/protocol/iqibb). Тоже
Разрешить использование SI-транспорта [http://jabber.org/protocol/iqibb](http://jabber.org/protocol/iqibb). Тоже включён. 
включён.

#### <a id="sitransportallowedhttp__jabber.org_protocol_ibb"></a>::si::transport(allowed,[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb))
### <a id="sitransportallowedhttp__jabber.org_protocol_ibbhttp__jabber.org_protocol_ibb"></a>::si::transport(allowed,[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb))

Разрешить использование SI-транспорта
Разрешить использование SI-транспорта [http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb). Тоже включён. 
[http://jabber.org/protocol/ibb](http://jabber.org/protocol/ibb). Тоже включён.

## <a id="GPGME"></a>GPGME
Параметры GPGME (цифровая подпись и шифрование). Для того, чтобы шифрование в
# <a id="GPGME"></a>GPGME
Параметры GPGME (цифровая подпись и шифрование). Для того, чтобы шифрование в Ткаббере заработало и этот пункт настроек появился у вас, необходимо [установить необходимые пакеты](http://tkabber.jabber.ru/gpg). Учтите, что шифрование в Ткаббере возможно только в Linux. [Читайте дополнительно по теме.](Ткаббер_ЧаВо/Глюки.md#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme) 
Ткаббере заработало и этот пункт настроек появился у вас, необходимо
[установить необходимые пакеты](http://tkabber.jabber.ru/gpg). Учтите, что
шифрование в Ткаббере возможно только в Linux.
[**Читайте дополнительно по теме**](Ткаббер_ЧаВо/Глюки.md#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme).

### <a id="ssjoptionsone-passphrase"></a>::ssj::options(one-passphrase)
## <a id="ssjoptionsone-passphrase"></a>::ssj::options(one-passphrase)

Использовать одну и ту же парольную фразу для подписи и шифрования сообщений.
Использовать одну и ту же парольную фразу для подписи и шифрования сообщений. 

### <a id="ssjoptionssign-traffic"></a>::ssj::options(sign-traffic)
## <a id="ssjoptionssign-traffic"></a>::ssj::options(sign-traffic)

Подписывать исходящие сообщения и обновления присутствия с помощью
Подписывать исходящие сообщения и обновления присутствия с помощью [GPG](http://www.gnupg.org). 
[GPG](http://www.gnupg.org).

### <a id="ssjoptionsencrypt-traffic"></a>::ssj::options(encrypt-traffic)
## <a id="ssjoptionsencrypt-traffic"></a>::ssj::options(encrypt-traffic)

Шифровать исходящие сообщения с помощью GPG, если возможно.
Шифровать исходящие сообщения с помощью GPG, если возможно. 

### <a id="ssjoptionskey"></a>::ssj::options(key)
## <a id="ssjoptionskey"></a>::ssj::options(key)

Использовать ключ с указанным идентификатором для подписи и дешифровки
Использовать ключ с указанным идентификатором для подписи и дешифровки сообщений. Если у вас больше одного ключа, вы можете указать ID того, который хотите использовать по умолчанию. 
сообщений. Если у вас больше одного ключа, вы можете указать ID того, который
хотите использовать по умолчанию.

### <a id="ssjoptionsdisplay_sig_warnings"></a>::ssj::options(display\_sig\_warnings)
## <a id="ssjoptionsdisplay_sig_warnings"></a>::ssj::options(display\_sig\_warnings)

Показывать предупреждения в случае неудачи при проверке подписи.
Показывать предупреждения в случае неудачи при проверке подписи. 

## <a id="Main_Interface"></a>Main Interface
Параметры основного интерфейса.
# <a id="Main_Interface"></a>Main Interface
Параметры основного интерфейса. 

### <a id="ifacetkoptionsuse_tabbar"></a>::ifacetk::options(use\_tabbar)
## <a id="ifacetkoptionsuse_tabbar"></a>::ifacetk::options(use\_tabbar)

Использовать интерфейс с вкладками ("табами"). По умолчанию включён. После
применения требуется рестарт.

### <a id="ifacetkoptionstabs_side"></a>::ifacetk::options(tabs\_side)

Использовать интерфейс с вкладками ("табами"). По умолчанию включён. После применения требуется рестарт. 

## <a id="ifacetkoptionstabs_side"></a>::ifacetk::options(tabs\_side)

Сторона, с которой следует размещать заголовки вкладок в режиме с вкладками. По
Сторона, с которой следует размещать заголовки вкладок в режиме с вкладками. По умолчанию стоит "Сверху". Остальные возможные варианты — "Снизу", "Слева", "Справа". 
умолчанию стоит "Сверху". Остальные возможные варианты — "Снизу", "Слева",
"Справа".

### <a id="ifacetkoptionstab_minwidth"></a>::ifacetk::options(tab\_minwidth)
## <a id="ifacetkoptionstab_minwidth"></a>::ifacetk::options(tab\_minwidth)

Минимальная ширина кнопок заголовков вкладок в режиме со вкладками. По
Минимальная ширина кнопок заголовков вкладок в режиме со вкладками. По умолчанию стоит 90 пикселей. 
умолчанию стоит 90 пикселей.

### <a id="ifacetkoptionstab_maxwidth"></a>::ifacetk::options(tab\_maxwidth)
## <a id="ifacetkoptionstab_maxwidth"></a>::ifacetk::options(tab\_maxwidth)

Максимальная ширина кнопок заголовков вкладок в режиме со вкладками. По
Максимальная ширина кнопок заголовков вкладок в режиме со вкладками. По умолчанию стоит 120 пикселей. Одиночная вкладка всегда будет 120 пикселей по ширине. Две тоже, но когда они заполняют всю ширину окна, начинают сжиматься, пока их размер не достигает нижнего лимита. Как только он достигнут, Ткаббер начинает открывать новые вкладки в следующем ряду. 
умолчанию стоит 120 пикселей. Одиночная вкладка всегда будет 120 пикселей по
ширине. Две тоже, но когда они заполняют всю ширину окна, начинают сжиматься,
пока их размер не достигает нижнего лимита. Как только он достигнут, Ткаббер
начинает открывать новые вкладки в следующем ряду.

### <a id="ifacetkoptionsshow_toolbar"></a>::ifacetk::options(show\_toolbar)
## <a id="ifacetkoptionsshow_toolbar"></a>::ifacetk::options(show\_toolbar)

Показывать панель инструментов (то бишь панель с кнопками). По умолчанию
Показывать панель инструментов (то бишь панель с кнопками). По умолчанию включена. 
включена.

### <a id="ifacetkoptionsshow_presencebar"></a>::ifacetk::options(show\_presencebar)
## <a id="ifacetkoptionsshow_presencebar"></a>::ifacetk::options(show\_presencebar)

Показывать панель присутствия/статуса. Это панель в нижней части окна Ткаббера,
Показывать панель присутствия/статуса. Это панель в нижней части окна Ткаббера, где слева расположена кнопка принудительной смены статуса, а справа от неё — поле для ввода описания статуса. После ввода описания не забывайте нажимать Enter в поле ввода или менять статус. 
где слева расположена кнопка принудительной смены статуса, а справа от неё —
поле для ввода описания статуса. После ввода описания не забывайте нажимать
Enter в поле ввода или менять статус.

### <a id="ifacetkoptionsshow_statusbar"></a>::ifacetk::options(show\_statusbar)
## <a id="ifacetkoptionsshow_statusbar"></a>::ifacetk::options(show\_statusbar)

Показывать статусную строку. Это панелька, расположенная в самом низу. На
Показывать статусную строку. Это панелька, расположенная в самом низу. На первый взгляд, толку от неё мало, но на самом деле там мелькают полезные сообщения вроде уведомлений о коннекте ваших друзей, о смене их статуса и прочие. 
первый взгляд, толку от неё мало, но на самом деле там мелькают полезные
сообщения вроде уведомлений о коннекте ваших друзей, о смене их статуса и
прочие.

Там же появляется аббревиатура "SSL", если вы соединились с сервером, используя
Там же появляется аббревиатура "SSL", если вы соединились с сервером, используя защиту канала ("STARTTLS" или "Старый SSL" в окне логина). Если аббревиатура нарисована чёрным цветом (или тем, что у вас выбрано вместо обычного цвета текста), Ткабберу удалось удостовериться в том, что сервер "настоящий" (то есть мы доверяем его сертификату), если цвет аббревиатуры — красный, то достоверность сертификата сервера проверить не удалось (подробнее об этих заморочках написано в [отдельной статье](Проверка_сертификата_сервера.md)). Одиночный щелчок мышью на этой аббревиатуре показывает диалог с информацией о сертификате сервера и алгоритме шифрования, используемом для защиты соединения. 
защиту канала ("STARTTLS" или "Старый SSL" в окне логина). Если аббревиатура
нарисована чёрным цветом (или тем, что у вас выбрано вместо обычного цвета
текста), Ткабберу удалось удостовериться в том, что сервер "настоящий" (то есть
мы доверяем его сертификату), если цвет аббревиатуры — красный, то
достоверность сертификата сервера проверить не удалось (подробнее об этих
заморочках написано в [**отдельной статье**](Проверка_сертификата_сервера.md)).
Одиночный щелчок мышью на этой аббревиатуре показывает диалог с информацией о
сертификате сервера и алгоритме шифрования, используемом для защиты соединения.

### <a id="ifacetkoptionsraise_new_tab"></a>::ifacetk::options(raise\_new\_tab)
## <a id="ifacetkoptionsraise_new_tab"></a>::ifacetk::options(raise\_new\_tab)

Размещать новую вкладку поверх остальных. По умолчанию включено, и зря!
Размещать новую вкладку поверх остальных. По умолчанию включено, и зря! Буквально через несколько минут активного общения начинает раздражать, что именно когда вы пишете кому-нибудь сообщение, появляется новая вкладка с окном разговора от другого приятеля, решившего с вами поболтать. Эта вкладка перехватывает фокус, и если вы не смотрите на экран, продолжаете вбивать остаток сообщения уже туда, и при удачном раскладе туда же его и отправляете. В общем, отключайте эту опцию сразу же. 
Буквально через несколько минут активного общения начинает раздражать, что
именно когда вы пишете кому-нибудь сообщение, появляется новая вкладка с окном
разговора от другого приятеля, решившего с вами поболтать. Эта вкладка
перехватывает фокус, и если вы не смотрите на экран, продолжаете вбивать
остаток сообщения уже туда, и при удачном раскладе туда же его и отправляете. В
общем, отключайте эту опцию сразу же.

### <a id="ifacetkoptionsmessage_numbers_in_tabs"></a>::ifacetk::options(message\_numbers\_in\_tabs)
## <a id="ifacetkoptionsmessage_numbers_in_tabs"></a>::ifacetk::options(message\_numbers\_in\_tabs)

Показывать число непрочитанных сообщений в заголовках вкладок. По умолчанию
Показывать число непрочитанных сообщений в заголовках вкладок. По умолчанию включено. Очень удобно — сразу видно, сколько наболтали в каждой комнате, пока вас не было :) 
включено. Очень удобно — сразу видно, сколько наболтали в каждой комнате, пока
вас не было :)

### <a id="ifacetkoptionsupdate_title_delay"></a>::ifacetk::options(update\_title\_delay)
## <a id="ifacetkoptionsupdate_title_delay"></a>::ifacetk::options(update\_title\_delay)

Задержка (в миллисекундах) между получением фокуса и обновлением заголовка окна
Задержка (в миллисекундах) между получением фокуса и обновлением заголовка окна или вкладки. По умолчанию стоит 600 мс. 
или вкладки. По умолчанию стоит 600 мс.

В ходе сеанса связи, когда окно Ткаббера неактивно, каждое новое сообщение
вызвает изменение заголовка окна Ткаббера: пред полным JID'ом вашего соединения
В ходе сеанса связи, когда окно Ткаббера неактивно, каждое новое сообщение вызвает изменение заголовка окна Ткаббера: пред полным JID'ом вашего соединения пишется количество непрочитанных сообщений в скобках, а так же за этим числом рисуется "звёздочка" (\*), если среди сообщений есть адресованные лично вам (или "хайлайты" в конференциях). После того, как вы активируете окно с Ткаббером, он отсчитывает указанное в данной опции количество миллисекунд, после чего сбрасывает заголовок окна в исходное состояние, которое оно имеет сразу после успешного соединения с сервером, убирая информацию о наличии непрочитанных сообщений. Если вы успеете в течение этого интервала времени переключиться в какое-либо другое окно, заголовок окна Ткаббера останется без изменений. 
пишется количество непрочитанных сообщений в скобках, а так же за этим числом
рисуется "звёздочка" (\*), если среди сообщений есть адресованные лично вам
(или "хайлайты" в конференциях). После того, как вы активируете окно с
Ткаббером, он отсчитывает указанное в данной опции количество миллисекунд,
после чего сбрасывает заголовок окна в исходное состояние, которое оно имеет
сразу после успешного соединения с сервером, убирая информацию о наличии
непрочитанных сообщений. Если вы успеете в течение этого интервала времени
переключиться в какое-либо другое окно, заголовок окна Ткаббера останется без
изменений.

Помимо обновления заголовка окна, эта настройка управляет индикацией в иконке
Помимо обновления заголовка окна, эта настройка управляет индикацией в иконке панели системных уведомлений ("трея"), так как её состояние изменяется синхронно с заголовком окна и отображает ту же информацию, только другими средствами. 
панели системных уведомлений ("трея"), так как её состояние изменяется
синхронно с заголовком окна и отображает ту же информацию, только другими
средствами.

![(!)](../images/Hammer.png) **Сделать:** изучить поведение этой настройки в
![(!)](../images/Hammer.png) **Сделать:** изучить поведение этой настройки в случае многооконного интерфейса 
случае многооконного интерфейса

### <a id="ifacetkoptionsshow_tearoffs"></a>::ifacetk::options(show\_tearoffs)
## <a id="ifacetkoptionsshow_tearoffs"></a>::ifacetk::options(show\_tearoffs)

Использовать "отрывающиеся" меню, где это возможно. По умолчанию включено.
Использовать "отрывающиеся" меню, где это возможно. По умолчанию включено. "Оторвать" меню можно, нажав на пунктирную линию, расположенную в верхней части выпадающего меню. Это меню предстаёт в виде окошка, которое можно утащить в сторону и пользоваться им параллельно с общением. Удобно, когда вам необходимо многократно повторить одну и ту же операцию из меню, например, отправить несколько сообщений дня из "Инструментов администратора". 
"Оторвать" меню можно, нажав на пунктирную линию, расположенную в верхней части
выпадающего меню. Это меню предстаёт в виде окошка, которое можно утащить в
сторону и пользоваться им параллельно с общением. Удобно, когда вам необходимо
многократно повторить одну и ту же операцию из меню, например, отправить
несколько сообщений дня из "Инструментов администратора".

### <a id="ifacetkoptionsclosebuttonaction"></a>::ifacetk::options(closebuttonaction)
## <a id="ifacetkoptionsclosebuttonaction"></a>::ifacetk::options(closebuttonaction)

Действие, совершаемое при нажатии на кнопку закрытия окна. По умолчанию стоит
Действие, совершаемое при нажатии на кнопку закрытия окна. По умолчанию стоит "Закрыть Ткаббер", и это поведение ваш покорный слуга (и, к счастью, авторы программы тоже) находит правильным. Это уже извращённые умы придумали _сворачивать_ программу при нажатии на кнопку **Закрыть**. Впрочем, если вы уже привыкли к этой мелкой лжи, можете не отучиваться — Ткаббер предоставляет несколько вариантов сворачивания. 
"Закрыть Ткаббер", и это поведение ваш покорный слуга (и, к счастью, авторы
программы тоже) находит правильным. Это уже извращённые умы придумали
_сворачивать_ программу при нажатии на кнопку **Закрыть**. Впрочем, если вы уже
привыкли к этой мелкой лжи, можете не отучиваться — Ткаббер предоставляет
несколько вариантов сворачивания.

### <a id="pixmapsoptionspixmaps_theme"></a>::pixmaps::options(pixmaps\_theme)
## <a id="pixmapsoptionspixmaps_theme"></a>::pixmaps::options(pixmaps\_theme)

Тема пиктограмм Tkabber'а. Чтобы иметь возможность включить собственную тему,
Тема пиктограмм Tkabber'а. Чтобы иметь возможность включить собственную тему, положите её в поддиректорию директории pixmaps, которая лежит рядом с файлом конфигурации (про то, где его искать, можно почитать [здесь]($__configdir.md)). А [здесь](Цветовые_темы_и_пиктограммы.md#Пиктограммы) можно разжиться пиктограммами, не включёнными в дистрибутив. 
положите её в поддиректорию директории pixmaps, которая лежит рядом с файлом
конфигурации (про то, где его искать, можно почитать [**здесь**]($__configdir.md)).
А [**здесь**](Цветовые_темы_и_пиктограммы.md#Пиктограммы) можно разжиться
пиктограммами, не включёнными в дистрибутив.

### <a id="webbrowser"></a>::webbrowser
## <a id="webbrowser"></a>::webbrowser

Команда, которая будет выполнена при нажатии на URL в сообщении. Вместо '%s' будет подставлен URL (например, "galeon -n %s"). Иногда (особенно в Виндовс) у людей возникают проблемы с открытием линков в браузере. Читайте о них [здесь](Ткаббер_ЧаВо/Глюки.md#Не_работает_браузер_под_виндами) и [здесь](Ткаббер_ЧаВо/Глюки.md#При_клике_на_URLе_в_Ткаббере_запускается_две_Оперы_и_открывают_страницу_два_раза). 

---

Команда, которая будет выполнена при нажатии на URL в сообщении. Вместо '%s'
будет подставлен URL (например, "galeon -n %s"). Иногда (особенно в Виндовс) у
людей возникают проблемы с открытием линков в браузере. Читайте о них
[**здесь**](Ткаббер_ЧаВо/Глюки.md#Не_работает_браузер_под_виндами) и
[**здесь**](Ткаббер_ЧаВо/Глюки.md#При_клике_на_URLе_в_Ткаббере_запускается_две_Оперы_и_открывают_страницу_два_раза).

---

### <a id="Systray"></a>Systray
## <a id="Systray"></a>Systray

Параметры значка области системных уведомлений ("трея", системного лотка).
Параметры значка области системных уведомлений ("трея", системного лотка). 

Эта группа настроек появляется в интерфейсе настроек только в том случае, если
Эта группа настроек появляется в интерфейсе настроек только в том случае, если Ткабберу доступно соответствующее расширение Tk, реализующее работу с треем: в Windows это пакет [Winico](http://sourceforge.net/projects/tktable/), а в системах на базе X Window используется минимум два разных пакета: Tk\_Theme и tktray. 
Ткабберу доступно соответствующее расширение Tk, реализующее работу с треем: в
Windows это пакет [Winico](http://sourceforge.net/projects/tktable/), а в
системах на базе X Window используется минимум два разных пакета: Tk\_Theme и
tktray.

Настройки трея, если доступны, делятся, соответственно, на общие и уникальные
Настройки трея, если доступны, делятся, соответственно, на общие и уникальные для каждого конкретного расширения: 
для каждого конкретного расширения:

#### <a id="Общие_настройки"></a>Общие настройки
### <a id="Общие_настройки"></a>Общие настройки

##### <a id="ifacetksystrayoptionsdisplay_status"></a>::ifacetk::systray::options(display\_status)
#### <a id="ifacetksystrayoptionsdisplay_status"></a>::ifacetk::systray::options(display\_status)

Показывать всплывающее статусное окно ("тултип") над иконкой в трее, когда
Показывать всплывающее статусное окно ("тултип") над иконкой в трее, когда главное окно свернуто. По умолчанию выключено. 
главное окно свернуто. По умолчанию выключено.

Следует отметить, что показ статусного окна в Windows, очевидно сломан: окно с
Следует отметить, что показ статусного окна в Windows, очевидно сломан: окно с иконкой докладывает кривую информацию о своём местоположении на экране, и статусное окно поэтому рисуется неподалёку от верхнего левого угла десктопа. Побороть это можно [заклинаниями в файле конфигурации](Нетривиальные_настройки.md#Настройка_положения_окна_уведомлений_в_Windows). 
иконкой докладывает кривую информацию о своём местоположении на экране, и
статусное окно поэтому рисуется неподалёку от верхнего левого угла десктопа.
Побороть это можно
[**заклинаниями в файле конфигурации**](Нетривиальные_настройки.md#Настройка_положения_окна_уведомлений_в_Windows).

##### <a id="ifacetksystrayoptionsblink"></a>::ifacetk::systray::options(blink)
#### <a id="ifacetksystrayoptionsblink"></a>::ifacetk::systray::options(blink)

Значок в системном лотке мигает, если есть непрочитанные сообщения. Тоже
Значок в системном лотке мигает, если есть непрочитанные сообщения. Тоже выключено по умолчанию. Оно и понятно: мигание мельтешит в правом нижнем углу глаза и раздражает, хотя вам может так и не казаться. В результате расшатывается нервная система, ухудшается сон и возможны случаи лунатизма и энуреза. Тем, кто уже болен, резкое выключение мигания вредит ещё больше, так что в этом случае имеет смысл включить его. 
выключено по умолчанию. Оно и понятно: мигание мельтешит в правом нижнем углу
глаза и раздражает, хотя вам может так и не казаться. В результате
расшатывается нервная система, ухудшается сон и возможны случаи лунатизма и
энуреза. Тем, кто уже болен, резкое выключение мигания вредит ещё больше, так
что в этом случае имеет смысл включить его.

#### <a id="Настройки_расширений_работы_с_треем"></a>Настройки расширений работы с треем
### <a id="Настройки_расширений_работы_с_треем"></a>Настройки расширений работы с треем

##### <a id="pluginstaskbaroptionsenable"></a>::plugins::taskbar::options(enable)
#### <a id="pluginstaskbaroptionsenable"></a>::plugins::taskbar::options(enable)

Использовать значок в системном лотке Windows.
Использовать значок в системном лотке Windows. 

Доступна, если иконка в трее управляется пакетом Winico.
Доступна, если иконка в трее управляется пакетом Winico. 

##### <a id="pluginstktrayoptionsenable"></a>::plugins::tktray::options(enable)
#### <a id="pluginstktrayoptionsenable"></a>::plugins::tktray::options(enable)

Включить freedesktop system tray icon.
Включить freedesktop system tray icon. 

Появляется, если иконка в трее управляется пакетом tktray.
Появляется, если иконка в трее управляется пакетом tktray. 

![(!)](../images/Hammer.png) **Сделать:** то же для Tk\_Theme
![(!)](../images/Hammer.png) **Сделать:** то же для Tk\_Theme 

## <a id="IQ"></a>IQ
Параметры Info/Query (информационные и служебные запросы). Многие из этих опций
# <a id="IQ"></a>IQ
Параметры Info/Query (информационные и служебные запросы). Многие из этих опций трафикогонные. Проконсультируйтесь со статьёй [Low traffic HOWTO\#Настройки Ткаббера](Low_traffic_HOWTO.md#Настройки_Ткаббера) (подраздел "Ответы на IQ-запросы"), чтобы быть в курсе, какие можно безболезненно отключить, а какие лучше не трогать. 
трафикогонные. Проконсультируйтесь со статьёй
[**Low traffic HOWTO**](Low_traffic_HOWTO.md#Настройки_Ткаббера) (подраздел "Ответы на
IQ-запросы"), чтобы быть в курсе, какие можно безболезненно отключить, а какие
лучше не трогать.

### <a id="iqoptionsshow_iq_requests"></a>::iq::options(show\_iq\_requests)
## <a id="iqoptionsshow_iq_requests"></a>::iq::options(show\_iq\_requests)

Показывать IQ-запросы в статусной строке. По умолчанию включено. Если у вас
Показывать IQ-запросы в статусной строке. По умолчанию включено. Если у вас отключена сама статусная строка (в Main Interface), то держать включённой эту опцию не имеет смысла. 
отключена сама статусная строка (в Main Interface), то держать включённой эту
опцию не имеет смысла.

### <a id="iqoptionsshorten_iq_namespaces"></a>::iq::options(shorten\_iq\_namespaces)
## <a id="iqoptionsshorten_iq_namespaces"></a>::iq::options(shorten\_iq\_namespaces)

Опускать "http://jabber.org/protocol/" при показе запросов в статусной строке.
Опускать "http://jabber.org/protocol/" при показе запросов в статусной строке. По умолчанию включено. 
По умолчанию включено.

### <a id="pluginsoptionsreply_iq_last"></a>::plugins::options(reply\_iq\_last)
## <a id="pluginsoptionsreply_iq_last"></a>::plugins::options(reply\_iq\_last)

Отвечать на запросы времени бездействия (jabber:iq:last). Первые три опции
Отвечать на запросы времени бездействия (jabber:iq:last). Первые три опции включены по умолчанию. 
включены по умолчанию.

### <a id="pluginspingoptionsping"></a>::plugins::ping::options(ping)
## <a id="pluginspingoptionsping"></a>::plugins::ping::options(ping)

Пинговать сервер запросами urn:xmpp:ping. По умолчанию выключено.
Пинговать сервер запросами urn:xmpp:ping. По умолчанию выключено. 

### <a id="pluginspingoptionstimeout"></a>::plugins::ping::options(timeout)
## <a id="pluginspingoptionstimeout"></a>::plugins::ping::options(timeout)

Переподключаться к серверу, если он не ответил (возможно ошибкой) на пинг
Переподключаться к серверу, если он не ответил (возможно ошибкой) на пинг (urn:xmpp:ping) за указанный временной интервал (в секундах). По умолчанию 30 секунд. 
(urn:xmpp:ping) за указанный временной интервал (в секундах). По умолчанию 30
секунд.

### <a id="pluginspingoptionspong"></a>::plugins::ping::options(pong)
## <a id="pluginspingoptionspong"></a>::plugins::ping::options(pong)

Отвечать на пинг (urn:xmpp:ping). По умолчанию включено.
Отвечать на пинг (urn:xmpp:ping). По умолчанию включено. 

### <a id="pluginsoptionsreply_iq_time"></a>::plugins::options(reply\_iq\_time)
## <a id="pluginsoptionsreply_iq_time"></a>::plugins::options(reply\_iq\_time)

Отвечать на запросы времени (jabber:iq:time). Тоже включено. В Ткаббере
Отвечать на запросы времени (jabber:iq:time). Тоже включено. В Ткаббере реализованы команды запроса времени, версии и т. п. В данном случае это "/time nick". Эта опция разрешает отвечать на подобные запросы. 
реализованы команды запроса времени, версии и т. п. В данном случае это "/time
nick". Эта опция разрешает отвечать на подобные запросы.

### <a id="pluginsoptionsreply_xmpp_time"></a>::plugins::options(reply\_xmpp\_time)
## <a id="pluginsoptionsreply_xmpp_time"></a>::plugins::options(reply\_xmpp\_time)

Reply to entity time (urn:xmpp:time) requests.
Reply to entity time (urn:xmpp:time) requests. 

### <a id="pluginsoptionsreply_iq_version"></a>::plugins::options(reply\_iq\_version)
## <a id="pluginsoptionsreply_iq_version"></a>::plugins::options(reply\_iq\_version)

Отвечать на запросы версии (jabber:iq:version). Отвечает на запросы типа
Отвечать на запросы версии (jabber:iq:version). Отвечает на запросы типа "/version nick". 
"/version nick".

### <a id="pluginsoptionsreply_iq_os_version"></a>::plugins::options(reply\_iq\_os\_version)
## <a id="pluginsoptionsreply_iq_os_version"></a>::plugins::options(reply\_iq\_os\_version)

Включать информацию об операционной системе в ответ на запрос версии
Включать информацию об операционной системе в ответ на запрос версии (jabber:iq:version). Позволяет при ответе на запрос о версии клиента отдавать информацию и о вашей операционке. Если вы хотите сообщать версию Ткаббера, но не выдавать инфу о системе, отключите её. 
(jabber:iq:version). Позволяет при ответе на запрос о версии клиента отдавать
информацию и о вашей операционке. Если вы хотите сообщать версию Ткаббера, но
не выдавать инфу о системе, отключите её.

### <a id="mucoptionsreport_muc_rooms"></a>::muc::options(report\_muc\_rooms)
## <a id="mucoptionsreport_muc_rooms"></a>::muc::options(report\_muc\_rooms)

Отвечать на запрос disco\#items о MUC-конференциях, в которых Вы принимаете
Отвечать на запрос disco\#items о MUC-конференциях, в которых Вы принимаете участие. 
участие.

## <a id="Login"></a>Login
Параметры подключения. Если вы уже залогинены, некоторые поля будут
заполненными вашими данными для логина, причём рядом с кнопкой "Состояние"
будет написано "Параметр установлен, но не сохранён для следующих сессий". Это
# <a id="Login"></a>Login
Параметры подключения. Если вы уже залогинены, некоторые поля будут заполненными вашими данными для логина, причём рядом с кнопкой "Состояние" будет написано "Параметр установлен, но не сохранён для следующих сессий". Это нормально. Кстати, если вы не планируете устраивать мультилогин или создавать несколько профилей, можете сохранить эти значения для будущих сессий (кроме пароля, ибо файл custom.tcl, куда сохраняются все настройки, никак не шифруется; если вы хотите настроить безопасный автологин без ввода пароля, почитайте [здесь](Плагины.md#CryptoConfig)). Многие параметры логина рассмативаются в статьях [Начинающим](Начинающим.md) и [Между офлайном и онлайном](Между_офлайном_и_онлайном.md), так что здесь мы отвлекаться на их описание не будем. 

## <a id="loginconfuser"></a>::::loginconf(user)

нормально. Кстати, если вы не планируете устраивать мультилогин или создавать
несколько профилей, можете сохранить эти значения для будущих сессий (кроме
пароля, ибо файл custom.tcl, куда сохраняются все настройки, никак не
шифруется; если вы хотите настроить безопасный автологин без ввода пароля,
почитайте [**здесь**](Плагины.md#CryptoConfig)). Многие параметры логина
рассмативаются в статьях [**Начинающим**](Начинающим.md) и
[**Между офлайном и онлайном**](Между_офлайном_и_онлайном.md), так что здесь мы отвлекаться на их
описание не будем.
Имя пользователя. 

### <a id="loginconfuser"></a>::::loginconf(user)
## <a id="loginconfserver"></a>::::loginconf(server)

Имя сервера. 

Имя пользователя.

### <a id="loginconfserver"></a>::::loginconf(server)

Имя сервера.

### <a id="loginconfpassword"></a>::::loginconf(password)
## <a id="loginconfpassword"></a>::::loginconf(password)

Пароль.
Пароль. 

### <a id="loginconfresource"></a>::::loginconf(resource)
## <a id="loginconfresource"></a>::::loginconf(resource)

[**Ресурс**](Ткаббер_ЧаВо/Разное.md#Ресурс).
[Ресурс](Ткаббер_ЧаВо/Разное.md#Ресурс). 

### <a id="loginconfpriority"></a>::::loginconf(priority)
## <a id="loginconfpriority"></a>::::loginconf(priority)

[**Приоритет**](Ткаббер_ЧаВо/Разное.md#Приоритет).
[Приоритет](Ткаббер_ЧаВо/Разное.md#Приоритет). 

### <a id="loginconfconnect_forever"></a>::::loginconf(connect\_forever)
## <a id="loginconfconnect_forever"></a>::::loginconf(connect\_forever)

Пытаться подключаться бесконечно много раз.
Пытаться подключаться бесконечно много раз. 

### <a id="loginconfallowauthplain"></a>::::loginconf(allowauthplain)
## <a id="loginconfallowauthplain"></a>::::loginconf(allowauthplain)

Разрешить механизмы аутентификации, использующие открытый текст (при этом
Разрешить механизмы аутентификации, использующие открытый текст (при этом пароль передается незашифрованным). 
пароль передается незашифрованным).

Если вы не знаете, что делать с этой опцией, отключите её.
Если вы не знаете, что делать с этой опцией, отключите её. 

Остальным будет полезно знать две вещи:
Остальным будет полезно знать две вещи: 

*  Вменяемые реализации серверов разрешают клиенту использовать данный механизм
*  Вменяемые реализации серверов разрешают клиенту использовать данный механизм аутентификации только если до её начала канал был защищён при помощи TLS (SSL). 
   аутентификации только если до её начала канал был защищён при помощи TLS
   (SSL).
*  Включение на сервере нестандартного способа аутентификации пользователей
*  Включение на сервере нестандартного способа аутентификации пользователей (например, при помощи внешней программы или LDAP) _требует_ использовать механизм аутентификации открытым текстом (при этом в случае с ejabberd предыдущий пункт перестаёт выполняться, и если вы развёртываете сервер с нестанратным подходом к аутентификации пользователей, задумайтесь об обязательном внедрении TLS). 
   (например, при помощи внешней программы или LDAP) _требует_ использовать
   механизм аутентификации открытым текстом (при этом в случае с ejabberd
   предыдущий пункт перестаёт выполняться, и если вы развёртываете сервер с
   нестанратным подходом к аутентификации пользователей, задумайтесь об
   обязательном внедрении TLS).

### <a id="loginconfallowgoogletoken"></a>::::loginconf(allowgoogletoken)
## <a id="loginconfallowgoogletoken"></a>::::loginconf(allowgoogletoken)

Разрешить использование механизма аутентификации X-GOOGLE-TOKEN.
Разрешить использование механизма аутентификации X-GOOGLE-TOKEN. 

Имеет смысл только при подключении к серверам Google Talk и для своей работы
Имеет смысл только при подключении к серверам Google Talk и для своей работы требует возможности подключения к серверам Google Talk по протоколу HTTPS, что, в свою очередь, требует доступности для Ткаббера пакета **tls**. 
требует возможности подключения к серверам Google Talk по протоколу HTTPS, что,
в свою очередь, требует доступности для Ткаббера пакета **tls**.

Подключение к Google Talk — особая, сложная тема с некоторым количеством
Подключение к Google Talk — особая, сложная тема с некоторым количеством подводных камней, поэтому ей посвящена [отдельная статья](Google_Talk.md). 
подводных камней, поэтому ей посвящена [**отдельная статья**](Google_Talk.md).

### <a id="loginconfusesasl"></a>::::loginconf(usesasl)
## <a id="loginconfusesasl"></a>::::loginconf(usesasl)

Использовать SASL для аутентификации.
Использовать SASL для аутентификации. 

Держите включённой. Отключать её следует только в особо сложных случаях,
например, при соединениях с очень древними серверами (например, jabberd1) и то,
Держите включённой. Отключать её следует только в особо сложных случаях, например, при соединениях с очень древними серверами (например, jabberd1) и то, только если с включённой опцией Ткаббер отказывается соединяться, выдавая ошибку "Server did not provide SASL feature". 
только если с включённой опцией Ткаббер отказывается соединяться, выдавая
ошибку "Server did not provide SASL feature".

### <a id="loginconfstream_options"></a>::::loginconf(stream\_options)
## <a id="loginconfstream_options"></a>::::loginconf(stream\_options)

Настройки XMPP-потока при подключении к серверу.
Настройки XMPP-потока при подключении к серверу. 

### <a id="loginconfsslcertfile"></a>::::loginconf(sslcertfile)
## <a id="loginconfsslcertfile"></a>::::loginconf(sslcertfile)

Файл сертификата SSL (необязательный параметр).
Файл сертификата SSL (необязательный параметр). 

### <a id="loginconfsslcacertstore"></a>::::loginconf(sslcacertstore)
## <a id="loginconfsslcacertstore"></a>::::loginconf(sslcacertstore)

Файл или директория центра сертификации (CA) SSL (необязательный параметр).
Файл или директория центра сертификации (CA) SSL (необязательный параметр). 

### <a id="loginconfsslkeyfile"></a>::::loginconf(sslkeyfile)
## <a id="loginconfsslkeyfile"></a>::::loginconf(sslkeyfile)

Файл секретного ключа SSL (необязательный параметр).
Файл секретного ключа SSL (необязательный параметр). 

### <a id="loginconfproxy"></a>::::loginconf(proxy)
## <a id="loginconfproxy"></a>::::loginconf(proxy)

Тип прокси для подключения.
Тип прокси для подключения. 

### <a id="loginconfproxyhost"></a>::::loginconf(proxyhost)
## <a id="loginconfproxyhost"></a>::::loginconf(proxyhost)

Адрес прокси-сервера. По умолчанию указан localhost.
Адрес прокси-сервера. По умолчанию указан localhost. 

### <a id="loginconfproxyport"></a>::::loginconf(proxyport)
## <a id="loginconfproxyport"></a>::::loginconf(proxyport)

Порт для подключения к прокси-серверу. Значение по умолчанию — 3128.
Порт для подключения к прокси-серверу. Значение по умолчанию — 3128. 

### <a id="loginconfproxyusername"></a>::::loginconf(proxyusername)
## <a id="loginconfproxyusername"></a>::::loginconf(proxyusername)

Имя пользователя для подключения к прокси-серверу.
Имя пользователя для подключения к прокси-серверу. 

### <a id="loginconfproxypassword"></a>::::loginconf(proxypassword)
## <a id="loginconfproxypassword"></a>::::loginconf(proxypassword)

Пароль для подключения к прокси-серверу.
Пароль для подключения к прокси-серверу. 

### <a id="loginconfproxyuseragent"></a>::::loginconf(proxyuseragent)
## <a id="loginconfproxyuseragent"></a>::::loginconf(proxyuseragent)

Строка User-Agent.
Строка User-Agent. 

### <a id="loginconfusealtserver"></a>::::loginconf(usealtserver)
## <a id="loginconfusealtserver"></a>::::loginconf(usealtserver)

Использовать явно указанные адрес сервера и порт для подключения.
Использовать явно указанные адрес сервера и порт для подключения. 

### <a id="loginconfaltserver"></a>::::loginconf(altserver)
## <a id="loginconfaltserver"></a>::::loginconf(altserver)

Имя альтернативного сервера или его IP-адрес.
Имя альтернативного сервера или его IP-адрес. 

### <a id="loginconfaltport"></a>::::loginconf(altport)
## <a id="loginconfaltport"></a>::::loginconf(altport)

Порт для подключения к альтернативному серверу.
Порт для подключения к альтернативному серверу. 

### <a id="loginconfreplace_opened"></a>::::loginconf(replace\_opened)
## <a id="loginconfreplace_opened"></a>::::loginconf(replace\_opened)

Закрыть открытые соединения. Для перелогина. Если вы планируете работать в
Закрыть открытые соединения. Для перелогина. Если вы планируете работать в одном окне Ткаббера с двумя или более аккаунтами, отключите эту опцию. Если же нет, лучше включите, чтобы не плодить открытые соединения в случае перелогина. 
одном окне Ткаббера с двумя или более аккаунтами, отключите эту опцию. Если же
нет, лучше включите, чтобы не плодить открытые соединения в случае перелогина.

### <a id="loginconfusehttppoll"></a>::::loginconf(usehttppoll)
## <a id="loginconfusehttppoll"></a>::::loginconf(usehttppoll)

Использовать HTTP-подключение.
Использовать HTTP-подключение. 

### <a id="loginconfpollurl"></a>::::loginconf(pollurl)
## <a id="loginconfpollurl"></a>::::loginconf(pollurl)

URL для подключения (опроса).
URL для подключения (опроса). 

### <a id="loginconfusepollkeys"></a>::::loginconf(usepollkeys)
## <a id="loginconfusepollkeys"></a>::::loginconf(usepollkeys)

Использовать ключи безопасности HTTP-подключения (рекомендуется).
Использовать ключи безопасности HTTP-подключения (рекомендуется). 

### <a id="loginconfnumberofpollkeys"></a>::::loginconf(numberofpollkeys)
## <a id="loginconfnumberofpollkeys"></a>::::loginconf(numberofpollkeys)

Число ключей безопасности, после передачи серверу которых генерируется новая
Число ключей безопасности, после передачи серверу которых генерируется новая последовательность ключей. 
последовательность ключей.

### <a id="loginconfpolltimeout"></a>::::loginconf(polltimeout)
## <a id="loginconfpolltimeout"></a>::::loginconf(polltimeout)

Таймаут ожидания ответа на HTTP-запрос (если равен нулю, Ткаббер будет ждать
Таймаут ожидания ответа на HTTP-запрос (если равен нулю, Ткаббер будет ждать неограниченно долго). 
неограниченно долго).

### <a id="loginconfpollmin"></a>::::loginconf(pollmin)
## <a id="loginconfpollmin"></a>::::loginconf(pollmin)

Минимальный интервал между HTTP-запросами.
Минимальный интервал между HTTP-запросами. 

### <a id="loginconfpollmax"></a>::::loginconf(pollmax)
## <a id="loginconfpollmax"></a>::::loginconf(pollmax)

Максимальный интервал между HTTP-запросами.
Максимальный интервал между HTTP-запросами. 

## <a id="Messages"></a>Messages
Параметры отображения сообщений и новостей.

### <a id="pluginsheadlinesoptionscache"></a>::plugins::headlines::options(cache)

Сохранять новости при выходе и восстанавливать при старте. Пользуйтесь этой
опцией, учитывая следующее. Если у вас много фидов и если вы чистите окно от
устаревших сообщений редко, то при включённом сохранении сообщения потихоньку
накапливаются, и стартующий Ткаббер начинает грузиться заметно дольше. Впрочем,
опция полезна, так как не всегда есть время прочитать какую-то новость прямо
сейчас, до закрытия Ткаббера. При работе с новостями может оказаться удобным
внешний плагин [**Rsssaver**](Плагины.md#Rsssaver), сохраняющий новости в файл
каждые N новых сообщений. Стандартное поведение Ткаббера — сохранять их только
при выходе; при аварийном завершении программы все новые сообщения, пришедшие
за этот сеанс, теряются.

### <a id="pluginsheadlinesoptionsmultiple"></a>::plugins::headlines::options(multiple)

# <a id="Messages"></a>Messages
Параметры отображения сообщений и новостей. 
Показывать новости в одном/нескольких окнах. Позволяет выбрать, использовать ли
одно окно для всех новостей или же группировать новости по джидам фидов в
отдельных окнах.

### <a id="pluginsheadlinesoptionsdisplay_subject_only"></a>::plugins::headlines::options(display\_subject\_only)
## <a id="pluginsheadlinesoptionscache"></a>::plugins::headlines::options(cache)

Не показывать описание новости в виде ветви дерева (только всплывающее окно).

Сохранять новости при выходе и восстанавливать при старте. Пользуйтесь этой опцией, учитывая следующее. Если у вас много фидов и если вы чистите окно от устаревших сообщений редко, то при включённом сохранении сообщения потихоньку накапливаются, и стартующий Ткаббер начинает грузиться заметно дольше. Впрочем, опция полезна, так как не всегда есть время прочитать какую-то новость прямо сейчас, до закрытия Ткаббера. При работе с новостями может оказаться удобным внешний плагин [Rsssaver](Плагины.md#Rsssaver), сохраняющий новости в файл каждые N новых сообщений. Стандартное поведение Ткаббера — сохранять их только при выходе; при аварийном завершении программы все новые сообщения, пришедшие за этот сеанс, теряются. 
### <a id="pluginsheadlinesoptionstimestamp_format"></a>::plugins::headlines::options(timestamp\_format)

Формат вывода даты/времени в окне новостей. Для того, чтобы не показывать
дату/время совсем, установите эту опцию в пустую строку.

### <a id="pluginsheadlinesoptionsshow_balloons"></a>::plugins::headlines::options(show\_balloons)
## <a id="pluginsheadlinesoptionsmultiple"></a>::plugins::headlines::options(multiple)

Показывать всплывающие окна (тултипы) с текстом новости над заголовками
Показывать новости в одном/нескольких окнах. Позволяет выбрать, использовать ли одно окно для всех новостей или же группировать новости по джидам фидов в отдельных окнах. 
сообщений.

### <a id="pluginsofflineoptionsflexible_retrieval"></a>::plugins::offline::options(flexible\_retrieval)

## <a id="pluginsheadlinesoptionsdisplay_subject_only"></a>::plugins::headlines::options(display\_subject\_only)
Получать офлайновые сообщения с использованием протокола типа POP3.

## <a id="Plugins"></a>Plugins
Не показывать описание новости в виде ветви дерева (только всплывающее окно). 
Параметры расширений. Содержимое этого раздела настроек сильно зависит от того,
какие плагины у вас установлены. Возможно, имеет смысл описать настройки всех
имеющихся плагинов, но статья и так уже слишком большая, так что ограничимся
лишь рекомендацией вникать в строчки описания и действовать метдом тыка, если
вникнуть сложно. В ближайшем будущем статья [**Плагины**](Плагины.md) подвергнется
доработке, и скорее всего, опции настройки каждого плагина будут помещены туда.

## <a id="Privacy"></a>Privacy
## <a id="pluginsheadlinesoptionstimestamp_format"></a>::plugins::headlines::options(timestamp\_format)
Настройки блокировки сообщений (правил обеспечения приватности XMPP).

### <a id="filtersoptionsenable"></a>::filters::options(enable)

Формат вывода даты/времени в окне новостей. Для того, чтобы не показывать дату/время совсем, установите эту опцию в пустую строку. 
Включить поддержку модуля mod\_filter из jabberd 1.4 (устаревшие). По умолчанию
эта поддержка выключена. То и понятно, зачем по умолчанию грузить поддержку
устаревшего хлама? Если вы уверены, что ваш сервер — именно jabberd 1.4,
возможно, эта опция вам понадобится.

### <a id="privacyoptionsactivate_at_startup"></a>::privacy::options(activate\_at\_startup)
## <a id="pluginsheadlinesoptionsshow_balloons"></a>::plugins::headlines::options(show\_balloons)

Активировать видимый/невидимый/игнорируемый списки (и список конференций) перед
тем, как объявлять о своём присутствии в сети. По умолчанию эта опция включена,
но вам может понадобиться отключить её. Подробнее об одном из таких случаев
читайте в статье [**Блокировка MRIM-спама**](Блокировка_MRIM-спама.md).
Показывать всплывающие окна (тултипы) с текстом новости над заголовками сообщений. 

## <a id="pluginsofflineoptionsflexible_retrieval"></a>::plugins::offline::options(flexible\_retrieval)
### <a id="MUC_Ignoring"></a>MUC Ignoring

Игнорирование групповых и приватных сообщений от выбранных посетителей
Получать офлайновые сообщения с использованием протокола типа POP3. 
многопользовательской конференции. В этом подразделе имеется всего одна опция:

#### <a id="pluginsmucignoreoptionstransient_rules"></a>::plugins::mucignore::options(transient\_rules)
# <a id="Plugins"></a>Plugins
Параметры расширений. Содержимое этого раздела настроек сильно зависит от того, какие плагины у вас установлены. Возможно, имеет смысл описать настройки всех имеющихся плагинов, но статья и так уже слишком большая, так что ограничимся лишь рекомендацией вникать в строчки описания и действовать метдом тыка, если вникнуть сложно. В ближайшем будущем статья [Плагины](Плагины.md) подвергнется доработке, и скорее всего, опции настройки каждого плагина будут помещены туда. 

# <a id="Privacy"></a>Privacy
Если параметр установлен, то все изменения правил игнорирования будут
Настройки блокировки сообщений (правил обеспечения приватности XMPP). 
действовать только до того, как Tkabber закроется, и не будут восстановлены при
следующем запуске. По умолчанию выключено, так что Ткаббер должен запоминать
ваших доставал. Статья по теме — [**MUC Ignore**](MUC_Ignore.md).

## <a id="Remote_Control"></a>Remote Control
## <a id="filtersoptionsenable"></a>::filters::options(enable)
Настройки [удалённого управления (XEP-0146)](http://www.xmpp.org/extensions/xep-0146.html).
Под удалённым управлением понимается возможность выполнять из одного Jabber-клиента некоторые
фиксированные действия по управлению другим удалённым Jabber-клиентом, а точнее
— одним из активных подключений к серверу на нём. Стандартные команды включают
в себя, в числе прочих:

*  Отключение сессии;
*  Выход из всех активных групповых чатов (чтобы позволить зайти в них со своим
   зарегистрированным псевдонимом из своей текущей сессии).
*  Пересылка непрочитанных на удалённом клиенте сообщений вашему клиенту.
Включить поддержку модуля mod\_filter из jabberd 1.4 (устаревшие). По умолчанию эта поддержка выключена. То и понятно, зачем по умолчанию грузить поддержку устаревшего хлама? Если вы уверены, что ваш сервер — именно jabberd 1.4, возможно, эта опция вам понадобится. 

В дополнение к этому встроенному средству вы можете поставить внешние плагины
[**Remote Settings**](Плагины.md#Remote_Settings) и
[**Remote Commands**](Плагины.md#Remote_Commands). Подробнее почитать на эту тему вы можете
в статье и
[**How to add a new remote command**](../en/How_to_add_a_new_remote_command.md)
(англ.; конкретные примеры, иллюстрирующие плагин Remote Commands).
![(!)](../images/Hammer.png) **Сделать:** поправить эту ссылку, чтобы выглядела
## <a id="privacyoptionsactivate_at_startup"></a>::privacy::options(activate\_at\_startup)

Активировать видимый/невидимый/игнорируемый списки (и список конференций) перед тем, как объявлять о своём присутствии в сети. По умолчанию эта опция включена, но вам может понадобиться отключить её. Подробнее об одном из таких случаев читайте в статье [Блокировка MRIM-спама](Блокировка_MRIM-спама.md). 

## <a id="MUC_Ignoring"></a>MUC Ignoring
как внутренняя ссылка вики, а саму статью неплохо бы в будущем перевести на
русский.

Имейте в виду, что это именно управление клиентом в контексте протокола XMPP;
оно не имеет ничего общего с управлением _программой Tkabber_ при помощи
средств операционной системы и её программного окружения (такого, например, про
которое написано в статье
[**Удалённое управление с помощью send**](Удалённое_управление_с_помощью_send.md)).
Игнорирование групповых и приватных сообщений от выбранных посетителей многопользовательской конференции. В этом подразделе имеется всего одна опция: 

### <a id="remoteoptionsenable"></a>::remote::options(enable)
### <a id="pluginsmucignoreoptionstransient_rules"></a>::plugins::mucignore::options(transient\_rules)

Включить удалённое управление. По умолчанию включено.
Если параметр установлен, то все изменения правил игнорирования будут действовать только до того, как Tkabber закроется, и не будут восстановлены при следующем запуске. По умолчанию выключено, так что Ткаббер должен запоминать ваших доставал. Статья по теме — [MUC Ignore](MUC_Ignore.md). 

### <a id="remoteoptionsaccept_from_myjid"></a>::remote::options(accept\_from\_myjid)
# <a id="Remote_Control"></a>Remote Control
Настройки [удалённого управления (XEP-0146)](http://www.xmpp.org/extensions/xep-0146.html). Под удалённым управлением понимается возможность выполнять из одного Jabber-клиента некоторые фиксированные действия по управлению другим удалённым Jabber-клиентом, а точнее — одним из активных подключений к серверу на нём. Стандартные команды включают в себя, в числе прочих: 

Принимать подключение с моего собственного JID. Тоже включено.
*  Отключение сессии; 
*  Выход из всех активных групповых чатов (чтобы позволить зайти в них со своим зарегистрированным псевдонимом из своей текущей сессии). 
*  Пересылка непрочитанных на удалённом клиенте сообщений вашему клиенту. 

В дополнение к этому встроенному средству вы можете поставить внешние плагины [Remote Settings](Плагины.md#Remote_Settings) и [Remote Commands](Плагины.md#Remote_Commands). Подробнее почитать на эту тему вы можете в статье и [How\_to\_add\_a\_new\_remote\_command](../en/How_to_add_a_new_remote_command.md) (англ.; конкретные примеры, иллюстрирующие плагин Remote Commands). ![(!)](../images/Hammer.png) **Сделать:** поправить эту ссылку, чтобы выглядела как внутренняя ссылка вики, а саму статью неплохо бы в будущем перевести на русский. 
### <a id="remoteoptionsaccept_list"></a>::remote::options(accept\_list)

Имейте в виду, что это именно управление клиентом в контексте протокола XMPP; оно не имеет ничего общего с управлением _программой Tkabber_ при помощи средств операционной системы и её программного окружения (такого, например, про которое написано в статье [Удалённое управление с помощью send](Удалённое_управление_с_помощью_send.md)). 

Принимать подключение с перечисленных JID'ов. В этом поле можно перечислить
JID'ы, которым также разрешено удалённо управлять вашим Ткаббером. Разделять их
надо пробелом.
## <a id="remoteoptionsenable"></a>::remote::options(enable)

Включить удалённое управление. По умолчанию включено. 

## <a id="remoteoptionsaccept_from_myjid"></a>::remote::options(accept\_from\_myjid)

Принимать подключение с моего собственного JID. Тоже включено. 

## <a id="remoteoptionsaccept_list"></a>::remote::options(accept\_list)

Принимать подключение с перечисленных JID'ов. В этом поле можно перечислить JID'ы, которым также разрешено удалённо управлять вашим Ткаббером. Разделять их надо пробелом. 

## <a id="Roster"></a>Roster
Параметры контактов.
# <a id="Roster"></a>Roster
Параметры контактов. 

### <a id="ifacetkrosteruse_aliases"></a>::ifacetk::roster::use\_aliases
## <a id="ifacetkrosteruse_aliases"></a>::ifacetk::roster::use\_aliases

Использовать aliases и показывать нескольких пользователей как один элемент
Использовать aliases и показывать нескольких пользователей как один элемент контактов. Представьте себе, что у вас в ростере болтается два пользователя, сидящих на одном джиде, но с разными ресурсами. С отключённой опцией они будут видны как два отдельных контакта. Если же опция включена (а по умолчанию она включена), то оба эти контакта соберутся в группу со стрелочкой и будут выглядеть как один пользователь. При нажатии на стрелку группа развернётся, и вы увидите все подключения этого пользователя. 
контактов. Представьте себе, что у вас в ростере болтается два пользователя,
сидящих на одном джиде, но с разными ресурсами. С отключённой опцией они будут
видны как два отдельных контакта. Если же опция включена (а по умолчанию она
включена), то оба эти контакта соберутся в группу со стрелочкой и будут
выглядеть как один пользователь. При нажатии на стрелку группа развернётся, и
вы увидите все подключения этого пользователя.

### <a id="ifacetkrostershow_only_online"></a>::ifacetk::roster::show\_only\_online
## <a id="ifacetkrostershow_only_online"></a>::ifacetk::roster::show\_only\_online

Показывать в окне контактов только подключённые контакты. По умолчанию опция
Показывать в окне контактов только подключённые контакты. По умолчанию опция выключена, но в реальной жизни бывает удобнее включить показ только контактов, находящихся в онлайне. 
выключена, но в реальной жизни бывает удобнее включить показ только контактов,
находящихся в онлайне.

На панели инструментов имеется кнопка переключения списка контактов в режим
На панели инструментов имеется кнопка переключения списка контактов в режим показа только активных контактов и обратно. Этот переключатель также доступен в виде опции главного меню: **Tkabber → Контакты → Показываются только активные пользователи'**. 
показа только активных контактов и обратно. Этот переключатель также доступен в
виде опции главного меню: **Tkabber → Контакты → Показываются только активные
пользователи'**.

Если активен режим показа только активных пользователей в списке контактов, его
можно отменять для отдельных групп списка контактов, включив в контекстном меню
Если активен режим показа только активных пользователей в списке контактов, его можно отменять для отдельных групп списка контактов, включив в контекстном меню интересующей группы переключатель **Показывать неподключённые контакты**. 
интересующей группы переключатель **Показывать неподключённые контакты**.

Можно относительно легко навесить переключение обсуждаемого режима на
Можно относительно легко навесить переключение обсуждаемого режима на комбинацию клавиш, об этом рассказано [тут](Нетривиальные_настройки.md#Хоткей_для_переключения_между_режимами_ростера_все_и_только_онлайн). 
комбинацию клавиш, об этом рассказано
[**тут**](Нетривиальные_настройки.md#Хоткей_для_переключения_между_режимами_ростера_все_и_только_онлайн).

Имейте в виду, что для облегчения поиска нужных контактов в списке можно
Имейте в виду, что для облегчения поиска нужных контактов в списке можно применять и другие методы: 
применять и другие методы:

*  Вдумчивое распределение контактов по группам (с учётом того что любой
*  Вдумчивое распределение контактов по группам (с учётом того что любой контакт может одновременно входить в произвольное количество групп, а группы могут быть вложенными). 
   контакт может одновременно входить в произвольное количество групп, а группы
   могут быть вложенными).
*  Использование фильтрации списка контактов.
*  Использование фильтрации списка контактов. 

![(!)](../images/Hammer.png) **Сделать:** ссылки на указанные фичи
![(!)](../images/Hammer.png) **Сделать:** ссылки на указанные фичи 

### <a id="ifacetkrostershow_transport_icons"></a>::ifacetk::roster::show\_transport\_icons
## <a id="ifacetkrostershow_transport_icons"></a>::ifacetk::roster::show\_transport\_icons

Использовать оригинальные пиктограммы для транспортов/служб в окне контактов.
Использовать оригинальные пиктограммы для транспортов/служб в окне контактов. По умолчанию выключено. Включение этой и следующей настройек несколько разнообразит ваш ростер графически, если у вас есть контакты из других систем (аська, яху и т. д.) Иконки транспортов и ваших друзей, не приобщённых к Джабберу, будут выглядеть как родные, что позволит сразу отличать "иноземцев". 
По умолчанию выключено. Включение этой и следующей настройек несколько
разнообразит ваш ростер графически, если у вас есть контакты из других систем
(аська, яху и т. д.) Иконки транспортов и ваших друзей, не приобщённых к
Джабберу, будут выглядеть как родные, что позволит сразу отличать "иноземцев".

### <a id="ifacetkrostershow_transport_user_icons"></a>::ifacetk::roster::show\_transport\_user\_icons
## <a id="ifacetkrostershow_transport_user_icons"></a>::ifacetk::roster::show\_transport\_user\_icons

Использовать оригинальные пиктограммы для контактов, подключённых через
Использовать оригинальные пиктограммы для контактов, подключённых через транспорты/службы, в окне контактов. По умолчанию тоже выключено. 
транспорты/службы, в окне контактов. По умолчанию тоже выключено.

### <a id="ifacetkrosteroptionsnested"></a>::ifacetk::roster::options(nested)
## <a id="ifacetkrosteroptionsnested"></a>::ifacetk::roster::options(nested)

Отображать вложенные группы в контактах. По умолчанию выключено, а зря — это
Отображать вложенные группы в контактах. По умолчанию выключено, а зря — это очень удобная для упорядочивания ростера вещь. Проще всего объяснить это на примере. Например, у нас кроме обычных друзей Андрея и Юли, которых сложно куда-то отнести, есть друзья детства Вася, Петя и Алёша, есть друзья по универу Коля, Лена и Наташа, и есть кореши Вован и Жора, с которыми мы постоянно рубимся в "кваку". Редактируя контакты друзей, можно прописать для них соответственно группы **Друзья**, **Друзья::Друзья детства**, **Друзья::Универ**, **Друзья::Quake**. Причём можно пойти дальше и университетских друзей разбросать по курсам: **Друзья::Универ::Однокурсники** **Друзья::Универ::Остальные** В результате в ростере появится примерно такое: 
очень удобная для упорядочивания ростера вещь. Проще всего объяснить это на
примере. Например, у нас кроме обычных друзей Андрея и Юли, которых сложно
куда-то отнести, есть друзья детства Вася, Петя и Алёша, есть друзья по универу
Коля, Лена и Наташа, и есть кореши Вован и Жора, с которыми мы постоянно
рубимся в "кваку". Редактируя контакты друзей, можно прописать для них
соответственно группы **Друзья**, **Друзья::Друзья детства**,
**Друзья::Универ**, **Друзья::Quake**. Причём можно пойти дальше и
университетских друзей разбросать по курсам: **Друзья::Универ::Однокурсники**
**Друзья::Универ::Остальные** В результате в ростере появится примерно такое:

<pre>
<strong>Друзья</strong>
Андрей
Юля
   <strong>Друзья детства</strong>
   Вася
   Петя
   Алёша
   <strong>Универ</strong>
      <strong>Однокурсники</strong>
      Коля
      <strong>Остальные</strong>
      Лена
      Наташа
   <strong>Quake</strong>
   Вован
   Жора
    **Друзья**
    Андрей
    Юля
      **Друзья детства**
      Вася
      Петя
      Алёша
      **Универ**
         **Однокурсники**
         Коля
         **Остальные**
         Лена
         Наташа
       **Quake**
       Вован
       Жора
</pre>

### <a id="ifacetkrosteroptionsnested_delimiter"></a>::ifacetk::roster::options(nested\_delimiter)
## <a id="ifacetkrosteroptionsnested_delimiter"></a>::ifacetk::roster::options(nested\_delimiter)

Разделитель вложенных групп по умолчанию. По умолчанию разделителем является
Разделитель вложенных групп по умолчанию. По умолчанию разделителем является двойное двоеточие, но вы можете указать свой. Не забудьте после смены разделителя отредактировать все контакты, входившие во вложенные группы. 
двойное двоеточие, но вы можете указать свой. Не забудьте после смены
разделителя отредактировать все контакты, входившие во вложенные группы.

### <a id="ifacetkrosteroptionsshow_own_resources"></a>::ifacetk::roster::options(show\_own\_resources)
## <a id="ifacetkrosteroptionsshow_own_resources"></a>::ifacetk::roster::options(show\_own\_resources)

Показывать в контактах собственные ресурсы. Если вы сидите в Джаббере с дома и
Показывать в контактах собственные ресурсы. Если вы сидите в Джаббере с дома и с работы, используя, само собой, разные ресурсы, то может оказаться полезным наблюдать другие свои подключения. При включении этой опции в ростере в группе "Мои ресурсы" появляется как минимум ваш текущий единственный ресурс, а если их больше одного, то и остальные. Это полезно для отправки самому себе из дома на работу какой-нибудь ссылки или мудрой мысли, пришедшей спросонья, на случай, если в утреннем автобусе вас из неё вытрясет немилосердный водитель. 
с работы, используя, само собой, разные ресурсы, то может оказаться полезным
наблюдать другие свои подключения. При включении этой опции в ростере в группе
"Мои ресурсы" появляется как минимум ваш текущий единственный ресурс, а если их
больше одного, то и остальные. Это полезно для отправки самому себе из дома на
работу какой-нибудь ссылки или мудрой мысли, пришедшей спросонья, на случай,
если в утреннем автобусе вас из неё вытрясет немилосердный водитель.

### <a id="ifacetkrosteroptionschats_group"></a>::ifacetk::roster::options(chats\_group)

## <a id="ifacetkrosteroptionschats_group"></a>::ifacetk::roster::options(chats\_group)

Добавлять в контакты группу открытых разговоров. Как должно быть ясно из
Добавлять в контакты группу открытых разговоров. Как должно быть ясно из названия, эта опция добавит в ваш ростер группу, состоящую из всех открытых вами на данный момент чатов, будь то конференции, приваты конференций или чаты с пользователями из ростера. Польза от этой опции сомнительна, поэтому по умолчанию она установлена в false. 
названия, эта опция добавит в ваш ростер группу, состоящую из всех открытых
вами на данный момент чатов, будь то конференции, приваты конференций или чаты
с пользователями из ростера. Польза от этой опции сомнительна, поэтому по
умолчанию она установлена в false.

### <a id="ifacetkrosteroptionsuse_filter"></a>::ifacetk::roster::options(use\_filter)
## <a id="ifacetkrosteroptionsuse_filter"></a>::ifacetk::roster::options(use\_filter)

Использовать фильтр контактов. По умолчанию выключен. При его включении в
Использовать фильтр контактов. По умолчанию выключен. При его включении в нижней части ростера, над кнопкой смены состояний, появляется поле для ввода фильтра. Фильтром может быть любая последовательность символов. 
нижней части ростера, над кнопкой смены состояний, появляется поле для ввода
фильтра. Фильтром может быть любая последовательность символов.

Фильтрация работает по мере ввода. Например, если мы напишем туда букву "а"
Фильтрация работает по мере ввода. Например, если мы напишем туда букву "а" (русскую), то из вышеупомнутых друзей в ростере останутся Андрей, Вася, Алёша, Лена, Наташа, Вован и Жора. Добавив к этой букве "н", получим совсем маленький ростер, состоящий из Андрея и Вована. 
(русскую), то из вышеупомнутых друзей в ростере останутся Андрей, Вася, Алёша,
Лена, Наташа, Вован и Жора. Добавив к этой букве "н", получим совсем маленький
ростер, состоящий из Андрея и Вована.

Нажатие клавиши Escape очищает поле ввода, возвращая список контактов в
Нажатие клавиши Escape очищает поле ввода, возвращая список контактов в исходное состояние. 
исходное состояние.

### <a id="ifacetkrosteroptionsmatch_jids"></a>::ifacetk::roster::options(match\_jids)
## <a id="ifacetkrosteroptionsmatch_jids"></a>::ifacetk::roster::options(match\_jids)

Подбирать не только псевдоним, но и JID в фильтре контактов. Добавляет в фильтр
Подбирать не только псевдоним, но и JID в фильтре контактов. Добавляет в фильтр возможность поиска и по JID'ам, а не только по именам контактов. По умолчанию выключено. 
возможность поиска и по JID'ам, а не только по именам контактов. По умолчанию
выключено.

### <a id="ifacetkrosteroptionsfree_drop"></a>::ifacetk::roster::options(free\_drop)
## <a id="ifacetkrosteroptionsfree_drop"></a>::ifacetk::roster::options(free\_drop)

При перетаскивании контакта из одной группы контактов в другую, его можно
При перетаскивании контакта из одной группы контактов в другую, его можно отпустить не только над названием группы, но и над любым контактом в этой группе. Если вы не знали, пользователей можно сортировать по группам обычным Drag'n'Drop'ом. Назначение этой опции, думаю, понятно. По умолчанию включено. 
отпустить не только над названием группы, но и над любым контактом в этой
группе. Если вы не знали, пользователей можно сортировать по группам обычным
Drag'n'Drop'ом. Назначение этой опции, думаю, понятно. По умолчанию включено.

### <a id="ifacetkrosteroptionsshow_subscription"></a>::ifacetk::roster::options(show\_subscription)
## <a id="ifacetkrosteroptionsshow_subscription"></a>::ifacetk::roster::options(show\_subscription)

Показывать тип подписки на присутствие во всплывающем окне в контактах. По
Показывать тип подписки на присутствие во всплывающем окне в контактах. По умолчанию выключено. Тип подписки может быть "from" (контакт вас авторизовал, а вы его нет), "to" (наоборот) и "both" (вы оба друг друга авторизовали). Всплывающее окно, или тултип, появляется, если навести мышью на контакт. 
умолчанию выключено. Тип подписки может быть "from" (контакт вас авторизовал, а
вы его нет), "to" (наоборот) и "both" (вы оба друг друга авторизовали).
Всплывающее окно, или тултип, появляется, если навести мышью на контакт.

### <a id="ifacetkrosteroptionsshow_conference_user_info"></a>::ifacetk::roster::options(show\_conference\_user\_info)
## <a id="ifacetkrosteroptionsshow_conference_user_info"></a>::ifacetk::roster::options(show\_conference\_user\_info)

Показывать детальную информацию об участниках конференции во всплывающем окне,
Показывать детальную информацию об участниках конференции во всплывающем окне, соответствующем конференции, в контактах. Тоже по умолчанию выключено. Если включить, то при наведении мыши на закладку конференции в ростере появляется тултип со списком участников этой конфы, причём неважно, находитесь вы сами в ней или нет. Для того, чтобы эта информация появилась, необходимо включить опцию [::plugins::conferenceinfo::options(autoask)](Настройки.md#pluginsconferenceinfooptionsautoask), описанную выше. 
соответствующем конференции, в контактах. Тоже по умолчанию выключено. Если
включить, то при наведении мыши на закладку конференции в ростере появляется
тултип со списком участников этой конфы, причём неважно, находитесь вы сами в
ней или нет. Для того, чтобы эта информация появилась, необходимо включить
опцию
[**::plugins::conferenceinfo::options(autoask)**](#pluginsconferenceinfooptionsautoask),
описанную выше.

## <a id="Sound"></a>Sound
Настройки звука.
# <a id="Sound"></a>Sound
Настройки звука. 

## <a id="State"></a>State
Настройки сохранения состояния Ткаббера.
# <a id="State"></a>State
Настройки сохранения состояния Ткаббера. 

## <a id="Warnings"></a>Warnings
Параметры отображения предупреждений.
# <a id="Warnings"></a>Warnings
Параметры отображения предупреждений. 

### <a id="tls_warnings"></a>::tls\_warnings
## <a id="tls_warnings"></a>::tls\_warnings

Показывать предупреждения SSL. По умолчанию включено.
Показывать предупреждения SSL. По умолчанию включено. 

Если эта опция включена, при каждой попытке защитить соединение с сервером при
Если эта опция включена, при каждой попытке защитить соединение с сервером при помощи протокола TLS (SSL), в ходе которой не удаётся убедиться в том, что сервер "настоящий" (то есть мы не доверяем представленному им сертификату), Ткаббер будет показывать предупреждающий диалог, в котором будет указана причина проблемы и подробная информация о сертификате сервера. В данном диалоге Ткаббер предложит отказаться от соединения (действие по умолчанию) или продолжить его на ваш страх и риск. 
помощи протокола TLS (SSL), в ходе которой не удаётся убедиться в том, что
сервер "настоящий" (то есть мы не доверяем представленному им сертификату),
Ткаббер будет показывать предупреждающий диалог, в котором будет указана
причина проблемы и подробная информация о сертификате сервера. В данном диалоге
Ткаббер предложит отказаться от соединения (действие по умолчанию) или
продолжить его на ваш страх и риск.

Ваше отношение к этой опции должно основываться на том уровне защиты, который
вам нужен от протокола TLS: если вам достаточно того, что TLS будет шифровать
трафик между вами и сервером, а проверка подлинности сервера вас не волнует
Ваше отношение к этой опции должно основываться на том уровне защиты, который вам нужен от протокола TLS: если вам достаточно того, что TLS будет шифровать трафик между вами и сервером, а проверка подлинности сервера вас не волнует настолько чтобы повозиться с организацией доверия к этому серверу, можете данную опцию отключить чтобы избавиться от лишних действий при каждом подключении. В противном случае изучайте [эту статью](Проверка_сертификата_сервера.md). 


настолько чтобы повозиться с организацией доверия к этому серверу, можете
данную опцию отключить чтобы избавиться от лишних действий при каждом
подключении. В противном случае изучайте [**эту статью**](Проверка_сертификата_сервера.md).

Changes to wiki/ru/Начинающим.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19











20
21
22
23
24


25
26
27
28
29
30

31
32
33
34
35
36
37
38

39
40
41
42

43
44

45
46
47
48
49
50
51
52
53
54
55

56
57
58
59



60
61
62
63

64
65
66
67

68
69

70
71
72
73
74
75
76
77



78
79
80
81
82
83
84
85
86
87
88

89
90
91
92
93
94
95
96
97

98
99
100
101

102
103
104
105
106
107
108
109

110
111
112
113



114
115
116

117
118
119

120
121
122


123
124

125
126

127
128
129
130
131
132
133
134

135
136

137
138
139
140

141
142

143
144
145
146
147
148

149
150

151
152
153
154

155
156

157
158

159
160
161
162
163
164
165
166
167
168
169

170
171

172
173
174
175
176
177
178

179
180
181
182
183
184
185
186




187

188
189

190
191
192
193
194
195
196

197
198
199
200
201
202
203
204
205

206
207

208
209
210
211
212
213
214
215
216
217
218
219
220
221

222
223
224
225
226
227
228
229
230

231
232

233
234
235
236
237
238
239
240
241
242
243
244

245
246

247
248
249
250
251
252


253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268


269
270
271
272
273






274

275
276

277
278

279
280
281
282
283
284
285
286

287
288

289
290

291
292

293
294

295
296

297
298
299
300
301
302

303
304
305

306
307

308
309
310

311
312
313
314

315
316

317
318
319
320

321
322
323
324
325
326
327
328
329
330
331

332
333
334

335
336
337


338
339
340
341
342

343
344
345


346
347


348
349
350
351
352
353
354
355
356
357


358
359
360
361
362
363
364


365
366


367
368
369


370

371
372
373
374
375
376





377
378
379
380
381
382
383
384
385
386
387
388
389
390
391













392
393
394
395







396
397
398

399
400

401
402
403
404

405
406

407
408
409
410
411

412
413

414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454


455
456
457


458
459
460
461
462
463
464
465

466
467

468
469
470
471
472
473
474
475
476
477
478

479
480
481
482
483
484
485
486
487
488

489

490

491
492
493
494







495




496

497
498

499
500
501
502
503
504

505
506
507
508
509

510
511

512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531


532

533
534
535







536
537
538
539
540
541
542
543

544
545
546
547


548
549
550
551

552
553
554
555
556
557

558
559
560

561
562

563
564
565


566
567
568
569
570

571
572
573
574
575
576

577
578
579
580
581

582
583
584
585
586

587
588
589
590
591
592
593
594


595
596
597
598
599
600
601
602
603
604
605
606



607
608
609
1
2
3
4
5
6
7
8
9
10










11
12
13
14
15
16
17
18
19
20
21
22
23
24


25
26




27

28






29

30


31

32
33

34







35



36




37
38
39




40


41

42
43

44




45



46
47
48











49









50




51






52

53
54



55
56
57



58

59

60
61


62
63


64


65








66
67

68
69



70
71

72




73

74
75

76


77

78
79

80
81

82









83

84
85

86





87

88







89
90
91
92
93

94
95

96





97

98







99

100
101

102












103

104
105








106
107

108
109











110
111

112
113





114
115
















116
117





118
119
120
121
122
123

124
125

126
127

128






129

130
131

132
133

134
135

136
137

138
139

140




141

142

143

144
145

146

147

148


149

150
151

152


153

154











155



156



157
158





159



160
161


162
163










164
165







166
167


168
169



170
171

172
173





174
175
176
177
178
179














180
181
182
183
184
185
186
187
188
189
190
191
192




193
194
195
196
197
198
199

200

201
202

203


204

205
206

207



208

209
210

211









































212
213
214


215
216



217




218
219

220
221










222








223

224
225
226

227




228
229
230
231
232
233
234
235
236
237
238
239

240
241

242




243

244



245

246
247

248




















249
250
251
252



253
254
255
256
257
258
259








260




261
262




263






264

265

266
267

268
269


270
271



272

273




274

275



276

277



278

279





280


281
282








283



284
285
286




+








-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+



-
-
+
+
-
-
-
-

-
+
-
-
-
-
-
-

-
+
-
-

-
+

-
+
-
-
-
-
-
-
-

-
-
-
+
-
-
-
-
+
+
+
-
-
-
-
+
-
-

-
+

-
+
-
-
-
-

-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
+
-
-
-
-
+
-
-
-
-
-
-

-
+

-
-
-
+
+
+
-
-
-
+
-

-
+

-
-
+
+
-
-
+
-
-
+
-
-
-
-
-
-
-
-
+

-
+

-
-
-
+

-
+
-
-
-
-

-
+

-
+
-
-

-
+

-
+

-
+
-
-
-
-
-
-
-
-
-

-
+

-
+
-
-
-
-
-

-
+
-
-
-
-
-
-
-

+
+
+
+
-
+

-
+
-
-
-
-
-

-
+
-
-
-
-
-
-
-

-
+

-
+
-
-
-
-
-
-
-
-
-
-
-
-

-
+

-
-
-
-
-
-
-
-
+

-
+

-
-
-
-
-
-
-
-
-
-
-
+

-
+

-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
+
+
+
+
+
+
-
+

-
+

-
+
-
-
-
-
-
-

-
+

-
+

-
+

-
+

-
+

-
+
-
-
-
-

-
+
-

-
+

-
+
-

-
+
-
-

-
+

-
+
-
-

-
+
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
+
-
-
-
+
+
-
-
-
-
-
+
-
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
+
+
-
-
+
+
-
-
-
+
+
-
+

-
-
-
-
-
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
-

-
+

-
+
-
-

-
+

-
+
-
-
-

-
+

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+

-
-
+
+
-
-
-

-
-
-
-
+

-
+

-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-

-
+

+
-
+
-
-
-
-
+
+
+
+
+
+
+

+
+
+
+
-
+

-
+
-
-
-
-

-
+
-
-
-

-
+

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+

+
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
-
-
-
-
+
+
-
-
-
-
+
-
-
-
-
-
-
+
-

-
+

-
+

-
-
+
+
-
-
-

-
+
-
-
-
-

-
+
-
-
-

-
+
-
-
-

-
+
-
-
-
-
-

-
-
+
+
-
-
-
-
-
-
-
-

-
-
-
+
+
+
-
-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Начинающим/index.html)


# Начинающим

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 Установка и быстрый старт](#Установка_и_быстрый_старт)
   * [1.1 Окно логина](#Окно_логина)
   * [1.2 Создание нового аккаунта](#Создание_нового_аккаунта)
   * [1.3 Дискавери. Первые шаги](#Дискавери._Первые_шаги)
   * [1.4 Добавление контактов в ростер](#Добавление_контактов_в_ростер)
   * [1.5 Некоторые полезные команды](#Некоторые_полезные_команды)
   * [1.6 Дискавери. Добавляем контакты из:](#Дискавери._Добавляем_контакты_из)
      * [1.6.1 ICQ](#ICQ)
      * [1.6.2 IRC](#IRC)
      * [1.6.3 RSS](#RSS)
      * [1.6.4 Дополнительное чтение по теме](#Дополнительное_чтение_по_теме)
 * [1.1 Окно логина](#Окно_логина)
 * [1.2 Создание нового аккаунта](#Создание_нового_аккаунта)
 * [1.3 Дискавери. Первые шаги](#Дискавери._Первые_шаги)
 * [1.4 Добавление контактов в ростер](#Добавление_контактов_в_ростер)
 * [1.5 Некоторые полезные команды](#Некоторые_полезные_команды)
 * [1.6 Дискавери. Добавляем контакты из:](#Дискавери._Добавляем_контакты_из)
  * [1.6.1 ICQ](#ICQ)
  * [1.6.2 IRC](#IRC)
  * [1.6.3 RSS](#RSS)
   * [1.6.3 Частые вопросы по RSS](#Частые_вопросы_по_RSS)
  * [1.6.4 Дополнительное чтение по теме](#Дополнительное_чтение_по_теме)
* [2 Локализация Ткаббера](#Локализация_Ткаббера)
* [3 Настройка Ткаббера](#Настройка_Ткаббера)

## <a id="Установка_и_быстрый_старт"></a>Установка и быстрый старт
Выбор [дистрибутива](http://tkabber.jabber.ru/download) зависит от операционной
# <a id="Установка_и_быстрый_старт"></a>Установка и быстрый старт
Выбор [дистрибутива](http://tkabber.jabber.ru/download) зависит от операционной системы, в которой вы работаете. Инсталляция Ткаббера в среде Linux подробно [описана](http://tkabber.jabber.ru/tuto-install-tkabber) на сайте [http://tkabber.jabber.ru](http://tkabber.jabber.ru) и проблем вызвать не должна. Под Windows инсталляция тоже проходит гладко. 
системы, в которой вы работаете. Инсталляция Ткаббера в среде Linux подробно
[описана](http://tkabber.jabber.ru/tuto-install-tkabber) на сайте
[http://tkabber.jabber.ru](http://tkabber.jabber.ru) и проблем вызвать не
должна. Под Windows инсталляция тоже проходит гладко.

> _Если вы только собираетесь познакомиться с Ткаббером, пожалуйста, **не
 _Если вы только собираетесь познакомиться с Ткаббером, пожалуйста, **не берите старые и "левые" версии** (из серии "друг принёс на болванке" или "в нашей локалке вот такую советуют") — если у вас возникнут с ней проблемы, шансы получить помощь "из первых рук" (от разработчиков и активных пользователей) у вас резко уменьшатся: скорее всего вам предложат либо поставить текущую официальную версию, либо пойти поговорить с авторами вашей "левой" версии._ 
  берите старые и "левые" версии** (из серии "друг принёс на болванке" или "в
  нашей локалке вот такую советуют") — если у вас возникнут с ней проблемы,
  шансы получить помощь "из первых рук" (от разработчиков и активных
  пользователей) у вас резко уменьшатся: скорее всего вам предложат либо
  поставить текущую официальную версию, либо пойти поговорить с авторами вашей
  "левой" версии._

Поэтому скачайте текущую стабильную версию подходящего вам дистрибутива
Поэтому скачайте текущую стабильную версию подходящего вам дистрибутива Ткаббера с [официального сайта](http://tkabber.jabber.ru/download), установите его и переходите к процессу запуска, описанному ниже. 
Ткаббера с [официального сайта](http://tkabber.jabber.ru/download), установите
его и переходите к процессу запуска, описанному ниже.

Текущей стабильной версией является 0.11.1.
Текущей стабильной версией является 0.11.1. 

**Примечание:** Ткаббер представлен несколькими "дистрибутивами" — то есть
**Примечание:** Ткаббер представлен несколькими "дистрибутивами" — то есть различными "упаковками" одного и того же, по-сути, содержимого, — что создаёт определённые проблемы для начинающих, которые встают перед выбором. Чтобы помочь вам с _осознанным_ выбором, мы написали специальную [статью про дистрибутивы Ткаббера](Дистрибутивы__которые_мы_выбираем.md). К сожалению, она получилась большой и сложной, поэтому, если вы рвётесь в бой и хотите "прямо сейчас" запустить Ткаббер, рискнём предложить простой расклад: 
различными "упаковками" одного и того же, по-сути, содержимого, — что создаёт
определённые проблемы для начинающих, которые встают перед выбором. Чтобы
помочь вам с _осознанным_ выбором, мы написали специальную
[**статью про дистрибутивы Ткаббера**](Дистрибутивы__которые_мы_выбираем.md).
К сожалению, она
получилась большой и сложной, поэтому, если вы рвётесь в бой и хотите "прямо
сейчас" запустить Ткаббер, рискнём предложить простой расклад:

* Если у вас Windows, возьмите [старпак](http://tkabber.jabber.ru/starpack)
  (один файл, не требует установки) или
  [ткаббер-пак](http://tkabber.jabber.ru/tkabber-pack) (инсталлятор "всё в
*  Если у вас Windows, возьмите [старпак](http://tkabber.jabber.ru/starpack) (один файл, не требует установки) или [ткаббер-пак](http://tkabber.jabber.ru/tkabber-pack) (инсталлятор "всё в одном"). 
  одном").
* Если у вас Unix, поищите готовый пакет под свою систему.
   * Если готового пакета нет, вашим Unix'ом является Linux,
      * ...и это [Debian](http://www.debian.org), возьмите _всё, что нужно,_
*  Если у вас Unix, поищите готовый пакет под свою систему. 
 *  Если готового пакета нет, вашим Unix'ом является Linux, 
  *  ...и это [Debian](http://www.debian.org), возьмите _всё, что нужно,_ [отсюда](http://people.debian.org/~sgolovan/debian/); 
        [отсюда](http://people.debian.org/~sgolovan/debian/);
      * ...и это что-то другое, попробуйте
	[старпак](http://tkabber.jabber.ru/tkabber-starpack) (учтите, что
	[последний старпак под линукс](http://tkabber.jabber.ru/tkabber-starpack/0.10)
  *  ...и это что-то другое, попробуйте [старпак](http://tkabber.jabber.ru/tkabber-starpack) (учтите, что [последний старпак под линукс](http://tkabber.jabber.ru/tkabber-starpack/0.10) выпускался в бытность версии 0.10, то есть, он весьма замшелый, но на попробовать сойдёт) или ставьте руками согласно [этой таблице](http://tkabber.jabber.ru/dependencies). 
	выпускался в бытность версии 0.10, то есть, он весьма замшелый, но на попробовать
	сойдёт) или ставьте руками согласно [этой таблице](http://tkabber.jabber.ru/dependencies).

### <a id="Окно_логина"></a>Окно логина
## <a id="Окно_логина"></a>Окно логина

Допустим, пакет установлен и запущен. Появляется небольшой splash-screen с
Допустим, пакет установлен и запущен. Появляется небольшой splash-screen с именами авторов проекта и прогресс-баром, показывающим, как идёт загрузка. Затем открываются главное окно программы и окно логина. В окне логина имеется несколько вкладок, изрядно загруженных информацией, но на самом деле нам нужны далеко не все опции. Рассмотрим все вкладки по порядку. 
именами авторов проекта и прогресс-баром, показывающим, как идёт загрузка.
Затем открываются главное окно программы и окно логина. В окне логина имеется
несколько вкладок, изрядно загруженных информацией, но на самом деле нам нужны
далеко не все опции. Рассмотрим все вкладки по порядку.

* **Учётная запись**
   * _Пользователь:_ Здесь пишем желаемый ник (к примеру, testirovanie).
   * _Сервер:_ Сервер, на котором вы хотите создать учётную запись. Выбор его
*  **Учётная запись** 
 *  _Пользователь:_ Здесь пишем желаемый ник (к примеру, testirovanie). 
 *  _Сервер:_ Сервер, на котором вы хотите создать учётную запись. Выбор его для новичка — нетривиальная задача. Если вы хотите зарегистрироваться на одном из серверов [этого списка](http://www.jabber.org/user/publicservers.shtml), посмотрите, есть ли на нём гейты — "ворота" в мир ICQ, MSN, Yahoo, почтовые гейты, RSS-feed'ы. Вам ведь наверняка захочется использовать возможности протокола Jabber на всю катушку. Также следует обратить внимание на страну, в которой этот сервер работает. Если вы не знаете немецкого языка, регистрироваться на немецком сервере — не лучший шаг, если есть другие с такими же сервисами. Впрочем, может оказаться, что вы хотите зарегистрироваться на jabber-сервере вашей фирмы, университета или интернет-провайдера. Тогда всё проще — вводите его имя, и все дела. 
     для новичка — нетривиальная задача. Если вы хотите зарегистрироваться на
     одном из серверов [этого списка](http://www.jabber.org/user/publicservers.shtml), посмотрите, есть
     ли на нём гейты — "ворота" в мир ICQ, MSN, Yahoo, почтовые гейты,
     RSS-feed'ы. Вам ведь наверняка захочется использовать возможности
     протокола Jabber на всю катушку. Также следует обратить внимание на
     страну, в которой этот сервер работает. Если вы не знаете немецкого языка,
     регистрироваться на немецком сервере — не лучший шаг, если есть другие с
     такими же сервисами. Впрочем, может оказаться, что вы хотите
     зарегистрироваться на jabber-сервере вашей фирмы, университета или
     интернет-провайдера. Тогда всё проще — вводите его имя, и все дела.
   * _Пароль:_ тут всё должно быть ясно — латинские буквы верхнего и нижнего
 *  _Пароль:_ тут всё должно быть ясно — латинские буквы верхнего и нижнего регистров и цифры. Идеальный вариант — не менее 6 символов, буквы разных регистров и цифры вперемешку, что-нибудь вроде _Xjh7W9bV_. Конечно, при коннекте через защищённое соединение (SSL) так изголяться не обязательно, но лучше не использовать английские слова, а писать что-нибудь невразумительное, опять же, добавляя цифры и играя с регистром: _92fLuMpIk29_. Такой пароль сравнительно легко запомнить и не очень обременительно набирать, но он гораздо надёжнее, чем _vasyarybkin_ или _sunlight_. 
     регистров и цифры. Идеальный вариант — не менее 6 символов, буквы разных
     регистров и цифры вперемешку, что-нибудь вроде _Xjh7W9bV_. Конечно, при
     коннекте через защищённое соединение (SSL) так изголяться не обязательно,
     но лучше не использовать английские слова, а писать что-нибудь
     невразумительное, опять же, добавляя цифры и играя с регистром:
     _92fLuMpIk29_. Такой пароль сравнительно легко запомнить и не очень
     обременительно набирать, но он гораздо надёжнее, чем _vasyarybkin_ или
     _sunlight_.
   * _Использовать хэш. пароль:_ Отметьте эту галочку обязательно, чтобы по
 *  _Использовать хэш. пароль:_ Отметьте эту галочку обязательно, чтобы по крайней мере начинающие кул-хацкеры ваш пароль не прочитали. Лишняя безопасность ещё никому не вредила, тем более, что кроме нажатия этой галки делать больше ничего не надо. 
     крайней мере начинающие кул-хацкеры ваш пароль не прочитали. Лишняя
     безопасность ещё никому не вредила, тем более, что кроме нажатия этой
     галки делать больше ничего не надо.
   * _Ресурс и Приоритет:_ Я изменил ресурс, но вы оставьте всё как есть. В
 *  _Ресурс и Приоритет:_ Я изменил ресурс, но вы оставьте всё как есть. В двух словах о ресурсе: можно логиниться к одной и той же учётной записи с разных клиентов и даже машин, но при этом нужно, чтобы каждый раз был указан новый ресурс. Сюда можно писать название клиента (Psi, Tkabber, Bombus — обычно своё имя выставляет сам клиент), ваше местоположение (Home, Work) и т.д. Приоритет тоже становится нужен, когда запущено несколько клиентов. Подробнее об этом мы расскажем в другой статье. 
     двух словах о ресурсе: можно логиниться к одной и той же учётной записи с
     разных клиентов и даже машин, но при этом нужно, чтобы каждый раз был
     указан новый ресурс. Сюда можно писать название клиента (Psi, Tkabber,
     Bombus — обычно своё имя выставляет сам клиент), ваше местоположение
     (Home, Work) и т.д. Приоритет тоже становится нужен, когда запущено
     несколько клиентов. Подробнее об этом мы расскажем в другой статье.

![Окно логина, вкладка "Учётная запись"](../images/Tkabber-Login-01-Credentials.png)
![Окно логина, вкладка "Учётная запись"](../images/Tkabber-Login-01-Credentials.png) 

* **Соединение**
   * _Порт для подключения:_ Должен стоять 5222. Изменять его не надо.
   * _Подключиться через альтернативный сервер:_ Пока что тоже трогать ничего
*  **Соединение** 
 *  _Порт для подключения:_ Должен стоять 5222. Изменять его не надо. 
 *  _Подключиться через альтернативный сервер:_ Пока что тоже трогать ничего не надо. Эта опция может понадобиться в определённых случаях, но не сейчас. 
     не надо. Эта опция может понадобиться в определённых случаях, но не
     сейчас.
   * _Закрыть открытые соединения:_ Тут можно и отметить на будущее, чтобы при
 *  _Закрыть открытые соединения:_ Тут можно и отметить на будущее, чтобы при перелогине открытые соединения закрывались и не мешались. 
     перелогине открытые соединения закрывались и не мешались.

![Окно логина, вкладка "Соединение"](../images/Tkabber-Login-02-Connection.png)
![Окно логина, вкладка "Соединение"](../images/Tkabber-Login-02-Connection.png) 

* **SSL**
   * _Использовать SSL:_ Это безусловно надо отметить, вы ведь не хотите, чтобы
*  **SSL** 
 *  _Использовать SSL:_ Это безусловно надо отметить, вы ведь не хотите, чтобы ваши разговоры подслушивались, а пароли перехватывались? 
     ваши разговоры подслушивались, а пароли перехватывались?
   * _STARTTLS:_ Тип безопасного соединения. Сначала пробуйте его.
 *  _STARTTLS:_ Тип безопасного соединения. Сначала пробуйте его. 
   * _Legacy SSL:_ Устаревшее SSL-соединение. В Ткаббере присутствует для
     совместимости со старыми серверами, на которых нет поддержки STARTTLS.
 *  _Legacy SSL:_ Устаревшее SSL-соединение. В Ткаббере присутствует для совместимости со старыми серверами, на которых нет поддержки STARTTLS. Если и через Legacy SSL законнектиться не удаётся, отключите "Использовать SSL" — должно заработать. _Работать без SSL — крайняя мера, и в этом случае нужно обязательно отметить галочку "Использовать хэш. пароль" на вкладке "Учётная запись" — это будет единственная защита вашего пароля. Если же вдруг выяснится, что сервер не поддерживает шифрование паролей, мы искренне советуем забыть имя этого сервера и выбрать другой, благо их полно._ 
     Если и через Legacy SSL законнектиться не удаётся, отключите "Использовать
     SSL" — должно заработать. _Работать без SSL — крайняя мера, и в этом
     случае нужно обязательно отметить галочку "Использовать хэш. пароль" на
     вкладке "Учётная запись" — это будет единственная защита вашего пароля.
     Если же вдруг выяснится, что сервер не поддерживает шифрование паролей, мы
     искренне советуем забыть имя этого сервера и выбрать другой, благо их
     полно._
   * _SSL порт:_ Должен стоять 5223.
 *  _SSL порт:_ Должен стоять 5223. 

![Окно логина, вкладка "SSL"](../images/Tkabber-Login-03-Authentication.png)
![Окно логина, вкладка "SSL"](../images/Tkabber-Login-03-Authentication.png) ![Окно логина, вкладка "Аутентификация"](../images/Tkabber-Login-04-Stream-features.png) 

![Окно логина, вкладка "Аутентификация"](../images/Tkabber-Login-04-Stream-features.png)

![(!)](../images/Hammer.png) **Сделать:** rearrange
![(!)](../images/Hammer.png) **Сделать:** rearrange 

* **Прокси:** Если вы находитесь за файерволлом (например, в сети университета
*  **Прокси:** Если вы находитесь за файерволлом (например, в сети университета или на работе) и не можете законнектиться напрямую, включите опцию "Использовать прокси" и пропишите параметры вашего прокси-сервера: адрес, порт, имя пользователя и пароль. Если эти данные вам не известны, можете узнать их у вашего системного администратора. 
  или на работе) и не можете законнектиться напрямую, включите опцию
  "Использовать прокси" и пропишите параметры вашего прокси-сервера: адрес,
  порт, имя пользователя и пароль. Если эти данные вам не известны, можете
  узнать их у вашего системного администратора.

![Окно логина, вкладка "Прокси"](../images/Tkabber-Login-06-Proxy-Server.png)
![Окно логина, вкладка "Прокси"](../images/Tkabber-Login-06-Proxy-Server.png) 

* **HTTP-подключение:** Если вдруг все остальные методы не сработали,
*  **HTTP-подключение:** Если вдруг все остальные методы не сработали, попробуйте отметить эту галочку. Но скорее всего вам этой опцией пользоваться не придётся. 
  попробуйте отметить эту галочку. Но скорее всего вам этой опцией пользоваться
  не придётся.

![Окно логина, вкладка "HTTP-подключение"](../images/Tkabber-Login-05-HTTP-Polling.png)
![Окно логина, вкладка "HTTP-подключение"](../images/Tkabber-Login-05-HTTP-Polling.png) 

### <a id="Создание_нового_аккаунта"></a>Создание нового аккаунта
## <a id="Создание_нового_аккаунта"></a>Создание нового аккаунта

Как видите, заполнять пришлось лишь самую первую вкладку. Жмём кнопку
Как видите, заполнять пришлось лишь самую первую вкладку. Жмём кнопку соединения. Если вы запускаете Ткаббер первый раз в жизни, аккаунта у вас на сервере нет. Программа, однако, попытается залогиниться, используя введённые вами пользовательское имя и пароль, но, не найдя на сервере учётной записи, предложит вам создать новую. Соглашайтесь, и через секунду ваш аккаунт будет создан. Но может оказаться и так, что учётная запись с таким именем на этом сервере уже существует. В этом случае Ткаббер снова выведет окошко с предупреждением об ошибке авторизации. Тогда нужно ответить "Нет", а затем попытаться залогиниться снова, придумав новый ник, либо попробовать другой сервер, где, возможно, этот ник ещё не занят. 
соединения. Если вы запускаете Ткаббер первый раз в жизни, аккаунта у вас на
сервере нет. Программа, однако, попытается залогиниться, используя введённые
вами пользовательское имя и пароль, но, не найдя на сервере учётной записи,
предложит вам создать новую. Соглашайтесь, и через секунду ваш аккаунт будет
создан. Но может оказаться и так, что учётная запись с таким именем на этом
сервере уже существует. В этом случае Ткаббер снова выведет окошко с
предупреждением об ошибке авторизации. Тогда нужно ответить "Нет", а затем
попытаться залогиниться снова, придумав новый ник, либо попробовать другой
сервер, где, возможно, этот ник ещё не занят.

![Сообщение сервера об ошибке авторизации и одновременно предложение создать новый аккаунт](../images/Tkabber-New-Account-Creation-Query.png)
![Сообщение сервера об ошибке авторизации и одновременно предложение создать новый аккаунт](../images/Tkabber-New-Account-Creation-Query.png) 

Если всё в порядке, вы получаете сообщение от сервера "Добро пожаловать" (не
Если всё в порядке, вы получаете сообщение от сервера "Добро пожаловать" (не обязательно именно такое, и не факт, что оно вообще будет - всё зависит от настроек каждого конкретного сервера, но скорее всего вас как-то известят об успешной регистрации). Впрочем, на сервере jabber.ru по неизвестной причине это сообщение выводится даже тогда, когда вы пытаетесь зарегистрировать учётную запись с уже существующим именем. 
обязательно именно такое, и не факт, что оно вообще будет - всё зависит от
настроек каждого конкретного сервера, но скорее всего вас как-то известят об
успешной регистрации). Впрочем, на сервере jabber.ru по неизвестной причине это
сообщение выводится даже тогда, когда вы пытаетесь зарегистрировать учётную
запись с уже существующим именем.

![Сообщение сервера об успешной регистрации нового аккаунта](../images/Welcome_ru.png)
![Сообщение сервера об успешной регистрации нового аккаунта](../images/Welcome_ru.png) 

### <a id="Дискавери._Первые_шаги"></a>Дискавери. Первые шаги

Допустим, новый аккаунт вы создали, но разговаривать пока не с кем — знакомых в
мире Jabber у вас нет. Что ж, пойдём их искать. В верхней части окна программы
имеется панель инструментов (тулбар), на которой есть несколько кнопок. Вторая
слева — в виде земного шара — это Обзор служб, ваш провожатый по серверу.

## <a id="Дискавери._Первые_шаги"></a>Дискавери. Первые шаги

Допустим, новый аккаунт вы создали, но разговаривать пока не с кем — знакомых в мире Jabber у вас нет. Что ж, пойдём их искать. В верхней части окна программы имеется панель инструментов (тулбар), на которой есть несколько кнопок. Вторая слева — в виде земного шара — это Обзор служб, ваш провожатый по серверу. 

![Меню и панель инструментов](../images/Tkabber-Toolbar.png)
![Меню и панель инструментов](../images/Tkabber-Toolbar.png) 

Нажав её, вы увидите окно, отображающее какой-то непонятный древовидный список.
Нажав её, вы увидите окно, отображающее какой-то непонятный древовидный список. Нас интересуют самые нижние пункты списка, написанные шрифтом чёрного цвета. Поищите среди них что-то вроде conference.jabber.ru и дважды кликните на этом элементе. Откроется список конференций (комнат, групповых чатов), имеющихся на вашем сервере. Выберите интересующее вас название и сделайте двойной клик уже на нём, чтобы просмотреть параметры этой комнаты. 
Нас интересуют самые нижние пункты списка, написанные шрифтом чёрного цвета.
Поищите среди них что-то вроде conference.jabber.ru и дважды кликните на этом
элементе. Откроется список конференций (комнат, групповых чатов), имеющихся на
вашем сервере. Выберите интересующее вас название и сделайте двойной клик уже
на нём, чтобы просмотреть параметры этой комнаты.

Обратите внимание на число в скобках, идущее после имени комнаты — это
Обратите внимание на число в скобках, идущее после имени комнаты — это количество людей, которые там сейчас общаются. Очевидно, что если это число — 0, заходить туда смысла нет. Если же в комнате кто-то есть, в конце списка вы увидите ники находящихся там людей. Чтобы войти в комнату, щёлкните на "Присоединиться к конференции" — откроется её окно, и вы можете начинать разговаривать. Общение в конференции — увлекательное занятие как само по себе, так и в плане настройки всевозможных эффектов и полезностей. Подробнее об этом смотрите ниже. 
количество людей, которые там сейчас общаются. Очевидно, что если это число —
0, заходить туда смысла нет. Если же в комнате кто-то есть, в конце списка вы
увидите ники находящихся там людей. Чтобы войти в комнату, щёлкните на
"Присоединиться к конференции" — откроется её окно, и вы можете начинать
разговаривать. Общение в конференции — увлекательное занятие как само по себе,
так и в плане настройки всевозможных эффектов и полезностей. Подробнее об этом
смотрите ниже.

![Обзор служб](../images/120px-Discovery_ru.png)
![](../images/120px-Discovery_ru.png)

![Обзор служб 1](../images/116px-Discovery_conference_1_ru.png)
Обзор служб 

![Обзор служб 2](../images/120px-Discovery_conference_2_ru.png)

Если вы уже знаете, к какой конференции хотите подключиться, то совсем не
обязательно проделывать все эти телодвижения. Нажмите третью по счёту кнопку —
"Присоединиться к группе" — и в открывшемся диалоге заполните поля "Группа",
"Сервер" и "Псевдоним". Например, если вы зарегистрировали аккаунт на сервере
jabber.ru и хотите зайти в комнату Talks, введите в первом поле **talks**, во
втором — **conference.jabber.ru**. Псевдоним уже будет стоять — ваш ник, под
которым вы зарегистрировались на сервере; можете оставить его как есть, а
можете поменять, если вдруг захочется. Если комната защищена паролем, то вы
должны ввести его в последнее поле.

![Другой способ подключения к конференции](../images/Tkabber-Join-Conference.png)
![](../images/116px-Discovery_conference_1_ru.png)

Чтобы каждый раз не лазить в Дискавери, можно добавить конференцию в ростер.
Это очень просто: **Службы → Добавить конференцию в контакты...** Появится
небольшое окошечко, где нужно ввести всего два параметра: группу и сервер,
причём поле "сервер" уже заполнено, и его нужно править лишь в том случае, если
вы добавляете группу с другого сервера, не с того, на котором вы залогинены. В
поле "группа" надо написать название комнаты, например, tkabber или talks.
Другой способ — перетащить конференцию из Дискавери в ростер мышью. Работает
drag-and-drop как в Виндовс, так и в Линукс.
Обзор служб 1 

### <a id="Добавление_контактов_в_ростер"></a>Добавление контактов в ростер
![](../images/120px-Discovery_conference_2_ru.png)

Может статься, у вас уже есть друг, который давно уже использует Jabber для
общения, или вы познакомились с кем-нибудь в комнате, и теперь хотите добавить
его в свой список друзей. Жмём самую левую кнопку в виде человечка с зелёным
плюсиком рядом — "Добавить нового пользователя". Выскакивает окошко с двумя
полями. В верхнее, маленькое, надо написать JID (Jabber ID, или полный
Jabber-адрес вашего друга): к примеру, petia@jabberserver.ru — то есть, и ник,
и "собачку", и имя сервера. Во втором поле уже "вбита" стандартная фраза
запроса на авторизацию: "I would like to add you to my roster" (мне хотелось бы
добавить вас в мой ростер). Если хотите, можете написать там что-то более
осмысленное, чтобы, например, человек, которого вы хотите к себе добавить,
понял, с кем имеет дело.
Обзор служб 2 

![Отправка запроса на авторизацию](../images/Adding_user_2roster_1_ru.png)
 Если вы уже знаете, к какой конференции хотите подключиться, то совсем не обязательно проделывать все эти телодвижения. Нажмите третью по счёту кнопку — "Присоединиться к группе" — и в открывшемся диалоге заполните поля "Группа", "Сервер" и "Псевдоним". Например, если вы зарегистрировали аккаунт на сервере jabber.ru и хотите зайти в комнату Talks, введите в первом поле **talks**, во втором — **conference.jabber.ru**. Псевдоним уже будет стоять — ваш ник, под которым вы зарегистрировались на сервере; можете оставить его как есть, а можете поменять, если вдруг захочется. Если комната защищена паролем, то вы должны ввести его в последнее поле. 

Ростер, он же список контактов (левое окошко меньшей ширины в главном окне) —
это аналог "аськиного" контактного листа, но в мире Jabber в этом списке могут
находиться контакты из джаббера, ICQ, Yahoo, AIM, пользователи MSN Messenger, а
также новостные агенты (RSS) и даже различные
[боты-сервисы](http://jabberworld.info/JID_полезных_Jabber-ботов) (кстати
![Другой способ подключения к конференции](../images/Tkabber-Join-Conference.png) 

говоря, эта ссылка ведёт на другую замечательную вики, посвящённую новичкам в
Jabber — обязательно там полазьте). Итак, вы отправили запрос на авторизацию
вашему другу, но совсем не обязательно, что он сейчас сидит и дожидается этого
запроса. Тем не менее, вы уже можете добавить его к себе в ростер. У вас
открывается окно со свойствами контакта. Вы можете отредактировать его
псевдоним (например, вместо ника ввести настоящее имя и фамилию), а также
внести этот контакт в группу (например, если это ваш друг, то в группу
"Friends" или "Друзья", а если это ваш коллега, то в группу "Работа"). Создать
группу очень просто: напишите её имя в окошечке слева, как в примере, и нажмите
"Добавить". Если у вас уже есть группа (например, вы добавляете уже второй
контакт), то она будет находиться в левом списке, в большом поле. Выделите её
мышью и опять-таки, жмите "Добавить". Просто выбрать группу слева или ввести её
имя в окошке недостаточно, обязательно надо добавить её, чтобы она появилась
справа, иначе пользователь будет находиться в общем списке под названием "Без
группы". Одного и того же пользователя можно добавить в несколько групп. Кроме
того, в Ткаббере можно организовать вложенные группы. Посмотрите на скриншот.
Чтобы каждый раз не лазить в Дискавери, можно добавить конференцию в ростер. Это очень просто: **Службы → Добавить конференцию в контакты...** Появится небольшое окошечко, где нужно ввести всего два параметра: группу и сервер, причём поле "сервер" уже заполнено, и его нужно править лишь в том случае, если вы добавляете группу с другого сервера, не с того, на котором вы залогинены. В поле "группа" надо написать название комнаты, например, tkabber или talks. Другой способ — перетащить конференцию из Дискавери в ростер мышью. Работает drag-and-drop как в Виндовс, так и в Линукс. 

Самая нижняя из видимых групп выглядит так: Jabber::007::Админы. Разделителем
является двойное двоеточие. В результате в списке контактов появится группа
Jabber, внутри которой будет находиться подгруппа 007, а внутри неё — подгруппа
Админы. Если вы планируете заселять и промежуточные группы (Jabber и 007), надо
прописать и их, как это сделано на скриншоте. Итак, у нас всё готово. Жмите
## <a id="Добавление_контактов_в_ростер"></a>Добавление контактов в ростер

Может статься, у вас уже есть друг, который давно уже использует Jabber для общения, или вы познакомились с кем-нибудь в комнате, и теперь хотите добавить его в свой список друзей. Жмём самую левую кнопку в виде человечка с зелёным плюсиком рядом — "Добавить нового пользователя". Выскакивает окошко с двумя полями. В верхнее, маленькое, надо написать JID (Jabber ID, или полный Jabber-адрес вашего друга): к примеру, petia@jabberserver.ru — то есть, и ник, и "собачку", и имя сервера. Во втором поле уже "вбита" стандартная фраза запроса на авторизацию: "I would like to add you to my roster" (мне хотелось бы добавить вас в мой ростер). Если хотите, можете написать там что-то более осмысленное, чтобы, например, человек, которого вы хотите к себе добавить, понял, с кем имеет дело. 

![Отправка запроса на авторизацию](../images/Adding_user_2roster_1_ru.png) 

"Продолжить", и пользователь добавляется в ростер.
Ростер, он же список контактов (левое окошко меньшей ширины в главном окне) — это аналог "аськиного" контактного листа, но в мире Jabber в этом списке могут находиться контакты из джаббера, ICQ, Yahoo, AIM, пользователи MSN Messenger, а также новостные агенты (RSS) и даже различные [боты-сервисы](http://jabberworld.info/JID_полезных_Jabber-ботов) (кстати говоря, эта ссылка ведёт на другую замечательную вики, посвящённую новичкам в Jabber — обязательно там полазьте). Итак, вы отправили запрос на авторизацию вашему другу, но совсем не обязательно, что он сейчас сидит и дожидается этого запроса. Тем не менее, вы уже можете добавить его к себе в ростер. У вас открывается окно со свойствами контакта. Вы можете отредактировать его псевдоним (например, вместо ника ввести настоящее имя и фамилию), а также внести этот контакт в группу (например, если это ваш друг, то в группу "Friends" или "Друзья", а если это ваш коллега, то в группу "Работа"). Создать группу очень просто: напишите её имя в окошечке слева, как в примере, и нажмите "Добавить". Если у вас уже есть группа (например, вы добавляете уже второй контакт), то она будет находиться в левом списке, в большом поле. Выделите её мышью и опять-таки, жмите "Добавить". Просто выбрать группу слева или ввести её имя в окошке недостаточно, обязательно надо добавить её, чтобы она появилась справа, иначе пользователь будет находиться в общем списке под названием "Без группы". Одного и того же пользователя можно добавить в несколько групп. Кроме того, в Ткаббере можно организовать вложенные группы. Посмотрите на скриншот. Самая нижняя из видимых групп выглядит так: Jabber::007::Админы. Разделителем является двойное двоеточие. В результате в списке контактов появится группа Jabber, внутри которой будет находиться подгруппа 007, а внутри неё — подгруппа Админы. Если вы планируете заселять и промежуточные группы (Jabber и 007), надо прописать и их, как это сделано на скриншоте. Итак, у нас всё готово. Жмите "Продолжить", и пользователь добавляется в ростер. 

![Редактирование контакта](../images/Adding_user_2roster_2_ru.png)
![Редактирование контакта](../images/Adding_user_2roster_2_ru.png) 

Если друг ваш сейчас не за компьютером, он не сможет авторизовать вас сразу же.
Если друг ваш сейчас не за компьютером, он не сможет авторизовать вас сразу же. Поэтому его ник в ростере скрыт. Чтобы увидеть его, нажмите четвёртую кнопку. Одна жёлтая лампочка показывает только пользователей, которые сейчас в онлайне, жёлтая поверх чёрной — всех. Иконка, стоящая около ника вашего друга, — "пустая", а во всплывающей подсказке (при наведении мыши на ник) можно увидеть слово [none] — "нет подписки на присутствие". Это значит, ни он ещё не авторизовал вас, ни вы его. 
Поэтому его ник в ростере скрыт. Чтобы увидеть его, нажмите четвёртую кнопку.
Одна жёлтая лампочка показывает только пользователей, которые сейчас в онлайне,
жёлтая поверх чёрной — всех. Иконка, стоящая около ника вашего друга, —
"пустая", а во всплывающей подсказке (при наведении мыши на ник) можно увидеть
слово [none] — "нет подписки на присутствие". Это значит, ни он ещё не
авторизовал вас, ни вы его.

![Контакт в ростере, но вас ещё не авторизовал](../images/Adding_user_2roster_3_ru.png)
![Контакт в ростере, но вас ещё не авторизовал](../images/Adding_user_2roster_3_ru.png) 

Когда он подойдёт к компьютеру или выйдет в онлайн, он увидит ваш запрос.
Когда он подойдёт к компьютеру или выйдет в онлайн, он увидит ваш запрос. 

![Запрос получен вашим другом](../images/Adding_user_2roster_4_ru.png)
![Запрос получен вашим другом](../images/Adding_user_2roster_4_ru.png) 

Он авторизует вас, нажав кнопку "Утвердить подписку", при этом его иконка станет жёлтой.
Он авторизует вас, нажав кнопку "Утвердить подписку", при этом его иконка станет жёлтой. 

![Друг вас авторизовал, а вы его — ещё нет](../images/Tkabber-Roster-Tooltip-Subscribed-To.png)
![Друг вас авторизовал, а вы его — ещё нет](../images/Tkabber-Roster-Tooltip-Subscribed-To.png) 

В данном примере состояние подписки — [to], это означает, что собеседник вас
В данном примере состояние подписки — [to], это означает, что собеседник вас авторизовал, и вы можете видеть его присутствие (то есть, в онлайне он или нет), а вы его — ещё не авторизовали. Противоположный случай: подписка [from] — вы авторизовали собеседника (позволяете ему видеть, когда вы в онлайне), а он вас — нет (при этом, само собой, его иконка останется чёрной). 
авторизовал, и вы можете видеть его присутствие (то есть, в онлайне он или
нет), а вы его — ещё не авторизовали. Противоположный случай: подписка [from] —
вы авторизовали собеседника (позволяете ему видеть, когда вы в онлайне), а он
вас — нет (при этом, само собой, его иконка останется чёрной).

Друг тоже отправляет вам запрос на авторизацию, в результате чего у вас
Друг тоже отправляет вам запрос на авторизацию, в результате чего у вас выскакивает примерно такое окно. 
выскакивает примерно такое окно.

![Ваш друг просит вас авторизовать его](../images/Adding_user_2roster_5_ru.png)
![Ваш друг просит вас авторизовать его](../images/Adding_user_2roster_5_ru.png) 

Когда и вы авторизуете его, всплывающая подсказка будет показывать слово [both]
Когда и вы авторизуете его, всплывающая подсказка будет показывать слово [both] — "оба". 
— "оба".

Вы можете писать сообщения вашим друзьям, даже если они находятся в оффлайне и
Вы можете писать сообщения вашим друзьям, даже если они находятся в оффлайне и даже если авторизация ещё не состоялась — сообщение сохранится на сервере и будет показано адресату, когда тот подключится. 
даже если авторизация ещё не состоялась — сообщение сохранится на сервере и
будет показано адресату, когда тот подключится.

### <a id="Некоторые_полезные_команды"></a>Некоторые полезные команды
## <a id="Некоторые_полезные_команды"></a>Некоторые полезные команды

В принципе, общение в групповом чате или с глазу на глаз ничем не отличается от
В принципе, общение в групповом чате или с глазу на глаз ничем не отличается от общения в других программах — ICQ, IRC и так далее. Но свои тонкости есть, и лучше сразу с ними познакомиться. 
общения в других программах — ICQ, IRC и так далее. Но свои тонкости есть, и
лучше сразу с ними познакомиться.

Пишем | Получаем
 Пишем: Получаем: 
---|---
/me хочет спать | \* testirovanie хочет спать
/наклонный текст/ | _наклонный текст_
\_подчёркнутый текст\_ | <u>подчёркнутый текст</u>
\*жирный текст\* | **жирный текст**
/знаки препинания/! | _знаки препинания_!
/так неправильно!/ | /так неправильно!/
-перечёркнутый текст- | <s>перечёркнутый текст</s>
/\*можно\*/ /\_смешивать\_/ | _**можно** <u>смешивать</u>_
\*\_разные\_\* \*\_/стили/\_\* | **<u>разные</u> _<u>стили</u>_**

 
Как видите, текст можно делать жирным, подчёркнутым, перечёркнутым и курсивом.
Можно смешивать разные стили. Главное, помнить про вложение символов выделения:
если вы написали "/\*" в начале текста, то заканчивать выделение нужно обратной
 /me хочет спать \* testirovanie хочет спать 
последовательностью — "\*/".

Последовательности этих смешных символов, осуществляющих выделение текста,
 
 /наклонный текст/ _наклонный текст_ 
называются "стайлкодами" (от "stylecodes", термин позаимствован из
["фидошной"](http://www.fidonet.org) читалки писем
[GOLDed](http://golded-plus.sourceforge.net)). Если эта возможность вам мешает,
её можно отключить в Настройках (группа **Chat → Stylecodes**).

 
Ткаббер поддерживает "горячие клавиши", и они могут значительно облегчить вашу
жизнь. Посмотреть их всегда можно в "Краткой справке" (меню "Помощь").

 \_подчёркнутый текст\_ <u>подчёркнутый текст</u> 
 
![Краткая справка](../images/Tkabber-Quick-Help.png)

 \*жирный текст\* **жирный текст** 
 
Ткаббер по умолчанию отсылает сообщения по нажатию клавиши Enter. Если вы
привыкли работать с другими программами мгновенных сообщений (например, MSN
Messenger), которые отсылают "мессаги" по Ctrl-Enter, Ткаббер может показаться
неудобным. Однако это довольно легко исправляется — смотрите
[**здесь**](Патчи.md#Отправка_сообщений_по_нажатию_Ctrl-Enter). Даже если вы ничего
не смыслите в программировании, следуя примеру в инструкции, можете настроить
клиент "под себя". _На всякий случай скопируйте в другое место файл, который
собираетесь редактировать, и тогда в случае ошибки всегда сможете вернуться к
исходному состоянию._

 /знаки препинания/! _знаки препинания_! 
 
Ещё пара полезностей. Находясь в конференции, вы можете узнать кое-какую
информацию о её участниках, наведя на ник курсор мыши или сделав на нём правый
клик. В первом случае появится всплывающая подсказка, где можно узнать, какой
ранг занимает тот или иной участник: owner (владелец комнаты), administrator
(администратор), moderator (модератор), member (участник) или none (никто, так
себе прохожий). Подробнее эти ранги мы рассмотрим потом.

 /так неправильно!/ /так неправильно!/ 
 
![Всплывающая подсказка в конференции](../images/Conference_user_tooltip_ru.png)

 -перечёркнутый текст- <s>перечёркнутый текст</s> 
 
По правому клику на псевдониме открывается контекстное меню, из которого пока
рассмотрим только предпоследний пункт "Показать информацию".

 /\*можно\*/ /\_смешивать\_/ _**можно** <u>смешивать</u>_ 
 
![Контекстное меню в конференции](../images/Conference_user_menu_ru.png)
 \*\_разные\_\* \*\_/стили/\_\* **<u>разные</u> _<u>стили</u>_** 

Нажав на него, вы получите довольно большое окно с несколькими вкладками, где
можете почитать персональную информацию, которую этот человек решил о себе
сообщить. Пользуясь случаем, давайте заполним свою персональную инфу и мы.
Чтобы открыть окно редактирования, ткнитесь в меню **TkabberРедактировать
личную информацию**.
Как видите, текст можно делать жирным, подчёркнутым, перечёркнутым и курсивом. Можно смешивать разные стили. Главное, помнить про вложение символов выделения: если вы написали "/\*" в начале текста, то заканчивать выделение нужно обратной последовательностью — "\*/". 

Последовательности этих смешных символов, осуществляющих выделение текста, называются "стайлкодами" (от "stylecodes", термин позаимствован из ["фидошной"](http://www.fidonet.org) читалки писем [GOLDed](http://golded-plus.sourceforge.net)). Если эта возможность вам мешает, её можно отключить в Настройках (группа **ChatStylecodes**). 

Ткаббер поддерживает "горячие клавиши", и они могут значительно облегчить вашу жизнь. Посмотреть их всегда можно в "Краткой справке" (меню "Помощь"). 

* **Личная информация:** Ф.И.О., псевдоним, e-mail, веб-сайт. Рекомендуем
  заполнить хотя бы e-mail, потому что если вы вдруг забудете свой пароль, то
  администратор сервера ничем вам помочь не сможет, а так хоть вышлет его на
  указанный почтовый ящик.
* **Телефоны:** Что тут заполнять — решать вам, а выбор богат: ведь Ткаббер
  поддерживает стандарт vCard.
* **Адрес:** Конечно, полный адрес писать здесь не обязательно, но хотя бы
  город и страну указать не мешает. Занимательный плагин Георостер,
  показывающий на карте мира географическое положение собеседников, берёт
  информацию именно отсюда.
* **Организация:** Самое подходящее место рассказать о себе как о
  профессионале.
* **О себе:** А здесь можно выложить хоть биографию, а также указать дату
  своего рождения. Кроме того, в этом поле удобно размещать GPG/PGP public-key
![Краткая справка](../images/Tkabber-Quick-Help.png) 

Ткаббер по умолчанию отсылает сообщения по нажатию клавиши Enter. Если вы привыкли работать с другими программами мгновенных сообщений (например, MSN Messenger), которые отсылают "мессаги" по Ctrl-Enter, Ткаббер может показаться неудобным. Однако это довольно легко исправляется — смотрите [здесь](Патчи.md#Отправка_сообщений_по_нажатию_Ctrl-Enter). Даже если вы ничего не смыслите в программировании, следуя примеру в инструкции, можете настроить клиент "под себя". _На всякий случай скопируйте в другое место файл, который собираетесь редактировать, и тогда в случае ошибки всегда сможете вернуться к исходному состоянию._ 

Ещё пара полезностей. Находясь в конференции, вы можете узнать кое-какую информацию о её участниках, наведя на ник курсор мыши или сделав на нём правый клик. В первом случае появится всплывающая подсказка, где можно узнать, какой ранг занимает тот или иной участник: owner (владелец комнаты), administrator (администратор), moderator (модератор), member (участник) или none (никто, так себе прохожий). Подробнее эти ранги мы рассмотрим потом. 

![Всплывающая подсказка в конференции](../images/Conference_user_tooltip_ru.png) 

По правому клику на псевдониме открывается контекстное меню, из которого пока рассмотрим только предпоследний пункт "Показать информацию". 

![Контекстное меню в конференции](../images/Conference_user_menu_ru.png) 

Нажав на него, вы получите довольно большое окно с несколькими вкладками, где можете почитать персональную информацию, которую этот человек решил о себе сообщить. Пользуясь случаем, давайте заполним свою персональную инфу и мы. Чтобы открыть окно редактирования, ткнитесь в меню **Tkabber → Редактировать личную информацию**. 
  (лучше ссылку на ключ, загруженный на какой-нибудь keyserver, чтобы не
  загромождать пространство, да и пользователям gpg удобнее скачать ключ именно
  с сервера, а не возиться с копированием и ручным его импортированием).
* **Фотография:** Можно загрузить фото с жёсткого диска, а можно указать ссылку

*  **Личная информация:** Ф.И.О., псевдоним, e-mail, веб-сайт. Рекомендуем заполнить хотя бы e-mail, потому что если вы вдруг забудете свой пароль, то администратор сервера ничем вам помочь не сможет, а так хоть вышлет его на указанный почтовый ящик. 
*  **Телефоны:** Что тут заполнять — решать вам, а выбор богат: ведь Ткаббер поддерживает стандарт vCard. 
*  **Адрес:** Конечно, полный адрес писать здесь не обязательно, но хотя бы город и страну указать не мешает. Занимательный плагин Георостер, показывающий на карте мира географическое положение собеседников, берёт информацию именно отсюда. 
*  **Организация:** Самое подходящее место рассказать о себе как о профессионале. 
*  **О себе:** А здесь можно выложить хоть биографию, а также указать дату своего рождения. Кроме того, в этом поле удобно размещать GPG/PGP public-key (лучше ссылку на ключ, загруженный на какой-нибудь keyserver, чтобы не загромождать пространство, да и пользователям gpg удобнее скачать ключ именно с сервера, а не возиться с копированием и ручным его импортированием). 
*  **Фотография:** Можно загрузить фото с жёсткого диска, а можно указать ссылку на изображение в интернете. 
  на изображение в интернете.

Чтобы сохранить изменения и отослать их на сервер, нажмите кнопку "Продолжить".
Чтобы сохранить изменения и отослать их на сервер, нажмите кнопку "Продолжить". 

* При просмотре чужой информации появляется ещё одна вкладка: **Клиент**. Там
*  При просмотре чужой информации появляется ещё одна вкладка: **Клиент**. Там вы можете узнать, какую версию какого клиента использует ваш собеседник, его часовой пояс, а также операционную систему, в которой он сейчас работает. 
  вы можете узнать, какую версию какого клиента использует ваш собеседник, его
  часовой пояс, а также операционную систему, в которой он сейчас работает.

![(!)](../images/Hammer.png) **Сделать:** Перезалить галерею NaodW29-gallery4429bb43277b2e7500000002
![(!)](../images/Hammer.png) **Сделать:** Перезалить галерею NaodW29-gallery4429bb43277b2e7500000002 

Поскольку vCards хранятся на сервере, можно просматривать информацию о любом
Поскольку vCards хранятся на сервере, можно просматривать информацию о любом пользователе — он даже может быть при этом в оффлайне! Для этого зайдите в меню **Службы → Показать информацию о пользователе** и в открывшемся окошке введите JID интересующей вас персоны. 
пользователе — он даже может быть при этом в оффлайне! Для этого зайдите в меню
**Службы → Показать информацию о пользователе** и в открывшемся окошке введите
JID интересующей вас персоны.

![Запрос информации о пользователе](../images/Info_request_ru.png)
![Запрос информации о пользователе](../images/Info_request_ru.png) 

Ещё одна интересная тайна Ткаббера — встроенные команды. Наберите в поле ввода
Ещё одна интересная тайна Ткаббера — встроенные команды. Наберите в поле ввода сообщения прямой слэш "/" и понажимайте несколько раз табуляцию, и вы увидите много интересного ;) Про кое-что из этого интересного можно почитать [тут](http://jabberworld.info/Управляющие_команды_в_Jabber). Если понажимать табуляцию, не вводя в поле ничего, там начнут появляться ники пользователей, находящихся в комнате, причём в большинстве случаев самым первым появится тот, кто, допустим, недавно назвал вас по нику — то есть, адресовал вам фразу, или просто человек, сказавший последнюю реплику. Это свойство удобно использовать для быстрой вставки нужного ника в строку набора. Если при этом вы наберёте одну-две первые буквы какого-нибудь ника, то табуляция будет перебирать лишь те ники, которые с этих букв начинаются. 
сообщения прямой слэш "/" и понажимайте несколько раз табуляцию, и вы увидите
много интересного ;) Про кое-что из этого интересного можно почитать
[тут](http://jabberworld.info/Управляющие_команды_в_Jabber). Если понажимать
табуляцию, не вводя в поле ничего, там начнут появляться ники пользователей,
находящихся в комнате, причём в большинстве случаев самым первым появится тот,
кто, допустим, недавно назвал вас по нику — то есть, адресовал вам фразу, или
просто человек, сказавший последнюю реплику. Это свойство удобно использовать
для быстрой вставки нужного ника в строку набора. Если при этом вы наберёте
одну-две первые буквы какого-нибудь ника, то табуляция будет перебирать лишь те
ники, которые с этих букв начинаются.

И напоследок "домашнее задание" :)

1. Сделайте правый клик в окне группового чата и изучите самостоятельно
   контекстное меню — вам понравится ;)
1. Поводите курсор мыши над окном программы. Обратите внимание, что если
   какой-то элемент интерфейса меняет при этом свой цвет, он кликабелен —
   можете нажать кнопку мыши (и левую, и правую) и посмотреть, что получится.
   Некоторые элементы доступны для клика даже если не меняют цвет. Десять минут
   таких исследований, и вы убедитесь, что Ткаббер — это просто квест
   какой-то! :)

### <a id="Дискавери._Добавляем_контакты_из"></a>Дискавери. Добавляем контакты из:

#### <a id="ICQ"></a>ICQ

Если на вашем jabber-сервере есть гейт в ICQ, вы можете зарегистрироваться на
нём и общаться с друзьями из "аськи" через Jabber. Естественно, у вас уже
должен иметься рабочий аккаунт в системе ICQ. Регистрация же на jabber-сервере
проста: в Дискавери отыщите что-то вроде icq.jabber.ru и сделайте двойной клик,
чтобы открыть эту ветвь. В открывшемся новом списке есть пункт "Регистрация".
Сделайте двойной клик уже на нём, и появится окошко с двумя полями:
"Пользователь" и "Пароль". Введите в первое поле ваш ICQ UIN, во второе —
пароль к вашему асечному аккаунту.

![Регистрация на гейте ICQ](../images/Icq_register_ru.png)

Если у вас открыта "аська", закройте её или отключитесь, чтобы не мешалась.
Жмите "Ок", и если ошибок не было, вы получите сообщение, что регистрация
успешна. Теперь jabber-сервер знает параметры вашего аськиного аккаунта и может
логиниться на сервере ICQ.

И напоследок "домашнее задание" :) 

Обычно Ткаббер сам "вытягивает" контакт-лист аськи, залогинившись к серверу ICQ
через гейт, и сам же заполняет все имена никами, взятыми из соответствующего
1.  Сделайте правый клик в окне группового чата и изучите самостоятельно контекстное меню — вам понравится ;) 
1.  Поводите курсор мыши над окном программы. Обратите внимание, что если какой-то элемент интерфейса меняет при этом свой цвет, он кликабелен — можете нажать кнопку мыши (и левую, и правую) и посмотреть, что получится. Некоторые элементы доступны для клика даже если не меняют цвет. Десять минут таких исследований, и вы убедитесь, что Ткаббер — это просто квест какой-то! :) 
поля vCard аськиных пользователей — ваших друзей. Если этого не произошло, а
контакт-лист слишком большой, чтобы прописать их вручную, почитайте
[**тут**](Гейты_во_вражеские_сети.md#ICQ).

Таким же (или похожим) образом происходит регистрация на других транспортах.
Необходимо помнить, что при регистрации на каком-либо транспорте вам надо
вводить логин и пароль **уже существующего в той системе аккаунта**, создать
который вы должны были раньше, через "родной" клиент этой системы.
## <a id="Дискавери._Добавляем_контакты_из"></a>Дискавери. Добавляем контакты из:

#### <a id="IRC"></a>IRC
### <a id="ICQ"></a>ICQ

Чуть подробнее остановимся на гейте в IRC — "ирку". Регистрироваться на гейте
не обязательно, можно либо просто зайти на канал, либо добавить его в ростер на
будущее. Делается это примерно так же, как в случае с обычной MUC (Multi-User
Conference, т.е. обычная конференция, о которых мы уже рассказали выше). Есть
одна тонкость в имени. Посмотрите внимательно на скриншот: в качестве группы
следует указывать не только имя канала, но и имя IRC-сервера, к которому вы
хотите присоединиться. В нашем примере **linux%chat.eu.freenode.net**: "linux"
— название канала (_без ведущего "\#"_), "chat.eu.freenode.net" — название
"иркиного" сервера, разделяются они знаком процента. А вот в качестве сервера,
что запрашивается во втором поле, идёт название гейта на вашем jabber-сервере.
Если на вашем jabber-сервере есть гейт в ICQ, вы можете зарегистрироваться на нём и общаться с друзьями из "аськи" через Jabber. Естественно, у вас уже должен иметься рабочий аккаунт в системе ICQ. Регистрация же на jabber-сервере проста: в Дискавери отыщите что-то вроде icq.jabber.ru и сделайте двойной клик, чтобы открыть эту ветвь. В открывшемся новом списке есть пункт "Регистрация". Сделайте двойной клик уже на нём, и появится окошко с двумя полями: "Пользователь" и "Пароль". Введите в первое поле ваш ICQ UIN, во второе — пароль к вашему асечному аккаунту. 
У jabber.ru гейт на "ирку" в Дискавери отсутствует, и на сайте найти его точное
название — тоже проблема (если оно там есть вообще). Тем не менее, гейт
существует и зовётся **irc.e.jabber.ru** — прописывайте и наслаждайтесь :) В
поле "псевдоним" указываете ваш IRC-никнейм, а в поле "пароль" — ваш пароль в
IRC для этого ника. Замечено, что на серверах сети WeNet NickServ всё равно
просит вас представиться — в отдельном окне. Тогда надо просто ввести в этом
окошке текст: **identify your\_password** — без слэша, ведь это не команда
jabber или Ткаббера, а просто текст, отсылаемый Никсерву.

![Заходим на канал IRC](../images/Join_conference_IRC_ru.png)
![Регистрация на гейте ICQ](../images/Icq_register_ru.png) 

Если у вас открыта "аська", закройте её или отключитесь, чтобы не мешалась. Жмите "Ок", и если ошибок не было, вы получите сообщение, что регистрация успешна. Теперь jabber-сервер знает параметры вашего аськиного аккаунта и может логиниться на сервере ICQ. 
Общаясь в "ирке" через Jabber, вполне можно пользоваться некоторыми популярными

командами, например, **/me**. Окно привата вызывается двойным кликом на нужном
никнейме. Остальные команды пока не тестировались, информация добавится позже.
Если хотите, чтобы она появилась побыстрее, опробуйте другие команды и
расскажите нам :)
Обычно Ткаббер сам "вытягивает" контакт-лист аськи, залогинившись к серверу ICQ через гейт, и сам же заполняет все имена никами, взятыми из соответствующего поля vCard аськиных пользователей — ваших друзей. Если этого не произошло, а контакт-лист слишком большой, чтобы прописать их вручную, почитайте [тут](Гейты_во_вражеские_сети.md#ICQ). 

Таким же (или похожим) образом происходит регистрация на других транспортах. Необходимо помнить, что при регистрации на каком-либо транспорте вам надо вводить логин и пароль **уже существующего в той системе аккаунта**, создать который вы должны были раньше, через "родной" клиент этой системы. 

### <a id="IRC"></a>IRC

Чуть подробнее остановимся на гейте в IRC — "ирку". Регистрироваться на гейте не обязательно, можно либо просто зайти на канал, либо добавить его в ростер на будущее. Делается это примерно так же, как в случае с обычной MUC (Multi-User Conference, т.е. обычная конференция, о которых мы уже рассказали выше). Есть одна тонкость в имени. Посмотрите внимательно на скриншот: в качестве группы следует указывать не только имя канала, но и имя IRC-сервера, к которому вы хотите присоединиться. В нашем примере **linux%chat.eu.freenode.net**: "linux" — название канала (_без ведущего "\#"_), "chat.eu.freenode.net" — название "иркиного" сервера, разделяются они знаком процента. А вот в качестве сервера, что запрашивается во втором поле, идёт название гейта на вашем jabber-сервере. У jabber.ru гейт на "ирку" в Дискавери отсутствует, и на сайте найти его точное название — тоже проблема (если оно там есть вообще). Тем не менее, гейт существует и зовётся **irc.e.jabber.ru** — прописывайте и наслаждайтесь :) В поле "псевдоним" указываете ваш IRC-никнейм, а в поле "пароль" — ваш пароль в IRC для этого ника. Замечено, что на серверах сети WeNet NickServ всё равно просит вас представиться — в отдельном окне. Тогда надо просто ввести в этом окошке текст: **identify your\_password** — без слэша, ведь это не команда jabber или Ткаббера, а просто текст, отсылаемый Никсерву. 

![Заходим на канал IRC](../images/Join_conference_IRC_ru.png) 

Общаясь в "ирке" через Jabber, вполне можно пользоваться некоторыми популярными командами, например, **/me**. Окно привата вызывается двойным кликом на нужном никнейме. Остальные команды пока не тестировались, информация добавится позже. Если хотите, чтобы она появилась побыстрее, опробуйте другие команды и расскажите нам :) 

#### <a id="RSS"></a>RSS
### <a id="RSS"></a>RSS

Внимание! rss.jabber.ru отключен на неизвестный срок, поэтому написанные ниже
Внимание! rss.jabber.ru отключен на неизвестный срок, поэтому написанные ниже советы неактуальны, но читать RSS-новости по-прежнему можно, если почитать [тут](http://jabberworld.info/Транспорты_для_Jabber), [тут](http://jabberworld.info/Список_публичных_транспортов_RSS) и [тут](http://wiki.jrudevels.org/RSS_service) 
советы неактуальны, но читать RSS-новости по-прежнему можно, если почитать
[тут](http://jabberworld.info/Транспорты_для_Jabber),
[тут](http://jabberworld.info/Список_публичных_транспортов_RSS) и
[тут](http://wiki.jrudevels.org/RSS_service).

Добавлять в ростер новостные фиды (RSS feeds) с **jabber.ru** следует так:
Добавлять в ростер новостные фиды (RSS feeds) с **jabber.ru** следует так: откройте в Дискавери поддерево rss.jabber.ru, выберите узел "Поиск" и активируйте его (двойным щелчком мыши или нажатием клавиши Enter. Появится окно поиска: 
откройте в Дискавери поддерево rss.jabber.ru, выберите узел "Поиск" и
активируйте его (двойным щелчком мыши или нажатием клавиши Enter. Появится окно
поиска:

![Поиск в RSS на jabber.ru](../images/Tkabber-Stoat-headlines-Search.png)
![Поиск в RSS на jabber.ru](../images/Tkabber-Stoat-headlines-Search.png) 

Введите в нём интересующую вас подстроку для поиска (например, "dsa-long") и
Введите в нём интересующую вас подстроку для поиска (например, "dsa-long") и подтвердите свой выбор. Если по вашему запросу что-нибудь нашлось, вам будет предъявлена новая форма — с результатами поиска: 
подтвердите свой выбор. Если по вашему запросу что-нибудь нашлось, вам будет
предъявлена новая форма — с результатами поиска:

![Результаты поиска в RSS на jabber.ru](../images/Tkabber-Stoat-headlines-summary.png)

Выберите интересующий вас фид и активируйте его. Выскочит стандартное окно
запроса, который будет отослан этому фиду. Затем появится другое уже знакомое
нам окно редактирования контакта. Вы можете создать для новостей отдельную
группу, скажем, Новости или RSS, и добавлять новые фиды в неё. _Помните, что
новости обновляются хозяевами сайтов, и интервал может очень отличаться.
Скажем, lenta.ru за день может накидать больше сотни сообщений, а какой-нибудь
редко обновляемый сайт — три, за неделю._ Если хотите получать от сервера
уведомления о новых фидах, вам нужно зарегистрироваться в главной ветке дерева
rss.jabber.ru.

##### <a id="Частые_вопросы_по_RSS"></a>Частые вопросы по RSS

Нередко начинающие пользователи Ткаббера задают в конференции вопросы,
связанные с RSS. Приводим здесь ответы на эти вопросы в виде краткого
наставления :)

![Результаты поиска в RSS на jabber.ru](../images/Tkabber-Stoat-headlines-summary.png) 

Выберите интересующий вас фид и активируйте его. Выскочит стандартное окно запроса, который будет отослан этому фиду. Затем появится другое уже знакомое нам окно редактирования контакта. Вы можете создать для новостей отдельную группу, скажем, Новости или RSS, и добавлять новые фиды в неё. _Помните, что новости обновляются хозяевами сайтов, и интервал может очень отличаться. Скажем, lenta.ru за день может накидать больше сотни сообщений, а какой-нибудь редко обновляемый сайт — три, за неделю._ Если хотите получать от сервера уведомления о новых фидах, вам нужно зарегистрироваться в главной ветке дерева rss.jabber.ru. 
1. Открыть в диско весь список фидов невозможно. Пользуйтесь поиском
   (вызывается нажатием Ctrl-S — от слова "Search")
1. Найдя нужный фид, добавьте его в ростер. С этим контактом разговаривать

#### <a id="Частые_вопросы_по_RSS"></a>Частые вопросы по RSS

Нередко начинающие пользователи Ткаббера задают в конференции вопросы, связанные с RSS. Приводим здесь ответы на эти вопросы в виде краткого наставления :) 

1.  Открыть в диско весь список фидов невозможно. Пользуйтесь поиском (вызывается нажатием Ctrl-S — от слова "Search") 
1.  Найдя нужный фид, добавьте его в ростер. С этим контактом разговаривать бессмысленно. **Просто сидите и ждите.** Как уже было сказано выше, **новости выпускает сайт, а не Ткаббер,** так что сетовать на клиент бессмысленно. Возможно, некоторые новости от старых фидов не приходят к вам просто потому, что на сайте изменился адрес фида, а между тем в списке на rss.jabber.ru до сих пор болтается старая версия, на которую вы и подписаны. Поэтому перед тем как добавлять в ростер некий фид, не помешало бы убедиться, что по анонсируемому адресу действительно что-то имеется. 
   бессмысленно. **Просто сидите и ждите.** Как уже было сказано выше,
   **новости выпускает сайт, а не Ткаббер,** так что сетовать на клиент
   бессмысленно. Возможно, некоторые новости от старых фидов не приходят к вам
   просто потому, что на сайте изменился адрес фида, а между тем в списке на
   rss.jabber.ru до сих пор болтается старая версия, на которую вы и подписаны.
   Поэтому перед тем как добавлять в ростер некий фид, не помешало бы
   убедиться, что по анонсируемому адресу действительно что-то имеется.
1. Когда сайт выпустит новость, она сама к вам придёт, и у вас откроется новое
1.  Когда сайт выпустит новость, она сама к вам придёт, и у вас откроется новое окошко с новостями, где можно будет эту новость прочитать и, если хочется посетить её полную версию на сайте, перейти по ссылке. 
   окошко с новостями, где можно будет эту новость прочитать и, если хочется
   посетить её полную версию на сайте, перейти по ссылке.
1. После прочтения новости удалять контакт из ростера не надо.
1. Если закрыть таб с новостями, они для вас исчезнут навсегда (ну, не совсем
1.  После прочтения новости удалять контакт из ростера не надо. 
1.  Если закрыть таб с новостями, они для вас исчезнут навсегда (ну, не совсем навсегда, потому что в пользовательском домашнем каталоге Ткаббера есть ещё бэкапный файл, который до закрытия Ткаббера можно и нужно спасти, иначе при выходе из Ткаббера он перезапишется). 
   навсегда, потому что в пользовательском домашнем каталоге Ткаббера есть ещё
   бэкапный файл, который до закрытия Ткаббера можно и нужно спасти, иначе при
   выходе из Ткаббера он перезапишется).
1. Ткаббер в своём первозданном виде сохраняет новости только при корректном
1.  Ткаббер в своём первозданном виде сохраняет новости только при корректном выходе. Как несложно догадаться, если вдруг у вас упадёт он или вообще вся система, то сохранятся лишь новости, которые были записаны в том файле (иначе говоря, всё, что наприходило с момента начала работы в Ткаббере, пропадёт). 
   выходе. Как несложно догадаться, если вдруг у вас упадёт он или вообще вся
   система, то сохранятся лишь новости, которые были записаны в том файле
   (иначе говоря, всё, что наприходило с момента начала работы в Ткаббере,
   пропадёт).
1. На вики есть плагин [**rsssaver**](Плагины.md#Rsssaver), позволяющий сохранять
   новости автоматически каждые N новостей, а также добавляет кнопку для
1.  На вики есть плагин [rsssaver](Плагины.md#Rsssaver), позволяющий сохранять новости автоматически каждые N новостей, а также добавляет кнопку для ручного их сохранения. 
   ручного их сохранения.

#### <a id="Дополнительное_чтение_по_теме"></a>Дополнительное чтение по теме
### <a id="Дополнительное_чтение_по_теме"></a>Дополнительное чтение по теме

[Гейты во вражеские сети](Гейты_во_вражеские_сети.md).
[Гейты во вражеские сети](Гейты_во_вражеские_сети.md). 

## <a id="Локализация_Ткаббера"></a>Локализация Ткаббера
В подавляющем большинстве случаев проблем с локализацией Ткаббера не возникает.
# <a id="Локализация_Ткаббера"></a>Локализация Ткаббера
В подавляющем большинстве случаев проблем с локализацией Ткаббера не возникает. Он с ходу "ловит" языковые настройки системы и готов к работе в удобном для вас окружении. Начиная с версии 0.9.9 кириллица встроена и в Старпаке — это однофайловая версия Ткаббера, не требующая инсталляции. 
Он с ходу "ловит" языковые настройки системы и готов к работе в удобном для вас
окружении. Начиная с версии 0.9.9 кириллица встроена и в Старпаке — это
однофайловая версия Ткаббера, не требующая инсталляции.

В Linux настройка русского языка тоже проста: язык интерфейса Ткаббера обычно
В Linux настройка русского языка тоже проста: язык интерфейса Ткаббера обычно берётся из локали. Если локаль ваша русская, а интерфейс нужен английский, то придётся немного повозиться. Обсуждение этого уже несколько выходит за рамки повествования "для начинающих", поэтому если вам нужен именно такой вариант, идите в раздел для "продвинутых" пользователей. 
берётся из локали. Если локаль ваша русская, а интерфейс нужен английский, то
придётся немного повозиться. Обсуждение этого уже несколько выходит за рамки
повествования "для начинающих", поэтому если вам нужен именно такой вариант,
идите в раздел для "продвинутых" пользователей.

В заключение можно добавить, что Ткаббер поддерживает Unicode, то есть
В заключение можно добавить, что Ткаббер поддерживает Unicode, то есть корректно воспроизводит все юникодные символы. ![(!)](../images/Hammer.png) **Сделать:** Расписать немного подробнее про локали и невозможность писать, скажем, по-испански при локали KOI-8. 
корректно воспроизводит все юникодные символы.
![(!)](../images/Hammer.png) **Сделать:** Расписать немного подробнее про
локали и невозможность писать, скажем, по-испански при локали KOI-8.

Иногда случается, что русский текст в окне чата в ткаббере линуксовой версии
Иногда случается, что русский текст в окне чата в ткаббере линуксовой версии пишется "некрасивым" шрифтом (отличающимся от шрифта латинских символов), или даже "кракозябрами". Это означает, что у вас в системе криво настроены шрифты, и вам — [сюда](Шрифты.md). 
пишется "некрасивым" шрифтом (отличающимся от шрифта латинских символов), или
даже "кракозябрами". Это означает, что у вас в системе криво настроены шрифты,
и вам — [**сюда**](Шрифты.md).

Если вы — пользователь Ubuntu, то, скорее всего, Ткаббер, ставящийся из
Если вы — пользователь Ubuntu, то, скорее всего, Ткаббер, ставящийся из репозитория, страшен, как сон алкоголика, ибо русские шрифты выглядят жутко. Конечно, для общего развития вам не помешает ознакомиться со статьёй "Шрифты", ссылка на которую дана выше, но если вам нужно быстрое решение, ознакомьтесь [со статьёй](Установка_и_настройка_в_Ubuntu.md), специально написанной для этого случая одним мудрым убунтологом. 
репозитория, страшен, как сон алкоголика, ибо русские шрифты выглядят жутко.
Конечно, для общего развития вам не помешает ознакомиться со статьёй "Шрифты",
ссылка на которую дана выше, но если вам нужно быстрое решение, ознакомьтесь
[**со статьёй**](Установка_и_настройка_в_Ubuntu.md), специально написанной для
этого случая одним мудрым убунтологом.

## <a id="Настройка_Ткаббера"></a>Настройка Ткаббера
Ну вот, Ткаббер запущен и работает, и теперь вам хочется поковыряться с ним
# <a id="Настройка_Ткаббера"></a>Настройка Ткаббера
Ну вот, Ткаббер запущен и работает, и теперь вам хочется поковыряться с ним немного и, не влезая в код, более-менее прилично настроить программу под себя. Сделать это можно двумя способами: через пункты меню (при этом настройки действуют только в течение текущей сессии) и через окно настроек. Первый способ удобен для быстрого изучения возможностей клиента, при этом можно не опасаться что-нибудь испортить. Второй способ требует времени, потому что, во-первых, окно настроек Ткаббера похоже на лабиринт Минотавра, а во-вторых, пользователи обычно сюда лезут один раз, всё делают и потом благополучно забывают, что где находится. 
немного и, не влезая в код, более-менее прилично настроить программу под себя.
Сделать это можно двумя способами: через пункты меню (при этом настройки
действуют только в течение текущей сессии) и через окно настроек. Первый способ
удобен для быстрого изучения возможностей клиента, при этом можно не опасаться
что-нибудь испортить. Второй способ требует времени, потому что, во-первых,
окно настроек Ткаббера похоже на лабиринт Минотавра, а во-вторых, пользователи
обычно сюда лезут один раз, всё делают и потом благополучно забывают, что где
находится.

Если первый способ более-менее понятен (броди по менюшкам, нажимай кнопочки,
смотри, что случилось), то со вторым посложнее. Настолько посложнее, что мы
давно уже хотим написать о настройках [**большую статью**](Настройки.md). Вот и
Если первый способ более-менее понятен (броди по менюшкам, нажимай кнопочки, смотри, что случилось), то со вторым посложнее. Настолько посложнее, что мы давно уже хотим написать о настройках [большую статью](Настройки.md). Вот и настал тот час, учитывая, что начинающие пользователи крайне нуждаются в подробном рассказе о настройках, а поскольку продвинутые пользователи после собственных ковыряний мало что помнят, имеет смысл рассказать об этом здесь :) 


настал тот час, учитывая, что начинающие пользователи крайне нуждаются в
подробном рассказе о настройках, а поскольку продвинутые пользователи после
собственных ковыряний мало что помнят, имеет смысл рассказать об этом здесь :)

Changes to wiki/ru/Нетривиальные_настройки.md.

1

2
3
4
5

6
7
8
9
10
11
12
13
14
15
16
17
18
19






20
21
22
23
24
25
26





27
28
29
30
31
32
33
34
35
36


37
38
39
40
41
42



43
44
45
46
47
48
49

50
51
52
53
54

55
56
57
58
59
60

61
62
63
64
65
66
67

68
69

70
71

72
73
74

75
76
77
78
79
80

81
82
83
84
85
86
87
88
89
90
91
92





93
94
95

96
97
98

99
100

101
102
103

104
105
106

107
108
109
110
111
112

113
114
115
116
117

118
119
120

121
122
123
124
125
126
127

128
129
130
131
132
133


134
135
136

137
138
139
140
141
142
143
144




145
146
147

148
149
150
151
152
153
154
155
156






157
158
159

160
161
162
163
164

165
166
167
168
169
170
171
172

173
174
175
176
177




178
179
180

181
182

183
184
185

186
187
188

189
190
191
192

193
194
195
196
197
198

199
200

201
202

203
204
205
206
207
208
209
210
211
212
213
214










215
216

217
218
219

220
221
222
223
224
225

226
227
228
229

230
231
232
233
234

235
236
237
238

239
240
241

242
243
244

245
246
247

248
249
250
251
252

253
254
255
256
257

258
259

260
261
262
263
264
265

266
267
268
269
270
271
272
273
274
275
276

277
278
279

280
281
282

283
284
285
286
287
288
289
290
291
292

293
294
295
296

297
298

299
300
301

302
303
304

305
306
307
308

309
310
311
312

313
314
315
316

317
318
319
320
321
322


323
324
325
326
327



328
329
330
331

332
333
334
335
336

337
338

339
340

341
342

343
344

345
346

347
348

349
350
351
352

353
354

355
356
357
358
359

360
361
362
363
364

365
366
367
368

369
370
371
372
373

374
375
376
377

378
379
380
381
382

383
384
385
386

387
388
389
390
391
392

393
394
395

396
397
398
399
400

401
402
403
404
405

406
407
408
409
410
411
412
413
414
415
416

417
418

419
420
421

422
423
424
425
426

427
428

429
430
431
432

433
434
435

436
437
438
439
440
441
442

443
444
445
446
447
448

449
450
451
452
453
454

455
456
457
458

459
460

461
462

463
464
465
466
467
468
469
470
471
472
473










474
475

476
477

478
479
480

481
482
483
484

485
486
487
488
489
490
491
492

493
494
495
496
497

498
499

500
501
502
503

504
505
506
507

508
509
510
511
512
513
514
515
516
517
518







519
520
521
522

523
524

525
526
527
528

529
530
531
532
533
534
535

536
537
538


539
540

541
542
543

544
545
546
547

548
549
550
551
552

553
554
555
556
557
558

559
560
561
562
563
564
565

566
567
568
569
570
571
572

573
574
575
576
577
578
579

580
581
582
583

584
585
586

587
588
589
590

591
592
593
594
595
596

597
598

599
600
601
602


603
604

605
606
607

608
609
610
611
612
613



614
615
616

617
618

619
620
621
622
623

624
625

626
627

628
629
630

631
632
633
634
635
636
637

638
639
640
641
642
643

644
645
646
647


648
649

650
651
652
653
654
655
656
657
658
659
660
661
662
663
664







665
666
667

668
669
670


671
672

673
674
675
676



677
678

679
680
681
682
683
684

685
686

687
688
689

690
691
692

693
694
695

696
697
698

699
700
701
702
703
704
705





706
707

708
709
710

711
712
713


714
715

716
717

718
719

720
721

722
723
724

725
726
727
728
729

730
731
732

733
734
735

736
737
738

739
740
741
742
743

744
745
746
747
748

749
750
751
752
753
754

755
756
757

758
759
760

761
762
763
764

765
766
767

768
769
770

771
772
773
774

775
776
777
778
779
780

781
782
783
784


785
786
787

788
789
790
791
792
793
794
795

796
797
798
799
800
801
802

803
804
805
806
807
808
809
810

811
812
813
814
815


816
817

818
819

820
821
822

823
824
825
826

827
828

829
830
831
832
833
834

835
836
837
838

839
840

841
842
843

844
845
846
847
848

849
850
851
852
853

854
855
856

857
858
859
860
861
862
863




864
865

866
867
868

869
870
871
872
873

874
875
876
877
878

879
880
881
882
883
884
885
886

887
888
889
890
891
892
893
894

895
896
897
898
899
900
901
902
903
904






905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921

















922
923

924
925
926
927
928
929

930
931
932
933
934
935



936

937
938


939
940
941
942
943
944

945
946
947
948
949

950
951
952
953

954
955
956
957

958
959
960
961
962
963
964
965
966
967
968









969
970
971

972
973

974
975
976
977
978

979
980
981

982
983

984
985
986
987

988
989
990
991

992
993

994
995
996
997
998

999
1000
1001
1002
1003


1004
1005
1006
1007

1008
1009

1010
1011
1012
1013
1014
1015

1016
1017
1018
1019
1020
1021
1022

1023
1024
1025
1026
1027
1028
1029
1030
1031

1032
1033
1034
1035
1036
1037

1038
1039
1040
1041
1042
1043




1044
1045

1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
















1063
1064

1065
1066
1067
1068
1069
1070





1071
1072

1073
1074
1075

1076
1077
1078
1079

1080
1081
1082

1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094

1095
1096

1097
1098

1099
1100
1101
1102
1103
1104





1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124



















1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138













1139
1140
1141
1142
1143
1144
1145
1146
1147
1148









1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194













































1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214



















1215
1216

1217
1218
1219
1220



1221
1222

1223
1224
1225
1226



1227
1228

1229
1230
1231
1232
1233
1234





1235
1236
1237
1238

1239
1240

1241
1242

1243
1244

1245
1246
1247
1248


1249
1250
1251
1252

1253
1254

1255
1256
1257

1258
1259
1260

1261
1262
1263
1264
1265
1266
1267
1268
1269
1270

1271
1272
1273
1274
1275
1276
1277
1278

1279
1280
1281
1282
1283

1284
1285
1286
1287

1288
1289
1290

1291
1292
1293
1294
1295


1296
1297

1298
1299

1300
1301

1302
1303

1304
1305

1306
1307

1308
1309
1310

1311
1312
1313

1314
1315
1316

1317
1318
1319
1320
1321

1322
1323
1324

1325
1326
1327

1328
1329
1330
1331
1332

1333
1334
1335
1336
1337
1338

1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350









1351
1352

1353
1354
1355
1356
1357
1358
1359






1360
1361
1362

1363
1364
1365
1366
1367

1368
1369
1370
1371
1372
1373
1374
1375

1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386










1387
1388
1389

1390
1391

1392
1393
1394
1395
1396

1397
1398
1399
1400
1401

1402
1403
1404
1405
1406
1407

1408
1409
1410
1411
1412
1413

1414
1415
1416
1417
1418

1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431

1432
1433
1434
1435
1436
1437
1438

1439
1440
1441

1442
1443
1444
1445

1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460











1461
1462

1463
1464
1465

1466
1467
1468
1469



1470
1471
1
2
3
4
5

6
7
8
9
10
11
12
13
14






15
16
17
18
19
20
21
22





23
24
25
26
27
28
29
30
31
32
33
34
35


36
37
38
39
40



41
42
43
44
45
46
47
48
49

50



51

52




53

54





55

56
57

58


59

60

61




62

63





64
65





66
67
68
69
70
71
72

73
74
75

76
77

78
79
80

81
82
83

84



85
86

87



88

89

90

91





92

93


94
95


96
97
98
99

100


101
102




103
104
105
106
107
108

109

110
111






112
113
114
115
116
117
118
119

120



121

122






123

124
125




126
127
128
129
130


131
132

133

134

135
136
137

138


139

140


141
142
143

144
145

146
147

148
149
150
151









152
153
154
155
156
157
158
159
160
161
162

163
164
165

166
167
168
169
170
171

172
173
174
175

176

177
178
179

180
181
182
183

184

185

186
187
188

189

190

191
192
193
194
195

196



197

198
199

200






201








202
203

204

205

206

207

208








209

210
211
212
213

214
215

216

217

218

219

220


221

222
223
224
225

226
227
228
229

230


231
232


233
234
235
236



237
238
239
240
241
242

243

244
245
246

247
248

249
250

251
252

253
254

255
256

257
258

259
260
261
262

263
264

265

266
267
268

269


270


271


272

273


274
275

276
277
278
279

280

281
282
283

284

285
286

287
288
289
290
291
292

293

294

295

296
297
298

299

300
301
302

303





304
305
306
307
308

309
310

311

312

313

314
315
316

317
318

319




320

321

322





323

324


325
326
327

328




329

330


331

332
333

334
335

336











337
338
339
340
341
342
343
344
345
346
347

348
349

350
351
352

353


354

355






356

357



358

359


360


361

362


363

364
365
366
367
368







369
370
371
372
373
374
375
376
377
378

379
380

381


382

383





384

385
386


387
388
389

390

391

392


393

394



395

396




397

398





399

400





401

402





403

404


405

406
407
408

409
410
411
412

413
414
415
416
417
418

419
420

421




422
423


424

425

426

427
428



429
430
431
432
433

434
435

436

437
438
439

440
441

442
443

444

445

446

447
448
449
450
451

452




453

454

455


456
457
458

459




460
461
462
463







464
465
466
467
468
469
470
471
472

473
474


475
476
477

478
479



480
481
482
483

484


485
486
487

488
489

490



491
492


493

494

495
496
497

498
499
500





501
502
503
504
505
506

507
508
509

510
511


512
513


514


515
516

517
518

519
520
521

522
523
524
525
526

527
528
529

530
531
532

533
534
535

536
537
538
539
540

541



542

543



544
545

546
547
548

549
550
551

552

553
554

555
556
557

558
559
560

561

562
563

564




565

566
567
568


569
570
571
572

573






574

575




576
577

578






579

580

581
582


583
584
585

586
587

588
589
590

591


592

593
594

595






596




597


598

599

600



601

602



603

604
605
606

607

608
609




610
611
612
613
614

615
616
617

618

619
620


621

622
623
624

625








626




627
628
629

630

631
632







633
634
635
636
637
638
639
















640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657

658




659

660






661
662
663
664
665


666
667



668
669

670



671

672


673

674


675

676
677
678









679
680
681
682
683
684
685
686
687
688
689

690
691

692



693

694

695

696


697




698


699

700
701

702





703





704
705


706

707
708

709




710

711

712
713
714
715
716

717

718
719
720
721
722
723
724

725



726
727

728
729
730




731
732
733
734
735

736
737
















738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754

755
756





757
758
759
760
761
762

763
764
765

766
767
768


769

770

771








772
773
774

775
776

777
778

779
780





781
782
783
784
785
786



















787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806













807
808
809
810
811
812
813
814
815
816
817
818
819
820









821
822
823
824
825
826
827
828
829
830













































831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876



















877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896

897
898



899
900
901
902

903
904



905
906
907
908

909
910





911
912
913
914
915
916
917
918

919
920

921
922

923
924

925
926



927
928




929
930

931

932

933
934


935






936
937
938

939





940
941

942



943

944


945

946

947

948


949


950
951


952


953


954


955


956
957

958
959
960

961
962
963

964
965
966

967
968
969
970
971

972
973
974

975
976
977

978
979
980
981
982

983




984

985
986
987
988









989
990
991
992
993
994
995
996
997
998

999
1000






1001
1002
1003
1004
1005
1006
1007
1008

1009
1010
1011
1012
1013

1014





1015
1016

1017
1018










1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030

1031
1032

1033



1034

1035



1036

1037




1038

1039




1040

1041



1042

1043











1044

1045




1046
1047

1048



1049


1050

1051


1052
1053











1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065

1066
1067
1068

1069
1070



1071
1072
1073



+



-
+








-
-
-
-
-
-
+
+
+
+
+
+


-
-
-
-
-
+
+
+
+
+








-
-
+
+



-
-
-
+
+
+






-
+
-
-
-

-
+
-
-
-
-

-
+
-
-
-
-
-

-
+

-
+
-
-
+
-

-
+
-
-
-
-

-
+
-
-
-
-
-


-
-
-
-
-
+
+
+
+
+


-
+


-
+

-
+


-
+


-
+
-
-
-


-
+
-
-
-

-
+
-

-
+
-
-
-
-
-

-
+
-
-


-
-
+
+


-
+
-
-


-
-
-
-
+
+
+
+


-
+
-


-
-
-
-
-
-
+
+
+
+
+
+


-
+
-
-
-

-
+
-
-
-
-
-
-

-
+

-
-
-
-
+
+
+
+

-
-
+

-
+
-

-
+


-
+
-
-

-
+
-
-



-
+

-
+

-
+



-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+

-
+


-
+





-
+



-
+
-



-
+



-
+
-

-
+


-
+
-

-
+




-
+
-
-
-

-
+

-
+
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-


-
+
-

-
+
-

-
+
-
-
-
-
-
-
-
-

-
+



-
+

-
+
-

-
+
-

-
+
-
-

-
+



-
+



-
+
-
-


-
-
+
+


-
-
-
+
+
+



-
+
-



-
+

-
+

-
+

-
+

-
+

-
+

-
+



-
+

-
+
-



-
+
-
-

-
-
+
-
-

-
+
-
-


-
+



-
+
-



-
+
-


-
+





-
+
-

-
+
-



-
+
-



-
+
-
-
-
-
-





-
+

-
+
-

-
+
-



-
+

-
+
-
-
-
-
+
-

-
+
-
-
-
-
-

-
+
-
-



-
+
-
-
-
-

-
+
-
-

-
+

-
+

-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+

-
+

-
+


-
+
-
-

-
+
-
-
-
-
-
-

-
+
-
-
-

-
+
-
-
+
-
-

-
+
-
-

-
+




-
-
-
-
-
-
-
+
+
+
+
+
+
+



-
+

-
+
-
-

-
+
-
-
-
-
-

-
+

-
-
+
+

-
+
-

-
+
-
-

-
+
-
-
-

-
+
-
-
-
-

-
+
-
-
-
-
-

-
+
-
-
-
-
-

-
+
-
-
-
-
-

-
+
-
-

-
+


-
+



-
+





-
+

-
+
-
-
-
-
+
+
-
-
+
-

-
+
-


-
-
-
+
+
+


-
+

-
+
-



-
+

-
+

-
+
-

-
+
-





-
+
-
-
-
-

-
+
-

-
-
+
+

-
+
-
-
-
-




-
-
-
-
-
-
-
+
+
+
+
+
+
+


-
+

-
-
+
+

-
+

-
-
-
+
+
+

-
+
-
-



-
+

-
+
-
-
-
+

-
-
+
-

-
+


-
+


-
-
-
-
-
+
+
+
+
+

-
+


-
+

-
-
+
+
-
-
+
-
-
+

-
+

-
+


-
+




-
+


-
+


-
+


-
+




-
+
-
-
-

-
+
-
-
-


-
+


-
+


-
+
-


-
+


-
+


-
+
-


-
+
-
-
-
-

-
+


-
-
+
+


-
+
-
-
-
-
-
-

-
+
-
-
-
-


-
+
-
-
-
-
-
-

-
+
-


-
-
+
+

-
+

-
+


-
+
-
-

-
+

-
+
-
-
-
-
-
-
+
-
-
-
-
+
-
-
+
-

-
+
-
-
-

-
+
-
-
-

-
+


-
+
-


-
-
-
-
+
+
+
+

-
+


-
+
-


-
-
+
-



-
+
-
-
-
-
-
-
-
-
+
-
-
-
-



-
+
-


-
-
-
-
-
-
-
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+
-
-
-
-

-
+
-
-
-
-
-
-
+
+
+

+
-
-
+
+
-
-
-


-
+
-
-
-

-
+
-
-

-
+
-
-

-
+


-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+


-
+

-
+
-
-
-

-
+
-

-
+
-
-
+
-
-
-
-
+
-
-

-
+

-
+
-
-
-
-
-
+
-
-
-
-
-
+
+
-
-

-
+

-
+
-
-
-
-

-
+
-





-
+
-







-
+
-
-
-


-
+


-
-
-
-
+
+
+
+

-
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+

-
-
-
-
-
+
+
+
+
+

-
+


-
+


-
-
+
-

-
+
-
-
-
-
-
-
-
-



-
+

-
+

-
+

-
-
-
-
-
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+

-
-
-
+
+
+

-
+

-
-
-
+
+
+

-
+

-
-
-
-
-
+
+
+
+
+



-
+

-
+

-
+

-
+

-
-
-
+
+
-
-
-
-
+

-
+
-

-
+

-
-
+
-
-
-
-
-
-



-
+
-
-
-
-
-


-
+
-
-
-

-
+
-
-

-
+
-

-
+
-
-

-
-
+
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+

-
+


-
+


-
+


-
+




-
+


-
+


-
+




-
+
-
-
-
-

-
+



-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+

-
+

-
-
-
-
-
-
+
+
+
+
+
+


-
+




-
+
-
-
-
-
-


-
+

-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+


-
+

-
+
-
-
-

-
+
-
-
-

-
+
-
-
-
-

-
+
-
-
-
-

-
+
-
-
-

-
+
-
-
-
-
-
-
-
-
-
-
-

-
+
-
-
-
-


-
+
-
-
-
+
-
-

-
+
-
-


-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+

-
+


-
+

-
-
-
+
+
+
-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Нетривиальные_настройки/index.html)


# Нетривиальные настройки

Материал из Tkabber Wiki
Материал из Tkabber Wiki.

## <a id="toc"></a>Содержание

* [1 Вступление](#Вступление)
* [2 Глобальные Горячие Клавиши (Windows only)](#Глобальные_Горячие_Клавиши_Windows_only)
* [3 Отладочный лог под Windows](#Отладочный_лог_под_Windows)
* [4 Хоткей для переключения между режимами ростера "все" и "только онлайн"](#Хоткей_для_переключения_между_режимами_ростера_все_и_только_онлайн)
* [5 Комбинации кнопок а-ля Unix shell в текстовых виджетах](#Комбинации_кнопок_а-ля_Unix_shell_в_текстовых_виджетах)
   * [5.1 Команды перемещения курсора](#Команды_перемещения_курсора)
   * [5.2 Команды удаления текста](#Команды_удаления_текста)
   * [5.3 Undo/Redo](#Undo_Redo)
   * [5.4 Невошедшее](#Невошедшее)
   * [5.5 Замечания](#Замечания)
   * [5.6 Дидактика](#Дидактика)
 * [5.1 Команды перемещения курсора](#Команды_перемещения_курсора)
 * [5.2 Команды удаления текста](#Команды_удаления_текста)
 * [5.3 Undo/Redo](#Undo_Redo)
 * [5.4 Невошедшее](#Невошедшее)
 * [5.5 Замечания](#Замечания)
 * [5.6 Дидактика](#Дидактика)
* [6 Копирование текста по Ctrl-C из окна чата в "иксах"](#Копирование_текста_по_Ctrl-C_из_окна_чата_в_иксах)
* [7 Предотвращение запуска нескольких процессов Ткаббера](#Предотвращение_запуска_нескольких_процессов_Ткаббера)
   * [7.1 Простое решение](#Простое_решение)
   * [7.2 Проблема](#Проблема)
   * [7.3 Альтернатива: TCP сокет](#Альтернатива_TCP_сокет)
   * [7.4 Альтернатива: Блокировка файла](#Альтернатива_Блокировка_файла)
   * [7.5 Пища для размышлений](#Пища_для_размышлений)
 * [7.1 Простое решение](#Простое_решение)
 * [7.2 Проблема](#Проблема)
 * [7.3 Альтернатива: TCP сокет](#Альтернатива_TCP_сокет)
 * [7.4 Альтернатива: Блокировка файла](#Альтернатива_Блокировка_файла)
 * [7.5 Пища для размышлений](#Пища_для_размышлений)
* [8 Отправка сообщений нажатием Ctrl-Enter](#Отправка_сообщений_нажатием_Ctrl-Enter)
* [9 Отправка сообщений по нажатию NumPad Enter](#Отправка_сообщений_по_нажатию_NumPad_Enter)
* [10 Закрытие табов по Ctrl-W](#Закрытие_табов_по_Ctrl-W)
* [11 Скрытый по умолчанию ростер](#Скрытый_по_умолчанию_ростер)
* [12 Запрет IRC-команды /exec в окнах чата](#Запрет_IRC-команды__exec_в_окнах_чата)
* [13 Отмена подсветки текста активного таба](#Отмена_подсветки_текста_активного_таба)
* [14 Настройка кнопки "Тема" в групчатах](#Настройка_кнопки_Тема_в_групчатах)
* [15 Предустановленные описания статусов](#Предустановленные_описания_статусов)
   * [15.1 Что такое описание статуса и зачем нужны предустановленные описания](#Что_такое_описание_статуса_и_зачем_нужны_предустановленные_описания)
   * [15.2 Как настроить предустановленные описания](#Как_настроить_предустановленные_описания)
 * [15.1 Что такое описание статуса и зачем нужны предустановленные описания](#Что_такое_описание_статуса_и_зачем_нужны_предустановленные_описания)
 * [15.2 Как настроить предустановленные описания](#Как_настроить_предустановленные_описания)
* [16 Добавление собственной кнопки на тулбар](#Добавление_собственной_кнопки_на_тулбар)
* [17 Собственное меню для киков в групчате](#Собственное_меню_для_киков_в_групчате)
* [18 Автоответчик](#Автоответчик)
   * [18.1 Установка](#Установка)
   * [18.2 Настройка](#Настройка)
   * [18.3 Управление](#Управление)
 * [18.1 Установка](#Установка)
 * [18.2 Настройка](#Настройка)
 * [18.3 Управление](#Управление)
* [19 Настройка положения окна уведомлений в Windows](#Настройка_положения_окна_уведомлений_в_Windows)
* [20 Собственный шрифт для ростеров](#Собственный_шрифт_для_ростеров)
* [21 Перемещение элемента меню ростера комнаты](#Перемещение_элемента_меню_ростера_комнаты)
* [22 Кнопка Send (отправить) в окне ввода сообщения](#Кнопка_Send_отправить_в_окне_ввода_сообщения)

# <a id="Вступление"></a>Вступление
Эта статья является в некотором роде парной статье [**Патчи**](Патчи.md);
Эта статья является в некотором роде парной статье [Патчи](Патчи.md); отличается она тем, что приведённые тут решения _не требуют изменения кода_ Ткаббера, что, несомненно, является для большинства применений более удачным решением. 
отличается она тем, что приведённые тут решения _не требуют изменения кода_
Ткаббера, что, несомненно, является для большинства применений более удачным
решением.

> _Важно понимать, что "нетривиальность" настроек означает прежде всего то, что
 _Важно понимать, что "нетривиальность" настроек означает прежде всего то, что большинство из них использует **недокументированные** "внутренности" Ткаббера, и это означает, что эти настройки могут "сломаться" новым релизом Ткаббера (или даже при следующем обновлении из репозитория, если вы следите за разработкой)._ 
  большинство из них использует **недокументированные** "внутренности" Ткаббера,
  и это означает, что эти настройки могут "сломаться" новым релизом Ткаббера
  (или даже при следующем обновлении из репозитория, если вы следите за
  разработкой)._

Страшного, впрочем, ничего нет, так как, во-первых, за подобную гибкость
Страшного, впрочем, ничего нет, так как, во-первых, за подобную гибкость приходится платить, а во-вторых,в новых релизах зачастую меняются и документированные интерфейсы. А уж стабильность нестабильных версий и обсуждать странно. Вообще же не стоит воспринимать только что изложенное слишком серьёзно: просто имейте в виду возможные затруднения. На самом деле изменения, затрагивающие работу приведённых здесь настроек, производятся крайне редко. 
приходится платить, а во-вторых,в новых релизах зачастую меняются и
документированные интерфейсы. А уж стабильность нестабильных версий и обсуждать
странно. Вообще же не стоит воспринимать только что изложенное слишком
серьёзно: просто имейте в виду возможные затруднения. На самом деле изменения,
затрагивающие работу приведённых здесь настроек, производятся крайне редко.

Статья пытается достичь двух целей:
Статья пытается достичь двух целей: 

* Быть "книгой рецептов" — _готовых к употреблению_ решений некоторых проблем
*  Быть "книгой рецептов" — _готовых к употреблению_ решений некоторых проблем или осуществлению нестандартного поведения Ткаббера. 
  или осуществлению нестандартного поведения Ткаббера.
* Объяснить _как_ работают приведённые решения, то есть снабдить пользователей
*  Объяснить _как_ работают приведённые решения, то есть снабдить пользователей Ткаббера некоторым набором знаний для самостоятельного решения схожих задач. 
  Ткаббера некоторым набором знаний для самостоятельного решения схожих задач.

Если вы только подступаетесь к нетривиальной конфигурации Ткаббера, потрудитесь
Если вы только подступаетесь к нетривиальной конфигурации Ткаббера, потрудитесь изучить [эту статью](Config.tcl.md). Там же можно найти информацию о подходах к тестированию новой конфиругации. Если же и само существование/местоположение файла конфигурации Ткаббера для вас неочевидно, начните [отсюда](Config.tcl_для_начинающих.md). 
изучить [**эту статью**](Config.tcl.md). Там же можно найти информацию о подходах к
тестированию новой конфиругации. Если же и само существование/местоположение
файла конфигурации Ткаббера для вас неочевидно, начните
[**отсюда**](Config.tcl_для_начинающих.md).

Часто задаётся вопрос: что означает выражение "впишите в файл конфигурации _вне
Часто задаётся вопрос: что означает выражение "впишите в файл конфигурации _вне хуков_ ..."? Оно означает, что приведённый кусок кода должен находиться "на верхнем уровне" файла конфигурации, или — можно сказать и так — вне любого блока, ограниченного {}. Не забывайте: приведённый в рецепте код скорее всего не будет иметь смысла внутри какого-либо хука, то есть не следует допускать таких записей: 
хуков_ ..."? Оно означает, что приведённый кусок кода должен находиться "на
верхнем уровне" файла конфигурации, или — можно сказать и так — вне любого
блока, ограниченного {}. Не забывайте: приведённый в рецепте код скорее всего
не будет иметь смысла внутри какого-либо хука, то есть не следует допускать
таких записей:

    hook::add some_hook {
        ...
        # тут -- ваш кусок кода:
        hook::add some_other_hook {
            ...
        }
    ...
      # тут -- ваш кусок кода:
      hook::add some_other_hook {
      ...
      }
    }

убедитесь, что вы поместили код на "чистое место":
убедитесь, что вы поместили код на "чистое место": 

    hook::add some_hook {
        ...
    ...
    }

    
    # тут -- ваш кусок кода:
    hook::add some_other_hook {
        ...
    ...
    }

Ещё один часто всплывающий вопрос касается привязки комбинаций клавиш — под
Ещё один часто всплывающий вопрос касается привязки комбинаций клавиш — под Windows привязки на буквенно-цифровые клавиши работают только на английской раскладке. Эта проблема подробно рассмотрена [здесь](Wish_и_русская_раскладка_в_Windows.md). 
Windows привязки на буквенно-цифровые клавиши работают только на английской
раскладке. Эта проблема подробно рассмотрена
[**здесь**](Wish_и_русская_раскладка_в_Windows.md).

# <a id="Глобальные_Горячие_Клавиши_Windows_only"></a>Глобальные Горячие Клавиши (Windows only)
Для разминки давайте прикрутим к Ткабберу стандартную возможность задавать
Для разминки давайте прикрутим к Ткабберу стандартную возможность задавать горячие клавиши (hotkeys) так, чтобы они действовали независимо от того, активно окно Ткаббера в данный момент или нет. Дальше по тексту такие hotkeys мы будем называть "Глобальные Горячие Клавиши" - **ГГК** (от "global hotkeys"). 
горячие клавиши (hotkeys) так, чтобы они действовали независимо от того,
активно окно Ткаббера в данный момент или нет. Дальше по тексту такие hotkeys
мы будем называть "Глобальные Горячие Клавиши" - **ГГК** (от "global hotkeys").

Поддержку ГГК можно реализовать только под Windows, где такая концепция
Поддержку ГГК можно реализовать только под Windows, где такая концепция существует на уровне ОС. 
существует на уровне ОС.

Однако, Tk в Windows самостоятельно не поддерживает ГГК, поэтому необходимо
Однако, Tk в Windows самостоятельно не поддерживает ГГК, поэтому необходимо скачать [библиотеку Winutils](http://sourceforge.net/projects/tomasoft). После чего распакуйте эту библиотеку в поддиректорию **tkabber/winutil/** в вашей директории с исходниками Ткаббера (то, что называется $::rootdir в Ткаббере). _Для примера, на том же уровне иерархии находятся директории ifaceck и ifacetk, к которым мы ещё вернёмся в следующем патче._ 
скачать [библиотеку Winutils](http://sourceforge.net/projects/tomasoft). После
чего распакуйте эту библиотеку в поддиректорию **tkabber/winutil/** в вашей
директории с исходниками Ткаббера (то, что называется $::rootdir в Ткаббере).
_Для примера, на том же уровне иерархии находятся директории ifaceck и ifacetk,
к которым мы ещё вернёмся в следующем патче._

Для того, чтобы эта библиотека подключилась на следующей загрузке вашего
Для того, чтобы эта библиотека подключилась на следующей загрузке вашего Ткаббера, необходимо добавить следующие строчки в ваш config.tcl (файл настроек): 
Ткаббера, необходимо добавить следующие строчки в ваш config.tcl (файл
настроек):

    if {[file exists $rootdir/winutil/winutils.tcl]} {
        # This will load the neccessary dll on start up
        source $rootdir/winutil/winutils.tcl
      # This will load the neccessary dll on start up
      source $rootdir/winutil/winutils.tcl
    }

Теперь необходимо настроить горячие клавиши. Для этого опять откройте на
Теперь необходимо настроить горячие клавиши. Для этого опять откройте на редактирование файл config.tcl, найдите в нём секцию **hook::add finload\_hook** и вставьте в её конец следующие строки: 
редактирование файл config.tcl, найдите в нём секцию **hook::add
finload\_hook** и вставьте в её конец следующие строки:

      winutils::hotkey #auto Ctrl+Shift+I {
          switch -- [wm state .] {
              normal  { wm state . iconic }
              default { wm state . normal }
          }
        switch -- [wm state .] {
          normal  { wm state . iconic }
          default { wm state . normal }
        }
      }

То есть, если у вас ранее не было такой секции либо она была пустой, полный
То есть, если у вас ранее не было такой секции либо она была пустой, полный кусок кода должен выглядеть так: 
кусок кода должен выглядеть так:

    hook::add finload_hook {
        winutils::hotkey #auto Ctrl+Shift+I {
            switch -- [wm state .] {
                normal  { wm state . iconic }
                default { wm state . normal }
            }
        }
      winutils::hotkey #auto Ctrl+Shift+I {
        switch -- [wm state .] {
          normal  { wm state . iconic }
          default { wm state . normal }
        }
      }
    }

После чего сохраните файл config.ctl и перезагрузите Ткаббер. Если всё сделано
После чего сохраните файл config.ctl и перезагрузите Ткаббер. Если всё сделано правильно, то вы сможете скрывать или открывать главное окно программы, нажимая **Ctrl-Shift-I** (как это сделано в [Миранде](http://miranda-im.org/)). В принципе ГГК может быть любой, как и действия, которые она должна выполнять.  
правильно, то вы сможете скрывать или открывать главное окно программы, нажимая
**Ctrl-Shift-I** (как это сделано в [Миранде](http://miranda-im.org/)). В
принципе ГГК может быть любой, как и действия, которые она должна выполнять.

И наконец, самое важное - выбрать клавиши, которые вам удобны, и действия,
И наконец, самое важное - выбрать клавиши, которые вам удобны, и действия, которые вам нужны.  Воспользуйтесь моим примером (с действием, которое было нужно мне) и настройте те действия, что удобны вам. Не забудьте потом зайти к нам в конференцию `[xmpp:tkabber@conference.jabber.ru](xmpp:tkabber@conference.jabber.ru)` и рассказать, что у вас получилось :) Может быть, кому-нибудь ещё окажется полезен ваш опыт. 
которые вам нужны.  Воспользуйтесь моим примером (с действием, которое было
нужно мне) и настройте те действия, что удобны вам. Не забудьте потом зайти к
нам в конференцию
[`xmpp:tkabber@conference.jabber.ru`](xmpp:tkabber@conference.jabber.ru) и
рассказать, что у вас получилось :) Может быть, кому-нибудь ещё окажется
полезен ваш опыт.

Таким образом, ваши действия сводятся к следующим пунктам:
Таким образом, ваши действия сводятся к следующим пунктам: 

1.  Установить winutil;
1.  Подключить winutil через config.tcl;
1.  Настроить горячие клавиши в config.tcl;
1.  Перезагрузить Ткаббер и наслаждаться ещё одной его возможностью.
1.  Установить winutil; 
1.  Подключить winutil через config.tcl; 
1.  Настроить горячие клавиши в config.tcl; 
1.  Перезагрузить Ткаббер и наслаждаться ещё одной его возможностью. 

Автор — [**lknight**](Участник_Lknight.md).
[English variant of this tutorial](http://tkabber.jabber.ru/global-hotkeys-windows)
Автор — [Участник:lknight](Участник_Lknight.md). **[English variant of this tutorial](http://tkabber.jabber.ru/global-hotkeys-windows)** 

_Если к моменту, когда вы читаете это описание, линки на файлы/проекты уже
_Если к моменту, когда вы читаете это описание, линки на файлы/проекты уже устарели, вы можете скачать актуальные на **октябрь 2005** файлы тут:_ 
устарели, вы можете скачать актуальные на **октябрь 2005** файлы тут:_

* [WinUtils 0.8](../files/Winutil08.zip)
* [WinUtils 0.8](../files/Winutil08.zip) 

# <a id="Отладочный_лог_под_Windows"></a>Отладочный лог под Windows
Wish под Windows не имеет открытых потоков **stdout** и **stderr**, которые
Wish под Windows не имеет открытых потоков **stdout** и **stderr**, которые можно куда-либо перенаправить; точнее, эти потоки направлены в [консоль процесса wish](Ткаббер_ЧаВо.md#Консоль_Ткаббера). 
можно куда-либо перенаправить; точнее, эти потоки направлены в
[**консоль процесса wish**](Ткаббер_ЧаВо.md#Консоль_Ткаббера).

С другой стороны, Ткаббер повсеместно использует для отладки процедуру
С другой стороны, Ткаббер повсеместно использует для отладки процедуру **debugmsg**, которая как раз "ругается" на **stdout**. Поэтому стандартное юниксовое заклинание 
**debugmsg**, которая как раз "ругается" на **stdout**. Поэтому стандартное
юниксовое заклинание

    tkabber >/tmp/TKABBER_LOG 2>&1

здесь не проходит.
здесь не проходит. 

Обходной путь такой.
Обходной путь такой. 

В начало **config.tcl** добавляем:
В начало **config.tcl** добавляем: 

    # Отладка (1 -- включена, 0 -- выключена):
    if {1} {
        set debug_lvls {hook plugin chat}

        set logfile [file join [file norm ~] .tkabber TKABBER_LOG]

        close stdout
        open $logfile w

        close stderr
        open $logfile a
      set debug_lvls {hook plugin chat}
    
      set logfile [file join [file norm ~] .tkabber TKABBER_LOG]
    
      close stdout
      open $logfile w
    
      close stderr
      open $logfile a
    
    } else {
        set debug_lvls {}
      set debug_lvls {}
    }

Этот код перенаправляет стандартные потоки вывода в файл
Этот код перенаправляет стандартные потоки вывода в файл 

    ВАШ_ДОМАШНИЙ_КАТАЛОГ\.tkabber\TKABBER_LOG

---

Список классов отладочной информации, определённый здесь как
Список классов отладочной информации, определённый здесь как 

    set debug_lvls {hook plugin chat}

естественно, имеет смысл отредактировать под ваши нужды. К примеру, при отладке
естественно, имеет смысл отредактировать под ваши нужды. К примеру, при отладке собственного плагина **frobozz** можно использовать в его коде команды типа 
собственного плагина **frobozz** можно использовать в его коде команды типа

    debugmsg frobozz "foo: $foo; bar: $bar"

и внести **frobozz** в список классов отладочных сообщений:
и внести **frobozz** в список классов отладочных сообщений: 

    lappend debug_lvls frobozz

Подробности по поводу магии переоткрывания стандартных потоков ввода/вывода в
Подробности по поводу магии переоткрывания стандартных потоков ввода/вывода в тикле описаны [здесь](http://www.tcl.tk/man/tcl8.4/TclLib/StdChannels.htm). 
тикле описаны [здесь](http://www.tcl.tk/man/tcl8.4/TclLib/StdChannels.htm).

Стандартные потоки перенаправлял [**Kostix**](Участник_Kostix.md).
Стандартные потоки перенаправлял [Kostix](Участник_Kostix.md). 

# <a id="Хоткей_для_переключения_между_режимами_ростера_все_и_только_онлайн"></a>Хоткей для переключения между режимами ростера "все" и "только онлайн"
Ниже приведён кусочек кода, вешающий на комбинацию Ctrl-o циклическое
Ниже приведён кусочек кода, вешающий на комбинацию Ctrl-o циклическое переключение между режимами ростера "все" и "только онлайн". 
переключение между режимами ростера "все" и "только онлайн".

Забейте в конфиг вне хуков:
Забейте в конфиг вне хуков: 

    bind Text <Control-Key-o> {}
    bind . <Control-Key-o> ifacetk::roster::switch_only_online

Измените хоткей Ctrl-o по вкусу согласно
Измените хоткей Ctrl-o по вкусу согласно [этого документа](http://www.tcl.tk/man/tcl8.4/TkCmd/bind.htm). Если вы выберете комбинацию, отличную от Ctrl-o, то первая команда из двух вам не потребуется (однако смотрите ниже, чтобы подготовиться к возможным сюрпризам). 
[этого документа](http://www.tcl.tk/man/tcl8.4/TkCmd/bind.htm). Если вы выберете
комбинацию, отличную от Ctrl-o, то первая команда из двух вам не потребуется
(однако смотрите ниже, чтобы подготовиться к возможным сюрпризам).

Пояснения для въедливых:
Пояснения для въедливых: 

* Первая команда отучает текстовые виджеты Tk (используемые для реализации
*  Первая команда отучает текстовые виджеты Tk (используемые для реализации полей ввода чата в Ткаббере) реагировать на комбинацию Ctrl-o, на которую там повешено действие "добавить пустую строку под курсор". Это шаманство требуется потому, что большую часть времени вы будете нажимать Ctrl-o в тот момент, когда фокус ввода будет в одном из полей ввода чата, которое и будет пытаться его обработать раньше главного окна (см. ниже). 
  полей ввода чата в Ткаббере) реагировать на комбинацию Ctrl-o, на которую там
  повешено действие "добавить пустую строку под курсор". Это шаманство
  требуется потому, что большую часть времени вы будете нажимать Ctrl-o в тот
  момент, когда фокус ввода будет в одном из полей ввода чата, которое и будет
  пытаться его обработать раньше главного окна (см. ниже).
* Вторая команда прибивает выполнение нужного нам действия к главному окну
*  Вторая команда прибивает выполнение нужного нам действия к главному окну приложения (которое в Tk называется ".") — (весьма продвинутая) реализация привязок событий к виджетам, реализованная в Tk, делает так, что, если программистом не указано обратное, любой виджет, в котором нет привязки некоторого действия к произошедшему в нём событию, в конечном итоге отправит это событие главному окну. Поэтому наша команда делает так, что нужная нам комбинация клавиш будет работать независимо от того, где находится фокус ввода. За подробностями отправляйтесь к документации по команде [bindtags](http://www.tcl.tk/man/tcl8.5/TkCmd/bindtags.htm). 
  приложения (которое в Tk называется ".") — (весьма продвинутая) реализация
  привязок событий к виджетам, реализованная в Tk, делает так, что, если
  программистом не указано обратное, любой виджет, в котором нет привязки
  некоторого действия к произошедшему в нём событию, в конечном итоге отправит
  это событие главному окну. Поэтому наша команда делает так, что нужная нам
  комбинация клавиш будет работать независимо от того, где находится фокус
  ввода. За подробностями отправляйтесь к документации по команде
  [bindtags](http://www.tcl.tk/man/tcl8.5/TkCmd/bindtags.htm).

# <a id="Комбинации_кнопок_а-ля_Unix_shell_в_текстовых_виджетах"></a>Комбинации кнопок а-ля Unix shell в текстовых виджетах
> **Внимание!** Данная функциональность реализована готовым
 **Внимание!** Данная функциональность реализована готовым [плагином](Плагины.md#unixkeys). 
  [**плагином**](Плагины.md#Unixkeys).

Тут рассказывается о том, как прикрутить к текстовым виджетам в Ткаббере
Тут рассказывается о том, как прикрутить к текстовым виджетам в Ткаббере "юниксшелловые" комбинации кнопок. 
"юниксшелловые" комбинации кнопок.

Естественно, это _не_ "комбинации кнопок юниксового шелла" в строгом смысле
Естественно, это _не_ "комбинации кнопок юниксового шелла" в строгом смысле этого понятия, ибо строгого смысла у этого понятия нет, да и само понятие слишком расплывчато. Это — неполное воспроизведение набора команд по уполчанию библиотеки **GNU Readline**. Если у вас есть под боком система с **Readline**, документация на неё обычно доступна в формате GNU Texinfo, а вас интересует страница руководства "rluserman". Кроме того, некоторые приведённые команды "взяты" из оболочки **bash**. Проще говоря, эти настройки подойдут тем, чьи "клавиатурные" рефлексы "заточены" на bash-подобную оболочку, режим вставки Vim'а и прочие похожие вещи. 
этого понятия, ибо строгого смысла у этого понятия нет, да и само понятие
слишком расплывчато. Это — неполное воспроизведение набора команд по уполчанию
библиотеки **GNU Readline**. Если у вас есть под боком система с **Readline**,
документация на неё обычно доступна в формате GNU Texinfo, а вас интересует
страница руководства "rluserman". Кроме того, некоторые приведённые команды
"взяты" из оболочки **bash**. Проще говоря, эти настройки подойдут тем, чьи
"клавиатурные" рефлексы "заточены" на bash-подобную оболочку, режим вставки
Vim'а и прочие похожие вещи.

Приведённые настройки нужно писать в конфиг Ткаббера.
Приведённые настройки нужно писать в конфиг Ткаббера. 

## <a id="Команды_перемещения_курсора"></a>Команды перемещения курсора

По умолчанию работают и не требуют дополнительных настроек следующие команды:
По умолчанию работают и не требуют дополнительных настроек следующие команды: 

*  Ctrl-b и Ctrl-f — переместить курсор на символ назад и вперёд,
*  Ctrl-b и Ctrl-f — переместить курсор на символ назад и вперёд, соответственно. 
   соответственно.

*  Ctrl-a и Ctrl-e — переместить курсор в начало и конец текущей строки,
*  Ctrl-a и Ctrl-e — переместить курсор в начало и конец текущей строки, соответственно. 
   соответственно.

Реализация следующих двух команд использует возможности интроспекции,
Реализация следующих двух команд использует возможности интроспекции, предоставляемые тиклем — мы заимствуем реализацию нужных нам действий у существующих команд: 
предоставляемые тиклем — мы заимствуем реализацию нужных нам действий у
существующих команд:

Alt-b — переместить курсор на слово влево:
Alt-b — переместить курсор на слово влево: 

    bind Text <Alt-b> [bind Text <Control-Key-Left>]

Alt-f — переместить курсор на слово вправо:
Alt-f — переместить курсор на слово вправо: 

    bind Text <Alt-f> [bind Text <Control-Key-Right>]

**Примечание:** на некоторых системах, возможно, вместо `Alt` понадобится
**Примечание:** на некоторых системах, возможно, вместо `Alt` понадобится указывать модификатор `Meta`. Можно воспользоваться "копипастом", а можно заставить работать тикль: 
указывать модификатор `Meta`. Можно воспользоваться "копипастом", а можно
заставить работать тикль:

    array set map {
        b Left
        f Right
      b Left
      f Right
    }
    foreach key [array names map] {
        foreach mod {Alt Meta} {
            bind Text <$mod-$key> [bind Text <Control-Key-$map($key)>]
        }
      foreach mod {Alt Meta} {
        bind Text <$mod-$key> [bind Text <Control-Key-$map($key)>]
      }
    }
    unset map key mod

Эта команда создаст четыре биндинга: Alt-b, Meta-b, Alt-f; и Meta-f,
Эта команда создаст четыре биндинга: Alt-b, Meta-b, Alt-f; и Meta-f, привязанные к соответствующим командам. 
привязанные к соответствующим командам.

## <a id="Команды_удаления_текста"></a>Команды удаления текста

По умолчанию работают и не требуют дополнительных настроек следующие команды:
По умолчанию работают и не требуют дополнительных настроек следующие команды: 

*  BackSpace — удалить символ слева от курсора.
*  BackSpace — удалить символ слева от курсора. 

*  Del и Ctrl-d — удалить символ справа от курсора.
*  Del и Ctrl-d — удалить символ справа от курсора. 

*  Ctrl-k — убить текст от позиции курсора до конца строки.
*  Ctrl-k — убить текст от позиции курсора до конца строки. 

Усовершенствуем встроенные возможности несколькими командами.
Усовершенствуем встроенные возможности несколькими командами. 

Данной команды нет в **Readline**, но она есть в **bash**:
Данной команды нет в **Readline**, но она есть в **bash**: 

Ctrl-u — убить текст от начала строки до позиции курсора:
Ctrl-u — убить текст от начала строки до позиции курсора: 

    bind Text <Control-u> { %W delete {insert linestart} insert}

Теперь — убиение по границам слов:
Теперь — убиение по границам слов: 

Alt-BackSpace — удалить текст от курсора до начала слова, содержащего позицию
Alt-BackSpace — удалить текст от курсора до начала слова, содержащего позицию курсора, или до начала предыдущего слова, если курсор стоит между словами: 
курсора, или до начала предыдущего слова, если курсор стоит между словами:

    bind Text <Alt-Key-BackSpace> { %W delete [tk::TextPrevPos %W insert tcl_startOfPreviousWord] insert }

Ситуация несколько сложнее с Control-w: в руководстве на **Readline** сказано,
Ситуация несколько сложнее с Control-w: в руководстве на **Readline** сказано, что эта команда удаляет текст до предыдущего пробела и таким образом отличается от Alt-BackSpace. 
что эта команда удаляет текст до предыдущего пробела и таким образом отличается
от Alt-BackSpace.

Лично мне ([**Kostix**](Участник_Kostix.md)) эта разница ясна не вполне.
Получается, что Ctrl-w не должна стирать  "foo", если нажата в ситуации "foo  |
Лично мне ([Kostix](Участник_Kostix.md)) эта разница ясна не вполне. Получается, что Ctrl-w не должна стирать  "foo", если нажата в ситуации "foo  | bar" ("|" отмечает позицию курсора). Но она _сотрёт_ это слово, будучи активирована в **bash**. Там она работает в точности, как предыдушая команда. 
bar" ("|" отмечает позицию курсора). Но она _сотрёт_ это слово, будучи
активирована в **bash**. Там она работает в точности, как предыдушая команда.

Одним словом, "suggestions are welcome", но здесь предлагается не
Одним словом, "suggestions are welcome", но здесь предлагается не заморачиваться и повесить на Ctrl-w ту же команду, что и на Alt-BackSpace. Здесь тоже имеет смысл призвать на помощь тикль: 
заморачиваться и повесить на Ctrl-w ту же команду, что и на Alt-BackSpace.
Здесь тоже имеет смысл призвать на помощь тикль:

    foreach {mod key} {Alt BackSpace Control w} {
        bind Text <$mod-Key-$key> { %W delete ...
      bind Text <$mod-Key-$key> { %W delete ...
    }
    unset mod key

Alt-d — удалить текст от курсора до конца слова, содержащего позицию курсора,
Alt-d — удалить текст от курсора до конца слова, содержащего позицию курсора, или до конца следующего слова, если курсор стоит между словами: 
или до конца следующего слова, если курсор стоит между словами:

    bind Text <Alt-Key-d> { %W delete insert [::tk::TextNextPos %W insert tcl_endOfWord] }

Эту же команду может выполнять Alt-Del; повесьте на неё ту же команду, что и
Эту же команду может выполнять Alt-Del; повесьте на неё ту же команду, что и для Alt-d. И опять пусть за нас работает тикль: 
для Alt-d. И опять пусть за нас работает тикль:

    foreach key {d Delete} {
        bind Text <Alt-Key-$key> { ...
      bind Text <Alt-Key-$key> { ...
    }
    unset key

## <a id="Undo_Redo"></a>Undo/Redo

Сначала — две команды, отменяющие любое последнее действие по редактированию
Сначала — две команды, отменяющие любое последнее действие по редактированию текста: 
текста:

Ctrl-\_ работает в "иксовых" версиях Tk; для добавления такой поддержки в
Ctrl-\_ работает в "иксовых" версиях Tk; для добавления такой поддержки в Windows нужно сделать: 
Windows нужно сделать:

    event add <<Undo>> <Control-Key-underscore>

Ctrl-x,Ctrl-u добавляется (заодно показывая синтаксис "цепочечных" событий в
Ctrl-x,Ctrl-u добавляется (заодно показывая синтаксис "цепочечных" событий в Tk) так: 
Tk) так:

    event add <<Undo>> <Control-Key-x><Control-Key-u>

Следующая команда — Ctrl-y — не может иметь чёткого эквивалента, поскольку
Следующая команда — Ctrl-y — не может иметь чёткого эквивалента, поскольку вставляет последний кусок текста, удалённый из строки и помещённый в kill-ring **Readline** (а у текстовых виджетов Tk нет такой штуки). Однако фактически это действие очень похоже на "Redo", и именно на эту комбинацию и повешено "Redo" в Windows. В "иксовом" Tk Ctrl-y означает "вставить текст из CLIPBOARD". Если есть желание "перебить" его чтоб было как "в виндах" и **bash**, то: 
вставляет последний кусок текста, удалённый из строки и помещённый в kill-ring
**Readline** (а у текстовых виджетов Tk нет такой штуки). Однако фактически это
действие очень похоже на "Redo", и именно на эту комбинацию и повешено "Redo" в
Windows. В "иксовом" Tk Ctrl-y означает "вставить текст из CLIPBOARD". Если
есть желание "перебить" его чтоб было как "в виндах" и **bash**, то:

    bind <<Redo>> <Control-Key-y>

## <a id="Невошедшее"></a>Невошедшее

Пару команд **GNU Readline** мы обошли стороной:
Пару команд **GNU Readline** мы обошли стороной: 

*  Ctrl-l — перерисовать экран — по-видимому, смысла в контексте виджета Text
*  Ctrl-l — перерисовать экран — по-видимому, смысла в контексте виджета Text не имеет. 
   не имеет.

*  M-y — "вращение" kill-ring'а **Readline** — как-то тоже не вписывается, т.к.
*  M-y — "вращение" kill-ring'а **Readline** — как-то тоже не вписывается, т.к. стеком Undo/Redo управлять, насколько мне изестно, нельзя. 
   стеком Undo/Redo управлять, насколько мне изестно, нельзя.

## <a id="Замечания"></a>Замечания

Пытливые умы могли заметить, что использовались две команды — `bind` и `event`.
Пытливые умы могли заметить, что использовались две команды — `bind` и `event`. 

*  Первая (в нашем случае) связывала воедино триплет "класс виджета, событие
*  Первая (в нашем случае) связывала воедино триплет "класс виджета, событие Tk, скрипт для выполнения", и с ней всё просто: ко всем виджетам класса `Text` в Ткаббере привязываются скрипты, которые выполняются при наступлении соответствующих событий (нажатий комбинаций клавиш). 
   Tk, скрипт для выполнения", и с ней всё просто: ко всем виджетам класса
   `Text` в Ткаббере привязываются скрипты, которые выполняются при наступлении
   соответствующих событий (нажатий комбинаций клавиш).
*  Вторая связывала скрипты с _виртуальными событиями Tk_, которые уже связаны
*  Вторая связывала скрипты с _виртуальными событиями Tk_, которые уже связаны с (в том числе) виджетами класса `Text`. 
   с (в том числе) виджетами класса `Text`.

Вывод, который следует из такого разделения, прост: те привязки, которые
Вывод, который следует из такого разделения, прост: те привязки, которые делались к виртуальным событиям, будут работать помимо `Text` в виджете любого класса, который эти события поддерживает. А те привязки, которые делались к классу `Text`, будут работать только в текстовых виджетах. То есть не надо ожидать, что они будут работать в однострочных полях ввода (класс `Entry`) или комбобоксах (это вообще пакет BWidget и класс надо выяснять). 
делались к виртуальным событиям, будут работать помимо `Text` в виджете любого
класса, который эти события поддерживает. А те привязки, которые делались к
классу `Text`, будут работать только в текстовых виджетах. То есть не надо
ожидать, что они будут работать в однострочных полях ввода (класс `Entry`) или
комбобоксах (это вообще пакет BWidget и класс надо выяснять).

Нужно ли заморачиваться с подобной "тонкой настройкой" нетекстовых виджетов
Нужно ли заморачиваться с подобной "тонкой настройкой" нетекстовых виджетов (например, однострочных полей ввода) — вопрос философский. Как говорится, "patches are welcome". 
(например, однострочных полей ввода) — вопрос философский. Как говорится,
"patches are welcome".

## <a id="Дидактика"></a>Дидактика

Поскольку цель данной вики заключается не только в том, чтобы вложить в руки
Поскольку цель данной вики заключается не только в том, чтобы вложить в руки пролетариата пар и электричество, но и в том, чтобы вооружить начинающих ткабберин и ткабберистов необходимым знанием для самостоятельного ковыряния Ткаббера, а главное — неуклонно пропагандировать дао этого Jabber-клиента, мы расскажем здесь, как были получены изложенные в данном разделе сведения. 
пролетариата пар и электричество, но и в том, чтобы вооружить начинающих
ткабберин и ткабберистов необходимым знанием для самостоятельного ковыряния
Ткаббера, а главное — неуклонно пропагандировать дао этого Jabber-клиента, мы
расскажем здесь, как были получены изложенные в данном разделе сведения.

Посему ниже приведены некоторые идеи относительно данного раздела. Перед
Посему ниже приведены некоторые идеи относительно данного раздела. Перед чтением убедитесь, что вы приняли позу лотоса, левитируя, и ваша [сахасрара](http://www.chakra.ru/sahasrara.htm) полностью открыта. 
чтением убедитесь, что вы приняли позу лотоса, левитируя, и ваша
[сахасрара](http://www.chakra.ru/sahasrara.htm) полностью открыта.

![(!)](../images/Hammer.png) **Сделать:** написать про основные идеи ковыряния
![(!)](../images/Hammer.png) **Сделать:** написать про основные идеи ковыряния 

Примерный план:
Примерный план: 

*  понимание того, что Tcl/Tk — скриптовый и ультра-динамический язык, то есть
*  понимание того, что Tcl/Tk — скриптовый и ультра-динамический язык, то есть можно делать радикальные модернизации кода готового приложения; 
   можно делать радикальные модернизации кода готового приложения;
*  выяснение того, что chat input window — виджет Text;
*  чтение мануалов (man text event bind);
*  интроспекция и забавы с tkcon и простым виджетом text:
 *  bind Text; поиск по выводу;
 *  bind Text EVENT\_SPEC и анализ его вывода;
 *  info args, info body;
 *  info commands и ограничение его поиска.
 *  команды виджета Text;
 *  сложные текстовые индексы виджета Text;
 *  быстрое тестирование в tkcon.
*  выяснение того, что chat input window — виджет Text; 
*  чтение мануалов (man text event bind); 
*  интроспекция и забавы с tkcon и простым виджетом text: 
 *  bind Text; поиск по выводу; 
 *  bind Text EVENT\_SPEC и анализ его вывода; 
 *  info args, info body; 
 *  info commands и ограничение его поиска. 
 *  команды виджета Text; 
 *  сложные текстовые индексы виджета Text; 
 *  быстрое тестирование в tkcon. 

...
... 

"More юникс вея" в Ткаббер добавлял [**Kostix**](Участник_Kostix.md).
"More юникс вея" в Ткаббер добавлял [Kostix](Участник_Kostix.md). 

# <a id="Копирование_текста_по_Ctrl-C_из_окна_чата_в_иксах"></a>Копирование текста по Ctrl-C из окна чата в "иксах"
Ниже приведён кусок кода, который позволяет в Ткаббере "под иксами" копировать
Ниже приведён кусок кода, который позволяет в Ткаббере "под иксами" копировать текст из окна чата (из того, в котором ведётся _протокол_ чата), используя стандартные клавиатурные комбинации копирования текста. 
текст из окна чата (из того, в котором ведётся _протокол_ чата), используя
стандартные клавиатурные комбинации копирования текста.

Проблема с "недопиленным" Ткаббером заключается в том, что окно чата никогда не
Проблема с "недопиленным" Ткаббером заключается в том, что окно чата никогда не получает клавиатурный фокус, что необходимо для работы "хоткеев". В Windows комбинация Ctrl-C работает для данного окна потому, что в Windows не поддерживается механизм ["PRIMARY selection"](http://freedesktop.org/wiki/Standards_2fClipboardsWiki) — копирование текста из виджета, не получающего клавиатурный фокус было бы в противном случае невозможно. 
получает клавиатурный фокус, что необходимо для работы "хоткеев". В Windows
комбинация Ctrl-C работает для данного окна потому, что в Windows не
поддерживается механизм
["PRIMARY selection"](http://freedesktop.org/wiki/Standards_2fClipboardsWiki) —
копирование текста из виджета, не получающего клавиатурный фокус было бы в
противном случае невозможно.

"Иксовое ограничение" преодолевается следующим образом: на окно _ввода текста_
"Иксовое ограничение" преодолевается следующим образом: на окно _ввода текста_ чата вешается собственный обработчик, который, будучи вызван по любой стандартной (и нестандартной) комбинации клавиш, соответствующей действию "копировать текст", проверяет: 
чата вешается собственный обработчик, который, будучи вызван по любой
стандартной (и нестандартной) комбинации клавиш, соответствующей действию
"копировать текст", проверяет:

*  если в окне ввода текста есть выделенный текст, то выполняется стандартное
*  если в окне ввода текста есть выделенный текст, то выполняется стандартное для окна действие по копированию этого текста; 
   для окна действие по копированию этого текста;
*  если в окне ввода нет выделенного текста, то действие "копировать текст"
*  если в окне ввода нет выделенного текста, то действие "копировать текст" эмулируется в соответствующем окне протокола чата — если там есть выделенный текст, он копируется в буфер обмена. 
   эмулируется в соответствующем окне протокола чата — если там есть выделенный
   текст, он копируется в буфер обмена.

Таким образом, пользователь всегда жмёт хоткей "копировать текст" в окне ввода
Таким образом, пользователь всегда жмёт хоткей "копировать текст" в окне ввода текста чата, но текст копируется из того окна (ввода текста или протокола), в котором в данный момент есть выделенный текст. 
текста чата, но текст копируется из того окна (ввода текста или протокола), в
котором в данный момент есть выделенный текст.

Этот код следует поместить в **config.tcl** вне любых хуков.
Этот код следует поместить в **config.tcl** вне любых хуков. 

    # Customize chat input window bindings:
    namespace eval my {}
    proc my::tweak_chat_input_window {chatid type} {
        set cw [chat::chat_win $chatid]
        set iw [chat::input_win $chatid]

        bind $iw <<Copy>> [list \
            if {[string equal [selection own] %W]} [bind $iw <<Copy>>] \
            else [list event generate $cw <<Copy>>]
        ]
      set cw [chat::chat_win $chatid]
      set iw [chat::input_win $chatid]
    
      bind $iw <<Copy>> [list \
        if {[string equal [selection own] %W]} [bind $iw <<Copy>>] \
        else [list event generate $cw <<Copy>>]
      ]
    }
    hook::add open_chat_post_hook my::tweak_chat_input_window

**Принцип действия** (можно не читать):
**Принцип действия** (можно не читать): 

Для начала мы создаём собственное пространство имён "my". Это необязательный
Для начала мы создаём собственное пространство имён "my". Это необязательный шаг, но он убирает нашу процедуру из глобального пространства имён. Не мешалась чтоб. 
шаг, но он убирает нашу процедуру из глобального пространства имён. Не мешалась
чтоб.

Поскольку наша цель — изменить настройку окна ввода текста для каждого
Поскольку наша цель — изменить настройку окна ввода текста для каждого создаваемого сеанса чата, нам удобнее всего написать обработчик события `open_chat_post_hook`, которое генерируется после  того, как Ткаббер создал окно "верхнего уровня" для нового сеанса чата. (Про наиболее важные [хуки](Загрузка_настроек.md) читайте в документации, идущей вместе с Ткаббером — **tkabber.html**.) 
создаваемого сеанса чата, нам удобнее всего написать обработчик события
`open_chat_post_hook`, которое генерируется после  того, как Ткаббер создал
окно "верхнего уровня" для нового сеанса чата. (Про наиболее важные
[**хуки**](Загрузка_настроек.md) читайте в документации, идущей вместе с Ткаббером
— **tkabber.html**.)

Обработчик хука `open_chat_post_hook` вызывается с двумя параметрами:
Обработчик хука `open_chat_post_hook` вызывается с двумя параметрами: 

*  **chatid** — идентификатор сеанса чата;
*  **type** — тип сеанса чата.
*  **chatid** — идентификатор сеанса чата; 
*  **type** — тип сеанса чата. 

**chatid** — это "ключ", который позволяет получить доступ к различным
**chatid** — это "ключ", который позволяет получить доступ к различным компонентам, поддерживающим данный сеанс чата. 
компонентам, поддерживающим данный сеанс чата.

Нас интересует доступ к двум окнам: ввода текста и протокола чата. Их имена мы
Нас интересует доступ к двум окнам: ввода текста и протокола чата. Их имена мы получаем при помощи процедур `chat_win` и `input_win` модуля "chat" (см. **chats.tcl**). 
получаем при помощи процедур `chat_win` и `input_win` модуля "chat" (см.
**chats.tcl**).

Теперь окна у нас есть, и можно заняться навешиванием обработчика на
Теперь окна у нас есть, и можно заняться навешиванием обработчика на _виртуальное событие_ \<\<Copy>>. За подробностями обращайтесь к описаниям команд [bind](http://www.tcl.tk/man/tcl8.4/TkCmd/bind.htm) и [event](http://www.tcl.tk/man/tcl8.4/TkCmd/event.htm). 
_виртуальное событие_ \<\<Copy>>. За подробностями обращайтесь к описаниям
команд [bind](http://www.tcl.tk/man/tcl8.4/TkCmd/bind.htm) и
[event](http://www.tcl.tk/man/tcl8.4/TkCmd/event.htm).

Обработчик будет состоять из одной команды — `if`, но так как нам нужно
Обработчик будет состоять из одной команды — `if`, но так как нам нужно обеспечить подстановку переменных при формировании этой команды, мы не можем использовать {} и используем команду [list](http://www.tcl.tk/man/tcl8.4/TkCmd/list.htm). (На самом деле в этом коде можно вместо [list ...] использовать "...".) 
обеспечить подстановку переменных при формировании этой команды, мы не можем
использовать {} и используем команду
[list](http://www.tcl.tk/man/tcl8.4/TkCmd/list.htm). (На самом деле в этом коде
можно вместо [list ...] использовать "...".)

Код обработчика события \<\<Copy>> первым делом узнаёт имя окна, владеющего в
Код обработчика события \<\<Copy>> первым делом узнаёт имя окна, владеющего в данный момент выделением текста, при помощи команды [selection](http://www.tcl.tk/man/tcl8.4/TkCmd/selection.htm), и сравнивает это имя с именем окна, для которого выполняется обработчик (тикль подставляет его вместо специального токена **%W**; на самом деле тут без проблем можно использовать **$iw** вместо **%W**). 
данный момент выделением текста, при помощи команды
[selection](http://www.tcl.tk/man/tcl8.4/TkCmd/selection.htm), и сравнивает это
имя с именем окна, для которого выполняется обработчик (тикль подставляет его
вместо специального токена **%W**; на самом деле тут без проблем можно
использовать **$iw** вместо **%W**).

Если имена окон совпали, то выделением владеет окно ввода чата, и нам нужно
Если имена окон совпали, то выделением владеет окно ввода чата, и нам нужно выполнить стандартное для него действие, закреплённое за событием \<\<Copy>>. Поскольку своей командой `bind $iw ...` мы как раз это действие и переопределяем, нам нужно узнать код текущего обработчика. Это делается при помощи двухаргументной формы команды **bind**; результат выполнения этой команды и формирует первую ("истинную") ветвь команды **if**. 
выполнить стандартное для него действие, закреплённое за событием \<\<Copy>>.
Поскольку своей командой `bind $iw ...` мы как раз это действие и
переопределяем, нам нужно узнать код текущего обработчика. Это делается при
помощи двухаргументной формы команды **bind**; результат выполнения этой
команды и формирует первую ("истинную") ветвь команды **if**.

Если имена не совпали, то нам стоит не мудрствуя лукаво сделать вид, будто
Если имена не совпали, то нам стоит не мудрствуя лукаво сделать вид, будто пользователь исхитрился выполнить действие "копировать текст" в окне протокола чата. На помощь приходит умение команды **event** генерировать произвольные события в произвольном окне. Соответствующий код, опять сформированный при помощи команды **list**, чтобы разрешить подстановку переменной **cw**, формирует "ложную" ветвь нашего обработчика. 
пользователь исхитрился выполнить действие "копировать текст" в окне протокола
чата. На помощь приходит умение команды **event** генерировать произвольные
события в произвольном окне. Соответствующий код, опять сформированный при
помощи команды **list**, чтобы разрешить подстановку переменной **cw**,
формирует "ложную" ветвь нашего обработчика.

Информацию о правильном формировании команд тикля (чем отличается {} от "" и
Информацию о правильном формировании команд тикля (чем отличается {} от "" и [list ...], а также зачем нужны "\\" на концах некоторых строк) читайте в ["Эндекологии"](http://wiki.tcl.tk/14940). 
[list ...], а также зачем нужны "\\" на концах некоторых строк) читайте в
["Эндекологии"](http://wiki.tcl.tk/14940).

Эзотерический биндинг прикручивал [**Kostix**](Участник_Kostix.md).
Эзотерический биндинг прикручивал [Kostix](Участник_Kostix.md). 

# <a id="Предотвращение_запуска_нескольких_процессов_Ткаббера"></a>Предотвращение запуска нескольких процессов Ткаббера
Задача: сделать так, чтобы нельзя было запустить вторую копию Ткаббера.
Задача: сделать так, чтобы нельзя было запустить вторую копию Ткаббера. 

## <a id="Простое_решение"></a>Простое решение

Впишите в конфиг вне любых хуков:
Впишите в конфиг вне любых хуков: 

    if [catch {open $::configdir/lock {WRONLY CREAT EXCL}} fd] exit
    puts $fd [pid]; close $fd
    hook::add quit_hook { file delete $::configdir/lock }

Работает это следующим образом:
Работает это следующим образом: 

*  При старте Ткаббер проверяет, создан ли файл
*  При старте Ткаббер проверяет, создан ли файл **[$::configdir]($__configdir.md)/lock**, и если создан, завершает выполнение. 
   **[$::configdir]($__configdir.md)/lock**, и если создан, завершает
   выполнение.
*  Если такого файла нет, Ткаббер:
 *  Создаёт этот файл и записывает туда идентификатор своего процесса (хотя эта
*  Если такого файла нет, Ткаббер: 
 *  Создаёт этот файл и записывает туда идентификатор своего процесса (хотя эта информация в дальнейшем не используется); 
    информация в дальнейшем не используется);
 *  Вешает обработчик, удаляющий данный файл, на событие **quit\_hook**,
 *  Вешает обработчик, удаляющий данный файл, на событие **quit\_hook**, генерируемое при нормальном завершении работы Ткаббера. 
    генерируемое при нормальном завершении работы Ткаббера.

Если Вам кажется, что "тема интерактива не раскрыта", замените первую строчку
Если Вам кажется, что "тема интерактива не раскрыта", замените первую строчку на такой фрагмент: 
на такой фрагмент:

    if [catch {open $::configdir/lock {WRONLY CREAT EXCL}} fd] {
        wm withdraw .
        tk_messageBox -title Tkabber -message {Уже работаем!}
        exit
      wm withdraw .
      tk_messageBox -title Tkabber -message {Уже работаем!}
      exit
    }

Фичу прикручивал [**Kostix**](Участник_Kostix.md).
Фичу прикручивал [Kostix](Участник_Kostix.md). 

Идея атомарной проверки существования файла, совмещённой с его открытием,
Идея атомарной проверки существования файла, совмещённой с его открытием, позаимствована [отсюда](http://wiki.tcl.tk/3496). 
позаимствована [отсюда](http://wiki.tcl.tk/3496).

## <a id="Проблема"></a>Проблема

А если завершение работы Ткаббера было ненормальным?...
А если завершение работы Ткаббера было ненормальным?... 

Фичу сомнениям подвергал [**ycbl**](Участник_Bigote.md).
Фичу сомнениям подвергал [ycbl](Участник_Bigote.md). 

[**Kostix**](Участник_Kostix.md) парирует: ...то тогда можно пойти и удалить
[Kostix](Участник_Kostix.md) парирует: ...то тогда можно пойти и удалить оставшийся файл руками. 
оставшийся файл руками.

Вообще, раз уж этот вопрос задаётся второй раз (см. ниже), вот два
Вообще, раз уж этот вопрос задаётся второй раз (см. ниже), вот два альтернативных решения: 
альтернативных решения:

## <a id="Альтернатива_TCP_сокет"></a>Альтернатива: TCP сокет

    if [catch {socket -myaddr localhost -server {} 6666}] exit

Сия команда пытается открыть серверный TCP-сокет **127.0.0.1:6666**; если он
Сия команда пытается открыть серверный TCP-сокет **127.0.0.1:6666**; если он уже занят, команда завершается с ошибкой (**catch** возвращает "истину") и работа интерпретатора тикля завершается (**exit**). В случае успеха этот порт "занимается" Ткаббером и вторая копия Ткаббера не сможет запуститься по причине, рассмотренной выше. 
уже занят, команда завершается с ошибкой (**catch** возвращает "истину") и
работа интерпретатора тикля завершается (**exit**). В случае успеха этот порт
"занимается" Ткаббером и вторая копия Ткаббера не сможет запуститься по
причине, рассмотренной выше.

6666 — это TCP-порт, который пытается открыть  Ткаббер. Его следует выбрать по
6666 — это TCP-порт, который пытается открыть  Ткаббер. Его следует выбрать по вкусу, помня, однако, что: 
вкусу, помня, однако, что:

*  Этот порт не должен штатно использоваться никакой другой программой;
*  Он должен находиться в диапазоне от 1024 до 65535.
*  Этот порт не должен штатно использоваться никакой другой программой; 
*  Он должен находиться в диапазоне от 1024 до 65535. 

Достоинство решения с сокетом — простота и кроссплатформенность, недосток:
Достоинство решения с сокетом — простота и кроссплатформенность, недосток: бессмысленно занятый порт при работе Ткаббера. Кроме того, следует понимать, что _выбранный порт может быть занят **любой** программой ещё до старта Ткаббера,_ например, его может назначить ядро для исходящего TCP-соединения какой-либо программы. 
бессмысленно занятый порт при работе Ткаббера. Кроме того, следует понимать,
что _выбранный порт может быть занят **любой** программой ещё до старта
Ткаббера,_ например, его может назначить ядро для исходящего TCP-соединения
какой-либо программы.

## <a id="Альтернатива_Блокировка_файла"></a>Альтернатива: Блокировка файла

    if {![catch {package require Tclx}]} {
        set fd [open $::configdir/lock w]
        if {![flock -nowait $fd]} {
            wm withdraw .
            tk_messageBox -message {Уже запущен!}
            exit
        }
        puts $fd [pid]; flush $fd
      set fd [open $::configdir/lock w]
      if {![flock -nowait $fd]} {
        wm withdraw .
        tk_messageBox -message {Уже запущен!}
        exit
      }
      puts $fd [pid]; flush $fd
    }

Плюсы:
Плюсы: 

*  Более надёжно, чем сокет;
*  "Почти" кроссплатформенно (см. ниже);
*  Более надёжно, чем сокет; 
*  "Почти" кроссплатформенно (см. ниже); 

Минусы:
Минусы: 

*  Требует наличия пакета **Tclx**;
*  Не работает в Win9x;
*  Постоянно открытый файл в течение работы Ткаббера.
*  Требует наличия пакета **Tclx**; 
*  Не работает в Win9x; 
*  Постоянно открытый файл в течение работы Ткаббера. 

Можете также добавить к этому коду обработчик события **quit\_hook**,
Можете также добавить к этому коду обработчик события **quit\_hook**, аналогичный показанному выше, для удаления лок-файла при нормальном выходе из Ткаббера. 
аналогичный показанному выше, для удаления лок-файла при нормальном выходе из
Ткаббера.

## <a id="Пища_для_размышлений"></a>Пища для размышлений

Кроме приведённых решений, возможны и другие варианты, например:
Кроме приведённых решений, возможны и другие варианты, например: 

*  Проверка лок-файла на валидность в Unix при помощи средств пакета **Tclx**:
*  Проверка лок-файла на валидность в Unix при помощи средств пакета **Tclx**: чтение PID процесса из лок-файла и проверка сигналом 0 команды **kill** существует ли этот процесс; 
   чтение PID процесса из лок-файла и проверка сигналом 0 команды **kill**
   существует ли этот процесс;
*  "Синглетон" при помощи DDE в Windows средствами пакета **dde**.
*  "Синглетон" при помощи DDE в Windows средствами пакета **dde**. 

Можно придумать и ещё. Можете почитать
[обсуждение этих методов](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/01/03.html#21:12:38),
Можно придумать и ещё. Можете почитать [обсуждение этих методов](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/01/03.html#21:12:38), имевшее место в `tkabber@conference.jabber.ru`. 
имевшее место в `tkabber@conference.jabber.ru`.

А вот [мнение профессионалов по этому поводу](http://wiki.tcl.tk/593).
А вот [мнение профессионалов по этому поводу](http://wiki.tcl.tk/593). 

# <a id="Отправка_сообщений_нажатием_Ctrl-Enter"></a>Отправка сообщений нажатием Ctrl-Enter
Впишите в конфиг вне всяких хуков:
Впишите в конфиг вне всяких хуков: 

    proc fix_msg_send_key {chatid type} {
        set iw [::chat::input_win $chatid]

        bind $iw <Control-KeyPress-Return> [bind $iw <KeyPress-Return>]
        bind $iw <KeyPress-Return> [bind $iw <Shift-KeyPress-Return>]
        bind $iw <Shift-KeyPress-Return> {}
      set iw [::chat::input_win $chatid]
    
      bind $iw <Control-KeyPress-Return> [bind $iw <KeyPress-Return>]
      bind $iw <KeyPress-Return> [bind $iw <Shift-KeyPress-Return>]
      bind $iw <Shift-KeyPress-Return> {}
    }

    
    hook::add open_chat_post_hook fix_msg_send_key

Эта процедура запускается после открытия любого окна чата. Действует она в четыре этапа:
Эта процедура запускается после открытия любого окна чата. Действует она в четыре этапа: 

1.  Получает имя окна ввода текста для соответствующего сеанса чата;
1.  Привязывает к этому окну на комбинацию Ctrl-Enter то действие, которое
1.  Получает имя окна ввода текста для соответствующего сеанса чата; 
1.  Привязывает к этому окну на комбинацию Ctrl-Enter то действие, которое привязано к клавише Enter (то есть "отослать сообщение); 
    привязано к клавише Enter (то есть "отослать сообщение);
1.  Привязывает к этому окну на клавишу Enter то действие, которое привязано к
1.  Привязывает к этому окну на клавишу Enter то действие, которое привязано к комбинации Shift-Enter (то есть "вставить перевод строки"); 
    комбинации Shift-Enter (то есть "вставить перевод строки");
1.  Уничтожает привязку к комбинации Shift-Enter.
1.  Уничтожает привязку к комбинации Shift-Enter. 

Привязку кнопок фиксил [**kostix**](Участник_Kostix.md).
Привязку кнопок фиксил [kostix](Участник_Kostix.md). 

Альтернативное решение — [прямой патч на Tkabber](Патчи.md#Отправка_сообщений_по_нажатию_Ctrl-Enter).
Альтернативное решение — [прямой патч на Tkabber](Патчи.md#_Отправка_сообщений_по_нажатию_Ctrl-Enter). 

# <a id="Отправка_сообщений_по_нажатию_NumPad_Enter"></a>Отправка сообщений по нажатию NumPad Enter
Добавить в конфиг вне хуков следующий код:
Добавить в конфиг вне хуков следующий код: 

    bind all <Key-KP_Enter> {
        set event Return
        if {%s & 0x01} {
    	    set event Shift-$event
    	set event Shift-$event
        }
        if {%s & 0x04} {
    	    set event Control-$event
    	set event Control-$event
        }
        if {%s & 0x08} {
    	    set event Alt-$event
    	set event Alt-$event
        }
        if {$event == "Return"} {
    	    set event Key-$event
    	set event Key-$event
        }
        event generate %W <$event>
    }

Этот код навешивает реакцию на нажатие клавиши "Enter на дополнительной
Этот код навешивает реакцию на нажатие клавиши "Enter на дополнительной клавиатуре" на специальный "тэг привязки" "all", обработчики для событий на котором проверяются, если подходящие не найдены на окне, в котором событие произошло (в реальности это несколько сложнее, но для нашего случая сойдёт). 
клавиатуре" на специальный "тэг привязки" "all", обработчики для событий на
котором проверяются, если подходящие не найдены на окне, в котором событие
произошло (в реальности это несколько сложнее, но для нашего случая сойдёт).

Код обработчика проверяет состояние управляющих клавиш (Shift, Control, Alt) в
Код обработчика проверяет состояние управляющих клавиш (Shift, Control, Alt) в событии и генерирует в исходном окне аналогичное по смыслу событие, только вместо "Enter на дополнительной клавиатуре" в нём прописана обычная клавиша ввода. 
событии и генерирует в исходном окне аналогичное по смыслу событие, только
вместо "Enter на дополнительной клавиатуре" в нём прописана обычная клавиша
ввода.

# <a id="Закрытие_табов_по_Ctrl-W"></a>Закрытие табов по Ctrl-W
Впишите в конфиг вне хуков:
Впишите в конфиг вне хуков: 

    hook::add finload_hook {
        bind . <Control-Key-w> [bind . <Control-Key-F4>]
      bind . <Control-Key-w> [bind . <Control-Key-F4>]
    }

Этот тривиальный код привязывает к комбинации Ctrl-w на главном окне Ткаббера
Этот тривиальный код привязывает к комбинации Ctrl-w на главном окне Ткаббера действие, привязанное к комбинации Ctrl-F4 на нём же. 
действие, привязанное к комбинации Ctrl-F4 на нём же.

# <a id="Скрытый_по_умолчанию_ростер"></a>Скрытый по умолчанию ростер
Впишите в конфиг вне хуков:
Впишите в конфиг вне хуков: 

    hook::add finload_hook {
        event generate . <<CollapseRoster>>
      event generate . <<CollapseRoster>>
    }

Этот код программно генерирует событие, которое привязано к комбинации клавиш
Этот код программно генерирует событие, которое привязано к комбинации клавиш Ctrl-r (действие "скрыть/показать ростер"). 
Ctrl-r (действие "скрыть/показать ростер").

# <a id="Запрет_IRC-команды__exec_в_окнах_чата"></a>Запрет IRC-команды /exec в окнах чата
Некоторые параноидально настроенные граждане интересовались: не может ли
Некоторые параноидально настроенные граждане интересовались: не может ли "IRC-style" команда чата `/exec` (действие "выполнить внешнюю программу при помощи команды Tcl [exec](http://tcl.tk/man/tcl8.4/TclCmd/exec.htm) и подставить то, что она вывела на stdout/stderr, в качестве результата") иметь вредных последствий? 
"IRC-style" команда чата `/exec` (действие "выполнить внешнюю программу при
помощи команды Tcl [exec](http://tcl.tk/man/tcl8.4/TclCmd/exec.htm) и
подставить то, что она вывела на stdout/stderr, в качестве результата") иметь
вредных последствий?

Чтобы запретить эту команду совсем, впишите в конфиг вне хуков:
Чтобы запретить эту команду совсем, впишите в конфиг вне хуков: 

    hook::add postload_hook {
        proc ::plugins::handle_exec_command args {}
        proc ::plugins::exec_command_comps args {}
      proc ::plugins::handle_exec_command args {}
      proc ::plugins::exec_command_comps args {}
    }

Этот приём определяет две "пустые" процедуры (то есть процедуры с пустым телом,
Этот приём определяет две "пустые" процедуры (то есть процедуры с пустым телом, которые ничего не делают, будучи вызванными). Если процедура, имя которой указано в качестве первого аргумента команды [proc](http://tcl.tk/man/tcl8.4/TclCmd/proc.htm), существует, таковая _удаляется_ и заменяется новой, определённой остальными аргументами команды **proc**. Другими словами, подобный приём позволяет "деактивировать" любую процедуру, не удаляя её (что привело бы к ошибкам времени выполнения). 
которые ничего не делают, будучи вызванными). Если процедура, имя которой
указано в качестве первого аргумента команды
[proc](http://tcl.tk/man/tcl8.4/TclCmd/proc.htm), существует, таковая
_удаляется_ и заменяется новой, определённой остальными аргументами команды
**proc**. Другими словами, подобный приём позволяет "деактивировать" любую
процедуру, не удаляя её (что привело бы к ошибкам времени выполнения).

Также обратите внимание на использование особой конвенции — слова "args" в
Также обратите внимание на использование особой конвенции — слова "args" в качестве спецификации аргументов: "args" означает "0 или более аргументов", что позволяет при "деактивации" процедуры не задумываться о количестве аргументов, которые она имела в оригинале — "args" обеспечит корректную работу новой версии для любого их числа. 
качестве спецификации аргументов: "args" означает "0 или более аргументов", что
позволяет при "деактивации" процедуры не задумываться о количестве аргументов,
которые она имела в оригинале — "args" обеспечит корректную работу новой версии
для любого их числа.

# <a id="Отмена_подсветки_текста_активного_таба"></a>Отмена подсветки текста активного таба
Одному пользователю Ткаббера не понравилось, что виджет NoteBook из пакета
Одному пользователю Ткаббера не понравилось, что виджет NoteBook из пакета BWidget, используемый Ткаббером для создания "интерфейса с табами", изменяет цвет текста активного таба (того, на котором в данный момент находится курсор мыши) на "стандартный". При этом, если в окне данного таба есть непрочитанные сообщения, и цвет текста в табе, соответственно, отличается от стандартного (обычно он синий или красный), это цветовыделение "убивается" "активной подсветкой". 
BWidget, используемый Ткаббером для создания "интерфейса с табами", изменяет
цвет текста активного таба (того, на котором в данный момент находится курсор
мыши) на "стандартный". При этом, если в окне данного таба есть непрочитанные
сообщения, и цвет текста в табе, соответственно, отличается от стандартного
(обычно он синий или красный), это цветовыделение "убивается" "активной
подсветкой".

Проблема спорная, но тем не менее, вот решение: поместите в конфиг вне любых
Проблема спорная, но тем не менее, вот решение: поместите в конфиг вне любых хуков следующий код: 
хуков следующий код:

    proc fix_tab_colors {w page} {
        $w itemconfigure $page -activeforeground \
            [$w itemcget $page -foreground]
      $w itemconfigure $page -activeforeground \
        [$w itemcget $page -foreground]
    }

    
    hook::add finload_hook {
        .nb bindtabs <Any-Enter> [list fix_tab_colors %W]
      .nb bindtabs <Any-Enter> [list fix_tab_colors %W]
    }

и перезапустите Ткаббер. Теперь при наведении курсора мыши на таб, цвет текста
и перезапустите Ткаббер. Теперь при наведении курсора мыши на таб, цвет текста которого отличается от стандартного из-за наличия в соответствующем окне непрочитанных сообщений, цвет текста таба не изменится. 
которого отличается от стандартного из-за наличия в соответствующем окне
непрочитанных сообщений, цвет текста таба не изменится.

Работает этот код следующим образом:
Работает этот код следующим образом: 

*  Запуск процедуры `fix_tab_colors` привязвается к событию Tk "Enter" (курсор
*  Запуск процедуры `fix_tab_colors` привязвается к событию Tk "Enter" (курсор мыши вошёл в пределы окна виджета) с модификатором "Any" (в момент совершения события игнорируются нажатия любых кнопок) к виджету **.nb**, который и занимается управлением табами и их окнами. В момент привязки для процедуры сразу же указывается первый параметр: **%W** раскрывается подсистемой событий Tk в имя окна, в котором произошло событие; 
   мыши вошёл в пределы окна виджета) с модификатором "Any" (в момент
   совершения события игнорируются нажатия любых кнопок) к виджету **.nb**,
   который и занимается управлением табами и их окнами. В момент привязки для
   процедуры сразу же указывается первый параметр: **%W** раскрывается
   подсистемой событий Tk в имя окна, в котором произошло событие;
*  В тот момент, когда указатель мыши входит в пределы одного из табов виджета
*  В тот момент, когда указатель мыши входит в пределы одного из табов виджета **.nb**, этот таб становится _"активным"_ в терминах Tk, и для него вызывается определённая нами процедура, которой передаётся имя таба. Эта процедура: 
   **.nb**, этот таб становится _"активным"_ в терминах Tk, и для него
   вызывается определённая нами процедура, которой передаётся имя таба. Эта
   процедура:
   1.  Получает текущее значение настройки **-foreground** ("цвет текста") для
 1.  Получает текущее значение настройки **-foreground** ("цвет текста") для переданного таба; 
       переданного таба;
   1.  Устанавливает значение настройки **-activeforeground** ("цвет текста
 1.  Устанавливает значение настройки **-activeforeground** ("цвет текста таба под курсором") для переданного таба. 
       таба под курсором") для переданного таба.

В результате настройка **-activeforeground** таба получает текущее значение его
В результате настройка **-activeforeground** таба получает текущее значение его настройки **-foreground** при каждой активизации этого таба. То есть само действие "фичи" — изменения цвета текста активного таба — эффективно отменяется, что и требовалось получить. 
настройки **-foreground** при каждой активизации этого таба. То есть само
действие "фичи" — изменения цвета текста активного таба — эффективно
отменяется, что и требовалось получить.

**Примечание:** в данном случае, так как наша процедура используется для
**Примечание:** в данном случае, так как наша процедура используется для обработки событий, происходящих ровно в одном окне, можно вместо **%W** написать просто **.nb** — потеряется (ненужная) гибкость, но зато, возможно, код станет несколько понятнее. 
обработки событий, происходящих ровно в одном окне, можно вместо **%W**
написать просто **.nb** — потеряется (ненужная) гибкость, но зато, возможно,
код станет несколько понятнее.

Подсветку отменял [**kostix**](Участник_Kostix.md).
Подсветку отменял [kostix](Участник_Kostix.md). 

# <a id="Настройка_кнопки_Тема_в_групчатах"></a>Настройка кнопки "Тема" в групчатах
Чтобы визуально выделить кнопку "Тема" в окнах групчата, можете вставить в файл
Чтобы визуально выделить кнопку "Тема" в окнах групчата, можете вставить в файл конфигурации этот код вне любых хуков: 
конфигурации этот код вне любых хуков:

    proc fix_topic_button {chatid type} {
        if {![string equal $type "groupchat"]} return

        set b [::chat::winid $chatid].status.mb
        $b config -relief raised -text Опции
      if {![string equal $type "groupchat"]} return
    
      set b [::chat::winid $chatid].status.mb
      $b config -relief raised -text Опции
    }

    
    hook::add open_chat_post_hook fix_topic_button

Код возвращает кнопке стандартную рельефность и меняет её название с "Тема" на
Код возвращает кнопке стандартную рельефность и меняет её название с "Тема" на "Опции". 
"Опции".

# <a id="Предустановленные_описания_статусов"></a>Предустановленные описания статусов
> **Внимание!** Доступен [**плагин**](Плагины.md#Customstatus) аналогичного
  назначения, предоставляющий более удобный способ работы с предустановками
 **Внимание!** Доступен [плагин](Плагины.md#customstatus) аналогичного назначения, предоставляющий более удобный способ работы с предустановками статусов и их описаний. 
  статусов и их описаний.

## <a id="Что_такое_описание_статуса_и_зачем_нужны_предустановленные_описания"></a>Что такое описание статуса и зачем нужны предустановленные описания

В нижней части окна Ткаббера есть текстовое поле для ввода описания статуса.
В нижней части окна Ткаббера есть текстовое поле для ввода описания статуса. Описание статуса — это подробная информация о причине вашего отсутствия (или присутствия, если хотите). Другие пользователи могут видеть это описание рядом с вашим JID и статусом, например, наведя на ваш ник указатель мыши (это поведение зависит от клиента). Если вы хотите установить описание статуса, вы вводите его в упомянутое текстовое поле, после чего устанавливаете статус посредством меню.
Описание статуса — это подробная информация о причине вашего отсутствия (или
присутствия, если хотите). Другие пользователи могут видеть это описание рядом
с вашим JID и статусом, например, наведя на ваш ник указатель мыши (это
поведение зависит от клиента). Если вы хотите установить описание статуса, вы
вводите его в упомянутое текстовое поле, после чего устанавливаете статус
посредством меню.

Такая процедура не всегда удобна, так как обычно вам приходится по возвращении,
 Такая процедура не всегда удобна, так как обычно вам приходится по возвращении, перед установкой статуса "Доступен", править описание статуса, изменяя его с чего-то вроде "ушёл на обед" на "могу говорить". Если вы вместе с установкой статуса хотите автоматически устанавливать описание статуса по умолчанию, назначенное данному статусу, читайте этот раздел далее. 
перед установкой статуса "Доступен", править описание статуса, изменяя его с
чего-то вроде "ушёл на обед" на "могу говорить". Если вы вместе с установкой
статуса хотите автоматически устанавливать описание статуса по умолчанию,
назначенное данному статусу, читайте этот раздел далее.

## <a id="Как_настроить_предустановленные_описания"></a>Как настроить предустановленные описания

Следующие изменения в **[файле конфигурации](Файл_конфигурации.md)** позволяют
Следующие изменения в **[файле конфигурации](Файл_конфигурации.md)** позволяют при установке статуса менять описание статуса на заранее заданное. 
при установке статуса менять описание статуса на заранее заданное.

1. Добавьте в **config.tcl** следующий текст.

        #Предустановленные описания статусов. Заменяйте текст в кавычках на свой.
        set default_text(available) "I am available" # описание статуса 'Доступен'
        set default_text(chat) "Free to chat"        # описание статуса 'Свободен для разговора'
        set default_text(away) "I am away"           # описание статуса 'Отошёл'
        set default_text(xa) "I am far away"         # описание статуса 'Отошёл давно'
        set default_text(dnd) "Do not disturb"       # описание статуса 'Не беспокоить'
    #Предустановленные описания статусов. Заменяйте текст в кавычках на свой.
    set default_text(available) "I am available" # описание статуса 'Доступен'
    set default_text(chat) "Free to chat"        # описание статуса 'Свободен для разговора'
    set default_text(away) "I am away"           # описание статуса 'Отошёл'
    set default_text(xa) "I am far away"         # описание статуса 'Отошёл давно'
    set default_text(dnd) "Do not disturb"       # описание статуса 'Не беспокоить'
    
        proc ::use_default_status_texts {} {
            set m .presence.button.menu
            foreach {status str} $::user_status_list {
                if {![info exists ::default_text($status)]} {
                    continue
                }
                switch -- $status {
                    invisible -
                    unavailable {}
                    default {
                        $m entryconfigure $str \
                           -command [join [list [list set textstatus   $::default_text($status)] [list set userstatus $status]] "; "]
                    }
                }
            }
        }
    proc ::use_default_status_texts {} {
      set m .presence.button.menu
      foreach {status str} $::user_status_list {
          if {![info exists ::default_text($status)]} {
              continue
          }
          switch -- $status {
            invisible -
            unavailable {}
            default {
              $m entryconfigure \
               $str \
               -command [join [list [list set textstatus   $::default_text($status)] [list set userstatus $status]] "; "]
            }
          }
      }
    }

    Некоторые (или все) строки, начинающиеся с `set default\_text`, можно
Некоторые (или все) строки, начинающиеся с `set default\_text`, можно закомментировать. В таком случае при установке соответствующего статуса будет установлено описание статуса, введенное в текстовое поле в нижней части окна Ткаббера, то есть, для соответствующей команды меню будет установлено поведение по умолчанию. 
    закомментировать. В таком случае при установке соответствующего статуса будет
    установлено описание статуса, введенное в текстовое поле в нижней части окна
    Ткаббера, то есть, для соответствующей команды меню будет установлено поведение
    по умолчанию.

1. Добавьте вызов процедуры `use\_default\_status\_texts` в процедуру
1. Добавьте вызов процедуры `use\_default\_status\_texts` в процедуру `finload`. Если такой процедуры нет в файле **config.tcl**, то создайте её, вставив следующий текст.
   `finload`. Если такой процедуры нет в файле **config.tcl**, то создайте её,
   вставив следующий текст.

        proc finload {} {
            use_default_status_texts
        }
    proc finload {} {
      use_default_status_texts
    }

Примечание 
**Примечание:** С приведёнными настройками изменение описания статуса будет
происходить только при изменении статуса с помощью меню, вызываемого кнопкой в

 С приведёнными настройками изменение описания статуса будет происходить только при изменении статуса с помощью меню, вызываемого кнопкой в левом нижнем углу окна Ткаббера. Если вы хотите изменить описание статуса на вписанное в поле вручную, воспользуйтесь командой главного меню **Tkabber → Присутствие**. 
левом нижнем углу окна Ткаббера. Если вы хотите изменить описание статуса на
вписанное в поле вручную, воспользуйтесь командой главного меню **Tkabber →
Присутствие**.

# <a id="Добавление_собственной_кнопки_на_тулбар"></a>Добавление собственной кнопки на тулбар
Периодически пользователи Ткаббера предлагают добавить на тулбар ещё одну
Периодически пользователи Ткаббера предлагают добавить на тулбар ещё одну кнопку, выполняющую ту или иную команду, обычно доступную другим способом, например, через главное меню. Поскольку вкусы и потребности у всех разные, разработчики обычно оставляют такие запросы без внимания. 
кнопку, выполняющую ту или иную команду, обычно доступную другим способом,
например, через главное меню. Поскольку вкусы и потребности у всех разные,
разработчики обычно оставляют такие запросы без внимания.

На самом деле добавить свою кнопку на тулбар очень просто, если знать какую
На самом деле добавить свою кнопку на тулбар очень просто, если знать какую именно команду Tcl требуется выполнять по нажатию этой кнопки, а это уже зависит от личных способностей ковыряющихся в исходниках Ткаббера. 
именно команду Tcl требуется выполнять по нажатию этой кнопки, а это уже
зависит от личных способностей ковыряющихся в исходниках Ткаббера.

В качестве простейшего примера добавим на тулбар кнопку, открывающую окно **Raw
В качестве простейшего примера добавим на тулбар кнопку, открывающую окно **Raw XML**, обычно доступное через пункт главного меню Ткаббера **Службы→Инструменты администратора→Открыть окно XML**. 
XML**, обычно доступное через пункт главного меню Ткаббера **Службы→Инструменты
администратора→Открыть окно XML**.

Поместите в файл **config.tcl** вне любых хуков:
Поместите в файл **config.tcl** вне любых хуков: 

    hook::add finload_hook {
        set b [[.mainframe gettoolbar 0].bbox add]
        $b configure \
            -highlightthickness 0 \
            -takefocus 0 -relief link \
            -bd $::tk_borderwidth \
            -padx 1 -pady 1 \
            -text XML \
            -helptext "Открыть окно XML" \
            -command ::plugins::rawxml::open_window \
      set b [[.mainframe gettoolbar 0].bbox add]
      $b configure \
        -highlightthickness 0 \
        -takefocus 0 -relief link \
        -bd $::tk_borderwidth \
        -padx 1 -pady 1 \
        -text XML \
        -helptext "Открыть окно XML" \
        -command ::plugins::rawxml::open_window \
    }

**Принцип действия** (читать необязательно):
**Принцип действия** (читать необязательно): 

Поскольку мы собираемся добавлять кнопку на уже _существующий_ виджет, наш код
Поскольку мы собираемся добавлять кнопку на уже _существующий_ виджет, наш код должен выполняться после того, как элементы GUI созданы. Для этого код нужно реализовать в виде обработчика [хука](Загрузка_настроек.md#Хуки) **finload\_hook**. 
должен выполняться после того, как элементы GUI созданы. Для этого код нужно
реализовать в виде обработчика [**хука**](Загрузка_настроек.md#Хуки)
**finload\_hook**.

Первая строка в обработчике добавляет кнопку на тулбар и присваивает её имя
Первая строка в обработчике добавляет кнопку на тулбар и присваивает её имя переменной с именем "b": 
переменной с именем "b":

*  Команда "`.mainframe gettoolbar 0`" возвращает имя "нулевого" (и
*  Команда "`.mainframe gettoolbar 0`" возвращает имя "нулевого" (и единственного) тулбара Ткаббера; 
   единственного) тулбара Ткаббера;
*  К этому имени добавляется суффикс `.bbox`, в результате чего получается имя
*  К этому имени добавляется суффикс `.bbox`, в результате чего получается имя специального виджета — набора кнопок в тулбаре; оно же по совместительству является и именем команды, которую можно использовать для управления кнопками в этом наборе. 
   специального виджета — набора кнопок в тулбаре; оно же по совместительству
   является и именем команды, которую можно использовать для управления
   кнопками в этом наборе.
*  Полученная команда выполняется с аргументом `add`, добавляя новую кнопку в
*  Полученная команда выполняется с аргументом `add`, добавляя новую кнопку в набор и возвращая имя этой кнопки, которое, как и обычно в Tk, одновременно является именем команды для управления этим виджетом. 
   набор и возвращая имя этой кнопки, которое, как и обычно в Tk, одновременно
   является именем команды для управления этим виджетом.

Вторая строка конфигурирует добавленную кнопку:
Вторая строка конфигурирует добавленную кнопку: 

*  Первые несколько опций (`-relief`, `-takefocus`, `-highlightthickness`,
*  Первые несколько опций (`-relief`, `-takefocus`, `-highlightthickness`, `-padx`, `-pady`, `-bd`) конфигурируют внешний вид кнопки  делают вид кнопки таким же, как у остальных, уже находящихся на тулбаре кнопок; интересующиеся могут изучить определение процедуры `ifacetk::add_toolbar_button` в файле ifacetk/iface.tcl. 
   `-padx`, `-pady`, `-bd`) конфигурируют внешний вид кнопки  делают вид кнопки
   таким же, как у остальных, уже находящихся на тулбаре кнопок; интересующиеся
   могут изучить определение процедуры `ifacetk::add_toolbar_button` в файле
   ifacetk/iface.tcl.
*  Опция `-text` делает строку "XML" надписью на кнопке. Обратите внимание на
*  Опция `-text` делает строку "XML" надписью на кнопке. Обратите внимание на то, что для этого подходят только короткие куски текста, иначе кнопка получится чрезмерно большой. В качестве альтернативы можно использовать картинку (см. ниже). 
   то, что для этого подходят только короткие куски текста, иначе кнопка
   получится чрезмерно большой. В качестве альтернативы можно использовать
   картинку (см. ниже).
*  Опция `-helptext` настраивает всплывающую подсказку (тултип) у кнопки.
*  Ключевой является опция `-command`, которая привязывает команду к нажатию
*  Опция `-helptext` настраивает всплывающую подсказку (тултип) у кнопки. 
*  Ключевой является опция `-command`, которая привязывает команду к нажатию кнопки. В нашем случае это полное имя соответствующей процедуры тикля (определённой в файле **plugins/general/rawxml.tcl**) без параметров. 
   кнопки. В нашем случае это полное имя соответствующей процедуры тикля
   (определённой в файле **plugins/general/rawxml.tcl**) без параметров.

**Что дальше?**
**Что дальше?** 

Можно использовать опцию `-icon` вместо опции `-text`, если у вас есть готовая
Можно использовать опцию `-icon` вместо опции `-text`, если у вас есть готовая картинка 24x24x8bpp. Картинка может быть в любом формате, поддерживаемом Ткаббером, однако, ["переносимым"](Ткаббер_ЧаВо.md#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG) является только формат GIF. 
картинка 24x24x8bpp. Картинка может быть в любом формате, поддерживаемом
Ткаббером, однако,
[**"переносимым"**](Ткаббер_ЧаВо.md#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG)
является только формат GIF.

Картинка должна быть предварительно загружена при помощи команды
Картинка должна быть предварительно загружена при помощи команды [image](http://www.tcl.tk/man/tcl8.4/TkCmd/image.htm), например: 
[image](http://www.tcl.tk/man/tcl8.4/TkCmd/image.htm), например:

    set img [image create photo -file /path/to/my/icon.gif]
    ...
    $button configure -icon $img ...

Кроме того, в Ткаббере есть готовая процедура, позволяющая добавить кнопку с
Кроме того, в Ткаббере есть готовая процедура, позволяющая добавить кнопку с картинкой более просто, например: 
картинкой более просто, например:

    set icon     [image create photo -file smile.gif]
    set command  {tk_messageBox -message Cheese!}
    set helptext {Says "Cheese!"}
    ...
    ifacetk::add_toolbar_button $icon $command $helptext

Ткаббер использует виджеты **ButtonBox** и **Button** из пакета **BWidget**,
Ткаббер использует виджеты **ButtonBox** и **Button** из пакета **BWidget**, соответственно, за подробной информацией о возможностях работы с тулбаром и отдельными кнопками следует обращаться к [документации на BWidget](http://tcllib.sourceforge.net/BWman/). 
соответственно, за подробной информацией о возможностях работы с тулбаром и
отдельными кнопками следует обращаться к
[документации на BWidget](http://tcllib.sourceforge.net/BWman/).

# <a id="Собственное_меню_для_киков_в_групчате"></a>Собственное меню для киков в групчате
Добавьте этот код в **config.tcl** вне любых хуков:
Добавьте этот код в **config.tcl** вне любых хуков: 

    set my_kick_reasons {
        "Ya bastard"
        "Go away, bad boy"
        "French connectionUCK OFF!"
        "Чужие здесь не ходят!"
      "Ya bastard"
      "Go away, bad boy"
      "French connectionUCK OFF!"
      "Чужие здесь не ходят!"
    }

    
    proc create_kick_presets_menu {m connid jid} {
        global my_kick_reasons

        menu $m

        foreach reason $my_kick_reasons {
            if {[string length $reason] > 25} {
                set label [string range $reason 0 22]...
            } else {
                set label $reason
            }
            $m add command -label $label \
                -command [list muc::change_item_param \
                {role none} down $connid $jid $reason]
        }

        set m
      global my_kick_reasons
    
      menu $m
    
      foreach reason $my_kick_reasons {
        if {[string length $reason] > 25} {
          set label [string range $reason 0 22]...
        } else {
          set label $reason
        }
        $m add command -label $label \
          -command [list muc::change_item_param \
            {role none} down $connid $jid $reason]
      }
    
      set m
    }

    
    proc add_kick_presets {m connid jid} {
        set km $m.my_kick_menu
        create_kick_presets_menu $km $connid $jid

        $m add separator
        $m add cascade -label "Custom kicks" -menu $km
      set km $m.my_kick_menu
      create_kick_presets_menu $km $connid $jid
    
      $m add separator
      $m add cascade -label "Custom kicks" -menu $km
    }

    
    hook::add roster_create_groupchat_user_menu_hook add_kick_presets

Отредактируйте переменную **my\_kick\_reasons** по вкусу.
Отредактируйте переменную **my\_kick\_reasons** по вкусу. 

# <a id="Автоответчик"></a>Автоответчик
> Внимание! Данный код был преобразован в [**плагин**](Плагины.md#Autoanswer) и
  несколько улучшен (в частности, появилась иконка для тулбара). Рекомендуется
 Внимание! Данный код был преобразован в [плагин](Плагины.md#autoanswer) и несколько улучшен (в частности, появилась иконка для тулбара). Рекомендуется пользоваться им; данная заметка сохранена для истории. 
  пользоваться им; данная заметка сохранена для истории.

Для некоторых пользователей бывает слишком обременительно изучать детальную
Для некоторых пользователей бывает слишком обременительно изучать детальную информацию о вашем статусе (к примеру, это ваша подруга, которая пользуется ICQ-клиентом и не обращает внимания на значок «отошёл» напротив вашего ника в списке контактов, зато очень обижается, когда никто не отвечает на её реплики). Однако вы всё же хотели бы, чтобы эти пользователи при попытке заговорить с вами узнавали, что в данный момент за компьютером вас нет, и следовательно, диалог не состоится по уважительной причине. Далее в этом разделе описано, как настроить Ткаббер так, чтобы он отвечал на сообщения от определенных пользователей заранее установленным текстом. 
информацию о вашем статусе (к примеру, это ваша подруга, которая пользуется
ICQ-клиентом и не обращает внимания на значок «отошёл» напротив вашего ника в
списке контактов, зато очень обижается, когда никто не отвечает на её реплики).
Однако вы всё же хотели бы, чтобы эти пользователи при попытке заговорить с
вами узнавали, что в данный момент за компьютером вас нет, и следовательно,
диалог не состоится по уважительной причине. Далее в этом разделе описано, как
настроить Ткаббер так, чтобы он отвечал на сообщения от определенных
пользователей заранее установленным текстом.

## <a id="Установка"></a>Установка

Чтобы установить автоответчик, нужно
Чтобы установить автоответчик, нужно 

1. в **config.tcl** добавить вне хуков следующий код:
1. в **config.tcl** добавить вне хуков следующий код: 

        # === Answering machine ===
    # === Answering machine ===
    
        # == Auto answer settings ==
        # Enable auto answer right from the start.
        # (When running, use the auto_answer [yes|no] procedure in
        #  console to turn auto answer on and off.)
        set auto_answ_enabled no
    # == Auto answer settings ==
    # Enable auto answer right from the start.
    # (When running, use the auto_answer [yes|no] procedure in
    #  console to turn auto answer on and off.)
    set auto_answ_enabled no
    
        # JIDs for which answering is disabled.
        # Has priority over auto_answ_regex.
        # A value of "^$" means no restrictions.
        set auto_answ_disable_regex "^$"
        # JIDs for which answering is enabled.
        # A value of "" (or ".", or ".*" etc) means for all JIDs
        set auto_answ_regex ""
        set auto_answ_message "Не могу сейчас говорить (отошел от компьютера). Вернусь — отвечу."
        # Changing status to one from this list
        # will automatically turn the auto answer mode on,
        # while entering a status not listed here will turn it off.
        # Comment this variable out to make the answer mode
        # independent of the availability status.
        set auto_answ_status {
             away
             xa
             dnd
        }
        # == end Auto answer settings ==
    # JIDs for which answering is disabled.
    # Has priority over auto_answ_regex.
    # A value of "^$" means no restrictions.
    set auto_answ_disable_regex "^$"
    # JIDs for which answering is enabled.
    # A value of "" (or ".", or ".*" etc) means for all JIDs
    set auto_answ_regex ""
    set auto_answ_message "Не могу сейчас говорить (отошел от компьютера). Вернусь — отвечу."
    # Changing status to one from this list
    # will automatically turn the auto answer mode on,
    # while entering a status not listed here will turn it off.
    # Comment this variable out to make the answer mode 
    # independent of the availability status.
    set auto_answ_status {
       away
       xa
       dnd
    }
    # == end Auto answer settings ==
    
        proc update_auto_answ_button {} {
            # if button not found, don't do anythyng
            if { [[.mainframe gettoolbar 0].bbox index auto_answer] == -1 } {
                return
            }
            if {$::auto_answ_enabled} {
                set txt "Автоответчик вкл."
            } else {
                set txt "Автоответчик выкл."
            }
            [.mainframe gettoolbar 0].bbox itemconfigure auto_answer \
                 -command ::auto_answ_toggle  -text $txt -relief link
        }
    proc update_auto_answ_button {} {
       # if button not found, don't do anythyng
       if { [[.mainframe gettoolbar 0].bbox index auto_answer] == -1 } {
          return
       }
       if {$::auto_answ_enabled} {
          set txt "Автоответчик вкл."
       } else {
          set txt "Автоответчик выкл."
       }
       [.mainframe gettoolbar 0].bbox itemconfigure auto_answer \
          -command ::auto_answ_toggle  -text $txt -relief link
    }
    
        proc auto_answ_toggle {} {
            # Invert the "enabled" flag
            set ::auto_answ_enabled [expr !$::auto_answ_enabled]
            # reset reply counters
            if { [array exists ::answered] } {
                array unset ::answered
            }
            update_auto_answ_button
        }
    proc auto_answ_toggle {} {
       # Invert the "enabled" flag
       set ::auto_answ_enabled [expr !$::auto_answ_enabled]
       # reset reply counters
       if { [array exists ::answered] } {
          array unset ::answered
       }
       update_auto_answ_button
    }
    
        # Sends the message ($::auto_answ_message)
        proc answ_process_message {connid from id type is_subject subject body args} {
            variable answered
            # Do not reply if disabled
            if { !$::auto_answ_enabled } {
                return
            }
            # Do not reply to normal messages
            if {$type != "chat" } {
                return
            }
            set chatid [::chat::chatid $connid $from]
            # Do not reply in MUCs
            if { [::chat::is_groupchat $chatid] } {
                return
            }
            set jid [jlib::connection_jid $connid]
            # Just to make sure the program never replies to itself
            if { $jid == $from } {
                return
            }
            # Do not reply if regexp rules are not met
            # Do not reply to empty messages
            if { [regexp -nocase $::auto_answ_disable_regex $from] \
                   || ![regexp -nocase $::auto_answ_regex $from] \
                   || [string equal $body ""] } {
                return
            }
            # Increment the number of times we replied to this JID
            if { ![info exists answered($from)] } {
                set answered($from) 1
            } else {
                incr answered($from)
            }
            # Stop replying after 3 replies
            if { $answered($from) > 3 } {
                return
            }
            if {[catch { set user [jlib::connection_user $connid] }]} {
                set user ""
            }
            # Send the message
            hook::run chat_send_message_hook \
                $chatid $user $::auto_answ_message "chat"
        }
    # Sends the message ($::auto_answ_message)
    proc answ_process_message {connid from id type is_subject subject body args} {
      variable answered
      # Do not reply if disabled
      if { !$::auto_answ_enabled } {
         return
      }
      # Do not reply to normal messages
      if {$type != "chat" } {
         return
      }
      set chatid [::chat::chatid $connid $from]
      # Do not reply in MUCs
      if { [::chat::is_groupchat $chatid] } {
         return
      }
      set jid [jlib::connection_jid $connid]
      # Just to make sure the program never replies to itself
      if { $jid == $from } {
         return
      }
      # Do not reply if regexp rules are not met
      # Do not reply to empty messages
      if { [regexp -nocase $::auto_answ_disable_regex $from] \
            || ![regexp -nocase $::auto_answ_regex $from] \
            || [string equal $body ""] } {
         return
      }
      # Increment the number of times we replied to this JID
      if { ![info exists answered($from)] } {
         set answered($from) 1
      } else {
         incr answered($from)
      }
      # Stop replying after 3 replies
      if { $answered($from) > 3 } {
         return
      }
      if {[catch { set user [jlib::connection_user $connid] }]} {
         set user ""
      }
      # Send the message
      hook::run chat_send_message_hook \
         $chatid $user $::auto_answ_message "chat"
    }
    
        # Turns auto answer on or off when status changes
        proc answ_on_status_change {name1 name2 op} {
            if { ![info exists ::auto_answ_status] } {
                return
            }
            # Enable auto answer if current status is in the $::answ_status list
            if { [lsearch -exact $::auto_answ_status $::userstatus] != -1 } {
                # Don't do anything if auto answer is already enabled
                if { $::auto_answ_enabled } {
                    return
                }
                auto_answ_toggle
                return
            }
            # Disable auto answer if current status is not in the $::answ_status list
            if { $::auto_answ_enabled } {
                auto_answ_toggle
            }
        }
    # Turns auto answer on or off when status changes
    proc answ_on_status_change {name1 name2 op} {
       if { ![info exists ::auto_answ_status] } {
          return
       }
       # Enable auto answer if current status is in the $::answ_status list
       if { [lsearch -exact $::auto_answ_status $::userstatus] != -1 } {
          # Don't do anything if auto answer is already enabled
          if { $::auto_answ_enabled } {
             return
          }
          auto_answ_toggle
          return
       }
       # Disable auto answer if current status is not in the $::answ_status list
       if { $::auto_answ_enabled } {
          auto_answ_toggle
       }
    }
    
        trace add variable userstatus write answ_on_status_change
    trace add variable userstatus write answ_on_status_change
    
        hook::add process_message_hook \
            answ_process_message 150
        # === end Answering machine ===
    hook::add process_message_hook \
      answ_process_message 150
    # === end Answering machine ===

2. В процедуру `finload` добавить следующие строки.
2. В процедуру `finload` добавить следующие строки. 

        #Auto answer button
        [.mainframe gettoolbar 0].bbox add -name auto_answer
        update_auto_answ_button
    #Auto answer button
    [.mainframe gettoolbar 0].bbox add -name auto_answer
    update_auto_answ_button

    Если такой процедуры в файле **config.tcl** нет, создайте её. В итоге она будет выглядеть следующим образом.
Если такой процедуры в файле **config.tcl** нет, создайте её. В итоге она будет выглядеть следующим образом. 

        proc finload {} {
            #Auto answer button
            [.mainframe gettoolbar 0].bbox add -name auto_answer
            update_auto_answ_button
        }
    proc finload {} {
      #Auto answer button
      [.mainframe gettoolbar 0].bbox add -name auto_answer
      update_auto_answ_button
    }

## <a id="Настройка"></a>Настройка

Следующие переменные отвечают за параметры автоответчика.
Следующие переменные отвечают за параметры автоответчика. 

`auto_answ_enabled` – если установлена в _yes_, Ткаббер будет запущен со включенным автоответчиком, если в _no_, то с выключенным. По умолчанию установлена в _no_.
`auto\_answ\_enabled` – если установлена в _yes_, Ткаббер будет запущен со включенным автоответчиком, если в _no_, то с выключенным. По умолчанию установлена в _no_. 

`auto_answ_disable_regex` – регулярное выражение, определяющее JIDы, для которых отсылка сообщений автоответчиком запрещена.
`auto\_answ\_disable\_regex` – регулярное выражение, определяющее JIDы, для которых отсылка сообщений автоответчиком запрещена. 

`auto_answ_regex` – регулярное выражение, определяющее JIDы, для которых отсылка сообщений автоответчиком разрешена.
`auto\_answ\_regex` – регулярное выражение, определяющее JIDы, для которых отсылка сообщений автоответчиком разрешена. 

Переменная `auto_answ_disable_regex` имеет приоритет над `auto_answ_regex`, то
есть, если JID пользователя, от которого пришло сообщение, соответствует
выражению `auto_answ_disable_regex`, ответное сообщение не будет отправлено
Переменная `auto\_answ\_disable\_regex` имеет приоритет над `auto\_answ\_regex`, то есть, если JID пользователя, от которого пришло сообщение, соответствует выражению `auto\_answ\_disable\_regex`, ответное сообщение не будет отправлено несмотря на то, соответствует ли JID выражению `auto\_answ\_regex`. Если JID не соответствует ни одному из выражений, сообщение не будет отправлено. Настройки по умолчанию максимально разрешающие, с ними автоматическая отправка ответа будет происходить на любой JID, от которого пришло сообщение. 

несмотря на то, соответствует ли JID выражению `auto_answ_regex`. Если JID не
соответствует ни одному из выражений, сообщение не будет отправлено. Настройки
по умолчанию максимально разрешающие, с ними автоматическая отправка ответа
будет происходить на любой JID, от которого пришло сообщение.
Примечание 

**Примечание:** Групчаты являются исключением из этих правил: автоответчик
 Групчаты являются исключением из этих правил: автоответчик никогда не реагирует на сообщения из них. 
никогда не реагирует на сообщения из них.

`auto_answ_message` – сообщение, которое получит пользователь, пославший вам сообщение.
`auto\_answ\_message` – сообщение, которое получит пользователь, пославший вам сообщение. 

`auto_answ_status` – список статусов, при установке которых автоответчик
будет автоматически включаться. При входе в статус, не перечисленный в списке,
`auto\_answ\_status` – список статусов, при установке которых автоответчик будет автоматически включаться. При входе в статус, не перечисленный в списке, автоответчик будет отключаться. Закомментируйте эту переменную, чтобы изменение статуса никак не влияло на автоответчик, возможность включать/выключать его вручную остаётся в любом случае. Элементы `auto\_answ\_status` принимают значения из списка: available, chat, away, dnd, xa. По умолчанию включение автоответчика настроено для статусов "отошёл", "отошёл давно" и "не беспокоить". 
автоответчик будет отключаться. Закомментируйте эту переменную, чтобы изменение
статуса никак не влияло на автоответчик, возможность включать/выключать его
вручную остаётся в любом случае. Элементы `auto_answ_status` принимают
значения из списка: available, chat, away, dnd, xa. По умолчанию включение
автоответчика настроено для статусов "отошёл", "отошёл давно" и "не
беспокоить".

## <a id="Управление"></a>Управление

Если вы всё сделали правильно, на панели инструментов появится кнопка
Если вы всё сделали правильно, на панели инструментов появится кнопка **Автоответчик выкл.** При ее нажатии автоответчик включается, и надпись на кнопке меняется на **Автоответчик вкл.**. Чтобы убрать эту кнопку с панели инструментов, закомментируйте строки, добавленные в процедуру `finload`. В этом случае включать/выключать автоответчик можно с помощью команды `auto\_answ\_toggle` в консоли. 
**Автоответчик выкл.** При ее нажатии автоответчик включается, и надпись на
кнопке меняется на **Автоответчик вкл.**. Чтобы убрать эту кнопку с панели
инструментов, закомментируйте строки, добавленные в процедуру `finload`. В этом
случае включать/выключать автоответчик можно с помощью команды
`auto_answ_toggle` в консоли.

# <a id="Настройка_положения_окна_уведомлений_в_Windows"></a>Настройка положения окна уведомлений в Windows
**Вопрос:** Требуется переместить всплывающее окно ("балун", "тултип") с
**Вопрос:** Требуется переместить всплывающее окно ("балун", "тултип") с уведомлениями, включающееся опцией **Настройки → MainInterface → Systray → ::ifacetk::systray::options(display\_status)**, из верхнего левого угла в какое-то другое место экрана. 
уведомлениями, включающееся опцией **Настройки → MainInterface → Systray
→ ::ifacetk::systray::options(display\_status)**, из верхнего левого угла в
какое-то другое место экрана.

Ответ: на самом деле выглядит так, что позиционирование этого окна в Windows
Ответ: на самом деле выглядит так, что позиционирование этого окна в Windows вообще говоря сломано, причём — давно, т.к. судя по коду этот тултип должен рисоваться примерно над иконкой в области системных уведомлений (в трее). 
вообще говоря сломано, причём — давно, т.к. судя по коду этот тултип должен
рисоваться примерно над иконкой в области системных уведомлений (в трее).

Поскольку сломаным оно будет оставаться неизвестно сколько, приведём способ
Поскольку сломаным оно будет оставаться неизвестно сколько, приведём способ исправить положение ковырянием в конфиге. 
исправить положение ковырянием в конфиге.

Сначала придумайте пару чисел — координаты верхнего левого угла окна
Сначала придумайте пару чисел — координаты верхнего левого угла окна уведомлений, в которые по вашей задумке оно должно помещаться при открытии. Можно подойти к этой проблеме и более системно: 
уведомлений, в которые по вашей задумке оно должно помещаться при открытии.
Можно подойти к этой проблеме и более системно:

*  Откройте консоль Ткаббера;
*  Подведите указатель мыши к тому месту на экране, в котором по вашей задумке
*  Откройте консоль Ткаббера; 
*  Подведите указатель мыши к тому месту на экране, в котором по вашей задумке должен находиться верхний левый угол окна уведомлений; 
   должен находиться верхний левый угол окна уведомлений;
*  Отпустите мышь, в консоли Ткаббера напишите:
*  Отпустите мышь, в консоли Ткаббера напишите: 

        winfo pointerx .
    winfo pointerx .

    и затем:
и затем: 

        winfo pointery .
    winfo pointery .

    вы получите ту самую пару чисел — координаты окна.
 вы получите ту самую пару чисел — координаты окна. 

Добавьте в конфиг вне любых хуков:
Добавьте в конфиг вне любых хуков: 

    proc systray_tooltip_location args {
        return {ваша_координата_X ваша_координата_Y}
      return {ваша_координата_X ваша_координата_Y}
    }
    hook::add finload_hook {
        set ::ifacetk::systray::.tray(location) ::systray_tooltip_location
      set ::ifacetk::systray::.tray(location) ::systray_tooltip_location
    }

Можете несколько усовершенствовать код, введя глобальную переменную:
Можете несколько усовершенствовать код, введя глобальную переменную: 

    set notification_coords {0 0}

    proc systray_tooltip_location args {
        return $::notification_coords
      return $::notification_coords
    }
    hook::add finload_hook {
        set ::ifacetk::systray::.tray(location) ::systray_tooltip_location
      set ::ifacetk::systray::.tray(location) ::systray_tooltip_location
    }

Теперь вы сможете управлять координатами прямо в ходе работы Ткаббера из консоли, вводя нечто вроде:
Теперь вы сможете управлять координатами прямо в ходе работы Ткаббера из консоли, вводя нечто вроде: 

    set notification_coords {762 670}

# <a id="Собственный_шрифт_для_ростеров"></a>Собственный шрифт для ростеров
Шрифт ростеров (списка контактов и ростеров групчатов) настраивается синхронно
Шрифт ростеров (списка контактов и ростеров групчатов) настраивается синхронно со шрифтом чата [при помощи глобальной переменной **font**](Шрифты.md). Если требуется отдельно настраивать шрифты ростеров, придётся править код процедуры `::ifacetk::roster::addline`. Для этого воспользуемся испытанным приёмом — динамическим "патченьем" кода Ткаббера. 
со шрифтом чата [**при помощи глобальной переменной _font_**](Шрифты.md). Если
требуется отдельно настраивать шрифты ростеров, придётся править код процедуры
`::ifacetk::roster::addline`. Для этого воспользуемся испытанным приёмом —
динамическим "патченьем" кода Ткаббера.

Напишите в [**config.tcl**](Config.tcl.md) вне любых хуков:
Напишите в [config.tcl](Config.tcl.md) вне любых хуков: 

    # From: [http://wiki.tcl.tk/16978](http://wiki.tcl.tk/16978)
    proc params proc {
        set params [list]
        foreach param [info args $proc] {
            if {[info default $proc $param default]} {
                lappend params [list $param $default]
            } else {
                lappend params $param
            }
        }
        return $params
      set params [list]
      foreach param [info args $proc] {
        if {[info default $proc $param default]} {
          lappend params [list $param $default]
        } else {
          lappend params $param
        }
      }
      return $params
    }

     
    hook::add postload_hook {
        set proc ::ifacetk::roster::addline
        set body [info body $proc]
        set body [regsub -- {global\s+\yfont\y} $body {global rosterfont}]
        set body [regsub -all -- {\$font\y} $body {$rosterfont}]
        proc $proc [params $proc] $body
        unset proc body
      set proc ::ifacetk::roster::addline
      set body [info body $proc]
      set body [regsub -- {global\s+\yfont\y} $body {global rosterfont}]
      set body [regsub -all -- {\$font\y} $body {$rosterfont}]
      proc $proc [params $proc] $body
      unset proc body
    }

Теперь можно добавить к настройкам шрифтов в том же конфиге нечто вроде
Теперь можно добавить к настройкам шрифтов в том же конфиге нечто вроде 

    set rosterfont -*-arial-medium-*-*-*-*-*-*-*-*-*-iso10646-*

# <a id="Перемещение_элемента_меню_ростера_комнаты"></a>Перемещение элемента меню ростера комнаты
Некоторые неторопливые пользователи жалуются на то, что при перемещении
Некоторые неторопливые пользователи жалуются на то, что при перемещении указателя мыши по контекстном меню ростера комнаты они часто "не дотягивают" до искомого пункта "Показать информацию" и попадают в подменю пункта "Игнорировать", расположенного выше. Приведённые строчки для [файла конфигурации](Config.tcl_для_начинающих.md) перемещают элемент "Игнорировать" в самый низ обсуждаемого меню: 
указателя мыши по контекстном меню ростера комнаты они часто "не дотягивают" до
искомого пункта "Показать информацию" и попадают в подменю пункта
"Игнорировать", расположенного выше. Приведённые строчки для
[**файла конфигурации**](Config.tcl_для_начинающих.md) перемещают элемент "Игнорировать" в
самый низ обсуждаемого меню:

    hook::add roster_create_groupchat_user_menu_hook imove 1000

    
    proc imove {m args} {
        set ix [$m index [::msgcat::mc "Ignore"]]
        set cmd [list $m insert end [$m type $ix]]
        set conf [$m entryconfigure $ix]
        foreach item $conf {
            lappend cmd [lindex $item 0] [lindex $item end]
        }
        $m delete $ix
        $m delete $ix ;# separator
        $m insert end separator
        eval $cmd
      set ix [$m index [::msgcat::mc "Ignore"]]
      set cmd [list $m insert end [$m type $ix]]
      set conf [$m entryconfigure $ix]
      foreach item $conf {
        lappend cmd [lindex $item 0] [lindex $item end]
      }
      $m delete $ix
      $m delete $ix ;# separator
      $m insert end separator
      eval $cmd
    }

**Принцип действия** (можно не читать):
**Принцип действия** (можно не читать): 

Вначале мы добавляем процедуру, которую собираемся написать, в
Вначале мы добавляем процедуру, которую собираемся написать, в [хук](Загрузка_настроек.md#Хуки), отвечающий за наполнение меню ростера комнаты содержимым. Мы хотим, чтобы наша процедура запустилась последней в ходе отработки хука, поэтому указываем для неё высокий приоритет (1000). 
[**хук**](Загрузка_настроек.md#Хуки), отвечающий за наполнение меню ростера комнаты
содержимым. Мы хотим, чтобы наша процедура запустилась последней в ходе
отработки хука, поэтому указываем для неё высокий приоритет (1000).

Далее определяем саму процедуру. Первым аргументом она получает имя
Далее определяем саму процедуру. Первым аргументом она получает имя наполняемого меню. Остальные нас не интересуют и мы используем для них стандартную идиому [`args`](http://www.tcl.tk/man/tcl8.5/TclCmd/proc.htm) (любое число оставшихся аргументов). 
наполняемого меню. Остальные нас не интересуют и мы используем для них
стандартную идиому [`args`](http://www.tcl.tk/man/tcl8.5/TclCmd/proc.htm)
(любое число оставшихся аргументов).

Первым делом мы получаем индекс (номер по порядку, начиная с 0) элемента меню,
Первым делом мы получаем индекс (номер по порядку, начиная с 0) элемента меню, который собираемся переместить. Нас интересует опция "Игнорировать", но поскольку мы хотим написать код, который работает независимо от языка интерфейса, мы ссылаемся на перевод "референсного" названия ("Ignore") при помощи команды [`msgcat`](http://www.tcl.tk/man/tcl8.5/TclCmd/msgcat.htm). 
который собираемся переместить. Нас интересует опция "Игнорировать", но
поскольку мы хотим написать код, который работает независимо от языка
интерфейса, мы ссылаемся на перевод "референсного" названия ("Ignore") при
помощи команды [`msgcat`](http://www.tcl.tk/man/tcl8.5/TclCmd/msgcat.htm).

Поскольку _перемещать_ элементы меню в Tk нельзя, нам придётся _удалить_ наш
Поскольку _перемещать_ элементы меню в Tk нельзя, нам придётся _удалить_ наш элемент, а затем _пересоздать_ его в нужном месте меню. Для этого нам понадобится узнать точную информацию о текущей конфигурации этого элемента, после чего "приготовить" команду, которая сможет воссоздать его в точно таком же состоянии, только в другом месте. 
элемент, а затем _пересоздать_ его в нужном месте меню. Для этого нам
понадобится узнать точную информацию о текущей конфигурации этого элемента,
после чего "приготовить" команду, которая сможет воссоздать его в точно таком
же состоянии, только в другом месте.

Наша команда (которая будет конструироваться в переменной `cmd`) начинается
Наша команда (которая будет конструироваться в переменной `cmd`) начинается "стандартным заклинанием" с участием подкоманды `insert` виджета [`menu`](http://www.tcl.tk/man/tcl8.5/TkCmd/menu.htm) (a другая его подкоманда — `type` — возвращает тип переданного ей элемента). 
"стандартным заклинанием" с участием подкоманды `insert` виджета
[`menu`](http://www.tcl.tk/man/tcl8.5/TkCmd/menu.htm) (a другая его подкоманда
— `type` — возвращает тип переданного ей элемента).

Затем мы получаем полное описание конфигурации данного элемента меню при помощи
Затем мы получаем полное описание конфигурации данного элемента меню при помощи подкоманды `entryconfigure` виджета `menu`. Эта информация возвращается в виде списка — по одному элементу на каждую настройку, определённую для пункта меню; каждый такой элемент, в свою очередь, является [списком из пяти элементов](http://www.tcl.tk/man/tcl8.5/TkLib/ConfigWidg.htm): название настройки, имя настройки в [базе данных опций Tk](База_данных_опций_Tk.md), класс настройки в БД опций, значение настройки по умолчанию и, наконец, текущее значение этой настройки. Нас интересуют только первый и последний элементы из перечисленных, так как именно их комбинация определяет текущее состояние виджета. Посему мы итерируем по всем элементам списка конфигурации и добавляем к конструируемой команде имена параметров конфигурации и их текущие значения. 
подкоманды `entryconfigure` виджета `menu`. Эта информация возвращается в виде
списка — по одному элементу на каждую настройку, определённую для пункта меню;
каждый такой элемент, в свою очередь, является
[списком из пяти элементов](http://www.tcl.tk/man/tcl8.5/TkLib/ConfigWidg.htm):
название
настройки, имя настройки в [**базе данных опций Tk**](База_данных_опций_Tk.md),
класс настройки в БД опций, значение настройки по умолчанию и, наконец, текущее
значение этой настройки. Нас интересуют только первый и последний элементы из
перечисленных, так как именно их комбинация определяет текущее состояние
виджета. Посему мы итерируем по всем элементам списка конфигурации и добавляем
к конструируемой команде имена параметров конфигурации и их текущие значения.

После того, как команда вставки готова, мы удаляем наш элемент меню, сепаратор
После того, как команда вставки готова, мы удаляем наш элемент меню, сепаратор под ним (это для красоты), после чего вставляем сепаратор в низ меню (опять же для красоты) и, наконец, вставляем в самый низ наш "новый старый" элемент путём выполнения ([eval](http://www.tcl.tk/man/tcl8.5/TclCmd/eval.htm)) сконструированной команды. 
под ним (это для красоты), после чего вставляем сепаратор в низ меню (опять же
для красоты) и, наконец, вставляем в самый низ наш "новый старый" элемент путём
выполнения ([eval](http://www.tcl.tk/man/tcl8.5/TclCmd/eval.htm))
сконструированной команды.

# <a id="Кнопка_Send_отправить_в_окне_ввода_сообщения"></a>Кнопка Send (отправить) в окне ввода сообщения
Кнопка **Send** в правой части окна ввода сообщения в окне разговора позволяет
Кнопка **Send** в правой части окна ввода сообщения в окне разговора позволяет отправлять сообщение с помощью мыши. 
отправлять сообщение с помощью мыши.

Иногда это позволяет сэкономить время, например, когда нужно выделить текст в
 Иногда это позволяет сэкономить время, например, когда нужно выделить текст в окне чата, вставить его средней кнопкой в окно ввода и тут же отправить, — все эти действия можно выполнить без применения клавиатуры. 
окне чата, вставить его средней кнопкой в окно ввода и тут же отправить, — все
эти действия можно выполнить без применения клавиатуры.

Добавить кнопку **Send** в окно ввода можно, поместив в
Добавить кнопку **Send** в окно ввода можно, поместив в **[файл конфигурации](Config.tcl_для_начинающих.md)** следующий код, регистрирующий обработчик хука `open_chat_post_hook`. 
[**файл конфигурации**](Config.tcl_для_начинающих.md) следующий код, регистрирующий
обработчик хука `open_chat_post_hook`.

    proc open_chat_post_hook_handler {chatid type} {
        # Send button
        set iw [::chat::input_win $chatid]
        set parent [winfo parent $iw]
        set isw $parent.isw
        set pi [pack info $isw]
        set ix [lsearch -exact $pi -in]; incr ix
        set f [lindex $pi $ix]
        set sb [button $parent.send -text Send -command [list event generate $parent <KeyPress-Return>]]
        pack $isw -in $f -side left
        pack $sb -in $f -side right -fill y
        # End Send button
      # Send button
      set iw [::chat::input_win $chatid]
      set parent [winfo parent $iw]
      set isw $parent.isw
      set pi [pack info $isw]
      set ix [lsearch -exact $pi -in]; incr ix
      set f [lindex $pi $ix]
      set sb [button $parent.send -text Send -command [list event generate $parent <KeyPress-Return>]]
      pack $isw -in $f -side left
      pack $sb -in $f -side right -fill y
      # End Send button
    }

    
    hook::add open_chat_post_hook open_chat_post_hook_handler

Автор кода [**Kostix**](Участник_Kostix.md).
Автор кода [Kostix](Участник_Kostix.md). 

**NB:** Если вы воспользовались инструкцией, изложенной в разделе
[**Отправка сообщений нажатием Ctrl-Enter**](#Отправка_сообщений_нажатием_Ctrl-Enter),
и добавили в **config.tcl** соответствующий код, то нужно заменить в
**NB:** Если вы воспользовались инструкцией, изложенной в разделе **[Отправка сообщений нажатием Ctrl-Enter](Нетривиальные_настройки.md#Отправка_сообщений_нажатием_Ctrl-Enter)**, и добавили в **config.tcl** соответствующий код, то нужно заменить в приведённой выше процедуре `open_chat_post_hook_handler` строку `<KeyPress-Return>` на `<Control-KeyPress-Return>`. 


приведённой выше процедуре `open_chat_post_hook_handler` строку
`<KeyPress-Return>` на `<Control-KeyPress-Return>`.

Changes to wiki/ru/Новый_вид_Tk_в_8.5.md.

1

2
3
4
5
6
7

8
9
10
11
12
13

14
15
16

17
18

19
20

21
22

23
24
25

26
27
28

29
30
31

32
33
34

35
36

37
38

39
40
41
42

43
44
45

46
47

48
49

50
51

52
53

54
55

56
57

58
59

60
61

62
63

64
65

66
67
68

69
70
71

72
73

74
75

76
77
78

79
80

81
82

83
84

85
86
87

88
89

90
91



1
2
3
4
5
6
7

8




9

10

11

12
13

14
15

16
17

18

19

20

21

22

23

24

25

26
27

28
29

30


31

32

33

34
35

36
37

38
39

40
41

42
43

44
45

46
47

48
49

50
51

52
53

54

55

56

57

58
59

60
61

62

63

64
65

66
67

68
69

70

71

72
73

74
75

76
77
78

+





-
+
-
-
-
-

-
+
-

-
+

-
+

-
+

-
+
-

-
+
-

-
+
-

-
+
-

-
+

-
+

-
+
-
-

-
+
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-

-
+
-

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Новый_вид_Tk_в_8.5)


# Новый вид Tk в 8.5

Материал из Tkabber Wiki

[16:22]\<kostix> Hi! A question regarding Tk in 8.5: since the next Debian will
[16:22]\<kostix> Hi! A question regarding Tk in 8.5: since the next Debian will contain 8.5 as its "stable" Tcl/Tk, we've taken a glance at Tk 8.5 and noticed that it received that ugly "Windows-ish" checkboxes and radiobuttons in X. Is there a way (hack, etc) to revert to the "old" look for X? Or this can be only accomplished via Tile? 
contain 8.5 as its "stable" Tcl/Tk, we've taken a glance at Tk 8.5 and noticed
that it received that ugly "Windows-ish" checkboxes and radiobuttons in X. Is
there a way (hack, etc) to revert to the "old" look for X? Or this can be only
accomplished via Tile?

[16:25]\<ijchain> \* willdye recalls reading that it's indeed possible, without
[16:25]\<ijchain> \* willdye recalls reading that it's indeed possible, without Tile, but can't recall the specifics... 
Tile, but can't recall the specifics...

[16:26]\<jenglish> kostix -- the next Debian (etch), or the next next Debian?
[16:26]\<jenglish> kostix -- the next Debian (etch), or the next next Debian? 

[16:26]\<kostix> jenglish: Etch
[16:26]\<kostix> jenglish: Etch 

[16:26]\<jenglish> I thought etch was in feature-freeze right now ...
[16:26]\<jenglish> I thought etch was in feature-freeze right now ... 

[16:27]\<jenglish> Wow.  Where did you hear about this?  (The debian-tcl list
[16:27]\<jenglish> Wow.  Where did you hear about this?  (The debian-tcl list has been silent lately...) 
has been silent lately...)

[16:28]\<kostix> jenglish: wait a bit, please. I'm now consulting with Tkabber
[16:28]\<kostix> jenglish: wait a bit, please. I'm now consulting with Tkabber PL, who maintains a bunch of Debian packages. 
PL, who maintains a bunch of Debian packages.

[16:30]\<kostix> jenglish: sorry, Joe -- my fault; there will even be no
[16:30]\<kostix> jenglish: sorry, Joe -- my fault; there will even be no 8.4.14 :( 
8.4.14 :(

[16:32]\<kostix> jenglish: seems like just since 8.5 will be stable pretty
[16:32]\<kostix> jenglish: seems like just since 8.5 will be stable pretty soon, we'll support it (and it will be, of course, awailable for Debian) 
soon, we'll support it (and it will be, of course, awailable for Debian)

[16:32]\<kostix> So what about "old" look for plain 8.5 Tk? ;)
[16:32]\<kostix> So what about "old" look for plain 8.5 Tk? ;) 

[16:32]\<suchenwi> Maybe a Motif theme for Tile? :p
[16:32]\<suchenwi> Maybe a Motif theme for Tile? :p 

[16:34]\<kostix> suchenwi: no Tile, Richard. Tkabber's look is "broken" right
[16:34]\<kostix> suchenwi: no Tile, Richard. Tkabber's look is "broken" right now, and there's no plans to port it to Tile right now, since there's no stable Tile 
now, and there's no plans to port it to Tile right now, since there's no stable
Tile

[16:35]\<dkf> The problem with the old Motif look is that it can't show
[16:35]\<dkf> The problem with the old Motif look is that it can't show tristate values 
tristate values

[16:35]\<dkf> i.e. "some selected, some not"
[16:35]\<dkf> i.e. "some selected, some not" 

[16:36]\<suchenwi> For Troolean logic?
[16:36]\<suchenwi> For Troolean logic? 

[16:36]\<kostix> suchenwi: +1 :)
[16:36]\<kostix> suchenwi: +1 :) 

[16:37]\<suchenwi> like in SQL, the OR MAYBE NOT operator
[16:37]\<suchenwi> like in SQL, the OR MAYBE NOT operator 

[16:37]\<kostix> WHO KNOWS
[16:37]\<kostix> WHO KNOWS 

[16:38]\<dkf> there's also the YES DEAR constant :)
[16:38]\<dkf> there's also the YES DEAR constant :) 

[16:38]\<kostix> :)
[16:38]\<kostix> :) 

[16:38]\<suchenwi> with the implementation "will probably not do"?
[16:38]\<suchenwi> with the implementation "will probably not do"? 

[16:38]\<kostix> dkf: so, the answer to my particular problem is "no"?
[16:38]\<kostix> dkf: so, the answer to my particular problem is "no"? 

[16:39]\<dkf> 8.5 has capabilities that the old l&f could not support
[16:39]\<dkf> 8.5 has capabilities that the old l&f could not support 

[16:40]\<dkf> so there's not much chance of going back; if nothing else, Mentor
[16:40]\<dkf> so there's not much chance of going back; if nothing else, Mentor Graphics want the new functionality 
Graphics want the new functionality

[16:40]\<kostix> Hm. After all, 8.5 has may vast improvements, so at least the
[16:40]\<kostix> Hm. After all, 8.5 has may vast improvements, so at least the pain of thansition is justified ;) 
pain of thansition is justified ;)

[16:40]\<kostix> \* many
[16:40]\<kostix> \* many 

[16:41]\* dkf has just added \_NET\_WM\_PING support to 8.5
[16:41]\* dkf has just added \_NET\_WM\_PING support to 8.5 

[16:42]\* dkf ... on the grounds that there's no reason to not do it, and it's
[16:42]\* dkf ... on the grounds that there's no reason to not do it, and it's transparent to scripts anyway 
transparent to scripts anyway

[16:48]\<arjen> Mentor Graphics?
[16:48]\<arjen> Mentor Graphics? 

[16:48]\<kostix> arjen: that's probably an euphemism ;)
[16:48]\<kostix> arjen: that's probably an euphemism ;) 

[16:51]\<arjen> Ah, those Anglosaxons!
[16:51]\<arjen> Ah, those Anglosaxons! 

[16:55]\<spjuth> Mentor Graphics makes Modelsim, a simulator with a Tk GUI.
[16:55]\<spjuth> Mentor Graphics makes Modelsim, a simulator with a Tk GUI. Brian Griffin works there. 
Brian Griffin works there.

[16:56]\<arjen> Now, that does ring a bell
[16:56]\<arjen> Now, that does ring a bell 

[16:57]\<dkf> Based in/near Portland, Oregon
[16:57]\<dkf> Based in/near Portland, Oregon 

[16:57]\<arjen> Here is the WIki page: [http://wiki.tcl.tk/8648](http://wiki.tcl.tk/8648)
[16:57]\<arjen> Here is the WIki page: [http://wiki.tcl.tk/8648](http://wiki.tcl.tk/8648) 


Changes to wiki/ru/Особенности_реализации.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15


16
17
18
19

20
21
22

23
24
25
26
27

28
29
30
31

32
33
34
35
36
37
38
39
40
41

42
43
44

45
46
47
48
49
50
51
52
53
54
55

56
57
58

59
60
61
62
63
64
65
66

67
68
69


70
71
72
73

74
75
76
77
78
79
80
81
82
83

84
85
86
87
88
89
90

91
92
93
94
95
96

97
98
99
100
101
102
103
104

105
106
107
108
109
110

111
112
113
114
115



116
117
118
119

120
121
122
123

124
125
126
127


128
129

130
131
132

133
134
135

136
137
138
139
140
141
142
143
144
145

146
147
148
149
150
151
152

153
154
155
156
157
158
159
160
161

162
163
164
165
166

167
168
169
170
171

172
173
174
175
176
177

178
179
180
181
182

183
184
185
186
187
188
189
190
191

192
193
194
195
196
197
198
199

200
201
202
203
204

205
206
207
208

209
210
211
212

213
214
215
216

217
218
219

220
221

222
223

224
225
226
227
228
229
230
231

232
233
234

235
236
237
238
239


240
241
242
243
244
245
246
247

248
249
250
251

252
253
254
255
256
257
258
259
260
261




262
263
264
265
266
267
268
1
2
3
4
5
6
7
8
9
10
11
12
13
14


15
16
17
18
19

20
21
22

23


24
25

26


27

28








29

30
31
32

33









34

35
36
37

38





39
40

41
42


43
44
45
46
47

48








49

50





51

52




53

54






55

56


57
58
59

60

61



62
63
64


65

66


67

68

69


70
71
72

73
74
75

76

77

78








79

80





81

82







83

84


85
86

87



88

89




90

91





92







93

94

95
96
97




98



99

100


101

102


103

104
105
106
107

108

109

110


111
112

113






114

115

116

117


118


119
120






121

122


123

124






125



126
127
128
129




130



+












-
-
+
+



-
+


-
+
-
-


-
+
-
-

-
+
-
-
-
-
-
-
-
-

-
+


-
+
-
-
-
-
-
-
-
-
-

-
+


-
+
-
-
-
-
-


-
+

-
-
+
+



-
+
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-

-
+
-
-
-
-

-
+
-
-
-
-
-
-

-
+
-
-



-
+
-

-
-
-
+
+
+
-
-

-
+
-
-

-
+
-

-
-
+
+

-
+


-
+
-

-
+
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-

-
+
-
-
-
-
-
-
-

-
+
-
-


-
+
-
-
-

-
+
-
-
-
-

-
+
-
-
-
-
-
+
-
-
-
-
-
-
-

-
+
-



-
-
-
-
+
-
-
-

-
+
-
-

-
+
-
-

-
+



-
+
-

-
+
-
-
+

-
+
-
-
-
-
-
-

-
+
-

-
+
-
-

-
-
+
+
-
-
-
-
-
-

-
+
-
-

-
+
-
-
-
-
-
-

-
-
-
+
+
+
+
-
-
-
-

-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Особенности_реализации/index.html)


# Особенности реализации

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 Преамбула](#Преамбула)
* [2 Tcl/Tk](#Tcl_Tk)
* [3 Почему Tcl?](#Почему_Tcl)
* [4 Почему Tk?](#Почему_Tk)
* [5 Почему Tk, а не GTK/Qt/что-то ещё?](#Почему_Tk_а_не_GTK_Qt_что-то_ещё)
   * [5.1 А почему нет?](#А_почему_нет)
   * [5.2 Техническая сторона дела](#Техническая_сторона_дела)
 * [5.1 А почему нет?](#А_почему_нет)
 * [5.2 Техническая сторона дела](#Техническая_сторона_дела)
* [6 Почему не отделить интерфейс от реализации?](#Почему_не_отделить_интерфейс_от_реализации)
* [7 Почему нет "внешнего API"?](#Почему_нет_внешнего_API)
* [8 Ткаббер выглядит отвратительно!](#Ткаббер_выглядит_отвратительно)
   * [8.1 Tile в Ткаббере](#Tile_в_Ткаббере)
 * [8.1 Tile в Ткаббере](#Tile_в_Ткаббере)

# <a id="Преамбула"></a>Преамбула
В этой статье даются развёрнутые ответы на пачку различных вопросов,
В этой статье даются развёрнутые ответы на пачку различных вопросов, периодически задаваемых пользователями Ткаббера относительно языка его реализации, а также смежных вопросов — относительно его внешнего вида. 
периодически задаваемых пользователями Ткаббера относительно языка его
реализации, а также смежных вопросов — относительно его внешнего вида.

# <a id="Tcl_Tk"></a>Tcl/Tk
Ткаббер написан на языке [Tcl](http://www.tcl.tk) и использует библиотеку
Ткаббер написан на языке [Tcl](http://www.tcl.tk) и использует библиотеку [Tk](http://wiki.tcl.tk/15242) для создания графического интерфейса пользователя (GUI). 
[Tk](http://wiki.tcl.tk/15242) для создания графического интерфейса
пользователя (GUI).

Несмотря на наличие некоторых (практически беспрецедентно) мощных виджетов
Несмотря на наличие некоторых (практически беспрецедентно) мощных виджетов (таких как [**text**](http://tcl.tk/man/tcl8.4/TkCmd/text.htm) (используются в окнах чата) и [**canvas**](http://tcl.tk/man/tcl8.4/TkCmd/canvas.htm) (на нём сделаны ростеры)), в Tk нет таких "примитивов" как: "progressbar", "notebook" (виндовым программистам более известный как "page control" или "tab control"), "сплиттеров", готовой поддержки стандартных диалоговоых окон. Однако для Tk написана масса сторонних реализаций, компенсирующих этот недостаток; Ткаббер широко использует один из подобных "наборов виджетов" — [BWidget](http://wiki.tcl.tk/BWidget). 
(таких как [`text`](http://tcl.tk/man/tcl8.4/TkCmd/text.htm) (используются в
окнах чата) и [`canvas`](http://tcl.tk/man/tcl8.4/TkCmd/canvas.htm) (на нём
сделаны ростеры)), в Tk нет таких "примитивов" как: "progressbar", "notebook"
(виндовым программистам более известный как "page control" или "tab control"),
"сплиттеров", готовой поддержки стандартных диалоговоых окон. Однако для Tk
написана масса сторонних реализаций, компенсирующих этот недостаток; Ткаббер
широко использует один из подобных "наборов виджетов" —
[BWidget](http://wiki.tcl.tk/BWidget).

![(!)](../images/Hammer.png) **Сделать:** добавить про Tcllib
![(!)](../images/Hammer.png) **Сделать:** добавить про Tcllib 

# <a id="Почему_Tcl"></a>Почему Tcl?
Вообще говоря, здесь проще всего ответить вопросом на вопрос: "а почему нет?" —
Вообще говоря, здесь проще всего ответить вопросом на вопрос: "а почему нет?" — Tcl является продвинутым "скриптовым" языком; тот факт, что вокруг него значительно меньше того шума, который именуется [термином "hype"](http://www.google.com/search?as_q=define:hype), и он никогда не был "в моде" у населения [/.](http://slashdot.org), не говорит о том, что на нём нельзя создать серьёзный проект. Более того, некоторые бывают удивлены, узнав, что Ткаббер даже не является единственным [Jabber-клиентом](http://coccinella.im/) и уж тем более не единственным [Instant Messenger'ом](http://www.amsn-project.net), написанном на Tcl/Tk. 
Tcl является продвинутым "скриптовым" языком; тот факт, что вокруг него
значительно меньше того шума, который именуется
[термином "hype"](http://www.google.com/search?as_q=define:hype),
и он никогда не был "в
моде" у населения [/.](http://slashdot.org), не говорит о том, что на нём
нельзя создать серьёзный проект. Более того, некоторые бывают удивлены, узнав,
что Ткаббер даже не является единственным
[Jabber-клиентом](http://coccinella.im/) и уж тем более не единственным
[Instant Messenger'ом](http://www.amsn-project.net), написанном на Tcl/Tk.

![(!)](../images/Hammer.png) **Сделать:** развить
![(!)](../images/Hammer.png) **Сделать:** развить 

# <a id="Почему_Tk"></a>Почему Tk?
Tk является "натуральным" выбором для создания GUI у приложения, написанного на
Tk является "натуральным" выбором для создания GUI у приложения, написанного на Tcl, из-за того, что связка Tcl/Tk является практически уникальной (если не считать [совсем уж "эзотерических" решений](http://www.rebol.com)) в том смысле, что GUI-тулкит очень удобно состыкован с языком — как в плане философии использования, так и в плане используемых при работе с ним языковых конструкций. 
Tcl, из-за того, что связка Tcl/Tk является практически уникальной (если не
считать [совсем уж "эзотерических" решений](http://www.rebol.com)) в том
смысле, что GUI-тулкит очень удобно состыкован с языком — как в плане философии
использования, так и в плане используемых при работе с ним языковых
конструкций.

# <a id="Почему_Tk_а_не_GTK_Qt_что-то_ещё"></a>Почему Tk, а не GTK/Qt/что-то ещё?
Ответы можно условно разбить на две категории:
Ответы можно условно разбить на две категории: 

*  Стандартное заклинание: "а почему нет?";
*  Технические обоснования.
*  Стандартное заклинание: "а почему нет?"; 
*  Технические обоснования. 

## <a id="А_почему_нет"></a>А почему нет?

99% претензий к Tk касается вовсе не его _технических_ характеристик, а того,
99% претензий к Tk касается вовсе не его _технических_ характеристик, а того, как он _выглядит_ (и вообще ощущается) на конкретной системе конкретного пользователя — не секрет, что на 97% "десктопов" в современном мире установлена одна из ОС, сошедших со стапелей Microsoft, а на жалких остатках, занятых, в основном, решениями на базе [Linux](http://www.kernel.org) и \*BSD, царят [GNOME](http://www.gnome.org) и [KDE](http://www.kde.org), то есть имеет место "обоснованное засилье" приложений, использующих в виде GUI-тулкитов [GTK](http://www.gtk.org) и [Qt](http://trolltech.com/products/qt), соответственно. 
как он _выглядит_ (и вообще ощущается) на конкретной системе конкретного
пользователя — не секрет, что на 97% "десктопов" в современном мире установлена
одна из ОС, сошедших со стапелей Microsoft, а на жалких остатках, занятых, в
основном, решениями на базе [Linux](http://www.kernel.org) и \*BSD, царят
[GNOME](http://www.gnome.org) и [KDE](http://www.kde.org), то есть имеет место
"обоснованное засилье" приложений, использующих в виде GUI-тулкитов
[GTK](http://www.gtk.org) и [Qt](http://trolltech.com/products/qt),
соответственно.

Сейчас уже поздно стенать о том, что авторы GTK и Qt не дочитали спецификации
Сейчас уже поздно стенать о том, что авторы GTK и Qt не дочитали спецификации на X Window System, а также о том, что они изобрели (каждый — свою) системы конфигурации тулкитов, несовместимые с когда-то бывшей хоть каким-то стандартом систему конфигурации [Xt и Motif](http://en.wikipedia.org/wiki/Xt) ([XRDB](XRDB.md)). В результате мы имеем то, что имеем: несовместимые между собой тулкиты, некоторые из которых борются за "мировое господство". 
на X Window System, а также о том, что они изобрели (каждый — свою) системы
конфигурации тулкитов, несовместимые с когда-то бывшей хоть каким-то стандартом
систему конфигурации [Xt и Motif](http://en.wikipedia.org/wiki/Xt)
([**XRDB**](XRDB.md)). В результате мы имеем то, что имеем: несовместимые между
собой тулкиты, некоторые из которых борются за "мировое господство".

Отсюда и наш слабый аргумент: а почему, собственно, GTK или Qt? Потому, что он
Отсюда и наш слабый аргумент: а почему, собственно, GTK или Qt? Потому, что он доминирует на вашей системе? Но в любом случае всем угодить не получится: GTK-приложение будет чужим в окружении Qt и наоборот. А приложение GTK или Qt никогда не будет выглядеть совершенно нативно в Windows, пусть даже оно будет ближе к "натуральному виду", чем Tk. 
доминирует на вашей системе? Но в любом случае всем угодить не получится:
GTK-приложение будет чужим в окружении Qt и наоборот. А приложение GTK или Qt
никогда не будет выглядеть совершенно нативно в Windows, пусть даже оно будет
ближе к "натуральному виду", чем Tk.

Наконец, Ткаббер был рождён как "иксовое" приложение, а довольно весомая часть
Наконец, Ткаббер был рождён как "иксовое" приложение, а довольно весомая часть пользователей X Window вообще не использует "desktop environments", такие как GNOME и KDE — они используют "каноническую" концепцию: window manager + набор приложений, окнами которых он позволяет управлять. Приложения при этом могут быть какими угодно, наглядно демонстрируя "разброд и шатание" иксовых тулкитов во всей его неприглядности. Tk в этом случае выглядит не хуже и не лучше других. 
пользователей X Window вообще не использует "desktop environments", такие как
GNOME и KDE — они используют "каноническую" концепцию: window manager + набор
приложений, окнами которых он позволяет управлять. Приложения при этом могут
быть какими угодно, наглядно демонстрируя "разброд и шатание" иксовых тулкитов
во всей его неприглядности. Tk в этом случае выглядит не хуже и не лучше
других.

Следует также понимать, что у других тулкитов
Следует также понимать, что у других тулкитов [хватает своих "тараканов в голове"](http://vitus-wagner.livejournal.com/169017.html), и переезд на другой тулкит запросто может создать проблем больше, чем решить. 
[хватает своих "тараканов в голове"](http://vitus-wagner.livejournal.com/169017.html),
и переезд на другой тулкит запросто может создать проблем больше, чем решить.

## <a id="Техническая_сторона_дела"></a>Техническая сторона дела

У Tk есть несколько интересных особенностей, которые выделяют его в ряду
У Tk есть несколько интересных особенностей, которые выделяют его в ряду GUI-тулкитов: 
GUI-тулкитов:

*  Очень небольшой размер;
*  Масса расширений, _написанных на "чистом" Tcl;_
*  Tk является интегральной частью _шелла_
*  Очень небольшой размер; 
*  Масса расширений, _написанных на "чистом" Tcl;_ 
*  Tk является интегральной частью _шелла_ [**wish**](http://tcl.tk/man/tcl8.4/UserCmd/wish.htm#M13), то есть программы, которая выполняет скрипты Tcl в "оконных" окружениях. 
   [`wish`](http://tcl.tk/man/tcl8.4/UserCmd/wish.htm#M13), то есть
   программы, которая выполняет скрипты Tcl в "оконных" окружениях.

Это позволяет создавать дистрибутивы "всё-в-одном" из приложений, написанных
Это позволяет создавать дистрибутивы "всё-в-одном" из приложений, написанных на Tcl/Tk — [старкиты и старпаки](Дистрибутивы__которые_мы_выбираем.md#Tclkit_starkits_и_starpacks_немного_теории). 
на Tcl/Tk —
[**старкиты и старпаки**](Дистрибутивы__которые_мы_выбираем.md#Tclkit_starkits_и_starpacks_немного_теории).

Другими словами, "близость" Tk к Tcl даёт этому тулкиту несколько очков форы
Другими словами, "близость" Tk к Tcl даёт этому тулкиту несколько очков форы перед другими тулкитами, для которых требуется таскать за собой: 
перед другими тулкитами, для которых требуется таскать за собой:

*  Специальные [**биндинги**](Терминология.md#Биндинги_bindings) к тулкиту;
*  Сам тулкит в виде библиотеки (или набора из десятка библиотек, как в случае с GTK2+).
*  Специальные [биндинги](Терминология.md#Биндинги_bindings) к тулкиту; 
*  Сам тулкит в виде библиотеки (или набора из десятка библиотек, как в случае с GTK2+). 

![(!)](../images/Hammer.png) **Сделать:** развить
![(!)](../images/Hammer.png) **Сделать:** развить 

# <a id="Почему_не_отделить_интерфейс_от_реализации"></a>Почему не отделить интерфейс от реализации?
Людям, прочитавшим пару книжек по программированию, эта идея кажется разумной.
Людям, прочитавшим пару книжек по программированию, эта идея кажется разумной. В реальности всё гораздо сложнее. 
В реальности всё гораздо сложнее.

Самая главная проблема состоит в том, что разные GUI-тулкиты имеют разную
Самая главная проблема состоит в том, что разные GUI-тулкиты имеют разную _философию_ программирования. Это приводит к тому, что для поддержки разных тулкитов нужно: а) писать "ядро" в очень общем виде, разрабатывая некие абстрактные интерфейсы для взаимодействия ядра с тулкитом; б) писать ещё по одному слою кода для каждого тулкита — для привязки этого тулкита к ядру. В результате код Ткаббера увеличится хорошо если вдвое, а его читабельность уменьшится, видимо, даже более чем вдвое. Неплохую идею о том, к каким проблемам приводит подобный подход, можно почерпнуть, глядя на [GiTK](http://gitk.sourceforge.net). 
_философию_ программирования. Это приводит к тому, что для поддержки разных
тулкитов нужно: а) писать "ядро" в очень общем виде, разрабатывая некие
абстрактные интерфейсы для взаимодействия ядра с тулкитом; б) писать ещё по
одному слою кода для каждого тулкита — для привязки этого тулкита к ядру. В
результате код Ткаббера увеличится хорошо если вдвое, а его читабельность
уменьшится, видимо, даже более чем вдвое. Неплохую идею о том, к каким
проблемам приводит подобный подход, можно почерпнуть, глядя на
[GiTK](http://gitk.sourceforge.net).

Ещё одна проблема, незаметная при поверхностном осмотре, состоит в том, что
Ещё одна проблема, незаметная при поверхностном осмотре, состоит в том, что создание "чистого" кода практически невзоможно — любая платформа имеет собственные заморочки, что требует "твиков" кода, создания "костылей" и прочих уродств в определённых случаях. К сожалению, в Ткаббере вынужденно хватает подобных мест. В случае с "многоинтерфейсным" подходом мы автоматически множим и подобные проблемы. 
создание "чистого" кода практически невзоможно — любая платформа имеет
собственные заморочки, что требует "твиков" кода, создания "костылей" и прочих
уродств в определённых случаях. К сожалению, в Ткаббере вынужденно хватает
подобных мест. В случае с "многоинтерфейсным" подходом мы автоматически множим
и подобные проблемы.

Наконец, подумайте о координации разработки (а одна команда не станет окучивать
Наконец, подумайте о координации разработки (а одна команда не станет окучивать все направления — для этого требуются конкретные группы), а также о поддержке пользователей: даже сейчас, когда Ткаббер широко используется только на двух платформах (в Windows и Unix-based системах; в Mac OS X ситуация далека от радужной в силу отсутствия в команде Ткаббера разработчиков, заинтересованнных в улучшении ситуации), зачастую можно говорить о двух разных Ткабберах, так как эти платформы имеют слишком много собственных особенностей. Представьте теперь, что будет, если умножить число платформ на число поддерживаемых тулкитов? 
все направления — для этого требуются конкретные группы), а также о поддержке
пользователей: даже сейчас, когда Ткаббер широко используется только на двух
платформах (в Windows и Unix-based системах; в Mac OS X ситуация далека от
радужной в силу отсутствия в команде Ткаббера разработчиков, заинтересованнных
в улучшении ситуации), зачастую можно говорить о двух разных Ткабберах, так как
эти платформы имеют слишком много собственных особенностей. Представьте теперь,
что будет, если умножить число платформ на число поддерживаемых тулкитов?

Наконец, возможно, ключевой момент: разработчиков вполне устраивает Tcl/Tk, а
Наконец, возможно, ключевой момент: разработчиков вполне устраивает Tcl/Tk, а идеи "портировать Ткаббер под \<место для тулкита>" проистекают в основном от тех, кто свой труд вкладывать в это не хочет. 
идеи "портировать Ткаббер под \<место для тулкита>" проистекают в основном от
тех, кто свой труд вкладывать в это не хочет.

# <a id="Почему_нет_внешнего_API"></a>Почему нет "внешнего API"?
"Внешнего API" (такого, как, например, API плагинов у
"Внешнего API" (такого, как, например, API плагинов у [Миранды](http://miranda-im.org)) в Ткаббере нет потому, что он написан на Tcl, а не на Си; соответственно,   предполагается, что "скриптование" Ткаббера производится кодом на Tcl. 
[Миранды](http://miranda-im.org)) в Ткаббере нет потому, что он написан на Tcl,
а не на Си; соответственно,   предполагается, что "скриптование" Ткаббера
производится кодом на Tcl.

Обвинение в отсутствии C API обычно приводят как причину "невозможности
Обвинение в отсутствии C API обычно приводят как причину "невозможности скриптовать Ткаббер на языках, отличных от Tcl" (более конкретно — "на любимом языке"). Теоретически это обвинение обоснованно. Однако давайте посмотрим на проблему с практической точки зрения (игнорируя тот факт, что создание C API для Tcl кода относится к области ненаучной фантастики): 
скриптовать Ткаббер на языках, отличных от Tcl" (более конкретно — "на любимом
языке"). Теоретически это обвинение обоснованно. Однако давайте посмотрим на
проблему с практической точки зрения (игнорируя тот факт, что создание C API
для Tcl кода относится к области ненаучной фантастики):

*  Наличие C API не сделает автоматически доступными биндинги к этому API для
*  Наличие C API не сделает автоматически доступными биндинги к этому API для других языков — таковые сначала кто-то должен написать. И поддерживать. Посему заявление "я не могу скриптовать/расширять Ткаббер на любимом языке" в большинстве случаев следует переводить как "я знаю только С++ и джаву, и ваш тикль учить не хочу". 
   других языков — таковые сначала кто-то должен написать. И поддерживать.
   Посему заявление "я не могу скриптовать/расширять Ткаббер на любимом языке"
   в большинстве случаев следует переводить как "я знаю только С++ и джаву, и
   ваш тикль учить не хочу".
*  Предположив наличие C API и биндингов к другим языкам, мы видим проблемы
*  Предположив наличие C API и биндингов к другим языкам, мы видим проблемы возможностей использования и портабельности: предположим, вы написали плагин к Ткабберу, скажем, на Питоне. Много ли пользователей захотят ставить рантайм питона в систему, чтобы использовать ваш плагин? Как быть с распространением плагина в "упакованных" версиях Ткаббера? Пусть даже плагин написан прямо на Си, — возникает проблема кроссплатформенной сборки, то есть полный пакет проблем поддержки нескольких систем компиляции (имеющих, например, место в случае сборки расширений Tcl, написанных на Си). 
   возможностей использования и портабельности: предположим, вы написали плагин
   к Ткабберу, скажем, на Питоне. Много ли пользователей захотят ставить
   рантайм питона в систему, чтобы использовать ваш плагин? Как быть с
   распространением плагина в "упакованных" версиях Ткаббера? Пусть даже плагин
   написан прямо на Си, — возникает проблема кроссплатформенной сборки, то есть
   полный пакет проблем поддержки нескольких систем компиляции (имеющих,
   например, место в случае сборки расширений Tcl, написанных на Си).

С другой стороны, скриптование/расширение Ткаббера на его "родном" языке лишено
С другой стороны, скриптование/расширение Ткаббера на его "родном" языке лишено _всех_ этих проблем, кроме проблемы самообучения допиливающего. 
_всех_ этих проблем, кроме проблемы самообучения допиливающего.

# <a id="Ткаббер_выглядит_отвратительно"></a>Ткаббер выглядит отвратительно!

> *\<zayza\> почему говорят, что ткабер страшный? о\_0  
> \<teo\> zayza: потому что видели его*

Ткаббер (а точнее — Tk) находится в ловушке всех без исключения
Ткаббер (а точнее — Tk) находится в ловушке всех без исключения кроссплатформенных GUI-тулкитов — невозможно выглядеть "нативно", работая на ненативной платформе. К сожалению, как было сказано выше, это относится не только к проблеме "Tk в Windows", но и к "Tk в GNOME/KDE". 
кроссплатформенных GUI-тулкитов — невозможно выглядеть "нативно", работая на
ненативной платформе. К сожалению, как было сказано выше, это относится не
только к проблеме "Tk в Windows", но и к "Tk в GNOME/KDE".

К сожалению, выглядеть "в струе" самых последних веяний моды Windows и прочих
К сожалению, выглядеть "в струе" самых последних веяний моды Windows и прочих "desktop environments" Tk, скорее всего, не будет никогда — тяжело прочно сидеть на нескольких стульях разной высоты, формы и конструкции сразу. 
"desktop environments" Tk, скорее всего, не будет никогда — тяжело прочно
сидеть на нескольких стульях разной высоты, формы и конструкции сразу.

Несколько подсластить пилюлю могут достаточно широкие возможности по изменению
Несколько подсластить пилюлю могут достаточно широкие возможности по изменению внешнего вида Tk-приложений, о которых (когда-нибудь будет) рассказано [здесь](База_данных_опций_Tk.md). 
внешнего вида Tk-приложений, о которых (когда-нибудь будет) рассказано
[**здесь**](База_данных_опций_Tk.md).

Заодно расскажем ещё об одной часто всплывающей теме:
Заодно расскажем ещё об одной часто всплывающей теме: 

## <a id="Tile_в_Ткаббере"></a>Tile в Ткаббере

[Tile](http://tktable.sourceforge.net/tile) — это _надстройка_ над Tk,
[Tile](http://tktable.sourceforge.net/tile) — это _надстройка_ над Tk, призванная решить некоторые проблемы с "луком и филом", присущие Tk: 
призванная решить некоторые проблемы с "луком и филом", присущие Tk:

*  Реализовать "нативный" вид в Windows XP (то есть использовать её движок
*  Реализовать "нативный" вид в Windows XP (то есть использовать её движок тем); 
   тем);
*  Реализовать несколько новых виджетов, переделать старые.
*  Реализовать несколько новых виджетов, переделать старые. 

Проблема с Tile состоит в том, что она _**не** является **"drop-in
Проблема с Tile состоит в том, что она _**не** является **"drop-in replacement"** для Tk._ Это важно понимать: простое подключение Tile к существующему проекту, использующему Tk, не привьёт ему "волшебным образом" все преимущества Tile. В частности, если стандартные виджеты Tk ещё могут (с некоторыми приседаниями при сборке Tile) "переехать" на новый движок, то все "левые" виджеты (например, виджеты из BWidget) "сушат вёсла" — выглядят и работают по-старому. 
replacement"** для Tk._ Это важно понимать: простое подключение Tile к
существующему проекту, использующему Tk, не привьёт ему "волшебным образом" все
преимущества Tile. В частности, если стандартные виджеты Tk ещё могут (с
некоторыми приседаниями при сборке Tile) "переехать" на новый движок, то все
"левые" виджеты (например, виджеты из BWidget) "сушат вёсла" — выглядят и
работают по-старому.

Другими словами, Ткаббер нужно _портировать_ под Tile, чтобы он с этой Tile
Другими словами, Ткаббер нужно _портировать_ под Tile, чтобы он с этой Tile нормально заработал. 
нормально заработал.

Тут возникает другая проблема. Она состоит в том, что Ткаббер позиционируется
Тут возникает другая проблема. Она состоит в том, что Ткаббер позиционируется разработчиками как максимально портабельное приложение. Это означает, в числе прочего, что: 
разработчиками как максимально портабельное приложение. Это означает, в числе
прочего, что:

*  Ткаббер (формально) работает даже на Tcl/Tk 8.3;
*  Ткаббер _зависит_ (в смысле "не может работать без") только от таких
*  Ткаббер (формально) работает даже на Tcl/Tk 8.3; 
*  Ткаббер _зависит_ (в смысле "не может работать без") только от таких программных компонентов, которые давно и широко доступны под любую из платформ, на которых работает Tcl/Tk. Причём только один из этих компонентов (собственно Tcl/Tk) написан на Си, и его нужно "собирать" на целевой платформе, если его там нет в готовом виде; остальные компоненты (Tcllib и BWidget) представляют собой код на Tcl — их достаточно "развернуть" из архивов, — и они готовы к работе. 
   программных компонентов, которые давно и широко доступны под любую из
   платформ, на которых работает Tcl/Tk. Причём только один из этих компонентов
   (собственно Tcl/Tk) написан на Си, и его нужно "собирать" на целевой
   платформе, если его там нет в готовом виде; остальные компоненты (Tcllib и
   BWidget) представляют собой код на Tcl — их достаточно "развернуть" из
   архивов, — и они готовы к работе.

Tile к этим компонентам _не_ относится. Достаточно сказать о том, что в природе
Tile к этим компонентам _не_ относится. Достаточно сказать о том, что в природе не существует даже такого понятия как "стабильный релиз Tile", а это означает, что его API может меняться по два раза на дню. 
не существует даже такого понятия как "стабильный релиз Tile", а это означает,
что его API может меняться по два раза на дню.

На сегодняшний день состояние дел таково, что если мы бросим все дела и
На сегодняшний день состояние дел таково, что если мы бросим все дела и "привяжем" Ткаббер к Tile, то это ударит как по разработчикам (им понадобится оперативно следить за изменениями в Tile), так и по пользователям (Tile, насколько нам известно, нет ни в одном серьёзном дистрибутиве Linux) — Ткаббер потеряет одно из своих главных качеств — способность работать без чрезмерно серьёзных телодвижений со стороны пользователя на любой системе, в которой есть Tcl/Tk. 
"привяжем" Ткаббер к Tile, то это ударит как по разработчикам (им понадобится
оперативно следить за изменениями в Tile), так и по пользователям (Tile,
насколько нам известно, нет ни в одном серьёзном дистрибутиве Linux) — Ткаббер
потеряет одно из своих главных качеств — способность работать без чрезмерно
серьёзных телодвижений со стороны пользователя на любой системе, в которой есть
Tcl/Tk.

Ещё одна (менее серьёзная) проблема состоит в том, что Ткаббер действительно
сильно зависит от BWidget — с его помощью делаются: почти все диалоги, главное
меню, интерфейс с табами (правда, в альфе 0.10.1 уже реализован другой подход),
Ещё одна (менее серьёзная) проблема состоит в том, что Ткаббер действительно сильно зависит от BWidget — с его помощью делаются: почти все диалоги, главное меню, интерфейс с табами (правда, в альфе 0.10.1 уже реализован другой подход), деревья, выпадающие списки так далее. Так как BWidget не поддерживает Tile и, судя по-всему, не будет её поддерживать, портирование Ткаббера под Tile — это очень серьёзный шаг: прежде чем его сделать, разработчики должны быть уверены, что Tile получила такую же доступность, как BWidget. 

Посему точка зрения [автора этих строк](Участник_Kostix.md) состоит в том, что вряд ли стоит ожидать подвижек в этом направлении в ближайшие два года. 

деревья, выпадающие списки так далее. Так как BWidget не поддерживает Tile и,
судя по-всему, не будет её поддерживать, портирование Ткаббера под Tile — это
очень серьёзный шаг: прежде чем его сделать, разработчики должны быть уверены,
что Tile получила такую же доступность, как BWidget.

Посему точка зрения [**автора этих строк**](Участник_Kostix.md) состоит в том, что
вряд ли стоит ожидать подвижек в этом направлении в ближайшие два года.

Changes to wiki/ru/Остров_посланных_на....md.

1

2
3
4
5
6
7
8
9
10




11
12

13
14
15
16

17
18

19
20
21
22
23
24
25
26
27
28
29
30
31

32
33
34

35
36
37
38
39
40
41
42
43
44
45
46

47
48
49
50
51


52
53

54
55

56
57
58
59



60
61

62
63
64
65



66
67
68


69
70

71
72
73
74

75
76
77

78
79
80
81

82
83

84
85
86
87
88

89
90

91
92

93
94
95
96
97




98
99
100
101


102
103
104
105
106
107
108



109
110

111
112

113
114
115
116
117
118
119
120

121
122
123
124
125
126


127

128
129
130
131
132
133
134
135
136
137







138
139
140

141
142
143
144



145
146
147

148
149
150
151

152
153

154
155
156

157
158
159
160
161
162
163




164
165
166
167
168
169
1
2
3
4
5
6
7




8
9
10
11
12

13


14

15
16

17




18
19
20
21
22
23
24
25

26
27
28

29









30
31

32


33


34
35


36


37




38
39
40
41

42
43



44
45
46
47


48
49
50

51


52

53
54
55

56




57


58





59


60


61





62
63
64
65




66
67







68
69
70


71


72








73

74
75
76
77
78
79
80

81


82







83
84
85
86
87
88
89



90




91
92
93



94




95


96
97
98

99


100




101
102
103
104







+





-
-
-
-
+
+
+
+

-
+
-
-

-
+

-
+
-
-
-
-








-
+


-
+
-
-
-
-
-
-
-
-
-


-
+
-
-

-
-
+
+
-
-
+
-
-
+
-
-
-
-
+
+
+

-
+

-
-
-
+
+
+

-
-
+
+

-
+
-
-

-
+


-
+
-
-
-
-
+
-
-
+
-
-
-
-
-
+
-
-
+
-
-
+
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
-
-
-
-
-
-
-
+
+
+
-
-
+
-
-
+
-
-
-
-
-
-
-
-
+
-





+
+
-
+
-
-

-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
-
-
-
-
+
+
+
-
-
-
+
-
-
-
-
+
-
-
+


-
+
-
-

-
-
-
-
+
+
+
+
-
-
-
-
-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Остров_посланных_на...)


# Остров посланных на...

Материал из Tkabber Wiki

> _Необычной какой-то неокеанической красоты, высоты,  
> изящной длины открылся нам вдруг остров, стоящий посреди океана.  
> Казалось — он вулканического происхождения, потом казалось — нет.  
> И все же что-то вулканическое угадывалось в его мощных очертаниях._
Необычной какой-то неокеанической красоты, высоты,
 изящной длины открылся нам вдруг остров, стоящий посреди океана.
 Казалось — он вулканического происхождения, потом казалось — нет.
 И все же что-то вулканическое угадывалось в его мощных очертаниях. 

> _© ["Остров посланных на..."](http://www.lib.ru/KOWAL/suervyer.txt#6) из сборника
© ["Остров посланных на..."](http://www.lib.ru/KOWAL/suervyer.txt#6) из сборника ["Суер-Выер"](http://www.lib.ru/KOWAL/suervyer.txt) [Юрия Коваля](http://www.lib.ru/KOWAL/) 
  ["Суер-Выер"](http://www.lib.ru/KOWAL/suervyer.txt)
  [Юрия Коваля](http://www.lib.ru/KOWAL/)_

Доброго времени суток!
Доброго времени суток! 

Поскольку вы находитесь здесь, можно предположить, что вы прочитали топик в
Поскольку вы находитесь здесь, можно предположить, что вы прочитали топик в конференции `tkabber@conference.jabber.ru` и нажали ссылку. Обижаться не стоит, вы на верном пути. Сейчас мы по-быстрому расскажем вам, как пользоваться этой вики, конференцией и находящимся там ботом, чтобы ваше пребывание там было приятным, а ваше и наше время не было потрачено зря, но с пользой. 
конференции `tkabber@conference.jabber.ru` и нажали ссылку. Обижаться не стоит,
вы на верном пути. Сейчас мы по-быстрому расскажем вам, как пользоваться этой
вики, конференцией и находящимся там ботом, чтобы ваше пребывание там было
приятным, а ваше и наше время не было потрачено зря, но с пользой.

## <a id="toc"></a>Содержание

* [1 Вики](#Вики)
* [2 Бот sulci](#Бот_sulci)
* [3 Другие источники информации](#Другие_источники_информации)
* [4 Конференция](#Конференция)
* [5 Проблема разрешилась?](#Проблема_разрешилась)
* [6 Проблема **НЕ** разрешилась?](#Проблема_НЕ_разрешилась)
* [6 Проблема НЕ разрешилась?****](#Проблема_НЕ_разрешилась)

# <a id="Вики"></a>Вики
Подробнее о навигации по вики можно прочитать на
Подробнее о навигации по вики можно прочитать на **[Заглавной странице](Заглавная_страница.md),** здесь же можем сказать, что, перерыв интернет в поисках документации по Ткабберу на русском (да и других языках), мы ничего путнего почти и не нашли (а что нашли — обнародовали на странице **[Ссылки](Ссылки.md)**). Иными словами: этот проект вполне можно считать официальным источником информации по этой замечательной программе (не считая, конечно, файла документации, идущего с пакетом, и официального сайта Ткаббера [http://tkabber.jabber.ru](http://tkabber.jabber.ru)). К чему это всё? А к тому, что не спешите задавать свой вопрос на конференции, почитайте сначала хотя бы **[Ткаббер ЧаВо](Ткаббер_ЧаВо.md),** а лучше — и остальные статьи. 
[**Заглавной странице**](Заглавная_страница.md), здесь же можем сказать, что, перерыв
интернет в поисках документации по Ткабберу на русском (да и других языках), мы
ничего путнего почти и не нашли (а что нашли — обнародовали на странице
[**Ссылки**](Ссылки.md)). Иными словами: этот проект вполне можно считать
официальным источником информации по этой замечательной программе (не считая,
конечно, файла документации, идущего с пакетом, и официального сайта Ткаббера
[http://tkabber.jabber.ru](http://tkabber.jabber.ru)). К чему это всё? А к
тому, что не спешите задавать свой вопрос на конференции, почитайте сначала
хотя бы [**Ткаббер ЧаВо**](Ткаббер_ЧаВо.md), а лучше — и остальные статьи.

# <a id="Бот_sulci"></a>Бот sulci
Разговаривать с ботом имеет смысл, если у вас дорогой трафик или проблемы с
Разговаривать с ботом имеет смысл, если у вас дорогой трафик или проблемы с выходом в интернет. Он знает немного и может просветить лишь по самым основным вопросам. 
выходом в интернет. Он знает немного и может просветить лишь по самым основным
вопросам.

* Сразу предупреждаем: **общаться с ним в привате!**
* Один застенчивый новичок долго не мог попасть в приват к боту, потому что не
*  Сразу предупреждаем: **общаться с ним в привате!** 
*  Один застенчивый новичок долго не мог попасть в приват к боту, потому что не знал, как записываться на приём. 
  знал, как записываться на приём.
   * Объясняем: открыть приват (не только с ботом) можно, сделав двойной клик
 *  Объясняем: открыть приват (не только с ботом) можно, сделав двойной клик на нике в списке участников конференции. 
     на нике в списке участников конференции.
   * То же самое можно сделать, открыв на участнике конференции контекстное
 *  То же самое можно сделать, открыв на участнике конференции контекстное меню и выбрав там пункт "Начать разговор". Да не дрогнет рука ваша! 
     меню и выбрав там пункт "Начать разговор". Да не дрогнет рука ваша!
   * Ещё один вариант: набрать команду **/open sulci**

* Начать общение можно с этой фразы:
 *  Ещё один вариант: набрать команду **/open sulci** 
 
*  Начать общение можно с этой фразы: 

        wtf ткаббер_термины
    wtf ткаббер_термины

* В ответ на неё бот выдаст ключевые слова, которым мы его обучили.
* Эти ключевые слова тоже используются с помощью команды **wtf**.
* Бот умеет искать в гугле:
*  В ответ на неё бот выдаст ключевые слова, которым мы его обучили. 
*  Эти ключевые слова тоже используются с помощью команды **wtf**. 
*  Бот умеет искать в гугле: 

        google поисковый запрос
        google_adv start limit поисковый запрос
    google поисковый запрос
    google_adv start limit поисковый запрос

    Во втором случае он выдаёт limit результатов, начиная с start. Например, по
Во втором случае он выдаёт limit результатов, начиная с start. Например, по команде "google\_adv 4 5 tkabber wiki" бот выдаст пять ссылок по запросу "tkabber wiki", пропустив первые три ссылки. 
    команде "google\_adv 4 5 tkabber wiki" бот выдаст пять ссылок по запросу
    "tkabber wiki", пропустив первые три ссылки.

Конечно, бот умеет много чего ещё, но это уже к Ткабберу не относится.
Конечно, бот умеет много чего ещё, но это уже к Ткабберу не относится. 

# <a id="Другие_источники_информации"></a>Другие источники информации
1. Как ни странно, родная документация, которую можно найти в
1.  Как ни странно, родная документация, которую можно найти в **/usr/share/doc/tkabber/tkabber.html** или **C:\\Program Files\\Tkabber\\tkabber\\doc\\tkabber.html** (на английском); 
   **/usr/share/doc/tkabber/tkabber.html** или
   **C:\\Program Files\\Tkabber\\tkabber\\doc\\tkabber.html** (на английском);
1. У Ткаббера есть официальная страница
   [http://tkabber.jabber.ru](http://tkabber.jabber.ru) — поищите на ней; хоть
1.  У Ткаббера есть официальная страница [http://tkabber.jabber.ru](http://tkabber.jabber.ru) — поищите на ней; хоть форум там и пустынен, архив его может пригодиться; 
   форум там и пустынен, архив его может пригодиться;
1. Если вы пользователь Windows, имеет смысл ознакомиться с
1.  Если вы пользователь Windows, имеет смысл ознакомиться с [этой статьёй](http://sgolovan.nes.ru/jabber/Tkabber-Windows-Mini-Howto.html) (на случай, если вдруг ни с того ни с сего тот сервер в дауне, у нас имеется ["зеркало" этой статьи](Tkabber_Windows_Mini_HOWTO.md)); 
   [этой статьёй](http://sgolovan.nes.ru/jabber/Tkabber-Windows-Mini-Howto.html) (на
   случай, если вдруг ни с того ни с сего тот сервер в дауне, у нас имеется
   [**"зеркало" этой статьи**](Tkabber_Windows_Mini_HOWTO.md));
1. Попробуйте пошерстить
   [логи конференции](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru) —
1.  Попробуйте пошерстить [логи конференции](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru) — возможно, ваша проблема уже обсуждалась; 
   возможно, ваша проблема уже обсуждалась;
1. Если религия позволяет, сходите на [google.com](http://google.com). В
1.  Если религия позволяет, сходите на [google.com](http://google.com). В качестве поискового запроса можно написать: 
   качестве поискового запроса можно написать:
   * первую строчку сообщения об ошибке или её часть, если по полной строке нет
 *  первую строчку сообщения об ошибке или её часть, если по полной строке нет результатов, 
     результатов,
   * ключевые слова:
      * обязательно: Ткаббер (tkabber),
      * в зависимости от потребностей: шрифт (font), автоэвей (autoaway),
	смайлик (emoticon, emoteicon) и так далее. Вообще учитесь пользоваться
 *  ключевые слова: 
  *  обязательно: Ткаббер (tkabber), 
  *  в зависимости от потребностей: шрифт (font), автоэвей (autoaway), смайлик (emoticon, emoteicon) и так далее. Вообще учитесь пользоваться гуглем — в наше время это умение будет поважнее владения томагавком. Не удивляйтесь, если поиск приведёт вас на эту вики :) 
 
	гуглем — в наше время это умение будет поважнее владения томагавком. Не
	удивляйтесь, если поиск приведёт вас на эту вики :)
   * ключевые слова в сочетании со служебным словом
     [site](http://www.google.ru/intl/ru/help/refinesearch.html#domain), если
 *  ключевые слова в сочетании со служебным словом [site](http://www.google.ru/intl/ru/help/refinesearch.html#domain), если хотите искать только на определённом сайте. Например, если хотите искать слово "старпак" в логах конференции, введите в строке запроса следующий текст: **старпак site:http://chatlogs.jabber.ru/tkabber@conference.jabber.ru** 
 
     хотите искать только на определённом сайте. Например, если хотите искать
     слово "старпак" в логах конференции, введите в строке запроса следующий
     текст:
     **старпак site:http://chatlogs.jabber.ru/tkabber@conference.jabber.ru**
1. Не забудьте, что и на вики есть поиск:
   * Кнопка "Перейти" попытается перекинуть вас на статью с введённым именем.
   * Кнопка "Поиск" будет искать страницы, на которых присутствует введённое
1.  Не забудьте, что и на вики есть поиск: 
 *  Кнопка "Перейти" попытается перекинуть вас на статью с введённым именем. 
 *  Кнопка "Поиск" будет искать страницы, на которых присутствует введённое вами слово. 
     вами слово.
      * В случае неудачи попробуйте другие словоформы: вместо "смайлик" —
  *  В случае неудачи попробуйте другие словоформы: вместо "смайлик" — "смайлика", "смайлики" и т. д. 
	"смайлика", "смайлики" и т. д.
      * Выяснилось, что поиск на вики глючит на запросах из латинских букв
  *  Выяснилось, что поиск на вики глючит на запросах из латинских букв (например, не находится "icq", хотя это слово встречается в уйме статей; не находится "windo", зато находится "window" как составная часть слова "windows", ну и так далее). Плохо, конечно. Надеемся, что администраторы вики это когда-нибудь исправят, а пока посоветуем схитрить (во многих статьях используется слово "аська" и его производные, можете поискать на "аськ"; или же "новости", "фид" вместо "rss"). Или просмотрите список всех страниц (ссылка в левом меню). 
	(например, не находится "icq", хотя это слово встречается в уйме
	статей; не находится "windo", зато находится "window" как составная
	часть слова "windows", ну и так далее). Плохо, конечно. Надеемся, что
	администраторы вики это когда-нибудь исправят, а пока посоветуем
	схитрить (во многих статьях используется слово "аська" и его
	производные, можете поискать на "аськ"; или же "новости", "фид" вместо
	"rss"). Или просмотрите список всех страниц (ссылка в левом меню).
	 * Отсюда вывод: на вики тоже искать гуглём (как искать на конкретном
   *  Отсюда вывод: на вики тоже искать гуглём (как искать на конкретном сайте, описано чуть выше). 
	   сайте, описано чуть выше).

# <a id="Конференция"></a>Конференция

![](../images/180px-2faq.gif)

![](../images/magnify-clip.png)

Если самостоятельное изучение документации плодов не принесло, общения с нами
Если самостоятельное изучение документации плодов не принесло, общения с нами не избежать. Как можно сделать его приятнее и свести потери нашего и вашего времени к минимуму? 
не избежать. Как можно сделать его приятнее и свести потери нашего и вашего
времени к минимуму?

1. Не пожалейте ещё пяти минут и почитайте статью о том, как правильно задавать вопросы:
   * [короткая версия](http://mydebianblog.blogspot.com/2006/07/questions-mini-howto.html),
   * [более полная версия](http://bugtraq.ru/forum/faq/general/smart-questions.html),
   * [она же в гугле](http://www.google.com/search?as_q=перевод+how+to+ask+questions+in+a+smart+way),
   * бот тоже может помочь: **wtf хороший\_вопрос**.
1. Чтобы общение в конференции протекало в атмосфере добрососедства и
   взаимопонимания, постарайтесь руководствоваться принципами, давно
1.  Не пожалейте ещё пяти минут и почитайте статью о том, как правильно задавать вопросы: 
 *  [короткая версия](http://mydebianblog.blogspot.com/2006/07/questions-mini-howto.html), 
 *  [более полная версия](http://bugtraq.ru/forum/faq/general/smart-questions.html), 
 *  [она же в гугле](http://www.google.com/search?as_q=перевод+how+to+ask+questions+in+a+smart+way), 
 *  бот тоже может помочь: **wtf хороший\_вопрос**. 
 
1.  Чтобы общение в конференции протекало в атмосфере добрососедства и взаимопонимания, постарайтесь руководствоваться принципами, давно проверенными временем в мире IRC и изложенными, в частности, на следующих страницах: 
   проверенными временем в мире IRC и изложенными, в частности, на следующих
   страницах:
   * [кэш FAQ'а канала помощи по оконному менеджеру fvwm](http://66.102.9.104/search?q=cache:-bKM5BysLb8J:edulinux.homeunix.org/fvwm/fvwmchanfaq.html)
 *  [кэш FAQ'а канала помощи по оконному менеджеру fvwm](http://66.102.9.104/search?q=cache:-bKM5BysLb8J:edulinux.homeunix.org/fvwm/fvwmchanfaq.html) (первая часть, про сам канал — на английском) 
     (первая часть, про сам канал — на английском)
   * [статья о правилах поведения на каналах IRC-сети Wenet](http://www.wenet.ru/irc/etiquette)
     (по-русски)
1. Собственно, трудно к этому что-либо прибавить, но нелишним будет напомнить,
 *  [статья о правилах поведения на каналах IRC-сети Wenet](http://www.wenet.ru/irc/etiquette) (по-русски) 
 
1.  Собственно, трудно к этому что-либо прибавить, но нелишним будет напомнить, что от того, **как** задан вопрос, сильно зависит ответ, который вы получите (а то и не получите вовсе). Перечитайте ещё раз пункты 1 и 2. 
   что от того, **как** задан вопрос, сильно зависит ответ, который вы получите
   (а то и не получите вовсе). Перечитайте ещё раз пункты 1 и 2.
1. Всё же пришлось добавить одно пожелание: пожалуйста, очень вас просим, почти
1.  Всё же пришлось добавить одно пожелание: пожалуйста, очень вас просим, почти на коленях — **не коверкайте русский язык и не используйте "слепые" смайлики — вот такие:
   на коленях — **не коверкайте русский язык и не используйте "слепые" смайлики
   — вот такие:**

        ))))
    ))))

    **А то забаним!** (Достало уже просто.)
 А то забаним!** (Достало уже просто.) 

# <a id="Проблема_разрешилась"></a>Проблема разрешилась?
Тогда будьте добры, расскажите в конференции, как вы этого добились. Можете
Тогда будьте добры, расскажите в конференции, как вы этого добились. Можете также написать об этом в ЧаВо или вообще написать новую статью. Ваш опыт пригодится другим. 
также написать об этом в ЧаВо или вообще написать новую статью. Ваш опыт
пригодится другим.

# <a id="Проблема_НЕ_разрешилась"></a>Проблема **НЕ** разрешилась?
Что ж, и такое бывает. Умейте держать удар, падать лицом в грязь, отливать
против ветра и уходить не солоно хлебавши. Жизнь коротка, но это не повод
отчаиваться. Отдохните от проблемы, а потом начните снова. Попробуйте
# <a id="Проблема_НЕ_разрешилась"></a>Проблема НЕ разрешилась?****
Что ж, и такое бывает. Умейте держать удар, падать лицом в грязь, отливать против ветра и уходить не солоно хлебавши. Жизнь коротка, но это не повод отчаиваться. Отдохните от проблемы, а потом начните снова. Попробуйте альтернативные пути решения, сходите на другие форумы и конференции, которые могут быть как-то связаны с вашей задачей. На нас свет клином не сошёлся, и кто-нибудь другой может подсказать решение. В конце концов, подумайте хорошо: а настолько ли важна эта проблема? Может, вместо того, чтобы сутками пялиться в монитор, пытаясь с ней разобраться, вам стоит расправить плечи, выбраться на природу и послушать птиц? :) Жизнь коротка, знаете ли... 


альтернативные пути решения, сходите на другие форумы и конференции, которые
могут быть как-то связаны с вашей задачей. На нас свет клином не сошёлся, и
кто-нибудь другой может подсказать решение. В конце концов, подумайте хорошо: а
настолько ли важна эта проблема? Может, вместо того, чтобы сутками пялиться в
монитор, пытаясь с ней разобраться, вам стоит расправить плечи, выбраться на
природу и послушать птиц? :) Жизнь коротка, знаете ли...

Changes to wiki/ru/Палитра_цветов.md.

1

2
3
4
5

6
7
8
9
10
11
12
13



14
15
16


17
18
19

20
21
22
23
24
25
26

27
28
29
30



31
32
33
34

35
36
37
38

39
40

41
42
43
44
45
46
47

48
49
50
51

52
53
54
55

56
57
58
59
60
61

62
63
64
65

66
67
68
69
70

71
72
73
74
75
76

77
78
79

80
81

82
83
84
85
86

87
88
89
90
91
92
93
94



1
2
3
4
5

6
7
8
9
10
11



12
13
14
15


16
17
18
19

20




21
22

23
24



25
26
27
28
29
30

31


32

33
34

35



36
37
38

39


40

41
42
43
44

45




46

47

48
49

50

51
52
53

54


55
56
57

58

59

60
61

62



63

64




65



66
67
68

+



-
+





-
-
-
+
+
+

-
-
+
+


-
+
-
-
-
-


-
+

-
-
-
+
+
+



-
+
-
-

-
+

-
+
-
-
-



-
+
-
-

-
+



-
+
-
-
-
-

-
+
-


-
+
-



-
+
-
-



-
+
-

-
+

-
+
-
-
-

-
+
-
-
-
-

-
-
-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Палитра_цветов/index.html)


# Палитра цветов

Материал из Tkabber Wiki
Материал из Tkabber Wiki.

## <a id="toc"></a>Содержание

* [1 Введение](#Введение)
* [2 Теория](#Теория)
   * [2.1 Цвета X Window](#Цвета_X_Window)
   * [2.2 Системные цвета](#Системные_цвета)
   * [2.3 Спецификации RGB](#Спецификации_RGB)
 * [2.1 Цвета X Window](#Цвета_X_Window)
 * [2.2 Системные цвета](#Системные_цвета)
 * [2.3 Спецификации RGB](#Спецификации_RGB)
* [3 Практика](#Практика)
   * [3.1 Таблицы](#Таблицы)
   * [3.2 Утилиты](#Утилиты)
 * [3.1 Таблицы](#Таблицы)
 * [3.2 Утилиты](#Утилиты)

# <a id="Введение"></a>Введение
При редактировании различных настроек цветов в Ткаббере полезно иметь: в голове
При редактировании различных настроек цветов в Ткаббере полезно иметь: в голове — некоторые знания из области управления цветами в [Tk](http://ru.wikipedia.org/wiki/Tk), и под рукой — вспомогательные утилиты, облегчающие нелёгкий труд любителя [хохломы](Цветовые_темы_и_пиктограммы.md#Цветовые_темы). 
— некоторые знания из области управления цветами в
[Tk](http://ru.wikipedia.org/wiki/Tk), и под рукой — вспомогательные утилиты,
облегчающие нелёгкий труд любителя
[*хохломы*](Цветовые_темы_и_пиктограммы.md#Цветовые_темы).

# <a id="Теория"></a>Теория
Tk понимает цвета в трёх вариантах:
Tk понимает цвета в трёх вариантах: 

*  "Стандартные цвета X Window";
*  "Системные" цвета;
*  Числовые обозначения цветов, кодирующие их RGB-компоненты.
*  "Стандартные цвета X Window"; 
*  "Системные" цвета; 
*  Числовые обозначения цветов, кодирующие их RGB-компоненты. 

## <a id="Цвета_X_Window"></a>Цвета X Window

Представляют собою большой набор различных цветов, стандартизированный для
Представляют собою большой набор различных цветов, стандартизированный для использования в X Window System. В любых "иксах" идёт текстовый файл **rgb.txt**, содержащий отображения названий цветов на их RGB-значения. 
использования в X Window System. В любых "иксах" идёт текстовый файл
**rgb.txt**, содержащий отображения названий цветов на их RGB-значения.

Про эти цвета Tk "знает" независимо от той системы, в которой работает.
Про эти цвета Tk "знает" независимо от той системы, в которой работает. 

"Официальный" (для Tk) список цветов представлен страницей руководства
"Официальный" (для Tk) список цветов представлен страницей руководства ["colors"](http://www.tcl.tk/man/tcl8.4/TkCmd/colors.htm), однако для подбора цветов гораздо удобнее пользоваться спецсредствами, о которых рассказано [ниже](Палитра_цветов.md#Практика). 
["colors"](http://www.tcl.tk/man/tcl8.4/TkCmd/colors.htm), однако для подбора
цветов гораздо удобнее пользоваться спецсредствами, о которых рассказано
[**ниже**](Палитра_цветов.md#Практика).

## <a id="Системные_цвета"></a>Системные цвета

Это специальные цвета, доступные в определённой оконной системе. Имеются только
Это специальные цвета, доступные в определённой оконной системе. Имеются только в Windows и Mac OS X. Их удобно использовать для того, чтобы назначать виджетам "стандартные" ("системные") цвета. 
в Windows и Mac OS X. Их удобно использовать для того, чтобы назначать виджетам
"стандартные" ("системные") цвета.

![(!)](../images/Hammer.png) **Сделать:** таблицы из книги Уэлша
![(!)](../images/Hammer.png) **Сделать:** таблицы из книги Уэлша 

## <a id="Спецификации_RGB"></a>Спецификации RGB

Цвета также можно указывать напрямую — в RGB формате вида: \#RGB, \#RRGGBB,
Цвета также можно указывать напрямую — в RGB формате вида: \#RGB, \#RRGGBB, \#RRRGGGBBB, \#RRRRGGGGBBBB, где "R", "G" и "B" должны быть представлены шестнадцатеричными цифрами (каждая из которых представляет 4 бита данных). Таким образом можно указывать цвета, соответствующие глубине цвета 4, 8, 12 и 16 бит. 
\#RRRGGGBBB, \#RRRRGGGGBBBB, где "R", "G" и "B" должны быть представлены
шестнадцатеричными цифрами (каждая из которых представляет 4 бита данных).
Таким образом можно указывать цвета, соответствующие глубине цвета 4, 8, 12 и
16 бит.

Дополнительные подробности представлены
Дополнительные подробности представлены [здесь](http://www.tcl.tk/man/tcl8.4/TkLib/GetColor.htm#M5). 
[здесь](http://www.tcl.tk/man/tcl8.4/TkLib/GetColor.htm#M5).

# <a id="Практика"></a>Практика
Есть два подхода к выбору цветов: готовые таблицы и утилиты, предоставляющие
Есть два подхода к выбору цветов: готовые таблицы и утилиты, предоставляющие возможность "подкрутить" нужный цвет. 
возможность "подкрутить" нужный цвет.

## <a id="Таблицы"></a>Таблицы

...ищутся в гугле по запросу "rgb.txt". К примеру,
...ищутся в гугле по запросу "rgb.txt". К примеру, [вот](http://web.njit.edu/~kevin/rgb.txt.html) и [вот](http://sedition.com/perl/rgb.html). 
[вот](http://web.njit.edu/~kevin/rgb.txt.html) и
[вот](http://sedition.com/perl/rgb.html).

## <a id="Утилиты"></a>Утилиты

В X Window System есть пара "родных" утилит для выбора цветов: попроще —
В X Window System есть пара "родных" утилит для выбора цветов: попроще — **xcolors** и посложнее/поудобнее — **xcolorsel**. 
**xcolors** и посложнее/поудобнее — **xcolorsel**.

В Windows "родных" утилит нет, но можно использовать внешние.
В Windows "родных" утилит нет, но можно использовать внешние. 

Наиболее прямолинейный подход — использовать для подбора цветов Tk приложения,
Наиболее прямолинейный подход — использовать для подбора цветов Tk приложения, написанные на Tcl/Tk же. Для работы таких утилит нужен рантайм Tcl/Tk (то есть ["полноценный" дистрибутив](http://www.activestate.com/tcl) или [tclkit](http://www.equi4.com/tclkit.html)). 
написанные на Tcl/Tk же. Для работы таких утилит нужен рантайм Tcl/Tk (то есть
["полноценный" дистрибутив](http://www.activestate.com/tcl) или
[tclkit](http://www.equi4.com/tclkit.html)).

Например, вот [отличная утилитка от Jeffry Hobbs'а](http://www.tcl.tk/community/hobbs/tcl/src/colordemo.tcl).
Например, вот [отличная утилитка от Jeffry Hobbs'а](http://www.tcl.tk/community/hobbs/tcl/src/colordemo.tcl). Она же доступна в виде ["тиклета"](http://www.tcl.tk/community/hobbs/tcl/tclet/color.html), если соответствующий [плагин web-браузера](http://www.tcl.tk/software/plugin/) у вас установлен. 
Она же доступна в виде
["тиклета"](http://www.tcl.tk/community/hobbs/tcl/tclet/color.html), если
соответствующий [плагин web-браузера](http://www.tcl.tk/software/plugin/) у вас
установлен.

Другие "color picker'ы" можно нарыть на [вики тиклеров](http://wiki.tcl.tk),
например: [вот](http://wiki.tcl.tk/9271),
[вот](http://wiki.tcl.tk/14976) и [вот](http://wiki.tcl.tk/xcolors).
Другие "color picker'ы" можно нарыть на [вики тиклеров](http://wiki.tcl.tk), например: [вот](http://wiki.tcl.tk/9271), [вот](http://wiki.tcl.tk/14976) и [вот](http://wiki.tcl.tk/xcolors). 


Changes to wiki/ru/Патчи.md.

1

2
3
4
5
6
7

8
9
10

11
12
13
14


15
16
17

18
19
20
21


22
23

24
25
26
27



28
29
30
31
32
33
34
35
36
37
38
39
40

41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

59
60

61
62
63
64

65
66
67
68
69
70
71
72

73
74
75
76
77

78
79
80
81
82
83

84
85
86

87
88

89
90
91


92
93

94
95
96
97

98
99

100
101

102
103

104
105

106
107
108
109
110
111
112
113
114
115

116
117
118
119
120
121

122
123
124
125
126
127
128
129
130
131
132
133
134

135
136

137
138

139
140

141
142
143

144
145
146

147
148
149
150
151

152
153
154
155

156
157

158
159
160
161

162
163
164
165

166
167

168
169

170
171
172
173

174
175

176
177

178
179
180

181
182
183
184
185
186
187
188


189
190
191
192
193
194
195
196
197
198


199
200
201
202
203
204

205
206
207
208
209
210
211
212


213
214

215
216
217
218
219
220

221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238

239
240
241
242
243


244
245
246
247
248
249
250
1
2
3
4
5
6
7

8

9

10




11
12



13




14
15


16




17
18
19



20
21
22
23
24
25
26
27
28

29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

47


48


49

50






51

52

53
54
55

56
57
58
59
60
61

62
63
64

65
66

67
68


69
70
71

72


73

74
75

76
77

78
79

80


81








82

83
84
85
86
87
88

89
90
91
92
93
94
95
96
97
98
99
100
101

102
103

104
105

106


107

108

109

110

111

112
113
114

115


116

117
118

119
120
121
122

123
124
125
126

127
128

129
130

131
132
133
134

135
136

137
138

139

140

141


142
143
144
145


146
147
148
149
150
151
152
153
154
155


156
157
158
159
160
161
162

163
164
165
166
167
168
169


170
171
172

173
174
175
176
177
178

179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196

197
198
199
200


201
202
203
204
205
206
207
208
209

+





-
+
-

-
+
-
-
-
-
+
+
-
-
-
+
-
-
-
-
+
+
-
-
+
-
-
-
-
+
+
+
-
-
-









-
+

















-
+
-
-
+
-
-

-
+
-
-
-
-
-
-

-
+
-



-
+





-
+


-
+

-
+

-
-
+
+

-
+
-
-

-
+

-
+

-
+

-
+
-
-
+
-
-
-
-
-
-
-
-

-
+





-
+












-
+

-
+

-
+
-
-
+
-

-
+
-

-
+
-



-
+
-
-

-
+

-
+



-
+



-
+

-
+

-
+



-
+

-
+

-
+
-

-
+
-
-




-
-
+
+








-
-
+
+





-
+






-
-
+
+

-
+





-
+

















-
+



-
-
+
+







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Патчи/index.html)


# Патчи

Материал из Tkabber Wiki

Здесь мы "замахнёмся" на исходные коды самой программы, а точнее — её
Здесь мы "замахнёмся" на исходные коды самой программы, а точнее — её модулей :) 
модулей :)

* Короткие патчи в пару строк легко наложить самостоятельно, поискав в тексте
*  Короткие патчи в пару строк легко наложить самостоятельно, поискав в тексте модуля нужные строчки, поэтому и оформлять статью следует соответственно: просто указать, **что на что заменяется**. 
  модуля нужные строчки, поэтому и оформлять статью следует соответственно:
  просто указать, **что на что заменяется**.
* Патчи же покрупней имеет смысл выкладывать в виде файла различий
  some\_file\_name.diff, который можно получить, запустив в консоли или xterm
*  Патчи же покрупней имеет смысл выкладывать в виде файла различий some\_file\_name.diff, который можно получить, запустив в консоли или xterm команду diff. Соответственно, применять такой патч следует с помощью команды patch: 

  команду diff. Соответственно, применять такой патч следует с помощью команды
  patch:
   1. Сохранить или перекинуть уже скачанный файл патча patch.diff в каталог,
1.  Сохранить или перекинуть уже скачанный файл патча patch.diff в каталог, где находится "патчуемый" и перейти туда (скорее всего, для этого и следующего действия вам потребуются права root). 
      где находится "патчуемый" и перейти туда (скорее всего, для этого и
      следующего действия вам потребуются права root).
   1. Выполнить команду **patch -p0 \< patch.diff**.
   1. Перезапустить Ткаббер и, если требуется, сходить в Настройки и подправить
1.  Выполнить команду **patch -p0 \< patch.diff**. 
1.  Перезапустить Ткаббер и, если требуется, сходить в Настройки и подправить опции. 
      опции.
   1. Создать патч можно командой **diff -u oldfile.tcl newfile.tcl >
1.  Создать патч можно командой **diff -u oldfile.tcl newfile.tcl > patch.diff** 
      patch.diff**
      * Или же, если вы работаете над svn-версией файла, просто выполните **svn
	diff file.tcl > patch.diff**
   1. Если вам посчастливилось работать в среде Windows, не отчаивайтесь:
 *  Или же, если вы работаете над svn-версией файла, просто выполните **svn diff file.tcl > patch.diff** 
 
1.  Если вам посчастливилось работать в среде Windows, не отчаивайтесь: скачайте и установите виндовые версии программ [patch](http://gnuwin32.sourceforge.net/packages/patch.htm) и [diff.](http://gnuwin32.sourceforge.net/packages/diffutils.htm) 
      скачайте и установите виндовые версии программ
      [patch](http://gnuwin32.sourceforge.net/packages/patch.htm) и
      [diff](http://gnuwin32.sourceforge.net/packages/diffutils.htm).

## <a id="toc"></a>Содержание

* [1 Отправка сообщений по нажатию Ctrl-Enter](#Отправка_сообщений_по_нажатию_Ctrl-Enter)
* [2 Ispell в Windows, правка](#Ispell_в_Windows_правка)
* [3 Нумерация закладок](#Нумерация_закладок)
* [4 Добавление аватары в окно чата (старый хак Badlop'а)](#Добавление_аватары_в_окно_чата_старый_хак_Badlopа)
* [5 Расширенная поддержка аватар в окне чата](#Расширенная_поддержка_аватар_в_окне_чата)
* [6 Показ времени "ухода в эвей" в статусе auto-away](#Показ_времени_ухода_в_эвей_в_статусе_auto-away)
   * [6.1 Дополнительные настройки AutoAway](#Дополнительные_настройки_AutoAway)
 * [6.1 Дополнительные настройки AutoAway](#Дополнительные_настройки_AutoAway)
* [7 Транспортные иконки для гейта MRIM и его контактов<s></s>](#Транспортные_иконки_для_гейта_MRIM_и_его_контактовs_s)
* [8 Расширенное управление приоритетами для auto-away и auto-xa](#Расширенное_управление_приоритетами_для_auto-away_и_auto-xa)
* [9 Поиск в Дискавери<s></s>](#Поиск_в_Дискавериs_s)
* [10 Подтверждение при закрытии табов<s></s>](#Подтверждение_при_закрытии_табовs_s)
* [11 Выборочное управление посылкой уведомлений о событиях чата](#Выборочное_управление_посылкой_уведомлений_о_событиях_чата)
* [12 Поддержка ссылок в окне истории](#Поддержка_ссылок_в_окне_истории)
* [13 Выбор между старым и новым видом окна userinfo](#Выбор_между_старым_и_новым_видом_окна_userinfo)
* [14 Звуки в играх<s></s>](#Звуки_в_играхs_s)
* [15 Улучшенная поддержка XHTML](#Улучшенная_поддержка_XHTML)
* [16 Публикация проигрываемой мелодии при помощи запуска Ткаббера с ключом -pep](#Публикация_проигрываемой_мелодии_при_помощи_запуска_Ткаббера_с_ключом_-pep)
* [17 Отображение доступных контактов сверху списка](#Отображение_доступных_контактов_сверху_списка)
* [18 Звук на установленные к наблюдению в Шпионе jid'ы](#Звук_на_установленные_к_наблюдению_в_Шпионе_jidы)
* [19 Отключение смены значка в трее при получени прочих сообщений в конференции](#Отключение_смены_значка_в_трее_при_получени_прочих_сообщений_в_конференции)
* [20 Группы-исключения для показа в них сообщений сервера, когда соответствующая опция выключена](#Группы-исключения_для_показа_в_них_сообщений_сервера_когда_соответствующая_опция_выключена)
* [21 Включение подсветки (highlight) всего сообщения при обращении к вам в конференции<s></s>](#Включение_подсветки_highlight_всего_сообщения_при_обращении_к_вам_в_конференцииs_s)
* [22 Кнопка очистки фильтра ростера](#Кнопка_очистки_фильтра_ростера)

## <a id="Отправка_сообщений_по_нажатию_Ctrl-Enter"></a>Отправка сообщений по нажатию Ctrl-Enter
# <a id="Отправка_сообщений_по_нажатию_Ctrl-Enter"></a>Отправка сообщений по нажатию Ctrl-Enter
>  _Внимание!_ Существует решение, не требующее патча —
  [**настройка в конфиг**](Нетривиальные_настройки.md#Отправка_сообщений_нажатием_Ctrl-Enter).
 _Внимание!_ Существует решение, не требующее патча — [настройка в конфиг](Нетривиальные_настройки.md#Отправка_сообщений_нажатием_Ctrl-Enter). Поскольку она потенциально значительно надёжнее патча, рекомендуется использовать её. 
  Поскольку она потенциально значительно надёжнее патча, рекомендуется
  использовать её.

Многие IM-программы отсылают сообщения по нажатию Ctrl-Enter, а сам Enter
Многие IM-программы отсылают сообщения по нажатию Ctrl-Enter, а сам Enter используют для перевода строки, вместо или вместе с Shift-Enter. В Ткаббере сообщения отсылаются по нажатию Enter, что и само по себе не очень удобно (если вам хочется сделать в сообщении несколько абзацев, придётся нажать несколько раз Shift-Enter и только один раз — Enter). А уж если вы пересаживаетесь на Ткаббер с другой программы, то эта разница в простых вроде бы действиях и вовсе может свести с ума. К счастью, проблема решается буквально за 5 минут. 
используют для перевода строки, вместо или вместе с Shift-Enter. В Ткаббере
сообщения отсылаются по нажатию Enter, что и само по себе не очень удобно (если
вам хочется сделать в сообщении несколько абзацев, придётся нажать несколько
раз Shift-Enter и только один раз — Enter). А уж если вы пересаживаетесь на
Ткаббер с другой программы, то эта разница в простых вроде бы действиях и вовсе
может свести с ума. К счастью, проблема решается буквально за 5 минут.

Откройте файл **chats.tcl**, что лежит в главной директории, в вашем любимом
Откройте файл **chats.tcl**, что лежит в главной директории, в вашем любимом текстовом редакторе и найдите строку: 
текстовом редакторе и найдите строку:

    bind $cw.input <Shift-Key-Return> { }

Видите, сразу за ней идёт блок:
Видите, сразу за ней идёт блок: 

       bind $cw.input <Key-Return> [double% "
           chat::send_message [list $cw] [list $chatid] [list $type]
           break"]

Теперь вам нужно немного всё поменять :) Вместо этих двух биндов сделайте так:
Теперь вам нужно немного всё поменять :) Вместо этих двух биндов сделайте так: 

       bind $cw.input <Shift-Key-Return> { }

    
       bind $cw.input <Key-Return> { }

    
       bind $cw.input <Control-Key-Return> [double% "
    	   chat::send_message [list $cw] [list $chatid] [list $type]
    	   break"]
    	chat::send_message [list $cw] [list $chatid] [list $type]
    	break"]

Фактически вы сделали просто перевод каретки (переход на следующую строку) как
Фактически вы сделали просто перевод каретки (переход на следующую строку) как по нажатию на Enter, так и по нажатию на Shift-Enter, а привычный для многих Ctrl-Enter теперь будет отсылать сообщения. 
по нажатию на Enter, так и по нажатию на Shift-Enter, а привычный для многих
Ctrl-Enter теперь будет отсылать сообщения.

_P.S. Лучшая документация — это исходники._
_P.S. Лучшая документация — это исходники._ 

была тут галерея, но глюк случился.
была тут галерея, но глюк случился. 

Автор патча — [**lknight**](Участник_Lknight.md).
Автор патча — [Участник:lknight](Участник_Lknight.md). 

## <a id="Ispell_в_Windows_правка"></a>Ispell в Windows, правка
# <a id="Ispell_в_Windows_правка"></a>Ispell в Windows, правка
Сделав всё в соответствии с
[документацией](http://sgolovan.nes.ru/jabber/Tkabber-Windows-Mini-Howto.html)
Сделав всё в соответствии с [документацией](http://sgolovan.nes.ru/jabber/Tkabber-Windows-Mini-Howto.html) от `xmpp:sgolovan@nes.ru` (teo), мы получаем в _$rootdir\\PLUGINS\\WINDOWS\\_ файл ispell.tcl, который на Windows-системах даёт странные эффекты — первое проверяемое слово вызывает ошибку, которую нужно пропустить, и только потом всё будет тип-топ. Простейший вариант правки: в строке №15 руками прописать вместо _/usr/bin/ispell_ абсолютный путь к ispell на вашей системе. Но! Этим вы не только добавите себе работы при следующем апдейте с CVS (а её и так немало у тех, кто активно балуется ковырянием), но и сделаете необходимым менять пути и в опциях, и в коде. Есть вариант другой. 
от `xmpp:sgolovan@nes.ru` (teo), мы получаем в _$rootdir\\PLUGINS\\WINDOWS\\_
файл ispell.tcl, который на Windows-системах даёт странные эффекты — первое
проверяемое слово вызывает ошибку, которую нужно пропустить, и только потом всё
будет тип-топ. Простейший вариант правки: в строке №15 руками прописать вместо
_/usr/bin/ispell_ абсолютный путь к ispell на вашей системе. Но! Этим вы не
только добавите себе работы при следующем апдейте с CVS (а её и так немало у
тех, кто активно балуется ковырянием), но и сделаете необходимым менять пути и
в опциях, и в коде. Есть вариант другой.

Строки с 14 по 16
Строки с 14 по 16 

        #set options(executable) /usr/bin/ispell
        custom::defvar options(executable) /usr/bin/ispell \
    	[::msgcat::mc "Path to the ispell executable."] -group Ispell

заменяем на следующий код:
заменяем на следующий код: 

    #<PATCHED>
      if {![info exists ::plugins::ispell::options(executable)] \
          || [cequal $::plugins::ispell::options(executable)  ""]} {
            custom::defvar options(executable) /usr/bin/ispell \
            [::msgcat::mc "Path to the ispell executable."] -group Ispell
            } else {
            custom::defvar options(executable) $::plugins::ispell::options(executable) \
            [::msgcat::mc "Path to the ispell executable."] -group Ispell
            }
    #</PATCHED>

Всё работает как надо — берёт настройки из конфига и больше не ругается ;)
Всё работает как надо — берёт настройки из конфига и больше не ругается ;) 

Автор патча — [**lknight**](Участник_Lknight.md).
Автор патча — [Участник:lknight](Участник_Lknight.md). 

## <a id="Нумерация_закладок"></a>Нумерация закладок
# <a id="Нумерация_закладок"></a>Нумерация закладок
> _Внимание!_ Сразу скажем, что [**eXire**](Участник_EXire.md) реализовал этот патч
  в виде [**плагина**](Плагины.md#Tab_number). Однако для любителей ковыряться в
 _Внимание!_ Сразу скажем, что [eXire](Участник_EXire.md) реализовал этот патч в виде [плагина](Плагины.md#Tab_number). Однако для любителей ковыряться в коде оставляем описание необходимых действий. 
  коде оставляем описание необходимых действий.

Что хотелось получить? Возможно быстро (а не по одному) переключаться между
Что хотелось получить? Возможно быстро (а не по одному) переключаться между относительно большим количеством табов без использования мышки.  
относительно большим количеством табов без использования мышки.

Как это должно выглядеть? Вот пример: ![Tkabber
Как это должно выглядеть? Вот пример: ![Tkabber num1.jpg](../images/Tkabber_num1.jpg) 
num1.jpg](../images/Tkabber_num1.jpg)

---

Текущее (ужасное своей малой переносимостью, имхо) состояние системы.
Текущее (ужасное своей малой переносимостью, имхо) состояние системы. Приводятся данные для версии ткаббера из цвс, за _"2005-10-12 Alexey Shchepin `xmpp:alexey@sevcom.net`"._ Нам потребуется внести свои правки в 2 файла: 
Приводятся данные для версии ткаббера из цвс, за _"2005-10-12 Alexey Shchepin
`xmpp:alexey@sevcom.net`"._ Нам потребуется внести свои правки в 2 файла:

*  **\\chats.tcl**.
*  **\\chats.tcl**. 

Находим 555-ю строку, с хуком:
Находим 555-ю строку, с хуком: 

    hook::run close_chat_post_hook $chatid

И вставляем после неё вызов функции
И вставляем после неё вызов функции 

    ifacetk::lk_update_chat_titles

Всё, с этим файлом мы всё сделали. Теперь пора идти дальше.
Всё, с этим файлом мы всё сделали. Теперь пора идти дальше. 

*  **\\ifacetk\\iface.tcl**
*  **\\ifacetk\\iface.tcl**  

Открываем это файл и находим в самом начале объявление _namespace'_а.
Открываем это файл и находим в самом начале объявление _namespace'_а. 

    namespace eval ifacetk {

Идём в самый его конец и дописываем туда нашу переменную:
Идём в самый его конец и дописываем туда нашу переменную: 

    variable lk_index
    variable lk_index	

*К слову сказать, префикс lk\_ имеют практически все переменные и функции,
_К слову сказать, префикс lk\_ имеют практически все переменные и функции, чтобы их было легко потом найти ;)_ 
чтобы их было легко потом найти ;)*

Далее находим ***proc ifacetk::on\_open\_chat\_window {chatid type} {*** И
Далее находим _**proc ifacetk::on\_open\_chat\_window {chatid type} {**_ И делаем так, чтобы она и следующая дальше _**ifacetk::on\_close\_chat\_window**_ выглядели так: 
делаем так, чтобы она и следующая дальше ***ifacetk::on\_close\_chat\_window***
выглядели так:

    proc ifacetk::on_open_chat_window {chatid type} {
       variable number_msg
       variable personal_msg
       variable lk_index

       variable lk_index	
    
       set number_msg($chatid) 0
       set personal_msg($chatid) 0
       set lk_index($chatid) 0
    }

    proc ifacetk::on_close_chat_window {chatid} {
       variable number_msg
       variable personal_msg
       variable lk_index

       variable lk_index	
    
       unset number_msg($chatid)
       unset personal_msg($chatid)
       unset lk_index($chatid)
    }

Далее ***proc ifacetk::update\_chat\_title {chatid} {*** Нужно привести в виду:
Далее _**proc ifacetk::update\_chat\_title {chatid} {**_ Нужно привести в виду: 

    proc ifacetk::update_chat_title {chatid} {
       global usetabbar
       variable options
       variable number_msg
       variable personal_msg
       variable lk_index

       variable lk_index	
    
       set cw $chat::opened($chatid)

    
       if {$usetabbar} {
    	set tabtitle $chat::chats(tabtitlename,$chatid)
    	if {$options(message_numbers_in_tabs) && ($number_msg($chatid) > 0)} {
    	    append tabtitle " ($number_msg($chatid))"
    	}
        set tabtitle [format [::msgcat::mc "\[%s\] %s" $lk_index($chatid) $tabtitle]]
        set tabtitle [format [::msgcat::mc "\[%s\] %s" $lk_index($chatid) $tabtitle]] 
    	.nb itemconfigure [nbpage $cw] -text $tabtitle
       } else {
    	if {$personal_msg($chatid)} {
    	    set star "*"
    	} else {
    	    set star ""
    	}
    	if {$number_msg($chatid) > 0} {
    	    set title "($number_msg($chatid)$star) $chat::chats(titlename,$chatid)"
    	} else {
    	    set title $chat::chats(titlename,$chatid)
    	}
    	wm title $cw $title
    	wm iconname $cw $title
       }
    }

И сразу после неё вставить:
И сразу после неё вставить: 

    proc ifacetk::lk_update_chat_titles {} {
        global usetabbar
        variable lk_index

        variable lk_index	
    
        if {!$usetabbar} return
    		foreach tab [.nb pages] {
               if {[set path $tab] != ""} {
    		    set page [nbpage $path]
    		    if {[.nb index $page] < 0} {
    			set page $path
    			set path [pack slaves [.nb getframe $page]]
259
260
261
262
263
264
265
266
267

268
269

270
271

272
273
274
275
276
277
278
279
280
281
282
283
284
285

286
287
288


289
290
291
292
293
294
295
296
297

298
299
300
301
302
303
304
305

306
307
308
309
310
311
312

313
314
315
316
317
318
319
320

321
322
323

324
325
326
327
328
329
330



331
332

333
334
335
336
337


338
339
340
341



342
343
344

345
346
347
348

349
350
351

352
353
354
355

356
357
358
359


360
361
362

363
364
365

366
367
368
369
370
371

372
373
374
375

376
377
378

379
380
381
382

383
384
385
386
387

388
389

390
391
392

393
394
395
396

397
398
399
400

401
402

403
404

405
406
407
408
409
410
411

412
413
414
415
416
417

418
419
420
421
422

423
424
425

426
427

428
429

430
431
432
433
434
435
436
437
438

439
440

441
442

443
444

445
446

447
448
449
450

451
452
453

454
455
456
457

458
459
460
461

462
463

464
465
466


467
468
469

470
471

472
473
474

475
476
477
478
479
480
481

482
483
484
485

486
487
488

489
490

491
492

493
494
495
496
497


498
499
500
501
502

503
504
505
506

507
508
509
510
511
512


513
514

515
516
517


518
519
520
521
522
523

524
525
526
527

528
529
530

531
532
533
534

535
536
537
538
539

540
541
542
543
544
545
546


547
548
549

550
551

552
553
554
555

556
557
558
559
560
561
562

563
564
565

566
567
568

569
570

571
572
573
574


575
576

577
578

579
580

581
582
583

584
585
586


587
588
589


590
591
592
593
594
595
596
218
219
220
221
222
223
224


225
226

227
228

229
230
231
232
233
234
235
236
237
238
239
240
241
242

243
244


245
246





247
248
249

250

251
252
253
254
255
256

257
258
259
260
261
262
263

264

265
266
267
268
269
270

271

272

273



274



275
276
277
278

279


280


281
282
283



284
285
286
287


288


289

290

291

292


293

294

295


296
297

298

299

300

301


302
303
304

305
306
307
308

309

310

311
312
313
314

315

316
317
318

319
320

321

322

323
324
325
326

327


328

329
330

331


332





333

334




335

336



337

338

339

340
341

342
343

344
345
346
347
348
349
350
351
352

353
354

355


356


357
358

359


360

361

362

363
364
365
366

367
368
369
370

371
372

373
374


375
376

377

378


379

380

381





382

383


384

385

386

387
388

389
390

391


392


393
394


395


396

397


398



399


400
401
402

403
404


405
406



407


408


409

410

411

412


413

414





415




416


417
418

419

420
421

422


423

424
425
426
427
428
429
430

431
432
433

434

435

436


437

438


439
440
441

442
443

444


445

446

447
448


449
450



451
452
453
454
455
456
457
458
459







-
-
+

-
+

-
+













-
+

-
-
+
+
-
-
-
-
-



-
+
-






-
+






-
+
-






-
+
-

-
+
-
-
-

-
-
-
+
+
+

-
+
-
-

-
-
+
+

-
-
-
+
+
+

-
-
+
-
-

-
+
-

-
+
-
-

-
+
-

-
-
+
+
-

-
+
-

-
+
-
-



-
+



-
+
-

-
+



-
+
-



-
+

-
+
-

-
+



-
+
-
-

-
+

-
+
-
-
+
-
-
-
-
-

-
+
-
-
-
-

-
+
-
-
-

-
+
-

-
+

-
+

-
+








-
+

-
+
-
-
+
-
-
+

-
+
-
-

-
+
-

-
+



-
+



-
+

-
+

-
-
+
+
-

-
+
-
-
+
-

-
+
-
-
-
-
-

-
+
-
-

-
+
-

-
+

-
+

-
+
-
-

-
-
+
+
-
-

-
-
+
-

-
-
+
-
-
-

-
-
+
+

-
+

-
-
+
+
-
-
-

-
-
+
-
-

-
+
-

-
+
-
-

-
+
-
-
-
-
-
+
-
-
-
-

-
-
+
+
-

-
+

-
+
-
-

-
+






-
+


-
+
-

-
+
-
-
+
-

-
-
+
+

-
+

-
+
-
-
+
-

-
+

-
-
+
+
-
-
-
+
+







    			    set lk_index($chatid) $lk_var
    			    update_chat_title $chatid
                   }
                 }
             }
    }

И наконец, находим строку ***proc ifacetk::tab\_set\_updated {path {updated 0} {level ""}} {***
Добавляем после 6-й строки этой функции (*variable personal\_msg*)
И наконец, находим строку _**proc ifacetk::tab\_set\_updated {path {updated 0} {level ""}} {**_ Добавляем после 6-й строки этой функции (_variable personal\_msg_) 

    variable lk_index
    variable lk_index	

Находим в этой же функции строку ***if {[info exists chat::chat\_id($path)]} {*** Приводим этот абзац к виду:
Находим в этой же функции строку _**if {[info exists chat::chat\_id($path)]} {**_ Приводим этот абзац к виду: 

       set lk_var [expr [.nb index $page] + 1]
       if {[info exists chat::chat_id($path)]} {
    	if {!$updated || ($lvlnum == 0)} {
    	    set chatid $chat::chat_id($path)
    	    set number_msg($chatid) 0
    	    set personal_msg($chatid) 0
    	    set lk_index($chatid) $lk_var
    	    update_chat_title $chatid
    	    update_main_window_title
    	}
       }

Автор патча — [**lknight**](Участник_Lknight.md).
Автор патча — [Участник:lknight](Участник_Lknight.md). 

## <a id="Добавление_аватары_в_окно_чата_старый_хак_Badlopа"></a>Добавление аватары в окно чата (старый хак Badlop'а)
Если ваш собеседник имеет подключённую аватару, вы можете видеть её не только
# <a id="Добавление_аватары_в_окно_чата_старый_хак_Badlopа"></a>Добавление аватары в окно чата (старый хак Badlop'а)
Если ваш собеседник имеет подключённую аватару, вы можете видеть её не только на соответствующей вкладке в персональной информации, но и в окошке чата в правом нижнем углу — непосредственно во время разговора. Добиться этого, как оказывается, очень просто. Откройте файл **C:\\Program Files\\Tkabber\\tkabber\\chats.tcl** (**/usr/lib/tkabber/chats.tcl**), найдите строку: 
на соответствующей вкладке в персональной информации, но и в окошке чата в
правом нижнем углу — непосредственно во время разговора. Добиться этого, как
оказывается, очень просто. Откройте файл **C:\\Program
Files\\Tkabber\\tkabber\\chats.tcl** (**/usr/lib/tkabber/chats.tcl**), найдите
строку:

    pack $cw.isw -fill both -expand yes -side bottom -in $dow

закомментируйте её и вставьте следующие четыре строки (**для версий 0.9.8 -
закомментируйте её и вставьте следующие четыре строки (**для версий 0.9.8 - 0.11.0 (включительно)**): 
0.11.0 (включительно)**):

    pack $cw.isw -expand yes -fill both -side left -in $dow
    set avatar_img [avatar::get_image $connid [get_jid_of_user $connid $jid]]
    label $cw.avatar -image $avatar_img
    pack $cw.avatar -side right -in $dow

для версий **больше 0.11.0**:
для версий **больше 0.11.0**: 

    pack $cw.isw -expand yes -fill both -side left -in $dow
    set avatar_img [avatar::get_image $xlib [get_jid_of_user $xlib $jid]]
    label $cw.avatar -image $avatar_img
    pack $cw.avatar -side right -in $dow

Если вы используете **версию 0.9.7**, надо вставить другие четыре строчки, вот
Если вы используете **версию 0.9.7**, надо вставить другие четыре строчки, вот эти: 
эти:

    pack $cw.isw -expand yes -fill both -side left -in $dow
    set avatar_img [avatar::get_image [get_jid_of_user $connid $jid]]
    label $cw.avatar -image $avatar_img
    pack $cw.avatar -side right -in $dow

Обратите внимание — вся разница между версиями во второй строке, точнее даже
Обратите внимание — вся разница между версиями во второй строке, точнее даже буквально в одном слове. 
буквально в одном слове.

Чтобы не приходилось каждый раз лезть в код, когда захочется включить аватару
Чтобы не приходилось каждый раз лезть в код, когда захочется включить аватару или выключить (через Настройки, к примеру, или по нажатию горячей клавиши), можете [скачать](http://prikhodko.googlepages.com/tkabber) специально заточенную под это дело версию Старпака от `xmpp:archimed@jabber.ru`. 
или выключить (через Настройки, к примеру, или по нажатию горячей клавиши),
можете [скачать](http://prikhodko.googlepages.com/tkabber) специально
заточенную под это дело версию Старпака от `xmpp:archimed@jabber.ru`.

*  В окно chat добавлен показ аватара собеседника (hack from badlop).
*  По умолчанию эта возможность выключена (по настоянию kostix и teo).
*  Включается через настройки в разделе Chat.
*  В окно chat добавлен показ аватара собеседника (hack from badlop). 
*  По умолчанию эта возможность выключена (по настоянию kostix и teo). 
*  Включается через настройки в разделе Chat. 

Информация о хаке [взята](http://tkabber.redlibre.org/?q=node/2) с испанского
Информация о хаке [взята](http://tkabber.redlibre.org/?q=node/2) с испанского сайта, посвящённого Ткабберу — [http://tkabber.redlibre.org](http://tkabber.redlibre.org) 
сайта, посвящённого Ткабберу —
[http://tkabber.redlibre.org](http://tkabber.redlibre.org)

## <a id="Расширенная_поддержка_аватар_в_окне_чата"></a>Расширенная поддержка аватар в окне чата
Основные расширения:
# <a id="Расширенная_поддержка_аватар_в_окне_чата"></a>Расширенная поддержка аватар в окне чата
Основные расширения: 

1.  анимированные аватары;
1.  прозрачность в аватарах;
1.  масштабирование аватар к размеру видимой области.
1.  анимированные аватары; 
1.  прозрачность в аватарах; 
1.  масштабирование аватар к размеру видимой области. 

В [*этом файле*](../files/Aniavatars.zip) находятся изменённые файлы **chat.tcl**
и **anigif.tcl**. Замените ими соответствующие файлы в Ткаббере (не забудьте
В [этом файле](../files/Aniavatars.zip) находятся изменённые файлы **chat.tcl**  и **anigif.tcl**. Замените ими соответствующие файлы в Ткаббере (не забудьте сделать резервную копию). По умолчанию опция показа аватары в окне чата выключена. Включить можно в настройках в разделе Chat. 
сделать резервную копию). По умолчанию опция показа аватары в окне чата
выключена. Включить можно в настройках в разделе Chat.

Также в архиве найдёте пример анимированного gif. Напоминаю, что Ткаббер
Также в архиве найдёте пример анимированного gif. Напоминаю, что Ткаббер поддерживает только аватары в формате gif. 
поддерживает только аватары в формате gif.

Если вы подключите анимированную аватару в качестве своей, то Ткаббер без этого
Если вы подключите анимированную аватару в качестве своей, то Ткаббер без этого патча покажет лишь первый кадр анимации. Но покажет! Так что, не бойтесь экспериментировать. 
патча покажет лишь первый кадр анимации. Но покажет! Так что, не бойтесь
экспериментировать.

С благодарностью или негодованием обращаться к [**Archimed**](Участник_Archimed.md)
С благодарностью или негодованием обращаться к [Archimed](Участник_Archimed.md) (`xmpp:archimed@jabber.ru`). 
(`xmpp:archimed@jabber.ru`).

## <a id="Показ_времени_ухода_в_эвей_в_статусе_auto-away"></a>Показ времени "ухода в эвей" в статусе auto-away
> _Внимание!_ Патч уже не прикладывается без ошибок к версии 0.11.0.
# <a id="Показ_времени_ухода_в_эвей_в_статусе_auto-away"></a>Показ времени "ухода в эвей" в статусе auto-away
 _Внимание!_ Патч уже не прикладывается без ошибок к версии 0.11.0. Править его всем лень. 
  Править его всем лень.

Патч [**тут**](../files/Autoaway.diff). Как накладывать, читайте в самом начале
Патч [тут](../files/Autoaway.diff). Как накладывать, читайте в самом начале данной страницы (перед "Содержанием"). 
данной страницы (перед "Содержанием").

**На заметку:** после установки пропишите путь до каталога, в который вы
**На заметку:** после установки пропишите путь до каталога, в который вы поставили **patch,** + **"\\bin"** в переменную окружения **PATH.** Например, если ставили в 
поставили **patch,** + **"\\bin"** в переменную окружения **PATH.** Например,
если ставили в

    C:\Program Files\GnuWin32

то путь должен быть
то путь должен быть 

    C:\Program Files\GnuWin32\bin

Тогда можно будет запускать **patch** как написано выше — не указывая полный
Тогда можно будет запускать **patch** как написано выше — не указывая полный путь до неё. 
путь до неё.

### <a id="Дополнительные_настройки_AutoAway"></a>Дополнительные настройки AutoAway
## <a id="Дополнительные_настройки_AutoAway"></a>Дополнительные настройки AutoAway

    ::plugins::autoaway::options(status)

Теперь специальный токен **%T** в этой строке раскрывается в значение времени,
Теперь специальный токен **%T** в этой строке раскрывается в значение времени, которое было на момент начала ухода в эвей. 
которое было на момент начала ухода в эвей.

    ::plugins::autoaway::options(time_format)

Задаёт формат времени для "раскрытия" токена **%T**.
Задаёт формат времени для "раскрытия" токена **%T**. 

Это — формат для команды тикля **[clock format].** За описанием —
Это — формат для команды тикля **[clock format].** За описанием — [сюда](http://purl.org/tcl/home/man/tcl8.4/TclCmd/clock.htm). 
[сюда](http://purl.org/tcl/home/man/tcl8.4/TclCmd/clock.htm).

К примеру, "%H:%M:%S" (оно же "%T") раскрывается в нечто вроде "15:30:25".
К примеру, "%H:%M:%S" (оно же "%T") раскрывается в нечто вроде "15:30:25". 

    ::plugins::autoaway::options(time_is_gmt)

Указывает, что время будет форматироваться в формате GMT (Greenwich Mean Time).
Указывает, что время будет форматироваться в формате GMT (Greenwich Mean Time). Если опция выключена (**false**), то время форматируется согласно локальной временной зоне. 
Если опция выключена (**false**), то время форматируется согласно локальной
временной зоне.

Предложения и вопросы — к [**kostix**](Участник_Kostix.md).
Предложения и вопросы — к [kostix](Участник_Kostix.md). 

## <a id="Транспортные_иконки_для_гейта_MRIM_и_его_контактовs_s"></a>Транспортные иконки для гейта MRIM и его контактов<s></s>
# <a id="Транспортные_иконки_для_гейта_MRIM_и_его_контактовs_s"></a>Транспортные иконки для гейта MRIM и его контактов<s></s>
> [**Kostix**](Участник_Kostix.md) 03:28, 11 сентября 2006 (MSD) Иконки гейта MRIM
  — в транке начиная со вчерашнего дня, так что патч практически неактуален.
 [Kostix](Участник_Kostix.md) 03:28, 11 сентября 2006 (MSD) Иконки гейта MRIM — в транке начиная со вчерашнего дня, так что патч практически неактуален. Кроме того, работа с транспортными иконками была сильно доработана — они теперь выясняются не на основе имени хоста гейта, а на основе ответа на запрос `disco#info` от него. Также исправлен баг с исчезающими транспортными иконками в окне чата при смене статуса контакта. Короче, всем желающим MRIM-иконок лучше заиметь себе последнюю версию из Subversion. 
  Кроме того, работа с транспортными иконками была сильно доработана — они
  теперь выясняются не на основе имени хоста гейта, а на основе ответа на
  запрос `disco#info` от него. Также исправлен баг с исчезающими транспортными
  иконками в окне чата при смене статуса контакта. Короче, всем желающим
  MRIM-иконок лучше заиметь себе последнюю версию из Subversion.

Патч добавляет в _основной (он же "дефолтный", он же "по умолчанию")_ пакет
Патч добавляет в _основной (он же "дефолтный", он же "по умолчанию")_ пакет иконок "транспортные" иконки для гейта MRIM (Mail.RU Instant Messenger) и контактов на нём. То есть вместо стандартных иконок "enlightened feather" (лампочка с пером) будет майлрушное "калисо" (по меткому выражению **zenith**, — автора MRIM-гейта). 
иконок "транспортные" иконки для гейта MRIM (Mail.RU Instant Messenger) и
контактов на нём. То есть вместо стандартных иконок "enlightened feather"
(лампочка с пером) будет майлрушное "калисо" (по меткому выражению **zenith**,
— автора MRIM-гейта).

Поддерживаются и отображаются состояния "доступен", "отошёл" и "недоступен";
Поддерживаются и отображаются состояния "доступен", "отошёл" и "недоступен"; состояния "не беспокоить" и "отошёл давно" не поддерживаются Mail.RU IM'ом и отображаются гейтом на "отошёл", зато его состояние "invisible" не поддерживается Джаббером и отображается гейтом на "недоступен". 
состояния "не беспокоить" и "отошёл давно" не поддерживаются Mail.RU IM'ом и
отображаются гейтом на "отошёл", зато его состояние "invisible" не
поддерживается Джаббером и отображается гейтом на "недоступен".

Выглядит так: ![Mrim.png](../images/Mrim.png)
Выглядит так: ![Mrim.png](../images/Mrim.png) ![Mrim-away.png](../images/Mrim-away.png) 
![Mrim-away.png](../images/Mrim-away.png)

Патч — [*тут*](../files/Tkabber-MRIM.zip).
Патч — [тут](../files/Tkabber-MRIM.zip). 

Прикладывать так.
Прикладывать так. 

Во-первых, распаковать; в месте распаковки появится такая структура:
Во-первых, распаковать; в месте распаковки появится такая структура: 

    roster.diff
    pixmaps/
     default/
      icondef.diff
      services/
       mrim_*.gif

Она соответствует расположению файлов в каталоге Ткаббера, поэтому дальнейшие действия такие:
Она соответствует расположению файлов в каталоге Ткаббера, поэтому дальнейшие действия такие: 

1. Скопировать все файлы **mrim\_\*.gif** из **pixmaps/default/services** в
1.  Скопировать все файлы **mrim\_\*.gif** из **pixmaps/default/services** в такой же каталог Ткаббера. 
   такой же каталог Ткаббера.
1. Приложть патч **icondef.diff** на **pixmaps/default/icondef.xml** в каталоге
1.  Приложть патч **icondef.diff** на **pixmaps/default/icondef.xml** в каталоге Ткаббера. 
   Ткаббера.
1. Приложить патч **roster.diff** на **roster.tcl** в каталоге Ткаббера.
1.  Приложить патч **roster.diff** на **roster.tcl** в каталоге Ткаббера. 

Можно также сначала просто скопировать все файлы из того места, куда вы их
Можно также сначала просто скопировать все файлы из того места, куда вы их распаковали, в каталог Ткаббера. Тогда иконки лягут в нужный каталог, а diff-файлы лягут рядом с теми файлами, патчами на которые они являются. 
распаковали, в каталог Ткаббера. Тогда иконки лягут в нужный каталог, а
diff-файлы лягут рядом с теми файлами, патчами на которые они являются.

Процесс наложения патча описан в самом верху этой страницы (перед
Процесс наложения патча описан в самом верху этой страницы (перед "Содержанием"). 
"Содержанием").

Перезапустить Ткаббер, убедиться, что включены опции
Перезапустить Ткаббер, убедиться, что включены опции 

    ::ifacetk::roster::show_transport_icons

(для самого гейта) и
(для самого гейта) и 

    ::ifacetk::roster::show_transport_user_icons

(для контактов на нём) по желанию.
(для контактов на нём) по желанию. 

Предложения и вопросы — к [**kostix**](Участник_Kostix.md).
Предложения и вопросы — к [Участник:kostix](Участник_Kostix.md). 

## <a id="Расширенное_управление_приоритетами_для_auto-away_и_auto-xa"></a>Расширенное управление приоритетами для auto-away и auto-xa
Данный [**патч**](../files/Autoaway-ext-prios.diff) наделяет плагин AutoAway
# <a id="Расширенное_управление_приоритетами_для_auto-away_и_auto-xa"></a>Расширенное управление приоритетами для auto-away и auto-xa
Данный [патч](../files/Autoaway-ext-prios.diff) наделяет плагин AutoAway следующими возможностями: 
следующими возможностями:

*  Раздельное управление изменением приоритета ресурса для состояний auto-away
*  Раздельное управление изменением приоритета ресурса для состояний auto-away и auto-xa; 
   и auto-xa;
*  Возможность вручную задать значение приоритета для каждого из этих
*  Возможность вручную задать значение приоритета для каждого из этих состояний. 
   состояний.

Патч предназначен для тестирования идеи об автоматическом изменении приоритетов
Патч предназначен для тестирования идеи об автоматическом изменении приоритетов различных копий Ткаббера (к примеру, одна запущена на работе, другая — дома). Суть идеи: сконфигурировать такую систему приоритетов, которая позволит максимально "осмысленно" направлять сообщения на различные копии Ткабберов по мере того, как хозяин последних перемещается между ними. Понятно? Мне тоже непонятно... 
различных копий Ткаббера (к примеру, одна запущена на работе, другая — дома).
Суть идеи: сконфигурировать такую систему приоритетов, которая позволит
максимально "осмысленно" направлять сообщения на различные копии Ткабберов по
мере того, как хозяин последних перемещается между ними. Понятно? Мне тоже
непонятно...

Подробно о зависимости поведении сервера от приоритетов нескольких подключений
Подробно о зависимости поведении сервера от приоритетов нескольких подключений к одному аккаунту читайте [здесь](http://www.xmpp.org/specs/rfc3921.html#rules) (поищите по слову "priority"). 
к одному аккаунту читайте [здесь](http://www.xmpp.org/specs/rfc3921.html#rules)
(поищите по слову "priority").

Патчить нужно файл **plugins/general/autoaway.tcl**. Процесс наложения патча
Патчить нужно файл **plugins/general/autoaway.tcl**. Процесс наложения патча описан в самом верху этой страницы (перед "Содержанием"). 
описан в самом верху этой страницы (перед "Содержанием").

Предложения и вопросы — к [**kostix**](Участник_Kostix.md).
Предложения и вопросы — к [Участник:kostix](Участник_Kostix.md). 

**NB:** патч создан против версии 0.9.9-1.2 (CVS).
**NB:** патч создан против версии 0.9.9-1.2 (CVS). 

**Примечание:** эти изменения приоритетов работают только при _автоматическом_
**Примечание:** эти изменения приоритетов работают только при _автоматическом_ изменении статуса (т.е. когда статус пользователя меняется плагином AutoAway); при смене статуса вручную никакого изменения приоритета не происходит. 
изменении статуса (т.е. когда статус пользователя меняется плагином AutoAway);
при смене статуса вручную никакого изменения приоритета не происходит.

## <a id="Поиск_в_Дискавериs_s"></a>Поиск в Дискавери<s></s>
<s>Версия первая, наколенная. Патч не предназначен для использования, хотя и
# <a id="Поиск_в_Дискавериs_s"></a>Поиск в Дискавери<s></s>
<s>Версия первая, наколенная. Патч не предназначен для использования, хотя и работает. Это так, пусть пока полежит :) Смотреть [тут](../files/Disco-search.diff).</s> 
работает. Это так, пусть пока полежит :) Смотреть
[**тут**](../files/Disco-search.diff).</s>

[**Kostix**](Участник_Kostix.md) 03:21, 11 сентября 2006 (MSD) — поиск в
дискавери уже месяц как в транке. так что  этот патч уже совершенно неактуален
[Kostix](Участник_Kostix.md) 03:21, 11 сентября 2006 (MSD) — поиск в дискавери уже месяц как в транке. так что  этот патч уже совершенно неактуален и будет удалён. 
и будет удалён.

[**Kostix**](Участник_Kostix.md) 21:09, 18 сентября 2006 (MSD) — с другой
стороны, этот патч содержит код для прозрачной привязки виртуальных событий к
[Kostix](Участник_Kostix.md) 21:09, 18 сентября 2006 (MSD) — с другой стороны, этот патч содержит код для прозрачной привязки виртуальных событий к топлевелам (в no-tabbed mode) или к единственному топлевелу + передача события в активный фрейм ноутбука (в tabbed mode), который надо бы отодрать и присовокупить к транку. 
топлевелам (в no-tabbed mode) или к единственному топлевелу + передача события
в активный фрейм ноутбука (в tabbed mode), который надо бы отодрать и
присовокупить к транку.

## <a id="Подтверждение_при_закрытии_табовs_s"></a>Подтверждение при закрытии табов<s></s>
<s>Патч: [**Confirm.patch**](../files/Confirm.patch)</s>
# <a id="Подтверждение_при_закрытии_табовs_s"></a>Подтверждение при закрытии табов<s></s>
<s>Патч: [Media:confirm.patch](../files/Confirm.patch)</s> 

**Неактуально. Есть [плагин](Плагины.md#Confirm).**
**Неактуально. Есть [плагин](Плагины.md#Confirm).** 

## <a id="Выборочное_управление_посылкой_уведомлений_о_событиях_чата"></a>Выборочное управление посылкой уведомлений о событиях чата
> _Внимание!_ Этот патч был сделан для борьбы с кривизной ICQ-гейта "JIT",
# <a id="Выборочное_управление_посылкой_уведомлений_о_событиях_чата"></a>Выборочное управление посылкой уведомлений о событиях чата
 _Внимание!_ Этот патч был сделан для борьбы с кривизной ICQ-гейта "JIT", который посылал ошибку в ответ на события чата; и эта ошибка показывалась в окне чата, как относящаяся к нему. Начиная с версии 0.10.0 Ткаббер содержит код, который устаняет подобную проблему другим способом. 
  который посылал ошибку в ответ на события чата; и эта ошибка показывалась в
  окне чата, как относящаяся к нему. Начиная с версии 0.10.0 Ткаббер содержит
  код, который устаняет подобную проблему другим способом.

[*Этот патч (+ плагин)*](../files/Chatstatectl.zip) позволяет
выключать/включать посылку уведомлений о событиях чата (chat state
[Этот патч (+ плагин)](../files/Chatstatectl.zip) позволяет выключать/включать посылку уведомлений о событиях чата (chat state notifications) для любого окна чата (т.е. для любого контакта, с которым открыт сеанс чата). 
notifications) для любого окна чата (т.е. для любого контакта, с которым открыт
сеанс чата).

Управление настройкой — флаг "Enable chat state notifications" в меню окна
Управление настройкой — флаг "Enable chat state notifications" в меню окна чата. 
чата.

Новая настройка "перекрывает" глобальную опцию
Новая настройка "перекрывает" глобальную опцию `::plugins::chatstate::options(enable)`. Значение локальной настройки инициализируется значением глобальной опции при открытии окна чата. 
`::plugins::chatstate::options(enable)`. Значение локальной настройки
инициализируется значением глобальной опции при открытии окна чата.

Цель данной функциональности — обход багов, возникающих при работе с некоторыми
Цель данной функциональности — обход багов, возникающих при работе с некоторыми "ненативными" IM-сетями через соответствующие гейты. В основном, проблемы возникают с различными ICQ-клиентами (печально знаменитое сообщение `"400 (Empty SMS messages are forbidden)"` в качестве реакции на любую активность в окне чата и его закрытие). 
"ненативными" IM-сетями через соответствующие гейты. В основном, проблемы
возникают с различными ICQ-клиентами (печально знаменитое сообщение `"400
(Empty SMS messages are forbidden)"` в качестве реакции на любую активность в
окне чата и его закрытие).

**~/.tkabber/plugins****chatstate.tcl.diff**`
Архив содержит каталог с плагином, который требуется положить в
**~/.tkabber/plugins**, и патч **chatstate.tcl.diff**, который следует положить
в tkabber/plugins/chat и запустить

    patch <chatstate.tcl.diff

После перезапуска Ткаббера в меню окна чата становится доступен флаг "Enable
`
После перезапуска Ткаббера в меню окна чата становится доступен флаг "Enable chat state notifications". 
chat state notifications".

Вопросы и пожелания слать [**Kostix**](Участник_Kostix.md).
Вопросы и пожелания слать [Kostix](Участник_Kostix.md). 

**Примечание:** возможно сделать авто-запрещение посылки нотификаций для
**Примечание:** возможно сделать авто-запрещение посылки нотификаций для выбранных JID'ов, например, вот так можно запретить нотификации для всех контактов на ICQ-гейте: 
выбранных JID'ов, например, вот так можно запретить нотификации для всех
контактов на ICQ-гейте:

Впишите в свой **config.tcl** вне хуков вот этот кусок кода:
Впишите в свой **config.tcl** вне хуков вот этот кусок кода: 

    proc icq_must_die {w connid jid} {
      if {[regexp {@icq\.} $jid]} {
        set ::plugins::chatstate::options(enable,$jid) 0
      }
    }

    
    hook::add chat_create_user_menu_hook icq_must_die

Он отключает нотификации для любого джида, содержащего подстроку "@icq.", то
Он отключает нотификации для любого джида, содержащего подстроку "@icq.", то есть, к примеру `666777@icq.jabber.ru` и так далее. 
есть, к примеру `666777@icq.jabber.ru` и так далее.

## <a id="Поддержка_ссылок_в_окне_истории"></a>Поддержка ссылок в окне истории
# <a id="Поддержка_ссылок_в_окне_истории"></a>Поддержка ссылок в окне истории
Данный [**патч**](../files/Logger.patch) добавляет поддержку ссылок (которая
присутствует в окне чата) в окно истории. С вопросами и пожеланиями к
Данный [патч](../files/Logger.patch) добавляет поддержку ссылок (которая присутствует в окне чата) в окно истории. С вопросами и пожеланиями к [eXire](Участник_EXire.md). 
[**eXire**](Участник_EXire.md).

## <a id="Выбор_между_старым_и_новым_видом_окна_userinfo"></a>Выбор между старым и новым видом окна userinfo
Справедливо для svn-версии.
# <a id="Выбор_между_старым_и_новым_видом_окна_userinfo"></a>Выбор между старым и новым видом окна userinfo
Справедливо для svn-версии. 

[**Патч**](../files/Userinfo.patch). Настройки в **Customize → Main Interface**.
[Патч](../files/Userinfo.patch). Настройки в **Customize → Main Interface**. 

## <a id="Звуки_в_играхs_s"></a>Звуки в играх<s></s>
# <a id="Звуки_в_играхs_s"></a>Звуки в играх<s></s>
<s>[*Патчи*](../files/Sound_patches.tar.gz) к играм. Так же нужно накатить
патч, который тоже находится в этом архиве, на файл
<s>[Патчи](../files/Sound_patches.tar.gz) к играм. Так же нужно накатить патч, который тоже находится в этом архиве, на файл plugins/general/sound.tcl.</s> 
plugins/general/sound.tcl.</s>

В транке с 27.09.06.
В транке с 27.09.06. 

## <a id="Улучшенная_поддержка_XHTML"></a>Улучшенная поддержка XHTML
Данный патч предназначен для улучшения отображения XHTML сообщений.
# <a id="Улучшенная_поддержка_XHTML"></a>Улучшенная поддержка XHTML
Данный патч предназначен для улучшения отображения XHTML сообщений. Протестирован с Gaim (Pidgin) и Adium и (частично) XEP-0071. Накладывать заплатку нужно на файл tkabber/plugins/chat/draw\_xhtml\_message.tcl 
Протестирован с Gaim (Pidgin) и Adium и (частично) XEP-0071. Накладывать
заплатку нужно на файл tkabber/plugins/chat/draw\_xhtml\_message.tcl

`
    
    --- draw_xhtml_message.orig.tcl	2007-05-25 13:05:18.000000000 +0400
    +++ draw_xhtml_message.tcl	2007-06-05 12:31:32.000000000 +0400
    @@ -336,6 +336,32 @@
     	    color {
     		set state(color) $val
     	    }
    +	    font-style {
618
619
620
621
622
623
624
625
626
627




628
629
630

631
632
633
634

635
636
637
638
639

640
641
642
643
644
645

646
647

648
649
650
651

652
653

654
655
656


657
658

659
660

661
662
663


664
665
666
667
668

669
670
671

672
673
674

675
676

677
678

679
680
681

682
683

684
685
686


687
688
689
690
691
692
693
694

695
696

697
698
699


700
701
702

703
704
705
706
707
708
709

710
711
712
713

714
715
716
717

718
719

720
721
722


723
724
725
726



481
482
483
484
485
486
487



488
489
490
491

492

493


494

495
496
497
498
499

500




501

502
503

504
505
506
507

508
509

510
511


512
513
514

515
516

517
518


519
520


521


522
523


524

525

526
527

528


529

530

531
532

533
534


535
536






537

538
539

540
541


542
543

544

545



546
547
548

549
550
551
552

553
554
555
556

557
558

559
560


561
562


563

564
565
566







-
-
-
+
+
+
+
-

-
+
-
-

-
+




-
+
-
-
-
-

-
+

-
+



-
+

-
+

-
-
+
+

-
+

-
+

-
-
+
+
-
-

-
-
+

-
-
+
-

-
+

-
+
-
-
+
-

-
+

-
+

-
-
+
+
-
-
-
-
-
-

-
+

-
+

-
-
+
+
-

-
+
-
-
-



-
+



-
+



-
+

-
+

-
-
+
+
-
-

-
+
+
+
    +	    margin-left {
    +			incr state(lmargin1) 32
    +			incr state(lmargin2) 32
    +	    }
     	}
         }
     }

## <a id="Публикация_проигрываемой_мелодии_при_помощи_запуска_Ткаббера_с_ключом_-pep"></a>Публикация проигрываемой мелодии при помощи запуска Ткаббера с ключом -pep
Реализация того, что описано в
    
`
# <a id="Публикация_проигрываемой_мелодии_при_помощи_запуска_Ткаббера_с_ключом_-pep"></a>Публикация проигрываемой мелодии при помощи запуска Ткаббера с ключом -pep
Реализация того, что описано в [ТЗ по управлению через параметры командной строки](ТЗ_по_управлению_через_параметры_командной_строки.md#Зачем_это_нужно). 
[**ТЗ по управлению через параметры командной строки**](ТЗ_по_управлению_через_параметры_командной_строки.md#Зачем_это_нужно).

Патч позволяет публиковать информацию о мелодии (pep:tune) при помощи вызова из
Патч позволяет публиковать информацию о мелодии (pep:tune) при помощи вызова из командной строки (shell-скрипта, батника; также есть встроенная возможность медиаплееров запускать скрипт при смене трека). 
командной строки (shell-скрипта, батника; также есть встроенная возможность
медиаплееров запускать скрипт при смене трека).

**Cинтаксис:**
**Cинтаксис:** 

    tkabber -pep "tune:artist=Исполнитель,title=Название,track=номер_песни,
    length=продолжительность,source=источник,uri=ссылка,rating=оценка"

_В примере сделан перенос строки, потому что она получилась слишком длинной._
_В примере сделан перенос строки, потому что она получилась слишком длинной._ При запуске весь текст должен идти подряд, без пробелов после запятых. Кавычки нужны на случай, если в названии песни или исполнителя будет пробел. Любое из полей (artist, title, ...) может быть опущено. Порядок указания полей роли не играет. 
При запуске весь текст должен идти подряд, без пробелов после запятых. Кавычки
нужны на случай, если в названии песни или исполнителя будет пробел. Любое из
полей (artist, title, ...) может быть опущено. Порядок указания полей роли не
играет.

[А вот и сам патч](http://nicktian.narod.ru/pepswitch.diff).
[А вот и сам патч](http://nicktian.narod.ru/pepswitch.diff). 

Патч накладывается командой
Патч накладывается командой  

    $patch -p0 <pepswitch.diff

из корневой папки исходных текстов Ткаббера.
из корневой папки исходных текстов Ткаббера. 

--[*Nicktian*](Участник_Nicktian.md) 17:10, 3 марта 2009 (MSK)
--[Nicktian](Участник_Nicktian.md) 17:10, 3 марта 2009 (MSK) 

## <a id="Отображение_доступных_контактов_сверху_списка"></a>Отображение доступных контактов сверху списка
Реализация возможности, описанной [**тут**](Планы_на_будущее.md#sКонтакты_онлайн_-_отображать_вверху_списка_s).
# <a id="Отображение_доступных_контактов_сверху_списка"></a>Отображение доступных контактов сверху списка
Реализация возможности, описанной [тут](Планы_на_будущее.md#Контакты_онлайн_-_отображать_вверху_списка). 

Сам патч: [*iroster.zip*](../files/Iroster.zip)
Сам патч: [iroster.zip](../files/Iroster.zip) 

[*Jet*](Участник_Jet.md)
[Jet](Участник_Jet.md) 

## <a id="Звук_на_установленные_к_наблюдению_в_Шпионе_jidы"></a>Звук на установленные к наблюдению в Шпионе jid'ы
В архиве сам патч и звуковой файл, который проигрывается при появлении
# <a id="Звук_на_установленные_к_наблюдению_в_Шпионе_jidы"></a>Звук на установленные к наблюдению в Шпионе jid'ы
В архиве сам патч и звуковой файл, который проигрывается при появлении указанного в шпионе jid. В настройках плагина будет соответствующее поле для замены/удаления звукового оповещения. 
указанного в шпионе jid. В настройках плагина будет соответствующее поле для
замены/удаления звукового оповещения.

* Патч 1: [*Spy.zip*](../files/Spy.zip) Звук работает глобально, т.е.
  срабатывает на все установленные к наблюдению jid'ы.
* Патч 1: [Spy.zip](../files/Spy.zip) Звук работает глобально, т.е. срабатывает на все установленные к наблюдению jid'ы. 

* Патч 2: [*Spy2.zip*](../files/Spy-rev.1925.zip) Звук можно включать в окне
  самого Spy опционально на каждый отдельный jid, установленный к наблюдению (в
* Патч 2: [Spy2.zip](../files/Spy(rev.1925).zip) Звук можно включать в окне самого Spy опционально на каждый отдельный jid, установленный к наблюдению (в окне Spy будет чекбокс. Спасибо archimed'у за помощь в доводке до ума). 
  окне Spy будет чекбокс. Спасибо archimed'у за помощь в доводке до ума).

[**Brennender**](Участник_Brennende.md)
[Brennender](Участник_Brennende.md) 

## <a id="Отключение_смены_значка_в_трее_при_получени_прочих_сообщений_в_конференции"></a>Отключение смены значка в трее при получени прочих сообщений в конференции
# <a id="Отключение_смены_значка_в_трее_при_получени_прочих_сообщений_в_конференции"></a>Отключение смены значка в трее при получени прочих сообщений в конференции
Патч добавляет чекбокс в Main Interface → Systray, снятие флажка с которого
отключит уведомления в трее об обычных, не подсвеченных сообщениях в
Патч добавляет чекбокс в Main Interface → Systray, снятие флажка с которого отключит уведомления в трее об обычных, не подсвеченных сообщениях в конференции. 
конференции.

Файл: [*Systray.zip*](../files/Systray.zip)
Файл: [Systray.zip](../files/Systray.zip) 

[**Brennender**](Участник_Brennende.md)
[Brennender](Участник_Brennende.md) 

## <a id="Группы-исключения_для_показа_в_них_сообщений_сервера_когда_соответствующая_опция_выключена"></a>Группы-исключения для показа в них сообщений сервера, когда соответствующая опция выключена
Когда вам надоедает лицезреть в комнатах, кто зашёл, кто вышел, кто сменил ник
# <a id="Группы-исключения_для_показа_в_них_сообщений_сервера_когда_соответствующая_опция_выключена"></a>Группы-исключения для показа в них сообщений сервера, когда соответствующая опция выключена
Когда вам надоедает лицезреть в комнатах, кто зашёл, кто вышел, кто сменил ник и прочее, вы выключаете опцию `options(gen_enter_exit_msgs)` в Настройках → Chat. Но бывает так, что вам хотелось бы мониторить пару конференций, если там требуется усиленное модерирование. Этот патч как раз после вышеупомянутой опции добавляет поле, куда можно вписать необходимые конференции, разделяя их пробелом. Теперь, отключив генерацию сообщений сервера, вы будете продолжать видеть всю необходимую для модератора информацию в нужных вам комнатах. 
и прочее, вы выключаете опцию `options(gen_enter_exit_msgs)` в Настройках →
Chat. Но бывает так, что вам хотелось бы мониторить пару конференций, если там
требуется усиленное модерирование. Этот патч как раз после вышеупомянутой опции
добавляет поле, куда можно вписать необходимые конференции, разделяя их
пробелом. Теперь, отключив генерацию сообщений сервера, вы будете продолжать
видеть всю необходимую для модератора информацию в нужных вам комнатах.

Файл [*Muc\_exception\_groups4gen\_enter\_exit\_msgs.zip*](../files/Muc_exception_groups4gen_enter_exit_msgs.zip)
Файл [Muc\_exception\_groups4gen\_enter\_exit\_msgs.zip](../files/Muc_exception_groups4gen_enter_exit_msgs.zip) 

[**ycbl**](Участник_Bigote.md)
[ycbl](Участник_Bigote.md) 

## <a id="Включение_подсветки_highlight_всего_сообщения_при_обращении_к_вам_в_конференцииs_s"></a>Включение подсветки (highlight) всего сообщения при обращении к вам в конференции<s></s>
**ВНИМАНИЕ: Патч содержит недоработки. К тому же уже есть реализация в виде
# <a id="Включение_подсветки_highlight_всего_сообщения_при_обращении_к_вам_в_конференцииs_s"></a>Включение подсветки (highlight) всего сообщения при обращении к вам в конференции<s></s>
**ВНИМАНИЕ: Патч содержит недоработки. К тому же уже есть реализация в виде [плагина](Плагины.md#Highlightex).** 
[плагина](Плагины.md#Highlightex).**

В настройках: **Plugins → Rich Text** будет соответствующая опция для
В настройках: **Plugins → Rich Text** будет соответствующая опция для включения. Патч накатывать по адресу _~tkabber/plugins/richtext_. За цвет хайлайта отвечает опция, которую можно добавить в ваш .\*xrdb-файл в виде hex-хначения 
включения. Патч накатывать по адресу _~tkabber/plugins/richtext_. За цвет
хайлайта отвечает опция, которую можно добавить в ваш .\*xrdb-файл в виде
hex-хначения

    *Chat.highlightforeground:   #ff0000

либо:
либо: 

    *Chat.highlightforeground:   red

Или же добавлением в config.tcl такой строчки:
Или же добавлением в config.tcl такой строчки: 

    option add *Chat.highlightforeground:   #ff0000

* Файл [*Highlight.zip*](../files/Highlight.zip)
* Файл [Highlight.zip](../files/Highlight.zip) 

Автор [*ancestor*](Участник_Ancestor.md)
Автор [ancestor](Участник_Ancestor.md) 

## <a id="Кнопка_очистки_фильтра_ростера"></a>Кнопка очистки фильтра ростера
[Патч](http://justdanpo.cheb.ru/temp/tkabber_clearfilter_button.diff) добавляет
# <a id="Кнопка_очистки_фильтра_ростера"></a>Кнопка очистки фильтра ростера
[Патч](http://justdanpo.cheb.ru/temp/tkabber_clearfilter_button.diff) добавляет кнопку, при нажатии на которую фильтр ростера очищается, примерно как в фильтре Skype. 
кнопку, при нажатии на которую фильтр ростера очищается, примерно как в фильтре
Skype.

[*den\_po*](Участник_Den_po.md)
[den\_po](Участник_Den_po.md) 


Changes to wiki/ru/Пересылка_файлов__теория.md.

1

2
3
4
5
6
7
8
9
10

11
12
13

14
15
16
17



18
19
20
21
22
23
24
25
26
27
28
29
30
31










32
33
34
35
36
37
38






39
40
41
42
43


44
45
46
47
48
49

50
51
52
53
54

55
56
57

58
59
60
61
62




63
64

65
66
67
68
69




70
71

72
73
74
75
76
77
78

79
80
81
82


83
84
85
86
87
88

89
90
91
92
93
94

95
96
97
98

99
100

101
102

103
104
105

106
107
108


109
110
111

112
113
114
115


116
117
118
119

120
121
122

123
124
125

126
127
128

129
130
131
132

133
134
135
136
137

138
139

140
141

142
143
144
145
146

147
148

149
150
151

152
153
154
155

156
157
158


159
160
161
162
163


164
165

166
167
168


169
170
171


172
173

174
175
176


177
178
179

180
181
182
183
184
185
186
187
188
189
190
191
192
193
194









195

196
197
198
199
200

201
202

203
204
205
206



207
208
209
210
211


212
213
214
215
216
217
218
219
220
221
222
223
224
225







226

227
228
229

230
231
232
233


234
235
236

237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256





257


258

259
260
261
262
263
264

265
266
267
268

269
270
271
272
273
274


275
276

277
278

279
280
281
282
283
284
285
286
287
288





289
290

291
292
293
294

295
296

297
298
299

300
301
302
303

304
305

306
307
308
309

310
311
312
313
314
315
316
317
318

319
320
321
322


323
324
325
326

327
328

329
330
331

332
333
334
335

336
337
338
339
340

341
342
343
344
345

346
347

348
349
350
351

352
353
354
355

356
357
358
359

360
361
362
363

364
365

366
367

368
369

370
371

372
373
374

375
376

377
378
379

380
381

382
383
384
385

386
387
388
389

390
391
392
393
394

395
396
397

398
399
400
401
402
403
404

405
406
407

408
409
410
411
412
413

414
415
416
417

418
419
420
421
422
423

424
425

426
427
428
429

430
431
432
433

434
435
436

437
438

439
440
441

442
443
444

445
446
447
448
449
450
451

452
453
454

455
456

457
458

459
460

461
462
463

464
465

466
467
468

469
470
471
472

473
474

475
476
477
478

479
480

481
482
483
484
485
486
487
488

489
490
491
492
493
494

495
496
497
498

499
500
501

502
503

504
505
506
507

508
509
510

511
512

513
514
515
516
517

518
519

520
521

522
523
524

525
526
527
528


529
530

531
532
533
534
535
536
537
538

539
540
541
542


543
544

545
546
547
548
549
550
551






552
553

554
555

556
557
558
559
560
561

562
563
564
565
566



567
568
569

570
571

572
573
574
575
576

577
578

579
580
581
582
583

584
585
586


587
588

589
590
591

592
593
594
595

596
597
598
599
600
601

602
603

604
605
606

607
608
609
610
611
612
613

614
615
616
617
618
619
620
621
622

623
624
625
626
627
628
629
630
631

632
633
634
635
636
637
638
639
640
641
642
643
644

645
646
647
648

649
650
651
652

653
654
655
656
657
658
659
660
661
662
663
664

665
666
667
668
669
670
671
672
673
674

675
676
677
678

679
680
681

682
683
684

685
686
687
688
689
690
691

692
693
694

695
696
697

698
699
700
701
702
703
704

705
706
707
708
709

710
711
712
713
714
715
716









717

718


719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735

736
737
738
739
740
741

742
743
744

745
746
747
748

749
750
751
752
753
754
755
756

757
758
759
760

761
762
763


764
765
766


767
768
769


770
771
772
773


774
775
776
777
778
779
780
781
782
783









784
785

786
787
788
789

790
791
792
793




1
2
3
4
5
6
7
8
9
10

11
12
13

14
15



16
17
18
19
20
21
22










23
24
25
26
27
28
29
30
31
32
33






34
35
36
37
38
39
40
41
42


43
44




45

46



47

48

49

50
51




52
53
54
55
56

57
58




59
60
61
62
63

64





65

66

67


68
69




70

71




72

73


74

75
76

77
78

79

80

81



82
83

84

85

86


87
88


89

90

91

92



93

94

95

96


97



98

99
100

101
102

103



104

105
106

107



108


109

110
111


112
113





114
115
116

117
118


119
120
121


122
123


124



125
126

127

128














129
130
131
132
133
134
135
136
137
138

139



140

141
142

143
144



145
146
147


148


149
150













151
152
153
154
155
156
157
158

159

160

161

162


163
164

165

166




















167
168
169
170
171
172
173
174

175




176

177


178

179



180


181
182
183

184


185










186
187
188
189
190


191


192

193
194

195



196


197

198
199

200


201

202







203

204

205


206
207


208

209
210

211

212

213


214

215



216

217



218

219
220

221
222
223
224

225
226
227
228

229
230
231
232

233
234
235
236

237
238

239
240

241


242


243

244

245
246

247

248

249
250

251
252
253
254

255
256
257
258

259

260
261
262

263

264

265



266
267
268

269

270

271


272
273
274

275
276
277
278

279




280

281
282

283


284

285


286

287

288

289


290

291

292

293

294





295

296

297

298
299

300
301

302
303

304



305
306

307

308

309


310

311
312

313
314
315
316

317
318

319




320
321
322

323


324
325
326

327


328

329

330

331
332

333


334

335

336

337
338

339



340

341
342

343


344



345




346
347


348


349





350

351


352
353
354

355
356






357
358
359
360
361
362
363

364
365

366




367

368

369



370
371
372

373

374
375

376



377

378
379

380



381

382
383


384
385
386

387

388

389


390

391




392

393
394

395

396

397





398

399







400

401







402

403











404

405


406

407


408

409










410

411








412

413


414

415
416


417

418

419





420

421

422

423



424





425

426



427

428

429





430
431
432
433
434
435
436
437
438
439
440

441
442
443
















444




445

446
447


448




449





450


451


452

453
454


455
456
457


458
459
460


461
462

463


464
465










466
467
468
469
470
471
472
473
474


475




476




477
478
479
480

+








-
+


-
+

-
-
-
+
+
+




-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
+
+
+
+
+
+



-
-
+
+
-
-
-
-

-
+
-
-
-

-
+
-

-
+

-
-
-
-
+
+
+
+

-
+

-
-
-
-
+
+
+
+

-
+
-
-
-
-
-

-
+
-

-
-
+
+
-
-
-
-

-
+
-
-
-
-

-
+
-
-

-
+

-
+

-
+
-

-
+
-
-
-
+
+
-

-
+
-

-
-
+
+
-
-

-
+
-

-
+
-
-
-
+
-

-
+
-

-
-
+
-
-
-

-
+

-
+

-
+
-
-
-

-
+

-
+
-
-
-
+
-
-

-
+

-
-
+
+
-
-
-
-
-
+
+

-
+

-
-
+
+

-
-
+
+
-
-
+
-
-
-
+
+
-

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+
+
+
+
+
+
+
+
+
-
+
-
-
-

-
+

-
+

-
-
-
+
+
+
-
-

-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-

+
+
+
+
+
+
+
-
+
-

-
+
-

-
-
+
+
-

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+

+
+
-
+
-
-
-
-

-
+
-
-

-
+
-
-
-

-
-
+
+

-
+
-
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
+
-
-

-
+

-
+
-
-
-
+
-
-

-
+

-
+
-
-

-
+
-
-
-
-
-
-
-

-
+
-

-
-
+
+
-
-

-
+

-
+
-

-
+
-
-

-
+
-
-
-

-
+
-
-
-

-
+

-
+



-
+



-
+



-
+



-
+

-
+

-
+
-
-
+
-
-
+
-

-
+

-
+
-

-
+

-
+



-
+



-
+
-



-
+
-

-
+
-
-
-



-
+
-

-
+
-
-



-
+



-
+
-
-
-
-

-
+

-
+
-
-

-
+
-
-

-
+
-

-
+
-
-
+
-

-
+
-

-
+
-
-
-
-
-

-
+
-

-
+

-
+

-
+

-
+
-
-
-
+

-
+
-

-
+
-
-

-
+

-
+



-
+

-
+
-
-
-
-



-
+
-
-



-
+
-
-

-
+
-

-
+

-
+
-
-

-
+
-

-
+

-
+
-
-
-

-
+

-
+
-
-
+
-
-
-
+
-
-
-
-
+
+
-
-
+
-
-

-
-
-
-
-
+
-

-
-
+
+

-
+

-
-
-
-
-
-
+
+
+
+
+
+

-
+

-
+
-
-
-
-

-
+
-

-
-
-
+
+
+
-

-
+

-
+
-
-
-

-
+

-
+
-
-
-

-
+

-
-
+
+

-
+
-

-
+
-
-

-
+
-
-
-
-

-
+

-
+
-

-
+
-
-
-
-
-

-
+
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-
-
-
-
-
-

-
+
-
-

-
+
-
-

-
+
-
-
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-
-
-

-
+
-
-

-
+

-
-
+
-

-
+
-
-
-
-
-

-
+
-

-
+
-
-
-
+
-
-
-
-
-

-
+
-
-
-

-
+
-

-
-
-
-
-
+
+
+
+
+
+
+
+
+

+
-
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-

-
+

-
-
+
-
-
-
-
+
-
-
-
-
-

-
-
+
-
-

-
+

-
-
+
+

-
-
+
+

-
-
+
+
-

-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
-
+
-
-
-
-
+
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Пересылка_файлов:_теория/index.html)


# Пересылка файлов: теория

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 Введение](#Введение)
* [2 Как соединены Вася@сервер1 и Петя@сервер2](#Как_соединены_Васясервер1_и_Петясервер2)
* [2 Как соединены Вася@сервер1 и Петя@сервер2](#Как_соединены_Вася@сервер1_и_Петя@сервер2)
* [3 Обмен сообщениями + передача файлов = мезальянс?](#Обмен_сообщениями_+_передача_файлов_=_мезальянс)
* [4 Вася и Петя хотят передать файл](#Вася_и_Петя_хотят_передать_файл)
   * [4.1 Внутри и снаружи](#Внутри_и_снаружи)
 * [4.1 Внутри и снаружи](#Внутри_и_снаружи)
* [5 Ху из ху?](#Ху_из_ху)
   * [5.1 Jidlink](#Jidlink)
   * [5.2 SI](#SI)
   * [5.3 HTTP (OOB)](#HTTP_OOB)
 * [5.1 Jidlink](#Jidlink)
 * [5.2 SI](#SI)
 * [5.3 HTTP (OOB)](#HTTP_OOB)
* [6 Две ступени к прекрасному](#Две_ступени_к_прекрасному)
* [7 Идеальная сеть и жестокая реальность](#Идеальная_сеть_и_жестокая_реальность)
* [8 И снова "внутри и снаружи": что выбрать?](#И_снова_внутри_и_снаружи_что_выбрать)
* [9 Спортивное ориентирование на местности доступных протоколов](#Спортивное_ориентирование_на_местности_доступных_протоколов)
   * [9.1 Jidlink](#Jidlink)
      * [9.1.1 Опции конфигурирования](#Опции_конфигурирования)
      * [9.1.2 Руководство по настройке](#Руководство_по_настройке)
   * [9.2 SI](#SI)
      * [9.2.1 Опции конфигурации](#Опции_конфигурации)
      * [9.2.2 Руководство по настройке](#Руководство_по_настройке)
   * [9.3 HTTP](#HTTP)
      * [9.3.1 Опции конфигурирования](#Опции_конфигурирования)
      * [9.3.2 Замечания по настройке](#Замечания_по_настройке)
      * [9.3.3 Настройка портфорвардинга для HTTP (OOB)](#Настройка_портфорвардинга_для_HTTP_OOB)
 * [9.1 Jidlink](#Jidlink)
  * [9.1.1 Опции конфигурирования](#Опции_конфигурирования)
  * [9.1.2 Руководство по настройке](#Руководство_по_настройке)
 * [9.2 SI](#SI)
  * [9.2.1 Опции конфигурации](#Опции_конфигурации)
  * [9.2.2 Руководство по настройке](#Руководство_по_настройке)
 * [9.3 HTTP](#HTTP)
  * [9.3.1 Опции конфигурирования](#Опции_конфигурирования)
  * [9.3.2 Замечания по настройке](#Замечания_по_настройке)
  * [9.3.3 Настройка портфорвардинга для HTTP (OOB)](#Настройка_портфорвардинга_для_HTTP_OOB)
* [10 Тонкие различия протоколов](#Тонкие_различия_протоколов)
   * [10.1 Протоколы внутриканальной передачи данных](#Протоколы_внутриканальной_передачи_данных)
      * [10.1.1 Варианты реализации](#Варианты_реализации)
      * [10.1.2 Проблемы SI/IBB](#Проблемы_SI_IBB)
      * [10.1.3 Почему полезен IQ](#Почему_полезен_IQ)
      * [10.1.4 Доступные транспорты на основе IQ-запросов](#Доступные_транспорты_на_основе_IQ-запросов)
* [11 Это всё хорошо, но что выбрать для *моего* соединения?](#Это_всё_хорошо_но_что_выбрать_для_моего_соединения)
 * [10.1 Протоколы внутриканальной передачи данных](#Протоколы_внутриканальной_передачи_данных)
  * [10.1.1 Варианты реализации](#Варианты_реализации)
  * [10.1.2 Проблемы SI/IBB](#Проблемы_SI_IBB)
  * [10.1.3 Почему полезен IQ](#Почему_полезен_IQ)
  * [10.1.4 Доступные транспорты на основе IQ-запросов](#Доступные_транспорты_на_основе_IQ-запросов)
* [11 Это всё хорошо, но что выбрать для моего соединения?__](#Это_всё_хорошо_но_что_выбрать_для_моего_соединения__)
* [12 Благодарности](#Благодарности)
* [13 Скучные сугубо технические ссылки](#Скучные_сугубо_технические_ссылки)

## <a id="Введение"></a>Введение
Если вы туманно представляете себе этот вопрос или думаете, что два файла
# <a id="Введение"></a>Введение
Если вы туманно представляете себе этот вопрос или думаете, что два файла переслать — это как два пальца об асфальт, то перед тем как продолжить чтение, рекомендуем посетить [эту страничку](http://jabberworld.info/Передача_файлов) на jabberworld.info. Там вы получите необходимый минимум знаний, который поможет быстрее разобраться в премудростях файлопересылания. 
переслать — это как два пальца об асфальт, то перед тем как продолжить чтение,
рекомендуем посетить [эту страничку](http://jabberworld.info/Передача_файлов)
на jabberworld.info. Там вы получите необходимый минимум знаний, который
поможет быстрее разобраться в премудростях файлопересылания.

Проблемы с пересылкой файлов проистекают из незнания матчасти. Вопрос о том,
Проблемы с пересылкой файлов проистекают из незнания матчасти. Вопрос о том, должен ли "рядовой пользователь" знать матчасть — сложный, и даже философский. Подход Ткаббера, написанного продвинутыми пользователями для продвинутых пользователей, предполагает, что должен. 
должен ли "рядовой пользователь" знать матчасть — сложный, и даже философский.
Подход Ткаббера, написанного продвинутыми пользователями для продвинутых
пользователей, предполагает, что должен.

Совсем нетерпеливые могут прыгнуть
Совсем нетерпеливые могут прыгнуть [прямо к описанию настроек](Пересылка_файлов__теория.md#Спортивное_ориентирование_на_местности_доступных_протоколов). 
[**прямо к описанию настроек**](#Спортивное_ориентирование_на_местности_доступных_протоколов).

Вы ещё здесь? Отлично! Тогда приступим. И начнём с простого.
Вы ещё здесь? Отлично! Тогда приступим. И начнём с простого. 

## <a id="Как_соединены_Васясервер1_и_Петясервер2"></a>Как соединены Вася@сервер1 и Петя@сервер2
*  Джаббер-клиент Васи устанавливает соединение с сервером **сервер1**.
*  Джаббер-клиент Пети — с сервером **сервер2**.
*  **сервер1** и **сервер2** устанавливают соединение между собой.
# <a id="Как_соединены_Вася@сервер1_и_Петя@сервер2"></a>Как соединены Вася@сервер1 и Петя@сервер2
*  Джаббер-клиент Васи устанавливает соединение с сервером **сервер1**. 
*  Джаббер-клиент Пети — с сервером **сервер2**. 
*  **сервер1** и **сервер2** устанавливают соединение между собой. 

Теперь, когда Вася шлёт сообщение Пете, происходит следующее:
Теперь, когда Вася шлёт сообщение Пете, происходит следующее: 

*  васин клиент шлёт это сообщение своему серверу (**сервер1**).
*  васин сервер посылает его петиному серверу (**сервер2**).
*  петин сервер пересылает его петиному клиенту.
*  Петя видит сообщение и радуется.
*  васин клиент шлёт это сообщение своему серверу (**сервер1**). 
*  васин сервер посылает его петиному серверу (**сервер2**). 
*  петин сервер пересылает его петиному клиенту. 
*  Петя видит сообщение и радуется. 

Заметьте, что хотя между Васей и Петей есть _логическое_ соединение, реально
Заметьте, что хотя между Васей и Петей есть _логическое_ соединение, реально каждый из них соединён только со своим сервером. Это — типичная ошибка начинающих пользователей: считать, что сообщение, посланное "на соседний компьютер", посылается прямо на этот соседний компьютер. (К примеру, в случае общения "через аську" в русском офисе сообщения на самом деле ходят через сервер, находящийся в Америке.) 
каждый из них соединён только со своим сервером. Это — типичная ошибка
начинающих пользователей: считать, что сообщение, посланное "на соседний
компьютер", посылается прямо на этот соседний компьютер. (К примеру, в случае
общения "через аську" в русском офисе сообщения на самом деле ходят через
сервер, находящийся в Америке.)

Соединение между васиным и петиным джаббер-клиентами мы будем называть
Соединение между васиным и петиным джаббер-клиентами мы будем называть _каналом._ 
_каналом._

## <a id="Обмен_сообщениями_+_передача_файлов_=_мезальянс"></a>Обмен сообщениями + передача файлов = мезальянс?
Во-первых, надо отметить, что "Jabber" — это "разговорное название"
# <a id="Обмен_сообщениями_+_передача_файлов_=_мезальянс"></a>Обмен сообщениями + передача файлов = мезальянс?
Во-первых, надо отметить, что "Jabber" — это "разговорное название" [протокола XMPP,](http://www.xmpp.org) и эта аббревиатура образована от термина _Extensible Messaging and Presence Protocol,_ означающего: _Расширяемый Протокол для обмена **Сообщениями** и информацией о Присутствии._ Обратите внимание на слово "сообщениями" — никакого упоминания о пересылке файлов. 
[протокола XMPP](http://www.xmpp.org), и эта аббревиатура образована от термина
_Extensible Messaging and Presence Protocol,_ означающего: _Расширяемый
Протокол для обмена **Сообщениями** и информацией о Присутствии._ Обратите
внимание на слово "сообщениями" — никакого упоминания о пересылке файлов.

Понять это легко: джаббер оптимизирован для пересылки _коротких текстовых_
Понять это легко: джаббер оптимизирован для пересылки _коротких текстовых_ сообщений. В эту канву вписываются: обычные сообщения, "чат" и "групповой чат" (комнаты), адмминистративные сообщения, рассылаемые разным группам пользователей в пределах одного сервера, а так же различные более "хитрые" сервисы, вроде агрегации RSS-каналов. 
сообщений. В эту канву вписываются: обычные сообщения, "чат" и "групповой чат"
(комнаты), адмминистративные сообщения, рассылаемые разным группам
пользователей в пределах одного сервера, а так же различные более "хитрые"
сервисы, вроде агрегации RSS-каналов.

**На заметку:** любопытный читатель может получить представление о том, что
**На заметку:** любопытный читатель может получить представление о том, что летает по джаббер-сети, активизировав стандартный плагин "RAW XML Input" и открыв "Окно XML" из меню "Службы->Инструменты администратора". 
летает по джаббер-сети, активизировав стандартный плагин "RAW XML Input" и
открыв "Окно XML" из меню "Службы->Инструменты администратора".

Передача файлов в эту концепцию _не_ вписывается.
Передача файлов в эту концепцию _не_ вписывается. 

Однако, она иногда требуется.
Однако, она иногда требуется. 

Джаббер отвечает на эту потребность тремя расширениями стандарта, определяющими
Джаббер отвечает на эту потребность тремя расширениями стандарта, определяющими различные _"транспорты",_ то есть протоколы доставки информации: 
различные _"транспорты",_ то есть протоколы доставки информации:

* Jidlink.
*  Jidlink. 
* [Out of Band Data (OOB)](http://www.jabber.org/jeps/jep-0066.html) (по
  причинам, объяснённым ниже, в Ткаббере называется "HTTP").
* [Передача файлов](http://www.jabber.org/jeps/jep-0096.html), основанная на
*  [Out of Band Data (OOB)](http://www.jabber.org/jeps/jep-0066.html) (по причинам, объяснённым ниже, в Ткаббере называется "HTTP").  
*  [Передача файлов](http://www.jabber.org/jeps/jep-0096.html), основанная на протоколе [SI](http://www.jabber.org/jeps/jep-0095.html). 
  протоколе [SI](http://www.jabber.org/jeps/jep-0095.html).

Независимо от протокола, поток байтов, который передаётся транспортом,
Независимо от протокола, поток байтов, который передаётся транспортом, именуется _"bytestream",_ то есть... правильно — "поток байтов". 
именуется _"bytestream",_ то есть... правильно — "поток байтов".

## <a id="Вася_и_Петя_хотят_передать_файл"></a>Вася и Петя хотят передать файл
Как мы помним, соедниение между **Вася@сервер1** и **Петя@сервер2** — чисто
# <a id="Вася_и_Петя_хотят_передать_файл"></a>Вася и Петя хотят передать файл
Как мы помним, соедниение между **Вася@сервер1** и **Петя@сервер2** — чисто логическое, то есть _нет прямого соединения_ между васиным и петиным компьютерами. 
логическое, то есть _нет прямого соединения_ между васиным и петиным
компьютерами.

Протоколы джаббера предоставляют Васе две _принципиально различные_ возможности
Протоколы джаббера предоставляют Васе две _принципиально различные_ возможности для того чтобы передать файл Пете: 
для того чтобы передать файл Пете:

* васин джаббер-клиент может установить _прямое соединение_ с петиным клиентом
*  васин джаббер-клиент может установить _прямое соединение_ с петиным клиентом и передать файл, на время создав таким образом _физический канал_ между васиным и петиным компьютерами. 
  и передать файл, на время создав таким образом _физический канал_ между
  васиным и петиным компьютерами.
* васин джаббер-клиент может послать файл внутри существующего _логического
*  васин джаббер-клиент может послать файл внутри существующего _логического канала_ между ним и петиным джаббер-клиентом. 
  канала_ между ним и петиным джаббер-клиентом.

В первом случае информация передаётся непосредственно с компьютера на
В первом случае информация передаётся непосредственно с компьютера на компьютер, а значит, это делается быстро, экономично и удобно. 
компьютер, а значит, это делается быстро, экономично и удобно.

Во втором случае передача производится способом, похожим на посылку обычных
текстовых сообщений. Представить себе это проще всего так: файл,
Во втором случае передача производится способом, похожим на посылку обычных текстовых сообщений. Представить себе это проще всего так: файл, предназначенный для пересылки, разбивается на небольшие куски, и каждый кусок пересылается как если бы это было текстовое сообщение. (Технически это не во всех случаях верно, но общая идея должна быть понятна.) 
предназначенный для пересылки, разбивается на небольшие куски, и каждый кусок
пересылается как если бы это было текстовое сообщение. (Технически это не во
всех случаях верно, но общая идея должна быть понятна.)

Рассмотрим это чуть подробнее, а заодно введём пару "официальных" терминов.
Рассмотрим это чуть подробнее, а заодно введём пару "официальных" терминов. 

### <a id="Внутри_и_снаружи"></a>Внутри и снаружи
## <a id="Внутри_и_снаружи"></a>Внутри и снаружи

С точки зрения пользователя джаббер-клиента самым серьёзным вопросом является
С точки зрения пользователя джаббер-клиента самым серьёзным вопросом является то, _как_ передаются данные  файла. Как уже объяснялось выше, есть всего два способа это сделать: передать данные "внутри" имеющегося соединения и "снаружи". 
то, _как_ передаются данные  файла. Как уже объяснялось выше, есть всего два
способа это сделать: передать данные "внутри" имеющегося соединения и
"снаружи".

Отсюда — два термина:
Отсюда — два термина: 

* _In-band, IB ("в канале")_ — данные файла передаются внутри логического
*  _In-band, IB ("в канале")_ — данные файла передаются внутри логического соединения между клиентами, то есть _опосредованно_ (в передаче участвуют не только клиенты, но и вся цепочка Джаббер-серверов между ними). 
  соединения между клиентами, то есть _опосредованно_ (в передаче участвуют не
  только клиенты, но и вся цепочка Джаббер-серверов между ними).
* _Out-of-band, OOB ("вне канала")_ — данные файла передаются _непосредственно_
*  _Out-of-band, OOB ("вне канала")_ — данные файла передаются _непосредственно_ между клиентами (или через прокси-сервер). Джаббер-серверы клиентов в передаче не участвуют. 
  между клиентами (или через прокси-сервер). Джаббер-серверы клиентов в
  передаче не участвуют.

Термин "bytestream" не забывают и здесь, различая, соответственно
Термин "bytestream" не забывают и здесь, различая, соответственно 

* In-band bytestreams (IBB) — внутриканальные потоки байтов.
* Out-of-band bytestreams (OOB) — внеканальные потоки байтов.
*  In-band bytestreams (IBB) — внутриканальные потоки байтов. 
*  Out-of-band bytestreams (OOB) — внеканальные потоки байтов. 

**На заметку:** сторого говоря, термин "band" здесь следует переводить
телекоммуникационным эквивалентом — "полоса", а приведённые термины означают
"внутриполосную" и "внеполосную" передачу данных, соответственно. Но мы
предпочтём простоту изложения академичности.

**На заметку:** сторого говоря, термин "band" здесь следует переводить телекоммуникационным эквивалентом — "полоса", а приведённые термины означают "внутриполосную" и "внеполосную" передачу данных, соответственно. Но мы предпочтём простоту изложения академичности. 

Ну, а теперь настало время представить виновников данной писанины поподробнее.
Ну, а теперь настало время представить виновников данной писанины поподробнее. 

## <a id="Ху_из_ху"></a>Ху из ху?
### <a id="Jidlink"></a>Jidlink
# <a id="Ху_из_ху"></a>Ху из ху?
## <a id="Jidlink"></a>Jidlink

* Поддерживает как in-band, так и out-of-band передачу.
* Никогда не являлся стандартным расширением Джаббера, и поэтому не является
*  Поддерживает как in-band, так и out-of-band передачу. 
*  Никогда не являлся стандартным расширением Джаббера, и поэтому не является официальным. 
  официальным.
* Из широко известных джаббер-клиентов, реализован только в Ткаббере.
*  Из широко известных джаббер-клиентов, реализован только в Ткаббере. 
* Для передачи данных в канале использует iq-паекты (IQ — это
  [подсистема Info/Query Джаббера](http://www.xmpp.org/specs/rfc3920.html#stanzas-semantics)).
* Для передачи данных вне канала использует протокол
*  Для передачи данных в канале использует iq-паекты (IQ — это [подсистема Info/Query Джаббера](http://www.xmpp.org/specs/rfc3920.html#stanzas-semantics)). 
*  Для передачи данных вне канала использует протокол [Direct TCP (DTCP)](http://www.xmpp.org/extensions/xep-0046.html). 
  [Direct TCP (DTCP)](http://www.xmpp.org/extensions/xep-0046.html).

### <a id="SI"></a>SI
## <a id="SI"></a>SI

* Поддерживает как in-band, так и out-of-band передачу.
* Является стандартным расширением Джаббера (и самым новым транспортом для
  передачи файлов).
* Для передачи в канале может использовать:
   * текстовые сообщения — стандартный режим внутриканальной передачи (мы будем
     именовать этот режим аббревиатурой **SI/IBB**);
   * IQ-запросы — (пока ещё) нестандартный режим, реализованный в текущей
     альфа-версии Ткаббера, имеющий серьёзные преимущества перед стандартным
     (**SI/IQIBB**).
* Для передачи вне канала использует
  [потоки байтов SOCKS5](http://www.xmpp.org/extensions/xep-0065.html).
* Поддерживает опосредованные ("mediated") внеканальные соединения через
  специальные SOCKS5-прокси серверы (реализовано в текущей альфа-версии).

*  Поддерживает как in-band, так и out-of-band передачу. 
*  Является стандартным расширением Джаббера (и самым новым транспортом для передачи файлов). 
*  Для передачи в канале может использовать: 
 *  текстовые сообщения — стандартный режим внутриканальной передачи (мы будем именовать этот режим аббревиатурой **SI/IBB**); 
 *  IQ-запросы — (пока ещё) нестандартный режим, реализованный в текущей альфа-версии Ткаббера, имеющий серьёзные преимущества перед стандартным (**SI/IQIBB**). 
 
*  Для передачи вне канала использует [потоки байтов SOCKS5](http://www.xmpp.org/extensions/xep-0065.html). 
*  Поддерживает опосредованные ("mediated") внеканальные соединения через специальные SOCKS5-прокси серверы (реализовано в текущей альфа-версии). 

Термин _SI (Stream Initiation)_ является весьма обобщённым и означает "создание
Термин _SI (Stream Initiation)_ является весьма обобщённым и означает "создание потока". Имеется в виду организация дополнительного потока байтов по инициативе одного из клиентов. Нас в данном случае интересует создание потока для передачи файла. 
потока". Имеется в виду организация дополнительного потока байтов по инициативе
одного из клиентов. Нас в данном случае интересует создание потока для передачи
файла.

Теория относительно SOCKS5 дана [**тут**](Терминология.md#SOCKS5).
Теория относительно SOCKS5 дана [тут](Терминология.md#SOCKS5). 

### <a id="HTTP_OOB"></a>HTTP (OOB)
## <a id="HTTP_OOB"></a>HTTP (OOB)

*  Является стандартным (и самым старым) способом передачи файлов.
*  Поддерживает только передачу вне канала.
*  Использует [протокол HTTP](http://ru.wikipedia.org/wiki/HTTP) для передачи
*  Является стандартным (и самым старым) способом передачи файлов. 
*  Поддерживает только передачу вне канала. 
*  Использует [протокол HTTP](http://ru.wikipedia.org/wiki/HTTP) для передачи данных; при этом инициатор во время передачи файла является HTTP-сервером, а получатель — клиентом. 
   данных; при этом инициатор во время передачи файла является HTTP-сервером,
   а получатель — клиентом.

## <a id="Две_ступени_к_прекрасному"></a>Две ступени к прекрасному
Передача файла при помощи любого протокола состоит из двух последовательных
# <a id="Две_ступени_к_прекрасному"></a>Две ступени к прекрасному
Передача файла при помощи любого протокола состоит из двух последовательных фаз: 
фаз:

1. _"Рукопожатие",_ в ходе которого стороны договариваются о том, каким именно
   образом будет использован протокол. На этом этапе инициатор так же сообщает
   некоторую информацию о файле, а принимающая сторона должна подтвердить или
   отклонить запрос на передачу.
1. Собственно передача файла.

Рукопожатие интересует нас сильнее всего, так как именно оно определяет какой
из способов передачи информации будет выбран протоколом.

**Внимание!** Этот выбор _осуществляется автоматически,_ так что то, как именно
он будет осуществлён, зависит от настроек Ткаббера.

1.  _"Рукопожатие",_ в ходе которого стороны договариваются о том, каким именно образом будет использован протокол. На этом этапе инициатор так же сообщает некоторую информацию о файле, а принимающая сторона должна подтвердить или отклонить запрос на передачу. 
1.  Собственно передача файла. 

Рукопожатие интересует нас сильнее всего, так как именно оно определяет какой из способов передачи информации будет выбран протоколом. 

**Внимание!** Этот выбор _осуществляется автоматически,_ так что то, как именно он будет осуществлён, зависит от настроек Ткаббера. 

**Важно понимать,** что каждый протокол передачи файлов _предпочитает **прямые
**Важно понимать,** что каждый протокол передачи файлов _предпочитает **прямые (вне канала)** соединения_ внутриканальным. 
(вне канала)** соединения_ внутриканальным.

Постигнув теорию, спустимся с небес на землю и узнаем что же создаёт проблемы
Постигнув теорию, спустимся с небес на землю и узнаем что же создаёт проблемы на пути лёгкой передачи файлов. 
на пути лёгкой передачи файлов.

## <a id="Идеальная_сеть_и_жестокая_реальность"></a>Идеальная сеть и жестокая реальность
В идеальной TCP/IP сети нет вирусов, кракеров, спама, идиотов, фанатиков,
# <a id="Идеальная_сеть_и_жестокая_реальность"></a>Идеальная сеть и жестокая реальность
В идеальной TCP/IP сети нет вирусов, кракеров, спама, идиотов, фанатиков, трафик бесплатен, и каждый компьютер имеет публичный IP-адрес. 
трафик бесплатен, и каждый компьютер имеет публичный IP-адрес.

Во вполне реальном [Интернет](http://ru.wikipedia.org/wiki/Интернет) это всё
Во вполне реальном [Интернет](http://ru.wikipedia.org/wiki/Интернет) это всё есть, и поэтому: 
есть, и поэтому:

* Компьютеры, "смотрящие" в Интернет непосредственно, обычно защищены
  ["межсетевыми экранами"](http://ru.wikipedia.org/wiki/Межсетевой_экран) — программами,
  которые не позволяют подключиться к компьютеру "снаружи".
* Компьютеры, подключённые к Интернет опосредованно, как правило, делают это
  через нечто, осуществляющее
  [преобразование сетевых адресов](http://ru.wikipedia.org/wiki/NAT), что так же
  убивает возможность соединиться с такими компьютерами "снаружи".

Некоторые люди также полагают, что иногда эту неприглядную ситуацию ещё сильнее
ухудшают странные люди, именуемые "системными администраторами": они всеми
доступными средствами изничтожают любую возможность "вылезти в свет" для
скучающих офисных работников.

Конкретные ситуации с соединениями на различных компьютерах могут сильно
отличаться. Например, компьютер может совершать любые исходящие соединения, но
не может принимать входящие. Или даже исходящие он может совершать только через
[прокси-сервер](http://ru.wikipedia.org/wiki/Прокси-сервер). Бывают и более
сложные условия.

*  Компьютеры, "смотрящие" в Интернет непосредственно, обычно защищены ["межсетевыми экранами"](http://ru.wikipedia.org/wiki/Межсетевой_экран) — программами, которые не позволяют подключиться к компьютеру "снаружи". 
*  Компьютеры, подключённые к Интернет опосредованно, как правило, делают это через нечто, осуществляющее [преобразование сетевых адресов](http://ru.wikipedia.org/wiki/NAT), что так же убивает возможность соединиться с такими компьютерами "снаружи". 

Некоторые люди также полагают, что иногда эту неприглядную ситуацию ещё сильнее ухудшают странные люди, именуемые "системными администраторами": они всеми доступными средствами изничтожают любую возможность "вылезти в свет" для скучающих офисных работников. 

Конкретные ситуации с соединениями на различных компьютерах могут сильно отличаться. Например, компьютер может совершать любые исходящие соединения, но не может принимать входящие. Или даже исходящие он может совершать только через [прокси-сервер](http://ru.wikipedia.org/wiki/Прокси-сервер). Бывают и более сложные условия. 

В любом случае, идея очевидна: _в Интернете_ протоколам, подразумевающим
В любом случае, идея очевидна: _в Интернете_ протоколам, подразумевающим произвольные _прямые_ соединения между компьютерами живётся несладко. Интернет это ярко выраженный образчик клиент-серверной архитектуры: только серверы, предоставляющие специфические услуги (вроде HTTP, почты или Jabber), способны принимать соединения от своих клиентов. 
произвольные _прямые_ соединения между компьютерами живётся несладко. Интернет
это ярко выраженный образчик клиент-серверной архитектуры: только серверы,
предоставляющие специфические услуги (вроде HTTP, почты или Jabber), способны
принимать соединения от своих клиентов.

С другой стороны, в [локальных сетях](http://ru.wikipedia.org/wiki/LAN)
С другой стороны, в [локальных сетях](http://ru.wikipedia.org/wiki/LAN) ситуация зачастую совсем другая. В них, как правило, все компьютеры считаются добропорядочными и разрешают произвольные соединения друг с другом. 
ситуация зачастую совсем другая. В них, как правило, все компьютеры считаются
добропорядочными и разрешают произвольные соединения друг с другом.

**Главный вывод** из этого таков: _в Интернет,_ как правило, прямая передача
**Главный вывод** из этого таков: _в Интернет,_ как правило, прямая передача информации между двумя "простыми" компьютерами невозможна. А это значит, что в таких условиях, возможно, придётся использовать способность некоторых протоколов передачи файлов посылать информацию внутри логического канала. 
информации между двумя "простыми" компьютерами невозможна. А это значит, что в
таких условиях, возможно, придётся использовать способность некоторых
протоколов передачи файлов посылать информацию внутри логического канала.

## <a id="И_снова_внутри_и_снаружи_что_выбрать"></a>И снова "внутри и снаружи": что выбрать?
Ответьте для себя на два вопроса:
# <a id="И_снова_внутри_и_снаружи_что_выбрать"></a>И снова "внутри и снаружи": что выбрать?
Ответьте для себя на два вопроса: 

1. Может ли мой компьютер установить произвольное TCP/IP-соединение с
1.  Может ли мой компьютер установить произвольное TCP/IP-соединение с удалённым компьютера? (_"активный"_ способ установить соединение) 
   удалённым компьютера? (_"активный"_ способ установить соединение)
1. Может ли удалённый компьютер установить произвольное соединение с
1.  Может ли удалённый компьютер установить произвольное соединение с моим компьютером? (_"пассивный"_ способ) 
   моим компьютером? (_"пассивный"_ способ)

Комбинация ответов "да" или "нет" на каждый из этих вопросов даст вам в руки
руководство к действию:

* Если ваш компьютер _может установить_ произвольное TCP/IP-соединение,
  то вы можете _разрешить_ протоколам передачи файлов устанавливать _исходящие
  прямые_ соединения.
* Если ваш компьютер _принимает_ прямые подключения (например, он находится
  в локальной сети), то вы можете _разрешить_ протоколам передачи файлов

Комбинация ответов "да" или "нет" на каждый из этих вопросов даст вам в руки руководство к действию: 

*  Если ваш компьютер _может установить_ произвольное TCP/IP-соединение, то вы можете _разрешить_ протоколам передачи файлов устанавливать _исходящие прямые_ соединения. 
*  Если ваш компьютер _принимает_ прямые подключения (например, он нахдится в локальной сети), то вы можете _разрешить_ протоколам передачи файлов принимать _входящие прямые_ соединения. 
  принимать _входящие прямые_ соединения.
* Если "нет" является ответом на оба вопроса, запрещайте оба типа прямых
*  Если "нет" является ответом на оба вопроса, запрещайте оба типа прямых соединений: in-band bytestreams — ваша единственная возможность пересылать файлы. 
  соединений: in-band bytestreams — ваша единственная возможность пересылать
  файлы.

**Внимание!** Необходимо чётко понимать две вещи:
**Внимание!** Необходимо чётко понимать две вещи: 

1. _Все_ протоколы передачи файлов в джаббере _предпочитают прямую пересылку_
1.  _Все_ протоколы передачи файлов в джаббере _предпочитают прямую пересылку_ внутриканальной как наиболее быструю и создающую минимальную нагрузку на серверы. 
   внутриканальной как наиболее быструю и создающую минимальную нагрузку на
   серверы.
1. Нет способа узнать будет ли работать прямая пересылка, не попробовав её,
1.  Нет способа узнать будет ли работать прямая пересылка, не попробовав её, то есть протокол не может сказать окажется ли выбранный способ передачи работающим. 
   то есть протокол не может сказать окажется ли выбранный способ передачи
   работающим.

Из этого нужно сделать **Самый Главный Вывод:**
Из этого нужно сделать **Самый Главный Вывод:** 

> _Если прямая передача не поддерживается вашим компьютером, **запретите** её в
 _Если прямая передача не поддерживается вашим компьютером, **запретите** её в настройках, так как она с большой долей вероятности будет выбираться в ходе "рукопожатия" протокола передачи файлов и не будет работать._ 
  настройках, так как она с большой долей вероятности будет выбираться в ходе
  "рукопожатия" протокола передачи файлов и не будет работать._

**На заметку:** это "не будет работать" обычно выражается в том, что соединение
**На заметку:** это "не будет работать" обычно выражается в том, что соединение долго "висит", и при этом никакой передачи файла не происходит. Причина обычно состоит в том, что межсетевой экран, отделяющий компьютер-адресат (или ваш компьютер) от внешней сети (обычно Интернет), молча "душит" "неправильные" с его точки зрения [IP-пакеты](http://ru.wikipedia.org/wiki/IP). При этом компьютер-передатчик (ваш компьютер), не получая никаких ответов на посылаемые пакеты, ожидает их в течение некоторого (большого) тайм-аута (к примеру, для ядра Linux 2.4.x он составляет около 10 минут). 
долго "висит", и при этом никакой передачи файла не происходит. Причина обычно
состоит в том, что межсетевой экран, отделяющий компьютер-адресат (или ваш
компьютер) от внешней сети (обычно Интернет), молча "душит" "неправильные" с
его точки зрения [IP-пакеты](http://ru.wikipedia.org/wiki/IP). При этом
компьютер-передатчик (ваш компьютер), не получая никаких ответов на посылаемые
пакеты, ожидает их в течение некоторого (большого) тайм-аута (к примеру, для
ядра Linux 2.4.x он составляет около 10 минут).

Рассмотрим теперь конкретные опции конфигурации доступных протоколов передачи
Рассмотрим теперь конкретные опции конфигурации доступных протоколов передачи файлов. 
файлов.

## <a id="Спортивное_ориентирование_на_местности_доступных_протоколов"></a>Спортивное ориентирование на местности доступных протоколов
Все приведённые опции конфигурации для протоколов доступны для изменения как
# <a id="Спортивное_ориентирование_на_местности_доступных_протоколов"></a>Спортивное ориентирование на местности доступных протоколов
Все приведённые опции конфигурации для протоколов доступны для изменения как через графический конфигуратор Ткаббера, так и через [**config.tcl** (секция "post-load")](http://tkabber.jabber.ru/files/doc/tkabber.html#s.postload). 
через графический конфигуратор Ткаббера, так и через
[**config.tcl** (секция "post-load")](http://tkabber.jabber.ru/files/doc/tkabber.html#s.postload).

### <a id="Jidlink"></a>Jidlink
## <a id="Jidlink"></a>Jidlink

Этот протокол поддерживает как внеканальный, так и внутриканальный способы
Этот протокол поддерживает как внеканальный, так и внутриканальный способы передачи файлов. 
передачи файлов.

Протокол **Jidlink** никогда не являлся частью стандарта **XMPP,** а поэтому
Протокол **Jidlink** никогда не являлся частью стандарта **XMPP,** а поэтому считается устаревшим. Кроме того, этот протокол по-видимому не поддерживается ни одним из известных джаббер-клиентов, кроме Ткаббера. 
считается устаревшим. Кроме того, этот протокол по-видимому не поддерживается
ни одним из известных джаббер-клиентов, кроме Ткаббера.

С другой стороны, это не означает, что этот протокол не следует использовать
С другой стороны, это не означает, что этот протокол не следует использовать совсем — он отлично работает в случае соединения Ткаббер-Ткаббер. Кроме того, он имеет достаточно тонкое положительное отличие от аналогичного протокола — **SI/IBB,** которое будет обсуждаться ниже. 
совсем — он отлично работает в случае соединения Ткаббер-Ткаббер. Кроме того,
он имеет достаточно тонкое положительное отличие от аналогичного протокола —
**SI/IBB,** которое будет обсуждаться ниже.

С другой стороны, в отличие от **SI, Jidlink** не поддерживает опосредованные
С другой стороны, в отличие от **SI, Jidlink** не поддерживает опосредованные прямые соединения (mediated direct connections), поддержка которых уже есть в текущей альфа-версии Ткаббера. Подробнее об этих соединениях — в описании протокола **SI.** 
прямые соединения (mediated direct connections), поддержка которых уже есть в
текущей альфа-версии Ткаббера. Подробнее об этих соединениях — в описании
протокола **SI.**

#### <a id="Опции_конфигурирования"></a>Опции конфигурирования
### <a id="Опции_конфигурирования"></a>Опции конфигурирования

Для конфигурирования протокола **Jidlink** доступны следующие опции:
Для конфигурирования протокола **Jidlink** доступны следующие опции: 

    ::ft::ftjl::options(enable)

Разрешает использовать **Jidlink.** По умолчанию _выключена._
Разрешает использовать **Jidlink.** По умолчанию _выключена._ 

    ::jidlink::transport(allowed,dtcp-active)

Разрешает инициировать _исходящие прямые_ соединения. По умолчанию включена.
Разрешает инициировать _исходящие прямые_ соединения. По умолчанию включена. 

    ::jidlink::transport(allowed,dtcp-passive)

Разрешает принимать _входящие прямые_ соединения. По умолчанию включена.
Разрешает принимать _входящие прямые_ соединения. По умолчанию включена. 

    ::jidlink::transport(allowed,inband-bytestream)

Разрешает внутриканальную передачу файлов. По умолчанию включена.
Разрешает внутриканальную передачу файлов. По умолчанию включена. 

#### <a id="Руководство_по_настройке"></a>Руководство по настройке
### <a id="Руководство_по_настройке"></a>Руководство по настройке

* Можете устанавливать произвольные исходящие прямые соединения? Оставьте
*  Можете устанавливать произвольные исходящие прямые соединения? Оставьте включённым **dtcp-active.** 
  включённым **dtcp-active.**
* Можете принимать произвольные входящие прямые соединения? Оставьте
*  Можете принимать произвольные входящие прямые соединения? Оставьте включённым **dtcp-passive.** 
  включённым **dtcp-passive.**
* Не можете ни того, ни другого? Оставьте включённой _только_
*  Не можете ни того, ни другого? Оставьте включённой _только_ **inband-bytestream.** 
  **inband-bytestream.**

### <a id="SI"></a>SI
## <a id="SI"></a>SI

Протокол **SI** поддерживает как внеканальную, так и внутриканальную передачу
Протокол **SI** поддерживает как внеканальную, так и внутриканальную передачу файлов. 
файлов.

#### <a id="Опции_конфигурации"></a>Опции конфигурации
### <a id="Опции_конфигурации"></a>Опции конфигурации

В текущей стабильной версии (0.9.9) доступны следующие настройки:
В текущей стабильной версии (0.9.9) доступны следующие настройки: 

    ::ft::si::options(enable)

Разрешает использовать **SI.** По умолчанию включена.
Разрешает использовать **SI.** По умолчанию включена. 

     ::si::transport(allowed,http://jabber.org/protocol/bytestreams)

Разрешает использовать прямые соединения. _Как исходящие, так и входящие;_
Разрешает использовать прямые соединения. _Как исходящие, так и входящие;_ здесь нет раздельных опций как у **Jidlink.** По умолчанию включена. 
здесь нет раздельных опций как у **Jidlink.** По умолчанию включена.

     ::si::transport(allowed,http://jabber.org/protocol/ibb)

Разрешает использовать "стандартную "внутриканальную передачу файлов (текстовые
Разрешает использовать "стандартную "внутриканальную передачу файлов (текстовые сообщения, **SI/IBB**). По умолчанию включена. 
сообщения, **SI/IBB**). По умолчанию включена.

В ревизии 726 (2006-09-21) основной ветки разработки была добавлена реализация
В ревизии 726 (2006-09-21) основной ветки разработки была добавлена реализация внутриканальной передачи авторства Сергея Голованя (`xmpp:sgolovan@nes.ru`), сочетающая достоинства SI и Jidlink — **SI/IQIBB**. Её использование можно контролировать следующей опцией: 
внутриканальной передачи авторства Сергея Голованя (`xmpp:sgolovan@nes.ru`),
сочетающая достоинства SI и Jidlink — **SI/IQIBB**. Её использование можно
контролировать следующей опцией:

    ::si::transport(allowed,http://jabber.org/protocol/iqibb)

Разрешает использовать "нестандартную" внутриканальную передачу файлов
Разрешает использовать "нестандартную" внутриканальную передачу файлов (IQ-запросы). По умолчанию включена. 
(IQ-запросы). По умолчанию включена.

В ревизии 727 (2006-09-23) основной ветки разработки был а добавлена реализация
В ревизии 727 (2006-09-23) основной ветки разработки был а добавлена реализация поддержки опосредованных прямых SOCKS5-соединений. Она контролируется следующими опциями: 
поддержки опосредованных прямых SOCKS5-соединений. Она контролируется
следующими опциями:

    ::si::socks5::initiator::options(enable_mediated_connection)

Разрешает использовать опосредованные прямые соединения. По умолчанию включена.
Разрешает использовать опосредованные прямые соединения. По умолчанию включена. 

    ::si::socks5::initiator::options(proxy_servers)

Список имён прокси серверов, соединение через которые следует пытаться
Список имён прокси серверов, соединение через которые следует пытаться установить. Пробуются все сервера в списке по порядку. По умолчанию список состоит из одного сервера — `proxy.jabber.org`; сервера в списке должны быть разделены пробелами. Список публичных прокси-серверов можно найти на [juick.info](http://juick.info/jabber:socks5_proxy_list) 
установить. Пробуются все сервера в списке по порядку. По умолчанию список
состоит из одного сервера — `proxy.jabber.org`; сервера в списке должны быть
разделены пробелами. Список публичных прокси-серверов можно найти на
[juick.info](http://juick.info/jabber:socks5_proxy_list)

#### <a id="Руководство_по_настройке"></a>Руководство по настройке
### <a id="Руководство_по_настройке"></a>Руководство по настройке

В отличие от **Jidlink, SI** не имеет раздельных опций настройки приёма и
В отличие от **Jidlink, SI** не имеет раздельных опций настройки приёма и передачи для внеканальных соединений, поэтому важно понимать как именно устанавливается прямое SOCKS5-соединение в этом протоколе. 
передачи для внеканальных соединений, поэтому важно понимать как именно
устанавливается прямое SOCKS5-соединение в этом протоколе.

> В **SI** _инициатор_ посылки _открывает слушающий сокет_ на своём компьютере
 В **SI** _инициатор_ посылки _открывает слушающий сокет_ на своём компьютере (то есть _является TCP-сервером_), а _принимающая сторона — пытается подключиться_ к нему (то есть _является TCP-клиентом_). 
  (то есть _является TCP-сервером_), а _принимающая сторона — пытается
  подключиться_ к нему (то есть _является TCP-клиентом_).

Иными словами, поведение внеканальной передачи в **SI** сильно зависит от того,
Иными словами, поведение внеканальной передачи в **SI** сильно зависит от того, кто посылает файл, а кто — его принимает: 
кто посылает файл, а кто — его принимает:

* Если вы _посылаете_ файл, то ваш компьютер должен иметь возможность
*  Если вы _посылаете_ файл, то ваш компьютер должен иметь возможность _принимать_ произвольные TCP/IP соединения. 
  _принимать_ произвольные TCP/IP соединения.
* Если вы _принимаете_ файл, что ваш компьютер должен иметь возможность
*  Если вы _принимаете_ файл, что ваш компьютер должен иметь возможность _создавать_ произвольные TCP/IP соединения. 
  _создавать_ произвольные TCP/IP соединения.

Нетрудно заметить, что эта схема создания внеканальных соединений обратна той,
Нетрудно заметить, что эта схема создания внеканальных соединений обратна той, которую использует **Jidlink.** 
которую использует **Jidlink.**

Ещё раз отметим, что в **SI** приём и передача для внеканальных соединений не
Ещё раз отметим, что в **SI** приём и передача для внеканальных соединений не регулируются раздельно. А это означает, что если ваш компьютер "не дружит" с _любым_ из способов установления прямых соединений (активным или пассивным), вам лучше держать соответствующую опцию _выключенной,_ и включать её специально в нужных случаях, когда вы уверены в том, что внеканальная передача будет работать. 
регулируются раздельно. А это означает, что если ваш компьютер "не дружит" с
_любым_ из способов установления прямых соединений (активным или пассивным),
вам лучше держать соответствующую опцию _выключенной,_ и включать её специально
в нужных случаях, когда вы уверены в том, что внеканальная передача будет
работать.

Транспорт **SI/IQIBB** имеет более высокий приоритет при рукопожатии, чем
Транспорт **SI/IQIBB** имеет более высокий приоритет при рукопожатии, чем **SI/IBB.** 
**SI/IBB.**

![(!)](../images/Hammer.png) **Сделать:** написать про mediated connections
![(!)](../images/Hammer.png) **Сделать:** написать про mediated connections 

### <a id="HTTP"></a>HTTP
## <a id="HTTP"></a>HTTP

Этот протокол поддерживает только прямые соединения, при этом:
Этот протокол поддерживает только прямые соединения, при этом: 

* сторона, _посылающая_ файл, выступает как HTTP-сервер и должна иметь
*  сторона, _посылающая_ файл, выступает как HTTP-сервер и должна иметь возможность _принимать произвольные входящие соединения._ 
  возможность _принимать произвольные входящие соединения._
* сторона, _принимающая_ файл, должна иметь возможность установки
  _исходящего прямого соединения по протоколу HTTP (на произвольный порт)._
*  сторона, _принимающая_ файл, должна иметь возможность установки _исходящего прямого соединения по протоколу HTTP (на произвольный порт)._ 

Иными словами, получатель "скачивает" файл с машины посылающего, выступая в
Иными словами, получатель "скачивает" файл с машины посылающего, выступая в качестве "активной" стороны. 
качестве "активной" стороны.

Теоретически, поскольку принимающая сторона получает файл при помощи запроса
Теоретически, поскольку принимающая сторона получает файл при помощи запроса **GET** протокола **HTTP,** _получатель_ может установить соединение этого типа через HTTP-прокси.. Однако, в Ткаббере эта возможность не реализована. 
**GET** протокола **HTTP,** _получатель_ может установить соединение этого типа
через HTTP-прокси.. Однако, в Ткаббере эта возможность не реализована.

#### <a id="Опции_конфигурирования"></a>Опции конфигурирования
### <a id="Опции_конфигурирования"></a>Опции конфигурирования

В текущей стабильной версии (0.9.9) протокол управляется всего одной опцией:
В текущей стабильной версии (0.9.9) протокол управляется всего одной опцией: 

    ::ft::http::options(enable)

Разрешает использовать протокол **HTTP (OOB).** По умолчанию включена.
Разрешает использовать протокол **HTTP (OOB).** По умолчанию включена. 

Начиная с ревизии 731 (2006-09-25) в основную ветку разработки включен код
Начиная с ревизии 731 (2006-09-25) в основную ветку разработки включен код авторства Antoni Grzymala, добавляющий возможность прямой посылки файла с компьютера, находящегося за [NATP-устройством](http://ru.wikipedia.org/wiki/NAT) со специально настроенным [портфорвардингом](http://en.wikipedia.org/wiki/Port_forwarding): 
авторства Antoni Grzymala, добавляющий возможность прямой посылки файла с
компьютера, находящегося за
[NATP-устройством](http://ru.wikipedia.org/wiki/NAT) со специально настроенным
[портфорвардингом](http://en.wikipedia.org/wiki/Port_forwarding):

    ::ft::http::options(port)

Порт, который следует посылать при рукопожатии на удалённую сторону
Порт, который следует посылать при рукопожатии на удалённую сторону (принимающую файл). По умолчанию имеет значение 0, означающее, что порт будет выбран автоматически на локальной машине. 
(принимающую файл). По умолчанию имеет значение 0, означающее, что порт будет
выбран автоматически на локальной машине.

    ::ft::http::options(host)

Имя хоста или IP адрес, который следует посылать при рукопожатии на удалённую
Имя хоста или IP адрес, который следует посылать при рукопожатии на удалённую сторону. По умолчанию пуста; в этом случае посылается сетевое имя локальной машины. 
сторону. По умолчанию пуста; в этом случае посылается сетевое имя локальной
машины.

**Примечание:** если доступен пакет **Tclx,** то будет передан IP адрес
**Примечание:** если доступен пакет **Tclx,** то будет передан IP адрес локальной машины, в который "разрешается" её сетевое имя. 
локальной машины, в который "разрешается" её сетевое имя.

#### <a id="Замечания_по_настройке"></a>Замечания по настройке
### <a id="Замечания_по_настройке"></a>Замечания по настройке

Настраивать этот протокол имеет смысл только в том случае, если ваша машина
Настраивать этот протокол имеет смысл только в том случае, если ваша машина поддерживает прямые соединения или же у вас есть возможность настроить портфорвардинг, как описано ниже. 
поддерживает прямые соединения или же у вас есть возможность настроить
портфорвардинг, как описано ниже.

Если с прямыми соединениями у вас туго, забудьте об этом протоколе — вы не
Если с прямыми соединениями у вас туго, забудьте об этом протоколе — вы не сможете его использовать. 
сможете его использовать.

#### <a id="Настройка_портфорвардинга_для_HTTP_OOB"></a>Настройка портфорвардинга для HTTP (OOB)
### <a id="Настройка_портфорвардинга_для_HTTP_OOB"></a>Настройка портфорвардинга для HTTP (OOB)

**Следует понимать,** что реализация такой схемы требует настройки
**Следует понимать,** что реализация такой схемы требует настройки NATP-устройства, то есть вы либо должны иметь к нему физический доступ (администрировать его), либо [хорошо попросить ;)](http://www.ararat.ru) о такой настройке лицо, администирущее ваш NAT. 
NATP-устройства, то есть вы либо должны иметь к нему физический доступ
(администрировать его), либо [хорошо попросить ;)](http://www.ararat.ru) о
такой настройке лицо, администирущее ваш NAT.

Ключевые идеи подобной настройки портфорвардинга:
Ключевые идеи подобной настройки портфорвардинга: 

* При _передаче_ файла Ткаббер на нашей машине будет выступать в роли
*  При _передаче_ файла Ткаббер на нашей машине будет выступать в роли HTTP-сервера, "отдающего" файл; 
  HTTP-сервера, "отдающего" файл;
* Если наша машина имеет IP адрес из "приватного" диапазона (например,
*  Если наша машина имеет IP адрес из "приватного" диапазона (например, находится, в локальной сети), прямой доступ к ней "снаружи" (из Интернета) невозможен; 
  находится, в локальной сети), прямой доступ к ней "снаружи" (из Интернета)
  невозможен;
* Однако, если доступ "наружу" нашей машине обеспечивает NATP-устройство,
*  Однако, если доступ "наружу" нашей машине обеспечивает NATP-устройство, на нём возможно настроить отображение какого-либо _фиксированного_ порта на какой-либо другой _фиксированный_ порт нашей машины. 
  на нём возможно настроить отображение какого-либо _фиксированного_ порта на
  какой-либо другой _фиксированный_ порт нашей машины.
* При такой настройке наш Ткаббер в ходе фазы рукопожатия протокола OOB
  должен сообщать удалённому Ткабберу адрес хоста и номер порта _своего NAT'а,_
*  При такой настройке наш Ткаббер в ходе фазы рукопожатия протокола OOB должен сообщать удалённому Ткабберу адрес хоста и номер порта _своего NAT'а,_ а не свои. При этом удалённый Ткаббер осуществит TCP-соединение с вашим NAT'ом, и вследствие действия механизма "проброса порта", соединение реально произойдёт с соответсвующим портом на вашей машине, на котором будет "слушать" Ткаббер. 

  а не свои. При этом удалённый Ткаббер осуществит TCP-соединение с вашим
  NAT'ом, и вследствие действия механизма "проброса порта", соединение реально
Таким образом, опции "port" и "host", описанные выше, в случае настройки портфорвардинга, должны содержать "пробрасываемый" порт на NAT'е и имя хоста (или IP адрес ) NAT'а, соответственно. 
  произойдёт с соответсвующим портом на вашей машине, на котором будет
  "слушать" Ткаббер.

Таким образом, опции "port" и "host", описанные выше, в случае настройки
портфорвардинга, должны содержать "пробрасываемый" порт на NAT'е и имя хоста
(или IP адрес ) NAT'а, соответственно.

Для "штатного" режима работы следует установить опцию "port" в значение 0, а
Для "штатного" режима работы следует установить опцию "port" в значение 0, а опции "host" присвоить пустую строку. 
опции "host" присвоить пустую строку.

## <a id="Тонкие_различия_протоколов"></a>Тонкие различия протоколов
Это — "хардкорный" раздел, так как бла-бла...
# <a id="Тонкие_различия_протоколов"></a>Тонкие различия протоколов
Это — "хардкорный" раздел, так как бла-бла... 

### <a id="Протоколы_внутриканальной_передачи_данных"></a>Протоколы внутриканальной передачи данных
## <a id="Протоколы_внутриканальной_передачи_данных"></a>Протоколы внутриканальной передачи данных

> _Раньше я пользовался  
> обычными протоколами передачи данных,  
> и передавали они вечно всякую хрень.  
> Но с тех пор, как я пользуюсь IQ,  
> по каналам лезет одна философия.  
> Дело в IQ?_
Раньше я пользовался
 обычными протоколами передачи данных,
 и передавали они вечно всякую хрень.
 Но с тех пор, как я пользуюсь IQ,
 по каналам лезет одна философия.
 Дело в IQ? 

> *© [**Bigote**](Участник_Bigote.md)*
© [Bigote](Участник_Bigote.md) 

Тема данного раздела узка: поведение различных протоколов внутриканальной
Тема данного раздела узка: поведение различных протоколов внутриканальной передачи данных на _медленных и ненадёжных_ соединениях (в основном, на "dial-up" и GPRS-линках). Именно на них "всплывают" как интересные особенности реализации TCP/IP в операционных системах и интерпретаторе Tcl, так и невнимание некоторых разработчиков к проблемам нестабильных соединений. 
передачи данных на _медленных и ненадёжных_ соединениях (в основном, на
"dial-up" и GPRS-линках). Именно на них "всплывают" как интересные особенности
реализации TCP/IP в операционных системах и интерпретаторе Tcl, так и
невнимание некоторых разработчиков к проблемам нестабильных соединений.

В "свежем" Ткаббере (вынутом из репозитория) можно использовать три транспорта
В "свежем" Ткаббере (вынутом из репозитория) можно использовать три транспорта внутриканальной передачи файлов: 
внутриканальной передачи файлов:

* **Jidlink/IBB**;
* **SI/IBB** — "штатный" внутриканальный транспорт группы протоколов SI;
* **SI/IQIBB** — экспериментальный внутриканальный транспорт группы
*  **Jidlink/IBB**; 
*  **SI/IBB** — "штатный" внутриканальный транспорт группы протоколов SI; 
*  **SI/IQIBB** — экспериментальный внутриканальный транспорт группы протоколов SI. 
  протоколов SI.

В текущей стабильной версии транспорт **SI/IQIBB** отсутствует.
В текущей стабильной версии транспорт **SI/IQIBB** отсутствует. 

**Имейте в виду,** что приведённые названия протоколов не являются официальными
**Имейте в виду,** что приведённые названия протоколов не являются официальными и введены нами для удобного сравнительного именования: форма `ГРУППА_ПРОТОКОЛОВ/ТРАНСПОРТ` позволяет одновременно указать "групповую принадлежность" транспорта и его конкретную реализацию. 
и введены нами для удобного сравнительного именования: форма
`ГРУППА_ПРОТОКОЛОВ/ТРАНСПОРТ` позволяет одновременно указать "групповую
принадлежность" транспорта и его конкретную реализацию.

#### <a id="Варианты_реализации"></a>Варианты реализации
### <a id="Варианты_реализации"></a>Варианты реализации

Как уже говорилось выше, протокол XMPP предназначен для обмена текстовыми
Как уже говорилось выше, протокол XMPP предназначен для обмена текстовыми сообщениями, а не для передачи файлов. Поэтому перед теми, кто занимается разработкой протокола внутриканальной передачи файлов, встаёт задача: как использовать существующие механизмы передачи сообщений для передачи файлов. 
сообщениями, а не для передачи файлов. Поэтому перед теми, кто занимается
разработкой протокола внутриканальной передачи файлов, встаёт задача: как
использовать существующие механизмы передачи сообщений для передачи файлов.

На данный момент существуют две концепции её решения:
На данный момент существуют две концепции её решения: 

* использование текстовых сообщений (строфа `message`);
* использование IQ-запросов (строфа `iq`).
*  использование текстовых сообщений (строфа `message`); 
*  использование IQ-запросов (строфа `iq`). 

Теоретически, у них есть свои слабые и сильные стороны, однако на практике
Теоретически, у них есть свои слабые и сильные стороны, однако на практике IQ-запросы выигрывают. Ниже мы объясним — почему. 
IQ-запросы выигрывают. Ниже мы объясним — почему.

Официально, в настоящий момент XMPP поддерживает только три протокола передачи
Официально, в настоящий момент XMPP поддерживает только три протокола передачи файлов: **HTTP, SI/bytestreams, SI/IBB,** и из них только один (**SI/IBB**) предназначен для внутриканальной передачи файлов. 
файлов: **HTTP, SI/bytestreams, SI/IBB,** и из них только один (**SI/IBB**)
предназначен для внутриканальной передачи файлов.

Протокол **SI/IBB** использует посылку текстовых сообщений в качестве "движка":
Протокол **SI/IBB** использует посылку текстовых сообщений в качестве "движка": пересылаемый файл бьётся на небольшие куски ("чанки", на жаргоне), каждый из которых кодируется при помощи алгоритма [base64](http://ru.wikipedia.org/wiki/Base64) и пересылается принимающему клиенту как текстовое сообщение. 
пересылаемый файл бьётся на небольшие куски ("чанки", на жаргоне), каждый из
которых кодируется при помощи алгоритма
[base64](http://ru.wikipedia.org/wiki/Base64) и пересылается принимающему
клиенту как текстовое сообщение.

#### <a id="Проблемы_SI_IBB"></a>Проблемы SI/IBB
### <a id="Проблемы_SI_IBB"></a>Проблемы SI/IBB

Есть две проблемы, которые делают применение **SI/IBB** затруднительным на
Есть две проблемы, которые делают применение **SI/IBB** затруднительным на медленных и нестабильных линиях. 
медленных и нестабильных линиях.

Во-первых, в XMPP нет механизма подтверждения доставки текстовых сообщений (так
Во-первых, в XMPP нет механизма подтверждения доставки текстовых сообщений (так как они доставляются гарантированно). Это приводит к тому, что невозможно узнать, принят ли уже данный кусок получателем или ещё нет. Из-за этого _типичная реализация **SI/IBB** "вливает" весь файл в передаваемый XML-поток с максимально возможной скоростью._ И тут в игру вступает системное кэширование на пару с забитием полосы пропускания канала. 
как они доставляются гарантированно). Это приводит к тому, что невозможно
узнать, принят ли уже данный кусок получателем или ещё нет. Из-за этого
_типичная реализация **SI/IBB** "вливает" весь файл в передаваемый XML-поток с
максимально возможной скоростью._ И тут в игру вступает системное кэширование
на пару с забитием полосы пропускания канала.

В Ткаббере, при передаче через подсистему
В Ткаббере, при передаче через подсистему [сетевых сокетов](http://ru.wikipedia.org/wiki/Сокет_(Программный_интерфейс)) Tcl, информация кэшируется на двух уровнях: в буферах интерпретатора Tcl и в буферах стека TCP/IP ядра операционной системы. Эти буферы достаточно велики: к примеру, штатно настроенная реализация TCP/IP ядра Linux серии 2.4.x предоставляет каждому соединению передающий буфер размером 16 килобайт. Буфер интерпретатора Tcl значительно больше — на машине автора статьи Tcl 8.4.9 спокойно поглощал "за один присест" файл размером 1,2 мегабайта. 
[сетевых сокетов](http://ru.wikipedia.org/wiki/Сокет_(программный_интерфейс\))
Tcl, информация кэшируется на двух уровнях: в буферах интерпретатора Tcl и в
буферах стека TCP/IP ядра операционной системы. Эти буферы достаточно велики: к
примеру, штатно настроенная реализация TCP/IP ядра Linux серии 2.4.x
предоставляет каждому соединению передающий буфер размером 16 килобайт. Буфер
интерпретатора Tcl значительно больше — на машине автора статьи Tcl 8.4.9
спокойно поглощал "за один присест" файл размером 1,2 мегабайта.

Буферизация в большинстве случаев весьма полезна, однако на медленном канале
Буферизация в большинстве случаев весьма полезна, однако на медленном канале она играет с Ткаббером злую шутку: передача файла размером 1-2 мегабайта в таких условиях с точки зрения Ткаббера происходит моментально — файл поглощается буферами тикля и ОС, после чего начинает медленно вливаться в _физический_ канал передачи (скорость которого на модеме составляет не больше трёх килобайт в секунду, а зачастую — меньше двух). Если пользователь вдруг решает отменить посылку файла, это уже невозможно — диалог посылки файла успешно закрыт. 
она играет с Ткаббером злую шутку: передача файла размером 1-2 мегабайта в
таких условиях с точки зрения Ткаббера происходит моментально — файл
поглощается буферами тикля и ОС, после чего начинает медленно вливаться в
_физический_ канал передачи (скорость которого на модеме составляет не больше
трёх килобайт в секунду, а зачастую — меньше двух). Если пользователь вдруг
решает отменить посылку файла, это уже невозможно — диалог посылки файла
успешно закрыт.

Но не это самое неприятное, самое неприятное — это "забитие" полосы пропускания
Но не это самое неприятное, самое неприятное — это "забитие" полосы пропускания канала. Поскольку сеанс связи по протоколу XMPP фактически представляет собой два XML-потока (от клиента на сервер и обратно), любое сообщение от клиента добавлятся в конец "клиентского" потока, и оно не может нагло пролезть без очереди для отправки на сервер, равно как и нет возможности открыть альтернативный поток. Это означает, что пока наш файл томительно "вливается" в медленный канал, любая наша активность в виде исходящих сообщений будет просто добавляться в "хвост" потока, "голова" которого ещё "не пролезла" на сервер. Причём из-за того, что потоки на приём и передачу — разные, несчастный пользователь получает входящие сообщения (например, наблюдает активность в чатах), но сам он до окончания передачи файла эффективно отстранён от активных действий. 
канала. Поскольку сеанс связи по протоколу XMPP фактически представляет собой
два XML-потока (от клиента на сервер и обратно), любое сообщение от клиента
добавлятся в конец "клиентского" потока, и оно не может нагло пролезть без
очереди для отправки на сервер, равно как и нет возможности открыть
альтернативный поток. Это означает, что пока наш файл томительно "вливается" в
медленный канал, любая наша активность в виде исходящих сообщений будет просто
добавляться в "хвост" потока, "голова" которого ещё "не пролезла" на сервер.
Причём из-за того, что потоки на приём и передачу — разные, несчастный
пользователь получает входящие сообщения (например, наблюдает активность в
чатах), но сам он до окончания передачи файла эффективно отстранён от активных
действий.

Вторую проблему с **SI/IBB** создаёт комбинация из поддержки сервером
Вторую проблему с **SI/IBB** создаёт комбинация из поддержки сервером ["офлайнового" хранения сообщений](http://www.xmpp.org/extensions/xep-0013.html) и ненадёжного соединения со стороны получателя файла. 
["офлайнового" хранения сообщений](http://www.xmpp.org/extensions/xep-0013.html)
и ненадёжного соединения со стороны получателя файла.

Офлайновое хранение сообщений является одним из самых полезных свойств любой
Офлайновое хранение сообщений является одним из самых полезных свойств любой системы быстрого обмена сообщениями: подключившись к серверу, клиент получает все текстовые сообщения, которые были ему посланы пока он не был "на линии". 
системы быстрого обмена сообщениями: подключившись к серверу, клиент получает
все текстовые сообщения, которые были ему посланы пока он не был "на линии".

Однако, представьте ситуацию: в момент передачи файла при помощи посылки
Однако, представьте ситуацию: в момент передачи файла при помощи посылки текстовых сообщений физический канал получателя даёт сбой. Сервер получателя через определённое (заметим, что довольно немаленькое) время осознаёт, что TCP/IP-соединение с клиентом разорвано. При этом сообщения, пришедшие за период от разрыва физического канала до разрыва логического, _теряются безвозвратно_ (сервер отсылает их, не зная, что клиент "отвалился"), а остальные начинают складываться в офлайновое хранилище. (Потеря сообщений, описанная только что, на самом деле имеет более широкие последствия, чем проблемы при передаче файлов: файлы мы шлём редко, а разговариваем постоянно, так что уверенность в доставке **всех** сообщений на любом, даже самом поганом соединении — жизненно важный вопрос.) 
текстовых сообщений физический канал получателя даёт сбой. Сервер получателя
через определённое (заметим, что довольно немаленькое) время осознаёт, что
TCP/IP-соединение с клиентом разорвано. При этом сообщения, пришедшие за период
от разрыва физического канала до разрыва логического, _теряются безвозвратно_
(сервер отсылает их, не зная, что клиент "отвалился"), а остальные начинают
складываться в офлайновое хранилище. (Потеря сообщений, описанная только что,
на самом деле имеет более широкие последствия, чем проблемы при передаче
файлов: файлы мы шлём редко, а разговариваем постоянно, так что уверенность в
доставке **всех** сообщений на любом, даже самом поганом соединении — жизненно
важный вопрос.)

Вновь подключившийся к серверу клиент, принимавший файл, ничего "не помнит" про
Вновь подключившийся к серверу клиент, принимавший файл, ничего "не помнит" про имевший место приём файла (**SI/IBB** не поддерживает докачку), но несмотря на это, сервер начинает передавать клиенту все поступившие за время отсутствия клиента текстовые сообщения, которыми вполне может оказаться "долившийся" за это время длинный файл. Эти сообщения будут выбрасываться клиентом (так как они не относятся ни к какому логическому каналу передачи файлов), но никакой возможности "не скачивать" такие сообщения у клиента нет. На медленном канале визуально это выглядит как "подвиснувший" Ткаббер при активности на приёмном устройстве. 
имевший место приём файла (**SI/IBB** не поддерживает докачку), но несмотря на
это, сервер начинает передавать клиенту все поступившие за время отсутствия
клиента текстовые сообщения, которыми вполне может оказаться "долившийся" за
это время длинный файл. Эти сообщения будут выбрасываться клиентом (так как они
не относятся ни к какому логическому каналу передачи файлов), но никакой
возможности "не скачивать" такие сообщения у клиента нет. На медленном канале
визуально это выглядит как "подвиснувший" Ткаббер при активности на приёмном
устройстве.

О реализации в существующих Jabber-серверах неких "умных" алгоритмов особой
О реализации в существующих Jabber-серверах неких "умных" алгоритмов особой обработки текстовых сообщений в подобных случаях нам ничего неизвестно; судя по-всему, их нет. 
обработки текстовых сообщений в подобных случаях нам ничего неизвестно; судя
по-всему, их нет.

#### <a id="Почему_полезен_IQ"></a>Почему полезен IQ
### <a id="Почему_полезен_IQ"></a>Почему полезен IQ

Второй разновидностью "движка" для внутриканальной посылки файлов является
использование механизма IQ-запросов, которые предназначены для получения
Второй разновидностью "движка" для внутриканальной посылки файлов является использование механизма IQ-запросов, которые предназначены для получения всевозможной информации об участниках XMPP-сети. 
всевозможной информации об участниках XMPP-сети.

Главное (и в нашем случае принципиальное) отличие семантики сообщений с
Главное (и в нашем случае принципиальное) отличие семантики сообщений с IQ-запросами от текстовых сообщений  заключается в том, что IQ-запросы _подразумевают_ получение ответов на себя. То есть в нормальных условиях на каждый IQ-запрос должен придти _соответствующий ему_ IQ-ответ. Таким образом, используя этот механизм  для передачи файлов, мы получаем доставку с подтверждением каждого пакета, которыми будет представлен файл при передаче. 
IQ-запросами от текстовых сообщений  заключается в том, что IQ-запросы
_подразумевают_ получение ответов на себя. То есть в нормальных условиях на
каждый IQ-запрос должен придти _соответствующий ему_ IQ-ответ. Таким образом,
используя этот механизм  для передачи файлов, мы получаем доставку с
подтверждением каждого пакета, которыми будет представлен файл при передаче.

А этот простой факт одним махом решает обе проблемы, присущие простым текстовым
А этот простой факт одним махом решает обе проблемы, присущие простым текстовым сообщениям транспорта **SI/IBB**: 
сообщениям транспорта **SI/IBB**:

* Можно посылать следующий пакет с данными файла только после того, как принят
*  Можно посылать следующий пакет с данными файла только после того, как принят ответ-"подтверждение" на предыдущий, а значит, нет проблемы с "поглощением" файла системными буферами и всех проблем, которые оно тянет за собой; 
  ответ-"подтверждение" на предыдущий, а значит, нет проблемы с "поглощением"
  файла системными буферами и всех проблем, которые оно тянет за собой;
* IQ-запросы не имеют смысла, если клиент-адресат не подключен к серверу,
*  IQ-запросы не имеют смысла, если клиент-адресат не подключен к серверу, поэтому сервер "заворачивает" IQ-запросы в подобных случаях, удобно сообщая о появлении проблемы в нашем "канале передачи файла" — передающая сторона может просто прекратить передачу, приняв сообщение о такой ошибке. Проблемы с "ложным докачиванием файла" вновь подключившимся клиентом тоже не существует: IQ-запросы не попадают в офлайновое хранилище сообщений. 
  поэтому сервер "заворачивает" IQ-запросы в подобных случаях, удобно сообщая о
  появлении проблемы в нашем "канале передачи файла" — передающая сторона может
  просто прекратить передачу, приняв сообщение о такой ошибке. Проблемы с
  "ложным докачиванием файла" вновь подключившимся клиентом тоже не существует:
  IQ-запросы не попадают в офлайновое хранилище сообщений.

Итак, используя IQ-запросы вместо текстовых сообщений мы получаем:
Итак, используя IQ-запросы вместо текстовых сообщений мы получаем: "интерактивность" передачи файла (включая возможность "мультиплексирования" других действий, например, участия в чатах, с передачей файла), индикацию ошибок при передаче и отсутствие проблем на приёмном конце. 
"интерактивность" передачи файла (включая возможность "мультиплексирования"
других действий, например, участия в чатах, с передачей файла), индикацию
ошибок при передаче и отсутствие проблем на приёмном конце.

У каждой палки, как известно, два конца, поэтому за удобство приходится
У каждой палки, как известно, два конца, поэтому за удобство приходится расплачиваться: 
расплачиваться:

* Увеличение общего трафика за счёт пакетов-"подтверждений";
* Механизм, использующий текстовые сообщения, _потенциально_ способен
  "прокачивать" информацию с более высокой скоростью за счёт отсутствия
  ожидания пакетов-"подтверждений", то есть IQ-пересылка в силу своей природы
  должна работать медленнее.
*  Увеличение общего трафика за счёт пакетов-"подтверждений"; 
*  Механизм, использующий текстовые сообщения, _потенциально_ способен "прокачивать" информацию с более высокой скоростью за счёт отсутствия ожидания пакетов-"подтверждений", то есть IQ-пересылка в силу своей природы должна работать медленнее. 

В реальной жизни никакого преимущества в скорости не выходит по двум причинам: 

*  Как правило, на Jabber-серверах имеет место ограничение на максимальную скорость клиентских потоков — так называемый "шейпинг" ("traffic shaping"), и это ограничение весьма серьёзно (ведь даже очень быстро набирающий текст человек не способен превысить порог в десяток символов за секунду, так что скорость потока можно смело ограничивать весьма сильно); 
*  Медленный канал вроде модема "съедает" различия в скорости даже при полном отсутствии ограничений на сервере. 

Одним словом, внутриканальная передача файлов на основе IQ-запросов — выбор пользователей с высоким IQ :) 

### <a id="Доступные_транспорты_на_основе_IQ-запросов"></a>Доступные транспорты на основе IQ-запросов
В реальной жизни никакого преимущества в скорости не выходит по двум причинам:

Увы, современная ситуация с такими транспортами не вполне хороша. 

* Как правило, на Jabber-серверах имеет место ограничение на максимальную
  скорость клиентских потоков — так называемый "шейпинг" ("traffic shaping"), и
  это ограничение весьма серьёзно (ведь даже очень быстро набирающий текст
  человек не способен превысить порог в десяток символов за секунду, так что
  скорость потока можно смело ограничивать весьма сильно);
* Медленный канал вроде модема "съедает" различия в скорости даже при полном
  отсутствии ограничений на сервере.

Одним словом, внутриканальная передача файлов на основе IQ-запросов — выбор
пользователей с высоким IQ :)

#### <a id="Доступные_транспорты_на_основе_IQ-запросов"></a>Доступные транспорты на основе IQ-запросов

Увы, современная ситуация с такими транспортами не вполне хороша.

Текущая стабильная версия Ткаббера (0.9.9) реализует "устаревший" транспорт
Текущая стабильная версия Ткаббера (0.9.9) реализует "устаревший" транспорт **Jidlink/IBB**, а текущая альфа-версия реализует экспериментальный (и пока что нестандартный) транспорт **SI/IQIBB**. Оба транспорта используют IQ-запросы в качестве движка и оба успешно решают проблемы, присущие стандартному транспорту **SI/IBB**. 
**Jidlink/IBB**, а текущая альфа-версия реализует экспериментальный (и пока что
нестандартный) транспорт **SI/IQIBB**. Оба транспорта используют IQ-запросы в
качестве движка и оба успешно решают проблемы, присущие стандартному транспорту
**SI/IBB**.

Статус описанных протоколов таков:
Статус описанных протоколов таков: 

* **Jidlink** официально отвергнут комитетом XMPP после некоторой стадии
  "обкатки", и стандартом теперь считается группа протоколов **SI**. Другими
*  **Jidlink** официально отвергнут комитетом XMPP после некоторой стадии "обкатки", и стандартом теперь считается группа протоколов **SI**. Другими словами, **Jidlink** "административно мёртв". Это означает, что вряд ли стоит ожидать появления поддержки этого протокола в новых Jabber-клиентах, да и среди "старых" по-видимому только Ткаббер его поддерживает. 
  словами, **Jidlink** "административно мёртв". Это означает, что вряд ли стоит
  ожидать появления поддержки этого протокола в новых Jabber-клиентах, да и
  среди "старых" по-видимому только Ткаббер его поддерживает.
* **SI/IQIBB** это попытка Сергея Голованя "подружить" удачную конструктивную
*  **SI/IQIBB** это попытка Сергея Голованя "подружить" удачную конструктивную идею **Jidlink/IBB** и стандартность **SI**. Данный протокол пока что существует только в виде экспериментальной реализации в Ткаббере, его, как и **Jidlink**, нет в других клиентах, и пока что никто не нашёл времени и сил составить официальную заявку в комитет XMPP на регистрацю и "обкатку" этого протокола. 
  идею **Jidlink/IBB** и стандартность **SI**. Данный протокол пока что
  существует только в виде экспериментальной реализации в Ткаббере, его, как и
  **Jidlink**, нет в других клиентах, и пока что никто не нашёл времени и сил
  составить официальную заявку в комитет XMPP на регистрацю и "обкатку" этого
  протокола.

Ситуацию, однако, не следует считать такой уж плачевной: в конце концов на
связке Ткаббер-Ткаббер хорошо работает любой из этих протоколов, а механизм
Ситуацию, однако, не следует считать такой уж плачевной: в конце концов на связке Ткаббер-Ткаббер хорошо работает любой из этих протоколов, а механизм рукопожатия из **SI** проигнорирует **SI/IQIBB** при попытке установления SI-соединения с другим клиентом. 
рукопожатия из **SI** проигнорирует **SI/IQIBB** при попытке установления
SI-соединения с другим клиентом.

Вы можете помочь продвижению "правильных" протоколов в массы двумя способами:
Вы можете помочь продвижению "правильных" протоколов в массы двумя способами: 

* Пересаживайте всех на Ткаббер (ну, это понятно),
* Помогите с составлением заявки в комитет XMPP :)
*  Пересаживайте всех на Ткаббер (ну, это понятно), 
*  Помогите с составлением заявки в комитет XMPP :) 

## <a id="Это_всё_хорошо_но_что_выбрать_для_моего_соединения"></a>Это всё хорошо, но что выбрать для *моего* соединения?
![(!)](../images/Hammer.png) **Сделать:** написать
# <a id="Это_всё_хорошо_но_что_выбрать_для_моего_соединения__"></a>Это всё хорошо, но что выбрать для моего соединения?__
![(!)](../images/Hammer.png) **Сделать:** написать 

## <a id="Благодарности"></a>Благодарности
Бо́льшую часть технических деталей о протоколах и их реализации автору объяснил
# <a id="Благодарности"></a>Благодарности
Бо́льшую часть технических деталей о протоколах и их реализации автору объяснил Сергей Головань `xmpp:sgolovan@nes.ru` — один из разработчиков Ткаббера. 
Сергей Головань `xmpp:sgolovan@nes.ru` — один из разработчиков Ткаббера.

## <a id="Скучные_сугубо_технические_ссылки"></a>Скучные сугубо технические ссылки
* [Главный Сайт Протокола XMPP](http://www.xmpp.org/). Здесь находятся ссылки
# <a id="Скучные_сугубо_технические_ссылки"></a>Скучные сугубо технические ссылки
*  [Главный Сайт Протокола XMPP](http://www.xmpp.org/). Здесь находятся ссылки на всю информацию, касающуюся протокола XMPP. 
  на всю информацию, касающуюся протокола XMPP.
* [Список XEPs](http://www.xmpp.org/extensions/). _XEP_ это _XMPP Enhancement
  Proposal — Предложение по Расширению протокола XMPP._
   * [In-Band Bytestreams (IBB)](http://www.xmpp.org/extensions/xep-0047.html)
   * [Потоки байтов SOCKS5](http://www.xmpp.org/extensions/xep-0065.html)
   * [Out of Band Data (OOB)](http://www.xmpp.org/extensions/xep-0066.html)
   * [Stream Initiation (SI)](http://www.xmpp.org/extensions/xep-0095.html)
   * [Передача файлов на основе SI](http://www.xmpp.org/extensions/xep-0096.html)
* Старые XEP'ы, имеющие отношение к **Jidlink**:
   * [Reliable Entity Link (REL)](http://www.xmpp.org/extensions/xep-0041.html) —
*  [Список XEPs](http://www.xmpp.org/extensions/). _XEP_ это _XMPP Enhancement Proposal — Предложение по Расширению протокола XMPP._ 
 *  [In-Band Bytestreams (IBB)](http://www.xmpp.org/extensions/xep-0047.html) 
 *  [Потоки байтов SOCKS5](http://www.xmpp.org/extensions/xep-0065.html) 
 *  [Out of Band Data (OOB)](http://www.xmpp.org/extensions/xep-0066.html) 
 *  [Stream Initiation (SI)](http://www.xmpp.org/extensions/xep-0095.html) 
 *  [Передача файлов на основе SI](http://www.xmpp.org/extensions/xep-0096.html) 
 
*  Старые XEP'ы, имеющие отношение к **Jidlink**: 
 *  [Reliable Entity Link (REL)](http://www.xmpp.org/extensions/xep-0041.html) — бывший **Jidlink.** Этот XEP является устаревшим. 
     бывший **Jidlink.** Этот XEP является устаревшим.
   * [Список ревизий JEP-0041](http://www.xmpp.org/cgi-bin/viewcvs.cgi/cvs/jeps/0041/jep-0041.xml).
 *  [Список ревизий JEP-0041](http://www.xmpp.org/cgi-bin/viewcvs.cgi/cvs/jeps/0041/jep-0041.xml). Переименование **Jidlink** в **REL** произошло [между версиями 1.10 и 1.11 этого документа](http://www.xmpp.org/cgi-bin/viewcvs.cgi/cvs/jeps/0041/jep-0041.xml?r1=1.10&r2=1.11). 
     Переименование **Jidlink** в **REL** произошло
     [между версиями 1.10 и 1.11 этого документа](http://www.xmpp.org/cgi-bin/viewcvs.cgi/cvs/jeps/0041/jep-0041.xml?r1=1.10&r2=1.11).
   * [Direct TCP (DTCP)](http://www.xmpp.org/extensions/xep-0046.html) —
     один из транспортов, которые использует **Jidlink.** Этот XEP является устаревшим.
 *  [Direct TCP (DTCP)](http://www.xmpp.org/extensions/xep-0046.html) — один из транспортов, которые использует **Jidlink.** Этот XEP является устаревшим. 
   * [Jidlink file transfer](http://www.xmpp.org/cgi-bin/viewcvs.cgi/cvs/jeps/0052/jep-0052.xml);
     реализация в Ткаббере основана на версии 1.4 этого документа.
   * [Feature Negotiation](http://www.xmpp.org/extensions/xep-0020.html)
     используется **Jidlink'ом** в ходе рукопожатия.
 *  [Jidlink file transfer](http://www.xmpp.org/cgi-bin/viewcvs.cgi/cvs/jeps/0052/jep-0052.xml); реализация в Ткаббере основана на версии 1.4 этого документа. 
 *  [Feature Negotiation](http://www.xmpp.org/extensions/xep-0020.html) используется **Jidlink'ом** в ходе рукопожатия 


Changes to wiki/ru/Плагины.md.

1

2
3
4
5
6
7

8
9
10
11
12
13
14
15
16
17
18





19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38



















39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58



















59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98







































99
100
101


102
103

104
105

106
107

108
109
110


111
112

113
114
115
116
117
118
119
120
121
122

123
124
125
126

127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150

151
152

153
154
155
156
157

158
159
160
161
162
163

164
165
166
167
168
169
170

171
172
173
174
175
176

177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196

197
198
199

200
201
202
203
204
205

206
207

208
209
210
211
212

213
214
215
216

217
218
219

220
221
222
223
224
225
226

227
228

229
230
231
232
233
234

235
236
237
238
239
240
241

242
243
244

245
246
247
248

249
250
251
252

253
254

255
256

257
258

259
260

261
262

263
264

265
266

267
268
269
270
271
272

273
274
275
276
277

278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297

298
299

300
301
302
303
304
305

306
307
308
309
310
311
312

313
314

315
316
317
318
319
320
321


322
323
324
325

326
327
328
329

330
331
332
333
334

335
336

337
338

339
340
341


342
343

344
345

346
347
348


349
350
351
352


353
354
355

356
357

358
359

360
361

362
363
364

365
366
367
368

369
370
371
372

373
374
375
376
377
378
379
380

381
382
383

384
385
386


387
388

389
390
391
392
393
394

395
396
397
398

399
400

401
402

403
404
405

406
407

408
409

410
411
412

413
414
415
416



417
418

419
420
421
422
423

424
425

426
427
428
429

430
431
432
433
434
435

436
437
438
439

440
441
442

443
444

445
446
447
448

449
450
451
452
453
454
455

456
457

458
459

460
461

462
463

464
465

466
467
468

469
470
471
472
473
474
475
476
477






478

479
480

481
482

483
484

485
486
487
488

489
490
491
492
493
494
495
496
497
498
499
500
501

502
503

504
505

506
507
508
509
510

511
512
513

514
515
516

517
518
519
520
521

522
523
524

525
526

527
528

529
530
531

532
533
534
535
536
537
538
539

540
541

542
543
544

545
546
547
548
549
550


551
552
553
554


555
556
557
558
559





560
561
562
563

564
565
566

567
568

569
570

571
572
573
574
575
576

577
578

579
580
581

582
583
584
585
586

587
588

589
590

591
592

593
594

595
596

597
598

599
600
601

602
603

604
605

606
607

608
609

610
611

612
613

614
615
616
617
618

619
620

621
622

623
624
625
626
627
628
629
630




631
632

633
634
635
636
637
638
639

640
641

642
643

644
645

646
647
648
649

650
651

652
653
654
655
656
657

658
659
660
661
662
663



664
665

666
667
668
669

670
671

672
673

674
675
676
677
678
679
680




681
682

683
684

685
686

687
688
689


690

691
692

693
694
695

696
697

698
699

700
701

702
703
704
705

706
707
708

709
710
711
712
713
714
715
716
717
718
719
720
721

722
723

724
725

726
727
728
729

730
731

732
733

734
735
736
737
738
739
740
741
742

743
744

745
746

747
748

749
750

751
752
753
754
755
756
757

758
759
760
761
762
763

764
765
766

767
768

769
770

771
772

773
774


775
776
777

778
779


780
781

782
783
784
785
786
787
788

789
790
791

792
793
794

795
796

797
798
799
800
801
802
803

804
805

806
807

808
809

810
811

812
813

814
815

816
817
818
819
820
821

822
823
824
825
826
827
828

829
830
831
832

833
834
835
836

837
838
839

840
841

842
843
844

845
846
847
848

849
850
851
852

853
854
855

856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872

873
874

875
876

877
878

879
880

881
882

883
884
885
886
887
888
889

890
891
892
893

894
895

896
897
898
899
900

901
902
903
904
905
906
907
908

909
910
911
912

913
914
915


916
917
918
919

920
921
922


923
924

925
926
927
928
929

930
931
932
933
934
935
936


937
938

939
940
941
942

943
944

945
946
947
948

949
950
951
952
953


954
955

956
957

958
959

960
961
962
963
964
965
966

967
968
969
970

971
972
973
974
975

976
977
978
979

980
981

982
983

984
985

986
987

988
989

990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007

1008
1009
1010
1011

1012
1013
1014
1015
1016

1017
1018

1019
1020

1021
1022
1023
1024
1025
1026




1027
1028

1029
1030

1031
1032

1033
1034
1035
1036
1037
1038
1039

1040
1041

1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053







1054
1055
1056

1057
1058
1059



1060
1061
1062
1063



1064
1065
1066
1067



1068
1069
1070
1071



1072
1073
1074
1075



1076
1077
1078
1079
1080
1081
1082
1083
1084
1085





1086
1087
1088
1089



1090
1091
1092



1093
1094

1095
1096

1097
1098
1099
1100

1101
1102

1103
1104

1105
1106

1107
1108

1109
1110
1111
1112

1113
1114

1115
1116

1117
1118
1119
1120

1121
1122
1123
1124
1125
1126
1127
1128
1129
1130

1131
1132
1133


1134
1135
1136
1137

1138
1139
1140
1141
1142
1143
1144




1145

1146
1147
1148
1149

1150
1151
1152
1153
1154

1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165

1166
1167
1168
1169

1170
1171
1172

1173
1174
1175

1176
1177
1178
1179

1180
1181

1182
1183

1184
1185
1186
1187
1188
1189

1190

1191

1192
1193

1194
1195

1196
1197

1198
1199
1200

1201
1202
1203

1204
1205

1206
1207
1208
1209
1210
1211
1212
1213
1214
1215

1216
1217
1218
1219
1220
1221
1222
1223

1224
1225

1226
1227

1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258

1259
1260

1261
1262

1263
1264

1265
1266
1267
1268
1269
1270

1271
1272
1273
1274

1275
1276
1277

1278

1279

1280
1281

1282
1283

1284
1285

1286
1287
1288
1289

1290
1291
1292
1293
1294
1295
1296
1297
1298

1299
1300
1301
1302
1303
1304
1305
1306
1307

1308
1309
1310
1311
1312
1313
1314
1315

1316

1317

1318
1319

1320
1321

1322
1323

1324
1325

1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337

1338
1339
1340
1341
1342

1343
1344
1345
1346

1347
1348
1349
1350

1351
1352
1353
1354
1355

1356
1357
1358
1359

1360
1361
1362
1363

1364
1365
1366
1367

1368
1369

1370
1371
1372
1373
1374
1375

1376
1377
1378
1379

1380

1381

1382
1383

1384
1385

1386
1387

1388
1389

1390
1391

1392
1393

1394
1395

1396
1397
1398

1399
1400

1401
1402
1403
1404
1405
1406








1407
1408

1409
1410

1411
1412

1413
1414
1415


1416
1417
1418
1419

1420
1421

1422
1423
1424
1425
1426
1427

1428
1429

1430
1431
1432
1433
1434
1435

1436
1437

1438
1439
1440

1441
1442
1443
1444
1445
1446

1447
1448
1449

1450
1451
1452
1453

1454
1455

1456
1457
1458
1459

1460
1461

1462
1463
1464


1465
1466
1467
1468
1469
1470





1471
1472

1473
1474
1475
1476
1477

1478
1479

1480
1481

1482
1483

1484
1485

1486
1487

1488
1489
1490
1491
1492


1493
1494

1495
1496

1497
1498
1499

1500
1501
1502
1503

1504
1505
1506


1507
1508

1509
1510
1511
1512


1513
1514

1515
1516
1517

1518
1519

1520
1521

1522
1523

1524
1525

1526
1527

1528
1529
1530
1531
1532


1533
1534

1535
1536

1537
1538

1539
1540
1541


1542

1543
1544
1545
1546
1547

1548
1549

1550
1551

1552
1553

1554
1555
1556

1557
1558

1559
1560

1561
1562

1563
1564
1565
1566

1567
1568
1569
1570
1571
1572

1573
1574

1575
1576

1577
1578

1579
1580

1581
1582
1583

1584
1585
1586


1587

1588
1589
1590

1591
1592

1593
1594

1595
1596

1597
1598

1599
1600
1601
1602

1603
1604

1605
1606

1607
1608
1609

1610
1611


1612
1613

1614
1615

1616
1617

1618
1619
1620

1621
1622

1623
1624

1625
1626

1627
1628
1629

1630
1631
1632

1633
1634

1635
1636

1637
1638

1639
1640

1641
1642

1643
1644

1645
1646
1647
1648
1649
1650
1651

1652
1653
1654
1655


1656
1657

1658
1659

1660
1661
1662

1663
1664
1665
1666

1667
1668
1669

1670
1671

1672
1673

1674
1675
1676


1677
1678

1679
1680

1681
1682

1683
1684

1685
1686

1687
1688

1689
1690
1691
1692
1693

1694
1695
1696
1697
1698
1699
1700

1701
1702
1703
1704
1705
1706

1707
1708

1709
1710
1711
1712
1713
1714
1715
1716

1717
1718

1719
1720
1721

1722
1723
1724
1725

1726
1727
1728

1729
1730
1731
1732
1733

1734
1735
1736
1737
1738
1739

1740
1741

1742
1743

1744
1745

1746
1747
1748
1749
1750
1751

1752
1753
1754
1755
1756
1757

1758
1759

1760
1761

1762
1763

1764
1765

1766
1767
1768
1769

1770
1771

1772
1773

1774
1775

1776
1777

1778
1779
1780

1781
1782

1783
1784
1785


1786

1787
1788

1789
1790
1791
1792
1793

1794
1795

1796
1797

1798
1799

1800
1801

1802
1803

1804
1805
1806
1807

1808
1809

1810
1811

1812
1813

1814
1815

1816
1817
1818
1819
1820
1821

1822
1823

1824
1825

1826
1827
1828
1829

1830
1831
1832
1833
1834

1835
1836
1837
1838

1839
1840

1841
1842

1843
1844
1845
1846


1847
1848

1849
1850
1851

1852
1853
1854

1855
1856

1857
1858
1859
1860

1861
1862

1863
1864

1865
1866

1867
1868

1869
1870
1871


1872
1873

1874
1875

1876
1877

1878
1879

1880
1881
1882

1883
1884
1885
1886
1887

1888
1889

1890
1891
1892
1893
1894
1895
1896

1897
1898
1899

1900
1901

1902
1903

1904
1905

1906
1907

1908


1909

1910
1911

1912
1913
1914
1915

1916
1917
1918
1919

1920
1921

1922
1923
1924
1925
1926

1927
1928
1929

1930
1931

1932
1933

1934
1935

1936
1937

1938
1939

1940
1941
1942
1943

1944
1945

1946
1947

1948
1949

1950
1951
1952
1953

1954
1955

1956
1957

1958
1959
1960

1961
1962

1963
1964

1965
1966
1967

1968
1969

1970
1971

1972
1973

1974
1975

1976
1977
1978
1979
1980

1981
1982

1983
1984

1985
1986
1987
1988
1989
1990
1991
1992

1993
1994

1995
1996

1997
1998
1999


2000
2001
2002

2003
2004

2005
2006

2007
2008

2009
2010

2011
2012
2013
2014
2015
2016


2017
2018

2019
2020
2021

2022
2023
2024
2025

2026
2027
2028
2029
2030
2031

2032
2033

2034
2035

2036
2037

2038
2039

2040
2041
2042
2043

2044
2045
2046

2047
2048
2049

2050
2051
2052

2053
2054
2055
2056


2057
2058
2059

2060
2061
2062
2063
2064

2065
2066

2067
2068
2069
2070



2071
2072

2073
2074

2075
2076

2077
2078
2079
2080
2081

2082
2083
2084
2085

2086
2087
2088
2089


2090
2091
2092

2093
2094

2095
2096

2097
2098

2099
2100

2101
2102
2103
2104



2105
2106

2107
2108
2109
2110

2111
2112

2113
2114
2115
2116

2117
2118

2119
2120

2121
2122

2123
2124
2125
2126
2127
2128


2129
2130

2131
2132

2133
2134

2135
2136
2137
2138

2139
2140
2141


2142
2143

2144
2145

2146
2147

2148
2149
2150
2151
2152
2153
2154
2155



2156
2157

2158
2159

2160
2161

2162
2163
2164

2165
2166
2167
2168
2169
2170
2171
2172
2173


2174
2175

2176
2177

2178
2179

2180
2181

2182
2183

2184
2185
2186
2187
2188
2189

2190
2191

2192
2193

2194
2195

2196
2197
2198


2199

2200
2201
2202
2203

2204
2205

2206
2207

2208
2209
2210
2211
2212
2213


2214
2215

2216
2217

2218
2219

2220
2221
2222

2223
2224

2225
2226
2227
2228
2229

2230
2231

2232
2233

2234
2235

2236
2237

2238
2239

2240
2241

2242
2243

2244
2245

2246
2247

2248
2249

2250
2251
2252

2253
2254
2255
2256

2257
2258

2259
2260

2261
2262
2263
2264

2265
2266

2267
2268

2269
2270

2271
2272

2273
2274

2275
2276
2277

2278
2279

2280
2281

2282
2283

2284
2285
2286

2287
2288
2289
2290

2291
2292
2293
2294

2295
2296
2297
2298
2299

2300
2301

2302
2303

2304
2305

2306
2307



1
2
3
4
5
6
7

8


9
10
11
12





13
14
15
16
17
18



















19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38



















39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58







































59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98


99
100
101

102
103

104
105

106
107


108
109
110

111






112
113
114

115


116

117







118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133

134
135

136



137

138


139
140
141

142



143
144
145

146




147

148















149
150
151
152

153

154

155




156

157
158

159



160

161


162

163

164

165





166

167
168

169




170

171





172

173

174

175


176

177




178


179


180
181

182


183


184


185


186



187


188



189

190

191








192




193
194
195
196

197
198

199




200

201





202

203
204

205




206


207
208


209

210

211


212



213

214


215


216



217
218


219


220



221
222




223
224



225


226


227


228



229




230


231

232






233

234



235
236


237
238
239

240




241

242


243

244
245

246

247
248
249


250
251

252

253
254
255


256

257


258
259
260
261

262



263

264
265

266
267
268
269

270

271
272
273
274

275
276
277
278

279

280

281
282

283
284
285
286

287
288
289
290
291
292
293

294
295

296
297

298
299

300
301

302
303

304

305

306








307
308
309
310
311
312
313

314
315

316
317

318
319

320


321

322











323

324
325

326
327

328


329


330



331

332

333


334


335



336


337


338



339






340

341
342

343

344

345
346
347
348
349


350
351




352
353





354
355
356
357
358

359


360
361


362
363

364
365

366




367

368
369

370

371

372



373

374
375

376
377

378
379

380
381

382
383

384
385

386

387

388
389

390
391

392
393

394
395

396
397

398
399

400



401

402
403

404
405

406








407
408
409
410
411

412





413

414
415

416
417

418
419

420


421

422
423

424




425

426


427



428
429
430
431

432

433


434
435

436
437

438







439
440
441
442
443

444
445

446
447

448


449
450
451

452
453

454

455

456
457

458
459

460
461

462


463

464

465

466
467
468
469
470
471
472
473
474
475
476
477
478

479
480

481
482

483
484
485
486

487
488

489
490

491



492
493
494
495
496

497
498

499
500

501
502

503
504

505





506

507




508

509

510

511
512

513
514

515
516

517
518
519
520
521
522
523
524
525


526
527
528

529


530
531
532
533

534

535

536

537

538
539

540





541

542
543

544
545

546
547

548
549

550
551

552
553

554




555

556




557


558




559


560

561
562


563


564

565

566


567

568


569

570

571

572















573

574
575

576
577

578
579

580
581

582
583

584





585

586


587

588
589

590



591

592






593

594
595
596
597

598
599


600
601




602
603


604
605
606

607



608

609




610


611
612
613

614
615
616
617

618
619

620


621

622

623
624


625
626
627

628
629

630
631

632





633

634

635


636



637

638
639
640
641

642
643

644
645

646
647

648
649

650
651

652
















653

654


655

656

657
658
659

660
661

662


663



664


665
666
667
668
669

670
671

672
673

674





675

676
677

678


679
680
681







682
683
684
685
686
687
688
689
690

691
692


693
694
695

696


697
698
699
700



701
702
703
704



705
706
707

708


709
710
711




712





713
714
715
716
717
718



719
720
721
722


723
724
725
726

727
728

729


730

731
732

733
734

735
736

737
738

739
740
741
742

743
744

745
746

747


748

749








750

751
752


753
754

755


756






757
758
759
760
761

762


763

764





765









766

767


768

769

770

771
772


773
774
775
776

777
778

779
780

781




782

783
784
785

786
787

788
789

790
791

792

793

794
795


796
797

798








799

800




801
802
803

804
805

806
807

808





809

























810
811

812
813

814
815

816


817
818
819

820
821
822
823

824

825

826
827
828

829
830

831
832

833
834

835


836

837







838

839







840

841






842

843
844
845

846
847

848
849

850
851

852
853

854










855

856
857
858
859
860

861
862
863
864

865
866
867
868

869



870

871


872

873
874
875
876

877

878
879

880
881

882




883

884
885
886
887

888
889
890

891
892

893
894

895
896

897
898

899
900

901
902

903
904

905

906

907
908

909






910
911
912
913
914
915
916
917
918

919
920

921
922

923
924


925
926


927

928
929

930




931

932
933

934


935
936
937

938
939

940

941

942


943
944
945

946

947

948
949
950
951

952
953

954




955
956

957
958


959
960






961
962
963
964
965


966



967

968
969

970
971

972
973

974
975

976
977

978


979


980
981
982

983
984

985

986

987


988

989
990


991
992
993

994
995



996
997


998

999

1000
1001

1002
1003

1004
1005

1006
1007

1008
1009

1010


1011


1012
1013
1014

1015
1016

1017
1018

1019
1020
1021
1022
1023
1024

1025



1026

1027
1028

1029
1030

1031
1032

1033

1034

1035
1036

1037
1038

1039
1040

1041


1042

1043




1044

1045
1046

1047
1048

1049
1050

1051
1052

1053

1054

1055
1056
1057
1058
1059
1060

1061

1062

1063
1064

1065
1066

1067
1068

1069
1070

1071


1072

1073
1074

1075
1076

1077


1078
1079


1080
1081
1082

1083
1084

1085
1086

1087

1088

1089
1090

1091
1092

1093
1094

1095

1096

1097

1098

1099
1100

1101
1102

1103
1104

1105
1106

1107
1108

1109
1110

1111





1112

1113

1114


1115
1116
1117

1118
1119

1120

1121

1122




1123

1124

1125
1126

1127
1128

1129
1130


1131
1132
1133

1134
1135

1136
1137

1138
1139

1140
1141

1142
1143

1144



1145

1146
1147
1148
1149
1150
1151
1152

1153
1154
1155
1156
1157
1158

1159
1160

1161
1162
1163
1164
1165
1166
1167
1168

1169
1170

1171
1172
1173

1174
1175
1176
1177

1178
1179
1180

1181
1182
1183
1184
1185

1186
1187
1188
1189
1190
1191

1192
1193

1194
1195

1196
1197

1198




1199

1200




1201

1202
1203

1204
1205

1206
1207

1208
1209

1210


1211

1212
1213

1214
1215

1216
1217

1218
1219

1220

1221

1222
1223

1224


1225
1226
1227

1228
1229

1230



1231

1232
1233

1234
1235

1236
1237

1238
1239

1240
1241

1242


1243

1244
1245

1246
1247

1248
1249

1250
1251

1252




1253

1254
1255

1256
1257

1258


1259

1260



1261

1262


1263

1264
1265

1266


1267




1268
1269


1270

1271

1272

1273

1274
1275

1276
1277
1278
1279

1280
1281

1282
1283

1284
1285

1286


1287



1288
1289
1290

1291
1292

1293
1294

1295
1296

1297
1298


1299



1300

1301
1302

1303
1304






1305

1306

1307
1308

1309
1310

1311
1312

1313
1314

1315
1316
1317
1318

1319
1320

1321


1322

1323


1324

1325
1326

1327



1328

1329

1330

1331
1332

1333


1334
1335

1336
1337

1338
1339

1340


1341

1342
1343

1344
1345

1346
1347

1348
1349
1350
1351

1352
1353

1354
1355

1356

1357

1358


1359
1360

1361

1362

1363
1364

1365
1366

1367
1368

1369
1370

1371





1372
1373

1374
1375

1376






1377

1378
1379

1380


1381



1382
1383



1384


1385


1386


1387


1388






1389
1390


1391

1392

1393


1394

1395




1396

1397
1398

1399
1400

1401
1402

1403
1404

1405


1406

1407

1408

1409

1410

1411
1412


1413

1414


1415
1416
1417


1418



1419

1420
1421

1422
1423



1424
1425
1426
1427

1428
1429

1430
1431

1432



1433

1434


1435

1436
1437
1438


1439
1440
1441
1442

1443
1444

1445
1446

1447


1448


1449




1450
1451
1452


1453


1454

1455
1456

1457


1458

1459
1460

1461
1462

1463
1464

1465



1466


1467
1468
1469

1470
1471

1472
1473

1474

1475


1476



1477
1478
1479

1480
1481

1482
1483

1484




1485



1486
1487
1488
1489

1490
1491

1492
1493

1494
1495


1496






1497


1498
1499
1500

1501
1502

1503
1504

1505
1506

1507
1508

1509




1510

1511
1512

1513
1514

1515
1516

1517
1518


1519
1520

1521
1522



1523
1524

1525
1526

1527



1528


1529
1530
1531

1532
1533

1534
1535

1536

1537

1538
1539

1540



1541

1542
1543

1544
1545

1546
1547

1548
1549

1550
1551

1552
1553

1554
1555

1556
1557

1558
1559

1560
1561

1562
1563


1564


1565

1566
1567

1568
1569

1570


1571

1572


1573
1574

1575
1576

1577
1578

1579
1580

1581

1582

1583
1584

1585
1586

1587
1588

1589
1590


1591


1592

1593


1594

1595



1596

1597
1598

1599
1600

1601
1602

1603
1604

1605
1606
1607

+





-
+
-
-




-
-
-
-
-
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
+
+

-
+

-
+

-
+

-
-
+
+

-
+
-
-
-
-
-
-



-
+
-
-

-
+
-
-
-
-
-
-
-
















-
+

-
+
-
-
-

-
+
-
-



-
+
-
-
-



-
+
-
-
-
-

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-




-
+
-

-
+
-
-
-
-

-
+

-
+
-
-
-

-
+
-
-

-
+
-

-
+
-
-
-
-
-

-
+

-
+
-
-
-
-

-
+
-
-
-
-
-

-
+
-

-
+
-
-

-
+
-
-
-
-
+
-
-
+
-
-
+

-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
-

-
-
+
-
-
-

-
+
-

-
-
-
-
-
-
-
-

-
-
-
-




-
+

-
+
-
-
-
-

-
+
-
-
-
-
-

-
+

-
+
-
-
-
-

-
-
+
+
-
-

-
+
-

-
-
+
-
-
-

-
+
-
-
+
-
-
+
-
-
-
+
+
-
-
+
-
-
+
-
-
-
+
+
-
-
-
-
+
+
-
-
-
+
-
-
+
-
-
+
-
-
+
-
-
-
+
-
-
-
-
+
-
-

-
+
-
-
-
-
-
-

-
+
-
-
-
+

-
-
+
+

-
+
-
-
-
-

-
+
-
-

-
+

-
+
-

+

-
-
+

-
+
-

+

-
-
+
-

-
-
+
+
+

-
+
-
-
-

-
+

-
+



-
+
-




-
+



-
+
-

-
+

-
+



-
+






-
+

-
+

-
+

-
+

-
+

-
+
-

-
+
-
-
-
-
-
-
-
-

+
+
+
+
+
+
-
+

-
+

-
+

-
+
-
-

-
+
-
-
-
-
-
-
-
-
-
-
-

-
+

-
+

-
+
-
-

-
-
+
-
-
-
+
-

-
+
-
-

-
-
+
-
-
-
+
-
-
+
-
-
+
-
-
-
+
-
-
-
-
-
-

-
+

-
+
-

-
+




-
-
+
+
-
-
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-

-
-
+

-
-
+

-
+

-
+
-
-
-
-

-
+

-
+
-

-
+
-
-
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-
-
-

-
+

-
+

-
+
-
-
-
-
-
-
-
-
+
+
+
+

-
+
-
-
-
-
-

-
+

-
+

-
+

-
+
-
-

-
+

-
+
-
-
-
-

-
+
-
-

-
-
-
+
+
+

-
+
-

-
-
+

-
+

-
+
-
-
-
-
-
-
-
+
+
+
+

-
+

-
+

-
+
-
-

+
+
-
+

-
+
-

-
+

-
+

-
+

-
+
-
-

-
+
-

-
+












-
+

-
+

-
+



-
+

-
+

-
+
-
-
-





-
+

-
+

-
+

-
+

-
+
-
-
-
-
-

-
+
-
-
-
-

-
+
-

-
+

-
+

-
+

-
+


+
+



+
-
-
+
+

-
+
-
-




-
+
-

-
+
-

-
+

-
+
-
-
-
-
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-
-
-
-

-
+
-
-
-
-

-
-
+
-
-
-
-
+
-
-

-
+

-
-
+
-
-
+
-

-
+
-
-

-
+
-
-

-
+
-

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
+

-
+

-
+

-
+

-
+

-
+
-
-
-
-
-

-
+
-
-

-
+

-
+
-
-
-

-
+
-
-
-
-
-
-

-
+



-
+

-
-
+
+
-
-
-
-
+

-
-
+
+

-
+
-
-
-

-
+
-
-
-
-

-
-
+
+

-
+



-
+

-
+
-
-

-
+
-


-
-
+
+

-
+

-
+

-
+
-
-
-
-
-

-
+
-

-
-
+
-
-
-

-
+



-
+

-
+

-
+

-
+

-
+

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
+
-
-

-
+
-



-
+

-
+
-
-
+
-
-
-

-
-
+
+
+
+

-
+

-
+

-
+
-
-
-
-
-

-
+

-
+
-
-



-
-
-
-
-
-
-
+
+
+
+
+
+
+


-
+

-
-
+
+
+
-

-
-
+
+
+

-
-
-
+
+
+

-
-
-
+
+
+
-

-
-
+
+
+
-
-
-
-

-
-
-
-
-
+
+
+
+
+

-
-
-
+
+
+

-
-
+
+
+

-
+

-
+
-
-

-
+

-
+

-
+

-
+

-
+



-
+

-
+

-
+
-
-

-
+
-
-
-
-
-
-
-
-

-
+

-
-
+
+
-

-
-
+
-
-
-
-
-
-

+
+
+
+
-
+
-
-

-
+
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-

-
+
-
-

-
+
-

-
+

-
-
+



-
+

-
+

-
+
-
-
-
-

-
+

+
-
+

-
+

-
+

-
+
-

-
+

-
-
+

-
+
-
-
-
-
-
-
-
-

-
+
-
-
-
-



-
+

-
+

-
+
-
-
-
-
-

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+

-
+

-
+

-
+
-
-



-
+



-
+
-

-
+

+
-
+

-
+

-
+

-
+
-
-

-
+
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-

-
+

+
-
+

-
+

-
+

-
+

-
+
-
-
-
-
-
-
-
-
-
-

-
+




-
+



-
+



-
+
-
-
-

-
+
-
-

-
+



-
+
-


-
+

-
+
-
-
-
-

-
+



-
+

+
-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+

-
+

-
+

-
+

-
-
+
+
-
-

-
+

-
+
-
-
-
-

-
+

-
+
-
-



-
+

-
+
-

-
+
-
-



-
+
-

-
+



-
+

-
+
-
-
-
-
+

-
+

-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
-
-
+
-
-
-

-
+

-
+

-
+

-
+

-
+

-
+
-
-

-
-
+
+

-
+

-
+
-

-
+
-
-

-
+

-
-
+
+

-
+

-
-
-
+
+
-
-
+
-

-
+

-
+

-
+

-
+

-
+

-
+
-
-

-
-
+
+

-
+

-
+

-
+



+
+
-
+
-
-
-

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+
-
-

-
+
-
-
-
-

-
+

-
+

-
+

-
+

-
+
-

-
+



+
+
-
+
-

-
+

-
+

-
+

-
+

-
+
-
-

-
+

-
+

-
+
-
-

+
-
-
+
+

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+
-

-
+
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-
-
-
-
-

-
+
-

-
-
+
+

-
+

-
+
-

-
+
-
-
-
-
+
-

-
+

-
+

-
+

-
-
+
+

-
+

-
+

-
+

-
+

-
+

-
+
-
-
-

-
+






-
+





-
+

-
+







-
+

-
+


-
+



-
+


-
+




-
+





-
+

-
+

-
+

-
+
-
-
-
-

-
+
-
-
-
-

-
+

-
+

-
+

-
+

-
+
-
-

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+
-
-

+
+
-
+

-
+
-
-
-

-
+

-
+

-
+

-
+

-
+

-
+
-
-

-
+

-
+

-
+

-
+

-
+
-
-
-
-

-
+

-
+

-
+
-
-

-
+
-
-
-

-
+
-
-

-
+

-
+
-
-
+
-
-
-
-
+
+
-
-
+
-

-
+
-

-
+

-
+



-
+

-
+

-
+

-
+
-
-
+
-
-
-
+
+

-
+

-
+

-
+

-
+

-
-
+
-
-
-

-
+

-
+

-
-
-
-
-
-
+
-

-
+

-
+

-
+

-
+

-
+

+
+
-
+

-
+
-
-

-
+
-
-

-
+

-
+
-
-
-

-
+
-

-
+

-
+
-
-
+

-
+

-
+

-
+
-
-

-
+

-
+

-
+

-
+



-
+

-
+

-
+
-

-
+
-
-
+

-
+
-

-
+

-
+

-
+

-
+

-
+
-
-
-
-
-
+

-
+

-
+
-
-
-
-
-
-

-
+

-
+
-
-
+
-
-
-
+
+
-
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
-
-
-
-
+
+
-
-
+
-

-
+
-
-

-
+
-
-
-
-

-
+

-
+

-
+

-
+

-
+
-
-

-
+
-

-
+
-

-
+

-
-
+
-

-
-
+
+

-
-
+
-
-
-

-
+

-
+

-
-
-
+
+
+

-
+

-
+

-
+
-
-
-

-
+
-
-

-
+


-
-
+
+


-
+

-
+

-
+
-
-
+
-
-
+
-
-
-
-
+
+
+
-
-
+
-
-

-
+

-
+
-
-

-
+

-
+

-
+

-
+
-
-
-

-
-
+
+

-
+

-
+

-
+
-

-
-
+
-
-
-
+
+

-
+

-
+

-
+
-
-
-
-

-
-
-
+
+
+

-
+

-
+

-
+

-
-
+
-
-
-
-
-
-

-
-
+
+

-
+

-
+

-
+

-
+

-
+
-
-
-
-

-
+

-
+

-
+

-
+

-
-
+
+
-
+

-
-
-
+

-
+

-
+
-
-
-

-
-
+
+

-
+

-
+

-
+
-

-
+

-
+
-
-
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
-
+
-
-

-
+

-
+

-
+
-
-

-
+
-
-
+

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+

-
-
+
-
-

-
+
-
-

-
+
-
-
-

-
+

-
+

-
+

-
+

-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Плагины/index.html)


# Плагины

Материал из Tkabber Wiki

![(!)](../images/Hammer.png) **Сделать:** вынести на отдельные странички
 ![(!)](../images/Hammer.png) **Сделать:** вынести на отдельные странички описания плагинов, превышающие по размерам половину экрана (примерно, конечно), оставив здесь лишь краткие пояснения и ссылки. 
описания плагинов, превышающие по размерам половину экрана (примерно, конечно),
оставив здесь лишь краткие пояснения и ссылки.

## <a id="toc"></a>Содержание

* [1 Плагинология](#Плагинология)
   * [1.1 Как подключить плагин](#Как_подключить_плагин)
   * [1.2 Подводные камни при обновлении Ткаббера](#Подводные_камни_при_обновлении_Ткаббера)
   * [1.3 Анатомия плагина](#Анатомия_плагина)
   * [1.4 Сисадмину на заметку](#Сисадмину_на_заметку)
   * [1.5 Советы разработчику плагинов](#Советы_разработчику_плагинов)
 * [1.1 Как подключить плагин](#Как_подключить_плагин)
 * [1.2 Подводные камни при обновлении Ткаббера](#Подводные_камни_при_обновлении_Ткаббера)
 * [1.3 Анатомия плагина](#Анатомия_плагина)
 * [1.4 Сисадмину на заметку](#Сисадмину_на_заметку)
 * [1.5 Советы разработчику плагинов](#Советы_разработчику_плагинов)
* [2 Официальные плагины для Ткаббера](#Официальные_плагины_для_Ткаббера)
   * [2.1 Abbrev](#Abbrev)
   * [2.2 Aniemoticons](#Aniemoticons)
   * [2.3 Attline](#Attline)
   * [2.4 Ctcomp](#Ctcomp)
   * [2.5 Custom URLs](#Custom_URLs)
   * [2.6 Floating Log](#Floating_Log)
   * [2.7 Floating Roster Contact](#Floating_Roster_Contact)
   * [2.8 Gmail Notifications](#Gmail_Notifications)
   * [2.9 Histool](#Histool)
   * [2.10 Open URL](#Open_URL)
   * [2.11 Presencecmd](#Presencecmd)
   * [2.12 Quote Last Message (quotelastmsg)](#Quote_Last_Message_quotelastmsg)
   * [2.13 Receipts](#Receipts)
   * [2.14 Recentstatus](#Recentstatus)
   * [2.15 Singularity](#Singularity)
   * [2.16 Stripes](#Stripes)
   * [2.17 Tclchat](#Tclchat)
   * [2.18 Tkabber-KHIM](#Tkabber-KHIM)
   * [2.19 Unixkeys](#Unixkeys)
 * [2.1 Abbrev](#Abbrev)
 * [2.2 Aniemoticons](#Aniemoticons)
 * [2.3 Attline](#Attline)
 * [2.4 Ctcomp](#Ctcomp)
 * [2.5 Custom URLs](#Custom_URLs)
 * [2.6 Floating Log](#Floating_Log)
 * [2.7 Floating Roster Contact](#Floating_Roster_Contact)
 * [2.8 Gmail Notifications](#Gmail_Notifications)
 * [2.9 Histool](#Histool)
 * [2.10 Open URL](#Open_URL)
 * [2.11 Presencecmd](#Presencecmd)
 * [2.12 Quote Last Message (quotelastmsg)](#Quote_Last_Message_quotelastmsg)
 * [2.13 Receipts](#Receipts)
 * [2.14 Recentstatus](#Recentstatus)
 * [2.15 Singularity](#Singularity)
 * [2.16 Stripes](#Stripes)
 * [2.17 Tclchat](#Tclchat)
 * [2.18 Tkabber-KHIM](#Tkabber-KHIM)
 * [2.19 Unixkeys](#Unixkeys)
* [3 Полуофициальные плагины для Ткаббера](#Полуофициальные_плагины_для_Ткаббера)
   * [3.1 Alarm](#Alarm)
   * [3.2 Antispam](#Antispam)
   * [3.3 Autoanswer](#Autoanswer)
   * [3.4 Autosubscribe](#Autosubscribe)
   * [3.5 Bldjid](#Bldjid)
   * [3.6 Customstatus](#Customstatus)
   * [3.7 Flip](#Flip)
   * [3.8 Green](#Green)
   * [3.9 Hidemuctopic](#Hidemuctopic)
   * [3.10 Juick](#Juick)
   * [3.11 Killerfeature](#Killerfeature)
   * [3.12 Notes](#Notes)
   * [3.13 Now Playing](#Now_Playing)
   * [3.14 Open History](#Open_History)
   * [3.15 Plugin Manager](#Plugin_Manager)
   * [3.16 Reminder](#Reminder)
   * [3.17 Snoopstatus](#Snoopstatus)
   * [3.18 Urgent](#Urgent)
   * [3.19 Urlcmd](#Urlcmd)
 * [3.1 Alarm](#Alarm)
 * [3.2 Antispam](#Antispam)
 * [3.3 Autoanswer](#Autoanswer)
 * [3.4 Autosubscribe](#Autosubscribe)
 * [3.5 Bldjid](#Bldjid)
 * [3.6 Customstatus](#Customstatus)
 * [3.7 Flip](#Flip)
 * [3.8 Green](#Green)
 * [3.9 Hidemuctopic](#Hidemuctopic)
 * [3.10 Juick](#Juick)
 * [3.11 Killerfeature](#Killerfeature)
 * [3.12 Notes](#Notes)
 * [3.13 Now Playing](#Now_Playing)
 * [3.14 Open History](#Open_History)
 * [3.15 Plugin Manager](#Plugin_Manager)
 * [3.16 Reminder](#Reminder)
 * [3.17 Snoopstatus](#Snoopstatus)
 * [3.18 Urgent](#Urgent)
 * [3.19 Urlcmd](#Urlcmd)
* [4 Неофициальные плагины](#Неофициальные_плагины)
   * [4.1 8bitgw](#8bitgw)
   * [4.2 Autoconnect](#Autoconnect)
   * [4.3 Autoraise](#Autoraise)
   * [4.4 Autoretrieve](#Autoretrieve)
   * [4.5 Bmuc](#Bmuc)
   * [4.6 Bookmarks](#Bookmarks)
   * [4.7 Chess-mod](#Chess-mod)
   * [4.8 Clienticons](#Clienticons)
   * [4.9 Confirm](#Confirm)
   * [4.10 CryptoConfig](#CryptoConfig)
   * [4.11 Cyrillize2](#Cyrillize2)
   * [4.12 Follownick](#Follownick)
   * [4.13 Goto (заготовка для плагина)](#Goto_заготовка_для_плагина)
   * [4.14 Hihglight XEP and RFC URLs](#Hihglight_XEP_and_RFC_URLs)
   * [4.15 Highlightex](#Highlightex)
   * [4.16 Histballoon](#Histballoon)
   * [4.17 Jdiskurl](#Jdiskurl)
   * [4.18 Last Activity](#Last_Activity)
   * [4.19 Meebo me](#Meebo_me)
   * [4.20 Mimetex](#Mimetex)
   * [4.21 Nickomp](#Nickomp)
   * [4.22 NickSaneColors](#NickSaneColors)
   * [4.23 OSD redux](#OSD_redux)
   * [4.24 Patches](#Patches)
   * [4.25 Postpone Text (добавлен в транк)](#Postpone_Text_добавлен_в_транк)
   * [4.26 Reject subscription](#Reject_subscription)
   * [4.27 Remote Commands](#Remote_Commands)
   * [4.28 Remote IP Address](#Remote_IP_Address)
   * [4.29 Remote Settings](#Remote_Settings)
   * [4.30 Roster Avatars](#Roster_Avatars)
   * [4.31 Rsssaver](#Rsssaver)
   * [4.32 Savebtn](#Savebtn)
   * [4.33 Server Info](#Server_Info)
   * [4.34 So\_keepalive](#So_keepalive)
   * [4.35 Spam filter](#Spam_filter)
   * [4.36 Tab number](#Tab_number)
   * [4.37 Tkabho](#Tkabho)
   * [4.38 Vcardavatars](#Vcardavatars)
   * [4.39 Wintweaks (устарел)](#Wintweaks_устарел)
 * [4.1 8bitgw](#8bitgw)
 * [4.2 Autoconnect](#Autoconnect)
 * [4.3 Autoraise](#Autoraise)
 * [4.4 Autoretrieve](#Autoretrieve)
 * [4.5 Bmuc](#Bmuc)
 * [4.6 Bookmarks](#Bookmarks)
 * [4.7 Chess-mod](#Chess-mod)
 * [4.8 Clienticons](#Clienticons)
 * [4.9 Confirm](#Confirm)
 * [4.10 CryptoConfig](#CryptoConfig)
 * [4.11 Cyrillize2](#Cyrillize2)
 * [4.12 Follownick](#Follownick)
 * [4.13 Goto (заготовка для плагина)](#Goto_заготовка_для_плагина)
 * [4.14 Hihglight XEP and RFC URLs](#Hihglight_XEP_and_RFC_URLs)
 * [4.15 Highlightex](#Highlightex)
 * [4.16 Histballoon](#Histballoon)
 * [4.17 Jdiskurl](#Jdiskurl)
 * [4.18 Last Activity](#Last_Activity)
 * [4.19 Meebo me](#Meebo_me)
 * [4.20 Mimetex](#Mimetex)
 * [4.21 Nickomp](#Nickomp)
 * [4.22 NickSaneColors](#NickSaneColors)
 * [4.23 OSD redux](#OSD_redux)
 * [4.24 Patches](#Patches)
 * [4.25 Postpone Text (добавлен в транк)](#Postpone_Text_добавлен_в_транк)
 * [4.26 Reject subscription](#Reject_subscription)
 * [4.27 Remote Commands](#Remote_Commands)
 * [4.28 Remote IP Address](#Remote_IP_Address)
 * [4.29 Remote Settings](#Remote_Settings)
 * [4.30 Roster Avatars](#Roster_Avatars)
 * [4.31 Rsssaver](#Rsssaver)
 * [4.32 Savebtn](#Savebtn)
 * [4.33 Server Info](#Server_Info)
 * [4.34 So\_keepalive](#So_keepalive)
 * [4.35 Spam filter](#Spam_filter)
 * [4.36 Tab number](#Tab_number)
 * [4.37 Tkabho](#Tkabho)
 * [4.38 Vcardavatars](#Vcardavatars)
 * [4.39 Wintweaks (устарел)](#Wintweaks_устарел)

## <a id="Плагинология"></a>Плагинология
В этом разделе рассказано о внешних плагинах Ткаббера.
# <a id="Плагинология"></a>Плагинология
В этом разделе рассказано о внешних плагинах Ткаббера. 

Если вы — новичок, прочитайте как минимум первые два раздела.
Если вы — новичок, прочитайте как минимум первые два раздела. 

### <a id="Как_подключить_плагин"></a>Как подключить плагин
## <a id="Как_подключить_плагин"></a>Как подключить плагин

При старте Ткаббер ищет плагины в двух местах и в указанном порядке:
При старте Ткаббер ищет плагины в двух местах и в указанном порядке: 

1. Каталог, имя которого находится в переменной окружения **TKABBER\_SITE\_PLUGINS**
1. Каталог **[$::configdir]($__configdir.md)/plugins**
1.  Каталог, имя которого находится в переменной окружения TKABBER\_SITE\_PLUGINS 
1.  Каталог [$::configdir]($__configdir.md)/plugins 

Любой из этих каталогов (в том числе оба) могут отсутствовать. Первый из них,
Любой из этих каталогов (в том числе оба) могут отсутствовать. Первый из них, как и следует из названия соответствующей переменной окружения, предназначен для использования плагинов всеми пользователями системы, в то время как второй — конкретным пользователем (то есть лично вами). Строго говоря, переменную окружения можно установить не на уровне системы, а для конкретного пользователя, что несколько гибче. К тому же её вообще можно просто прописать в конфиге: 
как и следует из названия соответствующей переменной окружения, предназначен
для использования плагинов всеми пользователями системы, в то время как второй
— конкретным пользователем (то есть лично вами). Строго говоря, переменную
окружения можно установить не на уровне системы, а для конкретного
пользователя, что несколько гибче. К тому же её вообще можно просто прописать в
конфиге:

    set env(TKABBER_SITE_PLUGINS) Q:/Path/To/TkabberPluginsDirectory

Обратите внимание на прямые слэши, а ещё лучше — ознакомьтесь сначала с
Обратите внимание на прямые слэши, а ещё лучше — ознакомьтесь сначала с [этим небольшим отрывком](Config.tcl.md#Немного_о_синтаксисе_тикля) из статьи про конфиг. 
[**этим небольшим отрывком**](Config.tcl.md#Немного_о_синтаксисе_тикля) из статьи про
конфиг.

Физически плагин Ткаббера представляет собой _каталог_ с файлами, который
Физически плагин Ткаббера представляет собой _каталог_ с файлами, который следует скопировать в любую из указанных выше директорий (но только в одну из них). Заметьте, что копировать надо каталог целиком, а не файлы из него; кроме того, каталог плагина нельзя переименовывать (об этом — ниже). И ещё надо учесть, что в каталоге plugins должны лежать непосредственно директории с плагинами, и ничего в промежутке, например, если вы работаете в системе как Vasya Pupkin, и решили поставить плагины attline, georoster и chess, то если вы всё сделали правильно, вы должны получить такую структуру каталогов: 
следует скопировать в любую из указанных выше директорий (но только в одну из
них). Заметьте, что копировать надо каталог целиком, а не файлы из него; кроме
того, каталог плагина нельзя переименовывать (об этом — ниже). И ещё надо
учесть, что в каталоге **plugins** должны лежать непосредственно директории с
плагинами, и ничего в промежутке, например, если вы работаете в системе как
Vasya Pupkin, и решили поставить плагины **attline**, **georoster** и **chess**,
то если вы всё сделали правильно, вы должны получить такую структуру каталогов:

    C:\Documents and Settings\
      Vasya Pupkin\
        Application Data\
          Tkabber\
            plugins\
              attline\
                attline.tcl
                ...
              chess\
                chess.tcl
                ...
              georoster\
                georoster.tcl
                ...

Добавленный плагин Ткаббер загрузит при следующем старте.
Добавленный плагин Ткаббер загрузит при следующем старте. 

**На заметку:** как ни странно, но некоторых пользователей на поприще
**На заметку:** как ни странно, но некоторых пользователей на поприще подключения плагина останавливало отсутствие каталога `plugins` в домашнем каталоге Ткаббера. Это — совершенно нормальное явление; если такого каталога нет, создайте его. 
подключения плагина останавливало отсутствие каталога `plugins` в домашнем
каталоге Ткаббера. Это — совершенно нормальное явление; если такого каталога
нет, создайте его.

**На заметку:** не обязательно копировать каталог с плагином из дистрибутива в
**На заметку:** не обязательно копировать каталог с плагином из дистрибутива в [$::configdir]($__configdir.md)/plugins — вполне можно сделать [символическую ссылку](Symlinks.md), например, такую: 
**[$::configdir]($__configdir.md)/plugins** — вполне можно сделать
[**символическую ссылку**](Symlinks.md), например, такую:

    ~/.tkabber/plugins/latex → /usr/local/share/tkabber-svn/tkabber-plugins/latex

Имейте в виду, что Ткаббер не спускается в подкаталоги при поиске плагинов,
Имейте в виду, что Ткаббер не спускается в подкаталоги при поиске плагинов, поэтому не имеет смысла линковать  сам каталог с плагинами из дистрибутива _под_ какой-либо каталог плагинов Ткаббера. Зато вполне можно его _заместить,_ создав симлинк, например, так: 
поэтому не имеет смысла линковать  сам каталог с плагинами из дистрибутива
_под_ какой-либо каталог плагинов Ткаббера. Зато вполне можно его _заместить,_
создав симлинк, например, так:

    ~/.tkabber/plugins → /usr/local/share/tkabber-svn/tkabber-plugins

Такой способ, однако, весьма негибок, так как для установки внешних плагинов
Такой способ, однако, весьма негибок, так как для установки внешних плагинов Ткаббера вам, во-первых, потребуется иметь право на запись в каталог плагинов дистрибутива, а во-вторых, хранить "левые" плагины вместе с поставляемыми с дистрибутивом — не совсем правильно (и может помешать обновлению этого каталога из репозитория). 
Ткаббера вам, во-первых, потребуется иметь право на запись в каталог плагинов
дистрибутива, а во-вторых, хранить "левые" плагины вместе с поставляемыми с
дистрибутивом — не совсем правильно (и может помешать обновлению этого каталога
из репозитория).

**Внимание:** с появлением в составе Ткаббера так называемого Менеджера
**Внимание:** с появлением в составе Ткаббера так называемого Менеджера плагинов (в настройках выглядит как кнопка Plugins Management) очень многие пользователи (и автор этих строк в том числе) забывают после установки плагина включить его в этом самом Менеджере. Там всё просто и быстро. Идём в вышеозначенное место, ищем плагин, включаем галочку, сохраняем изменения. Всё. Плагин на ходу загружается и работает. При "горячем" отключении, кстати, он _не выгружается из памяти,_ а просто выключается (его функциональность становится недоступной). Если точнее, кое-что всё-таки выгружается, и это зависит от автора (впрочем, полная выгрузка плагинов на данный момент пока невозможна). Естественно, не все плагины можно включить-выключить таким способом, а лишь те, чьи авторы об этом позаботились. Очень желательно поэтому, когда вы выкладываете сюда свой плагин, оборудованный этой возможностью, напоминать пользователям, чтобы после установки они пошли в Менеджер и включили плагин, потому что _по умолчанию Ткаббер их не подключает._ Имеется шаблон для вики, позволяющий вставлять в текст статьи хорошо заметную надпись. В нужное место (лучше всего в самом начале) следует поместить следующий код разметки: 
плагинов (в настройках выглядит как кнопка "Plugins Management") очень многие
пользователи (и автор этих строк в том числе) забывают после установки плагина
включить его в этом самом Менеджере. Там всё просто и быстро. Идём в
вышеозначенное место, ищем плагин, включаем галочку, сохраняем изменения. Всё.
Плагин на ходу загружается и работает. При "горячем" отключении, кстати, он _не
выгружается из памяти,_ а просто выключается (его функциональность становится
недоступной). Если точнее, кое-что всё-таки выгружается, и это зависит от
автора (впрочем, полная выгрузка плагинов на данный момент пока невозможна).
Естественно, не все плагины можно включить-выключить таким способом, а лишь те,
чьи авторы об этом позаботились. Очень желательно поэтому, когда вы
выкладываете сюда свой плагин, оборудованный этой возможностью, напоминать
пользователям, чтобы после установки они пошли в Менеджер и включили плагин,
потому что _по умолчанию Ткаббер их не подключает._ Имеется шаблон для вики,
позволяющий вставлять в текст статьи хорошо заметную надпись. В нужное место
(лучше всего в самом начале) следует поместить следующий код разметки:

    == My Plugin ==
    {{plugmgr}}

Выглядеть надпись будет так: ![(!)](../images/Ok_icon.png) **Включить в
Выглядеть надпись будет так: ![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 
Менеджере плагинов **

Пользователям, желающим установить себе такой плагин, следует помнить, что
Пользователям, желающим установить себе такой плагин, следует помнить, что Менеджер плагинов имеется лишь в svn-версии Ткаббера (а если точнее, его не имеется в 0.11.1 и более древних версиях — есть надежда, что 0.12 всё же выйдет, и, кстати, выйдет она не раньше, чем _все_ плагины будут снабжены возможностью динамической загрузки/выгрузки). 
Менеджер плагинов имеется лишь в svn-версии Ткаббера (а если точнее, его не
имеется в 0.11.1 и более древних версиях — есть надежда, что 0.12 всё же
выйдет, и, кстати, выйдет она не раньше, чем _все_ плагины будут снабжены
возможностью динамической загрузки/выгрузки).

### <a id="Подводные_камни_при_обновлении_Ткаббера"></a>Подводные камни при обновлении Ткаббера
## <a id="Подводные_камни_при_обновлении_Ткаббера"></a>Подводные камни при обновлении Ткаббера

Имейте в виду, что большинство плагинов Ткаббера "привязаны" к конкретному
Имейте в виду, что большинство плагинов Ткаббера "привязаны" к конкретному релизу этой программы, так как они используют различные программные интерфейсы Ткаббера, а те имеют тенденцию изменяться со временем. При подобных изменениях в Ткаббере, его плагины тоже обновляются. 
релизу этой программы, так как они используют различные программные интерфейсы
Ткаббера, а те имеют тенденцию изменяться со временем. При подобных изменениях
в Ткаббере, его плагины тоже обновляются.

Это означает, что обновляя Ткаббер, — не важно, "снимаете" ли вы копию из
Это означает, что обновляя Ткаббер, — не важно, "снимаете" ли вы копию из репозитория или устанавливаете следующий стабильный релиз — нужно всегда помнить про установленные плагины и обновлять их вместе с Ткаббером. 
репозитория или устанавливаете следующий стабильный релиз — нужно всегда
помнить про установленные плагины и обновлять их вместе с Ткаббером.

Невнимание к этому факту порождает 99% проблем из серии "после обновления
Невнимание к этому факту порождает 99% проблем из серии "после обновления Ткаббер сыплет ошибками". Обновите плагины и перезапустите Ткаббер. 
Ткаббер сыплет ошибками". Обновите плагины и перезапустите Ткаббер.

**На заметку:** иногда возникает обратная проблема: вы даёте плагин от "свежей"
**На заметку:** иногда возникает обратная проблема: вы даёте плагин от "свежей" версии Ткаббера своему товарищу с более старой версией этой программы, и там он не работает. Решением проблемы, если обновление Ткаббера невозможно, является установка плагинов от соответствующей более старой версии Ткаббера, которые доступны вместе со своими плагинами [здесь](http://jabberstudio.org/projects/tkabber/releases/). 
версии Ткаббера своему товарищу с более старой версией этой программы, и там он
не работает. Решением проблемы, если обновление Ткаббера невозможно, является
установка плагинов от соответствующей более старой версии Ткаббера, которые
доступны вместе со своими плагинами
[здесь](http://jabberstudio.org/projects/tkabber/releases/).

### <a id="Анатомия_плагина"></a>Анатомия плагина
## <a id="Анатомия_плагина"></a>Анатомия плагина

В простейшем случае каталог плагина содержит один-единственный файл формата
В простейшем случае каталог плагина содержит один-единственный файл формата ".tcl", имя которого совпадает с именем каталога; именно этот файл Ткаббер читает при загрузке плагина. Если в каталоге есть другие файлы .tcl, то они загружаются, как правило, главным файлом плагина или вообще служат для какой-то другой цели. 
".tcl", имя которого совпадает с именем каталога; именно этот файл Ткаббер
читает при загрузке плагина. Если в каталоге есть другие файлы **.tcl**, то они
загружаются, как правило, главным файлом плагина или вообще служат для какой-то
другой цели.

Вообще же, только главный файл плагина присутствует всегда, а остальное
Вообще же, только главный файл плагина присутствует всегда, а остальное содержимое каталога плагина может быть в принципе любым. Зачастую там есть документация (например, файл README), которую, конечно же, стоит изучить. Также там могут быть различные данные, используемые плагином, например, в плагинах игр, использующих графику (шахматы, шашки), можно найти ещё подкаталог pixmaps, где хранятся изображения доски и фигур. 
содержимое каталога плагина может быть в принципе любым. Зачастую там есть
документация (например, файл README), которую, конечно же, стоит изучить. Также
там могут быть различные данные, используемые плагином, например, в плагинах
игр, использующих графику (шахматы, шашки), можно найти ещё подкаталог **pixmaps**,
где хранятся изображения доски и фигур.

Однако два подкаталога, которые могут вам встретиться внутри плагина, стоит
Однако два подкаталога, которые могут вам встретиться внутри плагина, стоит рассмотреть подробнее. 
рассмотреть подробнее.

Каталог **msgs**, если есть, содержит переводы текстовых ресурсов плагина (текста
Каталог msgs, если есть, содержит переводы текстовых ресурсов плагина (текста сообщений и т.п.) на языки, отличные от английского. Этот каталог может быть интересен с двух точек зрения: 
сообщений и т.п.) на языки, отличные от английского. Этот каталог может быть
интересен с двух точек зрения:

* Во-первых, вы можете захотеть, чтобы плагин использовал язык, отличный от
*  Во-первых, вы можете захотеть, чтобы плагин использовал язык, отличный от языка интерфейса Ткаббера. В этом случае пойдите в главный файл плагина, отыщите там строчку с командой 
   языка интерфейса Ткаббера. В этом случае пойдите в главный файл плагина,
   отыщите там строчку с командой

        ::msgcat::mcload ...
    ::msgcat::mcload ...

    (это загрузка каталогов с текстовыми ресурсами) и окружите её строчками:
 (это загрузка каталогов с текстовыми ресурсами) и окружите её строчками: 

        set orig [::msgcat::mclocale]
    set orig [::msgcat::mclocale]

        ::msgcat::mclocale LC
    ::msgcat::mclocale LC

    сверху и
 сверху и 

        ::msgcat::mclocale $orig
    ::msgcat::mclocale $orig

    — снизу. Вместо "LC" должна быть интересующая вас локаль (например, ru,
 — снизу. Вместо "LC" должна быть интересующая вас локаль (например, ru, uk, es и т.д.). 
    uk, es и т.д.).
* Во-вторых, каталог **msgs** — это именно то, что вам нужно менять, если
*  Во-вторых, каталог **msgs** — это именно то, что вам нужно менять, если вы хотите "перевести" плагин на какой-либо другой язык или исправить уже имеющийся перевод. Подробнее о технике перевода текстовых ресурсов Tcl рассказано [тут](Tkabber_Wiki_Справка.md#Локализация_Ткаббера). 
  вы хотите "перевести" плагин на какой-либо другой язык или исправить уже
  имеющийся перевод. Подробнее о технике перевода текстовых ресурсов Tcl
  рассказано [**тут**](Tkabber_Wiki_Справка.md#Локализация_Ткаббера).

Каталог **.svn**, если есть, содержит техническую информацию системы контроля
версий Subversion, которая используется при разработке Ткаббера. Обычно такой
Каталог .svn, если есть, содержит техническую информацию системы контроля версий Subversion, которая используется при разработке Ткаббера. Обычно такой каталог у вас появляется в каждом подкаталоге плагинов, которые вы "вынули" из репозитория Ткаббера (об этом рассказано ниже, в разделе "Стандартные плагины"). 
каталог у вас появляется в каждом подкаталоге плагинов, которые вы "вынули" из
репозитория Ткаббера (об этом рассказано ниже, в разделе "Стандартные
плагины").

В принципе, этот каталог можно удалить (т.к. он фактически содержит копии всех
В принципе, этот каталог можно удалить (т.к. он фактически содержит копии всех файлов плагина + служебные файлы Subversion), но он может и пригодиться. 
файлов плагина + служебные файлы Subversion), но он может и пригодиться.

Дело в том, что после того, как вы получили из репозитория Subversion рабочую
копию проекта, содержащего каталоги (и подкаталоги, и подкаталоги
подкаталогов...), каждый из этих каталогов (и глубже) технически способен
обновляться из репозитория независмо от остальных частей рабочей копии! Говоря
проще, если вы "вынули" из репозитория все плагины, но используете лишь
пару-тройку из них, вы можете обновлять из репозитория их и только их, просто
выполняя команду

    svn update

в каталогах этих плагинов. Причём сам каталог с плагином может при этом
находиться где угодно — например, быть установленным в один из директориев для
плагинов Ткаббера. Вот так можно обновить плагин "whiteboard":

    $ cd ~/.tkabber/plugins/whiteboard
    $ svn up

### <a id="Сисадмину_на_заметку"></a>Сисадмину на заметку
## <a id="Сисадмину_на_заметку"></a>Сисадмину на заметку

Системным администраторам следует иметь в виду, что подавляющее большинство
Системным администраторам следует иметь в виду, что подавляющее большинство плагинов Ткаббера не имеет средств для своего отключения в процессе работы, то есть для отключения плагина следует удалить его каталог и перезапустить Ткаббер. Поэтому нужно вдумчиво подходить к установке плагинов в "общий" каталог. 
плагинов Ткаббера не имеет средств для своего отключения в процессе работы, то
есть для отключения плагина следует удалить его каталог и перезапустить
Ткаббер. Поэтому нужно вдумчиво подходить к установке плагинов в "общий"
каталог.

**Примечание:** Начиная с марта 2009 года ведутся работы по переводу плагинов
**Примечание:** Начиная с марта 2009 года ведутся работы по переводу плагинов на динамические рельсы — теперь в Настройках появился пункт **Plugin Management**, где вы можете включить или выключить нужный вам плагин прямо на ходу (естественно, если он уже переведён на эти самые рельсы). Но надо полагать, в новом стабильном релизе Ткаббера по крайней мере все официальные плагины можно будет загружать/выгружать динамически. 
на динамические рельсы — теперь в Настройках появился пункт **Plugin
Management**, где вы можете включить или выключить нужный вам плагин прямо на
ходу (естественно, если он уже переведён на эти самые рельсы). Но надо
полагать, в новом стабильном релизе Ткаббера по крайней мере все официальные
плагины можно будет загружать/выгружать динамически.

### <a id="Советы_разработчику_плагинов"></a>Советы разработчику плагинов
## <a id="Советы_разработчику_плагинов"></a>Советы разработчику плагинов

Если вы хотите попробовать свои силы в написании плагина, но не знаете, с
Если вы хотите попробовать свои силы в написании плагина, но не знаете, с чего начать, возможно, вам поможет [статья с некоторыми рекомендациями разработчику](Разработка_плагинов.md). Она далека от идеала и не претендует на полноту освещения этой темы, но кое-какие идеи вам даст. 
чего начать, возможно, вам поможет
[**статья с некоторыми рекомендациями разработчику**](Разработка_плагинов.md).
Она далека от идеала и не претендует на полноту освещения этой темы, но
кое-какие идеи вам даст.

## <a id="Официальные_плагины_для_Ткаббера"></a>Официальные плагины для Ткаббера
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** Почти все эти
# <a id="Официальные_плагины_для_Ткаббера"></a>Официальные плагины для Ткаббера
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** Почти все эти плагины можно и нужно включать через Менеджер плагинов (за исключением, разве что, osd, latex и Tkabber-khim (последний уже намертво прикручен к Ткабберу)). 
плагины можно и нужно включать через Менеджер плагинов (за исключением, разве
что, osd, latex и Tkabber-khim (последний уже намертво прикручен к Ткабберу)).

В этом разделе ничего принципиально нового не будет — сводка по существующим
В этом разделе ничего принципиально нового не будет — сводка по существующим плагинам и краткое вспомоществование для желающих скачать и установить их. 
плагинам и краткое вспомоществование для желающих скачать и установить их.

Итак, на сегодняшний день на
[официальной странице плагинов](http://tkabber.jabber.ru/tkabber-plugins)
Итак, на сегодняшний день на [официальной странице плагинов](http://tkabber.jabber.ru/tkabber-plugins) насчитывается 17 расширений к Ткабберу: bc, checkers, chess, cyrillize, ejabberd, georoster, mute, osd, reversi, socials, spy и whiteboard. В двух словах о каждом: 
насчитывается 17 расширений к Ткабберу: bc, checkers, chess, cyrillize,
ejabberd, georoster, mute, osd, reversi, socials, spy и whiteboard. В двух
словах о каждом:

1. bc — игра ["Быки и коровы"](http://games.look.ru/bc/). Управление
1.  bc — игра ["Быки и коровы"](http://games.look.ru/bc/). Управление командами: /bcstart /bcstop /bcnext /bctop 
   командами: /bcstart /bcstop /bcnext /bctop
1. checkers — шашки (включает разные версии: обычные, русские, американские,
1.  checkers — шашки (включает разные версии: обычные, русские, американские, испанские и итальянские). Плагин весьма проработан - есть много игровых возможностей. 
   испанские и итальянские). Плагин весьма проработан - есть много игровых возможностей.
1. chess — шахматы. Тоже весьма продвинут.
1.  chess — шахматы. Тоже весьма продвинут. 
1. cyrillize — если при вводе сообщения вы ошиблись раскладкой, дело
   можно поправить, нажав Ctrl+'.
1. ejabberd — утилитка, позволяющая удалённо общаться с вашим ejabberd
1.  cyrillize — если при вводе сообщения вы ошиблись раскладкой, дело можно поправить, нажав Ctrl+'. 
1.  ejabberd — утилитка, позволяющая удалённо общаться с вашим ejabberd сервером. 
   сервером.
1. georoster — показывает на карте мира, где находятся ваши собеседники
1.  georoster — показывает на карте мира, где находятся ваши собеседники (если у них заполнены соответствующие поля в vCard). 
   (если у них заполнены соответствующие поля в vCard).
1. mute — экспериментальный плагин для коллективного редактирования
1.  mute — экспериментальный плагин для коллективного редактирования текста. 
   текста.
1. poker — техасский покер (Texas hold'em).
1. osd — выводит некоторые события и сообщения "на широком экране" —
1.  poker — техасский покер (Texas hold'em). 
1.  osd — выводит некоторые события и сообщения "на широком экране" — On-Screen Display. Про его минимальную настройку можно почитать [тут](http://vonderer.blogspot.com/2007/02/tkabber.html). 
   On-Screen Display. Про его минимальную настройку можно почитать
   [тут](http://vonderer.blogspot.com/2007/02/tkabber.html).
1. reversi — ещё одна настольная игра.
1. socials — позволяет вводить команды типа **/танцевать** (результат
1.  reversi — ещё одна настольная игра. 
1.  socials — позволяет вводить команды типа **/танцевать** (результат будет такой: **\*nick пляшет дикий танец!**). 
   будет такой: **\*nick пляшет дикий танец!**).
1. spy — шпионит за присутствием, регистрируя появления в онлайне и
   уходы в оффлайн. Можно выбрать конкретного человека или нескольких и
1.  spy — шпионит за присутствием, регистрируя появления в онлайне и уходы в оффлайн. Можно выбрать конкретного человека или нескольких и получать оповещения при их появлении. 
   получать оповещения при их появлении.
1. whiteboard — доска для рисования. Удобно, когда надо нарисовать схему
1.  whiteboard — доска для рисования. Удобно, когда надо нарисовать схему проезда к месту <s>распития пива</s> оффлайновой Jabber-тусовки ;) 
   проезда к месту <s>распития пива</s> оффлайновой Jabber-тусовки ;)
1. debug — он и в Африке отладчик, пишет в лог ошибки касательно
1.  debug — он и в Африке отладчик, пишет в лог ошибки касательно отмеченных ключевых слов. 
   отмеченных ключевых слов.
1. latex — показывает формулы, написанные в формате LaTeX, в виде
1.  latex — показывает формулы, написанные в формате LaTeX, в виде картинок-математических формул. Работает под Windows и \*nix. Нужно дополнительно установить пакеты latex, dvips, imagemagick. 
   картинок-математических формул. Работает под Windows и \*nix. Нужно
   дополнительно установить пакеты latex, dvips, imagemagick.
1. traffic — считает количество байт в несжатом, незашифрованном XML
1.  traffic — считает количество байт в несжатом, незашифрованном XML потоке. Группирует по JID-у отправителя и по типу станцы. [Читать подробнее.](Low_traffic_HOWTO.md#Средства_самоконтроля) 
   потоке. Группирует по JID-у отправителя и по типу станцы.
   [**Читать подробнее**](Low_traffic_HOWTO.md#Средства_самоконтроля).
1. [**Tkabber-KHIM**](#Tkabber-KHIM) — позволяет вводить в Ткаббере
   произвольные символы Unicode значительно более удобным способом,
1.  [Tkabber-KHIM](Плагины.md#Tkabber-KHIM) — позволяет вводить в Ткаббере произвольные символы Unicode значительно более удобным способом, чем при помощи встроенного механизма ["unisymbols"](Ткаббер_ЧаВо.md#Ввод_хитрых_юникодных_символов). 
   чем при помощи встроенного механизма
   [**"unisymbols"**](Ткаббер_ЧаВо.md#Ввод_хитрых_юникодных_символов).

В версию [0.11.0](http://tkabber.jabber.ru/node/464) было интегрировано
В версию [0.11.0](http://tkabber.jabber.ru/node/464) было интегрировано несколько плагинов: attline, ctcomp, custom-urls, floatinglog, gmail, openurl, presencecmd, receipts и unixkeys. Краткие справки о них доступны [здесь](http://www.jabber.ru/node/893) и [здесь](http://www.jabber.ru/node/641). Некоторые из них подробнее освещены ниже. ![(!)](../images/Hammer.png) **Сделать:** перенести краткое опиcание из статьи на j.r. сюда 
несколько плагинов: attline, ctcomp, custom-urls, floatinglog, gmail, openurl,
presencecmd, receipts и unixkeys. Краткие справки о них доступны
[здесь](http://www.jabber.ru/node/893) и
[здесь](http://www.jabber.ru/node/641). Некоторые из них подробнее освещены
ниже. ![(!)](../images/Hammer.png) **Сделать:** перенести краткое опиcание из
статьи на j.r. сюда

Установить самый свежий пакет плагинов можно из SVN. Для этого необходимо
Установить самый свежий пакет плагинов можно из SVN. Для этого необходимо проделать [следующее](http://tkabber.jabber.ru/svn) (естественно, у вас должен быть установлен пакет svn): 
проделать [следующее](http://tkabber.jabber.ru/svn) (естественно, у вас должен
быть установлен пакет svn):

`
    svn co http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins tkabber-plugins

### <a id="Abbrev"></a>Abbrev
`
## <a id="Abbrev"></a>Abbrev

> **Внимание!** Этот плагин находится в транке в качестве _встроенного_
 **Внимание!** Этот плагин находится в транке в качестве _встроенного_ средства начиная с ревизии 994 (3 Марта 2007). Интерфейс управления не изменился; несущественно изменился формат вывода информации командами плагина. _**Изменился** механизм раскрытия сокращений:_ во встроенном плагине сокращения раскрываются вводом Shift-space. 
  средства начиная с ревизии 994 (3 Марта 2007). Интерфейс управления не
  изменился; несущественно изменился формат вывода информации командами
  плагина. _**Изменился** механизм раскрытия сокращений:_ во встроенном плагине
  сокращения раскрываются вводом Shift-space.

Этот плагин добавляет возможность для управления "сокращениями"  на письме,
Этот плагин добавляет возможность для управления "сокращениями"  на письме, позволяя, к примеру, динамически разворачивать слово "днк" на письме в "дезоксирибонуклеиновая кислота". 
позволяя, к примеру, динамически разворачивать слово "днк" на письме в
"дезоксирибонуклеиновая кислота".

Плагин предоставляет три "команды" чата:
Плагин предоставляет три "команды" чата: 

##### /abbrev 
 /abbrev 
Создаёт сокращение. Форма использования:

 Создаёт сокращение. Форма использования: 
    /abbrev что на что

привязывает к сокращению "что" строку "на что".
 привязывает к сокращению "что" строку "на что". 

##### /unabbrev 
 /unabbrev 
Удаляет сокращение. Форма использования:

 Удаляет сокращение. Форма использования: 
    /unabbrev что

удаляет сокращение "что". Аргумент "\*" представляет собой особую форму команды
 удаляет сокращение "что". Аргумент "\*" представляет собой особую форму команды — удаляются все имеющиеся сокращения. 
— удаляются все имеющиеся сокращения.

##### /listabbrevs 
Показывает текущие сокращения.
 /listabbrevs 

 Показывает текущие сокращения. 

Сокращения разворачиваются динамически при нажатии кнопки **space** после ввода
Сокращения разворачиваются динамически при нажатии кнопки space после ввода слова-сокращения. Например, если у нас есть сокращение для "днк", то если после ввода слова "днк" вы введёте пробел, сокращение "днк" развернётся в "дезоксирибонуклеиновая кислота". 
слова-сокращения. Например, если у нас есть сокращение для "днк", то если после
ввода слова "днк" вы введёте пробел, сокращение "днк" развернётся в
"дезоксирибонуклеиновая кислота".

**Внимание:** чтобы подавить разворачивание, вводите **Shift-space**.
**Внимание:** чтобы подавить разворачивание, вводите Shift-space. 

Пример:
Пример: 

    /abbrev прив приветствую участников конференции!

(добавили сокращение "прив" с замещением "приветствую участников
(добавили сокращение "прив" с замещением "приветствую участников конференции!"), далее используем его: 
конференции!"), далее используем его:

    хочу всем сказать: прив
                           ^тут вводится пробел

в итоге имеем:
в итоге имеем: 

    хочу всем сказать: приветствую участников конференции!

Сокращения сохраняются в базу данных Customize. Выполнен русский перевод
Сокращения сохраняются в базу данных Customize. Выполнен русский перевод сообщений плагина. 
сообщений плагина.

Подробности смотрите в файле README.
Подробности смотрите в файле README. 

**Полезный совет:** добавьте следующее сокращение:
**Полезный совет:** добавьте следующее сокращение: 

    /abbrev аббрев /abbrev

По аналогии можно настряпать их целую кучу (следующие пишем, уже пользуясь только что вбитым сокращением):
По аналогии можно настряпать их целую кучу (следующие пишем, уже пользуясь только что вбитым сокращением): 

    /abbrev ме /me
    /abbrev унаббрев /unabbrev
    /abbrev листаббр /listabbrevs
    /abbrev девойс /devoice

и так далее (многие плагины работают с помощью команд, которые не всегда вовремя вспоминаются; вот тут-то и пригодится "листаббр"!). Теперь нет нужды переключаться на английскую раскладку для набора команд :)
и так далее (многие плагины работают с помощью команд, которые не всегда вовремя вспоминаются; вот тут-то и пригодится "листаббр"!). Теперь нет нужды переключаться на английскую раскладку для набора команд :) 

Файл: [*Abbrev.zip*](../files/Abbrev.zip) (~6 кб)
Файл: [abbrev.zip](../files/Abbrev.zip) (~6 кб) 

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

### <a id="Aniemoticons"></a>Aniemoticons
## <a id="Aniemoticons"></a>Aniemoticons

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

Плагин для любителей анимированных смайликов.
Плагин для любителей анимированных смайликов. ![(!)](../images/Hammer.png) **Сделать:** Развить? 
![(!)](../images/Hammer.png) **Сделать:** Развить?

### <a id="Attline"></a>Attline
## <a id="Attline"></a>Attline

![(!)](../images/Hammer.png) **Сделать:** Написать.

### <a id="Ctcomp"></a>Ctcomp

> _Внимание!_ Этот плагин вошёл в число официальных внешних плагинов Ткаббера и
  находится в транке начиная с ревизии 1256 (7 октября 2007). Версия плагина в
  транке была сильно переработана по сравнению с предыдущей версией (1.2).

![(!)](../images/Hammer.png) **Сделать:** Написать. 

## <a id="Ctcomp"></a>Ctcomp

 _Внимание!_ Этот плагин вошёл в число официальных внешних плагинов Ткаббера и находится в транке начиная с ревизии 1256 (7 октября 2007). Версия плагина в транке была сильно переработана по сравнению с предыдущей версией (1.2). 

**Текущая версия**
**Текущая версия** 

[**kostix**](Участник_Kostix.md) 7 октября 2007 (MSK): v2.0 (является копией версии в транке).
[kostix](Участник_Kostix.md) 7 октября 2007 (MSK): v2.0 (является копией версии в транке). 

**Назначение и принцип действия**
**Назначение и принцип действия** 

Этот плагин — "Chat Text Completion" — реализует автозавершение слов, вводимых
Этот плагин — "Chat Text Completion" — реализует автозавершение слов, вводимых в окне ввода чата, словами, имеющимися в окне протокола чата и в окне ввода чата. 
в окне ввода чата, словами, имеющимися в окне протокола чата и в окне ввода
чата.

Идея простая: в ходе общения в чат были помещены какие-то (сложные) слова, и
Идея простая: в ходе общения в чат были помещены какие-то (сложные) слова, и вам хочется воспроизвести одно из таких слов в своём сообщении. Слово есть в окне протокола чата, но для того, чтобы его поместить в своё сообщение, необходимо его скопировать в буфер обмена _при помощи мыши_ и затем вставить в поле ввода чата. А данный плагин позволяет написать несколько первых букв требуемого слова (минимум — одну) и затем комбинациями клавиш Ctrl-n и Ctrl-p циклически "прокрутить" все подходящие под ваш ввод слова прямо "на месте", выбрать нужное и продолжить редактирование. Кто знает, как работает "completion" в insert mode текстового редактора [Vim](http://vim.sf.net), поймёт откуда позаимствован принцип действия этого плагина и, вероятно, найдёт привязки кнопок по умолчанию удобными. Жест из Emacs Alt-/ также поддерживается. 
вам хочется воспроизвести одно из таких слов в своём сообщении. Слово есть в
окне протокола чата, но для того, чтобы его поместить в своё сообщение,
необходимо его скопировать в буфер обмена _при помощи мыши_ и затем вставить в
поле ввода чата. А данный плагин позволяет написать несколько первых букв
требуемого слова (минимум — одну) и затем комбинациями клавиш **Ctrl-n** и **Ctrl-p**
циклически "прокрутить" все подходящие под ваш ввод слова прямо "на месте",
выбрать нужное и продолжить редактирование. Кто знает, как работает
"completion" в insert mode текстового редактора [Vim](http://vim.sf.net),
поймёт откуда позаимствован принцип действия этого плагина и, вероятно, найдёт
привязки кнопок по умолчанию удобными. Жест из Emacs **Alt-/** также
поддерживается.

Также можно вызвать меню со списком имеющихся дополнений слова.
Также можно вызвать меню со списком имеющихся дополнений слова. 

**Управление**
**Управление** 

Плагин переопределяет две стандартные привязки поля ввода чата (по умолчанию
Плагин переопределяет две стандартные привязки поля ввода чата (по умолчанию отвечающие за помещение в поле ввода чата текста следующего/предыдущего отосланного сообщения): 
отвечающие за помещение в поле ввода чата текста следующего/предыдущего
отосланного сообщения):

* **Ctrl-n** — включает режим автодополнения слова, если он не включен и
  показывает первый подходящий вариант; если режим уже работает, показывает
*  Ctrl-n — включает режим автодополнения слова, если он не включен и показывает первый подходящий вариант; если режим уже работает, показывает следующий вариант. Соответственно, последовательные нажатия этой комбинации клавиш перебирают все возможные варианты, циклически. 
  следующий вариант. Соответственно, последовательные нажатия этой комбинации
  клавиш перебирают все возможные варианты, циклически.
* **Ctrl-p** — делает то же самое, что и предыдущая комбинация, только
*  Ctrl-p — делает то же самое, что и предыдущая комбинация, только перебирает варианты в обратном порядке. 
  перебирает варианты в обратном порядке.

Эти комбинации являются основными. Возможно чередовать их использование,
Эти комбинации являются основными. Возможно чередовать их использование, произвольно перемещаясь по "кольцу" возможных вариантов дополнения введённых букв слова. 
произвольно перемещаясь по "кольцу" возможных вариантов дополнения введённых
букв слова.

* **Escape** — отменяет режим автозавершения. Текущий вариант
  автозавершения удаляется и поле ввода чата приводится в такое же состояние,
*  Escape — отменяет режим автозавершения. Текущий вариант автозавершения удаляется и поле ввода чата приводится в такое же состояние, которое у него было до включения режима автозавершения. 
  которое у него было до включения режима автозавершения.
* **Enter** — выбирает (подтверждает) текущий вариант автозавершения.
  Курсор остаётся сразу за полученным словом. Действие этой клавиши по отсылке
*  Enter — выбирает (подтверждает) текущий вариант автозавершения. Курсор остаётся сразу за полученным словом. Действие этой клавиши по отсылке сообщения "съедается" в данном режиме. 
  сообщения "съедается" в данном режиме.
* **Alt-/** — полностью повторяет действие **Ctrl-n**; этот жест взят из Emacs.
*  Alt-/ — полностью повторяет действие Ctrl-n; этот жест взят из Emacs. 
* **Ctrl-Alt-/** — показывает меню с первыми 20 найденными дополнениями.
  Активация элемента этого меню вставляет выбранное дополнение вместо исходного
*  Ctrl-Alt-/ — показывает меню с первыми 20 найденными дополнениями. Активация элемента этого меню вставляет выбранное дополнение вместо исходного слова. Щелчок мышью вне меню или нажатие клавиши Escape отменяют меню, оставляя исходное слово без изменений. 
  слова. Щелчок мышью вне меню или нажатие клавиши **Escape** отменяют меню,
  оставляя исходное слово без изменений.
* Любые клавиши или их комбинации из тех, что не указаны выше, нажатые при
*  Любые клавиши или их комбинации из тех, что не указаны выше, нажатые при активном режиме автозавершения (то есть когда показывается один из предложенных вариантов завершения слова) прекращают режим автозавершения как если бы была нажата клавиша Enter; при этом нажатая комбинация клавиш передаётся окну ввода текста, например, если в режиме автозавершения был нажат BackSpace, текущий вариант автозавершения будет принят, после чего самый правый его символ будет удалён. 
  активном режиме автозавершения (то есть когда показывается один из
  предложенных вариантов завершения слова) прекращают режим автозавершения как
  если бы была нажата клавиша **Enter**; при этом нажатая комбинация клавиш
  передаётся окну ввода текста, например, если в режиме автозавершения был
  нажат **BackSpace**, текущий вариант автозавершения будет принят, после чего
  самый правый его символ будет удалён.

**Пример**
**Пример** 

Имеем в окне протокола чата несколько слов, среди которых есть: "abbot",
Имеем в окне протокола чата несколько слов, среди которых есть: "abbot", "abridged", "abduction" и "abba". 
"abridged", "abduction" и "abba".

Вводим в поле ввода чата:
Вводим в поле ввода чата: 

    ab
      ^тут нажимаем Ctrl-n, Alt-/ или Ctrl-p

переходим в режим автодополнения, в котором Ткаббер будет показывать все слова,
начинающиеся с "ab" на месте введённого вами "ab"; дополненная часть слова
переходим в режим автодополнения, в котором Ткаббер будет показывать все слова, начинающиеся с "ab" на месте введённого вами "ab"; дополненная часть слова выделяется другим цветом фона: 

выделяется другим цветом фона:
<pre>
ab<span style="background:pink">ba</span>
ab<span style="background:pink">duction</span>
    abba
    abduction
ab<span style="background:pink">ot</span>
ab<span style="background:pink">ridged</span>
...
</pre>
Значения в списке отсортированы; **Ctrl-n** и **Alt-/** перебирают значения в
    abot
    abridged
    ...

Значения в списке отсортированы; Ctrl-n и Alt-/ перебирают значения в порядке возрастания, Ctrl-p — в обратном порядке. 
порядке возрастания, **Ctrl-p** — в обратном порядке.

Далее **Enter** для подтверждения использования текущего варианта, или **Escape**
для выхода из режима автодополнения (и возврата к исходному тексту: "ab").
Далее Enter для подтверждения использования текущего варианта, или Escape для выхода из режима автодополнения (и возврата к исходному тексту: "ab"). 

Также можно было нажать **Ctrl-Alt-/** вместо **Ctrl-n** (и прочих) чтобы
получить меню со списком подходящих слов.
Также можно было нажать Ctrl-Alt-/ вместо Ctrl-n (и прочих) чтобы получить меню со списком подходящих слов. 

**Проблемы**
**Проблемы** 

Указанные комбинации клавиш не будут работать на русской раскладке Windows в
Указанные комбинации клавиш не будут работать на русской раскладке Windows в силу [печально известного бага Tk в Windows](Wish_и_русская_раскладка_в_Windows.md). В [README](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins/ctcomp/README) описан костыль для этой проблемы (потребуется написать несколько строчек в config.tcl. 
силу [**печально известного бага Tk в Windows**](Wish_и_русская_раскладка_в_Windows.md). В
[README](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins/ctcomp/README)
описан костыль для этой проблемы (потребуется написать несколько строчек в
config.tcl.

**Плагин**
**Плагин** 

Большая просьба потестировать, если интересно, и не стесняться сообщать
Большая просьба потестировать, если интересно, и не стесняться сообщать багрепорты/пожелания. 
багрепорты/пожелания.

_Рекомендуется_ прочитать приложенный
_Рекомендуется_ прочитать приложенный [README](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins/ctcomp/README) — там описаны доступные настройки плагина и вообще дано больше информации по нему. 
[README](http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins/ctcomp/README)
— там описаны доступные настройки плагина и вообще дано больше информации по
нему.

Файл: [*Ctcomp.zip*](../files/Ctcomp.zip) (~9 кб)
Файл: [ctcomp.zip](../files/Ctcomp.zip) (~9 кб) 

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

### <a id="Custom_URLs"></a>Custom URLs
## <a id="Custom_URLs"></a>Custom URLs

![(!)](../images/Hammer.png) **Сделать:** Написать.
![(!)](../images/Hammer.png) **Сделать:** Написать. 

### <a id="Floating_Log"></a>Floating Log
## <a id="Floating_Log"></a>Floating Log

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

> _Внимание!_ Этот плагин вошёл в число официальных внешних плагинов Ткаббера и
 _Внимание!_ Этот плагин вошёл в число официальных внешних плагинов Ткаббера и находится в транке начиная с ревизии 1245 (6 октября 2007). 
  находится в транке начиная с ревизии 1245 (6 октября 2007).

Плагин показывает во всплывающих окнах приходящие сообщения и сообщения статуса.
Плагин показывает во всплывающих окнах приходящие сообщения и сообщения статуса. 

Файл: [*Floatinglog.zip*](../files/Floatinglog.zip)
Файл: [floatinglog.zip](../files/Floatinglog.zip) 

Текущая версия: 0.4 , 26-August-2007.
Текущая версия: 0.4 , 26-August-2007. 

Автор: [**archimed**](Участник_Archimed.md)
Автор: [archimed](Участник_Archimed.md) 

### <a id="Floating_Roster_Contact"></a>Floating Roster Contact
## <a id="Floating_Roster_Contact"></a>Floating Roster Contact

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

Proof-of-concept plugin. Позволяет "оторвать" элемент ростера в плавающее окно
Proof-of-concept plugin. Позволяет "оторвать" элемент ростера в плавающее окно без декораций. Перемещение этого окна по Drag'n'Drop. Плагин очень недоделанный (окошки не запоминаются, при логауте не пропадают, на roster push не реагируют, наверняка ещё чего-нибудь нужное не делают). 
без декораций. Перемещение этого окна по Drag'n'Drop. Плагин очень недоделанный
(окошки не запоминаются, при логауте не пропадают, на roster push не реагируют,
наверняка ещё чего-нибудь нужное не делают).

*  **Файл:** [float.tar.gz](http://sgolovan.nes.ru/jabber/tmp/float.tar.gz) (1K)
*  **Файл:** [float.tar.gz](http://sgolovan.nes.ru/jabber/tmp/float.tar.gz) (1K) 

[**Teo**](Участник_Teo.md)
[Teo](Участник_Teo.md) 

### <a id="Gmail_Notifications"></a>Gmail Notifications
## <a id="Gmail_Notifications"></a>Gmail Notifications

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **

Если вы пользуетесь джаббер-аккаунтом на gmail.com, то этот плагин позволит вам
получать уведомления о почте, приходящей по вашему адресу. Плагин использует
расширение XMPP
[Gmail Notifications](http://code.google.com/apis/talk/jep_extensions/gmail.html).
Уведомления показываются в отдельном окне/вкладке.

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

Если вы пользуетесь джаббер-аккаунтом на gmail.com, то этот плагин позволит вам получать уведомления о почте, приходящей по вашему адресу. Плагин использует расширение XMPP [Gmail Notifications](http://code.google.com/apis/talk/jep_extensions/gmail.html). Уведомления показываются в отдельном окне/вкладке. 

**Примечание:** Если вы не пользуетесь gmail.com в качестве Jabber-сервера, но
**Примечание:** Если вы не пользуетесь gmail.com в качестве Jabber-сервера, но хотите получать уведомления о почтовых сообщениях, то этот плагин вам не поможет. Вместо него можно использовать J2J-транспорт. Но помните, что владелец J2J-транспорта может подсмотреть ваш пароль на gmail.com и читать вашу почту. Оно вам надо? Подробнее можно почитать [на странице проекта J2J](http://wiki.jrudevels.org/index.php/J2J). 
хотите получать уведомления о почтовых сообщениях, то этот плагин вам не
поможет. Вместо него можно использовать J2J-транспорт. Но помните, что владелец
J2J-транспорта может подсмотреть ваш пароль на gmail.com и читать вашу почту.
Оно вам надо? Подробнее можно почитать
[на странице проекта J2J](http://wiki.jrudevels.org/index.php/J2J).

*  **Файл:** [gmail-1.0.tar.gz](http://sgolovan.nes.ru/jabber/tmp/gmail-1.0.tar.gz) (3K)
*  **Файл:** [gmail-1.0.tar.gz](http://sgolovan.nes.ru/jabber/tmp/gmail-1.0.tar.gz) (3K) 

[**Teo**](Участник_Teo.md)
[Teo](Участник_Teo.md) 

### <a id="Histool"></a>Histool
## <a id="Histool"></a>Histool

> **Внимание!** начиная с 0.10.0-beta2 этот плагин интергирован в Ткаббер в
 **Внимание!** начиная с 0.10.0-beta2 этот плагин интергирован в Ткаббер в качестве встроенного средства (пункт главного меню **Службы → Разговоры**) и дальше развивается там. Этот раздел будет убран через некоторое время. 
  качестве встроенного средства (пункт главного меню **Службы → Разговоры**) и
  дальше развивается там. Этот раздел будет убран через некоторое время.

"History tool" — браузер истории чата.
"History tool" — браузер истории чата. 

**Внимание!** Плагин предназначен для "новой системы логирования", появившейся
**Внимание!** Плагин предназначен для "новой системы логирования", появившейся в альфа-версии начиная с релиза 841 (26 Декабря 2006), кроме того код плагина был частично интегрирован в транк Ткаббера (и сам плагин туда собирается), так что этот плагин работает только с Ткаббером начиная с релиза 1004 (04 Марта 2007). 
в альфа-версии начиная с релиза 841 (26 Декабря 2006), кроме того код плагина
был частично интегрирован в транк Ткаббера (и сам плагин туда собирается), так
что этот плагин работает только с Ткаббером начиная с релиза 1004 (04 Марта
2007).

Этот плагин реализует окно, которое можно открыть через пункт главного меню
Этот плагин реализует окно, которое можно открыть через пункт главного меню **Services → Plugins → Chat history**, предоставляющий несколько способов для доступа ко всей истории чатов: 
**Services → Plugins → Chat history**, предоставляющий несколько способов для
доступа ко всей истории чатов:

* Список JID'ов, для которых есть логи чата;
* Дерево, отражающее структуру логов;
* <s>Полнотекстовый поиск по логам</s> (пока не реализован).
*  Список JID'ов, для которых есть логи чата; 
*  Дерево, отражающее структуру логов; 
*  <s>Полнотекстовый поиск по логам</s> (пока не реализован). 

Двойной клик на любом JID'е открывает стандартный диалог с логом чата для этого
Двойной клик на любом JID'е открывает стандартный диалог с логом чата для этого JID'а. 
JID'а.

В списке джидов и дереве логов работает поиск (панель открывается по
`<<OpenSearchPanel>>`, прибитому по умолчанию на **Ctrl-s**.
В списке джидов и дереве логов работает поиск (панель открывается по `<<OpenSearchPanel>>`, прибитому по умолчанию на Ctrl-s. 

**Баги/ограничения** текущей версии:
**Баги/ограничения** текущей версии: 

* <s>Код показа лога чата для JID'а в Ткаббере содержит ошибку: если вы
*  <s>Код показа лога чата для JID'а в Ткаббере содержит ошибку: если вы попытаетесь посмотреть лог общения в привате с некоторым поситителем комнаты при том, что не будете в этот момент находиться в данной комнате, Ткаббер покажет лог самой комнаты.</s> (исправлено в релизе 987 (28 Февраля 2007). 
  попытаетесь посмотреть лог общения в привате с некоторым поситителем комнаты
  при том, что не будете в этот момент находиться в данной комнате, Ткаббер
  покажет лог самой комнаты.</s> (исправлено в релизе 987 (28 Февраля 2007).
* На некоторых джидах глючит открытие лога; механизм пока не выявлен.
* Полнотекстовый поиск не реализован.
* Есть мелкие проблемы с клавиатурным фокусом при переключении табов.
* README не дописан.
*  На некоторых джидах глючит открытие лога; механизм пока не выявлен. 
*  Полнотекстовый поиск не реализован. 
*  Есть мелкие проблемы с клавиатурным фокусом при переключении табов. 
*  README не дописан. 

Файл: [**Histool.zip**](../files/Histool.zip) (~8 кб)
Файл: [histool.zip](../files/Histool.zip) (~8 кб) 

Текущая версия: 0.6, 04-Mar-2007.
Текущая версия: 0.6, 04-Mar-2007. 

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

### <a id="Open_URL"></a>Open URL

## <a id="Open_URL"></a>Open URL

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

Добавляет в меню по правой кнопке на URL в окне чата пункты, позволяющие
Добавляет в меню по правой кнопке на URL в окне чата пункты, позволяющие открыть этот URL в заданном браузере. 
открыть этот URL в заданном браузере.

*  **Файл:** [openurl.tar.gz](http://sgolovan.nes.ru/jabber/tmp/openurl.tar.gz) (1K)
*  **Файл:** [openurl.tar.gz](http://sgolovan.nes.ru/jabber/tmp/openurl.tar.gz) (1K) 

[**Teo**](Участник_Teo.md)
[Teo](Участник_Teo.md) 

### <a id="Presencecmd"></a>Presencecmd
## <a id="Presencecmd"></a>Presencecmd

> _**Внимание!** Данный плагин без изменений добавлен в число официальных
 _**Внимание!** Данный плагин без изменений добавлен в число официальных внешних плагинов Ткаббера и находится в транке начиная с ревизии 1189 (17 августа 2007)._ 
  внешних плагинов Ткаббера и находится в транке начиная с ревизии 1189
  (17 августа 2007)._

Добавляет две новые IRC-команды чата для управления присутствием (глобальным и
Добавляет две новые IRC-команды чата для управления присутствием (глобальным и направленным). 
направленным).

Примеры:
Примеры: 

    /presence dnd

    /presence chat
    Hey girls!

    /presence
    Now read this!

    /chatpresence xa
    Gone shopping

Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/presencecmd/README).
Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/presencecmd/README). 

Файл: [*Presencecmd.zip*](../files/Presencecmd.zip) (~6k)
Файл: [presencecmd.zip](../files/Presencecmd.zip) (~6k) 

Текущая версия: 0.2, 14-July-2007.
Текущая версия: 0.2, 14-July-2007. 

    http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/presencecmd

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

### <a id="Quote_Last_Message_quotelastmsg"></a>Quote Last Message (quotelastmsg)
## <a id="Quote_Last_Message_quotelastmsg"></a>Quote Last Message (quotelastmsg)

Копирует в поле редактирования последнее сообщение из чата и прибавляет к нему
Копирует в поле редактирования последнее сообщение из чата и прибавляет к нему угловые скобки (признак цитирования). Хоткей — Alt-Q Если это сочетание уже занято, вы можете перебиндить его в конфиге. Например, так, как об этом рассказано в README, который лежит в папке с плагином: 
угловые скобки (признак цитирования). Хоткей — **Alt-Q** Если это сочетание уже
занято, вы можете перебиндить его в конфиге. Например, так, как об этом
рассказано в README, который лежит в папке с плагином:

    event delete <<QuoteLastMessage>> <Alt-q>
    event delete <<QuoteLastMessage>> <Meta-q>
    event add    <<QuoteLastMessage>> <Control-Shift-m>

Кстати, с помощью этого плагина удобно редактировать обширный топик.
Кстати, с помощью этого плагина удобно редактировать обширный топик. 

### <a id="Receipts"></a>Receipts
## <a id="Receipts"></a>Receipts

![(!)](../images/Hammer.png) **Сделать:** Написать.
![(!)](../images/Hammer.png) **Сделать:** Написать. 

### <a id="Recentstatus"></a>Recentstatus
## <a id="Recentstatus"></a>Recentstatus

> _Внимание!_ Плагин интергирован в виде _встроенного_ средства начиная со
 _Внимание!_ Плагин интергирован в виде _встроенного_ средства начиная со стабильной версии [0.11.0](http://tkabber.jabber.ru/node/464), поэтому плагин следует использовать только на версиях \<= 0.10.0. Если вы "апгрейдитесь" на 0.11.0 с более старой версии, проверьте — не установлен ли у вас этот плагин; если установлен, обязательно удалите его, в противном случае это может привести к мистическим глюкам. 
  стабильной версии [0.11.0](http://tkabber.jabber.ru/node/464), поэтому плагин
  следует использовать только на версиях \<= 0.10.0. Если вы "апгрейдитесь" на
  0.11.0 с более старой версии, проверьте — не установлен ли у вас этот плагин;
  если установлен, обязательно удалите его, в противном случае это может
  привести к мистическим глюкам.

Плагин меняет штатный виджет Ткаббера для вода "статусного сообщения" (справа
Плагин меняет штатный виджет Ткаббера для вода "статусного сообщения" (справа от кнопки, открывающий меню состояний доступности) на комбобокс, который хранит историю последних установленных статусных сообщений. Каждое установленное пользователем статусное сообщение записывается в историю. История сохраняется между перезапусками Ткаббера. Возможно настроить максимальную длину истории. 
от кнопки, открывающий меню состояний доступности) на комбобокс, который хранит
историю последних установленных статусных сообщений. Каждое установленное
пользователем статусное сообщение записывается в историю. История сохраняется
между перезапусками Ткаббера. Возможно настроить максимальную длину истории.

**Примечание:** В репозитории tkabber-3rd-party его уже нет. Если вам по
**Примечание:** В репозитории tkabber-3rd-party его уже нет. Если вам по каким-то причинам нужна старая версия, трясите автора ;) 
каким-то причинам нужна старая версия, трясите автора ;)

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

### <a id="Singularity"></a>Singularity
## <a id="Singularity"></a>Singularity

![(!)](../images/Hammer.png) **Сделать:** Написать.
![(!)](../images/Hammer.png) **Сделать:** Написать. 

### <a id="Stripes"></a>Stripes
## <a id="Stripes"></a>Stripes

![](../images/180px-Stripes.png)

![](../images/magnify-clip.png)

![](../images/180px-Dark-stripes.png)

![](../images/magnify-clip.png)
> **Внимание!** Этот плагин включён в транк начиная с версии 0.11.1. При этом в
  нём был исправлен баг, указанный ниже.

 **Внимание!** Этот плагин включён в транк начиная с версии 0.11.1. При этом в нём был исправлен баг, указанный ниже. 

Этот плагин позволяет раскрашивать фон целых нечётных и/или чётных сообщений в
Этот плагин позволяет раскрашивать фон целых нечётных и/или чётных сообщений в окне чата. Поддерживается раздельная установка цвета фона для чётных и нечётных сообщений через базу опций Tk (Tk option database) или XRDB, например, так: 
окне чата. Поддерживается раздельная установка цвета фона для чётных и нечётных
сообщений через базу опций Tk (Tk option database) или XRDB, например, так:

    option add *Chat.oddBackground  gray77
    option add *Chat.evenBackground gray84

Если цвет для соотв. типа сообщений не задан, он не устанавливается (остаётся
Если цвет для соотв. типа сообщений не задан, он не устанавливается (остаётся тем, который используется по умолчанию). 
тем, который используется по умолчанию).

Настройки цветов должны идти либо в **preload\_hook**, либо быть "на верхнем
Настройки цветов должны идти либо в **preload\_hook**, либо быть "на верхнем уровне" (вне хуков). 
уровне" (вне хуков).

С подбором цветов поможет [**эта статья**](Палитра_цветов.md).
С подбором цветов поможет [эта статья](Палитра_цветов.md). 

**Внимание!** плагин имеет баг, связанный с невозможностью (в плагине) узнать
**Внимание!** плагин имеет баг, связанный с невозможностью (в плагине) узнать момент окончания отрисовки сообщения: при поступлении нового сообщения в окно чата плагин раскрашивает _предыдущее_ сообщение, а не текущее. Это приводит к тому, что последнее сообщение, помещённое в окно чата не будет раскрашено до поступления следующего сообщения. (Если у кого-то есть идеи как это обойти — пишите автору.) 
момент окончания отрисовки сообщения: при поступлении нового сообщения в окно
чата плагин раскрашивает _предыдущее_ сообщение, а не текущее. Это приводит к
тому, что последнее сообщение, помещённое в окно чата не будет раскрашено до
поступления следующего сообщения. (Если у кого-то есть идеи как это обойти —
пишите автору.)

Файл: [*Stripes.zip*](../files/Stripes.zip) (~1.5 кб)
Файл: [stripes.zip](../files/Stripes.zip) (~1.5 кб) 

Текущая версия: 0.1, 07-Mar-2007.
Текущая версия: 0.1, 07-Mar-2007. 

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

### <a id="Tclchat"></a>Tclchat
## <a id="Tclchat"></a>Tclchat

![(!)](../images/Hammer.png) **Сделать:** Написать.
![(!)](../images/Hammer.png) **Сделать:** Написать. 

### <a id="Tkabber-KHIM"></a>Tkabber-KHIM
## <a id="Tkabber-KHIM"></a>Tkabber-KHIM

> _Внимание!_ С 13 декабря 2006 этот плагин находится в транке, так что если вы
 _Внимание!_ С 13 декабря 2006 этот плагин находится в транке, так что если вы используете версию с SVN, не заморачивайтесь и снимите его оттуда. Тем более, что версия плагина в транке уже получила несколько изменений, недоступных в выложенной здесь версии. (Изменения, впрочем, не принципиальные, так что если у Вас стабильная версия Ткаббера, возьмите плагин отсюда.) 
  используете версию с SVN, не заморачивайтесь и снимите его оттуда. Тем более,
  что версия плагина в транке уже получила несколько изменений, недоступных в
  выложенной здесь версии. (Изменения, впрочем, не принципиальные, так что если
  у Вас стабильная версия Ткаббера, возьмите плагин отсюда.)

Этот плагин прикручивает к Ткабберу особый "как бы метод ввода" авторства
Этот плагин прикручивает к Ткабберу особый "как бы метод ввода" авторства [Кевина Кенни](http://wiki.tcl.tk/kbk) — [KHIM](http://wiki.tcl.tk/16343), позволяя вводить в Ткаббере произвольные символы Unicode значительно более удобным способом, чем при помощи встроенного механизма ["unisymbols"](Ткаббер_ЧаВо.md#Ввод_хитрых_юникодных_символов): 
[Кевина Кенни](http://wiki.tcl.tk/kbk) — [KHIM](http://wiki.tcl.tk/16343),
позволяя вводить в Ткаббере произвольные символы Unicode значительно более
удобным способом, чем при помощи встроенного механизма
[**"unisymbols"**](Ткаббер_ЧаВо.md#Ввод_хитрых_юникодных_символов):

* Можно определить особую "кнопку композиции" — например, **Pause**, и список
  "входных последовательностей" — пар символов, которые, будучи введены после
*  Можно определить особую "кнопку композиции" — например, Pause, и список "входных последовательностей" — пар символов, которые, будучи введены после нажатия кнопки композиции, "превращаются" в некоторый символ Unicode. Клавиша композиции, входные последовательности и их отображение на символы Unicode настраиваются произвольным образом. 
  нажатия кнопки композиции, "превращаются" в некоторый символ Unicode. Клавиша
  композиции, входные последовательности и их отображение на символы Unicode
  настраиваются произвольным образом.
* Двойным нажатием упомянутой клавиши композиции можно вызвать специальное
*  Двойным нажатием упомянутой клавиши композиции можно вызвать специальное окно, предоставляющее возможность выбрать любой символ Unicode, который будет вставлен в текущую позицию курсора. 
  окно, предоставляющее возможность выбрать любой символ Unicode, который будет
  вставлен в текущую позицию курсора.

Примерно это выглядит так:
Примерно это выглядит так: 

* В настройках KHIM вы выбрали клавишу **Scroll\_Lock** в качестве клавиши
  композиции, и определили, что последовательность символов **"A** даёт "А
*  В настройках KHIM вы выбрали клавишу Scroll\_Lock в качестве клавиши композиции, и определили, что последовательность символов **"A** даёт "А умляут" — Ä. 
  умляут" — Ä.
* Тогда после применения настроек вы можете в любом поле ввода Ткаббера
*  Тогда после применения настроек вы можете в любом поле ввода Ткаббера ввести: Scroll\_Lock`"A` и получить Ä. 
  ввести: **Scroll\_Lock**`"A` и получить Ä.

После установки плагина и перезапуска Ткаббера посетите меню **Службы →
После установки плагина и перезапуска Ткаббера посетите меню **Службы → Расширения** и выберите там пункт "KHIM Options". _Обязательно_ прочтите справку по работе и настройке KHIM, нажав "Справка..." в появившемся диалоге. 
Расширения** и выберите там пункт "KHIM Options". _Обязательно_ прочтите
справку по работе и настройке KHIM, нажав "Справка..." в появившемся диалоге.

Пакеты **khim** и **autoscroll**, необходимые для работы Ткаббера, но имеющиеся
Пакеты **khim** и **autoscroll**, необходимые для работы Ткаббера, но имеющиеся только в **tklib**, упакованы прямо в  плагин, т.к. **tklib** не очень распространён, и в текущую стабильную его версию **khim** ещё не входит. 
только в **tklib**, упакованы прямо в  плагин, т.к. **tklib** не очень
распространён, и в текущую стабильную его версию **khim** ещё не входит.

Плагин должен работать на любой версии Ткаббера, так что приветствуется
Плагин должен работать на любой версии Ткаббера, так что приветствуется тестирование на любых доступных версиях. 
тестирование на любых доступных версиях.

**Пара полезных советов:** Помните, что KHIM включен по умолчанию, то есть
**Пара полезных советов:** Помните, что KHIM включен по умолчанию, то есть чисто теоретически в настройки ходить не обязательно (в случае, если пакет вам уже знаком). Но конечно, если вы видите его впервые, сходить туда имеет смысл: ознакомиться с "прошитыми" комбинациями и, в случае нужды, дополнить и/или измененить список, ну и почитать справку. После завершения работы с опциями окно можно закрыть (но можно и оставить, чтобы иметь комбинации перед глазами). В некоторых европейских раскладках (в частности, в испанской) некоторые дефолтные комбинации могут не работать. Например, буква "энье" — n, вводящаяся по умолчанию как Pause`~n` — из-за тильды, которая сама по себе висит на сочетании клавиш "RightAlt-4" и портит весь пирог. Ввод этой буквы можно легко перевесить на другое сочетание, к примеру, "$n" (доллар вызывается как обычно, "Shift-4", и проблем не вызывает). Так что если у вас установлен нетрадиционный дополнительный язык, и вы испытываете трудности с вводом некоторых букв, всё можно легко поправить. Не бойтесь обновлять плагин &mdash; все ваши изменения сохраняются в файле **~/.tkabber/custom.tcl**, и останутся там даже после удаления самого плагина. 
чисто теоретически в настройки ходить не обязательно (в случае, если пакет вам
уже знаком). Но конечно, если вы видите его впервые, сходить туда имеет смысл:
ознакомиться с "прошитыми" комбинациями и, в случае нужды, дополнить и/или
измененить список, ну и почитать справку. После завершения работы с опциями
окно можно закрыть (но можно и оставить, чтобы иметь комбинации перед глазами).
В некоторых европейских раскладках (в частности, в испанской) некоторые
дефолтные комбинации могут не работать. Например, буква "энье" — n, вводящаяся
по умолчанию как **Pause**`~n` — из-за тильды, которая сама по себе висит на
сочетании клавиш "RightAlt-4" и портит весь пирог. Ввод этой буквы можно легко
перевесить на другое сочетание, к примеру, "$n" (доллар вызывается как обычно,
"Shift-4", и проблем не вызывает). Так что если у вас установлен нетрадиционный
дополнительный язык, и вы испытываете трудности с вводом некоторых букв, всё
можно легко поправить. Не бойтесь обновлять плагин &mdash; все ваши изменения
сохраняются в файле **~/.tkabber/custom.tcl**, и останутся там даже после
удаления самого плагина.

Это — предварительная версия плагина, что означает отсутствие документации.
Это — предварительная версия плагина, что означает отсутствие документации. 

Файл: [*Tkabber-khim.zip*](../files/Tkabber-khim.zip)
Файл: [tkabber-khim.zip](../files/Tkabber-khim.zip) 

Автор: [**Kostix**](Участник_Kostix.md)
Автор: [Kostix](Участник_Kostix.md) 

Версия: 1.2
Версия: 1.2 

Размер файла: ~34k
Размер файла: ~34k 

**Примечание:** если у вас в системе есть свежий **tklib**, то вы можете
**Примечание:** если у вас в системе есть свежий **tklib**, то вы можете удалить подкаталоги **khim** и **autoscroll** из каталога с плагином. Про то, как снять **tklib** с CVS и поставить его в систему, рассказано [здесь](Установка_tklib_в__nix.md). Имейте в виду, что KHIM вошёл в состав tklib совсем недавно, и текущая стабильная версия (на 9 декабря 2006 года) его не содержит — берите с CVS. 
удалить подкаталоги **khim** и **autoscroll** из каталога с плагином. Про то,
как снять **tklib** с CVS и поставить его в систему, рассказано
[**здесь**](Установка_tklib_в__nix.md). Имейте в виду, что KHIM вошёл в состав
tklib совсем недавно, и текущая стабильная версия (на 9 декабря 2006 года) его
не содержит — берите с CVS.

**Однако** имейте в виду, что в той версии **khim**, что идёт с плагином, уже
**Однако** имейте в виду, что в той версии **khim**, что идёт с плагином, уже имеется один багфикс и русский перевод всех окон KHIM. Этого пока нет в **tklib**. 
имеется один багфикс и русский перевод всех окон KHIM. Этого пока нет в
**tklib**.

### <a id="Unixkeys"></a>Unixkeys
## <a id="Unixkeys"></a>Unixkeys

> _Внимание!_ Плагин интергирован в виде стандартного внешнего плагина начиная
 _Внимание!_ Плагин интергирован в виде стандартного внешнего плагина начиная со стабильной версии [0.11.0](http://tkabber.jabber.ru/node/464). В транке плагин был доработан: его функциональность была расширена на все поля ввода, включая однострочные и комбобоксы, а жест Ctrl-\\ заменён на Ctrl-/. 
  со стабильной версии [0.11.0](http://tkabber.jabber.ru/node/464). В транке
  плагин был доработан: его функциональность была расширена на все поля ввода,
  включая однострочные и комбобоксы, а жест **Ctrl-\\** заменён на **Ctrl-/**.

Плагин приделывает ко всем многострочным полям ввода в Ткаббере (включая поля
Плагин приделывает ко всем многострочным полям ввода в Ткаббере (включая поля ввода сообщений чатов) комбинации клавиш, традиционные для средств редактирования в Unix. Фактически, в плагин "завёрнута" функциональность, описанная [здесь](Нетривиальные_настройки.md#Комбинации_кнопок_а-ля_Unix_shell_в_текстовых_виджетах) (главное отличие — в плагине реализован жест Ctrl-\\, означающий "выделить всё"). 
ввода сообщений чатов) комбинации клавиш, традиционные для средств
редактирования в Unix. Фактически, в плагин "завёрнута" функциональность,
описанная
[**здесь**](Нетривиальные_настройки.md#Комбинации_кнопок_а-ля_Unix_shell_в_текстовых_виджетах)
(главное отличие — в плагине реализован жест **Ctrl-\\**, означающий "выделить
всё").

Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/unixkeys/README).
Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/unixkeys/README). 

    http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/unixkeys

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

## <a id="Полуофициальные_плагины_для_Ткаббера"></a>Полуофициальные плагины для Ткаббера
Здесь ссылки на плагины для Ткаббера, которые не попали в tkabber-plugins, но
# <a id="Полуофициальные_плагины_для_Ткаббера"></a>Полуофициальные плагины для Ткаббера
Здесь ссылки на плагины для Ткаббера, которые не попали в tkabber-plugins, но их авторы не поленились получить доступ к репозиторию [tkabber-3rd-party](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins) и выложили свои творения туда. Скачать их можно командой 
их авторы не поленились получить доступ к репозиторию
[tkabber-3rd-party](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins) и
выложили свои творения туда. Скачать их можно командой

`
    svn co http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins ~/tkabber-3rd-party-plugins

### <a id="Alarm"></a>Alarm
`
## <a id="Alarm"></a>Alarm

> _Внимание!_ версия этого плагина, доступная в виде архива по ссылке,
 _Внимание!_ версия этого плагина, доступная в виде архива по ссылке, перестала работать после очередного изменения внутреннего API обработки IQ-запросов в Ткаббере; исправленная версия доступна _только_ в "левом" репозитории (см. ниже). 
  перестала работать после очередного изменения внутреннего API обработки
  IQ-запросов в Ткаббере; исправленная версия доступна _только_ в "левом"
  репозитории (см. ниже).

Возможность послать собеседнику сигнал. Вид сигнала (звук, сообщение, запись в
Возможность послать собеседнику сигнал. Вид сигнала (звук, сообщение, запись в чате) выбирает собеседник. Есть фильтр и защита от флуда. Идея [отсюда](http://forum.jrudevels.org/viewtopic.php?p=546#546) продолжение [здесь](http://forum.jrudevels.org/viewtopic.php?t=1006). Разработан протокол, описание внутри. Все ошибки и запросы присылайте [Feez](Участник_Feez.md). 
чате) выбирает собеседник. Есть фильтр и защита от флуда. Идея
[отсюда](http://forum.jrudevels.org/viewtopic.php?p=546#546) продолжение
[здесь](http://forum.jrudevels.org/viewtopic.php?t=1006). Разработан протокол,
описание внутри. Все ошибки и запросы присылайте [**Feez**](Участник_Feez.md).

*  **Файл:** [*Alarm-0.3.tar.gz*](../files/Alarm-0.3.tar.gz) (15K)
*  **Версия:** 0.3 [**Changelog**](Plugins/Alarm/Changelog.md)
*  **Файл:** [Alarm-0.3.tar.gz](../files/Alarm-0.3.tar.gz) (15K) 
*  **Версия:** 0.3 [Changelog](Plugins/Alarm/Changelog.md) 

Исправленная версия, работающая на альфах 0.10.1 и выше доступна в репозитории:
Исправленная версия, работающая на альфах 0.10.1 и выше доступна в репозитории: 

    https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/alarm

### <a id="Antispam"></a>Antispam
## <a id="Antispam"></a>Antispam

Плагин для борьбы со спамом. Скрывает от пользователя сообщения от неизвестных
Плагин для борьбы со спамом. Скрывает от пользователя сообщения от неизвестных контактов, запрашивает у отправителя пароль для прекращения блокировки его сообщений. 
контактов, запрашивает у отправителя пароль для прекращения блокировки его
сообщений.

Известная проблема: оффлайновые сообщения не блокируются, если отключение
Известная проблема: оффлайновые сообщения не блокируются, если отключение произошло до загрузки ростера. 
произошло до загрузки ростера.

Плагин доступен в репозитории по адресу
[https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/antispam](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/antispam)
Подробности — в [README](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/antispam/README).
 [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/antispam](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/antispam) 
Подробности — в [README](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/antispam/README). 

Автор: [**Gebb**](Участник_Gebb.md).
Автор: [Gebb](Участник_Gebb.md). 

### <a id="Autoanswer"></a>Autoanswer
## <a id="Autoanswer"></a>Autoanswer

Автоответчик. Позволяет автоматически посылать пользователю, написавшему вам
Автоответчик. Позволяет автоматически посылать пользователю, написавшему вам личное сообщение (или "в приват" конференции), пока вы находитесь в "недоступном" состоянии (список таковых поддаётся настройке), некоторое заготовленное сообщение, например, "Я занят, перезвоните попозже!" ©. Таким образом, плагин удобен для борьбы с людьми, которые не умеют или не хотят понимать, что означает ваш текущий статус. 
личное сообщение (или "в приват" конференции), пока вы находитесь в
"недоступном" состоянии (список таковых поддаётся настройке), некоторое
заготовленное сообщение, например, "Я занят, перезвоните попозже!" ©. Таким
образом, плагин удобен для борьбы с людьми, которые не умеют или не хотят
понимать, что означает ваш текущий статус.

Автоответчик можно быстро включать/отключать с помощью соответствующей иконки
Автоответчик можно быстро включать/отключать с помощью соответствующей иконки на тулбаре. 
на тулбаре.

> Имейте в виду, что если вы пользуетесь "автоэвеем", _настоятельно_
  рекомендуется исключить из состояний, в которых включается автоответчик,
 Имейте в виду, что если вы пользуетесь "автоэвеем", _настоятельно_ рекомендуется исключить из состояний, в которых включается автоответчик, "away" и "xa", оставив только "dnd". Впрочем, плагин в этом плане не очень назойлив. Он отсылает автоответ только на первое сообщение и дальше уже помалкивает. При желании число автоответов можно изменить в коде. 
  "away" и "xa", оставив только "dnd". Впрочем, плагин в этом плане не очень
  назойлив. Он отсылает автоответ только на первое сообщение и дальше уже
  помалкивает. При желании число автоответов можно изменить в коде.

Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/autoanswer/README).
Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/autoanswer/README). 

    http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/autoanswer

Авторы: [**Gebb**](Участник_Gebb.md), [**kostix**](Участник_Kostix.md). Иконки сделал [**ART**](Участник_ART.md).
Авторы: [Gebb](Участник_Gebb.md), [kostix](Участник_Kostix.md). Иконки сделал [ART](Участник_ART.md). 

### <a id="Autosubscribe"></a>Autosubscribe
## <a id="Autosubscribe"></a>Autosubscribe

![(!)](../images/Hammer.png) **Сделать:** Написать.
![(!)](../images/Hammer.png) **Сделать:** Написать. 

### <a id="Bldjid"></a>Bldjid
## <a id="Bldjid"></a>Bldjid

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

Мощный плагин в помощь админам, позволяющий банить и разбанивать пользователей
Мощный плагин в помощь админам, позволяющий банить и разбанивать пользователей по их джидам во всех комнатах, где у вас есть админские права. Кроме этого, позволяет мониторить заходы пользователей в комнаты (можно задать список интересующих) даже при выключенной опции `::muc::options(gen_enter_exit_msgs)`. При этом собирается следующая информация: время захода, ник, реальный джид с ресурсом (при наличии у вас соответствующих прав в комнате), роль/ранг, версия клиента и ОС. Эта информация доступна не только во время текущей сессии, но и записывается в лог, откуда её можно выудить при поиске, что позволяет отслеживать долгосрочную историю заходов посетителей. Поиск возможен по нику, джиду, роли/рангу, версии, при этом можно совмещать несколько параметров в одном поисковом запросе. Кроме того, в плагине имеются команды, дающие возможность проверить, находится ли искомый джид в списке членов или в чёрном списке комнаты. Также можно включить "шпиона", уведомляющего о заходе в контролируемые комнаты нужного вам человека (указав его джид). Есть и возможность кардинальной чистки бан-листа как целиком, так и указав причину бана, что помогает разбанивать сонмы товарищей, забаненных ботом (естественно, если бот указывал определённую причину). 
по их джидам во всех комнатах, где у вас есть админские права. Кроме этого,
позволяет мониторить заходы пользователей в комнаты (можно задать список
интересующих) даже при выключенной опции `::muc::options(gen_enter_exit_msgs)`.
При этом собирается следующая информация: время захода, ник, реальный джид с
ресурсом (при наличии у вас соответствующих прав в комнате), роль/ранг, версия
клиента и ОС. Эта информация доступна не только во время текущей сессии, но и
записывается в лог, откуда её можно выудить при поиске, что позволяет
отслеживать долгосрочную историю заходов посетителей. Поиск возможен по нику,
джиду, роли/рангу, версии, при этом можно совмещать несколько параметров в
одном поисковом запросе. Кроме того, в плагине имеются команды, дающие
возможность проверить, находится ли искомый джид в списке членов или в чёрном
списке комнаты. Также можно включить "шпиона", уведомляющего о заходе в
контролируемые комнаты нужного вам человека (указав его джид). Есть и
возможность кардинальной чистки бан-листа как целиком, так и указав причину
бана, что помогает разбанивать сонмы товарищей, забаненных ботом (естественно,
если бот указывал определённую причину).

Описывать каждую команду здесь не имеет смысла, поэтому дальнейшее знакомство с
Описывать каждую команду здесь не имеет смысла, поэтому дальнейшее знакомство с плагином лучше продолжить [здесь](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid/README.ru) 
плагином лучше продолжить
[здесь](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid/README.ru)

Также имеет смысл напомнить, что следующая команда выведет примеры
Также имеет смысл напомнить, что следующая команда выведет примеры использования всех команд, задействованных в плагине: 
использования всех команд, задействованных в плагине:

    /bldhelp

**Известные проблемы:**
**Известные проблемы:** 

* Плагин не работает со стабильной версией Ткаббера 0.11.1 — только с SVN-версией.
*  Плагин не работает со стабильной версией Ткаббера 0.11.1 — только с SVN-версией. Впрочем, скоро SVN-версия сама станет стабильной ;) 
  Впрочем, скоро SVN-версия сама станет стабильной ;)
* Если изменить размер окна ввода сообщения, пока окошко монитора закрыто,
*  Если изменить размер окна ввода сообщения, пока окошко монитора закрыто, монитор перестаёт открываться (если сделать то же самое при открытом мониторе, проблем нет). Впрочем, это лечится закрыванием окна комнаты и новым в неё входом. 
  монитор перестаёт открываться (если сделать то же самое при открытом
  мониторе, проблем нет). Впрочем, это лечится закрыванием окна комнаты и новым
  в неё входом.

Скачать плагин можно по адресу:
[https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid)
Скачать плагин можно по адресу: 

    [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid)
    [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bldjid)

[**ycbl**](Участник_Bigote.md) 03:32, 29 марта 2010 (MSD)
[ycbl](Участник_Bigote.md) 03:32, 29 марта 2010 (MSD) 

### <a id="Customstatus"></a>Customstatus
## <a id="Customstatus"></a>Customstatus

Плагин позволяет управлять набором пар «статус присутствия "доступен"/текстовое
Плагин позволяет управлять набором пар «статус присутствия "доступен"/текстовое описание», позволяя делать предустановки для различных статусов присутствия. Это позволяет быстро устанавливать статус с заранее заданным текстовым описанием. Набор статусов/описаний доступен в виде меню, привязанного к новой кнопке тулбара. В этом же меню имеется пункт, вызывающий редактор набора статусов. 
описание», позволяя делать предустановки для различных статусов присутствия.
Это позволяет быстро устанавливать статус с заранее заданным текстовым
описанием. Набор статусов/описаний доступен в виде меню, привязанного к новой
кнопке тулбара. В этом же меню имеется пункт, вызывающий редактор набора
статусов.

Набор статусов сохраняется при помощи стандартного механизма Customize.
Набор статусов сохраняется при помощи стандартного механизма Customize. 

Продвинутые пользователи могут попробовать задействовать дополнительные
Продвинутые пользователи могут попробовать задействовать дополнительные настройки. Пока что их можно править только напрямую в файле плагина. За настройки отвечает массив **options**: 
настройки. Пока что их можно править только напрямую в файле плагина. За
настройки отвечает массив **options**:

    variable options
    array set options {
        subvert_main_presets_menu   no
        subvert_quick_presets_menu  no
        add_toolbar_item            yes
        toolbar_item_image          services/icq/chat
        accelerate_menus            no
        extend_quick_presets_panel  yes
        quick_presets_panel_image   services/icq/chat
      subvert_main_presets_menu   no
      subvert_quick_presets_menu  no
      add_toolbar_item            yes
      toolbar_item_image          services/icq/chat
      accelerate_menus            no
      extend_quick_presets_panel  yes
      quick_presets_panel_image   services/icq/chat
    }

Разъяснение настроек:
Разъяснение настроек: 

##### subvert\_main\_presets\_menu 
> Заменяет меню "Присутствие" в главном меню Ткаббера на то, которое
 subvert\_main\_presets\_menu 

 Заменяет меню "Присутствие" в главном меню Ткаббера на то, которое предоставляет этот плагин. 
  предоставляет этот плагин.

##### subvert\_quick\_presets\_menu 
> то же самое для "быстрого" меню статусов (на "Панели присутствия/статуса").
 subvert\_quick\_presets\_menu 

 то же самое для "быстрого" меню статусов (на "Панели присутствия/статуса"). 

##### add\_toolbar\_item 
> Управляет добавлением на тулбар кнопки, нажатие на которую показывает меню
  статусов. Это — поведение плагина по умолчанию.
 add\_toolbar\_item 

 Управляет добавлением на тулбар кнопки, нажатие на которую показывает меню статусов. Это — поведение плагина по умолчанию. 

##### toolbar\_item\_image 
> Устанавливает имя загруженной картинки для кнопки на тулбаре. Список
  доступных картинок можно получить, выполнив в консоли Ткаббера команду
 toolbar\_item\_image 

 Устанавливает имя загруженной картинки для кнопки на тулбаре. Список доступных картинок можно получить, выполнив в консоли Ткаббера команду "`image names`". 
  "`image names`".

##### accelerate\_menus 
> Если включена, при формировании меню предустановок первые девять опций меню
 accelerate\_menus 

 Если включена, при формировании меню предустановок первые девять опций меню предваряются префиксами "1.", "2." и т.д., которые являются акселераторами и могут быть активированы нажатием соотв. клавиши 1, 2 и т.д., когда меню открыто. Это может быть полезно, если сам вызов меню предустановок повешен на комбинацию клавиш, например, таким кодом в файле конфигурации: 
  предваряются префиксами "1.", "2." и т.д., которые являются акселераторами и
  могут быть активированы нажатием соотв. клавиши **1**, **2** и т.д., когда меню
  открыто. Это может быть полезно, если сам вызов меню предустановок повешен на
  комбинацию клавиш, например, таким кодом в файле конфигурации:

        hook::add finload_hook {
            bind . <Control-p> {
                tk_popup .presence.button.custom_menu [winfo pointerx .] [winfo pointery .]
            }
        }
    hook::add finload_hook {
      bind . <Control-p> {
        tk_popup .presence.button.custom_menu [winfo pointerx .] [winfo pointery .]
      }
    }

##### extend\_quick\_presets\_panel 
> Добавляет кнопку, аналогичную таковой на тулбаре, справа от кнопки выбора
  присутствия на "Панели присутствия/статуса".
 extend\_quick\_presets\_panel 

 Добавляет кнопку, аналогичную таковой на тулбаре, справа от кнопки выбора присутствия на "Панели присутствия/статуса". 

##### quick\_presets\_panel\_image 
> Устанавливает картинку для этой кнопки.
 quick\_presets\_panel\_image 

 Устанавливает картинку для этой кнопки. 

**Ухищрения:**
**Ухищрения:** 

* В полях ввода сообщений для статусов в окне редактора предустановок работают
*  В полях ввода сообщений для статусов в окне редактора предустановок работают комбинации клавиш Ctrl-↑ и Ctrl-↓, которые перемещают активный элемент списка вверх и вниз, соответственно. 
  комбинации клавиш **Ctrl-↑** и **Ctrl-↓**, которые перемещают активный элемент списка
  вверх и вниз, соответственно.

**Основные недоработки/баги:**
**Основные недоработки/баги:** 

* "Продвинутые" настройки нельзя установить из файла конфигурации.
*  "Продвинутые" настройки нельзя установить из файла конфигурации. 

Приветствуется самое широкое тестирование. Багрепорты и пожелания шлите автору.
Приветствуется самое широкое тестирование. Багрепорты и пожелания шлите автору. 

Файл: [**Customstatus.zip**](../files/Customstatus.zip) (~7кБ)
Файл: [customstatus.zip](../files/Customstatus.zip) (~7кБ) 

Версия: 0.6, 06-Mar-2007
Версия: 0.6, 06-Mar-2007 

    http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/customstatus

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

### <a id="Flip"></a>Flip
## <a id="Flip"></a>Flip

Плагин-шутка. 1 апреля при заходе в конференцию с вероятностью 50%
Плагин-шутка. 1 апреля при заходе в конференцию с вероятностью 50% "переворачивает" ваш ник вверх тормашками. Смотрится прикольно :) На следующий день перевёрнутые ники приходят в норму. 
"переворачивает" ваш ник вверх тормашками. Смотрится прикольно :) На следующий
день перевёрнутые ники приходят в норму.

<s>**Недостаток:** Если выключить Ткаббер до полуночи и включить снова уже 2
<s>**Недостаток:** Если выключить Ткаббер до полуночи и включить снова уже 2 апреля, ники в норму не придут. Для исправления требуется приделать сохранение в файл.</s> Приделано. Кроме того, обнаружен баг с одной буквой (R), перевёрнутая версия которой принадлежит арабскому алфавиту. На jabber.ru запрещено использование ников, состоящих из смеси арабских и не-арабских букв, поэтому с ником, содержащим R, вас бы не пустили ни в одну из комнат. Пришлось её выкинуть. Если заметите подобное поведение с другими буквами, просьба сообщить. Также будем рады дополнениям таблицы букв-перевёртышей (см. код плагина). 
апреля, ники в норму не придут. Для исправления требуется приделать сохранение
в файл.</s> Приделано. Кроме того, обнаружен баг с одной буквой (R),
перевёрнутая версия которой принадлежит арабскому алфавиту. На jabber.ru
запрещено использование ников, состоящих из смеси арабских и не-арабских букв,
поэтому с ником, содержащим R, вас бы не пустили ни в одну из комнат. Пришлось
её выкинуть. Если заметите подобное поведение с другими буквами, просьба
сообщить. Также будем рады дополнениям таблицы букв-перевёртышей (см. код
плагина).

**URL:**
**URL:** 

    https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/flip/

    [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/flip/](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/flip/)
    [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/flip/](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/flip/)
**Автор:** [**ycbl**](Участник_Bigote.md)

### <a id="Green"></a>Green

**Автор:** [ycbl](Участник_Bigote.md) 
Плагин предназначен для реализации в Ткаббере слежения за событиями управления
питанием системы, таких как suspend и resume. Идея состоит в том, чтобы
корректно закрыть все активные соединения с серверами при уходе системы в
suspend, запомнив их. Затем, если требуется, восстановить их после того, как
система переходит в нормальный режим работы, предварительно подождав некоторое
время, пока не "поднимется" сеть.

## <a id="Green"></a>Green

Плагин предназначен для реализации в Ткаббере слежения за событиями управления питанием системы, таких как suspend и resume. Идея состоит в том, чтобы корректно закрыть все активные соединения с серверами при уходе системы в suspend, запомнив их. Затем, если требуется, восстановить их после того, как система переходит в нормальный режим работы, предварительно подождав некоторое время, пока не "поднимется" сеть. 

Поскольку стиль доведения информации о событиях подсистемы управления питанием
Поскольку стиль доведения информации о событиях подсистемы управления питанием до работающих приложений очень сильно отличается между операционными системами, этот плагин поддерживает два режима работы: 
до работающих приложений очень сильно отличается между операционными системами,
этот плагин поддерживает два режима работы:

* В случае работы в Windows (Windows 2000 и выше) он полагается на специальное
*  В случае работы в Windows (Windows 2000 и выше) он полагается на специальное расширение Tcl/Tk — [winpm](http://tkwinpm.googlecode.com), которое должно быть установлено и доступно Ткабберу. При помощи данного расширения плагин слушает сообщения системы об изменениях в состоянии питания и выполняет соответствующие им действия. 
  расширение Tcl/Tk — [winpm](http://tkwinpm.googlecode.com), которое должно
  быть установлено и доступно Ткабберу. При помощи данного расширения плагин
  слушает сообщения системы об изменениях в состоянии питания и выполняет
  соответствующие им действия.
* В случае работы в системах, основанных на X Window (Linux, \*BSD и подобных),
*  В случае работы в системах, основанных на X Window (Linux, \*BSD и подобных), в которых отсутствует механизм, подобный реализованному в Windows, используется другой подход, основанный на использовании специального "скрипта активации", который поставляется вместе с плагином (файл swsusp-tkabber.tcl в каталоге плагина). Этот скрипт предназначен для запуска из соответствующих пользовательских скриптов, которые вызывает система управления питанием при наступлении различных событий, таких как suspend и resume. Скрипт активации сообщает всем работающим на том же дисплее копиям Ткаббера о наступлении соответствующего события управления питанием; эти уведомления обрабатываются плагином. 
  в которых отсутствует механизм, подобный реализованному в Windows,
  используется другой подход, основанный на использовании специального "скрипта
  активации", который поставляется вместе с плагином (файл swsusp-tkabber.tcl в
  каталоге плагина). Этот скрипт предназначен для запуска из соответствующих
  пользовательских скриптов, которые вызывает система управления питанием при
  наступлении различных событий, таких как suspend и resume. Скрипт активации
  сообщает всем работающим на том же дисплее копиям Ткаббера о наступлении
  соответствующего события управления питанием; эти уведомления обрабатываются
  плагином.

Иными словами, в случае с Windows плагин работает "сам собой", а в случае
Иными словами, в случае с Windows плагин работает "сам собой", а в случае систем, основанных на X Window, ему помогает внешний скрипт, организация правильного запуска которого — задача пользователя. 
систем, основанных на X Window, ему помогает внешний скрипт, организация
правильного запуска которого — задача пользователя.

_Важно понимать,_ что сам плагин должен быть установлен в Ткаббере в любом
_Важно понимать,_ что сам плагин должен быть установлен в Ткаббере в любом случае. 
случае.

Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/green/README).
Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/green/README). 

По поводу работы в Linux, см.
[обсуждение на багзилле Ткаббера](http://www.jabber.ru/bugzilla/show_bug.cgi?id=376).
По поводу работы в Linux, см. [обсуждение на багзилле Ткаббера](http://www.jabber.ru/bugzilla/show_bug.cgi?id=376). 

    http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/green

Автор: [kostix](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

### <a id="Hidemuctopic"></a>Hidemuctopic
## <a id="Hidemuctopic"></a>Hidemuctopic

Небольшой плагин, который, будучи установленным, скрывает поле темы комнаты,
Небольшой плагин, который, будучи установленным, скрывает поле темы комнаты, высвобождая несколько ценных миллиметров пространства. Чтобы вновь увидеть его для доступа к редактированию темы или к настройкам и командам комнаты (плохо заметная "кнопка" с надписью "Тема" слева от поля с топиком), нужно нажать Ctrl-T 
высвобождая несколько ценных миллиметров пространства. Чтобы вновь увидеть его
для доступа к редактированию темы или к настройкам и командам комнаты (плохо
заметная "кнопка" с надписью "Тема" слева от поля с топиком), нужно нажать
**Ctrl-T**

**URL:**
**URL:** 

    [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/hidemuctopic/](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/hidemuctopic/)
    https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/hidemuctopic/
    [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/hidemuctopic/](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/hidemuctopic/)

**Автор:** [**kostix**](Участник_Kostix.md)
**Автор:** [kostix](Участник_Kostix.md) 

### <a id="Juick"></a>Juick
## <a id="Juick"></a>Juick

Плагин для жуйкования. То бишь, ведения (микро)блога на
Плагин для жуйкования. То бишь, ведения (микро)блога на [juick.com](http://juick.com). [Подробнее](Плагины/Juick.md). 
[juick.com](http://juick.com). [**Подробнее**](Плагины/Juick.md).

### <a id="Killerfeature"></a>Killerfeature
## <a id="Killerfeature"></a>Killerfeature

Плагин предназначен для ручного
[удаления XMPP-аккаунта с сервера](http://www.xmpp.org/extensions/xep-0077.html#usecases-cancel).
Плагин предназначен для ручного [удаления XMPP-аккаунта с сервера](http://www.xmpp.org/extensions/xep-0077.html#usecases-cancel). 

После установки плагина, в подменю "Tkabber" главного меню Ткаббера появится
После установки плагина, в подменю "Tkabber" главного меню Ткаббера появится новый пункт "Delete account...", активизация которого представит пользователю диалог с одним или более чекбоксами — по одному на каждый уникальный аккаунт из числа активных (подключённых) в данный момент. Нажатие кнопки "ОК" данного диалога отправит серверу команду удаления каждого помеченного пользователем аккаунта; при этом также происходит отключение этих аккаунтов. Никаких подтверждений запрошено не будет. Выйти из диалога без удаления аккаунтов можно, нажав кнопку "Отмена", нажав Escape или закрыв окно диалога средствами оконного менеджера. 
новый пункт "Delete account...", активизация которого представит пользователю
диалог с одним или более чекбоксами — по одному на каждый уникальный аккаунт из
числа активных (подключённых) в данный момент. Нажатие кнопки "ОК" данного
диалога отправит серверу команду удаления каждого помеченного пользователем
аккаунта; при этом также происходит отключение этих аккаунтов. Никаких
подтверждений запрошено не будет. Выйти из диалога без удаления аккаунтов
можно, нажав кнопку "Отмена", нажав **Escape** или закрыв окно диалога средствами
оконного менеджера.

> _**Внимание!** Восстановить удалённый аккаунт не будет никакой возможности
 _**Внимание!** Восстановить удалённый аккаунт не будет никакой возможности (кроме разве что ползания на коленях перед админом сервера с мольбами поднять ваш аккаунт из последнего бэкапа)._ 
  (кроме разве что ползания на коленях перед админом сервера с мольбами
  поднять ваш аккаунт из последнего бэкапа)._

Текущая версия в репозитории Subversion:

    http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/killerfeature

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

### <a id="Notes"></a>Notes
## <a id="Notes"></a>Notes

Плагин для ведения заметок. Заметки хранятся в связанном с JID'ом хранилище в
Плагин для ведения заметок. Заметки хранятся в связанном с JID'ом хранилище в соответствии с [XEP-0049](http://www.xmpp.org/extensions/xep-0049.html). Плагин совместим с аналогичными плагинами для Miranda и Psi+. Поддерживается работа с несколькими одновременно подключёнными аккаунтами. Есть возможность отфильтровать заметки по одному или нескольким тегам, а также экспортировать их в файл. [Подробнее](Плагины/Notes.md). 
соответствии с [XEP-0049](http://www.xmpp.org/extensions/xep-0049.html). Плагин
совместим с аналогичными плагинами для Miranda и Psi+. Поддерживается работа с
несколькими одновременно подключёнными аккаунтами. Есть возможность
отфильтровать заметки по одному или нескольким тегам, а также экспортировать их
в файл.

Пока что плагин предоставляет только один способ взаимодействия с пользователем
— через несложный графический интерфейс. В будущем планируется добавить набор
команд для управления заметками из чата.

Также планируется сделать больше привязок к существующим элементам графического
интерфейса для быстрого добавления/редактирования заметок. Пример такого
взаимодействия (из реализованного): по пункту меню, привязанному нажатию к
правой клавишей мыши в чате, можно добавить выделенный в чате текст к заметкам.

Текущая версия в репозитории Subversion (для Ткаббера с менеджером плагинов):

    https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/notes

Плагин также доступен через GIT (не рекомендуется для конечного пользователя,
там бывают экспериментальные изменения):

    https://github.com/Totktonada/tkabber4notes

Некоторая дополнительная информация по плагину собрана тут:

    https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/notes/doc/

Автор: [*Totktonada*](Участник_Totktonada.md)

### <a id="Now_Playing"></a>Now Playing
## <a id="Now_Playing"></a>Now Playing

![(!)](../images/Hammer.png) **Сделать:** Написать.
![(!)](../images/Hammer.png) **Сделать:** Написать. 

### <a id="Open_History"></a>Open History
## <a id="Open_History"></a>Open History

Небольшой, но полезный плагин, позволяющий открывать историю разговоров в
Небольшой, но полезный плагин, позволяющий открывать историю разговоров в комнате или с контактом из ростера без использования мыши, с помощью нехитрой команды. Для истории любого конкретного джида: 
комнате или с контактом из ростера без использования мыши, с помощью нехитрой
команды. Для истории любого конкретного джида:

    /history jid

Для просмотра истории текущего разговора:
Для просмотра истории текущего разговора: 

    /history

**Недостаток:** В случае просто **/history** в привате конференции откроется
**Недостаток:** В случае просто **/history** в привате конференции откроется история конференции, а не этого привата. 
история конференции, а не этого привата.

**URL:**
**URL:** 

    [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/openhistory/](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/openhistory/)
    https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/openhistory/
    [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/openhistory/](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/openhistory/)

**Автор:** [*Sceptik*](Участник_Sceptik.md)
**Автор:** [Sceptik](Участник_Sceptik.md) 

### <a id="Plugin_Manager"></a>Plugin Manager
## <a id="Plugin_Manager"></a>Plugin Manager

> _Внимание!_ простым пользователям Ткаббера это средство скорее всего не нужно,
_Внимание!_ простым пользователям Ткаббера это средство скорее всего не нужно, потому что это не "настоящий" плагин; если вы просматриваете список плагинов в поисках чего-нибудь "вкусненького", пропускайте этот раздел и читайте дальше. 
  потому что это не "настоящий" плагин; если вы просматриваете список плагинов в
  поисках чего-нибудь "вкусненького", пропускайте этот раздел и читайте дальше.

Это средство было специально написано для Windows-дистрибутивов Ткаббера (пак и
Это средство было специально написано для Windows-дистрибутивов Ткаббера (пак и старпак), которые устанавливают в систему все стандартные внешние плагины вместе с Ткаббером чтобы пользователю не надо было качать их отдельно. Plugin Manager добавляет в Ткаббер возможность открыть специальное окно со списком всех стандартных внешних плагинов, выбрать требуемые и установить их одним нажатием кнопки. Точно так же их можно удалять из пользовательского каталога плагинов. Таким образом, пользователю не нужно думать о том, как устанавливать или удалять плагин, а также о том, куда инсталлятор распаковал плагины. 
старпак), которые устанавливают в систему все стандартные внешние плагины
вместе с Ткаббером чтобы пользователю не надо было качать их отдельно. Plugin
Manager добавляет в Ткаббер возможность открыть специальное окно со списком
всех стандартных внешних плагинов, выбрать требуемые и установить их одним
нажатием кнопки. Точно так же их можно удалять из пользовательского каталога
плагинов. Таким образом, пользователю не нужно думать о том, как устанавливать
или удалять плагин, а также о том, куда инсталлятор распаковал плагины.

В настоящий момент (post-0.11.1 девелоперская версия) в Ткаббере реализована
В настоящий момент (post-0.11.1 девелоперская версия) в Ткаббере реализована возможность динамической загрузки и выгрузки плагинов в процессе работы без требования перезагрузки. После того, как во всех стандартных внешних плагинах будет реализована поддержка этой возможности, Plugin Manager станет не нужен, поскольку устанавливать стандартные внешние плагины путём копирования их в пользовательский каталог плагинов будет не нужно: достаточно будет пометить видимые Ткабберу плагины в группе настроек "Plugins Management" как используемые и сохранить настройки. 
возможность динамической загрузки и выгрузки плагинов в процессе работы без
требования перезагрузки. После того, как во всех стандартных внешних плагинах
будет реализована поддержка этой возможности, Plugin Manager станет не нужен,
поскольку устанавливать стандартные внешние плагины путём копирования их в
пользовательский каталог плагинов будет не нужно: достаточно будет пометить
видимые Ткабберу плагины в группе настроек "Plugins Management" как
используемые и сохранить настройки.

Следует, однако, отметить что пока ещё у Ткаббера нет специального знания о
Следует, однако, отметить что пока ещё у Ткаббера нет специального знания о том, где лежат его стандартные внешние плагины (это, по-видимому, будет реализовываться паковщиками Ткаббера под различные ОС при помощи некоего механизма, который в настоящее время в Ткаббере не реализован), и поэтому уже переделанные стандартные внешние плагины нужно сначала копировать в каталог плагинов, а потом ещё после перезагрузки Ткаббера включать в группе настроек "Plugins Management" (что, понятное дело, нелогично). 
том, где лежат его стандартные внешние плагины (это, по-видимому, будет
реализовываться паковщиками Ткаббера под различные ОС при помощи некоего
механизма, который в настоящее время в Ткаббере не реализован), и поэтому уже
переделанные стандартные внешние плагины нужно сначала копировать в каталог
плагинов, а потом ещё после перезагрузки Ткаббера включать в группе настроек
"Plugins Management" (что, понятное дело, нелогично).

**URL:**
**URL:** 

    [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/pluginmanager/](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/pluginmanager/)
    https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/pluginmanager/
    [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/pluginmanager/](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/pluginmanager/)

**Автор:** [**Archimed**](Участник_Archimed.md)
**Автор:** [Archimed](Участник_Archimed.md) 

### <a id="Reminder"></a>Reminder
## <a id="Reminder"></a>Reminder

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

Плагин, позволяющий задавать напоминания о некоторых грядущих событиях (не
Плагин, позволяющий задавать напоминания о некоторых грядущих событиях (не забыть выключить чайник, позвонить кому-либо и т. д.). Время срабатывания можно задать как в абсолютном формате (полная дата вида **MM/DD/YYYY HH:MM:SS**), так и в относительном (**HH(H):MM:SS**, **MM(M):SS**, **S(S)**). Относительный формат также используется при задании тайм-аута с помощью ключевых слов, например: **tomorrow 1:00:00** — через 25 часов, **week** — через неделю. Когда наступит заданный вами момент времени, выскочит небольшое окошко с текущим временем и текстом напоминания и прозвучит сигнал (сигнал можно отключить в настройках). Кроме обычных одноразовых напоминаний также планируется приделать повторяющиеся (каждый час, день, неделю, месяц, год), а также напоминания о днях рождения контактов из ростера и, по желанию, посетителей конференций. 
забыть выключить чайник, позвонить кому-либо и т. д.). Время срабатывания можно
задать как в абсолютном формате (полная дата вида **MM/DD/YYYY HH:MM:SS**), так
и в относительном (**HH(H):MM:SS**, **MM(M):SS**, **S(S)**). Относительный
формат также используется при задании тайм-аута с помощью ключевых слов,
например: **tomorrow 1:00:00** — через 25 часов, **week** — через неделю. Когда
наступит заданный вами момент времени, выскочит небольшое окошко с текущим
временем и текстом напоминания и прозвучит сигнал (сигнал можно отключить в
настройках). Кроме обычных одноразовых напоминаний также планируется приделать
повторяющиеся (каждый час, день, неделю, месяц, год), а также напоминания о
днях рождения контактов из ростера и, по желанию, посетителей конференций.

Формат команды:
Формат команды: 

    /remind time
    message

Кроме этого, можно выводить список текущих напоминаний посредством команды
Кроме этого, можно выводить список текущих напоминаний посредством команды 

    /listrems

а также удалять любое из выведенных ею напоминаний с помощью
а также удалять любое из выведенных ею напоминаний с помощью 

    /delrem #

где \# — номер нужного (а точнее, ненужного) вам напоминания в полученном
где \# — номер нужного (а точнее, ненужного) вам напоминания в полученном списке. Удалить за один раз можно только одно напоминание, при этом помните, что оно сразу же пропадает из списка, в результате чего нумерация нарушается, поэтому для гарантии выведите список ещё раз, если вам надо удалить несколько. 
списке. Удалить за один раз можно только одно напоминание, при этом помните,
что оно сразу же пропадает из списка, в результате чего нумерация нарушается,
поэтому для гарантии выведите список ещё раз, если вам надо удалить несколько.

Есть возможность задать выполнение команд в определённое время, при этом
Есть возможность задать выполнение команд в определённое время, при этом сообщение, указываемое на следующей строке, должно начинаться с ключевого слова **cmd** (например, 25 ноября в час дня разбанить некоего посетителя): 
сообщение, указываемое на следующей строке, должно начинаться с ключевого слова
**cmd** (например, 25 ноября в час дня разбанить некоего посетителя):

    /remind 11/25/2010 13:00:00
    /remind 11/25/2010 13:00:00 
    cmd ::muc::unban ::xmpp::1 \
    foo@conference.jabber.ru pupkin@jabber.ru

Командой может быть любой кусок кода на тикле; можно даже загрузить и выполнить
Командой может быть любой кусок кода на тикле; можно даже загрузить и выполнить скрипт, находящийся в файле: 
скрипт, находящийся в файле:

    /remind 3 days
    cmd source /home/myself/bin/test.tcl
    cmd source /home/myself/bin/test.tcl 

Напоминания сразу же после их задания сохраняются в файле настроек `custom.tcl`
Напоминания сразу же после их задания сохраняются в файле настроек `custom.tcl` и восстанавливаются оттуда при следующем запуске Ткаббера. Если какое-либо из них "протухло" за время, пока Ткаббер был выключен, при старте появится уже знакомое окошко, где помимо текущего времени и текста напоминания будет ещё указано время, на которое оно было установлено. 
и восстанавливаются оттуда при следующем запуске Ткаббера. Если какое-либо из
них "протухло" за время, пока Ткаббер был выключен, при старте появится уже
знакомое окошко, где помимо текущего времени и текста напоминания будет ещё
указано время, на которое оно было установлено.

Краткую помощь по использованию программы можно получить по команде
Краткую помощь по использованию программы можно получить по команде 

    /remind help

**URL:**
**URL:** 

    [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/reminder](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/reminder)
    https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/reminder
    [https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/reminder](https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/reminder)

**Автор:** [**ycbl**](Участник_Bigote.md)
**Автор:** [ycbl](Участник_Bigote.md) 

### <a id="Snoopstatus"></a>Snoopstatus
## <a id="Snoopstatus"></a>Snoopstatus

![(!)](../images/Hammer.png) **Сделать:** Написать.
![(!)](../images/Hammer.png) **Сделать:** Написать. 

### <a id="Urgent"></a>Urgent
## <a id="Urgent"></a>Urgent

![(!)](../images/Hammer.png) **Сделать:** Написать.
![(!)](../images/Hammer.png) **Сделать:** Написать. 

### <a id="Urlcmd"></a>Urlcmd
## <a id="Urlcmd"></a>Urlcmd

Добавляет две новые IRC-команды чата для перехода по ссылкам, содержащимся в
Добавляет две новые IRC-команды чата для перехода по ссылкам, содержащимся в сообщениях чата. 
сообщениях чата.

Примеры:
Примеры: 

Команда | Действие
 **Команда ****Действие **
---|---
/listurls | Показать список ссылок в текущем окне.
/browseurl | Открыть последнюю ссылку в броузере.
/browseurl 1 | Открыть ссылку с номером 1 в списке.

Плагин доступен в репозитории по адресу
 
 /listurls Показать список ссылок в текущем окне. 
 
 /browseurl Открыть последнюю ссылку в броузере. 
 
 /browseurl 1 Открыть ссылку с номером 1 в списке. 

Плагин доступен в репозитории по адресу 

    http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/urlcmd
    [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/urlcmd](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/urlcmd)

Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/urlcmd/README).
Подробности — в [README](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/urlcmd/README). 

Авторы: [**Gebb**](Участник_Gebb.md), [**kostix**](Участник_Kostix.md).
Авторы: [Gebb](Участник_Gebb.md), [kostix](Участник_Kostix.md). 

## <a id="Неофициальные_плагины"></a>Неофициальные плагины
А здесь собраны плагины, не попавшие ни в официальный, ни в 3rd-party
# <a id="Неофициальные_плагины"></a>Неофициальные плагины
А здесь собраны плагины, не попавшие ни в официальный, ни в 3rd-party репозитории. Некоторые из них, вероятно, устарели, так что если какой-то вдруг у вас не работает, разыскивайте авторов. 
репозитории. Некоторые из них, вероятно, устарели, так что если какой-то вдруг
у вас не работает, разыскивайте авторов.

### <a id="8bitgw"></a>8bitgw
## <a id="8bitgw"></a>8bitgw

Плагин, позволяющий общаться с "асечниками" и другими страдальцами через
Плагин, позволяющий общаться с "асечниками" и другими страдальцами через XMPP-гейты, работающие с 8-битным набором символов, отличным от того, с которым работает клиент "асечника". Например, можно общаться с русским "асечником", использующим Windows-1251, через "буржуйский" гейт, считающий, что в ICQ-сети используется Latin-1. 
XMPP-гейты, работающие с 8-битным набором символов, отличным от того, с которым
работает клиент "асечника". Например, можно общаться с русским "асечником",
использующим Windows-1251, через "буржуйский" гейт, считающий, что в ICQ-сети
используется Latin-1.

**Настройка:**
**Настройка:** 

Параметр `::plugins::8bitgw::gateways` в секции Customize **Plugins →
Параметр `::plugins::8bitgw::gateways` в секции Customize **Plugins → 8bitGateways** содержит (возможно пустой) Tcl-список гейтов и связанных с ними наборов символов в следующем формате: 
8bitGateways** содержит (возможно пустой) Tcl-список гейтов и связанных с ними
наборов символов в следующем формате:

    {сервер1 кодировка_сети кодировка_удалённого_клиента} [{сервер2 ...} ...]

(символы [ и ] отделяют необязательную часть).
(символы [ и ] отделяют необязательную часть). 

Гейты задаются "голым JID'ом" ("bare JID"), т.е. адресом без узловой части и
Гейты задаются "голым JID'ом" ("bare JID"), т.е. адресом без узловой части и ресурса, например: `icq.someserver.com`. 
ресурса, например: `icq.someserver.com`.

Названия наборов символов сети и удалённого клиента должны быть понятны тиклю;
Названия наборов символов сети и удалённого клиента должны быть понятны тиклю; узнать, что для него понятно, можно, выполнив в `tclsh`, `wish` или консоли Ткаббера команду 
узнать, что для него понятно, можно, выполнив в `tclsh`, `wish` или консоли
Ткаббера команду

    encoding names

Тикль работает с каноническими наименованиями наборов символов, в частности, он
Тикль работает с каноническими наименованиями наборов символов, в частности, он не знает про "Latin-1", зато знает про "iso8859-1". 
не знает про "Latin-1", зато знает про "iso8859-1".

Пример: такая настройка
Пример: такая настройка 

    {aim-icq.jabber.anywise.com iso8859-1 cp1251} {icq.ru.biz cp1251 cp1252}

заставит плагин совершать перекодировки исходящих и входящих данных чтобы:
заставит плагин совершать перекодировки исходящих и входящих данных чтобы: 

* общаться с русскими ICQ/AIM-клиентами (использующими cp1251) через сервер
*  общаться с русскими ICQ/AIM-клиентами (использующими cp1251) через сервер `aim-icq.jabber.anywise.com`, настроенный на использование iso8859-1 в качестве транспортной кодировки; 
  `aim-icq.jabber.anywise.com`, настроенный на использование iso8859-1 в
  качестве транспортной кодировки;
* общаться с европейскими "асечниками" (использующими cp1252) через
  "русский" гейт, использующий cp1251 в качестве транспортной кодировки.
*  общаться с европейскими "асечниками" (использующими cp1252) через "русский" гейт, использующий cp1251 в качестве транспортной кодировки. 

**Ошибки/недоработки:**
**Ошибки/недоработки:** 

* Нельзя настраивать кодировку для каждого удалённого клиента в отдельности;
* Нельзя использовать символы Unicode за пределами "кодировки удалённого
*  Нельзя настраивать кодировку для каждого удалённого клиента в отдельности; 
*  Нельзя использовать символы Unicode за пределами "кодировки удалённого клиента" — вместо них удалённый клиент увидит знаки вопроса ("?"); 
  клиента" — вместо них удалённый клиент увидит знаки вопроса ("?");
* Нет перевода текстовых ресурсов на русский;
* Нет README;
* Неудобная настройка;
* Не тестировался на связках, отличных от "Windows-1251 + Latin-1";
* Патчит код Ткаббера, что является нестабильным в долгосрочной перспективе
*  Нет перевода текстовых ресурсов на русский; 
*  Нет README; 
*  Неудобная настройка; 
*  Не тестировался на связках, отличных от "Windows-1251 + Latin-1"; 
*  Патчит код Ткаббера, что является нестабильным в долгосрочной перспективе (в идеале Ткабберу нужен хук `rewrite_outgoing_message_hook`). 
  (в идеале Ткабберу нужен хук `rewrite_outgoing_message_hook`).
* Не преобразует другие виды передаваемой и принимаемой текстовой информации,
*  Не преобразует другие виды передаваемой и принимаемой текстовой информации, такие как статус пользователя (в идеале Ткабберу нужен хук, который вызывался бы для каждого распарсенного и приготовленного к помещению в поток узла типа CDATA, но это слишком стрёмно, чтобы быть хуком). 
  такие как статус пользователя (в идеале Ткабберу нужен хук, который вызывался
  бы для каждого распарсенного и приготовленного к помещению в поток узла типа
  CDATA, но это слишком стрёмно, чтобы быть хуком).

Багрепорты/пожелания шлите автору.
Багрепорты/пожелания шлите автору. 

Файл: [*8bitgw.zip*](../files/8bitgw.zip) (~3 кб)
Файл: [8bitgw.zip](../files/8bitgw.zip) (~3 кб) 

Текущая версия: 0.1, 01-June-2007.
Текущая версия: 0.1, 01-June-2007. 

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

### <a id="Autoconnect"></a>Autoconnect
## <a id="Autoconnect"></a>Autoconnect

Данный плагин предназначен для автоматического соединения с нужными
Данный плагин предназначен для автоматического соединения с нужными транспортами после отсоединения или при старте Ткаббера. Критику и пожелания направляйте [eXire](Участник_EXire.md). 
транспортами после отсоединения или при старте Ткаббера. Критику и пожелания
направляйте [**eXire**](Участник_EXire.md).

*  **Файл:** [*Autoconnect-0.4.tar.gz*](../files/Autoconnect-0.4.tar.gz) (1K)
*  **Версия:** 0.4
*  **Файл:** [Media:autoconnect-0.4.tar.gz](../files/Autoconnect-0.4.tar.gz) (1K) 
*  **Версия:** 0.4 

### <a id="Autoraise"></a>Autoraise
## <a id="Autoraise"></a>Autoraise

Этот плагин написан в качестве фикса к проблеме, сформулированной
Этот плагин написан в качестве фикса к проблеме, сформулированной [тут](http://tkabber.jabber.ru/node/320). 
[тут](http://tkabber.jabber.ru/node/320).

Плагин "поднимает" главное окно Ткаббера, если таковое свёрнуто или скрыто, на
Плагин "поднимает" главное окно Ткаббера, если таковое свёрнуто или скрыто, на экран при приходе любого нового сообщения (в т. ч. от сервера, сообщений о присутствии и т. п.). 
экран при приходе любого нового сообщения (в т. ч. от сервера, сообщений о
присутствии и т. п.).

Управление:
Управление: 

* Настройки: опция-флаг `::plugins::autoraise::autoraise`
* Главное меню: **Tkabber→View→Auto raise on new message**
*  Настройки: опция-флаг `::plugins::autoraise::autoraise` 
*  Главное меню: **Tkabber→View→Auto raise on new message** 

**Ограничения:**
**Ограничения:** 

* Работает _только_ для "интерфейса с табами", т. к. восстанавливает
  главное окно, что является бессмысленным для многооконного интерфейса.
* Не имеет возможностей для фильтрации сообщений — поднимается по любому
*  Работает _только_ для "интерфейса с табами", т. к. восстанавливает главное окно, что является бессмысленным для многооконного интерфейса. 
*  Не имеет возможностей для фильтрации сообщений — поднимается по любому пришедшему. 
  пришедшему.
* "Патчит" одну из процедур Ткаббера, что является ненадёжным методом
*  "Патчит" одну из процедур Ткаббера, что является ненадёжным методом в долговременной перспективе. 
  в долговременной перспективе.

Тестирование и отзывы приветствуются.
Тестирование и отзывы приветствуются. 

Файл: [**Autoraise.zip**](../files/Autoraise.zip) (~4 кб)
Файл: [autoraise.zip](../files/Autoraise.zip) (~4 кб) 

Текущая версия: 0.1, 29-Mar-2007.
Текущая версия: 0.1, 29-Mar-2007. 

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

### <a id="Autoretrieve"></a>Autoretrieve
## <a id="Autoretrieve"></a>Autoretrieve

Этот плагин автоматически запрашивает информацию о пользователях в конференции,
Этот плагин автоматически запрашивает информацию о пользователях в конференции, т. е. информация сразу доступна в тултипе и не надо открывать окно Userinfo. Включить/отключить плагин можно в **Customize→Conference Info** 
т. е. информация сразу доступна в тултипе и не надо открывать окно Userinfo.
Включить/отключить плагин можно в **Customize→Conference Info**

* **Файл:** [**Autoretrieve.tar.gz**](../files/20081020172036!Autoretrieve.tar.gz) (1К)
* **Файл:** для 0.11.1 [*Autoretrieve.tar.gz*](../files/Autoretrieve21102008.tar.gz) (1К)
*  **Файл:** [autoretrieve.tar.gz](../files/20081020172036!Autoretrieve.tar.gz) (1К) 
*  **Файл:** для 0.11.1 [autoretrieve.tar.gz](../files/Autoretrieve21102008.tar.gz) (1К) 

[**eXire**](Участник_EXire.md)
[eXire](Участник_EXire.md) 

### <a id="Bmuc"></a>Bmuc
## <a id="Bmuc"></a>Bmuc

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

![](../images/180px-Bmuc.png)

![](../images/magnify-clip.png)

Плагин позволяет блокировать все приватные сообщения в конкретной конференции,
Плагин позволяет блокировать все приватные сообщения в конкретной конференции, отправленные вам участниками с рангом «None». Также есть возможность блокировки приватных сообщений от модераторов и членов (включается по выбору отдельно). Управление плагином осуществляется через меню на кнопке «Тема:» в конференции. 
отправленные вам участниками с рангом «None». Также есть возможность блокировки
приватных сообщений от модераторов и членов (включается по выбору отдельно).
Управление плагином осуществляется через меню на кнопке «Тема:» в конференции.

>  _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._
 _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._ 

*  **Файл:** [*Bmuc.zip*](../files/Bmuc.zip)
*  **Файл:** [Bmuc.zip](../files/Bmuc.zip) 

Автор: [*Jet*](Участник_Jet.md)
Автор: [Jet](Участник_Jet.md) 

Модифицированный плагин с расширенной возможностью блокировки сообщений в
Модифицированный плагин с расширенной возможностью блокировки сообщений в группчате доступен в репозитории по адресу: 
группчате доступен в репозитории по адресу:

    http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bmucx/
    [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bmucx/](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/bmucx/)

Автор модификации: [*ancestor*](Участник_Ancestor.md)
Автор модификации: [ancestor](Участник_Ancestor.md) 

### <a id="Bookmarks"></a>Bookmarks
## <a id="Bookmarks"></a>Bookmarks

Плагин автоматически ставит bookmark в окнах чата при автоматическом и ручном
Плагин автоматически ставит bookmark в окнах чата при автоматическом и ручном уходе в away, а также при потере фокуса окном Ткаббера. Настраивается через **Customize → Plugins → Bookmarks**. 
уходе в away, а также при потере фокуса окном Ткаббера. Настраивается через
**Customize → Plugins → Bookmarks**.

При смене статуса автоматически либо вручную выставляется стандартная (красная)
При смене статуса автоматически либо вручную выставляется стандартная (красная) галочка, при потере фокуса — зелёная. В настройках можно подстроить под себя интервал тайм-аута для потери фокуса, то есть, по прошествии какого времени Ткаббер начнёт считать, что вы действительно переключились на другую программу поработать, а не просто отвлеклись на минутку глянуть почту. 
галочка, при потере фокуса — зелёная. В настройках можно подстроить под себя
интервал тайм-аута для потери фокуса, то есть, по прошествии какого времени
Ткаббер начнёт считать, что вы действительно переключились на другую программу
поработать, а не просто отвлеклись на минутку глянуть почту.

**Будет работать только с 0.10.0-beta1 и старше.**
**Будет работать только с 0.10.0-beta1 и старше.** 

Для работы в Windows требуется пакет tclWinidle.
Для работы в Windows требуется пакет tclWinidle. 

[**eXire**](Участник_EXire.md).
[eXire](Участник_EXire.md). 

*  **Файл** [*Bookmarks-0.4.5.tar.gz*](../files/Bookmarks-0.4.5.tar.gz) (1K)
*  **Файл** [Media:bookmarks-0.4.5.tar.gz](../files/Bookmarks-0.4.5.tar.gz) (1K) 

Ныне вытеснен плагином attline. Не работает начиная где-то с 1816 ревизии июля
Ныне вытеснен плагином attline. Не работает начиная где-то с 1816 ревизии июля 2009г. 
2009г.

### <a id="Chess-mod"></a>Chess-mod
## <a id="Chess-mod"></a>Chess-mod

![](../images/180px-Chess-mod.gif)

![](../images/magnify-clip.png)

Модифицированный плагин для игры в шахматы, добавлены координаты для клеток
Модифицированный плагин для игры в шахматы, добавлены координаты для клеток игровой доски и отмена последнего сделанного хода по обоюдному согласию 
игровой доски и отмена последнего сделанного хода по обоюдному согласию

*  **Файл:** [*Chess-mod.zip*](../files/Chess-mod.zip)
*  **Файл:** [Chess-mod.zip](../files/Chess-mod.zip) 

Автор плагина: [*Jet*](Участник_Jet.md)
Автор плагина: [Jet](Участник_Jet.md) 

### <a id="Clienticons"></a>Clienticons
## <a id="Clienticons"></a>Clienticons

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

Добавляет иконки клиентов в ростер и список участников конференции. Иконки
Добавляет иконки клиентов в ростер и список участников конференции. Иконки клиентов и идея взяты из Psi+ ([http://psi-dev.googlecode.com/](http://psi-dev.googlecode.com/)) 
клиентов и идея взяты из Psi+
([http://psi-dev.googlecode.com/](http://psi-dev.googlecode.com/))

> _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._
 _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._ 

*  **Файл:** [*Clienticons.zip*](../files/Clienticons.zip)
*  **Файл:** [Clienticons.zip](../files/Clienticons.zip) 

Автор: [*Jet*](Участник_Jet.md)
Автор: [Jet](Участник_Jet.md) 

- - - -

- - - -  
Модифицированный [*ancestor*](Участник_Ancestor.md) плагин c обновленными
иконками доступен в репозитории по адресу:

Модифицированный [ancestor](Участник_Ancestor.md) плагин c обновленными иконками доступен в репозитории по адресу: 

    http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/clienticons/
    [http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/clienticons/](http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/clienticons/)

### <a id="Confirm"></a>Confirm
## <a id="Confirm"></a>Confirm

Добавляет вопрос при закрытии всех/остальных табов и Ткаббера. Есть графические
Добавляет вопрос при закрытии всех/остальных табов и Ткаббера. Есть графические настройки в **Customize→Plugins→Confirm**. 
настройки в **Customize→Plugins→Confirm**.

[**eXire**](Участник_EXire.md)
[eXire](Участник_EXire.md) 

*  **Файл:** [*Confirm-0.2.tar.gz*](../files/Confirm-0.2.tar.gz) (1K)
*  **Файл:** [Media:confirm-0.2.tar.gz](../files/Confirm-0.2.tar.gz) (1K) 

### <a id="CryptoConfig"></a>CryptoConfig
## <a id="CryptoConfig"></a>CryptoConfig

Позволяет хранить часть **config.tcl** (например, настройки **loginconf**) или
Позволяет хранить часть **config.tcl** (например, настройки **loginconf**) или всё его содержимое в зашифрованном файле. 
всё его содержимое в зашифрованном файле.

При загрузке Ткаббера спрашивает пароль, использованный для шифрования,
При загрузке Ткаббера спрашивает пароль, использованный для шифрования, дешифрует файл и исполняет код из него. 
дешифрует файл и исполняет код из него.

Требует наличия в системе OpenSSL или GPG.
Требует наличия в системе OpenSSL или GPG. 

Подробности — в README.
Подробности — в README. 

Файл: [*Cryptoconfig.zip*](../files/Cryptoconfig.zip)
Файл: [cryptoconfig.zip](../files/Cryptoconfig.zip) 

Текущая версия: 0.1, 16-June-2007.
Текущая версия: 0.1, 16-June-2007. 

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

### <a id="Cyrillize2"></a>Cyrillize2
## <a id="Cyrillize2"></a>Cyrillize2

> _Внимание!_ Стандартная версия этого плагина — "cyrillize" — получила ту же
 _Внимание!_ Стандартная версия этого плагина — "cyrillize" — получила ту же самую функциональность в ревизии 869 (11 января 2007); "навешена" она на комбинацию Ctrl-" (или Ctrl-Shift-'). Кроме того, комбинация Ctrl-; "занята" встроенным средством Ткаббера — [unisymbols](0.9.x/ЧаВо.md#Очень_неудобный_способ). Посему данный плагин следует считать не рекомендованным к использованию. 
  самую функциональность в ревизии 869 (11 января 2007); "навешена" она на
  комбинацию **Ctrl-"** (или **Ctrl-Shift-'**). Кроме того, комбинация **Ctrl-;**
  "занята" встроенным средством Ткаббера —
  [**unisymbols**](0.9.x/ЧаВо.md#Очень_неудобный_способ). Посему данный плагин
  следует считать не рекомендованным к использованию.

Усовершенствование стандартного плагина cyrillize. В него было добавлено
Усовершенствование стандартного плагина cyrillize. В него было добавлено сокращение C-; по которому можно перевести  введенный русский текст в латиницу. 
сокращение C-; по которому можно перевести  введенный русский текст в латиницу.

**Файл**: [*Cyrillize2-0.1.tar.gz*](../files/Cyrillize2-0.1.tar.gz)
 Усовершенствовал [**feez**](Участник_Feez.md)
**Файл**: [Media:Cyrillize2-0.1.tar.gz](../files/Cyrillize2-0.1.tar.gz) 
 Усовершенствовал [feez](Участник_Feez.md) 

### <a id="Follownick"></a>Follownick
## <a id="Follownick"></a>Follownick

Плагин для MUC, позволяющий быстро "прыгать" по сообщениям конкретного
Плагин для MUC, позволяющий быстро "прыгать" по сообщениям конкретного участника: 
участника:

* Клик средней кнопкой на нике или сообщении в окне лога делает так,
*  Клик средней кнопкой на нике или сообщении в окне лога делает так, что предыдущее (т.е. более старое) сообщение от этого участника появляется в окне с логом чата (то есть устанавливает viewport над "лентой" чата так, чтобы это сообщение было видно). 
  что предыдущее (т.е. более старое) сообщение от этого участника появляется в
  окне с логом чата (то есть устанавливает viewport над "лентой" чата так,
  чтобы это сообщение было видно).
* **Shift**+клик средней кнопкой ищет следующее по отношению к текущему сообщение
*  Shift+клик средней кнопкой ищет следующее по отношению к текущему сообщение (т.е. более новое). 
  (т.е. более новое).

После перемещения ник искомого сообщения подсвечивается.
После перемещения ник искомого сообщения подсвечивается. 

Основная идея плагина: быстрое перемещение по постам конкретного человека в "шумных" комнатах.
Основная идея плагина: быстрое перемещение по постам конкретного человека в "шумных" комнатах. 

**Ошибки/недоработки:**
**Ошибки/недоработки:** 

*  Ничего не настраивается.
*  Полное отсутствие сопроводиловки.
*  Ничего не настраивается. 
*  Полное отсутствие сопроводиловки. 

Багрепорты/пожелания шлите автору.
Багрепорты/пожелания шлите автору. 

Файл: [*Follownick.zip*](../files/Follownick.zip) (~1 кб)
Файл: [follownick.zip](../files/Follownick.zip) (~1 кб) 

Текущая версия: 0.1, 03-May-2007.
Текущая версия: 0.1, 03-May-2007. 

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

### <a id="Goto_заготовка_для_плагина"></a>Goto (заготовка для плагина)
## <a id="Goto_заготовка_для_плагина"></a>Goto (заготовка для плагина)

Заготовка для плагина активации таба по его заголовку из окна любого чата.
Заготовка для плагина активации таба по его заголовку из окна любого чата. Добавляет команду "/goto tabname" и соответствующие возможности автодополнения по клавише Tab. На данный момент позволяет перейти только на таб с чатом (в том числе на таб с конференцией). 
Добавляет команду "/goto tabname" и соответствующие возможности автодополнения
по клавише **Tab**. На данный момент позволяет перейти только на таб с чатом (в том
числе на таб с конференцией).

Для работы заготовки вставить в config.tcl вне хуков следующий код.
Для работы заготовки вставить в config.tcl вне хуков следующий код. 

    # Goto
    # ====
    proc gotochat {name} {
        foreach chatid [chat::opened] {
            set tabtitle [lindex [chat::window_titles $chatid] 0]

    
            if {[string equal $name $tabtitle]} {
                chat::activate $chatid
            }
        }
    }

    
    hook::add chat_send_message_hook [namespace current]::handle_goto 15

    
    proc handle_goto {chatid user body type} {
        if {[string equal -length 6 $body "/goto "]} {
            set tabname [crange $body 6 end]
            gotochat $tabname
            return stop
        }
    }

    
    hook::add generate_completions_hook [namespace current]::goto_commands_comps 99

    
    proc goto_commands_comps {chatid compsvar wordstart line} {
        upvar 0 $compsvar comps

    
        if {!$wordstart} {
           lappend comps "/goto "
        }

    
        if {$wordstart && [string equal -length 6 $line "/goto "]} {
            set tabtitles {}

    
            foreach chatid [chat::opened] {
                set tabtitle [lindex [chat::window_titles $chatid] 0]
                lappend tabtitles $tabtitle
            }

    
            set comps [concat $tabtitles $comps]
        }
    }
    # ====

Автор: [*Totktonada*](Участник_Totktonada.md).
Автор: [Totktonada](Участник_Totktonada.md). 

### <a id="Hihglight_XEP_and_RFC_URLs"></a>Hihglight XEP and RFC URLs
## <a id="Hihglight_XEP_and_RFC_URLs"></a>Hihglight XEP and RFC URLs

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

> _Внимание!_ плагин с этой (а точнее — с расширенной) функциональностью
 _Внимание!_ плагин с этой (а точнее — с расширенной) функциональностью доступен среди стандартных внешних плагинов в репозитории начиная с ревизии 1145 (12 июня 2007). Называется "custom-urls", помимо XEP, RFC и Debian Bug IDs, позволяет добавлять обработку своих форматов (примеры есть в коде плагина). 
  доступен среди стандартных внешних плагинов в репозитории начиная с ревизии
  1145 (12 июня 2007). Называется "custom-urls", помимо XEP, RFC и Debian Bug
  IDs, позволяет добавлять обработку своих форматов (примеры есть в коде
  плагина).

Подсвечивает как URL в окне чата слова xep-0123 или jep-0123. При клике
Подсвечивает как URL в окне чата слова xep-0123 или jep-0123. При клике открывает браузер на странице соответствующего XEP (XMPP Extension Proposal, а не то, что вы подумали). Версия 0.3 перестала соответствовать названию. Теперь подсвечиваются также и ссылки на RFC. Формат тот же, что и для XEP. В версии 0.4 строка \#12345 превращается в URL, ведущий на Debian BTS. 
открывает браузер на странице соответствующего XEP (XMPP Extension Proposal, а
не то, что вы подумали). Версия 0.3 перестала соответствовать названию. Теперь
подсвечиваются также и ссылки на RFC. Формат тот же, что и для XEP. В версии
0.4 строка \#12345 превращается в URL, ведущий на Debian BTS.

**Будет работать только с alpha-20061115 и свежее.**
**Будет работать только с alpha-20061115 и свежее.** 

*  **Файл:** [xeps-0.4.tar.gz](http://sgolovan.nes.ru/jabber/tmp/xeps-0.4.tar.gz) (1K)
*  **Файл:** [xeps-0.4.tar.gz](http://sgolovan.nes.ru/jabber/tmp/xeps-0.4.tar.gz) (1K) 

[**Teo**](Участник_Teo.md)
[Teo](Участник_Teo.md) 

### <a id="Highlightex"></a>Highlightex
## <a id="Highlightex"></a>Highlightex

Данный плагин подсвечивает (highlight) всё сообщение целиком при обращении к
Данный плагин подсвечивает (highlight) всё сообщение целиком при обращении к вам в конференции. В настройках имеется опция для задания цвета подсветки в 16-теричном формате. 
вам в конференции. В настройках имеется опция для задания цвета подсветки в
16-теричном формате.

*  **Файл:** [*Highlightex.zip*](../files/Highlightex.zip)
*  **Файл:** [Highlightex.zip](../files/Highlightex.zip) 

Автор: [*ancestor*](Участник_Ancestor.md)
Автор: [ancestor](Участник_Ancestor.md) 

### <a id="Histballoon"></a>Histballoon
## <a id="Histballoon"></a>Histballoon

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

Добавляет всплывающее описание к строке статуса, в котором выводит 20 последних
Добавляет всплывающее описание к строке статуса, в котором выводит 20 последних сообщений. 
сообщений.

*  **Файл:** [**Histballoon.zip**](../files/Histballoon.zip)
*  **Файл:** [Histballoon.zip](../files/Histballoon.zip) 

Автор: [*Jet*](Участник_Jet.md)
Автор: [Jet](Участник_Jet.md) 

### <a id="Jdiskurl"></a>Jdiskurl

## <a id="Jdiskurl"></a>Jdiskurl

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

Расширение, которое добавляет в контекстное меню ссылок вида
Расширение, которое добавляет в контекстное меню ссылок вида [http://disk.jabbim.cz/user@sever.tld/filename.ext](http://disk.jabbim.cz/user@sever.tld/filename.ext) пункт, позволяющий запрашивать файл через джаббер-диск public@disk.jabbim.cz (должен находиться в ростере). 
[http://disk.jabbim.cz/user@sever.tld/filename.ext](http://disk.jabbim.cz/user@sever.tld/filename.ext)
пункт, позволяющий запрашивать файл через джаббер-диск public@disk.jabbim.cz
(должен находиться в ростере).

> _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._
 _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._ 

*  **Файл:** [*Jdiskurl.zip*](../files/Jdiskurl.zip)
*  **Файл:** [Jdiskurl.zip](../files/Jdiskurl.zip) 

Автор: [*Jet*](Участник_Jet.md)
Автор: [Jet](Участник_Jet.md) 

### <a id="Last_Activity"></a>Last Activity
## <a id="Last_Activity"></a>Last Activity

Special for kroko :)
Special for kroko :) 

Этот плагин изменяет поведение Ткаббера на запрос last. Теперь в графе Interval
Этот плагин изменяет поведение Ткаббера на запрос last. Теперь в графе Interval (userinfo) или по команде /last \<nick> показывается время, которое окно клиента \<nick> неактивно. 
(userinfo) или по команде /last \<nick> показывается время, которое окно
клиента \<nick> неактивно.

**Будет работать только с alpha-20061110 и старше.**
**Будет работать только с alpha-20061110 и старше.** 

*  **Файл:** [**Last\_activity.tar.gz**](../files/Last_activity.tar.gz) (1K)
*  **Файл:** [Media:Last\_activity.tar.gz](../files/Last_activity.tar.gz) (1K) 

[**eXire**](Участник_EXire.md)
[eXire](Участник_EXire.md) 

### <a id="Meebo_me"></a>Meebo me
## <a id="Meebo_me"></a>Meebo me

Плагин автоматически принимает запросы авторизации и отслеживает смену ника
Плагин автоматически принимает запросы авторизации и отслеживает смену ника ([XEP-0172](http://www.xmpp.org/extensions/xep-0172.html)), но только для пользователей `*@guest.meebo.org`. Он вам понадобится, если вы собираетесь использовать виджет [meebome](http://www.meebome.com/) и сообщения принимать в Ткаббере. Все ошибки и запросы присылайте [Feez-у](Участник_Feez.md). 
([XEP-0172](http://www.xmpp.org/extensions/xep-0172.html)), но только для
пользователей `*@guest.meebo.org`. Он вам понадобится, если вы собираетесь
использовать виджет [meebome](http://www.meebome.com/) и сообщения принимать в
Ткаббере. Все ошибки и запросы присылайте [**Feez-у**](Участник_Feez.md).

*  **Файл:** [*Meebome-0.2.tar.gz*](../files/Meebome-0.2.tar.gz) (1K)
*  **Файл:** [Media:Meebome-0.2.tar.gz](../files/Meebome-0.2.tar.gz) (1K) 

### <a id="Mimetex"></a>Mimetex
## <a id="Mimetex"></a>Mimetex

Плагин предназначен для отображения математических формул в нотации LaTeX в
Плагин предназначен для отображения математических формул в нотации LaTeX в виде встроенных в окно чата изображений. _Работает только с Ткаббером версии 0.10.0._ 
виде встроенных в окно чата изображений. _Работает только с Ткаббером версии
0.10.0._

Плагин работает так же, как и стандартный плагин **latex**, но использует в
Плагин работает так же, как и стандартный плагин **latex**, но использует в качестве "движка" [MimeTex](http://www.forkosh.com/mimetex.html). Соответственно, _**MimeTeX** должен быть установлен, чтобы этот плагин работал_. 
качестве "движка" [MimeTex](http://www.forkosh.com/mimetex.html).
Соответственно, _**MimeTeX** должен быть установлен, чтобы этот плагин
работал_.

**MimeTex**, однако же, представляет собой _один_ исполняемый файл, что даёт
**MimeTex**, однако же, представляет собой _один_ исполняемый файл, что даёт ему соответствующие преимущества перед плагином **latex**: он работает быстрее, и его намного проще установить; в частности, есть версия для Windows. 
ему соответствующие преимущества перед плагином **latex**: он работает быстрее,
и его намного проще установить; в частности, есть версия для Windows.

**Установка:**
**Установка:** 

1. Установите **MimeTex**:
1.  Установите **MimeTex**: 
   * Скачайте исходники и соберите бинарь сами, согласно
     [соответствующему разделу официальной страницы](http://www.forkosh.dreamhost.com/source_mimetex.html#quickbuild).
 *  Скачайте исходники и соберите бинарь сами, согласно [соответствующему разделу официальной страницы](http://www.forkosh.dreamhost.com/source_mimetex.html#quickbuild). Убедитесь, что собираете _без_ ключа `-DOPAQUE`. Если у вас тёмный фон окон чата в Ткаббере, собирайте с ключом `-DWHITE` чтобы получить белый цвет символов в формулах. 
     Убедитесь, что собираете _без_ ключа `-DOPAQUE`. Если у вас тёмный фон окон чата в Ткаббере, собирайте
     с ключом `-DWHITE` чтобы получить белый цвет символов в формулах.
   * Или скачайте уже готовую версию [оттуда же](http://www.forkosh.com/mimetex.html#precompiled).
     Там же есть версия под Windows.
 *  Или скачайте уже готовую версию [оттуда же](http://www.forkosh.com/mimetex.html#precompiled). Там же есть версия под Windows. 
 
1. Поставьте плагин, перезапустите Ткаббер, посетите группу настроек
   **Plugins → MimeTex** и установите там правильный путь до исполняемого файла
1.  Поставьте плагин, перезапустите Ткаббер, посетите группу настроек **Plugins → MimeTex** и установите там правильный путь до исполняемого файла **MimeTex**. 
   **MimeTex**.

Имейте в виду, что в [Debian GNU/Linux](http://www.debian.org) есть готовый
Имейте в виду, что в [Debian GNU/Linux](http://www.debian.org) есть готовый пакет (правда, похоже, он собран без поддержки антиалиасинга). 
пакет (правда, похоже, он собран без поддержки антиалиасинга).

**Использование:**
**Использование:** 

**MimeTex** пытается отобразить всё, что находится между парами токенов "$$", например:
**MimeTex** пытается отобразить всё, что находится между парами токенов "$$", например: 

    Это — $$f(x)=\int_{-\infty}^xe^{-t^2}dt$$ формула

отображается как
отображается как 

> Это — ![Mimetex-example.gif](../images/Mimetex-example.gif) формула.
    Это — ![Mimetex-example.gif](../images/Mimetex-example.gif) формула.

**Ошибки/недоработки:**
**Ошибки/недоработки:** 

*  Не поддерживается преобразование цветов в генерируемых картинках, они
*  Не поддерживается преобразование цветов в генерируемых картинках, они вставляются в текст "как есть". 
   вставляются в текст "как есть".
*  Не поддерживается исправление антиалиасинга для цветов фона окна чата,
*  Не поддерживается исправление антиалиасинга для цветов фона окна чата, отличающихся от чисто белого или чисто чёрного. 
   отличающихся от чисто белого или чисто чёрного.
*  Отсутствует README.
*  Отсутствует перевод на русский.
*  Отсутствует README. 
*  Отсутствует перевод на русский. 

Файл: [*Mimetex.zip*](../files/Mimetex.zip) (~5 кб)
Файл: [mimetex.zip](../files/Mimetex.zip) (~5 кб) 

Текущая версия: 0.3, 16-May-2007.
Текущая версия: 0.3, 16-May-2007. 

Автор: [**kostix**](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 

**Последние изменения:**
**Последние изменения:** 

[**kostix**](Участник_Kostix.md) 21:33, 16 мая 2007 (MSD): Исправлен регексп для
поиска формул в тексте сообщения, изменён приоритет парсера формул с тем, чтобы
[kostix](Участник_Kostix.md) 21:33, 16 мая 2007 (MSD): Исправлен регексп для поиска формул в тексте сообщения, изменён приоритет парсера формул с тем, чтобы он отрабатывал раньше парсеров эмоциконок и стайлкодов (спасибо [Gman](Участник_Gman.md) за наводку). Теперь нормально просекаются формулы примеров №№ 6 и 9 с оф. сайта. 
он отрабатывал раньше парсеров эмоциконок и стайлкодов (спасибо
[**Gman**](Участник_Gman.md) за наводку). Теперь нормально просекаются формулы
примеров №№ 6 и 9 с оф. сайта.

### <a id="Nickomp"></a>Nickomp
## <a id="Nickomp"></a>Nickomp

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов**
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** Позволяет перебирать ники участников конференции по табу не только в окне ввода конференции, но и в привате любого участника этой конференции (привет @neris). Работает только с свн версией. © [http://juick.com/Jet/583486](http://juick.com/Jet/583486) 

Позволяет перебирать ники участников конференции по табу не только в окне ввода
конференции, но и в привате любого участника этой конференции (привет @neris).
Работает только с свн версией. ©
[http://juick.com/Jet/583486](http://juick.com/Jet/583486)

Скачать плагин можно по [ссылке](http://jetftp.narod.ru/nickomp.zip)
Скачать плагин можно по [ссылке](http://jetftp.narod.ru/nickomp.zip) в посте автора, но на всякий случай файл потырен и размещён и тут. 
в посте автора, но на всякий случай файл потырен и размещён и тут.

Файл: [**Nickomp.zip**](../files/Nickomp.zip)
Файл: [Nickomp.zip](../files/Nickomp.zip) 

Автор: [*Jet*](Участник_Jet.md)
Автор: [Jet](Участник_Jet.md) 

### <a id="NickSaneColors"></a>NickSaneColors
## <a id="NickSaneColors"></a>NickSaneColors

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

![Групчат до и после](../images/180px-Nicksanecolors_groupchat_before_after.png)
![](../images/180px-Nicksanecolors_groupchat_before_after.png)

![](../images/magnify-clip.png)

**Общая информация**
**Общая информация** 

Плагин переопределяет дефолтный массив цветов для ников
Плагин переопределяет дефолтный массив цветов для ников ($::plugins::nickcolors::NickColorPool) в зависимости от текущего цвета фона чата, установленного цветовой схемой. 
($::plugins::nickcolors::NickColorPool) в зависимости от текущего цвета фона
чата, установленного цветовой схемой.

В качестве критерия годности цвета используется расстояние (вернее его квадрат)
В качестве критерия годности цвета используется расстояние (вернее его квадрат) от проверяемого цвета до цвета фона, вычисленное с учётом различных весов красного, зелёного и синего по формуле: 
от проверяемого цвета до цвета фона, вычисленное с учётом различных весов
красного, зелёного и синего по формуле:

![Color distance.png](../images/Color_distance.png)
![Color distance.png](../images/Color_distance.png) 

Пользователю предлагается задать интервал по шкале от 0 до 100 (по умолчанию
Пользователю предлагается задать интервал по шкале от 0 до 100 (по умолчанию 40..60), при попадании в который цвет добавляется в массив используемых цветов. Значение 0 соответствует одинаковым цветам, значение 100 соответствует максимально отличающимся цветам. 
40..60), при попадании в который цвет добавляется в массив используемых цветов.
Значение 0 соответствует одинаковым цветам, значение 100 соответствует
максимально отличающимся цветам.

Цвета выбираются из массива, взятого здесь:
Цвета выбираются из массива, взятого здесь: [Colors with Names](http://wiki.tcl.tk/16166). 
[Colors with Names](http://wiki.tcl.tk/16166).

**Установка**
**Установка** 

*  Распаковать архив в стандартную директорию для плагинов (на \*nix системах
*  Распаковать архив в стандартную директорию для плагинов (на \*nix системах это ~/.tkabber/plugins/) 
   это ~/.tkabber/plugins/)
*  Включить плагин в менеджере расширений (Plugins Management)
*  Включить плагин в менеджере расширений (Plugins Management) 

**Использование**
**Использование** 

*  (Опционально) установить значения для порогового интервала.
*  (Опционально) установить значения для порогового интервала. 

Если в указанный диапазон не попадает ни одного цвета из исходных,
Если в указанный диапазон не попадает ни одного цвета из исходных, восстанавливается массив цветов по умолчанию. Также массив цветов по умолчанию восстанавливается при выгрузке плагина. 
восстанавливается массив цветов по умолчанию. Также массив цветов по умолчанию
восстанавливается при выгрузке плагина.

**Ошибки/недоработки**
**Ошибки/недоработки** 

Возможны.
Возможны. 

Файл: [**NickSaneColors.zip**](../files/Nicksanecolors.zip), 4.5K
Файл: [NickSaneColors.zip](../files/Nicksanecolors.zip), 4.5K 

Текущая версия: 0.1, 2010-02-19
Текущая версия: 0.1, 2010-02-19 

    http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/nicksanecolors

Автор: [**hekp0maht**](Участник_HEKP0MAHT.md)
Автор: [hekp0maht](Участник_HEKP0MAHT.md) 

### <a id="OSD_redux"></a>OSD redux
## <a id="OSD_redux"></a>OSD redux

Попытка привести штатный плагин OSD к удобоваримому — по меркам современного
Попытка привести штатный плагин OSD к удобоваримому — по меркам современного Ткаббера — виду: 
Ткаббера — виду:

*  Поддержка Customize (**Plugins → XOSD Status Display**) — настройки цвета,
*  Поддержка Customize (**Plugins → XOSD Status Display**) — настройки цвета, шрифта, тени и таймаутов; 
   шрифта, тени и таймаутов;
*  Управление местоположением вывода XOSD на экране.
*  Управление местоположением вывода XOSD на экране. 

Плагин _**не** доделан_ и выложен тут просто по просьбе одного ткабберовца. Это
Плагин _**не **доделан_ и выложен тут просто по просьбе одного ткабберовца. Это означает, что не все опции работают (или работают не так, как задумывалось). 
означает, что не все опции работают (или работают не так, как задумывалось).

Несмотря на это, плагин вполне себе работает на машине автора.
Несмотря на это, плагин вполне себе работает на машине автора. 

Файл: [**Tkabber-osd.zip**](../files/Tkabber-osd.zip), ~3k
Файл: [tkabber-osd.zip](../files/Tkabber-osd.zip), ~3k 

Автор: [**Kostix**](Участник_Kostix.md)
Автор: [Kostix](Участник_Kostix.md) 

**Примечание:** на всякий случай учтите, что:
**Примечание:** на всякий случай учтите, что: 

*  Плагин предназначен для
*  Плагин предназначен для [X Window System](http://en.wikipedia.org/wiki/X_Window_System) и не работает в Windows; 
   [X Window System](http://en.wikipedia.org/wiki/X_Window_System)
   и не работает в Windows;
*  Он требует наличия работающего
   [XOSD-сервера и утилиты osd\_cat к нему](http://ignavus.net/software.html),
   (подробнее можно почитать [тут](http://ldots.org/xosd-guide/) ).
*  Он требует наличия работающего [XOSD-сервера и утилиты osd\_cat к нему](http://ignavus.net/software.html), (подробнее можно почитать [тут](http://ldots.org/xosd-guide/) ). 

### <a id="Patches"></a>Patches
## <a id="Patches"></a>Patches

Плагин, который использует одну из особенностей языка, на котором написан
Плагин, который использует одну из особенностей языка, на котором написан Ткаббер, и позволяет «патчить» код Ткаббера без его изменения. Плагин состоит из 2 частей: сам файл плагина (patches.zip/plugins/patches/patches.tcl) и файлы пропатченных процедур (patches.zip/patches/\*.tcl). Работает всё достаточно просто: во время загрузки плагина он (плагин) загружает все файлы с расширением \*.tcl из папки patches.zip/patches/, которая должна находиться там же, где и config.tcl. 
Ткаббер, и позволяет «патчить» код Ткаббера без его изменения. Плагин состоит
из 2 частей: сам файл плагина (patches.zip/plugins/patches/patches.tcl) и файлы
пропатченных процедур (patches.zip/patches/\*.tcl). Работает всё достаточно
просто: во время загрузки плагина он (плагин) загружает все файлы с расширением
\*.tcl из папки patches.zip/patches/, которая должна находиться там же, где и
config.tcl.

**Описание патчей:**
**Описание патчей:** 

*  1\_smart-emoticons.tcl — Устанавливает порядок смайлов согласно тому,
*  1\_smart-emoticons.tcl — Устанавливает порядок смайлов согласно тому, как они записаны в icondef.xml и убирает поля в меню смайлов. 
   как они записаны в icondef.xml и убирает поля в меню смайлов.
*  2\_block-retry-server-messages.tcl — Блокирует повторяющиеся сообщения
*  2\_block-retry-server-messages.tcl — Блокирует повторяющиеся сообщения о смене статуса и рангов / ролей в конференциях. 
   о смене статуса и рангов / ролей в конференциях.
*  3\_recoloring-chat.tcl — Меняет цвета элементов окна чата.
*  4\_status-panel-and-window.tcl — Заменяет стандартную статусную панель.
*  3\_recoloring-chat.tcl — Меняет цвета элементов окна чата. 
*  4\_status-panel-and-window.tcl — Заменяет стандартную статусную панель. Добавляет окно для установки статуса, приоритета и статусного собщения, а также значки статусов в меню. 
   Добавляет окно для установки статуса, приоритета и статусного собщения,
   а также значки статусов в меню.
*  5\_draw-subject-of-chat-window.tcl — Показывает тему сообщения (не
*  5\_draw-subject-of-chat-window.tcl — Показывает тему сообщения (не путать с темой конференции) в окнах чата. 
   путать с темой конференции) в окнах чата.
*  6\_roster-bg-image.tcl (отключён) — Добавляет фоновое изображение
*  6\_roster-bg-image.tcl (отключён) — Добавляет фоновое изображение в ростер (расположение задаётся в коде патча). 
   в ростер (расположение задаётся в коде патча).
*  7\_recalc\_position-balloon.tcl — Размещает всплывающую подсказку слева
*  7\_recalc\_position-balloon.tcl — Размещает всплывающую подсказку слева или сверху от курсора, если недостаточно места для её отображения (Windows). 
   или сверху от курсора, если недостаточно места для её отображения (Windows).
*  8\_del-roster-horizontal-scrollbar.tcl — Удаляет горизонтальную прокрутку
*  8\_del-roster-horizontal-scrollbar.tcl — Удаляет горизонтальную прокрутку в ростере. 
   в ростере.
*  9\_roster-avatars.tcl — Добавляет vCard-аватары в ростер, показывает
*  9\_roster-avatars.tcl — Добавляет vCard-аватары в ростер, показывает сообщение статуса под ником, жирный шрифт для групп контактов. Аватары обновляются при проверке vCard, сохранение аватар происходит только для авторизованных пользователей, при удалении аватары из vCard в клиенте она не удаляется. 
   сообщение статуса под ником, жирный шрифт для групп контактов. Аватары
   обновляются при проверке vCard, сохранение аватар происходит только для
   авторизованных пользователей, при удалении аватары из vCard в клиенте она не
   удаляется.
*  10\_recursor-chat.tcl — Меняет поведение курсора мыши в окне чата.
*  11\_sorted-jids-in-roster.tcl — Меняет порядок сортировки джидов,
*  10\_recursor-chat.tcl — Меняет поведение курсора мыши в окне чата. 
*  11\_sorted-jids-in-roster.tcl — Меняет порядок сортировки джидов, перемещая недоступные контакты в конец списка. 
   перемещая недоступные контакты в конец списка.
*  12\_disable-autoaway-is-tray — Блокирует выход из автоэвея, если окно
*  12\_disable-autoaway-is-tray — Блокирует выход из автоэвея, если окно свернуто в трей. 
   свернуто в трей.

> _**Внимание!** Несмотря на то, что никаких изменений в коде Ткаббера не
 _**Внимание!** Несмотря на то, что никаких изменений в коде Ткаббера не происходит, стоит учитывать, что файлы содержат в себе изменённые процедуры, которые могут вызывать некорректную работу в различных ревизиях Ткаббера._ 
  происходит, стоит учитывать, что файлы содержат в себе изменённые процедуры,
  которые могут вызывать некорректную работу в различных ревизиях Ткаббера._

Пара иллюстраций (возможно, через некоторое время помрут на картинкохостинге; в
Пара иллюстраций (возможно, через некоторое время помрут на картинкохостинге; в общем-то, не жалко :)). [Номер один](http://i38.tinypic.com/728vlu.png). [Номер два](http://i36.tinypic.com/t6t6h2.png) (непонятно, кому может понадобиться бэкграунд в виде картинки в ростере; полагаю, что даже если сделать элементы ростеров прозрачными, общий вид лучше не станет). 
общем-то, не жалко :)). [Номер один](http://i38.tinypic.com/728vlu.png).
[Номер два](http://i36.tinypic.com/t6t6h2.png) (непонятно, кому может понадобиться
бэкграунд в виде картинки в ростере; полагаю, что даже если сделать элементы
ростеров прозрачными, общий вид лучше не станет).

*  **Файл:** [*Patches.zip*](../files/Patches.zip)
*  **Файл:** [Patches.zip](../files/Patches.zip) 

Автор: [*Jet*](Участник_Jet.md)
Автор: [Jet](Участник_Jet.md) 

### <a id="Postpone_Text_добавлен_в_транк"></a>Postpone Text (добавлен в транк)
## <a id="Postpone_Text_добавлен_в_транк"></a>Postpone Text (добавлен в транк)

**Лирическое отступление**
**Лирическое отступление** 

> _Внимание!_ С ревизии 953 (18 фев 2007) интегрировано в транк в виде
 _Внимание!_ С ревизии 953 (18 фев 2007) интегрировано в транк в виде _встроенного_ средства, выполненного [teo](Участник_Teo.md) на основе данного плагина.  
  _встроенного_ средства, выполненного [**teo**](Участник_Teo.md) на основе данного
  плагина.

Оно несколько отличается от описанного здесь; отличия сформулированы в конце
Оно несколько отличается от описанного здесь; отличия сформулированы в конце этого раздела. 
этого раздела.

Пока автору плагина, обсуждаемого в этом разделе, неясно насколько лучше/хуже
Пока автору плагина, обсуждаемого в этом разделе, неясно насколько лучше/хуже новая встроенная версия, поэтому пока что данный плагин "поживёт" здесь. 
новая встроенная версия, поэтому пока что данный плагин "поживёт" здесь.

**Описание плагина**
**Описание плагина** 

[**Этот плагин**](../files/Postpone.tar.gz) (~5k) реализует достаточно глупую
вещь — с каждым окном ввода сеансов чата связывается собственный скрытый
[Этот плагин](../files/Postpone.tar.gz) (~5k) реализует достаточно глупую вещь — с каждым окном ввода сеансов чата связывается собственный скрытый текстовый буфер + добавляется биндинг, позволяющий: 
текстовый буфер + добавляется биндинг, позволяющий:

*  по первой активации биндинга _переместить_ текст из поля ввода в буфер;
*  по второй его активации переместить текст обратно.
*  по первой активации биндинга _переместить_ текст из поля ввода в буфер; 
*  по второй его активации переместить текст обратно. 

Основная идея: лично у меня ([**Kostix**](Участник_Kostix.md)) часто возникает
ситуация, когда я пишу длинный продуманный текст, и вдруг вижу, что надо _бы_
Основная идея: лично у меня ([Kostix](Участник_Kostix.md)) часто возникает ситуация, когда я пишу длинный продуманный текст, и вдруг вижу, что надо _бы_ что-то быстро написать в чат, отослать это, а затем продолжить редактирование. Причём сделать это быстрее, чем "выделить весь текст и скопировать в клипборд", и сделать это не трогая клипборд. 
что-то быстро написать в чат, отослать это, а затем продолжить редактирование.
Причём сделать это быстрее, чем "выделить весь текст и скопировать в клипборд",
и сделать это не трогая клипборд.

Данный плагин эту возможность реализует.
Данный плагин эту возможность реализует. 

Настраивается:
Настраивается: 

*  Событие (биндинг) для операций с буфером;
*  Фон поля ввода при полном буфере (отключабельно);
*  Способ вставки текста из буфера.
*  Событие (биндинг) для операций с буфером; 
*  Фон поля ввода при полном буфере (отключабельно); 
*  Способ вставки текста из буфера. 

Настройки плагина находятся в подгруппе "Postpone Text" группы "Chat".
Настройки плагина находятся в подгруппе "Postpone Text" группы "Chat". 

Приложен README с подробным описанием.
Приложен README с подробным описанием. 

**Внимание!** В настоящий момент плагин будет работать только с SVN-версией
**Внимание!** В настоящий момент плагин будет работать только с SVN-версией Ткаббера, снятой оттуда после того, как в транке появился тип "options" для элементов Customize (то есть в версиях начиная от 29 сентября 2006 года). Патч, реализующий "старый" тип "list", возможно, воспоследует. 
Ткаббера, снятой оттуда после того, как в транке появился тип "options" для
элементов Customize (то есть в версиях начиная от 29 сентября 2006 года). Патч,
реализующий "старый" тип "list", возможно, воспоследует.

**Внимание!** Если вы хотите использовать здешний плагин вместо нового
**Внимание!** Если вы хотите использовать здешний плагин вместо нового встроенного вместе с комбинацией Ctrl-q, вам понадобится "отучить" встроенный плагин от этой комбинации. 
встроенного вместе с комбинацией Ctrl-q, вам понадобится "отучить" встроенный
плагин от этой комбинации.

Для этого поместите в файл конфигурации Ткаббера вне любых хуков такой код:
Для этого поместите в файл конфигурации Ткаббера вне любых хуков такой код: 

    hook::add postload_hook {
        event delete <<ChatPushText>> <Control-q>
        event delete <<ChatPopText>>  <Control-g>
      event delete <<ChatPushText>> <Control-q>
      event delete <<ChatPopText>>  <Control-g>
    }

[**Kostix**](Участник_Kostix.md) 18:01, 28 октября 2006 (MSD)
[Kostix](Участник_Kostix.md) 18:01, 28 октября 2006 (MSD) 

**Отличия нового плагина [teo](Участник_Teo.md)**
**Отличия нового плагина [teo](Участник_Teo.md)** 

* Буфер теперь представляет собой _стек (LIFO),_ в который можно последовательно
*  Буфер теперь представляет собой _стек (LIFO),_ в который можно последовательно сохранить несколько кусков текста и потом последовательно извлечь их оттуда. 
  сохранить несколько кусков текста и потом последовательно извлечь их оттуда.
* Используется два жеста для управления текстом:
*  Используется два жеста для управления текстом: 
   * **Ctrl-q** — убрать текст из поля ввода и _добавить его_ в буфер, сделав
     там новую запись. Эта привязка связана с виртуальным событием `<<ChatPushText>>`.
 *  Ctrl-q — убрать текст из поля ввода и _добавить его_ в буфер, сделав там новую запись. Эта привязка связана с виртуальным событием `<<ChatPushText>>`. 
   * **Ctrl-g** — удалить последний "кусок" текста из буфера и вставить
     его справа от курсора в поле ввода. Эта привязка связана с виртуальным
     событием `<<ChatPopText>>`.
* Отсутствует визуальная индикация факта нахождения сохранённого
 *  Ctrl-g — удалить последний "кусок" текста из буфера и вставить его справа от курсора в поле ввода. Эта привязка связана с виртуальным событием `<<ChatPopText>>`. 
 
*  Отсутствует визуальная индикация факта нахождения сохранённого текста в буфере. 
  текста в буфере.
* Отсутствует настройка методов помещения текста из буфера в поле
*  Отсутствует настройка методов помещения текста из буфера в поле ввода — он всегда вставляется справа от курсора, определяющего текущее место вставки. 
  ввода — он всегда вставляется справа от курсора, определяющего текущее
  место вставки.

### <a id="Reject_subscription"></a>Reject subscription
## <a id="Reject_subscription"></a>Reject subscription

Плагин позволяет автоматически отклонять входящие запросы подписки с адресов,
Плагин позволяет автоматически отклонять входящие запросы подписки с адресов, отсутствующих в вашем ростере. Может быть полезно тем, кому надоедает часто видеть окно с запросом подписки и каждый раз ее отклонять. 
отсутствующих в вашем ростере. Может быть полезно тем, кому надоедает часто
видеть окно с запросом подписки и каждый раз ее отклонять.

* **Файл:** [**Reject\_subscription.zip**](../files/Reject_subscription.zip)
*  **Файл:** [Reject\_subscription.zip](../files/Reject_subscription.zip) 

Автор: [**Teo**](Участник_Teo.md)
Автор: [Teo](Участник_Teo.md) 

### <a id="Remote_Commands"></a>Remote Commands
## <a id="Remote_Commands"></a>Remote Commands

Плагин, который стоит использовать с особой осторожностью. Он позволяет
Плагин, который стоит использовать с особой осторожностью. Он позволяет удалённо выполнять команды на компьютере. Необходимые команды со всеми аргументами необходимо предварительно занести в список в начале файла. Первая команда будет командой по умолчанию. 
удалённо выполнять команды на компьютере. Необходимые команды со всеми
аргументами необходимо предварительно занести в список в начале файла. Первая
команда будет командой по умолчанию.

*  **Файл**: [*Remote\_commands-0.1.tar.gz*](../files/Remote_commands-0.1.tar.gz)
*  **Версия**: 0.1, 01-04-2007
*  **Файл**: [Media:Remote\_commands-0.1.tar.gz](../files/Remote_commands-0.1.tar.gz) 
*  **Версия**: 0.1, 01-04-2007 

[**feez**](Участник_Feez.md)
[feez](Участник_Feez.md) 

### <a id="Remote_IP_Address"></a>Remote IP Address
## <a id="Remote_IP_Address"></a>Remote IP Address

Плагин, добавляющий команду удалённого управления для получения IP-адреса
Плагин, добавляющий команду удалённого управления для получения IP-адреса соединения Tkabber-а с сервером. 
соединения Tkabber-а с сервером.

* **Файл**: для Tkabber из trunk:
  [remote\_ip\_address-tkabber-trunk.tar.gz](http://www.vsi.ru/~yegor/files/remote_ip_address-tkabber-trunk.tar.gz)
*  **Файл**: для Tkabber из trunk: [remote\_ip\_address-tkabber-trunk.tar.gz](http://www.vsi.ru/~yegor/files/remote_ip_address-tkabber-trunk.tar.gz) 
* **Файл**: для Tkabber 0.11.1:
  [remote\_ip\_address-tkabber-0.11.1.tar.gz](http://www.vsi.ru/~yegor/files/remote_ip_address-tkabber-0.11.1.tar.gz)
*  **Версия**: 07-02-2010
*  **Файл**: для Tkabber 0.11.1: [remote\_ip\_address-tkabber-0.11.1.tar.gz](http://www.vsi.ru/~yegor/files/remote_ip_address-tkabber-0.11.1.tar.gz) 
*  **Версия**: 07-02-2010 

[*yegor*](Участник_Yegor.md)
[yegor](Участник_Yegor.md) 

### <a id="Remote_Settings"></a>Remote Settings
## <a id="Remote_Settings"></a>Remote Settings

Плагин, позволяющий удаленно изменять настройки Ткаббера. Кроме того, это PoC
Плагин, позволяющий удаленно изменять настройки Ткаббера. Кроме того, это PoC плагин, показывающий, как создавать в плагине команды для удаленного вызова и как создавать мультишаговые команды (визарды). Будет использоваться в доке [How\_to\_add\_a\_new\_remote\_command](../en/How_to_add_a_new_remote_command.md) как пример. 
плагин, показывающий, как создавать в плагине команды для удаленного вызова и
как создавать мультишаговые команды (визарды). Будет использоваться в доке
[**How\_to\_add\_a\_new\_remote\_command**](../en/How_to_add_a_new_remote_command.md)
как пример.

* **Файл**: [*Remote\_settings-0.1.tar.gz*](../files/Remote_settings-0.1.tar.gz) (~4Kb)

* **Версия**: 0.1, 01-04-2007
*  **Файл**: [Media:Remote\_settings-0.1.tar.gz](../files/Remote_settings-0.1.tar.gz) (~4Kb) 
 
*  **Версия**: 0.1, 01-04-2007 

[**feez**](Участник_Feez.md)
[feez](Участник_Feez.md) 

### <a id="Roster_Avatars"></a>Roster Avatars
## <a id="Roster_Avatars"></a>Roster Avatars

Выглядит оно [так](../images/1112349.png).
Выглядит оно [так](../images/1112349.png). 

То же самое, что в патче «9\_roster-avatars.tcl» [**этого**](#Patches)
плагина. Добавляет vCard-аватары в ростер, показывает сообщение статуса под
То же самое, что в патче «9\_roster-avatars.tcl» [этого](Плагины.md#Patches) плагина. Добавляет vCard-аватары в ростер, показывает сообщение статуса под ником, жирный шрифт для групп контактов. Аватары обновляются при проверке vCard, сохранение аватар происходит только для авторизованных пользователей, при удалении аватары из vCard в клиенте она не удаляется. Аватарки контактов можно добавлять и самому: положить в папке .tkabber/vcard\_avatars картинку размером 30\*30 пикселей в формате png с названием, соответствующему полному jid контакта. 
ником, жирный шрифт для групп контактов. Аватары обновляются при проверке
vCard, сохранение аватар происходит только для авторизованных пользователей,
при удалении аватары из vCard в клиенте она не удаляется. Аватарки контактов
можно добавлять и самому: положить в папке .tkabber/vcard\_avatars картинку
размером 30\*30 пикселей в формате png с названием, соответствующему полному
jid контакта.

*  Небольшое изменение: изменён (уменьшен) размер аватар до 30\*30 пикс.
*  Установка: распаковать архив в папку с плагинами, запустить Ткаббер.
*  Небольшое изменение: изменён (уменьшен) размер аватар до 30\*30 пикс. 
*  Установка: распаковать архив в папку с плагинами, запустить Ткаббер. 

*  **Файл:** [*Rosteravatars.zip*](../files/Rosteravatars.zip)
*  **Файл:** [Rosteravatars.zip](../files/Rosteravatars.zip) 

Автор: [*Jet*](Участник_Jet.md)
Автор: [Jet](Участник_Jet.md)  

Выпилил в отдельный плагин: [**BrennendeR**](Участник_Brennende.md)
Выпилил в отдельный плагин: [BrennendeR\_](Участник_Brennende.md) 

### <a id="Rsssaver"></a>Rsssaver
## <a id="Rsssaver"></a>Rsssaver

Поскольку Ткаббер не кэширует новости при некорректном выходе, то у людей, не
Поскольку Ткаббер не кэширует новости при некорректном выходе, то у людей, не закрывающих Ткаббер днями/неделями, возникали случаи, когда в кэше находились новости недельной (и более) давности. Данный плагин кэширует новости через %n пришедших сообщений, а также добавляет кнопку сохранения в окно новостей (для ручного сохранения). 
закрывающих Ткаббер днями/неделями, возникали случаи, когда в кэше находились
новости недельной (и более) давности. Данный плагин кэширует новости через %n
пришедших сообщений, а также добавляет кнопку сохранения в окно новостей (для
ручного сохранения).

[**eXire**](Участник_EXire.md).
[eXire](Участник_EXire.md). 

*  **Файл** [*Rsssaver-0.2.3.tar.gz*](../files/Rsssaver-0.2.3.tar.gz) (1K)
*  **Файл** [Media:rsssaver-0.2.3.tar.gz](../files/Rsssaver-0.2.3.tar.gz) (1K) 

### <a id="Savebtn"></a>Savebtn
## <a id="Savebtn"></a>Savebtn

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

Расширение, позволяющее сохранять фото из vCard. После установки в окне
просмотра информации о пользователе, на вкладке "Фотография", появится кнопка
Расширение, позволяющее сохранять фото из vCard. После установки в окне просмотра информации о пользователе, на вкладке "Фотография", появится кнопка "Сохранить фото". 

"Сохранить фото".
*  **Файл:** [Savebtn.zip](../files/Savebtn.zip) 

*  **Файл:** [*Savebtn.zip*](../files/Savebtn.zip)

Автор: [*Jet*](Участник_Jet.md)
Автор: [Jet](Участник_Jet.md) 

### <a id="Server_Info"></a>Server Info
## <a id="Server_Info"></a>Server Info

Добавляет в меню по правой кнопке для контакта (в контактах или в списке
Добавляет в меню по правой кнопке для контакта (в контактах или в списке участников конференции) пункты для получения информации о сервере этого контакта и для того, чтобы непосредственно открыть окно Service discovery на контакте или на его сервере. 
участников конференции) пункты для получения информации о сервере этого
контакта и для того, чтобы непосредственно открыть окно Service discovery на
контакте или на его сервере.

* **Файл:** [server\_info.tar.gz](http://sgolovan.nes.ru/jabber/tmp/server_info.tar.gz) (1K)
* **Файл:** для версии 0.11.1 [*server\_info.tar.gz*](../files/Server_info.tar.gz) (1K)
*  **Файл:** [server\_info.tar.gz](http://sgolovan.nes.ru/jabber/tmp/server_info.tar.gz) (1K) 
*  **Файл:** для версии 0.11.1 [server\_info.tar.gz](../files/Server_info.tar.gz) (1K) 

[**Teo**](Участник_Teo.md)
[Teo](Участник_Teo.md) 

### <a id="So_keepalive"></a>So\_keepalive
## <a id="So_keepalive"></a>So\_keepalive

Плагин предназначен для включения опции SO\_KEEPALIVE на сокетах соединений,
Плагин предназначен для включения опции SO\_KEEPALIVE на сокетах соединений, устанавливаемых Ткаббером. 
устанавливаемых Ткаббером.

Требует наличия пакета [Tclx](http://tclx.sourceforge.net/).
Требует наличия пакета [Tclx](http://tclx.sourceforge.net/). 

"Очень бета" в том смысле, что требует очень серьёзного тестирования, а так же
"Очень бета" в том смысле, что требует очень серьёзного тестирования, а так же [настройки _Вашей_ системы](http://libkeepalive.sourceforge.net/docs/TCP-Keepalive-HOWTO) для того, чтобы механизм TCP keepalive делал то, что Вы от него ожидаете. 
[настройки _Вашей_
системы](http://libkeepalive.sourceforge.net/docs/TCP-Keepalive-HOWTO) для
того, чтобы механизм TCP keepalive делал то, что Вы от него ожидаете.

Читайте README.
Читайте README. 

Файл: [**So\_keepalive.zip**](../files/So-keepalive.zip), ~3.5k
Файл: [so\_keepalive.zip](../files/So-keepalive.zip), ~3.5k 

Автор: [**Kostix**](Участник_Kostix.md)
Автор: [Kostix](Участник_Kostix.md) 

### <a id="Spam_filter"></a>Spam filter
## <a id="Spam_filter"></a>Spam filter

Подтверждает сообщения, которые не сочтёт спамом.
Подтверждает сообщения, которые не сочтёт спамом. 

Для фильтрации требуется:
Для фильтрации требуется: 

1. Джид+ресурс в настройках конференции в качестве фильтра.
1. Джид+ресурс в настройках конференции в качестве фильтра. 

2. Присутствие в конференции.
2. Присутствие в конференции. 

*  **Файл:** [spamfilter.tar.gz](http://alefix.narod.ru/spamfilter.tar.gz), 511b
*  **Файл:** [spamfilter.tar.gz](http://alefix.narod.ru/spamfilter.tar.gz), 511b 

[*alfix*](Участник_Alfix.md)
[alfix](Участник_Alfix.md) 

### <a id="Tab_number"></a>Tab number
## <a id="Tab_number"></a>Tab number

Переделка [**патча**](Патчи.md#Нумерация_закладок)
[**Lknight'а**](Участник_Lknight.md) в плагин. Сделано не очень красиво,
Переделка [патча](Патчи.md#Нумерация_закладок) [Lknight'а](Участник_Lknight.md) в плагин. Сделано не очень красиво, но ничего более умного не придумал. Если есть какие-то идеи, то прошу сообщить [eXire](Участник_EXire.md). 
но ничего более умного не придумал. Если есть какие-то идеи,
то прошу сообщить [**eXire**](Участник_EXire.md).

*  **Файл:** [*Tab\_number-0.1.2.tar.gz*](../files/Tab_number-0.1.2.tar.gz) (1K)
*  **Файл:** [Media:tab\_number-0.1.2.tar.gz](../files/Tab_number-0.1.2.tar.gz) (1K) 

### <a id="Tkabho"></a>Tkabho
## <a id="Tkabho"></a>Tkabho

Первая попытка приделать бота к Ткабберу для возможности использования простыми
Первая попытка приделать бота к Ткабберу для возможности использования простыми пользователями без настройки чего-либо. Плагин написан на основе моего jabber-бота на тикле — [taho](http://taho.googlecode.com). 
пользователями без настройки чего-либо. Плагин написан на основе моего
jabber-бота на тикле — [taho](http://taho.googlecode.com).

[архив zip](http://taho.googlecode.com/files/tkabho.zip)
    [архив zip](http://taho.googlecode.com/files/tkabho.zip)

[архив tar.bz2](http://taho.googlecode.com/files/tkabho.tar.bz2)
    [архив tar.bz2](http://taho.googlecode.com/files/tkabho.tar.bz2)

Автор: [*Kellin*](Участник_Kellin.md).
Автор: [Kellin](Участник_Kellin.md). 

### <a id="Vcardavatars"></a>Vcardavatars
## <a id="Vcardavatars"></a>Vcardavatars

![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов **
![(!)](../images/Ok_icon.png) **Включить в Менеджере плагинов ** 

Показывает аватары из вкард в окне чата. Изображения обновляются при просмотре
Показывает аватары из вкард в окне чата. Изображения обновляются при просмотре информации о пользователе и хранятся локально. Пока нет работы с альфа-каналом. 
информации о пользователе и хранятся локально. Пока нет работы с альфа-каналом.

> _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._
 _**Внимание!** Плагин будет работать только с SVN-версией Ткаббера._ 

* **Файл:** [*Vcardavatars.zip*](../files/Vcardavatars.zip)
*  **Файл:** [Vcardavatars.zip](../files/Vcardavatars.zip) 

Автор: [*Jet*](Участник_Jet.md)
Автор: [Jet](Участник_Jet.md) 

### <a id="Wintweaks_устарел"></a>Wintweaks (устарел)
## <a id="Wintweaks_устарел"></a>Wintweaks (устарел)

> _Внимание!_ Начиная с [версии 0.11.0](http://tkabber.jabber.ru/node/464)
  Ткаббер содержит доработанную версию данного хака непосредственно в коде,
 _Внимание!_ Начиная с [версии 0.11.0](http://tkabber.jabber.ru/node/464) Ткаббер содержит доработанную версию данного хака непосредственно в коде, поэтому плагин потерял всякий смысл. Если вы "апгрейдите" Ткаббер до 0.11.0, удалите этот плагин. 
  поэтому плагин потерял всякий смысл. Если вы "апгрейдите" Ткаббер до 0.11.0,
  удалите этот плагин.

Плагин делает "подтяжку лица" некоторым аспектам интерфейса пользователя
Плагин делает "подтяжку лица" некоторым аспектам интерфейса пользователя Ткаббера, чтобы сделать его более "родным" для пользователей Windows. Плагин работает только в Windows. 
Ткаббера, чтобы сделать его более "родным" для пользователей Windows. Плагин
работает только в Windows.

В текущей версии плагин допиливает "сплиттеры" (тонкие узкие окна,
В текущей версии плагин допиливает "сплиттеры" (тонкие узкие окна, предназначенные для изменения взаимного размера окон, окружающих сплиттер с двух сторон): их можно зацепить мышкой по всей их длине, и они плоские (невидимы). 
предназначенные для изменения взаимного размера окон, окружающих сплиттер с
двух сторон): их можно зацепить мышкой по всей их длине, и они плоские
(невидимы).

**Ошибки/недоработки:**
**Ошибки/недоработки:** 

* Сплиттеры надо сделать раза в два уже.
*  Сплиттеры надо сделать раза в два уже. 

Файл: [*Wintweaks.zip*](../files/Wintweaks.zip) (~2 кб)
Файл: [wintweaks.zip](../files/Wintweaks.zip) (~2 кб) 

Текущая версия: 0.1, 24-Apr-2007.
Текущая версия: 0.1, 24-Apr-2007. 

Автор: [*kostix*](Участник_Kostix.md)
Автор: [kostix](Участник_Kostix.md) 


Changes to wiki/ru/Плагины/AntiSPIM.md.

1
2

3
4
5
6
7

8
9
10
11
12
13

14
15
16
17


18
19

20
21

22
23
24
25
26

27
28
29
30
31
32
33

34
35

36
37
38



1
2
3
4
5
6
7

8




9

10

11


12
13


14


15



16

17





18

19
20

21



22
23
24


+




-
+
-
-
-
-

-
+
-

-
-
+
+
-
-
+
-
-
+
-
-
-

-
+
-
-
-
-
-

-
+

-
+
-
-
-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Плагины/AntiSPIM/index.html)


# Плагины/AntiSPIM

Материал из Tkabber Wiki

Идея взята из отложенного протокола
Идея взята из отложенного протокола [JEP-0159 Spim blocking](http://www.jabber.org/jeps/jep-0159.html) но там предлагают реализовать на серверах а тут в Ткаббере. Первый вариант конечно лучше, но протокол то отложен, когда активируют и активируют ли вообще неизвестно. 
[JEP-0159 Spim blocking](http://www.jabber.org/jeps/jep-0159.html)
но там предлагают реализовать на серверах а тут в Ткаббере. Первый вариант
конечно лучше, но протокол то отложен, когда активируют и активируют ли вообще
неизвестно.

Суть протокола -- фильтровать все входящие сообщения и презенсы по следующим
Суть протокола -- фильтровать все входящие сообщения и презенсы по следующим правилам:  
правилам:

1. если from есть в ростере, то пропускать.
1. если from есть в списке jid-ов на которые недавно уходили сообщения
1.  если from есть в ростере, то пропускать. 
1.  если from есть в списке jid-ов на которые недавно уходили сообщения (последняя три дня к примеру), то пропускать. 
   (последняя три дня к примеру), то пропускать.
1. возможен еще конфигурируемый фильтр по серверу. К примеру для всех серверов
1.  возможен еще конфигурируемый фильтр по серверу. К примеру для всех серверов кроме icq.jabber.ru тоже пропускать. 
   кроме icq.jabber.ru тоже пропускать.
1. для всех остальных соообщение/презенс сохранить, а в ответ выслать случайную
1.  для всех остальных соообщение/презенс сохранить, а в ответ выслать случайную текстовую капчу, которую можно взять из файлика и ждать ответ некоторое время. Если ответ пришел и он верен -- показать сохраненное сообщение, иначе через некоторое время сохраненное сообщение удалить а JID забыть.  
   текстовую капчу, которую можно взять из файлика и ждать ответ некоторое время.
   Если ответ пришел и он верен -- показать сохраненное сообщение, иначе через
   некоторое время сохраненное сообщение удалить а JID забыть.

Список JID-ов, на которые отсылались сообщения, список JID-ов которым были
Список JID-ов, на которые отсылались сообщения, список JID-ов которым были высланы капчи,  ответы на эти капчи и сами сохраненные сообщения можно хранить на сервере в jabber:x:private ([JEP-0049](http://www.jabber.org/jeps/jep-0049.html)) при этом периодически (можно не по  таймеру, а во время очередного обновления данных) удалять записи с истекшим сроком годности. 
высланы капчи,  ответы на эти капчи и сами сохраненные сообщения можно хранить
на сервере в jabber:x:private
([JEP-0049](http://www.jabber.org/jeps/jep-0049.html)) при этом периодически
(можно не по  таймеру, а во время очередного обновления данных) удалять записи
с истекшим сроком годности.

Еще надо предусмотреть:
Еще надо предусмотреть:  

* зацикливание, когда на $from висит бот, который будет в ответ на каждую
*  зацикливание, когда на $from висит бот, который будет в ответ на каждую капчу высылать своё сообщения, например, список доступных команд. 
  капчу высылать своё сообщения, например, список доступных команд.
* сообщения от jid-ов из чата. Они не в ростере и им сообщения не высылались,
  но высылать им капчи нельзя. Надо как-то тоже обработать.
*  сообщения от jid-ов из чата. Они не в ростере и им сообщения не высылались, но высылать им капчи нельзя. Надо как-то тоже обработать. 


Changes to wiki/ru/Плагины/Juick.md.

1

2
3
4
5
6
7

8
9
10

11
12
13
14
15
16

17
18
19
20
21
22
23
24
25
26
27
28
29












30
31
32
33
34


35
36

37
38
39

40
41
42


43
44

45

46
47




48
49

50
51
52
53
54
55
56

57
58
59


60
61

62
63
64
65



1
2
3
4
5
6
7

8

9

10




11

12
13












14
15
16
17
18
19
20
21
22
23
24
25





26
27


28



29



30
31
32

33
34
35


36
37
38
39
40

41





42

43
44


45
46
47

48

49


50
51
52

+





-
+
-

-
+
-
-
-
-

-
+

-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
-
-
+
-
-
-
+
-
-
-
+
+

-
+

+
-
-
+
+
+
+

-
+
-
-
-
-
-

-
+

-
-
+
+

-
+
-

-
-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Плагины/Juick/index.html)


# Плагины/Juick

Материал из Tkabber Wiki

Плагин для жуйкования. То бишь, ведения (микро)блога на
Плагин для жуйкования. То бишь, ведения (микро)блога на [juick.com](http://juick.com). 
[juick.com](http://juick.com).

На данный момент нам известны оригинальная версия авторства
На данный момент нам известны оригинальная версия авторства [roche](http://juick.com/roche/) и её форк от [Totktonada](../Участник_Totktonada.md). Поскольку оригинальная версия не развивается уже достаточно давно, рекомендуется использовать форк (он же — версия из SVN tkabber-3rd-party, ссылки см. ниже). 
[roche](http://juick.com/roche/) и её форк от
[*Totktonada*](../Участник_Totktonada.md). Поскольку оригинальная версия не
развивается уже достаточно давно, рекомендуется использовать форк (он же —
версия из SVN tkabber-3rd-party, ссылки см. ниже).

Возможности списком:
Возможности списком: 

* Подсветка различными цветами сущностей (номеров, ников, тегов).
* Выделение цветом цитат (строк, начинающихся с символа '>').
* Вставка сущностей в текущую позицию ввода по клику правой клавишей.
* ![(!)](../../images/Ok_icon.png) **Включить в Менеджере плагинов **
* Меню по правой кнопке мыши:
   * Копирование сущностей в буфер обмена.
   * Открытие треда/блога/тега в браузере.
   * Подписка на тред.
* Подсветка приватных сообщений (PM) в окне чата. По умолчанию подобраны
  бросающиеся в глаза цвета: синие буквы на оранжевом фоне.
* Поддержка изменения цветов через xrdb.
* Персональными сообщениями считаются только приватные (PM) (было также для
*  Подсветка различными цветами сущностей (номеров, ников, тегов). 
*  Выделение цветом цитат (строк, начинающихся с символа '>'). 
*  Вставка сущностей в текущую позицию ввода по клику правой клавишей. 
*  ![(!)](../../images/Ok_icon.png) **Включить в Менеджере плагинов ** 
*  Меню по правой кнопке мыши: 
 *  Копирование сущностей в буфер обмена. 
 *  Открытие треда/блога/тега в браузере. 
 *  Подписка на тред. 
 
*  Подсветка приватных сообщений (PM) в окне чата. По умолчанию подобраны бросающиеся в глаза цвета: синие буквы на оранжевом фоне. 
*  Поддержка изменения цветов через xrdb. 
*  Персональными сообщениями считаются только приватные (PM) (было также для ответов на комментарии пользователя, но теперь сломано). Индикация остальных сообщений с Juick'а — как у сообщений из конференции. Это поведение отключаемо. 
  ответов на комментарии пользователя, но теперь сломано). Индикация остальных
  сообщений с Juick'а — как у сообщений из конференции. Это поведение
  отключаемо.
* Добавлена команда для подписки и просмотра треда: «S \#123456+».
* Выводится время появления поста на Juick'е (независимо от времени его прихода
*  Добавлена команда для подписки и просмотра треда: «S \#123456+». 
*  Выводится время появления поста на Juick'е (независимо от времени его прихода клиенту пользователя) из juick-xmpp-api. 
  клиенту пользователя) из juick-xmpp-api.
* Номерки выделяются во всех чатах. При нажатии на номер фокус перемешается на
*  Номерки выделяются во всех чатах. При нажатии на номер фокус перемешается на окно Juick'а (JID можно указать в настройках), и номер помещается в поле ввода. 
  окно Juick'а (JID можно указать в настройках), и номер помещается в поле
  ввода.
* Удаляется элемент jabber:x:oob из сообщений с Juick'а. Скажи «нет»
*  Удаляется элемент jabber:x:oob из сообщений с Juick'а. Скажи «нет» всплывающим окнам! 
  всплывающим окнам!
* Дополнение жуйковых команд и сущностей из открытого чата по клавише `<Tab>`.
* Отображение markdown-ссылок в окне Juick.
*  Дополнение жуйковых команд и сущностей из открытого чата по клавише Tab. 
*  Отображение markdown-ссылок в окне Juick. 

Плагин доступен через Subversion (tkabber-3rd-party) в двух инкарнациях:
Плагин доступен через Subversion (tkabber-3rd-party) в двух инкарнациях: 

*  
* <http://svn.xmpp.ru/repos/tkabber-3rd-party/branches/plugins-0.11.1/juick/>
* <http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/juick/>
    http://svn.xmpp.ru/repos/tkabber-3rd-party/branches/plugins-0.11.1/juick/
 
*  
    http://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/juick/

На данный момент (14.04.2012) обе ветки абсолютно идентичны и работают как с
На данный момент (14.04.2012) обе ветки абсолютно идентичны и работают как с Ткаббером 0.11.1, так и с SVN-версией Ткаббера. Достигается это с помощью слоя совместимости, который подключается, если плагин запущен под релизным (0.11.1) Ткаббером. Впрочем, некоторые отличия в работе плагина могут наблюдаться; к примеру, динамическая загрузка/выгрузка будет работать только с новым Ткаббером. 
Ткаббером 0.11.1, так и с SVN-версией Ткаббера. Достигается это с помощью слоя
совместимости, который подключается, если плагин запущен под релизным (0.11.1)
Ткаббером. Впрочем, некоторые отличия в работе плагина могут наблюдаться; к
примеру, динамическая загрузка/выгрузка будет работать только с новым
Ткаббером.

Как оригинальная версия, так и форк доступны через Git:
Как оригинальная версия, так и форк доступны через Git: 

* Оригинал: <https://github.com/feuerbach/tkabber4juick>
* Форк: <https://github.com/Totktonada/tkabber4juick>
*  Оригинал: [https://github.com/feuerbach/tkabber4juick](https://github.com/feuerbach/tkabber4juick) 
*  Форк: [https://github.com/Totktonada/tkabber4juick](https://github.com/Totktonada/tkabber4juick) 

На Juick’е про плагин обычно пишут с тегом
На Juick’е про плагин обычно пишут с тегом [\*tkabber4juick](http://juick.com/tag/tkabber4juick). 
[\*tkabber4juick](http://juick.com/tag/tkabber4juick).

Авторы: [roche](http://juick.com/roche),
[*Totktonada*](../Участник_Totktonada.md).
Авторы: [roche](http://juick.com/roche), [Totktonada](../Участник_Totktonada.md). 


Changes to wiki/ru/Планы_на_будущее.md.

1

2
3
4
5
6
7

8
9
10

11
12
13
14



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56






































57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72














73
74
75


76
77
78
79
80
81

82
83
84
85
86
87
88
89
90

91
92

93
94
95
96





97
98
99
100
101
102
103
104
105

106
107

108
109
110

111
112
113
114

115
116
117
118
119





120
121
122
123
124
125
126
127
128
129

130
131
132

133
134

135
136
137
138
139

140
141
142





143
144
145
146
147
148
149
150
151

152
153

154
155
156

157
158

159
160
161

162
163

164
165
166

167
168

169
170

171
172

173
174

175
176
177

178
179

180
181

182
183

184
185

186
187

188
189
190
191
192
193

194
195

196
197
198

199
200
201
202
203
204


205
206

207
208
209

210
211
212

213
214

215
216

217
218

219
220

221
222
223

224
225

226
227
228


229
230
231
232
233
234
235




236
237
238



239
240
241

242
243

244
245
246
247
248

249
250

251
252

253
254
255
256
257
258

259
260

261
262
263
264
265


266

267
268
269
270
271

272
273

274
275

276
277
278

279
280

281
282

283
284

285
286
287
288
289

290
291

292
293

294
295
296

297
298

299
300

301
302
303
304
305

306
307

308
309

310
311
312

313
314
315
316
317
318
319

320
321

322
323

324
325
326
327

328
329

330
331
332
333
334

335
336

337
338

339
340

341
342
343


344
345

346
347
348

349
350
351
352

353
354

355
356
357
358

359
360

361
362

363
364
365
366

367
368

369
370
371

372
373
374
375

376
377
378
379
380
381
382
383
384
385
386
387
388
389


390

391
392

393
394
395

396
397

398
399
400
401
402
403
404
405
406
407
408
409
410
411
412

413
414

415
416
417

418
419
420

421
422

423
424

425
426
427
428
429
430





431
432

433
434

435
436

437
438

439
440
441
442
443
444
445
446
447
448
449
450
451












452
453

454
455

456
457

458
459
460

461
462

463
464
465
466

467
468

469
470

471
472

473
474
475

476
477

478
479
480
481

482
483
484
485

486
487
488

489
490

491
492

493
494
495

496
497

498
499
500
501

502
503

504
505
506
507

508
509

510
511

512
513
514

515
516

517
518
519

520
521

522
523
524
525

526
527
528
529
530
531
532

533
534

535
536

537
538
539
540
541
542
543

544
545

546
547
548
549
550
551
552


553
554

555
556

557
558

559
560
561

562
563

564
565
566


567
568

569
570

571
572

573
574

575
576
577

578
579
580
581


582
583

584
585
586

587
588

589
590

591
592
593
594
595

596
597

598
599

600
601

602
603

604
605

606
607

608
609

610
611

612
613
614

615
616

617
618
619

620
621

622
623
624
625
626

627
628

629
630
631

632
633

634
635
636

637
638
639

640
641

642
643
644

645
646
647

648
649
650
651
652
653
654

655
656
657
658
659



1
2
3
4
5
6
7

8

9

10

11


12
13
14
15
16
17
18






































19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58














59
60
61
62
63
64
65
66
67
68
69
70
71
72
73


74
75




76

77







78

79
80

81


82

83
84
85
86
87

88







89
90

91



92




93
94
95
96


97
98
99
100
101



102






103

104

105
106

107


108


109
110


111
112
113
114
115
116








117
118

119

120

121
122

123

124

125
126

127

128

129
130

131
132

133
134

135
136

137

138

139
140

141
142

143
144

145
146

147
148

149




150

151
152

153

154

155






156
157
158

159

160

161

162

163
164

165
166

167
168

169
170

171

172

173
174

175
176


177
178







179
180
181
182
183


184
185
186

187

188
189

190



191

192
193

194
195

196




197

198


199




200
201
202

203



204

205
206

207
208

209

210

211
212

213
214

215
216

217



218

219
220

221
222

223



224
225

226
227

228



229

230
231

232
233

234

235

236





237

238
239

240
241

242


243

244
245

246



247

248
249

250
251

252
253

254
255


256
257


258
259


260


261

262
263

264


265

266
267

268
269

270


271

272
273

274

275

276
277
278
279

280













281
282
283

284
285

286

287

288
289

290













291

292
293

294

295

296

297

298
299

300
301

302
303





304
305
306
307
308
309

310
311

312
313

314
315

316
317












318
319
320
321
322
323
324
325
326
327
328
329
330

331
332

333
334

335

336

337
338

339


340

341
342

343
344

345
346

347

348

349
350

351


352

353


354

355

356

357
358

359
360

361

362

363
364

365


366

367
368

369


370

371
372

373
374

375

376

377
378

379

380

381
382

383


384

385
386
387
388
389
390
391

392
393

394
395

396


397




398
399

400




401


402
403
404

405
406

407
408

409

410

411
412

413
414


415
416
417

418
419

420
421

422
423

424

425

426




427
428
429

430
431


432
433

434
435

436



437

438
439

440
441

442
443

444
445

446
447

448
449

450
451

452
453

454

455

456
457

458

459

460
461

462



463

464
465

466

467

468
469

470

471

472

473

474
475

476

477

478

479

480



481
482
483

484


485


486
487
488

+





-
+
-

-
+
-

-
-
+
+
+




-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
+
+
-
-
-
-

-
+
-
-
-
-
-
-
-

-
+

-
+
-
-

-
+
+
+
+
+
-

-
-
-
-
-
-
-
+

-
+
-
-
-
+
-
-
-
-
+



-
-
+
+
+
+
+
-
-
-

-
-
-
-
-
-
+
-

-
+

-
+
-
-

-
-
+

-
-
+
+
+
+
+

-
-
-
-
-
-
-
-
+

-
+
-

-
+

-
+
-

-
+

-
+
-

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+

-
+

-
+
-
-
-
-

-
+

-
+
-

-
+
-
-
-
-
-
-
+
+

-
+
-

-
+
-

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+

-
-
+
+
-
-
-
-
-
-
-
+
+
+
+

-
-
+
+
+
-

-
+

-
+
-
-
-

-
+

-
+

-
+
-
-
-
-

-
+
-
-
+
-
-
-
-

+
+
-
+
-
-
-

-
+

-
+

-
+
-

-
+

-
+

-
+

-
+
-
-
-

-
+

-
+

-
+
-
-
-
+

-
+

-
+
-
-
-

-
+

-
+

-
+
-

-
+
-
-
-
-
-

-
+

-
+

-
+
-
-

-
+

-
+
-
-
-

-
+

-
+

-
+

-
+

-
-
+
+
-
-
+

-
-
+
-
-

-
+

-
+
-
-

-
+

-
+

-
+
-
-

-
+

-
+
-

-
+



-
+
-
-
-
-
-
-
-
-
-
-
-
-
-

+
+
-
+

-
+
-

-
+

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-

-
+

-
+
-

-
+
-

-
+

-
+

-
+

-
-
-
-
-
+
+
+
+
+

-
+

-
+

-
+

-
+

-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+

-
+

-
+

-
+
-

-
+

-
+
-
-

-
+

-
+

-
+

-
+
-

-
+

-
+
-
-

-
+
-
-

-
+
-

-
+

-
+

-
+
-

-
+

-
+
-
-

-
+

-
+
-
-

-
+

-
+

-
+
-

-
+

-
+
-

-
+

-
+
-
-

-
+






-
+

-
+

-
+
-
-

-
-
-
-
+

-
+
-
-
-
-

-
-
+
+

-
+

-
+

-
+
-

-
+

-
+

-
-
+
+

-
+

-
+

-
+

-
+
-

-
+
-
-
-
-
+
+

-
+

-
-
+

-
+

-
+
-
-
-

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-

-
+

-
+
-

-
+

-
+
-
-
-

-
+

-
+
-

-
+

-
+
-

-
+
-

-
+

-
+
-

-
+
-

-
+
-
-
-



-
+
-
-

-
-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Планы_на_будущее/index.html)


# Планы на будущее

Материал из Tkabber Wiki

Сюда давайте писать то, что собираемся на этой вики (а также просто касательно
Сюда давайте писать то, что собираемся на этой вики (а также просто касательно Ткаббера) сделать: про что написать статью, что протестировать и т.д. 
Ткаббера) сделать: про что написать статью, что протестировать и т.д.

То, что уже сделано, можно не стирать, а <s>зачёркивать</s>, чтобы было видно
То, что уже сделано, можно не стирать, а <s>зачёркивать</s>, чтобы было видно ход работ. 
ход работ.

Просьба не путать разделы "Разработка" и "Вики". В раздел "Вики" вносите ваши
пожелания, касающиеся организации именно вики, а не проблем с Ткаббером.
Просьба не путать разделы "Разработка" и "Вики". В раздел "Вики" вносите ваши пожелания, касающиеся организации именно вики, а не проблем с Ткаббером. 

---

## <a id="toc"></a>Содержание

* [1 Разработка](#Разработка)
   * [1.1 Удаленное управление](#Удаленное_управление)
   * [1.2 <s>Контакты онлайн - отображать вверху списка</s>](#sКонтакты_онлайн_-_отображать_вверху_списка_s)
   * [1.3 MUC. Пресеты для причин kick/ban](#MUC._Пресеты_для_причин_kick_ban)
   * [1.4 Ъ положение Ткаббера на раб. столе](#Ъ_положение_Ткаббера_на_раб._столе)
   * [1.5 Шрефты @;%&!](#Шрефты_)
   * [1.6 Меню в истории разговоров](#Меню_в_истории_разговоров)
   * [1.7 Статусбар в полнотекстовом поиске](#Статусбар_в_полнотекстовом_поиске)
   * [1.8 Нормальная закладка при потере фокуса](#Нормальная_закладка_при_потере_фокуса)
   * [1.9 ГУЙ для метаконтактов](#ГУЙ_для_метаконтактов)
   * [1.10 Сделать сохранение положения ростера (свернут-развернут) (Fixer)](#Сделать_сохранение_положения_ростера_свернут-развернут_Fixer)
   * [1.11 Добавить возможность сохранять пароль в md5 виде для автологина  (Fixer)](#Добавить_возможность_сохранять_пароль_в_md5_виде_для_автологина__Fixer)
   * [1.12 Встроить плагин autoconnect (борьба с "№;%:\*" транспортами) (сомнительно)](#Встроить_плагин_autoconnect_борьба_с_№_транспортами_сомнительно)
   * [1.13 Нумерация закладок](#Нумерация_закладок)
   * [1.14 Поиск в диско и т.д.](#Поиск_в_диско_и_т.д.)
   * [1.15 Звуки к играм](#Звуки_к_играм)
   * [1.16 Доработать кое-какие игры](#Доработать_кое-какие_игры)
   * [1.17 <s>Кэш новостей</s>](#sКэш_новостей_s)
   * [1.18 <s>Игнор в выпадающем меню на JID</s>](#sИгнор_в_выпадающем_меню_на_JID_s)
   * [1.19 Подтверждения](#Подтверждения)
      * [1.19.1 <s>Сделать хотя бы в виде патча</s>](#sСделать_хотя_бы_в_виде_патча_s)
      * [1.19.2 <s>Довести их до уровня плагина</s>](#sДовести_их_до_уровня_плагина_s)
   * [1.20 Чебуратор](#Чебуратор)
   * [1.21 Закладки](#Закладки)
      * [1.21.1 Автоматическая установка](#Автоматическая_установка)
      * [1.21.2 Выборочное удаление](#Выборочное_удаление)
   * [1.22 Управление ткаббером через командную строку](#Управление_ткаббером_через_командную_строку)
   * [1.23 Доделать мультилогин](#Доделать_мультилогин)
   * [1.24 Анти SPIM](#Анти_SPIM)
   * [1.25 Плагин "Whiteboard" aka "Грифельная доска"](#Плагин_Whiteboard_aka_Грифельная_доска)
   * [1.26 Отправка сообщения нескольким контактам](#Отправка_сообщения_нескольким_контактам)
   * [1.27 <s>Озвучить бы Spy</s>](#sОзвучить_бы_Spy_s)
   * [1.28 <s>!Пофиксить! цвет в Spy</s>](#sПофиксить_цвет_в_Spy_s)
   * [1.29 <s>!Пофиксить! цвет по адресу "История разговоров - логи" под темой дарк (Fixer)</s>](#sПофиксить_цвет_по_адресу_История_разговоров_-_логи_под_темой_дарк_Fixer_s)
   * [1.30 Довести до ума XHTML](#Довести_до_ума_XHTML)
   * [1.31 Мои ожидания от Attline (Attention Line) plugin'а](#Мои_ожидания_от_Attline_Attention_Line_pluginа)
   * [1.32 Плагин для взятия ресурса из файла](#Плагин_для_взятия_ресурса_из_файла)
   * [1.33 Кнопки быстрого доступа к нужным функциям некоторых плагинов](#Кнопки_быстрого_доступа_к_нужным_функциям_некоторых_плагинов)
   * [1.34 Показ во всплывающем окне (тултипе) посетителя конфы всех его ников в данной конфе](#Показ_во_всплывающем_окне_тултипе_посетителя_конфы_всех_его_ников_в_данной_конфе)
 * [1.1 Удаленное управление](#Удаленное_управление)
 * [1.2 <s>Контакты онлайн - отображать вверху списка</s>](#sКонтакты_онлайн_-_отображать_вверху_списка_s)
 * [1.3 MUC. Пресеты для причин kick/ban](#MUC._Пресеты_для_причин_kick_ban)
 * [1.4 Ъ положение Ткаббера на раб. столе](#Ъ_положение_Ткаббера_на_раб._столе)
 * [1.5 Шрефты @;%&!](#Шрефты_@%&)
 * [1.6 Меню в истории разговоров](#Меню_в_истории_разговоров)
 * [1.7 Статусбар в полнотекстовом поиске](#Статусбар_в_полнотекстовом_поиске)
 * [1.8 Нормальная закладка при потере фокуса](#Нормальная_закладка_при_потере_фокуса)
 * [1.9 ГУЙ для метаконтактов](#ГУЙ_для_метаконтактов)
 * [1.10 Сделать сохранение положения ростера (свернут-развернут) (Fixer)](#Сделать_сохранение_положения_ростера_свернут-развернут_Fixer)
 * [1.11 Добавить возможность сохранять пароль в md5 виде для автологина  (Fixer)](#Добавить_возможность_сохранять_пароль_в_md5_виде_для_автологина__Fixer)
 * [1.12 Встроить плагин autoconnect (борьба с "№;%:\*" транспортами) (сомнительно)](#Встроить_плагин_autoconnect_борьба_с_№%_транспортами_сомнительно)
 * [1.13 Нумерация закладок](#Нумерация_закладок)
 * [1.14 Поиск в диско и т.д.](#Поиск_в_диско_и_т.д.)
 * [1.15 Звуки к играм](#Звуки_к_играм)
 * [1.16 Доработать кое-какие игры](#Доработать_кое-какие_игры)
 * [1.17 <s>Кэш новостей</s>](#sКэш_новостей_s)
 * [1.18 <s>Игнор в выпадающем меню на JID</s>](#sИгнор_в_выпадающем_меню_на_JID_s)
 * [1.19 Подтверждения](#Подтверждения)
  * [1.19.1 <s>Сделать хотя бы в виде патча</s>](#sСделать_хотя_бы_в_виде_патча_s)
  * [1.19.2 <s>Довести их до уровня плагина</s>](#sДовести_их_до_уровня_плагина_s)
 * [1.20 Чебуратор](#Чебуратор)
 * [1.21 Закладки](#Закладки)
  * [1.21.1 Автоматическая установка](#Автоматическая_установка)
  * [1.21.2 Выборочное удаление](#Выборочное_удаление)
 * [1.22 Управление ткаббером через командную строку](#Управление_ткаббером_через_командную_строку)
 * [1.23 Доделать мультилогин](#Доделать_мультилогин)
 * [1.24 Анти SPIM](#Анти_SPIM)
 * [1.25 Плагин "Whiteboard" aka "Грифельная доска"](#Плагин_Whiteboard_aka_Грифельная_доска)
 * [1.26 Отправка сообщения нескольким контактам](#Отправка_сообщения_нескольким_контактам)
 * [1.27 <s>Озвучить бы Spy</s>](#sОзвучить_бы_Spy_s)
 * [1.28 <s>!Пофиксить! цвет в Spy</s>](#sПофиксить_цвет_в_Spy_s)
 * [1.29 <s>!Пофиксить! цвет по адресу "История разговоров - логи" под темой дарк (Fixer)</s>](#sПофиксить_цвет_по_адресу_История_разговоров_-_логи_под_темой_дарк_Fixer_s)
 * [1.30 Довести до ума XHTML](#Довести_до_ума_XHTML)
 * [1.31 Мои ожидания от Attline (Attention Line) plugin'а](#Мои_ожидания_от_Attline_Attention_Line_pluginа)
 * [1.32 Плагин для взятия ресурса из файла](#Плагин_для_взятия_ресурса_из_файла)
 * [1.33 Кнопки быстрого доступа к нужным функциям некоторых плагинов](#Кнопки_быстрого_доступа_к_нужным_функциям_некоторых_плагинов)
 * [1.34 Показ во всплывающем окне (тултипе) посетителя конфы всех его ников в данной конфе](#Показ_во_всплывающем_окне_тултипе_посетителя_конфы_всех_его_ников_в_данной_конфе)
* [2 Known Issues](#Known_Issues)
* [3 По Вики](#По_Вики)
   * [3.1 Структура вики](#Структура_вики)
   * [3.2 Перевод на английский](#Перевод_на_английский)
   * [3.3 Перевод на испанский](#Перевод_на_испанский)
   * [3.4 Статья "Файл конфигурации"](#Статья_Файл_конфигурации)
   * [3.5 <s>Каталанский язык</s>](#sКаталанский_язык_s)
   * [3.6 Написать статьи](#Написать_статьи)
   * [3.7 Галереи](#Галереи)
      * [3.7.1 <s>Глюки</s>](#sГлюки_s)
      * [3.7.2 Перезалить их](#Перезалить_их)
   * [3.8 Обновить скриншоты к статьям](#Обновить_скриншоты_к_статьям)
   * [3.9 Разобраться с многоязычным интерфейсом](#Разобраться_с_многоязычным_интерфейсом)
   * [3.10 Ссылки xmpp:](#Ссылки_xmpp)
   * [3.11 Интервики на  JaWiki](#Интервики_на__JaWiki)
   * [3.12 Проблемы, найденные в вики при осмотре Ткаббера 0.10.0-svn-20070521(tcl/tk 8.4.11)](#Проблемы_найденные_в_вики_при_осмотре_Ткаббера_0.10.0-svn-20070521tcl_tk_8.4.11)
 * [3.1 Структура вики](#Структура_вики)
 * [3.2 Перевод на английский](#Перевод_на_английский)
 * [3.3 Перевод на испанский](#Перевод_на_испанский)
 * [3.4 Статья "Файл конфигурации"](#Статья_Файл_конфигурации)
 * [3.5 <s>Каталанский язык</s>](#sКаталанский_язык_s)
 * [3.6 Написать статьи](#Написать_статьи)
 * [3.7 Галереи](#Галереи)
  * [3.7.1 <s>Глюки</s>](#sГлюки_s)
  * [3.7.2 Перезалить их](#Перезалить_их)
 * [3.8 Обновить скриншоты к статьям](#Обновить_скриншоты_к_статьям)
 * [3.9 Разобраться с многоязычным интерфейсом](#Разобраться_с_многоязычным_интерфейсом)
 * [3.10 Ссылки xmpp:](#Ссылки_xmpp)
 * [3.11 Интервики на  JaWiki](#Интервики_на__JaWiki)
 * [3.12 Проблемы, найденные в вики при осмотре Ткаббера 0.10.0-svn-20070521(tcl/tk 8.4.11)](#Проблемы_найденные_в_вики_при_осмотре_Ткаббера_0.10.0-svn-20070521tcl_tk_8.4.11)

## <a id="Разработка"></a>Разработка
Этот раздел представляет собой что-то вроде feature request. Если у вас есть
# <a id="Разработка"></a>Разработка
Этот раздел представляет собой что-то вроде feature request. Если у вас есть какие-то идеи относительно улучшения Ткаббера, можете оставлять тут свои пожелания. Просьба быть лаконичными и писать ясно, чтобы любой мог себе уяснить вашу идею. Если у вас чешутся руки чего-то попрограммировать, но нет идей — вот они перед вами :) 
какие-то идеи относительно улучшения Ткаббера, можете оставлять тут свои
пожелания. Просьба быть лаконичными и писать ясно, чтобы любой мог себе уяснить
вашу идею. Если у вас чешутся руки чего-то попрограммировать, но нет идей — вот
они перед вами :)

> _Имейте, однако, в виду, что эта статья — не более, чем сборник пожеланий:
 _Имейте, однако, в виду, что эта статья — не более, чем сборник пожеланий: сюда кто угодно может писать свои "хотелки", и это совершенно не означает, что их кто-либо когда-либо возьмётся реализовывать. Если вам интересны **намерения разработчиков** (то есть тех, кто активно пишет код для Ткаббера), читайте ["TODO разработчиков"](../en/TODO.md). Писать туда не надо. И опять же имейте в виду, что появление чего-либо в том TODO не означает, что это что-либо **точно** будет реализовано; это всё — типичные [WIBNIs](http://foldoc.org/foldoc.cgi?WIBNI)._ 
  сюда кто угодно может писать свои "хотелки", и это совершенно не означает,
  что их кто-либо когда-либо возьмётся реализовывать. Если вам интересны
  **намерения разработчиков** (то есть тех, кто активно пишет код для
  Ткаббера), читайте ["TODO разработчиков"](../en/TODO.md). Писать туда не
  надо. И опять же имейте в виду, что появление чего-либо в том TODO не
  означает, что это что-либо **точно** будет реализовано; это всё — типичные
  [WIBNIs](http://foldoc.org/foldoc.cgi?WIBNI)._

### <a id="Удаленное_управление"></a>Удаленное управление
## <a id="Удаленное_управление"></a>Удаленное управление

<s>[http://www.jabber.org/jeps/jep-0146.html](http://www.jabber.org/jeps/jep-0146.html).
<s>[http://www.jabber.org/jeps/jep-0146.html](http://www.jabber.org/jeps/jep-0146.html). С маленькими переделками ткаббера задача постепенно [решается](http://forum.jrudevels.org/viewtopic.php?t=1014). (c) feez </s> 
С маленькими переделками ткаббера задача постепенно
[решается](http://forum.jrudevels.org/viewtopic.php?t=1014). (c) feez </s>

[**Kostix**](Участник_Kostix.md) 21:11, 18 сентября 2006 (MSD) первый вариант уже в
[Kostix](Участник_Kostix.md) 21:11, 18 сентября 2006 (MSD) первый вариант уже в транке! :) 

## <a id="sКонтакты_онлайн_-_отображать_вверху_списка_s"></a><s>Контакты онлайн - отображать вверху списка</s>

Сортировка контактов в ростере таким образом, чтобы контакты, находящиеся в онлайн, отображались выше оффлайновых контактов. Скорее всего - опционально, через настройки. 
транке! :)

### <a id="sКонтакты_онлайн_-_отображать_вверху_списка_s"></a><s>Контакты онлайн - отображать вверху списка</s>

Сортировка контактов в ростере таким образом, чтобы контакты, находящиеся в
онлайн, отображались выше оффлайновых контактов. Скорее всего - опционально,
через настройки.

[**kostix**](Участник_Kostix.md) 22:17, 23 апреля 2008 (MSD) -- два возражения:
[kostix](Участник_Kostix.md) 22:17, 23 апреля 2008 (MSD) -- два возражения: 

* Как это средство должно взаимодействовать с группами ростера? Отдельная
*  Как это средство должно взаимодействовать с группами ростера? Отдельная сортировка для каждой группы? Но в чём смысл тогда? -- при большом ростере с открытыми группами всё равно не избежать прокрутки. 
  сортировка для каждой группы? Но в чём смысл тогда? -- при большом ростере с
  открытыми группами всё равно не избежать прокрутки.
* В Ткаббере есть возможность переключать ростер в режим показа только тех, кто
*  В Ткаббере есть возможность переключать ростер в режим показа только тех, кто в онлайне. Это делается с тулбара или главного меню, а также может легко навешиваться на комбинацию клавиш, о чём рассказано в статье [Нетривиальные настройки](Нетривиальные_настройки.md). 
  в онлайне. Это делается с тулбара или главного меню, а также может легко
  навешиваться на комбинацию клавиш, о чём рассказано в статье
  [**Нетривиальные настройки**](Нетривиальные_настройки.md).
* Наконец, в Ткаббере уже есть фильтрация ростера по буквам ника контакта.
*  Наконец, в Ткаббере уже есть фильтрация ростера по буквам ника контакта. 

---

**Gooseman:** Контраргументы: согласен, функциональность добавляется очень
небольшая, но все таки добавляется. Необходимость в прокрутке как раз -
**Gooseman:** Контраргументы: согласен, функциональность добавляется очень небольшая, но все таки добавляется. Необходимость в прокрутке как раз - убирается, потому что онлайн-контакты группируются вверху, а группы можно сворачивать/разворачивать. Второй аргумент: готов проставить автору ясчик пива.:) Или, скорее, денежный его эквивалент каким-нить электронным способом. 

---

[ycbl](Участник_Bigote.md) 14:16, 20 июня 2009 (MSD) 
убирается, потому что онлайн-контакты группируются вверху, а группы можно
сворачивать/разворачивать. Второй аргумент: готов проставить автору ясчик
пива.:) Или, скорее, денежный его эквивалент каким-нить электронным способом.

---

[**ycbl**](Участник_Bigote.md) 14:16, 20 июня 2009 (MSD)

По-моему, товарищ [*Jet*](Участник_Jet.md)
[**заработал себе**](Патчи.md#Отображение_доступных_контактов_сверху_списка)
По-моему, товарищ [Jet](Участник_Jet.md) [заработал себе](Патчи.md#Отображение_доступных_контактов_сверху_списка) пресловутый ясчик пива ;) 
пресловутый ясчик пива ;)

### <a id="MUC._Пресеты_для_причин_kick_ban"></a>MUC. Пресеты для причин kick/ban
## <a id="MUC._Пресеты_для_причин_kick_ban"></a>MUC. Пресеты для причин kick/ban

<s>Добавить выбор причины кика или бана из списка, определяемым пользователем.
<s>Добавить выбор причины кика или бана из списка, определяемым пользователем. Возможны варианты как через меню, т.е. дополнительное подменю, либо после клика на команду - окно.</s> 
Возможны варианты как через меню, т.е. дополнительное подменю, либо после клика
на команду - окно.</s>

См. этот
[**кусок в конфиг**](Нетривиальные_настройки.md#Собственное_меню_для_киков_в_групчате).
См. этот [кусок в конфиг](Нетривиальные_настройки.md#Собственное_меню_для_киков_в_групчате). 

Впрочем, возможно, реализация этой штуки в виде плагина с визуальным редактором
пресетов (на манер [**customstatus**](Плагины.md#Customstatus)) имеет смысл.
Впрочем, возможно, реализация этой штуки в виде плагина с визуальным редактором пресетов (на манер [customstatus](Плагины.md#customstatus)) имеет смысл. 

## <a id="Ъ_положение_Ткаббера_на_раб._столе"></a>Ъ положение Ткаббера на раб. столе

Сделать так шоб ткаббер сам рассчитывал размеры и положение окна в зависимости от разрешения, точно по центру экрана и определенное соотношение сторон, + <s>возможность сохранить положение для будущих сеансов!</s> Вторая часть пожелания реализована в svn-версии (приблизительно февраль 2009). 

### <a id="Ъ_положение_Ткаббера_на_раб._столе"></a>Ъ положение Ткаббера на раб. столе

Сделать так шоб ткаббер сам рассчитывал размеры и положение окна в зависимости
от разрешения, точно по центру экрана и определенное соотношение сторон, +
<s>возможность сохранить положение для будущих сеансов!</s> Вторая часть
пожелания реализована в svn-версии (приблизительно февраль 2009).

### <a id="Шрефты_"></a>Шрефты @;%&!
## <a id="Шрефты_@%&"></a>Шрефты @;%&!

<s>Добавить наконец полноценную настройку шрифтов, допилить диалоги
<s>Добавить наконец полноценную настройку шрифтов, допилить диалоги поиска...</s> 
поиска...</s>

### <a id="Меню_в_истории_разговоров"></a>Меню в истории разговоров
## <a id="Меню_в_истории_разговоров"></a>Меню в истории разговоров

Добавить по всем закоулкам истории разговоров меню с пунктами типа "копировать,
Добавить по всем закоулкам истории разговоров меню с пунктами типа "копировать, гугл, блабла" (Fixer) 
гугл, блабла" (Fixer)

### <a id="Статусбар_в_полнотекстовом_поиске"></a>Статусбар в полнотекстовом поиске
## <a id="Статусбар_в_полнотекстовом_поиске"></a>Статусбар в полнотекстовом поиске

Добавить в полнотекстовом поиске правее кнопок "Поиск" и "Отменить" показ
Добавить в полнотекстовом поиске правее кнопок "Поиск" и "Отменить" показ статуса - идет поиск/найдено Н слов/приостановлено. (Fixer) 
статуса - идет поиск/найдено Н слов/приостановлено. (Fixer)

### <a id="Нормальная_закладка_при_потере_фокуса"></a>Нормальная закладка при потере фокуса
## <a id="Нормальная_закладка_при_потере_фокуса"></a>Нормальная закладка при потере фокуса

<s>Сделать закладку в виде линии при потере фокуса</s> (Fixer)
<s>Сделать закладку в виде линии при потере фокуса</s> (Fixer) 

Начиная с версии 0.11.0 имеется встроенный плагин attline.
Начиная с версии 0.11.0 имеется встроенный плагин attline. 

### <a id="ГУЙ_для_метаконтактов"></a>ГУЙ для метаконтактов
## <a id="ГУЙ_для_метаконтактов"></a>ГУЙ для метаконтактов

<s>Сделать нормальный гуй для создания метаконтактов, т.е. объединения
<s>Сделать нормальный гуй для создания метаконтактов, т.е. объединения нескольких контактов в один.</s> (Fixer) 
нескольких контактов в один.</s> (Fixer)

Реализовано в svn-версии (февраль или март 2009).
Реализовано в svn-версии (февраль или март 2009). 

### <a id="Сделать_сохранение_положения_ростера_свернут-развернут_Fixer"></a>Сделать сохранение положения ростера (свернут-развернут) (Fixer)
## <a id="Сделать_сохранение_положения_ростера_свернут-развернут_Fixer"></a>Сделать сохранение положения ростера (свернут-развернут) (Fixer)

### <a id="Добавить_возможность_сохранять_пароль_в_md5_виде_для_автологина__Fixer"></a>Добавить возможность сохранять пароль в md5 виде для автологина  (Fixer)
## <a id="Добавить_возможность_сохранять_пароль_в_md5_виде_для_автологина__Fixer"></a>Добавить возможность сохранять пароль в md5 виде для автологина  (Fixer)

MD5 хакнут уж несколько лет как. Где-то тут даже на вики мы про это написали.
MD5 хакнут уж несколько лет как. Где-то тут даже на вики мы про это написали. 

[**ycbl**](Участник_Bigote.md) 01:30, 8 мая 2007 (MSD)
[ycbl](Участник_Bigote.md) 01:30, 8 мая 2007 (MSD) 

BTW, для целей "чтоб не читали пароль, когда флэшку с Ткаббером кому-то
BTW, для целей "чтоб не читали пароль, когда флэшку с Ткаббером кому-то отдаёшь" MD5 "хватило бы за глаза и за уши". Эту фичу нельзя реализовать по теоретическим соображениям, т.к. Ткабберу нужен чистый и ничем не замутнённый пароль для аутентификации на сервере, а любой крипто-хэш по определению (в теории) нереверсивен. 
отдаёшь" MD5 "хватило бы за глаза и за уши". Эту фичу нельзя реализовать по
теоретическим соображениям, т.к. Ткабберу нужен чистый и ничем не замутнённый
пароль для аутентификации на сервере, а любой крипто-хэш по определению (в
теории) нереверсивен.

[**kostix**](Участник_Kostix.md) 18:59, 8 мая 2007 (MSD)
[kostix](Участник_Kostix.md) 18:59, 8 мая 2007 (MSD) 

Хм, по словам kostix данную фичу реализовать не удастся, имхо, попробовать
Хм, по словам kostix данную фичу реализовать не удастся, имхо, попробовать написать скрипт и статью по gnupg и config.tcl?  
написать скрипт и статью по gnupg и config.tcl?

[*Fixer*](Участник_Fixer.md) 17:54, 8 мая 2007 (MSD)
[Fixer](Участник_Fixer.md) 17:54, 8 мая 2007 (MSD) 

Рабочую флэшку с Ткаббером (то есть которой вы сами пользуетесь) я бы вообще
порекомендовал никому не давать, особенно если вы не шарите в тикле. Да если и
шарите, будете каждый раз проверять, наизменял ли ваш заклятый друг в шутку или
всерьёз какой-нибудь тихий закоулок кода? А уж сохранить себе "на память"
зашифрованный конфиг такого доброго дяди и вообще сам бог велел.

Рабочую флэшку с Ткаббером (то есть которой вы сами пользуетесь) я бы вообще порекомендовал никому не давать, особенно если вы не шарите в тикле. Да если и шарите, будете каждый раз проверять, наизменял ли ваш заклятый друг в шутку или всерьёз какой-нибудь тихий закоулок кода? А уж сохранить себе "на память" зашифрованный конфиг такого доброго дяди и вообще сам бог велел. 

[**ycbl**](Участник_Bigote.md) надевает чёрные очки и удаляется, незаметно
[ycbl](Участник_Bigote.md) надевает чёрные очки и удаляется, незаметно оглядываясь по сторонам. 
оглядываясь по сторонам.

Как ни странно, после случая с модом "Pandora" для Bombus'а такая паранойя не
Как ни странно, после случая с модом "Pandora" для Bombus'а такая паранойя не выглядит чересчур излишней. 
выглядит чересчур излишней.

[**kostix**](Участник_Kostix.md) 14:42, 9 мая 2007 (MSD)
[kostix](Участник_Kostix.md) 14:42, 9 мая 2007 (MSD) 

Tkabber на флешке? А starpack для чего придумали? :)
Tkabber на флешке? А starpack для чего придумали? :) 

[*Fixer*](Участник_Fixer.md) 23:45, 9 мая 2007 (MSD)
[Fixer](Участник_Fixer.md) 23:45, 9 мая 2007 (MSD) 

### <a id="Встроить_плагин_autoconnect_борьба_с_№_транспортами_сомнительно"></a>Встроить плагин autoconnect (борьба с "№;%:\*" транспортами) (сомнительно)
## <a id="Встроить_плагин_autoconnect_борьба_с_№%_транспортами_сомнительно"></a>Встроить плагин autoconnect (борьба с "№;%:\*" транспортами) (сомнительно)

Довести до ума транспорт и добавить в официальную сборку? Слишком часто
Довести до ума транспорт и добавить в официальную сборку? Слишком часто отпадает аськотранспорт %) .\_. 
отпадает аськотранспорт %) .\_.

[*Fixer*](Участник_Fixer.md) 18:02, 8 мая 2007 (MSD)
[Fixer](Участник_Fixer.md) 18:02, 8 мая 2007 (MSD) 

### <a id="Нумерация_закладок"></a>Нумерация закладок
## <a id="Нумерация_закладок"></a>Нумерация закладок

<s>Довести до состояния Plugin нумерацию закладок. (c) lknight</s>
 **Добавил в [Плагины](Плагины.md#Tab_number). [eXire](Участник_EXire.md)**
<s>Довести до состояния Plugin нумерацию закладок. (c) lknight</s> 
 **Добавил в [Плагины](Плагины.md#Tab_number). [eXire](Участник_EXire.md)** 

### <a id="Поиск_в_диско_и_т.д."></a>Поиск в диско и т.д.

<s>Поиск регэкспы или просто строкой в browse/discovery окне. (искать
конференции) и RSS неплохо бы, а в идеале - заточить под любой элемент
Дискавери (с) bigote (похоже, что RSS в Дискавери уже так и работает, жаль
только, что полный список они убрали - он там совсем не лишний).</s>

## <a id="Поиск_в_диско_и_т.д."></a>Поиск в диско и т.д.

<s>Поиск регэкспы или просто строкой в browse/discovery окне. (искать конференции) и RSS неплохо бы, а в идеале - заточить под любой элемент Дискавери (с) bigote (похоже, что RSS в Дискавери уже так и работает, жаль только, что полный список они убрали - он там совсем не лишний).</s> 

[**Kostix**](Участник_Kostix.md) 03:17, 7 сентября 2006 (MSD) Поиск диско есть
в SVN начиная с 2006-08-17, поиск в RawXML — с 2006-08-18. Не хватает поиска в
 [Kostix](Участник_Kostix.md) 03:17, 7 сентября 2006 (MSD) Поиск диско есть в SVN начиная с  

2006-08-17, поиск в RawXML — с 2006-08-18. Не хватает поиска в Headlines и Message Archive. 
Headlines и Message Archive.

### <a id="Звуки_к_играм"></a>Звуки к играм
## <a id="Звуки_к_играм"></a>Звуки к играм

<s>Как-нибудь надо прикрутить звуковое оповещение к играм (желательно, чтобы
<s>Как-нибудь надо прикрутить звуковое оповещение к играм (желательно, чтобы можно было выбрать свой звук, т.е. чтобы он отличался от стандартных).</s> Ещё можно попробовать сделать шахматные часы, которые вполне могут служить и для других игровых плагинов. (c) bigote 
можно было выбрать свой звук, т.е. чтобы он отличался от стандартных).</s> Ещё
можно попробовать сделать шахматные часы, которые вполне могут служить и для
других игровых плагинов. (c) bigote

Первая часть реализована, причём уже давно (не то в 0.10.0, не то в 0.11.0).
Первая часть реализована, причём уже давно (не то в 0.10.0, не то в 0.11.0). 

### <a id="Доработать_кое-какие_игры"></a>Доработать кое-какие игры
## <a id="Доработать_кое-какие_игры"></a>Доработать кое-какие игры

У этих игровых плагинов, как выясняется, имеется ряд серьёзных недостатков.
У этих игровых плагинов, как выясняется, имеется ряд серьёзных недостатков. Один из них: плагин никак не сообщает игроку, если вдруг его оппонент теряет соединение, случайно или намеренно закрывает таб с игрой. То есть, ты думаешь, что игра продолжается, а на самом деле противник уже перезапустил Ткаббер, и игра с его стороны утеряна. В связи с этим два вопроса: 
Один из них: плагин никак не сообщает игроку, если вдруг его оппонент теряет
соединение, случайно или намеренно закрывает таб с игрой. То есть, ты думаешь,
что игра продолжается, а на самом деле противник уже перезапустил Ткаббер, и
игра с его стороны утеряна. В связи с этим два вопроса:

* Можно ли сделать оповещение о закрытии таба в принципе? Это всё равно, что
*  Можно ли сделать оповещение о закрытии таба в принципе? Это всё равно, что позвонить в милицию после того, как тебя застрелили :) Но вдруг??? 
  позвонить в милицию после того, как тебя застрелили :) Но вдруг???
* Хорошо бы приделать сохранение состояния игры на диск, чтобы по крайней мере
*  Хорошо бы приделать сохранение состояния игры на диск, чтобы по крайней мере иметь возможность восстанавливать её после перезапуска клиента (а в идеале — и после падения). (c) bigote 
  иметь возможность восстанавливать её после перезапуска клиента (а в идеале —
  и после падения). (c) bigote

### <a id="sКэш_новостей_s"></a><s>Кэш новостей</s>

## <a id="sКэш_новостей_s"></a><s>Кэш новостей</s>

<s>Кстати, очень бы не помешало переделать сохранение кэша новостей в реальном
<s>Кстати, очень бы не помешало переделать сохранение кэша новостей в реальном времени, а не при закрытии Ткаббера — любое вынужденное его прибивание убивает и текущее состояние окна новостей — в кэше хранятся старые новости (возможно, недельной давности). (c) bigote</s> 
времени, а не при закрытии Ткаббера — любое вынужденное его прибивание убивает
и текущее состояние окна новостей — в кэше хранятся старые новости (возможно,
недельной давности). (c) bigote</s>

**Добавил в [Плагины.](Плагины.md#Rsssaver) [eXire.](Участник_EXire.md)**
**Добавил в [Плагины.](Плагины.md#Rsssaver) [eXire.](Участник_EXire.md)** 

### <a id="sИгнор_в_выпадающем_меню_на_JID_s"></a><s>Игнор в выпадающем меню на JID</s>
## <a id="sИгнор_в_выпадающем_меню_на_JID_s"></a><s>Игнор в выпадающем меню на JID</s>

<s>Сделать (если вдруг это не сделает **Teo**) в выпадающем на Jid'е по правой
<s>Сделать (если вдруг это не сделает **Teo**) в выпадающем на Jid'е по правой кнопке мышке меню возможность добавить/убрать из игнор списка. (с) lknight</s> 
кнопке мышке меню возможность добавить/убрать из игнор списка. (с) lknight</s>

**Оказывается, давно уже это дело реализовано :)**
**Оказывается, давно уже это дело реализовано :)** 

### <a id="Подтверждения"></a>Подтверждения
## <a id="Подтверждения"></a>Подтверждения

#### <a id="sСделать_хотя_бы_в_виде_патча_s"></a><s>Сделать хотя бы в виде патча</s>
### <a id="sСделать_хотя_бы_в_виде_патча_s"></a><s>Сделать хотя бы в виде патча</s>

<s>Добавить подтверждения закрытия табов. О закрытии единичного таба - не
<s>Добавить подтверждения закрытия табов. О закрытии единичного таба - не обязательно, но до кучи можно. А вот про "Закрыть остальные вкладки" и "Закрыть все вкладки" - надо бы. Я уже разок закрыл "остальные вкладки"... :) (c) bigote</s> 
обязательно, но до кучи можно. А вот про "Закрыть остальные вкладки" и "Закрыть
все вкладки" - надо бы. Я уже разок закрыл "остальные вкладки"... :) (c)
bigote</s>

**Добавил в [Патчи](Патчи.md). [eXire](Участник_EXire.md)**
**Добавил в [Патчи](Патчи.md). [eXire](Участник_EXire.md)** 

#### <a id="sДовести_их_до_уровня_плагина_s"></a><s>Довести их до уровня плагина</s>
### <a id="sДовести_их_до_уровня_плагина_s"></a><s>Довести их до уровня плагина</s>

<s>Сделать плагином, плюс добавить подтверждение на закрытие Ткаббера, плюс
<s>Сделать плагином, плюс добавить подтверждение на закрытие Ткаббера, плюс добавить опции в Настройки.</s> 
добавить опции в Настройки.</s>

 **Добавил в [Плагины.](Плагины.md#Confirm) [eXire](Участник_EXire.md).**
 **Добавил в [Плагины.](Плагины.md#Confirm) [eXire](Участник_EXire.md).** 

### <a id="Чебуратор"></a>Чебуратор
## <a id="Чебуратор"></a>Чебуратор

Сделать конфигуратор к Ткабберу. Описание выложено
Сделать конфигуратор к Ткабберу. Описание выложено **[отдельной статьёй](Чебуратор.md).** Обсуждать конфигуратор давайте там же, в отдельной статье (подробности на месте). 
[**отдельной статьёй**](Чебуратор.md).
Обсуждать конфигуратор давайте там же, в отдельной
статье (подробности на месте).

### <a id="Закладки"></a>Закладки
## <a id="Закладки"></a>Закладки

#### <a id="Автоматическая_установка"></a>Автоматическая установка
### <a id="Автоматическая_установка"></a>Автоматическая установка

<s>Был тут разговор про них... Идея такая: при переходе в автоэвей в каждой
<s>Был тут разговор про них... Идея такая: при переходе в автоэвей в каждой открытой конференции автоматом устанавливается закладка в последней строке.</s> 
открытой конференции автоматом устанавливается закладка в последней строке.</s>

<s>Новые идеи: сделать, чтобы закладки самостоятельно втыкались при ручной
<s>Новые идеи: сделать, чтобы закладки самостоятельно втыкались при ручной смене статуса и потере фокуса окном Ткаббера. Причём, при потере фокуса должна вставляться закладка другого цвета (добавить другой пиксмап, например, ту же закладку, только зелёного цвета). Добавить раздельные настройки для включения каждого вида закладок, потому что потеря фокуса - частое явление, и не всем может понравиться наблюдать у себя кучи зелёных закладок.</s> 
смене статуса и потере фокуса окном Ткаббера. Причём, при потере фокуса должна
вставляться закладка другого цвета (добавить другой пиксмап, например, ту же
закладку, только зелёного цвета). Добавить раздельные настройки для включения
каждого вида закладок, потому что потеря фокуса - частое явление, и не всем
может понравиться наблюдать у себя кучи зелёных закладок.</s>

**Добавил в [Плагины](Плагины.md#Bookmarks). [eXire](Участник_EXire.md).**
**Добавил в [Плагины](Плагины.md#Bookmarks). [eXire](Участник_EXire.md).** 

#### <a id="Выборочное_удаление"></a>Выборочное удаление
### <a id="Выборочное_удаление"></a>Выборочное удаление

На данный момент удалять можно только все закладки в окне чата. Хорошо бы иметь
На данный момент удалять можно только все закладки в окне чата. Хорошо бы иметь возможность удалять ту, которую хочется (через контекстное меню, как и расставляем). 
возможность удалять ту, которую хочется (через контекстное меню, как и
расставляем).

### <a id="Управление_ткаббером_через_командную_строку"></a>Управление ткаббером через командную строку
## <a id="Управление_ткаббером_через_командную_строку"></a>Управление ткаббером через командную строку

Цель: чтобы при нажатии на ссылку вида `xmpp:user@jabber.ru` открывался Ткаббер
Цель: чтобы при нажатии на ссылку вида `xmpp:user@jabber.ru` открывался Ткаббер с нужными параметрами и выполнял нужное действие. xmppmime.tcl содержит похожую функциональность но только для уже устаревших [xmpp-mime файлов](http://www.jabber.org/jeps/jep-0081.html). 
с нужными параметрами и выполнял нужное действие. xmppmime.tcl содержит похожую
функциональность но только для уже устаревших
[xmpp-mime файлов](http://www.jabber.org/jeps/jep-0081.html).

Сюда же чтобы можно было изменять PEP-стостояния через вызов Ткаббера с определенными параметрами.
Сюда же чтобы можно было изменять PEP-стостояния через вызов Ткаббера с определенными параметрами.  

[**Более подробное изложение мыслей**](ТЗ_по_управлению_через_параметры_командной_строки.md)
**[Более подробное изложение мыслей](ТЗ_по_управлению_через_параметры_командной_строки.md)** 

### <a id="Доделать_мультилогин"></a>Доделать мультилогин
## <a id="Доделать_мультилогин"></a>Доделать мультилогин

Не хватает:
Не хватает: 

* автоматическое подключение нескольких профилей и настройка соответствующая.
* выбор содинения в окне disco/browser (или перед открытием) с которого должны
*  автоматическое подключение нескольких профилей и настройка соответствующая. 
*  выбор содинения в окне disco/browser (или перед открытием) с которого должны отправлятся запросы 
  отправлятся запросы
* выбор аккаунта для редактирования личной информации
*  выбор аккаунта для редактирования личной информации 

[**Kostix**](Участник_Kostix.md) 17:09, 27 октября 2006 (MSD) советует смотреть
[**сюда**](Tkabber.md#Лёгкий_в_использовании_мультилогин). То, чего не хватает, и
[Kostix](Участник_Kostix.md) 17:09, 27 октября 2006 (MSD) советует смотреть [сюда](Tkabber.md#Лёгкий_в_использовании_мультилогин). То, чего не хватает, и так известно прекрасно. Выработка разумного решения проблемы — вопрос более сложный и более интересный. 
так известно прекрасно. Выработка разумного решения проблемы — вопрос более
сложный и более интересный.

### <a id="Анти_SPIM"></a>Анти SPIM
## <a id="Анти_SPIM"></a>Анти SPIM

Реализация антиспама с капчами, а то спама из асечного транспорта все больше и
Реализация антиспама с капчами, а то спама из асечного транспорта все больше и больше. Идея взята  из отложенного протокола [JEP-0159 Spim blocking](http://www.jabber.org/jeps/jep-0159.html) 
больше. Идея взята  из отложенного протокола
[JEP-0159 Spim blocking](http://www.jabber.org/jeps/jep-0159.html)

[**Подробнее ...**](Плагины/AntiSPIM.md)
**[Подробнее ...](Плагины/AntiSPIM.md)** 

### <a id="Плагин_Whiteboard_aka_Грифельная_доска"></a>Плагин "Whiteboard" aka "Грифельная доска"
## <a id="Плагин_Whiteboard_aka_Грифельная_доска"></a>Плагин "Whiteboard" aka "Грифельная доска"

Я тут поковырял плагин "whiteboard", ничего особенного - добавил окружность,
Я тут поковырял плагин "whiteboard", ничего особенного - добавил окружность, многоугольник, цвет заливки... Хотелось бы узнать, я фигнёй страдаю и этим и так кто-то занимается?  
многоугольник, цвет заливки... Хотелось бы узнать, я фигнёй страдаю и этим и
так кто-то занимается?

Вообщем есть там планы развития какие?
Вообщем есть там планы развития какие? 

Просто код для многоугольника в svgrender.tcl уже был. Да и с tcl/tk я всего
Просто код для многоугольника в svgrender.tcl уже был. Да и с tcl/tk я всего два дня знаком, ковыряюсь "just for fun". 
два дня знаком, ковыряюсь "just for fun".

[*Zakon*](Участник_Zakon.md) 02:06, 27 октября 2006 (MSD)
[Zakon](Участник_Zakon.md) 02:06, 27 октября 2006 (MSD) 

---

Нет, не фигнёй. Там бы ещё очень не помешал экспорт нарисованного во что-то
Нет, не фигнёй. Там бы ещё очень не помешал экспорт нарисованного во что-то удобоваримое, например .svg (сейчас есть экспорт в .ps, но это не комильфо, в векторном редакторе это не отредактируешь), а также .gif или .png (только рабочей области). И очень не помешал бы импорт из svg нарисованных ранее рисунков. Правда, специалисты говорят, что это затруднительно, но у кого-то проскакивала и мысль насчёт сохранения рисунка в своём формате (где будет храниться не сам рисунок, а станцы, с помощью которых всё отрисовывалось), тогда при открытии такого файла Ткаббер просто выполнит сценарий и отошлёт результат всем собеседникам, с кем эта доска открыта. Думаю, **такая** доска была бы архиудобной для чего хочешь: хоть дорогу на <s>пьянку</s> линуксовку рисуй, хоть совещание с клиентом или с сотрудниками устраивай, хоть проекты разрабатывай в UML. 
удобоваримое, например .svg (сейчас есть экспорт в .ps, но это не комильфо, в
векторном редакторе это не отредактируешь), а также .gif или .png (только
рабочей области). И очень не помешал бы импорт из svg нарисованных ранее
рисунков. Правда, специалисты говорят, что это затруднительно, но у кого-то
проскакивала и мысль насчёт сохранения рисунка в своём формате (где будет
храниться не сам рисунок, а станцы, с помощью которых всё отрисовывалось),
тогда при открытии такого файла Ткаббер просто выполнит сценарий и отошлёт
результат всем собеседникам, с кем эта доска открыта. Думаю, **такая** доска
была бы архиудобной для чего хочешь: хоть дорогу на <s>пьянку</s> линуксовку
рисуй, хоть совещание с клиентом или с сотрудниками устраивай, хоть проекты
разрабатывай в UML.

[**ycbl**](Участник_Bigote.md) 14:57, 22 августа 2009 (MSD)

[ycbl](Участник_Bigote.md) 14:57, 22 августа 2009 (MSD) 

### <a id="Отправка_сообщения_нескольким_контактам"></a>Отправка сообщения нескольким контактам
## <a id="Отправка_сообщения_нескольким_контактам"></a>Отправка сообщения нескольким контактам

Добавить в окно чата возможность отослать сообщение нескольким контактам с
Добавить в окно чата возможность отослать сообщение нескольким контактам с возможностью выбора из ростера. 
возможностью выбора из ростера.

### <a id="sОзвучить_бы_Spy_s"></a><s>Озвучить бы Spy</s>
## <a id="sОзвучить_бы_Spy_s"></a><s>Озвучить бы Spy</s>

Давно мечтаю о такой фигне: чтобы Spy не просто шпиёнил за кем-нибудь из
Давно мечтаю о такой фигне: чтобы Spy не просто шпиёнил за кем-нибудь из ростера, но и извещал звуком (желательно, чтобы можно было задать индивидуальный звук для каждого, за кем шпиёним) о появлении этого товарища в онлайне. И чтоб можно было настраивать степень надоедливости: пищать всегда; пищать, когда я сам онлайн; пищать, когда я в эвее (не в XA); пищать, когда окно Ткаббера в фокусе или вне фокуса. И чтоб эта настройка была независимой от просто звуков Ткаббера. То есть, допустим, у меня просто звуки отключаются, когда окно Ткаббера в ростере и когда я в эвее. А вот извещения о присутствии кого-нибудь мне бы хотелось получать всегда. А можно присобачить к нему его собственный тайм-аут, независимый от тайм-аута автоэвея. Отходишь, например, от компа дела поделать, а неплохо бы знать, что некий нужный чел появился. Если привязывать озвучку к тайм-ауту автоэвея, то она вскоре перестанет работать, а если включить её на постоянку, она будет зря надоедать окружающим, когда я ухожу на работу. А так настроил ему часа полтора-два — и хватит. 
ростера, но и извещал звуком (желательно, чтобы можно было задать
индивидуальный звук для каждого, за кем шпиёним) о появлении этого товарища в
онлайне. И чтоб можно было настраивать степень надоедливости: пищать всегда;
пищать, когда я сам онлайн; пищать, когда я в эвее (не в XA); пищать, когда
окно Ткаббера в фокусе или вне фокуса. И чтоб эта настройка была независимой от
просто звуков Ткаббера. То есть, допустим, у меня просто звуки отключаются,
когда окно Ткаббера в ростере и когда я в эвее. А вот извещения о присутствии
кого-нибудь мне бы хотелось получать всегда. А можно присобачить к нему его
собственный тайм-аут, независимый от тайм-аута автоэвея. Отходишь, например, от
компа дела поделать, а неплохо бы знать, что некий нужный чел появился. Если
привязывать озвучку к тайм-ауту автоэвея, то она вскоре перестанет работать, а
если включить её на постоянку, она будет зря надоедать окружающим, когда я
ухожу на работу. А так настроил ему часа полтора-два — и хватит.

[**ycbl**](Участник_Bigote.md) 04:32, 27 января 2007 (MSK)
[ycbl](Участник_Bigote.md) 04:32, 27 января 2007 (MSK) 

P.S. Что-то сумбурно написал, но если чего непонятно, ловите в конфе или
P.S. Что-то сумбурно написал, но если чего непонятно, ловите в конфе или спрашивайте напрямую. 
спрашивайте напрямую.

* Вот [**тут**](Патчи.md#Звук_на_установленные_к_наблюдению_в_Шпионе_jidы) немного
* Вот [тут](Патчи.md#Звук_на_установленные_к_наблюдению_в_Шпионе_jidы) немного сделано. Звук срабатывающий вместе с всплывающим окошком. (BrennendeR~) 
  сделано. Звук срабатывающий вместе с всплывающим окошком. (BrennendeR~)

### <a id="sПофиксить_цвет_в_Spy_s"></a><s>!Пофиксить! цвет в Spy</s>
## <a id="sПофиксить_цвет_в_Spy_s"></a><s>!Пофиксить! цвет в Spy</s>

Под темой dark синие надписи практически нечитабельны .\_. (Fixer)
Под темой dark синие надписи практически нечитабельны .\_. (Fixer) 

* В \*.xrdb добавить что-то вроде
* В \*.xrdb добавить что-то вроде 

        *Spy.timestampforeground:       white
        *Spy.nickforeground:            yellow
        *Spy.jidforeground:             white
        *Spy.presenceforeground:        red
        *Spy.reasonforeground:          #9953d9
    *Spy.timestampforeground:       white
    *Spy.nickforeground:            yellow
    *Spy.jidforeground:             white
    *Spy.presenceforeground:        red
    *Spy.reasonforeground:          #9953d9

(BrennendeR~)
(BrennendeR~) 

### <a id="sПофиксить_цвет_по_адресу_История_разговоров_-_логи_под_темой_дарк_Fixer_s"></a><s>!Пофиксить! цвет по адресу "История разговоров - логи" под темой дарк (Fixer)</s>
## <a id="sПофиксить_цвет_по_адресу_История_разговоров_-_логи_под_темой_дарк_Fixer_s"></a><s>!Пофиксить! цвет по адресу "История разговоров - логи" под темой дарк (Fixer)</s>

Бо ужоснах.
Бо ужоснах. 

* Аналогично предыдущему: крутится за .\*xrdb примерно так
* Аналогично предыдущему: крутится за .\*xrdb примерно так 

        *JDisco.fill:			white
        *JDisco.activefill:		#020d61
        *JDisco.border:	       		#fcff00
        *JDisco.featurecolor:		#37cf45
        *JDisco.identitycolor:		#ffff00
        *JDisco.optioncolor:		mediumorchid3
        *JDisco.cbackground:            #ff0000
        *JDisco.foreground:             #ffff00
        *Tree*background:		#111111
        *fill:                   	#ffffff
        *linesfill:			#ff0000
        *crossfill:			#ffff00
    *JDisco.fill:			   	white
    *JDisco.activefill:		    	#020d61
    *JDisco.border:	       		#fcff00
    *JDisco.featurecolor:		    	#37cf45
    *JDisco.identitycolor:		    	#ffff00
    *JDisco.optioncolor:		    	mediumorchid3
    *JDisco.cbackground:                	#ff0000
    *JDisco.foreground:                 	#ffff00
    *Tree*background:		    	#111111
    *fill:                   		#ffffff
    *linesfill:			    	#ff0000
    *crossfill:			    	#ffff00

(BrennendeR~)
(BrennendeR~) 

### <a id="Довести_до_ума_XHTML"></a>Довести до ума XHTML
## <a id="Довести_до_ума_XHTML"></a>Довести до ума XHTML

Можете не принимать, но вот мой "официальный" feature request по доведению до
Можете не принимать, но вот мой "официальный" feature request по доведению до ума поддержки XHTML. 
ума поддержки XHTML.

1) Убрать жёстко прошитую helvetica из кода, пускай всё рисуется дефолтным фонтом.
1) Убрать жёстко прошитую helvetica из кода, пускай всё рисуется дефолтным фонтом. 

2) Убрать изменение размера шрифта (вроде, 12 там жёстко прошито), пускай всё
2) Убрать изменение размера шрифта (вроде, 12 там жёстко прошито), пускай всё рисуется дефолтным размером, тем более что огромные "ПРИВЕТ, ДРУЖИЩЕ" по утрам никому и не нужны. 
рисуется дефолтным размером, тем более что огромные "ПРИВЕТ, ДРУЖИЩЕ" по утрам
никому и не нужны.

3) Убрать жуткие вертикальные пробелы до и после сообщения, зачем они задуманы?
3) Убрать жуткие вертикальные пробелы до и после сообщения, зачем они задуманы? 

4) "Полечить" установку weight и underline, не рисует их вообще.
4) "Полечить" установку weight и underline, не рисует их вообще. 

Таким образом неплохо бы оставить bold/normal, italic/roman и foreground color.
Таким образом неплохо бы оставить bold/normal, italic/roman и foreground color. 

Весьма надеюсь, что заявка не будет оставлена многоуважаемыми гуру без
Весьма надеюсь, что заявка не будет оставлена многоуважаемыми гуру без внимания. 
внимания.

### <a id="Мои_ожидания_от_Attline_Attention_Line_pluginа"></a>Мои ожидания от Attline (Attention Line) plugin'а
## <a id="Мои_ожидания_от_Attline_Attention_Line_pluginа"></a>Мои ожидания от Attline (Attention Line) plugin'а

Версия от JID:timur@a-cube.vsi.ru aka
Версия от JID:timur@a-cube.vsi.ru aka [mailto:timur.davletshin@gmail.com](mailto:timur.davletshin@gmail.com) по просьбе kostix. 
[mailto:timur.davletshin@gmail.com](mailto:timur.davletshin@gmail.com) по
просьбе kostix.

В Ткаббере из trunk'а появился новый весьма полезный plugin. Но его поведение
В Ткаббере из trunk'а появился новый весьма полезный plugin. Но его поведение немного отличается от того, что мне хотелось бы видеть как простому пользователю. 
немного отличается от того, что мне хотелось бы видеть как простому
пользователю.

Т.к. имеется всего одна настройка, меняющая поведение модуля, то разделим всё
Т.к. имеется всего одна настройка, меняющая поведение модуля, то разделим всё на два случая. 
на два случая.

1) Когда plugins::atline::options(remove\_expired) 0
1) Когда plugins::atline::options(remove\_expired) 0 

Окна чата, когда они открываюся мною:
Окна чата, когда они открываюся мною: 

Я ожидаю, что я увижу историю предыдущего общения с пользователем, отчерченную
Я ожидаю, что я увижу историю предыдущего общения с пользователем, отчерченную линией-разделителем, которая сползёт вниз через указанный таймаут. 
линией-разделителем, которая сползёт вниз через указанный таймаут.

Окна чата, когда приходит сообщение:
Окна чата, когда приходит сообщение: 

Я ожидаю, что я увижу вкладку с сообщениями, где непрочитанные сообщения будут
Я ожидаю, что я увижу вкладку с сообщениями, где непрочитанные сообщения будут отчерны до тех пор, пока я их не прочитаю, после этого линия-разделитель сползёт вниз. 
отчерны до тех пор, пока я их не прочитаю, после этого линия-разделитель
сползёт вниз.

Окна групчата:
Окна групчата: 

Я ожидаю, что во вновь открытом окне линия будет находиться внизу. Вновь
Я ожидаю, что во вновь открытом окне линия будет находиться внизу. Вновь появившиеся сообщения будут отчёркиваться, после прочтения линия-разделитель сползёт вниз. 
появившиеся сообщения будут отчёркиваться, после прочтения линия-разделитель
сползёт вниз.

 2) Когда plugins::atline::options(remove\_expired) 1
 2) Когда plugins::atline::options(remove\_expired) 1 

Окна чата, когда они открываюся мною:
Окна чата, когда они открываюся мною: 

Я ожидаю, что я увижу историю предыдущего общения с пользователем, отчерченную
Я ожидаю, что я увижу историю предыдущего общения с пользователем, отчерченную линией-разделителем, которая исчезнет через указанный таймаут. 
линией-разделителем, которая исчезнет через указанный таймаут.

Окна чата, когда приходит сообщение:
Окна чата, когда приходит сообщение: 

Я ожидаю, что я увижу вкладку с сообщениями, где непрочитанные сообщения будут
Я ожидаю, что я увижу вкладку с сообщениями, где непрочитанные сообщения будут отчерны до тех пор, пока я их не прочитаю. 
отчерны до тех пор, пока я их не прочитаю.

Окна групчата:
Окна групчата: 

Я ожидаю, что во вновь открытом окне не будет никаких линий, а отчёркиваться
Я ожидаю, что во вновь открытом окне не будет никаких линий, а отчёркиваться будут лишь непрочитанные сообщения, притом, после прочтения линия-разделитель исчезнет. 
будут лишь непрочитанные сообщения, притом, после прочтения линия-разделитель
исчезнет.

### <a id="Плагин_для_взятия_ресурса_из_файла"></a>Плагин для взятия ресурса из файла
## <a id="Плагин_для_взятия_ресурса_из_файла"></a>Плагин для взятия ресурса из файла

    [19:17]<j2a> можещь в ткаббере плаг сделать, чтобы он брал ресурс из файла?
    [19:17]<j2a> т.е. я ему говорю: ресурс возьми из файла /etc/roaming/place
    [19:17]<j2a> и он считает оттуда, home, work, например
    [19:18]<j2a> а то на буке автоматом меняются сетевые профили, хочу чтобы ткаббер тож ловил их

[**kostix**](Участник_Kostix.md) 19:42, 20 августа 2007 (MSD)
[kostix](Участник_Kostix.md) 19:42, 20 августа 2007 (MSD) 

### <a id="Кнопки_быстрого_доступа_к_нужным_функциям_некоторых_плагинов"></a>Кнопки быстрого доступа к нужным функциям некоторых плагинов
## <a id="Кнопки_быстрого_доступа_к_нужным_функциям_некоторых_плагинов"></a>Кнопки быстрого доступа к нужным функциям некоторых плагинов

[Tue Feb 09 16:44]\<bigote> эх, к некоторым плагинам надо бы для удобства
[Tue Feb 09 16:44]\<bigote> эх, к некоторым плагинам надо бы для удобства кнопки на тулбар прикрутить. ощущаю острую нехватку включения/выключения антиспама и включения/выключения разных режимов в floatinglog. [Tue Feb 09 16:45]\<bigote> иногда надо на короткое время врубить показ сообщений во время dnd. приходится лазить в настройки каждый раз. 
кнопки на тулбар прикрутить. ощущаю острую нехватку включения/выключения
антиспама и включения/выключения разных режимов в floatinglog.

[Tue Feb 09 16:45]\<bigote> иногда надо на короткое время врубить показ
сообщений во время dnd. приходится лазить в настройки каждый раз.

### <a id="Показ_во_всплывающем_окне_тултипе_посетителя_конфы_всех_его_ников_в_данной_конфе"></a>Показ во всплывающем окне (тултипе) посетителя конфы всех его ников в данной конфе
## <a id="Показ_во_всплывающем_окне_тултипе_посетителя_конфы_всех_его_ников_в_данной_конфе"></a>Показ во всплывающем окне (тултипе) посетителя конфы всех его ников в данной конфе

Есть конференции, где посетители частенько меняют ники, и было бы очень кстати
Есть конференции, где посетители частенько меняют ники, и было бы очень кстати знать, ху из ху. Отвлёкся на 10 минут, а в чате совершенно другая картина. Думаю, тултип (где уже есть инфо о версии/системе и прочем) -- самое подходящее для этого место. Сортировка не нужна. Должен идти хронологический порядок смены ников и должны быть все, кроме текущего. 
знать, ху из ху. Отвлёкся на 10 минут, а в чате совершенно другая картина.
Думаю, тултип (где уже есть инфо о версии/системе и прочем) -- самое подходящее
для этого место. Сортировка не нужна. Должен идти хронологический порядок смены
ников и должны быть все, кроме текущего.

## <a id="Known_Issues"></a>Known Issues
== Beryl + ATI r300 oss driver + Ubuntu edgy == [*Fixer*](Участник_Fixer.md)
# <a id="Known_Issues"></a>Known Issues
== Beryl + ATI r300 oss driver + Ubuntu edgy == [Fixer](Участник_Fixer.md) 

1) Медленная прорисовка
1) Медленная прорисовка 

2) Смазывается текст в окне настроек
2) Смазывается текст в окне настроек 

3) Значок в трее отображается некорректно - становится белым. (возможно
3) Значок в трее отображается некорректно - становится белым. (возможно проблема с одним из модулей Х.орг) 
проблема с одним из модулей Х.орг)

== Compiz + ATI r300 oss driver + Ubuntu feisty == [*Fixer*](Участник_Fixer.md)
== Compiz + ATI r300 oss driver + Ubuntu feisty == [Fixer](Участник_Fixer.md) 

1) Значок в трее отображается некорректно - становится белым.
1) Значок в трее отображается некорректно - становится белым. 

## <a id="По_Вики"></a>По Вики
Планы пока просты:
# <a id="По_Вики"></a>По Вики
Планы пока просты: 

### <a id="Структура_вики"></a>Структура вики
## <a id="Структура_вики"></a>Структура вики

<s>Довести до ума структуру.</s> Будем считать, что доведено ;)
<s>Довести до ума структуру.</s> Будем считать, что доведено ;) 

### <a id="Перевод_на_английский"></a>Перевод на английский
## <a id="Перевод_на_английский"></a>Перевод на английский

Когда она утрясётся, заняться переводить то, что уже есть, на English.
Когда она утрясётся, заняться переводить то, что уже есть, на English. _(Процесс пошёл.)_ 
_(Процесс пошёл.)_

### <a id="Перевод_на_испанский"></a>Перевод на испанский
## <a id="Перевод_на_испанский"></a>Перевод на испанский

Когда будет что-нибудь по-английски готово, покалякать с испанцами, вдруг у них
есть желание сделать испанскую версию. Если нет - потихоньку переводить и на
Spanish. _(Можно начинать пинать ;))_

Когда будет что-нибудь по-английски готово, покалякать с испанцами, вдруг у них есть желание сделать испанскую версию. Если нет - потихоньку переводить и на Spanish. _(Можно начинать пинать ;))_ 

### <a id="Статья_Файл_конфигурации"></a>Статья "Файл конфигурации"
## <a id="Статья_Файл_конфигурации"></a>Статья "Файл конфигурации"

Приткнуть куда-нибудь статью [**Файл конфигурации**](Файл_конфигурации.md) и
дописать её или перекроить (или вообще выкинуть).
Приткнуть куда-нибудь статью **[Файл конфигурации](Файл_конфигурации.md)** и дописать её или перекроить (или вообще выкинуть). 

### <a id="sКаталанский_язык_s"></a><s>Каталанский язык</s>
## <a id="sКаталанский_язык_s"></a><s>Каталанский язык</s>

<s>Спросить у lknight, нельзя ли добавить каталанский язык, а то в списке его
<s>Спросить у lknight, нельзя ли добавить каталанский язык, а то в списке его что-то не вижу. Вроде бы **ca** он должен быть? С другой стороны, уже в полный рост используются домены .cat - то есть, можно сделать и так: название\_статьи\_(cat)</s> 
что-то не вижу. Вроде бы **ca** он должен быть? С другой стороны, уже в полный
рост используются домены .cat - то есть, можно сделать и так:
название\_статьи\_(cat)</s>

**Добавлено - расширение (ca)**
**Добавлено - расширение (ca)** 

### <a id="Написать_статьи"></a>Написать статьи
## <a id="Написать_статьи"></a>Написать статьи

Надо бы написать статьи Меню, Настройки
Надо бы написать статьи Меню, Настройки 

### <a id="Галереи"></a>Галереи
## <a id="Галереи"></a>Галереи

#### <a id="sГлюки_s"></a><s>Глюки</s>
### <a id="sГлюки_s"></a><s>Глюки</s>

<s>Разобраться с галереями, почему они глючат - это пинать lknigt'a.</s>
<s>Разобраться с галереями, почему они глючат - это пинать lknigt'a.</s> 

**Разобрались. Поставил в Помощь ссылку на образец работающего кода.**
**Разобрались. Поставил в Помощь ссылку на образец работающего кода.** 

#### <a id="Перезалить_их"></a>Перезалить их
### <a id="Перезалить_их"></a>Перезалить их

Надо перезалить галереи в соответствующие статьи (Быстрый старт и куда-то там
Надо перезалить галереи в соответствующие статьи (Быстрый старт и куда-то там ещё). 
ещё).

### <a id="Обновить_скриншоты_к_статьям"></a>Обновить скриншоты к статьям
## <a id="Обновить_скриншоты_к_статьям"></a>Обновить скриншоты к статьям

Вообще неплохо бы обновить скриншоты - я делал их по версии 0.9.7, а там
Вообще неплохо бы обновить скриншоты - я делал их по версии 0.9.7, а там интерфейс был совсем другой. 
интерфейс был совсем другой.

### <a id="Разобраться_с_многоязычным_интерфейсом"></a>Разобраться с многоязычным интерфейсом
## <a id="Разобраться_с_многоязычным_интерфейсом"></a>Разобраться с многоязычным интерфейсом

<s>Работает только русский интерфейс, однако вроде есть возможность сделать,
<s>Работает только русский интерфейс, однако вроде есть возможность сделать, чтобы и остальные работали. Подсказал вариант, который можно попробовать, `xmpp:michael@wensley.org.uk` - дать почитать его lknight'у.</s> В связи с переходом на доменную систему неактуально. 
чтобы и остальные работали. Подсказал вариант, который можно попробовать,
`xmpp:michael@wensley.org.uk` - дать почитать его lknight'у.</s> В связи с
переходом на доменную систему неактуально.

### <a id="Ссылки_xmpp"></a>Ссылки xmpp:
## <a id="Ссылки_xmpp"></a>Ссылки xmpp:

Подправить wiki движок, чтобы надпись вида xmpp:user@jabber.ru превращалась в
Подправить wiki движок, чтобы надпись вида xmpp:user@jabber.ru превращалась в ссылку, как это сделано для mailto: 
ссылку, как это сделано для mailto:

### <a id="Интервики_на__JaWiki"></a>Интервики на  JaWiki
## <a id="Интервики_на__JaWiki"></a>Интервики на  JaWiki

Сделайте плиз интервики на wiki.jrudevels.org. Ключевое слово, если можно,
Сделайте плиз интервики на wiki.jrudevels.org. Ключевое слово, если можно, jawiki. :) 
jawiki. :)

> Там уже [сделали](http://wiki.jrudevels.org/index.php/Sandbox) интервики на
 Там уже [сделали](http://wiki.jrudevels.org/index.php/Sandbox) интервики на ru.tkabber.ru 
  ru.tkabber.ru

### <a id="Проблемы_найденные_в_вики_при_осмотре_Ткаббера_0.10.0-svn-20070521tcl_tk_8.4.11"></a>Проблемы, найденные в вики при осмотре Ткаббера 0.10.0-svn-20070521(tcl/tk 8.4.11)
## <a id="Проблемы_найденные_в_вики_при_осмотре_Ткаббера_0.10.0-svn-20070521tcl_tk_8.4.11"></a>Проблемы, найденные в вики при осмотре Ткаббера 0.10.0-svn-20070521(tcl/tk 8.4.11)

1) Описание настроек домашней директории устарело. Везде надо поменять старое
1) Описание настроек домашней директории устарело. Везде надо поменять старое использование переменных окружения HOME/HOMEPATH итп, на **TKABBER\_HOME** 
использование переменных окружения HOME/HOMEPATH итп, на **TKABBER\_HOME**

2) Описание настроек домашней директории устарело. Везде надо поменять старую
2) Описание настроек домашней директории устарело. Везде надо поменять старую запись вида ~/.tkabber/ на новую **$configdir** 
запись вида ~/.tkabber/ на новую **$configdir**

3) В разделе "_нетривиальные настройки_", порции "_Команды удаления текста_",
3) В разделе "_нетривиальные настройки_", порции "_Команды удаления текста_", допущена ошибка в названии клавиши  Back**S**pace. Её называли там  Back**s**pace. Там поправил, но боюсь где-нибудь ещё так. А если использовать указанный код - ткаббер ругается :) 
допущена ошибка в названии клавиши  <code>&lt;Back<b>S</b>pace&gt;</code>. Её называли там
<code>&lt;Back<b>s</b>pace&gt;</code>. Там поправил, но боюсь где-нибудь ещё так. А если использовать
указанный код - ткаббер ругается :)

---

Простейший поиск показал, что это слово встречается только в той статье, и уже
Простейший поиск показал, что это слово встречается только в той статье, и уже исправлено. Будем надеяться, что больше его нигде нет. [ycbl](Участник_Bigote.md) 14:55, 12 июня 2007 (MSD)  
исправлено. Будем надеяться, что больше его нигде нет.
[**ycbl**](Участник_Bigote.md) 14:55, 12 июня 2007 (MSD)

4) Изменился путь к цветовым схемам, надо бы в вики его тоже поправить
(добавилась поддиректория xrdb)
4) Изменился путь к цветовым схемам, надо бы в вики его тоже поправить (добавилась поддиректория xrdb) 


Changes to wiki/ru/Практика.md.

1

2
3
4
5
6
7

8
9
10
11
12
13
14
15
16
17
18
19



20
21
22
23
24



25
26
27

28
29

30
31

32
33

34
35
36
37

38
39
40

41
42

43
44

45
46
47

48
49

50
51

52
53
54

55
56

57
58
59
60

61
62

63
64

65
66
67

68
69

70
71
72

73
74

75
76
77

78
79

80
81
82


83
84

1
2
3
4
5
6
7

8




9
10
11
12
13



14
15
16
17
18



19
20
21
22
23

24


25
26

27


28


29

30
31


32
33

34
35

36

37

38
39

40
41

42

43

44


45


46

47
48

49


50

51

52
53

54

55

56
57

58

59

60
61

62

63

64
65
66

67

+





-
+
-
-
-
-





-
-
-
+
+
+


-
-
-
+
+
+


-
+
-
-
+

-
+
-
-
+
-
-

-
+

-
-
+

-
+

-
+
-

-
+

-
+

-
+
-

-
+
-
-
+
-
-

-
+

-
+
-
-
+
-

-
+

-
+
-

-
+

-
+
-

-
+

-
+
-

-
+
+

-
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Практика/index.html)


# Практика

Материал из Tkabber Wiki

Здесь, как нетрудно догадаться, неутомимые исследователи возможностей Ткаббера
 Здесь, как нетрудно догадаться, неутомимые исследователи возможностей Ткаббера могут найти практические советы по устранению неполадок, а также по расширению существующего функционала. Иными словами, этот раздел написан для тех, кто не прочь засучить рукава и, вооружившись напильником, превратить подводную лодку в самолёт ;) 
могут найти практические советы по устранению неполадок, а также по расширению
существующего функционала. Иными словами, этот раздел написан для тех, кто не
прочь засучить рукава и, вооружившись напильником, превратить подводную лодку в
самолёт ;)

## <a id="toc"></a>Содержание

* [1 Часто задаваемые вопросы (ЧаВо)](#Часто_задаваемые_вопросы_ЧаВо)
* [2 Хохлома](#Хохлома)
   * [2.1 Смайлики и аватары](#Смайлики_и_аватары)
   * [2.2 Цветовые темы и прочая графика](#Цветовые_темы_и_прочая_графика)
   * [2.3 Звуковое сопровождение](#Звуковое_сопровождение)
 * [2.1 Смайлики и аватары](#Смайлики_и_аватары)
 * [2.2 Цветовые темы и прочая графика](#Цветовые_темы_и_прочая_графика)
 * [2.3 Звуковое сопровождение](#Звуковое_сопровождение)
* [3 Нетривиальные ковыряния конфига](#Нетривиальные_ковыряния_конфига)
* [4 Ковыряния программного кода](#Ковыряния_программного_кода)
   * [4.1 Разработка Ткаббера](#Разработка_Ткаббера)
   * [4.2 Плагины / Штепсели](#Плагины___Штепсели)
   * [4.3 Патчи / Заплатки](#Патчи___Заплатки)
 * [4.1 Разработка Ткаббера](#Разработка_Ткаббера)
 * [4.2 Плагины / Штепсели](#Плагины___Штепсели)
 * [4.3 Патчи / Заплатки](#Патчи___Заплатки)
* [5 Разное](#Разное)

## <a id="Часто_задаваемые_вопросы_ЧаВо"></a>Часто задаваемые вопросы (ЧаВо)
# <a id="Часто_задаваемые_вопросы_ЧаВо"></a>Часто задаваемые вопросы (ЧаВо)

[**Маленькие хитрости, или Tkabber F.A.Q.**](Ткаббер_ЧаВо.md)
[Маленькие хитрости, или Tkabber F.A.Q.](Ткаббер_ЧаВо.md) 

## <a id="Хохлома"></a>Хохлома
# <a id="Хохлома"></a>Хохлома

Украшательства и финтифлюшки. Тут будут даны ссылки на готовые цветовые /
Украшательства и финтифлюшки. Тут будут даны ссылки на готовые цветовые / звуковые схемы и наборы смайликов, а также на советы по их "прикручиванию" к Ткабберу. 
звуковые схемы и наборы смайликов, а также на советы по их "прикручиванию" к
Ткабберу.

### <a id="Смайлики_и_аватары"></a>Смайлики и аватары
## <a id="Смайлики_и_аватары"></a>Смайлики и аватары

[**Смайлики (эмоциконки) и аватары**](Смайлики_и_аватары.md) — для тех, кто не
насмотрелся "Весёлых картинок" в детстве.
[Смайлики (эмоциконки) и аватары](Смайлики_и_аватары.md) — для тех, кто не насмотрелся "Весёлых картинок" в детстве. 

### <a id="Цветовые_темы_и_прочая_графика"></a>Цветовые темы и прочая графика
## <a id="Цветовые_темы_и_прочая_графика"></a>Цветовые темы и прочая графика

[**Цветовые темы и прочая графика**](Цветовые_темы_и_пиктограммы.md) — раздел
[Цветовые темы и прочая графика](Цветовые_темы_и_пиктограммы.md) — раздел для практикующих эстетов. 
для практикующих эстетов.

### <a id="Звуковое_сопровождение"></a>Звуковое сопровождение
## <a id="Звуковое_сопровождение"></a>Звуковое сопровождение

[**Звуковые схемы**](Звуковые_схемы.md) — музыканты, ау!
[Звуковые схемы](Звуковые_схемы.md) — музыканты, ау! 

[**Проблемы со звуком**](Проблемы_со_звуком.md) — в эту статью перенесена
[Проблемы со звуком](Проблемы_со_звуком.md) — в эту статью перенесена информация из соответствующих разделов [ЧаВо](Ткаббер_ЧаВо.md). 
информация из соответствующих разделов [**ЧаВо**](Ткаббер_ЧаВо.md).

## <a id="Нетривиальные_ковыряния_конфига"></a>Нетривиальные ковыряния конфига
# <a id="Нетривиальные_ковыряния_конфига"></a>Нетривиальные ковыряния конфига

Рассказы про изменения, вносимые в **config.tcl**, более сложные, чем установка
Рассказы про изменения, вносимые в **config.tcl**, более сложные, чем установка переменных, нанесение боевой раскраски или прикручивание свистелок и <s>перделок</s> колокольчиков. 
переменных, нанесение боевой раскраски или прикручивание свистелок и
<s>перделок</s> колокольчиков.

[**Нетривиальные настройки**](Нетривиальные_настройки.md)
[Нетривиальные настройки](Нетривиальные_настройки.md) 

## <a id="Ковыряния_программного_кода"></a>Ковыряния программного кода
# <a id="Ковыряния_программного_кода"></a>Ковыряния программного кода

В этой серии статей мы (да и вы тоже можете ;)) поделимся советами о том, как
В этой серии статей мы (да и вы тоже можете ;)) поделимся советами о том, как можно расширить существующие возможности Ткаббера с помощью плагинов и патчей. 
можно расширить существующие возможности Ткаббера с помощью плагинов и патчей.

### <a id="Разработка_Ткаббера"></a>Разработка Ткаббера
## <a id="Разработка_Ткаббера"></a>Разработка Ткаббера

[**Разработка**](Разработка.md) — список страниц, посвящённых различным
[Разработка](Разработка.md) — список страниц, посвящённых различным проблемам, касающимся разработки Ткаббера. 
проблемам, касающимся разработки Ткаббера.

### <a id="Плагины___Штепсели"></a>Плагины / Штепсели
## <a id="Плагины___Штепсели"></a>Плагины / Штепсели

[**Плагины**](Плагины.md) — самописные плагины, пока ещё не обретшие
[Плагины](Плагины.md) — самописные плагины, пока ещё не обретшие официальный статус. 
официальный статус.

### <a id="Патчи___Заплатки"></a>Патчи / Заплатки
## <a id="Патчи___Заплатки"></a>Патчи / Заплатки

[**Патчи**](Патчи.md) — обработка напильником исходного кода с целью получения
[Патчи](Патчи.md) — обработка напильником исходного кода с целью получения новых возможностей. 
новых возможностей.

## <a id="Разное"></a>Разное
# <a id="Разное"></a>Разное
*  [Сборка Старпака в домашних условиях](Tkabber_starpack.md) — в помощь Самоделкиным. 

[**Сборка Старпака в домашних условиях**](Tkabber_starpack.md) — в помощь Самоделкиным.

Changes to wiki/ru/Проблемы_X_Window_и_TTF.md.

1

2
3
4
5

6
7
8
9
10
11
12
13


14
15
16
17
18

19
20
21

22
23
24
25

26
27
28
29

30
31
32
33
34
35
36
37
38

39
40
41

42
43
44
45
46
47

48
49
50


51
52
53
54

55
56
57
58
59


60
61

62
63
64
65
66

67
68
69
70
71
72

73
74

75
76

77
78

79
80
81
82
83
84

85
86
87
88
89
90

91
92

93
94
95

96
97
98
99
100

101
102
103
104
105
106

107
108
109

110
111
112


113
114
115


116
117

118
119

120
121

122
123

124
125
126
127
128
129
130
131
132



1
2
3
4
5

6
7
8
9
10
11
12


13
14
15
16
17
18

19

20

21
22
23
24

25


26

27

28
29
30
31
32
33
34

35

36

37


38
39
40

41
42


43
44
45
46
47

48


49


50
51
52

53
54
55
56


57




58

59
60

61


62


63






64




65

66
67

68



69

70
71
72

73




74

75

76

77
78


79
80
81


82
83
84

85
86

87
88

89


90



91
92
93



94
95
96

+



-
+






-
-
+
+




-
+
-

-
+



-
+
-
-

-
+
-







-
+
-

-
+
-
-



-
+

-
-
+
+



-
+
-
-

-
-
+
+

-
+



-
-
+
-
-
-
-

-
+

-
+
-
-
+
-
-
+
-
-
-
-
-
-
+
-
-
-
-

-
+

-
+
-
-
-
+
-



-
+
-
-
-
-

-
+
-

-
+

-
-
+
+

-
-
+
+

-
+

-
+

-
+
-
-
+
-
-
-



-
-
-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Проблемы_X_Window_и_TTF/index.html)


# Проблемы X Window и TTF

Материал из Tkabber Wiki
Материал из Tkabber Wiki.

## <a id="toc"></a>Содержание

* [1 Симптомы](#Симптомы)
* [2 Причины](#Причины)
* [3 Лечение](#Лечение)
   * [3.1 Шрифты?](#Шрифты)
   * [3.2 Сервер шрифтов?](#Сервер_шрифтов)
 * [3.1 Шрифты?](#Шрифты)
 * [3.2 Сервер шрифтов?](#Сервер_шрифтов)
* [4 Дополнительные ссылки по проблеме](#Дополнительные_ссылки_по_проблеме)

## <a id="Симптомы"></a>Симптомы

Ткаббер, работающий под "иксами", падает при попытке показать какой-либо символ
Ткаббер, работающий под "иксами", падает при попытке показать какой-либо символ из "верхней части" [Unicode](http://www.unicode.org). 
из "верхней части" [Unicode](http://www.unicode.org).

Для начала включите отладочный лог, запустив Ткаббер примерно так:
Для начала включите отладочный лог, запустив Ткаббер примерно так: 

    $ tkabber 2>&1 >/tmp/tkabber.log

(на самом деле, достаточно запустить Ткаббер из X-терминала, без всякого
(на самом деле, достаточно запустить Ткаббер из X-терминала, без всякого перенаправления его потоков вывода, тогда ошибка будет просто видна в терминале). 
перенаправления его потоков вывода, тогда ошибка будет просто видна в
терминале).

Вызовите падение Ткаббера, затем смотрите получившийся лог. Если вы видите
Вызовите падение Ткаббера, затем смотрите получившийся лог. Если вы видите нечто вроде: 
нечто вроде:

    X Error of failed request: BadValue (integer parameter out of range for operation)
    Major opcode of failed request: 45 (X_OpenFont)
    Value in failed request:  0x22000ef
    Serial number of failed request:  2263
    Current serial number in output stream:  2264

то вам повезло (относительно), так как корень зла в данном случае известен —
то вам повезло (относительно), так как корень зла в данном случае известен — _неправильная работа одного из компонентов X Window с TrueType-шрифтами._ 
_неправильная работа одного из компонентов X Window с TrueType-шрифтами._

Сразу стоит оговориться, что ни Ткаббер, ни Tk не имеют к происходящему
Сразу стоит оговориться, что ни Ткаббер, ни Tk не имеют к происходящему никакого отношения, так как приведённая выше ошибка — это ошибка, сгенерированная в "недрах" Xlib. 
никакого отношения, так как приведённая выше ошибка — это ошибка,
сгенерированная в "недрах" Xlib.

## <a id="Причины"></a>Причины

Причин, судя по всему, две:
Причин, судя по всему, две: 

* "кривые" шрифты в системе;
* "кривая" работа сервера шрифтов c "прямыми" шрифтами.
*  "кривые" шрифты в системе; 
*  "кривая" работа сервера шрифтов c "прямыми" шрифтами. 

## <a id="Лечение"></a>Лечение

К сожалению, из-за многообразия комбинаций "X-сервер + сервер шрифтов" и их
К сожалению, из-за многообразия комбинаций "X-сервер + сервер шрифтов" и их настроек однозначно работающее решение привести сложно. Поэтому ниже дана информация, которую вам понадобится: 
настроек однозначно работающее решение привести сложно. Поэтому ниже дана
информация, которую вам понадобится:

*  осмыслить,
*  проверить на себе.
*  осмыслить, 
*  проверить на себе. 

В конце концов, "спасение утопающих — дело рук самих утопающих" ©.
В конце концов, "спасение утопающих — дело рук самих утопающих" ©. 

### <a id="Шрифты"></a>Шрифты?

В FAQ юниксового клона MSN Messenger — aMSN
[сказано](http://amsn.sourceforge.net/wiki/tiki-index.php?page=Frequently+Asked+Questions#faq-4-24),
В FAQ юниксового клона MSN Messenger — aMSN [сказано](http://amsn.sourceforge.net/wiki/tiki-index.php?page=Frequently+Asked+Questions#faq-4-24), что проблема, скорее всего, в том, что в системе установлены шрифты, содержащие ошибки, и они выбираются сервером шрифтов раньше "правильных" шрифтов (в предположении что они есть) согласно сконфигурированной вами или стоящей по умолчанию схеме приоритетов. 
что проблема, скорее всего, в том, что в системе установлены шрифты, содержащие
ошибки, и они выбираются сервером шрифтов раньше "правильных" шрифтов (в
предположении что они есть) согласно сконфигурированной вами или стоящей по
умолчанию схеме приоритетов.

Перевод этой информации:
Перевод этой информации: 

1. Проблема может быть в шрифте: попробуйте запустить aMSN с другим шрифтом
1.  Проблема может быть в шрифте: попробуйте запустить aMSN с другим шрифтом (Tools → Preferences → Appearance). <sup>1</sup> 
   (Tools → Preferences → Appearance).<sup>1</sup>
1. Можете попробовать запустить aMSN с другой кодировкой (снова Tools →
1.  Можете попробовать запустить aMSN с другой кодировкой (снова Tools → Preferences → Appearance, и utf-8 как самое безопасное решение). <sup>2</sup> 
   Preferences → Appearance, и utf-8 как самое безопасное решение).<sup>2</sup>
1. Попробуйте очистить ваш кэш фонтов командой **fc-cache -fv**. Затем
1.  Попробуйте очистить ваш кэш фонтов командой **fc-cache -fv**. Затем убедитесь, что ваша локаль (ваши переменные окружения LC\_ALL или LC\_CTYPE) установлены в системе (**set | grep LC\_**) и удостоверьтесь, что соответствующие директории (что выводятся после **=** ) имеются в каталоге **/usr/lib/locale**. Если их там нет, установите их в соответствии с требованиями вашей системы. 
   убедитесь, что ваша локаль (ваши переменные окружения LC\_ALL или LC\_CTYPE)
   установлены в системе (**set | grep LC\_**) и удостоверьтесь, что
   соответствующие директории (что выводятся после **=**) имеются в каталоге
   **/usr/lib/locale**. Если их там нет, установите их в соответствии с
   требованиями вашей системы.
1. Если же ничего из посоветованного не помогает, попробуйте выключать пути к
1.  Если же ничего из посоветованного не помогает, попробуйте выключать пути к фонтам (**FontPath**) в конфигах **/etc/X11/XF86Config** или **/etc/X11/Xorg.conf**, пока не выясните, какой путь ведёт к "кривому" шрифту, и затем пересоздайте файлы **fonts.cache**, **fonts.dir** и **fonts.scale** в том директории.  
   фонтам (**FontPath**) в конфигах **/etc/X11/XF86Config** или
   **/etc/X11/Xorg.conf**, пока не выясните, какой путь ведёт к "кривому" шрифту,
   и затем пересоздайте файлы **fonts.cache**, **fonts.dir** и **fonts.scale** в
   том директории.

 Примечания:
 Примечания: 

1. *Один из пользователей сообщил, что для него оказалось достаточным выбрать в
1.  _Один из пользователей сообщил, что для него оказалось достаточным выбрать в качестве шрифтов Ткаббера **Arial Monotype** (из Microsoft Core Fonts), а ошибки у него были со шрифтом **Tahoma**._ 
   качестве шрифтов Ткаббера **Arial Monotype** (из Microsoft Core Fonts), а
   ошибки у него были со шрифтом **Tahoma**.*
1. *Естественно, в случае с Ткаббером шрифты и кодировки надо менять в его
1.  _Естественно, в случае с Ткаббером шрифты и кодировки надо менять в его конфиге. [Читайте в ЧаВо.](Ткаббер_ЧаВо.md#Шрифты)_ 
   конфиге. [**Читайте в ЧаВо**](Ткаббер_ЧаВо.md#Шрифты).*

### <a id="Сервер_шрифтов"></a>Сервер шрифтов?

А в этом архиве рассылки про [exmh](http://www.beedub.com/exmh/)
А в этом архиве рассылки про [exmh](http://www.beedub.com/exmh/) [описывается](http://www.mercea.net/~exmh/html/exmh-users/2005-01/msg00019.html) решение проблемы, вызванной неправильной работой с TTF-шрифтами, реализованной в некоторых версиях _X-серверов_ (по видимому, X11R6, если принять во внимание дату документа), _которые сконфигурированы на раздачу шрифтов._ 
[описывается](http://www.mercea.net/~exmh/html/exmh-users/2005-01/msg00019.html)
решение проблемы, вызванной неправильной работой с TTF-шрифтами, реализованной
в некоторых версиях _X-серверов_ (по видимому, X11R6, если принять во внимание
дату документа), _которые сконфигурированы на раздачу шрифтов._

Предложенное решение — поставить специализированный сервер TrueType-шрифтов и
Предложенное решение — поставить специализированный сервер TrueType-шрифтов и сообщить об этом X-серверу. 
сообщить об этом X-серверу.

Приведём конфигурацию:
Приведём конфигурацию: 

*  Поставить xfs-ttf + xfs;
*  Прописать в конфигурационный файл X-сервера:
*  Поставить xfs-ttf + xfs; 
*  Прописать в конфигурационный файл X-сервера: 

        FontPath "unix/:7100" # XFS
        FontPath "unix/:7110" # XFS-TTF
    FontPath "unix/:7100" # XFS
    FontPath "unix/:7110" # XFS-TTF

*  Закомментировать там все остальные вхождения **FontPath**.
*  Закомментировать там все остальные вхождения **FontPath**. 

**Примечания:**
**Примечания:** 

* По-видимому, вместо связки xfs-ttf + xfs вполне можно использовать один
*  По-видимому, вместо связки xfs-ttf + xfs вполне можно использовать один xfs-xtt; 
  xfs-xtt;
* Проверьте, чтобы сокет, на котором слушает ваш сервер шрифтов, совпадал с
*  Проверьте, чтобы сокет, на котором слушает ваш сервер шрифтов, совпадал с тем, что вы прописали в конфигурации X-сервера, не надо слепо копировать приведённый пример. Получить список активных сокетов можно, запустив **netstat -l**. 
  тем, что вы прописали в конфигурации X-сервера, не надо слепо копировать
  приведённый пример. Получить список активных сокетов можно, запустив
  **netstat -l**.

## <a id="Дополнительные_ссылки_по_проблеме"></a>Дополнительные ссылки по проблеме

Если ничего не помогло, придётся вам отправиться в долгое странствие по
интернету. Вот вам от нас на дорожку
[гуглюшка хлеба](http://www.google.com/search?as_q=X+Error+of+failed+request:++BadValue+Tk).
Если ничего не помогло, придётся вам отправиться в долгое странствие по интернету. Вот вам от нас на дорожку  [гуглюшка хлеба](http://www.google.com/search?as_q=X+Error+of+failed+request:++BadValue+Tk). 


Changes to wiki/ru/Проблемы_со_звуком.md.

1

2
3
4
5
6
7
8
9
10
11
12
13



14
15
16
17


18
19
20
21

22
23
24
25

26
27
28
29

30
31
32

33
34

35
36
37

38
39
40

41
42
43

44
45
46

47
48
49
50
51


52
53
54

55
56

57
58
59
60
61
62

63
64
65

66
67

68
69
70
71

72
73

74
75
76
77

78
79
80
81
82
83
84

85
86
87
88

89
90
91
92
93
94
95
96
97

98
99
100
101
102

103
104

105
106

107
108
109



1
2
3
4
5
6
7
8
9
10
11



12
13
14
15
16


17
18


19

20

21


22


23

24

25

26
27

28



29



30

31

32

33

34


35


36
37

38

39
40

41
42
43
44
45
46

47

48

49
50

51
52
53
54

55
56

57
58
59
60

61
62
63
64
65
66
67

68
69
70
71

72
73
74
75
76
77
78
79
80

81



82

83
84

85


86

87

88
89
90

+









-
-
-
+
+
+


-
-
+
+
-
-

-
+
-

-
-
+
-
-

-
+
-

-
+

-
+
-
-
-
+
-
-
-
+
-

-
+
-

-
+
-
-

-
-
+
+
-

-
+

-
+





-
+
-

-
+

-
+



-
+

-
+



-
+






-
+



-
+








-
+
-
-
-

-
+

-
+
-
-
+
-

-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Проблемы_со_звуком/index.html)


# Проблемы со звуком

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 В старпаке/старките нет звука](#В_старпаке_старките_нет_звука)
* [2 Изменение громкости звуковых оповещений](#Изменение_громкости_звуковых_оповещений)
   * [2.1 При помощи файла **config.tcl**](#При_помощи_файла_config.tcl)
   * [2.2 Во время работы Ткаббера](#Во_время_работы_Ткаббера)
   * [2.3 Делаем опцию в настройках Ткаббера](#Делаем_опцию_в_настройках_Ткаббера)
 * [2.1 При помощи файла **config.tcl**](#При_помощи_файла_config.tcl)
 * [2.2 Во время работы Ткаббера](#Во_время_работы_Ткаббера)
 * [2.3 Делаем опцию в настройках Ткаббера](#Делаем_опцию_в_настройках_Ткаббера)
* [3 Не работает звук под линуксом в ALSA](#Не_работает_звук_под_линуксом_в_ALSA)

## <a id="В_старпаке_старките_нет_звука"></a>В старпаке/старките нет звука
Официальные старкиты и старпаки не содержат пакета
# <a id="В_старпаке_старките_нет_звука"></a>В старпаке/старките нет звука
Официальные старкиты и старпаки не содержат пакета [Snack](http://www.speech.kth.se/snack/), который обычно играет звук в Ткаббере. 
[Snack](http://www.speech.kth.se/snack/), который обычно играет звук в
Ткаббере.

(Далее мы будем говорить про старпак для краткости, но всё сказанное относится
(Далее мы будем говорить про старпак для краткости, но всё сказанное относится в равной мере и к старкитам.) 
в равной мере и к старкитам.)

Решение: Возьмите один из готовых
[**старкитов**](Дистрибутивы__которые_мы_выбираем.md#Tclkit_starkits_и_starpacks_немного_теории)
Решение: Возьмите один из готовых [старкитов](Дистрибутивы__которые_мы_выбираем.md#Tclkit_starkits_и_starpacks_немного_теории) пакета **Snack**, доступных в [архиве старкитов](http://www.tcl.tk/starkits/) и положите его в тот же каталог, где у вас находится старпак Ткаббера. 
пакета **Snack**, доступных в [архиве старкитов](http://www.tcl.tk/starkits/) и
положите его в тот же каталог, где у вас находится старпак Ткаббера.

При старте старпак Ткаббера ищет файлы, подходящие под маску `snack*.kit` и
При старте старпак Ткаббера ищет файлы, подходящие под маску `snack*.kit` и лежащие там же, где сам старпак, и загружает первый найденный. 
лежащие там же, где сам старпак, и загружает первый найденный.

В настоящий момент в архиве старкитов есть три версии старкита Snack:
В настоящий момент в архиве старкитов есть три версии старкита Snack: 

* "виндовый" ([snack-win.kit](http://www.tcl.tk/starkits/bin/snack-win.kit)) —
*  "виндовый" ([snack-win.kit](http://www.tcl.tk/starkits/bin/snack-win.kit)) — содержит библиотеки только для Windows; 
  содержит библиотеки только для Windows;
* "полный" ([snack.kit](http://www.equi4.com/pub/om/sdarchive/snack.kit) или
  [*локально*](../files/Snack.kit)) — содержит библиотеки для всех трёх платформ,
*  "полный" ([snack.kit](http://www.equi4.com/pub/om/sdarchive/snack.kit) или [локально](../files/Snack.kit)) — содержит библиотеки для всех трёх платформ, на которых работает Tcl/Tk — при его загрузке будет выбрана нужная; 
  на которых работает Tcl/Tk — при его загрузке будет выбрана нужная;
* "линуксовый"
  ([snack-lin.kit](http://www.equi4.com/pub/om/sdarchive/snack-lin.kit) или
*  "линуксовый" ([snack-lin.kit](http://www.equi4.com/pub/om/sdarchive/snack-lin.kit) или [локально](../files/Snack-lin.kit)) — для Linux x86. 
  [*локально*](../files/Snack-lin.kit)) — для Linux x86.

Системозависимые старкиты примерно вдвое меньше в размере, чем полный, но их
Системозависимые старкиты примерно вдвое меньше в размере, чем полный, но их нельзя таскать за собой в другую ОС. 
нельзя таскать за собой в другую ОС.

**Внимание!** Кажущаяся разумной альтернатива — использовать внешнюю программу
**Внимание!** Кажущаяся разумной альтернатива — использовать внешнюю программу для проигрывания звука — _работать не будет,_ так как звуковые файлы находятся на виртуальной файловой системе старпака и недоступны для внешних программ. 
для проигрывания звука — _работать не будет,_ так как звуковые файлы находятся
на виртуальной файловой системе старпака и недоступны для внешних программ.

## <a id="Изменение_громкости_звуковых_оповещений"></a>Изменение громкости звуковых оповещений
Дальнейшие советы касаются только случая использования встроенной звуковой
# <a id="Изменение_громкости_звуковых_оповещений"></a>Изменение громкости звуковых оповещений
Дальнейшие советы касаются только случая использования встроенной звуковой библиотеки **snack**. 
библиотеки **snack**.

### <a id="При_помощи_файла_config.tcl"></a>При помощи файла **config.tcl**
## <a id="При_помощи_файла_config.tcl"></a>При помощи файла **config.tcl**

В раздел **hook::add finload\_hook { ... }** нужно добавить следующие строки:
В раздел **hook::add finload\_hook { ... }** нужно добавить следующие строки: 

    if {$sound::snack} {
         ::snack::audio scaling 0.4
    }

Здесь 0.4 означает, что звуки в Ткаббере будут проигрываться в 4/10 от общей
Здесь 0.4 означает, что звуки в Ткаббере будут проигрываться в 4/10 от общей громкости системы. Значение может меняться от 0.0 до 1.0. 
громкости системы. Значение может меняться от 0.0 до 1.0.

### <a id="Во_время_работы_Ткаббера"></a>Во время работы Ткаббера
## <a id="Во_время_работы_Ткаббера"></a>Во время работы Ткаббера

Открываем консоль через меню **Помощь → Показать консоль**. В ней вводим:
Открываем консоль через меню **Помощь → Показать консоль**. В ней вводим: 

         ::snack::audio scaling 0.4

### <a id="Делаем_опцию_в_настройках_Ткаббера"></a>Делаем опцию в настройках Ткаббера
## <a id="Делаем_опцию_в_настройках_Ткаббера"></a>Делаем опцию в настройках Ткаббера

В файле **tkabber/plugins/general/sound.tcl** находим строчку:
В файле **tkabber\\plugins\\general\\sound.tcl** находим строчку: 

       custom::defvar options(mute) 0 \

сразу перед ней вставляем строки:
сразу перед ней вставляем строки: 

       custom::defvar options(volume) 100 \
             [::msgcat::mc "Sound volume (from 0 to 100)"] \
             -command [list [namespace current]::volume_set] \
             -type integer -group Sound

потом находим строчку:
потом находим строчку: 

    proc ::sound::load_sound_file {name args} {

сразу перед ней вставляем строки:
сразу перед ней вставляем строки: 

    proc ::sound::volume_set {args} {
              variable options
              if {$options(volume) < 0 } {set options(volume) 0}
              if {$options(volume) > 100 } {set options(volume) 100}
              ::snack::audio scaling [expr {$options(volume) / 100.0}]
    }

В опциях звука появится ещё один параметр **Sound volume (from 0 to 100)**.
В опциях звука появится ещё один параметр **Sound volume (from 0 to 100)**. Громкость меняется от минимальной (0) до максимальной (100). Если собираетесь использовать этот вариант настройки, то не забудьте убрать из **config.tcl** последствия настройки согласно первому пункту. 
Громкость меняется от минимальной (0) до максимальной (100). Если собираетесь
использовать этот вариант настройки, то не забудьте убрать из **config.tcl**
последствия настройки согласно первому пункту.

[**Archimed**](Участник_Archimed.md)
[Archimed](Участник_Archimed.md) 

## <a id="Не_работает_звук_под_линуксом_в_ALSA"></a>Не работает звук под линуксом в ALSA
# <a id="Не_работает_звук_под_линуксом_в_ALSA"></a>Не работает звук под линуксом в ALSA

[2009-12-22 13:52:00]\<teo> kostix\_: libsnack2-alsa не рекомендуется к
[2009-12-22 13:52:00]\<teo> kostix\_: libsnack2-alsa не рекомендуется к использованию. libsnack2 и настройка эмуляции oss в alsa рекомендуется. 
использованию. libsnack2 и настройка эмуляции oss в alsa рекомендуется.

Также можно подключить внешнюю программу. Например, mplayer играет за милую душу.
Также можно подключить внешнюю программу. Например, mplayer играет за милую душу. 


Changes to wiki/ru/Проверка_сертификата_сервера.md.

1

2
3
4
5

6
7
8
9
10
11
12



13
14
15
16
17
18





19
20

21
22

23
24
25
26
27

28
29

30
31
32
33
34
35
36
37

38
39
40
41
42
43
44
45
46
47

48
49
50
51
52
53

54
55

56
57
58
59

60
61
62
63
64
65
66
67



68
69
70
71
72
73
74
75
76
77
78

79
80

81
82
83

84
85
86

87
88
89
90
91

92
93
94
95
96
97
98

99
100

101
102
103

104
105

106
107
108

109
110
111

112
113
114
115
116
117
118
119
120

121
122
123
124
125
126
127
128
129

130
131
132
133
134
135
136

137
138
139
140
141
142

143
144

145
146
147
148
149
150

151
152
153
154

155
156
157
158
159
160
161
162
163
164
165




166
167
168
169

170
171
172
173
174
175
176
177
178
179
180
181
182


183
184

185
186
187
188
189
190
191
192
193

194
195

196
197
198
199
200

201
202
203
204
205

206
207

208
209
210

211
212
213
214
215

216
217
218
219
220
221
222
223
224
225
226
227
228

229
230
231
232
233
234
235
236
237

238
239
240
241
242
243

244
245
246
247
248
249
250
251
252
253

254
255

256
257
258
259
260
261

262
263

264
265

266
267
268

269
270
271
272
273
274
275
276

277
278
279
280
281
282

283
284
285
286

287
288

289
290
291
292

293
294
295

296
297
298

299
300
301

302
303

304
305

306
307
308
309
310



311
1
2
3
4
5

6
7
8
9
10



11
12
13
14





15
16
17
18
19
20

21


22



23

24
25

26






27

28








29

30




31

32
33

34


35

36




37



38
39
40





41





42


43

44

45

46

47



48

49





50

51
52

53

54

55


56

57

58

59

60









61







62

63





64

65




66

67
68

69




70

71


72

73






74




75
76
77
78




79


80










81
82
83

84







85

86
87

88



89

90



91

92
93

94

95

96



97

98




99
100
101
102
103
104
105
106

107
108
109
110
111
112
113
114
115

116




117

118







119


120
121

122
123
124
125



126
127

128
129

130

131

132



133
134
135
136

137

138
139
140
141

142


143

144
145

146


147

148

149

150



151



152


153
154

155

156



157
158
159


+



-
+




-
-
-
+
+
+

-
-
-
-
-
+
+
+
+
+

-
+
-
-
+
-
-
-

-
+

-
+
-
-
-
-
-
-

-
+
-
-
-
-
-
-
-
-

-
+
-
-
-
-

-
+

-
+
-
-

-
+
-
-
-
-

-
-
-
+
+
+
-
-
-
-
-

-
-
-
-
-
+
-
-
+
-

-
+
-

-
+
-
-
-

-
+
-
-
-
-
-

-
+

-
+
-

-
+
-
-
+
-

-
+
-

-
+
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-

-
+
-
-
-
-
-

-
+
-
-
-
-

-
+

-
+
-
-
-
-

-
+
-
-

-
+
-
-
-
-
-
-

-
-
-
-
+
+
+
+
-
-
-
-
+
-
-

-
-
-
-
-
-
-
-
-
-
+
+

-
+
-
-
-
-
-
-
-

-
+

-
+
-
-
-

-
+
-
-
-

-
+

-
+
-

-
+
-
-
-

-
+
-
-
-
-








-
+








-
+
-
-
-
-

-
+
-
-
-
-
-
-
-

-
-
+

-
+



-
-
-
+

-
+

-
+
-

-
+
-
-
-




-
+
-




-
+
-
-

-
+

-
+
-
-

-
+
-

-
+
-
-
-
+
-
-
-
+
-
-
+

-
+
-

-
-
-
+
+
+
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Проверка_сертификата_сервера/index.html)


# Проверка сертификата сервера

Материал из Tkabber Wiki
Материал из Tkabber Wiki.

## <a id="toc"></a>Содержание

* [1 Теория](#Теория)
   * [1.1 Для чего?](#Для_чего)
   * [1.2 Как это работает?](#Как_это_работает)
   * [1.3 Что значит "самоподписанный сертификат в цепочке сертификатов"?](#Что_значит_самоподписанный_сертификат_в_цепочке_сертификатов)
 * [1.1 Для чего?](#Для_чего)
 * [1.2 Как это работает?](#Как_это_работает)
 * [1.3 Что значит "самоподписанный сертификат в цепочке сертификатов"?](#Что_значит_самоподписанный_сертификат_в_цепочке_сертификатов)
* [2 Практика](#Практика)
   * [2.1 Получение сертификата доверенного ЦС](#Получение_сертификата_доверенного_ЦС)
   * [2.2 Настройка Ткаббера](#Настройка_Ткаббера)
   * [2.3 Добавление доверенных сертификатов ЦС в хранилище](#Добавление_доверенных_сертификатов_ЦС_в_хранилище)
      * [2.3.1 Приватное хранилище](#Приватное_хранилище)
      * [2.3.2 Системное хранилище](#Системное_хранилище)
 * [2.1 Получение сертификата доверенного ЦС](#Получение_сертификата_доверенного_ЦС)
 * [2.2 Настройка Ткаббера](#Настройка_Ткаббера)
 * [2.3 Добавление доверенных сертификатов ЦС в хранилище](#Добавление_доверенных_сертификатов_ЦС_в_хранилище)
  * [2.3.1 Приватное хранилище](#Приватное_хранилище)
  * [2.3.2 Системное хранилище](#Системное_хранилище)

## <a id="Теория"></a>Теория
# <a id="Теория"></a>Теория

Вы можете перейти прямо к разделу "Практика", однако лучше сначала осилить
Вы можете перейти прямо к разделу "Практика", однако лучше сначала осилить теорию. А ещё лучше сначала прочитать [вводную информацию по поводу соединения "клиент-сервер"](Между_офлайном_и_онлайном.md#Канал_связи_клиент-сервер_в_Jabber_XMPP), чтобы понять, какую роль в установлении соединения играют сертификаты. 
теорию. А ещё лучше сначала прочитать
[**вводную информацию по поводу соединения "клиент-сервер"**](Между_офлайном_и_онлайном.md#Канал_связи_клиент-сервер_в_Jabber_XMPP),
чтобы понять, какую роль в установлении соединения играют сертификаты.

### <a id="Для_чего"></a>Для чего?
## <a id="Для_чего"></a>Для чего?

Проверка сертификата сервера клиентом, о которой идёт речь, производится на
Проверка сертификата сервера клиентом, о которой идёт речь, производится на стадии установления TLS-соединения, именуемой _рукопожатием (handshake)._ Рукопожатие означает не только обмен некоторой чисто технической информацией, но и нечто большее: как известно, традиция рукопожатия у европейцев произошла от вполне утилитарного обряда древних людей — показывать при встрече, что у тебя в руке нет камня. Аналогично, клиент и сервер в ходе TLS-рукопожатия "показывают друг другу руки" — предъявляют свой _сертификат_ и исследуют чужой. 
стадии установления TLS-соединения, именуемой _рукопожатием (handshake)._
Рукопожатие означает не только обмен некоторой чисто технической информацией,
но и нечто большее: как известно, традиция рукопожатия у европейцев произошла
от вполне утилитарного обряда древних людей — показывать при встрече, что у
тебя в руке нет камня. Аналогично, клиент и сервер в ходе TLS-рукопожатия
"показывают друг другу руки" — предъявляют свой _сертификат_ и исследуют чужой.

Проверка может быть полезна вот по какой причине: существует несколько
Проверка может быть полезна вот по какой причине: существует несколько различных атак на протокол TCP/IP, которые позволяют атакующему "встроиться" в соединение и контролировать его. Кроме того, возможны куда более банальные атаки на аппаратном уровне: например, получив контроль над [роутером](http://ru.wikipedia.org/wiki/роутер), через который проходят пакеты между вашим клиентом и сервером, с которым вы хотите соединиться, можно перенаправить трафик такого соединения на другую специально подготовленную машину вместо "настоящего" сервера. Сертификат, предъявляемый сервером, позволяет клиенту удостовериться в том, что сервер "настоящий", и наоборот. 
различных атак на протокол TCP/IP, которые позволяют атакующему "встроиться" в
соединение и контролировать его. Кроме того, возможны куда более банальные
атаки на аппаратном уровне: например, получив контроль над
[роутером](http://ru.wikipedia.org/wiki/роутер), через который проходят пакеты
между вашим клиентом и сервером, с которым вы хотите соединиться, можно
перенаправить трафик такого соединения на другую специально подготовленную
машину вместо "настоящего" сервера. Сертификат, предъявляемый сервером,
позволяет клиенту удостовериться в том, что сервер "настоящий", и наоборот.

Следует также заметить, что в отличие, например, от
Следует также заметить, что в отличие, например, от [VPN](http://ru.wikipedia.org/wiki/VPN), XMPP-сервер в большинстве случаев не интересуется клиентским сертификатом, и в случае соединения с публичными серверами (такими, как jabber.ru), именно это и происходит. Однако в Ткаббере есть возможность указать собственный сертификат и ключ к нему, если требуется. 
[VPN](http://ru.wikipedia.org/wiki/VPN), XMPP-сервер в большинстве случаев не
интересуется клиентским сертификатом, и в случае соединения с публичными
серверами (такими, как jabber.ru), именно это и происходит. Однако в Ткаббере
есть возможность указать собственный сертификат и ключ к нему, если требуется.

### <a id="Как_это_работает"></a>Как это работает?
## <a id="Как_это_работает"></a>Как это работает?

Ключевой концепцией в схеме сертификатов является _доверие_ — вы можете
Ключевой концепцией в схеме сертификатов является _доверие_ — вы можете доверять или не доверять конкретному сертификату, причём эта операция производится автоматически программным обеспечением, реализующим TLS. 
доверять или не доверять конкретному сертификату, причём эта операция
производится автоматически программным обеспечением, реализующим TLS.

Реализация доверия, однако, является значительно более "хитрым" предметом, чем
Реализация доверия, однако, является значительно более "хитрым" предметом, чем хотелось бы некоторым пользователям: вы не можете доверять конкретному сертификату сервера напрямую — вместо этого _вы должны доверять_ (возможно, опосредованно — через цепочку других сертификатов) _**центру сертификации,** который выдал соответствующий сертификат._ 
хотелось бы некоторым пользователям: вы не можете доверять конкретному
сертификату сервера напрямую — вместо этого _вы должны доверять_ (возможно,
опосредованно — через цепочку других сертификатов) _**центру сертификации,**
который выдал соответствующий сертификат._

Причиной подобного устройства является необходимость обеспечения возможности в
любой момент менять сертификат любого участника системы: например, можно
перегенерировать сертификат сервера, и это не нарушит доверие клиентов к этому
Причиной подобного устройства является необходимость обеспечения возможности в любой момент менять сертификат любого участника системы: например, можно перегенерировать сертификат сервера, и это не нарушит доверие клиентов к этому серверу. Перегенерация требуется по разным причинам, главная из которых — истечение срока действия сертификата. Также сертификат и его ключ могут быть скомпрометированы (могут попасть в руки злоумышленника), и установление конечного времени жизни сертификата как раз является упреждающей мерой противодействия компрометации. 

Когда центр сертификации (ЦС) (в оригинале: "Certification Authority (CA)") выдаёт сертификат, он _подписывает_ сертификат своим секретным ключом, добиваясь двух целей: 
серверу. Перегенерация требуется по разным причинам, главная из которых —
истечение срока действия сертификата. Также сертификат и его ключ могут быть
скомпрометированы (могут попасть в руки злоумышленника), и установление
конечного времени жизни сертификата как раз является упреждающей мерой
противодействия компрометации.

Когда центр сертификации (ЦС) (в оригинале: "Certification Authority (CA)")
выдаёт сертификат, он _подписывает_ сертификат своим секретным ключом,
добиваясь двух целей:

* Подписанный с помощью [ЭЦП](http://ru.wikipedia.org/wiki/ЭЦП) сертификат
*  Подписанный с помощью [ЭЦП](http://ru.wikipedia.org/wiki/ЭЦП) сертификат нельзя изменить физически, сохранив его связность с подписью. 
  нельзя изменить физически, сохранив его связность с подписью.
* ЦС "заверяет" сертификат своей подписью, как если бы сертификат был бумажным
*  ЦС "заверяет" сертификат своей подписью, как если бы сертификат был бумажным заявлением, на которым ЦС написал "можно верить". 
  заявлением, на которым ЦС написал "можно верить".

После этого любой клиент, доверяющий данному ЦС, получив в ходе рукопожатия
После этого любой клиент, доверяющий данному ЦС, получив в ходе рукопожатия сертификат, выданный этим ЦС, может автоматически доверять и сертификату. 
сертификат, выданный этим ЦС, может автоматически доверять и сертификату.

_Чтобы доверять конкретному ЦС, нужно доверять его сертификату._ Обычно это
_Чтобы доверять конкретному ЦС, нужно доверять его сертификату._ Обычно это достигается импортом такого сертификата в хранилище сертификатов доверенных ЦС. Этот момент ставит главный барьер для многих пользователей Ткаббера, поэтому рассмотрен в деталях ниже, в секции "Практика". 
достигается импортом такого сертификата в хранилище сертификатов доверенных ЦС.
Этот момент ставит главный барьер для многих пользователей Ткаббера, поэтому
рассмотрен в деталях ниже, в секции "Практика".

Если "выше" ЦС нет никакой структуры, то доверие к сертификату осуществляется
Если "выше" ЦС нет никакой структуры, то доверие к сертификату осуществляется "в один шаг", однако доверие может быть и "многоступенчатым" в силу возможности существования _промежуточных центров сертификации_. В этом случае промежуточный ЦС имеет свой сертификат, и чтобы доверять сертификатам, выданным этим ЦС, клиент должен доверять не только этому ЦС, но и всем его вышестоящим ЦС, вплоть до главного, который назвается _корневым_ (в оригинале: "Root CA"). 
"в один шаг", однако доверие может быть и "многоступенчатым" в силу возможности
существования _промежуточных центров сертификации_. В этом случае промежуточный
ЦС имеет свой сертификат, и чтобы доверять сертификатам, выданным этим ЦС,
клиент должен доверять не только этому ЦС, но и всем его вышестоящим ЦС, вплоть
до главного, который назвается _корневым_ (в оригинале: "Root CA").

### <a id="Что_значит_самоподписанный_сертификат_в_цепочке_сертификатов"></a>Что значит "самоподписанный сертификат в цепочке сертификатов"?
## <a id="Что_значит_самоподписанный_сертификат_в_цепочке_сертификатов"></a>Что значит "самоподписанный сертификат в цепочке сертификатов"?

![(!)](../images/Hammer.png) **Сделать:** дописать про self-signed + unable to
![(!)](../images/Hammer.png) **Сделать:** дописать про self-signed + unable to get local issuer... 
get local issuer...

## <a id="Практика"></a>Практика
# <a id="Практика"></a>Практика

Здесь мы рассмотрим, как сделать сертифкат конкретного центра сертификации
Здесь мы рассмотрим, как сделать сертифкат конкретного центра сертификации доверенным с точки зрения Ткаббера. 
доверенным с точки зрения Ткаббера.

Существует несколько проблем, связанных с добавлением сертификата ЦС в число
Существует несколько проблем, связанных с добавлением сертификата ЦС в число доверенных: 
доверенных:

* Разные системы имеют разные реализации TLS: например, Windows реализует его
*  Разные системы имеют разные реализации TLS: например, Windows реализует его поддержку "нативно" при помощи собственных библиотек, API которых ни с чем не совместим, а большинство "остальных" систем полагаются на библиотеку [OpenSSL](http://www.openssl.org) и "обёртки" вокруг неё; существуют и другие свободные реализации, например, [GnuTLS](http://www.gnu.org/software/gnutls/) и [NSS](http://www.mozilla.org/projects/security/pki/nss/). Ткаббер, как и большинство кросс-платформенных продуктов, использует OpenSSL, и делает он это при помощи расширения Tcl — [tls](http://tls.sourceforge.net), которое экспортирует функциональность OpenSSL на уровень скриптов Tcl. 
  поддержку "нативно" при помощи собственных библиотек, API которых ни с чем не
  совместим, а большинство "остальных" систем полагаются на библиотеку
  [OpenSSL](http://www.openssl.org) и "обёртки" вокруг неё; существуют и другие
  свободные реализации, например, [GnuTLS](http://www.gnu.org/software/gnutls/)
  и [NSS](http://www.mozilla.org/projects/security/pki/nss/). Ткаббер, как и
  большинство кросс-платформенных продуктов, использует OpenSSL, и делает он
  это при помощи расширения Tcl — [tls](http://tls.sourceforge.net), которое
  экспортирует функциональность OpenSSL на уровень скриптов Tcl.
* Понятие "системное хранилище сертификатов" вообще представляется почти
*  Понятие "системное хранилище сертификатов" вообще представляется почти мифическим, если окинуть взором доступные системы. В частности, в Windows существует единое хранилище сертификатов; предполагается, что там хранятся вообще все сертификаты, включая клиентские и доверенные сертификаты ЦС. Системы, широко использующие OpenSSL (например, популярные дистрибутивы Linux), обычно реализуют собственные системные хранилища доверенных сертификатов ЦС, а клиентскими сертификатами каждая программа управляет, как сочтёт нужным. 
  мифическим, если окинуть взором доступные системы. В частности, в Windows
  существует единое хранилище сертификатов; предполагается, что там хранятся
  вообще все сертификаты, включая клиентские и доверенные сертификаты ЦС.
  Системы, широко использующие OpenSSL (например, популярные дистрибутивы
  Linux), обычно реализуют собственные системные хранилища доверенных
  сертификатов ЦС, а клиентскими сертификатами каждая программа управляет, как
  сочтёт нужным.

Ткаббер в этом смысле равноудалён от всех решений: пакет
Ткаббер в этом смысле равноудалён от всех решений: пакет [tls](http://tls.sourceforge.net), который он использует, позволяет указать путь до каталога с доверенными сертификатами ЦС или путь до файла с ними. Ткаббер "прячет" обе эти возможности за единственной опцией конфигурации (так как в состоянии сам разобраться — файл или каталог ему указали), а настройка этой опции зависит от личных способностей и пожеланий пользователя. 
[tls](http://tls.sourceforge.net), который он использует, позволяет указать
путь до каталога с доверенными сертификатами ЦС или путь до файла с ними.
Ткаббер "прячет" обе эти возможности за единственной опцией конфигурации (так
как в состоянии сам разобраться — файл или каталог ему указали), а настройка
этой опции зависит от личных способностей и пожеланий пользователя.

Сразу следует указать, что по причине, изложенной выше, Ткаббер, увы, не имеет
Сразу следует указать, что по причине, изложенной выше, Ткаббер, увы, не имеет никакого отношения к системному хранилищу сертификатов Windows, и когда он работает на этой системе, вы должны сами позаботиться о том, чтобы сложить нужные вам сертификаты в удобное вам место файловой системы: импортировать их в систему средствами Windows бессмысленно. 
никакого отношения к системному хранилищу сертификатов Windows, и когда он
работает на этой системе, вы должны сами позаботиться о том, чтобы сложить
нужные вам сертификаты в удобное вам место файловой системы: импортировать их в
систему средствами Windows бессмысленно.

### <a id="Получение_сертификата_доверенного_ЦС"></a>Получение сертификата доверенного ЦС
## <a id="Получение_сертификата_доверенного_ЦС"></a>Получение сертификата доверенного ЦС

Прежде чем добавить сертификат доверенного ЦС в хранилище и указать на него
Прежде чем добавить сертификат доверенного ЦС в хранилище и указать на него Ткабберу, этот сертификат нужно заполучить. В идеале соответствующая информация должна быть вам доступна до того, как вы совершите первое подключение к серверу (например, на его веб-сайте). Однако зачастую это не так, и вам придётся проявить некоторую смекалку для выяснения местонахождения сертификата. 
Ткабберу, этот сертификат нужно заполучить. В идеале соответствующая информация
должна быть вам доступна до того, как вы совершите первое подключение к серверу
(например, на его веб-сайте). Однако зачастую это не так, и вам придётся
проявить некоторую смекалку для выяснения местонахождения сертификата.

Смекалка состоит в том, чтобы по информации о сертификате, которую показывает
Смекалка состоит в том, чтобы по информации о сертификате, которую показывает Ткаббер при неудавшейся проверке, определить URL веб-сайта соответствующего ЦС. Вот пара практических примеров. 
Ткаббер при неудавшейся проверке, определить URL веб-сайта соответствующего ЦС.
Вот пара практических примеров.

Подключение к jabber.ru — сертификат серверу выдан некоммерческой организацией
Подключение к jabber.ru — сертификат серверу выдан некоммерческой организацией [CAcert.org](http://www.cacert.org). Как видно при внимательном рассмотрении, веб-сайт "виден" в сообщении об ошибке аж дважды: в имени организации ("OU" — "Organisational Unit") и в поле e-mail поддержки: ![Image:CAcert-verification-failed.png](../images/CAcert-verification-failed.png) В данном случае OpenSSL проверяет сертификат, выданный непосредственно корневым ЦС, однако этот ЦС не числится в числе доверенных. 
[CAcert.org](http://www.cacert.org). Как видно при внимательном рассмотрении,
веб-сайт "виден" в сообщении об ошибке аж дважды: в имени организации ("OU" —
"Organisational Unit") и в поле e-mail поддержки:
![Image:CAcert-verification-failed.png](../images/CAcert-verification-failed.png)
В данном случае OpenSSL проверяет сертификат, выданный непосредственно корневым
ЦС, однако этот ЦС не числится в числе доверенных.

Подключение к одному из серверов, входящих в федерацию
[xmpp.net](http://www.xmpp.net), — сертификат выдан организацией
[Startcom](http://www.startcom.org) точнее — промежуточным ЦС, занимающимся
выдачей сертификатов серверам xmpp.net):
Подключение к одному из серверов, входящих в федерацию [xmpp.net](http://www.xmpp.net), — сертификат выдан организацией [Startcom](http://www.startcom.org) (а точнее — промежуточным ЦС, занимающимся выдачей сертификатов серверам xmpp.net): ![Image:Startcom-verification-failed.png](../images/Startcom-verification-failed.png) В данном случае OpenSSL проверяет сертификат, выданный промежуточным ЦС, проверка целостности сертификата удаётся (поскольку он был прислан сервером вместе со своим сертификатом — это обычная практика для сертификатов, выданных промежуточными ЦС, которой, впрочем, администраторы серверов придерживаться не обязаны), но сертификат вышестоящего ЦС в цепочке недоступен. 

Упомянутая смекалка позволит вам заключить, что в первом случае вам следует посетить сайт [CAcert.org](http://www.cacert.org), а во втором — [Startcom](http://www.startcom.org). Искать там нужно корневой (root) или "class 1" сертификат. Если сертификат доступен в нескольких форматах, выбирайте PEM как самый удобный. 

![Image:Startcom-verification-failed.png](../images/Startcom-verification-failed.png)
В данном случае OpenSSL проверяет сертификат, выданный промежуточным ЦС,
проверка целостности сертификата удаётся (поскольку он был прислан сервером
вместе со своим сертификатом — это обычная практика для сертификатов, выданных
В данных конкретных случаях этими сертификатами являются: 
промежуточными ЦС, которой, впрочем, администраторы серверов придерживаться не
обязаны), но сертификат вышестоящего ЦС в цепочке недоступен.

Упомянутая смекалка позволит вам заключить, что в первом случае вам следует
посетить сайт [CAcert.org](http://www.cacert.org), а во втором —
[Startcom](http://www.startcom.org). Искать там нужно корневой (root) или
"class 1" сертификат. Если сертификат доступен в нескольких форматах, выбирайте
PEM как самый удобный.

В данных конкретных случаях этими сертификатами являются:

* Для CAcert: [http://www.cacert.org/certs/root.crt](http://www.cacert.org/certs/root.crt)
* Для Startcom: [http://cert.startcom.org/ca.crt](http://cert.startcom.org/ca.crt)
*  Для CAcert: [http://www.cacert.org/certs/root.crt](http://www.cacert.org/certs/root.crt) 
*  Для Startcom: [http://cert.startcom.org/ca.crt](http://cert.startcom.org/ca.crt) 

Примечание: CAcert.org также предлагает сертификат в "формате TEXT". На самом
Примечание: CAcert.org также предлагает сертификат в "формате TEXT". На самом деле такого формата не существует, а внутри там обычный PEM, предварённый результатом вызова `openssl x509 -text -in class1.crt -noout` на исходном сертификате. Сия схема работает благодаря тому, что OpenSSL при чтении сертификата в формате PEM игнорирует любой мусор до строки начала сертификата "-----BEGIN ..." и после строки его окончания (ниже подробно рассмотрено: в каких случаях и почему это может пригодиться). Поэтому можете скачать сертификат и в таком виде. 
деле такого формата не существует, а внутри там обычный PEM, предварённый
результатом вызова `openssl x509 -text -in class1.crt -noout` на исходном
сертификате. Сия схема работает благодаря тому, что OpenSSL при чтении
сертификата в формате PEM игнорирует любой мусор до строки начала сертификата
"-----BEGIN ..." и после строки его окончания (ниже подробно рассмотрено: в
каких случаях и почему это может пригодиться). Поэтому можете скачать
сертификат и в таком виде.

### <a id="Настройка_Ткаббера"></a>Настройка Ткаббера
## <a id="Настройка_Ткаббера"></a>Настройка Ткаббера

Итак, интересующая нас опция настроек Ткаббера называется
Итак, интересующая нас опция настроек Ткаббера называется **::loginconf(sslcacertstore)** (от **SSL** **CA** **Cert**ificate **Store**), задаёт она путь до каталога или файла с сертификатами доверенных ЦС и удобнее всего настраивается через **Tkabber → Настройки → Login**. 
**::loginconf(sslcacertstore)** (от **SSL** **CA** **Cert**ificate **Store**),
задаёт она путь до каталога или файла с сертификатами доверенных ЦС и удобнее
всего настраивается через **Tkabber → Настройки → Login**.

Если вы используете мультилогин на разные серверы, вам следует изменять
Если вы используете мультилогин на разные серверы, вам следует изменять переменную **sslcacertstore** в соответствующих массивах **::loginconf1**, **::loginconf2** и так далее, как описано в [руководстве](http://tkabber.jabber.ru/files/doc/tkabber.html#s.postload-login). 
переменную **sslcacertstore** в соответствующих массивах **::loginconf1**,
**::loginconf2** и так далее, как описано в
[руководстве](http://tkabber.jabber.ru/files/doc/tkabber.html#s.postload-login).

### <a id="Добавление_доверенных_сертификатов_ЦС_в_хранилище"></a>Добавление доверенных сертификатов ЦС в хранилище
## <a id="Добавление_доверенных_сертификатов_ЦС_в_хранилище"></a>Добавление доверенных сертификатов ЦС в хранилище

Как уже было замечено выше, OpenSSL может искать подходящий сертификат либо в
Как уже было замечено выше, OpenSSL может искать подходящий сертификат либо в файле с набором сертификатов, либо в каталоге с файлами сертификатов. 
файле с набором сертификатов, либо в каталоге с файлами сертификатов.

Остановимся подробнее на форматах этих разновидностей хранилищ сертификатов. О
Остановимся подробнее на форматах этих разновидностей хранилищ сертификатов. О них хорошо рассказано в [описании функции SSL\_CTX\_load\_verify\_locations](http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html) API OpenSSL, однако здесь мы приведём вольную интерпретацию. 
них хорошо рассказано в
[описании функции SSL\_CTX\_load\_verify\_locations](http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html)
API OpenSSL, однако здесь мы приведём вольную интерпретацию.

**Файл** сертификатов — это текстовый (ASCII) файл, который состоит из любого
**Файл** сертификатов — это текстовый (ASCII) файл, который состоит из любого числа сертификатов в формате PEM, расположенных друг за другом; между соседними сертификатами может быть расположен произвольный текст. Это удобно для размещения информации о сертификатах, чтобы проще было ими управлять. Пример такого файла: 
числа сертификатов в формате PEM, расположенных друг за другом; между соседними
сертификатами может быть расположен произвольный текст. Это удобно для
размещения информации о сертификатах, чтобы проще было ими управлять. Пример
такого файла:

    Сертификат CAcert.org:
    -----BEGIN CERTIFICATE-----
    MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
    IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
    ...
    -----END CERTIFICATE-----
    Конец сертификата CAcert.org

    
    Сертификат Startcom:
    -----BEGIN CERTIFICATE-----
    MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx
    DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0
    ...
    -----END CERTIFICATE-----
    Конец сертификата Startcom.

**Каталог** сертификатов должен содержать файлы сертификатов в формате PEM,
**Каталог** сертификатов должен содержать файлы сертификатов в формате PEM, _которые должны иметь специально сгенерированные имена._ Имя каждого файла является хэшем, подсчитанным на основании содержимого файла по специальному алгоритму, а расширение — номер файла с данным значением хэша, начиная с 0, например: 9d66eef0.0. 
_которые должны иметь специально сгенерированные имена._ Имя каждого файла
является хэшем, подсчитанным на основании содержимого файла по специальному
алгоритму, а расширение — номер файла с данным значением хэша, начиная с 0,
например: **9d66eef0.0**.

С OpenSSL поставляется специальная утилита **c\_rehash**, которая умеет создавать
С OpenSSL поставляется специальная утилита c\_rehash, которая умеет создавать "правильно названные" [симлинки](Symlinks.md) на исходные файлы сертификатов (с человекопонятными названиями и, возможно, организованные в систему вложенных каталогов где-то в другом месте файловой системы). Поэтому в Windows, в которой у пользователей очень редко имеется в наличии установленные утилиты из комплекта OpenSSL (да и сам **tls** обычно слинкован с библиотекой OpenSSL статически), данный метод выглядит слишком сложным для реализации, и рекомендуется использовать файл с сертификатами. 
"правильно названные" [**симлинки**](Symlinks.md) на исходные файлы сертификатов (с
человекопонятными названиями и, возможно, организованные в систему вложенных
каталогов где-то в другом месте файловой системы). Поэтому в Windows, в которой
у пользователей очень редко имеется в наличии установленные утилиты из
комплекта OpenSSL (да и сам **tls** обычно слинкован с библиотекой OpenSSL
статически), данный метод выглядит слишком сложным для реализации, и
рекомендуется использовать файл с сертификатами.

Кое-какие подсказки про **c\_rehash** в Windows:
[[1]](http://lynx.isc.org/current/README.rootcerts) (**TODO: окучить**).
Кое-какие подсказки про c\_rehash в Windows: [[1]](http://lynx.isc.org/current/README.rootcerts) (**TODO: окучить**). 

Собственно, искомый хэш получается выполнением
Собственно, искомый хэш получается выполнением 

    openssl x509 -hash -noout -in c:/tmp/root.crt

OpenSSL для виндов берётся
[тут](http://www.slproweb.com/products/Win32OpenSSL.html). Впрочем, это не
работающее решение, возможно, стоит сделать плагин.
OpenSSL для виндов берётся [тут](http://www.slproweb.com/products/Win32OpenSSL.html). Впрочем, это не работающее решение, возможно, стоит сделать плагин. 

#### <a id="Приватное_хранилище"></a>Приватное хранилище
### <a id="Приватное_хранилище"></a>Приватное хранилище

Добавление сертификата в собственное (приватное) хранилище зависит от
Добавление сертификата в собственное (приватное) хранилище зависит от выбранного формата хранилища. 
выбранного формата хранилища.

Если вы используете каталог, просто скопируйте файл с новым сертификатом в
Если вы используете каталог, просто скопируйте файл с новым сертификатом в него, проследив, чтобы он не перезаписал уже существующий файл. Например, логично переименовать CAcert'овский сертификат в cacert-root.pem при копировании. После этого создайте требуемые симлинки: 
него, проследив, чтобы он не перезаписал уже существующий файл. Например,
логично переименовать CAcert'овский сертификат в **cacert-root.pem** при
копировании. После этого создайте требуемые симлинки:

    $ cd ~/path/to/mycacerts
    $ c_rehash .

Если вы поддерживаете хранилище сертификатов в виде файла, просто добавьте
Если вы поддерживаете хранилище сертификатов в виде файла, просто добавьте содержимое файла в конец файла-хранилища, например, так: 
содержимое файла в конец файла-хранилища, например, так:

    C:\> echo Корневой сертификат CAcert >>c:\mycacerts.pem
    C:\> type root.crt >>c:\mycacerts.pem

Переменная конфигурации **::loginconf(sslcacertstore)** должна быть установлена
Переменная конфигурации **::loginconf(sslcacertstore)** должна быть установлена в значение, соответствующее полному пути до каталога или файла с вашим хранилищем. 
в значение, соответствующее полному пути до каталога или файла с вашим
хранилищем.

#### <a id="Системное_хранилище"></a>Системное хранилище
### <a id="Системное_хранилище"></a>Системное хранилище

Процедура помещения сертификата в хранилище зависит от системы. Обычно
Процедура помещения сертификата в хранилище зависит от системы. Обычно специальное средство следит за поддержанием правильной структуры каталога с сертификатами и/или файла с ними. 
специальное средство следит за поддержанием правильной структуры каталога с
сертификатами и/или файла с ними.

В [Debian](http://www.debian.org) и [Ubuntu](http://www.ubuntu.com) процедура
В [Debian](http://www.debian.org) и [Ubuntu](http://www.ubuntu.com) процедура такова: 
такова:

1. Установите настройку **::loginconf(sslcacertstore)** в значение
1.  Установите настройку **::loginconf(sslcacertstore)** в значение /etc/ssl/certs (это каталог) или /etc/ssl/cert/ca-certificates.crt (это файл). 
   **/etc/ssl/certs** (это каталог) или **/etc/ssl/cert/ca-certificates.crt** (это файл).
1. Убедитесь, что установлен пакет
   [ca-certificates](http://packages.debian.org/ca-certificates). Дальнейшие
1.  Убедитесь, что установлен пакет [ca-certificates](http://packages.debian.org/ca-certificates). Дальнейшие действия нужно выполнять с правами суперпользователя. 
   действия нужно выполнять с правами суперпользователя.
1. Скопируйте нужные файлы сертификатов в каталог **/usr/share/ca-certificates**;
   этот каталог может содержать подкаталоги, поэтому можете разместить скачанные
1.  Скопируйте нужные файлы сертификатов в каталог /usr/share/ca-certificates; этот каталог может содержать подкаталоги, поэтому можете разместить скачанные сертификаты по подкаталогам по своему усмотрению. 
   сертификаты по подкаталогам по своему усмотрению.
1. Запустите **update-ca-certificates**.
1.  Запустите update-ca-certificates. 

Теперь Ткаббер будет доверять всем сертификатам ЦС из пакета
Теперь Ткаббер будет доверять всем сертификатам ЦС из пакета **ca-certificates**, а также тем, которые вы добавили. 
**ca-certificates**, а также тем, которые вы добавили.

_Внимание!_ В пакете **ca-certificates**, идущем с Debian Lenny, уже есть
сертификаты как CACert, так и StartCom, — в итоге всё, что нужно сделать для
работы с jabber.ru и серверами, получившими сертификат от xmpp.net, это
_Внимание!_ В пакете **ca-certificates**, идущем с Debian Lenny, уже есть сертификаты как CACert, так и StartCom, — в итоге всё, что нужно сделать для работы с jabber.ru и серверами, получившими сертификат от xmpp.net, это пометить указанные два сертификата как доверенные при конфигурировании пакета. 


пометить указанные два сертификата как доверенные при конфигурировании пакета.

Changes to wiki/ru/Разработка.md.

1
2

3
4
5
6
7

8
9

10
11
12

13
14

15
16

17
18
19
20
21



22
23

24
25
26


27
28

29
30
31
32
33





1
2
3
4
5
6
7

8
9

10
11


12


13


14





15
16
17
18

19
20


21
22
23

24
25




26
27
28
29
30


+




-
+

-
+

-
-
+
-
-
+
-
-
+
-
-
-
-
-
+
+
+

-
+

-
-
+
+

-
+

-
-
-
-
+
+
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Разработка/index.html)


# Разработка

Материал из Tkabber Wiki

Это — список страниц, посвящённых разработке Ткаббера.
Это — список страниц, посвящённых разработке Ткаббера. 

Темы для обсуждений:
Темы для обсуждений: 

* [**Wish и русская раскладка в
  Windows**](Wish_и_русская_раскладка_в_Windows.md) — проблемы non-Latin-1
*  [Wish и русская раскладка в Windows](Wish_и_русская_раскладка_в_Windows.md) — проблемы non-Latin-1 раскладок клавиатуры в системах, отличных от "иксов". 
  раскладок клавиатуры в системах, отличных от "иксов".
* [**MUC Ignore**](MUC_Ignore.md) — обсуждение реализации игнорирования
*  [MUC Ignore](MUC_Ignore.md) — обсуждение реализации игнорирования участников конференций. 
  участников конференций.
* [**Nick coloring**](Nick_coloring.md) — обсуждение переделки системы
*  [Nick coloring](Nick_coloring.md) — обсуждение переделки системы раскраски ников/сообщений. 
  раскраски ников/сообщений.
* [**Config dir**](Config_dir.md) — обсуждение реализации новой системы выбора
  каталога для хранения настроек Ткаббера в Windows (и Mac OS X).
* [**Спамодавка списками приватности**](Спамодавка_списками_приватности.md)
* [**Новый вид Tk в 8.5**](Новый_вид_Tk_в_8.5.md)
*  [Config dir](Config_dir.md) — обсуждение реализации новой системы выбора каталога для хранения настроек Ткаббера в Windows (и Mac OS X). 
*  [Спамодавка списками приватности](Спамодавка_списками_приватности.md) 
*  [Новый вид Tk в 8.5](Новый_вид_Tk_в_8.5.md) 

[**Плагины**](Плагины.md):
[Плагины](Плагины.md): 

* [**Разработка плагинов**](Разработка_плагинов.md)
* [**Чейнджлог плагина Traffic.**](Plugins/Traffic/Changelog.md)
*  [Разработка плагинов](Разработка_плагинов.md) 
*  [Чейнджлог плагина Traffic.](Plugins/Traffic/Changelog.md) 

Прочее:
Прочее: 

* [**SVN disclaimer**](SVN_disclaimer.md) — что нужно знать чтобы начать
  <s>использовать</s> тестировать версию Ткаббера, находящуюся в разработке.
* [**Утилита "Сделай-Tkabber-Starpack-сам"**](Tkabber_starpack.md)
* [**Tk Windows keysyms bug explained**](Tk_Windows_keysyms_bug_explained.md)
*  [SVN disclaimer](SVN_disclaimer.md) — что нужно знать чтобы начать <s>использовать</s> тестировать версию Ткаббера, находящуюся в разработке. 
*  [Утилита "Сделай-Tkabber-Starpack-сам"](Tkabber_starpack.md) 
*  [Tk Windows keysyms bug explained](Tk_Windows_keysyms_bug_explained.md) 


Changes to wiki/ru/Разработка_плагинов.md.

1

2
3
4
5
6
7

8
9
10
11
12
13
14
15
16
17
18



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36























37
38
39
40
41

42
43

44
45
46
47

48
49

50
51

52
53
54
55
56
57
58
59
60
61
62

63
64
65

66
67
68
69
70
71
72
73
74

75
76
77
78
79
80

81
82
83
84
85
86
87
88
89
90
91
92

93
94
95
96
97
98
99
100
101
102

103
104

105
106

107
108

109
110

111
112

113
114

115
116
117
118
119
120

121
122

123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144

145
146
147
148
149
150
151
152
153
154

155
156
157
158
159
160
161
162
163

164
165
166
167
168
169
170

171
172

173
174
175
176
177
178
179
180
181
182

183
184

185
186

187
188
189
190
191
192
193
194
195
196
197
198

199
200
201
202
203
204
205
206
207
208
209
210

211
212
213
214
215
216

217
218

219
220

221
222
223
224
225
226
227

228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246

247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264

265
266

267
268

269
270
271
272
273
274
275
276
277
278

279
280

281
282

283
284
285
286
287
288
289

290
291
292
293
294
295
296
297

298
299
300
301
302

303
304
305
306
307
308
309
310
311

312
313
314
315
316
317
318
319

320
321
322
323

324
325
326
327
328
329
330

331
332

333
334

335
336
337
338
339
340
341
342
343
344

345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361

362
363
364
365
366
367
368
369
370
371
372
373

374
375
376

377
378

379
380
381
382
383
384
385
386
387
388
389
390

391
392
393
394
395
396
397
398
399
400
401


402
403
404

405
406
407
408
409
410
411
412
413

414
415
416
417

418
419

420
421
422
423
424
425
426
427
428
429
430
431
432

433
434
435
436
437
438
439

440
441

442
443
444
445
446
447
448
449

450
451
452
453
454
455
456
457
458
459
460
461

462
463
464
465
466
467

468
469

470
471
472
473

474
475

476
477

478
479

480
481
482

483
484

485
486
487
488
489
490
491
492
493

494
495
496
497
498
499
500
501
502
503
504
505

506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525








526
527

528
529
530
531
532
533



534
535

536
537
538
539
540
541
542

543
544
545
546
547
548
549
550
551
552

553
554
555
556

557
558
559
560
561
562
563
564
565
566

567
568
569
570
571
572
573
574
575
576
577
578
579

580
581
582
583
584


585
586
587

588
589
590


591
592
593
594
595
596
597
598
599
600
601
602

603
604
605
606

607
608

609
610
611
612

613
614

615
616
617
618


619
620
621
622
623



624
625

626
627

628
629

630
631
632

633
634
635
636
637


638
639
640

641
642
643

644
645
646

647
648
649

650
651
652
653
654
655

656
657
658
659
660
661

662
663
664

665
666

667
668
669
670
671
672
673
674
675
676

677
678
679

680
681

682
683
684
685
686

687
688
689
690

691
692

693
694
695
696
697
698

699
700
701

702
703
704
705
706
707
708
709

710
711
712
713

714
715
716
717

718
719
720
721

722
723
724
725

726
727
728
729

730
731
732
733
734

735
736

737
738

739
740
741


742
743
744
745
746

747
748
749
750


751
752

753
754

755
756

757
758
759

760
761

762
763
764
765
766
767



1
2
3
4
5
6
7

8




9
10
11
12



13
14
15
16

















17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

44


45


46

47
48

49
50

51









52

53
54


55







56

57




58

59









60


61








62

63


64
65

66
67

68
69

70
71

72
73

74




75

76
77

78












79
80
81
82
83
84
85
86
87

88








89

90





91
92
93

94





95

96
97

98

99
100
101
102
103
104
105
106

107
108

109
110

111



112
113
114
115
116
117
118
119

120










121

122


123



124
125

126
127

128





129

130

















131

132
















133

134
135

136
137

138






139



140
141

142
143

144



145
146
147

148




149
150
151

152



153

154


155
156
157
158
159
160

161






162

163


164

165





166

167
168

169
170

171








172

173






174
175
176
177
178
179
180
181
182
183

184










185

186

187

188
189

190










191

192







193



194
195



196





197



198


199

200
201

202











203

204





205

206
207

208






209

210
211
212
213
214
215
216
217
218
219
220
221

222




223

224
225

226


227

228


229


230


231

232

233
234

235
236
237
238
239
240
241
242
243

244
245
246
247
248
249
250
251
252
253
254
255

256

257


















258
259
260
261
262
263
264
265
266

267


268



269
270
271
272

273
274
275
276
277
278
279

280
281
282
283
284
285
286
287
288
289

290
291
292
293

294
295
296
297
298
299
300
301
302
303

304













305





306
307



308



309
310










311

312


313

314
315

316


317

318


319




320
321

322



323
324
325


326


327


328



329





330
331

332

333



334



335



336




337

338




339

340

341

342
343

344


345
346
347
348
349
350
351

352

353

354


355





356


357

358


359


360
361
362

363

364

365
366
367
368
369
370
371
372

373
374
375
376

377
378
379
380

381
382
383
384

385
386
387
388

389


390

391

392
393
394

395
396

397


398



399
400





401




402
403


404


405


406

407

408


409




410

411
412
413

+





-
+
-
-
-
-




-
-
-
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+




-
+
-
-
+
-
-

-
+

-
+

-
+
-
-
-
-
-
-
-
-
-

-
+

-
-
+
-
-
-
-
-
-
-

-
+
-
-
-
-

-
+
-
-
-
-
-
-
-
-
-

-
-
+
-
-
-
-
-
-
-
-

-
+
-
-
+

-
+

-
+

-
+

-
+

-
+
-
-
-
-

-
+

-
+
-
-
-
-
-
-
-
-
-
-
-
-









-
+
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-



-
+
-
-
-
-
-

-
+

-
+
-








-
+

-
+

-
+
-
-
-








-
+
-
-
-
-
-
-
-
-
-
-

-
+
-
-

-
-
-
+

-
+

-
+
-
-
-
-
-

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
+

-
+

-
+
-
-
-
-
-
-

-
-
-
+

-
+

-
+
-
-
-



-
+
-
-
-
-



-
+
-
-
-

-
+
-
-






-
+
-
-
-
-
-
-

-
+
-
-

-
+
-
-
-
-
-

-
+

-
+

-
+
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-










-
+
-
-
-
-
-
-
-
-
-
-

-
+
-

-
+

-
+
-
-
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-
-
-

-
-
-
+
+
-
-
-
+
-
-
-
-
-

-
-
-
+
-
-

-
+

-
+
-
-
-
-
-
-
-
-
-
-
-

-
+
-
-
-
-
-

-
+

-
+
-
-
-
-
-
-

-
+











-
+
-
-
-
-

-
+

-
+
-
-

-
+
-
-
+
-
-
+
-
-
+
-

-
+

-
+








-
+











-
+
-

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+

-
+
-
-

-
-
-
+
+
+

-
+






-
+









-
+



-
+









-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
+
+
-
-
-
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-

-
+
-
-

-
+

-
+
-
-

-
+
-
-
+
-
-
-
-
+
+
-

-
-
-
+
+
+
-
-
+
-
-
+
-
-
+
-
-
-
+
-
-
-
-
-
+
+
-

-
+
-
-
-
+
-
-
-
+
-
-
-
+
-
-
-
-

-
+
-
-
-
-

-
+
-

-
+

-
+
-
-







-
+
-

-
+
-
-
+
-
-
-
-
-
+
-
-

-
+
-
-
+
-
-



-
+
-

-
+







-
+



-
+



-
+



-
+



-
+
-
-

-
+
-



-
+

-
+
-
-
+
-
-
-
+
+
-
-
-
-
-
+
-
-
-
-
+
+
-
-
+
-
-
+
-
-
+
-

-
+
-
-
+
-
-
-
-

-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Разработка_плагинов/index.html)


# Разработка плагинов

Материал из Tkabber Wiki

В этой статье будет сделана попытка раскрыть волнующую многих тему написания
В этой статье будет сделана попытка раскрыть волнующую многих тему написания собственного плагина. Автор практического пособия (первых двух разделов статьи) — ещё <s>плохой охотник</s> неопытный плагинописатель, зато его набитые шишки и взгляд на вещи глазами новичка может помочь таким же начинающим. Впрочем, поправки принимаются. 
собственного плагина. Автор практического пособия (первых двух разделов статьи)
— ещё <s>плохой охотник</s> неопытный плагинописатель, зато его набитые шишки и
взгляд на вещи глазами новичка может помочь таким же начинающим. Впрочем,
поправки принимаются.

## <a id="toc"></a>Содержание

* [1 С чего начать](#С_чего_начать)
   * [1.1 Учите матчасть](#Учите_матчасть)
      * [1.1.1 Выучите вы уже этот тикль, не бойтесь — он несложный](#Выучите_вы_уже_этот_тикль_не_бойтесь_-_он_несложный)
      * [1.1.2 Изучите документацию и исходники](#Изучите_документацию_и_исходники)
 * [1.1 Учите матчасть](#Учите_матчасть)
  * [1.1.1 Выучите вы уже этот тикль, не бойтесь — он несложный](#Выучите_вы_уже_этот_тикль_не_бойтесь_-_он_несложный)
  * [1.1.2 Изучите документацию и исходники](#Изучите_документацию_и_исходники)
* [2 Практические советы](#Практические_советы)
   * [2.1 Структура плагина](#Структура_плагина)
      * [2.1.1 Структура каталога](#Структура_каталога)
      * [2.1.2 Структура файла скрипта](#Структура_файла_скрипта)
   * [2.2 Анализируйте чужой код и не бойтесь экспериментировать](#Анализируйте_чужой_код_и_не_бойтесь_экспериментировать)
      * [2.2.1 Закончим анализ разбиравшегося плагина](#Закончим_анализ_разбиравшегося_плагина)
   * [2.3 Отладка](#Отладка)
      * [2.3.1 Спешка нужна лишь при ловле блох](#Спешка_нужна_лишь_при_ловле_блох)
      * [2.3.2 Консоль Ткаббера — наше всё](#Консоль_Ткаббера_-_наше_всё)
      * [2.3.3 Побольше тестируйте](#Побольше_тестируйте)
      * [2.3.4 Научитесь пользоваться системой управления версиями](#Научитесь_пользоваться_системой_управления_версиями)
   * [2.4 Тонкости](#Тонкости)
      * [2.4.1 Хуки и return stop](#Хуки_и_return_stop)
   * [2.5 Делаем плагин динамически подключаемым](#Делаем_плагин_динамически_подключаемым)
      * [2.5.1 Добавляем в namespace код для запуска процедур загрузки и выгрузки](#Добавляем_в_namespace_код_для_запуска_процедур_загрузки_и_выгрузки)
      * [2.5.2 Создаём эти самые процедуры загрузки и выгрузки](#Создаём_эти_самые_процедуры_загрузки_и_выгрузки)
      * [2.5.3 Возможна ли полная выгрузка плагина из памяти?](#Возможна_ли_полная_выгрузка_плагина_из_памяти)
   * [2.6 Не бойтесь задавать вопросы](#Не_бойтесь_задавать_вопросы)
 * [2.1 Структура плагина](#Структура_плагина)
  * [2.1.1 Структура каталога](#Структура_каталога)
  * [2.1.2 Структура файла скрипта](#Структура_файла_скрипта)
   * [2.1.2 Информация о плагине](#Информация_о_плагине)
   * [2.1.2 Задание пространства имён](#Задание_пространства_имён)
   * [2.1.2 Настройки плагина](#Настройки_плагина)
   * [2.1.2 Тело плагина](#Тело_плагина)
 * [2.2 Анализируйте чужой код и не бойтесь экспериментировать](#Анализируйте_чужой_код_и_не_бойтесь_экспериментировать)
  * [2.2.1 Закончим анализ разбиравшегося плагина](#Закончим_анализ_разбиравшегося_плагина)
 * [2.3 Отладка](#Отладка)
  * [2.3.1 Спешка нужна лишь при ловле блох](#Спешка_нужна_лишь_при_ловле_блох)
  * [2.3.2 Консоль Ткаббера — наше всё](#Консоль_Ткаббера_-_наше_всё)
  * [2.3.3 Побольше тестируйте](#Побольше_тестируйте)
  * [2.3.4 Научитесь пользоваться системой управления версиями](#Научитесь_пользоваться_системой_управления_версиями)
 * [2.4 Тонкости](#Тонкости)
  * [2.4.1 Хуки и return stop](#Хуки_и_return_stop)
 * [2.5 Делаем плагин динамически подключаемым](#Делаем_плагин_динамически_подключаемым)
  * [2.5.1 Добавляем в namespace код для запуска процедур загрузки и выгрузки](#Добавляем_в_namespace_код_для_запуска_процедур_загрузки_и_выгрузки)
  * [2.5.2 Создаём эти самые процедуры загрузки и выгрузки](#Создаём_эти_самые_процедуры_загрузки_и_выгрузки)
   * [2.5.2 Процедура загрузки](#Процедура_загрузки)
   * [2.5.2 Теперь о процедуре выгрузки](#Теперь_о_процедуре_выгрузки)
  * [2.5.3 Возможна ли полная выгрузка плагина из памяти?](#Возможна_ли_полная_выгрузка_плагина_из_памяти)
 * [2.6 Не бойтесь задавать вопросы](#Не_бойтесь_задавать_вопросы)
* [3 Общие сведения о репозитории](#Общие_сведения_о_репозитории)
* [4 Как получить доступ к репозиторию](#Как_получить_доступ_к_репозиторию)
* [5 В заключение](#В_заключение)

## <a id="С_чего_начать"></a>С чего начать
# <a id="С_чего_начать"></a>С чего начать

Прежде всего, вам необходимо желание написать плагин. Без этого никак. Если вы
Прежде всего, вам необходимо желание написать плагин. Без этого никак. Если вы вообще тикль видите впервые, а плагин хочется (и никто его не пишет), то вам нужно **огромное желание.** 
вообще тикль видите впервые, а плагин хочется (и никто его не пишет), то вам
нужно **огромное желание.**

### <a id="Учите_матчасть"></a>Учите матчасть
## <a id="Учите_матчасть"></a>Учите матчасть

#### <a id="Выучите_вы_уже_этот_тикль_не_бойтесь_-_он_несложный"></a>Выучите вы уже этот тикль, не бойтесь — он несложный
### <a id="Выучите_вы_уже_этот_тикль_не_бойтесь_-_он_несложный"></a>Выучите вы уже этот тикль, не бойтесь — он несложный

Первым практическим шагом станет изучение основ этого самого тикля. В статье
Первым практическим шагом станет изучение основ этого самого тикля. В статье [Ссылки](Ссылки.md#Tcl_Tk) есть немало линков на различные ресурсы (в том числе и русскоязычные) по этому языку. В принципе, чтения книги самого Аустерхаута, дополненное занятиями, предложенными на [этом сайте,](http://tclstudy.narod.ru/index.html) должно хватить, чтобы начать мало-мальски в нём разбираться. Ещё один ценный источник информации, который всегда под рукой — мануалы: например, `man 3tcl if` и `man 3tk frame` (маны доступны и в интернете, но xterm всё же ближе). Могу вас успокоить — это вам не си-плюс-плюс, не перл и не питон (не знаю ни одного из этих языков, но могу голову дать на отсечение — тикль вы выучите на порядок быстрее любого из них). Спорим, что двух недель вам хватит? ;-P 
[**Ссылки**](Ссылки.md#Tcl_Tk) есть немало линков на различные ресурсы (в том числе
и русскоязычные) по этому языку. В принципе, чтения книги самого Аустерхаута,
дополненное занятиями, предложенными на [этом сайте,](http://tclstudy.narod.ru/index.html) должно хватить, чтобы начать
мало-мальски в нём разбираться. Ещё один ценный источник информации, который
всегда под рукой — мануалы: например, `man 3tcl if` и `man 3tk frame` (маны
доступны и в интернете, но xterm всё же ближе). Могу вас успокоить — это вам не
си-плюс-плюс, не перл и не питон (не знаю ни одного из этих языков, но могу
голову дать на отсечение — тикль вы выучите на порядок быстрее любого из них).
Спорим, что двух недель вам хватит? ;-P

#### <a id="Изучите_документацию_и_исходники"></a>Изучите документацию и исходники
### <a id="Изучите_документацию_и_исходники"></a>Изучите документацию и исходники

* Очень рекомендуется прочитать файл README, который лежит в корне
  установочного каталога Ткаббера. Там описано буквально всё: начиная от
*  Очень рекомендуется прочитать файл README, который лежит в корне установочного каталога Ткаббера. Там описано буквально всё: начиная от процесса установки Ткаббера до описания всех его настроек, а также хуков и прочих интересных вещей, без знания о которых вам будет тяжело. Ваш покорный слуга свой первый плагин написал, не пользуясь никакими хуками (точнее, без них не обошлось, но они были благополучно скопипащены из другого плагина). Сейчас же, продолжая ковырять код Ткаббера, автор этого руководства в полной мере осознал ценность README и в ближайшие дни собирается его осилить, чего и вам желает. 
  процесса установки Ткаббера до описания всех его настроек, а также хуков и
  прочих интересных вещей, без знания о которых вам будет тяжело. Ваш покорный
  слуга свой первый плагин написал, не пользуясь никакими хуками (точнее, без
  них не обошлось, но они были благополучно скопипащены из другого плагина).
  Сейчас же, продолжая ковырять код Ткаббера, автор этого руководства в полной
  мере осознал ценность README и в ближайшие дни собирается его осилить, чего и
  вам желает.

* В принципе, этого уже достаточно, но было бы совсем неплохо пробежаться
*  В принципе, этого уже достаточно, но было бы совсем неплохо пробежаться глазами по списку наличествующих ткабберовских скриптов, а также бегло проглядеть их внутренности, обращая внимание на названия процедур — например, процедура `proc muc::join_group` обрабатывает вход в конференцию, а идущая за ней `muc::leave_group` — выход из неё. Не забудьте и про хуки. 
  глазами по списку наличествующих ткабберовских скриптов, а также бегло
  проглядеть их внутренности, обращая внимание на названия процедур —
  например, процедура `proc muc::join_group` обрабатывает вход в конференцию,
  а идущая за ней `muc::leave_group` — выход из неё. Не забудьте и про хуки.

* Не знаю, насколько это верно, но мне кажется, что почти любой плагин можно
*  Не знаю, насколько это верно, но мне кажется, что почти любой плагин можно написать, надёргав кода из самого Ткаббера и/или других плагинов, развесив этот код по своему скрипту и связав его небольшим количеством продуктов своей мозговой деятельности, поэтому чем лучше вы ориентируетесь в исходниках, тем проще для вас. Если вы не пишете что-нибудь из ряда вон выходящее вроде поддержки jingle, скорее всего, так оно и будет. Более того, так и надо делать. Зачем изобретать свои детали к велосипеду, когда к вашим услугам целый склад? Но чтобы воспользоваться этими деталями, надо знать, где они лежат. Для этого надо твёрдо знать, что именно вы хотите сделать, каким будет ваш плагин. 
  написать, надёргав кода из самого Ткаббера и/или других плагинов, развесив
  этот код по своему скрипту и связав его небольшим количеством продуктов
  своей мозговой деятельности, поэтому чем лучше вы ориентируетесь в
  исходниках, тем проще для вас. Если вы не пишете что-нибудь из ряда вон
  выходящее вроде поддержки jingle, скорее всего, так оно и будет. Более того,
  так и надо делать. Зачем изобретать свои детали к велосипеду, когда к вашим
  услугам целый склад? Но чтобы воспользоваться этими деталями, надо знать,
  где они лежат. Для этого надо твёрдо знать, что именно вы хотите сделать,
  каким будет ваш плагин.

* Например, плагин [**Bldjid**](Плагины.md#Bldjid) для забанивания пользователя по
  джиду во всех конференциях, где я админю, я хотел реализовать как команду в
*  Например, плагин [Bldjid](Плагины.md#Bldjid) для забанивания пользователя по джиду во всех конференциях, где я админю, я хотел реализовать как команду в стиле IRC: /bldjid vasya@pupkin.ru. Если точнее, то сначала я хотел сделать диалог вроде того, который появляется, когда вы хотите послать кому-то приглашение в конференцию. Но, подумав, что это без подготовки будет чересчур геморройно, я выбрал более простой и более эффективный путь. Механизм работы IRC-style-команд я взял в плагине [Urlcmd](Плагины.md#urlcmd). Поскольку баны тесно связаны с работой в конференции, мне понадобилось довольно плотно изучить файл muc.tcl. Не обошлось и без заимствований оттуда. 
  стиле IRC: /bldjid vasya@pupkin.ru. Если точнее, то сначала я хотел сделать
  диалог вроде того, который появляется, когда вы хотите послать кому-то
  приглашение в конференцию. Но, подумав, что это без подготовки будет
  чересчур геморройно, я выбрал более простой и более эффективный путь.
  Механизм работы IRC-style-команд я взял в плагине
  [**Urlcmd**](Плагины.md#Urlcmd). Поскольку баны тесно связаны с работой в
  конференции, мне понадобилось довольно плотно изучить файл muc.tcl. Не
  обошлось и без заимствований оттуда.

## <a id="Практические_советы"></a>Практические советы
# <a id="Практические_советы"></a>Практические советы

### <a id="Структура_плагина"></a>Структура плагина
## <a id="Структура_плагина"></a>Структура плагина

#### <a id="Структура_каталога"></a>Структура каталога
### <a id="Структура_каталога"></a>Структура каталога

Про это коротко, но ясно [**рассказано здесь**](Плагины.md#Анатомия_плагина).
Про это коротко, но ясно [рассказано здесь](Плагины.md#Анатомия_плагина). 

#### <a id="Структура_файла_скрипта"></a>Структура файла скрипта
### <a id="Структура_файла_скрипта"></a>Структура файла скрипта

##### <a id="Информация_о_плагине"></a>Информация о плагине
#### <a id="Информация_о_плагине"></a>Информация о плагине

В самом начале обычно пишутся некоторые данные о плагине и его авторе, в виде
В самом начале обычно пишутся некоторые данные о плагине и его авторе, в виде комментариев. Если вы не планируете делать развёрнутое описание плагина в отдельном файле, можете здесь же вкратце указать, как им пользоваться. Я поначалу так и сделал. Не забудьте дать свою контактную информацию (мыло, джаббер). 
комментариев. Если вы не планируете делать развёрнутое описание плагина в
отдельном файле, можете здесь же вкратце указать, как им пользоваться. Я
поначалу так и сделал. Не забудьте дать свою контактную информацию (мыло,
джаббер).

##### <a id="Задание_пространства_имён"></a>Задание пространства имён
#### <a id="Задание_пространства_имён"></a>Задание пространства имён

"Во первы́х строка́х письма" [© В. С. В.](http://www.world-art.ru/lyric/lyric.php?id=598)
"Во первы́х строка́х письма" [© В. С. В.](http://www.world-art.ru/lyric/lyric.php?id=598) желательно определить пространство имён для процедур и переменных плагина, на случай, если вам взбредёт в голову назвать одну из процедур, к примеру, join\_group (в muc.tcl есть такая процедура, и, чтобы не возникло путаницы и непонятно откуда берущихся ошибок, лучше это пресечь уже сейчас). Более того, как советуют [знающие люди](Участник_Kostix.md), если вы точно не знаете зачем вам поступать по-другому, все процедуры и переменные вашего плагина должны быть в своём пространстве имён. Также следует помнить, что загрузка плагинов делается кодом, который выполняется внутри `namespace eval ::plugins`, поэтому 1) собственное пространство имён не должно быть абсолютным (без веской причины) 2) надо везде использовать `[namespace current]`, если требуется получить полное имя переменной/процедуры. Чтобы не ходить далеко за примером, разберу свой плагин. 
желательно определить
пространство имён для процедур и переменных плагина, на случай, если вам
взбредёт в голову назвать одну из процедур, к примеру, join\_group (в muc.tcl
есть такая процедура, и, чтобы не возникло путаницы и непонятно откуда
берущихся ошибок, лучше это пресечь уже сейчас). Более того, как советуют
[**знающие люди**](Участник_Kostix.md), если вы точно не знаете зачем вам поступать
по-другому, все процедуры и переменные вашего плагина должны быть в своём
пространстве имён. Также следует помнить, что загрузка плагинов делается кодом,
который выполняется внутри `namespace eval ::plugins`, поэтому 1) собственное
пространство имён не должно быть абсолютным (без веской причины) 2) надо везде
использовать `[namespace current]`, если требуется получить полное имя
переменной/процедуры. Чтобы не ходить далеко за примером, разберу свой плагин.

    namespace eval bldjid {
       ::msgcat::mcload [file join [file dirname [info script]] msgs]
       hook::add generate_completions_hook \
           [namespace current]::command_comps
       hook::add chat_send_message_hook \
           [namespace current]::handle_commands 17
    }

Как видите, для задания пространства имён нужна команда **namespace**. Внутри
Как видите, для задания пространства имён нужна команда **namespace**. Внутри фигурных скобок пишется то, что будет действовать в пределах этого пространства. Например, можно задавать хуки, устанавливать переменные или подгружать файлы сообщений, как во второй строчке примера. Немного подробнее о хуках можно почитать [тут](Загрузка_настроек.md#Хуки). Обратите внимание, имена хуков и их обработчиков я стырил из плагина-донора, но, чтобы мои обработчики не перепутались с оригинальными, к ним спереди прибавляется текущее пространство имён: при выполнении скрипта <s>`[namespace current]` заместится на bldjid и получится `bldjid::command_comps`</s> (см. объяснение ниже). 
фигурных скобок пишется то, что будет действовать в пределах этого
пространства. Например, можно задавать хуки, устанавливать переменные или
подгружать файлы сообщений, как во второй строчке примера. Немного подробнее о
хуках можно почитать [**тут**](Загрузка_настроек.md#Хуки). Обратите внимание, имена
хуков и их обработчиков я стырил из плагина-донора, но, чтобы мои обработчики
не перепутались с оригинальными, к ним спереди прибавляется текущее
пространство имён: при выполнении скрипта <s>`[namespace current]` заместится
на bldjid и получится `bldjid::command_comps`</s> (см. объяснение ниже).

Строго говоря, в том плагине они тоже работают внутри своего пространства,
Строго говоря, в том плагине они тоже работают внутри своего пространства, поэтому с нашими не перепутаются, но лучше сделать всё по-человечески. С пространствами имён надо быть осторожнее и лучше перестраховываться, добавляя [namespace current]:: перед именем вызываемой процедуры. Дело в том, что пространство имён плагина само становится "отпрыском" пространства имён ::plugins — Это означает, что если вызывать процедуру вот так: 
поэтому с нашими не перепутаются, но лучше сделать всё по-человечески. С
пространствами имён надо быть осторожнее и лучше перестраховываться, добавляя
[namespace current]:: перед именем вызываемой процедуры. Дело в том, что
пространство имён плагина само становится "отпрыском" пространства
имён ::plugins — Это означает, что если вызывать процедуру вот так:

    bldjid::command_comps

мы получим ошибку о неправильном имени этой команды. Так что если быть точнее,
мы получим ошибку о неправильном имени этой команды. Так что если быть точнее, то при выполнении скрипта **`[namespace current]` заместится на ::plugins::bldjid**. Или можно ещё вызывать процедуру безо всяких неймспейсов, если вы уверены, что это имя уникально. _Если же вы использовали какую-то чужую процедуру и не поменяли ей имя, не забудьте про пространство имён!_ 
то при выполнении скрипта **`[namespace current]` заместится
на ::plugins::bldjid**. Или можно ещё вызывать процедуру безо всяких
неймспейсов, если вы уверены, что это имя уникально. _Если же вы использовали
какую-то чужую процедуру и не поменяли ей имя, не забудьте про пространство
имён!_

##### <a id="Настройки_плагина"></a>Настройки плагина
#### <a id="Настройки_плагина"></a>Настройки плагина

Если вы планируете делать плагин настраиваемым, после объявления неймспейса
Если вы планируете делать плагин настраиваемым, после объявления неймспейса добавьте необходимые настройки. Вот пара настроек из плагина reversi: 
добавьте необходимые настройки. Вот пара настроек из плагина reversi:

       custom::defgroup Plugins [::msgcat::mc "Plugins options."] -group Tkabber
       custom::defgroup Reversi [::msgcat::mc "Reversi plugin options."] -group Plugins
       custom::defvar options(theme) Checkers \
       [::msgcat::mc "Reversi figures theme."] -group Reversi \
       -type options -values $values \
       -command [namespace current]::load_stored_theme

Смело копируйте эти или другие настройки себе и модифицируйте под свои нужды.
Смело копируйте эти или другие настройки себе и модифицируйте под свои нужды. 

##### <a id="Тело_плагина"></a>Тело плагина
#### <a id="Тело_плагина"></a>Тело плагина

Далее идут процедуры. Как минимум должны иметься процедуры-обработчики ваших
Далее идут процедуры. Как минимум должны иметься процедуры-обработчики ваших хуков. Нужны ли вам другие — решать вам в зависимости от ваших потребностей, возможностей и стиля программирования. Вот для примера маленькая процедура-обработчик, которую я взял из urlcmd и адаптировал под себя: 
хуков. Нужны ли вам другие — решать вам в зависимости от ваших потребностей,
возможностей и стиля программирования. Вот для примера маленькая
процедура-обработчик, которую я взял из urlcmd и адаптировал под себя:

    proc bldjid::command_comps {chatid compsvar wordstart line} {
       upvar 0 $compsvar comps
       if {!$wordstart} {
           lappend comps {/bldjid } {/unbldjid } {/banjid }
       }
    }

Обратите внимание на пространство имён bldjid, которое идёт перед именем
Обратите внимание на пространство имён bldjid, которое идёт перед именем процедуры (и отделяется от имени двумя двоеточиями). Его надо добавлять ко всем именам процедур скрипта, которые должны относиться к объявленному неймспейсу. Почувствуйте разницу: в utils.tcl имена процедур пишутся без пространства, потому что это базовые процедуры, и они выполняются в базовом пространстве Ткаббера — :: — и вызываются потом из других скриптов напрямую. Ещё обратите внимание на команды {/bldjid } {/unbldjid } {/banjid }, которые добавляются в список comps. Поначалу у меня были только две первые. Когда они заработали, я решил добавить бан по джиду в текущей комнате. Процедуру-то соответствующую дописал, а сюда команду добавить забыл и потом долго удивлялся, почему она не работает :) 
процедуры (и отделяется от имени двумя двоеточиями). Его надо добавлять ко всем
именам процедур скрипта, которые должны относиться к объявленному неймспейсу.
Почувствуйте разницу: в utils.tcl имена процедур пишутся без пространства,
потому что это базовые процедуры, и они выполняются в базовом пространстве
Ткаббера — :: — и вызываются потом из других скриптов напрямую. Ещё обратите
внимание на команды {/bldjid } {/unbldjid } {/banjid }, которые добавляются в
список comps. Поначалу у меня были только две первые. Когда они заработали, я
решил добавить бан по джиду в текущей комнате. Процедуру-то соответствующую
дописал, а сюда команду добавить забыл и потом долго удивлялся, почему она не
работает :)

Структура стандартного плагина примерно такова, но иногда <s>(например, в плагине
Структура стандартного плагина примерно такова, но иногда (например, в плагине custom-urls.tcl) в самом конце снова объявляется пространство имён, но уже с другой начинкой. ![(!)](../images/Hammer.png) **Сделать:** Рассказать про это. 
custom-urls.tcl)</s> в самом конце снова объявляется пространство имён, но уже с
другой начинкой.

![(!)](../images/Hammer.png) **Сделать:** Уточнить и рассказать про это.

### <a id="Анализируйте_чужой_код_и_не_бойтесь_экспериментировать"></a>Анализируйте чужой код и не бойтесь экспериментировать
## <a id="Анализируйте_чужой_код_и_не_бойтесь_экспериментировать"></a>Анализируйте чужой код и не бойтесь экспериментировать

#### <a id="Закончим_анализ_разбиравшегося_плагина"></a>Закончим анализ разбиравшегося плагина
### <a id="Закончим_анализ_разбиравшегося_плагина"></a>Закончим анализ разбиравшегося плагина

Вторая процедура — `bldjid::handle_commands` — тоже обработчик хука (помните
Вторая процедура — `bldjid::handle_commands` — тоже обработчик хука (помните объявление пространства имён?). Её начало я тоже слямзил из urlcmd.tcl, а остальное — из muc.tcl. В процессе допиливания чужого кода выяснилось, что мне нужны ещё процедуры. Для команды /unbldjid мне идеально подошла внешняя: `muc::unban`, и я просто вызываю её в цикле. Так что разбанивание у меня заработало раньше забанивания :) 
объявление пространства имён?). Её начало я тоже слямзил из urlcmd.tcl, а
остальное — из muc.tcl. В процессе допиливания чужого кода выяснилось, что мне
нужны ещё процедуры. Для команды /unbldjid мне идеально подошла внешняя:
`muc::unban`, и я просто вызываю её в цикле. Так что разбанивание у меня
заработало раньше забанивания :)

С баном вышло посложнее: я не знал, как лучше всё сделать, и поначалу пошёл по
С баном вышло посложнее: я не знал, как лучше всё сделать, и поначалу пошёл по неправильному пути — начал изучать процедуры запроса, получения и отсылки чёрного списка (последняя из них — `muc::send_list`). Процедуры большие и выглядят довольно кошмарно (для новичка), но самое главное, что мне не нравилось — это необходимость вытягивать весь список только для того, чтобы прибавить к нему своего пациента и отправить весь список снова на сервер. Очень нерационально! И тут мне случайно на глаза попался такой комментарий в процедуре-обработчике `muc::change_item_param`, который обрабатывает команды Ткаббера /ban, /kick, /admin и другие: _For unknown reason banning request MUST be based on user's bare JID (which may be not known by admin)._ "Опа, — подумал я, — так значит, серверу всё-таки шлётся реальный джид пользователя, а не room@conference.jabber.ru/nick". Так что я просто забрал остатки кода после этого комментария и сделал из него свою процедуру, выкинув ненужное. Также мне пришлось наприсать свою процедуру проверки на ошибку, основывающуюся на `muc::test_error_res`, потому что оригинальная меня не устраивала. Процедура отсылки бана вызывается один раз, если у нас команда /banjid (её я добавил позже, когда всё заработало), и в цикле, если команда — /bldjid. Вот, собственно, и всё. 
неправильному пути — начал изучать процедуры запроса, получения и отсылки
чёрного списка (последняя из них — `muc::send_list`). Процедуры большие и
выглядят довольно кошмарно (для новичка), но самое главное, что мне не
нравилось — это необходимость вытягивать весь список только для того, чтобы
прибавить к нему своего пациента и отправить весь список снова на сервер. Очень
нерационально! И тут мне случайно на глаза попался такой комментарий в
процедуре-обработчике `muc::change_item_param`, который обрабатывает команды
Ткаббера /ban, /kick, /admin и другие: _For unknown reason banning request MUST
be based on user's bare JID (which may be not known by admin)._ "Опа, — подумал
я, — так значит, серверу всё-таки шлётся реальный джид пользователя, а не
room@conference.jabber.ru/nick". Так что я просто забрал остатки кода после
этого комментария и сделал из него свою процедуру, выкинув ненужное. Также мне
пришлось наприсать свою процедуру проверки на ошибку, основывающуюся на
`muc::test_error_res`, потому что оригинальная меня не устраивала. Процедура
отсылки бана вызывается один раз, если у нас команда /banjid (её я добавил
позже, когда всё заработало), и в цикле, если команда — /bldjid. Вот,
собственно, и всё.

Ну или почти всё. Плагин работает, но его можно чуть-чуть доделать. Сейчас он
Ну или почти всё. Плагин работает, но его можно чуть-чуть доделать. Сейчас он шлёт запросы на бан тупо во все комнаты, где я нахожусь. Но админю-то я не во всех. Это означает лишний трафик для меня и лишнюю нагрузку на сервер. Значит, мне надо как-то отфильтровать те комнаты, где я имею права админа. Тут, как может показаться, заколдованный круг: чтобы узнать, админю ли я в комнате, надо спросить у сервера. А это как раз лишний трафик и лишний пинок серверу. Но если подумать хорошо, то мы ведь уже знаем, что если я в ростере комнаты сижу в группе "Модераторы", то значит, и права тут имею модераторские. Так что надо проверить ростер каждой конференции и выбрать лишь нужные. Вот и обозначилось направление для поисков — найти, где рисуется ростер конференции, и выдрать оттуда нужный код :) На самом деле всё немного сложнее, потому что я могу быть не админом, а модератором — я буду находиться в группе модеров, но банить не смогу. Небольшие издержки, но соотношение "количество работы/результат" получается неплохое. Ещё потребуется добавить исключение комнат вида `channel%irc.server1.ru@irc.server2.com`, чтобы запросы не слались в комнаты, не поддерживающие стандарт MUC. Тут уже, скорее всего, придётся писать свой парсер. 
шлёт запросы на бан тупо во все комнаты, где я нахожусь. Но админю-то я не во
всех. Это означает лишний трафик для меня и лишнюю нагрузку на сервер. Значит,
мне надо как-то отфильтровать те комнаты, где я имею права админа. Тут, как
может показаться, заколдованный круг: чтобы узнать, админю ли я в комнате, надо
спросить у сервера. А это как раз лишний трафик и лишний пинок серверу. Но если
подумать хорошо, то мы ведь уже знаем, что если я в ростере комнаты сижу в
группе "Модераторы", то значит, и права тут имею модераторские. Так что надо
проверить ростер каждой конференции и выбрать лишь нужные. Вот и обозначилось
направление для поисков — найти, где рисуется ростер конференции, и выдрать
оттуда нужный код :) На самом деле всё немного сложнее, потому что я могу быть
не админом, а модератором — я буду находиться в группе модеров, но банить не
смогу. Небольшие издержки, но соотношение "количество работы/результат"
получается неплохое. Ещё потребуется добавить исключение комнат вида
`channel%irc.server1.ru@irc.server2.com`, чтобы запросы не слались в комнаты,
не поддерживающие стандарт MUC. Тут уже, скорее всего, придётся писать свой
парсер.

### <a id="Отладка"></a>Отладка
## <a id="Отладка"></a>Отладка

#### <a id="Спешка_нужна_лишь_при_ловле_блох"></a>Спешка нужна лишь при ловле блох
### <a id="Спешка_нужна_лишь_при_ловле_блох"></a>Спешка нужна лишь при ловле блох

При отлове багов торопиться не надо. Вот вы получили сообщение об ошибке.
При отлове багов торопиться не надо. Вот вы получили сообщение об ошибке. Прочитайте его внимательно: там дана практически вся необходимая для отладки информация. Если виной всему опечатка в имени команды или аргумента, так и будет сказано (имя команды не существует или что-то в этом духе). Если вы позабыли где-то скобку, об этом тоже будет сказано начистоту. Вам дадут ссылку на ошибку вплоть до седьмого колена: в какой строке какой процедуры, вызванной кем и откуда находится источник проблем. ![(!)](../images/Hammer.png) **Сделать:** Развить, если необходимо. 
Прочитайте его внимательно: там дана практически вся необходимая для отладки
информация. Если виной всему опечатка в имени команды или аргумента, так и
будет сказано (имя команды не существует или что-то в этом духе). Если вы
позабыли где-то скобку, об этом тоже будет сказано начистоту. Вам дадут ссылку
на ошибку вплоть до седьмого колена: в какой строке какой процедуры, вызванной
кем и откуда находится источник проблем.

![(!)](../images/Hammer.png) **Сделать:** Развить, если необходимо.

![(!)](../images/Hammer.png) **Сделать:** Вкратце написать про ::plugins::debug.
![(!)](../images/Hammer.png) **Сделать:** Вкратце написать про ::plugins::debug. 

#### <a id="Консоль_Ткаббера_-_наше_всё"></a>Консоль Ткаббера — наше всё
### <a id="Консоль_Ткаббера_-_наше_всё"></a>Консоль Ткаббера — наше всё

Она сэкономит вам уйму времени. Чтобы не перегружать Ткаббер после каждого
Она сэкономит вам уйму времени. Чтобы не перегружать Ткаббер после каждого изменения кода (а поначалу ошибки будут сыпаться как осенние листья, да и потом не факт, что код будет работать правильно и как вам бы хотелось), откройте консоль Ткаббера и напишите там: 
изменения кода (а поначалу ошибки будут сыпаться как осенние листья, да и потом
не факт, что код будет работать правильно и как вам бы хотелось), откройте
консоль Ткаббера и напишите там:

    source "/путь/содержащий пробелы/к/вашему/плагину/coolplugin.tcl"

Плагин должен не отходя от кассы загрузиться (при этом в консоли вам ничего не
Плагин должен не отходя от кассы загрузиться (при этом в консоли вам ничего не будет сказано, что говорит о положительном результате). Если в пути ошибка, консоль изругается. Всё, можно тестировать. Если вам кажется, что он не загрузился (не делает того, что от него ожидается), проверьте, существует ли его пространство имён: 
будет сказано, что говорит о положительном результате). Если в пути ошибка,
консоль изругается. Всё, можно тестировать. Если вам кажется, что он не
загрузился (не делает того, что от него ожидается), проверьте, существует ли
его пространство имён:

    namespace exists ::bldjid

Если ответ — 1, всё должно быть в порядке. Если 0, где-то косяки (<s>в ДНК</s>
Если ответ — 1, всё должно быть в порядке. Если 0, где-то косяки (<s>в ДНК</s> в коде, скорее всего — может, вы ошиблись в имени команды, и теперь Ткаббер "не узнаёт" то, что вы ему подсовываете; при этом, кстати, команда выведется в чате, как простое сообщение). 
в коде, скорее всего — может, вы ошиблись в имени команды, и теперь Ткаббер "не
узнаёт" то, что вы ему подсовываете; при этом, кстати, команда выведется в
чате, как простое сообщение).

На первых порах очень неплохо быть в курсе того, что у вас попадает в
На первых порах очень неплохо быть в курсе того, что у вас попадает в переменные. Воспользуйтесь командой puts. Например, мы хотим узнать, действительно ли все конференции попали в список. 
переменные. Воспользуйтесь командой puts. Например, мы хотим узнать,
действительно ли все конференции попали в список.

       foreach tmpchatid [lsort [lfilter chat::is_groupchat [chat::opened $xlib]]] {
           lappend groupjids [chat::get_jid $tmpchatid]
       }
       puts $groupjids

Результат действия этой команды будет выведен прямо в консоли. Ничто не мешает
Результат действия этой команды будет выведен прямо в консоли. Ничто не мешает вам трассировать таким образом состояние переменных других скриптов Ткаббера. Просто добавьте печать нужной переменной в нужном месте, сохраните файл и не забудьте подгрузить его. Ещё одна удобная для тестирования команда — return stop. Если её поставить в вышеприведённом примере после puts, то дальнейшее выполнение кода прекратится. Полезно, когда сначала хочется отладить один кусок кода, не заморачиваясь на другом. 
вам трассировать таким образом состояние переменных других скриптов Ткаббера.
Просто добавьте печать нужной переменной в нужном месте, сохраните файл и не
забудьте подгрузить его. Ещё одна удобная для тестирования команда — return
stop. Если её поставить в вышеприведённом примере после puts, то дальнейшее
выполнение кода прекратится. Полезно, когда сначала хочется отладить один кусок
кода, не заморачиваясь на другом.

**Внимание:** _Команда puts полезна, но не забудьте перед релизом их все
**Внимание:** _Команда puts полезна, но не забудьте перед релизом их все убрать, иначе их вывод будет валиться в .xsession-errors пользователей плагина, что вряд ли кого-то обрадует._ 
убрать, иначе их вывод будет валиться в .xsession-errors пользователей плагина,
что вряд ли кого-то обрадует._

Хоть консоль Ткаббера и является отличным отладочным инструментом, живого
Хоть консоль Ткаббера и является отличным отладочным инструментом, живого тестирования она заменить не может. Ваш покорный слуга погонял свой плагин, загруженный в Ткаббер через консоль, радостно выложил его сюда на вики, но когда через несколько дней дело дошло до реального масштабного бана, выскочила ошибка. В результате у автора плагина прибавилось ума, и он решил развить тему пространства имён (наверное, вы уже про это прочитали выше). 
тестирования она заменить не может. Ваш покорный слуга погонял свой плагин,
загруженный в Ткаббер через консоль, радостно выложил его сюда на вики, но
когда через несколько дней дело дошло до реального масштабного бана, выскочила
ошибка. В результате у автора плагина прибавилось ума, и он решил развить тему
пространства имён (наверное, вы уже про это прочитали выше).

![(!)](../images/Hammer.png) **Сделать:** Рассказать про return -code break
![(!)](../images/Hammer.png) **Сделать:** Рассказать про return -code break 

#### <a id="Побольше_тестируйте"></a>Побольше тестируйте
### <a id="Побольше_тестируйте"></a>Побольше тестируйте

Прежде чем выкладывать плагин на общее обозрение, погоняйте его самостоятельно.
Прежде чем выкладывать плагин на общее обозрение, погоняйте его самостоятельно. Проверьте его работу в нескольких версиях Ткаббера (svn и хотя бы одной-двух из последних стабильных) и на разных тиклях (8.5, 8.4 как минимум). Возможно, вы воткнули где-то команду, которая есть в одной версии языка или Ткаббера и нет в других. Решайте сами, что вам нужно: совместимость с ними или более продвинутый программинг/функциональность. В случае сомнений посоветуйтесь со [знающими](Участник_Kostix.md) [людьми](Участник_Teo.md). Скорее всего, можно и рыбку съесть, и на ёлку влезть, то есть, разрулить ситуацию так, что и совместимость не пострадает, и работать всё будет хорошо. 
Проверьте его работу в нескольких версиях Ткаббера (svn и хотя бы одной-двух из
последних стабильных) и на разных тиклях (8.5, 8.4 как минимум). Возможно, вы
воткнули где-то команду, которая есть в одной версии языка или Ткаббера и нет в
других. Решайте сами, что вам нужно: совместимость с ними или более продвинутый
программинг/функциональность. В случае сомнений посоветуйтесь со
[**знающими**](Участник_Kostix.md) [**людьми**](Участник_Teo.md). Скорее всего, можно и
рыбку съесть, и на ёлку влезть, то есть, разрулить ситуацию так, что и
совместимость не пострадает, и работать всё будет хорошо.

Пробуйте вводить нестандартные параметры, левые символы, и вообще создавать
Пробуйте вводить нестандартные параметры, левые символы, и вообще создавать экстремальные условия для вашего скрипта. Например, для отсеивания каналов IRC я в проверочном условии использовал поиск вхождения в имя символа процента, поскольку такие комнаты работают через транспорт: `somechannel%someserver.ru@irc.server.org`. Однако потом я подумал (и это подтвердилось на практике), что и обычная MUC-комната может иметь знак процента в имени. Поэтому я доработал проверку таким образом: 
экстремальные условия для вашего скрипта. Например, для отсеивания каналов IRC
я в проверочном условии использовал поиск вхождения в имя символа процента,
поскольку такие комнаты работают через транспорт:
`somechannel%someserver.ru@irc.server.org`. Однако потом я подумал (и это
подтвердилось на практике), что и обычная MUC-комната может иметь знак процента
в имени. Поэтому я доработал проверку таким образом:

       foreach tmpchatid [lsort [lfilter chat::is_groupchat [chat::opened $xlib]]] {
           set tmpgrp [chat::get_jid $tmpchatid]
           if {([lindex [bldjid::whoami $xlib $tmpgrp] 1] == "admin" \
           || [lindex [bldjid::whoami $xlib $tmpgrp] 1] == "owner") \
           && ![string match *%*@*irc* $tmpgrp]} {
               lappend groupjids $tmpgrp
           }
       }

Предполагается, что в имени транспорта обязательно должно присутствовать слово
Предполагается, что в имени транспорта обязательно должно присутствовать слово irc (иначе мы просто не догадаемся, что это IRC-транспорт), то есть, в теперешнем виде скрипт пропустит комнату `mirc%room@conference.jabber.ru` и не пропустит комнату `channel%someserver.org@irc.putyourserverhere.ru`. Кстати, скрипт в этом виде тормознёт и комнату `mirc%room@conference.mirc.com` (представим себе на мгновение, что на этом сайте есть джаббер-сервер), поэтому проверку следует изменить на \*%\*@irc\* (точку после слова irc вылавливать не надо, на случай, если транспорт называется irctransport.server.org). Теперь максимум, что может случиться — если имя транспорта _не начинается_ на "irc" (что очень маловероятно), то тогда, отправив запрос на бан в эту комнату, мы получим сообщение об ошибке. 
irc (иначе мы просто не догадаемся, что это IRC-транспорт), то есть, в
теперешнем виде скрипт пропустит комнату `mirc%room@conference.jabber.ru` и не
пропустит комнату `channel%someserver.org@irc.putyourserverhere.ru`. Кстати,
скрипт в этом виде тормознёт и комнату `mirc%room@conference.mirc.com`
(представим себе на мгновение, что на этом сайте есть джаббер-сервер), поэтому
проверку следует изменить на \*%\*@irc\* (точку после слова irc вылавливать не
надо, на случай, если транспорт называется irctransport.server.org). Теперь
максимум, что может случиться — если имя транспорта _не начинается_ на "irc"
(что очень маловероятно), то тогда, отправив запрос на бан в эту комнату, мы
получим сообщение об ошибке.

Это лишь один пример. Напрягите фантазию, думайте за дурака-пользователя,
Это лишь один пример. Напрягите фантазию, думайте за дурака-пользователя, предполагайте, что он может сморозить. 
предполагайте, что он может сморозить.

#### <a id="Научитесь_пользоваться_системой_управления_версиями"></a>Научитесь пользоваться системой управления версиями
### <a id="Научитесь_пользоваться_системой_управления_версиями"></a>Научитесь пользоваться системой управления версиями

Не поленитесь поставить и освоить что-нибудь вроде
Не поленитесь поставить и освоить что-нибудь вроде [subversion](http://subversion.tigris.org/). Эта штука избавит вас от великой головной боли на тему "Блин, как уж я там позавчера эту хрень сделал? Сейчас бы мне этот кусок сюда, да потёр и не сохранил ту версию". Совсем не обязательно сходу просить допуск к репозиторию на xmpp.ru (особенно если у вас нет опыта работы с svn). Устройте себе локальный сервер: и от головной боли избавитесь, и работать с сабвершеном научитесь. Если вы считаете, что ваше творение должно находиться в общем репозитории [svn.xmpp.ru](http://svn.xmpp.ru), читайте дальше — там рассказано о его устройстве и о том, как получить к нему доступ. Врочем, ради одного плагина не стоит сильно заморачиваться. Выложите его на вики — делов-то. 
[subversion](http://subversion.tigris.org/). Эта штука избавит вас от великой
головной боли на тему "Блин, как уж я там позавчера эту хрень сделал? Сейчас бы
мне этот кусок сюда, да потёр и не сохранил ту версию". Совсем не обязательно
сходу просить допуск к репозиторию на xmpp.ru (особенно если у вас нет опыта
работы с svn). Устройте себе локальный сервер: и от головной боли избавитесь, и
работать с сабвершеном научитесь. Если вы считаете, что ваше творение должно
находиться в общем репозитории [svn.xmpp.ru](http://svn.xmpp.ru), читайте
дальше — там рассказано о его устройстве и о том, как получить к нему доступ.
Врочем, ради одного плагина не стоит сильно заморачиваться. Выложите его на
вики — делов-то.

([**kostix**](Участник_Kostix.md) замечает, что для _локальной_ работы над проектом
([kostix](Участник_Kostix.md) замечает, что для _локальной_ работы над проектом значительно удобнее Subversion использовать какого-нибудь представителя семейства [распределённых систем управления версиями (DVCS)](http://en.wikipedia.org/wiki/Distributed_Version_Control_System), например, [Bazaar](http://bazaar-vcs.org/), [Mercurial](http://www.selenic.com/mercurial), [Git](http://git.or.cz), [Darcs](http://darcs.net), [Monotone](http://monotone.ca) и т.п. — они позволяют лихо жонглировать кодом, не завися от центрального сервера.) 
значительно удобнее Subversion использовать какого-нибудь представителя
семейства
[распределённых систем управления версиями (DVCS)](http://en.wikipedia.org/wiki/Distributed_Version_Control_System),
например, [Bazaar](http://bazaar-vcs.org/),
[Mercurial](http://www.selenic.com/mercurial), [Git](http://git.or.cz),
[Darcs](http://darcs.net), [Monotone](http://monotone.ca) и т.п. — они
позволяют лихо жонглировать кодом, не завися от центрального сервера.)

([**bigote**](Участник_Bigote.md) восторженно соглашается — не так давно
освоенный им в минимальных количествах Git значительно упростил мышиную возню с
кодом на десктопе. Но если вы планируете в конце концов поместить свой плагин в
([bigote](Участник_Bigote.md) восторженно соглашается — не так давно освоенный им в минимальных количествах Git значительно упростил мышиную возню с кодом на десктопе. Но если вы планируете в конце концов поместить свой плагин в репозиторий tkabber-3rd-party-plugins, то лучше сразу вести разработку под svn или на крайний случай сделать это перед его публикацией туда, сначала экспортнув код из локального репозитория. Конечно, есть обвязки, позволяющие публиковать из git в svn, к примеру, но они не про нас, простых смертных начинающих плагинописателей ;)). Вот, кстати, [интересная притча](http://edward13.livejournal.com/26550.html) (во всех переводах названная почему-то басней), простыми словами рассказывающая о мощи git. 

репозиторий tkabber-3rd-party-plugins, то лучше сразу вести разработку под svn
или на крайний случай сделать это перед его публикацией туда, сначала
экспортнув код из локального репозитория. Конечно, есть обвязки, позволяющие
## <a id="Тонкости"></a>Тонкости
публиковать из git в svn, к примеру, но они не про нас, простых смертных
начинающих плагинописателей ;). Вот, кстати,
[интересная притча](http://edward13.livejournal.com/26550.html)
(во всех переводах названная почему-то басней), простыми словами рассказывающая
о мощи git.)

### <a id="Тонкости"></a>Тонкости

Здесь я попытаюсь рассказать о некоторых подводных камнях, на которые будет
Здесь я попытаюсь рассказать о некоторых подводных камнях, на которые будет частенько находить ваша коса в процессе доведения плагина до ума. Моя, во всяком случае, на них натыкается преизрядно. 
частенько находить ваша коса в процессе доведения плагина до ума. Моя, во
всяком случае, на них натыкается преизрядно.

#### <a id="Хуки_и_return_stop"></a>Хуки и return stop
### <a id="Хуки_и_return_stop"></a>Хуки и return stop

Есть тонкая разница между командами `return` и `return stop` — первая не
Есть тонкая разница между командами `return` и `return stop` — первая не прерывает выполнения хука, если процедура, в которой она встретилась, является его обработчиком. Поясню на примере того же плагина Bldjid. Он разросся, и теперь там есть процедура smart\_enter\_exit\_message, которая обрабатывает хук client\_presence\_hook (который срабатывает, когда кто-нибудь меняет своё состояние либо заходит в комнату). Я по незнанию понаставил в некоторые проверки внутри этой процедуры `return stop` вместо `return`, и в результате при определённых условиях перестал показываться ростер конференции, да и другие странности в работе Ткаббера появились. Дело было как раз в том, что вместо того, чтобы мирно завершить свою работу и отдать бразды правления другим обработчикам, эта процедура обрывала хук, и само собой, никто уже не заполнял ростер группы. 
прерывает выполнения хука, если процедура, в которой она встретилась, является
его обработчиком. Поясню на примере того же плагина Bldjid. Он разросся, и
теперь там есть процедура smart\_enter\_exit\_message, которая обрабатывает хук
client\_presence\_hook (который срабатывает, когда кто-нибудь меняет своё
состояние либо заходит в комнату). Я по незнанию понаставил в некоторые
проверки внутри этой процедуры `return stop` вместо `return`, и в результате
при определённых условиях перестал показываться ростер конференции, да и другие
странности в работе Ткаббера появились. Дело было как раз в том, что вместо
того, чтобы мирно завершить свою работу и отдать бразды правления другим
обработчикам, эта процедура обрывала хук, и само собой, никто уже не заполнял
ростер группы.

Сложно дать готовый рецепт на все случаи жизни, но можно посоветовать подходить
Сложно дать готовый рецепт на все случаи жизни, но можно посоветовать подходить с осторожностью к использованию `return stop` в обработчиках хуков. В обычных процедурах наоборот, лучше перестраховаться. Я только что попробовал позаменять все стопы на обычные return в теле простых процедур — результат плачевный: команды-то выполняются, но потом их текст выводится в общий чат, что нам совершенно не нужно. 
с осторожностью к использованию `return stop` в обработчиках хуков. В обычных
процедурах наоборот, лучше перестраховаться. Я только что попробовал позаменять
все стопы на обычные return в теле простых процедур — результат плачевный:
команды-то выполняются, но потом их текст выводится в общий чат, что нам
совершенно не нужно.

### <a id="Делаем_плагин_динамически_подключаемым"></a>Делаем плагин динамически подключаемым
## <a id="Делаем_плагин_динамически_подключаемым"></a>Делаем плагин динамически подключаемым

С появлением в Ткаббере Менеджера плагинов жизнь пользователя стала намного
С появлением в Ткаббере Менеджера плагинов жизнь пользователя стала намного проще. Чтобы подключить нужный плагин, достаточно сделать несколько кликов (**Настройки → Plugins Management → отметить галочкой нужный плагин → сохранить настройку**). Естественно, сам плагин перед этим всё равно должен быть помещён в соответствующее место, но согласитесь, что это значительный шаг вперёд, тем более, что, сняв эту галочку, плагин можно _частично_ из памяти выгрузить. Почему частично? Не буду забегать вперёд, начну по порядку. 
проще. Чтобы подключить нужный плагин, достаточно сделать несколько кликов
(**Настройки → Plugins Management → отметить галочкой нужный плагин → сохранить
настройку**). Естественно, сам плагин перед этим всё равно должен быть помещён
в соответствующее место, но согласитесь, что это значительный шаг вперёд, тем
более, что, сняв эту галочку, плагин можно _частично_ из памяти выгрузить.
Почему частично? Не буду забегать вперёд, начну по порядку.

#### <a id="Добавляем_в_namespace_код_для_запуска_процедур_загрузки_и_выгрузки"></a>Добавляем в namespace код для запуска процедур загрузки и выгрузки
### <a id="Добавляем_в_namespace_код_для_запуска_процедур_загрузки_и_выгрузки"></a>Добавляем в namespace код для запуска процедур загрузки и выгрузки

    if {![::plugins::is_registered bldjid]} {
        ::plugins::register bldjid \
                -namespace [namespace current] \
                -source [info script] \
                -description [::msgcat::mc "Whether the Bldjid plugin is loaded."] \
                -loadcommand [namespace code load] \
                -unloadcommand [namespace code unload]
        return
    }

Помещать его следует в самом начале неймспейса, но _после
Помещать его следует в самом начале неймспейса, но _после строки_ ::msgcat::mcload [file join [file dirname [info script]] msgs], если таковая у вас имеется, иначе не загрузится локализованный текст пояснительной строчки. Как видите, тут всё просто. Вам надо только поменять слово bldjid на название вашего плагина (должно совпадать с именем его каталога). 
строки_ ::msgcat::mcload [file join [file dirname [info script]] msgs], если
таковая у вас имеется, иначе не загрузится локализованный текст пояснительной
строчки. Как видите, тут всё просто. Вам надо только поменять слово bldjid на
название вашего плагина (должно совпадать с именем его каталога).

#### <a id="Создаём_эти_самые_процедуры_загрузки_и_выгрузки"></a>Создаём эти самые процедуры загрузки и выгрузки
### <a id="Создаём_эти_самые_процедуры_загрузки_и_выгрузки"></a>Создаём эти самые процедуры загрузки и выгрузки

Если вы взглянете на подобные плагины других авторов, сразу же заметите, что
Если вы взглянете на подобные плагины других авторов, сразу же заметите, что вышеприведённый код везде одинаков (за исключением имён), а вот процедуры везде разные. Впрочем, можно выделить общие черты: 
вышеприведённый код везде одинаков (за исключением имён), а вот процедуры везде
разные. Впрочем, можно выделить общие черты:

* Почти наверняка ваш плагин использует хуки. _Все_ хуки плагина (не только из
*  Почти наверняка ваш плагин использует хуки. _Все_ хуки плагина (не только из неймспейса, но и из его тела тоже) должны быть собраны в процедуре загрузки. 
  неймспейса, но и из его тела тоже) должны быть собраны в процедуре загрузки.
* Скорее всего у вас есть и парочка глобальных переменных. Их тоже имеет смысл
*  Скорее всего у вас есть и парочка глобальных переменных. Их тоже имеет смысл засунуть сюда. 
  засунуть сюда.
* Если плагин использует сочетания клавиш (как, например, Ctrl-m в Bldjid для
*  Если плагин использует сочетания клавиш (как, например, Ctrl-m в Bldjid для показа/скрытия монитора), их тоже стоит перенести сюда. 
  показа/скрытия монитора), их тоже стоит перенести сюда.
* Редко, но иногда может понадобиться выполнить какие-то действия. Смотрите
*  Редко, но иногда может понадобиться выполнить какие-то действия. Смотрите пример чуть ниже. 
  пример чуть ниже.

##### <a id="Процедура_загрузки"></a>Процедура загрузки
#### <a id="Процедура_загрузки"></a>Процедура загрузки

Рассмотрим разбираемый в этой статье плагин Bldjid:
Рассмотрим разбираемый в этой статье плагин Bldjid: 

    proc bldjid::load {} {
    # A variable where the last query result is stored.
           variable user_list
    # An array where all user entrances are stored.
           global jids_by_chats
           variable ent_cntr 1
           event add <<ToggleMonitor>> <Control-m>

    
           hook::add generate_completions_hook \
           [namespace current]::visitors_compls
           hook::add chat_send_message_hook \
           [namespace current]::handle_commands 17
           ::hook::add open_chat_post_hook [namespace current]::setup_bindings
           hook::add client_presence_hook \
           [namespace current]::smart_enter_exit_message 69
           hook::add room_nickname_changed_hook \
           [namespace current]::smart_enter_exit_message 51
    }

* Как видите, здесь присутствуют все три упомянутых элемента: и хуки, и
*  Как видите, здесь присутствуют все три упомянутых элемента: и хуки, и переменные, и привязка сочетания клавиш к событию. ![(!)](../images/Hammer.png) **Сделать:** Пояснить, как всё это работает (надо мало-мало разобраться в этом самому). Какие именно переменные переносить сюда — решать вам. Имеет смысл переносить глобальные (которые объявлены с помощью global и variable). Также можно грузить здесь переменные, находящиеся в процедуре объявления неймспейса, установленные командой set (чтобы потом при выгрузке прибить их командой unset, которую мы увидим ниже): 
  переменные, и привязка сочетания клавиш к событию.

    ![(!)](../images/Hammer.png) **Сделать:** Пояснить, как всё это работает
    (надо мало-мало разобраться в этом самому).
  
    Какие именно переменные
    переносить сюда — решать вам. Имеет смысл переносить глобальные (которые
    объявлены с помощью global и variable). Также можно грузить здесь
    переменные, находящиеся в процедуре объявления неймспейса, установленные
    командой set (чтобы потом при выгрузке прибить их командой unset, которую мы
    увидим ниже):

        set verbosity [list min [::msgcat::mc "Minimum:\
        Log each entrance or nick change of a unique pair nick/jid only once per room\
        (less memory used)."]\
        max [::msgcat::mc "Maximum: All entrances of each user will be logged."]]

        set matching_rules [list \
        exact [::msgcat::mc "Exact match."]\
        loose [::msgcat::mc "Loose match."]]
    set verbosity [list min [::msgcat::mc "Minimum:\
    Log each entrance or nick change of a unique pair nick/jid only once per room\
    (less memory used)."]\
    max [::msgcat::mc "Maximum: All entrances of each user will be logged."]]
    
    set matching_rules [list \
    exact [::msgcat::mc "Exact match."]\
    loose [::msgcat::mc "Loose match."]]

* В моём плагине нет действий, которые имеет смысл делать во время процедуры
*  В моём плагине нет действий, которые имеет смысл делать во время процедуры загрузки, но такое дело есть в плагине attline, откуда я привожу следующий кусочек кода, идущий после объявления хуков: 
  загрузки, но такое дело есть в плагине attline, откуда я привожу следующий
  кусочек кода, идущий после объявления хуков:

        foreach chatid [chat::opened] {
            setup_chat_win $chatid ""
        }
       foreach chatid [chat::opened] {
           setup_chat_win $chatid ""
       }

##### <a id="Теперь_о_процедуре_выгрузки"></a>Теперь о процедуре выгрузки
#### <a id="Теперь_о_процедуре_выгрузки"></a>Теперь о процедуре выгрузки

    proc bldjid::unload {} {
           variable user_list
           global jids_by_chats
           variable ent_cntr
           event delete <<ToggleMonitor>> <Control-m>

    
           hook::remove generate_completions_hook \
           [namespace current]::visitors_compls
           hook::remove chat_send_message_hook \
           [namespace current]::handle_commands 17
           ::hook::remove open_chat_post_hook [namespace current]::setup_bindings
           hook::remove client_presence_hook \
           [namespace current]::smart_enter_exit_message 69
           hook::remove room_nickname_changed_hook \
           [namespace current]::smart_enter_exit_message 51

    
           catch {unset ent_cntr}
           catch {unset user_list}
           catch {unset jids_by_chats}

    
           foreach chatid [chat::opened] {
                   clear_monitor $chatid
                   set ccw [::chat::winid $chatid]
                   if {![catch {pack info $ccw.mon} res]} {
                           pack forget $ccw.mon $ccw.vsb
                   }
           }
    }

* В её начале, как и в начале любой процедуры, снова объявляются глобальные
*  В её начале, как и в начале любой процедуры, снова объявляются глобальные переменные. Нам их надо потом будет прибить, и если мы их не объявим, они _не будут удалены командой unset,_ хотя и ошибки никакой не выскочит — можете сами в этом убедиться, закомментировав объявление variable ent\_cntr и запустив Ткаббер. Убедитесь, что плагин включен, зайдите в какую-нибудь населённую комнату, откройте консоль Ткаббера и наберите в ней `puts $plugins::bldjid::ent_cntr` — вы увидите число участников, увеличенное на единицу. Теперь выгрузите плагин с помощью Менеджера и снова проверьте состояние переменной. Она содержит всё то же число. Если бы она была объявлена, вы получили бы сообщение об ошибке, что этой переменной не существует (что означало бы, что она стёрта из памяти). Я расписываю это так подробно потому, что не так давно в конференции как раз задавались вопросы на тему "зачем объявлять переменные, если мы сейчас их убьём". 
  переменные. Нам их надо потом будет прибить, и если мы их не объявим, они
  _не будут удалены командой unset,_ хотя и ошибки никакой не выскочит —
  можете сами в этом убедиться, закомментировав объявление variable ent\_cntr
  и запустив Ткаббер. Убедитесь, что плагин включен, зайдите в какую-нибудь
  населённую комнату, откройте консоль Ткаббера и наберите в ней `puts
  $plugins::bldjid::ent_cntr` — вы увидите число участников, увеличенное на
  единицу. Теперь выгрузите плагин с помощью Менеджера и снова проверьте
  состояние переменной. Она содержит всё то же число. Если бы она была
  объявлена, вы получили бы сообщение об ошибке, что этой переменной не
  существует (что означало бы, что она стёрта из памяти). Я расписываю это так
  подробно потому, что не так давно в конференции как раз задавались вопросы
  на тему "зачем объявлять переменные, если мы сейчас их убьём".
   * Удаление некоторых переменных, возможно, большого выигрыша не даст
 *  Удаление некоторых переменных, возможно, большого выигрыша не даст (кроме, разве что, морального удовлетворения), но, например, переменная jids\_by\_chats при параноидальных настройках за несколько дней сидения в людных комнатах может изрядно распухнуть. 
     (кроме, разве что, морального удовлетворения), но, например, переменная
     jids\_by\_chats при параноидальных настройках за несколько дней сидения в
     людных комнатах может изрядно распухнуть.

* Затем я поместил удаление привязки горячих клавиш к событию (в данном
 
*  Затем я поместил удаление привязки горячих клавиш к событию (в данном примере: копируем строчку `event add <<ToggleMonitor>> <Control-m>` из процедуры загрузки и меняем add на delete). 
  примере: копируем строчку `event add <<ToggleMonitor>> <Control-m>` из
  процедуры загрузки и меняем add на delete).
* Далее идёт удаление хуков. Копируем хуки из процедуры load и заменяем add на
*  Далее идёт удаление хуков. Копируем хуки из процедуры load и заменяем add на remove. 
  remove.
* После этого идёт удаление переменных, на всякий случай обёрнутое в catch {}
* И в самом конце я делаю последнюю проверку на случай, если в какой-то
*  После этого идёт удаление переменных, на всякий случай обёрнутое в catch {} 
*  И в самом конце я делаю последнюю проверку на случай, если в какой-то конференции осталось открытым окошко монитора (его надо закрыть программно, ведь сочетание клавиш мы отключаем, и если где-нибудь останется болтаться окошко монитора, пользователь хороших слов о вас не подумает). Для этой проверки у нас есть цикл foreach, в котором мы сначала принудительно чистим окошки монитора (некоторые могут быть закрытыми, но содержать текст), а затем смотрим, есть ли открытый монитор, и если да — закрываем его. Финальные действия могут быть и сложнее. Например, в игровых плагинах процедура выгрузки закрывает окно с партией игры, если оно было открыто, и прибивает все загруженные в память элементы доски (всю графику) и делает много других подобных вещей. 
  конференции осталось открытым окошко монитора (его надо закрыть программно,
  ведь сочетание клавиш мы отключаем, и если где-нибудь останется болтаться
  окошко монитора, пользователь хороших слов о вас не подумает). Для этой
  проверки у нас есть цикл foreach, в котором мы сначала принудительно чистим
  окошки монитора (некоторые могут быть закрытыми, но содержать текст), а
  затем смотрим, есть ли открытый монитор, и если да — закрываем его.
  Финальные действия могут быть и сложнее. Например, в игровых плагинах
  процедура выгрузки закрывает окно с партией игры, если оно было открыто, и
  прибивает все загруженные в память элементы доски (всю графику) и делает
  много других подобных вещей.

Естественно, вам лучше знать, что ваш плагин делает и что нет. Соответственно,
Естественно, вам лучше знать, что ваш плагин делает и что нет. Соответственно, в зависимости от его сложности могут упроститься или усложниться процедуры загрузки и выгрузки. 
в зависимости от его сложности могут упроститься или усложниться процедуры
загрузки и выгрузки.

#### <a id="Возможна_ли_полная_выгрузка_плагина_из_памяти"></a>Возможна ли полная выгрузка плагина из памяти?
### <a id="Возможна_ли_полная_выгрузка_плагина_из_памяти"></a>Возможна ли полная выгрузка плагина из памяти?

На сегодняшний день выгрузка плагина из памяти ограничена лишь хуками,
На сегодняшний день выгрузка плагина из памяти ограничена лишь хуками, переменными и событиями, о чём я уже написал. Однако в памяти остаётся ещё немало: 
переменными и событиями, о чём я уже написал. Однако в памяти остаётся ещё
немало:

* Настройки плагина (выключите какой-нибудь в Менеджере плагинов и сходите в
*  Настройки плагина (выключите какой-нибудь в Менеджере плагинов и сходите в раздел Plugins — его настройки продолжают болтаться там! 
  раздел Plugins — его настройки продолжают болтаться там!
* Код плагина (если разработчик позаботился и запихал всё в свой неймспейс,
*  Код плагина (если разработчик позаботился и запихал всё в свой неймспейс, задача его удаления переводится из разряда невозможных в разряд трудновыполнимых). 
  задача его удаления переводится из разряда невозможных в разряд
  трудновыполнимых).
* На диске могут остаться временные файлы.
* Прочие ресурсы, созданные кодом во время выполнения (а не определённые
*  На диске могут остаться временные файлы. 
*  Прочие ресурсы, созданные кодом во время выполнения (а не определённые статически в тексте плагина). 
  статически в тексте плагина).

Из беседы с разработчиками мне удалось узнать следующее (цитирую):

* _По-моему, выгрузка есть полное изничтожение плагина, включая `namespace
Из беседы с разработчиками мне удалось узнать следующее (цитирую): 
_ 
*  По-моему, выгрузка есть полное изничтожение плагина, включая `namespace delete ::plugins::pluginname`. 
  delete ::plugins::pluginname`._
* _Переменные в настройках регистрируются через `custom::defvar` — Ткаббер же
*  Переменные в настройках регистрируются через `custom::defvar` — Ткаббер же не святым духом про них узнаёт. 
  не святым духом про них узнаёт._
* _Прибить настройки, наверное, можно, если есть
*  Прибить настройки, наверное, можно, если есть `custom::противоположное_defvar` :) 
  `custom::противоположное_defvar` :)_
* _Тебе ничего не мешает убить свой неймспейс (как автору плагина), но грох
*  Тебе ничего не мешает убить свой неймспейс (как автору плагина), но грох неймспейса с живыми переменными кастомайза в нём может дать интересный эффект. 
  неймспейса с живыми переменными кастомайза в нём может дать интересный
  эффект._
* _Вообще, плагин должен знать, что он наделал, и уметь отнаделывать это
*  Вообще, плагин должен знать, что он наделал, и уметь отнаделывать это обратно. Это ж стандартно. Например, плагин receipts создаёт несколько картинок (из файлов) и лепит их в окна. При выгрузке логично чтобы он сначала удалял свои картинки из всех чатов, а потом грохал их. 
  обратно. Это ж стандартно. Например, плагин receipts создаёт несколько
  картинок (из файлов) и лепит их в окна. При выгрузке логично чтобы он
  сначала удалял свои картинки из всех чатов, а потом грохал их._

Так что если обозначить планы для дальнейших исследований, их можно свести к
 _
Так что если обозначить планы для дальнейших исследований, их можно свести к четырём рекомендациям: 
четырём рекомендациям:

1. Изучить механизм `custom::defvar` и попробовать написать
1.  Изучить механизм `custom::defvar` и попробовать написать `custom::противоположное_defvar`. 
   `custom::противоположное_defvar`.
1. Если заниматься этим ломает, можно попробовать провести эксперимент: сделать
   `namespace delete ::plugins::pluginname` при живых переменных кастомайза и
1.  Если заниматься этим ломает, можно попробовать провести эксперимент: сделать `namespace delete ::plugins::pluginname` при живых переменных кастомайза и посмотреть, что получится; при этом подразумевается, что весь код плагина упрятан в его неймспейс; 
   посмотреть, что получится; при этом подразумевается, что весь код плагина
   упрятан в его неймспейс;
1. Если плагин создавал какие-то свои временные файлы на диске, не забывать
1.  Если плагин создавал какие-то свои временные файлы на диске, не забывать удалять их при выгрузке (не путайте это с логами, которые создаются для пользователя! если ему надо будет их убить, он убьёт их сам). 
   удалять их при выгрузке (не путайте это с логами, которые создаются для
   пользователя! если ему надо будет их убить, он убьёт их сам).
1. Не забывать про открытые окна и прочие ресурсы, создаваемые плагином — я уже
1.  Не забывать про открытые окна и прочие ресурсы, создаваемые плагином — я уже показал, как делается проверка на предмет забытых окошек монитора; кроме того, вы можете изучить процедуры выгрузки игровых плагинов: chess, reversi и т. д. — если выключить плагин, когда открыта партия, её окно закроется (сначала плагин удаляет из памяти всю свою графику, как об этом уже было сказано выше). 
   показал, как делается проверка на предмет забытых окошек монитора; кроме того,
   вы можете изучить процедуры выгрузки игровых плагинов: chess, reversi и т. д. —
   если выключить плагин, когда открыта партия, её окно закроется (сначала плагин
   удаляет из памяти всю свою графику, как об этом уже было сказано выше).

Наверняка я, реализуя выгрузку из памяти своего плагина, что-то не учёл, о
Наверняка я, реализуя выгрузку из памяти своего плагина, что-то не учёл, о чём-то позабыл и что-то сделал неправильно. Поэтому имеет смысл придумать универсальный механизм, позволяющий полностью удалять плагин из памяти, не заботясь о каждой мелочи. Возможно, когда-нибудь он будет реализован, но пока это не сделано, заботиться об этом нужно автору плагина. 
чём-то позабыл и что-то сделал неправильно. Поэтому имеет смысл придумать
универсальный механизм, позволяющий полностью удалять плагин из памяти, не
заботясь о каждой мелочи. Возможно, когда-нибудь он будет реализован, но пока
это не сделано, заботиться об этом нужно автору плагина.

Вот, собственно, и всё. Если у меня появятся результаты исследований описанных
Вот, собственно, и всё. Если у меня появятся результаты исследований описанных выше проблем, я непременно их здесь выложу. Призываю сделать то же самое и вас. 
выше проблем, я непременно их здесь выложу. Призываю сделать то же самое и вас.

### <a id="Не_бойтесь_задавать_вопросы"></a>Не бойтесь задавать вопросы
## <a id="Не_бойтесь_задавать_вопросы"></a>Не бойтесь задавать вопросы

Один вопрос специалисту сэкономил мне несколько часов напрасной работы. Камрад
Один вопрос специалисту сэкономил мне несколько часов напрасной работы. Камрад [kostix](Участник_Kostix.md) подсказал мне простое решение проблемы, как узнать, в какой комнате я админю. А ещё через минуту и процедурку сваял: 
[**kostix**](Участник_Kostix.md) подсказал мне простое решение проблемы, как
узнать, в какой комнате я админю. А ещё через минуту и процедурку сваял:

    proc whoami {xlib where} {
       set chatid [chat::chatid $xlib $where]
       set jid $where/[get_our_groupchat_nick $chatid]
       list $muc::users(role,$xlib,$jid) $muc::users(affiliation,$xlib,$jid)
    }

Конечно, задавая вопросы, следует помнить о простых правилах, изложенных в
Конечно, задавая вопросы, следует помнить о простых правилах, изложенных в [этой статье](Остров_посланных_на....md). На всякий случай напомню основные: 
[**этой статье**](Остров_посланных_на....md). На всякий случай напомню основные:

* Попробуйте решить проблему самостоятельно и в вопросе изложите шаги, вами
*  Попробуйте решить проблему самостоятельно и в вопросе изложите шаги, вами предпринятые. Потенциальный помощник это оценит. 
  предпринятые. Потенциальный помощник это оценит.
* Спешка нужна лишь при ловле блох. Это ведь не горящий проект, так? Да если и
*  Спешка нужна лишь при ловле блох. Это ведь не горящий проект, так? Да если и горящий, кому до этого какое дело? У всех свои заботы — кризис на дворе. От этого плагина не зависит судьба человечества? (Если зависит, какого чёрта вы сами столько с ним тянули?) Так что если вам не отвечают сразу, наберитесь терпения. 
  горящий, кому до этого какое дело? У всех свои заботы — кризис на дворе. От
  этого плагина не зависит судьба человечества? (Если зависит, какого чёрта вы
  сами столько с ним тянули?) Так что если вам не отвечают сразу, наберитесь
  терпения.
* В комментариях к коду не забудьте выразить благодарность этому человеку.
*  В комментариях к коду не забудьте выразить благодарность этому человеку. Если он, помогая вам, написал половину или даже хотя бы треть плагина, можете смело включать его в соавторы. 
  Если он, помогая вам, написал половину или даже хотя бы треть плагина,
  можете смело включать его в соавторы.

## <a id="Общие_сведения_о_репозитории"></a>Общие сведения о репозитории
# <a id="Общие_сведения_о_репозитории"></a>Общие сведения о репозитории

Для разработки неофициальных проектов, имеющих отношение к Ткабберу (и в том
Для разработки неофициальных проектов, имеющих отношение к Ткабберу (и в том числе — плагинов), был создан специальный репозиторий [Subversion](http://subversion.tigris.org): 
числе — плагинов), был создан специальный репозиторий
[Subversion](http://subversion.tigris.org):

    svn.xmpp.ru/repos/tkabber-3rd-party/

то есть он расположен "рядом" с официальным репозиторием Ткаббера и
то есть он расположен "рядом" с официальным репозиторием Ткаббера и поддерживает такие же две схемы доступа: **http** и **https**. 
поддерживает такие же две схемы доступа: **http** и **https**.

Основная структура репозитория на данный момент такова:
Основная структура репозитория на данный момент такова: 

    svn.xmpp.ru/repos/tkabber-3rd-party/
      trunk/
        plugins/
      tags/
      branches/

то есть предполагается, что плагины будут складываться в
то есть предполагается, что плагины будут складываться в 

    svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins

а их "ветки" делаться где-то под
а их "ветки" делаться где-то под 

    svn.xmpp.ru/repos/tkabber-3rd-party/branches/

Формат веток, в принципе, не важен. Например, юзер vasya может делать ветки в
Формат веток, в принципе, не важен. Например, юзер vasya может делать ветки в  

     svn.xmpp.ru/repos/tkabber-3rd-party/branches/vasya/mycoolplugin/testing-stuff

а может — в
а может — в 

    svn.xmpp.ru/repos/tkabber-3rd-party/branches/plugins/mycoolplugin/testing-other-stuff

Можно и весь "куст" под **trunk'**ом копировать под **branches** —
Можно и весь "куст" под **trunk'**ом копировать под **branches** — [ветки в Subversion дёшевы](http://svnbook.red-bean.com/en/1.2/svn.branchmerge.using.html#svn.branchmerge.using.create) и не зависят от формального объёма копируемой части дерева. 
[ветки в Subversion дёшевы](http://svnbook.red-bean.com/en/1.2/svn.branchmerge.using.html#svn.branchmerge.using.create)
и не зависят от формального объёма копируемой части дерева.

Идея состоит в том, чтобы _не_ иметь "побочных" каталогов в каталогах с
Идея состоит в том, чтобы _не_ иметь "побочных" каталогов в каталогах с плагинами. Это позволит любому пользователю выполнить 
плагинами. Это позволит любому пользователю выполнить

    svn co https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins .

и получить себе полный набор "готовых к употреблению" плагинов.
и получить себе полный набор "готовых к употреблению" плагинов. 

## <a id="Как_получить_доступ_к_репозиторию"></a>Как получить доступ к репозиторию
# <a id="Как_получить_доступ_к_репозиторию"></a>Как получить доступ к репозиторию

1. Заиметь некий готовый код или хотя бы внятную идею, которые можно будет
1.  Заиметь некий готовый код или хотя бы внятную идею, которые можно будет предъявить в качестве доказательства стремления быть допущеным к репозиторию; 
   предъявить в качестве доказательства стремления быть допущеным к репозиторию;
1. Связаться с [**Kostix**](Участник_Kostix.md);
1. Выбрать себе имя пользователя и пароль. Пароль можно сообщить "открытым
1.  Связаться с [Kostix](Участник_Kostix.md); 
1.  Выбрать себе имя пользователя и пароль. Пароль можно сообщить "открытым текстом" (как есть) или сгенерировать на нём "хэш для htpasswd". Сие делается либо при помощи программы **htpasswd** из комплекта Web-сервера [Apache](http://www.apache.org) путём запуска её в виде 
   текстом" (как есть) или сгенерировать на нём "хэш для htpasswd". Сие делается
   либо при помощи программы **htpasswd** из комплекта Web-сервера
   [Apache](http://www.apache.org) путём запуска её в виде

        htpasswd -n USERNAME
    htpasswd -n USERNAME

    или при помощи
    [этой Web-формы](http://tkabber.jabber.ru/files/tkabber-contribs/htpasswd.php);
1. Подождать, пока вас не допустят к телу репозитория, о чём
 или при помощи [этой Web-формы](http://tkabber.jabber.ru/files/tkabber-contribs/htpasswd.php); 
1.  Подождать, пока вас не допустят к телу репозитория, о чём [Kostix](Участник_Kostix.md) вам сообщит; 
[**Kostix**](Участник_Kostix.md) вам сообщит;
1. Сделать, к примеру,
1.  Сделать, к примеру, 
   
        svn --username myusername mkdir https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/myplugin
    svn --username myusername mkdir https://svn.xmpp.ru/repos/tkabber-3rd-party/trunk/plugins/myplugin

    и убедиться в том, что репозиторий позволил вам сделать изменение в нём, то
 и убедиться в том, что репозиторий позволил вам сделать изменение в нём, то есть аккаунт создан правильно. 
    есть аккаунт создан правильно.

## <a id="В_заключение"></a>В заключение
# <a id="В_заключение"></a>В заключение

Вышенаписанное руководство никоим образом не претендует на полноту изложения и,
Вышенаписанное руководство никоим образом не претендует на полноту изложения и, скорее всего, упускает массу нюансов, а то и важных моментов. Впрочем, цель его не в том, чтобы на примере первого-в-жизни-плагина научить вас программировать, а в том, чтобы как раз на его примере показать, что написание своего плагина по плечу даже новичку. 
скорее всего, упускает массу нюансов, а то и важных моментов. Впрочем, цель его
не в том, чтобы на примере первого-в-жизни-плагина научить вас программировать,
а в том, чтобы как раз на его примере показать, что написание своего плагина по
плечу даже новичку.

Удачи вам! И ничего не бойтесь :)
Удачи вам! И ничего не бойтесь :) 


Changes to wiki/ru/Служебная/Все_страницы.md.

1
2
3
4
5
6
7
8
9

10
11
12
13

14
15

16
17
18
19
20

21
22
23
24
25

26
27
28
29


30
31

32
33

34

35
36


37
38
39
40
41
42

43
44
45
46
47
48
49



50
51
52
53
54
55
56





57
58
59
60
61
62



63
64
65
66
67
68





69
70
71
72

73
74
75


76
77
78
79
80
81


82
83

84
85
86
87

88
89
90
91
92

93
94
95
96


97
98
99


100
101
102


103
104
105
106
107


108
1
2
3
4
5
6
7
8

9
10
11
12

13
14

15
16
17

18
19
20
21
22
23
24

25
26
27


28
29
30

31
32

33
34
35


36
37
38
39
40
41
42

43
44
45
46
47



48
49
50
51
52





53
54
55
56
57
58
59
60



61
62
63
64





65
66
67
68
69
70
71
72

73
74


75
76
77
78
79
80


81
82
83

84
85
86
87

88
89

90
91

92
93
94


95
96
97


98
99
100


101
102
103
104
105


106
107
108








-
+



-
+

-
+


-


+




-
+


-
-
+
+

-
+

-
+

+
-
-
+
+





-
+




-
-
-
+
+
+


-
-
-
-
-
+
+
+
+
+



-
-
-
+
+
+

-
-
-
-
-
+
+
+
+
+



-
+

-
-
+
+




-
-
+
+

-
+



-
+

-


-
+


-
-
+
+

-
-
+
+

-
-
+
+



-
-
+
+

# Служебная/Все страницы

Материал из Tkabber Wiki

## Все страницы

* [$::configdir](../$__configdir.md) (11 ссылок)
* [0.10.x/Шрифты](../0.10.x/Шрифты.md) (3 ссылки)
* [0.9.x/ЧаВо](../0.9.x/ЧаВо.md) (4 ссылки)
* [0.9.x/ЧаВо](../0.9.x/ЧаВо.md) (5 ссылок)
* [0.9.x/Эмоциконки](../0.9.x/Эмоциконки.md) (4 ссылки)
* [Config.tcl](../Config.tcl.md) (17 ссылок)
* [Config.tcl для начинающих](../Config.tcl_для_начинающих.md) (14 ссылок)
* [Config dir](../Config_dir.md) (8 ссылок)
* [Config dir](../Config_dir.md) (9 ссылок)
* [Google Talk](../Google_Talk.md) (5 ссылок)
* [Low traffic HOWTO](../Low_traffic_HOWTO.md) (12 ссылок, 1 со страниц на других языках)
* [Low traffic HOWTO](../Low_traffic_HOWTO.md) (14 ссылок)
* [MUC Ignore](../MUC_Ignore.md) (7 ссылок)
* [Nick coloring](../Nick_coloring.md) (5 ссылок)
* [Pages](../Pages.md) (2 ссылки)
* [Plugins/Alarm/Changelog](../Plugins/Alarm/Changelog.md) (2 ссылки)
* [Plugins/Traffic/Changelog](../Plugins/Traffic/Changelog.md) (2 ссылки)
* [Redirects](../Redirects.md) (2 ссылки)
* [SVN disclaimer](../SVN_disclaimer.md) (7 ссылок)
* [Sandbox](../Sandbox.md) (4 ссылки)
* [Symlinks](../Symlinks.md) (4 ссылки)
* [Testimonials, Antimonials, And Eternal Questions](../Testimonials__Antimonials__And_Eternal_Questions.md) (2 ссылки)
* [Tk Windows keysyms bug explained](../Tk_Windows_keysyms_bug_explained.md) (2 ссылки)
* [Tk Windows keysyms bug explained](../Tk_Windows_keysyms_bug_explained.md) (3 ссылки)
* [Tkabber](../Tkabber.md) (4 ссылки)
* [Tkabber Wiki:Справка](../Tkabber_Wiki_Справка.md) (5 ссылок)
* [Tkabber Windows Mini HOWTO](../Tkabber_Windows_Mini_HOWTO.md) (6 ссылок, 1 со страниц на других языках)
* [Tkabber starpack](../Tkabber_starpack.md) (8 ссылок)
* [Tkabber Windows Mini HOWTO](../Tkabber_Windows_Mini_HOWTO.md) (5 ссылок)
* [Tkabber starpack](../Tkabber_starpack.md) (9 ссылок)
* [Tkinactive](../Tkinactive.md) (2 ссылки)
* [Wish и русская раскладка в Windows](../Wish_и_русская_раскладка_в_Windows.md) (6 ссылок)
* [Wish и русская раскладка в Windows](../Wish_и_русская_раскладка_в_Windows.md) (7 ссылок)
* [XRDB](../XRDB.md) (22 ссылки)
* [База данных опций Tk](../База_данных_опций_Tk.md) (19 ссылок)
* [База данных опций Tk](../База_данных_опций_Tk.md) (22 ссылки)
* [Блокировка MRIM-спама](../Блокировка_MRIM-спама.md) (7 ссылок)
* [Быстрая настройка шрифтов](../Быстрая_настройка_шрифтов.md) (2 ссылки)
* [Гейты во вражеские сети](../Гейты_во_вражеские_сети.md) (4 ссылки)
* [Дистрибутивы, которые мы выбираем](../Дистрибутивы__которые_мы_выбираем.md) (15 ссылок, 1 со страниц на других языках)
* [Гейты во вражеские сети](../Гейты_во_вражеские_сети.md) (5 ссылок)
* [Дистрибутивы, которые мы выбираем](../Дистрибутивы__которые_мы_выбираем.md) (17 ссылок)
* [Заглавная страница](../Заглавная_страница.md) (4 ссылки, 1 со страниц на других языках)
* [Загрузка настроек](../Загрузка_настроек.md) (8 ссылок)
* [Звуковые схемы](../Звуковые_схемы.md) (5 ссылок)
* [История вики](../История_вики.md) (3 ссылки, 1 со страниц на других языках)
* [История разговоров](../История_разговоров.md) (2 ссылки)
* [Команды](../Команды.md) (1 ссылка)
* [Команды](../Команды.md) (24 ссылки)
* [Культ личности Ткаббера](../Культ_личности_Ткаббера.md) (3 ссылки)
* [Между офлайном и онлайном](../Между_офлайном_и_онлайном.md) (11 ссылок)
* [Настроения](../Настроения.md) (1 ссылка)
* [Настройка Ткаббера: азы и глубже](../Настройка_Ткаббера__азы_и_глубже.md) (11 ссылок)
* [Настройки](../Настройки.md) (3 ссылки)
* [Начинающим](../Начинающим.md) (13 ссылок, 1 со страниц на других языках)
* [Нетривиальные настройки](../Нетривиальные_настройки.md) (28 ссылок, 1 со страниц на других языках)
* [Настройки](../Настройки.md) (7 ссылок)
* [Начинающим](../Начинающим.md) (12 ссылок)
* [Нетривиальные настройки](../Нетривиальные_настройки.md) (29 ссылок)
* [Новый вид Tk в 8.5](../Новый_вид_Tk_в_8.5.md) (4 ссылки)
* [Особенности реализации](../Особенности_реализации.md) (6 ссылок)
* [Остров посланных на...](../Остров_посланных_на....md) (5 ссылок)
* [Палитра цветов](../Палитра_цветов.md) (3 ссылки)
* [Патчи](../Патчи.md) (21 ссылка, 2 со страниц на других языках)
* [Пересылка файлов: теория](../Пересылка_файлов__теория.md) (10 ссылок, 2 со страниц на других языках)
* [Плагины](../Плагины.md) (57 ссылок, 3 со страниц на других языках)
* [Остров посланных на...](../Остров_посланных_на....md) (4 ссылки)
* [Палитра цветов](../Палитра_цветов.md) (4 ссылки)
* [Патчи](../Патчи.md) (20 ссылок, 1 со страниц на других языках)
* [Пересылка файлов: теория](../Пересылка_файлов__теория.md) (9 ссылок)
* [Плагины](../Плагины.md) (56 ссылок)
* [Плагины/AntiSPIM](../Плагины/AntiSPIM.md) (4 ссылки)
* [Плагины/Juick](../Плагины/Juick.md) (4 ссылки)
* [Планы на будущее](../Планы_на_будущее.md) (10 ссылок, 1 со страниц на других языках)
* [Практика](../Практика.md) (4 ссылки)
* [Проблемы X Window и TTF](../Проблемы_X_Window_и_TTF.md) (4 ссылки, 1 со страниц на других языках)
* [Проблемы со звуком](../Проблемы_со_звуком.md) (12 ссылок, 2 со страниц на других языках)
* [Практика](../Практика.md) (6 ссылок)
* [Проблемы X Window и TTF](../Проблемы_X_Window_и_TTF.md) (3 ссылки)
* [Проблемы со звуком](../Проблемы_со_звуком.md) (10 ссылок)
* [Проверка сертификата сервера](../Проверка_сертификата_сервера.md) (5 ссылок)
* [Разработка](../Разработка.md) (4 ссылки)
* [Разработка плагинов](../Разработка_плагинов.md) (3 ссылки)
* [Служебная/Все страницы](../Служебная/Все_страницы.md) (2 ссылки)
* [Служебная/Отсутствующие ссылки](../Служебная/Отсутствующие_ссылки.md) (1 ссылка)
* [Смайлики и аватары](../Смайлики_и_аватары.md) (13 ссылок, 1 со страниц на других языках)
* [Разработка](../Разработка.md) (6 ссылок)
* [Разработка плагинов](../Разработка_плагинов.md) (4 ссылки)
* [Служебная/Все страницы](../Служебная/Все_страницы.md) (1 ссылка)
* [Служебная/Отсутствующие ссылки](../Служебная/Отсутствующие_ссылки.md) (**0** ссылок)
* [Смайлики и аватары](../Смайлики_и_аватары.md) (12 ссылок)
* [Спамодавка списками приватности](../Спамодавка_списками_приватности.md) (5 ссылок)
* [Сравнение XMPP-клиентов](../Сравнение_XMPP-клиентов.md) (2 ссылки)
* [Ссылки](../Ссылки.md) (6 ссылок)
* [Старпак и сжатие](../Старпак_и_сжатие.md) (4 ссылки)
* [Старпак и сжатие](../Старпак_и_сжатие.md) (3 ссылки)
* [ТЗ по управлению через параметры командной строки](../ТЗ_по_управлению_через_параметры_командной_строки.md) (5 ссылок)
* [Теория](../Теория.md) (7 ссылок)
* [Терминология](../Терминология.md) (16 ссылок)
* [Теория](../Теория.md) (11 ссылок)
* [Терминология](../Терминология.md) (17 ссылок)
* [Тестирование TLS](../Тестирование_TLS.md) (1 ссылка)
* [Ткаббер - чемпион?](../Ткаббер_-_чемпион_.md) (6 ссылок)
* [Ткаббер ЧаВо](../Ткаббер_ЧаВо.md) (35 ссылок)
* [Ткаббер ЧаВо/Внешний вид и звук](../Ткаббер_ЧаВо/Внешний_вид_и_звук.md) (16 ссылок)
* [Ткаббер ЧаВо/Глюки](../Ткаббер_ЧаВо/Глюки.md) (44 ссылки)
* [Ткаббер ЧаВо/Как мне...?](../Ткаббер_ЧаВо/Как_мне..._.md) (46 ссылок)
* [Ткаббер ЧаВо/Глюки](../Ткаббер_ЧаВо/Глюки.md) (45 ссылок)
* [Ткаббер ЧаВо/Как мне...?](../Ткаббер_ЧаВо/Как_мне..._.md) (48 ссылок)
* [Ткаббер ЧаВо/Разное](../Ткаббер_ЧаВо/Разное.md) (25 ссылок)
* [Ткаббер и DNS](../Ткаббер_и_DNS.md) (5 ссылок)
* [Ткаббер и DNS](../Ткаббер_и_DNS.md) (6 ссылок)
* [Ткаббер на КПК](../Ткаббер_на_КПК.md) (4 ссылки)
* [Ткаббер наизнанку](../Ткаббер_наизнанку.md) (4 ссылки)
* [Токены](../Токены.md) (3 ссылки)
* [Удалённое управление с помощью send](../Удалённое_управление_с_помощью_send.md) (10 ссылок, 2 со страниц на других языках)
* [Удалённое управление с помощью send](../Удалённое_управление_с_помощью_send.md) (8 ссылок)
* [Установка tklib в *nix](../Установка_tklib_в__nix.md) (2 ссылки)
* [Установка и настройка в Ubuntu](../Установка_и_настройка_в_Ubuntu.md) (2 ссылки)
* [Участник:ART](../Участник_ART.md) (8 ссылок)
* [Участник:Archimed](../Участник_Archimed.md) (12 ссылок)
* [Участник:Bigote](../Участник_Bigote.md) (37 ссылок, 3 со страниц на других языках)
* [Участник:Bigote](../Участник_Bigote.md) (35 ссылок)
* [Участник:Brennende](../Участник_Brennende.md) (4 ссылки)
* [Участник:EXire](../Участник_EXire.md) (19 ссылок)
* [Участник:Feez](../Участник_Feez.md) (13 ссылок, 2 со страниц на других языках)
* [Участник:Gebb](../Участник_Gebb.md) (8 ссылок)
* [Участник:Feez](../Участник_Feez.md) (11 ссылок)
* [Участник:Gebb](../Участник_Gebb.md) (10 ссылок)
* [Участник:Gman](../Участник_Gman.md) (2 ссылки)
* [Участник:Kostix](../Участник_Kostix.md) (97 ссылок, 7 со страниц на других языках)
* [Участник:Lknight](../Участник_Lknight.md) (18 ссылок, 5 со страниц на других языках)
* [Участник:Kostix](../Участник_Kostix.md) (97 ссылок, 3 со страниц на других языках)
* [Участник:Lknight](../Участник_Lknight.md) (13 ссылок)
* [Участник:Mellon](../Участник_Mellon.md) (3 ссылки)
* [Участник:Teo](../Участник_Teo.md) (23 ссылки)
* [Файл конфигурации](../Файл_конфигурации.md) (9 ссылок, 1 со страниц на других языках)
* [Участник:Teo](../Участник_Teo.md) (22 ссылки)
* [Файл конфигурации](../Файл_конфигурации.md) (8 ссылок)
* [Формат логов 0.10.0](../Формат_логов_0.10.0.md) (1 ссылка)
* [Цветовые темы и пиктограммы](../Цветовые_темы_и_пиктограммы.md) (8 ссылок)
* [Чебуратор](../Чебуратор.md) (4 ссылки)
* [Шифрование в Ткаббере](../Шифрование_в_Ткаббере.md) (10 ссылок, 1 со страниц на других языках)
* [Шрифты](../Шрифты.md) (11 ссылок)
* [Шифрование в Ткаббере](../Шифрование_в_Ткаббере.md) (9 ссылок)
* [Шрифты](../Шрифты.md) (20 ссылок)

Changes to wiki/ru/Служебная/Отсутствующие_ссылки.md.

1
2
3
4
5
6
7
8
9





10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29




30
31
32
33































34
35




36
37
38
39
40
41
42
43
44
45
46
47


48

49
50
51
52





53
54
55
56
57
58








59
60
61

62
63
64




65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81

82




83
84
85
86
87
88
89
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156









+
+
+
+
+




















+
+
+
+




+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


+
+
+
+












+
+

+




+
+
+
+
+






+
+
+
+
+
+
+
+



+
-
-
-
+
+
+
+

















+

+
+
+
+







# Служебная/Отсутствующие ссылки

Материал из Tkabber Wiki

## Отсутствующие ссылки

#### [0.10.x/Шрифты](../0.10.x/Шрифты.md)

* ../../images/Warning.gif
* ../Шрифты.md\#Быстрое\_тестирование\_настроек

#### [0.9.x/ЧаВо](../0.9.x/ЧаВо.md)

* ../Low\_traffic\_HOWTO.md\#Старпак\_Ткаббера\_Win32

#### [0.9.x/Эмоциконки](../0.9.x/Эмоциконки.md)

* ../../images/36\_10\_20.gif

#### [Config dir](../Config_dir.md)

* Участник\_Juriks.md

#### [Google Talk](../Google_Talk.md)

* ../images/180px-Tkabber-GTalk-creds.png
* ../images/180px-Tkabber-Login-SSL.png
* ../images/Tkabber-gmail-proxy-SSL.png
* ../images/Tkabber-gmail-proxy-auth.png
* ../images/Tkabber-gmail-proxy-conn.png
* ../images/Tkabber-gmail-proxy-creds.png
* ../images/Tkabber-gmail-proxy-http-polling.png
* ../images/Tkabber-gmail-proxy-proxy.png

#### [Low traffic HOWTO](../Low_traffic_HOWTO.md)

* Проблемы\_со\_звуком.md\#\_В\_старпаке\_старките\_нет\_звука

#### [Nick coloring](../Nick_coloring.md)

* Участник\_Hypersw.md

#### [Redirects](../Redirects.md)

* Beginners.md
* Color-pics.md
* Dist.md
* Emoticons.md
* Faq-appearance-sound.md
* Faq-glitches.md
* Faq-howto.md
* Faq-misc.md
* Faq.md
* Filetransfer.md
* Fonts.md
* Gates.md
* Gtalk.md
* Login.md
* Mrim-spam.md
* Pages.md
* Patches.md
* Plugins.md
* Remote-control.md
* Sound-themes.md
* Sound.md
* Todo.md
* Topic.md
* Traffic.md
* Tuning.md
* Tweaks.md
* Win-howto.md
* X-ttf.md

#### [Sandbox](../Sandbox.md)

* mailto:liam@htmlhelp.com
* mailto:some.user@nowhere.land
* mailto:vasya@gde.to
* news:dejagnu.com
* Шаблон\_Button.md
* Шаблон\_File.md
* Шаблон\_Fixme.md
* Шаблон\_Program.md
* Шаблон\_Quote.md
* Шаблон\_Todo.md
* Шаблон\_Todo2.md
* Шаблон\_Warn.md

#### [Tkabber Wiki:Справка](../Tkabber_Wiki_Справка.md)

* MediaWiki\_Monobook.css.md
* http://tkabber.jabe.ru
* Служебная\_AllPages.md
* Служебная\_RecentChanges.md
* Терминология.md\#транк

#### [Tkabber starpack](../Tkabber_starpack.md)

* ../files/Tkabber\_win32\_starpack\_template.rar
* Tkabber\_starpack.md\#Как\_скачать\_последнюю\_SVN-версию\_Tkabber

#### [Wish и русская раскладка в Windows](../Wish_и_русская_раскладка_в_Windows.md)

* Плагины.md\#Postpone\_text

#### [Блокировка MRIM-спама](../Блокировка_MRIM-спама.md)

* ../images/Mrim-allow-only-contacts.png
* ../images/Mrim-lists.png
* ../images/Mrim-opts.png

#### [Быстрая настройка шрифтов](../Быстрая_настройка_шрифтов.md)

* Установка\_и\_настройка\_в\_Ubuntu.md

#### [Дистрибутивы, которые мы выбираем](../Дистрибутивы__которые_мы_выбираем.md)

* Low\_traffic\_HOWTO.md\#Старпак\_Ткаббера\_Win32

#### [Заглавная страница](../Заглавная_страница.md)

* Pages.md
* Служебная/Статистика.md
* Служебная/Требуется.md
* Служебная/Участники.md
* Служебная\_AllPages.md
* Служебная\_ListUsers.md
* Служебная\_Statistics.md
* Служебная\_WantedPages.md

#### [Звуковые схемы](../Звуковые_схемы.md)

* ../files/3rd-version\_final.zip
* ../files/Acoustic.theme\_2nd.version.zip
* ../files/New\_default\_theme\_11k-22k\_stereo.zip
* ../files/New\_default\_theme\_44100.zip
* ../files/New\_default\_tkabber\_sound\_theme.zip
* ../images/180px-Acoustic\_sound\_scheme\_instruments.jpg

#### [Культ личности Ткаббера](../Культ_личности_Ткаббера.md)

* ../images/0day-tkabber.png
* ../images/180px-Sneg\_01.jpg
* ../images/180px-Tkabber-master.jpg
* ../images/180px-Tkabber\_jingle.jpg
* ../images/Psycho.jpg
* Topic.md
* Участник\_Hypersw.md

#### [Настройки](../Настройки.md)

* Плагины.md\#customstatus

#### [Начинающим](../Начинающим.md)

* ../images/116px-Discovery\_conference\_1\_ru.png
* ../images/120px-Discovery\_conference\_2\_ru.png
* ../images/120px-Discovery\_ru.png
* ../images/Adding\_user\_2roster\_1\_ru.png
105
106
107
108
109
110
111








112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129

130
131
132

133
134
135
136
137
138
139
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203

204
205
206
207
208
209
210
211
212
213
214
215







+
+
+
+
+
+
+
+

















-
+



+







* ../images/Tkabber-Login-06-Proxy-Server.png
* ../images/Tkabber-New-Account-Creation-Query.png
* ../images/Tkabber-Quick-Help.png
* ../images/Tkabber-Roster-Tooltip-Subscribed-To.png
* ../images/Tkabber-Stoat-headlines-Search.png
* ../images/Tkabber-Stoat-headlines-summary.png
* ../images/Tkabber-Toolbar.png
* Установка\_и\_настройка\_в\_Ubuntu.md

#### [Нетривиальные настройки](../Нетривиальные_настройки.md)

* Патчи.md\#\_Отправка\_сообщений\_по\_нажатию\_Ctrl-Enter
* Плагины.md\#autoanswer
* Плагины.md\#customstatus
* Плагины.md\#unixkeys

#### [Остров посланных на...](../Остров_посланных_на....md)

* ../images/180px-2faq.gif

#### [Палитра цветов](../Палитра_цветов.md)

* Цветовые\_темы\_и\_пиктограммы.md\#Цветовые\_темы

#### [Патчи](../Патчи.md)

* ../files/Aniavatars.zip
* ../files/Chatstatectl.zip
* ../files/Highlight.zip
* ../files/Iroster.zip
* ../files/Muc\_exception\_groups4gen\_enter\_exit\_msgs.zip
* ../files/Sound\_patches.tar.gz
* ../files/Spy-rev.1925.zip
* ../files/Spy(rev.1925
* ../files/Spy.zip
* ../files/Systray.zip
* ../files/Tkabber-MRIM.zip
* Планы\_на\_будущее.md\#Контакты\_онлайн\_-\_отображать\_вверху\_списка
* Участник\_Ancestor.md
* Участник\_Den\_po.md
* Участник\_Jet.md
* Участник\_Nicktian.md

#### [Плагины](../Плагины.md)

166
167
168
169
170
171
172

173
174
175
176
177
178
179
180
181
182
183
184
185
186
187


188
189
190
191
192
193
194
195




196
197
198
199
200
201
202
203
204

205
206
207
208
209
210
211
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295







+















+
+








+
+
+
+









+







* ../files/Server\_info.tar.gz
* ../files/Stripes.zip
* ../files/Tab\_number-0.1.2.tar.gz
* ../files/Tkabber-khim.zip
* ../files/Vcardavatars.zip
* ../files/Wintweaks.zip
* ../images/1112349.png
* Плагины/Notes.md
* Участник\_Alfix.md
* Участник\_Ancestor.md
* Участник\_HEKP0MAHT.md
* Участник\_Jet.md
* Участник\_Kellin.md
* Участник\_Sceptik.md
* Участник\_Totktonada.md
* Участник\_Yegor.md

#### [Плагины/Juick](../Плагины/Juick.md)

* ../Участник\_Totktonada.md

#### [Планы на будущее](../Планы_на_будущее.md)

* mailto:timur.davletshin@gmail.com
* Плагины.md\#customstatus
* Участник\_Fixer.md
* Участник\_Jet.md
* Участник\_Zakon.md

#### [Проблемы со звуком](../Проблемы_со_звуком.md)

* ../files/Snack-lin.kit
* ../files/Snack.kit

#### [Разработка плагинов](../Разработка_плагинов.md)

* Плагины.md\#urlcmd

#### [Смайлики и аватары](../Смайлики_и_аватары.md)

* ../files/Emoticons-bombusmod.zip
* ../files/Emoticons-tz.zip
* ../files/Tkabber\_smiles.zip
* ../files/Ultimate\_emoticon\_pack.zip
* ../files/Ultimate\_emoticons\_pack.zip
* ../images/180px-Teh\_ultimate\_smile.png
* Патчи.md\#Расширенная\_поддержка\_аватаров\_в\_окне\_чата
* Участник\_Русский.md

#### [ТЗ по управлению через параметры командной строки](../ТЗ_по_управлению_через_параметры_командной_строки.md)

* xmpp

#### [Теория](../Теория.md)
249
250
251
252
253
254
255




256
257
258
259
260
261
262
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350







+
+
+
+







* ../files/Status\_tokens.diff

#### [Участник:Feez](../Участник_Feez.md)

* Служебная\_ListUsers.md
* Служебная\_Statistics.md
* Служебная\_WantedPages.md

#### [Участник:Gebb](../Участник_Gebb.md)

* mailto:ge\_b\_b@ngs.ru?subject=wiki

#### [Участник:Kostix](../Участник_Kostix.md)

* Служебная\_Contributions/Kostix.md

#### [Участник:Mellon](../Участник_Mellon.md)

Changes to wiki/ru/Смайлики_и_аватары.md.

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22












23
24
25
26



27
28
29
30

31
32
33
34
35
36


37
38

39
40

41
42
43


44
45

46
47
48

49
50
51
52
53
54

55
56
57

58
59
60

61
62

63
64
65
66
67

68
69
70
71
72

73
74
75
76
77

78
79
80

81
82
83


84
85
86

87
88

89
90
91


92
93
94

95
96
97
98
99
100

101
102
103
104

105
106
107
108
109
110

111
112
113
114
115

116
117

118
119
120

121
122

123
124
125

126
127
128
129
130
131
132

133
134
135


136
137
138
139
140
141
142

143
144

145
146

147
148

149
150

151
152

153
154

155
156

157
158
159
160
161

162
163
164

165
166
167
168

169
170
171

172
173
174
175
176

177
178

179
180
181

182
183
184
185
186

187
188

189
190
191

192
193
194
195

196
197
198
199
200

201
202


203
204
205

206
207
208
209

210
211
212
213
214
215

216
217
218

219
220
221
222
223
224
225
226
227
228
229






230
231
232

233
234

235
236
237
238
239

240
241
242
243

244
245
246
247
248

249
250
251

252
253
254

255
256
257
258

259
260
261
262
263
264
265
266
267
268
269

270
271
272
273
274
275
276
277

278
279
280

281
282

283
284
285

286
287
288
289
290
291

292
293
294
295
296

297
298
299
300

301
302
303

304
305
306
307
308
309

310
311
312
313
314

315
316
317
318
319
320

321
322

323
324
325

326
327

328
329
330
331
332
333



1
2
3
4
5
6
7
8
9
10
11












12
13
14
15
16
17
18
19
20
21
22
23
24



25
26
27
28
29


30

31
32
33


34
35
36

37
38

39
40


41
42
43

44
45


46

47
48
49


50

51

52

53

54


55





56

57
58
59

60



61

62

63

64
65


66
67

68

69
70

71



72
73

74

75



76
77

78
79
80


81




82

83



84

85
86

87



88


89



90







91



92
93

94
95
96
97
98

99
100

101
102

103
104

105
106

107
108

109
110

111
112

113



114

115

116

117
118
119
120

121

122

123
124
125
126


127
128

129

130

131
132
133
134


135
136

137

138

139


140

141
142
143
144
145
146
147


148
149
150


151
152
153
154

155


156
157
158

159

160

161



162
163






164
165
166
167
168
169
170
171

172
173

174



175

176


177

178

179
180
181

182

183

184

185

186
187
188
189

190









191

192



193
194
195
196

197
198
199

200
201

202
203
204

205




206

207



208

209

210
211

212
213
214

215




216

217
218
219
220
221

222


223
224
225

226
227

228
229


230


231


232
233
234

235
236
237

+









-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
+
+
+


-
-
+
-



-
-
+
+

-
+

-
+

-
-
+
+

-
+

-
-
+
-



-
-
+
-

-
+
-

-
+
-
-
+
-
-
-
-
-
+
-



-
+
-
-
-

-
+
-

-
+

-
-
+
+
-

-
+

-
+
-
-
-
+
+
-

-
+
-
-
-


-
+


-
-
+
-
-
-
-

-
+
-
-
-

-
+

-
+
-
-
-
+
-
-
+
-
-
-
+
-
-
-
-
-
-
-
+
-
-
-
+
+
-





-
+

-
+

-
+

-
+

-
+

-
+

-
+

-
+
-
-
-

-
+
-

-
+



-
+
-

-
+



-
-
+

-
+
-

-
+



-
-
+

-
+
-

-
+
-
-

-
+





+
-
-
+
+

-
-
+



-
+
-
-



-
+
-

-
+
-
-
-


-
-
-
-
-
-
+
+
+
+
+
+


-
+

-
+
-
-
-

-
+
-
-

-
+
-



-
+
-

-
+
-

-
+



-
+
-
-
-
-
-
-
-
-
-

-
+
-
-
-




-
+


-
+

-
+


-
+
-
-
-
-

-
+
-
-
-

-
+
-


-
+


-
+
-
-
-
-

-
+




-
+
-
-



-
+

-
+

-
-
+
-
-
+
-
-



-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Смайлики_и_аватары/index.html)


# Смайлики и аватары

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 Предупреждение](#Предупреждение)
* [2 Смайлики](#Смайлики)
   * [2.1 Работа с эмоциконками](#Работа_с_эмоциконками)
   * [2.2 Управление эмоциконками](#Управление_эмоциконками)
   * [2.3 Готовые комплекты смайликов](#Готовые_комплекты_смайликов)
      * [2.3.1 Комплекты анимированных смайликов](#Комплекты_анимированных_смайликов)
      * [2.3.2 Комплект emoticons-bombusmod](#Комплект_emoticons-bombusmod)
      * [2.3.3 Исправленный набор смайликов "от пуза"](#Исправленный_набор_смайликов_от_пуза)
      * [2.3.4 Комплект в стиле "колобки": Big Pack](#Комплект_в_стиле_колобки_Big_Pack)
      * [2.3.5 Комплект окончательный](#Комплект_окончательный)
   * [2.4 Полное искоренение смайликов](#Полное_искоренение_смайликов)
   * [2.5 Клонирование смайликов](#Клонирование_смайликов)
      * [2.5.1 Массовое клонирование](#Массовое_клонирование)
   * [2.6 Анимированные смайлы](#Анимированные_смайлы)
 * [2.1 Работа с эмоциконками](#Работа_с_эмоциконками)
 * [2.2 Управление эмоциконками](#Управление_эмоциконками)
 * [2.3 Готовые комплекты смайликов](#Готовые_комплекты_смайликов)
  * [2.3.1 Комплекты анимированных смайликов](#Комплекты_анимированных_смайликов)
  * [2.3.2 Комплект emoticons-bombusmod](#Комплект_emoticons-bombusmod)
  * [2.3.3 Исправленный набор смайликов "от пуза"](#Исправленный_набор_смайликов_от_пуза)
  * [2.3.4 Комплект в стиле "колобки": Big Pack](#Комплект_в_стиле_колобки_Big_Pack)
  * [2.3.5 Комплект окончательный](#Комплект_окончательный)
 * [2.4 Полное искоренение смайликов](#Полное_искоренение_смайликов)
 * [2.5 Клонирование смайликов](#Клонирование_смайликов)
  * [2.5.1 Массовое клонирование](#Массовое_клонирование)
 * [2.6 Анимированные смайлы](#Анимированные_смайлы)
* [3 Аватары](#Аватары)
   * [3.1 Подключение своей аватары](#Подключение_своей_аватары)
   * [3.2 Просмотр аватары собеседника](#Просмотр_аватары_собеседника)
   * [3.3 Ссылки](#Ссылки)
 * [3.1 Подключение своей аватары](#Подключение_своей_аватары)
 * [3.2 Просмотр аватары собеседника](#Просмотр_аватары_собеседника)
 * [3.3 Ссылки](#Ссылки)

# <a id="Предупреждение"></a>Предупреждение

> Информация в этом разделе написана, исходя из возможностей Ткаббера 0.10.0 и
 Информация в этом разделе написана, исходя из возможностей Ткаббера 0.10.0 и выше; если у вас более старая версия, — вам [сюда](0.9.x/Эмоциконки.md). 
  выше; если у вас более старая версия, — вам [сюда](0.9.x/Эмоциконки.md).

# <a id="Смайлики"></a>Смайлики

> *40iN\_KoS Нет в русском языке слов,  
> которые могут передать мое настроение..*
40iN\_KoS Нет в русском языке слов,
 которые могут передать мое настроение.. 

> *40iN\_KoS но есть идеаматика..*
40iN\_KoS но есть идеаматика.. 

> *40iN\_KoS* _\*CRAZY\*_
40iN\_KoS \*CRAZY\* 

> *AmeNO нет у меня в клиенте смайлов,  
> которые могут передать твое настроение..*
AmeNO нет у меня в клиенте смайлов,
 которые могут передать твое настроение.. 

> _[Цитата с башорга.](http://bash.org.ru/quote.php?num=93914)_
[Цитата с башорга.](http://bash.org.ru/quote.php?num=93914) 

> "Официальное" название этих "улыбаек" в XMPP — "эмоциконки" (от EMOTion
  ICONs), посему везде, где используется термин "эмоциконка", можно читать
 "Официальное" название этих "улыбаек" в XMPP — "эмоциконки" (от EMOTion ICONs), посему везде, где используется термин "эмоциконка", можно читать "смайлик"; обратное также верно. 
  "смайлик"; обратное также верно.

## <a id="Работа_с_эмоциконками"></a>Работа с эмоциконками

Комбинация `<Alt-E>` в окне ввода чата открывает менюшку, в которой можно
выбрать любой смайлик из подключённой схемы. Об этом и о многом другом, кстати,
Комбинация Alt-E в окне ввода чата открывает менюшку, в которой можно выбрать любой смайлик из подключённой схемы. Об этом и о многом другом, кстати, рассказано в пункте меню **Помощь → Краткая справка.** 
рассказано в пункте меню **Помощь → Краткая справка.**

Примечание: На самом деле есть по меньшей мере три аргумента против такого
Примечание: На самом деле есть по меньшей мере три аргумента против такого подхода: 
подхода:

* "руками" смайлики набирать ощутимо быстрее, стоит только немного
*  "руками" смайлики набирать ощутимо быстрее, стоит только немного потренироваться; 
  потренироваться;
* имейте в виду, что "стандартных" (то есть всем понятных) смайликов не так уж
*  имейте в виду, что "стандартных" (то есть всем понятных) смайликов не так уж и много (не более четырёх), а схемы у всех стоят разные, с разным количеством смайликов, поэтому зачастую ваш распрекрасный смайлик будет увиден читающим в виде чего-нибудь наподобие **:BEER:**, **\*THUMBS UP\*** или **(Y)** — неужели это действительно то, что вы хотели? ;-) 
  и много (не более четырёх), а схемы у всех стоят разные, с разным
  количеством смайликов, поэтому зачастую ваш распрекрасный смайлик будет
  увиден читающим в виде чего-нибудь наподобие **:BEER:**, __\*THUMBS UP\*__
  или **(Y)** — неужели это действительно то, что вы хотели? ;-)
* многие вообще отключают смайлики; поразмыслите над этим, имея в виду
*  многие вообще отключают смайлики; поразмыслите над этим, имея в виду предыдущий пункт. 
  предыдущий пункт.

## <a id="Управление_эмоциконками"></a>Управление эмоциконками

Наборы эмоциконок можно менять на лету при помощи графического интерфейса
Наборы эмоциконок можно менять на лету при помощи графического интерфейса настроек — так же как это делается для наборов иконок интерфейса (pixmaps themes): настройка находится в группе **Chat → Emoticons** и называется **::plugins::emoticons::options(theme)**. 
настроек — так же как это делается для наборов иконок интерфейса (pixmaps
themes): настройка находится в группе **Chat → Emoticons** и называется
**::plugins::emoticons::options(theme)**.

Всегда присутствует одна специальная тема с названием "Нет" ("None") — её выбор
Всегда присутствует одна специальная тема с названием "Нет" ("None") — её выбор (с сохранением) отключает показ смайликов. 
(с сохранением) отключает показ смайликов.

Ткаббер _при запуске_ ищет наборы иконок в двух местах:
Ткаббер _при запуске_ ищет наборы иконок в двух местах: 

1. Каталоге `emoticons`, находящемся в каталоге с кодом Ткаббера;
1. Каталоге `emoticons`, находящемся в
1.  Каталоге `emoticons`, находящемся в каталоге с кодом Ткаббера; 
1.  Каталоге `emoticons`, находящемся в [каталоге настроек Ткаббера](Config.tcl_для_начинающих.md#Где). 
   [**каталоге настроек Ткаббера**](Config.tcl_для_начинающих.md#Где).

Поэтому для добавления своего набора эмоциконок в Ткаббер:
Поэтому для добавления своего набора эмоциконок в Ткаббер: 

* Положите каталог с этим набором в один из каталогов указанных выше
*  Положите каталог с этим набором в один из каталогов указанных выше (предпочтительнее — в пользовательский); 
  (предпочтительнее — в пользовательский);
* Перезапустите Ткаббер;
* Зайдите в настройки, выберите появившийся в выпадающем списке новый набор,
*  Перезапустите Ткаббер; 
*  Зайдите в настройки, выберите появившийся в выпадающем списке новый набор, сохраните эту настройку. 
  сохраните эту настройку.

Во-вторых, можно подключать наборы эмоциконок "по старинке": при помощи
Во-вторых, можно подключать наборы эмоциконок "по старинке": при помощи соответствующей команды в [файле конфигурации](Config.tcl_для_начинающих.md). Этот способ _не_ приветствуется, особенно — для использования новичками. Команда указывается, например, так: 
соответствующей команды в [**файле конфигурации**](Config.tcl_для_начинающих.md).
Этот способ _не_ приветствуется, особенно — для использования новичками.
Команда указывается, например, так:

    hook::add postload_hook {
        ::plugins::emoticons::load_dir "Путь_до_каталога_с_набором_иконок"
      ::plugins::emoticons::load_dir "Путь_до_каталога_с_набором_иконок"
    }

Обратите внимание, что начиная с версии 0.10.0 пространство имён
`::plugins::emoticons`, содержащее команды для работы с эмоциконками,
Обратите внимание, что начиная с версии 0.10.0 пространство имён `::plugins::emoticons`, содержащее команды для работы с эмоциконками, "потеряло" лишнюю букву "e", которую оно имело в более ранних версиях, когда называлось `::plugins::emot_e_icons`. В настоящее время Ткаббер поддерживает старое название для совместимости, но в следующем релизе этот "костылёк" будет выброшен, поэтому подумайте об этом заранее. 
"потеряло" лишнюю букву "e", которую оно имело в более ранних версиях, когда
называлось <code>::plugins::emot<em>e</em>icons</code>. В настоящее время
Ткаббер поддерживает старое название для совместимости, но в следующем
релизе этот "костылёк" будет выброшен, поэтому подумайте об этом заранее.

Имейте в виду, что если вам нужно сослаться в файле конфигурации на
Имейте в виду, что если вам нужно сослаться в файле конфигурации на [каталог настроек Ткаббера](Config.tcl_для_начинающих.md#Где), наиболее разумно использовать специальную переменную Ткаббера — `[configdir]($__configdir.md).` 
[**каталог настроек Ткаббера**](Config.tcl_для_начинающих.md#Где), наиболее
разумно использовать специальную переменную Ткаббера —
[**$::configdir**]($__configdir.md).

Заодно ответим на пару других достаточно часто возникающих вопросов:
Заодно ответим на пару других достаточно часто возникающих вопросов: 

1. Нет, Ткаббер не может увидеть новый набор без перезапуска. В качестве "хака"
1.  Нет, Ткаббер не может увидеть новый набор без перезапуска. В качестве "хака" можете попробовать выполнить в [консоли Ткаббера](Ткаббер_ЧаВо.md#Консоль_Ткаббера) команду 
   можете попробовать выполнить в [**консоли Ткаббера**](Ткаббер_ЧаВо.md#Консоль_Ткаббера) команду

        ::plugins::emoticons::enable_subsystem
    ::plugins::emoticons::enable_subsystem

    которая, помимо всего прочего, пересканирует каталоги с наборами
 которая, помимо всего прочего, пересканирует каталоги с наборами эмоциконок, но желаемое действие этой команды, естественно, не гарантируется. 
    эмоциконок, но желаемое действие этой команды, естественно, не
    гарантируется.
1. Нет, выбрать набор эмоциконок "руками" из произвольного места нельзя (так
1.  Нет, выбрать набор эмоциконок "руками" из произвольного места нельзя (так же, как и набор иконок интерфейса, к примеру). Если всё же вам это очень нужно, можете либо указать прямую команду загрузки набора эмоциконок в файле конфиурации, либо можете попробовать использовать символические ссылки, "линкуя" каталоги с наборами эмоциконок из произвольного каталога в один из известных ткабберу, например, в Unix: 
   же, как и набор иконок интерфейса, к примеру). Если всё же вам это очень нужно,
   можете либо указать прямую команду загрузки набора эмоциконок в файле
   конфиурации, либо можете попробовать использовать символические ссылки,
   "линкуя" каталоги с наборами эмоциконок из произвольного каталога в один из
   известных ткабберу, например, в Unix:

        ln -s /usr/local/share/my-smile-packs/uglyfaces ~/.tkabber/emoticons/uglyfaces
    ln -s /usr/local/share/my-smile-packs/uglyfaces ~/.tkabber/emoticons/uglyfaces

    Ситуация в Windows несколько сложнее; подробности изложены [**тут**](Symlinks.md).
1. Стабильный ткаббер 0.10.0 не умеет грузить ".jisp"-файлы напрямую. Сначала
 Ситуация в Windows несколько сложнее; подробности изложены [тут](Symlinks.md). 
1.  Стабильный ткаббер 0.10.0 не умеет грузить ".jisp"-файлы напрямую. Сначала их нужно распаковать — на самом деле это обычные zip-архивы. 
   их нужно распаковать — на самом деле это обычные zip-архивы.

## <a id="Готовые_комплекты_смайликов"></a>Готовые комплекты смайликов

### <a id="Комплекты_анимированных_смайликов"></a>Комплекты анимированных смайликов

1) [*Emoticons-tz.zip*](../files/Emoticons-tz.zip) (202 kB)
1) [Emoticons-tz.zip](../files/Emoticons-tz.zip) (202 kB) 

Исходник: игра [Timezero](http://www.timezero.ru).
Исходник: игра [Timezero](http://www.timezero.ru). 

Количество: 90.
Количество: 90. 

Автор комплекта: `xmpp:roz@jabber.ru`.
Автор комплекта: `xmpp:roz@jabber.ru`. 

2) [Big pack.zip](http://kellin.at.tut.by/jabber/tkabb_anim_icons.zip) (520 kB)
2) [Big pack.zip](http://kellin.at.tut.by/jabber/tkabb_anim_icons.zip) (520 kB) 

Количество: 132.
Количество: 132. 

Автор комплекта: `xmpp:kellin@jabber.ru`.
Автор комплекта: `xmpp:kellin@jabber.ru`. 

**Примечание:** смайлики анимированные, и ощутимо забивают процессор даже когда
 Примечание: смайлики анимированные, и ощутимо забивают процессор даже когда не используются (просто запущена программа с подключёнными смайликами). При вызове же окна по Alt-E процессор забивается на все 100%. Просьба знающим людям посмотреть, что там такое может быть. 
не используются (просто запущена программа с подключёнными смайликами). При
вызове же окна по `<Alt-E>` процессор забивается на все 100%. Просьба знающим людям
посмотреть, что там такое может быть.

При использовании патча для улучшенной поддержки GIF (см. ниже) забивание
При использовании патча для улучшенной поддержки GIF (см. ниже) забивание процессора замечено не было. 
процессора замечено не было.

[**Archimed**](Участник_Archimed.md)
[Archimed](Участник_Archimed.md) 

### <a id="Комплект_emoticons-bombusmod"></a>Комплект emoticons-bombusmod

[*Эти смайлики*](../files/Emoticons-bombusmod.zip) от бомбуса перепакованы для
[Эти смайлики](../files/Emoticons-bombusmod.zip) от бомбуса перепакованы для Ткаббера камрадом SnAkE (`xmpp:3XXL@jabber.ru`). 
Ткаббера камрадом SnAkE (`xmpp:3XXL@jabber.ru`).

93 штуки, 39 Кб.
93 штуки, 39 Кб. 

### <a id="Исправленный_набор_смайликов_от_пуза"></a>Исправленный набор смайликов "от пуза"

[**Исправленная версия**](../files/Emoticons-puz179_lkpatched.zip)
комплекта ["puzazBox"](http://www.jabber.ru/Members/puz/).
[Исправленная версия](../files/Emoticons-puz179_lkpatched.zip) комплекта ["puzazBox"](http://www.jabber.ru/Members/puz/). 

[**Lknight**](Участник_Lknight.md) исправил ошибки в **icondef.xml** и добавил
[Lknight](Участник_Lknight.md) исправил ошибки в **icondef.xml** и добавил мнемонику :-E, которая ссылается на **devil.gif**. 
мнемонику `:-E`, которая ссылается на **devil.gif**.

66 штук, 38 Кб.
66 штук, 38 Кб. 

### <a id="Комплект_в_стиле_колобки_Big_Pack"></a>Комплект в стиле "колобки": Big Pack

[*Big Pack*](../files/Tkabber_smiles.zip) — большой пак смайлов в стиле
"колобки" также перепакован из "бомбусмодовских" смайлов aka Tasha.
[Big Pack](../files/Tkabber_smiles.zip) — большой пак смайлов в стиле "колобки" также перепакован из "бомбусмодовских" смайлов aka Tasha. 

Очень симпатично вышло, на мой взгляд. Эмоций много: 136 штук. Пак весит 162
Очень симпатично вышло, на мой взгляд. Эмоций много: 136 штук. Пак весит 162  кб. 
кб.

Идея создания: `xmpp:artru@jabber.ru`; и, собственно, человек, который долго не
Идея создания: `xmpp:artru@jabber.ru`; и, собственно, человек, который долго не соглашался их подточить для Ткаббера и после длительных уговоров таки согласился. Спасибо ему: `xmpp:CSander@xmpp.ru`. 
соглашался их подточить для Ткаббера и после длительных уговоров таки
согласился. Спасибо ему: `xmpp:CSander@xmpp.ru`.

Пак выложил [*Русский*](Участник_Русский.md).
Пак выложил [Русский](Участник_Русский.md). 

### <a id="Комплект_окончательный"></a>Комплект окончательный

![](../images/180px-Teh_ultimate_smile.png)

![](../images/magnify-clip.png)
[*Teh ultimate emoticon pack*](../files/Ultimate_emoticon_pack.zip) — пак с блекджеком
и пр. Выполнен в духе минимализма и любви к литературному русскому языку.

[Teh ultimate emoticon pack](../files/Ultimate_emoticon_pack.zip) — пак с блекджеком и пр. Выполнен в духе минимализма и любви к литературному русскому языку. 

[*Набор из черного и белого шрифта*](../files/Ultimate_emoticons_pack.zip) (как на
скрине) + немного поправлен icondef.xml.
[Набор из черного и белого шрифта](../files/Ultimate_emoticons_pack.zip) (как на скрине) + немного поправлен icondef.xml. 

## <a id="Полное_искоренение_смайликов"></a>Полное искоренение смайликов

Выберите тему смайликов с названием "Нет" ("None" в англ. варианте) и сохраните
Выберите тему смайликов с названием "Нет" ("None" в англ. варианте) и сохраните настройку — смайлики начнут показываться "как есть" — в виде своих текстовых мнемоник. 
настройку — смайлики начнут показываться "как есть" — в виде своих текстовых
мнемоник.

## <a id="Клонирование_смайликов"></a>Клонирование смайликов

**Задача: сделать так, чтобы некоторые смайлики, для которых в любимом наборе
**Задача: сделать так, чтобы некоторые смайлики, для которых в любимом наборе нет картинок, всё-таки рисовались  картинками.** 
нет картинок, всё-таки рисовались  картинками.**

**Решение:** "мнемоники" смайлов связаны с соответствующими картинками при
**Решение:** "мнемоники" смайлов связаны с соответствующими картинками при помощи массива `::emoteicons::emoteicons`. Ключом (индексом) массива является мнемоника смайлика, а значением — его картинка. Знание этого позволит нам "клонировать" смайлики. Помещаем в **config.tcl** такой код: 
помощи массива `::emoticons::emoticons`. Ключом (индексом) массива является
мнемоника смайлика, а значением — его картинка. Знание этого позволит нам
"клонировать" смайлики. Помещаем в **config.tcl** такой код:

    hook::add finload_hook {
        namespace eval ::emoticons {
            variable emoticons
            set orig :-)
            set dest =)
            set emoticons($dest) $emoticons($orig)
        }
      namespace eval ::emoticons {
        variable emoticons
        set orig :-)
        set dest =)
        set emoticons($dest) $emoticons($orig)
      }
    }

Сие заклинание связывает мнемонику `=)` с картинкой от мнемоники `:-)`.
Сие заклинание связывает мнемонику `=)` с картинкой от мнемоники `:-)`. 

**Внимание:** если у вас в конфиге прописана загрузка своего смайл-пака, то
**Внимание:** если у вас в конфиге прописана загрузка своего смайл-пака, то обсуждаемый код должен идти _после_ команды загрузки (т.к. она меняет содержимое массива со смайликами). Можно поместить их в один `finload_hook`, лишь бы "клонирование" шло последним. 
обсуждаемый код должен идти _после_ команды загрузки (т.к. она меняет
содержимое массива со смайликами). Можно поместить их в один `finload_hook`,
лишь бы "клонирование" шло последним.

**Вынимание:** исходный смайлик, мнемоника которого помещается в переменную
**Вынимание:** исходный смайлик, мнемоника которого помещается в переменную `orig`, _обязан_ иметь картинку, иначе ваш конфиг взорвётся с шумом и дымом при старте Ткаббера. 
`orig`, _обязан_ иметь картинку, иначе ваш конфиг взорвётся с шумом и дымом при
старте Ткаббера.

**Внимание** в версиях 0.9.x везде вместо "emoticons" нужно писать
**Внимание** в версиях 0.9.x везде вместо "emoticons" нужно писать "emoteicons". 
"emoteicons".

### <a id="Массовое_клонирование"></a>Массовое клонирование

Данный подход был изобретён для 0.9.x с целью обрабатывать "ROTFL/LOL" смайлики
Данный подход был изобретён для 0.9.x с целью обрабатывать "ROTFL/LOL" смайлики типа `:-)))))))))))))))`. 
типа `:-)))))))))))))))`.

Начиная с 0.10.0 данная проблема решается проще — путём включения опции
Начиная с 0.10.0 данная проблема решается проще — путём включения опции **::plugins::emoticons::options(handle\_lol)** в настройках эмоциконок. 
**::plugins::emoticons::options(handle\_lol)** в настройках эмоциконок.

Если у вас 0.9.x, читайте [**здесь**](0.9.x/Эмоциконки.md#Массовое_клонирование_эмоциконок).
Если у вас 0.9.x, читайте [здесь](0.9.x/Эмоциконки.md#Массовое_клонирование_эмоциконок). 

## <a id="Анимированные_смайлы"></a>Анимированные смайлы

Поддержка анимированных эмоциконок всегда была и является "нелюбимым ребёнком"
Поддержка анимированных эмоциконок всегда была и является "нелюбимым ребёнком" в Ткаббере (наравне с аватарами). Причина в том, что анимированные картинки очень сильно затрудняют их обработку, поскольку на самом деле они значительно ближе к видеопотокам, чем к картинкам. Поскольку поддержка анимированных гифов отсутствует в библиотеках **Tk** и **Img**, которые Ткаббер использует для поддержки изображений, обработка анигифов требует достаточно извращённых приседаний со стороны разработчиков. До тех пор, пока кто-нибудь не напишет для Ткаббера спец. код для работы с картинками, который будет _прозрачно_ обрабатывать анигифы так же, как и нормальные картинки, ситуация навряд ли изменится. 
в Ткаббере (наравне с аватарами). Причина в том, что анимированные картинки
очень сильно затрудняют их обработку, поскольку на самом деле они значительно
ближе к видеопотокам, чем к картинкам. Поскольку поддержка анимированных гифов
отсутствует в библиотеках **Tk** и **Img**, которые Ткаббер использует для
поддержки изображений, обработка анигифов требует достаточно извращённых
приседаний со стороны разработчиков. До тех пор, пока кто-нибудь не напишет для
Ткаббера спец. код для работы с картинками, который будет _прозрачно_
обрабатывать анигифы так же, как и нормальные картинки, ситуация навряд ли
изменится.

С другой стороны, поддержка анигифов в Ткаббере, в принципе, есть — она
С другой стороны, поддержка анигифов в Ткаббере, в принципе, есть — она реализована в виде стандартного внешнего плагина **aniemoticons**. Если вы не знаете как устанавливать плагины Ткаббера, почитайте начало [этой статьи](Плагины.md). 
реализована в виде стандартного внешнего плагина **aniemoticons**. Если вы не
знаете как устанавливать плагины Ткаббера, почитайте начало
[**этой статьи**](Плагины.md).

# <a id="Аватары"></a>Аватары
## <a id="Подключение_своей_аватары"></a>Подключение своей аватары

Чтобы аватара подцепилась, нужно правильно указать путь к ней в конфиге, например, так:
Чтобы аватара подцепилась, нужно правильно указать путь к ней в конфиге, например, так: 

    if {[file exists  $::configdir/avatar.gif]} {
        avatar::load_file $::configdir/avatar.gif
      avatar::load_file $::configdir/avatar.gif
    } else {
        avatar::load_file $::rootdir/pixmaps/default/tkabber/tkabber-logo.gif
      avatar::load_file $::rootdir/pixmaps/default/tkabber/tkabber-logo.gif
    }

Как нетрудно заметить, этот код проверяет, имеется ли файл **avatar.gif** в
Как нетрудно заметить, этот код проверяет, имеется ли файл **avatar.gif** в директории, имя которой содержится в переменной `[configdir]($__configdir.md)`, и если его не находит, грузит логотип Ткаббера. Конечно, никто вас не заставляет называть ваш аватар именно так и класть именно туда. Но не забудьте написать путь в соответствии с местоположением вашего файла. 
директории, имя которой содержится в переменной [**$::configdir**]($__configdir.md),
и если его не находит, грузит логотип Ткаббера. Конечно, никто вас не
заставляет называть ваш аватар именно так и класть именно туда. Но не забудьте
написать путь в соответствии с местоположением вашего файла.

При выборе своей аватары помните, что графический файл может быть только
При выборе своей аватары помните, что графический файл может быть только формата gif. Не делайте аватару больших размеров — это не фотография. Постарайтесь уложиться в 5 килобайт, такие картинки и так будут грузится долго. И вообще, берите пример с аватары [Bigote](Участник_Bigote.md). 
формата gif. Не делайте аватару больших размеров — это не фотография.
Постарайтесь уложиться в 5 килобайт, такие картинки и так будут грузится долго.
И вообще, берите пример с аватары [**Bigote**](Участник_Bigote.md).

Если конфиг у вас был изначально пустым, необходимо заключить строчку, грузящую
Если конфиг у вас был изначально пустым, необходимо заключить строчку, грузящую аватару (ну или весь вышеприведённый код), в хук: 
аватару (ну или весь вышеприведённый код), в хук:

    hook::add finload_hook {
        avatar::load_file $::configdir/avatar.gif
      avatar::load_file $::configdir/avatar.gif
    }

Теперь, объявив аватару (**Службы → Расширения → Аватара → Объявление**), вы
Теперь, объявив аватару (**Службы → Расширения → Аватара → Объявление**), вы можете быть уверенным, что клиент, поддерживающий её просмотр, её увидит. Проверить это можно, заглянув в собственную персональную информацию, находясь в какой-нибудь конференции (при редактировании персональной инфы аватара не видна). Помимо прочих должна появиться вкладка "Аватара". 
можете быть уверенным, что клиент, поддерживающий её просмотр, её увидит.
Проверить это можно, заглянув в собственную персональную информацию, находясь в
какой-нибудь конференции (при редактировании персональной инфы аватара не
видна). Помимо прочих должна появиться вкладка "Аватара".

Объявление и "расшаривание" аватары можно тоже прописать в конфиг:
Объявление и "расшаривание" аватары можно тоже прописать в конфиг: 

    set avatar::options(announce)   1
    set avatar::options(share)      1

Но вот вопрос: а сам Ткаббер может показывать нам чужие аватары? Краткий ответ:
Но вот вопрос: а сам Ткаббер может показывать нам чужие аватары? Краткий ответ: может. Длинный: надо немного [потрудиться](Патчи.md#Добавление_аватары_в_окно_чата_старый_хак_Badlopа). 
может. Длинный: надо немного
[**потрудиться**](Патчи.md#Добавление_аватары_в_окно_чата_старый_хак_Badlopа).

## <a id="Просмотр_аватары_собеседника"></a>Просмотр аватары собеседника

Если у человека подключена аватара, то её можно увидеть в персональной инфе.
Если у человека подключена аватара, то её можно увидеть в персональной инфе. 

Если же вы хотите видеть аватару собеседника в окне чата, то:
Если же вы хотите видеть аватару собеседника в окне чата, то: 

1. [**Хак от Badlop**](Патчи.md#Добавление_аватары_в_окно_чата_старый_хак_Badlopа).
   Небольшое изменение файла **chat.tcl** покажет аватару в окне чата.
1.  [Хак от Badlop](Патчи.md#Добавление_аватары_в_окно_чата_старый_хак_Badlopа). Небольшое изменение файла **chat.tcl** покажет аватару в окне чата. 
1. [**Патч от Archimed**](Патчи.md#Расширенная_поддержка_аватар_в_окне_чата) —
   расширение возможностей хака от Badlope. Аватары автоматически
1.  [ Патч от Archimed](Патчи.md#Расширенная_поддержка_аватаров_в_окне_чата) — расширение возможностей хака от Badlope. Аватары автоматически масштабируются под размер выделенной области, поддержка прозрачности, поддержка анимированных аватаров. 
   масштабируются под размер выделенной области, поддержка прозрачности,
   поддержка анимированных аватаров.

## <a id="Ссылки"></a>Ссылки

*  [Аватары](http://allavatars.ru/)
*  [Аватары](http://allavatars.ru/) 


Changes to wiki/ru/Спамодавка_списками_приватности.md.

1

2
3
4
5
6
7

8
9
10
11
12

13
14

15
16

17
18

19
20

21
22
23
24
25
26
27
28

29
30

31
32
33
34
35
36

37
38

39
40
41

42
43
44

45
46

47
48

49
50

51
52

53
54
55

56
57
58

59
60
61
62

63
64



1
2
3
4
5
6
7

8

9



10
11

12
13

14
15

16
17

18






19

20
21

22




23

24
25

26

27

28

29

30
31

32
33

34
35

36
37

38

39

40

41

42


43

44
45

46
47
48

+





-
+
-

-
-
-
+

-
+

-
+

-
+

-
+
-
-
-
-
-
-

-
+

-
+
-
-
-
-

-
+

-
+
-

-
+
-

-
+

-
+

-
+

-
+

-
+
-

-
+
-

-
+
-
-

-
+

-
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Спамодавка_списками_приватности/index.html)


# Спамодавка списками приватности

Материал из Tkabber Wiki

К вопросу о реализуемости аськиной спамодавки при помощи списков приватности на
К вопросу о реализуемости аськиной спамодавки при помощи списков приватности на сервере... 
сервере...

Кратко: не работает вследствие
[бага в ejabberd](https://support.process-one.net/browse/EJAB-300).
Баг пока ещё не исправлен; исправление (формально) ожидается в версии 2.1.0.
Кратко: не работает вследствие [бага в ejabberd](https://support.process-one.net/browse/EJAB-300). Баг пока ещё не исправлен; исправление (формально) ожидается в версии 2.1.0. 

Информация к размышлению (носит историко-ностальгический характер):
Информация к размышлению (носит историко-ностальгический характер): 

Чат на девеле с Алексеем Щепиным от 2 декабря:
Чат на девеле с Алексеем Щепиным от 2 декабря: 

[02:42]\<aleksey> йандыкс следит за тобой!
[02:42]\<aleksey> йандыкс следит за тобой! 

[02:43]\<kostix> приветствую! сейчас пытались решить проблему асечного спама,
[02:43]\<kostix> приветствую! сейчас пытались решить проблему асечного спама, который приходит с гейта в виде запросов на подписку, при помощи списков приватности (на ёжике 1.1.2). получается так, что блокировать можно всё, кроме, собственно, запросов на подписку, хотя в [RFC 3921](http://tools.ietf.org/html/rfc3921) ясно написано, что, скажем, запрещение по джиду без указания типов станц блокирует все станцы. можете что-нибудь подсказать? станцу со списком могу предъявить ;) 
который приходит с гейта в виде запросов на подписку, при помощи списков
приватности (на ёжике 1.1.2). получается так, что блокировать можно всё, кроме,
собственно, запросов на подписку, хотя в
[RFC 3921](http://tools.ietf.org/html/rfc3921) ясно написано, что, скажем,
запрещение по джиду без указания типов станц блокирует все станцы. можете
что-нибудь подсказать? станцу со списком могу предъявить ;)

[02:43]\<aleksey> а помнится там как раз про подписки небыло
[02:43]\<aleksey> а помнится там как раз про подписки небыло 

[02:44]\<kostix> Server-side privacy lists enable a user to block all stanzas
[02:44]\<kostix> Server-side privacy lists enable a user to block all stanzas from and to other entities based on the entity's JID, roster group, or subscription status (or globally). Note that this includes subscription-related presence stanzas, which are excluded by Blocking Inbound Presence Notifications (Blocking Inbound Presence Notifications). 
from and to other entities based on the entity's JID, roster group, or
subscription status (or globally). Note that this includes subscription-related
presence stanzas, which are excluded by Blocking Inbound Presence Notifications
(Blocking Inbound Presence Notifications).

[02:44]\<kostix> пункт 10.13
[02:44]\<kostix> пункт 10.13 

[02:44]\<kostix> я вот думаю, может оно не работает из-за того, что гейт в
[02:44]\<kostix> я вот думаю, может оно не работает из-за того, что гейт в аську это сервис на сервере? 
аську это сервис на сервере?

[02:45]\<kostix> ну так я джид указываю как icq.007spb.ru (к примеру), и запрос
[02:45]\<kostix> ну так я джид указываю как icq.007spb.ru (к примеру), и запрос приходит с from='UIN@icq.007spb.ru' type='subscribe' 
приходит с from='UIN@icq.007spb.ru' type='subscribe'

[02:45]\<kostix> и там спам унутре ;)
[02:45]\<kostix> и там спам унутре ;) 

[02:46]\<aleksey> от блин, и когда это поменять успели
[02:46]\<aleksey> от блин, и когда это поменять успели 

[02:46]\<kostix> ну вот хрен знает, это teo следит за новостями, а я мал ещё ;)
[02:46]\<kostix> ну вот хрен знает, это teo следит за новостями, а я мал ещё ;) 

[02:47]\<kostix> кстати, он мне вчера показал, что в IBB добавили IQ транспорт
[02:47]\<kostix> кстати, он мне вчера показал, что в IBB добавили IQ транспорт 

[02:47]\<kostix> значит, он где-то про это читает. в регулярное перечитывание
[02:47]\<kostix> значит, он где-то про это читает. в регулярное перечитывание джепов я не верю :) 
джепов я не верю :)

[02:49]\<kostix> aleksey: то есть, если я правильно понял: 1) ёжик это пока не
[02:49]\<kostix> aleksey: то есть, если я правильно понял: 1) ёжик это пока не умеет; 2) мы можем надеяться, что его научат. да? 
умеет; 2) мы можем надеяться, что его научат. да?

[02:52]\<kostix> а вообще, я так думаю, что уж если блокировать всё, то -- всё.
[02:52]\<kostix> а вообще, я так думаю, что уж если блокировать всё, то -- всё. а то ведь может и просто какой-нибудь идиот засыпАть юзера запросами на подписку. 
а то ведь может и просто какой-нибудь идиот засыпАть юзера запросами на
подписку.

[02:52]\<aleksey> ага
[02:52]\<aleksey> ага 

[02:52]\<aleksey> может :)
[02:52]\<aleksey> может :) 


Changes to wiki/ru/Сравнение_XMPP-клиентов.md.

1

2
3
4
5
6
7

8
9

10
11
12
13
14
15

16
17
18
19



20
21

22
23

24
25
26
27

































28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

































1
2
3
4
5
6
7

8


9




10

11
12



13
14
15
16

17
18

19
20



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54























55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87

+





-
+
-
-
+
-
-
-
-

-
+

-
-
-
+
+
+

-
+

-
+

-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Сравнение_XMPP-клиентов/index.html)


# Сравнение XMPP-клиентов

Материал из Tkabber Wiki

## <a id="Черновик._Не_трогать_до_исчезновения_этого_заголовка"></a>Черновик. Не трогать до исчезновения этого заголовка
# <a id="Черновик._Не_трогать_до_исчезновения_этого_заголовка"></a>Черновик. Не трогать до исчезновения этого заголовка

На это странице (будет) представлена сводная таблица сравнения XMPP-клиентов
На это странице (будет) представлена сводная таблица сравнения XMPP-клиентов перебранных рабами Культа для демонстрации всей ничтожности и убогости других клиентов по сравнению с Ткаббер. Сравнение будет отличатся полнотой, будут указаны все возможности клиентов включая возможности их расширений и плагинов. За единицу сравнения будет принят (что бы вы думали?) Ткаббер. 
перебранных рабами Культа для демонстрации всей ничтожности и убогости других
клиентов по сравнению с Ткаббер. Сравнение будет отличатся полнотой, будут
указаны все возможности клиентов включая возможности их расширений и плагинов.
За единицу сравнения будет принят (что бы вы думали?) Ткаббер.

Легенда:
Легенда: 

*  "+" - характеристика реализована;
*  "~" - характеристика реализована частично;
*  "-" - характеристика не реализована;
*  "+" - характеристика реализована; 
*  "~" - характеристика реализована частично; 
*  "-" - характеристика не реализована; 

Также предполагается система оценки от 0 до 1.
Также предполагается система оценки от 0 до 1. 

Схема ячейки пока выглядит так:
Схема ячейки пока выглядит так: 

1.  Вверху, по центру - форма наличия характеристики клиента.
1.  В середине - примечание (при необходимости).
1.  Внизу, справа, в круглых скобках - оценка степени реализованности характеристики.
1.  Вверху, по центру  - форма наличия характеристики клиента. 
1.  В середине - примечание (при необходимости). 
1.  Внизу, справа, в круглых скобках - оценка степени реализованности характеристики. 

 ** Характеристики **** Ткаббер (live) **** Psi+ (live) **** Pidgin (2.7.3) **** Gajim (0.14) **** Kopete (4.4.5) **** Mcabber (0.10.0) **
 
 ** Базовые **
 
  XMPP Core ([RFC3920](http://xmpp.org/rfcs/rfc3920.html))  +

  +

 XMPP IM ([RFC3920](http://xmpp.org/rfcs/rfc3921.html))  +

  +

  In-Band Registration ([XEP-0077](http://xmpp.org/extensions/xep-0077.html))  +

  +

  Stream Compression ([XEP-0138](http://xmpp.org/extensions/xep-0138.html))  +

 ** Криптография **
 
  Поддержка OpenPGP ([XEP-0027](http://xmpp.org/extensions/xep-0027.html))  +

  +

  [OTR](http://en.wikipedia.org/wiki/Off-the-Record_Messaging)  -

 ** Поддерживаемые типы proxy **
 
  HTTP  +

Характеристики | Ткаббер (live) | Psi+ (live) | Pidgin (2.7.3) | Gajim (0.14) | Kopete (4.4.5) | Mcabber (0.10.0)
---|---|---|---|---|---|---
:**Базовые**:|||||||
XMPP Core ([RFC3920](http://xmpp.org/rfcs/rfc3920.html)) | + | + |||||
XMPP IM ([RFC3920](http://xmpp.org/rfcs/rfc3921.html)) | + | + |||||
In-Band Registration ([XEP-0077](http://xmpp.org/extensions/xep-0077.html)) | + | + |||||
Stream Compression ([XEP-0138](http://xmpp.org/extensions/xep-0138.html)) | + ||||||
:**Криптография**:|||||||
Поддержка OpenPGP ([XEP-0027](http://xmpp.org/extensions/xep-0027.html)) | + | + |||||
[OTR](http://en.wikipedia.org/wiki/Off-the-Record_Messaging) | - ||||||
:**Поддерживаемые типы proxy**:|||||||
HTTP | + ||||||
HTTPS | + ||||||
SOCKS4a | + ||||||
SOCKS5 | + ||||||
:**Приватность**:|||||||
Privacy Lists ([XEP-0016](http://xmpp.org/extensions/xep-0016.html))  + ||||||
Запрет передачи информации о возможностях программы (CAPS) | + ||||||
:***Выборочное игнорирование IQ-запросов***:|||||||
запросы времени (jabber:iq:time) | + ||||||
запросы о времени на компьютере пользователя (urn:xmpp:time) | + ||||||
запросы версии клиента (jabber:iq:version) | + ||||||
запросы версии ОС (jabber:iq:version) | + ||||||
  HTTPS  +

  SOCKS4a  +

  SOCKS5  +

 ** Приватность **
 
  Privacy Lists ([XEP-0016](http://xmpp.org/extensions/xep-0016.html))  +

  Запрет передачи информации 
о возможностях программы (CAPS) 
  +

  _**Выборочное игнорирование IQ-запросов:**_ 
 
  запросы времени 
(jabber:iq:time) 
  +

  запросы о времени на компьютере 
пользователя (urn:xmpp:time) 
  +

  запросы версии клиента 
(jabber:iq:version) 
  +

  запросы версии ОС 
(jabber:iq:version) 
  +


Changes to wiki/ru/Ссылки.md.

1

2
3
4
5
6
7

8
9
10
11
12
13
14


15
16
17
18
19




20
21
22
23
24
25
26
27







28
29
30
31

32
33
34
35



36
37
38


39
40
41
42

43
44
45
46
47

48
49
50
51
52

53
54
55
56

57
58

59
60

61
62

63
64
65

66
67
68

69
70
71

72
73

74
75

76
77
78
79

80
81



82
83
84
85

86
87

88
89
90
91
92
93





94
95
96
97
98
99

100
101
102

103
104

105
106
107

108
109

110
111
112


113
114
115
116



117
118
119

120
121

122
123

124
125

126
127

128
129

130
131
132
133
134
135
136
137

138
139
140
141
142

143
144
145
146
147

148
149
150
151
152

153
154
155

156
157
158

159
160
161

162
163
164

165
166

167
168
169


170
171
172

173
174
175

176
177
178
179

180
181

182
183

184
185

186
187

188
189
190




1
2
3
4
5
6
7

8

9
10
11
12


13
14
15




16
17
18
19
20







21
22
23
24
25
26
27
28
29
30

31




32
33
34



35
36




37





38





39




40


41
42

43
44

45

46

47
48


49

50

51


52
53

54


55

56
57

58
59
60
61



62


63
64





65
66
67
68
69






70



71


72



73
74

75
76


77
78




79
80
81

82

83
84

85
86

87
88

89
90

91
92

93



94
95
96
97

98
99
100
101
102

103
104
105
106
107

108

109
110
111

112
113


114



115



116

117

118
119

120
121


122
123

124

125



126




127


128


129


130
131

132



133
134
135
136

+





-
+
-




-
-
+
+

-
-
-
-
+
+
+
+

-
-
-
-
-
-
-
+
+
+
+
+
+
+



-
+
-
-
-
-
+
+
+
-
-
-
+
+
-
-
-
-
+
-
-
-
-
-
+
-
-
-
-
-
+
-
-
-
-
+
-
-
+

-
+

-
+
-

-
+

-
-
+
-

-
+
-
-
+

-
+
-
-

-
+

-
+
+
+

-
-
-
+
-
-
+

-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
-
-
-
+
-
-
+
-
-
-
+

-
+

-
-
+
+
-
-
-
-
+
+
+
-

-
+

-
+

-
+

-
+

-
+

-
+
-
-
-




-
+




-
+




-
+
-



-
+

-
-
+
-
-
-
+
-
-
-
+
-

-
+

-
+

-
-
+
+
-

-
+
-
-
-
+
-
-
-
-
+
-
-
+
-
-
+
-
-
+

-
+
-
-
-
+
+
+
+
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Ссылки/index.html)


# Ссылки

Материал из Tkabber Wiki

На этой странице потихоньку будут собираться ссылки на внешние ресурсы,
На этой странице потихоньку будут собираться ссылки на внешние ресурсы, посвящённые Ткабберу и Джабберу. 
посвящённые Ткабберу и Джабберу.

## <a id="toc"></a>Содержание

* [1 Документация и скачивание](#Документация_и_скачивание)
   * [1.1 Сайты о Ткаббере на других языках](#Сайты_о_Ткаббере_на_других_языках)
   * [1.2 Разное](#Разное)
 * [1.1 Сайты о Ткаббере на других языках](#Сайты_о_Ткаббере_на_других_языках)
 * [1.2 Разное](#Разное)
* [2 Народное творчество](#Народное_творчество)
   * [2.1 Цветовые схемы](#Цветовые_схемы)
   * [2.2 Смайл-паки, аватары](#Смайл-паки_аватары)
   * [2.3 Звуковые схемы](#Звуковые_схемы)
   * [2.4 Сторонние плагины](#Сторонние_плагины)
 * [2.1 Цветовые схемы](#Цветовые_схемы)
 * [2.2 Смайл-паки, аватары](#Смайл-паки_аватары)
 * [2.3 Звуковые схемы](#Звуковые_схемы)
 * [2.4 Сторонние плагины](#Сторонние_плагины)
* [3 Tcl/Tk](#Tcl_Tk)
   * [3.1 Документация и книги на английском языке](#Документация_и_книги_на_английском_языке)
   * [3.2 Документация и книги на русском языке](#Документация_и_книги_на_русском_языке)
   * [3.3 Больше тиклей, хороших и разных!](#Больше_тиклей_хороших_и_разных)
   * [3.4 Sources](#Sources)
      * [3.4.1 4 Linux](#4_Linux)
      * [3.4.2 4 Windows](#4_Windows)
      * [3.4.3 4 Mac](#4_Mac)
 * [3.1 Документация и книги на английском языке](#Документация_и_книги_на_английском_языке)
 * [3.2 Документация и книги на русском языке](#Документация_и_книги_на_русском_языке)
 * [3.3 Больше тиклей, хороших и разных!](#Больше_тиклей_хороших_и_разных)
 * [3.4 Sources](#Sources)
  * [3.4.1 4 Linux](#4_Linux)
  * [3.4.2 4 Windows](#4_Windows)
  * [3.4.3 4 Mac](#4_Mac)
* [4 Jabber](#Jabber)
* [5 Разное](#Разное)

## <a id="Документация_и_скачивание"></a>Документация и скачивание
# <a id="Документация_и_скачивание"></a>Документация и скачивание

* [Официальный сайт Ткаббера.](http://tkabber.jabber.ru)
   * Здесь вы можете [cкачать](http://tkabber.jabber.ru/download) Ткаббер.
   * Здесь — почитать [полную документацию](http://tkabber.jabber.ru/files/doc/tkabber.html)
*  [Официальный сайт Ткаббера.](http://tkabber.jabber.ru) 
 *  Здесь вы можете [cкачать](http://tkabber.jabber.ru/download) Ткаббер. 
 *  Здесь — почитать [полную документацию](http://tkabber.jabber.ru/files/doc/tkabber.html) (правда, на английском языке). 
     (правда, на английском языке).

* [Раздел вики на сайте omsktele.com, посвящённый Ткабберу.](http://wiki.omsktele.com/index.php/Tkabber)
 
*  [Раздел вики на сайте omsktele.com, посвящённый Ткабберу.](http://wiki.omsktele.com/index.php/Tkabber) У парней имеется своя сборка Ткаббера, "заточенная" для пользователей сервера **jabber.lan.omsk.ru**. 
  У парней имеется своя сборка Ткаббера, "заточенная" для пользователей
  сервера **jabber.lan.omsk.ru**.
* [Комьюнити ЖЖ, посвящённое Ткабберу.](http://community.livejournal.com/tkabber/profile)
  Основная его идея — давать информацию о ходе разработки, для обмена идеями и
*  [Комьюнити ЖЖ, посвящённое Ткабберу.](http://community.livejournal.com/tkabber/profile) Основная его идея — давать информацию о ходе разработки, для обмена идеями и т. п. Это **не** форум поддержки. Если вам нужна помощь (и вы не нашли ничего полезного здесь, на вики), идите в конференцию `xmpp:tkabber@conference.jabber.ru`. 
  т. п. Это **не** форум поддержки. Если вам нужна помощь (и вы не нашли ничего
  полезного здесь, на вики), идите в конференцию
  `xmpp:tkabber@conference.jabber.ru`.
* Кстати, **логи конференции** можно найти по
  [этому адресу](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru).
*  Кстати, **логи конференции** можно найти по [этому адресу](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru). Обратите внимание, что на каждую фразу из чатлога можно ссылаться с помощью локальной ссылки на время фразы, [например, вот так](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/07/02.html#23:38:06). 
  Обратите внимание, что на каждую фразу из чатлога можно ссылаться с помощью
  локальной ссылки на время фразы,
  [например, вот так](http://chatlogs.jabber.ru/tkabber@conference.jabber.ru/2007/07/02.html#23:38:06).
* [Tkabber-SK](http://sourceforge.net/projects/tkabber-sk/) — этакий "форк"
  от SVN-версии Ткаббера за конец декабря 2006 года. В эту версию добавлены
*  [Tkabber-SK](http://sourceforge.net/projects/tkabber-sk/) — этакий "форк" от SVN-версии Ткаббера за конец декабря 2006 года. В эту версию добавлены разные интересные и не очень штуки. Мы пригласили автора к сотрудничеству с разработчиками, так как некоторые из его фич могут запросто попасть в транк. Да и вообще, незачем распылять силы. 
  разные интересные и не очень штуки. Мы пригласили автора к сотрудничеству с
  разработчиками, так как некоторые из его фич могут запросто попасть в транк.
  Да и вообще, незачем распылять силы.
* [Tkabbur](http://code.google.com/p/tkabbur) — ещё один форк.
*  [Tkabbur](http://code.google.com/p/tkabbur) — ещё один форк. 
* [Рассылка tkabber-dev](http://lists.jabber.ru/mailman/listinfo/tkabber-dev):
  если хотите быть в курсе последних фич и багфиксов, обязательно подпишитесь.
*  [Рассылка tkabber-dev](http://lists.jabber.ru/mailman/listinfo/tkabber-dev): если хотите быть в курсе последних фич и багфиксов, обязательно подпишитесь. 

### <a id="Сайты_о_Ткаббере_на_других_языках"></a>Сайты о Ткаббере на других языках
## <a id="Сайты_о_Ткаббере_на_других_языках"></a>Сайты о Ткаббере на других языках

* [Tkabber-Manía (esp.)](http://tkabber.redlibre.org/) — испанский сайт,
*  [Tkabber-Manía (esp.)](http://tkabber.redlibre.org/) — испанский сайт, посвящённый Ткабберу. 
  посвящённый Ткабберу.

### <a id="Разное"></a>Разное
## <a id="Разное"></a>Разное

* [Сколько стоит Ткаббер?](http://www.ohloh.net/projects/3278) Оказывается,
  Ткаббер — один из самых дешёвых клиентов, причём с большим отрывом. Можете
*  [Сколько стоит Ткаббер?](http://www.ohloh.net/projects/3278) Оказывается, Ткаббер — один из самых дешёвых клиентов, причём с большим отрывом. Можете убедиться в этом сами, посмотрев данные по другим аналогичным программам. 
  убедиться в этом сами, посмотрев данные по другим аналогичным программам.

## <a id="Народное_творчество"></a>Народное творчество
# <a id="Народное_творчество"></a>Народное творчество

### <a id="Цветовые_схемы"></a>Цветовые схемы
## <a id="Цветовые_схемы"></a>Цветовые схемы

* [Новая цветовая схема - Dark Radar](http://tkabber.jabber.ru/files/internal/darkradar-theme.tar.gz)
*  [Новая цветовая схема - Dark Radar](http://tkabber.jabber.ru/files/internal/darkradar-theme.tar.gz) (Автор: [Bobus](http://w.bo.org.ru/), скриншот: [смотреть](http://tkabber.jabber.ru/files/internal/tkshot002.png)) 
  (Автор: [Bobus](http://w.bo.org.ru/), скриншот:
  [смотреть](http://tkabber.jabber.ru/files/internal/tkshot002.png))

### <a id="Смайл-паки_аватары"></a>Смайл-паки, аватары
## <a id="Смайл-паки_аватары"></a>Смайл-паки, аватары

### <a id="Звуковые_схемы"></a>Звуковые схемы
## <a id="Звуковые_схемы"></a>Звуковые схемы

## <a id="Сторонние_плагины"></a>Сторонние плагины

### <a id="Сторонние_плагины"></a>Сторонние плагины

## <a id="Tcl_Tk"></a>Tcl/Tk
# <a id="Tcl_Tk"></a>Tcl/Tk

### <a id="Документация_и_книги_на_английском_языке"></a>Документация и книги на английском языке
## <a id="Документация_и_книги_на_английском_языке"></a>Документация и книги на английском языке

* [Официальный сайт Tcl/Tk](http://tcl.tk)
   * [База знаний этого сайта](http://wiki.tcl.tk)
   * [Раздел этой базы, посвящённый Ткабберу](http://wiki.tcl.tk/11080)
* [J. K. Ousterhout, Tcl and the Tk Toolkit (Reading : Addison-Wesley, 1994)](http://citeseer.ist.psu.edu/ousterhout94tcl.html)
  Книга по тиклю, написанная самим его автором — Джоном Оустерхаутом.
*  [Официальный сайт Tcl/Tk](http://tcl.tk) 
 *  [База знаний этого сайта](http://wiki.tcl.tk) 
 *  [Раздел этой базы, посвящённый Ткабберу](http://wiki.tcl.tk/11080) 
 
*  [J. K. Ousterhout, Tcl and the Tk Toolkit (Reading : Addison-Wesley, 1994)](http://citeseer.ist.psu.edu/ousterhout94tcl.html) Книга по тиклю, написанная самим его автором — Джоном Оустерхаутом. Безусловно, начинать стоит с неё: всё разложено по полочкам и подробно разжёвано. Единственный недостаток — надо читать по-английски. Впрочем, это относится к подавляющему большниству документации и практически ко всем книгам по тиклю. 
  Безусловно, начинать стоит с неё: всё разложено по полочкам и подробно
  разжёвано. Единственный недостаток — надо читать по-английски. Впрочем, это
  относится к подавляющему большниству документации и практически ко всем
  книгам по тиклю.
* [Brent Welch, Practical Programming in Tcl and Tk](http://www.beedub.com/book/)
  Как видно из названия, эта книга предназначена для практического применения.
*  [Brent Welch, Practical Programming in Tcl and Tk](http://www.beedub.com/book/) Как видно из названия, эта книга предназначена для практического применения. Для начинающих и продвинутых тиклеводов. Ссылки как на amazon.com, так и на электронные версии разных изданий книги. 
  Для начинающих и продвинутых тиклеводов. Ссылки как на amazon.com, так и на
  электронные версии разных изданий книги.
* [Clif Flynt, Tcl/tk A Developers Guide](http://www.amazon.co.uk/Tcl-Developers-Guide-Clif-Flynt/dp/1558608028)
*  [Clif Flynt, Tcl/tk A Developers Guide](http://www.amazon.co.uk/Tcl-Developers-Guide-Clif-Flynt/dp/1558608028) Тикль для разработчиков. 
  Тикль для разработчиков.
* [Clif Flynt, Tcl/Tk For Real Programmers](http://www.amazon.com/Tcl-Real-Programmers-Clif-Flynt/dp/0122612051)
*  [Clif Flynt, Tcl/Tk For Real Programmers](http://www.amazon.com/Tcl-Real-Programmers-Clif-Flynt/dp/0122612051) Тикль для настоящих программистов. 
  Тикль для настоящих программистов.
* [Salvatore Sanfilippo, TCLWISE. Guide to the Tcl programming language.](http://www.invece.org/tclwise/frontcover.html)
  Ещё одна книга по тиклю.
*  [Salvatore Sanfilippo, TCLWISE. Guide to the Tcl programming language.](http://www.invece.org/tclwise/frontcover.html) Ещё одна книга по тиклю. 

### <a id="Документация_и_книги_на_русском_языке"></a>Документация и книги на русском языке
## <a id="Документация_и_книги_на_русском_языке"></a>Документация и книги на русском языке

* [Документация по тиклю на русском языке](http://www.opennet.ru/docs/RUS/tcltk/)
* [Б. Уэлш, Практическое программирование на Tcl/Tk. Изд-во "Питер".](http://www.book.ru/?page=4&book=87376)
*  [Документация по тиклю на русском языке](http://www.opennet.ru/docs/RUS/tcltk/) 
*  [Б. Уэлш, Практическое программирование на Tcl/Tk. Изд-во "Питер".](http://www.book.ru/?page=4&book=87376) Перевод на русский язык вышеупомянутой книги Брента Уэлша. 
  Перевод на русский язык вышеупомянутой книги Брента Уэлша.
* [Помощь начинающим программистам на тикле, не владеющим английским языком](http://tclstudy.narod.ru/index.html)
* [Ещё кое-что о тикле на русском (с Опеннета)](http://www.opennet.ru/links/sml/36.shtml)
* [Ещё один хороший перевод документации по тиклю.](http://jarosh.by.ru/tcltkrus/)
*  [Помощь начинающим программистам на тикле, не владеющим английским языком](http://tclstudy.narod.ru/index.html) 
*  [Ещё кое-что о тикле на русском (с Опеннета)](http://www.opennet.ru/links/sml/36.shtml) 
*  [Ещё один хороший перевод документации по тиклю.](http://jarosh.by.ru/tcltkrus/) На сайте есть также скрипты на тему квантовой химии, написанные автором сайта. 
  На сайте есть также скрипты на тему квантовой химии, написанные автором сайта.

### <a id="Больше_тиклей_хороших_и_разных"></a>Больше тиклей, хороших и разных!
## <a id="Больше_тиклей_хороших_и_разных"></a>Больше тиклей, хороших и разных!

![(!)](../images/Hammer.png) **Сделать:** Развить и дополнить
![(!)](../images/Hammer.png) **Сделать:** Развить и дополнить 

### <a id="Sources"></a>Sources
## <a id="Sources"></a>Sources

[Исходники качать здесь.](http://tcl.tk/software/tcltk/download.html)
[Исходники качать здесь.](http://tcl.tk/software/tcltk/download.html) 

#### <a id="4_Linux"></a>4 Linux
### <a id="4_Linux"></a>4 Linux

В юниксах он обычно уже входит в состав даже минимального дистрибутива. Если же
В юниксах он обычно уже входит в состав даже минимального дистрибутива. Если же по каким-то причинам его нет (вы работаете с каким-нибудь минималистичным Live-CD) или хочется поставить версию посвежей, обращайтесь к вашему менеджеру пакетов. Например, в случае с Debian это выглядит так: 
по каким-то причинам его нет (вы работаете с каким-нибудь минималистичным
Live-CD) или хочется поставить версию посвежей, обращайтесь к вашему менеджеру
пакетов. Например, в случае с Debian это выглядит так:

    apt-cache search tcl
    apt-cache search tk

при этом найдётся что-нибудь вроде
при этом найдётся что-нибудь вроде 

    tcl8.5 - Tcl (the Tool Command Language) v8.5 - run-time files
    tcl8.5-dev - Tcl (the Tool Command Language) v8.5 - development files
    tcl8.5-doc - Tcl (the Tool Command Language) v8.5 - manual pages

    
    tk8.5 - Tk toolkit for Tcl and X11, v8.5 - run-time files
    tk8.5-dev - Tk toolkit for Tcl and X11, v8.5 - development files
    tk8.5-doc - Tk toolkit for Tcl and X11, v8.5 - manual pages

Установить надо оба пакета (не забывая, что для Ткаббера одного тикля мало,
Установить надо оба пакета (не забывая, что для Ткаббера одного тикля мало, нужны как минимум ещё tcllib и bwidget): 
нужны как минимум ещё tcllib и bwidget):

    sudo apt-get install tcl8.5 tk8.5

#### <a id="4_Windows"></a>4 Windows
### <a id="4_Windows"></a>4 Windows

* [ActiveState Tcl](http://www.activestate.com/Products/ActiveTcl/) — как
  уверяют авторы, в этом тикле "включены все батарейки", однако они лукавят:
*  [ActiveState Tcl](http://www.activestate.com/Products/ActiveTcl/) — как уверяют авторы, в этом тикле "включены все батарейки", однако они лукавят: далеко не все батарейки там есть. Выкачав 21 мег дистра, вы не получите, например, такой элементарной вещи как tcllib. 
  далеко не все батарейки там есть. Выкачав 21 мег дистра, вы не получите,
  например, такой элементарной вещи как tcllib.
* [wintcltk](http://sourceforge.net/projects/wintcltk) — альтернативная
*  [wintcltk](http://sourceforge.net/projects/wintcltk) — альтернативная сборка под винды. 
  сборка под винды.
* [eTcl](http://www.evolane.com/software/etcl/) (есть сборки под все системы,
  кроме того, идёт ещё и на Windows Mobile, что позволяет осуществлять
*  [eTcl](http://www.evolane.com/software/etcl/) (есть сборки под все системы, кроме того, идёт ещё и на Windows Mobile, что позволяет осуществлять [запуск Ткаббера на Pocket PC](Ткаббер_на_КПК.md)). 
  [**запуск Ткаббера на Pocket PC**](Ткаббер_на_КПК.md)).

#### <a id="4_Mac"></a>4 Mac
### <a id="4_Mac"></a>4 Mac

Кроме упомянутого выше eTcl, который идёт на всём и вся, имеется ещё, например,
Кроме упомянутого выше eTcl, который идёт на всём и вся, имеется ещё, например, 

*  mactcl, о котором лучше почитать [здесь](http://wiki.tcl.tk/2923).
*  Свежую версию TclTkAqua, упомянутой на этой странице,  можно найти
*  mactcl, о котором лучше почитать [здесь.](http://wiki.tcl.tk/2923) 
*  Свежую версию TclTkAqua, упомянутой на этой странице,  можно найти [тут.](http://sourceforge.net/project/shownotes.php?release_id=288380&group_id=86100) 
   [тут](http://sourceforge.net/project/shownotes.php?release_id=288380&group_id=86100).

## <a id="Jabber"></a>Jabber
# <a id="Jabber"></a>Jabber

* [Сайт одного из самых крупных российских xmpp-серверов](http://jabber.ru).
  Есть FAQ, форумы, много статей. Архиудобная (но к сожалению, не секурная)
*  [Сайт одного из самых крупных российских xmpp-серверов](http://jabber.ru). Есть FAQ, форумы, много статей. Архиудобная (но к сожалению, не секурная) регистрация — используется XMPP-логин с jabber.ru. Параноикам лучше завести отдельный аккаунт на сайте, чтобы не засветить пароль от джаббера. 
  регистрация — используется XMPP-логин с jabber.ru. Параноикам лучше завести
  отдельный аккаунт на сайте, чтобы не засветить пароль от джаббера.
* [Русскоязычная вики по протоколу XMPP (Jabber).](http://wiki.jrudevels.org)
  Написано простым и понятным языком. Рекомендуется для прочтения новичкам в
*  [Русскоязычная вики по протоколу XMPP (Jabber).](http://wiki.jrudevels.org) Написано простым и понятным языком. Рекомендуется для прочтения новичкам в Jabber. 
  Jabber.
* [Русскоязычное комьюнити в ЖЖ.](http://community.livejournal.com/ru_jabber)
*  [Русскоязычное комьюнити в ЖЖ.](http://community.livejournal.com/ru_jabber) 
* [Переход с ICQ на Jabber](http://jabberworld.info/Переход_с_ICQ_на_Jabber)
  — тоже архиполезная вики в помощь перебежчикам с других протоколов и просто
*  [Переход с ICQ на Jabber](http://jabberworld.info/Переход_с_ICQ_на_Jabber) — тоже архиполезная вики в помощь перебежчикам с других протоколов и просто новичкам. 
  новичкам.
* Надо сюда джепов насовать, чтоб в куче лежали.
*  Надо сюда джепов насовать, чтоб в куче лежали. 

## <a id="Разное"></a>Разное
# <a id="Разное"></a>Разное

* [Jabber и Livejournal.com — теперь друзья навек :) (eng.)](http://community.livejournal.com/lj_dev/716451.html)
 * [О том же по-русски, но в общих чертах и не из официальных уст.](http://itnews.com.ua/23336.html)
*  [Jabber и Livejournal.com — теперь друзья навек :) (eng.)](http://community.livejournal.com/lj_dev/716451.html) 
 *  [О том же по-русски, но в общих чертах и не из официальных уст.](http://itnews.com.ua/23336.html) 


Changes to wiki/ru/ТЗ_по_управлению_через_параметры_командной_строки.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14

15
16
17
18
19
20
21
22
23








24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13

14
15








16
17
18
19
20
21
22
23
24
25
26
27
28
29
30













-
+

-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/ТЗ_по_управлению_через_параметры_командной_строки/index.html)


# ТЗ по управлению через параметры командной строки

Материал из Tkabber Wiki.

В этой статье изложеные общее, а местами и детальные, описание функции удаленного управления клиентом через командную строку, которую я хотел сделать, да все времени не хватало ... может и не хватит никогда. А так хоть мысли не потеряются :)  --20:20, 21 сентября 2007 (MSD)  

## <a id="toc"></a>Содержание

* [1 Зачем это нужно](#Зачем_это_нужно)
* [2 Межпроцессное взаимодействие](#Межпроцессное_взаимодействие)
   * [2.1 Несколько соединений, несколько клиентов](#Несколько_соединений_несколько_клиентов)
 * [2.1 Несколько соединений, несколько клиентов](#Несколько_соединений_несколько_клиентов)
* [3 Алгоритмы](#Алгоритмы)
   * [3.1 Выполнение XMPP-URI команд](#Выполнение_XMPP-URI_команд)
      * [3.1.1 Экранирование](#Экранирование)
      * [3.1.2 Кодировки](#Кодировки)
      * [3.1.3 Несколько соединений](#Несколько_соединений)
   * [3.2 Управление PEP-статусами](#Управление_PEP-статусами)
      * [3.2.1 Экранирование](#Экранирование)
      * [3.2.2 Кодировки](#Кодировки)
      * [3.2.3 Несколько соединений](#Несколько_соединений)
 * [3.1 Выполнение XMPP-URI команд](#Выполнение_XMPP-URI_команд)
  * [3.1.1 Экранирование](#Экранирование)
  * [3.1.2 Кодировки](#Кодировки)
  * [3.1.3 Несколько соединений](#Несколько_соединений)
 * [3.2 Управление PEP-статусами](#Управление_PEP-статусами)
  * [3.2.1 Экранирование](#Экранирование)
  * [3.2.2 Кодировки](#Кодировки)
  * [3.2.3 Несколько соединений](#Несколько_соединений)
* [4 См. также](#См._также)

## <a id="Зачем_это_нужно"></a>Зачем это нужно

Для двух вещей:  

*  Выполнение [XMPP-URI](http://www.xmpp.org/extensions/xep-0147.html) нужно, чтобы в браузеры можно было вписать _tkabber -uri [xmpp](xmpp):\<uri-команда>_ и все ссылки вида [xmpp:tkabber@conference.jabber.ru?join](xmpp:tkabber@conference.jabber.ru?join)  заработали. 

Changes to wiki/ru/Теория.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21










22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11










12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28











-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Теория/index.html)


# Теория

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 Глоссарик (словарий)](#Глоссарик_словарий)
* [2 Статьи](#Статьи)
   * [2.1 Начинающим](#Начинающим)
      * [2.1.1 О Ткаббере](#О_Ткаббере)
      * [2.1.2 Быстрый старт (с кучей скриншотов)](#Быстрый_старт_с_кучей_скриншотов)
      * [2.1.3 Настройка Ткаббера: азы и глубже](#Настройка_Ткаббера_азы_и_глубже)
   * [2.2 Продвинутым пользователям](#Продвинутым_пользователям)
      * [2.2.1 Тонкая настройка](#Тонкая_настройка)
      * [2.2.2 Меню](#Меню)
      * [2.2.3 Настройки](#Настройки)
      * [2.2.4 Config.tcl с человеческим лицом](#Config.tcl_с_человеческим_лицом)
   * [2.3 Другие статьи](#Другие_статьи)
 * [2.1 Начинающим](#Начинающим)
  * [2.1.1 О Ткаббере](#О_Ткаббере)
  * [2.1.2 Быстрый старт (с кучей скриншотов)](#Быстрый_старт_с_кучей_скриншотов)
  * [2.1.3 Настройка Ткаббера: азы и глубже](#Настройка_Ткаббера_азы_и_глубже)
 * [2.2 Продвинутым пользователям](#Продвинутым_пользователям)
  * [2.2.1 Тонкая настройка](#Тонкая_настройка)
  * [2.2.2 Меню](#Меню)
  * [2.2.3 Настройки](#Настройки)
  * [2.2.4 Config.tcl с человеческим лицом](#Config.tcl_с_человеческим_лицом)
 * [2.3 Другие статьи](#Другие_статьи)

# <a id="Глоссарик_словарий"></a>Глоссарик (словарий)
[1001 непонятное слово из тех, что вы хотели, но боялись спросить.](Терминология.md) 

# <a id="Статьи"></a>Статьи
## <a id="Начинающим"></a>Начинающим

Changes to wiki/ru/Терминология.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14


15
16

17
18
19
20
21
22


23
24
25
26
27




28
29
30
31
32
33
34
1
2
3
4
5
6
7
8
9
10
11
12


13
14
15

16
17
18
19
20


21
22
23




24
25
26
27
28
29
30
31
32
33
34












-
-
+
+

-
+




-
-
+
+

-
-
-
-
+
+
+
+







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Терминология/index.html)


# Терминология

Материал из Tkabber Wiki

В этом разделе мы постараемся разъяснять некоторые термины, очевидные для одних и непонятные для других. Объяснения будут даны весьма вкратце — времени у нас не вагон. Краткая расшифровка, чтобы можно было понять смысл статьи, где встречается хитрое слово, и ссылка на источник подробной информации (на английском и по возможности на русском). 

## <a id="toc"></a>Содержание

* [1 Tkabber](#Tkabber)
   * [1.1 Токен (token)](#Токен_token)
   * [1.2 Окно XML](#Окно_XML)
 * [1.1 Токен (token)](#Токен_token)
 * [1.2 Окно XML](#Окно_XML)
* [2 Сети](#Сети)
   * [2.1 SOCKS5](#SOCKS5)
 * [2.1 SOCKS5](#SOCKS5)
* [3 Windows](#Windows)
* [4 Linux](#Linux)
* [5 Tcl/Tk](#Tcl_Tk)
* [6 Jabber](#Jabber)
   * [6.1 XML](#XML)
   * [6.2 Станца (stanza)](#Станца_stanza)
 * [6.1 XML](#XML)
 * [6.2 Станца (stanza)](#Станца_stanza)
* [7 Разное](#Разное)
   * [7.1 Плагин (plugin)](#Плагин_plugin)
   * [7.2 Биндинги (bindings)](#Биндинги_bindings)
   * [7.3 Транк (trunk)](#Транк_trunk)
   * [7.4 Переменные окружения](#Переменные_окружения)
 * [7.1 Плагин (plugin)](#Плагин_plugin)
 * [7.2 Биндинги (bindings)](#Биндинги_bindings)
 * [7.3 Транк (trunk)](#Транк_trunk)
 * [7.4 Переменные окружения](#Переменные_окружения)

# <a id="Tkabber"></a>Tkabber
Тут мы будем рассматривать термины, относящиеся (впрочем, весьма условно) к Ткабберу. 

## <a id="Токен_token"></a>Токен (token)

Одно из значений английского слова [token](http://dictionary.reference.com/browse/token) — отличительное свойство или характеристика. В этом значении оно используется для случаев идентификации, когда человек или программа должна удостовериться в личности собеседника. Например, [session token](http://en.wikipedia.org/wiki/Session_token) или [security token](http://en.wikipedia.org/wiki/Security_token) (обе ссылки на английском). Ещё одно значение, на этот раз грамматическое — основная, простейшая, неделимая лексическая единица. В этом случае речь может идти о разбиении текста на небольшие отрывки или даже слова, чтобы было удобнее их анализировать. Смотрите [пример в Википедии](http://en.wikipedia.org/wiki/Token_(parser)) (тоже по-английски). 

Changes to wiki/ru/Ткаббер_ЧаВо.md.

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25









26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59



































60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98






































99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115


















116
117
118
119
120
121
122
10
11
12
13
14
15
16









17
18
19
20
21
22
23
24
25
26

































27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62






































63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
















102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126







-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







Если проблема, которая у вас возникла, здесь не освещена, заходите на `xmpp:tkabber@conference.jabber.ru?join` — подумаем вместе, и если решим — ответ появится либо здесь, либо в одной из статей этой вики. 

Недавние глюки с некоторыми сильно разросшимися страницами (и в первую очередь с ЧаВо) подтолкнули нас к давно обдуманному шагу: разделить ЧаВо на несколько разных страниц. 

## <a id="toc"></a>Содержание

* [1 Внешний вид и звук](#Внешний_вид_и_звук)
   * [1.1 Почему Ткаббер такой страшный?](#Почему_Ткаббер_такой_страшный)
   * [1.2 Шрифты](#Шрифты)
   * [1.3 Смайлики: 1) вызов из меню; 2) не подключаются; 3) не хочу их; 4) анимированные](#Смайлики_1_вызов_из_меню_2_не_подключаются_3_не_хочу_их_4_анимированные)
   * [1.4 Не видны иконки/фото/и т.д. в JPEG/PNG](#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG)
   * [1.5 Цветовые схемы](#Цветовые_схемы)
   * [1.6 Цвета сообщений "асечников"](#Цвета_сообщений_асечников)
   * [1.7 Поддерживает ли Ткаббер аватары?](#Поддерживает_ли_Ткаббер_аватары)
   * [1.8 Регулировка громкости звука](#Регулировка_громкости_звука)
   * [1.9 В старпаке/старките нет звука/поддержки JPEG,PNG](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG)
 * [1.1 Почему Ткаббер такой страшный?](#Почему_Ткаббер_такой_страшный)
 * [1.2 Шрифты](#Шрифты)
 * [1.3 Смайлики: 1) вызов из меню; 2) не подключаются; 3) не хочу их; 4) анимированные](#Смайлики_1_вызов_из_меню_2_не_подключаются_3_не_хочу_их_4_анимированные)
 * [1.4 Не видны иконки/фото/и т.д. в JPEG/PNG](#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG)
 * [1.5 Цветовые схемы](#Цветовые_схемы)
 * [1.6 Цвета сообщений "асечников"](#Цвета_сообщений_асечников)
 * [1.7 Поддерживает ли Ткаббер аватары?](#Поддерживает_ли_Ткаббер_аватары)
 * [1.8 Регулировка громкости звука](#Регулировка_громкости_звука)
 * [1.9 В старпаке/старките нет звука/поддержки JPEG,PNG](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG)
* [2 Глюки, возникающие в процессе работы](#Глюки_возникающие_в_процессе_работы)
   * [2.1 Общие вопросы](#Общие_вопросы)
      * [2.1.1 Ткаббер и Ufanet](#Ткаббер_и_Ufanet)
      * [2.1.2 Долгая загрузка Ткаббера](#Долгая_загрузка_Ткаббера)
      * [2.1.3 Ткаббер "виснет" при попытке логина на сервер](#Ткаббер_виснет_при_попытке_логина_на_сервер)
      * [2.1.4 Пересылка файлов](#Пересылка_файлов)
      * [2.1.5 Ткаббер постоянно держит меня в состоянии "отошёл" ("away")](#Ткаббер_постоянно_держит_меня_в_состоянии_отошёл_away)
      * [2.1.6 Не могу приконнектиться к серверу через прокси](#Не_могу_приконнектиться_к_серверу_через_прокси)
      * [2.1.7 Keep alive в Ткаббере — возможно ли?](#Keep_alive_в_Ткаббере_-_возможно_ли)
      * [2.1.8 Что с грифельной доской?](#Что_с_грифельной_доской)
      * [2.1.9 Ткаббер в упор не видит SSL-сертификат для коннекта к серверу](#Ткаббер_в_упор_не_видит_SSL-сертификат_для_коннекта_к_серверу)
      * [2.1.10 Не могу отредактировать закладку конференции в ростере](#Не_могу_отредактировать_закладку_конференции_в_ростере)
      * [2.1.11 Ткаббер и iChat](#Ткаббер_и_iChat)
      * [2.1.12 Конфликт хоткеев в Ткаббере и puntoswitcher, gxneur, etc.](#Конфликт_хоткеев_в_Ткаббере_и_puntoswitcher_gxneur_etc.)
   * [2.2 Вопросы, связанные с Линукс](#Вопросы_связанные_с_Линукс)
      * [2.2.1 Шифрование в Ткаббере: проблемы с **gpgme/tclgpgme**](#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme)
      * [2.2.2 В Ubuntu не вводятся русские буквы в Ткаббере, chto delat?](#В_Ubuntu_не_вводятся_русские_буквы_в_Ткаббере_chto_delat)
      * [2.2.3 Ткаббер под X Window падает при попытке показать "странные" символы](#Ткаббер_под_X_Window_падает_при_попытке_показать_странные_символы)
      * [2.2.4 Не работает вставка по Control-v под X Window](#Не_работает_вставка_по_Control-v_под_X_Window)
      * [2.2.5 В Gentoo не работает сворачивание в трей](#В_Gentoo_не_работает_сворачивание_в_трей)
      * [2.2.6 Fedora 8 и Tcl/Tk 8.5](#Fedora_8_и_Tcl_Tk_8.5)
      * [2.2.7 Обновил тикль до 8.5, но Ткаббер по-прежнему запускается с 8.4](#Обновил_тикль_до_8.5_но_Ткаббер_по-прежнему_запускается_с_8.4)
      * [2.2.8 Проигрывание звука в Linux](#Проигрывание_звука_в_Linux)
      * [2.2.9 Userinfo в KDE 4.x](#Userinfo_в_KDE_4.x)
      * [2.2.10 Диалоговые окна Tk на многоголовом X11-сервере](#Диалоговые_окна_Tk_на_многоголовом_X11-сервере)
   * [2.3 Вопросы, связанные с Виндовс](#Вопросы_связанные_с_Виндовс)
      * [2.3.1 В старпаке/старките нет звука/поддержки JPEG,PNG/сжатия](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG_сжатия)
      * [2.3.2 Не работает браузер под виндами](#Не_работает_браузер_под_виндами)
      * [2.3.3 При клике на URL'е в Ткаббере запускается две Оперы и открывают страницу два раза](#При_клике_на_URLе_в_Ткаббере_запускается_две_Оперы_и_открывают_страницу_два_раза)
      * [2.3.4 Странное поведение прокрутки содержимого окна чата колесом мыши](#Странное_поведение_прокрутки_содержимого_окна_чата_колесом_мыши)
      * [2.3.5 Ошибка: wrong \# args: should be "zlib option data ?...?", что делать?](#Ошибка_wrong_N_args_should_be_zlib_option_data_..._что_делать)
      * [2.3.6 Windows, дистрибутив от ActiveState — "падения" при нажатии Alt-любая кнопка в главном окне](#Windows_дистрибутив_от_ActiveState_-_падения_при_нажатии_Alt-любая_кнопка_в_главном_окне)
      * [2.3.7 Windows, дистрибутив от ActiveState — "падения" при открытии в фоне окна со смайликом](#Windows_дистрибутив_от_ActiveState_-_падения_при_открытии_в_фоне_окна_со_смайликом)
      * [2.3.8 Фатальная ошибка в wish при запуске полноэкранных приложений под Windows](#Фатальная_ошибка_в_wish_при_запуске_полноэкранных_приложений_под_Windows)
 * [2.1 Общие вопросы](#Общие_вопросы)
  * [2.1.1 Ткаббер и Ufanet](#Ткаббер_и_Ufanet)
  * [2.1.2 Долгая загрузка Ткаббера](#Долгая_загрузка_Ткаббера)
  * [2.1.3 Ткаббер "виснет" при попытке логина на сервер](#Ткаббер_виснет_при_попытке_логина_на_сервер)
  * [2.1.4 Пересылка файлов](#Пересылка_файлов)
  * [2.1.5 Ткаббер постоянно держит меня в состоянии "отошёл" ("away")](#Ткаббер_постоянно_держит_меня_в_состоянии_отошёл_away)
  * [2.1.6 Не могу приконнектиться к серверу через прокси](#Не_могу_приконнектиться_к_серверу_через_прокси)
  * [2.1.7 Keep alive в Ткаббере — возможно ли?](#Keep_alive_в_Ткаббере_-_возможно_ли)
  * [2.1.8 Что с грифельной доской?](#Что_с_грифельной_доской)
  * [2.1.9 Ткаббер в упор не видит SSL-сертификат для коннекта к серверу](#Ткаббер_в_упор_не_видит_SSL-сертификат_для_коннекта_к_серверу)
  * [2.1.10 Не могу отредактировать закладку конференции в ростере](#Не_могу_отредактировать_закладку_конференции_в_ростере)
  * [2.1.11 Ткаббер и iChat](#Ткаббер_и_iChat)
  * [2.1.12 Конфликт хоткеев в Ткаббере и puntoswitcher, gxneur, etc.](#Конфликт_хоткеев_в_Ткаббере_и_puntoswitcher_gxneur_etc.)
 * [2.2 Вопросы, связанные с Линукс](#Вопросы_связанные_с_Линукс)
  * [2.2.1 Шифрование в Ткаббере: проблемы с **gpgme/tclgpgme**](#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme)
   * [2.2.1 Не могу скомпилировать tclgpgme](#Не_могу_скомпилировать_tclgpgme)
   * [2.2.1 Ткаббер валится при вводе gpg-пароля](#Ткаббер_валится_при_вводе_gpg-пароля)
  * [2.2.2 В Ubuntu не вводятся русские буквы в Ткаббере, chto delat?](#В_Ubuntu_не_вводятся_русские_буквы_в_Ткаббере_chto_delat)
  * [2.2.3 Ткаббер под X Window падает при попытке показать "странные" символы](#Ткаббер_под_X_Window_падает_при_попытке_показать_странные_символы)
  * [2.2.4 Не работает вставка по Control-v под X Window](#Не_работает_вставка_по_Control-v_под_X_Window)
  * [2.2.5 В Gentoo не работает сворачивание в трей](#В_Gentoo_не_работает_сворачивание_в_трей)
  * [2.2.6 Fedora 8 и Tcl/Tk 8.5](#Fedora_8_и_Tcl_Tk_8.5)
  * [2.2.7 Обновил тикль до 8.5, но Ткаббер по-прежнему запускается с 8.4](#Обновил_тикль_до_8.5_но_Ткаббер_по-прежнему_запускается_с_8.4)
  * [2.2.8 Проигрывание звука в Linux](#Проигрывание_звука_в_Linux)
  * [2.2.9 Userinfo в KDE 4.x](#Userinfo_в_KDE_4.x)
  * [2.2.10 Диалоговые окна Tk на многоголовом X11-сервере](#Диалоговые_окна_Tk_на_многоголовом_X11-сервере)
 * [2.3 Вопросы, связанные с Виндовс](#Вопросы_связанные_с_Виндовс)
  * [2.3.1 В старпаке/старките нет звука/поддержки JPEG,PNG/сжатия](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG_сжатия)
  * [2.3.2 Не работает браузер под виндами](#Не_работает_браузер_под_виндами)
  * [2.3.3 При клике на URL'е в Ткаббере запускается две Оперы и открывают страницу два раза](#При_клике_на_URLе_в_Ткаббере_запускается_две_Оперы_и_открывают_страницу_два_раза)
  * [2.3.4 Странное поведение прокрутки содержимого окна чата колесом мыши](#Странное_поведение_прокрутки_содержимого_окна_чата_колесом_мыши)
  * [2.3.5 Ошибка: wrong \# args: should be "zlib option data ?...?", что делать?](#Ошибка_wrong_N_args_should_be_zlib_option_data_..._что_делать)
  * [2.3.6 Windows, дистрибутив от ActiveState — "падения" при нажатии Alt-любая кнопка в главном окне](#Windows_дистрибутив_от_ActiveState_-_падения_при_нажатии_Alt-любая_кнопка_в_главном_окне)
  * [2.3.7 Windows, дистрибутив от ActiveState — "падения" при открытии в фоне окна со смайликом](#Windows_дистрибутив_от_ActiveState_-_падения_при_открытии_в_фоне_окна_со_смайликом)
  * [2.3.8 Фатальная ошибка в wish при запуске полноэкранных приложений под Windows](#Фатальная_ошибка_в_wish_при_запуске_полноэкранных_приложений_под_Windows)
* [3 А как мне...?](#А_как_мне...)
   * [3.1 Настройка Ткаббера (Не найду файл config.tcl)](#Настройка_Ткаббера_Не_найду_файл_config.tcl)
   * [3.2 Как настроить "автологин"?](#Как_настроить_автологин)
   * [3.3 Работать с RSS](#Работать_с_RSS)
   * [3.4 Отправка сообщений по Ctrl-Enter](#Отправка_сообщений_по_Ctrl-Enter)
   * [3.5 Отправка сообщений по NumPad Enter](#Отправка_сообщений_по_NumPad_Enter)
   * [3.6 Одновременная работа с несколькими аккаунтами](#Одновременная_работа_с_несколькими_аккаунтами)
   * [3.7 Как насчёт автозахода на конференции?](#Как_насчёт_автозахода_на_конференции)
   * [3.8 Сжатие трафика в Ткаббере](#Сжатие_трафика_в_Ткаббере)
   * [3.9 Выделение текста жирным, курсивом и подчёркиванием](#Выделение_текста_жирным_курсивом_и_подчёркиванием)
   * [3.10 Ввод "хитрых" юникодных символов](#Ввод_хитрых_юникодных_символов)
   * [3.11 Игнор — великая вещь!](#Игнор_-_великая_вещь)
   * [3.12 Подтверждения](#Подтверждения)
   * [3.13 Удалённое управление](#Удалённое_управление)
   * [3.14 Команды Ткаббера](#Команды_Ткаббера)
   * [3.15 Скрытие версий клиента и ОС](#Скрытие_версий_клиента_и_ОС)
   * [3.16 Как подключить плагин?](#Как_подключить_плагин)
   * [3.17 Как уменьшить трафик?](#Как_уменьшить_трафик)
   * [3.18 Самостоятельная сборка Старпака](#Самостоятельная_сборка_Старпака)
   * [3.19 "Быстрый" Copy/Paste помимо буфера Windows](#Быстрый_Copy_Paste_помимо_буфера_Windows)
   * [3.20 Проверка орфографии](#Проверка_орфографии)
   * [3.21 Как перенести ростер с сервера на сервер? Импортировать контакты ICQ?](#Как_перенести_ростер_с_сервера_на_сервер_Импортировать_контакты_ICQ)
   * [3.22 Как почитать протокол общения "в привате" с участником групчата, которого больше нет в комнате?](#Как_почитать_протокол_общения_в_привате_с_участником_групчата_которого_больше_нет_в_комнате)
   * [3.23 Указать причину кика/бана](#Указать_причину_кика_бана)
   * [3.24 Блокировать спам с MRIM-гейта](#Блокировать_спам_с_MRIM-гейта)
   * [3.25 Конфигурирование конференции](#Конфигурирование_конференции)
   * [3.26 Отключить к (нецензурные слова пропущены) splash-окно](#Отключить_к_нецензурные_слова_пропущены_splash-окно)
   * [3.27 Подключить Ткаббер через SOCKS-сервер](#Подключить_Ткаббер_через_SOCKS-сервер)
   * [3.28 Подключить Ткаббер через Tor, для анонимного использования](#Подключить_Ткаббер_через_Tor_для_анонимного_использования)
   * [3.29 Подключиться к Google Talk](#Подключиться_к_Google_Talk)
   * [3.30 Победить предупреждение о проблеме с сертификатом сервера?](#Победить_предупреждение_о_проблеме_с_сертификатом_сервера)
   * [3.31 Работать с версией из SVN](#Работать_с_версией_из_SVN)
   * [3.32 Задолбало выпадающее меню в контекстном меню MUC-юзера](#Задолбало_выпадающее_меню_в_контекстном_меню_MUC-юзера)
   * [3.33 Как мне собрать новый tclgpg с googlecode?](#Как_мне_собрать_новый_tclgpg_с_googlecode)
   * [3.34 Как настроить работу с плагином OSD?](#Как_настроить_работу_с_плагином_OSD)
   * [3.35 Включить интерфейс на другом языке?](#Включить_интерфейс_на_другом_языке)
   * [3.36 Изменить и зафиксировать ширину ростера?](#Изменить_и_зафиксировать_ширину_ростера)
   * [3.37 Изменить шрифт в окошке ввода сообщения?](#Изменить_шрифт_в_окошке_ввода_сообщения)
   * [3.38 Изменить интервал повторного подключения к серверу?](#Изменить_интервал_повторного_подключения_к_серверу)
 * [3.1 Настройка Ткаббера (Не найду файл config.tcl)](#Настройка_Ткаббера_Не_найду_файл_config.tcl)
 * [3.2 Как настроить "автологин"?](#Как_настроить_автологин)
 * [3.3 Работать с RSS](#Работать_с_RSS)
 * [3.4 Отправка сообщений по Ctrl-Enter](#Отправка_сообщений_по_Ctrl-Enter)
 * [3.5 Отправка сообщений по NumPad Enter](#Отправка_сообщений_по_NumPad_Enter)
 * [3.6 Одновременная работа с несколькими аккаунтами](#Одновременная_работа_с_несколькими_аккаунтами)
 * [3.7 Как насчёт автозахода на конференции?](#Как_насчёт_автозахода_на_конференции)
 * [3.8 Сжатие трафика в Ткаббере](#Сжатие_трафика_в_Ткаббере)
 * [3.9 Выделение текста жирным, курсивом и подчёркиванием](#Выделение_текста_жирным_курсивом_и_подчёркиванием)
 * [3.10 Ввод "хитрых" юникодных символов](#Ввод_хитрых_юникодных_символов)
 * [3.11 Игнор — великая вещь!](#Игнор_-_великая_вещь)
 * [3.12 Подтверждения](#Подтверждения)
 * [3.13 Удалённое управление](#Удалённое_управление)
 * [3.14 Команды Ткаббера](#Команды_Ткаббера)
 * [3.15 Скрытие версий клиента и ОС](#Скрытие_версий_клиента_и_ОС)
 * [3.16 Как подключить плагин?](#Как_подключить_плагин)
 * [3.17 Как уменьшить трафик?](#Как_уменьшить_трафик)
 * [3.18 Самостоятельная сборка Старпака](#Самостоятельная_сборка_Старпака)
 * [3.19 "Быстрый" Copy/Paste помимо буфера Windows](#Быстрый_Copy_Paste_помимо_буфера_Windows)
 * [3.20 Проверка орфографии](#Проверка_орфографии)
 * [3.21 Как перенести ростер с сервера на сервер? Импортировать контакты ICQ?](#Как_перенести_ростер_с_сервера_на_сервер_Импортировать_контакты_ICQ)
 * [3.22 Как почитать протокол общения "в привате" с участником групчата, которого больше нет в комнате?](#Как_почитать_протокол_общения_в_привате_с_участником_групчата_которого_больше_нет_в_комнате)
 * [3.23 Указать причину кика/бана](#Указать_причину_кика_бана)
 * [3.24 Блокировать спам с MRIM-гейта](#Блокировать_спам_с_MRIM-гейта)
 * [3.25 Конфигурирование конференции](#Конфигурирование_конференции)
 * [3.26 Отключить к (нецензурные слова пропущены) splash-окно](#Отключить_к_нецензурные_слова_пропущены_splash-окно)
 * [3.27 Подключить Ткаббер через SOCKS-сервер](#Подключить_Ткаббер_через_SOCKS-сервер)
 * [3.28 Подключить Ткаббер через Tor, для анонимного использования](#Подключить_Ткаббер_через_Tor_для_анонимного_использования)
 * [3.29 Подключиться к Google Talk](#Подключиться_к_Google_Talk)
 * [3.30 Победить предупреждение о проблеме с сертификатом сервера?](#Победить_предупреждение_о_проблеме_с_сертификатом_сервера)
 * [3.31 Работать с версией из SVN](#Работать_с_версией_из_SVN)
 * [3.32 Задолбало выпадающее меню в контекстном меню MUC-юзера](#Задолбало_выпадающее_меню_в_контекстном_меню_MUC-юзера)
 * [3.33 Как мне собрать новый tclgpg с googlecode?](#Как_мне_собрать_новый_tclgpg_с_googlecode)
 * [3.34 Как настроить работу с плагином OSD?](#Как_настроить_работу_с_плагином_OSD)
 * [3.35 Включить интерфейс на другом языке?](#Включить_интерфейс_на_другом_языке)
 * [3.36 Изменить и зафиксировать ширину ростера?](#Изменить_и_зафиксировать_ширину_ростера)
 * [3.37 Изменить шрифт в окошке ввода сообщения?](#Изменить_шрифт_в_окошке_ввода_сообщения)
 * [3.38 Изменить интервал повторного подключения к серверу?](#Изменить_интервал_повторного_подключения_к_серверу)
* [4 Всякая всячина](#Всякая_всячина)
   * [4.1 Что такое...?](#Что_такое...)
      * [4.1.1 Ростер](#Ростер)
      * [4.1.2 Ресурс](#Ресурс)
      * [4.1.3 Приоритет](#Приоритет)
      * [4.1.4 Консоль Ткаббера](#Консоль_Ткаббера)
      * [4.1.5 Репозиторий teo](#Репозиторий_teo)
   * [4.2 Разное](#Разное)
      * [4.2.1 ...а мне ИГРАТЬ охота!!!](#...а_мне_ИГРАТЬ_охота)
      * [4.2.2 Старые версии Ткаббера и плагинов](#Старые_версии_Ткаббера_и_плагинов)
      * [4.2.3 Работает ли Ткаббер на КПК?](#Работает_ли_Ткаббер_на_КПК)
      * [4.2.4 Почему Ткаббер написан именно на Tcl/Tk?](#Почему_Ткаббер_написан_именно_на_Tcl_Tk)
      * [4.2.5 Кто убил Лору Палмер? ©](#Кто_убил_Лору_Палмер_©)
      * [4.2.6 У вас в конференции топик с ошибкой написан](#У_вас_в_конференции_топик_с_ошибкой_написан)
      * [4.2.7 А добавят ли когда-нибудь в Ткаббер...?](#А_добавят_ли_когда-нибудь_в_Ткаббер...)
   * [4.3 Вопросы, связанные с протоколом XMPP](#Вопросы_связанные_с_протоколом_XMPP)
      * [4.3.1 MUC](#MUC)
 * [4.1 Что такое...?](#Что_такое...)
  * [4.1.1 Ростер](#Ростер)
  * [4.1.2 Ресурс](#Ресурс)
  * [4.1.3 Приоритет](#Приоритет)
  * [4.1.4 Консоль Ткаббера](#Консоль_Ткаббера)
  * [4.1.5 Репозиторий teo](#Репозиторий_teo)
 * [4.2 Разное](#Разное)
  * [4.2.1 ...а мне ИГРАТЬ охота!!!](#...а_мне_ИГРАТЬ_охота)
  * [4.2.2 Старые версии Ткаббера и плагинов](#Старые_версии_Ткаббера_и_плагинов)
  * [4.2.3 Работает ли Ткаббер на КПК?](#Работает_ли_Ткаббер_на_КПК)
  * [4.2.4 Почему Ткаббер написан именно на Tcl/Tk?](#Почему_Ткаббер_написан_именно_на_Tcl_Tk)
  * [4.2.5 Кто убил Лору Палмер? ©](#Кто_убил_Лору_Палмер_©)
  * [4.2.6 У вас в конференции топик с ошибкой написан](#У_вас_в_конференции_топик_с_ошибкой_написан)
  * [4.2.7 А добавят ли когда-нибудь в Ткаббер...?](#А_добавят_ли_когда-нибудь_в_Ткаббер...)
 * [4.3 Вопросы, связанные с протоколом XMPP](#Вопросы_связанные_с_протоколом_XMPP)
  * [4.3.1 MUC](#MUC)
   * [4.3.1 Кто есть кто в конференции?](#Кто_есть_кто_в_конференции)
   * [4.3.1 Не работают инвайты](#Не_работают_инвайты)

# <a id="Внешний_вид_и_звук"></a>Внешний вид и звук
[Ткаббер ЧаВо/Внешний вид и звук](Ткаббер_ЧаВо/Внешний_вид_и_звук.md) 

## <a id="Почему_Ткаббер_такой_страшный"></a>Почему Ткаббер такой страшный?

[Перейти к ответу](Ткаббер_ЧаВо/Внешний_вид_и_звук.md#Почему_Ткаббер_такой_страшный). 

Changes to wiki/ru/Ткаббер_ЧаВо/Внешний_вид_и_звук.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24












25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12












13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31












-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Ткаббер_ЧаВо/Внешний_вид_и_звук/index.html)


# Ткаббер ЧаВо/Внешний вид и звук

Материал из Tkabber Wiki

[Ткаббер ЧаВо](../Ткаббер_ЧаВо.md) разделился на несколько статей. В этой статье рассматриваются вопросы касательно внешнего вида Ткаббера (шрифты, цветовые схемы, иконки, аватары) и его работы со звуком. Для удобства даны ссылки на другие тематические страницы ЧаВо. 

## <a id="toc"></a>Содержание

* [1 Внешний вид и звук](#Внешний_вид_и_звук)
   * [1.1 Почему Ткаббер такой страшный?](#Почему_Ткаббер_такой_страшный)
   * [1.2 Шрифты](#Шрифты)
      * [1.2.1 Ввод западноевропейских символов](#Ввод_западноевропейских_символов)
   * [1.3 Смайлики: 1) вызов из меню; 2) не подключаются; 3) не хочу их; 4) анимированные](#Смайлики_1_вызов_из_меню_2_не_подключаются_3_не_хочу_их_4_анимированные)
   * [1.4 Не видны иконки/фото/и т.д. в JPEG/PNG](#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG)
   * [1.5 Цветовые схемы](#Цветовые_схемы)
   * [1.6 Цвета сообщений "асечников"](#Цвета_сообщений_асечников)
   * [1.7 Поддерживает ли Ткаббер Tile?](#Поддерживает_ли_Ткаббер_Tile)
   * [1.8 Поддерживает ли Ткаббер аватары?](#Поддерживает_ли_Ткаббер_аватары)
   * [1.9 Регулировка громкости звука](#Регулировка_громкости_звука)
   * [1.10 Проигрывание звука в Linux](#Проигрывание_звука_в_Linux)
   * [1.11 В старпаке/старките нет звука/поддержки JPEG,PNG](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG)
 * [1.1 Почему Ткаббер такой страшный?](#Почему_Ткаббер_такой_страшный)
 * [1.2 Шрифты](#Шрифты)
  * [1.2.1 Ввод западноевропейских символов](#Ввод_западноевропейских_символов)
 * [1.3 Смайлики: 1) вызов из меню; 2) не подключаются; 3) не хочу их; 4) анимированные](#Смайлики_1_вызов_из_меню_2_не_подключаются_3_не_хочу_их_4_анимированные)
 * [1.4 Не видны иконки/фото/и т.д. в JPEG/PNG](#Не_видны_иконки_фото_и_т.д._в_JPEG_PNG)
 * [1.5 Цветовые схемы](#Цветовые_схемы)
 * [1.6 Цвета сообщений "асечников"](#Цвета_сообщений_асечников)
 * [1.7 Поддерживает ли Ткаббер Tile?](#Поддерживает_ли_Ткаббер_Tile)
 * [1.8 Поддерживает ли Ткаббер аватары?](#Поддерживает_ли_Ткаббер_аватары)
 * [1.9 Регулировка громкости звука](#Регулировка_громкости_звука)
 * [1.10 Проигрывание звука в Linux](#Проигрывание_звука_в_Linux)
 * [1.11 В старпаке/старките нет звука/поддержки JPEG,PNG](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG)
* [2 Глюки, возникающие в процессе работы](#Глюки_возникающие_в_процессе_работы)
* [3 А как мне...?](#А_как_мне...)
* [4 Всякая всячина](#Всякая_всячина)

# <a id="Внешний_вид_и_звук"></a>Внешний вид и звук
## <a id="Почему_Ткаббер_такой_страшный"></a>Почему Ткаббер такой страшный?

Changes to wiki/ru/Ткаббер_ЧаВо/Глюки.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43


































44
45
46
47
48
49
50
1
2
3
4
5
6
7
8
9
10
11
12































13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53












-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Ткаббер_ЧаВо/Глюки/index.html)


# Ткаббер ЧаВо/Глюки

Материал из Tkabber Wiki.

[Ткаббер ЧаВо](../Ткаббер_ЧаВо.md) разделился на несколько статей. В этой статье разбираются глюки и баги, терзающие Ткаббер и его пользователей. Для удобства даны ссылки на другие тематические страницы ЧаВо. 

## <a id="toc"></a>Содержание

* [1 Глюки, возникающие в процессе работы](#Глюки_возникающие_в_процессе_работы)
   * [1.1 Общие вопросы](#Общие_вопросы)
      * [1.1.1 Ткаббер и Ufanet](#Ткаббер_и_Ufanet)
      * [1.1.2 Долгая загрузка Ткаббера](#Долгая_загрузка_Ткаббера)
      * [1.1.3 Ткаббер "виснет" при попытке логина на сервер](#Ткаббер_виснет_при_попытке_логина_на_сервер)
      * [1.1.4 Пересылка файлов](#Пересылка_файлов)
      * [1.1.5 Ткаббер постоянно держит меня в состоянии "отошёл" ("away")](#Ткаббер_постоянно_держит_меня_в_состоянии_отошёл_away)
      * [1.1.6 Не могу приконнектиться к серверу через прокси](#Не_могу_приконнектиться_к_серверу_через_прокси)
      * [1.1.7 Keep alive в Ткаббере — возможно ли?](#Keep_alive_в_Ткаббере_-_возможно_ли)
      * [1.1.8 Что с грифельной доской?](#Что_с_грифельной_доской)
      * [1.1.9 Ткаббер в упор не видит SSL-сертификат для коннекта к серверу](#Ткаббер_в_упор_не_видит_SSL-сертификат_для_коннекта_к_серверу)
      * [1.1.10 Не могу отредактировать закладку конференции в ростере](#Не_могу_отредактировать_закладку_конференции_в_ростере)
      * [1.1.11 Ткаббер и iChat](#Ткаббер_и_iChat)
   * [1.2 Вопросы, связанные с Линукс](#Вопросы_связанные_с_Линукс)
      * [1.2.1 Шифрование в Ткаббере: проблемы с **gpgme/tclgpgme**](#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme)
      * [1.2.2 В Ubuntu не вводятся русские буквы в Ткаббере, chto delat?](#В_Ubuntu_не_вводятся_русские_буквы_в_Ткаббере_chto_delat)
      * [1.2.3 Ткаббер под X Window падает при попытке показать "странные" символы](#Ткаббер_под_X_Window_падает_при_попытке_показать_странные_символы)
      * [1.2.4 Не работает вставка по Control-v под X Window](#Не_работает_вставка_по_Control-v_под_X_Window)
      * [1.2.5 В Gentoo не работает сворачивание в трей](#В_Gentoo_не_работает_сворачивание_в_трей)
      * [1.2.6 Fedora 8 и Tcl/Tk 8.5](#Fedora_8_и_Tcl_Tk_8.5)
      * [1.2.7 Обновил тикль до 8.5, но Ткаббер по-прежнему запускается с 8.4](#Обновил_тикль_до_8.5_но_Ткаббер_по-прежнему_запускается_с_8.4)
      * [1.2.8 Userinfo в KDE 4.x](#Userinfo_в_KDE_4.x)
      * [1.2.9 Диалоговые окна Tk на многоголовом X11-сервере](#Диалоговые_окна_Tk_на_многоголовом_X11-сервере)
   * [1.3 Вопросы, связанные с Виндовс](#Вопросы_связанные_с_Виндовс)
      * [1.3.1 В старпаке/старките нет звука/поддержки JPEG,PNG/сжатия](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG_сжатия)
      * [1.3.2 Не работает браузер под виндами](#Не_работает_браузер_под_виндами)
      * [1.3.3 При клике на URL'е в Ткаббере запускается две Оперы и открывают страницу два раза](#При_клике_на_URLе_в_Ткаббере_запускается_две_Оперы_и_открывают_страницу_два_раза)
      * [1.3.4 Странное поведение прокрутки содержимого окна чата колесом мыши](#Странное_поведение_прокрутки_содержимого_окна_чата_колесом_мыши)
      * [1.3.5 Ошибка: wrong \# args: should be "zlib option data ?...?", что делать?](#Ошибка_wrong_N_args_should_be_zlib_option_data_..._что_делать)
      * [1.3.6 Windows, дистрибутив от ActiveState — "падения" при нажатии Alt-любая кнопка в главном окне](#Windows_дистрибутив_от_ActiveState_-_падения_при_нажатии_Alt-любая_кнопка_в_главном_окне)
      * [1.3.7 Windows, дистрибутив от ActiveState — "падения" при открытии в фоне окна со смайликом](#Windows_дистрибутив_от_ActiveState_-_падения_при_открытии_в_фоне_окна_со_смайликом)
      * [1.3.8 Фатальная ошибка в wish при запуске полноэкранных приложений под Windows](#Фатальная_ошибка_в_wish_при_запуске_полноэкранных_приложений_под_Windows)
 * [1.1 Общие вопросы](#Общие_вопросы)
  * [1.1.1 Ткаббер и Ufanet](#Ткаббер_и_Ufanet)
  * [1.1.2 Долгая загрузка Ткаббера](#Долгая_загрузка_Ткаббера)
  * [1.1.3 Ткаббер "виснет" при попытке логина на сервер](#Ткаббер_виснет_при_попытке_логина_на_сервер)
  * [1.1.4 Пересылка файлов](#Пересылка_файлов)
  * [1.1.5 Ткаббер постоянно держит меня в состоянии "отошёл" ("away")](#Ткаббер_постоянно_держит_меня_в_состоянии_отошёл_away)
  * [1.1.6 Не могу приконнектиться к серверу через прокси](#Не_могу_приконнектиться_к_серверу_через_прокси)
  * [1.1.7 Keep alive в Ткаббере — возможно ли?](#Keep_alive_в_Ткаббере_-_возможно_ли)
  * [1.1.8 Что с грифельной доской?](#Что_с_грифельной_доской)
  * [1.1.9 Ткаббер в упор не видит SSL-сертификат для коннекта к серверу](#Ткаббер_в_упор_не_видит_SSL-сертификат_для_коннекта_к_серверу)
  * [1.1.10 Не могу отредактировать закладку конференции в ростере](#Не_могу_отредактировать_закладку_конференции_в_ростере)
  * [1.1.11 Ткаббер и iChat](#Ткаббер_и_iChat)
 * [1.2 Вопросы, связанные с Линукс](#Вопросы_связанные_с_Линукс)
  * [1.2.1 Шифрование в Ткаббере: проблемы с **gpgme/tclgpgme**](#Шифрование_в_Ткаббере_проблемы_с_gpgme_tclgpgme)
   * [1.2.1 Не могу скомпилировать tclgpgme](#Не_могу_скомпилировать_tclgpgme)
   * [1.2.1 Ткаббер валится при вводе gpg-пароля](#Ткаббер_валится_при_вводе_gpg-пароля)
  * [1.2.2 В Ubuntu не вводятся русские буквы в Ткаббере, chto delat?](#В_Ubuntu_не_вводятся_русские_буквы_в_Ткаббере_chto_delat)
  * [1.2.3 Ткаббер под X Window падает при попытке показать "странные" символы](#Ткаббер_под_X_Window_падает_при_попытке_показать_странные_символы)
  * [1.2.4 Не работает вставка по Control-v под X Window](#Не_работает_вставка_по_Control-v_под_X_Window)
  * [1.2.5 В Gentoo не работает сворачивание в трей](#В_Gentoo_не_работает_сворачивание_в_трей)
  * [1.2.6 Fedora 8 и Tcl/Tk 8.5](#Fedora_8_и_Tcl_Tk_8.5)
  * [1.2.7 Обновил тикль до 8.5, но Ткаббер по-прежнему запускается с 8.4](#Обновил_тикль_до_8.5_но_Ткаббер_по-прежнему_запускается_с_8.4)
  * [1.2.8 Userinfo в KDE 4.x](#Userinfo_в_KDE_4.x)
  * [1.2.9 Диалоговые окна Tk на многоголовом X11-сервере](#Диалоговые_окна_Tk_на_многоголовом_X11-сервере)
 * [1.3 Вопросы, связанные с Виндовс](#Вопросы_связанные_с_Виндовс)
  * [1.3.1 В старпаке/старките нет звука/поддержки JPEG,PNG/сжатия](#В_старпаке_старките_нет_звука_поддержки_JPEGPNG_сжатия)
  * [1.3.2 Не работает браузер под виндами](#Не_работает_браузер_под_виндами)
  * [1.3.3 При клике на URL'е в Ткаббере запускается две Оперы и открывают страницу два раза](#При_клике_на_URLе_в_Ткаббере_запускается_две_Оперы_и_открывают_страницу_два_раза)
  * [1.3.4 Странное поведение прокрутки содержимого окна чата колесом мыши](#Странное_поведение_прокрутки_содержимого_окна_чата_колесом_мыши)
   * [1.3.4 Конкретные мыши и их настройки](#Конкретные_мыши_и_их_настройки)
  * [1.3.5 Ошибка: wrong \# args: should be "zlib option data ?...?", что делать?](#Ошибка_wrong_N_args_should_be_zlib_option_data_..._что_делать)
  * [1.3.6 Windows, дистрибутив от ActiveState — "падения" при нажатии Alt-любая кнопка в главном окне](#Windows_дистрибутив_от_ActiveState_-_падения_при_нажатии_Alt-любая_кнопка_в_главном_окне)
  * [1.3.7 Windows, дистрибутив от ActiveState — "падения" при открытии в фоне окна со смайликом](#Windows_дистрибутив_от_ActiveState_-_падения_при_открытии_в_фоне_окна_со_смайликом)
  * [1.3.8 Фатальная ошибка в wish при запуске полноэкранных приложений под Windows](#Фатальная_ошибка_в_wish_при_запуске_полноэкранных_приложений_под_Windows)
* [2 Внешний вид и звук](#Внешний_вид_и_звук)
* [3 А как мне...?](#А_как_мне...)
* [4 Всякая всячина](#Всякая_всячина)

# <a id="Глюки_возникающие_в_процессе_работы"></a>Глюки, возникающие в процессе работы
## <a id="Общие_вопросы"></a>Общие вопросы

Changes to wiki/ru/Ткаббер_ЧаВо/Как_мне..._.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50






































51
52
53
54
55
56
57
1
2
3
4
5
6
7
8
9
10
11
12






































13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57












-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Ткаббер_ЧаВо/Как_мне...?)


# Ткаббер ЧаВо/Как мне...?

Материал из Tkabber Wiki

[Ткаббер ЧаВо](../Ткаббер_ЧаВо.md) разделился на несколько статей. В этой статье мы поговорим о "затачивании" Ткаббера под конкретные нужды пользователя. Для удобства даны ссылки на другие тематические страницы ЧаВо. 

## <a id="toc"></a>Содержание

* [1 А как мне...?](#А_как_мне...)
   * [1.1 Настройка Ткаббера (Не найду файл config.tcl)](#Настройка_Ткаббера_Не_найду_файл_config.tcl)
   * [1.2 Как настроить "автологин"?](#Как_настроить_автологин)
   * [1.3 Работать с RSS](#Работать_с_RSS)
   * [1.4 Отправка сообщений по Ctrl-Enter](#Отправка_сообщений_по_Ctrl-Enter)
   * [1.5 Отправка сообщений по NumPad Enter](#Отправка_сообщений_по_NumPad_Enter)
   * [1.6 Одновременная работа с несколькими аккаунтами](#Одновременная_работа_с_несколькими_аккаунтами)
   * [1.7 Как насчёт автозахода на конференции?](#Как_насчёт_автозахода_на_конференции)
   * [1.8 Сжатие трафика в Ткаббере](#Сжатие_трафика_в_Ткаббере)
   * [1.9 Выделение текста жирным, курсивом и подчёркиванием](#Выделение_текста_жирным_курсивом_и_подчёркиванием)
   * [1.10 Ввод "хитрых" юникодных символов](#Ввод_хитрых_юникодных_символов)
   * [1.11 Игнор — великая вещь!](#Игнор_-_великая_вещь)
   * [1.12 Подтверждения](#Подтверждения)
   * [1.13 Удалённое управление](#Удалённое_управление)
   * [1.14 Команды Ткаббера](#Команды_Ткаббера)
   * [1.15 Скрытие версий клиента и ОС](#Скрытие_версий_клиента_и_ОС)
   * [1.16 Как подключить плагин?](#Как_подключить_плагин)
   * [1.17 Как уменьшить трафик?](#Как_уменьшить_трафик)
   * [1.18 Самостоятельная сборка Старпака](#Самостоятельная_сборка_Старпака)
   * [1.19 "Быстрый" Copy/Paste помимо буфера Windows](#Быстрый_Copy_Paste_помимо_буфера_Windows)
   * [1.20 Проверка орфографии](#Проверка_орфографии)
   * [1.21 Как перенести ростер с сервера на сервер? Импортировать контакты ICQ?](#Как_перенести_ростер_с_сервера_на_сервер_Импортировать_контакты_ICQ)
   * [1.22 Как почитать протокол общения "в привате" с участником групчата, которого больше нет в комнате?](#Как_почитать_протокол_общения_в_привате_с_участником_групчата_которого_больше_нет_в_комнате)
   * [1.23 Указать причину кика/бана](#Указать_причину_кика_бана)
   * [1.24 Блокировать спам с MRIM-гейта](#Блокировать_спам_с_MRIM-гейта)
   * [1.25 Конфигурирование конференции](#Конфигурирование_конференции)
   * [1.26 Отключить к (нецензурные слова пропущены) splash-окно](#Отключить_к_нецензурные_слова_пропущены_splash-окно)
   * [1.27 Подключить Ткаббер через SOCKS-сервер](#Подключить_Ткаббер_через_SOCKS-сервер)
   * [1.28 Подключить Ткаббер через Tor, для анонимного использования](#Подключить_Ткаббер_через_Tor_для_анонимного_использования)
   * [1.29 Подключиться к Google Talk](#Подключиться_к_Google_Talk)
   * [1.30 Победить предупреждение о проблеме с сертификатом сервера](#Победить_предупреждение_о_проблеме_с_сертификатом_сервера)
   * [1.31 Работать с версией из SVN](#Работать_с_версией_из_SVN)
   * [1.32 Задолбало выпадающее меню в контекстном меню MUC-юзера](#Задолбало_выпадающее_меню_в_контекстном_меню_MUC-юзера)
   * [1.33 Как мне собрать новый tclgpg с googlecode?](#Как_мне_собрать_новый_tclgpg_с_googlecode)
   * [1.34 Как настроить работу с плагином OSD?](#Как_настроить_работу_с_плагином_OSD)
   * [1.35 Включить другой язык интерфейса?](#Включить_другой_язык_интерфейса)
   * [1.36 Изменить и зафиксировать ширину ростера?](#Изменить_и_зафиксировать_ширину_ростера)
   * [1.37 Изменить шрифт в окошке ввода сообщения?](#Изменить_шрифт_в_окошке_ввода_сообщения)
   * [1.38 Изменить интервал повторного подключения к серверу?](#Изменить_интервал_повторного_подключения_к_серверу)
 * [1.1 Настройка Ткаббера (Не найду файл config.tcl)](#Настройка_Ткаббера_Не_найду_файл_config.tcl)
 * [1.2 Как настроить "автологин"?](#Как_настроить_автологин)
 * [1.3 Работать с RSS](#Работать_с_RSS)
 * [1.4 Отправка сообщений по Ctrl-Enter](#Отправка_сообщений_по_Ctrl-Enter)
 * [1.5 Отправка сообщений по NumPad Enter](#Отправка_сообщений_по_NumPad_Enter)
 * [1.6 Одновременная работа с несколькими аккаунтами](#Одновременная_работа_с_несколькими_аккаунтами)
 * [1.7 Как насчёт автозахода на конференции?](#Как_насчёт_автозахода_на_конференции)
 * [1.8 Сжатие трафика в Ткаббере](#Сжатие_трафика_в_Ткаббере)
 * [1.9 Выделение текста жирным, курсивом и подчёркиванием](#Выделение_текста_жирным_курсивом_и_подчёркиванием)
 * [1.10 Ввод "хитрых" юникодных символов](#Ввод_хитрых_юникодных_символов)
 * [1.11 Игнор — великая вещь!](#Игнор_-_великая_вещь)
 * [1.12 Подтверждения](#Подтверждения)
 * [1.13 Удалённое управление](#Удалённое_управление)
 * [1.14 Команды Ткаббера](#Команды_Ткаббера)
 * [1.15 Скрытие версий клиента и ОС](#Скрытие_версий_клиента_и_ОС)
 * [1.16 Как подключить плагин?](#Как_подключить_плагин)
 * [1.17 Как уменьшить трафик?](#Как_уменьшить_трафик)
 * [1.18 Самостоятельная сборка Старпака](#Самостоятельная_сборка_Старпака)
 * [1.19 "Быстрый" Copy/Paste помимо буфера Windows](#Быстрый_Copy_Paste_помимо_буфера_Windows)
 * [1.20 Проверка орфографии](#Проверка_орфографии)
 * [1.21 Как перенести ростер с сервера на сервер? Импортировать контакты ICQ?](#Как_перенести_ростер_с_сервера_на_сервер_Импортировать_контакты_ICQ)
 * [1.22 Как почитать протокол общения "в привате" с участником групчата, которого больше нет в комнате?](#Как_почитать_протокол_общения_в_привате_с_участником_групчата_которого_больше_нет_в_комнате)
 * [1.23 Указать причину кика/бана](#Указать_причину_кика_бана)
 * [1.24 Блокировать спам с MRIM-гейта](#Блокировать_спам_с_MRIM-гейта)
 * [1.25 Конфигурирование конференции](#Конфигурирование_конференции)
 * [1.26 Отключить к (нецензурные слова пропущены) splash-окно](#Отключить_к_нецензурные_слова_пропущены_splash-окно)
 * [1.27 Подключить Ткаббер через SOCKS-сервер](#Подключить_Ткаббер_через_SOCKS-сервер)
 * [1.28 Подключить Ткаббер через Tor, для анонимного использования](#Подключить_Ткаббер_через_Tor_для_анонимного_использования)
 * [1.29 Подключиться к Google Talk](#Подключиться_к_Google_Talk)
 * [1.30 Победить предупреждение о проблеме с сертификатом сервера](#Победить_предупреждение_о_проблеме_с_сертификатом_сервера)
 * [1.31 Работать с версией из SVN](#Работать_с_версией_из_SVN)
 * [1.32 Задолбало выпадающее меню в контекстном меню MUC-юзера](#Задолбало_выпадающее_меню_в_контекстном_меню_MUC-юзера)
 * [1.33 Как мне собрать новый tclgpg с googlecode?](#Как_мне_собрать_новый_tclgpg_с_googlecode)
 * [1.34 Как настроить работу с плагином OSD?](#Как_настроить_работу_с_плагином_OSD)
 * [1.35 Включить другой язык интерфейса?](#Включить_другой_язык_интерфейса)
 * [1.36 Изменить и зафиксировать ширину ростера?](#Изменить_и_зафиксировать_ширину_ростера)
 * [1.37 Изменить шрифт в окошке ввода сообщения?](#Изменить_шрифт_в_окошке_ввода_сообщения)
 * [1.38 Изменить интервал повторного подключения к серверу?](#Изменить_интервал_повторного_подключения_к_серверу)
* [2 Внешний вид и звук](#Внешний_вид_и_звук)
* [3 Глюки, возникающие в процессе работы](#Глюки_возникающие_в_процессе_работы)
* [4 Всякая всячина](#Всякая_всячина)

# <a id="А_как_мне..."></a>А как мне...?
## <a id="Настройка_Ткаббера_Не_найду_файл_config.tcl"></a>Настройка Ткаббера (Не найду файл config.tcl)

Changes to wiki/ru/Ткаббер_ЧаВо/Разное.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28


















29
30
31
32
33
34
35
1
2
3
4
5
6
7
8
9
10
11
12
















13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37












-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Ткаббер_ЧаВо/Разное/index.html)


# Ткаббер ЧаВо/Разное

Материал из Tkabber Wiki

[Ткаббер ЧаВо](../Ткаббер_ЧаВо.md) разделился на несколько статей. Здесь рассматриваются вопросы разного (подчас совершенно странного) характера. Для удобства даны ссылки на другие тематические страницы ЧаВо. 

## <a id="toc"></a>Содержание

* [1 Всякая всячина](#Всякая_всячина)
   * [1.1 Что такое...?](#Что_такое...)
      * [1.1.1 Ростер](#Ростер)
      * [1.1.2 Ресурс](#Ресурс)
      * [1.1.3 Приоритет](#Приоритет)
      * [1.1.4 Консоль Ткаббера](#Консоль_Ткаббера)
      * [1.1.5 Репозиторий teo](#Репозиторий_teo)
   * [1.2 Разное](#Разное)
      * [1.2.1 ...а мне ИГРАТЬ охота!!!](#...а_мне_ИГРАТЬ_охота)
      * [1.2.2 Старые версии Ткаббера и плагинов](#Старые_версии_Ткаббера_и_плагинов)
      * [1.2.3 Работает ли Ткаббер на КПК?](#Работает_ли_Ткаббер_на_КПК)
      * [1.2.4 Почему Ткаббер написан именно на Tcl/Tk?](#Почему_Ткаббер_написан_именно_на_Tcl_Tk)
      * [1.2.5 Кто убил Лору Палмер? ©](#Кто_убил_Лору_Палмер_©)
      * [1.2.6 У вас в конференции топик с ошибкой написан](#У_вас_в_конференции_топик_с_ошибкой_написан)
      * [1.2.7 А добавят ли когда-нибудь в Ткаббер...?](#А_добавят_ли_когда-нибудь_в_Ткаббер...)
   * [1.3 Вопросы, связанные с протоколом XMPP](#Вопросы_связанные_с_протоколом_XMPP)
      * [1.3.1 MUC](#MUC)
 * [1.1 Что такое...?](#Что_такое...)
  * [1.1.1 Ростер](#Ростер)
  * [1.1.2 Ресурс](#Ресурс)
  * [1.1.3 Приоритет](#Приоритет)
  * [1.1.4 Консоль Ткаббера](#Консоль_Ткаббера)
  * [1.1.5 Репозиторий teo](#Репозиторий_teo)
 * [1.2 Разное](#Разное)
  * [1.2.1 ...а мне ИГРАТЬ охота!!!](#...а_мне_ИГРАТЬ_охота)
  * [1.2.2 Старые версии Ткаббера и плагинов](#Старые_версии_Ткаббера_и_плагинов)
  * [1.2.3 Работает ли Ткаббер на КПК?](#Работает_ли_Ткаббер_на_КПК)
  * [1.2.4 Почему Ткаббер написан именно на Tcl/Tk?](#Почему_Ткаббер_написан_именно_на_Tcl_Tk)
  * [1.2.5 Кто убил Лору Палмер? ©](#Кто_убил_Лору_Палмер_©)
  * [1.2.6 У вас в конференции топик с ошибкой написан](#У_вас_в_конференции_топик_с_ошибкой_написан)
  * [1.2.7 А добавят ли когда-нибудь в Ткаббер...?](#А_добавят_ли_когда-нибудь_в_Ткаббер...)
 * [1.3 Вопросы, связанные с протоколом XMPP](#Вопросы_связанные_с_протоколом_XMPP)
  * [1.3.1 MUC](#MUC)
   * [1.3.1 Кто есть кто в конференции?](#Кто_есть_кто_в_конференции)
   * [1.3.1 Не работают инвайты](#Не_работают_инвайты)
* [2 Внешний вид и звук](#Внешний_вид_и_звук)
* [3 Глюки, возникающие в процессе работы](#Глюки_возникающие_в_процессе_работы)
* [4 А как мне...?](#А_как_мне...)

# <a id="Всякая_всячина"></a>Всякая всячина
## <a id="Что_такое..."></a>Что такое...?

Changes to wiki/ru/Ткаббер_и_DNS.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16



17
18
19
20
21
22
23
1
2
3
4
5
6
7
8
9
10
11
12
13



14
15
16
17
18
19
20
21
22
23













-
-
-
+
+
+







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Ткаббер_и_DNS/index.html)


# Ткаббер и DNS

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 Место и роль DNS в процессе соединения с сервером](#Место_и_роль_DNS_в_процессе_соединения_с_сервером)
* [2 Первая проблема: "TCP vs UDP"](#Первая_проблема_TCP_vs_UDP)
* [3 Вторая проблема: UDP блокируется файрволом](#Вторая_проблема_UDP_блокируется_файрволом)
* [4 Ручное разрешение записей DNS](#Ручное_разрешение_записей_DNS)
   * [4.1 A-записи](#A-записи)
   * [4.2 SRV-записи](#SRV-записи)
   * [4.3 TXT-записи для HTTP-poll](#TXT-записи_для_HTTP-poll)
 * [4.1 A-записи](#A-записи)
 * [4.2 SRV-записи](#SRV-записи)
 * [4.3 TXT-записи для HTTP-poll](#TXT-записи_для_HTTP-poll)

# <a id="Место_и_роль_DNS_в_процессе_соединения_с_сервером"></a>Место и роль DNS в процессе соединения с сервером
Согласно [RFC \#3920](http://www.xmpp.org/rfcs/rfc3920.html), Ткаббер начинает долгую дорогу в дюнах своего соединения, пытаясь выполнить [SRV](ftp://ftp.isi.edu/in-notes/rfc2782.txt)-запрос к DNS. Запрос этот служит, чтобы выяснить, какой именно компьютер обслуживает _XMPP-домен,_ в котором вы владеете учётной записью. Другими словами, `jabber.ru` в JID'е `vasya@jabber.ru` означает не сервер, а домен. Сервер может иметь совершенно другое имя в DNS, и самих серверов у домена может быть несколько (у jabber.ru, например, их два). 

Далее Ткабберу может понадобиться выполнить ещё минимум один запрос, чтобы разрешить полученное на первом этапе имя сервера в его IP-адрес. 

Здесь могут возникнуть две проблемы: 

Changes to wiki/ru/Удалённое_управление_с_помощью_send.md.

14
15
16
17
18
19
20
21
22


23
24
25
26
27
28
29
30
31
32









33
34
35
36
37
38
39
14
15
16
17
18
19
20


21
22
23









24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39







-
-
+
+

-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+







Для tkabber-а идентификатором будет "tkabber" для первого клиента и "tkabber \#N" для остальных. 

## <a id="toc"></a>Содержание

* [1 Управление клиентом локально](#Управление_клиентом_локально)
* [2 Управление клиентом удаленно](#Управление_клиентом_удаленно)
* [3 Определение основных переменных](#Определение_основных_переменных)
   * [3.1 $myconnid](#$myconnid)
   * [3.2 $mychatid](#$mychatid)
 * [3.1 $myconnid](#$myconnid)
 * [3.2 $mychatid](#$mychatid)
* [4 Выполнение основных действий](#Выполнение_основных_действий)
   * [4.1 смена профиля](#смена_профиля)
   * [4.2 Login (подключится к серверу)](#Login_подключится_к_серверу)
   * [4.3 Logout (оборвать соединение)](#Logout_оборвать_соединение)
   * [4.4 Join (войти в конференцию)](#Join_войти_в_конференцию)
   * [4.5 Leave (выйти из конференции)](#Leave_выйти_из_конференции)
   * [4.6 смена ника](#смена_ника)
   * [4.7 отправка сообщения](#отправка_сообщения)
   * [4.8 смена статуса](#смена_статуса)
   * [4.9 смена состояния](#смена_состояния)
 * [4.1 смена профиля](#смена_профиля)
 * [4.2 Login (подключится к серверу)](#Login_подключится_к_серверу)
 * [4.3 Logout (оборвать соединение)](#Logout_оборвать_соединение)
 * [4.4 Join (войти в конференцию)](#Join_войти_в_конференцию)
 * [4.5 Leave (выйти из конференции)](#Leave_выйти_из_конференции)
 * [4.6 смена ника](#смена_ника)
 * [4.7 отправка сообщения](#отправка_сообщения)
 * [4.8 смена статуса](#смена_статуса)
 * [4.9 смена состояния](#смена_состояния)
* [5 Управление клиентом из скрипта](#Управление_клиентом_из_скрипта)
* [6 См. также](#См._также)

## <a id="Управление_клиентом_локально"></a>Управление клиентом локально

Если клиент запущен на тех же Иксах что и терминал c wish, то все просто:  

Deleted wiki/ru/Установка_и_настройка_в_Ubuntu.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28




























-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Установка_и_настройка_в_Ubuntu/index.html)

# Установка и настройка в Ubuntu

Материал из Tkabber Wiki

## Быстрая настройка шрифтов

    echo 'deb     http://people.debian.org/~sgolovan/debian/ lenny main'  |  sudo tee -a /etc/apt/sources.list
    echo 'deb-src http://people.debian.org/~sgolovan/debian/ lenny main'  |  sudo tee -a /etc/apt/sources.list && sudo apt-get update

введите пароль и продолжайте

    sudo apt-get install tkabber tkabber-plugins tk8.5 libsnack2 tktray msttcorefonts

и это

    sudo update-alternatives --config wish

нажмите цифорку соответствующую пункту "/usr/bin/wish8.5" а потом на Enter и
используем.

теперь ваш tkabber установлен и в убунте у него нормальные шрифты. и вам почти
не пришлось ничего  читать :)

Если вам не помогло это руководство, или у вас возникли вопросы, то смело
нажимайте на "Обсуждение" вверху страницы. и опишите в чём именно у вас
возникли трудности.

Changes to wiki/ru/Участник_Bigote.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15





16
17
18
19
20
21





22
23
24
25
26
27





28
29
30
31
32
33
34
1
2
3
4
5
6
7
8
9
10





11
12
13
14
15
16





17
18
19
20
21
22





23
24
25
26
27
28
29
30
31
32
33
34










-
-
-
-
-
+
+
+
+
+

-
-
-
-
-
+
+
+
+
+

-
-
-
-
-
+
+
+
+
+







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Участник:Bigote/index.html)


# Участник:Bigote

Материал из Tkabber Wiki

## <a id="toc"></a>Содержание

* [1 По-русски](#По-русски)
   * [1.1 Краткие биографические сведения](#Краткие_биографические_сведения)
   * [1.2 Языки](#Языки)
   * [1.3 Компьютерный опыт](#Компьютерный_опыт)
   * [1.4 Творчество и хобби](#Творчество_и_хобби)
   * [1.5 Контакты](#Контакты)
 * [1.1 Краткие биографические сведения](#Краткие_биографические_сведения)
 * [1.2 Языки](#Языки)
 * [1.3 Компьютерный опыт](#Компьютерный_опыт)
 * [1.4 Творчество и хобби](#Творчество_и_хобби)
 * [1.5 Контакты](#Контакты)
* [2 In English](#In_English)
   * [2.1 Short Bio](#Short_Bio)
   * [2.2 Languages](#Languages)
   * [2.3 Computer experience](#Computer_experience)
   * [2.4 Creativity and Hobbies](#Creativity_and_Hobbies)
   * [2.5 Contacts](#Contacts)
 * [2.1 Short Bio](#Short_Bio)
 * [2.2 Languages](#Languages)
 * [2.3 Computer experience](#Computer_experience)
 * [2.4 Creativity and Hobbies](#Creativity_and_Hobbies)
 * [2.5 Contacts](#Contacts)
* [3 En español](#En_español)
   * [3.1 Nota biográfica](#Nota_biográfica)
   * [3.2 Idiomas](#Idiomas)
   * [3.3 Experiencia con los ordenadores](#Experiencia_con_los_ordenadores)
   * [3.4 Creatividad y hobby](#Creatividad_y_hobby)
   * [3.5 Contactos](#Contactos)
 * [3.1 Nota biográfica](#Nota_biográfica)
 * [3.2 Idiomas](#Idiomas)
 * [3.3 Experiencia con los ordenadores](#Experiencia_con_los_ordenadores)
 * [3.4 Creatividad y hobby](#Creatividad_y_hobby)
 * [3.5 Contactos](#Contactos)

# <a id="По-русски"></a>По-русски
## <a id="Краткие_биографические_сведения"></a>Краткие биографические сведения

*  Ф.И.О.: Юдин Сергей Анатольевич. 
*  Дата рождения: 9 ноября 1969 года. 
*  Место рождения: г. Курганинск Краснодарского края. 

Changes to wiki/ru/Участник_Feez.md.

8
9
10
11
12
13
14
15
16
17
18
19
20
21







22
23
24
25
26
27

28
29
30
31
32
33
34
35

36
37
38
39
40
41
42

43
44
45
46
47
48
49
50
51

52
53
54
55
56
57
58
8
9
10
11
12
13
14







15
16
17
18
19
20
21
22
23
24
25
26

27
28
29
30
31
32
33
34

35
36
37
38
39
40
41

42
43
44
45
46
47
48
49
50

51
52
53
54
55
56
57
58







-
-
-
-
-
-
-
+
+
+
+
+
+
+





-
+







-
+






-
+








-
+







*  JID: [http://jabber.autocom.pl/estatus.php?jid=feez@jabber.ru&iconset=c1&.png](http://jabber.autocom.pl/estatus.php?jid=feez@jabber.ru&iconset=c1&.png) feez@jabber.ru 
*  LJ: [http://oc\_feez.livejournal.com/profile/](http://oc_feez.livejournal.com/profile/) 
*  Языки: Русский, Esperanto, English 

## <a id="toc"></a>Содержание

* [1 Содержание](#Содержание)
   * [1.1 Теория](#Теория)
   * [1.2 Статьи](татьи)
   * [1.3 Разработка](#Разработка)
   * [1.4 Практика](#Практика)
   * [1.5 Запчасти](#Запчасти)
   * [1.6 Обсуждения](#Обсуждения)
   * [1.7 Cлужебные](#Cлужебные)
 * [1.1 [Теория](Теория.md)](#ТеорияТеория.md)
 * [1.2 [Статьи](Теория.md#Другие_статьи)](#СтатьиТеория.mdNДругие_статьи)
 * [1.3 [Разработка](Разработка.md)](#РазработкаРазработка.md)
 * [1.4 [Практика](Практика.md)](#ПрактикаПрактика.md)
 * [1.5 Запчасти](#Запчасти)
 * [1.6 Обсуждения](#Обсуждения)
 * [1.7 Cлужебные](#Cлужебные)

## <a id="Содержание"></a>Содержание

(для быстрого поиска) 

### <a id="Теория"></a>[Теория](Теория.md)
### <a id="ТеорияТеория.md"></a>[Теория](Теория.md)
 
*  [Терминология](Терминология.md) 
*  [о Ткаббере](Ткаббер_-_чемпион_.md) 
 
*  [Начинающим](Начинающим.md) 
*  [Настройка Ткаббера: азы и глубже](Настройка_Ткаббера__азы_и_глубже.md) 
  
### <a id="Статьи"></a>[Статьи](Теория.md#Другие_статьи)
### <a id="СтатьиТеория.mdNДругие_статьи"></a>[Статьи](Теория.md#Другие_статьи)
 
*  [Пересылка файлов: теория](Пересылка_файлов__теория.md) 
*  [Удалённое управление с помощью send](Удалённое_управление_с_помощью_send.md) 
*  [Шифрование в Ткаббере](Шифрование_в_Ткаббере.md) 
*  [Ткаббер наизнанку](Ткаббер_наизнанку.md) 
  
### <a id="Разработка"></a>[Разработка](Разработка.md)
### <a id="РазработкаРазработка.md"></a>[Разработка](Разработка.md)
 
*  [Wish и русская раскладка в Windows](Wish_и_русская_раскладка_в_Windows.md) 
*  [MUC Ignore](MUC_Ignore.md) 
*  [Nick coloring](Nick_coloring.md) 
*  [Config dir](Config_dir.md) 
*  [Спамодавка списками приватности](Спамодавка_списками_приватности.md) 
*  [Новый вид Tk в 8.5](Новый_вид_Tk_в_8.5.md) 

### <a id="Практика"></a>[Практика](Практика.md)
### <a id="ПрактикаПрактика.md"></a>[Практика](Практика.md)
 
*  [Ткаббер ЧаВо](Ткаббер_ЧаВо.md) 
*  [Смайлики и аватары](Смайлики_и_аватары.md) 
*  [Цветовые темы и пиктограммы](Цветовые_темы_и_пиктограммы.md) 
*  [Проблемы со звуком](Проблемы_со_звуком.md) 
*  [Нетривиальные настройки](Нетривиальные_настройки.md) 
  

Changes to wiki/ru/Файл_конфигурации.md.

8
9
10
11
12
13
14
15
16
17
18
19
20






21
22
23
24
25


26
27
28
29
30
31
32
8
9
10
11
12
13
14






15
16
17
18
19
20
21
22
23


24
25
26
27
28
29
30
31
32







-
-
-
-
-
-
+
+
+
+
+
+



-
-
+
+







![(!)](../images/Hammer.png) **Сделать:** потихоньку прибить эту статью или по крайней мере заставить шагать в ногу с сегодняшним днём (например, заменить все вхождения **~/.tkabber** на **[$::configdir]($__configdir.md)**) 

Если рабочие программные файлы можно сравнить с мотором Ткаббера, то файл конфигурации - это его рулевая система. В нём хранятся все настройки, мыслимые и немыслимые (если вы хорошо знаете "тикль", то можете сами дописывать что-нибудь новое, и пределы ограничиваются лишь возможностями языка и вашими усердием, знаниями и фантазией). Вы можете написать свой собственный конфиг, а можете использовать опыт других. В этой статье мы рассмотрим четыре конфига, доступные в директории примеров **/usr/share/tkabber/examples**: config.tcl, teo-config.tcl, mtr-config.tcl, badlop-config.tcl. Порядок выбран именно такой - от простого к сложному, хотя возможно, Windows-пользователям захочется побыстрее прочитать про конфиг от **badlop** - он не только "кросс-платформенный", но и вообще весьма разработан. Но если вы новичок, и все эти непонятные строчки в конфигах вас пугают, советуем двигаться постепенно. 

## <a id="toc"></a>Содержание

* [1 Config.tcl](#Config.tcl)
   * [1.1 Настройка параметров логина](#Настройка_параметров_логина)
   * [1.2 Внешний вид](#Внешний_вид)
      * [1.2.1 Цветовые схемы](#Цветовые_схемы)
      * [1.2.2 Всплывающие подсказки](#Всплывающие_подсказки)
      * [1.2.3 Работа с ссылками](#Работа_с_ссылками)
      * [1.2.4 Аватары и смайлики](#Аватары_и_смайлики)
 * [1.1 Настройка параметров логина](#Настройка_параметров_логина)
 * [1.2 Внешний вид](#Внешний_вид)
  * [1.2.1 Цветовые схемы](#Цветовые_схемы)
  * [1.2.2 Всплывающие подсказки](#Всплывающие_подсказки)
  * [1.2.3 Работа с ссылками](#Работа_с_ссылками)
  * [1.2.4 Аватары и смайлики](#Аватары_и_смайлики)
* [2 Teo-config.tcl](#Teo-config.tcl)
* [3 MTR-config.tcl](#MTR-config.tcl)
* [4 Badlop-config.tcl](#Badlop-config.tcl)
   * [4.1 Badlop-config-home.tcl](#Badlop-config-home.tcl)
   * [4.2 Собственно badlop-config.tcl](#Собственно_badlop-config.tcl)
 * [4.1 Badlop-config-home.tcl](#Badlop-config-home.tcl)
 * [4.2 Собственно badlop-config.tcl](#Собственно_badlop-config.tcl)
* [5 Попытка объяснить конфигурирование Tkabber'a с другой стороны](#Попытка_объяснить_конфигурирование_Tkabbera_с_другой_стороны)

# <a id="Config.tcl"></a>Config.tcl
Этот конфиг создан автором Ткаббера - Алексеем Щепиным (**[xmpp:aleksey@jabber.ru](xmpp:aleksey@jabber.ru)**). Он довольно простой и содержит только основные настройки. Для начала в самый раз. 

## <a id="Настройка_параметров_логина"></a>Настройка параметров логина

Changes to wiki/ru/Цветовые_темы_и_пиктограммы.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18






19
20
21
22
23
24
25
1
2
3
4
5
6
7
8
9
10
11
12






13
14
15
16
17
18
19
20
21
22
23
24
25












-
-
-
-
-
-
+
+
+
+
+
+







[//]: # (Generated from ../selected/ru.tkabber.jabe.ru/index.php/Цветовые_темы_и_пиктограммы/index.html)


# Цветовые темы и пиктограммы

Материал из Tkabber Wiki.

На этой странице будут выкладываться файлы самодельных цветовых схем (xrdb) и наборы пиктограмм для ростера, тулбара и прочих мест, где в Ткаббере используются иконки. 

## <a id="toc"></a>Содержание

* [1 Пиктограммы](#Пиктограммы)
   * [1.1 Quote](#Quote)
   * [1.2 Classic](#Classic)
   * [1.3 Quake 3 Arena (q3a)](#Quake_3_Arena_q3a)
   * [1.4 2Stars](#2Stars)
   * [1.5 Lamps](#Lamps)
   * [1.6 Stars](#Stars)
 * [1.1 Quote](#Quote)
 * [1.2 Classic](#Classic)
 * [1.3 Quake 3 Arena (q3a)](#Quake_3_Arena_q3a)
 * [1.4 2Stars](#2Stars)
 * [1.5 Lamps](#Lamps)
 * [1.6 Stars](#Stars)

# <a id="Пиктограммы"></a>Пиктограммы
Чтобы использовать наборы иконок, надо распаковать их в каталог ~/.tkabber/pixmaps  (или его аналог в Windows %APPDATA%\\Tkabber\\pixmaps). Затем перезапустите Ткаббер и идите в **Настройки → Main Interface**. Опция выбора текущей темы находится почти в самом низу. Выбирайте нужную и применяйте изменения — иконки сразу поменяются на выбранные. 

Если вы собираетесь использовать пиктограммы, выполненные в формате, отличном от [GIF](http://ru.wikipedia.org/wiki/GIF), то у вас должен стоять пакет [Img](http://wiki.tcl.tk/Img). Это не проблема, если у вас установлена полная версия интерпретатора Tcl/Tk, если же вы счастливый обладатель старпака, то вам [сюда](0.9.x/ЧаВо.md#В_старпаке_старките_нет_звука_поддержки_JPEGPNG_сжатия); 

## <a id="Quote"></a>Quote

Changes to wiki/ru/Чебуратор.md.

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38






















39
40

41
42
43
44



45
46
47
48


49
50
51
52
53
54
55
10
11
12
13
14
15
16






















17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

40
41



42
43
44
45
46


47
48
49
50
51
52
53
54
55







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+

-
-
-
+
+
+


-
-
+
+







Теперь о том, как можно строить обсуждение и вносить предложения тут. Каждая фича этого конфигуратора сделана в виде отдельного раздела. Если кому-то надо чего-то добавить, в разделе пусть создаёт подраздел и туда пишет пожелания. Новый участник - новые пожелания. Не забывайте также об "Обсуждении" статьи (ссылка наверху, рядом с "Править"). 

## <a id="toc"></a>Содержание

* [1 Из чего состоит](#Из_чего_состоит)
* [2 Идея работы конфигуратора](#Идея_работы_конфигуратора)
* [3 Как выглядит](#Как_выглядит)
   * [3.1 Цветовая схема](#Цветовая_схема)
      * [3.1.1 Fixer](#Fixer)
      * [3.1.2 Bigote](#Bigote)
      * [3.1.3 Kostix](#Kostix)
      * [3.1.4 Bigote](#Bigote)
   * [3.2 Набор иконок ростера](#Набор_иконок_ростера)
      * [3.2.1 Fixer](#Fixer)
      * [3.2.2 Bigote](#Bigote)
      * [3.2.3 Archimed](#Archimed)
      * [3.2.4 Bigote](#Bigote)
   * [3.3 Звуковая схема](#Звуковая_схема)
      * [3.3.1 Fixer](#Fixer)
      * [3.3.2 Bigote](#Bigote)
   * [3.4 Выбор шрифта](#Выбор_шрифта)
   * [3.5 Подтверждение](#Подтверждение)
      * [3.5.1 Fixer](#Fixer)
      * [3.5.2 Bigote](#Bigote)
      * [3.5.3 Archimed](#Archimed)
      * [3.5.4 Bigote](#Bigote)
   * [3.6 Параметры логина](#Параметры_логина)
   * [3.7 Параметры передачи файлов](#Параметры_передачи_файлов)
   * [3.8 Показ аватар](#Показ_аватар)
 * [3.1 Цветовая схема](#Цветовая_схема)
  * [3.1.1 Fixer](#Fixer)
  * [3.1.2 Bigote](#Bigote)
  * [3.1.3 [Kostix](Участник_Kostix.md)](#KostixУчастник_Kostix.md)
  * [3.1.4 Bigote](#Bigote)
 * [3.2 Набор иконок ростера](#Набор_иконок_ростера)
  * [3.2.1 Fixer](#Fixer)
  * [3.2.2 Bigote](#Bigote)
  * [3.2.3 Archimed](#Archimed)
  * [3.2.4 Bigote](#Bigote)
 * [3.3 Звуковая схема](#Звуковая_схема)
  * [3.3.1 Fixer](#Fixer)
  * [3.3.2 Bigote](#Bigote)
 * [3.4 Выбор шрифта](#Выбор_шрифта)
 * [3.5 Подтверждение](#Подтверждение)
  * [3.5.1 Fixer](#Fixer)
  * [3.5.2 Bigote](#Bigote)
  * [3.5.3 Archimed](#Archimed)
  * [3.5.4 Bigote](#Bigote)
 * [3.6 Параметры логина](#Параметры_логина)
 * [3.7 Параметры передачи файлов](#Параметры_передачи_файлов)
 * [3.8 Показ аватар](#Показ_аватар)
* [4 Завершение](#Завершение)
      * [4 Archimed](#Archimed)
  * [4 Archimed](#Archimed)
* [5 "Умный" конфигуратор](#Умный_конфигуратор)
      * [5 Archimed](#Archimed)
      * [5 Kostix](#Kostix)
      * [5 Bigote](#Bigote)
  * [5 Archimed](#Archimed)
  * [5 [Kostix](Участник_Kostix.md)](#KostixУчастник_Kostix.md)
  * [5 Bigote](#Bigote)
* [6 Остальным участникам обсуждения](#Остальным_участникам_обсуждения)
* [7 Конфигуратор на основе xml](#Конфигуратор_на_основе_xml)
      * [7 Kostix](#Kostix)
      * [7 Archimed](#Archimed)
  * [7 [Kostix](Участник_Kostix.md)](#KostixУчастник_Kostix.md)
  * [7 Archimed](#Archimed)
* [8 Переконфигуратор на основе плагинов****](#Переконфигуратор_на_основе_плагинов)

# <a id="Из_чего_состоит"></a>Из чего состоит
*  Файл: configurator.tcl 
*  Подкаталог к нему — для скриншотов, файлов мессаджей на разных языках и прочего барахла; может, сам файл имеет смысл в этот каталог засунуть). 

# <a id="Идея_работы_конфигуратора"></a>Идея работы конфигуратора
66
67
68
69
70
71
72
73

74
75
76
77
78
79
80
66
67
68
69
70
71
72

73
74
75
76
77
78
79
80







-
+








После недавнего откровения kostix об tk, windows и tkabber я его полностью поддержал в плане тем. Дефолтная - Windows и \*nix системы (для \*nix возможно подойдет dark и моя почти готовая тема, требует обсуждения).  Остальные темы, что имеются в наличии я бы отправил в биореактор =), ибо часть из них имеет очень отвратительную цветовую гамму ;)) 

### <a id="Bigote"></a>Bigote

А почему для \*nix тёмную? Типа пусть глаза ломают? Я ведь светлую тему не просто так выбрал, а из соображений эргономики ;) 

### <a id="Kostix"></a>[Kostix](Участник_Kostix.md)
### <a id="KostixУчастник_Kostix.md"></a>[Kostix](Участник_Kostix.md)

Никаких тем по дефолту! 

Повторю ещё раз: 

 _никаких тем по дефолту!_ 

201
202
203
204
205
206
207
208

209
210
211
212
213
214
215
201
202
203
204
205
206
207

208
209
210
211
212
213
214
215







-
+







# <a id="Умный_конфигуратор"></a>"Умный" конфигуратор
Добавит много работы этот пункт, но по уму надо бы осуществить: конфигуратор может быть **пере**конфигуратором, то есть при старте он ищет в домашнем каталоге юзверя конфиг, и если он есть, считывает интересующие данные, которые и отображает в качестве установленных по умолчанию. При сохранении конфига переписывает лишь изменившиеся опции. Таким образом к переконфигурации можно возвращаться несколько раз. 

### <a id="Archimed"></a>Archimed

Нужно условно структурировать файл **config.tcl**, например, как конфиг от Badlop. Для простоты, если опция будет находится не на своём месте - нещадно её комментировать. В комментариях проставлять идентификатор опции. 

### <a id="Kostix"></a>[Kostix](Участник_Kostix.md)
### <a id="KostixУчастник_Kostix.md"></a>[Kostix](Участник_Kostix.md)

Господа! Забудьте уже про **config.tcl**! 

У Ткаббера есть механизм Customize, который: 

*  хранит свои настройки в **custom.tcl**, который является Большим Тиклевым Списком (то есть его можно прочитать не сложнее чем `
    set options [read [open custom.tcl r]]
249
250
251
252
253
254
255
256

257
258
259
260
261
262
263
249
250
251
252
253
254
255

256
257
258
259
260
261
262
263







-
+







       </values>
    </option>

И так для каждой опции. Интерфейс конфигуратора генерится автоматически при запуске. Соответственно, появляется гибкая система настройки конфигуратора. Например можно сделать несколько уровней (beginner, intermediate, advanced) с разным количеством опций. Конечно протокол еще требует обсуждения, но зачатки я здесь указал. Готов приступит к работе при одобрении данной идеи. 

P.S.: Если где накосячил с xml, не пинайте сильно. :) Я мало с ним знаком. [eXire](Участник_EXire.md) 

### <a id="Kostix"></a>[Kostix](Участник_Kostix.md)
### <a id="KostixУчастник_Kostix.md"></a>[Kostix](Участник_Kostix.md)

Вспоминаем старика Оккама и идём читать [эту статью](http://www.defmacro.org/ramblings/lisp.html), имея в виду, что тикль умеет всё то же самое, что и LISP, только его код не является S-expressions, а в остальном — позволяет натурально реализовать все идеи, изложенные в статье. 

Однако, см. про Customize в разделе "Умный" конфигуратор. 

[Занятная статья](http://users.pandora.be/koen.vandamme1/papers/tcl_fileformats/tcl_fileformats.html) — к вопросу о хранении данных для Tcl. 

Changes to wiki/ru/Шрифты.md.

11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37




















38
39
40

41
42
43
44
45
46
47
11
12
13
14
15
16
17




















18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

40
41
42
43
44
45
46
47







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


-
+








## <a id="toc"></a>Содержание

* [1 Предисловие](#Предисловие)
* [2 Где и как Ткаббер получает шрифты](#Где_и_как_Ткаббер_получает_шрифты)
* [3 Что настраивать](#Что_настраивать)
* [4 Как настраивать](#Как_настраивать)
   * [4.1 Настройка системы](#Настройка_системы)
      * [4.1.1 Windows](#Windows)
      * [4.1.2 Xft/fontconfig](#Xft_fontconfig)
      * [4.1.3 XRDB](#XRDB)
   * [4.2 Настройка Ткаббера](#Настройка_Ткаббера)
      * [4.2.1 Опции конфигурации](#Опции_конфигурации)
      * [4.2.2 База данных опций Tk](#База_данных_опций_Tk)
   * [4.3 Спецификации шрифтов Tk](#Спецификации_шрифтов_Tk)
      * [4.3.1 "Программное имя" шрифта](#Программное_имя_шрифта)
      * [4.3.2 Имя системного шрифта](#Имя_системного_шрифта)
      * [4.3.3 "Иксовый" формат](#Иксовый_формат)
      * [4.3.4 "Свободный" формат](#Свободный_формат)
      * [4.3.5 Формат "пары опция/значение"](#Формат_пары_опция_значение)
   * [4.4 Проблемы не-XLFD спецификаций в X Window](#Проблемы_не-XLFD_спецификаций_в_X_Window)
   * [4.5 Тонкая настройка шрифта интерфейса](#Тонкая_настройка_шрифта_интерфейса)
   * [4.6 Быстрый подбор шрифтов](#Быстрый_подбор_шрифтов)
      * [4.6.1 Шрифт интерфейса](#Шрифт_интерфейса)
      * [4.6.2 Шрифт окон чата и ростера](#Шрифт_окон_чата_и_ростера)
      * [4.6.3 Немножко хардкора](#Немножко_хардкора)
   * [4.7 Другие полезные средства](#Другие_полезные_средства)
 * [4.1 Настройка системы](#Настройка_системы)
  * [4.1.1 Windows](#Windows)
  * [4.1.2 Xft/fontconfig](#Xft_fontconfig)
  * [4.1.3 XRDB](#XRDB)
 * [4.2 Настройка Ткаббера](#Настройка_Ткаббера)
  * [4.2.1 Опции конфигурации](#Опции_конфигурации)
  * [4.2.2 База данных опций Tk](#База_данных_опций_Tk)
 * [4.3 Спецификации шрифтов Tk](#Спецификации_шрифтов_Tk)
  * [4.3.1 "Программное имя" шрифта](#Программное_имя_шрифта)
  * [4.3.2 Имя системного шрифта](#Имя_системного_шрифта)
  * [4.3.3 "Иксовый" формат](#Иксовый_формат)
  * [4.3.4 "Свободный" формат](#Свободный_формат)
  * [4.3.5 Формат "пары опция/значение"](#Формат_пары_опция_значение)
 * [4.4 Проблемы не-XLFD спецификаций в X Window](#Проблемы_не-XLFD_спецификаций_в_X_Window)
 * [4.5 Тонкая настройка шрифта интерфейса](#Тонкая_настройка_шрифта_интерфейса)
 * [4.6 Быстрый подбор шрифтов](#Быстрый_подбор_шрифтов)
  * [4.6.1 Шрифт интерфейса](#Шрифт_интерфейса)
  * [4.6.2 Шрифт окон чата и ростера](#Шрифт_окон_чата_и_ростера)
  * [4.6.3 Немножко хардкора](#Немножко_хардкора)
 * [4.7 Другие полезные средства](#Другие_полезные_средства)
* [5 Подводные камни](#Подводные_камни)
* [6 Примечания](#Примечания)
   * [6.1 Борьба с антиалиасингом в Xft](#Борьба_с_антиалиасингом_в_Xft)
 * [6.1 Борьба с антиалиасингом в Xft](#Борьба_с_антиалиасингом_в_Xft)

# <a id="Предисловие"></a>Предисловие
[Tk](http://en.wikipedia.org/wiki/Tk (framework)), который используется Ткаббером для создания GUI, является жертвой "true-unix-way" гибкости, которую в него вложили, глядя на [Xt](http://en.wikipedia.org/wiki/Intrinsics), — _настраивать у него можно практически **любые аспекты интерфейса** по отдельности, включая их шрифты._ К сожалению, бесплатно такие вещи не даются, и для владения этим предметом нужно понимать, как работает [база данных опций Tk](База_данных_опций_Tk.md) (и родственная ей [XRDB](XRDB.md) в X Window System). 

Масла в огонь подливает и тот факт, что у большого количества пользователей систем, основанных на X Window (Linux, xBSD и т.п.), возникают проблемы со шрифтами в Ткаббере, поскольку они (пользователи) запускают его в окружениях, сплошь основанных на [GTK](http://www.gtk.org/) ([GNOME](http://www.gnome.org)) или [Qt](http://trolltech.com/products/qt) ([KDE](http://www.kde.org)), которые имеют свои собственные, глобальные в пределах "десктопа", системы управления шрифтами, "вражеские" для всех других систем поддержки GUI. Здесь мы не будем развивать эту тему — за подробностями обращайтесь к статье [Особенности реализации](Особенности_реализации.md). 

Ещё немного усложняет проблему со шрифтами в "иксах" то, что начиная с версии 8.5 Tk поддерживает Xft/fontconfig, который реализует другой подход к управлению шрифтами, нежели тот, который работал в версиях Tk \<= 8.4. 

Changes to wiki/uk/Tkabber_Wiki_Довідка.md.

13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34


















35
36
37
38
39
40
41
13
14
15
16
17
18
19















20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+








Отже, почнемо. 

## <a id="toc"></a>Зміст

* [1 Якщо ви не працювали з вікі раніше](#Якщо_ви_не_працювали_з_вікі_раніше)
* [2 Тепер про оформлення](#Тепер_про_оформлення)
   * [2.1 Для авторів нових статей](#Для_авторів_нових_статей)
      * [2.1.1 Застосування відбою пробілом](#Застосування_відбою_пробілом)
      * [2.1.2 Застосування HTML](#Застосування_HTML)
      * [2.1.3 Застосування тега **\<tt>**](#Застосування_тега_tt)
      * [2.1.4 Застосування жирного шрифту](#Застосування_жирного_шрифту)
      * [2.1.5 Застосування похилого шрифту](#Застосування_похилого_шрифту)
      * [2.1.6 Вживання смайликів у тексті](#Вживання_смайликів_у_тексті)
      * [2.1.7 Інші елементи оформлення](#Інші_елементи_оформлення)
      * [2.1.8 Пісочниця](#Пісочниця)
   * [2.2 Перекладачам](#Перекладачам)
      * [2.2.1 Що треба робити при перекладі на нову мову з нуля](#Що_треба_робити_при_перекладі_на_нову_мову_з_нуля)
      * [2.2.2 Переклад на рідну мову](#Переклад_на_рідну_мову)
      * [2.2.3 Переклад на чужу мову](#Переклад_на_чужу_мову)
      * [2.2.4 Переклад меню](#Переклад_меню)
      * [2.2.5 Локалізація Ткаббера](#Локалізація_Ткаббера)
 * [2.1 Для авторів нових статей](#Для_авторів_нових_статей)
  * [2.1.1 Застосування відбою пробілом](#Застосування_відбою_пробілом)
  * [2.1.2 Застосування HTML](#Застосування_HTML)
  * [2.1.3 Застосування тега **\<tt>**](#Застосування_тега_tt)
  * [2.1.4 Застосування жирного шрифту](#Застосування_жирного_шрифту)
  * [2.1.5 Застосування похилого шрифту](#Застосування_похилого_шрифту)
  * [2.1.6 Вживання смайликів у тексті](#Вживання_смайликів_у_тексті)
  * [2.1.7 Інші елементи оформлення](#Інші_елементи_оформлення)
  * [2.1.8 Пісочниця](#Пісочниця)
 * [2.2 Перекладачам](#Перекладачам)
  * [2.2.1 Що треба робити при перекладі на нову мову з нуля](#Що_треба_робити_при_перекладі_на_нову_мову_з_нуля)
  * [2.2.2 Переклад на рідну мову](#Переклад_на_рідну_мову)
  * [2.2.3 Переклад на чужу мову](#Переклад_на_чужу_мову)
  * [2.2.4 Переклад меню](#Переклад_меню)
  * [2.2.5 Локалізація Ткаббера](#Локалізація_Ткаббера)
   * [2.2.5 Обновляємо існуючі повідомлення](#Обновляємо_існуючі_повідомлення)
   * [2.2.5 Створення нової версії](#Створення_нової_версії)
   * [2.2.5 Що ще перекладати?](#Що_ще_перекладати)

# <a id="Якщо_ви_не_працювали_з_вікі_раніше"></a>Якщо ви не працювали з вікі раніше
*  Докладна й дуже пристойна [справка](http://ru.wikipedia.org/wiki/Wiki-разметка) по розмітці WikiPedia. На тій сторінці є посилання на більше конкретні теми: "зображення", "як почати нову статтю" та інше. Як теоретична база — ідеальне місце. 
*  Для створення галерей, однак, зручніше скористатися [посиланням на відповідний розділ MediaWiki](http://www.mediawiki.org/w/index.php?title=Sites_using_MediaWiki/gallery&action=submit), що відразу показує правильний приклад коду (на wikipedia.org чомусь про галереї сказано мимохіть, і працюючий код не продемонстрований, а щоб обчислити його самому, треба або довго експеремтувати, або бути генієм ;)) 
*  Подивіться також [документацію по настроюванню інтерфейсу](http://meta.wikipedia.org/wiki/MediaWiki_i18n) і [Мануал користувача](http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide) по використанню й настроюванню довідкової системи. 

# <a id="Тепер_про_оформлення"></a>Тепер про оформлення

Changes to wiki/uk/Дистрибутиви__які_ми_обираємо.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17






18
19
20

21
22
23
24
25
26
27






28
29
30
31
32
33
34
1
2
3
4
5
6
7
8
9
10
11






12
13
14
15
16
17
18
19

20
21






22
23
24
25
26
27
28
29
30
31
32
33
34











-
-
-
-
-
-
+
+
+
+
+
+


-
+

-
-
-
-
-
-
+
+
+
+
+
+







[//]: # (Generated from ../selected/uk.tkabber.jabe.ru/index.php/Дистрибутиви,_які_ми_обираємо/index.html)


# Дистрибутиви, які ми обираємо

Матеріал з Tkabber Wiki

## <a id="toc"></a>Зміст

* [1 Начните работу с нажатия этой кнопки (c) Windows](#Начните_работу_с_нажатия_этой_кнопки_c_Windows)
* [2 "Самодостаточные" дистрибутивы Ткаббера](#Самодостаточные_дистрибутивы_Ткаббера)
   * [2.1 Tclkit, starkits и starpacks: немного теории](#Tclkit_starkits_и_starpacks_немного_теории)
      * [2.1.1 Тиклькит](#Тиклькит)
      * [2.1.2 Старкиты](#Старкиты)
      * [2.1.3 Старпаки](#Старпаки)
   * [2.2 Назад, к Ткабберу!](#Назад_к_Ткабберу)
      * [2.2.1 Tkabber-pack — особая песня](#Tkabber-pack_-_особая_песня)
 * [2.1 Tclkit, starkits и starpacks: немного теории](#Tclkit_starkits_и_starpacks_немного_теории)
  * [2.1.1 Тиклькит](#Тиклькит)
  * [2.1.2 Старкиты](#Старкиты)
  * [2.1.3 Старпаки](#Старпаки)
 * [2.2 Назад, к Ткабберу!](#Назад_к_Ткабберу)
  * [2.2.1 Tkabber-pack — особая песня](#Tkabber-pack_-_особая_песня)
* [3 Быстрее! Выше! Сильнее!](#Быстрее_Выше_Сильнее)
* [4 Прилавок](#Прилавок)
   * [4.1 Рукоделие](#Рукоделие)
 * [4.1 Рукоделие](#Рукоделие)
* [5 Кто сильнее: кит или пак? (Что выбрать?)](#Кто_сильнее_кит_или_пак_Что_выбрать)
   * [5.1 "Каноническая" установка: Tcl/Tk + Ткаббер](#Каноническая_установка_Tcl_Tk_+_Ткаббер)
      * [5.1.1 Осевой вариант](#Осевой_вариант)
      * [5.1.2 Windows: не бейсиком единым...](#Windows_не_бейсиком_единым...)
      * [5.1.3 Дистрибутив Tcl/Tk в системе: pros et contras](#Дистрибутив_Tcl_Tk_в_системе_pros_et_contras)
   * [5.2 Всё своё ношу с собой](#Всё_своё_ношу_с_собой)
      * [5.2.1 Ткаббер-пак опять идёт не в ногу](#Ткаббер-пак_опять_идёт_не_в_ногу)
 * [5.1 "Каноническая" установка: Tcl/Tk + Ткаббер](#Каноническая_установка_Tcl_Tk_+_Ткаббер)
  * [5.1.1 Осевой вариант](#Осевой_вариант)
  * [5.1.2 Windows: не бейсиком единым...](#Windows_не_бейсиком_единым...)
  * [5.1.3 Дистрибутив Tcl/Tk в системе: pros et contras](#Дистрибутив_Tcl_Tk_в_системе_pros_et_contras)
 * [5.2 Всё своё ношу с собой](#Всё_своё_ношу_с_собой)
  * [5.2.1 Ткаббер-пак опять идёт не в ногу](#Ткаббер-пак_опять_идёт_не_в_ногу)

# <a id="Начните_работу_с_нажатия_этой_кнопки_c_Windows"></a>Начните работу с нажатия этой кнопки (c) Windows

Куда ставить-то?! 

© х/ф "Посторонним вход воспрещается" 

Changes to wiki/uk/Плагіни.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20







21
22
23
24
25
26
27
1
2
3
4
5
6
7
8
9
10
11
12
13







14
15
16
17
18
19
20
21
22
23
24
25
26
27













-
-
-
-
-
-
-
+
+
+
+
+
+
+







[//]: # (Generated from ../selected/uk.tkabber.jabe.ru/index.php/Плагіни/index.html)


# Плагіни

Матеріал з Tkabber Wiki

 ЗРОБИТИ ПОСИЛАННЯ НА ФАЙЛИ З РОС. ВІКІ І ПОФІКСИТИ УЧАСНИКІВ НА КОРИСТУВАЧІВ (З посиланням на рос. вікі чи зробити їх на цій?) 

## <a id="toc"></a>Зміст

* [1 Офіційні плагіни для Ткаббера](#Офіційні_плагіни_для_Ткаббера)
* [2 Неофіційні плагині для Ткаббера](#Неофіційні_плагині_для_Ткаббера)
   * [2.1 Alarm](#Alarm)
   * [2.2 Autoconnect](#Autoconnect)
   * [2.3 Tab number](#Tab_number)
   * [2.4 Confirm](#Confirm)
   * [2.5 Rsssaver](#Rsssaver)
   * [2.6 Bookmarks](#Bookmarks)
   * [2.7 Meebo me](#Meebo_me)
 * [2.1 Alarm](#Alarm)
 * [2.2 Autoconnect](#Autoconnect)
 * [2.3 Tab number](#Tab_number)
 * [2.4 Confirm](#Confirm)
 * [2.5 Rsssaver](#Rsssaver)
 * [2.6 Bookmarks](#Bookmarks)
 * [2.7 Meebo me](#Meebo_me)

# <a id="Офіційні_плагіни_для_Ткаббера"></a>Офіційні плагіни для Ткаббера
У цьому розділі нічого принципово нового не буде — зведення по існуючим плагінам і коротка допомога для бажаючих завантажити їх. 

Отже, на сьогоднішній день на [офіційній сторінці плагінів](http://tkabber.jabber.ru/tkabber-plugins) налічується 12 розширень до Ткаббера: bc, checkers, chess, cyrillize, ejabberd, georoster, mute, osd, reversi, socials, spy і whiteboard. Двома словами про кожний: 

*  bc — гра "Бики і корови". 

Changes to wiki/uk/Посилання.md.

1
2
3
4
5
6
7
8
9
10
11
12
13

14
15
16
17
18




19
20
21
22
23
24
25
1
2
3
4
5
6
7
8
9
10
11
12

13
14




15
16
17
18
19
20
21
22
23
24
25












-
+

-
-
-
-
+
+
+
+







[//]: # (Generated from ../selected/uk.tkabber.jabe.ru/index.php/Посилання/index.html)


# Посилання

Матеріал з Tkabber Wiki

На цій сторінці будуть потихеньку збиратися посилання на зовнішні ресурси, присвячені Ткабберу і Джабберу. 

## <a id="toc"></a>Зміст

* [1 Документація і завантаження](#Документація_і_завантаження)
   * [1.1 Сайти про Ткаббер на інших мовах](#Сайти_про_Ткаббер_на_інших_мовах)
 * [1.1 Сайти про Ткаббер на інших мовах](#Сайти_про_Ткаббер_на_інших_мовах)
* [2 Народна творчість](#Народна_творчість)
   * [2.1 Кольорові схеми](#Кольорові_схеми)
   * [2.2 Смайл-паки, аватари](#Смайл-паки_аватари)
   * [2.3 Звукові схеми](#Звукові_схеми)
   * [2.4 Сторонні плагіни](#Сторонні_плагіни)
 * [2.1 Кольорові схеми](#Кольорові_схеми)
 * [2.2 Смайл-паки, аватари](#Смайл-паки_аватари)
 * [2.3 Звукові схеми](#Звукові_схеми)
 * [2.4 Сторонні плагіни](#Сторонні_плагіни)
* [3 Tcl/Tk](#Tcl_Tk)
* [4 Jabber](#Jabber)
* [5 Різне](#Різне)

# <a id="Документація_і_завантаження"></a>Документація і завантаження
*  [Офіційний сайт Ткаббера.](http://tkabber.jabber.ru) 
 *  Тут ви можете [завантажити](http://tkabber.jabber.ru/download) Ткаббер. 

Changes to wiki/uk/Початківцям.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16






17
18
19
20
21
22
23
1
2
3
4
5
6
7
8
9
10






11
12
13
14
15
16
17
18
19
20
21
22
23










-
-
-
-
-
-
+
+
+
+
+
+







[//]: # (Generated from ../selected/uk.tkabber.jabe.ru/index.php/Початківцям/index.html)


# Початківцям

Матеріал з Tkabber Wiki

## <a id="toc"></a>Зміст

* [1 Встановлення і швидкий старт](#Встановлення_і_швидкий_старт)
   * [1.1 Вікно логіна](#Вікно_логіна)
   * [1.2 Створення нового акаунта](#Створення_нового_акаунта)
   * [1.3 Дискавери. Первые шаги](#Дискавери._Первые_шаги)
   * [1.4 Добавление контактов в ростер](#Добавление_контактов_в_ростер)
   * [1.5 Некоторые полезные команды](#Некоторые_полезные_команды)
   * [1.6 Дискавери. Добавляем контакты из "асек" и прочих "ирок", добавляем фиды RSS.](#Дискавери._Добавляем_контакты_из_асек_и_прочих_ирок_добавляем_фиды_RSS.)
 * [1.1 Вікно логіна](#Вікно_логіна)
 * [1.2 Створення нового акаунта](#Створення_нового_акаунта)
 * [1.3 Дискавери. Первые шаги](#Дискавери._Первые_шаги)
 * [1.4 Добавление контактов в ростер](#Добавление_контактов_в_ростер)
 * [1.5 Некоторые полезные команды](#Некоторые_полезные_команды)
 * [1.6 Дискавери. Добавляем контакты из "асек" и прочих "ирок", добавляем фиды RSS.](#Дискавери._Добавляем_контакты_из_асек_и_прочих_ирок_добавляем_фиды_RSS.)
* [2 Локализация Tkabber](#Локализация_Tkabber)

# <a id="Встановлення_і_швидкий_старт"></a>Встановлення і швидкий старт
Вибір [дистрибутива](http://tkabber.jabber.ru/download) залежить від операційної системи, в котрій ви працюєте. Інсталяція Ткаббера в середовищі Linux докладно [описана](http://tkabber.jabber.ru/tuto-install-tkabber) на форумі сайта tkabber.jabber.ru і проблем викликати не повинна. Під Windows інсталяція теж проходить гладко. Єдине, що ми б порадили — це не ставити Tkabber-Starpack версії 0.9.8 і нижче — там немає файла підтримки кодування Windows-1251, тому такий Ткаббер не може розмовляти українською. Але починаючи з версії 0.9.9 ця помилка в старпаці була виправлена. 

## <a id="Вікно_логіна"></a>Вікно логіна

Changes to wiki/uk/Практика.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16



17
18
19
20


21
22
23
24
25
26
27
1
2
3
4
5
6
7
8
9
10
11
12
13



14
15
16
17
18


19
20
21
22
23
24
25
26
27













-
-
-
+
+
+


-
-
+
+







[//]: # (Generated from ../selected/uk.tkabber.jabe.ru/index.php/Практика/index.html)


# Практика

Матеріал з Tkabber Wiki

 Тут, як неважко здогадатися, невтомні дослідники можливостей Ткаббера можуть знайти практичні поради по усуненню неполадок, а також по розширенню існуючого функціонала. Іншими словами, цей розділ написаний для тих, хто не проти озброїтися напилком і перетворити підводний човен у літак ;) 

## <a id="toc"></a>Зміст

* [1 Часто запитувані питання (ЧЗП)](#Часто_запитувані_питання_ЧЗП)
* [2 Хохлома](#Хохлома)
   * [2.1 Смайлики й аватари](#Смайлики_й_аватари)
   * [2.2 Кольорові теми та інша графіка](#Кольорові_теми_та_інша_графіка)
   * [2.3 Звуковий супровід](#Звуковий_супровід)
 * [2.1 Смайлики й аватари](#Смайлики_й_аватари)
 * [2.2 Кольорові теми та інша графіка](#Кольорові_теми_та_інша_графіка)
 * [2.3 Звуковий супровід](#Звуковий_супровід)
* [3 Нетривіальні колупання конфіга](#Нетривіальні_колупання_конфіга)
* [4 Колупання програмного коду](#Колупання_програмного_коду)
   * [4.1 Плагіни / Штепселі](#Плагіни___Штепселі)
   * [4.2 Патчі / Заплатки](#Патчі___Заплатки)
 * [4.1 Плагіни / Штепселі](#Плагіни___Штепселі)
 * [4.2 Патчі / Заплатки](#Патчі___Заплатки)

# <a id="Часто_запитувані_питання_ЧЗП"></a>Часто запитувані питання (ЧЗП)
[Маленькі хитрості, або Tkabber F.A.Q.](Ткаббер_ЧЗП.md) 

# <a id="Хохлома"></a>Хохлома
Тут будуть дані посилання на готові кольорові / звукові схеми і набори смайликів, а також поради по їх "прикручуванню" до Ткаббера. 

Changes to wiki/uk/Службова/Всі_сторінки.md.

9
10
11
12
13
14
15
16
17


18
19
20
21
22
23
24

25
26
9
10
11
12
13
14
15


16
17
18
19
20
21
22
23

24
25
26







-
-
+
+






-
+


* [Головна стаття](../Головна_стаття.md) (3 посилання, 1 зі сторінок на інших мовах)
* [Дистрибутиви, які ми обираємо](../Дистрибутиви__які_ми_обираємо.md) (6 посилань)
* [Користувач:Fixer](../Користувач_Fixer.md) (2 посилання)
* [Плагіни](../Плагіни.md) (10 посилань)
* [Посилання](../Посилання.md) (2 посилання)
* [Початківцям](../Початківцям.md) (5 посилань)
* [Практика](../Практика.md) (3 посилання)
* [Службова/Всі сторінки](../Службова/Всі_сторінки.md) (**0** посилань)
* [Службова/Відсутні посилання](../Службова/Відсутні_посилання.md) (1 посилання)
* [Службова/Всі сторінки](../Службова/Всі_сторінки.md) (1 посилання)
* [Службова/Відсутні посилання](../Службова/Відсутні_посилання.md) (**0** посилань)
* [Теорія](../Теорія.md) (3 посилання)
* [Термінологія](../Термінологія.md) (6 посилань)
* [Ткаббер - чемпіон?](../Ткаббер_-_чемпіон_.md) (4 посилання)
* [Ткаббер ЧЗП](../Ткаббер_ЧЗП.md) (8 посилань)
* [Ткаббер ЧЗП/Зовнішній вигляд і звук](../Ткаббер_ЧЗП/Зовнішній_вигляд_і_звук.md) (1 посилання)
* [Учасник:bigote](../Учасник_bigote.md) (4 посилання)
* [Учасник:kostix](../Учасник_kostix.md) (2 посилання)
* [Учасник:kostix](../Учасник_kostix.md) (3 посилання)
* [Учасник:lknight](../Учасник_lknight.md) (5 посилань)

Changes to wiki/uk/Службова/Відсутні_посилання.md.

18
19
20
21
22
23
24


25
26
27



28
29
30
31
32
33
34
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39







+
+



+
+
+








* Sandbox.md
* http://tkabber.jabe.ru
* Службова\_Allpages.md
* Службова\_Recentchanges.md
* Термінологія.md\#транк
* Ткаббер\_НЗП.md
* Учасник\_Bigote.md
* Учасник\_Lknight.md

#### [Головна стаття](../Головна_стаття.md)

* ../ru/Участник\_bigote.md
* ../ru/Участник\_kostix.md
* ../ru/Участник\_lknight.md
* Користувач\_Archimed.md

#### [Дистрибутиви, які ми обираємо](../Дистрибутиви__які_ми_обираємо.md)

* Low\_traffic\_HOWTO.md
* Tkabber\_starpack.md
* Дистрибутивы\_\_которые\_мы\_выбираем.md
57
58
59
60
61
62
63

64
65
66
67
68
69
70
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76







+







* Нетривіальні\_налаштування.md
* Патчі.md
* Проблеми\_зі\_звуком.md
* Смайлики\_й\_аватари.md

#### [Теорія](../Теорія.md)

* ../ru/Участник\_feez.md
* Віддалене\_керування\_за\_допомогою\_send.md
* Відправка\_файлів\_\_теорія.md
* Меню.md
* Налаштування.md
* Налаштування\_Ткаббера\_\_ази\_і\_глибше.md
* Налаштування\_Ткаббера\_\_базис\_та\_глибше.md
* Ткаббер\_зсередини.md
88
89
90
91
92
93
94
95

96











94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114








+

+
+
+
+
+
+
+
+
+
+
+
* Проблеми\_X\_Window\_і\_TTF.md
* Проблеми\_зі\_звуком.md
* Смайлики\_й\_аватари.md
* Тим\_\_хто\_починає.md
* Файл\_конфигурации.md
* Файл\_конфигурації.md
* Шифрування\_в\_Ткаббері.md

#### [Учасник:bigote](../Учасник_bigote.md)

* ../ru/Участник\_bigote.md

#### [Учасник:kostix](../Учасник_kostix.md)

* ../ru/Участник\_kostix.md

#### [Учасник:lknight](../Учасник_lknight.md)

* ../ru/Участник\_lknight.md


Changes to wiki/uk/Теорія.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21










22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11










12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28











-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+







[//]: # (Generated from ../selected/uk.tkabber.jabe.ru/index.php/Теорія/index.html)


# Теорія

Матеріал з Tkabber Wiki

## <a id="toc"></a>Зміст

* [1 Глосарій (словарій)](#Глосарій_словарій)
* [2 Статті](#Статті)
   * [2.1 Початківцям](#Початківцям)
      * [2.1.1 Про Ткаббер](#Про_Ткаббер)
      * [2.1.2 Швидкий старт (з купою скриншотів)](#Швидкий_старт_з_купою_скриншотів)
      * [2.1.3 Налаштування Ткаббера: базис та глибше](#Налаштування_Ткаббера_базис_та_глибше)
   * [2.2 Вмілим користувачам](#Вмілим_користувачам)
      * [2.2.1 Тонке налаштування](#Тонке_налаштування)
      * [2.2.2 Меню](#Меню)
      * [2.2.3 Налаштування](#Налаштування)
      * [2.2.4 Config.tcl з людським обличчям](#Config.tcl_з_людським_обличчям)
   * [2.3 Інші статті](#Інші_статті)
 * [2.1 Початківцям](#Початківцям)
  * [2.1.1 Про Ткаббер](#Про_Ткаббер)
  * [2.1.2 Швидкий старт (з купою скриншотів)](#Швидкий_старт_з_купою_скриншотів)
  * [2.1.3 Налаштування Ткаббера: базис та глибше](#Налаштування_Ткаббера_базис_та_глибше)
 * [2.2 Вмілим користувачам](#Вмілим_користувачам)
  * [2.2.1 Тонке налаштування](#Тонке_налаштування)
  * [2.2.2 Меню](#Меню)
  * [2.2.3 Налаштування](#Налаштування)
  * [2.2.4 Config.tcl з людським обличчям](#Config.tcl_з_людським_обличчям)
 * [2.3 Інші статті](#Інші_статті)

# <a id="Глосарій_словарій"></a>Глосарій (словарій)
[1001 невідоме слово з тих, що ви хотіли, але боялися спитати.](Термінологія.md) 

# <a id="Статті"></a>Статті
## <a id="Початківцям"></a>Початківцям

Changes to wiki/uk/Термінологія.md.

1
2
3
4
5
6
7
8
9
10
11
12
13

14
15
16
17
18
19


20
21
22
23
24




25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12

13
14
15
16
17


18
19
20




21
22
23
24
25
26
27
28
29
30
31












-
+




-
-
+
+

-
-
-
-
+
+
+
+







[//]: # (Generated from ../selected/uk.tkabber.jabe.ru/index.php/Термінологія/index.html)


# Термінологія

Матеріал з Tkabber Wiki

У цьому розділі ми спробуємо роз'ясняти деякі терміни, звичайні для одних і незрозумілі для інших. Пояснення будуть дані дуже коротенько — часу в нас не вагон. Коротка розшифровка, щоб можна було зрозуміти зміст статті, де зустрічається хитре слово, і посилання на джерело докладної інформації. 

## <a id="toc"></a>Зміст

* [1 Tkabber](#Tkabber)
   * [1.1 Токен (token)](#Токен_token)
 * [1.1 Токен (token)](#Токен_token)
* [2 Windows](#Windows)
* [3 Linux](#Linux)
* [4 Tcl/Tk](#Tcl_Tk)
* [5 Jabber](#Jabber)
   * [5.1 XML](#XML)
   * [5.2 Станца (stanza)](#Станца_stanza)
 * [5.1 XML](#XML)
 * [5.2 Станца (stanza)](#Станца_stanza)
* [6 Різне](#Різне)
   * [6.1 Плагін (plugin)](#Плагін_plugin)
   * [6.2 Біндінги (bindings)](#Біндінги_bindings)
   * [6.3 Транк (trunk)](#Транк_trunk)
   * [6.4 Змінні оточення](#Змінні_оточення)
 * [6.1 Плагін (plugin)](#Плагін_plugin)
 * [6.2 Біндінги (bindings)](#Біндінги_bindings)
 * [6.3 Транк (trunk)](#Транк_trunk)
 * [6.4 Змінні оточення](#Змінні_оточення)

# <a id="Tkabber"></a>Tkabber
Тут ми будемо розглядати терміни, що відносяться (втім, дуже умовно) до Ткаббера. 

## <a id="Токен_token"></a>Токен (token)

Одне зі значень англійського слова [token](http://dictionary.reference.com/browse/token) — характерна особливість чи характеристика. У цьому значенні воно використовується для випадків ідентифікації, коли людина чи програма повинна упевнитися в особистості співрозмовника. Наприклад, [session token](http://en.wikipedia.org/wiki/Session_token) чи [security token](http://en.wikipedia.org/wiki/Security_token) (обидва посилання на англійську). Ще одне значення, цього разу граматичне — основна, найпростіша, неподільна лексична одиниця. У цьому випадку мова може йти про розбивку тексту на невеликі уривки чи навіть слова, щоб було зручніше їх аналізувати. Дивіться [приклад у Вікіпедії](http://en.wikipedia.org/wiki/Token_(parser)) (теж англійською). 

Changes to wiki/uk/Ткаббер_ЧЗП.md.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16




17
18
19
20
21
22
23
24
25
26









27
28
29
30
31
32
33
34
35
36
37










38
39
40
41
42
43
44
45
46
47
48
49
50












51
52
53


54
55
56
57
58
59
60
1
2
3
4
5
6
7
8
9
10
11
12




13
14
15
16
17









18
19
20
21
22
23
24
25
26
27










28
29
30
31
32
33
34
35
36
37
38












39
40
41
42
43
44
45
46
47
48
49
50
51


52
53
54
55
56
57
58
59
60












-
-
-
-
+
+
+
+

-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+

-
-
+
+







[//]: # (Generated from ../selected/uk.tkabber.jabe.ru/index.php/Ткаббер_ЧЗП/index.html)


# Ткаббер ЧЗП

Матеріал з Tkabber Wiki

 Якщо проблема, що виникла у вас, тут не освітлена, заходите на `xmpp:tkabber@conference.jabber.ru` — поміркуємо разом, і якщо вирішимо — відповідь з'явиться або тут, або в одній зі статей цієї вікі. 

## <a id="toc"></a>Зміст

* [1 Що таке...?](#Що_таке...)
   * [1.1 Ростер](#Ростер)
   * [1.2 Ресурс](#Ресурс)
   * [1.3 Пріоритет](#Пріоритет)
   * [1.4 Консоль Ткаббера](#Консоль_Ткаббера)
 * [1.1 Ростер](#Ростер)
 * [1.2 Ресурс](#Ресурс)
 * [1.3 Пріоритет](#Пріоритет)
 * [1.4 Консоль Ткаббера](#Консоль_Ткаббера)
* [2 Зовнішній вигляд і звук](#Зовнішній_вигляд_і_звук)
   * [2.1 Шрифти](#Шрифти)
   * [2.2 Не підключаються нові смайлики (звукові схеми)](#Не_підключаються_нові_смайлики_звукові_схеми)
   * [2.3 Як вставляти смайлики "з меню"?](#Як_вставляти_смайлики_з_меню)
   * [2.4 чи Можна смайлики **відключити**?](#чи_Можна_смайлики_відключити)
   * [2.5 Не бачу іконки/фото/і т.д. в PNG](#Не_бачу_іконки_фото_і_т.д._в_PNG)
   * [2.6 Колірні схеми](#Колірні_схеми)
   * [2.7 чи Підтримує Ткаббер аватари?](#чи_Підтримує_Ткаббер_аватари)
   * [2.8 Проблема зі звуковою схемою](#Проблема_зі_звуковою_схемою)
   * [2.9 Регулювання гучності звуку](#Регулювання_гучності_звуку)
 * [2.1 Шрифти](#Шрифти)
 * [2.2 Не підключаються нові смайлики (звукові схеми)](#Не_підключаються_нові_смайлики_звукові_схеми)
 * [2.3 Як вставляти смайлики "з меню"?](#Як_вставляти_смайлики_з_меню)
 * [2.4 чи Можна смайлики **відключити**?](#чи_Можна_смайлики_відключити)
 * [2.5 Не бачу іконки/фото/і т.д. в PNG](#Не_бачу_іконки_фото_і_т.д._в_PNG)
 * [2.6 Колірні схеми](#Колірні_схеми)
 * [2.7 чи Підтримує Ткаббер аватари?](#чи_Підтримує_Ткаббер_аватари)
 * [2.8 Проблема зі звуковою схемою](#Проблема_зі_звуковою_схемою)
 * [2.9 Регулювання гучності звуку](#Регулювання_гучності_звуку)
* [3 Глюки, що виникають у процесі роботи](#Глюки_що_виникають_у_процесі_роботи)
   * [3.1 Довге завантаження Ткаббера](#Довге_завантаження_Ткаббера)
   * [3.2 Пересилання файлів](#Пересилання_файлів)
   * [3.3 Шифрування в Ткаббері: проблеми з **gpgme/tclgpgme**](#Шифрування_в_Ткаббері_проблеми_з_gpgme_tclgpgme)
   * [3.4 Проблема з новим релізом Ткаббера 0.9.9-1.2](#Проблема_з_новим_релізом_Ткаббера_0.9.9-1.2)
   * [3.5 Ткаббер під X Window падає при спробі показати "дивні" символи](#Ткаббер_під_X_Window_падає_при_спробі_показати_дивні_символи)
   * [3.6 Не працює вставка по Control-v під X Window](#Не_працює_вставка_по_Control-v_під_X_Window)
   * [3.7 Tkabber постійно тримає мене в стані "відійшов" ("away")](#Tkabber_постійно_тримає_мене_в_стані_відійшов_away)
   * [3.8 У старпаку/старкиті немає звуку](#У_старпаку_старкиті_немає_звуку)
   * [3.9 Пропадає вміст ростера](#Пропадає_вміст_ростера)
   * [3.10 Не можу приєднатися до сервера через проксі](#Не_можу_приєднатися_до_сервера_через_проксі)
 * [3.1 Довге завантаження Ткаббера](#Довге_завантаження_Ткаббера)
 * [3.2 Пересилання файлів](#Пересилання_файлів)
 * [3.3 Шифрування в Ткаббері: проблеми з **gpgme/tclgpgme**](#Шифрування_в_Ткаббері_проблеми_з_gpgme_tclgpgme)
 * [3.4 Проблема з новим релізом Ткаббера 0.9.9-1.2](#Проблема_з_новим_релізом_Ткаббера_0.9.9-1.2)
 * [3.5 Ткаббер під X Window падає при спробі показати "дивні" символи](#Ткаббер_під_X_Window_падає_при_спробі_показати_дивні_символи)
 * [3.6 Не працює вставка по Control-v під X Window](#Не_працює_вставка_по_Control-v_під_X_Window)
 * [3.7 Tkabber постійно тримає мене в стані "відійшов" ("away")](#Tkabber_постійно_тримає_мене_в_стані_відійшов_away)
 * [3.8 У старпаку/старкиті немає звуку](#У_старпаку_старкиті_немає_звуку)
 * [3.9 Пропадає вміст ростера](#Пропадає_вміст_ростера)
 * [3.10 Не можу приєднатися до сервера через проксі](#Не_можу_приєднатися_до_сервера_через_проксі)
* [4 А як мені зробити...?](#А_як_мені_зробити...)
   * [4.1 Відправлення повідомлень по Ctrl-Enter](#Відправлення_повідомлень_по_Ctrl-Enter)
   * [4.2 Чи можна додати в ростер самого себе?](#Чи_можна_додати_в_ростер_самого_себе)
   * [4.3 Одночасна робота з декількома аккаунтами](#Одночасна_робота_з_декількома_аккаунтами)
   * [4.4 Як щодо автозаходу на конференції?](#Як_щодо_автозаходу_на_конференції)
   * [4.5 Стискання трафіка в Ткаббері](#Стискання_трафіка_в_Ткаббері)
   * [4.6 Виділення тексту жирним, курсивом і підкресленням](#Виділення_тексту_жирним_курсивом_і_підкресленням)
   * [4.7 Уведення "хитрих" юнікодових символів](#Уведення_хитрих_юнікодових_символів)
   * [4.8 Ігнор — велика річ!](#Ігнор_-_велика_річ)
   * [4.9 Підтвердження](#Підтвердження)
   * [4.10 Віддалене керування](#Віддалене_керування)
   * [4.11 Команди Ткаббера](#Команди_Ткаббера)
   * [4.12 Приховування версій клієнта і OS](#Приховування_версій_клієнта_і_OS)
 * [4.1 Відправлення повідомлень по Ctrl-Enter](#Відправлення_повідомлень_по_Ctrl-Enter)
 * [4.2 Чи можна додати в ростер самого себе?](#Чи_можна_додати_в_ростер_самого_себе)
 * [4.3 Одночасна робота з декількома аккаунтами](#Одночасна_робота_з_декількома_аккаунтами)
 * [4.4 Як щодо автозаходу на конференції?](#Як_щодо_автозаходу_на_конференції)
 * [4.5 Стискання трафіка в Ткаббері](#Стискання_трафіка_в_Ткаббері)
 * [4.6 Виділення тексту жирним, курсивом і підкресленням](#Виділення_тексту_жирним_курсивом_і_підкресленням)
 * [4.7 Уведення "хитрих" юнікодових символів](#Уведення_хитрих_юнікодових_символів)
 * [4.8 Ігнор — велика річ!](#Ігнор_-_велика_річ)
 * [4.9 Підтвердження](#Підтвердження)
 * [4.10 Віддалене керування](#Віддалене_керування)
 * [4.11 Команди Ткаббера](#Команди_Ткаббера)
 * [4.12 Приховування версій клієнта і OS](#Приховування_версій_клієнта_і_OS)
* [5 Різне](#Різне)
   * [5.1 ...а мені ГРАТИ хочеться!!!](#...а_мені_ГРАТИ_хочеться)
   * [5.2 Старі версії Ткаббера і плагинів](#Старі_версії_Ткаббера_і_плагинів)
 * [5.1 ...а мені ГРАТИ хочеться!!!](#...а_мені_ГРАТИ_хочеться)
 * [5.2 Старі версії Ткаббера і плагинів](#Старі_версії_Ткаббера_і_плагинів)

# <a id="Що_таке..."></a>Що таке...?
## <a id="Ростер"></a>Ростер

Відповідь: Ростер (по-англійському roster) — це "Список контактів". У версіях Ткаббера починаючи з 0.9.8 термін "ростер" зник, чим спантеличив звиклих до англізованої назви ветеранів Jabber. 

## <a id="Ресурс"></a>Ресурс