Yearly Archives: 2019

2019-12-08

Windows用のEmacs26.3をMSYS2でビルドする方法(IMEパッチ、ImageMagick-6)

rzl24ozi’s gistsにIMEパッチが公開されている。README.txtに詳細なビルド方法が書いてあるのでよく読むこと。

1次情報としてはソースコードツリー内の nt/INSTALLnt/INSTALL.W64 にWindowsでのビルド方法が書いてある。

Emacs 26.2以降は最低限のIMEサポートがなされているらしいのでIMEパッチを適用しなくても公式ビルドで十分な場合もある。私の場合、ATOK使用時にCtrl+Nで部分確定した文字が正しく入力されなかった(Ctrl+各確定した文字…と解釈されてそんなキーバインドは無いと言われた)のでIMEパッチを使うことにした。

また、ImageMagickサポートがあると画像の拡大縮小ができて大きな画像も無理なく埋め込み表示出来るのでImageMagickパッチも適用することにした。

作業概要

MSYS2環境を構築(後述)してから、MinGW64のシェルから次の作業を行う。各ステップについての詳細は後述する。

# 作業用ディレクトリを作る
mkdir emacsbuild
cd emacsbuild
WORK_DIR=$(pwd)

# ImageMagickをダウンロードして展開してビルドする
IMAGEMAGICK_VER=ImageMagick-6.9.10-77
wget http://www.imagemagick.org/download/releases/$IMAGEMAGICK_VER.tar.gz
tar xvfz $IMAGEMAGICK_VER.tar.gz

IMAGEMAGICK_DIR=$WORK_DIR/ImageMagick-6
cd $IMAGEMAGICK_VER
./configure --host=x86_64-w64-mingw32 --enable-hdri --with-rsvg --prefix=$IMAGEMAGICK_DIR
make install
cd ..

# Emacsをダウンロードして展開する
EMACS_VER=emacs-26.3
wget http://ftp.gnu.org/gnu/emacs/$EMACS_VER.tar.gz
tar xvfz $EMACS_VER.tar.gz

# IMEパッチを当てる
wget https://gist.githubusercontent.com/rzl24ozi/ee4457df2f54c5f3ca0d02b56e371233/raw/16794e5883211049aed08c681f71240fa32cc28f/emacs-26.1-rc1-w32-ime.diff
patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-w32-ime.diff

# ImageMagickパッチを当てる
wget https://gist.githubusercontent.com/rzl24ozi/2b6dd502f3e0fa5083fb87c808287370/raw/a56d6c576d3f4ca24f87ff7510498f588a67c236/emacs-26.1-rc1-mingw-imagemagick.diff
patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-mingw-imagemagick.diff

# ImageMagick関連dllファイル名をビルドしたバージョンに合わせて書き替える
mv $EMACS_VER/lisp/term/w32-win.el $EMACS_VER/lisp/term/w32-win.el.orig_patched
sed 's/-6\.Q16HDRI-5\.dll/-6.Q16HDRI-6.dll/g; s/-6\.Q16-5\.dll/-6.Q16-6.dll/g;' $EMACS_VER/lisp/term/w32-win.el.orig_patched > $EMACS_VER/lisp/term/w32-win.el

# Emacsをビルドする
EMACS_INSTALL_DIR=/c/app/$EMACS_VER
cd $EMACS_VER
./autogen.sh
PKG_CONFIG_PATH=$IMAGEMAGICK_DIR/lib/pkgconfig:$PKG_CONFIG_PATH ./configure --without-dbus --with-gnutls --prefix=$EMACS_INSTALL_DIR
make -j4
make install-strip
cd ..

# dllをコピーする
cp /mingw64/bin/*.dll $EMACS_INSTALL_DIR/bin
cp $IMAGEMAGICK_DIR/bin/libMagickCore*.dll $EMACS_INSTALL_DIR/bin
cp $IMAGEMAGICK_DIR/bin/libMagickWand*.dll $EMACS_INSTALL_DIR/bin

Cygwin使用者への注意

Cygwinを使用している場合はCygwinの設定がMSYSと混ざらないように注意すること。

  • 環境変数HOMEが指している場所に.bashrcや.bash_profile等の設定ファイルがある場合は、それが読み込まれないようにする。そこにPKG_CONFIGやLIBRARY_PATH等の設定があるとうまくビルド出来ない。
  • PATHがCygwinのツールを参照していると問題を起こす場合がある(特にテキストマウントによる改行コードの問題)ので、PATHからCygwin関連へのパスを外す等する。

環境変数HOMEがCygwinの設定ファイルがあるディレクトリを指している場合、例えば次のようにして対処する。

  • MSYSを使う前に一時的に環境変数HOMEを削除する
  • msys2_shell.cmdの先頭に「set HOME=」を追加する
  • cmd.exeから set "HOME=" && (msysインストール先)\msys2_shell.cmd -mingw64 でMinGW64シェルを起動する
  • .bashrcや.bash_profileにCygwin以外(MSYS等)で実行した場合に対応するコードを追加する。例えば次のコードをファイルの先頭に入れるとCygwin以外は何もせず終了する

    [[ "$OSTYPE" != "cygwin" ]] && return
    

MSYS2環境の準備

MSYS2のインストール

MSYS2 homepageからMSYS2(x86_64)のインストーラをダウンロードして実行しインストールする。

MSYS2シェルの起動

スタートメニューから「MSYS2 MSYS」を選ぶとMSYS2シェルが起動する。

MSYS2の更新

すでにMSYS2をインストール済みの場合、ビルドの前に各種パッケージの更新を行う(古いバージョンのMSYS2の場合は入れ直した方が早いかも)。

スタートメニューから「MSYS2 MSYS」を選んで以下を入力。

pacman -Syuu

warning: terminate MSYS2 without returning to shell and check for updates again warning: for example close your terminal window instead of calling exit

のようなメッセージが出たらAlt+F4で終了してスタートメニューからMSYS2 MSYSを起動して再度 pacman -Syuu を実行する。

何度か繰り返して更新されなくなったらOK。

以前追加したパッケージはここで更新される。

必要なパッケージの追加

必要なパッケージについては nt/INSTALLnt/INSTALL.W64 を参照のこと。

nt/INSTALL.W64では次のパッケージをインストールしている(2019-12-07現在)。

pacman -S --needed base-devel \
  mingw-w64-x86_64-toolchain \
  mingw-w64-x86_64-xpm-nox \
  mingw-w64-x86_64-libtiff \
  mingw-w64-x86_64-giflib \
  mingw-w64-x86_64-libpng \
  mingw-w64-x86_64-libjpeg-turbo \
  mingw-w64-x86_64-librsvg \
  mingw-w64-x86_64-lcms2 \
  mingw-w64-x86_64-jansson \
  mingw-w64-x86_64-libxml2 \
  mingw-w64-x86_64-gnutls \
  mingw-w64-x86_64-zlib

不要なパッケージ(ImageMagick-7)が入っている場合は削除すること。

pacman -Rs mingw-w64-x86_64-imagemagick

MinGW64シェルに移る

スタートメニューから「MSYS2 MinGW 64-bit」を選ぶ。

Cygwinを使用している場合はCygwin使用者への注意を参照のこと。

作業用ディレクトリを用意する

mkdir emacs_build
cd emacs_build
WORK_DIR=$(pwd)

以降作業ディレクトリへのパスを $WORK_DIR とする。

ImageMagickのビルド

ImageMagickのソースコードの取得

http://www.imagemagick.org/download/releases/ から6系の最新のソースコードを取得する。

IMAGEMAGICK_VER=ImageMagick-6.9.10-77
wget http://www.imagemagick.org/download/releases/$IMAGEMAGICK_VER.tar.gz
tar xvfz $IMAGEMAGICK_VER.tar.gz

ImageMagickのビルド

MinGW64シェルから展開したディレクトリへ移動して

IMAGEMAGICK_DIR=$WORK_DIR/ImageMagick-6
cd $IMAGEMAGICK_VER
./configure --host=x86_64-w64-mingw32 --enable-hdri --with-rsvg --prefix=$IMAGEMAGICK_DIR
make install
cd ..

$WORK_DIR/ImageMagick-6 にビルド結果が格納される。そのディレクトリを以降 $IMAGEMAGICK_DIR とする。

Emacsのビルド

Emacsのソースコードの取得

Emacsの公式サイトからソースコードをダウンロードして展開する(Cygwinの場合テキストマウントに注意すること)。

http://ftp.gnu.org/gnu/emacs/

EMACS_VER=emacs-26.3
wget http://ftp.gnu.org/gnu/emacs/$EMACS_VER.tar.gz
tar xvfz $EMACS_VER.tar.gz

Gitで取得することもできる。

which gitしてgitが見えなければgitへのパスを通す(Git for WindowsなどMSYS2の外でインストールしている場合は見えないと思う)。

export PATH="/c/app/dev/Git/cmd":"$PATH"

emacs.git - Emacs source repository より好きなブランチを選んで入手する。

git clone --depth=1 -b $EMACS_VER git://git.savannah.gnu.org/emacs.git --config core.autocrlf=false

改行コードに注意すること。Windowsだとautocrlfで使っている人もいると思うので、改行コードが変換されないようにオプションを付ける。

IMEパッチを適用

rzl24ozi’s gists より最新のものを入手する。

emacs-26.3にはemacs26.1-rc1用のパッチがそのまま適用できた。

wget https://gist.githubusercontent.com/rzl24ozi/ee4457df2f54c5f3ca0d02b56e371233/raw/16794e5883211049aed08c681f71240fa32cc28f/emacs-26.1-rc1-w32-ime.diff
patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-w32-ime.diff

注意: Cygwinをテキストマウントで使っている場合、Cygwinのpatchを使うと改行コードがCR+LFになることがあるので、その場合はMinGWのpatchを使うこと。

(msys2インストール先)/usr/bin/patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-w32-ime.diff

ImageMagickパッチを適用(+一部手動修正)

ImageMagickを使うときは次のパッチを使う。

wget https://gist.githubusercontent.com/rzl24ozi/2b6dd502f3e0fa5083fb87c808287370/raw/a56d6c576d3f4ca24f87ff7510498f588a67c236/emacs-26.1-rc1-mingw-imagemagick.diff
patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-mingw-imagemagick.diff

した上で

lisp/term/w32-win.el 内の次の場所をDLLのファイル名に合わせて変更する。

       '(magickwand "libMagickWand-6.Q16HDRI-5.dll" "libMagickWand-6.Q16-5.dll"
                    "libMagickWand-6.Q16HDRI-2.dll" "libMagickWand-6.Q16-2.dll")
       '(magickcore "libMagickCore-6.Q16HDRI-5.dll" "libMagickCore-6.Q16-5.dll"
                    "libMagickCore-6.Q16HDRI-2.dll" "libMagickCore-6.Q16-2.dll")

例えばImageMagick-6.9.10-77をビルドすると libMagickCore*-6.dll や libMagickWand*-6.dll ができるので、上の-5.dllを-6.dllへ修正する。

mv $EMACS_VER/lisp/term/w32-win.el $EMACS_VER/lisp/term/w32-win.el.orig_patched
sed 's/-6\.Q16HDRI-5\.dll/-6.Q16HDRI-6.dll/g; s/-6\.Q16-5\.dll/-6.Q16-6.dll/g;' $EMACS_VER/lisp/term/w32-win.el.orig_patched > $EMACS_VER/lisp/term/w32-win.el

Emacsのビルド

MinGW64シェルから

EMACS_INSTALL_DIR=/c/app/$EMACS_VER
cd $EMACS_VER
./autogen.sh
PKG_CONFIG_PATH=$IMAGEMAGICK_DIR/lib/pkgconfig:$PKG_CONFIG_PATH ./configure --without-dbus --with-gnutls --prefix=$EMACS_INSTALL_DIR
make -j4 #4コアで
make install-strip
$EMACS_INSTALL_DIR/bin/runemacs.exe -Q

DLLのコピー

msys64/mingw64/bin/*.dll をEmacsのbinディレクトリへコピーする。

cp /mingw64/bin/*.dll $EMACS_INSTALL_DIR/bin

ビルドして生成されたImageMagick用のdllもコピーする。

cp $IMAGEMAGICK_DIR/bin/libMagickCore*.dll $EMACS_INSTALL_DIR/bin
cp $IMAGEMAGICK_DIR/bin/libMagickWand*.dll $EMACS_INSTALL_DIR/bin

その他の注意

MSYS2のライブラリパッケージがバージョンアップするとビルドが通らなくなったり通っても正しく動かなくなったりする場合があります。 emacs-26.2の時はlibgnutlsのバージョンアップに伴いSSL接続が正しく動かなくなった時がありました。 上記手順は2019-12-08にビルドが通ることを確認しました。

2019-11-13

2019年秋の新番組

10/01(火) 07:30~ テレビ東京系 ばなにゃ ふしぎななかまたち
10/02(水) 18:25~ テレビ東京系 あひるの空
10/02(水) 19:25~ NHK Eテレ ラディアン 第2シーズン
× 10/02(水) 21:54~ TOKYO MX 浦島坂田船の日常
10/02(水) 23:30~ TOKYO MX 慎重勇者 ~この勇者が俺TUEEEくせに慎重すぎる~
10/02(水) 24:30~ TOKYO MX 俺を好きなのはお前だけかよ
10/02(水) 25:05~ TOKYO MX 旗揚!けものみち
10/03(木) 17:55~ テレビ東京系 プリスクタイムエッグカー』&『GO!GO!アトム
× 10/03(木) 19:26~ TOKYO MX シルバニアファミリー ミニストーリー -クローバー
10/03(木) 22:30~ TOKYO MX 超人高校生たちは異世界でも 余裕で生き抜くようです!
× 10/03(木) 23:30~ TOKYO MX アズールレーン
10/03(木) 24:30~ TOKYO MX 放課後さいころ倶楽部
10/04(金) 12:00~ ニコニコ動画 ぬるぺた
10/04(金) 17:55~ テレビ東京系 ゾイドワイルド ZERO
× 10/04(金) 22:30~ TOKYO MX 厨病激発ボーイ
10/04(金) 24:00~ TOKYO MX GRANBLUE FANTASY The Animation Season2
× 10/04(金) 25:00~ TOKYO MX どるふろ -癒し編-
10/04(金) 25:05~ TOKYO MX ハイスコアガール 第13話~第15話
10/05(土) 10:30~ テレビ東京系 アイカツオンパレード!
10/05(土) 17:35~ NHK Eテレ 魔入りました!入間くん
10/05(土) 23:30~ TOKYO MX Fate/Grand Order -絶対魔獣戦線 バビロニア-
10/05(土) 24:30~ TOKYO MX ぼくたちは勉強ができない 第2期
10/05(土) 25:00~ TOKYO MX この音とまれ! 第2クール
× 10/05(土) 25:30~ TOKYO MX 戦×恋(ヴァルラヴ)
10/06(日) 22:00~ TOKYO MX トクナナ -警視庁 特務部 特殊凶悪犯対策室 第七課-
10/06(日) 23:30~ TOKYO MX ACTORS -Songs Connection-
10/06(日) 24:00~ TOKYO MX Fairy gone フェアリーゴーン 第2クール
× 10/06(日) 24:30~ TOKYO MX アフリカのサラリーマン
10/06(日) 25:00~ TOKYO MX XL上司。
10/06(日) 深夜~ テレビ東京 フォーカード 新シリーズ
10/07(月) 21:54~ TOKYO MX 兄に付ける薬はない! 第3期
10/07(月) 22:00~ TOKYO MX バビロン
10/07(月) 22:30~ TOKYO MX ファンタシースターオンライン2 エピソード・オラクル
× 10/07(月) 23:00~ TOKYO MX スタンドマイヒーローズ-PIECE OF TRUTH-
10/07(月) 24:00~ TOKYO MX 私、能力は平均値でって言ったよね!
10/07(月) 25:00~ チバテレビ エイリは王さま!
× 10/08(火) 23:00~ TOKYO MX Z/X Code reunion
10/08(火) 24:30~ TOKYO MX 神田川JET GIRLS
10/08(火) 25:00~ TOKYO MX 耐え子の日常
10/09(水) 17:55~ テレビ東京系 七つの大罪 神々の逆鱗
10/09(水) 22:00~ TOKYO MX 本好きの下剋上 司書になるためには手段を選んでいられません
10/09(水) 23:54~ BS11 ポンコツクエスト ~魔王と派遣の魔物たち~ シーズン6
10/09(水) 25:15~ フジテレビ BEASTARS
10/10(木) 20:00~ YouTube ガンダムビルドダイバーズRe:RISE
10/10(木) 24:00~ TOKYO MX アサシンズプライド
10/10(木) 25:28~ TBS ノー・ガンズ・ライフ
10/10(木) 25:58~ TBS 星合の空-ほしあいのそら-
10/10(木) ~ Amazon PV 無限の住人-IMMORTAL-
× 10/11(金) 24:30~ TOKYO MX 食戟のソーマ 第4期
10/11(金) 25:55~ TBS 歌舞伎町シャーロック
10/11(金) 26:25~ TBS 真・中華一番!
10/12(土) 17:30~ 日本テレビ系 僕のヒーローアカデミア 第4期
10/12(土) 24:00~ TOKYO MX ソードアート・オンライン -アリシゼーション- War of Underworld
10/13(日) 22:54~ BS11 天華百剣 ~めいじ館へようこそ!~
10/13(日) 23:00~ TOKYO MX ライフル・イズ・ビューティフル
10/14(月) ~ AbemaTV SUPER SHIRO
10/17(木) 24:55~ フジテレビ PSYCHO-PASS サイコパス 第3期
10/22(火) 25:29~ 日本テレビ ちはやふる 第3期
10/25(金) 25:05~ TOKYO MX ハイスコアガールⅡ (第2期)
2019-07-14

2019年夏の新番組

異世界ものが多いとは聞いていましたが、これはきっついですね。

全体の変数が少ないのでできるだけ1話切りしないで頑張ってみようかなと思ったのですが、早々にくじけそうです。

06/14(金) Netflix アグレッシブ烈子 シーズン2
06/24(月) 27:00頃 読売テレビ あにめたまご2019
06/28(金) Netflix 7SEEDS
07/01(月) 22:00 TOKYO MX スタミュ-高校星歌劇- 第3期
07/01(月) 23:00 TOKYO MX かつて神だった獣たちへ
07/01(月) 25:00 チバテレビ われしょ!~我ら!小動物愛護委員会~
07/02(火) 07:05 テレビ東京系 おどるモワイくん
07/02(火) 23:00 TOKYO MX 手品先輩
07/02(火) 23:15 TOKYO MX ソウナンですか?
07/03(水) 23:30 TOKYO MX ダンベル何キロ持てる?
07/03(水) 24:00 TOKYO MX 魔王様、リトライ!
07/03(水) 25:05 TOKYO MX 彼方のアストラ
07/04(木) 23:30 TOKYO MX うちの娘の為ならば、俺はもしかしたら魔王も倒せるかもしれない。
× 07/05(金) 22:00 TOKYO MX Dr.STONE
07/05(金) 22:30 TOKYO MX 女子高生の無駄づかい
07/05(金) 25:25 TBS系 炎炎ノ消防隊
07/05(金) 25:55 TBS グランベルム
07/05(金) 26:25 TBS 荒ぶる季節の乙女どもよ。
07/06(土) 09:00 NHK Eテレ おしりたんてい 新シリーズ
× 07/06(土) 24:00 TOKYO MX ロード・エルメロイⅡ世の事件簿 -魔眼蒐集列車 Grace note-
07/06(土) 25:00 TOKYO MX 戦姫絶唱シンフォギアXV 第5期
07/07(日) 06:15 KBC 博多明太!ぴりからこちゃん
07/07(日) 22:00 TOKYO MX Re:ステージ! ドリームデイズ
07/07(日) 22:30 TOKYO MX あんさんぶるスターズ!
07/07(日) 23:30 TOKYO MX からかい上手の高木さん 第2期
07/07(日) 24:00 TOKYO MX ビジネスフィッシュ
07/07(日) 24:10 NHK総合 ヴィンランド・サガ
07/07(日) 24:30 TOKYO MX ナカノヒトゲノム【実況中】
07/07(日) 25:00 TOKYO MX 指先から本気の熱情-幼なじみは消防士-
07/07(日) 深夜 テレビ東京 闇芝居 第7期
07/08(月) 22:30 TOKYO MX 胡蝶綺 ~若き信長~
07/08(月) 24:00 TOKYO MX コップクラフト
× 07/08(月) 24:30 TOKYO MX ありふれた職業で世界最強
07/09(火) 24:30 TOKYO MX 可愛ければ変態でも好きになってくれますか?
× 07/10(水) 25:35 TOKYO MX 異世界チート魔術師
07/11(木) 24:55 フジテレビ ギヴン
07/11(木) 25:28 TBS まちカドまぞく
× 07/12(金) 24:00 TOKYO MX 通常攻撃が全体攻撃で二回攻撃のお母さんは好きですか?
× 07/12(金) 24:30 TOKYO MX ダンジョンに出会いを求めるのは間違っているだろうかⅡ
× 07/12(金) 25:05 TOKYO MX とある科学の一方通行
  07/14(日) 25:35 テレビ東京 BEM(妖怪人間ベム)
2019-07-10

はじめてのフォトグラメトリ

TLにフォトグラメトリのやりかたが流れていたので試してみました。 使ったのは3DF Zephyrというソフトです。

吉野家でもらったマグカップ。酷い出来ですw

近くにあったハンバーガーのキーホルダー。左目の下がおかしくなってしまいましたが前のよりはマシになったかも。素材の質感はよく出てますね。

自転車。なかなか厳しいです。公園に行って動画で撮影してそのフレームを元に作成したのですが。

鰻を食べに行く機会があったので撮影。

なかなかうまくモデル化するのは難しいですね。できるだけ前のフレームと沢山重ねて撮影した方が良いとか、同じ場所で向きを変えるよりも平行移動したほうが良さそうとか、後は変換時のオプションでかなり変わったり。コツは色々あるみたいです。

2019-05-01

Emacs + Gnusでメールを読み書きする設定(Gmail、IMAP、POP複数アカウント)

普段Wanderlustを使っているのですが久しぶりにGnusに再挑戦、メールの読み書きが出来るようにしてみました。

環境

GNU Emacs 26.1.92 (build 1, x86_64-w64-mingw32)
 of 2019-03-08
Gnus v5.13

Gnus関連ファイルをひとつのディレクトリにまとめる

デフォルトだと ~/ の下にいろんなファイルを勝手に作るのでそれを ~/gnus/ に変更しました。 既に使っているWanderlustと併用したいので ~/Mail/ は特に困ります。

Gnus用設定ファイルの位置も ~/gnus/.gnus.el に移したいのですが、そこへのパスだけは .emacs や init.el の方に書かないとダメですね。その他の設定は .gnus.el に書くことにします。

  1. .emacs や init.el に (setq gnus-home-directory "~/gnus") を書く
  2. 次のコードを ~/gnus/.gnus.el に書く
;; Move home directory to ~/gnus
;; Write (setq gnus-home-directory "~/gnus") on init.el
(setq message-directory "~/gnus/Mail"
      mail-source-directory "~/gnus/Mail"
      nnfolder-directory "~/gnus/Mail/archive"
      pop3-uidl-file "~/gnus/.pop3-uidl"
      nntp-authinfo-file "~/gnus/.authinfo"
      auth-sources '("~/gnus/.authinfo" "~/gnus/.authinfo.gpg" "~/gnus/.netrc"))

受信設定

設定したメールアカウントは次の4つです。

  • Gmail
  • IMAPで扱う独自のアカウント
  • POPで扱う独自のアカウント(二つ)
;;; ~/gnus/.gnus.el

(require 'nnir)

;; Make Gnus NOT ignore [Gmail] mailboxes
;; Gmailのメールボックス名を無視しないようにする。
;; デフォルトの正規表現だと[Gmail]という名前にマッチしてしまうので。
(setq gnus-ignored-newsgroups "^to\\.\\|^[0-9. ]+\\( \\|$\\)\\|^[\"]\"[#'()]")

;; Use gnus-secondary-select-methods only
;; gnus-select-method は使わず gnus-secondary-select-methods のみを使う。
;; リストだけ使う方が追加・廃止が楽なので。
(setq gnus-select-method '(nnnil))

;; Gmail (IMAP)
(add-to-list
 'gnus-secondary-select-methods
 '(nnimap "gmail"
          (nnimap-address "imap.gmail.com")
          (nnimap-server-port 993)
          (nnimap-stream ssl)
          ;; Search
          (nnir-search-engine imap)))

;; My Email 1 (IMAP)
(add-to-list
 'gnus-secondary-select-methods
 '(nnimap "myaccount1"
          (nnimap-address "myimapserver1.example.jp")
          (nnimap-server-port 993)
          (nnimap-stream ssl)
          ;; Search
          (nnir-search-engine imap)))

;; WanderlustのMH形式フォルダを読み込む。が、起動時に毎回時間がかかるのでコメントアウト。
;; ;; My Old Email Archive (Wanderlust's MH Folders)
;; (add-to-list
;;  'gnus-secondary-select-methods
;;  '(nnmh ""
;;         (nnmh-directory "~/Mail")
;;         (nnmh-get-new-mail nil)))

;; 手元にダウンロードしてくるタイプのPOP、IMAPアカウント。
;; My Email 2,3 (POP)
(add-to-list
 'gnus-secondary-select-methods
 '(nnml ""))

(setq mail-sources
      '((pop :server "mypopserver2.example.jp"
             :port 995
             :user "mypopuser2"
;;             :password "???" ;;=> .authinfo に machine mypopserver2.example.jp login mypopuser2 port 995 password ??? と書いた方が良い。ミニバッファにパスワードを入力しても、POPの場合はなぜか自動で保存してくれないので手動で書き込んだ方が良い。
             :authentication apop
             :stream ssl
             :leave t ;; or N days
             )
        (pop :server "mypopserver3.example.jp"
             :port 995
             :user "mypopuser3"
;;             :password "???"
             :authentication apop
             :stream ssl
             :leave t
             )))

;; ソースによってグループを分ける。
(setq nnmail-split-methods
      '(("myaccount2" "^X-Gnus-Mail-Source: pop:mypopuser2@mypopserver2\\.example\\.jp$")
        ("myaccount3" "^X-Gnus-Mail-Source: pop:mypopuser3@mypopserver3\\.example\\.jp$")
        ("unknown-source" "")))

Gnusでは情報源は gnus-select-methodgnus-secondary-select-methods に設定します。 なぜか同じような機能のものが二つあるのですが、おそらく最初は gnus-select-method だけがあって、後から複数の情報源を設定出来る gnus-secondary-select-methods を追加したのではないでしょうか? 今回はリストで複数設定出来る gnus-secondary-select-methods のみを使います。 gnus-select-method には nnnil を設定して無効化しました。ネットニュースを読むならニュースサーバをここに設定しても良いと思います。

nnimap で指定したIMAPサーバ上のメッセージは、手元にファイルをダウンロードすることなく読むことが出来ます。

nnmlmail-sources で指定したPOPサーバ上のメッセージは、 ~/gnus/Mail/ (デフォルトだと~/Mail/)にダウンロードしてから読むことになります。

mail-sources に複数のアカウントを指定した場合、全アカウントのメールが全て一箇所にまとめられてしまうようでした。なので nnmail-split-methods で振り分けの設定をしています。幸い X-Gnus-Mail-Source というヘッダーがついていたのでそれで振り分けられました。何かもう少しうまい仕組みがあれば良いのですが……。グループパラメータの mail-source が使えるかなとも思ったのですがそちらは試していません。

POPでメールをサーバに残すには :leave t を指定します。これが無いと受信したメールはサーバから削除してしまうので注意してください。整数で日数を指定することも出来るようです。

POPのパスワードは .authinfo(や.authinfo.gpg)にあらかじめ書いておくことをおすすめします。どこにも書かなければアクセス時にミニバッファで聞かれますが、自動的に .authinfo に保存してくれませんでした。 nnimap の場合は保存してくれたのですが。

IMAP(nnimap)のパスワードも .authinfo に保存します。あらかじめ書かなくてもミニバッファで聞かれたときに入力すれば自動的に保存されました(むしろ下手に書いて形式に間違いがあってハマりました)。

Gmailで二段階認証している場合等はアプリパスワードを発行する必要があると思います。

送信設定

複数のアカウントがあるので送信設定も適切に切り替える必要があります。

何を切り替えるべきか:

  • (Fromの)名前
  • (Fromの)メールアドレス
  • 文末の署名
  • 送信したメールをどこに保存するか(Bcc, Gcc)
  • SMTPサーバとの接続情報

切り替える条件案:

  • Fromヘッダー
  • メール作成時のグループ

探してみるとFromによってSMTPを切り替える設定(Multiple SMTPAccounts - Emacs Wiki)を見つけたのですが、色々試してみて最終的に gnus-posting-styles でメール作成時のグループにより適切なヘッダーを設定する方法で落ち着きました。

;;; ~/gnus/.gnus.el

;; デフォルト送信設定
(setq smtpmail-stream-type 'starttls) ;;基本的に全てstarttlsで送る。
(setq smtpmail-smtp-server "mysmtpserver2.example.jp"
      smtpmail-smtp-service 587
      smtpmail-smtp-user "mysmtpuser2") ;;デフォルトのSMTPサーバ
(setq user-full-name "My FullName"
      user-mail-address "myaccount2@example.jp") ;;デフォルトの名前とメールアドレス

;; メール作成時に作用する設定
(setq gnus-posting-styles
      '(
        ;; IMAP
        ("^nnimap\\+gmail:"
         (name "My FullNameG")
         (address "myaccountg@gmail.com")
         (signature "My FullNameG\nmyaccountg@gmail.com")
         (gcc "nnimap+gmail:Sent")
         ("X-Message-SMTP-Method" "smtp smtp.gmail.com 587 myaccountg@gmail.com"))

        ("^nnimap\\+myaccount1:"
         (name "My FullName1")
         (address "myaccount1@example.jp")
         (gcc "nnimap+myaccount1:INBOX")
         ("X-Message-SMTP-Method" "smtp mysmtpserver1.example.jp 587 mysmtpuser1"))

        ;; POP
        ("^nnml:myaccount2\\(\\..*\\)?$"
         (name "My FullName2")
         (address "myaccount2@example.jp")
         ("Bcc" "myaccount2@example.jp")
         ("X-Message-SMTP-Method" "smtp mysmtpserver2.example.jp 587 mysmtpuser2"))

        ("^nnml:myaccount3\\(\\..*\\)?$"
         (name "My FullName3")
         (address "myaccount3@example.jp")
         ("Bcc" "myaccount3@example.jp")
         (signature "** My FullName3 **")
         ("X-Message-SMTP-Method" "smtp mysmtpserver3.example.jp 587 mysmtpuser3"))
        ))

gnus-posting-styles変数を使用すると様々な条件でメールヘッダーや署名等を切り替えることが出来ます。この変数はメール作成を開始する時点で作用するので、本文を書くときに効果を目で確認出来ます。

上の設定ではメール作成時のグループ名を元に、名前、メールアドレス、署名、送信済みメールの送り先、使用するSMTPサーバを切り替えています。

送信したメールの保存先は、私の場合次のようにしました。

  • POPアカウントならBccで自分自身にコピーを送る
  • IMAPアカウントならGccを送信済みフォルダーに設定する

POPでBccしているのは他のPCからでも見られるようにするためですが、それが不要ならばGccをnnml:myaccount2とかにしてローカルに保存するだけでも良さそうです。

X-Message-SMTP-Method というヘッダーを使用すると送信時に使用するSMTPサーバ(ポート、ユーザ名)を指定出来ます。このヘッダーは送信時に削除されて相手には届きませんでした(試した限り)。 この方法だとSSL/TLS暗号化の方式を個別に指定出来ないような気がしますが、私の場合は全てSTARTTLSで問題ありませんでした。デフォルトの設定では、使えるならSTARTTLS、使えなければ暗号なしになるみたいです。

見た目の設定

;;; ~/gnus/.gnus.el

;; Tree view for groups.
;; デフォルトをトピックモードとする。
;; https://www.gnu.org/software/emacs/manual/html_node/gnus/Group-Topics.html
(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)

;; Referencesヘッダーを元にスレッドを構築する。同じSubjectというだけでスレッドになると困るので。
;; gather threads by References headers (default is by subject)
(setq gnus-summary-thread-gathering-function 'gnus-gather-threads-by-references)

;; Summary Line Format
;; 短い年月日日時(190503T1234)、短いFrom、記事行数不要
(setq gnus-summary-line-format "%U%R%z %&user-date; %I%(%[%-15,15f%]%) %s\n"
      gnus-user-date-format-alist '((t . "%y%m%dT%H%M")))

GnusかWanderlustか

ここまでやってみましたが、結局私は当面Wanderlustを使うと思います。

手元の環境(Windows+自分でビルドしたEmacs)だと数回に一回は送受信時にエラーが発生します。これはGnusでもWanderlustでも起きるのですが未だに原因がつかめていません(SSLでも平文でも起こるのでgnutlsがらみでも無さそう?)。 今回Gnusを試してみたのはこれが解決するかもしれないと思ったのが一番の理由なのですが残念ながら変わりませんでした。

メールソフトとしての使い勝手はWanderlustの方が普通だと思います。カスタマイズを進めていけばGnusでもそれほど悪くないのかもしれませんけれど、デフォルトの状態があまりにも。

Wanderlustはバグが多くそれが一向に解決される気配が無いのも今回Gnusを試した理由の一つなのですが、まぁ、Wanderlustでも一応最低限は使えていますので。

添付ファイルまわりとか日本語まわりとかはまだ試していないので分かりません。Wanderlustだとおかしな挙動をすることが良くあるので、それがGnusで問題なければ良いのですが。

2019-04-15

2019年春の新番組

今期は不作かなぁと思っていたら最後の方で良さそうなのがいくつか。

  開始日 開始時刻 チャネル タイトル
03/31(日) 25:30 BSフジ シーサイド荘のアクアっ娘
04/01(月) –:-- Netflix ULTRAMAN
04/01(月) 17:55 テレビ東京系 爆丸バトルプラネット
04/01(月) 18:00 NHK Eテレ わしも(WASIMO) 第7シリーズ
04/01(月) 18:10 NHK Eテレ 忍たま乱太郎 第27シリーズ
04/01(月) 22:00 TOKYO MX ポプテピピック 新作SP版
04/02(火) 17:55 テレビ東京系 ダイヤのA actII
04/02(火) 18:45 NHK Eテレ 少年アシベ GO!GO!ゴマちゃん 第4シリーズ
04/02(火) 21:54 TOKYO MX アイドルマスター シンデレラガールズ劇場 CLIMAX SEASON
04/02(火) 24:00 TOKYO MX フリージ
04/02(火) 25:35 テレビ東京 ワンパンマン 第2期
04/03(水) 07:30 テレビ東京系 猫のニャッホ
04/03(水) 18:00 NHK Eテレ おじゃる丸 第22シリーズ
04/03(水) 18:45 NHK Eテレ ねこねこ日本史 第4シリーズ
× 04/03(水) 21:54 TOKYO MX ARP AFTER SCHOOL PARADISE
04/03(水) 22:00 TOKYO MX この世の果てで恋を唄う少女YU-NO
04/04(木) 18:25 テレビ東京系 アイカツフレンズ! ~かがやきのジュエル~(第4期)
04/04(木) 19:30 BS4K ムーミン谷のなかまたち
04/04(木) 22:00 TOKYO MX 叛逆性ミリオンアーサー 第2シーズン
04/04(木) 25:58 TBS BAKUMATSUクライシス
04/05(金) 16:00 コロコロチャンネル ベイブレードバースト ガチ(GT)
04/05(金) 18:20 NHK Eテレ あはれ!名作くん 第4期
04/05(金) 18:25 テレビ東京系 妖怪ウォッチ!
04/05(金) 22:30 AT-X ほら、耳がみえてるよ! 第2期
04/05(金) 25:23 テレビ東京 フルーツバスケット
04/05(金) 25:55 TBS 川柳少女
× 04/05(金) 26:10 TBS みだらな青ちゃんは勉強ができない
× 04/05(金) 26:25 TBS ひとりぼっちの○○生活
04/06(土) 10:00 テレビ東京系 けだまのゴンじろー
× 04/06(土) 10:30 テレビ東京系 パウ・パトロール -PAW PATROL-
× 04/06(土) 17:30 日本テレビ系 MIX
× 04/06(土) 23:30 TOKYO MX 鬼滅の刃
× 04/06(土) 24:30 TOKYO MX ぼくたちは勉強ができない
× 04/06(土) 25:00 TOKYO MX この音とまれ! 第1期
04/07(日) 07:00 テレビ東京系 スーパーブック シーズン2
04/07(日) 07:30 テレビ東京系 ちいさなプリンセス ソフィア
04/07(日) 08:30 テレビ東京系 デュエル・マスターズ!!
× 04/07(日) 22:00 TOKYO MX 群青のマグメル
× 04/07(日) 23:30 TOKYO MX 消滅都市
04/07(日) 24:00 TOKYO MX Fairy gone フェアリーゴーン
04/07(日) 24:30 TOKYO MX 真夜中のオカルト公務員
04/07(日) 25:00 TOKYO MX 洗い屋さん!~俺とアイツが女湯で!?~
04/07(日) 25:05 TOKYO MX なんでここに先生が!?
× 04/07(日) 25:35 テレビ東京 八月のシンデレラナイン
04/08(月) 07:05 テレビ東京系 ジモトがジャパン
04/08(月) 21:54 TOKYO MX 八十亀ちゃんかんさつにっき
04/08(月) 22:30 TOKYO MX なむあみだ仏っ!蓮台 UTENA
04/08(月) 24:00 TOKYO MX 超可動ガール1/6
04/08(月) 24:15 TOKYO MX 女子かう生
04/08(月) 24:20 TOKYO MX ノブナガ先生の幼な妻
04/08(月) 24:30 TOKYO MX RobiHachi
× 04/08(月) 25:35 テレビ東京 KING OF PRISM -Shiny Seven Stars-
04/09(火) 07:05 テレビ東京系 まほうのルミティア
× 04/09(火) 24:30 TOKYO MX 異世界かるてっと
04/09(火) 24:45 TOKYO MX ストライクウィッチーズ 501部隊発進しますっ!
04/10(水) 23:30 TOKYO MX 世話やきキツネの仙狐さん
04/10(水) 24:55 フジテレビ キャロル&チューズデイ
04/11(木) 07:05 テレビ東京系 Bラッパーズ ストリート
04/11(木) 23:30 TOKYO MX 賢者の孫
04/11(木) 24:55 フジテレビ さらざんまい
04/12(金) 22:30 TOKYO MX 文豪ストレイドッグス 第3シーズン
04/13(土) 26:10 ABCテレビ 凹凸世界
2019-01-28

2019冬の新番組

一通り見ました。

印象 開始 チャネル タイトル
01/03(木) 23:00~ TOKYO MX BanG Dream! 2nd Season
01/04(金) 22:00~ TOKYO MX ブギーポップは笑わない
× 01/05(土) 25:30~ TOKYO MX W’z
01/06(日) 22:00~ TOKYO MX 不機嫌なモノノケ庵 續
01/06(日) 25:00~ TOKYO MX パパだって、したい
× 01/07(月) 21:54~ TOKYO MX みにとじ
01/07(月) 22:00~ TOKYO MX どろろ
× 01/07(月) 22:30~ TOKYO MX エガオノダイカ
01/07(月) 23:00~ TOKYO MX モブサイコ100 II
× 01/07(月) 24:30~ TOKYO MX ぱすてるメモリーズ
01/07(月) 25:05~ TOKYO MX 上野さんは不器用
× 01/08(火) 23:00~ TOKYO MX CIRCLET PRINCESS
○+ 01/08(火) 24:30~ TOKYO MX 私に天使が舞い降りた!
01/08(火) 25:00~ TOKYO MX 臨死!! 江古田ちゃん
× 01/08(火) 25:35~ TOKYO MX 雨色ココアside G
01/08(火) 25:59~ 日本テレビ 3D彼女 リアルガール 第2シーズン
01/08(火) ~ YouTube ぷそ煮コミ
01/09(水) 07:30~ テレビ東京系 まんなかのりっくん@きんてれ
× 01/09(水) 22:30~ TOKYO MX ケムリクサ TVシリーズ
× 01/09(水) 23:30~ TOKYO MX 明治東亰恋伽
01/09(水) 24:00~ TOKYO MX バーチャルさんはみている
01/09(水) 24:55~ フジテレビ revisions
× 01/09(水) 25:05~ TOKYO MX 盾の勇者の成り上がり
01/10(水) 27:05 テレビ東京 フライング ベイビーズ
× 01/10(木) 22:00~ TOKYO MX Dimensionハイスクール
01/10(木) 24:00~ TOKYO MX 同居人はひざ、時々、頭のうえ。
01/10(木) 24:30~ TOKYO MX ガーリー・エアフォース
01/10(木) 24:55~ フジテレビ 約束のネバーランド
01/10(木) 25:28~ TBS 五等分の花嫁
01/10(木) 25:58~ TBS グリムノーツ
01/10(木) 27:05~ テレビ東京 フライングベイビーズ
× 01/11(金) 24:00~ TOKYO MX B-PROJECT~絶頂*エモーション~
01/11(金) 25:40~ TOKYO MX デート・ア・ライブIII
01/11(金) 25:55~ TBS ドメスティックな彼女
× 01/11(金) 26:25~ TBS 魔法少女特殊戦あすか
01/12(土) 22:00~ TOKYO MX バミューダトライアングル ~カラフル・パストラーレ~
01/12(土) 23:30~ TOKYO MX かぐや様は告らせたい~天才たちの恋愛頭脳戦~
01/12(土) 25:00~ TOKYO MX えんどろ~!
01/13(日) 22:30~ TOKYO MX 荒野のコトブキ飛行隊
01/13(日) 23:30~ TOKYO MX 賭ケグルイ××
01/14(月) 26:05~ テレビ東京 けものフレンズ2
  01/20(日) 24:30~ TOKYO MX 神撃のバハムート マナリアフレンズ
01/25(金) 21:00~ 日本テレビ系 ルパン三世 グッバイ・パートナー
  01/27(日) 24:10~ NHK総合 ピアノの森 第2シリーズ

第一話時点では「私に天使が舞い降りた!」がなかなか良い出来かなと思ったのですが二話では今ひとつ。最初だけでは分からないというのが常であります。とはいえ最近は我慢して見る気力も無く早々に切るものが多くなってしまうのですが……。