emacs-orgmode
[Top][All Lists]
Advanced

[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/

reply via email to

[Prev in Thread] Current Thread [Next in Thread]