Tkabber Wiki

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

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

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

Содержание

Добавление новых (внешних) комплектов

В двух словах расскажем здесь, как добавлять смайл-паки. Скачайте нужный вам архив и распакуйте его куда-нибудь. Лучше всего — в домашний директорий, где уже лежит файл конфигурации и должен находиться каталог emoticons-tkabber. Можете распаковать архив прямо в этот каталог, но лучше создать для него свой собственный, чтобы при желании можно было включать разные наборы смайликов.

Затем отредактируйте файл ~/.tkabber/config.tcl, подправив следующую строчку:

emoteicons::load_dir ~/.tkabber/emoticons-tkabber/new_emoticon_set

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

hook::add finload_hook {
    emoteicons::load_dir ~/.tkabber/emoticons-tkabber/new_emoticon_set
}

При новом запуске Ткаббер "подцепит" этот набор, и вы сможете им пользоваться.

Ознакомьтесь также с этой статьёй. Там описано почти то же самое (правда, по-английски), а также даны ссылки на некоторые смайл-паки.

Улучшение поддержки анимированных GIF

За отображение анимированных gif в Tkabber отвечает файл tkabber\aniemoteicons\anigif.tcl. Если сравнивать реализацию со спецификацией формата GIF89a (это как раз и есть нужные нам анимированные gif-картинки), то обнаруживаем отсутствие поддержки вывода с возвратом к предыдущему изображению. Чтобы было понятно, чем это грозит, можно провести эксперимент.

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

Изображение:36_10_20.gif

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

Изображение:36_10_20_1.gif

Как оказалось, это лечится лёгким движением руки. В файле anigif.tcl ищем строчки:

               # Restore to previous - not supported
               # As recommended, since this is not supported, it is set to blank
               [set ::anigif::${img}(curimage)] blank

и смело комментируем команду

               # Restore to previous - not supported
               # As recommended, since this is not supported, it is set to blank
               # [set ::anigif::${img}(curimage)] blank

Люди, знающие английский язык, сильно нервничают, ломают руки, кусают ногти, но тоже комментируют эту команду, хоть и не так смело.

Снова запускаем скрипт showgif.tcl и наслаждаемся нормальной анимацией.

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

 [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 и проверьте загрузку процессора.

Пожелания и замечания направляйте по адресу xmpp:archimed@jabber.ru.

Archimed

Настройка высоты окна смайликов

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

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

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

namespace eval emoteicons {
   array set emoteicons {}

   variable lasttext ""
   variable lastX
   variable lastY
}

Добавляем в неё две строчки (до закрывающей фигурной скобки!):

variable lk_iconsrows
set emoteicons::lk_iconsrows 0

Затем в том же файле ищем процедуру proc emoteicons::show_menu {iw} и после строчки

set rows [expr {floor(sqrt([llength $imgs]))}]

вставляем следующий текст:

#if user sets up the variable - use it!
   if {$emoteicons::lk_iconsrows > 0} {
       set rows [expr {$emoteicons::lk_iconsrows}]
     }

Правка файла закончена, сохраняем его. Теперь, выйдя из аккаунта суперпользователя, отредактируйте файл ~/.tkabber/config.tcl:

Если у вас где-то уже прописан путь к новому смайл-паку, добавьте рядом такую строчку:

set emoteicons::lk_iconsrows 8

При следующей загрузке Ткаббера удостоверьтесь, что всё правильно: при нажатии Alt-E должно вывестись окно со смайликами высотой в 8 строчек. Если оно вас не устраивает, попробуйте увеличить или уменьшить число в конфиге. Зная количество смайликов в наборе, можно легко подобрать нужную высоту окна, чтобы оно целиком помещалось на экране.

Автор патча — LKnight

Полное искоренение смайликов

Это не проблема — добавьте в config.tcl следующее:

hook::add finload_hook {
    array unset emoteicons::emoteicons
}

Если в вашем конфиге уже есть установка этого хука, то можете прописать

 array unset emoteicons::emoteicons

прямо туда.

Убивец смайликов — Kostix

Массовое клонирование эмоциконок

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

Для примера реализуем поддержку 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.

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

Смайлики клонировал Kostix.