Submit Search
Upload
Emacs上のターミナルを最強に
•
1 like
•
13,440 views
Lintaro Ina
Follow
2012-10-20 @関西Emacs#x06
Read less
Read more
Software
Report
Share
Report
Share
1 of 37
Download now
Download to read offline
Recommended
キメるClojure
キメるClojure
Yoshitaka Kawashima
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較
beyond Co., Ltd.
トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
Takashi Hoshino
計算可能実数とは
計算可能実数とは
Yoshihiro Mizoguchi
統計的係り受け解析入門
統計的係り受け解析入門
Yuya Unno
Paxos
Paxos
nobu_k
[DL輪読会]Parallel WaveNet: Fast High-Fidelity Speech Synthesis
[DL輪読会]Parallel WaveNet: Fast High-Fidelity Speech Synthesis
Deep Learning JP
Scalar DB: Universal Transaction Manager
Scalar DB: Universal Transaction Manager
Scalar, Inc.
Recommended
キメるClojure
キメるClojure
Yoshitaka Kawashima
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較
beyond Co., Ltd.
トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
Takashi Hoshino
計算可能実数とは
計算可能実数とは
Yoshihiro Mizoguchi
統計的係り受け解析入門
統計的係り受け解析入門
Yuya Unno
Paxos
Paxos
nobu_k
[DL輪読会]Parallel WaveNet: Fast High-Fidelity Speech Synthesis
[DL輪読会]Parallel WaveNet: Fast High-Fidelity Speech Synthesis
Deep Learning JP
Scalar DB: Universal Transaction Manager
Scalar DB: Universal Transaction Manager
Scalar, Inc.
Pythonのシグナル処理
Pythonのシグナル処理
Atsuo Ishimoto
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
[DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient Descent
[DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient Descent
Deep Learning JP
Performance Comparison of Mutex, RWLock and Atomic types in Rust
Performance Comparison of Mutex, RWLock and Atomic types in Rust
Mitsunori Komatsu
Visualizing Data Using t-SNE
Visualizing Data Using t-SNE
Tomoki Hayashi
クラスタ数の決め方(Tokyo.r#60)
クラスタ数の決め方(Tokyo.r#60)
osamu morimoto
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
Deep Learning JP
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
NP完全問題の紹介
NP完全問題の紹介
yutaka1999
ウェーブレット変換の基礎と応用事例:連続ウェーブレット変換を中心に
ウェーブレット変換の基礎と応用事例:連続ウェーブレット変換を中心に
Ryosuke Tachibana
(文献紹介)デブラー手法の紹介
(文献紹介)デブラー手法の紹介
Morpho, Inc.
20分でわかるgVisor入門
20分でわかるgVisor入門
Shuji Yamada
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
Yusuke Uchida
帰納バイアスが成立する条件
帰納バイアスが成立する条件
Shinobu KINJO
[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions
[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions
Deep Learning JP
[DL輪読会]An Image is Worth 16x16 Words: Transformers for Image Recognition at S...
[DL輪読会]An Image is Worth 16x16 Words: Transformers for Image Recognition at S...
Deep Learning JP
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
ryosuke-kojima
渡辺澄夫著「ベイズ統計の理論と方法」5.1 マルコフ連鎖モンテカルロ法
渡辺澄夫著「ベイズ統計の理論と方法」5.1 マルコフ連鎖モンテカルロ法
Kenichi Hironaka
計算論的学習理論入門 -PAC学習とかVC次元とか-
計算論的学習理論入門 -PAC学習とかVC次元とか-
sleepy_yoshi
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
Tmux
Tmux
harutsugu shimoji
Tmux
Tmux
harutsugu shimoji
More Related Content
What's hot
Pythonのシグナル処理
Pythonのシグナル処理
Atsuo Ishimoto
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
[DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient Descent
[DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient Descent
Deep Learning JP
Performance Comparison of Mutex, RWLock and Atomic types in Rust
Performance Comparison of Mutex, RWLock and Atomic types in Rust
Mitsunori Komatsu
Visualizing Data Using t-SNE
Visualizing Data Using t-SNE
Tomoki Hayashi
クラスタ数の決め方(Tokyo.r#60)
クラスタ数の決め方(Tokyo.r#60)
osamu morimoto
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
Deep Learning JP
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
NP完全問題の紹介
NP完全問題の紹介
yutaka1999
ウェーブレット変換の基礎と応用事例:連続ウェーブレット変換を中心に
ウェーブレット変換の基礎と応用事例:連続ウェーブレット変換を中心に
Ryosuke Tachibana
(文献紹介)デブラー手法の紹介
(文献紹介)デブラー手法の紹介
Morpho, Inc.
20分でわかるgVisor入門
20分でわかるgVisor入門
Shuji Yamada
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
Yusuke Uchida
帰納バイアスが成立する条件
帰納バイアスが成立する条件
Shinobu KINJO
[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions
[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions
Deep Learning JP
[DL輪読会]An Image is Worth 16x16 Words: Transformers for Image Recognition at S...
[DL輪読会]An Image is Worth 16x16 Words: Transformers for Image Recognition at S...
Deep Learning JP
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
ryosuke-kojima
渡辺澄夫著「ベイズ統計の理論と方法」5.1 マルコフ連鎖モンテカルロ法
渡辺澄夫著「ベイズ統計の理論と方法」5.1 マルコフ連鎖モンテカルロ法
Kenichi Hironaka
計算論的学習理論入門 -PAC学習とかVC次元とか-
計算論的学習理論入門 -PAC学習とかVC次元とか-
sleepy_yoshi
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
What's hot
(20)
Pythonのシグナル処理
Pythonのシグナル処理
分散システムについて語らせてくれ
分散システムについて語らせてくれ
[DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient Descent
[DL輪読会]A Bayesian Perspective on Generalization and Stochastic Gradient Descent
Performance Comparison of Mutex, RWLock and Atomic types in Rust
Performance Comparison of Mutex, RWLock and Atomic types in Rust
Visualizing Data Using t-SNE
Visualizing Data Using t-SNE
クラスタ数の決め方(Tokyo.r#60)
クラスタ数の決め方(Tokyo.r#60)
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
【DL輪読会】言語以外でのTransformerのまとめ (ViT, Perceiver, Frozen Pretrained Transformer etc)
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
NP完全問題の紹介
NP完全問題の紹介
ウェーブレット変換の基礎と応用事例:連続ウェーブレット変換を中心に
ウェーブレット変換の基礎と応用事例:連続ウェーブレット変換を中心に
(文献紹介)デブラー手法の紹介
(文献紹介)デブラー手法の紹介
20分でわかるgVisor入門
20分でわかるgVisor入門
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
帰納バイアスが成立する条件
帰納バイアスが成立する条件
[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions
[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions
[DL輪読会]An Image is Worth 16x16 Words: Transformers for Image Recognition at S...
[DL輪読会]An Image is Worth 16x16 Words: Transformers for Image Recognition at S...
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
渡辺澄夫著「ベイズ統計の理論と方法」5.1 マルコフ連鎖モンテカルロ法
渡辺澄夫著「ベイズ統計の理論と方法」5.1 マルコフ連鎖モンテカルロ法
計算論的学習理論入門 -PAC学習とかVC次元とか-
計算論的学習理論入門 -PAC学習とかVC次元とか-
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Similar to Emacs上のターミナルを最強に
Tmux
Tmux
harutsugu shimoji
Tmux
Tmux
harutsugu shimoji
いまさら聞けないRake入門
いまさら聞けないRake入門
Tomoya Kawanishi
最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm
晃 遠山
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
bsdhack
ソースコードの共通化
ソースコードの共通化
Jun Hosokawa
鈴木:Net commonsでの中国語使用について
鈴木:Net commonsでの中国語使用について
michiosuzuki
鈴木:Net commonsでの中国語使用について
鈴木:Net commonsでの中国語使用について
michiosuzuki
卒研発表
卒研発表
yayugu
8F Emacs seminar 1st
8F Emacs seminar 1st
toshi_pp
End-to-End音声認識ためのMulti-Head Decoderネットワーク
End-to-End音声認識ためのMulti-Head Decoderネットワーク
NU_I_TODALAB
最低限の開発環境を整えるには
最低限の開発環境を整えるには
vi-iv
Erlangやってみた
Erlangやってみた
ina job
C++ Transactional Memory言語拡張の紹介
C++ Transactional Memory言語拡張の紹介
yohhoy
エコSmalltalk
エコSmalltalk
Sho Yoshida
DelphiでWin/Macクロスコンパイル
DelphiでWin/Macクロスコンパイル
Tomonori Ohba
2017-12-04 Linuxの基本構造とBashでの扱い方
2017-12-04 Linuxの基本構造とBashでの扱い方
浩平 渡邉
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
Yoshifumi Yamaguchi
181106 02
181106 02
openrtm
Buffer overflow
Buffer overflow
ionis111
Similar to Emacs上のターミナルを最強に
(20)
Tmux
Tmux
Tmux
Tmux
いまさら聞けないRake入門
いまさら聞けないRake入門
最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
ソースコードの共通化
ソースコードの共通化
鈴木:Net commonsでの中国語使用について
鈴木:Net commonsでの中国語使用について
鈴木:Net commonsでの中国語使用について
鈴木:Net commonsでの中国語使用について
卒研発表
卒研発表
8F Emacs seminar 1st
8F Emacs seminar 1st
End-to-End音声認識ためのMulti-Head Decoderネットワーク
End-to-End音声認識ためのMulti-Head Decoderネットワーク
最低限の開発環境を整えるには
最低限の開発環境を整えるには
Erlangやってみた
Erlangやってみた
C++ Transactional Memory言語拡張の紹介
C++ Transactional Memory言語拡張の紹介
エコSmalltalk
エコSmalltalk
DelphiでWin/Macクロスコンパイル
DelphiでWin/Macクロスコンパイル
2017-12-04 Linuxの基本構造とBashでの扱い方
2017-12-04 Linuxの基本構造とBashでの扱い方
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
181106 02
181106 02
Buffer overflow
Buffer overflow
More from Lintaro Ina
Gradual Typing for Generics
Gradual Typing for Generics
Lintaro Ina
論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)
Lintaro Ina
HTMLからの本文抽出
HTMLからの本文抽出
Lintaro Ina
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
Lintaro Ina
はてなブックマーク in Scala
はてなブックマーク in Scala
Lintaro Ina
『BrandSafe はてな』のアドベリフィケーションのしくみ
『BrandSafe はてな』のアドベリフィケーションのしくみ
Lintaro Ina
『BrandSafe はてな』のアドベリフィケーションのしくみ
『BrandSafe はてな』のアドベリフィケーションのしくみ
Lintaro Ina
More from Lintaro Ina
(7)
Gradual Typing for Generics
Gradual Typing for Generics
論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)
HTMLからの本文抽出
HTMLからの本文抽出
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマーク in Scala
はてなブックマーク in Scala
『BrandSafe はてな』のアドベリフィケーションのしくみ
『BrandSafe はてな』のアドベリフィケーションのしくみ
『BrandSafe はてな』のアドベリフィケーションのしくみ
『BrandSafe はてな』のアドベリフィケーションのしくみ
Emacs上のターミナルを最強に
1.
Emacs上のターミナルを最強に 伊奈 林太郎 2012-10-20 @
関西 Emacs#x06 伊奈 林太郎 Emacs 上のターミナルを最強に 1
2.
ターミナル使ってますか? ◮ 素のターミナル ◮ 標準的なターミナルエミュレータ xterm,
gnome-terminal, Terminal.app, ... ◮ マルチプレクサ screen, tmux, ... ◮ ssh といっしょになってるもの PuTTY, Tera Term, ... ◮ Emacs 上 term.el ◮ 使ってない eshell.el, ... ◮ その他 伊奈 林太郎 Emacs 上のターミナルを最強に 2
3.
ターミナル使ってますか? ◮ 素のターミナル ◮ 標準的なターミナルエミュレータ xterm,
gnome-terminal, Terminal.app, ... ◮ マルチプレクサ screen, tmux, ... ◮ ssh といっしょになってるもの PuTTY, Tera Term, ... ◮ Emacs 上 term.el ◮ 使ってない eshell.el, ... ◮ その他 伊奈 林太郎 Emacs 上のターミナルを最強に 2
4.
ターミナルとEmacs ターミナルエミュレータを使う理由 ◮ ncurses アプリもちゃんと動いてほしい ◮
素の端末を触るときにパニくらない Emacs との共存 ◮ Emacs は別窓で ◮ ウィンドウが増えてうざい ◮ 端末とのコピペが面倒 ◮ screenの中で Emacs ◮ キーボードだけでコピペ ◮ Emacs ごと detach 伊奈 林太郎 Emacs 上のターミナルを最強に 3
5.
screenのままならないところ ◮ 改造しにくい ◮ CJK
ambiguous width ◮ 問題の切り分けが難しくなる ◮ (X などの) クリップボードとの連携 ◮ 面倒なハックが必要 ◮ 環境変数の引き渡し ◮ 外部からのコマンド発行で解決 (要開発版) # この辺は tmux でも同じですね 伊奈 林太郎 Emacs 上のターミナルを最強に 4
6.
すべてEmacsでやる ◮ CJK, クリップボード なども
OK ◮ detach もできる (emacs --daemon) ◮ Emacs 本体と連携 ⊚ ◮ 操作性を一体に ◮ Lisp で改造しまくり 伊奈 林太郎 Emacs 上のターミナルを最強に 5
7.
Emacs内端末エミュレータterm.el 使い方 M-x term, M-x
ansi-term 特徴 — 2 つのモード ◮ term-char-mode ◮ 打ったものがそのまま端末へ ◮ term-line-mode ◮ Emacs のバッファに近い編集 しくみ ◮ process-filterで制御シーケンスを解釈 ◮ バッファに put-text-propertyしながら表示 伊奈 林太郎 Emacs 上のターミナルを最強に 6
8.
term.elのいけてないところ ◮ キーがほぼすべて端末に持っていかれる ◮ M-x
とかきかない ◮ でも ESC とかどっちで認識すべき? ◮ 端末が 1 つしか開けない (内部的には可能だけどインタフェースが無い) ◮ 色が 8 色しかない ◮ term-line-modeがちょっと貧弱 ◮ コードがレガシーで拡張しにくい ◮ 関数がでかい ◮ hook も少ない ◮ 遅い 伊奈 林太郎 Emacs 上のターミナルを最強に 7
9.
term+.el — term.elを強化する 主な機能 ◮
256 色対応 / xterm 互換性向上 ◮ キーバインド強化 ◮ 編集機能の強化 ◮ ログ機能 ◮ マルチプレクサ (+ マルチセッション) ◮ シェル連携強化 伊奈 林太郎 Emacs 上のターミナルを最強に 8
10.
term+.elをとりあえず使ってみる ダウンロード → 真っ新な状態でのお試し °
git clone git://github.com/tarao/term-plus-all.git ° cd term-plus-all ° git submodule update --init ° make emacs # or make term # or make EMACS=emacs-snapshot term 注意点 ◮ Emacs 24.1.50 で開発してます ◮ 22 はサポートしません ◮ 23 は細かいところが不安定かも ◮ 24.2 はおそらく OK ◮ 24.3 (24.2.50) の term.elの変更には未対応 伊奈 林太郎 Emacs 上のターミナルを最強に 9
11.
デモ 伊奈 林太郎 Emacs
上のターミナルを最強に 10
12.
term+.el — term.elを強化する 主な機能 ◮
256 色対応 / xterm 互換性向上 ◮ キーバインド強化 ◮ 編集機能の強化 ◮ ログ機能 ◮ マルチプレクサ (+ マルチセッション) ◮ シェル連携強化 伊奈 林太郎 Emacs 上のターミナルを最強に 11
13.
256色対応 / xterm互換性 (require
³xterm-256color) 256 色対応 ◮ 256 色表示の制御シーケンスの解釈を実装 ◮ ついでに斜体 , 取り消し線等にも対応 ◮ 原理的には 24bit 色に対応可能 (cf. Konsole) (24bit 色表示しようとするアプリはあるのか?) xterm 互換性 (TERM=xterm-256color) ◮ TERM=eterm-256colorを定義すればよい? ◮ たいていのアプリは terminfo なんか見てない ◮ xterm を騙れば 256 色表示しようとしてくれる ◮ 騙るからには xterm 制御シーケンスを処理 (不完全) 伊奈 林太郎 Emacs 上のターミナルを最強に 12
14.
term+.el — term.elを強化する 主な機能 ◮
256 色対応 / xterm 互換性向上 ◮ キーバインド強化 ◮ 編集機能の強化 ◮ ログ機能 ◮ マルチプレクサ (+ マルチセッション) ◮ シェル連携強化 伊奈 林太郎 Emacs 上のターミナルを最強に 13
15.
キーバインド強化 [1/2] (require ³term+) 端末に奪わせないキーを定義 ◮
term+char-mapに define-key 定義 するだけ (multi-term.elでもできますね) ◮ 定義済みのキー (M-x des-fun, term-char-mode) C-q 後続のキーをそのまま端末に渡す C-y 端末へ貼り付け M-RET 編集モード (term-line-mode)へスイッチ ESC 端末へ ESC を送る C-c 0.5 秒間何も入力がなければ端末へ C-c 直後に何か入力すればプレフィックスキー ◮ Emacs 本体で実行 (nil をマップ): M-x, M-:, C-x 伊奈 林太郎 Emacs 上のターミナルを最強に 14
16.
キーバインド強化 [2/2] (require ³key-intercept) 後続のキーがあるかどうかで意味が違う! ESC
端末へ ESC を送る M-x ふつうの M-x C-c 0.5 秒間何も入力がなければ端末へ C-c 直後に何か入力すればプレフィックスキー 実装: key-intercept.el ◮ https://github.com/tarao/key-intercept-el ◮ プレフィックスキーにもコマンドを割り当てる http://d.hatena.ne.jp/tarao/20120427/1335527960 伊奈 林太郎 Emacs 上のターミナルを最強に 15
17.
term+.el — term.elを強化する 主な機能 ◮
256 色対応 / xterm 互換性向上 ◮ キーバインド強化 ◮ 編集機能の強化 ◮ ログ機能 ◮ マルチプレクサ (+ マルチセッション) ◮ シェル連携強化 伊奈 林太郎 Emacs 上のターミナルを最強に 16
18.
編集機能強化 [1/2] (require ³term+) 編集モード
(term-line-mode)中は ◮ 入力フィールド外では読取専用 ◮ SPC で選択開始 もう一度 SPC で範囲コピー → 編集モード終了 ◮ RET, ESC で編集モード終了 ◮ 入力フィールド内ではふつうのバッファ ◮ ただし RET で端末に送信 ◮ ふつうの改行は C-j ◮ 別のメジャーモードにもできる e.g. シェルのプロンプトに sh-modeで入力 伊奈 林太郎 Emacs 上のターミナルを最強に 17
19.
編集機能強化 [1/2] (require ³term+) 編集モード
(term-line-mode)中は ◮ 入力フィールド外では読取専用 ◮ SPC で選択開始 もう一度 SPC で範囲コピー → 編集モード終了 ◮ RET, ESC で編集モード終了 ◮ 入力フィールド内ではふつうのバッファ ◮ ただし RET で端末に送信 ◮ ふつうの改行は C-j ◮ 別のメジャーモードにもできる e.g. シェルのプロンプトに sh-modeで入力 伊奈 林太郎 Emacs 上のターミナルを最強に 17
20.
編集機能強化 [2/2] (require ³multi-mode-util) 入力フィールドだけ別モード ◮
あらかじめどのモードにするか指定 (後述) ◮ 編集モードに入ると indirect buffer 間接バッファ を作成 ◮ multi-mode.el http://www.loveshack.ukfsn.org/emacs/multi-mode.el ◮ multi-mode-util.el https://github.com/tarao/multi-mode-util 伊奈 林太郎 Emacs 上のターミナルを最強に 18
21.
term+.el — term.elを強化する 主な機能 ◮
256 色対応 / xterm 互換性向上 ◮ キーバインド強化 ◮ 編集機能の強化 ◮ ログ機能 ◮ マルチプレクサ (+ マルチセッション) ◮ シェル連携強化 伊奈 林太郎 Emacs 上のターミナルを最強に 19
22.
ログ機能 (require ³term+) term-start-output-log ◮ term.elに元からある
(ほぼデバッグ用) term+hardcopy (C-c h) ◮ 一画面だけテキスト保存 (追記可) ◮ screenの:hardcopy相当 term+start-buffer-log (C-c l) ◮ いままでの累積テキストを保存 ◮ 表示限界 (2048 行) を超えた分も保存 term+start-record (C-c r) ◮ 端末の制御シーケンスを時系列で保存 ◮ ttyrec互換 (ttyplayで再生可) 伊奈 林太郎 Emacs 上のターミナルを最強に 20
23.
term+.el — term.elを強化する 主な機能 ◮
256 色対応 / xterm 互換性向上 ◮ キーバインド強化 ◮ 編集機能の強化 ◮ ログ機能 ◮ マルチプレクサ (+ マルチセッション) ◮ シェル連携強化 伊奈 林太郎 Emacs 上のターミナルを最強に 21
24.
マルチプレクサ [1/3] (require ³term+mux) やりたいこと ◮
複数の端末をタブ表示 (tabbar.el, emux.elでもできますね) ◮ 編集モード以外のときはモードラインをタブに ◮ セッション (ユーザ/ホストの別) ごとにグループ化 ◮ 同一セッションからは 1 つだけバッファ一覧に ◮ セッション内の選択中のタブが代表 ◮ 一覧中ではバッファ名ではなくセッション名 伊奈 林太郎 Emacs 上のターミナルを最強に 22
25.
マルチプレクサ [2/3] タブグループ (require
³term+mux) 実装: tab-group.el ◮ https://github.com/tarao/tab-group-el ◮ 車輪の再発明 ◮ tabbar.elでできることはだいたいできる ◮ モードラインにも表示できる ◮ バッファをひとまとめにできる ◮ かっこいいタブ選択 UI ◮ D&D でタブ移動 伊奈 林太郎 Emacs 上のターミナルを最強に 23
26.
マルチプレクサ [3/3] セッション管理 (require
³term+mux) M-x term+mux-new ◮ 現在のセッションで (or 選択して) 端末を開く M-x term+mux-new-command ◮ 現在のセッションで指定のコマンドを実行 M-x term+mux-remote-session ◮ ユーザ/ホストを指定してセッションを作成 ◮ シェル端末も 1 つ開く ◮ ローカルで root なら sudo する ◮ リモートなら ssh する 伊奈 林太郎 Emacs 上のターミナルを最強に 24
27.
term+.el — term.elを強化する 主な機能 ◮
256 色対応 / xterm 互換性向上 ◮ キーバインド強化 ◮ 編集機能の強化 ◮ ログ機能 ◮ マルチプレクサ (+ マルチセッション) ◮ シェル連携強化 伊奈 林太郎 Emacs 上のターミナルを最強に 25
28.
シェル連携 できること ◮ 編集モード ◮ 編集モードでのメジャーモード指定 ◮
バッファ内容を引き継いで編集モードへ ◮ ユーザ/ホスト/ディレクトリ通知 ◮ ファイル転送 (open / view / get / put) ◮ シェルコマンド履歴選択 ◮ マルチプレクサ ◮ タブタイトル設定 ◮ cdd (別タブの現在ディレクトリを取得) 方法 ◮ 端末内から特殊な制御コマンドを送る 伊奈 林太郎 Emacs 上のターミナルを最強に 26
29.
シェル連携 [1/6] 編集モード M-i
で sh-modeの編集モードへ (zsh) function switch-to-line-mode-insert () {1 local buf="°BUFFER"2 zle kill-buffer3 zle -R # reset command line4 echo -ne "e]51;mode;sh-modee" > /dev/tty5 echo -ne "e]52;i;°bufe" > /dev/tty6 }7 zle -N switch-to-line-mode-insert8 bindkey ³^[i³ switch-to-line-mode-insert9 参照 https://raw.github.com/tarao/dotfiles/master/.zsh/eterm.zsh 伊奈 林太郎 Emacs 上のターミナルを最強に 27
30.
シェル連携 [2/6] セッション情報 ユーザ名/ホスト名を通知 host=
hostname # ホスト名10 echo -ne "e]51;host;°hoste" > /dev/tty11 user= id -run # ユーザ名12 echo -ne "e]51;user;°usere" > /dev/tty13 ディレクトリ通知 (zsh) function precmd_eterm_cwd () {14 local dir; dir= pwd15 echo -ne "e]51;cd;°dire" > /dev/tty16 }17 typeset -Uga precmd_functions # これは一回だけ18 precmd_functions+=precmd_eterm_cwd19 ◮ Emacs 側の default-directoryが変更される ◮ TRAMP でリモートファイルも開ける 伊奈 林太郎 Emacs 上のターミナルを最強に 28
31.
シェル連携 [3/6] ファイル転送 function
o() { # シェルで見えてるファイルを開く20 echo -ne "e]51;open;°1e" > /dev/tty }21 function v() { # シェルで見えてるファイルを view-mode で開く22 echo -ne "e]51;view;°1e" > /dev/tty }23 function get() { # シェルで見えてるファイルを手元にコピー24 echo -ne "e]51;get;°1e" > /dev/tty }25 function put() { # シェルで見えてる場所に26 # ファイルを選択してコピー27 echo -ne "e]51;put;e" > /dev/tty }28 ◮ セッション情報を通知しておく必要あり ◮ get/put は FTP と同じ向き ◮ put するとミニバッファでファイルを訊く ◮ dired インタフェースでの複数選択も可 伊奈 林太郎 Emacs 上のターミナルを最強に 29
32.
シェル連携 [4/6] 履歴選択 C-r
で履歴選択 (zsh) echo -ne "e]51;histfile;°HISTFILEe" >/dev/tty #一回だけ29 30 function history-search-eterm () {31 local buf="°BUFFER"32 zle kill-buffer33 echo -ne "e]52;h;°bufe" > /dev/tty }34 zle -N history-search-eterm35 bindkey ³^R³ history-search-eterm36 ◮ 類似: zsh の履歴検索に anything.elを使う http://d.hatena.ne.jp/tarao/20100429/1272509893 伊奈 林太郎 Emacs 上のターミナルを最強に 30
33.
シェル連携 [5/6] マルチプレクサ タブタイトル変更 ◮
screen の ekSTR e 形式 ◮ tmux の e]2;STRe 形式 参考 https://raw.github.com/tarao/dotfiles/master/.zsh/screen-title.zsh cdd ◮ 他のタブの pwd に移動する ◮ オリジナルは id:secondlife さん (screen用) http://d.hatena.ne.jp/secondlife/20080218/1203303528 参照 https://raw.github.com/tarao/dotfiles/master/.zsh/eterm.zsh 伊奈 林太郎 Emacs 上のターミナルを最強に 31
34.
シェル連携 [6/6] カスタマイズ 定義済みの特殊制御コマンドを調べる ◮
M-x des-fun, term-emulate-terminal ◮ M-x term+control-command-list 新しい特殊制御コマンドを定義する (require ³term+vars)37 (defun my-control-command (text) ...)38 (term+new-control-command39 "START" "END " ³my-control-command)40 例 (defun term+open (files &optional find-file) ...)41 (term+new-control-command42 "033]51;open;" "033" ³term+open)43 伊奈 林太郎 Emacs 上のターミナルを最強に 32
35.
まとめ Emacs 上でだって端末機能をフルに使いたい! ◮ 256
色対応 ◮ xterm 互換性向上 ◮ キーバインド Emacs なのをいいことに魔改造 ◮ 編集機能の強化 ◮ ログ機能 ◮ マルチプレクサをまるごと実装 ◮ シェル連携しまくり 伊奈 林太郎 Emacs 上のターミナルを最強に 33
36.
参考URL 伊奈林太郎. このスライド. http://up.orezdnu.org/papers/kansai-emacs/%23x06/slide/slide.pdf. INA Lintaro. term+.el のソースリポジトリ. https://github.com/tarao/term-plus-el. INA
Lintaro. term+.el の emacs 側設定例. https://github.com/tarao/dotfiles/blob/master/.emacs.d/init/term.el https://github.com/tarao/dotfiles/blob/master/.emacs.d/init/tarao/term.el. INA Lintaro. term+.el のシェル側設定例. https://github.com/tarao/dotfiles/blob/master/.zsh/eterm.zsh. 伊奈 林太郎 Emacs 上のターミナルを最強に 34
37.
おわり
Download now