技术提示

由员工
Mutt 用户将邮件移动到指定文件夹的简易方法

您可能会认为,在有这么多优秀的 GUI IMAP 电子邮件客户端可用的情况下,基于字符的 Mutt 不会有太大的吸引力。然而,我们在Linux Journal 的许多人仍然沉迷于 Mutt,至少用于我们电子邮件使用的一部分。原因之一是您可以将 Mutt 配置成几乎任何您想要的行为方式。

理想情况下,您可以编写服务器端过滤器将您的邮件分类到适当的文件夹中,我也有许多过滤器就是用来做这件事的。然而,这些过滤器并不完美,许多新闻提醒、新闻稿等最终都会出现在我的收件箱中。我可以从主题行中发现它们。因此,我为 Mutt 创建了一个长长的宏列表,以便从收件箱索引中将邮件归档到特定的文件夹中。我可以用一个 Ctrl 键操作来整理邮件,这比用文件夹树拖放邮件到侧边栏(或者更糟糕的是,一个级联的“移动”菜单)要好得多。这是一个简短的宏按键列表示例。您可以将您自己的设置放在您主目录下的 .muttrc 配置文件中。

下面的宏列表让我可以按 Ctrl-R 将当前高亮显示的消息发送到我的 Read 文件夹(这里的 Read 是过去时的意思),Ctrl-P 将其发送到我的 Press-Releases 文件夹(它是 Folders 的子文件夹),Ctrl-N 将其发送到 News-Alerts,等等。正如您所看到的,我试图将字母与操作联系起来,以便使按键容易记住(Ctrl-K 将消息删除到垃圾邮件箱)。

macro index \Cr "s=Read\r"
macro index \Cp "s=Folders/Press-Releases\r"
macro index \Cn "s=Folders/News-Alerts\r"
macro index \Ch "s=Folders/Humor\r"
macro index \Ck "s=SPAM\r"

我也花了很多时间在预览窗格打开的情况下浏览消息。上面的宏列表在预览模式下不起作用。如果您希望在用分页器预览邮件时也能执行相同的操作,请添加一个重复的列表,如下所示

macro pager \Cr "s=Read\r"
macro pager \Cp "s=Folders/Press-Releases\r"
macro pager \Cn "s=Folders/News-Alerts\r"
macro pager \Ch "s=Folders/Humor\r"
macro pager \Ck "s=SPAM\r"

Mutt 为您提供了一种在文件夹之间导航的方法,但在某些情况下,它不如提供侧边栏文件夹树的 GUI 客户端那么容易,您可以在侧边栏文件夹树中单击要打开的文件夹。这里有一些宏可以导航到您最常用的文件夹以阅读您已归档的消息

macro index ",r"  "c=Read\nOd="
macro index ",p"  "c=Folders/Press-Releases\nOd="
macro index ",n"  "c=Folders/News-Alerts\nOd="
macro index ",h"  "c=Folders/Humor\nOd="
macro index ",k"  "c=SPAM\nOd="

我已经习惯于将逗号键作为我的“go-to”键,因此我可以通过输入逗号键,然后再输入 p 来转到 Press-Releases 子文件夹。组合键 ,n 将我带到 News-Alerts,等等。如果逗号对您来说不直观,请选择另一个按键并相应地修改宏。

自然地,您会希望能够轻松返回收件箱。因此,我使用 ,i 组合键来完成此操作。再一次,如果您正在使用预览分页器,您可能需要创建一个重复项。只需将您的 IMAP 服务器地址替换为 <yourmailserver>,它应该就可以为您工作

macro index ",i"  "cimap://<yourmailserver>/INBOX\nOd="
macro pager ",i"  "cimap://<yourmailserver>/INBOX\nOd="

最后一点说明:您可能想知道为什么每个导航宏都以 \n 和 Od= 结尾。\n 执行移动到新文件夹的操作,而 0d= 告诉 Mutt 按日期对消息进行排序。这样,如果您在阅读邮件时更改了消息的排序顺序,当您使用宏命令更改文件夹时,Mutt 始终会使用日期排序。

您可以在 Mutt 在线手册 www.mutt.org/doc/manual 中找到自定义 Mutt 副本所需的所有信息。可能需要一些工作才能使 Mutt 按照您喜欢的方式执行,但是一旦您将其自定义为符合您的口味,您可能会发现很难再回到使用 GUI 电子邮件客户端。

—尼古拉斯·彼得雷利

在脚本的干草堆中寻找针

这个脚本是 Linux Journal 网站管理员 Keith Daniels 和一位名叫 Karl 的读者共同努力的成果,Karl 修改了 Keith Daniels 的工作,并向我们提交了这个脚本。它允许您根据您可能记得的脚本中出现的关键字查找脚本。

目标

  1. 不要强制对每个脚本标题的长度进行四行限制。

  2. 允许多个搜索路径(不仅限于 ~/bin/)。

  3. 支持显示脚本的路径/名称,而无需将其硬编码到标题中。

#!/bin/bash

#-
#- NAME:    ~/bin/scriptsearch
#- PURPOSE: grep for patterns in all scripts
#  under preset search
#  paths; output header lines in each matching script
#- NOTES:   all lines beginning with '#-' are assumed
#  to be header lines
#- USAGE:   scriptsearch <grep pattern>
#-

# paths in which all scripts will be searched
SEARCH_PATHS="${HOME}/bin /usr/local/bin"

if [ ${1} ]; then
    for PATH in ${SEARCH_PATHS}; do
        echo -e "\n...searching ${PATH}...\n"
        # find list of matching files for current
        # search path
        MATCHES="`/bin/grep -li $1 ${PATH}/*`"

        for MATCH in ${MATCHES}; do
            # print summary for each matching file
            echo "#====<script> ${MATCH}"
            /bin/grep -i '^#-' ${MATCH}
            echo -e "#====</script>\n"
        done
    done
fi

请注意,我处理第一个目标的方式的副作用是我的 Perl 脚本,它通常有一个带有以下内容的 print_usage() 函数print qq{...}跨越多行的代码也可以被搜索,而无需复制 print_usage() 函数。只需在 qq{...} 中的每一行前面加上 #-。

我为 ${MATCHES} 的 grep 命令添加了 -i 选项。这是一个非常简单的更改,但非常重要,因为我不想仅仅因为我的搜索关键字是小写的,但脚本包含大写字符的匹配项(变量名和注释可能是我们查找脚本的记忆线索,它们通常包含大写字母)而丢失相关结果。

—卡尔·埃里斯曼和基思·丹尼尔斯

Linux Journal 为我们发布的读者投稿技术提示支付 100 美元。请将您的提示和联系方式发送至 techtips@linuxjournal.com

加载 Disqus 评论