mirror of
https://github.com/pestctrl/emacs-config.git
synced 2026-02-16 08:14:15 +00:00
New capture template
This commit is contained in:
parent
7b872b69ca
commit
6b06f8be22
2 changed files with 150 additions and 0 deletions
146
lisp/ocpp.el
Normal file
146
lisp/ocpp.el
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
;;; ocpp.el --- -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Benson Chu
|
||||
|
||||
;; Author: Benson Chu <bensonchu457@gmail.com>
|
||||
;; Created: [2022-03-06 09:20]
|
||||
|
||||
;; This file is not part of GNU Emacs
|
||||
|
||||
;; This program is free software: you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; This program is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Stands for org-clock-push-pop
|
||||
|
||||
;;; Code:
|
||||
(require 'switch-tabs)
|
||||
(require 'org)
|
||||
(require 'org-project)
|
||||
(require 'cl)
|
||||
|
||||
(cl-defstruct ocpp-task
|
||||
""
|
||||
task-string
|
||||
tab-name
|
||||
tab-index
|
||||
task-marker
|
||||
collateral-marker)
|
||||
|
||||
(defvar ocpp/clock-stack '())
|
||||
|
||||
(defun ocpp/get-current-task ()
|
||||
(save-window-excursion
|
||||
(org-clock-goto)
|
||||
(org-get-heading)))
|
||||
|
||||
(defun ocpp/status ()
|
||||
(interactive)
|
||||
(if (org-clocking-p)
|
||||
(message "Currently clocked into: %s"
|
||||
(ocpp-task-task-string (car ocpp/clock-stack)))))
|
||||
|
||||
(defun ocpp/push (next-task)
|
||||
(interactive))
|
||||
|
||||
(defun org-completing-read-to-marker (prompt elements)
|
||||
(let ((result (completing-read prompt (mapcar #'car elements))))
|
||||
(cadr (assoc result elements))))
|
||||
|
||||
(defun org-completing-read-children (prompt)
|
||||
(interactive)
|
||||
(let ((items '()))
|
||||
(save-window-excursion
|
||||
(org-clock-goto)
|
||||
(save-restriction
|
||||
(save-excursion
|
||||
(org-narrow-to-subtree)
|
||||
(outline-next-heading)
|
||||
(while (outline-next-heading)
|
||||
(unless (eq (cdr (opr/get-type-and-state))
|
||||
'done)
|
||||
(push (list (org-get-heading t t t t)
|
||||
(point-marker))
|
||||
items))))))
|
||||
(org-completing-read-to-marker prompt items)))
|
||||
|
||||
(defun org-completing-read-refile (prompt)
|
||||
(cadddr (org-refile-get-location)))
|
||||
|
||||
(defun ocpp/query-for-task-to-clock (type)
|
||||
(cond ((eq type 'children)
|
||||
)
|
||||
(t (error "Unknown task type: %s" type))))
|
||||
|
||||
(defun ocpp/push-tab--internal (next-task tab-name)
|
||||
(let* ((tab-name (thread-last (truncate-string-to-width next-task 20)
|
||||
(replace-regexp-in-string " " "-")
|
||||
(replace-regexp-in-string "[^A-z0-9-]" "")
|
||||
(downcase)
|
||||
(concat "OCPP-"))))
|
||||
|
||||
(switch-or-create-tab tab-name)
|
||||
|
||||
(scratch-buffer)
|
||||
|
||||
(push (make-ocpp-task :task-string next-task
|
||||
:tab-name tab-name
|
||||
:tab-index (1+ (tab-bar--current-tab-index))
|
||||
:task-marker marker)
|
||||
ocpp/clock-stack)))
|
||||
|
||||
(defun ocpp/push-tab--current-org-item ()
|
||||
(interactive)
|
||||
(let* ((next-task (org-get-heading t t t t))
|
||||
(marker
|
||||
(progn
|
||||
;; (org-clock-in)
|
||||
(point-marker))))
|
||||
|
||||
(ocpp/push-tab--internal next-task marker)))
|
||||
|
||||
(defun ocpp/push-with-tab (ARG)
|
||||
(interactive "P")
|
||||
(let ((marker (if (null ARG)
|
||||
(org-completing-read-children "")
|
||||
(org-completing-read-refile ""))))
|
||||
(ocpp/push-tab--internal
|
||||
new-task
|
||||
(save-window-excursion
|
||||
(set-buffer (marker-buffer new-task))
|
||||
(goto-char new-task)
|
||||
(org-get-heading t t t t)))))
|
||||
|
||||
(defun ocpp/pop ()
|
||||
(interactive)
|
||||
(let* ((current-task (pop ocpp/clock-stack))
|
||||
(previous-task (car ocpp/clock-stack)))
|
||||
(when-let ((tab-index (ocpp-task-tab-index current-task)))
|
||||
(tab-bar-close-tab tab-index))
|
||||
(if (null previous-task)
|
||||
(progn
|
||||
(org-clock-out)
|
||||
(message "Stack fully popped!"))
|
||||
;; Switch tabs
|
||||
(when-let ((tab-index (ocpp-task-tab-index previous-task)))
|
||||
(tab-bar-select-tab tab-index))
|
||||
;; Clock in
|
||||
(save-excursion
|
||||
(let ((mark (ocpp-task-task-marker previous-task)))
|
||||
(set-buffer (marker-buffer mark))
|
||||
(goto-char mark)
|
||||
(org-clock-in))))))
|
||||
|
||||
(provide 'ocpp)
|
||||
;;; ocpp.el ends here
|
||||
|
|
@ -218,6 +218,10 @@
|
|||
:file ,(my/agenda-file "dev.org")
|
||||
:template-file ,(my/org-file "checklists/conference.org")
|
||||
:conference/airplane nil)
|
||||
("Work Travel"
|
||||
:keys "w"
|
||||
:file ,(my/agenda-file "dev.org")
|
||||
:template-file ,(my/org-file "templates/work_travel_checklist.org"))
|
||||
("Morning routine"
|
||||
:keys "m"
|
||||
:file ,(my/org-file "entries/routines.org")
|
||||
|
|
|
|||
Loading…
Reference in a new issue