Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ターミナル雑記

stonriver
February 23, 2019

 ターミナル雑記

stonriver

February 23, 2019
Tweet

More Decks by stonriver

Other Decks in Programming

Transcript

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

     苫小牧高専 情報科学・工学系 undefined年  ソフトウェアテクノロジー部, 情報処理同好会  LOCAL学生部 趣味 :  ArchLinux, Vim, C++, Python, 自鯖運用, 読書 Go 活動 :  プログラミング教育活動, 技術系アルバイト,  ゲーム開発サークル運営, イベント・勉強会運営 お気持ち :  僕ここにいて良いのかな?
  2. 制御コード その視点で、ASCIIコードの制御コードをいくつか見てみましょう。 制御コード テレタイプにおける動作 現在の動作 エスケープコード SP 用紙を左に1文字分ずらす制御 “空白”を入力(非制御コード) -

    BS 用紙を右に1文字分ずらす制御 左1文字削除(制御コード) \b LF 用紙を上に1行分ずらす制御 次行に移動 \n CR 用紙を1番右へずらす制御 行頭に移動 \r OSによって改行コードが異なる事があるのはここが由来 Unix系はコンピュータに向けて最適化 (LF) Windowsはテレタイプ準拠(LFCR)
  3. エスケープシーケンス 以下は、エスケープシーケンスの種類の一部です。実際にはもっ と多くの種類が存在します。 制御シーケンス(コード)名 開始コード 効果 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. エスケープシーケンス 例えば、以下のようなエスケープシーケンスが存在します。 シーケンス 概要 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. エスケープシーケンス シーケンス 概要(抜粋) 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. エスケープシーケンス シーケンス 概要(抜粋) CSI Ps1 ; Ps2 ' z Ps1

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

    開始シーケンス カラーパレット(可変長) #P1;P2;P3;P4;P5 P1:番号, P2:カラーモード P3~P5: 色指定 ピクセルデータ [いろんな文字] 後述
  8. 実装例 このソフトウェアには、ざっくり次の機能があります。 機能 実装 指定ディレクトリのビットマップ画像を表示 Sixel Graphics 自動表示サイズフィッティング CSI 14;;tによるサイズ取得,

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