我有一个小mutt
宏可以使用我的文件管理器保存附件(ranger
碰巧是 )。它看起来像这样:
macro attach S "<pipe-message>muttsaveattach"<enter>
mutttsaveattach
以下脚本在哪里:
#!/bin/sh
urxvt -e ranger --choosefile=/tmp/muttattach
cat > $"`cat /tmp/muttattach`"
这很笨重,但是有效。它的作用是将附件转储到/tmp/muttattach
,然后将该文件的内容保存到您使用ranger
.
我唯一怀念的是能够以某种方式恢复附件的原始名称并在我的脚本中使用它。是否有任何变量mutt
可以提供保存该值的变量以供在宏中使用?如果没有,是否有其他方法可以恢复并使用该名称?
答案1
我认为目前这种方法是不可能的。 Mutt 和 Neomutt 没有任何可供用户使用的变量来为您提供文件名。但我知道如何使用 mailcap 来实现它。
假设您有一个执行以下操作的宏:
- 将当前值保存
mailcap_path
到变量中, - 设置一个新的
mailcap_path
(请参阅下面的 mailcap 文件示例), - 强制使用 mailcap 查看附件,
- 恢复
mailcap_path
到之前的路径。
macro attach S\
<enter-command>set my_mailcap_path=$mailcap_path<enter>\
<enter-command>set mailcap_path=~/.mailcap2<enter>\
<view-mailcap>\
<enter-command>set mailcap_path=$my_mailcap_path<enter>\
您需要为每种可能的 mailcap 类型(不包括子类型,您可以使用通配符)创建一个 mailcap 条目。
示例 ~/.mailcap2
application/*; /your/script %s
audio/*; /your/script %s
font/*; /your/script %s
image/*; /your/script %s
message/*; /your/script %s
model/*; /your/script %s
text/*; /your/script %s
video/*; /your/script %s
您需要稍微更改一下脚本。因为附件将不再通过管道传输到它。它将获取文件名作为参数。或者也许尝试直接更改 mailcap2 文件以包含filetype/*; urxvt -e ranger --choosefile=%s
#!/bin/sh
urxvt -e ranger --choosefile=$1
另外,我也不是 100% 确定,但可能有必要删除宏的第一个命令<enter-command>set my_mailcap_path=$mailcap_path<enter>\
并在之前分配变量。我想我以前遇到过这个。在单个宏中设置和取消设置变量效果不佳。
免责声明:我没有测试它,但我非常肯定这应该有效。