알려진 고정 위치로 org-refile


11

제목을 가져 와서 특정 위치로 파일을 다시 작성하는 함수를 작성하려고합니다. 의 의사 org-refile

(org-refile &optional GOTO DEFAULT-BUFFER RFLOC MSG)

RFLOC이다

RFLOC can be a refile location obtained in a different way.

그러나 나는 "다른 방법"이 무엇인지 전혀 알지 못하며 반나절 동안 인터넷 검색을 해왔으며 어떤 예도 보지 못했습니다. 파일을 알고 대상의 헤드 라인을 알고 있지만 원하는 형식으로 구문을 작성하는 구문을 모르겠습니다. 내가 얻은 가장 가까운 것은 :

(org-refile nil #("~/Org/bookmarks.org")

그러면 제목을 입력하라는 메시지가 표시되지만, 알림을 표시하고 싶지는 않습니다.

나는 새로운 것을 처음 접했고 내가 생각할 수있는 모든 구문을 추측했다. 누구든지 이것을 표현하는 방법을 알고 있습니까?


실제로 원하는 것을 수행 할 수있는 방법이 있어야하지만 찾지 못한 경우 해결 방법은 다음과 같습니다. stackoverflow.com/questions/7681326/…
Brian Z

나는 당신이 찾고있는 것을하기 위해 다음 스 니펫을 사용합니다 : (let* ( (org-archive-location "/path/to/org-file::* NAME_OF_HEADING") (org-archive-save-context-info nil)) (org-archive-subtree)) 에 대해 질문 한 후에 아마도 이것을 대답에 넣지 않을 것입니다 org-refile. 두 개의 콜론이되어 있습니다 필요합니다. 나는 이것을 항상 사용하고 심지어 org-archive-subtree전체 조직 파일을 자동으로 재구성 할 때 수백 개의 메시지가 없도록 메시지를 억제 하는 사용자 정의 버전을 만들었습니다 .
lawlist

고마워 법률가, 이것은 좋은 발췌 문장이며 아마도 다른 맥락에서 이것을 사용할 것입니다. 여기에 문서화 한 것이 좋습니다.
jtgd

답변:


9

RFLOC이 이전에 어떤 모습 일지 궁금했지만 조사한 적이 없습니다. 조직 소스 코드를 살펴보면 다음으로 구성된 목록이어야합니다.

  • 표제
  • 파일
  • 다시 (정규 표현)
  • pos (타겟 제목의 위치)

나는 re요소를 실험하지 않았지만 org-refile주어진 FILE 및 HEADING에서 작성된 RFLOC로 호출하는 간단한 함수가 있습니다 .

(defun my/refile (file headline)
  (let ((pos (save-excursion
               (find-file file)
               (org-find-exact-headline-in-buffer headline))))
    (org-refile nil nil (list headline file nil pos))))

그러면 대상 파일이 열리고 org 함수를 사용하여 대상 헤드 라인의 위치를 ​​찾은 다음에 전달할 RFLOC 목록을 작성합니다 org-refile.


5

@glucas에게 감사드립니다. 최종 솔루션으로 솔루션을 작업했습니다. 핵심 정보는 RFLOC의 형식을 알고있었습니다. 파일 이름과 헤드 라인 텍스트 목록을 제공하는 실험을했지만 다른 요소와 여분의 요소가 누락되었습니다. 이것이 내가 끝낸 것입니다.

(defun jay/refile-to (file headline)
    "Move current headline to specified location"
    (let ((pos (save-excursion
                 (find-file file)
                 (org-find-exact-headline-in-buffer headline))))
      (org-refile nil nil (list headline file nil pos))))

(defun jay/refile-to-bookmarks ()
    "Move current headline to bookmarks"
    (interactive)
    (org-mark-ring-push)
    (jay/refile-to "~/Org/bookmarks.org" "New")
    (org-mark-ring-goto))

에 대한 문서 save-excursion는 우리가 시작한 위치로 돌아갈 것이라고 말하지만 그렇게 작동하지 않는 것 같습니다. 그것은 대상 목적지에 나를두고, 그것은 일반에게 적합 할 수 refile-to있지만, 나는 그것이 라인을 옮기고 내가 있던 곳에 남아서 저장하고 복원 할 수 있기를 원했습니다 refile-to-bookmark.

이 작업의 목적은 RSS 피드를 읽기 위해 스크립트에서 제공되는 HTML 링크 목록으로 시작하는 것입니다. 나는 원래 스크립트에 mu4e 용 maildir 파일을 생성했지만 어쨌든 브라우저에 대한 링크를 따라 가고 관심있는 것을 북마크하는 것을 발견 했으므로 이제 ** [[uri][title]]줄 목록을 생성합니다 . 책갈피 (같은 형식의 줄을 생성 함) 대신 emacs에서 uzbl 브라우저로의 링크를 따라 간 후 태그를 설정 한 후이 명령을 사용하여 링크를 bookmarks.org로 이동합니다. org speed-commands를 사용 t하여 태그 b를 지정 하고이 명령 을 사용하기 때문에 조금 더 빠릅니다 . 나는 지금 행복하고 더 많은 것을 배우기를 좋아합니다!


RFLOC의 첫 번째 요소는 실제로 모든 문자열이 될 수 있습니다. "xxx로 파일로 재 분류"메시지에 표시된 대상 위치의 논리적 이름으로 만 사용됩니다. 위치는 실제로 파일과 위치 마커로 정의됩니다. re내가 알 수있는 한 RFLOC 의 요소는 무시됩니다. 대상 위치를 처리하는 org.el의 다른 기능에 사용됩니다.
glucas

1
이해가 안 이유로, 당신 얻을 수 있었다 refile-to후, 마지막에이를 추가하여 원래의 위치로 돌아갑니다 기능을 let: (switch-to-buffer (current-buffer)). 이것은 아무것도하지 않아야하는 것처럼 보이지만 나에게 효과적입니다.
glucas

다시 @glucas 감사합니다. 예 그 일에 보인다 그리고 내 교체 한 -push-goto그와. 다른 버퍼에 남아있는 것이 이상하게 보이지만 현재 버퍼를 이전 버퍼로 간주합니다.
jtgd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.