Emacs: Quick Password Generator

# ランダム な Password の生成

起動すると Password の書かれたウインドウが開くので、 `"UR: "` 行にアドレス、 `"ID: "` 行に ID を書いて `C-c C-c` でファイルセーブされます。
`C-c C-q` または `C-c C-k` や `ESC ESC` でキャンセル破棄されます。

特に決まったフォーマットではないので、秘密の合言葉等他に追記したいことがあれば別の行に書き足す等すればよいです。

# ダウンロードとインストール
[ここからダウンロード](https://gist.github.com/s-fubuki/c46e7d96ff0c70c6213715777f48f0a6)して `load-path` の通ったディレクトリに置き
`init.el` に以下を追加します。
コマンドは `qpg-mode` ではなく `qpg` なので注意してください。キーに割り振るか `M-x qpg` で起動します。

```emacs-lisp:セットアップ
(require 'qpg-mode)
(global-set-key "\C-CP" 'qpg)
```

# 基本的な手順

`M-x qpg` 等で起動すると以下のようなバッファが開きます。

![qpg1.png](https://qiita-image-store.s3.amazonaws.com/0/239081/6733a53e-1ba0-04f1-e16c-2e0d5d19166f.png)

"UR: " 行に URL, "ID: "行に ID を書きます。URL ではなく UR なのは 見易く揃えるためだけです。

![qpg2.png](https://qiita-image-store.s3.amazonaws.com/0/239081/30e7298b-e68f-512f-678c-6a5f9775ae33.png)

あとは `C-c C-c` とすると `qpg-qiita.com-20180512101441.gpg` 等という名前のファイルでセーブされます。

# ひとつのファイルに追記していく

デフォルトでは `C-c C-c` したときに `"UR: "` 行に書かれたアドレスと、そのときの日付を使って生成した名前でファイルセーブされますが(これをシングルモードとします)、
変数 `qpg-default-master-file-name` にファイル名を設定しておくと、そのファイルに追記されていきます(マスターファイルモードとします)。

マスターファイルモードではデフォルトでは新規分がトップに追記されていきますが、変数 `qpg-prepend` を `NIL` にすると、おしりに追加するようになります。

> **注意:** マスターモードで GnuPG と併用する場合固まることがあるので、バックアップオプション(qpg-backup)をつけておいたほうがいいので、 
GnuPG についての項を参照しておいてください。

尚、マスターファイルモードになっていても Prefix 起動するとシングルモードで起動します。

```emacs-lisp:マスターモードでおしりに追加していく
(setq qpg-default-master-file-name "~/qpg-master-file.gpg")
(setq qpg-prepend nil)
```

# パスの長さの変更
起動中に `C-c C-l` で長さを尋いてくるので入力します。その長さでパスワードが再生成されこのセッションのみ有効です。
恒久的に変更するには `qpg-default-length` に設定します。デフォルトは 16です。

```emacs-lisp:デフォルトのパスの長さを24にする
(setq qpg-default-length 24)
```


# パスの再生成
起動中に `C-l` または `C-c C-g` するとパスワードが再生成されます。通常の画面の再描画の `C-l` は `C-M-l` に逃がしてあります。

# パス文字の構成
変数 `qpg-pass-string-table` に文字列リストで設定します。
システムによっては問題の出ることのある記号はデフォルトでは含めていません。
リストでなく文字列でも OK ですが、リストで分けた方がよりランダムになるようです。

また、起動中に `C-c C-t` すると一時的に文字の追加ができます。
このときも入力後に再生成されます。

```emacs-lisp:デフォルトにいくつか記号を追加する
(add-to-list 'qpg-pass-string-table "_@-+")
```

# キー操作一覧

| 動作         | キー    | コマンド            |
|:--------------:|:---------:|:---------------------:|
| 保存して終了 | C-c C-c | qpg-commit-and-quit |
| キャンセル   | C-c C-q | qpg-cancel          |
| キャンセル   | C-c C-k | qpg-cancel          |
| キャンセル   | ESC ESC | qpg-cancel          |
| ファイル名   | C-c C-n | qpg-new-name        |
| パス再生成   | C-c C-g | qpg-re-generate     |
| パス再生成   | C-l     | qpg-re-generate     |
| パスの長さ   | C-c C-l | qpg-length          |
| 文字列追加   | C-c C-t | qpg-add-table       |
| 画面リロード | C-M-l   | recenter-top-bottom |

キーの追加変更は `qpg-mode-hook` を利用してください

```emacs-lisp:キー設定例
(add-hook 'qpg-mode-hook '(lambda () (local-set-key "\C-r" 'qpg-re-generate)))
```


# GnuPG について

デフォルト保存名の拡張子が `.gpg` なので GnuPG がインストールされていれば、暗号化されて保存されるので、保存追記時に公開鍵あるいはパスを尋いてきます。そして、以前のファイルがあればバックアップを取ります。

メモリ不足なのか自分の環境のせいなのか、ときどき gpg でパケ詰まりのようなフリーズが起きるので、安全の為独自にバックアップルーチンも設けているので、Emacs のデフォルトのバックアップを切っている場合でも、こちらだけオンにできるのでできるだけ設定しておくといいでしょう。

`qpg-backup` を `NON-NIL` にしておくとバックアップを作成します。
デフォルトではシステム変数 `make-backup-files` の値を使います。

```emacs-lisp:バックアップファイルを作る
(setq qpg-backup t)
```


# 動作確認している Emacs のバージョン

```emacs-lisp:動作確認しているEmacsのバージョン
;; GNU Emacs 25.3.1 (i686-w64-mingw32) of 2017-09-18
```

# Changes
## Sat Jul 17 10:05:37 2021
- fix qpg-init-table.
シーケンスコピーのし忘れ.
- 変数 `qpg-default-directory` .
出力先ディレクトリの指定.

## Sat Dec 19 09:47:38 2020
- fix qpg-init-table. 

## Sat Dec  5 11:18:21 2020
- 開き方を変更.
- 操作法を忘れてしまうので menu を追加.
- テーブル削除やイニシャライズなどを追加.