ターミナル雑記

Bb144e2ae10acf17b7b60812017f2df6?s=47 stonriver
February 23, 2019

 ターミナル雑記

Bb144e2ae10acf17b7b60812017f2df6?s=128

stonriver

February 23, 2019
Tweet

Transcript

  1. 3.

    自己紹介 Twitter : @strvert GitHub : strvworks HN:すとんりばー 所属 :

     苫小牧高専 情報科学・工学系 undefined年  ソフトウェアテクノロジー部, 情報処理同好会  LOCAL学生部 趣味 :  ArchLinux, Vim, C++, Python, 自鯖運用, 読書 Go 活動 :  プログラミング教育活動, 技術系アルバイト,  ゲーム開発サークル運営, イベント・勉強会運営 お気持ち :  僕ここにいて良いのかな?
  2. 38.

    制御コード その視点で、ASCIIコードの制御コードをいくつか見てみましょう。 制御コード テレタイプにおける動作 現在の動作 エスケープコード SP 用紙を左に1文字分ずらす制御 “空白”を入力(非制御コード) -

    BS 用紙を右に1文字分ずらす制御 左1文字削除(制御コード) \b LF 用紙を上に1行分ずらす制御 次行に移動 \n CR 用紙を1番右へずらす制御 行頭に移動 \r OSによって改行コードが異なる事があるのはここが由来 Unix系はコンピュータに向けて最適化 (LF) Windowsはテレタイプ準拠(LFCR)
  3. 43.

    エスケープシーケンス 以下は、エスケープシーケンスの種類の一部です。実際にはもっ と多くの種類が存在します。 制御シーケンス(コード)名 開始コード 効果 ESCシーケンス \e, \033, \x1b

    全般的な制御。また、あらゆるシーケンスの開 始に含まれる。ASCIIに存在。 CSIシーケンス ESC + [ , ( \x1b[ ) Control Sequence Introducer 様々な端末コントロール、情報取得 DCSシーケンス ESC + P, ( \x1bP) Device Control String OSCシーケンス ESC + ], (\x1b]) Operating System Command OSに関係する制御。ウィンドウ情報など。
  4. 45.

    エスケープシーケンス 例えば、以下のようなエスケープシーケンスが存在します。 シーケンス 概要 CSI Ps A カーソルを Ps 行上に移動する。

    CSI Ps B カーソルを Ps 行下に移動する。 CSI Ps1 m 以降の出力背景をPs1 に指定した色に変更。 (赤=41, 緑=42, …..) CSI Ps c 端末特性を報告する。これを見ると何に準拠しているかわかる ESC # 8 画面を全部Eで埋める (描画範囲とかのテストに使うらしい ) シェルで試す例:  for i in {47..40}; do echo -e ’\x1b[’${i}’m’; done  // (PARTY)
  5. 46.

    エスケープシーケンス シーケンス 概要(抜粋) CSI Ps1 ; Ps2 ; Ps3 t

    Ps1 = 1 ウィンドウを通常表示状態にする。 = 2 ウィンドウを最小化する。 = 3 ウィンドウ位置を Ps2, Ps3 に移動する。 = 4 ウィンドウサイズを高さ Ps2 ドット, 幅 Ps3 ドットに変更する。 = 5 ウィンドウを前面に移動する。 = 6 ウィンドウを背面に移動する。 = 10 端末のフルスクリーンモードを変更する。 Ps2 = 0 フルスクリーン状態を解除する = 1 フルスクリーン状態にする = 2 フルスクリーン状態を変更する(トグル) シェルで試す例:  echo -e ’\x1b[3;100;100t’ // (ウィンドウを左上から100, 100に移動) echo -e ’\x1b[10;1;t’ // (ウィンドウをフルスクリーンに!) だんだんCUIを超越してくる
  6. 47.

    エスケープシーケンス シーケンス 概要(抜粋) CSI Ps1 ; Ps2 ' z Ps1

    = 0 ロケータ報告を無効にする = 1 ロケータ報告を有効にする = 2 ワンショットモード。 Ps2 = 0 文字モード。2 と同じ。 = 1 ピクセルモード。位置をピクセル単位で報告する。 = 2 文字モード。位置を文字単位で報告する。 CSI ' | ウィンドウ上のロケータ (マウスカーソル)の位置、ボタン状態などを報告。ロケータ報告が 有効化されている必要がある。 戻り値が発生しはじめる 各ターミナルが対応しているかはともかく、本当に多くのエスケープシーケンスが 存在するので、見ると面白いです。 Xtermが対応している制御シーケンス : https://invisible-island.net/xterm/ctlseqs/ctlseqs.pdf
  7. 65.

    Sixel Graphics Sixel Graphicsは以下のようなエスケープシーケンスに よって表される画像フォーマットです。 役割 シーケンス 詳細 Sixel開始 \x1bPq

    開始シーケンス カラーパレット(可変長) #P1;P2;P3;P4;P5 P1:番号, P2:カラーモード P3~P5: 色指定 ピクセルデータ [いろんな文字] 後述
  8. 71.
  9. 74.

    実装例 このソフトウェアには、ざっくり次の機能があります。 機能 実装 指定ディレクトリのビットマップ画像を表示 Sixel Graphics 自動表示サイズフィッティング CSI 14;;tによるサイズ取得,

    termiosによる非カノニカルモード キャッシュによる読み込みの高速化 普通に書いた キーボード操作の受付 termiosによるエコー非有効化 非カノニカルモード
  10. 77.