org-mode changing parent todo state based on subtask todo state - emacs

I'd like to change automatically the todo state of the parent heading based on the TODO state of the child heading. Is there any function/setting to get this done?
E.g.
* TODO project 1
** TODO subtask 1
** HOLD subtask 2
change to
* HOLD project 1
** TODO subtask 1
** HOLD subtask 2

org-edna should allow you to achieve what you want.
untested - this might do it:
* TODO project 1
:PROPERTIES:
:TRIGGER: descendants todo!(HOLD)
:END:
** TODO subtask 1
** HOLD subtask 2

Related

How to use a organized schedule in 4 agendas inside org (emacs)

Is there something already coded for ORG (emacs) something that helps to create the Eisenhower Matrix?
I know that can be done in the agenda creating 4 different files, or with some work, but it's possible to use the agenda of the ORG to separate them in 4 quadrants, like the image above?
I came up with this custom agenda command, that considers anything with priority A to be "important", and anything with a deadline within the next two days to be "urgent":
(add-to-list 'org-agenda-custom-commands
'("e" "Eisenhower matrix"
((tags-todo
"+PRIORITY=\"A\"+DEADLINE<=\"<+2d>\""
((org-agenda-overriding-header "Urgent (within 2 days) and important")))
(tags-todo
"+PRIORITY=\"A\"+DEADLINE>\"<+2d>\"|+PRIORITY=\"A\"-DEADLINE={.}"
((org-agenda-overriding-header "Important but not urgent")))
(tags-todo
"-PRIORITY=\"A\"+DEADLINE<=\"<+2d>\""
((org-agenda-overriding-header "Urgent (within 2 days) but not important")))
(tags-todo
"-PRIORITY=\"A\"+DEADLINE>\"<+2d>\"|-PRIORITY=\"A\"-DEADLINE={.}"
((org-agenda-overriding-header "Neither important nor urgent"))))
nil))
Using that, the following org-mode file:
* TODO [#A] This is important and urgent
DEADLINE: <2021-03-11 Thu>
* TODO [#A] This is important but not urgent
DEADLINE: <2021-03-13 Sat>
* TODO This has no priority but is urgent
DEADLINE: <2021-03-11 Thu>
* TODO [#B] This has medium priority but is urgent
DEADLINE: <2021-03-11 Thu>
* TODO [#C] This has low priority but is urgent
DEADLINE: <2021-03-11 Thu>
* TODO [#A] This is important but has no deadline
* TODO This has no priority and is not urgent
DEADLINE: <2021-03-13 Sat>
* TODO [#B] This has medium priority and is not urgent
DEADLINE: <2021-03-13 Sat>
* TODO [#C] This has low priority and is not urgent
DEADLINE: <2021-03-13 Sat>
* TODO This has no priority and no deadline
* TODO [#B] This has medium priority and no deadline
* TODO [#C] This has low priority and no deadline
looks like this:
Urgent (within 2 days) and important
test: TODO [#A] This is important and urgent
======================================================================================================================
Important but not urgent
test: TODO [#A] This is important but not urgent
test: TODO [#A] This is important but has no deadline
======================================================================================================================
Urgent (within 2 days) but not important
test: TODO This has no priority but is urgent
test: TODO [#B] This has medium priority but is urgent
test: TODO [#C] This has low priority but is urgent
======================================================================================================================
Neither important nor urgent
test: TODO This has no priority and is not urgent
test: TODO [#B] This has medium priority and is not urgent
test: TODO This has no priority and no deadline
test: TODO [#B] This has medium priority and no deadline
test: TODO [#C] This has low priority and is not urgent
test: TODO [#C] This has low priority and no deadline
Just to give an alternative way of organizing the tasks based only in the priorities... I like this because let me decide when to change the tasks category (not automatic using the DEADLINE):
;About the 2 elisp lines below: If you want to send items without explicit
;priorities to the bottom of the list you have to set org-default-priority to the
;value of org-lowest-priority). I did this to make recognize that: PRIORITY=0 are
;items without explicit priorities (not A, B or C, but just TODO)
(setq org-lowest-priority ?E)
(setq org-default-priority ?E)
(add-to-list 'org-agenda-custom-commands
'("e" "Eisenhower matrix"
((tags-todo
"+PRIORITY=\"A\""
((org-agenda-overriding-header "Urgent and important")))
(tags-todo
"+PRIORITY=\"B\""
((org-agenda-overriding-header "Important but not urgent")))
(tags-todo
"+PRIORITY=\"C\""
((org-agenda-overriding-header "Urgent but not important")))
(tags-todo
"+PRIORITY=0-PRIORITY=\"A\"-PRIORITY=\"B\"-PRIORITY=\"C\""
((org-agenda-overriding-header "Neither important nor urgent"))))
nil))
Using that, the following org-mode file:
* TODO [#A] This is important and urgent
DEADLINE: <2021-03-11 Thu>
* TODO [#A] This is important but not urgent
DEADLINE: <2021-03-13 Sat>
* TODO This has no priority but is urgent
DEADLINE: <2021-03-11 Thu>
* TODO [#B] This has medium priority but is urgent
DEADLINE: <2021-03-11 Thu>
* TODO [#C] This has low priority but is urgent
DEADLINE: <2021-03-11 Thu>
* TODO [#A] This is important but has no deadline
* TODO This has no priority and is not urgent
DEADLINE: <2021-03-13 Sat>
* TODO [#B] This has medium priority and is not urgent
DEADLINE: <2021-03-13 Sat>
* TODO [#C] This has low priority and is not urgent
DEADLINE: <2021-03-13 Sat>
* TODO This has no priority and no deadline
* TODO [#B] This has medium priority and no deadline
* TODO [#C] This has low priority and no deadline
looks like this:
Urgent and important
refile: TODO [#A] This is important and not urgent: ver como adicionar os aniversários no ORG
refile: TODO [#A] This is important and urgent
refile: TODO [#A] This is important but not urgent
refile: TODO [#A] This is important but has no deadline
=============================================================================================================================
Important but not urgent
refile: TODO [#B] This has medium priority but is urgent
refile: TODO [#B] This has medium priority and is not urgent
refile: TODO [#B] This has medium priority and no deadline
=============================================================================================================================
Urgent but not important
refile: TODO [#C] This has low priority but is urgent
refile: TODO [#C] This has low priority and is not urgent
refile: TODO [#C] This has low priority and no deadline
=============================================================================================================================
Neither important nor urgent
refile: TODO This has no priority but is urgent
refile: TODO This has no priority and is not urgent
refile: TODO This has no priority and no deadline

What is the purpose of Flux::sampleTimeout method in the project-reactor API?

The Java docs say the following:
Emit the last value from this Flux only if there were no new values emitted during the time window provided by a publisher for that particular last value.
However I found the above description confusing. I read in gitter chat that its similar to debounce in RxJava. Can someone please illustrate it with an example? I could not find this anywhere after doing a thorough search.
sampleTimeout lets you associate a companion Flux X' to each incoming value x in the source. If X' completes before the next value is emitted in the source, then value x is emitted. If not, x is dropped.
The same processing is applied to subsequent values.
Think of it as splitting the original sequence into windows delimited by the start and completion of each companion flux. If two windows overlap, the value that triggered the first one is dropped.
On the other side, you have sample(Duration) which only deals with a single companion Flux. It splits the sequence into windows that are contiguous, at a regular time period, and drops all but the last element emitted during a particular window.
(edit): about your use case
If I understand correctly, it looks like you have a processing of varying length that you want to schedule periodically, but you also don't want to consider values for which processing takes more than one period?
If so, it sounds like you want to 1) isolate your processing in its own thread using publishOn and 2) simply need sample(Duration) for the second part of the requirement (the delay allocated to a task is not changing).
Something like this:
List<Long> passed =
//regular scheduling:
Flux.interval(Duration.ofMillis(200))
//this is only to show that processing is indeed started regularly
.elapsed()
//this is to isolate the blocking processing
.publishOn(Schedulers.elastic())
//blocking processing itself
.map(tuple -> {
long l = tuple.getT2();
int sleep = l % 2 == 0 || l % 5 == 0 ? 100 : 210;
System.out.println(tuple.getT1() + "ms later - " + tuple.getT2() + ": sleeping for " + sleep + "ms");
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
e.printStackTrace();
}
return l;
})
//this is where we say "drop if too long"
.sample(Duration.ofMillis(200))
//the rest is to make it finite and print the processed values that passed
.take(10)
.collectList()
.block();
System.out.println(passed);
Which outputs:
205ms later - 0: sleeping for 100ms
201ms later - 1: sleeping for 210ms
200ms later - 2: sleeping for 100ms
199ms later - 3: sleeping for 210ms
201ms later - 4: sleeping for 100ms
200ms later - 5: sleeping for 100ms
201ms later - 6: sleeping for 100ms
196ms later - 7: sleeping for 210ms
204ms later - 8: sleeping for 100ms
198ms later - 9: sleeping for 210ms
201ms later - 10: sleeping for 100ms
196ms later - 11: sleeping for 210ms
200ms later - 12: sleeping for 100ms
202ms later - 13: sleeping for 210ms
202ms later - 14: sleeping for 100ms
200ms later - 15: sleeping for 100ms
[0, 2, 4, 5, 6, 8, 10, 12, 14, 15]
So the blocking processing is triggered approximately every 200ms, and only values that where processed within 200ms are kept.

org-mode export headlines levels only, not inline text

I am trying to export headline levels only to an ODT file, without the inline text under each heading.
[Org file structure]
* Heading 1
+ Blah Blah
** Heading 1.1
+ Blah Blah
- Blah Blah
* Heading 2
[Exported structure]
* Heading 1
** Heading 1.1
* Heading 2
You could easily cycle only through the headlines (S-tab) and then export with the option visible only. (C-v).

String Concatenating functions in Progress 4GL?

I came across a function in C#, string.Join() which is really helpful for string concatenation.
I am wondering is there any possibility of doing the same functionality in Progress 4GL ?
Typical C# example would be,
String result = “ ”;
result = string.Join(",", this.grpBox1.Controls.OfType<CheckBox>()
.Where(x => x.Checked)
.Select(c => c.Text));
MessageBox.Show(result);
I am not trying to convert C# to Progress but it would be really helpful if i could achieve the same functionality in Progress.
if you do really want your function you could wrap it and declare it as external you can re-link _progres to include your own c libs. used to be called HLC (probuild) but now its a set of scripts under a new directory name oebuild directly under the Progress install directory(DLC). The hlc and make directories are under the oebuild directory.
Instructions on the build process can be found in the README file located in the oebuild directory under the DLC directory. Prob. a sledge hammer to crack a nut you would have to understand what your doing not for the faint of heart. but if you have something written in c you want to call you can do it. prob. best to stick to the 4gl nearest thing progress has to arrays is extent not used much most people break out to a temp table . rows in a tt are far easier to handle and iterate so its a "mind set" switch a bit.
Important comments can also be found in the hlprodsp.c file located in the hlc directory, a subdirectory of oebuild.
As far as I know, there's nothing built in to that effort. But if I understand correctly, when you issue that command you get a list of that given object type (in your example, checkbox) as a CSV.
I built something that resembles it, as a start to whatever you'd like to implement. It's probably far from perfect, but it works for me. It's a window with various widget types, you select from the combo the type you'd like to search and generate, and it will show you at the end the values of two CSV variables: one with the widget names that match that type, and one with the respective values.
Here it goes:
&Scoped-define WINDOW-NAME C-Win
/*------------------------------------------------------------------------
File:
Description:
Input Parameters:
<none>
Output Parameters:
<none>
Author:
Created:
------------------------------------------------------------------------*/
/* This .W file was created with the Progress AppBuilder. */
/*----------------------------------------------------------------------*/
/* Create an unnamed pool to store all the widgets created
by this procedure. This is a good default which assures
that this procedure's triggers and internal procedures
will execute in this procedure's storage, and that proper
cleanup will occur on deletion of the procedure. */
CREATE WIDGET-POOL.
/* *************************** Definitions ************************** */
/* Parameters Definitions --- */
/* Local Variable Definitions --- */
DEFINE VARIABLE cWidgetLst AS CHARACTER NO-UNDO.
DEFINE VARIABLE cValueLst AS CHARACTER NO-UNDO.
/* ******************** Preprocessor Definitions ******************** */
&Scoped-define PROCEDURE-TYPE Window
&Scoped-define DB-AWARE no
/* Name of designated FRAME-NAME and/or first browse and/or first query */
&Scoped-define FRAME-NAME DEFAULT-FRAME
/* Standard List Definitions */
&Scoped-Define ENABLED-OBJECTS COMBO-BOX-1 BUTTON-1 SLIDER-1 SELECT-1 ~
RADIO-SET-1 TOGGLE-1 FILL-IN-2 COMBO-BOX-3
&Scoped-Define DISPLAYED-OBJECTS COMBO-BOX-1 SLIDER-1 SELECT-1 RADIO-SET-1 ~
TOGGLE-1 FILL-IN-2 COMBO-BOX-3
/* Custom List Definitions */
/* List-1,List-2,List-3,List-4,List-5,List-6 */
/* *********************** Control Definitions ********************** */
/* Define the widget handle for the window */
DEFINE VAR C-Win AS WIDGET-HANDLE NO-UNDO.
/* Definitions of the field level widgets */
DEFINE BUTTON BUTTON-1
LABEL "Generate"
SIZE 15 BY 1.14.
DEFINE VARIABLE COMBO-BOX-1 AS CHARACTER FORMAT "X(256)":U
VIEW-AS COMBO-BOX INNER-LINES 5
LIST-ITEMS "Fill-in","Radio-set","Toggle-box","Selection-List","slider","combo-box"
DROP-DOWN-LIST
SIZE 16 BY 1 NO-UNDO.
DEFINE VARIABLE COMBO-BOX-3 AS CHARACTER FORMAT "X(256)":U
LABEL "Combo 3"
VIEW-AS COMBO-BOX INNER-LINES 5
LIST-ITEMS "Large","Tall","Venti"
DROP-DOWN-LIST
SIZE 16 BY 1 NO-UNDO.
DEFINE VARIABLE FILL-IN-2 AS CHARACTER FORMAT "X(256)":U
LABEL "Fill 2"
VIEW-AS FILL-IN
SIZE 14 BY 1 NO-UNDO.
DEFINE VARIABLE RADIO-SET-1 AS INTEGER
VIEW-AS RADIO-SET VERTICAL
RADIO-BUTTONS
"Item 1", 1,
"Item 2", 2,
"Item 3", 3
SIZE 12 BY 3 NO-UNDO.
DEFINE VARIABLE SELECT-1 AS CHARACTER
VIEW-AS SELECTION-LIST SINGLE SCROLLBAR-VERTICAL
LIST-ITEMS "First","Second","Third"
SIZE 23 BY 2 NO-UNDO.
DEFINE VARIABLE SLIDER-1 AS INTEGER INITIAL 0
VIEW-AS SLIDER MIN-VALUE 0 MAX-VALUE 100 HORIZONTAL
TIC-MARKS NONE
SIZE 31 BY 2.38 NO-UNDO.
DEFINE VARIABLE TOGGLE-1 AS LOGICAL INITIAL no
LABEL "Toggle 1"
VIEW-AS TOGGLE-BOX
SIZE 13.4 BY .81 NO-UNDO.
DEFINE VARIABLE COMBO-BOX-2 AS CHARACTER FORMAT "X(256)":U
LABEL "Combo 2"
VIEW-AS COMBO-BOX INNER-LINES 5
LIST-ITEMS "Item 1"
DROP-DOWN-LIST
SIZE 16 BY 1 NO-UNDO.
DEFINE VARIABLE FILL-IN-3 AS CHARACTER FORMAT "X(256)":U
LABEL "Fill 3"
VIEW-AS FILL-IN
SIZE 14 BY 1 NO-UNDO.
DEFINE VARIABLE RADIO-SET-2 AS INTEGER
VIEW-AS RADIO-SET VERTICAL
RADIO-BUTTONS
"Item 1", 1,
"Item 2", 2,
"Item 3", 3
SIZE 12 BY 3 NO-UNDO.
DEFINE VARIABLE SLIDER-2 AS INTEGER INITIAL 0
VIEW-AS SLIDER MIN-VALUE 0 MAX-VALUE 100 HORIZONTAL
TIC-MARKS NONE
SIZE 17 BY 2.14 NO-UNDO.
DEFINE VARIABLE TOGGLE-2 AS LOGICAL INITIAL no
LABEL "Toggle 2"
VIEW-AS TOGGLE-BOX
SIZE 13.4 BY .81 NO-UNDO.
/* ************************ Frame Definitions *********************** */
DEFINE FRAME DEFAULT-FRAME
COMBO-BOX-1 AT ROW 1.95 COL 13 COLON-ALIGNED NO-LABEL WIDGET-ID 14
BUTTON-1 AT ROW 1.95 COL 32 WIDGET-ID 2
SLIDER-1 AT ROW 3.62 COL 42 NO-LABEL WIDGET-ID 18
SELECT-1 AT ROW 3.86 COL 10 NO-LABEL WIDGET-ID 16
RADIO-SET-1 AT ROW 6.24 COL 10 NO-LABEL WIDGET-ID 6
TOGGLE-1 AT ROW 6.24 COL 30 WIDGET-ID 10
FILL-IN-2 AT ROW 7.19 COL 28 COLON-ALIGNED WIDGET-ID 12
COMBO-BOX-3 AT ROW 7.29 COL 56 COLON-ALIGNED WIDGET-ID 20
WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 1 ROW 1
SIZE 80 BY 16 WIDGET-ID 100.
DEFINE FRAME FRAME-A
TOGGLE-2 AT ROW 1.24 COL 51 WIDGET-ID 6
RADIO-SET-2 AT ROW 1.48 COL 3 NO-LABEL WIDGET-ID 2
FILL-IN-3 AT ROW 1.95 COL 25 COLON-ALIGNED WIDGET-ID 8
SLIDER-2 AT ROW 3.14 COL 46 NO-LABEL WIDGET-ID 12
COMBO-BOX-2 AT ROW 3.38 COL 24 COLON-ALIGNED WIDGET-ID 10
WITH 1 DOWN KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 5 ROW 10.29
SIZE 72 BY 5.71
TITLE "Frame A" WIDGET-ID 200.
/* *********************** Procedure Settings ************************ */
/* Settings for THIS-PROCEDURE
Type: Window
Allow: Basic,Browse,DB-Fields,Window,Query
Other Settings: COMPILE
*/
/* ************************* Create Window ************************** */
IF SESSION:DISPLAY-TYPE = "GUI":U THEN
CREATE WINDOW C-Win ASSIGN
HIDDEN = YES
TITLE = "<insert window title>"
HEIGHT = 16
WIDTH = 80
MAX-HEIGHT = 16
MAX-WIDTH = 80
VIRTUAL-HEIGHT = 16
VIRTUAL-WIDTH = 80
RESIZE = yes
SCROLL-BARS = no
STATUS-AREA = no
BGCOLOR = ?
FGCOLOR = ?
KEEP-FRAME-Z-ORDER = yes
THREE-D = yes
MESSAGE-AREA = no
SENSITIVE = yes.
ELSE {&WINDOW-NAME} = CURRENT-WINDOW.
/* END WINDOW DEFINITION */
/* *********** Runtime Attributes and AppBuilder Settings *********** */
/* SETTINGS FOR WINDOW C-Win
VISIBLE,,RUN-PERSISTENT */
/* REPARENT FRAME */
ASSIGN FRAME FRAME-A:FRAME = FRAME DEFAULT-FRAME:HANDLE.
/* SETTINGS FOR FRAME DEFAULT-FRAME
FRAME-NAME */
DEFINE VARIABLE XXTABVALXX AS LOGICAL NO-UNDO.
ASSIGN XXTABVALXX = FRAME FRAME-A:MOVE-AFTER-TAB-ITEM (COMBO-BOX-3:HANDLE IN FRAME DEFAULT-FRAME)
/* END-ASSIGN-TABS */.
/* SETTINGS FOR FRAME FRAME-A
*/
IF SESSION:DISPLAY-TYPE = "GUI":U AND VALID-HANDLE(C-Win)
THEN C-Win:HIDDEN = no.
/* ************************ Control Triggers ************************ */
&Scoped-define SELF-NAME C-Win
ON END-ERROR OF C-Win /* <insert window title> */
OR ENDKEY OF {&WINDOW-NAME} ANYWHERE DO:
/* This case occurs when the user presses the "Esc" key.
In a persistently run window, just ignore this. If we did not, the
application would exit. */
IF THIS-PROCEDURE:PERSISTENT THEN RETURN NO-APPLY.
END.
ON WINDOW-CLOSE OF C-Win /* <insert window title> */
DO:
/* This event will close the window and terminate the procedure. */
APPLY "CLOSE":U TO THIS-PROCEDURE.
RETURN NO-APPLY.
END.
&Scoped-define SELF-NAME BUTTON-1
ON CHOOSE OF BUTTON-1 IN FRAME DEFAULT-FRAME /* Generate */
DO:
assign cWidgetLst = ''
cValueLst = ''.
run downTheRabbitHole ( input {&window-name}:handle).
MESSAGE cWidgetLst SKIP cValueLst
VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.
&UNDEFINE SELF-NAME
/* *************************** Main Block *************************** */
/* Set CURRENT-WINDOW: this will parent dialog-boxes and frames. */
ASSIGN CURRENT-WINDOW = {&WINDOW-NAME}
THIS-PROCEDURE:CURRENT-WINDOW = {&WINDOW-NAME}.
/* The CLOSE event can be used from inside or outside the procedure to */
/* terminate it. */
ON CLOSE OF THIS-PROCEDURE
RUN disable_UI.
/* Best default for GUI applications is... */
PAUSE 0 BEFORE-HIDE.
/* Now enable the interface and wait for the exit condition. */
/* (NOTE: handle ERROR and END-KEY so cleanup code will always fire. */
MAIN-BLOCK:
DO ON ERROR UNDO MAIN-BLOCK, LEAVE MAIN-BLOCK
ON END-KEY UNDO MAIN-BLOCK, LEAVE MAIN-BLOCK:
RUN enable_UI.
IF NOT THIS-PROCEDURE:PERSISTENT THEN
WAIT-FOR CLOSE OF THIS-PROCEDURE.
END.
/* ********************** Internal Procedures *********************** */
PROCEDURE buildCSV :
/*------------------------------------------------------------------------------
Purpose:
Parameters: <none>
Notes:
------------------------------------------------------------------------------*/
DEFINE INPUT-OUTPUT PARAMETER iopcList AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER ipcValue AS CHARACTER NO-UNDO.
if ipcValue = ? then
assign ipcValue = '?'.
if ipcValue = '' then
assign ipcValue = ' '.
assign iopcList = iopcList + (if iopcList = '' then '' else ',') + ipcValue.
END PROCEDURE.
PROCEDURE disable_UI :
/*------------------------------------------------------------------------------
Purpose: DISABLE the User Interface
Parameters: <none>
Notes: Here we clean-up the user-interface by deleting
dynamic widgets we have created and/or hide
frames. This procedure is usually called when
we are ready to "clean-up" after running.
------------------------------------------------------------------------------*/
/* Delete the WINDOW we created */
IF SESSION:DISPLAY-TYPE = "GUI":U AND VALID-HANDLE(C-Win)
THEN DELETE WIDGET C-Win.
IF THIS-PROCEDURE:PERSISTENT THEN DELETE PROCEDURE THIS-PROCEDURE.
END PROCEDURE.
PROCEDURE downTheRabbitHole :
/*------------------------------------------------------------------------------
Purpose:
Parameters: <none>
Notes:
------------------------------------------------------------------------------*/
DEFINE INPUT PARAMETER iphWidget AS HANDLE NO-UNDO.
DEFINE VARIABLE hHandle AS HANDLE NO-UNDO.
assign hHandle = iphWidget:first-child.
do while valid-handle(hHandle):
if can-query(hHandle,"type") and hHandle:type = combo-box-1:screen-value in frame {&frame-name} then do:
/* something something something dark side... */
if can-query(hHandle,"name") then run buildCSV(input-output cWidgetLst,hHandle:name).
if can-query(hHandle,"screen-value") then run buildCSV(input-output cValueLst,hHandle:screen-value).
end.
if hHandle:type = "FIELD-GROUP" or hHandle:type = "FRAME" then
run downTheRabbitHole(input hHandle:first-child).
assign hHandle = hHandle:next-sibling.
end.
END PROCEDURE.
PROCEDURE enable_UI :
/*------------------------------------------------------------------------------
Purpose: ENABLE the User Interface
Parameters: <none>
Notes: Here we display/view/enable the widgets in the
user-interface. In addition, OPEN all queries
associated with each FRAME and BROWSE.
These statements here are based on the "Other
Settings" section of the widget Property Sheets.
------------------------------------------------------------------------------*/
DISPLAY COMBO-BOX-1 SLIDER-1 SELECT-1 RADIO-SET-1 TOGGLE-1 FILL-IN-2
COMBO-BOX-3
WITH FRAME DEFAULT-FRAME IN WINDOW C-Win.
ENABLE COMBO-BOX-1 BUTTON-1 SLIDER-1 SELECT-1 RADIO-SET-1 TOGGLE-1 FILL-IN-2
COMBO-BOX-3
WITH FRAME DEFAULT-FRAME IN WINDOW C-Win.
{&OPEN-BROWSERS-IN-QUERY-DEFAULT-FRAME}
DISPLAY TOGGLE-2 RADIO-SET-2 FILL-IN-3 SLIDER-2 COMBO-BOX-2
WITH FRAME FRAME-A IN WINDOW C-Win.
ENABLE TOGGLE-2 RADIO-SET-2 FILL-IN-3 SLIDER-2 COMBO-BOX-2
WITH FRAME FRAME-A IN WINDOW C-Win.
{&OPEN-BROWSERS-IN-QUERY-FRAME-A}
VIEW C-Win.
END PROCEDURE.

Org-mode : Custom agenda command TODO state change log without repeating same TODO

I use 'note and timestamp' on 'DONE' state change. In my custom agenda command I define that I want to see the state change log. But it appears that I still see the original repeating TODO. I would like to only see the state change log.
I have tried two different configurations. The first does not provide me the state change, the second provides the state change log but also repeats.
Any ideas how to trim the agenda to show only the state change log?
TODO entry in 'company.org':
* Agenda
** TODO Acronis : Backup Check :DAILY:
SCHEDULED:
:LOGBOOK:
- State "DONE" from "TODO" [2012-10-25 Thu 10:31] \\
Reverted 'proud' back to central storage. Asked about RAM upgrade. Scheduled for Monday.
:END:
:PROPERTIES:
:LAST_REPEAT: [2012-10-25 Thu 10:31]
:END:
TODO state change sequence:
;; '!' (for a timestamp) or '#' (for a note with timestamp)
(setq org-todo-keywords
'((sequence "TODO(t)" "PROJ(p)" "APPT(a)" "|" "DONE(d#)")))
Custom agenda command:
("c" agenda "Company 60"
(
(org-agenda-files '("~/shoebox/read/org/company.org"))
(org-agenda-ndays 60)
(org-deadline-warning-days 7)
(org-agenda-sorting-strategy '(time-up todo-state-up priority-down))
(org-agenda-time-grid nil)
(org-agenda-repeating-timestamp-show-all nil)
(org-agenda-show-log t)
(org-agenda-log-mode-items '(state))
(org-agenda-show-all-dates nil) ;; only show days with something
(org-agenda-skip-function '(org-agenda-skip-entry-if 'notregexp ":DAILY:"))
))
Produces:
60 days-agenda (W43-W51):
Thursday 25 October 2012
company: 10:00...... Scheduled: TODO Acronis : Backup Check :DAILY:
Where as:
("c" "Company 60"
((agenda ""))
(
(org-agenda-files '("~/shoebox/read/org/company.org"))
(org-agenda-ndays 60)
(org-deadline-warning-days 7)
(org-agenda-sorting-strategy '(time-up todo-state-up priority-down))
(org-agenda-time-grid nil)
(org-agenda-repeating-timestamp-show-all nil)
(org-agenda-show-log t)
(org-agenda-log-mode-items '(state))
(org-agenda-show-all-dates nil) ;; only show days with something
(org-agenda-skip-function '(org-agenda-skip-entry-if 'notregexp ":DAILY:"))
))
Produces:
60 days-agenda (W43-W51):
Thursday 25 October 2012
Company: 10:00...... Scheduled: TODO Acronis : Backup Check :DAILY:
Company: 10:31...... State: (DONE) TODO Acronis : Backup Check - Reverted 'proud' back to central storage. Asked about RAM upgrade. Scheduled for Monday. :DAILY: