私はOpenVMSでやや環境に配慮していますが、それでも「作業を完了」しようとしているので、端末の高さと幅の設定に関して少し簡単にしたいと思います。
現在、OpenVMS-8.4ベースのサーバーに(Tmuxセッション内のペインから)SSHで接続できますが、Linuxとは異なり、DCLコマンドシェルは端末サイズを自動的に取得しません。
つまり、SSHで接続し、SHOW TERM
を発行すると、次のようになります。
Terminal: _FTA31: Device_Type: VT200_Series Owner: <elided>
Input: 9600 LFfill: 0 Width: 80 Parity: None
Output: 9600 CRfill: 0 Page: 24
Terminal Characteristics:
Interactive Echo Type_ahead No Escape
Hostsync TTsync Lowercase Tab
Wrap Scope No Remote Eightbit
Broadcast No Readsync No Form Fulldup
No Modem No Local_echo No Autobaud No Hangup
No Brdcstmbx No DMA No Altypeahd Set_speed
No Commsync Line Editing Overstrike editing No Fallback
No Dialup Secure server No Disconnect No Pasthru
No Syspassword No SIXEL Graphics No Soft Characters No Printer Port
Numeric Keypad ANSI_CRT No Regis No Block_mode
Advanced_video Edit_mode DEC_CRT DEC_CRT2
No DEC_CRT3 No DEC_CRT4 No DEC_CRT5 No Ansi_Color
VMS Style Input <CTRL-H> Backspace
上記の重要なビットはWidth: 80
とPage: 24
です。これは、Tmux :display "H: #{pane_height}, W: #{pane_width}"
を発行すると次のように表示されます。
H: 51, W: 92
その場合、端末の特性は自動的に更新されません。端末が「VT200_Series
」として解釈されているように見えることを考えると、これは驚くべきことではありません。いずれにせよ、Tmuxは端末と対話できる方法にかなり柔軟性があることに気づきました。特に、display-message
を使用して端末属性のホストを表示できる機能があります。コマンド;上に示したように、次のような方法で幅と高さを「取得」できます。
:display-message -p "Width: #{pane_width}, Height: #{pane_height}"
-p
は、結果をstdout
に出力する必要があることを示します(Tmuxは表示をクリアし、結果を表示します)。
また、次のように、Tmuxコマンドset-buffer
を使用して、バッファにデータを明示的に設定することもできます。
:set-buffer "Mary had a little lamb..."
そして、paste-buffer
Tmuxコマンドを使用して、インタラクティブに入力されたかのように、結果をペインに貼り付けます。
私がしたいことlikeそれなら、これらの線に沿った何かです:
:setb "SET TERM/PAGE=#{pane_height}/WIDTH=#{pane_width}";\
pasteb;\
send Enter
もちろん、SET TERM/ ...
ビットは、OpenVMSで端末の高さと幅をそれぞれ明示的に設定します。
ただし、残念ながら、set-buffer
コマンドのdata
パラメータは「特別な変数」の置換を受けていないようです。
私はOpenVMSとTmuxの両方にやや新しいので、ここで必要なことをどのように行うことができるかについてのガイダンスが必要です。別の方法としては、常に特定のサイズの端末を使用し、そのサイズをLOGIN.COM
スクリプトにハードコーディングすることだと思いますが、能力である「一等賞」が欲しいです。これを動的に設定します(上記のアイデアを機能させることができれば、もちろんbind-key
設定を使用してすばやく呼び出すことができます)。
Tmuxのrun-Shell
コマンドを使用できます-manページに従って:
run-Shell -b [-t target-pane] Shell-command
... Shell-command is expanded using the rules specified in the
FORMATS section ...
FORMATSセクションでは、「#{pane_width}
」などの置換操作を使用して文字列をフォーマットする方法について説明します。
したがって、run-Shell
を使用すると、シェルスクリプトを呼び出して、Tmuxセッション、クライアント、ウィンドウ、またはペインに関連する任意の情報を渡すことができます。 Tmux alsoは、コマンドラインからペインに向けてサーバーにコマンドを発行できるようにします。端末の幅と高さを設定するためにDCLコマンドを発行するために必要なシェルスクリプトは次のようになります。
#!/usr/bin/env sh
# We're assuming the pane identifier is passed as the first
# argument.
#
PANE=$1
# It's possible to "fetch" information by invoking the
# Tmux display-message command (short form: display) and
# passing it the pane identifier with the target (-t) option.
#
WIDTH=$( tmux display -t $PANE -p "#{pane_width}" )
HEIGHT=$( tmux display -t $PANE -p "#{pane_height}" )
#
# Construct the DCL command to set terminal width and
# height explicitly.
#
CMD="SET TERM/PAGE=$HEIGHT/WIDTH=$WIDTH"
#
# Set the buffer to contain the DCL command string.
#
tmux setb "$CMD"
#
# Paste the buffer contents to the relevant pane.
#
tmux pasteb -t $PANE
#
# Press "Enter" in the relevant pane to execute the DCL command.
#
tmux send -t $PANE Enter
残っているのは、run-Shell
を呼び出すバインドされたキーを設定し、上記のスクリプトを呼び出して、それを唯一の引数として「現在の」ペイン識別子として渡すことです。
bind-key C-r run-Shell "~/bin/resizevms.sh #{pane_id}"
それを~/.tmux.conf
に入れて、ログインした後、簡単なC-b C-r
で設定します。