Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Misha Verbitsky ([info]tiphareth)
@ 2017-03-28 20:45:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Настроение: sick
Музыка:Tangerine Dream - Thief (Extended Edition)
Entry tags:emacs, linux, unicode

Копипаст из Емакса в Хтерм с локалью koi8-r
Есть проблема, прошу помощи.
Раньше я ее решал путем установки
Emacs 22 либо Emacs 21 из оверлея, но сейчас чего-то
не могу найти таких оверлеев, и у меня пока что
Emacs 24.

Внутренняя кодировка Емакса у меня koi8-r,
локаль
LANG="C"
LC_COLLATE="ru_RU.koi8r"
LC_CTYPE="ru_RU.koi8r"

Мне нужно копировать из Емакса в окно xterm
(локаль koi8-r) русские буквы, и копировать
из окна Firefox/Chrome в Емакс русские буквы.
В Emacs 21/22 она решается следующей странной
штукой (выяснил экспериментально):

(set-terminal-coding-system 'koi8-r-unix)
(set-keyboard-coding-system 'koi8-r-unix)
(set-selection-coding-system 'x-ctext-with-extensions)
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))

В новой версии это не работает ни на копипаст в емакс
(печатает кракозябры), ни на копипаст из емакса
(не печатает ничего). Можно сделать
(set-clipboard-coding-system 'koi8-r-unix)
и она будет хорошо передавать из емакса в хтерм,
не будет передавать ничего из xterm в емакс, и
будет передавать кракозябры из Firefox в емакс.

Если сделать
(set-clipboard-coding-system 'utf-8-unix)
она не передает ничего из хтерм и в хтерм,
и передает текст из Firefox/Chrome в Емакс
в emacs как надо.

Копипаст из Емакса в Firefox работает как надо
в обоих случаях

Меня бы наверное устроило, если бы
(set-clipboard-coding-system 'utf-8-unix)
работало на копипаст в, а
(set-clipboard-coding-system 'koi8-r-unix)
на копипаст из, но каждый раз переключать
это все-таки чересчур.

В общем, прошу совета, как эту бяку настроить,
либо адреса gentoo-overlay с емаксом 21 или 22.

В целом - емакс от версии к версии все хуже и хуже,
все гаже и гаже, и никакого конца-краю этому нет.
Самый лучший был 19 (но он с utf-8 совсем не работает,
так что и он не годится).

Такие дела
Миша



(Добавить комментарий)


(Анонимно)
2017-03-28 19:55 (ссылка)
В продуктах Microsoft таких проблем не возникает.

(Ответить) (Ветвь дискуссии)


[info]painpain
2017-03-28 22:08 (ссылка)
Die bitch, Die!

(Ответить) (Уровень выше)


[info]polytheme
2017-03-28 21:13 (ссылка)
Извини, забыл - в чем проблема перегнать программой iconv все из koi8 в utf8, забэкапив?

(Ответить) (Ветвь дискуссии)


[info]pilpilon
2017-03-29 01:19 (ссылка)
занимает вдвое места?

(Ответить) (Уровень выше)


[info]tiphareth
2017-03-29 02:56 (ссылка)
у меня 15 компов (считая аккаунты в разных конторах, даже больше)
и к ним архивы на 10 внешних дисках плюс CD

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]polytheme
2017-03-29 08:28 (ссылка)
можно тогда on demand (lazy, как говорят программисты).

пусть у тебя всё в utf-8, и есть koi8-r-файл.
при его загрузке будут крякозябры.
ты говоришь 'M-x revert-buffer-with-coding-system' koi8-r, et voila.

потом (если файл не только для чтения) ты можешь сказать
C-x RET f - и, если ты в юникодной локали, просто RET (но
можно поменять кодировку файла на любую).

а можешь и не говорить.

https://www.emacswiki.org/emacs/ChangingEncodings
http://root42.blogspot.ru/2011/12/emacs-convert-current-buffer-to-utf-8.html

обычай деспот меж людей, это всё.

у меня тут хуже проблема - хотел скомпилировать .tex-фаилы
из исходников, года 95 где-то производства (книжка по программированию
для детей Шеня и ко), а там latex 2-\eps, макросы какие-то
адские, все это только под DOS, кажется, бывает - причем
DOS-то поставить no problemo, проблемо найти эти теховские
пакеты, они, наверное, только на дискетах бывают.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tiphareth
2017-03-29 08:33 (ссылка)
шеневский ТеХ живет под совеременными версиями так
http://lj.rossia.org/users/tiphareth/1297429.html
пакеты, если надо, легко достать, погуглив, либо спросить у Шеня

что до твоего ответа, у меня нет никаких проблем с загрузкой файла,
у меня проблемы с копипастом из Emacs в окно xterm с локалью koi8-r
при условии, что мне нужно, чтобы работала копипаста из chrome
в то же окно Emacs

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]polytheme
2017-03-29 08:39 (ссылка)
у тебя в окне терминала pine или elm через ssh что ли, извини за интимный вопрос ?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tiphareth
2017-03-29 08:48 (ссылка)
у меня в окне терминала mailx через ssh

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]polytheme
2017-03-29 09:02 (ссылка)
а, ну конечно, pine и elm уже сдохли давно, а mailx и mail кладут в пакеты до сих пор.

интересно, а если по ssh ходить прямо из emacs, что получится ?
https://www.emacswiki.org/emacs/SshWithEmacs
тут, наверное, есть шанс научить emacs в этот буфер копировать с нужной кодировкой (если это вообще потребуется).

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tiphareth
2017-03-29 11:04 (ссылка)
есть с десяток решений, которые менее через жопу
но все они идут нахуй: я хочу, чтоб у меня все работало как мне надо
(и как оно работало в старых версиях)

(Ответить) (Уровень выше)


(Анонимно)
2017-03-29 11:05 (ссылка)
В NetBSD ложат.

(Ответить) (Уровень выше)


[info]polytheme
2017-03-29 08:42 (ссылка)
TeX попробую, спасибо. хотя то, что там, мне больно будет делать
(устанавливать файлы не из пакетов вне директории home это
все равно что есть блинчики не с кленовым сиропом,
они же потом будут лежать, а пакетный менеджер
ничего про них не будет знать, и при переезде на
новый комп они проебутся).

(Ответить) (Уровень выше)


[info]polytheme
2017-03-29 08:47 (ссылка)
P.S. если ты совсем ничего не хочешь менять из принципиальных
соображений, можно попробовать модифицировать copy-paste
на elisp, чтобы перед copy _из_ включалась одна кодировка
clipboard, а перед copy _в_ - другая (автоматически,
а не рукаме). но если ты захочешь
что-то скопировать _из_ xterm или _в_ chrome, все, конечно,
сломается, потому что emacs не может угадать, в какую
программу копируется.

(Ответить) (Уровень выше)


[info]polytheme
2017-03-29 08:33 (ссылка)
а, да, чтобы не барабанить, как monkey, можно придумать
скрипт на elisp, который будет сам врубать koi8 в
emacs, когда наталкивается на файл в этой кодировке
(сейчас он, кажется, их как latin-1 распознает).

я могу попробовать, это несложно, тем более сам собирался
с vim перебираться на emacs (хоть elisp и убожество, альтернативы
нет все равно).

причем перекодировать в utf8, чтобы копировать в браузер
и консоль, не нужно - все работает и так, если все
вокруг utf8.

(Ответить) (Уровень выше)


[info]cyberloh01
2017-03-28 22:02 (ссылка)
вангую

2027 год.
пост миши
emacs
koi8-r
xterm

(Ответить) (Ветвь дискуссии)


(Анонимно)
2017-03-28 22:08 (ссылка)
посмеялся с этого кумента

а вуайнер и политхем неврубные дятолы

Мише желаю крепиться, думаю скоро в треде появится нормальный имакс-хэкер

(Ответить) (Уровень выше)


[info]tiphareth
2017-03-29 03:02 (ссылка)
как будто что-то плохое

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]cyberloh01
2017-03-29 08:34 (ссылка)
нет никакого космоса
убивай программистов

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2017-03-29 11:08 (ссылка)
Нет никакого внешнего космоса, но есть космос внутренний.

(Ответить) (Уровень выше)


(Анонимно)
2017-03-29 08:41 (ссылка)
а также putin

(Ответить) (Уровень выше)


[info]weary
2017-03-29 01:21 (ссылка)
А если запустить xterm -lc (или xterm +lc) и не трогать ничего в емаксе, что-нибудь меняется?

(Ответить) (Ветвь дискуссии)


[info]tiphareth
2017-03-29 02:54 (ссылка)
строго говоря, у меня aterm
сейчас откомпилирую xterm и посмотрю

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]weary
2017-03-29 16:51 (ссылка)
А емакс используется гуёвый (если да, то с каким тулкитом, gtk2/3, athena итд) или консольный? И копирование делается через встроенные средства (C-y/M-w) или мышкой?

Там просто разные механизмы используются (работа с буфером в линаксе это вообще тот ещё ад). В некоторых случаях емакс вообще не в курсе, как с него копируют, а в некоторых случаях всё зависит от терминала, в котором емакс запущен.

Для работы с копированием можно, например, переопределить interprogram-cut-function и interprogram-paste-function, но они срабатывают только на встроенном kill/yank, и при вставке средней кнопкой не выполняются.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tiphareth
2017-03-29 19:23 (ссылка)
gtk2, мышью

>Для работы с копированием можно, например,
>переопределить interprogram-cut-function и interprogram-paste-function

я пробовал, да, действительно - при вставке средней кнопкой не выполняются

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]weary
2017-03-30 03:45 (ссылка)
Да, работает не очень.

Опытным путём получилось в похожих настройках (только что емакс с gtk3) получить рабочий копипаст во все стороны в xterm только при указании ttf-шрифта и -lc (xterm -fn 7x13 -fa "Liberation Mono:size=10:antialias=false" -lc), иначе будет ###.

В aterm ничего приличного не получается, а вот rxvt заработал сразу и без настроек (rxvt-unicode 9.22). Авторы aterm, к слову, пишут что "aterm is deprecated and in a maintenance mode only; there will be no further updates. Use rxvt-unicode instead". Наверное это был бы лучший вариант, терминал там сам по себе вполне неплохой.

Если же лазить по различным внутренностям емакса, то что-то одно перестаёт работать.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tiphareth
2017-03-30 06:37 (ссылка)
Великолепно! Поменял во всех конфигах aterm на urxvt
и счастлив, все работает лучше некуда
осталось убедить емакс-24 убрать сраное меню, команды
(menu-bar-mode nil)
(tool-bar-mode nil)
в новой версии почему-то не работают

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tiphareth
2017-03-30 06:39 (ссылка)
а, нашел: надо
(menu-bar-mode -1)
(tool-bar-mode -1)

(Ответить) (Уровень выше)


[info]tiphareth
2017-03-29 03:01 (ссылка)
не копируется даже то, что копировалось в aterm
xterm -lc получаются пробелы, xterm +lc получаются ############, ####?
независимо от кодировки, выставленной в Emacs

(Ответить) (Уровень выше)


[info]galliffet
2017-03-29 03:59 (ссылка)
Через http://invisible-island.net/luit/ может попробовать настроить?

(Ответить) (Ветвь дискуссии)


[info]tiphareth
2017-03-29 05:08 (ссылка)
не понял, а что эта штука делает?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]polytheme
2017-03-29 12:37 (ссылка)
как я понял, она преобразует кодировку приложения на удаленном компьютере в UTF-8, в котором работает xterm (и, надеюсь, обратно):

http://unix.stackexchange.com/questions/25350/working-with-filenames-in-a-different-encoding-over-ssh

она включается в поставку иксов или что-то такое, у меня она, как ни странно, уже есть на компе
(но на сервере может не быть, вероятно). она запускается префиксом, то есть тебе нужно
будет говорить luit mailx (или сделать alias).

но я не уверен, что это оно (судя по описанию тобой желаемого).

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tiphareth
2017-03-29 19:24 (ссылка)
>в UTF-8, в котором работает xterm

у меня он работает в koi8-r

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]polytheme
2017-03-29 19:41 (ссылка)
потому и добавил последнее предложение (вряд ли это то, чего ты хочешь): _если бы он работал в utf8_ (т.е. системная локаль была бы такая на локальном компе), luit бы тебя спас (гипотетически): xterm корректно хватал бы utf-выход с emacs, пересылал бы utf на удаленный комп, а там luit отображал бы его в koi.

а, вот что интересно сделать:
скопировать из буфера emacs'а какую-нибудь русскую строчку (делая разные set-clipboard-coding-system - koi8 и utf8)
и набрать

xclip -o > clip.txt
а потом посмотреть, что лежит в clip.txt - так мы увидим, что emacs кладет в буфер.

xclip умеет и наоборот отправлять текст в буфер обмена; с помощью него можно посмотреть, кто где обламывается и глючит (emacs и/или xterm).

судя по тому, что ты говоришь - emacs; но все равно интересно, как именно он лажает.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tiphareth
2017-03-29 19:48 (ссылка)
>(делая разные set-clipboard-coding-system - koi8 и utf8)
>а потом посмотреть, что лежит в clip.txt -
>так мы увидим, что emacs кладет в буфер.

та же самая строчка, набранная юникодом (в обоих случаях)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]polytheme
2017-03-29 19:53 (ссылка)
а если xclip -noutf8 -o > clip.txt ?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tiphareth
2017-03-29 20:03 (ссылка)
то же самое, что и в терминале: та же строчка в кои для koi8-r если
(set-selection-coding-system (quote koi8-unix))
пробелы и знаки препинания для
(set-clipboard-coding-system (quote utf-8-unix))

(Ответить) (Уровень выше)


(Анонимно)
2017-03-29 08:41 (ссылка)
Скунс С strikes back!

(Ответить)


[info]akater
2017-05-09 04:12 (ссылка)
Проблема решилась, но всё же:

overlay необязателен, в том смысле что старые ebuild-ы (и патчи в files, и вообще всё кроме исходников) можно найти в архивах gentoo.org:
https://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/app-editors/emacs/?hideattic=0

note hideattic=0

стоит иметь свой overlay, держать там самое важное, включая toolchain, и никогда ничего не удалять (запретить удаление в /etc/eclean, по крайней мере в нынешних версиях)

иначе капут

(Ответить) (Ветвь дискуссии)


[info]tiphareth
2017-05-09 07:21 (ссылка)
спасибо!

(Ответить) (Уровень выше)