krz/orgstar

A native macOS editor for org-mode files. editor org-mode swift

Commit 9cb5e048a0

9cb5e048a0e70a986be15162bcd4f49f71836582

parent: 91703eee0a

Verified · cmc

cmc <hello@cleberg.net> · 2026-10-09 02:33 UTC

Let the nearest heading's header-args win

ancestors(of:) is outermost first, so reversing it applied the outermost heading's header-args last.

Layout: unified · split

Sources/OrgCore/Compute/Babel.swift +1 −1
@@ -1022,7 +1022,7 @@ public enum Babel {
1022 static func propertyLayers(language: String, heading: Int?, model: DocumentModel) -> [[(String, String)]] { 1022 static func propertyLayers(language: String, heading: Int?, model: DocumentModel) -> [[(String, String)]] {
1023 var levels = [model.fileProperties] 1023 var levels = [model.fileProperties]
1024 if let heading { 1024 if let heading {
1025 levels += (model.ancestors(of: heading).reversed() + [heading]).map { model.headings[$0].properties } 1025 levels += (model.ancestors(of: heading) + [heading]).map { model.headings[$0].properties }
1026 } 1026 }
1027 return ["header-args", "header-args:\(language)"].compactMap { key in 1027 return ["header-args", "header-args:\(language)"].compactMap { key in
1028 var value: String? 1028 var value: String?
Tests/OrgCoreTests/BabelTests.swift +2
@@ -201,6 +201,8 @@ struct BabelTests {
201 "#+begin_src sh :dir (concat \"/\" \"usr\") :results output\npwd\n#+end_src\n", 201 "#+begin_src sh :dir (concat \"/\" \"usr\") :results output\npwd\n#+end_src\n",
202 "#+begin_src sh :dir /tmp :results output\npwd\n#+end_src\n", 202 "#+begin_src sh :dir /tmp :results output\npwd\n#+end_src\n",
203 "#+NAME: items\n- one\n- two\n\n#+begin_src shell :var l=items :results output\necho \"$l\"\n#+end_src\n", 203 "#+NAME: items\n- one\n- two\n\n#+begin_src shell :var l=items :results output\necho \"$l\"\n#+end_src\n",
204 // The nearest heading's header-args win.
205 "* A\n:PROPERTIES:\n:header-args: :var x=1\n:END:\n** B\n:PROPERTIES:\n:header-args: :var x=2\n:END:\n*** C\n#+begin_src sh\necho $x\n#+end_src\n",
204 // Lisp values. 206 // Lisp values.
205 "#+begin_src python :var l='(1 2) m='((1 2) (3 4)) n=(+ 1 2) s='(\"a\" \"b\")\nreturn [l, m, n, s]\n#+end_src\n", 207 "#+begin_src python :var l='(1 2) m='((1 2) (3 4)) n=(+ 1 2) s='(\"a\" \"b\")\nreturn [l, m, n, s]\n#+end_src\n",
206 "#+begin_src emacs-lisp :var l='(1 2) h='((1 2) hline (3 4)) s=(concat \"a\" \"b\")\n(list l h s)\n#+end_src\n", 208 "#+begin_src emacs-lisp :var l='(1 2) h='((1 2) hline (3 4)) s=(concat \"a\" \"b\")\n(list l h s)\n#+end_src\n",