【问题标题】:M4 not expanding all macros in .m4 fileM4 未扩展 .m4 文件中的所有宏
【发布时间】:2019-04-28 20:37:58
【问题描述】:

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

【问题讨论】:

    标签: linux m4 i3


    【解决方案1】:

    很简单:如果你想扩展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 bym4`)。

    第二个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      相关资源
      最近更新 更多