Сортировка заголовков в файле ORG

10

Я делаю заметки в простом файле в режиме org, который имеет следующую структуру:

* Toto, A
Notes about Toto.
* Titi, C
Notes about Titi.
* Tutu, A
Notes about Tutu.

Я хотел бы отсортировать файл так, чтобы все заголовки с Aпредшествующими заголовкам с B, которые в свою очередь предшествуют заголовкам с C, и так далее. Есть ли автоматический способ сделать это с помощью режима org?

JCH
источник
4
Ты пробовал org-sort?
abo-abo
C-c ^по памяти (может быть что-то похожее, заканчивающееся ^, например, и C-x C-c ^т. д.)
wvxvw

Ответы:

13

Есть org-sortкоманда, но вам может понадобиться настроить структуру файла, чтобы получить желаемые результаты (если я правильно понимаю вопрос).

Используйте org-sort( C-c ^) для сортировки записей в схеме, строк в таблице или элементов в списке. Например, из заголовка вы можете позвонить, org-sortчтобы отсортировать все дочерние записи.

В вашем примере вы хотите отсортировать записи верхнего уровня в вашей схеме, поэтому сначала выберите все записи. При звонке org-sortвам будет предложено выполнить сортировку: по алфавиту, по приоритету и т. Д.

Я предполагаю из вашего примера, что ожидаемый конечный результат:

* Toto, A
Notes about Toto.
* Tutu, A
Notes about Tutu.
* Titi, C
Notes about Titi.

То есть, вы хотите отсортировать по алфавиту, но имеет ли последняя буква приоритет? Для этого нет встроенной сортировки. Если вы изменили записи, чтобы сначала поместить букву сортировки (например A, Toto), тогда будет работать обычная алфавитная сортировка. Другой вариант - переместить эту информацию в свойство каждого элемента, а затем отсортировать по свойству.

Как @nanny предложил в комментариях, org-sortтакже может вызывать пользовательскую функцию сортировки. Таким образом, вы можете использовать свой существующий файл без необходимости изменения всех записей. Вот функция сортировки, которая находит текущий текст заголовка и добавляет последний символ к началу, чтобы он имел приоритет. Вам понадобится что-то более надежное, если ваши заголовки не будут следовать именно этому образцу.

(defun my-sort-last-letter ()
  (let ((text
         (plist-get
          (cadr (org-element-headline-parser (line-end-position)))
          :raw-value)))
    (concat (string (aref text (- (string-width text) 1))) text)))
glucas
источник
1
Альтернативой изменению файла является использование [f]uncтипа сортировки org-sortи написание функции для сортировки на основе существующей структуры.
няня
Это очень хорошо решило мою проблему, после того, query-replace-regexpкак я отредактировал несколько заголовков, которые не совсем соответствовали правильному формату. Гораздо проще, чем конвертировать все мои данные в свойства.
JCH
... или вы можете переместить его в тег, то есть "* Toto: A:", затем отсортировать Cc ^ r TAGS
jtgd
1
Просто, чтобы вы знали, что у меня есть эта проблема ровно раз в год, и я вчера снова использовал ваше решение.
16:16
0

Я помещаю заголовки с разными приоритетами в любом месте файла, меня не волнует порядок. Позже я просматриваю их, отсортированные с представлениями повестки дня . С помощью тегов отсортированные заголовки из конкретных категорий просматриваются с помощью пользовательских представлений повестки дня .

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

Адам Скободзински
источник