ラベル OS X の投稿を表示しています。 すべての投稿を表示
ラベル OS X の投稿を表示しています。 すべての投稿を表示

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 

2015-05-18

zsh: echo command

経緯


私は最近まで『改訂版 Mac OS Xターミナルコマンド・ポケットリファレンス、MINAKAMI Shinobu、2006第2版、技術評論社、ISBN4-7741-2877-5』を参考にしていました。でも「bash→zsh』に乗り換えると、流石に最近のMacに則した解説書が欲しくなりました。

そこで次の本を購入しました;

  • “Macintosh Terminal Pocket Guide Third release”, 
    • Daniel Barrett, 2012/7/2,
    • O’Reilly, ISBN: 978-1-449-32834-4.

疑問点


以前から釈然としていなかった「echoのオプション」を見ると
    ・MINAKAMI版, p53: 「-n」
    ・Barrett版, p170: 「-n, -e, -E」

zshを運行している私の経験から見ると、Barrett版が正しいと思います。

そこで、調べて見ました。結果を図1に示します;
 

Figure 1. ' shell built-in echo' and '/bin/echo'


大雑把にいえば;
  • 日常的に使っている「echo」は『shell built-in echo』である。
  • 日常的に使っている「man echo」は『/bin/echoのマニアル』である。

従って、zshで使っている「echo」の挙動を知るには、我々は図2の様な「zshのオンライン・マニュアル」を見るべきです。

と書きましたが、間違えでした。次の図3にお進みください。ただし、最新バージョンの確認には使えますので、図2はそのままとします。


Figure 2. zsh: Shell-Builtin-Commands:: echo
と書きましたが、間違えでした。次の図3にお進みください。


ターミナルでのzshマニュアルズ

Figure 3. “echo” part of the zshbuiltins.pdf displayed in a preview.app.

図2を書いている頃は、 私は「man zsh」だけがzshのオンライン・マニュアルと思っていました。でも、試しにターミナルで「man zshall」と叩くと、zshallがターミナル上に現れました! 当然「zshbuiltins」もあります。 zshの資料検索にとってこれはとてもありがたいことです。

『man→ pdf』の変換には、「man2pdf」という手作スクリプトを使っています。pdfにはコメントやブックマークを付けたりできるからです。


そこで「zshマニュアル(pdf)に対する簡易検索と表示」をするスクリプト(zzz)を試作しました。



Figure 4. A typical operation example of zzz.

pdf資料の検索に「grep」を使うと、不安定な出力が出ます。そこで「mdfind」で代用しています。

「mdfind」: 「Spotlight search」のターミナル版です。

echoの有効活用


「echo -E」は、改行区切りの処理に有用と思う。特に「\n, \t」がコンパクトに表示されるので、問題把握が迅速になると感じます。


メモ

  • 今後、コマンドとmanが食い違う場合、「where」を用いてコマンドが複数あるかどうかをチェックから始めよう。
  • zzzは安定したら、公開します。



____
この記事の履歴
  1.  開始 2015-05-18(月) 22:16:56 
  2.  追加 2015-05-23(土) 18:51:39 ターミナルでのzshマニュアルズ

2013-05-19

How to represent tab(\t) at sed command in bash script of os x

最近「tsp:tab-separated values」で、タブ(tab, \t)を他の文字列にする必要が有った。簡単に思えたが、ほとんどの「os x」に搭載された「bash中のsed」ではそう簡単でない事が判った。今後の為に纏めて置く。

以下に、説明の為に作成したスクリプト;

#!/bin/bash

#set -x

echo "=== $(basename $0): how to present tab in sed"
echo -e "== for $(bash --version | grep version)\n"

org="pqr    stu" # rとsの間にはタブ

echo "■ 次の原稿には、rとsの間にはタブがある;"
echo "  0.---「${org}」"

echo
echo  "■ タブをバレットに変えようとして、"
echo '■ 「sed -e "s/\t/•/"」にパイプしても、'
echo  "■ タブは其の儘で「t」が消えるだけ;"
echo "  1.---「${org}」"  | sed -e "s/\t/•/"


echo
echo  "■ タブを表す変数を生成する"
echo  '■ 方法1: t1="‹タブ押す›'
echo  '■ 方法2: t2=$(echo -e "\t\c")'
echo  '■■ 両者は等しい'

t1="    " #実際に「tab-key」を押した。
t2=$(echo -e "\t\c")

echo
echo '■ 「sed -e "s/${t1}/•/"」にパイプすると、タブは•に替わる'
echo "  2.---「${org}」"  | sed -e "s/${t1}/•/"

echo
echo '■ 「sed -e "s/${t2}/•/"」にパイプしてもOK'
echo "  3.---「${org}」"  | sed -e "s/${t2}/•/"

echo


echo ■ 参考資料に従って、1.の「'\'t」を「'"$'\''\t'\''"'」に書き換えて
echo '■ 「sed -e "s/"$''\t''"/•/"」にパイプしても、タブは•に替わる'
echo "  4.---「${org}」"  | sed -e "s/"$'\t'"/•/"

echo
echo ■ 同じ参考資料に従って、.bash_profileで「export mytab='$'\''\t'\'」と定義したので
echo '■ 「sed -e "s/$mytab/•/"」とパイプしても、タブは•に替わる'
echo "  5.---「${org}」"  | sed -e "s/$mytab/•/"
echo
echo 「上記、5.の方法が覚え易いし、安全だろう」

echo
echo "=== $(basename $0): end"

其の動作結果を示す;

u1@mmX75:~ $ test_tab
=== test_tab: how to present tab in sed
== for GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)

■ 次の原稿には、rとsの間にはタブがある;
  0.---「pqr    stu」

■ タブをバレットに変えようとして、
■ 「sed -e "s/\t/•/"」にパイプしても、
■ タブは其の儘で「t」が消えるだけ;
  1.---「pqr    s•u」

■ タブを表す変数を生成する
■ 方法1: t1="‹タブ押す›
■ 方法2: t2=$(echo -e "\t\c")
■■ 両者は等しい

■ 「sed -e "s/${t1}/•/"」にパイプすると、タブは•に替わる
  2.---「pqr•stu」

■ 「sed -e "s/${t2}/•/"」にパイプしてもOK
  3.---「pqr•stu」

■ 参考資料に従って、1.の「\t」を「"$'\t'"」に書き換えて
■ 「sed -e "s/"$\t"/•/"」にパイプしても、タブは•に替わる
  4.---「pqr•stu」

■ 同じ参考資料に従って、.bash_profileで「export mytab=$'\t'」と定義したので
■ 「sed -e "s/$mytab/•/"」とパイプしても、タブは•に替わる
  5.---「pqr•stu」

「↑の5.の方法が覚え易いし、安全だろう」

=== test_tab: end
u1@mmX75:~ $
 
【結論】 sedのなかで「\t」を使いたくなったら「$mytab」に置き換えるべし。

.bash_profileでの該当部分は;
export LANG=ja_JP.UTF-8
export mytab=$'\t'

【参考資料】
  1. http://mattintosh.hatenablog.com/entry/2013/01/16/143323
  2. bash Pocket Reference, O'REILLY, ISBN: 978-1-449-38788-4, p11, $' '
—————
この記事の履歴
  1. 開始 2013-05-19(日) 21:22:30 
  2. 修正 2013-05-20(月) 10:57:34 .bash_profile

2013-05-10

indented-text handling by using echo and here-document of bash on os x lion

KeyRemap4MacBookの調整の時に、動的に替わるxmlや複雑なxmlを作る事が多くなって来た。一般に、xmlが多量になるとインデント(indent)を確実にしないと、見通しが極度に低下する。更にKeyRemap4MacBookの特殊性として、「<autogen>タブ階層構造」と「<item>タブの階層構造」とが別々に意味を持つので、正しくインデントの必要性が高まって来た。

これらの「インデントされたテキスト(indented text)」を生成するときには、エスケープ・シークエンス(escape sequences)による出力 ;
  • 「エスケープ・シークエンスのオプションの付いたエコー・コマンド」
    • echo -e "\tHoge.$JJJ hoge\n"
を使っていた。しかし、量が増えて来たり、変数(variable, $JJJ)が入ってくると、作り間違えが急造して、修正が大変になってしまう。

そこで、不得意な「ヒア・ドキュメント(here document)」を使った具体例、echo_and_here-documentを作製したので、以下に説明する。なお、変数(variable, $JJJ)の処理は最後に触れます。

u1@mmX75:~/bin $ cat echo_and_here-document
#!/bin/bash

ex5() {

# EXAMPLE 5: basic "here document" wrapped in function, ex5    ###########
JJJ=$((JJJ+1))
cat <<EOF

<!-- EXAMPLE $JJJ: basic "here document" wrapped in function, ex5 -->
    <abc>
        efg, hij
    </abc>
   
EOF

}

################ Main ####################################################
echo  "$(basename $0): start"


# EXAMPLE 1: direct "echo with -e option" ################################
JJJ=1
echo -e "\n<!-- EXAMPLE $JJJ: simple \"echo with -e option\"\c"
echo -e " -->\n\t<abc>\n\t\tefg, hij\n\t</abc>"

# EXAMPLE 2: basic "here document" #######################################
JJJ=$((JJJ+1))
cat <<EOF

<!-- EXAMPLE $JJJ: basic "here document" -->
    <abc>
        efg, hij
    </abc>
   
EOF

# EXAMPLE 3: command substitution includes "here document" ###############
JJJ=$((JJJ+1))
ex3="$(
cat <<EOF

<!-- EXAMPLE $JJJ: "here document" included
                 by "command substitution:\$(...)"
                 and saved to variable, \$ex3.-->
    <abc>
        efg, hij
    </abc>
   
EOF
)"
echo "$ex3"

# EXAMPLE 4: basic "here document" redirect file, ex4. ###################
JJJ=$((JJJ+1))
cat <<EOF > ex4

<!-- EXAMPLE $JJJ: basic "here document" redirects to file, ex4 -->
    <abc>
        efg, hij
    </abc>
   
EOF
cat ex4
rm -f ex4

# EXAMPLE 5: basic "here document" redirect file in function ex5. ########
ex5 # just call function, ex5


# EXAMPLE 6: basic "here document" redirect file
#                 in external function ex6 at myUtuities ########
. myUtilities
ex6 # just call function, ex6

echo ""
echo "============= myUtilities ====================="
cat $HOME/bin/myUtilities | sed -e "s/^/contents: /"
echo "==============================================="

################ Main ####################################################
u1@mmX75:~/bin $


この実行結果は;

u1@mmX75:~ $ echo_and_here-document
echo_and_here-document: start

<!-- EXAMPLE 1: simple "echo with -e option" -->
    <abc>
        efg, hij
    </abc>

<!-- EXAMPLE 2: basic "here document" -->
    <abc>
        efg, hij
    </abc>
   

<!-- EXAMPLE 3: "here document" included
                 by "command substitution:$(...)"
                 and saved to variable, $ex3.-->
    <abc>
        efg, hij
    </abc>
   

<!-- EXAMPLE 4: basic "here document" redirects to file, ex4 -->
    <abc>
        efg, hij
    </abc>
   

<!-- EXAMPLE 5: basic "here document" wrapped in function, ex5 -->
    <abc>
        efg, hij
    </abc>
   

<!--
    EXAMPLE 6: basic "here document" wrapped
    in function, ex6() at external file, myUtilities
-->   
    <abc>
        efg, hij
    </abc>
   

============= myUtilities =====================
contents: #!/bin/bash
contents:
contents: ex6(){
contents:
contents: # EXAMPLE 6: basic "here document" wrapped in function, ex6 at myUtulities    ###########
contents: JJJ=$((JJJ+1))
contents: cat <<EOF
contents:
contents: <!--
contents:     EXAMPLE $JJJ: basic "here document" wrapped
contents:     in function, ex$JJJ() at external file, myUtilities
contents: -->   
contents:     <abc>
contents:         efg, hij
contents:     </abc>
contents:    
contents: EOF
contents: }
===============================================
echo_and_here-document: end
u1@mmX75:~ $

使った感想としては、利用目的に応じて;
  • 超簡単なら、EXAMPLE1
  • 簡単なら、EXAMPLE2
  • 繰り返しの利用なら、EXAMPLE3
  • ファイルとして保存なら、EXAMPLE4
  • 開発途中のファイルなら関数が使いよいかも、 EXAMPLE5
  • 開発が終わって、共通なユーティリティ・ファイルにするのもよい、EXAMPLE6
といった感じです。KeyRemap4MacBook関係では、圧倒的にEXAMPLE5らしそうです。

最後に変数(variable, $JJJ)の定義と演算ですが;
  • 数値代入:JJJ=5
  • 数値演算:KKK=$((JJJ*2))
実例;

u1@mmX75:~ $ JJJ=5
u1@mmX75:~ $ KKK=$((JJJ*2))
u1@mmX75:~ $ echo -e "\tJJJ=$JJJ, KKK=JJJ*2=$KKK"
    JJJ=5, KKK=JJJ*2=10
u1@mmX75:~ $

感想
  •  自信を持って、明確にヒア・ドキュメントを使えるようになった。
  • 「echo -e」の解説; 下記の本の「p71,72」が簡明で、その様に動作した。
    • Arnold Robbins, "bash Pocket Reference", O'REILLY, 2010
    •  ISBN: 978-1-449-38788-4 
  • 動作環境
    • Mac mini (mid 2011), Lion 10.7.5
    • bash --version
      • GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
____
この記事の履歴
  1. 開始 2013-05-10(金) 14:57:11 
  2. 修正 2013-05-12(日) 02:30:18 
  3. 追加 2013-05-13(月) 17:11:01 EXAMPLE6

2013-01-30

修飾キーの辞書登録

このところキーボード・ショートカットについて興味を持っている;
で、修飾キーの組み合わせを記述する機会が増えて来たので、辞書登録をしてみた;

図 操作キーと辞書登録と入力のヒント
  • ここで、「文字」のフォントとしては、「Lucida Grande, Regular, 36pt」 を用いて表示した。

【確認】
  • テスト:⎋ ⏏ ⌫ ⇧ ⌃ ⌥ ⌘ ↔ ← → ↖ ↘ ↕ ↑ ↓ ⇞ ⇟
  •  「Firefox 18.0.1」と「Safari 6.0.2」とで、上のテスト行の表示が異なるようだ。  Safariの方が上の図の「文字」列の中身に近いようだ。

【page up/down】
上の図は、「Excel 2011 for Mac」で作成した。作った直後は問題なかったが、何度も操作していると、「page up/down」の向きが替わってしまうのに気がついた。どうもMS系のフォントでは矢印の向きが逆の場合が在るようだ。ユニコードの設定で何らかの食い違いがあるのだろうか。


ーーーー
此の記事の経歴
  1. 開始 2013-01-30  (水) 22:01
  2. 追記 2013-01-30  (水) 23:24  【確認】
  3. 追加 2013-01-31  (木) 12:01  【page up/down】

2011-10-14

LionでのJava

どうやらAppleはJavaから離れつつあるようだが、
これを使ってみるかな。Javaといえば、GWT(Google Web Toolkit 2)もJavaか。

他方、AppleのXcodeでは、JavaでなくPythonが主役だろう。

素人としては、何を選択すれいいんだろう。AppleはDeveloperに会員として参加しても、英語の資料しか手に入りそうになさそうだが。GWTに関してはどうかな?


ーーーー このポストの履歴
  1. 開始 2011-10-14 (金) 21:09

2011-10-13

Lion (10.7.1 → 10.7.2) にアップデート

最近、マシンの保守をする時間がなくて、放置していましたが、ソフト・ウェアアップデートに「Mac OS X Lion 10.7.2」が出たので、速攻でアップデートしました。
 
不思議と、このBloggerの入力が安定しました。当面、様子を見てみよう。なお、私の常用ブラウザはFirefox7.0.1です。ひょっとすると「ことえり」の処理速度が向上して、bloggerのカーソル処理が破綻しなくなったのかなぁ。

理解できないのは、Finderのサイドバーのアイコンが墨絵のような柄のままである。世には雪豹時代のアイコンを配布している所もあるらしいが、なぜ判りにくい表示を続けるのだろうか。


ーーーー このポストの履歴
  1. 開始 2011-10-13 (木) 11:55


2011-09-30

「Mac OS X」の立ち上がり挙動

このところ「Mac mini (mid 2011)」を安定化するのに手間取っている。まあ、段々に安定化しているものの、ブート処理がどうなっているのか不思議な感じがして来ている。

一方、ClipMenuをLion10.7.1で動作させるとともに、JavaScript関係を調べていて、偶然に;
を拝見した。余裕ができたら、勉強させていただきたい。


ーーーー このポストの履歴
  1. 開始  2011-09-30 (金) 20:54

注目の投稿

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

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