이 글은 필자가 공부하는대로 부족한 부분을 업데이트 하고 있습니다.
mutt에 관하여 좋은 내용을 알고계시다면 알려주세요!
mutt란
mutt는 터미널에서 사용하는 이메일 클라이언트다. 리눅스 커널은 이메일을 통해 대부분의 토론과 패치로 소통한다. 그러다보니 참여하려면 이메일을 정말 많이 봐야한다. 보통 이메일을 쓸 땐 웹 기반 이메일 서비스를 사용하지만, 리눅스 커널 메일링 리스트처럼 하루에도 수백개의 메일을 수신해야 하는 환경에는 적합하지 않다. 텍스트 기반인 mutt를 애용하자.
패치를 몇개 보내면서 이메일 클라이언트 때문에 삽질을 좀 했다. 인라인 패치가 아니라 첨부파일로 보낸다던가, 어떤 메일에 대한 답장으로 인라인 패치를 보내고 싶은데 방법을 모른다던가.. 그런걸 여기서 글로 정리해보려고 한다.
“All mail clients suck. This one just sucks less.” — me, circa 1995
위 인용문은 mutt의 모토이다. "모든 이메일 클라이언트는 형편없다. mutt는 좀 덜 하다."
이 글에서 알아볼 이메일 클라이언트의 기능은 다음과 같다.
- 자주 쓰는 단축키
- 수신자, 발신자에 따라 필터링하기
- 여러 개의 메일을 선택하고, 다른 메일함으로 옮기거나 삭제하기
- 패치를 git tree에 적용하기
- 메일 태깅하기
index에서 할 수 있는 것들
위의 사진에서 처럼 메일을 보여주는 창을 index라고 부른다.
많이 쓰는 단축키는 매뉴얼 참고. http://www.mutt.org/doc/manual/#index-menu
메일 보내기, 답장하기, 전체답장하기 단축키
소문자 m이 메일 보내기, 소문자 r이 보낸 사람에게 답장, 소문자 g가 메일 보낸사람 + CC된 사람에게 전체답장하는 단축키이다.
메일 필터링하기
필터링은 간단하게 소문자 l을 누르면 prompt에 "Limit to messages matching: " 이라고 뜨는데, 여기에 패턴을 입력하면 된다. 나는 보통 ~C (To or CC된 사람), ~f (보낸 사람)를 많이 쓴다. 아래에선 프롬프트에 ~f Colin을 입력해서, Colin으로 부터 온 이메일만을 필터링해서 보여준다. ~C Colin이라고 입력하면 Colin에게 직접 보내거나(TO) CC를 한 메일이 만 보일 것이다. 자세한 패턴은 매뉴얼을 참고하자. http://www.mutt.org/doc/manual/#tab-patterns
다른 메일함으로 이동하기
기본적으로 Gmail에 mutt를 연결하면 Gmail의 INBOX를 보여준다. 모든 메일함을 한 번에 보는 건 정신이 없기 때문에, 메일을 종류에 따라 다른 메일함에 보관하고 관리하는게 편하다. c를 누르고 메일함의 이름을 입력하면 메일함을 열 수 있다.
메일을 다른 메일함에 복사 (C), 저장 (s)하기
소문자 s나 대문자 C를 누르고 메일함의 이름을 입력하면 현재 선택된 메일을 저장하거나 복사한다. 저장과 복사의 차이는 저장을 한 경우에는 원래의 메일함에서 사라진다. (복사한 경우에는 그대로 유지된다.)
메일 삭제하기
소문자 d를 누르면 사진처럼 D라는 표시가 생긴다. 이때 u를 누르면 삭제를 취소할 수 있고, $를 D로 마킹된 메일들이 정말로 삭제된다.
메일을 git tree에 apply하기
패치를 리뷰하려면 직접 빌드, 테스트를 해봐야한다. 이 절에서는 이메일로 보낸 패치를 git으로 적용하는 방법을 다룬다. 참고로, 이 절에서 설명하는 방법은 패치를 적용할 경로에서 mutt를 실행해야한다.
mutt 설정 (~/.mutt/muttrc)
아래 설정에선 ,s ,a ,r 이라는 단축키를 정의한다. ,s는 현재 선택한 메일(패치)을 git am으로 현재 mutt을 실행한 디렉토리에 적용한다. ,a는 git am을 중지하고, ,r는 저장소를 원격과 동일하게 리셋한다.
macro index ,s "| git am -s\n" "git am single patch"
macro index ,a "!git am --abort\n" "abort git am"
macro idnex ,r "!git reset --hard origin\n" "Reset to origin git tree"
메일 태깅하기
앞에서 메일 삭제/복사 단축키를 다뤘는데, 현재 선택된 메일이 아니라 여러 개의 메일에 대해서 삭제/복사 등등을 적용하려면 메일을 태깅해야한다. 소문자 t로 하나씩 태깅할 수도 있고, 대문자 T로 패턴에 맞는 메일을 태깅할 수도 있다. 앞에서 사용한 s, C 대신 ;s, ;C라고 입력하면 태깅된 메일에 대하여 저장, 복사를 수행한다. 사진을 보면 메일에 * 마크가 생긴 것을 볼 수 있다.
현재 내가 쓰는 mutt 설정 (~/.mutt/muttrc)
# ================ IMAP ====================
set imap_user = 42.hyeyoo@gmail.com
set imap_pass = password here
set spoolfile = imaps://imap.gmail.com/INBOX
set folder = imaps://imap.gmail.com/
set record="imaps://imap.gmail.com/[Gmail]/Sent Mail"
set postponed="imaps://imap.gmail.com/[Gmail]/Drafts"
set mbox="imaps://imap.gmail.com/[Gmail]/All Mail"
set header_cache = "~/.mutt/cache/headers"
set message_cachedir = "~/.mutt/cache/bodies"
set certificate_file = "~/.mutt/certificates"
# ================ SMTP ====================
set smtp_url = "smtp://42.hyeyoo@smtp.gmail.com:587/"
set smtp_pass = $imap_pass
set ssl_force_tls = yes # Require encrypted connection
# ================ Composition ====================
set editor = "nvim" # Set your favourite editor.
set edit_headers = yes # See the headers when editing
set charset = UTF-8 # value of $LANG; also fallback for send_charset
# Sender, email address, and sign-off line must match
unset use_domain # because joe@localhost is just embarrassing
set realname = "Hyeonggon Yoo"
set from = "42.hyeyoo@gmail.com"
set use_from = yes
# Sort emails reverse order
set sort=threads
set sort_browser=date
set sort_aux=reverse-last-date-received
# Define macros
macro index ,s "| git am -s\n" "am single patch"
macro index ,a "!git am --abort" "abort git am"
macro index ,r "!git reset --hard origin\n" " Reset to origin git tree
글에 앞으로 추가할 내용들
- 패치를 메일로 보내기
- 특정 메일에 대한 답변으로 패치 보내기
- mutt로 단일 패치(patch) 보내기
- mutt로 패치 시리즈(patch series) 보내기
- 이메일 안의 diff 내용을 syntax highlight하기
참고 문서들
'Kernel' 카테고리의 다른 글
GCP에서 Nested KVM 활성화 (0) | 2021.09.18 |
---|---|
[Linux Kernel] GCP에서 커스텀 커널 사용하기 (0) | 2021.09.17 |
[Linux Kernel] 주소와 메모리 공간 (2) | 2021.05.15 |
[Linux Kernel] 고민과 공부 방향 정리 (5) | 2021.05.12 |
[Linux Kernel] 첫 의미있는 기여 경험 (mm, slub) (2) | 2021.05.12 |
댓글