新迭代之前忙里偷闲摸鱼了几种脚本的写法: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” (直接发声进行打印)

AppleScript的字典怎么看怎么用的更多相关文章

  1. 改变word的语言字典

    改变word的语言字典 上周末看论坛有人提出否有方法用代码改变word的语言字典,因为默认的语言会影响现用语言输入的拼写器和其他校对工具.我们的Spire.doc正好支持,正好闲来无事所以我用西班牙语 ...

  2. linux awk 一看就懂

    awk是什么 awk是linux环境下的一个命令行工具,但是由于awk强大的能力,我们可以为awk工具传递一个字符串,该字符串的内容类似一种编程语言的语法,我们可以称其为Awk语言,而awk工具本身则 ...

  3. Trie字典树 静态内存

    静态字典树 看了好久的字典树,挺简单的一个结构,愣是看了这么久才写出来... 专心一点就不会这样了.... 接下来就去刷刷字典树的题吧....... 下面是字典树.... 定义节点 typedef s ...

  4. iOS实现类似QQ的好友列表,自由展开折叠(在原来TableView的基础上添加一个字典,一个Button)

    //直接代码 只包含 折叠展开字典的处理搭建#import "CFViewController.h" @interface CFViewController ()<UITab ...

  5. Python字典、集合之高山流水

    字典dict字典是由大括号{键:值}组成.字典是无序的.字典的键必须是不可变数据类型.不能使用列表作为键,但可以使用元祖作为字典的键.例如: dict_ = {"test":&qu ...

  6. python中的这些坑,早看早避免。

    python中的这些坑,早看早避免. 说一说python中遇到的坑,躲坑看这一篇就够了 传递参数时候不要使用列表 def foo(num,age=[]): age.append(num) print( ...

  7. 还没有写完准备弡上cpickle 还有字典

    #!/usr/bin/python #Filename: cpickle.py import cPickle as p import os shoplistfile="shoplist.da ...

  8. crunch字典生成

    密码破解基本有三种方法:第一种是人工猜解(垃圾桶工程和被动信息收集): 第二种是基于字典暴力破解(主流) 在kali里,是默认自带了字典的,分别放在下面三个文件中:/usr/share/wordlis ...

  9. Python基础——原生数据类型(字典,列表,元组,字符串)

    字典Dictionary 字典定义了键值对的1对1管理. 1.定义字典 请看下面的栗子,我们先创建了一个具有两个元素的字典,每对都是key:value的形式. 我们能通过key得到value,但是不能 ...

随机推荐

  1. 设计模式之美:Template Method(模板方法)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Template Method 模式结构样式代码. 意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. Templat ...

  2. 【WEB】初探Spring MVC框架

    Spring MVC框架算是当下比较流行的Java开源框架.但实话实说,做了几年WEB项目,完全没有SpringMVC实战经验,乃至在某些交流场合下被同行严重鄙视“奥特曼”了.“心塞”的同时,只好默默 ...

  3. 坑爹的BufferManager

    特别记录一下 国内外各种关于 Socket 的例子或开源项目,大部分都采用了 BufferManager.cs(代码类似). 也不知道是哪一个坑货写的.有一定几率会导致内存无法复用,导致数据是上一个的 ...

  4. 浅谈Excel开发:五 Excel RTD函数

        上文介绍了Excel中的UDF函数,本文介绍一下同样重要的RTD函数.从Excel 2002开始,Excel引入了一种新的查看和更新实时数据的机制,即real-time data简称RTD函数 ...

  5. http学习笔记(四)——HTTP报文

    http报文是在http应用程序之间发送的数据块,这些数据块以一些文本形式的元信息. 请求报文从客户端流入服务器,向服务器请求数据,服务器响应请求,响应报文从服务器流出,回到客户端. 这就构成了一个事 ...

  6. [问题解决]安装 SQL Server 无法开启NetFx3.5 的错误

    谷歌了一下,该问题是由于系统中缺少.Net3.5相关特性造成的.需要手动安装一下3.5的环境 解决办法: Windows 徽标键+R打开运行窗口 输入Dism /online /enable-feat ...

  7. 远程调试 Azure Web App

    当我们将 Web App 部署在 Azure 上时,如果能够实现远程调试,将会极大的提高我们修复 bug 的效率.Visual Studio 一贯以功能强大.易用著称,当然可以实现基于 Azure 应 ...

  8. C/C++ char* arr与char arr[]的区别(反汇编解析)

    写作日期:2016.08.31 修改日期:2016.09.01 .2016.09.02. 交流qq:992591601 用了几天时间复习了下C语言.对于C语言的字符串操作有些不习惯,于是作为练习,写下 ...

  9. ehcache2拾遗之cache持久化

    问题描述 应用在使用过程中会需要重启等,但是如果ehcache随着应用一起重启,那么刚重启的时候就会出现大量的miss,需要一定的访问量来重建缓存,如果缓存能够持久化,重启之后可以复用将会有助于缓解重 ...

  10. React Native02-开始运行 Android篇

    1. 开始运行 1)用命令进入到新建的文件目录下,比如HelloWorld,再输入 react-native start: 在等待一段时间后,我们看到最后面有个地址,说明已经运行成功了. 我们输入地址 ...