将daily笔记以逆序datetree方式refile到另一个窗口
Table of Contents
- 使用场景
- 函数内容
- 运行效果
使用场景
整理org-roam的daily笔记时,希望能够将涉及某些node的标题移动到该node并按逆序时间树排序
函数内容
(use-package org-reverse-datetree)
(setq-default org-reverse-datetree-level-formats
'("%Y" ; year
"%Y-%m %B"
"%Y-%m-%d %A" ; date
))
(defun org-get-next-window-file ()
(if (delq (selected-window) (window-list-1 (next-window nil 'nomini 'visible)))
(let ((buffer2 (window-buffer (next-window nil 'nomini 'visible))))
(with-current-buffer buffer2
(when (eq major-mode 'org-mode)
(buffer-file-name buffer2))))))
(defun org-get-current-window-title ()
(with-current-buffer (window-buffer)
(pcase (org-collect-keywords '("TITLE"))
(`(("TITLE" . ,val))
(setq title (car val))))))
(defun org-refile-to-other-window (arg)
(interactive "P")
(if (org-get-next-window-file)
(org-reverse-datetree-refile-to-file (org-get-next-window-file) (date-to-time (org-get-current-window-title)))
))
运行效果
在左右并排的两个window间,会根据本buffer的title,将指定的headline refile到另一个窗口,并按reverse-datetree排列
4 个赞
我用的是 Hierarchical archiving for Org-mode · GitHub
结构性的归档,不管是 TODO 还是 daily log 我都用他来,还蛮好用的。相较你这个可能少了时序,不过归档是最新的放在最上方。
1 个赞
这个方式的需求来自于整理org-roam的笔记,特别是org-roam-buffer里的daily笔记,所以泛用性确实不如org-archive相关函数
自动删除org-roam空的daily文件
(defun vulpea-buffer-p ()
"Return non-nil if the currently visited buffer is a note."
(and buffer-file-name
(string-prefix-p
(expand-file-name (file-name-as-directory YOUR-ORG-ROAM-DIR))
(file-name-directory buffer-file-name))))
(defun my/delete-empty-daily ()
"delete daily node without content"
;;限制在daily文件夹
(if (and (vulpea-buffer-p) (string-match "daily" (file-name-directory buffer-file-name)))
;;查找heading
(unless (org-map-entries
(lambda ()
(org-entry-get nil "ITEM"))
nil nil)
(delete-file (buffer-file-name))
(kill-this-buffer))))
(add-hook 'after-save-hook #'my/delete-empty-daily)
1 个赞
Table of Contents
-
调用matplotlib画图,并存储到Windows的临时文件夹中
- 根据已有表格绘图
- 根据代码块标题绘图
- 运行结果
调用matplotlib画图,并存储到Windows的临时文件夹中
根据已有表格绘图
在表格上方标注名称,如:
#+NAME: myTimeTable
|1|2|
|-+-|
|3|4|
在python代码行的header里传入表格数据(在我用的org 9.6.14中数据会自动去除标题行和分割行,只剩下面的数据行):
#+begin_src python :results file link :var data=myTimeTable
import os,matplotlib, numpy
……
savedir = os.getenv('TEMP')+'\\myTimeTable.png'
plt.savefig(savedir)
return savedir
根据代码块标题绘图
会把代码块上方的name动态传入到代码中
#+name: 代码块name
#+begin_src python :var filename=(org-element-property :name (org-element-context)) :results file link
import os,matplotlib, numpy
……
savedir = os.getenv('TEMP')+'\\'+filename+'.png'
plt.savefig(savedir)
return savedir
运行结果
运行后会在下方生成
#+RESULTS:
[[file:..../XXX.png]]
的图片,可以配合inline 图片相关函数使用
;; (setq org-startup-with-inline-images t)
;;; Only display inline images under current subtree.
(defun org-display-subtree-inline-images (&optional state)
"Toggle the display of inline images under current subtree.
INCLUDE-LINKED is passed to `org-display-inline-images'."
(interactive)
(save-excursion
(save-restriction
(org-narrow-to-subtree)
(let* ((beg (point-min))
(end (point-max))
(image-overlays (cl-intersection
org-inline-image-overlays
(overlays-in beg end)))
(display-inline-images-local
(lambda ()
(org-display-inline-images t t beg end)
(setq image-overlays (cl-intersection
org-inline-image-overlays
(overlays-in beg end)))
(if (and (org-called-interactively-p) image-overlays)
(message "%d images displayed inline"
(length image-overlays)))))
(hide-inline-images-local
(lambda ()
(org-remove-inline-images)
(message "Inline image display turned off"))))
(if state
(pcase state
('subtree
(funcall display-inline-images-local))
('folded
(funcall hide-inline-images-local)))
(if image-overlays
(funcall display-inline-images-local)
(funcall hide-inline-images-local)))))))
(define-key org-mode-map (kbd "C-c C-x C-v") 'org-display-subtree-inline-images)
;;; auto display inline images on Org TAB cycle expand headlines.
(add-hook 'org-cycle-hook #'org-display-subtree-inline-images)
(add-hook 'org-babel-after-execute-hook 'org-redisplay-inline-images)
参考:分享几个关于Org-link的函数 - #6,来自 stardiviner
1 个赞