M4 未展开 .m4 文件中的所有宏
M4 not expanding all macros in .m4 file
我正在使用 m4
将某些宏替换为在我的 i3wm
配置文件的包含文件中定义的 colors/etc。
$ 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 时,它总是有效...不确定这些特定的问题是什么 files/macros。
所有文件都在:https://github.com/tomocafe/dotfiles/tree/master/i3/.i3
我在公司和家里都试过了,我家里的电脑是 Solus (Linux)。
$ m4 --version | head -1
m4 (GNU M4) 1.4.18
很简单:如果你想扩展 M4_COLOR_3 M4_COLOR_3
:
m4
将第一个 M4_COLOR_3
替换为 #colorcode
.
m4
不会扩展下一个 M4_COLOR_3
因为(扩展的)#
表示注释。
您有解决方案:
- 您将使用
changecom
更改(或禁用)注释字符。
- 您将在定义中使用双引号: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
我正在使用 m4
将某些宏替换为在我的 i3wm
配置文件的包含文件中定义的 colors/etc。
$ 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 时,它总是有效...不确定这些特定的问题是什么 files/macros。
所有文件都在:https://github.com/tomocafe/dotfiles/tree/master/i3/.i3
我在公司和家里都试过了,我家里的电脑是 Solus (Linux)。
$ m4 --version | head -1
m4 (GNU M4) 1.4.18
很简单:如果你想扩展 M4_COLOR_3 M4_COLOR_3
:
m4
将第一个M4_COLOR_3
替换为#colorcode
.m4
不会扩展下一个M4_COLOR_3
因为(扩展的)#
表示注释。
您有解决方案:
- 您将使用
changecom
更改(或禁用)注释字符。 - 您将在定义中使用双引号: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