Created
October 13, 2020 08:31
-
-
Save ckxng/51e25d0b9e1a89287662bb74fedde6b5 to your computer and use it in GitHub Desktop.
orgmode config
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(define-key global-map "\C-ca" 'org-agenda) | |
(set-time-zone-rule "US/Central") | |
(require 'org) | |
(setq org-clock-persist 'history) | |
(setq org-agenda-files (list "~/org/athenahealth.org" | |
"~/org/home.org" | |
"~/org/scouts.org" | |
"~/org/cal/" )) | |
;; filter out some tasks based on tags | |
;; to trigger this, use "/" in agenda view | |
(defun bh/org-auto-exclude-function (tag) | |
"Automatic task exclusion in the agenda with / RET" | |
(and (cond | |
((string= tag "hold") | |
t) | |
((string= tag "btl") | |
t)) | |
(concat "-" tag))) | |
(setq org-agenda-auto-exclude-function 'bh/org-auto-exclude-function) | |
;; end filter | |
;; http://doc.norang.ca/org-mode.html#KeyBindings | |
(global-set-key (kbd "C-c I") 'bh/punch-in) | |
(global-set-key (kbd "C-c O") 'bh/punch-out) | |
;; create timestamps when headings are created | |
(defvar bh/insert-inactive-timestamp t) | |
(defun bh/toggle-insert-inactive-timestamp () | |
(interactive) | |
(setq bh/insert-inactive-timestamp (not bh/insert-inactive-timestamp)) | |
(message "Heading timestamps are %s" (if bh/insert-inactive-timestamp "ON" "OFF"))) | |
(defun bh/insert-inactive-timestamp () | |
(interactive) | |
(org-insert-time-stamp nil t t nil nil nil)) | |
(defun bh/insert-heading-inactive-timestamp () | |
(save-excursion | |
(when bh/insert-inactive-timestamp | |
(org-return) | |
(org-cycle) | |
(bh/insert-inactive-timestamp)))) | |
(add-hook 'org-insert-heading-hook 'bh/insert-heading-inactive-timestamp 'append) | |
;; end timestamps | |
(setq org-export-with-timestamps nil) | |
(setq org-catch-invisible-edits 'error) | |
;; don't show time in days | |
(setq org-time-clocksum-format | |
'(:hours "%d" :require-hours t :minutes ":%02d" :require-minutes t)) | |
(define-key global-map "\C-cl" 'org-store-link) | |
;; create ID for tasks when C-c l is used, so links can be moved freely | |
(setq org-id-link-to-org-use-id 'create-if-interactive-and-no-custom-id) | |
(setq org-clock-idle-time 45) | |
;; clock config from http://doc.norang.ca/org-mode.html#Clocking | |
;; | |
;; Resume clocking task when emacs is restarted | |
(org-clock-persistence-insinuate) | |
;; | |
;; Show lot of clocking history so it's easy to pick items off the C-F11 list | |
(setq org-clock-history-length 23) | |
;; Resume clocking task on clock-in if the clock is open | |
(setq org-clock-in-resume t) | |
;; Separate drawers for clocking and logs | |
(setq org-drawers (quote ("PROPERTIES" "LOGBOOK"))) | |
;; Save clock data and state changes and notes in the LOGBOOK drawer | |
(setq org-clock-into-drawer t) | |
;; Sometimes I change tasks I'm clocking quickly - this removes clocked tasks with 0:00 duration | |
(setq org-clock-out-remove-zero-time-clocks t) | |
;; Clock out when moving task to a done state | |
(setq org-clock-out-when-done t) | |
;; Save the running clock and all clock history when exiting Emacs, load it on startup | |
(setq org-clock-persist t) | |
;; Do not prompt to resume an active clock | |
(setq org-clock-persist-query-resume nil) | |
;; Enable auto clock resolution for finding open clocks | |
(setq org-clock-auto-clock-resolution (quote when-no-clock-is-running)) | |
;; Include current clocking task in clock reports | |
(setq org-clock-report-include-clocking-task t) | |
(setq bh/keep-clock-running nil) | |
(defun bh/punch-in (arg) | |
"Start continuous clocking and set the default task to the | |
selected task. If no task is selected set the Organization task | |
as the default task." | |
(interactive "p") | |
(setq bh/keep-clock-running t) | |
(if (equal major-mode 'org-agenda-mode) | |
;; | |
;; We're in the agenda | |
;; | |
(let* ((marker (org-get-at-bol 'org-hd-marker)) | |
(tags (org-with-point-at marker (org-get-tags-at)))) | |
(if (and (eq arg 4) tags) | |
(org-agenda-clock-in '(16)) | |
(bh/clock-in-organization-task-as-default))) | |
;; | |
;; We are not in the agenda | |
;; | |
(save-restriction | |
(widen) | |
; Find the tags on the current task | |
(if (and (equal major-mode 'org-mode) (not (org-before-first-heading-p)) (eq arg 4)) | |
(org-clock-in '(16)) | |
(bh/clock-in-organization-task-as-default))))) | |
(defun bh/punch-out () | |
(interactive) | |
(setq bh/keep-clock-running nil) | |
(when (org-clock-is-active) | |
(org-clock-out)) | |
(org-agenda-remove-restriction-lock)) | |
(defun bh/clock-in-default-task () | |
(save-excursion | |
(org-with-point-at org-clock-default-task | |
(org-clock-in)))) | |
(defun bh/clock-in-parent-task () | |
"Move point to the parent (project) task if any and clock in" | |
(when bh/keep-clock-running | |
(bh/clock-in-default-task))) | |
(defvar bh/organization-task-id "8efa1121-51a8-4748-a594-f2d84ede0ffb") | |
(defun bh/clock-in-organization-task-as-default () | |
(interactive) | |
(org-with-point-at (org-id-find bh/organization-task-id 'marker) | |
(org-clock-in '(16)))) | |
(defun bh/clock-out-maybe () | |
(when (and bh/keep-clock-running | |
(not org-clock-clocking-in) | |
(marker-buffer org-clock-default-task) | |
(not org-clock-resolving-clocks-due-to-idleness)) | |
(bh/clock-in-parent-task))) | |
(add-hook 'org-clock-out-hook 'bh/clock-out-maybe 'append) | |
;; end clock config | |
(custom-set-variables | |
;; custom-set-variables was added by Custom. | |
;; If you edit it by hand, you could mess it up, so be careful. | |
;; Your init file should contain only one such instance. | |
;; If there is more than one, they won't work right. | |
'(ansi-color-faces-vector | |
[default default default italic underline success warning error]) | |
'(custom-enabled-themes (quote (tango-dark)))) | |
(custom-set-faces | |
;; custom-set-faces was added by Custom. | |
;; If you edit it by hand, you could mess it up, so be careful. | |
;; Your init file should contain only one such instance. | |
;; If there is more than one, they won't work right. | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment