2017-06-04

zsh: ~/Libraryの非可視/可視を設定するトグル型スクリプト

•jp• zsh: ~/Libraryの非可視/可視を設定するトグル型スクリプト
•us• zsh: Toggle type script to set invisible/visible of ~/Library

昨年、Yosemiteから次期OSに移行するときに、~/Libraryの非可視/可視を決めるスクリプトの名前を忘れてしまったので、トグル型のスクリプト(toggleLibrary)に書き換えました。

KarabinerはSierraでは動作しないので、まだYosemiteです。次期バージョンへの移行のに備えて、トグル型スクリプト(toggleLibrary)に改造しました。
    • これなら「1つの名前だけを覚えるだけ」なので記憶力低下対策に有効です。
      Terminal.appで「toggleLibrary↩︎」するときに、Finderで~/のしたを同時に見ていると、~/Libraryが非可視/可視がすぐに変更されるのが確認できます。
      • Terminal作業は慌てると大きなミスに繋がるので、Finderでの同時確認は大切だと思います。


      トグル型スクリプト(toggleLibrary)のソース
        #!/bin/zsh 
        
        # toggleLibrary: toggle file flag ("hidden/shown") for targetFile.
        
        
        # Usage: toggleLibrary↩
        
        cd $HOME
        
        # default file
        targetFile="Library"
        
        llO=$(ls -lO)
        hideT=$(echo $llO | grep "$targetFile" | grep hidden)
        
        if [ "$hideT" = "" ]
        then
         #echo " show -> hide"
         chflags hidden "$targetFile"
         echo "• "$targetFile" hidden from GUI(Finder)"
        else 
         #echo " hide -> show"
         chflags nohidden "$targetFile"
         echo "• "$targetFile" shown in GUI(Finder)"
        fi
        

        • 「ls -lO」は、「man chflags」を参考にしました。
        • AppleのFinderは、ますます非可視攻勢を拡大するのだろうか?


        この記事の履歴
        1. 開始 2017-06-04-1509
        2. 修正 2017-06-14-2113 httpsにするとSyntaxHighliterが動作不良のチェック時に中に発見。


        2017-04-14

        Numbers: X軸に対する多重Y軸の散布プロットを描く



        *jp title* Numbers: X軸に対する多重Y軸の散布プロットを描く
        •en title• Numbers: Draw a scatter plot of multiple Y axes with respect to X axis



        前回の記事を書いたあとで、見易い散布チャート(プロット)が欲しくなった。


        そういえば、昔に書いた記事があったのを思い出した;
               
               
        この記事に従ってプロットしようとしたが、動作しない。 現在利用中の「Numbera help」を見ると、ヘッダ行を含むテーブル全体を選択したてから、チャート(プロット)の種類から、「2D Scatter Plot」を選択するらしいことが分かりました。

        あとはトライ&エラーでなんとかできました。図1がその最終成果です。

        Figure 1













        問題点は上記の操作が複雑なステップ数(6)に渡って複雑です。記憶力や思考力の劣化が激しい自分自身の為に、ステップごとにスクリーン・ショットにすることにしました。

        STEP 1

        STEP 1

        STEP 2

        STEP 2

        STEP 3

        STEP 3

        STEP 4

        STEP 4


        STEP 5

        STEP 5


        STEP 6

        STEP 6


        TIPS 1

        TIPS 1

        TIPS 2

        TIPS 2
        •  「 STEP 6」の完成チャートを選択して、サイド・バー中の「Chart Style」の追加ボタン(+ボタン)をクリックすると、一見すると「カラー」の散布プロットのスタイルができる。
        • 新たに「Table 2」 を作り、上記のスタイルを適用しても、完全に一致しない。
        • でも初めから設定し直すよりは楽だ。


           感想

          1. 元気だった頃は、工作する前にノートを元にCADで作図をして準備した。
          2. 最近はノートを元にテーブルやチャートを作るだけで、チェックが巧くできる。
          3. 「Numbers Help」で説明不足と感じたのは、
            1. 「STEP 2]での『Edit Data References』は「Call for  Y -Series Selector」ではないか?
            2. 「STEP 3」での黒い部分(  Y Z U V )は「Series Button」といった名前が欲しい。



            この記事の履歴

            1. 開始2017-04-14-09:51



            2017-04-12

            Numbers: 列ベクトルから成るテーブルにセル名を付ける


            Numbers: 列ベクトルから成るテーブルにセル名を付ける
            Numbers: Attach a cell name to a table composed of column vectors


            最近、小さな列ベクトルの処理が頻繁になってきたので、Excelから年寄りに優しそうなNumberesに変えてみました;

            • Numbers version 3.6.2(2577) on OS X 10.10.5

            小さな列べクトルからなる小さなテーブルが多くなってくると、各々のセルに固有の名前が欲しくなります。Excelからの推察で「セルに名前を挿入」などを探したのですがヒットしません。Numbersでは表(Table)のヘッダ行を定義すれば、その下の列にはセル名として操作できるようです。


            Numbersでの実例を図1に示します;

            • 「Teble 1」にはヘッダ行に「X, Y, Z」が(A2, B2, C3)にあります。

            Xが独立変数で、Yは「同じ行のXの値」の自乗に、Zは「同じ行のXの値」に2のか加算、;
            • Xべクトル:A3~A11
            • Yべクトル:B3~B11; (B3の値)=(A3の値)^2,...,(B11)..
            • Wべクトル:C3~C11; (C3の値)=(A3の値)+2,...,(B11)..

            Figure 1

               
            図中で「B5のセル中の関数」を表示しているように、引用セルは「A5」であり「X」の表示はありません。

            右の「Table 2」に示したように,「Numbers Preferences > Gneral」での「Cell References」のテェックが外れていたのが問題であったようです。


            これをチェックすると、図2のように巧くいきました;

            Figure 2
            面白いのは、B5のセルの関数表示をしているのに、A2だけでなくX列ベクトルがハイライトされていることです。



            まとめ
            • テーブルで、ヘッダ行を明示的に定義するべし
            • 「Cell References」のテェックするべし

            感想
            • セル名で関数を定義できると、見通しの良い式になるので、制作の負担が軽減できる。
            • 「Cell References」の設定のディフォールトは「テェック」が正しくないか?
            • X軸に対する多重Y軸の散布プロットを描きたくなってきた...。



            この記事の履歴

            1. 開始2017-04-12-14:27


            2016-06-20

            zsh: 現在のディレクトリ中のファイル名の「特定部分A」を「特定部分B」に変えるスクリプト


            zsh: 現在のディレクトリ中のファイル名の「特定部分A」を「特定部分B」に変えるスクリプト
            zsh: Script to change the "specific part-A" to "specific part-B" of file-names in a current directory


            概要


            私は、Firefoxの外部CSS(Profile/chrome/userContent.css)をスクリプト経由で操作したくなりました。他方、細かなCSSの操作はStylishでしています。これらの為に、ファイル名を一括して変更するスクリプトが必要になりました。「old2new」がその答えで、具体例とソース・コードを以下に示します。


            具体例

            Figure 1: Demonstration of "old2new"




            ソース・コード(old2new)



            #!/bin/zsh 
            
            # USAGE: old2new OLD NEW↩
            
            # FUNCTION:
            #   1) 変えたいファイルがあるディレクトリに移動
            #   2) ファイルの「変ええたい一部」を$1(OLD)に入れる
            #   3) 「その変更後の値」を$2(NEW)に入れる
            #     NEWは何もなし("")でも可。
            #   4) *${OLD}* --> *${NEW}*
            
            # 2016-06-19-21:52
            
            ###############################################################################
            # list current dir: % old2new ↩
            if [[ ( $1 == "" ) && ( $2 == "") ]] ; then
              echo " • list of current dir"
             ls -dlG *
             exit
            fi
            
            
            ###############################################################################
            # for: % old2new OLD NEW↩
            
            old="$1" # specific part-A
            new="$2" # specific part-B
            
            
            myls=( ${(f)"$(ls -d *)"} )
            j=$((0))
            for file in $myls ; do
             [[ -d "$file" ]] && continue
             [[ -f "$file" ]] || continue
             
             new_file=$( echo "$file" | grep "$old" | sed "s%$old%$new%" )
             [[ "$new_file" == "" ]] && continue
             j=$((j+1))
             echo -n "  • $j " 
             mv -fv "$file"  "$new_file"
            done
            
            if [[ $j -eq 0 ]]; then
             echo " •• old file: *${old}* not detected"
            else
             echo " •• ---------------------------------------------------------------------- "
             ls -dlG *"${new}"*
            fi
            


            感想


            時々、このようなスクリプトを作ろうかと思ったが、面倒くさいのでサボっていた。もう少し頑張れば、連番の付与もできそうだ...。


            この記事の履歴

            1. 開始2016-06-20-01:16




            2016-05-30

            zsh: JavaScripを使って「Terminal.appのカラムや行」を設定する

            zsh: JavaScripを使って「Terminal.appのカラムや行」を設定する
            zsh: To sett columns and raws of Terminal.app by using JavaScript

            経緯


            JavaScriptを練習するのに、スクリプト・エディタを使っています。さらにTerminalに於いてjscを使っています。
            • /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc
            • OS: Yosemite  10.10.5 (14F1808)
            その練習課題として、Terminal.appの設定を作ってみようと考えました。検索すると最適なスクリプトがありました;

            これを基にして、"Script Editr"の”Window nenu -> Library”からTerminal.appを見ながら、完全設定をしようと思いましたが、なんと肝心んな16色のカラー設定やフォントの文字間隔、行 間隔の設定の項目が無くて、頓挫しました。

            次の総括的な解説中の「コマンド・ライン引数の使用」を参考して、zshのスクリプト(txy)を作りました。

            このスクリプトは、terminal作業の処理を次々にスクリーン・ショットに保存していくときに、意外と便利なので紹介します。



            動作例


            図1はターミナルが呼ばれた直後です。最後の設定(幅77x行10)となっています。
            Figure 1 Just opened Terminal which preserve precious columns & raws.

            そこで「% txy 80↩️」とすると幅だけが80に変わり、図2のように(幅80x行10)となります。
            Figure 2. "txy 80" re-sized only columns to 80.

            さらに 「% txy 82 22↩️」とすると幅と行が同時に変わり、図3のように(幅82x行22)となります。
            Figure 3. "txy 82 22" re-sized columns & raws to (82x22)

            最後に「% txy↩️」とすると規定値(幅80x行40)となります、図4.
            Figure 4. "txy" re-sized to dafaut value (80x40).





            スクリプト: txy


            #!/bin/zsh 
            
            # txy: default terminal resized to x*y
            #           X: Number of columns for default Terminal.app
            #           Y: Number of rows for default Terminal.app
            # USAGE:
            #         txy↩  -----> (80*40)     : defaut  ----------------------> Fig. 4
            #         txy X↩   --> (X*Y0)      : Y0='previous value'  ---------> Fig. 2
            #         txy X Y↩  -> (X*Y)       : set both of columns*raws  ----> Fig. 3. 
            #         terminal opens with previous columns*raws:  ------------- > Fig. 1
                # 2016-05-07(土) 12:36:43  by mNeji
                # 2016-05-12(木) 11:55:07 set_JS, get_JS
            
            
            ###############################################################################
            set_JS() {
            # Execute $JS as Javascript. Throw unwanted output away to /dev/null
                osascript -l JavaScript -e "$1" > /dev/null
            }
            
            ###############################################################################
            get_JS() {
            # Execute $JS as Javascript. The output is printed on standard output(screen)
                osascript -l JavaScript -e "$1"
            }
            
            
            ########################### main ##############################################
            # Reading current setting (X0•Y0) & display:
                td="Application('Terminal').defaultSettings"
                X0=$(get_JS "$td.numberOfColumns()")
                Y0=$(get_JS "$td.numberOfRows()")
                echo -n "terminal current: (${X0}x$Y0)  -->"
            
            # Setting: (X, Y)
                case $# in
                    0) X=80; Y=40;;
                    1) X=$1; Y=$Y0;;
                    2) X=$1; Y=$2;;
                    *) X=$1; Y=$2;;
                esac
            
            # Prepare JavaScript block for default Terminal Setting: ($X, $Y) 
                XYdataBlock="
                trmd =     Application('Terminal').defaultSettings
                    trmd.numberOfColumns = $X
                    trmd.numberOfRows = $Y
                "
                set_JS "$XYdataBlock"
                echo " resized: (${X}x${Y})\a"
            



            zshで「osascript -l JavaScript -e JavaScript-commands」を使えば、JavaScript-commandsが実行できます。問題は、JavaScript- commandsは設定値を常時標準出力に出すことです。このような場合には「set_JS」関数を呼び出して、不要な出力を/dev/nullに捨てて います。
            • 例1)
              • set_JS "$XYdataBlock"

            逆に、設定を読み取りたいコマンドの場合は、「get_JS」関数により出力させて、それを変数に代入させています。
            • 例2)
              • X0=$(get_JS "$td.numberOfColumns()")


            感想


            自力でアプリケーションのPreferencesを操れてうれしい。JavaScriptをshellの一つとして「#!/bin/javascript」とか「#!/bin/jsc」とか出来ないか? それとも「#!/bin/swift」の方が早かったり?


            この記事の履歴
            1. 開始 2016-05-30(月) 23:18:39


            2016-05-27

            /Volumes内のドライブのUUIDをリストするスクリプト

            5日ほど前に、Yosemiteで 「Update 2016-003」を実施しました。その後3日ほどしてから、DiskUtilで見ると、システム・ドライブの表示順序が不規則に入れ替わるようになりま した。「Apple サポート・コミュニティ: Mac OS X Technologies(Japan)」でこの現象を質問中です。
            少なくとも「/etc/fstab」に「ドライブ毎に、UUID、種類、名前」をリストする必要があるようです。そこで、/Volumesの中にあるドライブのUUIDをリストするスクリプト、uuidsを作ったのでご紹介します。


            terminalでの動作結果
            Figure uuids action at terminal



            スクリプト: uuids

            #!/bin/zsh 
            #
            # uuids: list UUIDs in /Volumes/*
            #
            # USAGE: uuids↩
            #_
            # 2016-05-27(金) 18:11:14 
            #
             
            get_uuid(){
             #diskutil info "$1" | grep "Disk / Partition UUID:" | sed 's%[^0-9A-Z-]%%g' 
             diskutil info "$f" |grep 'Disk / Partition UUID:' |\
              sed 's%Disk / Partition UUID:    %%' | tr -d ' '  
            }
             
             
            mylc=( ${(f)"$(ls  /Volumes )"} )
            
            echo "  #  UUIDs in /Volumes                      Drive Names"
            echo " --  ------------------------------------  -----------------------------"
             
            j=$((0))
            for f in ${(O)mylc} ; do
             j=$((j+1))
              
             myu=$(get_uuid "$f")
             
              printf " %2d  %s  %s\n" $j $myu $f
            done
            


            この記事の履歴
            1. 開始2016-05-27(金) 23:18:54

            2016-04-16

            ウェブ安全色によるzshのプロンプト設定

            少し前に、アップル・サポート・コミュニティでの論議、
            で参考になる論議をいただいています。現在大雑把な方向を理解できたので、ターミナルからの色付き出力を;Web colors の説明にある
            に従って、系統的に操作するユーティリティを検討中です。

            するとターミナルのプロンプトの色もウェブ安全色にしたくなりました。幾つかのサイトに解説がありましたが、何れも正常に動作しませんでした。そこで、日本語のzsh解説書、「zshの本: Book on zsf、p103, 表4.3 文字表示属性を変えるエスケープシーケンス」を参考に、トライ&エラーしました。汚いですが雰囲気が判ると思うので、その表の部分を引用させていただきます。

            Table 4.3, Escape sequences controlling attributes of character display.
            from  p103, "Book on zsh"(Japanese edit.), Auther: HIROSE Yuuji,
            2009-07-25, ISBN978-4-7741-3864-0.  


            ウェブ安全色を「X=5」の拡張として書き出したところ、上手くいったので以下に紹介します。設定は「.zshrc」の中で行いました。コメント・アウトされた2行(PROMPT, RPROMPT)が実際の設定です。

            ##---- Step 4/4) Prompt: -------------------------------------------------------
            #    %n=UserName, %m=MachineName, "%4~"='compact dir display'
            #-------------------------------------------------------------------------------
            # 2014-11-08(土) 11:12:35 : Bash & Zsh
            #------------------------
            #    export PROMPT='%B%F{cyan}%K{blue}%n@%m[%4~]%#%k%f%b '
            #    export RPROMPT='%B%F{cyan}%K{blue}%D{%H:%M:%S}%k%f%b'
            #-------------------------------------------------------------------------------
            # Web safety color: 2016-04-12(火) 20:44:58 Web Safty Colors
            #------------------------------------------------------------------------------
            #                                              ~cyan 51,                     ~Blue
                export PROMPT=$'%{\e[1;38;5;51m%}%{\e[48;5;21m%}%n@%m[%4~]%#%{\e[0m%} '
               export RPROMPT=$'%{\e[1;38;5;51m%}%{\e[48;5;21m%}%D{%H:%M:%S}%{\e[0m%} '
            #
             上記のプロンプト設定と、ターミナル16色の設定とを、ターミナルでのユーティリティwscInfoで示した結果を図1に示します;
             Figure 1. Terminal 16-colors, Cursor colors, Prompt colors.

            上記の色はすべてウェブ安全色ですが、重複がないようにしています。気になるのは、#15
            の白いバックグラウンドが白い文字の「231」よりも若干灰色になっているところです。「OS X」の不可思議な振る舞いの一つかも知れません。
            環境:
            • OS X Yosemite Version 10.10.5
            • Terminal.app 2.5.3
            • zsh 5.0.5 (x86_64-apple-darwin14.0)


            なお、wscInfoは一番初めにお話ししたサイトの「2016/04/12 0:16 」の記事(2.2 wscInfoのリスト)で公開しています。


            この記事の履歴
            1. スタート2016-04-16(土) 18:21:25 

            注目の投稿

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

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