フォントサイズを小さくした場合のミニバッファサイズの計算を修正. #218

ミニバッファの高さを計算処理は以下のようになっていた。

  1. 変更前のミニバッファの高さを計算
  2. 変更後のフォントサイズの比率を計算
     (例: 36pt -> 18pt なら 18/36 = 0.5)
  3. 変更後のミニバッファの高さを計算
     (変更前の高さ x 比率)
  4. 「変更後の高さ」が「変更前の 1 行分の高さ」未満なら
     「変更前の 1 行分の高さ」を「変更後の高さ」とする
  5. 「変更後の高さ」が「変更後の 1 行分の高さ + 4」未満なら
     「変更後の 1 行分の高さ + 4」を「変更後の高さ」とする

4 の処理のためミニバッファの高さがおかしくなっていた。

また、フォントサイズの比率によっては変更後の高さがミニバッファの
1 行分の高さの倍数にならずに微妙なズレが生じている。

変更後の処理は以下のとおりである。

  1. 変更前のミニバッファの行数を計算
     (変更前の高さ / 変更前の 1 行分の高さ)
  2. 変更後のミニバッファの高さを計算
     (変更前の行数 x 変更後の 1 行分の高さ + 4)
  3. 「変更後の高さ」が「変更後の 1 行分の高さ + 4」未満なら
     「変更後の 1 行分の高さ + 4」を「変更後の高さ」とする

Note: ミニバッファの高さは 1 行分の高さに +4 する必要がある。
+4 しないと以下の操作でエラーになる。

  1. M-x     ; ミニバッファに移動
  2. C-x ^   ; enlarge-window
  3. C-x C-z ; shrink-window
フォントサイズを大きくした場合のミニバッファサイズの計算を修正. #220

例えばフォントサイズが 12pt のときにミニバッファを画面半分 (1/2) に広げていた場合、
フォントサイズを 36 pt (3 倍) にするとミニバッファの高さが画面の 1.5 倍 (1/2 * 3)
になり、ミニバッファしか表示されなくなる。

この修正ではミニバッファの高さの上限値を計算し、上限値を超える場合はミニバッファの
高さを変えないようにする。
上限値はウィンドウの高さから他のバッファを 1 行表示するのに必要な高さを引いたサイズとする。

Note: 上限値を超える場合は上限値をミニバッファのサイズとすべきかもしれないが、
以下の理由によりやめた。

  * ミニバッファが画面いっぱいに広がっても嬉しくない
  * ウィンドウを分割していた場合など、上限値の計算や
    ミニバッファ以外のウィンドウの位置計算にもう少し考慮が必要
  * そもそもミニバッファをそんな大きくしない
Merge branch 'fix/minibuffer-size-on-font-size-changed' into develop. #218, #220
ASCII以外のサイズはお任せ時は :ascii 以外の :size 指定は無視. #110

ASCII以外のサイズはお任せの場合に (while (increase-text-font-size))
または (while (decrease-text-font-size)) が無限ループしていたのを修正。
ASCII 以外のサイズはお任せ時に日本語が縦長で表示される問題を修正. #110, #221

set-text-fontset のみを修正。
共通設定で変更した場合はまだ問題がある。

FontSet::create の以下の if 文の条件を削除すれば直るが、
このコードの意図を正しく理解できていないのでまだ修正はしない。

  fs_size = fs_font[FONT_ASCII].size ();

  for (int i = 0; i < FONT_MAX; i++)
    if (fs_font[i].size ().cx > fs_size.cx)
      {
        LOGFONT lf (param.fs_logfont[i]);
        lf.lfWidth = fs_size.cx;
        fs_font[i].create (lf);
        fs_font[i].get_metrics (hdc, ex[i][0], ex[i][1]);
      }
get-text-font, get-text-fontset の戻り値から :lang を削除. #110

  (get-text-font :ascii)
  => (:face "Consolas" :size 13 :size-pixel-p t)
  (get-text-fontset)
  => ((:ascii :face "Consolas" :size 13 :size-pixel-p t)
      ...)
不正な文字セットを指定した場合のエラー処理を改善. #110

* set-text-fontset のエラーを simple-error に変更
* get-text-font で不正な文字セットを指定した場合にエラーを通知
  ただし C++ レベルと lisp レベルの実装の違いにより以下の違いがある。

  (ignore-errors (get-text-font :hoge))
  => nil
  => #S(simple-error format-string "不正な文字セットです: ~S" format-arguments (:hoge))

  (ignore-errors (set-text-fontset '((:hoge))))
  => nil
  => #S(simple-error format-string 不正な文字セットです format-arguments :hoge)
set-text-fontset, get-text-fontset, get-text-font のリファレンスを更新. #110
Merge branch 'feature/set-text-fontset' into develop. #110, #221
c#-mode, c++-mode で属性のインデントがおかしかったのを修正. #226
java-mode でアノテーション後をインデントしないように修正. #225
Merge branch 'fix/csharp-attribute-indentation' into develop. #226
Merge branch 'fix/java-annotation-indentation' into develop. #225
拡張子 .lisp をサポート. #177

バイトコンパイル後のファイルの拡張子は変更なし。
require などでのロード順は *.lc, *.l, *.lisp。
Merge branch 'feature/lisp-file-extension' into develop. #177
文字列のバイトサイズを求める si:octet-length を追加. #48
si:octet-length のテストを追加. #48
si:octet-length のキーワードとリファレンスを追加. #48
Merge branch 'feature/octet-length' into develop. #48
hash-table-rehash-threshold を追加. #55

MIN_REHASH_THRESHOLD の 0.0625 は SBCL とあわせた。