Как скопировать только видимый текст из свернутого состояния в буфер организационного режима?

#emacs #org-mode

#emacs #org-mode

Вопрос:

Как скопировать org-файл в другой буфер, если исходный:

 ** TODO task #1
   - some text for task #1
** TODO task #2 
   - some text for task #2
  

но когда вы свернете все задачи, это будет выглядеть так

 ** TODO task #1 ...
** TODO task #2 ...
  

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

Комментарии:

1. Я думаю, что реальный пример, показывающий состояния до и после, был бы полезен. С вашим текущим описанием я не уверен на 100%, чего вы пытаетесь достичь. Убедитесь, что вы используете синтаксис Stack Overflow «markdown» для форматирования текста примера, иначе вы получите строки, переходящие друг в друга (как это произошло выше).

2. Я думаю, вопрос в том, «Как скопировать только видимый текст из свернутого состояния в буфер организационного режима?»

3. org-mode является производным от outline-mode , так что, похоже, outline-headers-as-kill это должно быть актуально, но на самом деле, похоже, это не работает. Хотя, кажется, стоит упомянуть — может быть, есть относительно простое исправление?

Ответ №1:

Согласно комментарию Хенди, в текущих версиях org-mode вы используете org-copy-visible ( C-c C-x v ) для копирования видимого содержимого текущей области в кольцо уничтожения. ( C-x h можно использовать сначала для разметки всего буфера, как обычно.)

Кроме того, обратите внимание, что меню отправки экспорта ( C-x C-e ) предоставляет переключатель «Только видимый», если вы хотите экспортировать это содержимое в другой формат.

Для более старых версий org-mode по-прежнему должен применяться приведенный ниже оригинальный ответ:


M-x org-export-visible RET SPC скопирует только видимый в данный момент текст вашего буфера организационного режима в новый буфер.

org-export-visible — это интерактивная скомпилированная функция Lisp в `org-exp.el’.

(org-export-АРГУМЕНТ видимого ТИПА)

Создайте копию видимой части текущего буфера и экспортируйте ее. Копия создается во временном буфере и удаляется после использования. TYPE — это конечный ключ (в виде строки), который также выбирает команду экспорта в диспетчере экспорта `C-c C-e’. В качестве особого случая, если вы введете SPC в командной строке, временный файл org-mode не будет удален, а будет представлен вам, чтобы вы могли продолжать его использовать. Команде экспорта передается префикс arg ARG.

Если вы хотите привязать это (к C-c o в этом примере), вы могли бы использовать следующее:

 (add-hook 'org-mode-hook 'my-org-mode-hook)
(defun my-org-mode-hook ()
  "Custom behaviours when entering org-mode."
  (local-set-key (kbd "C-c o") (function (lambda () (interactive)
                                           (org-export-visible ?s nil)))))
  

Комментарии:

1. К вашему сведению: теперь это делается с помощью C-c C-x v согласно руководству по orgmode

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

3. Спасибо @NikanaReklawyks 🙂 Я уже оказывался в подобной ситуации раньше. Был даже один случай, когда я не смог проголосовать за ответ, который решил мою проблему, потому что оказалось, что он был написан мной 🙂

4. Это очень полезно, спасибо! Для будущих входящих запросов Google: это также работает для «свернутых» ссылок («описательные ссылки»). Итак, если вы хотите скопировать ссылки без [[…]] элементов, только заголовок, вы можете установить ссылки в «описательные», выбрать и скопировать. Полезно для совместного использования текста организации, содержащего ссылки.

Ответ №2:

Существует org-copy-visible , который должен делать именно то, что вам нужно.

Комментарии:

1. отлично, именно то, что мне было нужно.

Ответ №3:

Попробуйте M-x org-todo-list (или C-c a t). При этом отображается список записей о задачах (в файлах, перечисленных в списке файлов повестки дня) в буфере * Org Agenda*.

Возможно, вам потребуется добавить ваш текущий файл в список файлов повестки дня. Из org-agenda документации:

Если текущий буфер находится в режиме организации и посещает файл, вы также можете сначала нажать ‘<‘ один раз, чтобы указать, что повестка дня должна быть временно (до следующего использования C-ca) ограничена текущим файлом. Двойное нажатие ‘<‘ означает ограничение текущим поддеревом или областью (если она активна).