org-mode – ¿Cómo crear una tabla de distribución de tiempo por etiquetas en el modo Org?

Pregunta:

Mi archivo .org contiene tareas etiquetadas como: a , b , c , d , e , f , g . Quiero crear una tabla de distribución de tiempo por etiquetas a , b , c , d .

    | Tag | Time Spent |  % |
    |-----+------------+----|
    | a   |      00:30 | 25 |
    | b   |      00:30 | 25 |
    | c   |      00:30 | 25 |
    | d   |      00:30 | 25 |

¿Cuál es la forma más sencilla de hacerlo?

Respuesta:

Basado en este Gist: https://gist.github.com/tsu-nera/d9ffa6a51a6e7bdb957b

init.el a init.el :

(require 'org-table)
(require 'org-clock)

(defun clocktable-by-tag/shift-cell (n)
  (let ((str ""))
    (dotimes (i n)
      (setq str (concat str "| ")))
    str))

(defun clocktable-by-tag/insert-tag (params)
  (let ((tag (plist-get params :tags)))
    (insert "|--\n")
    (insert (format "| %s | *Tag time* |\n" tag))
    (let ((total 0))
  (mapcar
       (lambda (file)
     (let ((clock-data (with-current-buffer (find-file-noselect file)
                 (org-clock-get-table-data (buffer-name) params))))
       (when (> (nth 1 clock-data) 0)
         (setq total (+ total (nth 1 clock-data)))
         (insert (format "| | File *%s* | %.2f |\n"
                 (file-name-nondirectory file)
                 (/ (nth 1 clock-data) 60.0)))
         (dolist (entry (nth 2 clock-data))
           (insert (format "| | . %s%s | %s %.2f |\n"
                   (org-clocktable-indent-string (nth 0 entry))
                   (nth 1 entry)
                   (clocktable-by-tag/shift-cell (nth 0 entry))
                   (/ (nth 3 entry) 60.0)))))))
       (org-agenda-files))
      (save-excursion
    (re-search-backward "*Tag time*")
    (org-table-next-field)
    (org-table-blank-field)
    (insert (format "*%.2f*" (/ total 60.0)))))
    (org-table-align)))

(defun org-dblock-write:clocktable-by-tag (params)
  (insert "| Tag | Headline | Time (h) |\n")
  (insert "|     |          | <r>  |\n")
  (let ((tags (plist-get params :tags)))
    (mapcar (lambda (tag)
          (setq params (plist-put params :tags tag))
          (clocktable-by-tag/insert-tag params))
        tags)))

(provide 'clocktable-by-tag)

Y utilícelo en su archivo .org :

#+BEGIN: clocktable-by-tag :tags ("a" "b" "c" "d") :maxlevel 2
#+END:

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım