Re: [O] API problem
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/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
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/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
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/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