Re: [O] API problem

2014-01-22 Thread Nicolas Goaziou
Hello,

Cecil Westerhof cldwester...@gmail.com writes:

 To solve a problem I have the following line in an org file:
 - [ ] B (org-list-set-checkbox (line-beginning-position)
 (org-list-struct) [X]) ITEM STRUCT CHECKBOX (org-list-send-item
 (line-beginning-position) 'end (org-list-struct)) ITEM DEST STRUCT

 Executing the org-list-send-item brings the entry to the end of the list,
 but executing org-list-set-checkbox does nothing. What am I doing
 wrong?

`org-list-set-checkbox' modifies the structure, i.e., the internal list
representation. It doesn't modify the buffer. You would have to apply
the new structure to the buffer with `org-list-write-struct'.

Anyway, it's much simpler to use `org-toggle-checkbox'.


Regards,

-- 
Nicolas Goaziou



Re: [O] API problem

2014-01-22 Thread Cecil Westerhof
2014/1/22 Cecil Westerhof cldwester...@gmail.com

 2014/1/22 Nicolas Goaziou n.goaz...@gmail.com

  To solve a problem I have the following line in an org file:
  - [ ] B (org-list-set-checkbox (line-beginning-position)
  (org-list-struct) [X]) ITEM STRUCT CHECKBOX (org-list-send-item
  (line-beginning-position) 'end (org-list-struct)) ITEM DEST STRUCT
 
  Executing the org-list-send-item brings the entry to the end of the
 list,
  but executing org-list-set-checkbox does nothing. What am I doing
  wrong?

 `org-list-set-checkbox' modifies the structure, i.e., the internal list
 representation. It doesn't modify the buffer. You would have to apply
 the new structure to the buffer with `org-list-write-struct'.


 Just started today to want to do some thing, so I am a tabula rasa. ;-)



 Anyway, it's much simpler to use `org-toggle-checkbox'.


 That goes wrong when there is a marked region. I only want to set the
 current checkbox.

 So I have to work out how to use org-list-wrte-struct.


I have an org-file wth the folowing:
- [ ] A (setq struct (org-list-struct))
- [-] B (org-list-get-checkbox 41 struct)
- [ ] C (org-list-set-checkbox 41 struct [X])
- [ ] D (org-list-get-checkbox 41 struct)
- [ ] E (org-list-write-struct struct (org-list-parents-alist struct))

In A I fill the struct.
B displays [-]
C displays [X]
D displays [X], so the struct is correctly updated.
E gives: #marker in no buffer

What is going wrong here?


-- 
Cecil Westerhof


Re: [O] API problem

2014-01-22 Thread Nicolas Goaziou
Cecil Westerhof cldwester...@gmail.com writes:

 I have an org-file wth the folowing:
 - [ ] A (setq struct (org-list-struct))
 - [-] B (org-list-get-checkbox 41 struct)
 - [ ] C (org-list-set-checkbox 41 struct [X])
 - [ ] D (org-list-get-checkbox 41 struct)
 - [ ] E (org-list-write-struct struct (org-list-parents-alist struct))

 In A I fill the struct.
 B displays [-]
 C displays [X]
 D displays [X], so the struct is correctly updated.
 E gives: #marker in no buffer

 What is going wrong here?

See `org-list-write-struct' docstring. Basically, STRUCT doesn't match
real structure anymore since step C. You need to provide the original
structure as a third argument so `org-list-write-struct' can modify
buffer by set difference.

  (let* ((struct (org-list-struct))
 (old (copy-tree struct)))
(org-list-set-checkbox (line-beginning-position) struct [X])
(org-list-write-struct struct (org-list-parents-alist struct) old))


Regards,

-- 
Nicolas Goaziou



Re: [O] API problem

2014-01-22 Thread Cecil Westerhof
2014/1/22 Nicolas Goaziou n.goaz...@gmail.com

 Cecil Westerhof cldwester...@gmail.com writes:

  I have an org-file wth the folowing:
  - [ ] A (setq struct (org-list-struct))
  - [-] B (org-list-get-checkbox 41 struct)
  - [ ] C (org-list-set-checkbox 41 struct [X])
  - [ ] D (org-list-get-checkbox 41 struct)
  - [ ] E (org-list-write-struct struct (org-list-parents-alist struct))
 
  In A I fill the struct.
  B displays [-]
  C displays [X]
  D displays [X], so the struct is correctly updated.
  E gives: #marker in no buffer
 
  What is going wrong here?

 See `org-list-write-struct' docstring. Basically, STRUCT doesn't match
 real structure anymore since step C. You need to provide the original
 structure as a third argument so `org-list-write-struct' can modify
 buffer by set difference.

   (let* ((struct (org-list-struct))
  (old (copy-tree struct)))
 (org-list-set-checkbox (line-beginning-position) struct [X])
 (org-list-write-struct struct (org-list-parents-alist struct) old))


This works, so I can continue.

But one thing I do not understand. When you do an org-list-write-struct,
you want to change the structure. So why is old-struct optional?



-- 
Cecil Westerhof


Re: [O] API problem

2014-01-22 Thread Nicolas Goaziou
Hello,

Cecil Westerhof cldwester...@gmail.com writes:

 But one thing I do not understand. When you do an org-list-write-struct,
 you want to change the structure. So why is old-struct optional?

Good question.

IIRC, it's just syntactic sugar since `org-list-write-struct' will do
the `copy-tree' for you in most situations (i.e., when you don't use
a function that modifies structure by side-effect).


Regards,

-- 
Nicolas Goaziou



Re: [O] API problem

2014-01-22 Thread Cecil Westerhof
2014/1/22 Nicolas Goaziou n.goaz...@gmail.com

 See `org-list-write-struct' docstring. Basically, STRUCT doesn't match
 real structure anymore since step C. You need to provide the original
 structure as a third argument so `org-list-write-struct' can modify
 buffer by set difference.

   (let* ((struct (org-list-struct))
  (old (copy-tree struct)))
 (org-list-set-checkbox (line-beginning-position) struct [X])
 (org-list-write-struct struct (org-list-parents-alist struct) old))


I implemented it. See my post:
Check checkbox and move to end of list

-- 
Cecil Westerhof