summaryrefslogtreecommitdiffhomepage
path: root/attic/jao-org-tags.el
blob: b00276d56b4fab6ec44672b2a596915619216101 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
;; lifted from http://orgmode.org/worg/org-hacks.php

(require 'org)

(defvar ba/org-adjust-tags-column nil)

(defun ba/org-adjust-tags-column-reset-tags ()
  "In org-mode buffers it will reset tag position according to
`org-tags-column'."
  (when (and
         (not (string= (buffer-name) "*Remember*"))
         (eql major-mode 'org-mode))
    (let ((b-m-p (buffer-modified-p)))
      (condition-case nil
          (save-excursion
            (goto-char (point-min))
            (command-execute 'outline-next-visible-heading)
            ;; disable (message) that org-set-tags generates
            (flet ((message (&rest ignored) nil))
              (org-set-tags 1 t))
            (set-buffer-modified-p b-m-p))
        (error nil)))))

(defun ba/org-adjust-tags-column-now ()
  "Right-adjust `org-tags-column' value, then reset tag position."
  (set (make-local-variable 'org-tags-column)
       (- (- (window-width) 3)))
  (ba/org-adjust-tags-column-reset-tags))

(defun ba/org-adjust-tags-column-maybe ()
  "If `ba/org-adjust-tags-column' is set to non-nil, adjust tags."
  (when ba/org-adjust-tags-column
    (ba/org-adjust-tags-column-now)))

(defun ba/org-adjust-tags-column-before-save ()
  "Tags need to be left-adjusted when saving."
  (when ba/org-adjust-tags-column
    (setq org-tags-column 1)
    (ba/org-adjust-tags-column-reset-tags)))

(defun ba/org-adjust-tags-column-after-save ()
  "Revert left-adjusted tag position done by before-save hook."
  (ba/org-adjust-tags-column-maybe)
  (set-buffer-modified-p nil))

;; automatically align tags on right-hand side
(defun jao-org-tags-setup ()
  (setq ba/org-adjust-tags-column t)
  (add-hook 'window-configuration-change-hook
            'ba/org-adjust-tags-column-maybe)
  (add-hook 'before-save-hook 'ba/org-adjust-tags-column-before-save)
  (add-hook 'after-save-hook 'ba/org-adjust-tags-column-after-save))

(defun jao-org-tags-uninstall ()
  (setq ba/org-adjust-tags-column nil)
  (remove-hook 'window-configuration-change-hook
            'ba/org-adjust-tags-column-maybe)
  (remove-hook 'before-save-hook 'ba/org-adjust-tags-column-before-save)
  (remove-hook 'after-save-hook 'ba/org-adjust-tags-column-after-save))

(provide 'jao-org-tags)