Лучший способ преобразовать КАТЕГОРИЮ в ИМУЩЕСТВО в файле emacs org - PullRequest
2 голосов
/ 02 августа 2011

Каков наилучший метод преобразования CATEGORY в PROPERTY в файле org.

#+CATEGORY: NETWORKING

в

:PROPERTIES:
:CATEGORY: NETWORKING
:END:

Для этого я использовал следующий код elisp.

(let ((buf_name "home.org") (current_line 0) (current_string ""))
  (set-buffer buf_name)
  (goto-char (point-min))
  (while (re-search-forward "#\\+CATEGORY: \\(.*$\\)" nil t)
    (replace-match ":PROPERTIES:\n:CATEGORY: \\1\n:END:")))

Есть ли лучший метод.

РЕДАКТИРОВАТЬ: - регулярное выражение

"#\\+CATEGORY: \\(\\w+\\)"

было изменено на

"#\\+CATEGORY: \\(.*$\\)"

, так как я имелКАТЕГОРИЯ "C ++", которая не распознается как слово, только слово "C" в "C ++" распознается как слово.

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Попробуйте это:

(save-excursion
  (let* (file-cat 
     (file-list (org-agenda-files t)))
    (dolist (file file-list)
      (find-file file)
      (goto-char (point-min))
      (re-search-forward "CATEGORY")
      (setq file-cat (substring-no-properties 
              (org-get-category (point))))
      (beginning-of-line)
      (kill-line)
      (goto-char (point-min))
      (outline-next-heading)
      (org-set-property "CATEGORY" file-cat)
      (while (not (condition-case nil (outline-forward-same-level 1)
            (error t)))
    (org-set-property "CATEGORY" file-cat))
      (save-buffer))))

Приведенный выше код получает категорию файла, удаляет устаревшую строку и затем устанавливает для свойства CATEGORY заголовка каждого верхнего уровня значение старой категории.* Редактировать: отредактировал код в соответствии с делом, указанным Джонатаном

1 голос
/ 02 августа 2011

Вы можете использовать это:

(let ((buf_name "home.org")
      (current_line 0)
      (current_string ""))
  (with-current-buffer buf_name
    (replace-regexp "#\\+CATEGORY: \\(\\w+\\)"
                    ":PROPERTIES:\n:CATEGORY: \\1\n:END:" 
                    t
                    (point-min)
                    (point-max))))

Но это только стилистическое изменение, концептуально лучшего способа не существует.

Более того: ящики свойств и категории не эквивалентны: второе расширениедо конца файла, первый только внутри текущего поддерева.Поэтому вам, скорее всего, придется потом редактировать его вручную.

...