Author Archives: AKIYAMA

2021-07-29

新しい寝タブ用タブレットスタンドを購入

以前寝タブ用にタブレットスタンドを購入したのですが最近はほとんど使っておらず布団の脇に放置されていました。というのも

  1. アームが短く頭のすぐ近くに置かなければならないこと
  2. 頭の近くにあると使わないときに邪魔なので遠ざけたいがアームが曲げづらく土台ごと遠ざけなければならないこと
  3. 土台ごと遠ざけると次に使うのが億劫になること(土台は布団の下に挟み込まれているので簡単には動かない)

あたりが原因だと思います。他にもアームが曲げづらいので使っている間の調整が難しいこともあると思います。

使わないアームが布団の脇にずっと放置されているのも何だか不愉快になってきたので、代わりのものを探してみたところ良さそうな商品が見つかりました。

タブレットスタンド スマホ ホルダー 360度回転可能 38cm-140cm高さ調節可能 主体調節でき 折り畳み式 フレキシブルアーム 寝ながら 根元強化 下垂防止 3.5~10.6インチ 便利スタンド

これこれ、こういう昔ながらの電器スタンドのアームみたいなタイプが欲しかったんです。以前探したときにはなかなか見つからなかったのですが最近はタブレットスタンドのバリエーションもかなり増えてきたのかもしれませんね。

届いたので早速組み立てて使ってみました。

一番下の直線部分は2本のパイプをパイプに切られたネジで連結する仕組みになっています。1本だけ使って低くすることも可能。それを土台のネジに繋げます。

直線パイプの上、一番最初の可動部分はアームパーツを下のパイプ上部の穴に差し込むだけになっています。なのでこの部分が垂直軸まわりに360度自由に動きます。邪魔なときにアームをよけておくのに使えます。

アームはかなり広範囲に動きます。パイプ2本だと高いかなと思ったのですが、アームによってかなり低い位置まで下ろせます。もちろん高い位置にもできるので目からの距離を使用中に柔軟に調整できます。

唯一の欠点はタブレットを挟む部分がタイトなことでしょうか。バネによってタブレットを挟んで固定するのですが、10インチタブレットだとかなりギリギリです。挟む力がかなり強いので挟みっぱなしだとそのうち本体が変形しないか心配になります。まぁ、多分大丈夫だとは思いますが……。

というわけでかなり満足度の高いタブレットスタンドでした。

2021-07-28

Emacsでモードライン内の上下に空白を増やす

この間MeiryoKe_ConsoleとInconsolataを合成したフォントを作成してEmacsではそれを使うようにしたのですが、合成したフォントはMeiryoKe_Consoleの寸法がベースになっているのでグリフの上下に余白が少なくモードラインの上下も何だか詰まった感じになってしまいました。

上下が詰まったモードライン
図1: 上下が詰まったモードライン

以前はInconsolataに上下の余裕がたっぷりあったので気にならなかったのですが。

というわけでちょっと余白を増やしてみました。モードラインの内容は mode-line-format 変数で指定できますが、その中ではテキストプロパティを自由に設定できるようになっています。テキストプロパティを設定できると言うことは、そう、おなじみのdisplayプロパティが使えるというわけですね。

今回はモードラインの先頭にdisplayプロパティによって空白を作り出し、その空白の幅、高さ、アセントを設定することで上下の余白をコントロールすることにしました。

;; モードラインの上下内側に空白を設ける。
;; 変数をリスキーだと指定しないとテキストプロパティが反映されないので注意。
(defvar my-mode-line-height
  '((:propertize " " display (space . (:width (1) :height (22) :ascent (16)))))) ;;w=1px, h=20px, ascent=16px
(put 'my-mode-line-height 'risky-local-variable t)

;; mode-line-formatの先頭に'my-mode-line-heightを挿入する。
;; 末尾に挿入すると長いファイル名で右端がフレーム外に出ると空白も消えてしまう。
;; バッファローカル変数なのでsetq-defaultを使う。
(setq-default mode-line-format
              (append (list "" 'my-mode-line-height) ;;先頭は文字列じゃないとダメ
                      mode-line-format))

:height でモードライン全体の高さを指定します。 :ascent でベースラインより上の高さを指定します。 :ascent を増やすと上の余白が増えて下の余白が減ります。

上下に余白を増やしたモードライン
図2: 上下に余白を増やしたモードライン

他にもface(mode-line や mode-line-inactive)の:box属性を使って境界線の幅を増やし色もバックグラウンドと同じにする方法もあるようです。今時のフラットな見た目ならこっちの方が手軽かもしれません。左右に少し空白が空くとは思いますが数ピクセルくらいなら気にならないでしょう。

参考: faces - Padding around modeline text? - Emacs Stack Exchange

2021-07-27

dired-details-rを修正する

皆さんは dired-dwim-target 変数を使ってますか? diredでコピー先や移動先を良い感じに推測してくれる機能です。分割ウィンドウで他のディレクトリを開いているとコピー先や移動先をそのディレクトリにしてくれます。古からある二画面ファイラーなんかではおなじみの機能ですね。ついでにM-nで出る「未来の履歴」にもいくつか候補を設定しておいてくれます。(EmacsではM(Alt)-p(previousのp)で過去の履歴をたどれてM-n(next)で現在に戻ってこれますが、現在を越えてM-nを押すとこれから選びそうな候補が出てくるというUIの考え方が(一部で)あります)

それでコピーや移動のときには大変便利なのですが、ファイル名を変更するときにはよくミスを犯してしまうのです。なぜならファイル名の変更と移動は同じRキーに割り当てられているからです。名前の変更はファイルの移動と同じ、または逆にファイルの移動はディレクトリパスも含めた名前の変更と同じと考えられるからです。Unixではどちらもmvコマンドですし。それでファイル名を変更しようとRキーを押したとき、 dired-dwim-target が有効だとたまたま開いていた別のディレクトリが移動先として設定されてしまうわけです。それに気がつかずに新しいファイル名を入力してEnterを押すと、ファイル名も変わるのですが同時に別のディレクトリにファイルが飛んで行ってしまうわけです。ぎゃー!

というわけでどうにかならないのかなと。移動と名前の変更が同じキーになっているのが原因ですから、別のキーに割り当てて候補の出方を変えるというのも手です。小文字のrは使っていないのでここに「ファイル名変更(ディレクトリ変更不可)」を割り当てるとか。でも非標準の操作体系を増やすと別のマシンを使うときに戸惑うのであまりやりたくありません(いまさら!)。安全優先でRは名前変更のための候補を優先して出し、移動先の候補はM-nで出すだけで十分かもしれません。と、Twitterでつぶやいたのですが……

「名前変更には wdired 使ってます」との天の声が。

なんとそんな使い分けの方法があったとは!

wdiredとはファイル一覧のファイル名部分をテキストエディタの要領で編集するとファイル名が変わってくれるという便利機能です。

しかし私がwdiredを使っていないのには理由がありまして、以前wdiredを試したときにファイル名の入力がうまくいかなかったり、うまく行っても表示がおかしくなったりしたのです。

というのも私はdired-details-rというファイルサイズやタイムスタンプなどの詳細をファイル名の右に出す拡張を作っていて、どうもそれが悪さをしているようなのです。

しかしそれを直してしまえばwdiredを使ってみるのもやぶさかではありません。

というわけで重い腰を上げて dired-details-r を直すことにしました。他にも色々直したいところがあったのでついでに直すことにしました。

  • wdiredでファイル名を編集したときにファイル名の先頭でread-onlyエラーで書き替えられないことがあったり、書き替えられても書き替えた部分が表示されないことがある不具合を修正
  • ファイル名の末尾にカーソル(ポイント)を合わせられない不具合を修正(詳細情報の右に飛ぶ。wdiredでファイル名の末尾に文字を追加すると追加した部分だけ詳細情報の右に表示される!)
  • カスタマイズまわり(グループとか型とか)の修正
  • マイナーモード化(dired-details-r-mode)
  • 一部のファイルだけ更新がかかったときに列が乱れる不具合の修正
  • "(" キーでの表示切り替えで元の表示形式(詳細の左表示)に戻せる機能を追加(wdiredでパーミッションを編集したい場合に備えて)
  • 設定のデフォルト値の調整
  • 導入方法の修正(以前はrequireするだけでしたが、マイナーモード化したので (dired-details-r-setup) を呼び出すか自分でマイナーモードを起動するか選択可能に)

以上を修正。

dired-details-r + all-the-icons
図1: dired-details-r + all-the-icons

晴れてwdiredが正常に使えるようになりました。

wdiredでのファイル名変更手順は、C-x C-q で編集を開始し、ファイル名を書き替えてから C-c C-c または 再度C-x C-q。Rを押してファイル名を書くより面倒かなと思ったのですが案外違和感がありません。C-x C-qはリードオンリーモードの切り替えでよく使うキー操作です。通常diredはリードオンリーモードになっていてテキストを書き替えられませんが、リードオンリーモードを解除してファイル名部分を書き替えて確定、または再度リードオンリーモードを有効にする、というある意味自然な流れなのは知っていました。しかしそうは言ってもタイプ数が増えるのだから面倒だろうと思ってもいたのですが、想像していたよりも違和感なく素早く操作できます。しばらく名前の変更はwdired縛りで行こうと思います。一括変更はさすがに % m でマークして % R で正規表現置換した方が楽な気もしますがどうでしょうね。

色々ときっかけを頂いたiquiwさんありがとうございました。