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

ショートカットと端末 / shortcut & terminal

ショートカットと端末 / shortcut & terminal

とみたまさひろ

February 22, 2024
Tweet

More Decks by とみたまさひろ

Other Decks in Technology

Transcript

  1. macOSのテキスト編集のショートカット(control+何か) A 行頭に移動 N 下に移動 B 左に移動 O 1行挿入 C

    P 上に移動 D 右の文字削除 Q E 行末に移動 R F 右に移動 S G T 左右の文字入替 H 左の文字削除 U I V 下スクロール J W K 行末まで削除 X L 再表示(カーソル位置を中心に) Y 貼り付け(アプリによる) M Z
  2. macOS shell macOS shell A 行頭に移動 行頭に移動 N 下に移動 履歴の下に移動

    B 左に移動 左に移動 O 1行挿入 改行 C 中断 P 上に移動 履歴の上に移動 D 右文字削除 右文字削除 / 入力終了 Q 出力再開 E 行末に移動 行末に移動 R 履歴を上に検索 F 右に移動 右に移動 S 出力停止 G 中断 T 左右の文字入替 左右の文字入替 H 左文字削除 左文字削除 U 行頭まで削除 I タブ V 下スクロール 次の文字そのまま J 改行 W 左の単語削除 K 行末まで削除 行末まで削除 X prefix L 再表示 再表示 Y 貼り付け 貼り付け M 改行 Z 停止 macOS + shell
  3. macOS shell Emacs macOS shell Emacs A 行頭に移動 行頭に移動 行頭に移動

    N 下に移動 履歴の下に移動 下に移動 B 左に移動 左に移動 左に移動 O 1行挿入 改行 1行挿入 C 中断 prefix P 上に移動 履歴の上に移動 上に移動 D 右文字削除 右文字削除/入力終了 右文字削除 Q 出力再開 次の文字そのまま E 行末に移動 行末に移動 行末に移動 R 履歴を上に検索 上に検索 F 右に移動 右に移動 右に移動 S 出力停止 下に検索 G 中断 中断 T 左右の文字入替 左右の文字入替 左右の文字入替 H 左文字削除 左文字削除 左文字削除 U 行頭まで削除 繰り返し I タブ タブ V 下スクロール 次の文字そのまま 下スクロール J 改行 改行 W 左の単語削除 範囲削除 K 行末まで削除 行末まで削除 行末まで削除 X prefix prefix L 再表示 再表示 再表示 Y 貼り付け 貼り付け 貼り付け M 改行 改行 Z 停止 停止/最小化 macOS + shell + Emacs
  4. 端末の機能 macOS shell Emacs macOS shell Emacs A 行頭に移動 行頭に移動

    行頭に移動 N 下に移動 履歴の下に移動 下に移動 B 左に移動 左に移動 左に移動 O 1行挿入 改行 1行挿入 C 中断 prefix P 上に移動 履歴の上に移動 上に移動 D 右文字削除 右文字削除/入力終了 右文字削除 Q 出力再開 次の文字そのまま E 行末に移動 行末に移動 行末に移動 R 履歴を上に検索 上に検索 F 右に移動 右に移動 右に移動 S 出力停止 下に検索 G 中断 中断 T 左右の文字入替 左右の文字入替 左右の文字入替 H 左文字削除 左文字削除 左文字削除 U 行頭まで削除 繰り返し I タブ タブ V 下スクロール 次の文字そのまま 下スクロール J 改行 改行 W 左の単語削除 範囲削除 K 行末まで削除 行末まで削除 行末まで削除 X prefix prefix L 再表示 再表示 再表示 Y 貼り付け 貼り付け 貼り付け M 改行 改行 Z 停止 停止/最小化
  5. 端末(物理) VT100 • 1978年 • 80桁 x 24行 • 高機能(当時)

    • かなり人気だったらしい • デファクトスタンダードになる • たいていの端末エミュレータでサポート https://ja.wikipedia.org/wiki/VT100
  6. 端末 • 端末で「A」キーを押すと0x41 データがホストに送信される • ホストが 0x41 データを送信すると端末に「A」が表示される • 端末で送受信するデータは基本的に文字

    • 文字しか送受信できない • 矢印キーとかファンクションキーの入力は? • 画面上の任意の位置にカーソルを移動するには? • 色を変えるには?
  7. エスケープシーケンス ESC + いくつかの文字の組み合わせで一つの機能を表現 xterm の場合: • 右矢印キー(kcuf1) : ESC

    O C • カーソル位置移動(cup) : ESC [ row ; col H • 文字色変更(setaf) : ESC [ 3 color m エスケープシーケンスは端末によって異なる
  8. terminfo データベース 端末ごとのエスケープシーケンス定義 $ infocmp
 # Reconstructed via infocmp from

    file: /lib/terminfo/x/xterm-256color
 xterm-256color|xterm with 256 colors,
 am, bce, ccc, km, mc5i, mir, msgr, npc, xenl,
 colors#0x100, cols#80, it#8, lines#24, pairs#0x10000,
 acsc=`affggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
 bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
 clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=\r,
 csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
 cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
 cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
 cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
 dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
 ...

  9. 行編集 • 改行するまではプログラムにデータは渡さない • BS(0x08)またはDEL(0x7F)で一文字消したり • control W(0x17)で単語を消したり • control

    U(0x15)で行削除したり • control D(0x04)で入力を終わらせたり • 矢印キーやcontrol A,B,E,Fでの移動とかはできない $ cat
 abcdefg⏎ ← 入力
 abcdefg ← エコーバック

  10. シグナル • control C でプログラムが終了する (SIGINT) • control Z で停止

    (SIGTSTP) • control \ でコアダンプして終了する (SIGQUIT) フロー制御 • control S で出力停止 • control Q で再開
  11. 設定一覧 $ stty -a
 speed 38400 baud; rows 24; columns

    80; line = 0;
 intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
 eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
 werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
 -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
 -ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
 -iuclc -ixany imaxbel -iutf8
 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
 echoctl echoke -flusho -extproc

  12. control C でも control D でも終わらなくする control S で停止しないようにする bash等で

    control S でヒストリの前方検索ができるようになる $ stty intr undef eof undef
 $ cat
 ^C^C^C^D^D^D
 
 $ stty stop undef
 

  13. エコーバックしない パスワードの入力とかにいいかも $ stty -echo
 
 $ echo -n "Password:

    "; stty -echo; read pw; stty echo; echo "\nyour password is $pw"
 Password: (入力が見えない)
 your password is hogehoge
 
 

  14. 行編集モードオフ 1バイトずつプログラムに渡される $ ruby -e 'loop{puts $stdin.read(1)}'
 abcd⏎ ← 入力


    a
 b
 c
 d
 
 $ stty -icanon; ruby -e 'loop{puts $stdin.read(1)}'
 aa
 bb
 cc
 dd
 

  15. 端末がらみのシグナル SIGHUP • 端末が切断されたときにプロセスに対して送られる • デフォルト動作は終了なので何もしてなければプロセスが終了する • デーモンに設定ファイルをリロードさせる用途は何由来なんだろ 🤔 •

    端末閉じるとバックグラウンド実行したやつも終了することもある • disown で端末から切り離せる $ sleep 99999 &
 [1] 99179
 $ jobs
 [1] + running sleep 99999
 $ disown %1
 $ jobs 
 $ 

  16. SIGTSTP • control Z で停止したときに送られる • デフォルト動作は Stop SIGCONT •

    シェルの fg / bg コマンドでプロセスを再開したときに送られる • デフォルト動作は Continue SIGTSTP を無視すると control Z で止まらなくなる $ bash -c 'trap "" SIGTSTP; sleep 9999'
 ^Z^Z^Z