From: Thorsten Jolitz <tjolitz@gmail.com>
To: emacs-orgmode@gnu.org
Subject: Re: [FYI] Programming with org-dp (by example)
Date: Mon, 05 Mar 2018 01:12:43 +0100 [thread overview]
Message-ID: <871sgzs7lw.fsf@gmail.com> (raw)
In-Reply-To: 877eqrs8xh.fsf@gmail.com
Thorsten Jolitz <tjolitz@gmail.com> writes:
PS
Ups ... a few little bugs in the code, here is version 2
#+BEGIN_SRC emacs-lisp
(defconst tj/radio-rgxp "^#\\+attr_org:[[:space:]]+:radio")
(defconst tj/radio-temp "temp")
(defconst tj/radio-wind "wind")
(defvar tj/radio-rw '("temp" "wind")) ;read/write
(defvar tj/radio-r '("take-a-walk")) ;read only
(defvar tj/radio-temp-red '("freezing" "tropical"))
(defvar tj/radio-temp-yellow '("cold" "hot"))
(defvar tj/radio-temp-green '("normal" "warm"))
(defvar tj/radio-wind-red '("hurricane"))
(defvar tj/radio-wind-yellow '("storm"))
(defvar tj/radio-wind-green '("breeze"))
;; rewire function
(defun tj/radio-switch ()
"docstring"
(interactive)
(let ((stmp (time-stamp-string)))
(forward-line)
(org-dp-rewire 'plain-list
'tj/radio-cont ;cont
t ;ins
`(:attr_last_changed (,stmp)) ;aff
nil ;elem
)))
;; mapping function
(defun tj/radio-map ()
"docstring"
(interactive)
(let (temp wind)
(org-dp-map '(tj/radio-switch) tj/radio-rgxp)))
;; HELPER FUNCTIONS
;; helper function to actually modify the content
(defun tj/radio-cont (cont elem)
"docstring"
(let ((name (org-element-property :name elem))
(prompt-options (tj/radio-get-itm-labels cont))
(new-cont)
(users-choice)
(box-checked-p))
(cond
((member name tj/radio-rw) ;prompt user for value
(progn
(setq users-choice (ido-completing-read name prompt-options))
(set (intern name) users-choice)
(setq new-cont (mapcar 'tj/radio-itm-rw cont))))
((member name tj/radio-r) ;set value
(setq new-cont
(mapcar 'tj/radio-itm-r cont)))
(t)) ;do nothing
(or new-cont cont)))
(defun tj/radio-get-itm-labels (cont)
"docstring"
(mapcar #'(lambda (itm)
(string-remove-suffix
"\n"
(org-dp-contents itm t t)))
cont))
(defun tj/radio-itm-rw (itm)
"docstring"
(let ((label (string-remove-suffix
"\n" (org-dp-contents itm t t))))
(if (string-equal label users-choice)
(org-element-put-property itm :checkbox 'on)
(org-element-put-property itm :checkbox 'off))
itm))
(defun tj/radio-itm-r (itm)
"docstring"
(let ((label (string-remove-suffix
"\n" (org-dp-contents itm t t))))
(org-element-put-property itm :checkbox 'off)
(cond
((and (string-equal label "red")
(not box-checked-p)
(or (member temp tj/radio-temp-red)
(member wind tj/radio-wind-red)))
(org-element-put-property itm :checkbox 'on)
(setq box-checked-p t))
((and (string-equal label "yellow")
(not box-checked-p)
(or (member temp tj/radio-temp-yellow)
(member wind tj/radio-wind-yellow)))
(org-element-put-property itm :checkbox 'on)
(setq box-checked-p t))
((and (string-equal label "green")
(not box-checked-p)
(or (member temp tj/radio-temp-green)
(member wind tj/radio-wind-green)))
(org-element-put-property itm :checkbox 'on)
(setq box-checked-p t)))
itm))
#+END_SRC
> Hello List,
> due to some interest in org-dp recently on this list, I actually took
> the challenge of implementing a feature request by John Kitchin (without
> actually sticking close to the specification, this is just a showcase
> for org-dp).
>
> Task: implement a radio-list with org checkboxes
> Extra feature: a read only radio-list that changes its values
> conditional on the values of read/write radio-lists (when mapping the
> buffer)
--
cheers,
Thorsten
prev parent reply other threads:[~2018-03-05 0:13 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-04 23:44 [FYI] Programming with org-dp (by example) Thorsten Jolitz
2018-03-05 0:12 ` Thorsten Jolitz [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=871sgzs7lw.fsf@gmail.com \
--to=tjolitz@gmail.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).