我不知道如何将属性RID
传递给其他范围内的源代码块,例如它在传递给函数(org-entry-get nil "RID")
之前无法评估addSomething
。使用#+CALL:
时确实可以使用,但是相同的语法在SRC块中不起作用(请参见下面的最后一个示例)。
#+NAME: addSomething
#+BEGIN_SRC sh :results value :var x="no"
echo "something: $x"
#+END_SRC
* Heading 1
:PROPERTIES:
:RID: h1_property
:END:
This works.
#+BEGIN_SRC sh :var y=(org-sbe addSomething (x "1"))
echo $y
#+END_SRC
#+RESULTS:
: something: 1
This works too:
#+BEGIN_SRC sh :var y=(org-entry-get nil "RID")
echo $y
#+END_SRC
#+RESULTS:
: h1_property
Error: Reference 'RID' not found in this buffer
#+BEGIN_SRC sh :var y=(org-sbe addSomething (org-entry-get nil "RID"))
echo $y
#+END_SRC
Error: Reference 'just a string' not found in this buffer.
#+BEGIN_SRC sh :var y=(org-sbe addSomething (x "a string"))
echo $y
#+END_SRC
Why? Passing "1" worked.
Error: Symbol's variable is void: RID
#+BEGIN_SRC sh :var y=(org-sbe addSomething (x (org-entry-get nil "RID")))
echo $y
#+END_SRC
Seems ~(org-entry-get nil "RID")~ is evaluated outside of the current scope.
It works using CALL.
#+CALL: addSomething(x=(org-entry-get nil "RID")) :results value
#+RESULTS:
: something: h1_property
Try the same for `:var`:
#+BEGIN_SRC sh :var y=addSomething(x=(org-entry-get nil "RID"))
echo $y
#+END_SRC
#+RESULTS:
: something:
答案 0 :(得分:0)
对于字符串大小写,请尝试以下操作:
#+BEGIN_SRC sh :var y=(org-sbe addSomething (x $"a string"))
echo $y
#+END_SRC
#+RESULTS:
: something: a string
对于RID情况,请尝试以下操作:
#+BEGIN_SRC sh :var y=(org-sbe addSomething (x (org-entry-get nil \"RID\")))
echo $y
#+END_SRC
#+RESULTS:
: something: h1_property
您可以添加源代码块以计算所需的任何元素,然后使用org-sbe
将结果传递给其他源代码块;例如
#+name: rid
#+BEGIN_SRC sh :var y=(org-entry-get nil "RID")
echo $y
#+END_SRC
#+BEGIN_SRC sh :var y=(org-sbe addSomething (x (org-sbe rid)))
echo $y
#+END_SRC
#+RESULTS:
: something: h1_property
类似
#+name: string
#+BEGIN_SRC sh :var y="a string"
echo $y
#+END_SRC
#+RESULTS: string
: a string
#+BEGIN_SRC sh :var y=(org-sbe addSomething (x (org-sbe string)))
echo $y
#+END_SRC
#+RESULTS:
: something: a string
这是第二个示例,其中参数是内联传递的(再次使用上面定义的“ rid”源块):
#+BEGIN_SRC sh :var y=addSomething((org-sbe rid)))
echo $y
#+END_SRC
#+RESULTS:
: something: h1_property
我意识到这既不是一个完整的解决方案也不是令人满意的解决方案,但是我没有时间或耐心来找出哪怕是一小部分规则(更不用说完整的规则)了。一个好的答案将构成一篇非常不错的博客文章的核心,我个人非常希望阅读(提示,提示...)