如何在DWM中用C语言配置maim格式字符串实现截图快捷键
DWM中配置maim截图快捷键的正确方法
你的问题出在DWM执行外部命令的逻辑上:它不会像Bash那样解析~(家目录)、$(date)(命令替换)这类shell特殊语法,直接把整个字符串当成maim的参数传入,自然无法正常工作。
下面是两种可行的解决方法:
方法一:通过Bash执行命令(最简便)
把命令交给bash来解析执行,修改代码为:
static const char *maim[] = {"bash", "-c", "maim ~/Screenshots/$(date +%F-%H_%M_%S).png", NULL};
原理:让DWM调用bash程序,用-c参数传递完整的命令字符串,bash会自动解析~和$(date)这些语法。
方法二:手动处理路径与日期(无shell依赖)
如果不想依赖bash,可以用C语言生成带日期的文件名,在快捷键的回调逻辑中动态处理:
- 先定义基础命令数组:
static const char *maim_raw[] = {"maim", NULL};
- 在自定义的快捷键回调或修改后的
spawn逻辑里,生成目标文件名:
char filename[256]; time_t t = time(NULL); strftime(filename, sizeof(filename), "%Y-%m-%d-%H_%M_%S.png", localtime(&t)); char path[256]; snprintf(path, sizeof(path), "%s/Screenshots/%s", getenv("HOME"), filename); // 构造最终执行的参数数组 const char *args[] = {"maim", path, NULL}; spawn(args); // 调用DWM自带的spawn函数执行命令
这种方法更复杂,但完全不依赖shell环境。
额外注意事项
- 提前创建截图存储目录,避免maim报错:
mkdir -p ~/Screenshots - 在DWM的
keys数组中绑定快捷键,示例:
{ MODKEY|ShiftMask, XK_s, spawn, {.v = maim} },
内容的提问来源于stack exchange,提问作者YukaMax
相关产品推荐
相关产品推荐

