ฉันสามารถเปิดข้อความที่ยังไม่ได้อ่านถัดไปเป็น mutt ด้วยปุ่มเดียวได้หรือไม่


17

มีวิธีในการเปิดข้อความที่ยังไม่ได้อ่านถัดไปmuttด้วยปุ่มเดียวหรือไม่? ฉันสามารถย้ายไปยังไม่ได้อ่านถัดไปด้วยnext-new-then-unreadซึ่งถูกผูกไว้Tabโดยค่าเริ่มต้น อย่างไรก็ตามหากไม่มีข้อความที่ยังไม่ได้อ่านในกล่องจดหมายปัจจุบันฉันจะต้องใช้next-unread-mailboxแทน ( ยกเลิกการเปิดใช้งานตามค่าเริ่มต้น) นี่เป็นวิธีย่อยที่ดีที่สุดเพราะถ้าฉันมีข้อความใหม่ออกจากmuttนั้นเปิดmuttใหม่อีกครั้งสิ่งนี้จะไม่ย้ายฉันไปยังกล่องจดหมายที่มีข้อความ "ใหม่" (สมมุติว่ากล่องจดหมายนั้นไม่ได้อ่านอีกแล้ว)

นอกจากนี้ทั้งสองย้ายไปยังข้อความถัดไปในมุมมองดัชนีและฉันต้องเปิดข้อความด้วยตนเองในมุมมองเพจเจอร์ (ด้วยEnter) มีวิธีในการเปิดข้อความที่ยังไม่ได้อ่านถัดไปไม่ว่าจะอยู่ในกล่องจดหมายใด

ฉันใช้ neomutt ดังนั้นวิธีแก้ปัญหาเพียงบางส่วนที่ฉันพบคือใช้คำสั่งแถบข้าง

macro index,pager , '<sidebar-next-new><sidebar-open><enter>'

ปัญหาคือสิ่งนี้จะเปิดกล่องจดหมายที่ยังไม่ได้อ่านถัดไปโดยอัตโนมัติ (จากแถบด้านข้าง) ดังนั้นหากมีข้อความที่ยังไม่ได้อ่านในกล่องจดหมายปัจจุบันและอีกข้อความหนึ่งคำสั่งนี้จะเปิดข้อความในกล่องจดหมายอื่นแทนที่จะเป็นข้อความปัจจุบัน

คำตอบ:


4

สำหรับ starters คุณสามารถใช้แมโครเช่นนี้เพื่อข้ามไปยังข้อความใหม่โดยอัตโนมัติ:

macro index     .n      "<next-unread-mailbox><enter><next-new-then-unread><enter>" "Go to new mail"

โปรดทราบว่าหากไม่มีข้อความใหม่Enter จะมีการกดคีย์เท่านั้นและข้อความปัจจุบันจะเปิดขึ้น

หากMaildirใช้เราสามารถใช้~/bin/mutt-new.shสคริปต์ที่จะตรวจสอบว่ามีเมลใหม่หรือไม่:

#!/usr/bin/env sh

if [ "$(find "$HOME"/.muttmail/box1/new -type f -printf '\n' | wc -l)" -eq 0 ]
then
    printf "I think there's no new mail\n" >&2
    printf "Press [ENTER] to continue\n" >&2
    read -r _
    exit 1
fi

echo 'push <next-unread-mailbox><enter><next-new-then-unread><enter>'

เพิ่มไปที่~/.muttrc:

macro index     .n        "!~/bin/mutt-new.sh" "Go to new"

แก้ไข:

เกี่ยวกับสิ่งนี้: สคริปต์ต่อไปนี้จะตรวจสอบก่อนว่ามีเมลใหม่ในกล่องจดหมายปัจจุบันหรือไม่:

#!/usr/bin/env sh

cur_mbox=${1/=/}

echo "$1" >> /tmp/PAR
echo "$cur_mbox" >> /tmp/PAR

if [ ! "$(find "$HOME"/.muttmail/"$cur_mbox"/new -type f -printf '\n' | wc -l)" -eq 0 ]
then
    printf "There is new mail in this mailbox\n" >&2
    printf "Press [ENTER] to continue\n" >&2
    read -r _
    echo 'push <next-new-then-unread><enter>'
elif [ ! "$(find "$HOME"/.muttmail/ -type d -name new -exec ls {} \; | wc -l)" -eq 0 ]
then
    printf "There is new mail in other mailboxes\n" >&2
    printf "Press [ENTER] to continue\n" >&2
    read -r _
    echo 'push <next-unread-mailbox><enter><next-new-then-unread><enter>'
else
    printf "I think there's no new mail\n" >&2
    printf "Press [ENTER] to continue\n" >&2
    read -r _
    exit 1
fi

เพิ่มไปที่~/.muttrc:

folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=$record; set record=$my_oldrecord'
folder-hook . 'macro index .n "<enter-command>source \"~/bin/mutt-new.sh $my_folder |\"<return>" "Go to new"'

แก้ไข:

คุณพูดว่า:

นี่เป็นวิธีย่อยที่ดีที่สุดเพราะถ้าฉันมีข้อความใหม่ออกจาก mutt แล้วเปิด mutt อีกครั้งสิ่งนี้จะไม่ย้ายฉันไปยังกล่องจดหมายที่มีข้อความ "ใหม่" (สมมุติว่ากล่องจดหมายนั้นไม่ได้อ่านอีกแล้ว)

สิ่งนี้สามารถแก้ไขได้โดย:

set mark_old=no

ขอบคุณสำหรับคำตอบ. ปัญหาที่สำคัญกับวิธีนี้คือมันทำงาน<next-unread-mailbox>โดยไม่คำนึงว่ามีข้อความที่ยังไม่ได้อ่านในกล่องจดหมายปัจจุบัน ในกรณีนี้มันจะสลับไปยังกล่องจดหมายอื่นและไม่เปิดข้อความที่ยังไม่ได้อ่านถัดไปในกล่องจดหมายปัจจุบัน ปัญหาอีกประการหนึ่ง (ตามคำถามของฉัน) คือ<next-unread-mailbox>ไม่ได้มองหายังไม่ได้อ่าน / ใหม่ข้อความแต่ยังไม่ได้อ่านกล่องจดหมาย
Sparhawk

@Sparhawk: ดูการแก้ไข นั่นเป็นคำถามที่น่าสนใจ โชคร้ายmuttไม่สามารถเขียนสคริปต์ได้อย่างสมบูรณ์และเป็นความอัปยศ
Arkadiusz Drabczyk

@Sparhawk: ดูการแก้ไขอื่น มาโครที่ฉันแนะนำจะเปิดอีเมลใหม่ในกล่องจดหมายปัจจุบันโดยอัตโนมัติหากมีอยู่ก่อนที่จะย้ายไปที่ maliboxes อื่น ฉันยังแนะนำวิธีการปิดการใช้งานการทำเครื่องหมายข้อความเป็นหลังจากที่ออกจากO mutt
Arkadiusz Drabczyk

ขอบคุณ ฉันอยู่ในช่วงพักร้อน แต่ฉันจะทดสอบเมื่อฉันกลับมา ดูเหมือนว่าจะมีแนวโน้ม
Sparhawk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.