M4 不展开 .m4 文件中的所有宏

  • 本文关键字:文件 m4 M4 linux m4 i3
  • 更新时间 :
  • 英文 :


我正在使用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

这很简单: 如果你想展开M4_COLOR_3 M4_COLOR_3

  1. m4将第一个M4_COLOR_3替换为#colorcode
  2. m4不会展开下一个M4_COLOR_3,因为(展开的(#表示注释。

您有解决方案:

  1. 您将使用 changecom 更改(或禁用(注释字符。
  2. 您将在定义中使用双引号:定义(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

相关内容

  • 没有找到相关文章

最新更新