diff --git a/config.el b/config.el index eea2b6d..b97ee2a 100644 --- a/config.el +++ b/config.el @@ -456,6 +456,33 @@ and optional priority indicator [#A]." (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) +;; Org buffer: snap cursor past TODO keyword/priority on headings in normal state. +;; Fires via post-command-hook (buffer-local) — only when cursor is before task name. +(defun my/org-heading-snap-past-keyword () + "In Evil normal state, snap cursor past TODO keyword and priority on org headings." + (when (and (derived-mode-p 'org-mode) + (evil-normal-state-p) + (org-at-heading-p)) + (let* ((kw-re (regexp-opt (my/org-agenda-all-keywords) 'words)) + (task-start + (save-excursion + (beginning-of-line) + (skip-chars-forward "* ") + (when (looking-at kw-re) + (goto-char (match-end 0)) + (skip-chars-forward " \t") + (when (looking-at "\\[#.\\][ \t]+") + (goto-char (match-end 0))) + (point))))) + (when (and task-start (< (point) task-start)) + (goto-char task-start))))) + +(add-hook 'org-mode-hook + (lambda () + (add-hook 'post-command-hook + #'my/org-heading-snap-past-keyword + nil t))) + ;;; ============================================================ ;;; GPTEL — AI INTEGRATION (OpenWebUI / OpenRouter)