代码之家  ›  专栏  ›  技术社区  ›  tomocafe

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

  •  0
  • tomocafe  · 技术社区  · 7 年前

    我在用 m4 用“我的”中包含的文件中定义的颜色/etc替换某些宏 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
    

    第一个宏已展开,但行中的其余宏未展开。在input.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
    

    当我试着做一些微波武器时,它总是有效的…不确定这些特定的文件/宏有什么问题。

    所有文件位于: https://github.com/tomocafe/dotfiles/tree/master/i3/.i3

    我在工作和家里都试过,我家的电脑是Solus(Linux)。

    $ m4 --version | head -1
    m4 (GNU M4) 1.4.18
    
    0 回复  |  直到 7 年前
        1
  •  1
  •   uzsolt    7 年前

    很简单:如果你想扩大 M4_COLOR_3 M4_COLOR_3 :

    1. m4 替换第一个 M4_COLOR_3 #colorcode .
    2. M4 不展开下一个 M4_颜色_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
    
    推荐文章