Answers:
您可以在tmux分割中打开游骑兵(建议您这样做),选择要附加的文件,使用复制文件名及其路径yp
,然后返回到mutt附加窗口,a
在文件中按并粘贴附件路径和文件名。在附件窗口底部打开的一行,然后按Enter
。
关于文件名中的空格问题(响应@Rastapopolous的评论),我意识到我有一个不习惯使用不习惯的习惯,而是重新测试了上述从Ranger粘贴路径的方法,我发现当文件名中有空格,由于某种原因,粘贴在mutt中的附件名称具有重复的部分附加名称!一个人可以退格删除“附件”,即使没有逃脱空格,附件也很容易发送。我在vim中测试了Ranger的路径副本,它可以正确粘贴,但不能粘贴到Mutt中。
由于我习惯使用tmux,因此我发现这是一种相对简单的方法。
另外,与tmux无关,我的.bashrc中还有以下脚本:
# email an attachment
function mail_attach ()
{
mutt -F ~/.muttrc -a "$@" -- myemail@gmail.com;
}
export -f mail_attach
当您知道在撰写电子邮件之前将其附加时,此功能很有用。因此,从Ranger内,只需选择一个文件,键入s
以打开Shell命令行,并用指示所选文件%f
,即:
:shell mail_attach %f
按下Enter
将打开mutt编辑器,以撰写一封已附加了所选文件的电子邮件。但是,然后必须将收件人电子邮件地址更改为所需的电子邮件地址。也许有一种方法可以更改功能,以使用空白的“收件人”字段打开电子邮件编辑器,但我还不够了解。但是,我认为这没什么大不了的。
对于多个文件,如果它们位于同一文件夹中,则将它们全部选中,然后按一下@
,这是一个护林员快捷方式,以打开shell命令行,如下所示,其中%s
是对所选文件的引用:
:shell %s
然后一个简单地插入到mail_attach
前面,%s
然后按Enter将打开mutt来构成已经附加了所有选定文件的电子邮件。如果要附加来自不同文件夹的文件,除了将它们收集到同一文件夹外,我不知道该怎么做。
我想感谢创建该函数的人,但我不再知道它的来源。我知道不是我
:shell mutt -a %f
直接从ranger
。
@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
使用t
(或可视模式)和ranger
使用中标记多个文件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"