M4 не раскрывает все макросы в файле .m4 - PullRequest
0 голосов
/ 28 апреля 2019

Я использую m4, чтобы заменить некоторые макросы цветами / и т. Д., Определенными во включенных файлах в моем i3wm файле конфигурации.

$ m4 -I themes/gruvbox-dark config.m4 > config

Это (фрагмент) моей структуры каталогов для вышеуказанной команды.

$ tree .
.
├── config.m4
├── font.m4
├── themes
│   ├── gruvbox-dark
│   │   ├── color.m4
│   │   └── i3.m4
└── Xresources.m4

У меня определены макросы, такие как:

define(M4_COLOR_FG,`#a89984')
define(M4_I3_FG,`M4_COLOR_FG')
define(M4_I3_BG,`#3c3836')

и в выводе m4 я все еще вижу нерасширенные макросы, такие как:

client.focused #3c3836 M4_I3_BG M4_I3_ACTIVE_FG M4_I3_BG M4_I3_BG
client.focused_inactive #3c3836 M4_I3_BG M4_COLOR_FG M4_I3_BG M4_I3_BG
client.unfocused #3c3836 M4_I3_BG M4_COLOR_FG M4_I3_BG M4_I3_BG
client.urgent #fb4934 M4_I3_BG M4_COLOR_9 M4_COLOR_9 M4_I3_BG
client.placeholder #3c3836 M4_I3_BG M4_COLOR_FG M4_I3_BG M4_I3_BG
client.background #282828

Первый макрос был расширен, но оставшиеся в строке остались нерасширенными. Вот те же строки во входном файле .m4:

client.focused M4_I3_BG M4_I3_BG M4_I3_ACTIVE_FG M4_I3_BG M4_I3_BG
client.focused_inactive M4_I3_BG M4_I3_BG M4_COLOR_FG M4_I3_BG M4_I3_BG
client.unfocused M4_I3_BG M4_I3_BG M4_COLOR_FG M4_I3_BG M4_I3_BG
client.urgent M4_COLOR_9 M4_I3_BG M4_COLOR_9 M4_COLOR_9 M4_I3_BG
client.placeholder M4_I3_BG M4_I3_BG M4_COLOR_FG M4_I3_BG M4_I3_BG
client.background M4_COLOR_BG

Когда я пытаюсь создать несколько MWE, они всегда работают ... не знаю, в чем проблема с этими конкретными файлами / макросами.

Все файлы находятся под: https://github.com/tomocafe/dotfiles/tree/master/i3/.i3

Я пробовал это на работе и дома, мой домашний компьютер - Solus (Linux).

$ m4 --version | head -1
m4 (GNU M4) 1.4.18

1 Ответ

1 голос
/ 29 апреля 2019

Это очень просто: если вы хотите расширить M4_COLOR_3 M4_COLOR_3:

  1. m4 заменить первые M4_COLOR_3 на #colorcode.
  2. m4 не расширяет следующую M4_COLOR_3, потому что (расширенная) # означает комментарий.

У вас есть решение:

  1. Вы измените (или отключите) символ комментария с помощью changecom.
  2. Вы будете использовать двойные кавычки внутри определения: define (FOO, `` # aabbcc '')

Первое: changecom(XXX) изменит начальную отметку комментария (конечно, только в m4) на XXX, а в конце появится новая строка. changecom()' will disable the comments (so everything will parsed by m4`).

Второе:

define(FOO,``#aabbcc'')
FOO FOO FOO FOO FOO
...