Как изменить основную команду в Edit

Я хочу добавить несколько ярлыков в ISPF Edit.

Например, я хотел бы ввести T для "TOP" и B для "BOT". Как я могу это сделать? Я пытался войти

define t alias top

в командной строке, но это не сработало: у меня есть "КОМАНДА ВЕРХА НЕ НАЙДЕНА", если я использую ярлык.

Как мне этого добиться? И как сделать этот ярлык доступным каждый раз, когда я открываю Редактировать?

2 ответа

Решение

Гибким решением было бы создать начальный макрос редактирования, который выполняет двойную функцию. При первом вызове в качестве начального макроса редактирования он определяет такие команды, как T а также B как псевдонимы для себя. Эти команды затем заставляют ISPF вызывать тот же макрос и выполнять соответствующее действие. Для этого используйте переменную ISPF ZEDTMCMD в качестве основного логического драйвера; он устанавливается редактором с помощью команды, которая вызвала макрос.

Вот очень общее решение REXX под названием MYMACRO:

/* REXX */                                                               
address 'ISREDIT'                                                        
parse source . . s3 .                                                    
'MACRO'  /* You can specify optional arguments if you want */            

/* Easier to work with upper case and no leading or trailing blanks */   
address 'ISPEXEC' 'VGET (ZEDTMCMD)'                                      
invoke_cmd = translate(strip(zedtmcmd))                                  

select                                                                   
  when invoke_cmd == s3 then do /* first time call */                    
    'DEFINE T ALIAS' s3                                                  
    'DEFINE B ALIAS' s3                                                  
  end                                                                    
  when invoke_cmd == 'T' then 'UP MAX'                                   
  when invoke_cmd == 'B' then 'DOWN MAX'                                 
  otherwise nop                                                          
end                                                                      
exit 0                                                                   

Далее укажите MYMACRO как начальный макрос редактирования. Это может быть указано в нескольких местах, но самый простой - на главной панели редактирования (вариант 2).

ISPF Edit Entry Panel с подсветкой начального поля макроса

Обратите внимание, что ваш макрос должен быть в стандартном поиске (DD SYSEXEC, SYSPROC, или DD SYSUEXEC или SYSUPROC, если ALTLIB активен, или ISPCLIB), чтобы найти.

Если вы решили написать программу, она будет немного сложнее. Ты должен:

  • префикс имени в поле начального редактирования макроса с восклицательным знаком ! поэтому ISPF знает, чтобы вызывать его как программу, а не как скрипт (это означает максимум 7 символов для имени);
  • удалить перед собой восклицательный знак перед выполнением SELECT;
  • и добавить 'DEFINE MYMACRO MACRO PGM' В первой строке логики первого вызова ISPF знает, что это программа, а не скрипт.

В этом сценарии при выполнении в качестве начального макроса редактирования ZEDTMCMD будет иметь ведущий восклицательный знак.

Создав один макрос, вы можете упростить добавление новых команд в будущем.

Установка ISPLF SAMPLIB (обычно называется ISP.SISPSAMP, но может отличаться в вашей установке) имеет несколько примеров макросов, все начинающиеся с ISR*. Есть сценарии REXX, CLIST, COBOL и примеры PL/I. (Нет ассемблера, но его создание - тривиальное упражнение.)

TOP и BOTTOM являются командами в таблице команд ISPF. Они не являются командами РЕДАКТИРОВАТЬ. Это алиасы для UP MAX и DOWN MAX. Команда ISPF должна иметь длину не менее 2 байтов, поэтому вы не можете создать новый ALIAS в таблице команд для UP MAX, используя 1-байтовый символ. Вы можете определить макрос Edit с именем T. Макрос может сделать что-то вроде

/* REXX */
address ISREDIT "MACRO"
address ISREDIT "LOCATE 0"
exit(0)

B для ДНА может быть

/* REXX */
address ISREDIT "MACRO"
address ISREDIT "LOCATE .ZLAST"
exit(0)

Обратите внимание, что B поставит вас на последнюю строку, а не на последнюю полную страницу, как это делает BOTTOM. Для TOP и BOTTOM лично я бы использовал PF7 или PF8 с M в командной строке, чтобы выполнить максимальную прокрутку. Это всего лишь 1 символ с PFKEY в отличие от клавиши ввода.

Другие вопросы по тегам