2019-12-14

Terminalでの、なんちゃってViモドキ

近頃、ようやくKarabiner-Elementsに慣れてきたので、 Terminalで動作する「擬似Vi-Mode」を作って見たので、ご紹介します。

『概要』

「擬似Vi-Mode」の所以は、方向キー「←↓↑→」を通常の「hjkl」ではなくて「jkil」としました。これは私の小指が短めで、中指が長めのために選択してみました。恐らく、Vim系列では、このようなキー設定の変更は事実上不可能と推測しています。

当初は、zshの.zshrcで使い慣れている「bindkey -e」をベースに、下記の設定から始めました;
  • "^J" backward-char
  • "^K" down-line-or-history
  • "^I" up-line-or-history
  • "^L" forward-char
  • "^A" beginning-of-line
  • "^B" backward-delete-char
  • "^D" delete-char-or-list
  • "^E" end-of-line
  • "^G" expand-or-complete
  • "^M" accept-line
  • "^U" undo
この変則的なキーマッピングは文字(chr)単位だけの操作だけでしたが、予想以上に快適だったので、「Esc」を使って、語(word)や列(line)の操作をしようとしましたが、小指が短めの私には、「Esc」は遠すぎです。

実は、Karabiner-Elementsにより、下記のキー操作が実現されています;
  • スペース・キーを長押ししていると「lコントロール・キー (^)」
  • スペース・キーの左右には「コマンド・キー(⌘)」
  • また、キャップスロック・キーには(FN)
そこで、Karabiner-ElementsでTerminalについての.jsonを検索すると、"Navigation in Terminal Apps"があったので、これを参考に語(word)や列(line)の操作ができました’
  • "tViModoki.2g.json"
  • 以降、ViModokiがニックネームとなりました。
  • 起動キーは「左コマンド(スペース・キーを長押し)」で、
  • 修飾キーは「コマンド・キー(⌘)」

ここまで来ると、「範囲指定: ^oで開始点を設定、終点まで移動」をして、「コピー: ^w」、「削除:^x」、「ペースト:^v」が欲しくなりました。「^w」と「^x」は、下記の2つのサイトを参考に関数で対応しました;
zshで範囲選択・削除・コピー・切り取りするhttps://qiita.com/takc923/items/35d9fe81f61436c867a8
Macがzshになるなら、ZLEを習得するっきゃない!https://dev.classmethod.jp/tool/zsh-zle-introduction/

    『.zshrcでのbindkey設定』

    ## basic bindkey setting
    bindkey -d
    bindkey -e
    ## # cursor movement by char/word/line
       bindkey  '^[j' backward-word          #   ⎋j: ←.w
       bindkey   '^j' backward-char          #   ^j: ←.c
       bindkey   '^k' down-line-or-history   #   ^k: ↓.l
       bindkey   '^i' up-line-or-history     #   ^i: ↑.l
       bindkey   '^l' forward-char           #   ^l: →.c
       bindkey  '^[l' forward-word           #   ⎋f: w.→
    ## # resion & killing
       bindkey   '^o' set-mark-command       # 範囲の開始位置をマーク
       bindkey   '^x' kill-region
                         #マークから現在位置までの範囲を削除し、それをキルリングに蓄積.
       bindkey   '^v' yank
                         #キルリングの最新の内容を貼り付ける
       bindkey  '^[v' yank-pop
                         #キルリングを遡る(Ctrl-yの後にのみ有効)
    ## bindkey  '^[w' copy-region-as-kill    # カーソルの左側の語をコピー
    ## # cursor movement by line
       bindkey  '^[a' kill-line                        #   ⎋a: ⌦.eol
       bindkey   '^a' beginning-of-line          #   ^a: bol.l
       bindkey  '^[e' backward-kill-line         #   ⎋e: bol.⌫
       bindkey   '^e' end-of-line                   #    ^e: l.eol
     # bindkey   '^y' center-of-line              # function center-of-line()
     # forward delete for word & char
       bindkey  '^[d' kill-word                      #   ⎋d: w⌦
       bindkey   '^d' delete-char-or-list        #   ^d: c⌦
     # backward delete for word & char
       bindkey  '^[b' backward-kill-word       #   ⎋b: ⌫w
       bindkey   '^b' backward-delete-char   #   ^b: ⌫c
     # operation
       bindkey   '^_' undo                            #   ^_: ⎌
       bindkey   '^m'  accept-line                 #   ^m: ↩︎

    tViModoki.2g.json

    {
      "title": "tViModoki.2g.json,
      "rules": [
        {
          "description": "tViModoki.2g.json  T=^;⌘a➤⎋a,⌘b➤⎋b,⌘c➤⌘c,⌘d➤⎋d,⌘e➤⎋e,h➤⎋h,⌘j➤⎋j,l➤⎋l,p➤⎋q,q➤',u➤^_,⌘v➤⎋v,⌘x➤⌘x,⌘z➤⌘z.",
          "_note0": "^q:quote ^p:push-line ^h:run-help",
          "_note1": "rev 2f: 2019-11-11-1820  <-- rev 2e.1: 1370220828.json",
          "_note2": "rev 2g: 2019-12-12-2205  alphabetical order",
           "manipulators": [
            {
              "type": "basic",
              "from": {
                "key_code": "a",
                "modifiers": {
                  "mandatory": [
                    "control",
                    "command"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "escape"
                },
                {
                  "key_code": "a"
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },
            {
              "type": "basic",
              "from": {
                "key_code": "b",
                "modifiers": {
                  "mandatory": [
                    "command",
                    "control"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "escape"
                },
                {
                  "key_code": "b"
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },
            {
              "type": "basic",
              "from": {
                "key_code": "c",
                "modifiers": {
                  "mandatory": [
                    "control",
                    "command"
                  ],
                  "optional": [
                    "caps_lock"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "c",
                  "modifiers": [
                    "left_command"
                  ]
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },
            {
              "type": "basic",
              "from": {
                "key_code": "d",
                "modifiers": {
                  "mandatory": [
                    "command",
                    "control"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "escape"
                },
                {
                  "key_code": "d"
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },
         
            {
              "type": "basic",
              "from": {
                "key_code": "e",
                "modifiers": {
                  "mandatory": [
                    "control",
                    "command"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "escape"
                },
                {
                  "key_code": "e"
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },
            {
              "type": "basic",
              "from": {
                "key_code": "h",
                "modifiers": {
                  "mandatory": [
                    "control"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "escape"
                },
                {
                  "key_code": "h"
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.apple\\.finder$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },
            {
              "type": "basic",
              "from": {
                "key_code": "j",
                "modifiers": {
                  "mandatory": [
                    "command",
                    "control"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "escape"
                },
                {
                  "key_code": "j"
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.apple\\.finder$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },
            {
              "type": "basic",
              "from": {
                "key_code": "l",
                "modifiers": {
                  "mandatory": [
                    "command",
                    "control"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "escape"
                },
                {
                  "key_code": "l"
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },
            {
              "type": "basic",
              "from": {
                "key_code": "p",
                "modifiers": {
                  "mandatory": [
                    "control"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "escape"
                },
                {
                  "key_code": "q"
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.apple\\.finder$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },
            {
              "type": "basic",
              "from": {
                "key_code": "q",
                "modifiers": {
                  "mandatory": [
                    "control"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "escape"
                },
                {
                  "key_code": "quote"
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.apple\\.finder$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },
            {
              "type": "basic",
              "from": {
                "key_code": "s",
                "modifiers": {
                  "mandatory": [
                    "control",
                    "command"
                  ],
                  "optional": [
                    "caps_lock"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "s",
                  "modifiers": [
                    "left_command"
                  ]
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },
            {
              "type": "basic",
              "from": {
                "key_code": "u",
                "modifiers": {
                  "mandatory": [
                    "control"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "hyphen",
                  "modifiers": [
                    "left_shift",
                    "left_control"
                  ]
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },

            {
              "type": "basic",
              "from": {
                "key_code": "v",
                "modifiers": {
                  "mandatory": [
                    "control",
                    "command"
                  ],
                  "optional": [
                    "caps_lock"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "v",
                  "modifiers": [
                    "left_command"
                  ]
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },
            {
              "type": "basic",
              "from": {
                "key_code": "x",
                "modifiers": {
                  "mandatory": [
                    "control",
                    "command"
                  ],
                  "optional": [
                    "caps_lock"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "escape"
                },
                {
                  "key_code": "v"
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            },
            {
              "type": "basic",
              "from": {
                "key_code": "z",
                "modifiers": {
                  "mandatory": [
                    "control",
                    "command"
                  ],
                  "optional": [
                    "caps_lock"
                  ]
                }
              },
              "to": [
                {
                  "key_code": "z",
                  "modifiers": [
                    "left_command"
                  ]
                }
              ],
              "conditions": [
                {
                  "type": "frontmost_application_if",
                  "bundle_identifiers": [
                    "^com\\.apple\\.Terminal$",
                    "^com\\.googlecode\\.iterm2$",
                    "^co\\.zeit\\.hyperterm$",
                    "^co\\.zeit\\.hyper$",
                    "^io\\.alacritty$",
                    "^net\\.kovidgoyal\\.kitty$"
                  ]
                }
              ]
            }
          ]
        }
      ]
    }


    『.zshrcでのzle関数』

    ### functions for bindkey ######################################################
    #                                                                              #
    # https://qiita.com/takc923/items/35d9fe81f61436c867a8
    # zshで範囲選択・削除・コピー・切り取りする
    # 導入: 2019-12-12-052531
    function copy-region() {
        zle copy-region-as-kill
        REGION_ACTIVE=0
    }
    zle -N copy-region
    bindkey "^w" copy-region
    function remove-region() {
    #    if [[ "$(($REGION_ACTIVE))" -eq 0 ]]; then
    #        zle backward-kill-word
    #    else
    #        zle kill-region
    # fi
    zle kill-region
    }
    zle -N remove-region
    bindkey "^x" remove-region

    # https://dev.classmethod.jp/tool/zsh-zle-introduction/
    # Macがzshになるなら、ZLEを習得するっきゃない!
    # 2019-12-12-191339 「if [[ 」は駄目だった。
    function tab-hokan() {
        [[ "${RBUFFER:0:1}" != " " ]] && BUFFER="${LBUFFER} ${RBUFFER}"
        zle expand-or-complete
        zle redisplay
    }
    zle -N tab-hokan
    bindkey "^g" tab-hokan


      『キー操作のリスト』

       •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
       • vm: "tiny Vi-Modoki based on Navigation in Terminal Apps"     •
       ••        for Terminal.apps with zsh using bindkey -e          ••
          ##### ====== move cursor by a char/line/word =========== #####
               # ^j: ←c                   # ⌘^j: ⤆w      ☑︎
               # ^k: ↓l                   #
               # ^i: ↑l                    #
               # ^l: c→                   # ⌘^l: w⤇      ☑︎
          ##### === go to (bol|col|eol), long delete (eol|bol) === #####
               #  ^a: bol⤟               #  ^e: ⤠eol
               #  ^y: col                  # center-of-line()
               # ⌘^a: l⌦eol  ☑︎        # ⌘^e: bol⌫l   ☑︎
          ##### ======== delete by a word/char =================== #####
               # ⌘^d: w⌦     ☑︎        # ⌘^b: ⌫w      ☑︎
               #  ^d: c⌦                  #  ^b: ⌫c
          ##### ======== reginal operation ======================= #####
               #  ^o: set-mark-command
               #  ^v: yank                  #  ^v:
               # ^[v: yank-pop           # ^⌘v:        (☑︎)
               #  ^w: copy-region       # copy-region()
               #  ^x: remove-region    # remove-region()
          ##### ======== etc =========== t.ViM :   ☑︎=============== #####
               #  ^h: run_Help            #  ^h: ⎋h      ☑︎
               #  ^m: accept-line         #  ^m: ↩︎
               #  ⎋q: Push-line           #  ^p: ⎋q     ☑︎
               #  ⎋': Quote-line          #  ^q: ⎋'      ☑︎
               #  ^_: undo                  #  ^u: ^_        ☑︎
          ##### ============================================== #####




        『環境』


        • OS: Mojave Ver. 10.14.4
        • Terminal: Version 2.9.4 (421.1.1)
        • zsh 5.7.1 (x86_64-apple-darwin18.2.0)


        『感想』

        1. 初めて「bindkey」にトライできて楽しかった。まるで小学生のころ、「ナイフで鉛筆削り」をした時のことを思い出しました...。お陰で、タッチ・タイピングが戻ってきた。
        2. Viのvicmdモードに惹かれるが、いっそのこと別途に「⎋」,「^」,「Fn」などを「CapsLock」のようなトグル型にして従来のキーボードと併用するとよいかも。もう少し体力が回復したら工作したいなぁ!
        3. 今回Karabiner-Elementsを気楽に操作できたのは、「App Store」で購入した「JSON Editor.app」を、通常のエディタの隣に小さく表示するごとに、エラー部分を表示してくれるのだ。お陰で「,」のエラーは簡単に検知は容易!次に多かったのは単なるタッチ・ミスの検出にも大活躍。
        4. でも、.jsonは長くて読みづらい。孫悟空のような名前のプリプロセッサーのようなシステムがあるらしいので、調べてみたい。

        [この記事の履歴]

        1. 開始 2019-12-14

        2019-06-26

        Intel製「Power Gadget 」について

        メイン・マシンは次のように変遷しました;
        • 「Mac mini(Mid 2011), macOS Sierra」から
        • 「Mac mini(2018) i5, macOS Mojave 10.14.4」


        この両者を比較して一番驚いたのが、後者では;
        1. 表面温度がより低くなった事。
        2. 排気音がより小さくなった事。

        1.については、
        • 「TG Pro.app」で視ることができて、確かに低いです。
        • またファンの回転数も気温が33°Cぐらいまでなら1700rpm前後です。

        2.については、
        • そして設定「Fans」: System --> Max」にするとファンが豪快に回り始めました。
        • その後は「Fans」: Auto Max」で安定しています。

        で、興味は「Mac mini(2018) i5」のマルチ・コアの動作を可視化することに移りました。で検索の結果、「Intel(R) Power Gadget.app 」があったので、入手しました。

        ちょっと前に「App Store」からいくつかのアプリケーションの更新があったので「Pages.app」のupdate時の振る舞いをキャプチュアしました、下図;

        Fig. Intel(R) Power Gadget.app for Updating of Pages.app from App Store.



        これまでの観察で、「アプリケーションの動作」の体感に近いのは「Frequency」です。無負荷ではコア数は「1.4強」ほどで、負荷の向上と共に「4.0弱」まで上昇しました。

        検索した時は、「i5」マシンのコア数は「2.0~4.1」と見た気がしましたが、自分のマシンのコア数は低めです。むしろお陰で、安定性が増しているのではないかと推定しています。

        この記事の履歴
        1. 開始: 2019-06-26-21:00



        2019-06-21

        ダークな地の色でブラウザを運行する時の問題点 --緊急メモ--

        私は、「macOS Mojave 10.14.4」で「Appearance: Dark」の設定を用いています。そして組み込みのSafariで「Dark Reader for Safari.app」を組み合わせることで、ウェブ・ブラウジングがとても快適になりました。
        • 以下、ダークな地の色を使うのを「ダークな設定」、ライトな地の色を使うのを「ライトな設定」と略します。


        そうなるとメイン・ブラウザである「Firefox 67.0」でも同じようにしたくなり、あるフォーラムで論議です。

        その論議の中で;
        1. 「ダークな設定」の時に「地の色が赤で、文字色が白」としても問題なく見えるが
        2. 「ライトな設定」の時に「地の色が赤で、文字色が黒」となり、可読性が濁度にていかする。
        3. 「ライトな設定」の時に「地の色が赤で、文字色が黒」でも一部をドラッグすると、「地の色が赤で、文字色が白」。となり読める。


        この現象とは裏腹な現象が、それもFiredoxのアピール・サイトに見られたので示します。
        新しいfitrfox この速さ、どこまでも。
        https://www.mozilla.org/ja/firefox/new/


        図1 緑青の下地に、白の文字では、コントラストが低すぎて、可読性が悪い!


        図2 でも文字部分を大雑把にドラッグするだけで、「文字列の背景色が青で、その文字色が白」となり、可読性が向上!




        ついでに「MozillaZine」のエディタの操作部分は多くの場合、アイコンのクリックで操作しますが、こちらでは図3のような「ボタン形式」です。

        図3 アイコンだけでなく、ボタンにも注意




        この記事を作成中に。「作成」モードの文字色が見えづらくなった。以前、他のブログに移動しようとした時にも、類似の状態になったような。引っ越ししたいが、体力に自信がないなぁ....。



        この記事の履歴
        開始: 2019-06-21-19:12

        2019-06-12

        MojaveでのSafariのCSS設定

        従来から、常用ブラウザはFirefoxで、検索して参考になるサイトを.weblocで保存しておく。それを見たくなったらSafariで立ち上げるようにしていた。

        しかし、次の設定のために、考えが変わった。
        • Mojaveでの;「Appearance: Dark」と
        • Safariでの機能拡張;「Dark Reader」[App Store]から購入

         その上、Google検索は、ブラウザで直接するのは止めてて、ターミナルからスクリプト(現在テスト中)を使っての検索になっています。

        この影響で、 FirefoxもSafariも対等に利用するようになりました。そこで取り合えず、Safariに簡単なCSSを作ったので紹介します。

        2つの図だけをお示しします。おまけ(図3)を追加しました。

         図1:  Safariの設定(Fig. 1a)とsafari.css(Fig. 1b)

        図1:  Safariの設定(Fig. 1a)とsafari.css(Fig. 1b)


        図2: 偶に行くサイトでは、既読表示(orange)が嬉しい。
        図2: 偶に行くサイトでは既読表示(orange)が助かる。

        おまけ(図3)


        FirefoxのCSS設定と同じに変更しました。
        • 多くのサイトで見られるリンクの下線(1px)を消し、
        • ホバーするときに、リンクの下線(2px)を設定。リンクの色に同期するので状態が見やすい。
        Fig. 3: Changed css as same as Firefox's css setting.





        この記事の履歴
        1. 開始 2019-06-12-21:00
        2. 追加 2019-06-15-09:22



        2019-06-07

        macで自動ログインを中止した! -- 備忘録 --

        現在使用中のOSは、「Mojave 10.14.4(18E226)」ですが、結構頻繁にバージョン・アップされています。が、段々と熟成されるというよりも、その場しのぎのパッチが続いている印象が強い。従って現時点では、App.Storeから連日に渡って「Mojave 10.14.5」への移行を促されているが、様子見をしている。

        そんな中、長年使ってきた「自動ログイン: automatic login」を中止した。私の推定ではOSの信頼性向上の為に、ログイン時にマウス操作が必須になるように移するだろう、と思うからです。
        どうせなら、iPhoneのユーザ認証を使って、Macに自動ログインして欲しいが...。

        そこで、面倒でも今から「マウスを使ったログイン」に移行し、事前に問題出しをしようと思いました。で判明したのは、
        • ログイン時のマウス・カーソルは小さすぎて、見つけ難い!
        でした。

        何度かやっていると、画面の左側面のどこかに居るらしいのですが、カーソルを見つけるのにストレスが高まります。この話をアップルのテクニカル・アドバイザの方に愚痴ったら、2日後に教えていただきました。すぐに忘れそうなので備忘録として置きます。

        要点は、昔からの「ルート・ユーザ: root user」としてログインして、
        • 「システム設定: System Preferences」--> 「アクセシビリティ: Accessibilitty」--> 「ディスプレイ: Display」と選択し、
        • 右ペインの「カーソル・サイズ: Cursor size」のスクロール・バーで見やすいサイズに変更する、下図参照。




        これだけの設定で、その後の「マウスを使ったログイン」では、ログイン前でも日常使っているマウス・カーソルで表示されます。ストレス・フリーのログインができるようになりました。

        で、判ったのは、ログイン画面に入った時点では、カーソルは「画面左上」、すなわち通常のメニュー・バー(menu bar)の「アップル・ロゴ・マーク: apple logo mark::  」の近くに待機するようです。


        結論:

        • iPhoneの指紋認証能力を用いたMacの自動ログインが欲しい!
        • Hope utomatic login by using fingerprint biometric technology of iPhone


        参考資料: ルート・ユーザ設定(日本語/英語)



        この記事の履歴
        1. 開始2019-06-07-02:38


        2019-02-27

        Mail.app(12.2)にiTscomのメールアカウントを登録した:備忘録

        【状況】
        長いこと相棒だった「Mac mini(Mid 2011), macOS Sierra」のファイル・システムが不調となった。予備機の「iMac(21.5-inch,ate 2009), macOS Sierra」で凌いでいた。でもウェブ・ブラウザですらレインボー・マークが頻繁になり、仕方なく「Mac mini(2018), macOS Mojave」を購入した。

        加齢とともに明るい光が眩しくなったので、Mojaveのダーク・モードは有難い。「Finder, Terminal」さらにMailもダーク・モードに対応していたのに感激した。これまで常用のメイラーは唯一Thunderbirdだけだったのですが、初めて「Mail ver.12.2」にiTscom.netの複数アカウントを登録してみました。

        iTscomのサイトにあるヘルプ情報は古すぎるようなので、電話サポートで「Mail ver.12.2」の設定方法をお聞きした。以後の備忘録として報告します。

        【準備】
        メールアカウント情報はiTscomのマイページから調べられて、アカウント毎に3つの値が決められています。説明の為に下記のサンプル値を用います;
        • e-mail address: sample@z99.itscom.net 
        • POP account: m9876543
        • POP account password: ZzXxYy9988
         
        上記に加えて、「POP server」、「SMTP server」 の値は登録時のままでないので、接続が変な場合はサポートに確認するのをお勧めします。

        【設定】
        LaunchpadからMailをオープンし、キーボードから「command + camma」を打つと、Mailの設定(Preferences)が開かれる。其の後は、下図1,2に示す手順に従って設定します;

        --------------- Figure 1 -----------------------------------------------------------------------------------
        • (0) select Accounts tab. 
        • (1) click on "+" in left pain. enter or select;
          • Email Address
          • POP Account in User Name
          • POP Account Passwoed in Password 
          • POP in Account Type 
          • pos01.itscom.net in Incoming Mail Server  
          • sos01.itscom.net in Outgoing Mail Server
        • (2) clic on "Sin In". ---> Figure 2
        --------------- Figure 2 -----------------------------------------------------------------------------------
        •   (3) uncheck "Automatically manage connection settings" in POP and SMTP  
          • confirm Port 995 in POP,  check "Use TLS/SSL" 
          • confirm Port 465 in SMTP, check "Use TLS/SSL"
        •  (4) click on to carry out this account setting.


        Figures 1 and 2,

        【感想】
         前回iTscomで、メイルの登録したには4年前でした。当時に比べると、受信(POP)/送信(SMTP)が同時に設定できた(Fig. 2)のは判りやすかった。「TLS/SSL」の設定が漸く入った。

        ついでにiPhoneとMacとのMail.appとで、設定の共有をして欲しいな。




        この記事の履歴
        1. 開始 2019-02-27-1540

        注目の投稿

        Terminalでの、なんちゃってViモドキ

        近頃、ようやくKarabiner-Elementsに慣れてきたので、 Terminalで動作する「擬似Vi-Mode」を作って見たので、ご紹介します。 『概要』 「擬似Vi-Mode」の所以は、方向キー「←↓↑→」を通常の「hjkl」ではなくて「jkil」としました。これ...