首页 > 其他分享 >[AHK2 工具] 内置处理器

[AHK2 工具] 内置处理器

时间:2024-10-25 13:43:06浏览次数:4  
标签:内置 return .. AHK2 echo static 处理器 parsed

开始

内置处理器通常使用的是未开放的接口,如直接调用处理器管理器的方法;这些在用户处理器中是不会使用的,但可以由脚本提供。

目前有个内置处理器:

  • Echo 常用来查看关键字的值和测试。
  • Exit 退出程序
  • Hist 管理历史模块使用的本地文件
  • Meow 获取当前注册的处理器及调用处理器的Echo方法
  • Exec 接受一条命令并执行

这五个处理器都具有独特的作用,用户处理器可以调用它们的方法获得更多的灵活。

实现

下面,一一介绍它们的设计与实现。

Echo

它的目的很简单,实现也十分简单:

#Include ../baseHandle.ahk

class Echo extends BaseHandle {
  static nullable := true

  static Handle(parsed) {
    for v in parsed.params
      t .= '-' v ' '
    for k, v in parsed.kvparams.OwnProps()
      IsArray(v) ? t .= Format('-{}=[{}] ', k, v.Join()) : t .= Format('-{}={} ', k, v)
    t .= Array(parsed.target, parsed.extra*).Join(A_Space)

    return this.Succ(t)
  }

  static Echo() => '
  (
    echo 内置命令。
    echo [target]
    回显输入。
  )'
}

可以看到,所做的仅仅只是裁剪解析后的字符串。

Exit

这个命令实际使用的很少,我一直都是Esc直接退出,而不会敲这个命令。

它的实现借助于调用方,会返回一个标志表示执行完命令后退出程序;这在其他处理器中也十分常用,并不独特。

#Include ../baseHandle.ahk

class Exit_ extends BaseHandle {
  static nullable := true

  static Handle(*) => this.Succ('bye.', 'x')

  static Echo() => '
  (
    exit 内置命令。
    exit []
    退出脚本。
  )'
}

Hist

只支持两种操作:打开本地文件和清空本地文件。

#Include ../../core/historyMgr.ahk
#Include ../baseHandle.ahk

class Hist extends baseHandle {

  static Handle(parsed) {
    switch parsed.target {
      case 'open': History.OpenFile()
      case 'clear': History.Clear()
      default: return this.Fail('无效的操作')
    }
    return this.Succ('ok', 'x')
  }

  static Echo() => '
  (
    hist 内置命令。
    hist [open|clear]
    open   打开历史命令文件。
    clear  清空历史命令。
  )'
}

Meow

当没有执行目标时,显示所有注册的处理器;否则回显处理器的帮助信息。

#Include ../baseHandle.ahk
#Include ../../core/handleMgr.ahk

class Meow extends BaseHandle {
  static nullable := true

  static Handle(parsed) {
    if Mgr.h.Has(parsed.target)
      return this.Succ(Mgr.h.Get(parsed.target).Echo())
    switch parsed.target {
      case '': return this.Succ(Mgr.h.Keys.Join(',') '(' Mgr.h.Count ')')
      case 'conf':
        return Mgr.h.Has(e := parsed.Extra[1])
          ? this.Succ(Mgr.h.Get(e).Conf())
          : this.Fail('不存在的处理器:' e)
      default: return this.Fail('不支持的操作')
    }
  }

  static Echo() => '
  (
    meow 内置命令。
    meow [cmd]
    无目标将回显所有注册命令;
    否则,显示目标帮助文档。
  )'
}

Exec

它调用Mgr的方法来实现功能

处理器的主要目的是给用户提供接口

#Include ../baseHandle.ahk
#Include ../../core/handleMgr.ahk

class Exec extends BaseHandle {

  static Handle(parsed) {
    if (r := Mgr.Check(parsed.target)).valid {
      if r.handler.Prototype.__Class = 'Exec'
        return this.Fail('Recursive calls(exec)')
      echo := Mgr.Call(r.handler, r.parsed)
      if echo.extra = MeowTool.asyncFlag {
        res := ''
        echo.r.done := (_, _r, flag) => res := { flag: flag, r: _r }
        echo.r.succ := (_, _r) => res := { flag: true, r: _r }
        echo.r.fail := (_, _r) => res := { flag: false, r: _r }
        echo.r.Call()
        return this.Done(res.r, res.flag)
      } else return this.Succ(echo.r)
    }
    return this.Fail(r.msg)
  }

  static Echo() => '
  (
    exec 内置命令。
    exit target
    执行一条注册命令,不可调用自己。
  )'
}

使用示例

这是一个自定义处理器使用此内置处理器的示例。

它增强了内置的exec命令,可以使用符号来连接命令,达到灵活的命令组合效果:

  • ;表示顺序执行
  • |表示将上条命令结果作为下条目标
  • &表示上条命令才执行
  • ^表示上条命令失败才执行

例子:echo t | echo & echo done!

#Include ../buildin/exec.ahk
#Include ../baseHandle.ahk

class Exec2 extends BaseHandle {

  static Handle(parsed) {
    target := parsed.raw.substring(parsed.which.Length + 1) ; 避免频繁的转义

    cs := target.toCharArray()
    ec := '\', qc := "'", i := 1, _q := false, s := '', r := [], cmds := [], ops := []
    while i <= cs.Length {
      esc := false
      if cs[i] = ec
        esc := !esc, i++
      if !esc and cs[i] = qc {
        _q := !_q, i++
        continue
      }
      if !_q and !esc {
        switch cs[i] {
          case '|': cmds.Push(s.Trim()), ops.Push(0), s := ''
          case '&': cmds.Push(s.Trim()), ops.Push(1), s := ''
          case '^': cmds.Push(s.Trim()), ops.Push(2), s := ''
          case ';': cmds.Push(s.Trim()), ops.Push(3), s := ''
          default: s .= cs[i]
        }
      } else s .= cs[i]
      i++
    }
    if !(s := Trim(s))
      return this.Fail('empty element(' i - 1 ')')
    cmds.Push(s)

    last := Exec.Handle({ target: cmds[1] }), _i := 2
    r.Push(Format('{}({})-{}', last.flag ? 'Y' : 'N', r.Length + 1, last.r))

    for i, v in ops {
      switch v {
        case 0:
          last := Exec.Handle({ target: cmds[_i++] ' ' last.r })
        case 1:
          if !last.flag {
            r.Push('Interrupted')
            return this.Succ(r.Join('`n'))
          }
          last := Exec.Handle({ target: cmds[_i++] })
        case 2:
          if last.flag {
            r.Push('Interrupted')
            return this.Succ(r.Join('`n'))
          }
          last := Exec.Handle({ target: cmds[_i++] })
        case 3:
          last := Exec.Handle({ target: cmds[_i++] })
      }
      r.Push(Format('{}({})-{}', last.flag ? 'Y' : 'N', r.Length + 1, last.r))
    }

    return this.Succ(r.Join('`n'))
  }

  static Echo() => '
  (
    e
    e target
    增强内置Exec命令。
  )'

}

标签:内置,return,..,AHK2,echo,static,处理器,parsed
From: https://www.cnblogs.com/refiz/p/18502349

相关文章

  • 基于全志T113-i多核异构处理器的全国产嵌入式核心板简介
    一、嵌入式核心板产品介绍基于全志公司的T113-i处理器精心设计的多核异构处理器、工业级ECK30-T13IA系列嵌入式核心板,采用邮票孔连接的低成本、低功耗、高性价比、高可靠性的全国产化工业级嵌入式核心板。ECK30系列核心板可广泛应用于工业控制、HMI、IoT等领域。全志公司的T113-......
  • 基于全志T113-i多核异构处理器的全国产嵌入式核心板简介
    一、嵌入式核心板产品介绍基于全志公司的T113-i处理器精心设计的多核异构处理器、工业级ECK30-T13IA系列嵌入式核心板,采用邮票孔连接的低成本、低功耗、高性价比、高可靠性的全国产化工业级嵌入式核心板。ECK30系列核心板可广泛应用于工业控制、HMI、IoT等领域。全志公司的T113-i处......
  • 【thinkphp8】00007 内置服务器,切换php版本
    前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • JavaWeb合集14-全局异常处理器
    十四、全局异常处理器全局异常处理器(GlobalExceptionHandler)是指一种机制,用于集中处理应用程序中未被捕获的异常。全局异常处理器可以用来统一处理整个应用程序中可能出现的异常,从而确保在出现未预期的错误时,程序能够以一种优雅的方式处理这些错误,并提供一致的错误响应......
  • 热门短剧搜索网站+内置1.2万条短视频数据+无授权开心版
    热门短剧搜索网站+内置1.2万条短视频数据+无授权开心版热门短剧搜索网站+内置1.2万条短视频数据+无授权开心版运行环境PHP7.2+MYSQL5.6+伪静态......
  • js查缺补漏——闭包和单体内置对象Global、Math
    单体内置对象内置对象的概念:不依赖于宿主环境的对象,这些对象在程序之前前就已经存在,不需要再去实例化了。比如Object、Array、String。所以了解一下常用的这两个,Global和Math对象。一、Global对象方法:isNaN(),isFinite(),parseInt(),parseFloat()这些都是Global对象......
  • 胡来新TV1.2.0 | 播放流畅,内置特殊频道
    胡来新TV是一款功能强大的电视直播TV软件,提供丰富的电视观看体验。软件包含各种类型的资源,支持在线直播和离线视频播放。支持观看央视、卫视、地方台等各类直播频道,还有IPV4、IPV6电视直播源。此外,还有戏曲、我爱发明、急救技能等特色频道分类,有特色频道的直播源,值得一看。......
  • 一站式AI自动化剪辑 内置多种功能 永久免费
    AI影视解说自动化剪辑工具,功能非常强大,吊打所有视频解说,解放双手,从我开始【资源名称】:纳拉托艾【资源大小】:1.27【资源版本】:0.1【测试机型】:Win11.【资源介绍】:一站式AI影视解说,自动化剪辑,自动生成视频,自动进行解说,功能强大【下载链接】:https://pan.quark.cn/s/3aec2......
  • 044 内置指令总结
    ......