NeoMutt 添加附件
在 NeoMutt 内为邮件主体添加附件,由于操作界面比较简陋,难以使用。尤其是无法同时添加多个附件,重复操作起来简直就是灾难。本文尝试提供一种解决方案。
待解问题
在 NeoMutt 内,按下 m 即可创新一封新的邮件。在填写完邮件的头部信息之后,比如收件人、抄送人、主题等信息,NeoMutt 会打开设定的文本编辑器,比如我设定的是 Neovim,在既定的邮件模板上进行邮件主体的编辑。当邮件主体内容编辑完成之后,我们按 :w 保存、按 :q 退出 Neovim 编辑器。这时 NeoNutt 的状态,类似位于一个待发送状态,按下 y 即可发送邮件。
如果此时需要给邮件主体再添加附件,比如添加一个 PDF 文档,或者 Excel 表格,需要按下 a? 打开一个文件选择窗口,通过上下箭头导航浏览文件列表,通过回车确认添加附件,然后自动回退至待发送模式。如果只是添加一个附件勉强可以操作,但如果需要添加多个附件,则上述步骤需要重复 N 次,比较痛苦。
于是搜索并参考 Attach files using FZF 这个帖子,找到一个解决方案。
创建脚本
在配置文件夹内创建一个脚本文件 ~/.config/neomutt/scripts/fzfattach.sh,其作用就是通过运行 fzf 命令,打开一个交互窗口,用于查找、选择、添加(多个)文件作为邮件附件。
#!/usr/bin/env bash
# cd to the root folder of attachments
cd $HOME
# custom fd (fdfind on debian) for fzf, including only some extentions that I use as attachments
export FZF_DEFAULT_COMMAND='fd -t f -e pdf -e png -e jpg -e zip -e tar -e gz -e rar -e html -e md --absolute-path'
/opt/homebrew/bin/fzf -m --prompt='Choose one/multiple file(s) to attach >' | \
while IFS=$'\n' read -r attachment; do
echo "push 'a$attachment<enter>'"
done因为我使用的是 macOS,不是 Linux,所以帖子原始脚本中的命令由 fdfind 更换为 fd;我的 fzf 是经由 Homebrew 安装,所以脚本中的命令(含安装路径)由 /usr/bin/fzf 更换为 /opt/homebrew/bin/fzf
赋于脚本可执行权限
在终端运行 chmod 命令为脚本添加可执行权限:
chmod 755 ~/.config/neomutt/scripts/fzfattach.sh添加快捷键
在配置文件 ~/.config/neomutt/neomuttrc 内添加 C-a 为快捷键,用于在 NeoMutt 内部调用已经具有可执行权限的脚本文件。
# This binding was using <space> for folders auto-completion and breaking a lot of push macros.
unbind editor <space>
# List files in $HOME with selected ext with fzf and send them to compose attachment, use tab to select multiple files in fzf
macro compose \Ca ":source ~/.config/neomutt/scripts/fzfattach.sh|<enter>"当 NeoNutt 位于待发送状态时,按下 C-a 即可打开文件选择窗口,按 Tab 可选择多个文件,按回车确认。目前这个工作流程,小小的美中不足在于仅能够添加附件,无法删除已添加的附件。