Как мне сгенерировать исходный код из таблицы режима org? - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь найти способ переместить мой файл конфигурации i3wm в файл режима org. У меня есть таблица с сочетаниями клавиш и какие команды они должны выполнять, и я хотел бы сгенерировать из нее соответствующий исходный код.

Пример:

| Keybinding            | Command              | Action                   |
|-----------------------+----------------------+--------------------------|
| {{{mod}}} + Return    | i3-sensible-terminal | Opens a new terminal     |
| {{{mod}}} + Shift + q | kill                 | Kills the focused window |

должно генерировать

bindsym {{{mod}}}+Return exec --no-startup-id i3-sensible-terminal ;; Opens a new Terminal
bindsym {{{mod}}}+Shift+q exec --no-startup-id kill ;; Kills the focused window

такое возможно?

1 Ответ

2 голосов
/ 17 апреля 2019

Вы можете назвать таблицу и передать ее в качестве аргумента исходному блоку, а исходный блок будет перебирать строки. Вот реализация в python:

#+NAME: commands
| Keybinding            | Command              | Action                   |
|-----------------------+----------------------+--------------------------|
| {{{mod}}} + Return    | i3-sensible-terminal | Opens a new terminal     |
| {{{mod}}} + Shift + q | kill                 | Kills the focused window |

#+begin_src python :var cmds=commands :results output raw
for row in cmds:
    print("bindsym {} exec --no-startup-id {}  ;; {}".format(row[0].replace(' ', ''), row[1], row[2]))
#+end_src

Здесь я предположил, что пробелы в первом столбце следует исключать, а не заключать в кавычки строку, но вы можете легко это изменить.

А вот результаты запуска вышеуказанного исходного блока:

#+RESULTS:
bindsym {{{mod}}}+Return exec --no-startup-id i3-sensible-terminal  ;; Opens a new terminal
bindsym {{{mod}}}+Shift+q exec --no-startup-id kill  ;; Kills the focused window
...