Уменьшение размеров терминала в OpenVMS

Будучи несколько зеленым с OpenVMS, но все еще пытаясь «закончить работу», я хотел бы немного упростить настройку высоты и ширины терминала. .

В настоящее время я могу подключиться к OpenVMS-8 по SSH. 4 (из панели в моем сеансе Tmux), но, в отличие от 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

Важными битами выше являются Ширина: 80 и Страница: 24 . Это несмотря на то, что при выдаче Tmux : display «H: # {pane_height}, W: # {pane_width}» отображается следующее:

 H: 51, W: 92

Характеристики терминала не обновляются автоматически, и это может быть неудивительно, учитывая, что терминал, кажется, интерпретируется как « VT200_Series ». В любом случае, я заметил, что Tmux довольно гибок в том, как он может взаимодействовать с терминалом, в частности, там ' средство sa для отображения множества атрибутов терминала с помощью команды 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.

Я бы хотел, чтобы сделал что-то в этом роде:

 :setb "SET TERM/PAGE=#{pane_height}/WIDTH=#{pane_width}";\
  pasteb;\
  send Enter

Конечно, УСТАНОВИТЬ СРОК / ... bit явно устанавливает высоту и ширину терминала в OpenVMS соответственно.

К сожалению, похоже, что параметр data команды set-buffer не подвергается замене «специальной переменной».

Является новинкой как для OpenVMS, так и для Tmux, мне нужны советы, как я могу делать то, что мне нужно здесь. Альтернативой, я полагаю, будет просто всегда использовать терминал определенного размера и жестко запрограммировать этот размер в моем LOGIN.COM скрипте, но я бы хотел получить «первый приз», который - это возможность устанавливать это динамически (если бы я мог заставить описанную выше идею работать, я бы, конечно, использовал параметр bind-key , чтобы иметь возможность вызывать его быстро).

1
задан 18 April 2017 в 10:45
1 ответ

Вы можете использовать команду Tmux run-shell - согласно странице руководства:

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 также позволяет отправлять команды серверу, направленные на панель из командной строки. Необходимый сценарий оболочки для выдачи команды 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 и после входа в систему быстро Cb Cr все устроит за вас.

1
ответ дан 3 December 2019 в 23:31

Теги

Похожие вопросы