[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: RFC on implementation adding buttons beside headings
From: |
pareto optimal |
Subject: |
Re: RFC on implementation adding buttons beside headings |
Date: |
Sat, 18 Feb 2023 17:01:27 +0100 (CET) |
I forgot the implementation:
```
(define-button-type 'org-clock-in-button
'follow-link t
'face 'custom-button
'mouse-face 'custom-button-mouse
'action (lambda (b) (org-clock-in)))
(define-button-type 'org-clock-out-button
'follow-link t
'face 'custom-button
'mouse-face 'custom-button-mouse
'action (lambda (b) (org-clock-out)))
(defun has-clock-in-button ()
(s-contains? "Clock In" (nth 4 (org-heading-components))))
(defun has-clock-out-button ()
(s-contains? "Clock Out" (nth 4 (org-heading-components))))
(defun pod/add-clock-in-button-to-right-of-heading ()
(unless (has-clock-in-button)
(save-excursion
(org-end-of-line)
(let ((end-of-line-before-insert (point)))
(insert " Clock In")
(let* ((button-start (+ 4 end-of-line-before-insert))
(button-end (+ 8 button-start)))
(make-button button-start button-end :type 'org-clock-in-button))))))
;; (defun remove-clock-in-button ()
;; )
(defun pod/add-clock-out-button-to-right-of-heading ()
(unless (has-clock-out-button)
(outline-up-heading)
;; (remove-clock-in-button)
(save-excursion
(org-end-of-line)
(let ((end-of-line-before-insert (point)))
(insert " Clock Out")
(let* ((button-start (+ 4 end-of-line-before-insert))
(button-end (+ 9 button-start)))
(make-button button-start button-end :type 'org-clock-out-button))))))
(add-hook 'org-after-todo-state-change-hook
#'pod/add-clock-in-button-to-right-of-heading)
(add-hook 'org-clock-in-hook #'pod/add-clock-out-button-to-right-of-heading)
(add-hook 'org-clock-out-hook #'pod/add-clock-in-button-to-right-of-heading)
```
On Feb 18, 2023 at 10:00 AM, pareto optimal <pareto.optimal@mailfence.com>
wrote:
Hi all!
I've recently been playing with emacs on Android and wanted an easier way to
clock in.
My idea was to put buttons beside org headings that are TODO items. I do this
by:
- removing clocking buttons on heading if present, then adding a clock in
button on 'org-after-todo-state-change-hook`
- removing clocking buttons on heading if present, then adding a clock out
button on 'org-clock-in-hook
- removing clocking buttons on heading if present, then adding a clock in
button on 'org-clock-out-hook
Well, the removing part isn't quite implemented yet but that's the idea.
Otherwise what I'll paste below is a working implementation.
I'm new to using buttons and emacs and I found the only way to place the button
where I wanted was to insert some blank space after the heading. Is that
expected and best practice or is there some other way to do it?
Would this be something useful in core org-mode? I know at least a few friends
who've asked me "why isn't there some button I can click by headings to clock
in" when I showed them how I use org-mode.
I also welcome any other ideas or comments.
Thank you for your time.
ParetoOptimalDev
https://www.paretooptimal.dev/