Skip to content

Poderosa でコマンドの実行結果を簡単にコピーする

ターミナルエミュレータである PoderosaTeraTerm など、他のターミナルエミュレータに劣らず、とても良く出来ており便利です。Poderosa には以下のような特徴があります。

  • タブ方式に対応している。しかも、タブを左右に分割したり、上下に分割したり、レイアウトを自由に出来る
  • Telnet、SSH1、SSH2 だけでなく、Cygwin 接続もサポートしている(TeraTerm の CygTerm は余計なウインドウが開いて、やや使い辛い)
  • 標準で SSH 鍵作成や IPv6 に対応
  • プラグインで SSH ポートフォワーディングやシリアル接続、マクロにも対応
  • Apache2 ライセンスで公開されている、オープンソースプロダクト。ソースコード自体は C# で記述されている

設定変更の際、証跡として変更後の設定ファイルを取得する場合がありますが、Poderosa を使うとこの作業を省力化することが出来ます。以下は Poderosa 4.10 を使った環境を想定しています。

コマンドの実行結果をコピーする

Poderosa ではコマンドを実行する際、Enter キーでは無く、「Ctrl + ,(カンマ)」を実行すると以下のようなメニューが表示されます。ここから「コマンド結果をコピー」を選択すると、コマンドの実行結果をクリップボードへコピーすることが出来ます。Cisco ルータ等でコマンド結果の表示量が多く、more が表示されるようなケースでも問題なく、コピー出来ます。

file

「コマンド結果をポップアップ」を選択すれば、コマンドの実行結果をクリップボードへコピーするのではなく、別ウインドウとして表示することも出来ます。

「コマンド結果をコピー」を上に表示する

「Ctrl + ,」を押下した際に表示されるメニューは、上に「コマンド結果をポップ」、下に「コマンド結果をコピー」が表示されます。「コマンド結果をポップアップ」も便利な機能なのですが、(少なくても私の場合は)「コマンド結果をコピー」の方が圧倒的に多く使う為、こちらが上に来ている方が便利です。上述の通り、Poderosa は Apache2 ライセンスのオープンソースコードプロダクトですから、ソースコードを修正することで見た目や振る舞いを変更することが可能です。

「コマンド結果をコピー」を上に表示させる為には ダウンロードしたソースコード のうち、 TerminalEmulator プロジェクトの CommandResultPopup.cs の 246 行目あたりを以下のように書き換えます。変更前は以下のようになっています。

1
2
3
4
5
6
7
//ExtP作成とデフォルトの登録
public static void CreateExtensionPointAndDefaultCommands(IPluginManager pm) {
  IExtensionPoint pt = pm.CreateExtensionPoint(POPUP_MENU_EXTENSION_POINT,
    typeof(ICommandResultProcessorMenuItem), TerminalEmulatorPlugin.Instance);
  pt.RegisterExtension(new PopupCommandResult());
  pt.RegisterExtension(new CopyCommandResult()); 
}

251 行目と 252 行目を入れ替え、RegisterExtension メソッドの呼び出し順序を変更します。

1
2
3
4
5
6
7
//ExtP作成とデフォルトの登録
public static void CreateExtensionPointAndDefaultCommands(IPluginManager pm) {
  IExtensionPoint pt = pm.CreateExtensionPoint(POPUP_MENU_EXTENSION_POINT,
    typeof(ICommandResultProcessorMenuItem), TerminalEmulatorPlugin.Instance);
  pt.RegisterExtension(new CopyCommandResult()); 
  pt.RegisterExtension(new PopupCommandResult());
}

ソースコードの変更後、プロジェクトをビルドし、生成された Poderosa.TerminalEmulator.dll を C:\Program Files\Poderosa\TerminalEmulator にコピーします。これで「Ctrl + ,」を押した際に表示されるメニューで、「コマンド結果をコピー」が上に表示されるようになります。

file

サーバでも「コマンド結果のコピー」を使えるようにする

「コマンド結果のコピー」は、正規表現によってプロンプトを見分けることで実現されています。この設定はメニューの「ツール」→「シェルスキーム エディタ」の「プロンプト正規表現」設定で確認することが出来ます。デフォルトでは「[>#%]*[>#%]」となっています。

file

bash の場合、プロンプトは PS1 という環境変数で定義されています。私の Mac OS X では以下のように定義されていました。

1
2
$ echo $PS1
\h:\W \u\$

Linux や Mac OS X ではデフォルトのログインシェルとして bash がよく利用されていると思いますが、殆どのケースで「$」という記号が利用されていると思われます。しかし、Poderosa の「プロンプト正規表現」には「$」が含まれていない為、「コマンド結果のコピー」機能が上手く働きません。そこで、「プロンプト正規表現」に「$」を加え、「[>#%$]*[>#%$]」と設定します。

file

これで bash 環境下でも「Ctrl + ,」で「コマンド結果をコピー」機能が利用出来るようになりました。

file

変更後の Poderosa.TerminalEmulator.dll

変更後の Poderosa.TerminalEmulator.dll をアップロードしておきます。

  • Poderosa.TerminalEmulator.dll

ダウンロードしたファイルを展開し、中に含まれている Poderosa.TerminalEmulator.dll を C:\Program Files\Poderosa\TerminalEmulator に上書きすれば、インストールは完了です。