mew-search-with-builtin 1.4

# update 1.58 - 2022-02-19
- Emacs "28.0.91", "29.0.50" だと、エラーで Mew が起動しないので回避策を入れる.
- 管理法を変えたためソース区別用の Revision が大きく変わっています.

# Mew の全文検索を Mew だけで行なう拡張です
今回はアップデートなので基本的なことは[初期投稿の記事(2018/10/31)](https://qiita.com/s-fubuki/items/ea748215336e7ffd48bf)を御覧ください。

# 進捗状況をモードラインに表示
慣習的にグローバルな案件を表示する領域である末尾側(右端)の日付表示等を表示する箇所の手前に挿します。
なるたけ短かくできるよう `%` を区切代りにしてパーセンテージを先にしてあります。
モードラインの更新タイミングによっては表示は更に大味になり、表示幅もあまり取れないので今どこを検索しているのかも判らなくなりましたが、常に表示されている分ストレスは前のものより軽減されたと思います。

![mew-search-mode-line3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239081/aff13d07-878a-a654-956e-4460fb0ea682.png)

```emacs-lisp:目につくようにしてみる
(set-face-attribute 'mbs-mode-line nil :foreground "saddlebrown" :background "skyblue")
```
![mew-search-mode-line4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239081/0cdb3d1b-872f-460e-ad5a-977272041ae1.png)

モードラインはスクロール等すると更新されますが、 `C-l` で画面更新できるような場面ではそうするのがいいでしょう。

# DL & Install
ようやく github の使い方が多少は判ってきて、デコーダとまとめて置けるよう置場を[github.com/s-fubuki/mew-search-with-builtin.el](https://github.com/s-fubuki/mew-search-with-builtin.el)に変更しました。

`load-path` の通ったディレクトリに DL した2つのファイルを置き `require` してください。

```emacs-lisp:.mew.el
(require 'mew-search-with-builtin)
```

# 最近判った新たな問題点
今回のモードライン対応に関係なく、(マルチスレッドサーチ)実行中にツールチップ、いわゆるバルーンヘルプを表示すると 
Emacs がフリーズすることが判明したので、フックで `tooltip-mode` をオン/オフしてください。
何か回避法が在りそれが判れば対応したいとは思っています。

```emacs-lisp:.mew.el
;; マルチスレッド実行中相性の悪い tooltip / migemo サーチを切る.
(add-hook 'mbs-front-hook
          #'(lambda ()
              (tooltip-mode -1)
              (and migemo-isearch-enable-p (migemo-isearch-toggle-migemo))))
(add-hook 'mbs-after-hook
          #'(lambda ()
              (tooltip-mode 1)
              (or migemo-isearch-enable-p (migemo-isearch-toggle-migemo))))
```

# その他の修正 & 変更点
## 除外するフォルダの指定でリストが使えなくなった
リストで指定していた場合正規表現でひとつにまとめてください。

変更した理由は正規表現が使えるなら list 指定できる意味は薄いし、非list の方が標準関数との親和性も高いと気づいたためです。

```emacs-lisp:いくつかの設定法
(setq mbs-ignore-directory "\\(trash\\|draft\\|backup\\)")
(setq mbs-ignore-directory (regexp-opt '("trash" "draft" "backup")))
```

## quoted-printable で出る邪魔なワーニング表示が出なくなった
エコーエリアに表示されないだけで `*Messages*` buffer には残ります。

## エラー時の後始末にしくじっていたバグを修正
間違って空文字(空文字入り正規表現)などを入力した場合デフォルトではエラーで中止するが、その後始末がちゃんとできていなかった。

## kill-emacs-hook でも後始末
マルチスレッドの後始末はエラー時 と mew 終了時だけに実行していたが Emacs 終了時にも実行するようにした。

# 変なタイミングでアボートしてしまいゴミが残ったとき
サーチ結果を集めたヴァーチャルバッファ生成のタイミングでキーボードをいじっていると、
バッファ生成にしくじってゴミスレッドができることがありますが(ごめんなさい今の処直せません)、
Mew のサマリのバッファに移動して `Q` で Mew を完全終了させると、
スレッドのクリナップ関数も実行するので、これが手っ取り早い正常化の方法です。

# 過去の Update
## 1.5 - Sat Feb 27 10:08:19 2021
### BUG fix 主にマルチスレッド・モードでエンバグしていた箇所の修正です.
- prefix 起動によるフォルダ指定のサーチがちゃんと動いなかったのを修正.
- シングルスレッド・モードの動作がおかしくなっていた箇所を修正.

### 新しい変数
変数 `mbs-laptime` を `non-nil` にセットしておくとサーチにかかった時間をエコーエリアに出力します.
と言ってもすぐにかき消されるので `C-h e` 等で `*Messages* buffer` を覗かないと見れませんが.

### multipart-decode
`multipart-decode.el` の方も正規表現を rx マクロにするなど、 主にメンテ性向上のために色々いじったのですが機能や速度的な違いは無いので、 常に新しくしていたい等なければこちらは前の版のままでいいかもしれません.

### MIME ライブラリについて
Emacs にも標準で MIME ライブラリがあったと知り(infoにあった)、 ヘッダの展開は `mail-decode-encoded-word-region` で置き換えできると判り、 それも試したのですが速度な違いが出なかったので、とりあえず差替するなら次の機会にします.

mew でも同様に `mew-decode-rfc822-header` などで出来ると判ったのですが、 単に呼び出すだけだと途中でフリーズしてしまうことがあるので保留です.
こちらは face まで追加するので、Mew 用に特化したものになっているようです.

# 関連記事
- [mew-search-with-builtin for BG(2020/07/04)](https://qiita.com/s-fubuki/items/10102033e4d67a2d7772) - BG 対応したときのもの。
- [Mew Builtin Search ? Emacs だけで Mew のサーチを済ます(2018/10/31)](https://qiita.com/s-fubuki/items/ea748215336e7ffd48bf) - 最初の公開版。詳しい使用法が書かれています。