mirror of
https://github.com/SqrtMinusOne/dotfiles.git
synced 2025-12-11 19:45:25 +03:00
feat(emacs): targeting refile & hledger
This commit is contained in:
parent
4617e07cfd
commit
941c1d44ee
3 changed files with 85 additions and 6 deletions
|
|
@ -3,6 +3,7 @@
|
||||||
"the-silver-searcher"
|
"the-silver-searcher"
|
||||||
"ripgrep"
|
"ripgrep"
|
||||||
"emacs-vterm"
|
"emacs-vterm"
|
||||||
|
"hledger"
|
||||||
"imagemagick"
|
"imagemagick"
|
||||||
"yt-dlp"
|
"yt-dlp"
|
||||||
"mpv"
|
"mpv"
|
||||||
|
|
|
||||||
|
|
@ -850,6 +850,7 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer."
|
||||||
:background ,(doom-color 'bg)
|
:background ,(doom-color 'bg)
|
||||||
:foreground ,(doom-color 'yellow)
|
:foreground ,(doom-color 'yellow)
|
||||||
:underline ,(doom-color 'yellow)))))
|
:underline ,(doom-color 'yellow)))))
|
||||||
|
`(tab-bar ((t (:background nil :foreground nil))))
|
||||||
`(org-block ((t (:background ,(color-darken-name (doom-color 'bg) 3)))))
|
`(org-block ((t (:background ,(color-darken-name (doom-color 'bg) 3)))))
|
||||||
`(org-block-begin-line ((t (
|
`(org-block-begin-line ((t (
|
||||||
:background ,(color-darken-name (doom-color 'bg) 3)
|
:background ,(color-darken-name (doom-color 'bg) 3)
|
||||||
|
|
@ -2647,8 +2648,7 @@ Returns (<buffer> . <workspace-index>) or nil."
|
||||||
"c" 'org-capture
|
"c" 'org-capture
|
||||||
"a" 'org-agenda)
|
"a" 'org-agenda)
|
||||||
|
|
||||||
(setq org-refile-targets
|
(setq org-refile-targets '())
|
||||||
'())
|
|
||||||
(setq org-refile-use-outline-path 'file)
|
(setq org-refile-use-outline-path 'file)
|
||||||
(setq org-outline-path-complete-in-steps nil)
|
(setq org-outline-path-complete-in-steps nil)
|
||||||
|
|
||||||
|
|
@ -2900,7 +2900,9 @@ Returns (<buffer> . <workspace-index>) or nil."
|
||||||
,@project-files)))
|
,@project-files)))
|
||||||
(dolist (file project-files)
|
(dolist (file project-files)
|
||||||
(add-to-list 'org-refile-targets
|
(add-to-list 'org-refile-targets
|
||||||
`(,file :maxlevel . 2)))))
|
`(,file :tag . "refile"))
|
||||||
|
(add-to-list 'org-refile-targets
|
||||||
|
`(,file :regexp . ,(rx (or "Tasks")))))))
|
||||||
|
|
||||||
(with-eval-after-load 'org-roam
|
(with-eval-after-load 'org-roam
|
||||||
(my/org-roam-refresh-agenda-list))
|
(my/org-roam-refresh-agenda-list))
|
||||||
|
|
@ -2914,6 +2916,23 @@ Returns (<buffer> . <workspace-index>) or nil."
|
||||||
:templates
|
:templates
|
||||||
`(,my/org-roam-project-template)))
|
`(,my/org-roam-project-template)))
|
||||||
|
|
||||||
|
(defun my/org-target-refile (&optional arg)
|
||||||
|
(interactive "P")
|
||||||
|
(let* ((selected-file
|
||||||
|
(completing-read
|
||||||
|
"Refile to: "
|
||||||
|
(seq-uniq (mapcar #'car org-refile-targets))))
|
||||||
|
(org-refile-targets
|
||||||
|
(cl-loop for target in org-refile-targets
|
||||||
|
if (string-equal (car target) selected-file)
|
||||||
|
collect target)))
|
||||||
|
(org-refile-cache-clear)
|
||||||
|
(org-refile arg)))
|
||||||
|
|
||||||
|
(general-define-key
|
||||||
|
:keymaps 'org-mode-map
|
||||||
|
"C-c C-w" #'my/org-target-refile)
|
||||||
|
|
||||||
(defun my/org-roam-daily-extract-target-links ()
|
(defun my/org-roam-daily-extract-target-links ()
|
||||||
(save-excursion
|
(save-excursion
|
||||||
(goto-char (point-min))
|
(goto-char (point-min))
|
||||||
|
|
@ -4482,6 +4501,20 @@ Returns (<buffer> . <workspace-index>) or nil."
|
||||||
(add-hook 'pomm-on-tick-hook 'pomm-update-mode-line-string)
|
(add-hook 'pomm-on-tick-hook 'pomm-update-mode-line-string)
|
||||||
(add-hook 'pomm-on-status-changed-hook 'pomm-update-mode-line-string))
|
(add-hook 'pomm-on-status-changed-hook 'pomm-update-mode-line-string))
|
||||||
|
|
||||||
|
(use-package hledger-mode
|
||||||
|
:straight t
|
||||||
|
:mode (rx ".journal" eos)
|
||||||
|
:config
|
||||||
|
(setq hledger-jfile (concat org-directory "/ledger/ledger.journal"))
|
||||||
|
(add-hook 'hledger-mode-hook
|
||||||
|
(lambda ()
|
||||||
|
(make-local-variable 'company-backends)
|
||||||
|
(add-to-list 'company-backends 'hledger-company))))
|
||||||
|
|
||||||
|
(use-package flycheck-hledger
|
||||||
|
:straight t
|
||||||
|
:after (hledger-mode))
|
||||||
|
|
||||||
(setq calendar-date-style 'iso) ;; YYYY/mm/dd
|
(setq calendar-date-style 'iso) ;; YYYY/mm/dd
|
||||||
(setq calendar-week-start-day 1)
|
(setq calendar-week-start-day 1)
|
||||||
(setq calendar-time-display-form '(24-hours ":" minutes))
|
(setq calendar-time-display-form '(24-hours ":" minutes))
|
||||||
|
|
|
||||||
51
Emacs.org
51
Emacs.org
|
|
@ -1674,6 +1674,7 @@ Also, a hook allows me to change doom-theme more or less at will, although I do
|
||||||
:background ,(doom-color 'bg)
|
:background ,(doom-color 'bg)
|
||||||
:foreground ,(doom-color 'yellow)
|
:foreground ,(doom-color 'yellow)
|
||||||
:underline ,(doom-color 'yellow)))))
|
:underline ,(doom-color 'yellow)))))
|
||||||
|
`(tab-bar ((t (:background nil :foreground nil))))
|
||||||
`(org-block ((t (:background ,(color-darken-name (doom-color 'bg) 3)))))
|
`(org-block ((t (:background ,(color-darken-name (doom-color 'bg) 3)))))
|
||||||
`(org-block-begin-line ((t (
|
`(org-block-begin-line ((t (
|
||||||
:background ,(color-darken-name (doom-color 'bg) 3)
|
:background ,(color-darken-name (doom-color 'bg) 3)
|
||||||
|
|
@ -3869,8 +3870,7 @@ Hotkeys
|
||||||
|
|
||||||
Refile targets
|
Refile targets
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(setq org-refile-targets
|
(setq org-refile-targets '())
|
||||||
'())
|
|
||||||
(setq org-refile-use-outline-path 'file)
|
(setq org-refile-use-outline-path 'file)
|
||||||
(setq org-outline-path-complete-in-steps nil)
|
(setq org-outline-path-complete-in-steps nil)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
@ -4216,7 +4216,9 @@ Now, let's integrate the found project notes to the rest of Org Mode. Besides =o
|
||||||
,@project-files)))
|
,@project-files)))
|
||||||
(dolist (file project-files)
|
(dolist (file project-files)
|
||||||
(add-to-list 'org-refile-targets
|
(add-to-list 'org-refile-targets
|
||||||
`(,file :maxlevel . 2)))))
|
`(,file :tag . "refile"))
|
||||||
|
(add-to-list 'org-refile-targets
|
||||||
|
`(,file :regexp . ,(rx (or "Tasks")))))))
|
||||||
|
|
||||||
(with-eval-after-load 'org-roam
|
(with-eval-after-load 'org-roam
|
||||||
(my/org-roam-refresh-agenda-list))
|
(my/org-roam-refresh-agenda-list))
|
||||||
|
|
@ -4236,6 +4238,27 @@ Find or capture a project.
|
||||||
:templates
|
:templates
|
||||||
`(,my/org-roam-project-template)))
|
`(,my/org-roam-project-template)))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
***** Targeting refile
|
||||||
|
Because in the previous section I've added a lot of stuff to the =org-refile-targets=, the list given by =org-refile= becomes a bit too large. So let's make a function that performs a sort of two-step refile:
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(defun my/org-target-refile (&optional arg)
|
||||||
|
(interactive "P")
|
||||||
|
(let* ((selected-file
|
||||||
|
(completing-read
|
||||||
|
"Refile to: "
|
||||||
|
(seq-uniq (mapcar #'car org-refile-targets))))
|
||||||
|
(org-refile-targets
|
||||||
|
(cl-loop for target in org-refile-targets
|
||||||
|
if (string-equal (car target) selected-file)
|
||||||
|
collect target)))
|
||||||
|
(org-refile-cache-clear)
|
||||||
|
(org-refile arg)))
|
||||||
|
|
||||||
|
(general-define-key
|
||||||
|
:keymaps 'org-mode-map
|
||||||
|
"C-c C-w" #'my/org-target-refile)
|
||||||
|
#+end_src
|
||||||
**** Automatic transclusion for Dailies
|
**** Automatic transclusion for Dailies
|
||||||
I've been using org-journal for quite some time, and while it's great, I don't like its linear structure too much. I have all kinds of stuff written there - things related to my job, various personal projects, etc, and it's pretty hard to query a specific thing.
|
I've been using org-journal for quite some time, and while it's great, I don't like its linear structure too much. I have all kinds of stuff written there - things related to my job, various personal projects, etc, and it's pretty hard to query a specific thing.
|
||||||
|
|
||||||
|
|
@ -6516,6 +6539,28 @@ My package for doing Pomodoro timer.
|
||||||
(add-hook 'pomm-on-tick-hook 'pomm-update-mode-line-string)
|
(add-hook 'pomm-on-tick-hook 'pomm-update-mode-line-string)
|
||||||
(add-hook 'pomm-on-status-changed-hook 'pomm-update-mode-line-string))
|
(add-hook 'pomm-on-status-changed-hook 'pomm-update-mode-line-string))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
*** hledger
|
||||||
|
Trying out hledger.
|
||||||
|
|
||||||
|
| Guix dependency |
|
||||||
|
|-----------------|
|
||||||
|
| hledger |
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package hledger-mode
|
||||||
|
:straight t
|
||||||
|
:mode (rx ".journal" eos)
|
||||||
|
:config
|
||||||
|
(setq hledger-jfile (concat org-directory "/ledger/ledger.journal"))
|
||||||
|
(add-hook 'hledger-mode-hook
|
||||||
|
(lambda ()
|
||||||
|
(make-local-variable 'company-backends)
|
||||||
|
(add-to-list 'company-backends 'hledger-company))))
|
||||||
|
|
||||||
|
(use-package flycheck-hledger
|
||||||
|
:straight t
|
||||||
|
:after (hledger-mode))
|
||||||
|
#+end_src
|
||||||
*** Calendar
|
*** Calendar
|
||||||
Emacs' built-in calendar. Can even calculate sunrise and sunset times.
|
Emacs' built-in calendar. Can even calculate sunrise and sunset times.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue