From a881bedbf1c59018187f3a97ae7fe37cb4cefdc8 Mon Sep 17 00:00:00 2001 From: Daneel Date: Sat, 21 Feb 2026 00:01:39 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20org-agenda=20cursor=20na=20n=C3=A1zev?= =?UTF-8?q?=20=C3=BAkolu=20(za=20TODO=20+=20prioritou)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.el | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/config.el b/config.el index 456ea14..3de026c 100644 --- a/config.el +++ b/config.el @@ -780,6 +780,39 @@ ;; Zaregistruj hook — spustí se před každým exportem (add-hook 'org-export-before-processing-hook #'my/org-auto-tabularx) +;; +;; Org Agenda: kurzor na název úkolu (za TODO keyword a prioritou) +;; Po každém n/p (nebo j/k v evil mode) přeskočí TODO keyword a [#A] prioritu. +;; +(defun my/org-agenda-goto-task-name (&rest _) + "Přesune kurzor na název úkolu — za TODO keyword a prioritu [#A]." + (when (get-text-property (line-beginning-position) 'org-hd-marker) + (beginning-of-line) + (let* ((bol (point)) + (eol (line-end-position)) + (todo-end nil) + (pos bol)) + ;; Najdi konec TODO keyword podle face (org-todo nebo org-agenda-done) + (while (< pos eol) + (let* ((face (get-text-property pos 'face)) + (next (or (next-single-property-change pos 'face nil eol) eol))) + (when (and face + (or (and (symbolp face) + (memq face '(org-todo org-agenda-done))) + (and (listp face) + (cl-intersection face '(org-todo org-agenda-done))))) + (setq todo-end next)) + (setq pos next))) + ;; Přesuň se za TODO keyword a volitelnou prioritu [#X] + (when todo-end + (goto-char todo-end) + (skip-chars-forward " \t") + (when (looking-at "\\[#.\\][ \t]+") + (goto-char (match-end 0))))))) + +(advice-add 'org-agenda-next-line :after #'my/org-agenda-goto-task-name) +(advice-add 'org-agenda-previous-line :after #'my/org-agenda-goto-task-name) + ;; Volitelně: zapni booktabs styl (horizontal rules v tabulkách) ;; (setq org-latex-tables-booktabs t)