zoukankan      html  css  js  c++  java
  • AppleScript的字典怎么看怎么用

    新迭代之前忙里偷闲摸鱼了几种脚本的写法:bash, alfred,automator,applescript

    这篇就说说这个applescript

    以iterm为例
    初看它的字典大概长这样:

    1、方法包
    它有两个suite也就是两个方法包
    第一个看名字就知道是一个标准包,这个系统自动加的,给每一个应用程序会自动生成一个这样的方法包,里面的方法很多是一样的,但是有的细节有区别:
     
    第二个方法包就是软件自己提供的方法包了
    这里上面浅蓝色的是方法,紫色的是类,类可以有自己的方法,下面分别讲
     

    2、方法
    1. 其实这里的方法有一点消息的意思,跟OC有点像
    2. 第一行
      1. 先是方法名split vertically(用竖直线切割)
      2. 然后v的意思就是动词,类似方法的意思
      3. 然后接着是对这个方法的描述
    3. 第二行开始是这个消息的发送格式
      1. 先是主消息名
      2. 后边接一个specifier类型的参数(有的时候不用传参数)
        1. 这个specifier类型是什么在哪儿都找不到,自己领悟并且看其他各种的注释(对,对同一个类型的描述注释都不太一样,像这里这个描述,根本就风马牛不相及)并且搜索各种别人的插边球回答并且翻看了一些别人写的AS代码,最后实践试出来,这个类型的意思是:window tab session一类的东西
      3. 之后是描述
    4. 第三行以及之后就是次消息名
      1. 用中括号括起的表示可选参数,没用的就是必选
      2. text类型就是String类型
    5. 最后一行一个箭头加后边,是返回值类型的意思
     

    3、类
    1. n表示是名词,是类
    2. 然后第一部分是包含和被包含关系 elements,类似类图,告诉你持有和被持有的关系
    3. 第二部分是方法properties,这块非常重要,是你要使用的
      1. 这个方法比上面的方法形式要简单,不需要传参数,括号里就是返回值类型,后边接着描述
      2. 方法调用的方式是:[返回值] = [方法] of [类]
     

    4、一个重要的公用类:application
    说这个类重要是因为在我实际操作中发现它非常重要
    它是程序开启(也就是被tell之后就自动生成的类),然后很多方法都需要传入这个参数,可以说他是一切操作的开始
     
    通过这个类的方法能获取到一些重要的系统常量:当前应用的窗口、可见性、大小等等数据
     
    在使用Iterm的时候我最觉得重要的是就是返回当前的窗口了,从窗口中才能拿session,拿到session才能干后边所有的活
     

    5、举例
    以一段对iterm操作的代码为例具体解释一下使用时的技巧
    这段代码实现的效果是:按照我的需求打开我的iterm,切分窗口,使用不同的配置文件,分别进入某个路径
     
    tell application "iTerm"


    set session1 to (current session of current window)
    write session1 text "cd ~/AndroidStudioProjects/HqyxEduStudentAndroid"

    set session2 to (split vertically session1 with profile "Teacher")
    write session2 text "cd ~/AndroidStudioProjects/Tea"

    set session3 to (split horizontally session1 with profile "Common")
    write session3 text "cd ~/AndroidStudioProjects/SharedLibrary"

    split horizontally session2 with profile "MyProfile"

    end tell
    split vertically session1 with profile "Teacher" command "cd ~/AndroidStudioProjects/Tea"
    1. 在讲之前先科普一下自己在探索过程中发现的这个iterm里的几个概念
      1. window,这个是所有app共通的,就是整个程序窗口
      2. tab,这里没有出现使用,指的是一个个tab页面
      3. session,是会话的意思,这里值的是一个个小窗口,或者感觉是一个个小进程
    2. 然后下一段是两句话
      1. 第一句:先是括号内通过application类的类方法获取当前的窗口(因为是元类,所以可以直接调方法),然后通过这个窗口的方法获取当前的session,并且把这个session进行赋值
      2. 第二个句是给这个session的窗口中运行命令
      3. 注意,这个session是默认创建的,我们都控制不了
    3. 下一段还是两句话
      1. 先是括号内,这句号本身就是一个方法调用,在session1上切分一个新的窗口,并且使用teacher的配置文件来配置,这句话会返回新创建的session,然后把这个session记录下来并且赋值
      2. 第二句就是跟上面一样了
      3. 非常值得一提的是,第一句括号里的方法本来是还有一个command参数的,使用这个参数的话两句话可以合并为一句话(表格中第二行),但是非常遗憾的是,它会莫名奇妙报错,所以只能放弃这种写法
    4. 后边几段就都是一样了
     

    总结一些常用知识(非常主观):
    1. 资料非常少,可以看到用的人非常少,需要自己探索
    2. 居然有两本书的资料可以方便下到,但是这两本书里能给的帮助真是不多
    3. 用过的人都说不好,确实是正在没落的语言
    4. 会莫名奇妙崩溃,探索能曲线救国的方法
    5. 线程迷之不安全,最好写得线程健壮
     
    总结一些习惯用法:
    1. 获取当前窗口
    2. 调用对象的属性方法
    3. 赋值方法
    4. 可以使用小括号进行优先执行
    5. 判断某个应用是否开启
    6. if else
    7. 延时:delay 1(延时1S后继续执行)
    8. 打印结果:say “string” (直接发声进行打印)
  • 相关阅读:
    关于ArcGis for javascrept查询ArcGis server图层信息的方式
    Elasticsearch教程之基础概念
    C# 将日期转换成中文格式
    .Net 自定义Excel模板导出数据
    JavaScript判断浏览器类型
    简单的json传送数据
    Oracle替换临时表空间
    Python多线程循环
    crontab执行不生效-【问题篇】
    Python将MySQL表数据写入excel
  • 原文地址:https://www.cnblogs.com/bellkosmos/p/6098146.html
Copyright © 2011-2022 走看看