gpt4 book ai didi

emacs - 通过 org-sbe 将组织模式属性传递给源代码块

转载 作者:行者123 更新时间:2023-12-04 15:46:34 24 4
gpt4 key购买 nike

我不知道如何将属性 RID 传递给不同范围内的源代码块,例如在将其传递给函数 addSomething 之前,它无法评估 (org-entry-get nil "RID")。它在使用 #+CALL: 时确实有效,但相同的语法在 SRC block 中无效(请参见下面的最后一个示例)。

#+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:

最佳答案

对于字符串大小写,试试这个:

#+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

您可以添加源 block 来计算您想要的任何元素,然后使用 org-sbe 将结果传递给其他源 block ;例如

#+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

我意识到这既不是一个完整的答案也不是一个令人满意的答案,但我没有时间或耐心找出规则的一小部分(更不用说完整的集合了)。一个好的答案将构成一篇非常好的博客文章的核心,我非常期待阅读这篇文章(提示,提示......)

关于emacs - 通过 org-sbe 将组织模式属性传递给源代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55504328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com