昔の最近の出来事(2019.12)

2019/12/31

昼頃起床。寝すぎ。

掃除したり洗濯したり。いつもと変わらない感じで。

そんな訳で今年を少し振り返り。


他、SAI2に対称定規が追加されました。今後もどんなツールの追加があるか楽しみです。 今年最後のアップデートは間に合わなかったようですが(^^;

今年は 割と地味にEmacs関連でごちゃごちゃと弄ってたりした気もします。 1年内に数回のアップデートがリリースされる事も無かったように思うのですが、 Gitでは毎日何かしら変更が加わっている感じみたいなので、まだしばらく アップデートはあるのかなと思います。

そんな感じで今年の更新はここまで。それではみなさん良いお年を。

2019/12/30

ゴミ捨てに一瞬起床。二度寝して起きたら昼過ぎ。寝すぎ。

寒くてぐうたら過ごして終了。

2019/12/29

昼前起床。

風邪としてはもう治っていそうなのですが、ちょいちょい咳が出てなんで? って感じ。

2019/12/28

起きたら昼過ぎ。寝すぎ。

まだ風邪は完治せず。

2019/12/27

仕事納め。日のあるうちに帰着。

「チコちゃんに叱られる」でやってた氷の上で滑る理由。 その理由が判明したのが2018年の出来事だというのにマジで!? と思ったり(参考記事)。 分子レベルでこんな事が起こっていたのかと思うと同時に、 身近な事だけど未解明な現象ってあるものなのだなぁと思ったりも。 因みに、氷の表面が溶けて水となって滑るのはいわゆる ハイドロプレーニング現象の事になるそうな。

たまたま見つけたマンボウとクマムシの 。 マンボウの最弱伝説はどれも内容がネタ過ぎる(^^;

2019/12/26

遅めに帰着。

まだ微妙に不調。

2019/12/25

本日も臨時休業。

何故か喉が最後にダメになったり。咳が止まらなくなる感じではない のですが、寝てると数分に1回 出るのでさっぱり眠れず。

夜になってやっとマシになってきたような。

2019/12/24

本日臨時休業。

全く回復の兆しが見られず。起きているのも辛いのですが、横になると 数分置きに体が痛くなって眠る事もできず。咳が出る訳では無いのが 不幸中の幸いかも。

2019/12/23

早めに帰着。

体調が急速に悪化して起きていられず。

2019/12/22

昼過ぎ起床。寝すぎ。

掃除したり洗濯したり。

Magitの覚え書き」 という文書を作成してみました。自分用のメモですがご参考まで。

Python 2.x系って今年一杯でサポート終了なのか。 PythonのWikipediaによると 2.0のリリースが2000年10月なので約20年。因みに、3.0は2008年12月なので約10年。 漠然とですが、10年経ってもまだ2.xの利用率が結構高いように思えたりも。 Linuxのディストリビューションによってはパッケージ配布を辞める予定の ものもあるようですが、影響の大きさまでは計れない気も。 まぁでもフリーソフトなので、公式なサポートが切れていたとしても 大きな影響があるのならば自己責任で使われるものなんじゃないか とは思ったりも。

2019/12/21

昼頃起床。

org-modeでHTMLエクスポートするにあたり、レイアウト調節の為に htmlタグを埋め込みたい場合があります。 Webで検索した例を試してみるもうまくエクスポートされなかったり。 「@タグ」とすれば@の直後のhtmlタグをそのままエクスポートされる ハズのようですが、実際には「@タグ」の見た目通りに表示されるように エクスポートされました。 org-modeのマニュアルを見てみると、「@@html: ... @@」で...の部分に htmlのテキストを書けばそのままエクスポートされるという文法に変わっている ようです。

Graphvizのdotで状態遷移図を描かせていたのですが、ノードを繋ぐ線(Edge)に付けたラベル が重なってイマイチな感じになったり。Webで探しても割と情報が古くて解決に 至らなかったのですが、新しいdotではキーワードが追加されてていくらか コントロール可能だというのが判ったり。それでもノードの配置をコントロール しようとすると、小細工を施す必要があったりするようで試行錯誤が必要なのが イマイチです。

2019/12/20

遅めに帰着。

手持ちのソースコードはgit(not GitHub)で管理してたりするのですが、 一人で触っているのでコンフリクトするような事はほぼありません。 なんとなくEmacs のmagitを使えばコンフリクトするような場合でも うまくマージしてくれるのかな?と漠然と思っていたのですが、 実際にコンフリクトさせてみると案外どう対処すればよく判らなかった ので少し練習してみたり。解決手段がいくつかあって掴んだような掴めて ないような感じに。

そういや、Emacsで閲覧できるInfo(M-x info)でmagitの詳しい説明を読むこと ができますが、文書にはパッケージシステムを使ってMELPAからインストール する手段についても記されています。詳しく書かれているなぁと思ったり する訳ですが、でもこれインストールした後じゃないと読めないんだよなぁ? とは思ったりも。 「DVDドライブのドライバがDVD-ROMに入っている」とか、 「有線接続の無いPCの WiFi子機のドライバがWebサイトに置かれている」とか、 「7zアーカイブ展開ツールが7zで圧縮されている」とか と同じで、 ブートストラップ問題(参考Wikipedia)の 一種のように思います。

2019/12/19

飲み会。遅めに帰着。

眠くて死亡

2019/12/18

遅めに帰着。

Emacs 26.3で imagemagick-types-inhibit が効いていない?件。原因判明。 結果から言うとimage-mode.elがバグっていました。 image-modeでファイルを開く時にtypeというプロパティを画像オブジェクトに 追加しているのですが、imagemagick-typesという関数が存在していれば typeを 'imagemagick だと決め込んだコードになっていました。Emacs27では imagemagick-typesという関数が存在し、且つ imagemagick-types-inhibit などを検査してimagemagickを使う時だけ typeを 'imagemagick にするという コードになってました。そんな訳で、Emacs27のコードを移植。

$ diff -u lisp/image-mode.el.orig lisp/image-mode.el
--- lisp/image-mode.el.orig     2019-02-20 22:44:42.000000000 +0900
+++ lisp/image-mode.el  2019-12-18 23:51:23.097180400 +0900
@@ -758,7 +758,7 @@
         (edges (and (null image-transform-resize)
                     (window-inside-pixel-edges
                      (get-buffer-window (current-buffer)))))
-        (type (if (fboundp 'imagemagick-types)
+        (type (if (image--imagemagick-wanted-p filename)
                   'imagemagick
                 (image-type file-or-data nil data-p)))
          ;; :scale 1: If we do not set this, create-image will apply
@@ -805,6 +805,13 @@
     (if (called-interactively-p 'any)
        (message "Repeat this command to go back to displaying the file as text"))))

+(defun image--imagemagick-wanted-p (filename)
+  (and (fboundp 'imagemagick-types)
+       (not (eq imagemagick-types-inhibit t))
+       (not (and filename (file-name-extension filename)
+                (memq (intern (upcase (file-name-extension filename)) obarray)
+                      imagemagick-types-inhibit)))))
+
 (defun image-toggle-hex-display ()
   "Toggle between image and hex display."
   (interactive)

これで、Emacs27と同じくEmacs 26.3でもimagemagickでロードしたくないものは imagemagick-types-inhibitに記して、遅くてもロードできるものはimagemagickで という感じになってそう。ただ、26.3ではimagemagickでのロードが怪しい所 がありそうなので、条件にハマるとSegfaultするかも知れません。 という訳で --with-imagemagick でビルドした Emacs 26.3を少し使ってみる 事にしてみよう。

たまたま気づいたのですが、imagemagickを有効にしたEmacs26.3で画像を含む htmlファイルをewwでレンダリングしてみた所、Emacs27と同じようにフレーム の幅に収まるように、良い感じに縮小された画像が表示されました。 そういう仕掛けだったのか.....

2019/12/17

遅めに帰着。

Emacs 26.3で imagemagick-types-inhibit が効いていない?件を少し調べてみたり。 でも原因判らず。画像オブジェクトの typeプロパティが imagemagick となって いるようなのですが、typeをどこで設定しているのかが判らず。

2019/12/16

本日休業。AM中に起床。

「金剛寺さんは面倒臭い(5)」。まだ最終巻ではないらしい(笑 前巻での未来の樺山君の角が 両方折れている理由は まだ回収されず。

Emacsの google-translateが 使えなくなっている件こちらのissue にて google-translate-core.el内の関数へのパッチが提案されてます。 手動であてて試したのですが使えるようです。ありがたい事です。

そういや最近、所望の情報がありそうなWeb検索結果のページをクリックすると 何やら釣りっぽいWebページが表示される場合があります。あれ、 邪魔なので検索エンジン側でフィルターできないものなのだろうか? とは思ったりも。

今更なのですが、EmacsのELISPアプリのパッケージ管理システムは インストールしたパッケージのディレクトリパスを load-path に どういう仕組みで追加しているのかよく判らなかったり。 自動的に足されるのでうまく動く場合は便利なのですが、 新しいのに不具合があって古いのに戻したい場合とか、古いのと 新しいのとでは互換が無いので古いのはパス自体を削除したい場合 などになんだか困ってしまいます。どうやらpackage-initializeという 関数でパッケージのインストールパス内を走査して追加している?っぽい?? load-pathに節操なく足されるので ちょっと古いのを確認したいとかいう 場合に load-path を(delete )関数とかで操作するよりは、不要なパッケージの ディレクトリを丸ごと別のディレクトリパスに移動するとかした方が良いみたい。

Webを検索していたら、Emacsでの画像表示にImageMagickを使って描画するか 否かをフォーマット毎に切り替えられるというのを知ったり (参考)。 変数imagemagick-enabled-typesにサポートされる画像フォーマットが記されているようです。 ただ、--without-imagemagick でビルドしても 変数imagemagick-enabled-types には何やら値が入っていて、ImageMagickの使用可否を 判定するのには使えない模様。さておき、変数imagemagick-types-inhibit に 除外する画像フォーマットを追加すれば良いみたい。前者はサポート一覧、後者は無効(!有効)を 示すフラグという感じに解釈すれば良さそうです。で、Emacs 27の方で試してみた所、 先日の全ての画像ファイルロードがもっさりする状況が解消されながらも、 表示可能なものは遅いけど表示されるという感じになったり。良さげ。 最終的に以下のようなコードを.emacsの最後の方に追加してみました。

;;-----------------------------------------------------------------
;; ImageMagick での表示除外リスト
;;-----------------------------------------------------------------
(dolist (imgtype (list 'GIF 'GIF87 'JPEG 'JPG 'PNG 'PNG24 'PNG32 'PNG8 'PNM 'PBM 'PGM 'PPM 'SVG 'SVGZ 'TIFF 'TIFF64 'XBM 'XPM))
  (add-to-list 'imagemagick-types-inhibit imgtype))

で、26.3でも--with-imagemagick でビルドし直して試してみたのですが、 mode-lineに表示されるメジャーモード表示は常にImageMagickになってて 切り替えが効いていないようだったり。image+が影響している?と思って Emacs27と同じように使わないようにしてみたのですが状況変わらず。 imagemagick-types-inhibitをtにしたり imagemagick-enabled-typesをnilに したりも試したのですが全く効いてない感じに。なんかうまくいかないです。

2019/12/15

AM中に起床。

掃除したり洗濯したり。

ちょろりお出かけ。最近、少し長い時間マウスを操作すると手首が痛くなる ので、小さいリストレストを近所の家電量販店で探してみたり。サイズ的に 丁度良さそうだったのでELECOMのを値段を見ずにレジで精算したところ 2000円くらいするというのにビビったり。ちぇっと思いながらも、帰って 使ってみると結構良い感じだったのでまぁいいや。 因みに、ヨドバシならば1200円くらいで売ってる商品だったのですが、 電車代を考えると結局2000円くらいになるので、概ね結果オーライという事で。

Emacs 27で画像表示に失敗する場合があるのを少し調べたり。 今の所 JPEGファイルのみで起こるようです。JPEG内のアプリマーカーが Exifで結構長めのコメントが入っていたりするようだったので、ここん所が テキスト判定されてたりするのか?などと思い、GIMPで長いコメントを埋め込んだ JPEGファイルを作ってみたりしたものの、そんなに単純な話では無さそうだったり。 JPEGの判定もファイルの拡張子以外にファイルのヘッダ部分(マジックナンバー)を見て 判定している場合もあり、そちらはイメージ開始マーカーを見ている ようだったので大丈夫そう。という訳で原因判らず。

もしかしてImageMagickを有効にしてビルドすれば状況が変わるか?と思い 試してみたのですが関係無く。ファイルを開いた所で画像として表示するか 否かを判定していそうなので、ファイルを開いた時点で画像として表示しないと 判断されれば絵は出ないという事かも。新たに判った事として、画像の表示に 失敗した場合でもファイル自体は開いているのですが、カーソル位置がファイルの最後 位置にあるとC-c C-cでの表示に失敗します。カーソル位置をファイルの先頭付近 に移動すると C-c C-c での表示が出来たりするようです。

ImageMagickを有効にしてpdf-toolsを使用するとやっぱり不調だったり。 新しいので対応されてたりしないか?という事で GitHubのpdf-toolsの プロジェクトを見てみた所、割と最近もアップデートされている感じだったり。 masterブランチのソースをビルドしてみたところ、caskコマンドが無いと 言って怒られたり。でも、そこよりも epdfinfo っていう実行ファイルを ビルドする方が大変だったのが (以前の話)どうなっているか?という点 が心配でしたが、新しいのでは何も手を入れる必要無くビルドできました。で、ひとまず *.elのままロードしてみて使ってみた所、ImageMagickを有効にしててもSegfaultにならなかったり。 DocViewの拡張では無く、PDF Viewというpdf-toolsに含まれる専用の 表示モードで機能するようになってる為かも。でもImageMagickをリンクする事で 画像表示できるようになる.BMPファイルを読み込むとSegfaultで死んだり。 やっぱり不安定なままなのか?と思いながらも少し調べてみた所、死ぬ組み合わせが ある事が判ったり。


デバッガで、Segfaultになる部分の周辺を見てみたところ、 imagemagick_render_typeという変数が!=0の時に死ぬコードが実行されるというのが 判ったのですが、この変数をsrc/*.c内のコードやlisp/*以下のelispで0以外に 設定している箇所が見当たらず。そして pdf-toolsの pdf-isearch.el 内の以下の コードで1に設定しているというのが判りました。

    191     ;; FIXME: Die Variable imagemagick-render-type entweder an anderer
    192     ;; Stelle global setzen oder nur irgendwo auf den
    193     ;; Performancegewinn hinweisen.
    194     (when (and (boundp 'imagemagick-render-type)
    195                (= 0 imagemagick-render-type))
    196       ;; This enormously speeds up rendering.
    197       (setq imagemagick-render-type 1))

コメントはドイツ語みたいですが、Google翻訳によると imagemagick-render-typeを1にした方が パフォーマンスが上がるっぽいような事が書かれているようです。しかし、 これがSegfaultになるスイッチをONにしている直接の原因です(^^; でも、Emacsを --without-imagemagick (ImageMagick無し) で ビルドすると、そもそも imagemagick-render-type という変数は組み込み変数では 無くなる(つまり参照する箇所はどこにも無い)のですが それでもpdf-toolsは使えます。 即ちimagemagick-render-type の内容を変更する必要は全く無いようだったので、 このコードをコメントアウトしてみた所、PDFファイルを表示した後にBMPファイルを表示しても Segfaultしなくなりました (^o^)/

思わぬ所でImageMagickとpdf-toolsの相性問題が解決したのですが、 ImageMagickを組み込んでも表示に失敗するJPEGファイルの問題は解決せず、 また、ImageMagickを使うと画像を表示してる所にウインドウサイズを変更しても リアルタイムにサイズ変更する機能が働かなくなるようです。気持ちロードも遅く なった気もするので、BMPファイルを表示できる代わりに失う物が大きいという 理由でImageMagickを有効にするのはやっぱり保留。ただ、pdf-toolsは新しい のにした方がやたら高速に表示される感じになったので、26.3でも新しいのを 使うようにしてみたり。

Emacs 26.3でもImageMagickを有効にしてイケるか?と試してみたのですが 微妙な結果に。Segfaultはしないものの、表示が怪しくなる場合があるようです。 26.3ではやっぱりImageMagickは無効のままで。

ちょろりGTS。そういやマイレージストアに未購入の商品が入らなくなってたり。 まだ買いそびれた 高額のカラー(色) があったと思うのですが?

2019/12/14

起きたら午後もいい時間。寝すぎ。

そういやEmacs 27で画像表示する際、ちょいちょい表示に失敗するファイルが あるように思ったり。一つは開くとテキストで表示しようとする失敗パターン。 この場合 C-c C-c で表示モードを切り替えると表示できる場合があります。 もう一つは C-c C-c で切り替えても何も表示されないパターン。原因はよく判りませんが 文字コードの判定が悪さをしているのではないか?と漠然と思ったり。 前者は単にテキストファイルと判定された場合、後者はテキストファイルと判定された上で コード変換により内部的にデータが変わってしまった場合。明示的にコード判定を 無効化する方法があれば原因の切り分けができそうなのですが....?

Emacs 27で 何も表示されないパターンで失敗する画像ファイルを revert-buffer-with-coding-system で文字コードに no-conversion を指定して 開き直した後、C-c C-c で画像表示に切り替えると表示できたり。 画像ファイルっぽいファイル名の時には文字コード判定&変換をしないように すれば解決できそうな気も。 でも、最初に開いた時にも describe-current-coding-system で調べて みると、no-conversion となっていて バイナリとして開いているハズ なのですが? 謎。という感じ。

auto-coding-alistって連想配列にファイルの拡張子毎にcodingをどうするか が設定されているようで、descrive-variable で内容を表示する限り、 .jpe?g(.jpeg もしくは .jpg)の時にはno-conversion 設定になっているようでした。 なのでやっぱり、バイナリとして開いているハズなのですが? という感じのようだったり。 何かしらバグっているのであれば話は別ですが。

2019/12/13

早くも無く遅くも無く。

Qiitaのemacsアドベントカレンダーで、Emacs27では tab-bar-modeというモードが 追加されているのを知ったり。最初使った時は、イマイチ何がタブになっている のか判らなかったのですが、どうやらフレーム内のウインドウレイアウトの 状態をタブとして切り替えられるという事みたい。
例えば、良い感じのウインドウレイアウトになっている所に、ediff のように 完全にウインドウレイアウトを崩すようなモードを起動するとか、メモ作業用 のレイアウトになっている所にfollow-modeでファイルを閲覧したくなったとか いう場合に、複数のレイアウトをタブで切り替えて良い感じに行ったり来たり できるという事みたい。慣れると便利に使えそうなのですが、 Cygwinでビルドした27.0.50で試した範囲では少し不安定みたい (タブを何度か切り替えていると無反応になり、強制終了するしかなくなった)。
あと、セーブは出来なさそうなので、Emacsを起動したらPCやサーバーの電源を 落とすまで終了しないような使い方をする人向けだと思います。

2019/12/12

遅めに帰着。

ちょろり調べ事。

2019/12/11

遅めに帰着。

ちょろりGTS。伸びない。

2019/12/10

遅めに帰着。

Emacs27の画像回転で画像が化ける件。最終的に PlgBlt()の仕様という事が判明。 対処方法は SetStretchBltMode()で HALFTONEを指定すれば良いという事に。 と言うのも、回転させずに縮小表示する場合は大丈夫なのですが、 PlgBlt()の実験をしていて単に縮小する場合でも化けるようだったので、 あれ?どうなってんだ?と思い回転させない場合の表示コードを調べたところ、 SetStretchBltMode()を指定してから StretchBlt()していたので、全く同じ コードを回転表示の場合にも適用したら期待する絵になったという流れ。

Emacs 27.0.50 Image Rotate パッチでOK

逆に、何故 90°や270°回転では大丈夫だったのかが謎。まぁ、結果オーライという事で。

2019/12/09

遅めに帰着。

Emacs27の画像回転で画像が化ける件。描画を行っていると思われる箇所まで 潜ってみたところ、最終的にWinAPIの PlgBlt()で90°毎の回転と拡大/縮小を 同時に行って描画している事が判りました。これ、WinAPIがバグってるんじゃないか? と思いWebを検索してみるも 特に該当するものは無く。PlgBlt()に与える 移動先座標の変換した値には問題が無さそうです。 180°回転と縮小を同時に行った時のみ発現するようで、180°回転と拡大を同時に 行ったりは大丈夫です。縮小してから回転させるとか二段階にすれば大丈夫 とかあるのかしら?

2019/12/08

AM中に起床。

掃除したり。

ワイドナショーでやってた読解力低下の話。例題の文章は読解力の問題 なのか? もう少し文章の方に書き方があるんじゃないか? とは思ったりも。文章力(伝わるように書く力)が上がると見かけ上読解力も 上がった事になるのでは?と思ったりするのですが、ずっと同じ文章で調査してる のであれば確かに上がった/下がったは結果としてそうかもなとは思います。

読解力。Wikipedia 文部科学省の外部リンクってのがあったり。これと、 こちらのニュース記事 のグラフを見てみると、少し面白いと思ったりも。 文部科学省のリンクの文書は2005年のものですが、ニュース記事のグラフで見ると 確かに下がっている時期で何かしら対策をしなくてはならないと言う感じだと 思われます。その後、グラフでは2006年から2012年までは順位が上昇するのですが、 2012年を境に下降して 2018年で15位という結果になっていたようです。
で個人的に気になったのが、何故2006年から上昇していたのか?という所と、 何故2012年から下降しているのかという所について、要因が判っている のだろうか?という点。2006年から上昇しているのは、文部科学省の文書の通りの 施策が効果を出しているという可能性もありますが、携帯でメールや文書を読み書き する機会が増えたのが要因の一つとしてあるかも?という話もあったように思いました。 それから考えると、文字で伝えるという手法は今でもあまり変わっていないように 思います。判らないのは2012年を境に下がっているという所。 もし、この頃に登場した/起こった 何かが関係しているとしたとき、何かあったっけ? とは思ったりも。
2012年の日本」 というWikipedia文書の存在を知ったり。そういや 民主党から自民党に政権交代したのってこの年だっけ。まさかそんな所が読解力と 連動してたりすることある?(^^; とは思いながらも、もし文部科学省の施策に 効果があったものが、政権交代により施策自体を行わなくなったとすれば、 因果関係が全く無いとも言えない事にはなるのかも。まぁ、だとすればな仮説 でしかありませんが。
そういやLINEっていつぐらいからあったっけ?と思ったり。 LINE (アプリケーション)のWikipediaによれば、初版は2011年の6月 のようですが、一般的に広まったのは2012年といった所みたい。 2012年に何かあった?の一つかも。読解力低下との因果関係が あるのか否かは判りませんが。

Emacs 27.0.50での画像表示について。26.3以前ではimage+.elというELISPを使って ウインドウの幅や高さに合わせたり拡大縮小したりという操作を行っていたのですが、 27.0.50ではうまく動いていない感じだったのと、標準のELISPでできるように なっている節があったので少し調べてみたり。diredから"v"で表示すると、 どうやらimage-modeで表示されるようですが、image-mode内に 表示スケールを指定したりウインドウの幅や高さに合わせて表示したり する関数があったのでそれを使ってみたり。ちょっとややこしいのは、 image-mode内で画像を表示しているのですが、その画像を回転させたりするのは image.el内の関数で行うという所。そしてimage.el内の関数を作用させるには (恐らく)操作対象となる画像にカーソル(非表示になってそうですが)が乗って いなくてはならない点。で、うまくいかない所があって、 キー割り当てしたimage-modeの関数を実行すると、画像にカーソルが乗っていない 状態になるようで、すると続けて image.el内関数の回転などの操作は行えなくなる という状況になりました。 仕方ないので、image-modeでの画像操作を行った後に、(goto-char (point-min))で カーソルを画像位置に戻すといった対応が必要でした。という訳で以下のような感じに .emacsに追加。

(if (or (string-match "2[56]." (version))
        (string-match "24.\[345\]" (version)))
    (progn
       : image+を使った設定
      )
  (progn
    (require 'image-mode)
    (define-key image-mode-map (kbd "<wheel-up>")    'image-previous-line)
    (define-key image-mode-map (kbd "<wheel-down>")  'image-next-line)
    (define-key image-mode-map (kbd "<wheel-right>") 'image-forward-hscroll)
    (define-key image-mode-map (kbd "<wheel-left>")  'image-backward-hscroll)
    (define-key image-mode-map (kbd "w")  '(lambda () ""
                                             (interactive)
                                             (image-transform-fit-to-width)
                                             (goto-char (point-min))))
    (define-key image-mode-map (kbd "h")  '(lambda () ""
                                             (interactive)
                                             (image-transform-fit-to-height)
                                             (goto-char (point-min))))
    (define-key image-mode-map (kbd "r")  'image-rotate)
    (define-key image-mode-map (kbd "o")  '(lambda () ""
                                             (interactive)
                                             (image-transform-set-rotation 0)
                                             (image-transform-set-scale 1)
                                             (goto-char (point-min))))
    )
  )

そういや、wheel-rightとwheel-leftはWebから拾ったのですが、Windowsでは どうやれば入れられる操作なんだ?

あと、image-rotateで180°回転させたときだけ画像が化けます。 変換行列が何かしらバグっている感じがします。

Emacs 27.0.50 Image Rotate NG

なのですが、ちょっと味のある変換になってるように思います(^^;

回転処理をしていると思われる部分を少し見てみたのですが原因は判らず。 回転行列の生成部分は角度によって異なる初期値になるのですが、その後の 座標変換は一意のルーチンで行っているようなので、180°の時だけ結果が 変わる要素は無さそうだったり。

2019/12/07

昼過ぎ起床。寝すぎ。

Emacs-27.0.50。少し見てみたところ、26.3以前と挙動が変わっている 所がいくつかあるみたい。簡単に気づいた所では、


という所。他にもあるかも知れません。

そういやgoogle-translateでまたエラーするようになってました。 今年はしばらく使えない時期があって、 約3カ月前に 復活して使っていたのですが。ワークアラウンドの外部ブラウザ起動する 方法で当面対応する感じで。

Emacs Anthyで文字が化ける件。どうやらanthy-agentというプロセスの 起動(anthy-check-agentという関数で行われているみたい)でエラーしている模様。 エラーしない場合は set-process-coding-systemが'euc-japan に設定される ようなのですが、エラー時は設定されていない ようで、文字コード変換されずにeuc-jpのままutf-8のバッファにぶちまけられて しまい、文字化けするという流れになっていると推測しています。

Debugger entered--Lisp error: (void-function process-kill-without-query)
  process-kill-without-query(#<process anthy-agent<1>>)
  anthy-check-agent()
  (progn (anthy-check-agent))
  eval((progn (anthy-check-agent)) t)
  elisp--eval-last-sexp(t)
  eval-last-sexp(t)
  eval-print-last-sexp(nil)
  funcall-interactively(eval-print-last-sexp nil)
  call-interactively(eval-print-last-sexp nil nil)
  command-execute(eval-print-last-sexp)

何が気に入らないと言われているのかはよく判らず。なのでどう直せばよいのかが 判りません。

もう少し調べてみたところ、どうやら process-kill-without-query は Emacs 22.1でobsolete になってて、process-query-on-exit-flagを使えと いう事になっていたみたい。27.0.50ではそんな関数は知らんという感じになった ようです。で、直してみたのですが、今度は違う所でエラーになったり。

;; From skk-macs.el From viper-util.el.  Welcome!
(defmacro anthy-deflocalvar (var default-value &optional documentation)
  (` (progn
     (defvar (, var) (, default-value)
       (, (format "%s\n\(buffer local\)" documentation)))
     (make-variable-buffer-local '(, var))
     )))

どうやら「(`」って所が old-style backquotes って事らしい。ただ、 簡単なリストだと「(` (progn」の部分を「`(progn」って直せばよいだけみたい なのですが、その後ろの「(,」の部分も直さなくてはならないようで、 defverやら色々入っているせいでどう直せばよいのやらやっぱり判らなかったり(^^; ひとまず 26.3では warningで済むようなので 26.3でバイトコンパイルした ものを27.0.50で読み込ませればひとまず process-kill-without-queryの置き換えでイケそうな事だけは確認できたり。

こりゃ次のEmacs27では色々起こりそう。

old-style backquotes のエラーを直してみようとスクラッチバッファで 実験してみるも、やっぱりどう書き換えれば良いのか判らなかったり。 実験の為にanthyのマクロ名を bbbとして、以下のようにしてみました。

(defmacro bbb (var default-value &optional documentation)
  (list
   'progn
   (list 'defvar var default-value
        (list 'format "%s\n\(buffer local\)" documentation))
   (list 'make-variable-buffer-local var)
   ))

定義後、「(bbb qqq "rrr" "sss")」と実行してみるとエラーになる訳ですが、

Debugger entered--Lisp error: (wrong-type-argument symbolp "rrr")
  make-variable-buffer-local("rrr")
  (progn (defvar qqq "rrr" (format "%s\n(buffer local)" "sss")) (make-variable-buffer-local qqq))
  eval((progn (defvar qqq "rrr" (format "%s\n(buffer local)" "sss")) (make-variable-buffer-local qqq)) nil)
  elisp--eval-last-sexp(t)
  eval-last-sexp(t)
  eval-print-last-sexp(nil)
  funcall-interactively(eval-print-last-sexp nil)
  call-interactively(eval-print-last-sexp nil nil)
  command-execute(eval-print-last-sexp)

という感じです。make-variable-buffer-localが実行されるにあたって、 変数qqqの内容である"rrr"をバッファローカルにしようとした 動きになってるような。でも、「(list 'make-variable-buffer-local 'var)」 としてしまうと、varという名前の変数をバッファローカルにするコードに展開 されるので、どうやれば変数qqqをバッファローカルにするコードに展開 されるんだ?というのが判らない感じ。Emacs27にすれば確実に動かなくなりそう なので、きっと誰かが直すに違いない......という事にしよう(^^;

以前、スクリプトなどのインタープリタ型の プログラム言語では、新しいバージョンと古いバージョンとで文法的な非互換があった場合に 古いバージョンの文法で書いてあると動かなくなるので、互換の維持と目新しさの追求を 両立させるのは難しい.....というような事を思った訳ですが、 今回のELISPの文法やら関数が変更されるやらにも同じ事を感じます。 プログラムした内容自体(例えばとある計算をするとか)は数学の定理のように この先ずっと不変な物となる場合でも、プログラム言語の方が変わるといちいち 対応しなくてはならないというのはやっぱりイマイチに思います。 「古臭い」という理由は、はたして「互換の維持」よりも優先される事なのでしょうか?

Segfault/Illegal instruction になる件。どうやら、src/frame.c内の frame_params[]という配列と、src/w32fns.c内のw32_frame_parm_handlers[]と いう配列を連動させる必要があったのですが、26.1向けのIMEパッチを作る時に w32fns.cへのパッチがrejectされてたのを入れ損ねていたようです。 そしてそれが元になってる26.3まで引き継がれる感じになってました。 因みに25.x以前のIMEパッチは大丈夫でした。という訳で12/8付けですが IMEパッチをアップデートしました。 御参考まで。

2019/12/06

気持ち遅めに帰着。

先日のEmacsのgit masterのビルド。 パッチ無しのまま --with-w32 ビルドしてみたところ、Segfaultする 事無く立ち上がったり。半角/全角キーでIME入力は可能なようです。 ただ、w32のモードでもAnthyで入力すると上手く入らない模様。 IME入力できる代わりに壊れてるのか?と思ったりも。

Segfaultする原因を調べてみたり。ところが、デフォルトとなる gccのオプティマイズレベルではSegfault現場の変数がオプティマイズ アウトして見られなかったり。-O0でオプティマイズレベルを下げると SegfaultではなくIllegal instructionになったり。IMEパッチのコード に関数ポインタテーブルを引いて関数実行する箇所があるのですが、 不当な関数テーブルのエントリを実行して妙な命令を踏んだという 感じになっていそうでした。で、困ったのが emacs-26.3でどうなってたか? を調べる為に同じようにオプティマイズレベルを下げてみたところ、 こちらでも同じくIllegal instructionが発生しました(^^; でも、 26.3の方はオプティマイズレベルを少しでも上げれば動く感じに なってるようです。もしかするとたまたま動いていただけの可能性 があるかも? もう少し調べてみよう。

そういや何気にEmacs 27.0.50のsrc/Makefile は Emacs のflymake に対応 してるようです。Makefileの最後の方に

### Flymake support (for C only)
check-syntax:
        $(AM_V_CC)$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) ${CHK_SOURCES} || true
.PHONY: check-syntax

ってのが足されてました。

その後、ひとまずこれが原因かな?というのが判ったような。 w32fnc.cの中で静的配列を設定しているのですが、

frame_parm_handler w32_frame_parm_handlers[] =
{
  gui_set_autoraise,
   :
  gui_set_no_special_glyphs,
};

となってます。これを、

frame_parm_handler w32_frame_parm_handlers[] =
{
  gui_set_autoraise,
   :
  gui_set_no_special_glyphs,
  0
};

てな感じで、最後に明示的に0を追加してみると、ひとまず Illegal instruction にはならなくなったり。sizeofで前者と後者を調べてみたところ、前者のサイズは 188、後者は192となってて、要素数が一つ違っていました。 Cygwin32なのでsizeof(void*)は4なので、要素数で換算すると前者は47、後者は48、 Illegal instructionの時は要素番号47を参照しようとしていたので、前者だと 配列サイズを超えた要素をアクセスしている事になってました。 というのが直接の原因っぽいです。そもそもどこで配列サイズを超えた要素を指定して いるのかはよく判らず。

26.3でもsrc/frame.cを-O0でコンパイルするとIllegal instruction(やSegfault) になる可能性がある(てか実際になった)という事になりそう。

2019/12/05

遅めに帰着。

何気にEmacsのgit masterをビルドしてみたり。IMEパッチは いくつかリジェクトされるブロックを手でパッチして、 関数名が変わっててコンパイルエラーになる部分を直してみたり。 結果、Segfaultする実行ファイルが出来上がりました(^^; IMEパッチに関係する所では無さそうなので、そもそもダメなのかも。 -nw では立ち上がるのですが、scratchバッファでAnthyを使って 日本語文字を入れるとコードで表示されたり、なんかやる度に なにやらワーニングメッセージが出るしで、なんだか怪しげな 感じです。因みにバージョンは 27.0.50 でした。

-nw でも Anthyを使わず、WindowsのIME切り替えでターミナルに 向かって直接日本語入力する分には大丈夫そう。これは26.3でも 大丈夫なので、見かけ上 27.0.50で Anthyによる入力がレベルダウンした だけのように見えます。

2019/12/04

遅めに帰着。

Emacsのfollow-mode。「C-x 3」のsplit-window-horizontally で縦割した複数のウインドウに、ある一つのバッファの連続した行を 続けて表示するモードです。個人的には滅多に使う事が無いモード なのですが、今日使いたい場面があった時、モードの名前が思い出せなくて、 Webで検索しても「emacs ウインドウ 複数 スクロール」では 直ぐに出てこなかったので覚える為にここにメモ。

Emacs follow-mode

因みに、前述検索結果の中から scroll-all-mode というのがあるのを 知ったり。ediffで二つのバッファを左右に表示した際にスクロールする 時の動きと似た感じになるみたいですが、このモードを単体で使用して 便利だと感じる場面はあまり想像できません。

2019/12/03

遅めに帰着。

ちょろりGTS。縮まらない。

PlayStation 発売から25年。何気に四半世紀前か....

2019/12/02

遅めに帰着。

たまにsshでコマンドラインを指定して実行する事があるのですが、 その場合 PATHが変更されない場合があるというのを知ったり。 bashの場合、非インタラクティブシェルとして起動された場合は .bash_profile が読み込まれないので .bash_profile にPATHを 追加しても反映されないという流れみたい。 Emacsのeshellを使うと確かに.bash_profileを読み込んでいない ように思われるのですが、 コマンドラインから ssh実行している 感じでは .bash_profileを読み込んでいるように思われたり。

2019/12/01

AM中に起床。

掃除したり洗濯したり。

GTS。走行距離40000kmのアチーブメントをゲット。到達にはプレイ時間 にすると200時間くらいかかる予想でしたが 169時間で到達できた模様。最初の頃は速い車が使えなかったからかな?とは 思ったりも。てか、遊びすぎだな。

GTSルイス・ハミルトン チャレンジの全クリア動画が出てたり (前半後半)。 スゲェ。


TOP PREV