在杂种狗,是否可以使用文件浏览器,例如维夫姆或者护林员(可能在一个多路复用器split)而不是默认文件浏览器来选择要附加到电子邮件的文件?
答案1
您可以在 tmux split 中打开 ranger(您建议的可能性),选择要附加的文件,使用复制文件名及其路径yp
,然后返回到 mutt 附加窗口,按并将a
附件路径和文件名粘贴到在附加窗口底部打开的行,然后按Enter
。
关于文件名中空格的问题(回应@Rastapopolous的评论),我意识到我有不使用它们的强烈习惯,但是重新测试上面从ranger粘贴路径的方法,我发现当文件名有空格,由于某种原因,粘贴到 mutt 中的附件名称有部分名称重复!人们可以退格以删除“附件”,即使空格未转义,附件也可以轻松发送。我在 vim 中测试了 ranger 的路径副本,它粘贴正确,但在 mutt 中则不然。
由于我习惯使用tmux,所以我发现这是一个相对简单的方法。
或者独立于 tmux,我的 .bashrc 中还有以下脚本:
# email an attachment
function mail_attach ()
{
mutt -F ~/.muttrc -a "$@" -- [email protected];
}
export -f mail_attach
当您知道要在撰写电子邮件之前添加附件时,这非常有用。因此,在 ranger 中,只需选择一个文件,键入s
即可打开 shell 命令行,并用 指示所选文件%f
,即:
:shell mail_attach %f
按Enter
将打开 mutt 编辑器,用于撰写已附加所选文件的电子邮件。但是,随后必须将收件人电子邮件地址更改为所需的地址。也许有一种方法可以更改功能以打开带有空白“收件人”字段的电子邮件编辑器,但我还不够了解。不过,我觉得这没什么大不了的。
对于多个文件,如果它们位于同一文件夹中,我将全部选择它们,然后按@
Ranger 快捷方式打开 shell 命令行,如下所示,其中%s
是对所选文件的引用:
:shell %s
然后只需mail_attach
在前面插入%s
并按 Enter 键即可打开 mutt 来撰写已附加所有选定文件的电子邮件。如果您想附加来自不同文件夹的文件,除了将它们收集到同一文件夹中之外,我不知道该怎么做。
我想感谢创建该函数的人,但我不再知道它来自哪里。我知道那不是我。
答案2
@John Flood 的回答启发我对此进行了更多思考,我想出了以下解决方法,这似乎效果很好。
将以下脚本保存为mutt_attach
中的某处$PATH
,并使用文字Return
字符代替^M
(在 中vim
,这是通过<c-v><Return>
在插入模式下按来实现的)。
#!/usr/bin/env bash
tmp=$(mktemp)
vifm "$HOME" -c "set nohlsearch" --choose-files "$tmp"
# ranger "$HOME" --choosefiles="$tmp"
while IFS="" read -r file; do
tmux send-keys -t email:Email.0 -l "a$file^M";
done < "$tmp"
在 中.muttrc
,定义
macro compose \CA "!mutt_attach\n"
现在,如果您在名为的会话中mutt
的窗口的第一个窗格中打开(例如,使用命令创建。指定会话、窗口和窗格主要用于调试目的)并按撰写菜单中的 ,将以模式打开,并且将自动附加所选文件。Email
tmux
email
tmux new -s email
Control+A
vifm
choose-files
更好的是,这可以让您在vifm
using t
(或可视模式)和ranger
using中标记多个文件,Space
并同时附加它们!
编辑:我注意到该代码不适用于包含空格的文件名,因为在我的 mutt 版本中似乎不可能在附件撰写菜单中键入空格...这是一个(有点难看)的解决方法:
#!/usr/bin/env bash
# File in which to store the list of filenames to attach
tmp=$(mktemp)
vifm "$HOME" -c "set nohlsearch" --choose-files "$tmp"
# ranger "$HOME" --choosefiles="$tmp"
while IFS="" read -r file; do
# Workaround for filenames that contain spaces
if [[ "$file" = *" "* ]]; then
file_no_space=/tmp/$(basename "$file" | sed 's/ /_/g')
ln -s -f "$file" "$file_no_space"
file="$file_no_space"
fi
tmux send-keys -t email:Email.0 -l "a$file^M";
done < "$tmp"