macros - 如何更改编辑中的主要命令

标签 macros edit zos mvs ispf

我想在 ISPF Edit 中添加一些快捷方式。

例如,我想输入 T 表示“TOP”,输入 B 表示“BOT”。我怎样才能做到这一点?我尝试输入

define t alias top

在命令行中,但它不起作用:如果我使用快捷方式,我会收到“COMMAND TOP NOT FOUND”。

我怎样才能实现这个目标?以及如何在每次打开“编辑”时使用此快捷方式?

最佳答案

一个灵活的解决方案是创建一个具有双重职责的初始编辑宏。在作为初始编辑宏第一次调用时,它将 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 with highlight of initial macro field

请注意,您的宏需要位于标准查找(DD SYSEXEC、SYSPROC,或者 DD SYSUEXEC 或 SYSUPROC(如果 ALTLIB 处于事件状态)中,或者 ISPCLIB)中才能找到。

如果您决定编写一个程序,那就有点复杂了。你必须:

  • 在初始编辑宏字段中的名称前加上感叹号!,以便 ISPF 知道将其作为程序而不是脚本调用(这意味着名称最多 7 个字符);<
  • 在执行SELECT之前删除前导感叹号;
  • 并添加'DEFINE MYMACRO MACRO PGM'作为第一次调用逻辑的第一行,这样ISPF就知道它是一个程序,而不是一个脚本。

在这种情况下,当作为初始编辑宏执行时,ZEDTMCMD 将具有前导感叹号。

通过创建一个宏,您可以更轻松地在将来添加新命令。

ISPF 安装 SAMPLIB(通常名为 ISP.SISPSAMP,但在您的安装中可能有所不同)有几个示例宏,全部以 ISR* 开头。有 REXX 脚本、CLIST、COBOL 和 PL/I 示例。 (没有汇编程序,但创建一个汇编程序是一项微不足道的练习。)

关于macros - 如何更改编辑中的主要命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44546050/

相关文章:

tags - 有没有可以只编辑一个swf标签的SWF库?

php - Drupal:为我的表单创建一个特殊的模板文件会影响我的 css,它不会加载

cobol - 如何在 COBOL 中存储 VSAM 密码文件的凭据?

cobol - 在 COBOL 程序中出现重叠错误

c++ - 请解释这个执行强制转换和类型检查的硬核宏

c - 如何在程序集中创建结构成员指针?

c++ - 如何在另一个#define 中实现#define?

delphi - 从 Delphi 打开并编辑 Word 模板

macros - Haxe 生成带有参数的 super 调用

c - 阻塞式 I/O 缓冲与非阻塞式 I/O 缓冲?