初歩のシェルスクリプトで遊ぶ[端末の256色カラーセレクタ(7)]

カラーパレットにカーソル表示する見えない数字

---- ${colorTableViewCode} -------------------------------------------
     1:0        12
     2:1        12
     3:2        12
     4:3        12
     5:4        12
     6:5        12
     7:6        12
     8:7        12
     9:0        -1
    10:8        12
    11:9        12
    12:10       12
    13:11       12
    14:12       12
    15:13       12
    16:14       12
    17:15       12
    18:0        -1
    19:232      8
    20:233      8
    21:234      8
    22:235      8
    23:236      8

デバッグモードで表示されるシェル変数の一つで、これがカラーパレット表示の設計図になってます。色の番号のみが並んだ、元の表形式データから、表の列数が変わっても画像の横幅を一定にする計算をして作ります。
インデックスカラー0番が12文字分の幅、同様に1番、2番と続き、9行目で改行。表示幅が負の数なら改行、というルールです。
ここから端末表示するための画像データを作るわけですが、問題はどうやって選択中の色を指し示すカーソルを重ねるか、ということ。
このシェル変数から画像データを作るときに、同時にカーソルも書き込んでしまうのがいちばん簡単で、それでもそこそこ動いてくれたんですが。

続きを読む

初歩のシェルスクリプトで遊ぶ[端末の256色カラーセレクタ(5)]

16色版v4.0

ファイルひとつにまるごとコピーして、実行権限つけて端末上で実行、でいける、といいけれど。
256色版の簡易版ではありません。16色と256色では、色の指定方法が異なるので。
Ubuntu20.04 xfce-terminal
無料・無保証で構わない人のみどうぞ。

続きを読む

初歩のシェルスクリプトで遊ぶ[端末の256色カラーセレクタ(4)]

バージョン3.1でいったん置いとく

入れようと思ってた機能は入れたんで、ここらでいったんスクリプトを置いときます。
こっちはメインの256色版。
2000行あるけれど、いちおうファイル一つにまとまってます。丸ごとコピーして実行権限つければいけるはず。
Ubuntu20.04,xfce-terminalあたりで、無料・無保証で構わない人のみどうぞ。
端末が違うと動かない機能があったりしますが、それも含めて端末のテストも兼ねてます。こっちの端末は太字が出ないんだな、とか。

続きを読む

初歩のシェルスクリプトで遊ぶ[sedのモヤモヤを整理したい(3)]

使いやすいコマンドに絞り、注意が必要なコマンドを避ける

sedのコマンドにも、よく使うコマンド、あまり使わないコマンド、があります。よく使うのはsコマンド、あまり使わないのはGNU拡張の「シェルでシステムのコマンドを実行するe」とか。
シェルスクリプトsedを真似するときでも、思ったより簡単に真似できるものもあれば、意外とややっこしいものもある。
コマンドを大雑把に分けてみます。

  • 「while read PATTERN_SPACE ; do~」で書き始めた場合に、比較的手軽に実装できるコマンドは実装する
  • 基本の「while read」ループを書き換える必要がある、たとえば「while true ;do~」にしなければならないコマンドは、除外する
続きを読む

初歩のシェルスクリプトで遊ぶ[sedのモヤモヤを整理したい(2)]

今回はパターンスペースとホールドスペースを、シェルスクリプト製の簡易sedに実装します。
内容は「整理したい(1)」で書いた内容の再説明になってますが、繰り返して噛み砕きます。

「2p」は「2行目を出力」ではなく「行番号カウンターが2のとき、変数『パターンスペース』内の文字を全て出力」

# 2行目にマッチして出力?
$ seq 1 3 | sed -e '2p'
1
2
2
3
# 2行目にマッチして削除?
$ seq 1 3 | sed -e '2d'
1
3

前回「整理したい(1)」で例にした、2行目を重複出力する例と、定番の2行目を削除するスクリプト
特に「指定した行を削除するには」という目的で使われたり紹介されたりする例ですが、「2」は「2行目を指定して」と説明されることがあるようです。これが誤解の元になる。

続きを読む