LINUX.ORG.RU

[emacs] org-mode и русский язык

 


0

1

Столкнулся со следующей проблемой.
При применении tangle некорректно вставляются русские буквы в комментариях с обратными ссылками на org-файл.
Пример:

;; [[file:~/progs/exercises/sicp/summary.org::*%D0%92%D1%81%D0%BF...
При экспорте и tangling таких проблем нет. Буду благодарен за любую подсказку :)

Если я правильно разобрался в исходном коде, то org-mode всем такие ссылки защищает. Твои русские буквы из heading сначала конвертируются в utf-8, а потом уже превращаются в такие hex-последовательности. Это, наверное, чтобы глобально и надежно было, чтобы независимость обратных ссылок от кодировки сохранить. И далеко не факт, что если ссылки станут русскими, то они сразу корректно заработают. Надо дальше смотреть код, можно ли их в текущей раелизации сделать читабельными.

Я вижу, что при tangle вызывается функция org-babel-spec-to-string (ob-tangle.el), оттуда безусловно вызывается org-link-escape, которая непосредственно и перекодирует твои ссылки подобным образом.

Zubok ★★★★★
()

Я babel никогда не использовал. Поясни, если такой комментарий встречается в сгенерированном исходнике, то он кликабельный или просто как информация висит?

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Да, по нему можно перейти к нужному заголовку в org-файле. Формат ссылки: (ссылка на мануал)

file:projects.org::*task title            heading search in Org file
Переход осуществляется вызовом org-open-at-point-global. (ссылка на мануал)

kermzyxer
() автор топика
Ответ на: комментарий от kermzyxer

Тогда дело не такое простое. По всей видимости, ручек изменить это поведение нет, надо функции переписывать, так как туда преобразование вхардкодено. В org-open-at-point как раз видно, что на ссылку явно вызывается org-link-unescape (преобразуется назад в текст), а потом уже осуществляется поиск текста заголовка в org-файле.

Обходной вариант. Подумать насчет того, чтобы при генерировании комментария над ссылкой [[file:..] дублировалось человекочитаемое название заголовка. В этом случае надо смотреть, есть ли штатная (описанная в документации) возможность влезть в процесс генерации комментариев.

Zubok ★★★★★
()
Ответ на: комментарий от kermzyxer

>Спасибо большое за информацию. Я правильно понял, что это не баг, а фича?

Ага, это фича, похоже. Конечно, фичу можно изменить. Сделать нужный регексп и обходить преобразование для конкретного вида ссылок с заголовком и обратное преобразование также обходить.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Нашел отличное решение. В настройках можно прописать, чтобы внешние ссылки всегда ставились через ID.

В коде примерно такой комментарий:

;; [[id:b7af871f-3f66-4bed-ac1b-18cc6924643e][my-hello-babel-function]]
...
;; my-hello-babel-function ends here
В org-файл вставляется такая штука:
:PROPERTIES:
:ID:       b7af871f-3f66-4bed-ac1b-18cc6924643e
:END:
В свернутом виде:
:PROPERTIES:...

надо смотреть, есть ли штатная (описанная в документации) возможность влезть в процесс генерации комментариев.

Есть, оказывается, это очень просто делается.

kermzyxer
() автор топика
Ответ на: комментарий от kermzyxer

Это хорошо, что такое есть. Я где-то в рассылке org-mode случайно видел информацию про id, пока разбирался с вопросом в топике, но не обратил должного внимания.

Zubok ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.