I guess this is what you mean: * heading L1_12 ** heading L2_37 #+name: this-block #+header: :var VAR1=(getenv "HOSTNAME") #+header: :var VAR2=(message user-login-name) #+header: :var VAR3=(buffer-file-name) #+header: :var VAR4=(org-element-property :name (org-element-context)) #+header: :var VAR5=(org-no-properties (org-display-outline-path nil t)) #+header: :var VAR5a=(line-number-at-pos (org-element-property :begin (org-element-context))) #+header: :var VAR6=(s-trim (shell-command-to-string "git rev-parse HEAD")) #+header: :var VAR7=(s-trim (shell-command-to-string "git branch --show-current")) #+BEGIN_SRC sh :results raw echo Run by $VAR2 from $VAR3 echo In a src-block named $VAR4 in $VAR5 at line $VAR5a echo on commit $VAR6 in git branch $VAR7 #+END_SRC #+RESULTS: this-block Run by jkitchin from /Users/jkitchin/Dropbox/emacs/journal/2021/01/17/ 2021-01-17.org In a src-block named this-block in heading L1_12/heading L2_37 at line 140 on commit a07475addc3fdf557fb46a72b1100cf1c9c0805a in git branch master 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 Sun, Jan 17, 2021 at 4:42 PM HJ wrote: > > hi, > > I'm trying to figure out how to write a block , header, PROPERTY or > whatever is necessary so the output of a command in babel source block > identifies it own position - the line (or block or something) in buffer > (or at least the file) in which it is written. ( Plus the checked out > git revision / branch. ) > > > I've been experimenting with the following, so far without much luck ... > > Which of these pieces of information (see the "echo" line below) is it > possible to get? Which is easy? (variables VAR[0345] are most critical) > How would one write a snippet which provides (some of) this information? > > Is it much harder with command 1 being SSH to a remote machine? Would > ":dir user@remotemachine:/some/dir" work better? Or at all? > > Perhaps I would know how to find out VAR6 and VAR7 by running first > some `git cmd1` and `git cmd2` locally in a " command 0 " - but is there > a way to get that info from magit somehow? > > But what I am most desperate for is how to cause orgmode block to set > VAR0, VAR3, VAR4 and VAR5, and - also fairly important - how to use the > combination of VAR[0345] do open / recall the file onto the screen > > Thanks a million for helping me out here ... > > HJ > > > This is the sample file : > > > * heading L1_12 > Hello and welcome, this is a file with self-referencing shell babel > source code blocks > ... > ** heading L2_37 > ... > #+NAME: block220 > #+BEGIN_SRC bash :session sess9 > : command 0 ; cd _how-do-I-find-the-dir-of-currently-edited-file_ ; > VAR6=`git cmd1` ; VAR7=`git cmd2` > : command 1 ; ssh -o "SetEnv VAR1=machine VAR2=user VAR3=..." > targetUser@targetMachine > #+END_SRC > > > ... > > #+NAME: block225 > #+BEGIN_SRC bash :session sess9 > : command 2 ; : do some computation on targetMachine > : command 3 ; echo This code has been launched from emacs process > VAR0:_EMACS_SESSION_ID_ \ > on computer $VAR1:_SRC_HOSTNAME_ \ > run by user $VAR2:_USER_ \ > from file $VAR3:_FILENAME_ \ > code block named $VAR4:block225 \ > in this file positioned under headings: $VAR5:heading L1_12/heading > L2_37/ \ > which is checked out from $VAR6:_GIT_COMMIT_ID_ \ > on branch $VAR7:_GIT_BRANCH_ > : command 3 continues ; echo To display the buffer which launched this > code on the screen of the running emacs session, run the following command > : emacs _What_the_heck_do_I_put_here?_ '&' > #+END_SRC > > > > > > > >