在Mutt中使用替代文件选择器


Answers:


2

您可以在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来构成已经附加了所有选定文件的电子邮件。如果要附加来自不同文件夹的文件,除了将它们收集到同一文件夹外,我不知道该怎么做。

我想感谢创建该函数的人,但我不再知道它的来源。我知道不是我


感谢您的回答!我刚刚发布了另一种更简化的方法,您可能会发现它很有趣。
Rastapopoulos

非常感谢您提供的替代方法,但是,我认为我太偏爱护林员,同时又缺乏使您的脚本适应护林员的技能!
John Flood

我已经修改了发布给护林员的脚本。唯一的缺点是它似乎不适用于其中包含空格的文件名。(是我的mutt版本,还是不可能在“附加文件”撰写菜单中键入<Space>字符?
Rastapopoulos

绝妙的技巧,您也可以:shell mutt -a %f直接从ranger
Rastapopoulos

1
您对“文字返回字符”的解释就成功了!您原来的脚本现在适合我。谢谢@Rastapopoulos!
John Flood

1

@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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.