* get the body of a heading up to the next subheading @ 2020-05-11 23:04 John Kitchin 2020-05-12 1:03 ` briangpowell . 2020-05-12 5:11 ` Ihor Radchenko 0 siblings, 2 replies; 9+ messages in thread From: John Kitchin @ 2020-05-11 23:04 UTC (permalink / raw) To: org-mode-email [-- Attachment #1: Type: text/plain, Size: 667 bytes --] Hi everyone, I am trying to get the body of a heading up to the next subheading. For example with this org file, * quiz one This is the description. Use emacs for this. ** question 1 what is 40 + 2 If the point is in the first heading, I want to run a function that would return the string "This is the description.\nUse emacs for this." I thought there was a simple way to do that, but so far it has eluded my google fu. Any hints? John ----------------------------------- Professor John Kitchin Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 @johnkitchin http://kitchingroup.cheme.cmu.edu [-- Attachment #2: Type: text/html, Size: 1154 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: get the body of a heading up to the next subheading 2020-05-11 23:04 get the body of a heading up to the next subheading John Kitchin @ 2020-05-12 1:03 ` briangpowell . 2020-05-12 5:11 ` Ihor Radchenko 1 sibling, 0 replies; 9+ messages in thread From: briangpowell . @ 2020-05-12 1:03 UTC (permalink / raw) To: John Kitchin; +Cc: org-mode-email [-- Attachment #1: Type: text/plain, Size: 1291 bytes --] Emacs was created to do such things--in fact the name E-macs is a terse form of Editor-Macros {originally a derivative of TECO} {There is a huge list of what Emacs should stand for--my fave is: Emacs Makes All Computing Simple} Now, what I'm suggesting is you make a macro, and store and reuse it--to get you started, I suggest something like this Cs* Cn C@ Cs** Cx ( replace-string Cqj Return \n Return Cx ) name-last-macro Give it a name & save it & re-use it and/or EXTEND it later On Mon, May 11, 2020 at 7:05 PM John Kitchin <jkitchin@andrew.cmu.edu> wrote: > Hi everyone, > > I am trying to get the body of a heading up to the next subheading. For > example with this org file, > > * quiz one > > This is the description. > Use emacs for this. > > ** question 1 > what is 40 + 2 > > If the point is in the first heading, I want to run a function that would > return the string "This is the description.\nUse emacs for this." > > I thought there was a simple way to do that, but so far it has eluded my > google fu. Any hints? > > John > > ----------------------------------- > Professor John Kitchin > Doherty Hall A207F > Department of Chemical Engineering > Carnegie Mellon University > Pittsburgh, PA 15213 > 412-268-7803 > @johnkitchin > http://kitchingroup.cheme.cmu.edu > > [-- Attachment #2: Type: text/html, Size: 2018 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: get the body of a heading up to the next subheading 2020-05-11 23:04 get the body of a heading up to the next subheading John Kitchin 2020-05-12 1:03 ` briangpowell . @ 2020-05-12 5:11 ` Ihor Radchenko 2020-05-13 14:15 ` John Kitchin 1 sibling, 1 reply; 9+ messages in thread From: Ihor Radchenko @ 2020-05-12 5:11 UTC (permalink / raw) To: John Kitchin, org-mode-email You may use something similar to org-quick-peek--get-entry-text from org-quick-peek package (https://github.com/alphapapa/org-quick-peek): (cl-defun org-quick-peek--get-entry-text (marker &key keep-drawers keep-planning) "Return Org entry text from node at MARKER. If KEEP-DRAWERS is non-nil, drawers will be kept, otherwise removed." ;; Modeled after `org-agenda-get-some-entry-text' (let (text) (with-current-buffer (marker-buffer marker) ;; Get raw entry text (org-with-wide-buffer (goto-char marker) ;; Skip heading (end-of-line 1) ;; Get entry text (setq text (buffer-substring (point) (or (save-excursion (outline-next-heading) (point)) (point-max)))))) (with-temp-buffer (org-mode) (insert text) (unless keep-drawers (goto-char (point-min)) (while (re-search-forward org-drawer-regexp nil t) ;; Remove drawers (delete-region (match-beginning 0) (progn (re-search-forward "^[ \t]*:END:.*\n?" nil 'move) (point))))) (unless keep-planning (goto-char (point-min)) (while (re-search-forward org-planning-line-re nil t) ;; Remove planning line (kill-whole-line))) (setq text (buffer-substring (point-min) (point-max)))) (-reduce-r #'funcall (reverse (cons text (cons #'identity org-quick-peek-filter-functions)))))) Best, Ihor John Kitchin <jkitchin@andrew.cmu.edu> writes: > Hi everyone, > > I am trying to get the body of a heading up to the next subheading. For > example with this org file, > > * quiz one > > This is the description. > Use emacs for this. > > ** question 1 > what is 40 + 2 > > If the point is in the first heading, I want to run a function that would > return the string "This is the description.\nUse emacs for this." > > I thought there was a simple way to do that, but so far it has eluded my > google fu. Any hints? > > John > > ----------------------------------- > Professor John Kitchin > Doherty Hall A207F > Department of Chemical Engineering > Carnegie Mellon University > Pittsburgh, PA 15213 > 412-268-7803 > @johnkitchin > http://kitchingroup.cheme.cmu.edu -- Ihor Radchenko, PhD, Center for Advancing Materials Performance from the Nanoscale (CAMP-nano) State Key Laboratory for Mechanical Behavior of Materials, Xi'an Jiaotong University, Xi'an, China Email: yantar92@gmail.com, ihor_radchenko@alumni.sutd.edu.sg ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: get the body of a heading up to the next subheading 2020-05-12 5:11 ` Ihor Radchenko @ 2020-05-13 14:15 ` John Kitchin 2020-05-13 14:38 ` Ihor Radchenko 2020-05-13 16:08 ` Eric Abrahamsen 0 siblings, 2 replies; 9+ messages in thread From: John Kitchin @ 2020-05-13 14:15 UTC (permalink / raw) To: Ihor Radchenko; +Cc: org-mode-email Thanks! Here is what I am currently using: (defun canvas-org-get-heading-body () "Return the body of the current heading up to the next heading." (interactive) (save-excursion (unless (org-at-heading-p) (org-previous-visible-heading 1)) (org-end-of-meta-data) (buffer-substring (point) (progn (re-search-forward org-heading-regexp nil 'mv) (line-beginning-position))))) So far it gets what I want. I am pretty sure I have reinvented this, maybe even from code I wrote before... I couldn't find my answer on SO or my blog though. Ihor Radchenko <yantar92@gmail.com> writes: > You may use something similar to org-quick-peek--get-entry-text from > org-quick-peek package (https://github.com/alphapapa/org-quick-peek): > > (cl-defun org-quick-peek--get-entry-text (marker &key keep-drawers keep-planning) > "Return Org entry text from node at MARKER. > If KEEP-DRAWERS is non-nil, drawers will be kept, otherwise > removed." > ;; Modeled after `org-agenda-get-some-entry-text' > (let (text) > (with-current-buffer (marker-buffer marker) > ;; Get raw entry text > (org-with-wide-buffer > (goto-char marker) > ;; Skip heading > (end-of-line 1) > ;; Get entry text > (setq text (buffer-substring > (point) > (or (save-excursion (outline-next-heading) (point)) > (point-max)))))) > (with-temp-buffer > (org-mode) > (insert text) > (unless keep-drawers > (goto-char (point-min)) > (while (re-search-forward org-drawer-regexp nil t) > ;; Remove drawers > (delete-region (match-beginning 0) > (progn (re-search-forward > "^[ \t]*:END:.*\n?" nil 'move) > (point))))) > (unless keep-planning > (goto-char (point-min)) > (while (re-search-forward org-planning-line-re nil t) > ;; Remove planning line > (kill-whole-line))) > (setq text (buffer-substring (point-min) (point-max)))) > (-reduce-r #'funcall (reverse (cons text (cons #'identity org-quick-peek-filter-functions)))))) > > Best, > Ihor > > John Kitchin <jkitchin@andrew.cmu.edu> writes: > >> Hi everyone, >> >> I am trying to get the body of a heading up to the next subheading. For >> example with this org file, >> >> * quiz one >> >> This is the description. >> Use emacs for this. >> >> ** question 1 >> what is 40 + 2 >> >> If the point is in the first heading, I want to run a function that would >> return the string "This is the description.\nUse emacs for this." >> >> I thought there was a simple way to do that, but so far it has eluded my >> google fu. Any hints? >> >> John >> >> ----------------------------------- >> Professor John Kitchin >> Doherty Hall A207F >> Department of Chemical Engineering >> Carnegie Mellon University >> Pittsburgh, PA 15213 >> 412-268-7803 >> @johnkitchin >> http://kitchingroup.cheme.cmu.edu -- Professor John Kitchin Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 @johnkitchin http://kitchingroup.cheme.cmu.edu ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: get the body of a heading up to the next subheading 2020-05-13 14:15 ` John Kitchin @ 2020-05-13 14:38 ` Ihor Radchenko 2020-05-13 14:49 ` John Kitchin 2020-05-13 16:08 ` Eric Abrahamsen 1 sibling, 1 reply; 9+ messages in thread From: Ihor Radchenko @ 2020-05-13 14:38 UTC (permalink / raw) To: John Kitchin; +Cc: org-mode-email > Thanks! Here is what I am currently using: Note that your code may fail if there is an inline task in the body. Best, Ihor John Kitchin <jkitchin@andrew.cmu.edu> writes: > Thanks! Here is what I am currently using: > > (defun canvas-org-get-heading-body () > "Return the body of the current heading up to the next heading." > (interactive) > (save-excursion > (unless (org-at-heading-p) > (org-previous-visible-heading 1)) > (org-end-of-meta-data) > (buffer-substring (point) > (progn (re-search-forward org-heading-regexp nil 'mv) > (line-beginning-position))))) > > So far it gets what I want. I am pretty sure I have reinvented this, > maybe even from code I wrote before... I couldn't find my answer on SO > or my blog though. > > Ihor Radchenko <yantar92@gmail.com> writes: > >> You may use something similar to org-quick-peek--get-entry-text from >> org-quick-peek package (https://github.com/alphapapa/org-quick-peek): >> >> (cl-defun org-quick-peek--get-entry-text (marker &key keep-drawers keep-planning) >> "Return Org entry text from node at MARKER. >> If KEEP-DRAWERS is non-nil, drawers will be kept, otherwise >> removed." >> ;; Modeled after `org-agenda-get-some-entry-text' >> (let (text) >> (with-current-buffer (marker-buffer marker) >> ;; Get raw entry text >> (org-with-wide-buffer >> (goto-char marker) >> ;; Skip heading >> (end-of-line 1) >> ;; Get entry text >> (setq text (buffer-substring >> (point) >> (or (save-excursion (outline-next-heading) (point)) >> (point-max)))))) >> (with-temp-buffer >> (org-mode) >> (insert text) >> (unless keep-drawers >> (goto-char (point-min)) >> (while (re-search-forward org-drawer-regexp nil t) >> ;; Remove drawers >> (delete-region (match-beginning 0) >> (progn (re-search-forward >> "^[ \t]*:END:.*\n?" nil 'move) >> (point))))) >> (unless keep-planning >> (goto-char (point-min)) >> (while (re-search-forward org-planning-line-re nil t) >> ;; Remove planning line >> (kill-whole-line))) >> (setq text (buffer-substring (point-min) (point-max)))) >> (-reduce-r #'funcall (reverse (cons text (cons #'identity org-quick-peek-filter-functions)))))) >> >> Best, >> Ihor >> >> John Kitchin <jkitchin@andrew.cmu.edu> writes: >> >>> Hi everyone, >>> >>> I am trying to get the body of a heading up to the next subheading. For >>> example with this org file, >>> >>> * quiz one >>> >>> This is the description. >>> Use emacs for this. >>> >>> ** question 1 >>> what is 40 + 2 >>> >>> If the point is in the first heading, I want to run a function that would >>> return the string "This is the description.\nUse emacs for this." >>> >>> I thought there was a simple way to do that, but so far it has eluded my >>> google fu. Any hints? >>> >>> John >>> >>> ----------------------------------- >>> Professor John Kitchin >>> Doherty Hall A207F >>> Department of Chemical Engineering >>> Carnegie Mellon University >>> Pittsburgh, PA 15213 >>> 412-268-7803 >>> @johnkitchin >>> http://kitchingroup.cheme.cmu.edu > > > -- > Professor John Kitchin > Doherty Hall A207F > Department of Chemical Engineering > Carnegie Mellon University > Pittsburgh, PA 15213 > 412-268-7803 > @johnkitchin > http://kitchingroup.cheme.cmu.edu -- Ihor Radchenko, PhD, Center for Advancing Materials Performance from the Nanoscale (CAMP-nano) State Key Laboratory for Mechanical Behavior of Materials, Xi'an Jiaotong University, Xi'an, China Email: yantar92@gmail.com, ihor_radchenko@alumni.sutd.edu.sg ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: get the body of a heading up to the next subheading 2020-05-13 14:38 ` Ihor Radchenko @ 2020-05-13 14:49 ` John Kitchin 2020-05-22 14:41 ` Bastien 0 siblings, 1 reply; 9+ messages in thread From: John Kitchin @ 2020-05-13 14:49 UTC (permalink / raw) To: Ihor Radchenko; +Cc: org-mode-email [-- Attachment #1: Type: text/plain, Size: 4784 bytes --] good point, thanks! Here is a new version that might fail some other way! (defun canvas-org-get-heading-body () "Return the body of the current heading up to the next heading." (interactive) (save-excursion (unless (org-at-heading-p) (org-previous-visible-heading 1)) (org-end-of-meta-data) (buffer-substring (point) (progn (org-next-visible-heading 1) (point))))) John ----------------------------------- Professor John Kitchin Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 @johnkitchin http://kitchingroup.cheme.cmu.edu On Wed, May 13, 2020 at 10:42 AM Ihor Radchenko <yantar92@gmail.com> wrote: > > Thanks! Here is what I am currently using: > > Note that your code may fail if there is an inline task in the body. > > Best, > Ihor > > John Kitchin <jkitchin@andrew.cmu.edu> writes: > > > Thanks! Here is what I am currently using: > > > > (defun canvas-org-get-heading-body () > > "Return the body of the current heading up to the next heading." > > (interactive) > > (save-excursion > > (unless (org-at-heading-p) > > (org-previous-visible-heading 1)) > > (org-end-of-meta-data) > > (buffer-substring (point) > > (progn (re-search-forward org-heading-regexp nil 'mv) > > (line-beginning-position))))) > > > > So far it gets what I want. I am pretty sure I have reinvented this, > > maybe even from code I wrote before... I couldn't find my answer on SO > > or my blog though. > > > > Ihor Radchenko <yantar92@gmail.com> writes: > > > >> You may use something similar to org-quick-peek--get-entry-text from > >> org-quick-peek package (https://github.com/alphapapa/org-quick-peek): > >> > >> (cl-defun org-quick-peek--get-entry-text (marker &key keep-drawers > keep-planning) > >> "Return Org entry text from node at MARKER. > >> If KEEP-DRAWERS is non-nil, drawers will be kept, otherwise > >> removed." > >> ;; Modeled after `org-agenda-get-some-entry-text' > >> (let (text) > >> (with-current-buffer (marker-buffer marker) > >> ;; Get raw entry text > >> (org-with-wide-buffer > >> (goto-char marker) > >> ;; Skip heading > >> (end-of-line 1) > >> ;; Get entry text > >> (setq text (buffer-substring > >> (point) > >> (or (save-excursion (outline-next-heading) (point)) > >> (point-max)))))) > >> (with-temp-buffer > >> (org-mode) > >> (insert text) > >> (unless keep-drawers > >> (goto-char (point-min)) > >> (while (re-search-forward org-drawer-regexp nil t) > >> ;; Remove drawers > >> (delete-region (match-beginning 0) > >> (progn (re-search-forward > >> "^[ \t]*:END:.*\n?" nil 'move) > >> (point))))) > >> (unless keep-planning > >> (goto-char (point-min)) > >> (while (re-search-forward org-planning-line-re nil t) > >> ;; Remove planning line > >> (kill-whole-line))) > >> (setq text (buffer-substring (point-min) (point-max)))) > >> (-reduce-r #'funcall (reverse (cons text (cons #'identity > org-quick-peek-filter-functions)))))) > >> > >> Best, > >> Ihor > >> > >> John Kitchin <jkitchin@andrew.cmu.edu> writes: > >> > >>> Hi everyone, > >>> > >>> I am trying to get the body of a heading up to the next subheading. For > >>> example with this org file, > >>> > >>> * quiz one > >>> > >>> This is the description. > >>> Use emacs for this. > >>> > >>> ** question 1 > >>> what is 40 + 2 > >>> > >>> If the point is in the first heading, I want to run a function that > would > >>> return the string "This is the description.\nUse emacs for this." > >>> > >>> I thought there was a simple way to do that, but so far it has eluded > my > >>> google fu. Any hints? > >>> > >>> John > >>> > >>> ----------------------------------- > >>> Professor John Kitchin > >>> Doherty Hall A207F > >>> Department of Chemical Engineering > >>> Carnegie Mellon University > >>> Pittsburgh, PA 15213 > >>> 412-268-7803 > >>> @johnkitchin > >>> http://kitchingroup.cheme.cmu.edu > > > > > > -- > > Professor John Kitchin > > Doherty Hall A207F > > Department of Chemical Engineering > > Carnegie Mellon University > > Pittsburgh, PA 15213 > > 412-268-7803 > > @johnkitchin > > http://kitchingroup.cheme.cmu.edu > > -- > Ihor Radchenko, > PhD, > Center for Advancing Materials Performance from the Nanoscale (CAMP-nano) > State Key Laboratory for Mechanical Behavior of Materials, Xi'an Jiaotong > University, Xi'an, China > Email: yantar92@gmail.com, ihor_radchenko@alumni.sutd.edu.sg > [-- Attachment #2: Type: text/html, Size: 7345 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: get the body of a heading up to the next subheading 2020-05-13 14:49 ` John Kitchin @ 2020-05-22 14:41 ` Bastien 0 siblings, 0 replies; 9+ messages in thread From: Bastien @ 2020-05-22 14:41 UTC (permalink / raw) To: John Kitchin; +Cc: org-mode-email, Ihor Radchenko Hi John, John Kitchin <jkitchin@andrew.cmu.edu> writes: > Here is a new version that might fail some other way! > > (defun canvas-org-get-heading-body () > "Return the body of the current heading up to the next heading." > (interactive) > (save-excursion > (unless (org-at-heading-p) > (org-previous-visible-heading 1)) > (org-end-of-meta-data) > (buffer-substring (point) > (progn (org-next-visible-heading 1) (point))))) Maybe this is useful enough to end up in https://orgmode.org/worg/org-hacks.html ? We obviously need to make this page more readable and useful, but new contents is always welcome. Thanks, -- Bastien ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: get the body of a heading up to the next subheading 2020-05-13 14:15 ` John Kitchin 2020-05-13 14:38 ` Ihor Radchenko @ 2020-05-13 16:08 ` Eric Abrahamsen 2020-05-13 16:41 ` Ihor Radchenko 1 sibling, 1 reply; 9+ messages in thread From: Eric Abrahamsen @ 2020-05-13 16:08 UTC (permalink / raw) To: John Kitchin; +Cc: org-mode-email, Ihor Radchenko John Kitchin <jkitchin@andrew.cmu.edu> writes: > Thanks! Here is what I am currently using: > > (defun canvas-org-get-heading-body () > "Return the body of the current heading up to the next heading." > (interactive) > (save-excursion > (unless (org-at-heading-p) > (org-previous-visible-heading 1)) > (org-end-of-meta-data) > (buffer-substring (point) > (progn (re-search-forward org-heading-regexp nil 'mv) > (line-beginning-position))))) > > So far it gets what I want. I am pretty sure I have reinvented this, > maybe even from code I wrote before... I couldn't find my answer on SO > or my blog though. I don't think there's anything built-in, no. I have needed this in various places, and did something similar to the above, except with a combination of `org-back-to-heading', `org-end-of-meta-data', then `outline-next-heading'. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: get the body of a heading up to the next subheading 2020-05-13 16:08 ` Eric Abrahamsen @ 2020-05-13 16:41 ` Ihor Radchenko 0 siblings, 0 replies; 9+ messages in thread From: Ihor Radchenko @ 2020-05-13 16:41 UTC (permalink / raw) To: Eric Abrahamsen, John Kitchin; +Cc: org-mode-email > I don't think there's anything built-in, no. I have needed this in > various places, and did something similar to the above, except with a > combination of `org-back-to-heading', `org-end-of-meta-data', then > `outline-next-heading'. Hmm. I just noticed a reference to built-in org-agenda-get-some-entry-text in the function I sent earlier. I do not see why it cannot be used outside agenda. Maybe something like (let ((org-agenda-entry-text-cleanup-hook nil)) (org-agenda-get-some-entry-text (point-marker) #x40000000)) Eric Abrahamsen <eric@ericabrahamsen.net> writes: > John Kitchin <jkitchin@andrew.cmu.edu> writes: > >> Thanks! Here is what I am currently using: >> >> (defun canvas-org-get-heading-body () >> "Return the body of the current heading up to the next heading." >> (interactive) >> (save-excursion >> (unless (org-at-heading-p) >> (org-previous-visible-heading 1)) >> (org-end-of-meta-data) >> (buffer-substring (point) >> (progn (re-search-forward org-heading-regexp nil 'mv) >> (line-beginning-position))))) >> >> So far it gets what I want. I am pretty sure I have reinvented this, >> maybe even from code I wrote before... I couldn't find my answer on SO >> or my blog though. > > I don't think there's anything built-in, no. I have needed this in > various places, and did something similar to the above, except with a > combination of `org-back-to-heading', `org-end-of-meta-data', then > `outline-next-heading'. -- Ihor Radchenko, PhD, Center for Advancing Materials Performance from the Nanoscale (CAMP-nano) State Key Laboratory for Mechanical Behavior of Materials, Xi'an Jiaotong University, Xi'an, China Email: yantar92@gmail.com, ihor_radchenko@alumni.sutd.edu.sg ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-05-22 14:42 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-05-11 23:04 get the body of a heading up to the next subheading John Kitchin 2020-05-12 1:03 ` briangpowell . 2020-05-12 5:11 ` Ihor Radchenko 2020-05-13 14:15 ` John Kitchin 2020-05-13 14:38 ` Ihor Radchenko 2020-05-13 14:49 ` John Kitchin 2020-05-22 14:41 ` Bastien 2020-05-13 16:08 ` Eric Abrahamsen 2020-05-13 16:41 ` Ihor Radchenko
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).