TwitVim

29.05.2008 00:55:11

Искал чего интересного на vim.org
Нашёл.
TwitVim – плагин для постинга в твиттер прямо из вима.
Удобно, подумал я. Ведь на работе постоянно в коде и очень лень переключаться на миранду и открывать диалог с ботом твиттера.
Но не всё так просто.

Первое, что надо сделать это прописать в переменную окружения Path программку curl.
Для винды у меня была скомпилена в cygwin. Однако, автор TwitVim’a в инструкции указал откуда можно скачать.
Вторая проблема заключается в том, что в винде русский текст в cp-1251, а для корректной отсылки сообщения необходимо, чтобы оно было в utf-8.
Т.к. я собирал также под cygwin’ом iconv, то пропатчил функцию: s:urlencode таким образом

function! s:url_encode(str)

    let istr = iconv( a:str, ‘cp1251’, ‘utf-8’ )

                return substitute(istr, ’[^a-zA-Z_-]’, ’\=printf("%%%02X", char2nr(submatch(0)))’, ‘g’)
    endif

endfunction

После этого стало можно писать на великом и могучем.


Однако, одна проблема осталась. Читать твиттер не получается, т.к. приходят кракозяблы (то биш юникод, а перекодировать плагин пока не может, надо дописать будет)



Вечером попробовал под линуксом этот плагин. Думал, что тут-то всё пойдёт как по маслу. А вот и фиг.


Функция printf отработала не так, как ожидалось, выдавая числа вида %410 вместо вида %D0%B1


Решил, что лучше использовать внешний urlencode. Например из php.


Пока остановился на варианте



function! s:url_encode(str)

    "if has( ‘php’ )

        return system( "php -r ‘echo urlencode(".a:str.");’" )

    "else

    "    return substitute(istr, ’[^a-zA-Z_-]’, ’\=printf("%%%02X", char2nr(submatch(0)))’, ‘g’)

    "endif


endfunction


Тестовый прогон показал, что кодированная строка правильная.
Однако, твиттер отключили и проверить никак.
Второй косяк под линуксом в том, что функция PosttoTwitter не работает.
Обхожу тем, что пишу текст в окно, выделяю и отправляю по Alt+T
Зато читать твиттер можно нормально – по-русски.
P.S. Почему всё время мучится так приходится?

Теги: