GNOMEターミナルのコンテンツをANSIエスケープコードで保存する方法は?


9

VT100端末には、- を使用して端末の内容をエスケープコードとともにファイル保存する比較的簡単な方法がありますMetap

XTerm.VT100.printAttributes: 2
XTerm.VT100.printerCommand: cat - > file
XTerm.VT100.translations: #override Meta <KeyPress> P: print() \n

私はかなり調べましたが、これがデフォルトのGNOMEターミナル+ XTerm + Bashで機能するための解決策を見つけることができません。

ウィンドウの内容を含む画像だけが欲しいのではありません。

GNOMEターミナルは最終的にこれを修正するようですが、どのバージョンに含まれるかについての情報はなく、最後のアップデートからほぼ3年が経過しています...


残念ながら、これを行う方法はありません。参照:askubuntu.com/q/20739
Zaz

@ジョシュそれは同じ質問だとは思わない。コマンドからのすべての出力を保存するのではなく、ターミナルウィンドウに表示されるすべての出力を保存します。
l0b0 2013

回答:


3

残念ながら、箱から出してすぐに答えはl0b0です。これは不可能です。

他の回答では、スクリプトを使用してこれを行う方法をリストしましたが、あなたが指摘したようにいくつかの違いがあります。もう1つの方法は、ソースをコンパイルするか、不安定なバージョンを使用することです。

Gnome Terminal Source Tarball

Raringのバージョンは3.6.1なので、このソースを見ることができます。115行目のTerminal-window.c内:

/*
 * We don't want to enable content saving until vte supports it async.
 * So we disable this code for stable versions.
 */

#include "terminal-version.h"

#if (TERMINAL_MINOR_VERSION & 1) != 0
#define ENABLE_SAVE
#else
#undef ENABLE_SAVE
#endif
#endif

オプション:

  1. この下に#define ENABLE_SAVEを追加します。
  2. バージョンを不安定版に変更します。
  3. 不安定なバージョンの.DEBをダウンロードします。

お役に立てれば。


これはANSIエスケープキーを保存しますか、それともテキストだけを保存しますか?
l0b0 2013年

私は確認しましたが、vte_terminal_write_contents()がANSIコードを書き出していないようです。現時点では、私の元の応答は「必要なことは不可能(箱から出して)」では最も正確です。開発者志向の場合は、おそらくtermainal-window.c 3340で関数を書き換えることができます。save_contents_dialog_on_response(...)3372行目で、vte_terminal_write_contentsの呼び出しが行われた場所を確認できます。このサイトの範囲を超えているため、これ以上は説明しません。他の端末は、ユーティリティを再コンパイルするよりもはるかに少ないコストでこれを提供します。
LimpingNinja 2013年

+100。可能であれば、私はこれを他の回答と分けます。どちらも私が望んでいることの90%を行うからです。
l0b0 2013年

3

残念ながら、箱から出してすぐに答えはl0b0です。これは不可能です。

端末でスクリプトを常に実行し、すべての出力をログに記録することで、これを修正しようとする2つの方法があります。gnome-terminalを開き、[ 編集] -> [ プロファイル設定]に移動し、[ タイトル ] [ コマンド ]タブに移動します。カスタムコマンドの場合は、次のコマンドを使用します。

bash -l -c 'script -q -c bash $HOME/sessionlogs/$BASHPID.sessionlog.$(date +%Y%m%d-%H%M).txt'

$ HOMEの下に「sessionlogs」が存在することを確認してください。

もう1つの方法は削除され、この質問の2番目の回答として追加されました。


確かに、再貼り付け中に発生したタイプミスを修正するために答えを修正しました。私は「再コンパイル」オプションも分離しています。私は2つが関連していないことに同意します。
LimpingNinja 2013年

less -r実際に出力が印刷されたように表示されます-ありがとう!
l0b0 2013年

0

script(1)を介してシェルを実行し、ターミナルエスケープを含む、ファイルに保存されているターミナルのすべての入出力を取得できます。


1
それは別のユースケースです。script事後にコンテンツを保存するために使用することはできず、単に表示された出力を保存するだけではありません。
l0b0

1
本気ですか?事実、スクリプトを保存することはできませんが、これをテストしていくつかのファイル権限を出力するとll、すべての出力が保存されました。
マット

0

screenと呼ばれるパッケージがあります -VT100 / ANSI端末エミュレーションを備えた端末マルチプレクサです。

Ubuntu Manuals Webサイトのscreenマンページによると、screen

複数のプロセス(通常はインタラクティブシェル)間で物理端末を多重化する全画面ウィンドウマネージャー。各仮想端末は、DEC VT100端末の機能に加えて、ISO 6429(ECMA 48、ANSI X3。 64)およびISO 2022標準(たとえば、行の挿入/削除と複数の文字セットのサポート)VT100 / ANSI端末エミュレーションを備えた端末マルチプレクサー。

そして画面を実行するとき:

Ctrl ah (ハードコピー)現在のウィンドウのハードコピーをファイル "hardcopy.n"に書き込みます。

GNOMEターミナルで実行screenして入力してみましたCtrl ah

画面を実行してCtrl Alt hを入力

これは、Geditで開いたときのhardcopy.1ファイルの出力です。

hardcopy.1がGeditで開かれました

あなたは見つけることができ、画面は Ubuntuの13.04のウズウズ/メインソフトウェアリポジトリです。

デフォルトではインストールされません。


-1

エスケープコードはコピーされませんが、テキストを取得するには、メニューの[編集]-> [すべて選択]に移動し、を押しCtrlShiftCて、(i)クリップボードをエディターに貼り付けるか、(ii)入力してcat > filenameを押しCtrlShiftVます。


これは別の使用例です-明示的に述べたように、ANSIエスケープコードを含めたいと思います。
l0b0

-1

man history エスケープされた文字の履歴拡張を探します。私はあなたhistory が求めていることができると信じています。


manページに関連するものは何も見つかりませんでした。より具体的にしてください。
l0b0 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.