rb-appscript 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +30 -0
- data/LICENSE +1 -1
- data/README +7 -3
- data/TODO +7 -1
- data/doc/aem-manual/01_introduction.html +23 -9
- data/doc/aem-manual/02_apioverview.html +25 -11
- data/doc/aem-manual/03_packingandunpackingdata.html +22 -17
- data/doc/aem-manual/04_references.html +49 -36
- data/doc/aem-manual/05_targettingapplications.html +25 -14
- data/doc/aem-manual/06_buildingandsendingevents.html +47 -21
- data/doc/aem-manual/07_findapp.html +22 -11
- data/doc/aem-manual/08_examples.html +21 -10
- data/doc/aem-manual/index.html +28 -12
- data/doc/appscript-manual/01_introduction.html +40 -27
- data/doc/appscript-manual/02_aboutappscripting.html +28 -15
- data/doc/appscript-manual/03_quicktutorial.html +29 -16
- data/doc/appscript-manual/04_gettinghelp.html +31 -16
- data/doc/appscript-manual/05_keywordconversion.html +23 -10
- data/doc/appscript-manual/06_classesandenums.html +32 -19
- data/doc/appscript-manual/07_applicationobjects.html +31 -18
- data/doc/appscript-manual/08_realvsgenericreferences.html +23 -11
- data/doc/appscript-manual/09_referenceforms.html +33 -20
- data/doc/appscript-manual/10_referenceexamples.html +30 -17
- data/doc/appscript-manual/11_applicationcommands.html +25 -13
- data/doc/appscript-manual/12_commandexamples.html +26 -15
- data/doc/appscript-manual/13_performanceissues.html +46 -20
- data/doc/appscript-manual/14_notes.html +29 -19
- data/doc/appscript-manual/index.html +27 -11
- data/doc/full.css +95 -9
- data/doc/index.html +27 -10
- data/doc/mactypes-manual/01_introduction.html +56 -0
- data/doc/mactypes-manual/02_aliasclass.html +134 -0
- data/doc/mactypes-manual/03_fileurlclass.html +136 -0
- data/doc/mactypes-manual/04_unitsclass.html +102 -0
- data/doc/mactypes-manual/index.html +26 -227
- data/doc/osax-manual/01_introduction.html +69 -0
- data/doc/osax-manual/02_interface.html +149 -0
- data/doc/osax-manual/03_examples.html +75 -0
- data/doc/osax-manual/04_notes.html +80 -0
- data/doc/osax-manual/index.html +26 -195
- data/doc/rb-appscript-logo.png +0 -0
- data/rb-appscript.gemspec +2 -2
- data/sample/TextEdit_demo.rb +1 -1
- data/src/lib/_aem/aemreference.rb +1 -1
- data/src/lib/_aem/codecs.rb +42 -8
- data/src/lib/_aem/connect.rb +3 -1
- data/src/lib/_aem/findapp.rb +1 -1
- data/src/lib/_aem/mactypes.rb +1 -1
- data/src/lib/_aem/send.rb +162 -142
- data/src/lib/_aem/typewrappers.rb +2 -2
- data/src/lib/_appscript/defaultterminology.rb +76 -46
- data/src/lib/_appscript/referencerenderer.rb +1 -1
- data/src/lib/_appscript/reservedkeywords.rb +2 -2
- data/src/lib/_appscript/safeobject.rb +1 -1
- data/src/lib/_appscript/terminology.rb +30 -19
- data/src/lib/aem.rb +1 -6
- data/src/lib/appscript.rb +65 -20
- data/src/lib/osax.rb +21 -18
- data/src/rbae.c +1 -1
- data/test/test_appscriptcommands.rb +1 -1
- metadata +12 -3
@@ -2,7 +2,7 @@
|
|
2
2
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
3
3
|
<head>
|
4
4
|
|
5
|
-
<title>appscript | 11. Application Commands</title>
|
5
|
+
<title>rb-appscript manual | 11. Application Commands</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
8
|
<style type="text/css" media="all"><!--@import url(../full.css);--></style>
|
@@ -10,18 +10,28 @@
|
|
10
10
|
</head>
|
11
11
|
<body>
|
12
12
|
|
13
|
-
<h1
|
13
|
+
<h1><img src="../rb-appscript-logo.png" alt="rb-appscript" title="rb-appscript" /></h1>
|
14
14
|
|
15
15
|
<!-- top navigation -->
|
16
16
|
<div class="navbar">
|
17
|
-
|
18
|
-
|
17
|
+
<a href="10_referenceexamples.html">Previous</a> •
|
18
|
+
<a href="index.html">Up</a> •
|
19
|
+
<a href="12_commandexamples.html">Next</a>
|
20
|
+
|
21
|
+
<span>
|
22
|
+
<strong><a href="../appscript-manual/index.html">appscript</a></strong> /
|
23
|
+
<a href="../mactypes-manual/index.html">mactypes</a> /
|
24
|
+
<a href="../osax-manual/index.html">osax</a> /
|
25
|
+
<a href="../aem-manual/index.html">aem</a>
|
26
|
+
</span>
|
19
27
|
</div>
|
20
28
|
|
21
29
|
<!-- content -->
|
22
30
|
<div id="content">
|
23
31
|
|
24
|
-
<h2>
|
32
|
+
<h2>11. Application Commands</h2>
|
33
|
+
|
34
|
+
<h3>Command syntax</h3>
|
25
35
|
|
26
36
|
<p>Appscript commands have the following syntax:</p>
|
27
37
|
|
@@ -80,7 +90,7 @@
|
|
80
90
|
|
81
91
|
<p>See the Special cases section below for additional rules.</p>
|
82
92
|
|
83
|
-
<
|
93
|
+
<h3>Examples</h3>
|
84
94
|
|
85
95
|
<pre><code># tell application "TextEdit" to activate
|
86
96
|
app('TextEdit').activate
|
@@ -105,7 +115,7 @@ app('Finder').home.items.get(:result_type => :alias)</code></pre>
|
|
105
115
|
|
106
116
|
|
107
117
|
|
108
|
-
<
|
118
|
+
<h3>Special cases</h3>
|
109
119
|
|
110
120
|
<p>The following special-case behaviours are implemented for convenience:</p>
|
111
121
|
|
@@ -156,7 +166,7 @@ app('Finder').home.items.get(:result_type => :alias)</code></pre>
|
|
156
166
|
</ol>
|
157
167
|
|
158
168
|
|
159
|
-
<
|
169
|
+
<h3>Note to AppleScript users</h3>
|
160
170
|
|
161
171
|
<p>Unlike AppleScript, which implicitly sends a <code>get</code> command to any unresolved application object references at the end of evaluating an expression, appscript only resolves a reference when it receives an appropriate command. For example:</p>
|
162
172
|
|
@@ -195,12 +205,14 @@ print d
|
|
195
205
|
</div>
|
196
206
|
|
197
207
|
<!-- bottom navigation -->
|
198
|
-
|
199
|
-
|
200
|
-
|
208
|
+
|
209
|
+
<div class="footer">
|
210
|
+
<a href="10_referenceexamples.html">Previous</a> •
|
211
|
+
<a href="index.html">Up</a> •
|
212
|
+
<a href="12_commandexamples.html">Next</a>
|
213
|
+
|
214
|
+
<span>© 2006-2008 HAS</span>
|
201
215
|
</div>
|
202
216
|
|
203
|
-
<!--footer-->
|
204
|
-
<p class="footer">© 2006-2008 HAS</p>
|
205
217
|
</body>
|
206
218
|
</html>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
3
3
|
<head>
|
4
4
|
|
5
|
-
<title>appscript | 12. Command Examples</title>
|
5
|
+
<title>rb-appscript manual | 12. Command Examples</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
8
|
<style type="text/css" media="all"><!--@import url(../full.css);--></style>
|
@@ -10,19 +10,28 @@
|
|
10
10
|
</head>
|
11
11
|
<body>
|
12
12
|
|
13
|
-
<h1
|
13
|
+
<h1><img src="../rb-appscript-logo.png" alt="rb-appscript" title="rb-appscript" /></h1>
|
14
14
|
|
15
15
|
<!-- top navigation -->
|
16
16
|
<div class="navbar">
|
17
|
-
|
18
|
-
|
17
|
+
<a href="11_applicationcommands.html">Previous</a> •
|
18
|
+
<a href="index.html">Up</a> •
|
19
|
+
<a href="13_performanceissues.html">Next</a>
|
20
|
+
|
21
|
+
<span>
|
22
|
+
<strong><a href="../appscript-manual/index.html">appscript</a></strong> /
|
23
|
+
<a href="../mactypes-manual/index.html">mactypes</a> /
|
24
|
+
<a href="../osax-manual/index.html">osax</a> /
|
25
|
+
<a href="../aem-manual/index.html">aem</a>
|
26
|
+
</span>
|
19
27
|
</div>
|
20
28
|
|
21
29
|
<!-- content -->
|
22
30
|
<div id="content">
|
23
31
|
|
32
|
+
<h2>12. Command Examples</h2>
|
24
33
|
|
25
|
-
<
|
34
|
+
<h3><code>get</code></h3>
|
26
35
|
|
27
36
|
<p>Get the name of every folder in the user's home folder:</p>
|
28
37
|
|
@@ -35,7 +44,7 @@ app('Finder').get(app.home.folders.name)</code></pre>
|
|
35
44
|
<pre><code>app('Finder').home.folders.name.get</code></pre>
|
36
45
|
|
37
46
|
|
38
|
-
<
|
47
|
+
<h3><code>set</code></h3>
|
39
48
|
|
40
49
|
<p>Set the content of a TextEdit document:</p>
|
41
50
|
|
@@ -44,7 +53,7 @@ app('Finder').get(app.home.folders.name)</code></pre>
|
|
44
53
|
app('TextEdit').documents[1].text.set('Hello World')</code></pre>
|
45
54
|
|
46
55
|
|
47
|
-
<
|
56
|
+
<h3><code>count</code></h3>
|
48
57
|
|
49
58
|
<p>Count the words in a TextEdit document:</p>
|
50
59
|
|
@@ -61,7 +70,7 @@ app('Finder').home.count(:each => :item)</code></pre>
|
|
61
70
|
<p>(Note that the <code>each</code> parameter is required in Finder's <code>count</code> command.)</p>
|
62
71
|
|
63
72
|
|
64
|
-
<
|
73
|
+
<h3><code>make</code></h3>
|
65
74
|
|
66
75
|
<p>Create a new TextEdit document:</p>
|
67
76
|
|
@@ -90,7 +99,7 @@ app('TextEdit').make(
|
|
90
99
|
:with_data => "Yesterday\nToday\nTomorrow\n")</code></pre>
|
91
100
|
|
92
101
|
|
93
|
-
<
|
102
|
+
<h3><code>duplicate</code></h3>
|
94
103
|
|
95
104
|
<p>Duplicate a folder to a disk, replacing an existing item if one exists:</p>
|
96
105
|
|
@@ -101,7 +110,7 @@ app('Finder').home.folders['Projects'].duplicate(
|
|
101
110
|
:to => app.disks['Backup'], :replacing => true)</code></pre>
|
102
111
|
|
103
112
|
|
104
|
-
<
|
113
|
+
<h3><code>add</code></h3>
|
105
114
|
|
106
115
|
<p>Add every person with a known birthday to a group named "Birthdays":</p>
|
107
116
|
|
@@ -118,12 +127,14 @@ app('Address Book').people[
|
|
118
127
|
</div>
|
119
128
|
|
120
129
|
<!-- bottom navigation -->
|
121
|
-
|
122
|
-
|
123
|
-
|
130
|
+
|
131
|
+
<div class="footer">
|
132
|
+
<a href="11_applicationcommands.html">Previous</a> •
|
133
|
+
<a href="index.html">Up</a> •
|
134
|
+
<a href="13_performanceissues.html">Next</a>
|
135
|
+
|
136
|
+
<span>© 2006-2008 HAS</span>
|
124
137
|
</div>
|
125
138
|
|
126
|
-
<!--footer-->
|
127
|
-
<p class="footer">© 2006-2008 HAS</p>
|
128
139
|
</body>
|
129
140
|
</html>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
3
3
|
<head>
|
4
4
|
|
5
|
-
<title>appscript | 13. Performance Issues</title>
|
5
|
+
<title>rb-appscript manual | 13. Performance Issues</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
8
|
<style type="text/css" media="all"><!--@import url(../full.css);--></style>
|
@@ -10,17 +10,28 @@
|
|
10
10
|
</head>
|
11
11
|
<body>
|
12
12
|
|
13
|
-
<h1
|
13
|
+
<h1><img src="../rb-appscript-logo.png" alt="rb-appscript" title="rb-appscript" /></h1>
|
14
14
|
|
15
15
|
<!-- top navigation -->
|
16
16
|
<div class="navbar">
|
17
|
-
|
18
|
-
|
17
|
+
<a href="12_commandexamples.html">Previous</a> •
|
18
|
+
<a href="index.html">Up</a> •
|
19
|
+
<a href="14_notes.html">Next</a>
|
20
|
+
|
21
|
+
<span>
|
22
|
+
<strong><a href="../appscript-manual/index.html">appscript</a></strong> /
|
23
|
+
<a href="../mactypes-manual/index.html">mactypes</a> /
|
24
|
+
<a href="../osax-manual/index.html">osax</a> /
|
25
|
+
<a href="../aem-manual/index.html">aem</a>
|
26
|
+
</span>
|
19
27
|
</div>
|
20
28
|
|
21
29
|
<!-- content -->
|
22
30
|
<div id="content">
|
23
|
-
|
31
|
+
|
32
|
+
<h2>13. Performance Issues</h2>
|
33
|
+
|
34
|
+
<h3>About performance</h3>
|
24
35
|
|
25
36
|
<p>Application scripting is subject to a number of potential performance bottlenecks:</p>
|
26
37
|
|
@@ -34,33 +45,46 @@
|
|
34
45
|
|
35
46
|
<p>Fortunately, it's often possible to minimise performance overheads by using fewer commands to do more work. Let's consider a typical example: obtaining the name of every person in <code>Address Book.app</code> who has a particular email address. There are several possible solutions to this, each with very different performance characteristics:</p>
|
36
47
|
|
37
|
-
<
|
38
|
-
|
48
|
+
<h3>The iterative OO-style approach</h3>
|
49
|
+
|
50
|
+
|
39
51
|
<p>While iterating over application objects and manipulating each in turn is a common technique, it's also the slowest by far:</p>
|
40
|
-
|
41
|
-
|
52
|
+
|
53
|
+
<pre><code>require "appscript"
|
54
|
+
include Appscript
|
55
|
+
|
42
56
|
|
43
57
|
desiredEmail = 'sam.brown@foo.com'
|
44
58
|
|
45
|
-
foundNames = []
|
46
59
|
person.emails.get.each do |email|
|
47
60
|
if email.value.get == desiredEmail
|
48
61
|
foundNames.push(person.name.get)
|
62
|
+
foundNames = []
|
63
|
+
app('Address Book').people.get.each do |person|
|
64
|
+
person.emails.get.each do |email|
|
65
|
+
if email.value.get == desiredEmail
|
66
|
+
foundNames.push(person.name.get)
|
49
67
|
end
|
50
68
|
end
|
51
69
|
end
|
52
|
-
p foundNames</code></pre>
|
70
|
+
p foundNames</code></pre>
|
71
|
+
|
72
|
+
|
53
73
|
<p>The above script sends one Apple event to get a list of references to all people, then one Apple event for each person to get a list of references to their emails, then one Apple event for each of those emails. Thus the time taken increases directly in proportion to the number of people in Address Book. If there's hundreds of people to search, that's hundreds of Apple events to be built, sent and individually resolved, and performance suffers as a result.</p>
|
54
74
|
|
55
75
|
<p>The solution, where possible, is to use fewer, more sophisticated commands to do the same job.</p>
|
56
76
|
|
57
77
|
|
58
|
-
<
|
78
|
+
<h3>The smart query-oriented approach</h3>
|
59
79
|
|
60
80
|
<p>While there are some situations where iterating over and manipulating each application object individually is the only option (for example, when setting a property in each object to a different value), in this case there is plenty of room for improvement. Depending on how well an application implements its AEOM support, it's possible to construct queries that identify more than one application object at a time, allowing a single command to manipulate multiple objects in a single operation.</p>
|
61
81
|
|
62
82
|
<p>In this case, the entire search can be performed using a single complex query sent to Address Book via a single Apple event:</p>
|
63
|
-
|
83
|
+
|
84
|
+
<pre><code>require "appscript"
|
85
|
+
|
64
86
|
include Appscript
|
65
87
|
|
66
|
-
desiredEmail = 'sam.brown@foo.com'
|
88
|
+
desiredEmail = 'sam.brown@foo.com'
|
89
|
+
|
90
|
+
p app('Address Book').people[
|
67
91
|
its.emails.value.contains(desiredEmail)
|
68
92
|
].name.get</code></pre>
|
69
93
|
|
@@ -75,7 +99,7 @@ desiredEmail = 'sam.brown@foo.com'
|
|
75
99
|
</ul>
|
76
100
|
|
77
101
|
|
78
|
-
<
|
102
|
+
<h3>The hybrid solution</h3>
|
79
103
|
|
80
104
|
<p>While AEOM queries can be surprisingly powerful, there are still many problems too complex for the application to evaluate entirely by itself. For example, let's say that you want to obtain the name of every person who has an email addresses that uses a particular domain name. Unfortunately, this test is too complex to express as a single AEOM query; however, it can still be solved reasonably efficiently by obtaining all the data from the application up-front and processing it locally. For this we need: 1. the name of every person in the Address Book, and 2. each person's email addresses. Fortunately, each of these can be expressed in a single query, allowing all this data to be retrieved using just two <code>get</code> commands.</p>
|
81
105
|
|
@@ -107,12 +131,14 @@ p result</code></pre>
|
|
107
131
|
</div>
|
108
132
|
|
109
133
|
<!-- bottom navigation -->
|
110
|
-
|
111
|
-
|
112
|
-
|
134
|
+
|
135
|
+
<div class="footer">
|
136
|
+
<a href="12_commandexamples.html">Previous</a> •
|
137
|
+
<a href="index.html">Up</a> •
|
138
|
+
<a href="14_notes.html">Next</a>
|
139
|
+
|
140
|
+
<span>© 2006-2008 HAS</span>
|
113
141
|
</div>
|
114
142
|
|
115
|
-
<!--footer-->
|
116
|
-
<p class="footer">© 2006-2008 HAS</p>
|
117
143
|
</body>
|
118
144
|
</html>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
3
3
|
<head>
|
4
4
|
|
5
|
-
<title>appscript | 14. Notes</title>
|
5
|
+
<title>rb-appscript manual | 14. Notes</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
8
|
<style type="text/css" media="all"><!--@import url(../full.css);--></style>
|
@@ -10,18 +10,27 @@
|
|
10
10
|
</head>
|
11
11
|
<body>
|
12
12
|
|
13
|
-
<h1
|
13
|
+
<h1><img src="../rb-appscript-logo.png" alt="rb-appscript" title="rb-appscript" /></h1>
|
14
14
|
|
15
15
|
<!-- top navigation -->
|
16
16
|
<div class="navbar">
|
17
|
-
|
18
|
-
|
17
|
+
<a href="13_performanceissues.html">Previous</a> •
|
18
|
+
<a href="index.html">Up</a>
|
19
|
+
|
20
|
+
<span>
|
21
|
+
<strong><a href="../appscript-manual/index.html">appscript</a></strong> /
|
22
|
+
<a href="../mactypes-manual/index.html">mactypes</a> /
|
23
|
+
<a href="../osax-manual/index.html">osax</a> /
|
24
|
+
<a href="../aem-manual/index.html">aem</a>
|
25
|
+
</span>
|
19
26
|
</div>
|
20
27
|
|
21
28
|
<!-- content -->
|
22
29
|
<div id="content">
|
23
30
|
|
24
|
-
<h2>
|
31
|
+
<h2>14. Notes</h2>
|
32
|
+
|
33
|
+
<h3>Rubygems issues</h3>
|
25
34
|
|
26
35
|
<p>If using the appscript gem, don't forget to <code>require 'rubygems'</code> <em>before</em> requiring appscript, otherwise the appscript gem won't load. For example:</p>
|
27
36
|
|
@@ -33,44 +42,44 @@ require 'appscript'
|
|
33
42
|
...</code></pre>
|
34
43
|
|
35
44
|
|
36
|
-
<
|
45
|
+
<h3>Security issues</h3>
|
37
46
|
|
38
47
|
<p>If including user names and/or passwords in remote application URLs, please note that appscript retains these URLs in both the <code>Terminology</code> module's internal cache and in the Application and Reference objects subsequently created from those URLs. Security here is the user's responsibility, as it's their code that creates and retains these objects.</p>
|
39
48
|
|
40
49
|
|
41
|
-
<
|
50
|
+
<h3>GUI Scripting</h3>
|
42
51
|
|
43
52
|
<p>Non-scriptable applications may in some cases be controlled from Ruby by using System Events to manipulate their graphical user interface. Note that the "Enable access for assistive devices" checkbox must be selected in the Universal Access system preferences pane for GUI Scripting to work.</p>
|
44
53
|
|
45
54
|
|
46
|
-
<
|
55
|
+
<h3>AEDescs</h3>
|
47
56
|
|
48
57
|
<p>Some applications (e.g. QuarkXpress) may return values which appscript cannot convert to equivalent Ruby types. These values are usually of types which are defined, used and understood only by that particular application, and will be represented in Ruby as raw <code>AE::AEDesc</code> objects (e.g. <code>#<AE::AEDesc:0x33fc40></code>). While there's not much you can do with raw <code>AEDesc</code> objects within Ruby (it's best just to treat them as opaque types), subsequent commands can pass them back to the application for further use and/or conversion just like any other value.</p>
|
49
58
|
|
50
59
|
|
51
|
-
<
|
60
|
+
<h3>Dealing with problem applications</h3>
|
52
61
|
|
53
62
|
<p>Appscript provides a number of mechanisms for dealing with problematic applications. See the <a href="http://rb-appscript.rubyforge.org">appscript website</a> for more information.</p>
|
54
63
|
|
55
64
|
|
56
|
-
<
|
65
|
+
<h3>Credits</h3>
|
57
66
|
|
58
67
|
<p>Many thanks to Bill Birkett, Jordan Breeding, Fujimoto Hisakuni, Jordan K Hubbard, Alexander Kellett, Chris Nebel, Matt Neuburg, Laurent Sansonetti, Michelle Steiner, Kevin Van Vechten, and all the appscript users who've provided comments, criticisms and encouragement along the way.</p>
|
59
68
|
|
60
69
|
|
61
|
-
<
|
70
|
+
<h3>Donations</h3>
|
62
71
|
|
63
72
|
<p>You can <a href="http://sourceforge.net/donate/index.php?group_id=175009">donate to the appscript project</a> via SourceForge.net. Special thanks to all those appscript users who have already contributed.</p>
|
64
73
|
|
65
74
|
|
66
|
-
<
|
75
|
+
<h3>Website</h3>
|
67
76
|
|
68
77
|
<p><a href="http://rb-appscript.rubyforge.org">http://rb-appscript.rubyforge.org</a></p>
|
69
78
|
|
70
79
|
|
71
|
-
<
|
80
|
+
<h3>Copyright</h3>
|
72
81
|
|
73
|
-
<p>(C) 2006 HAS -- hhas -at- users - sourceforge - net</p>
|
82
|
+
<p>(C) 2006-2008 HAS -- hhas -at- users - sourceforge - net</p>
|
74
83
|
|
75
84
|
<p>Appscript is released under the MIT License.</p>
|
76
85
|
|
@@ -78,12 +87,13 @@ require 'appscript'
|
|
78
87
|
</div>
|
79
88
|
|
80
89
|
<!-- bottom navigation -->
|
81
|
-
|
82
|
-
|
83
|
-
|
90
|
+
|
91
|
+
<div class="footer">
|
92
|
+
<a href="13_performanceissues.html">Previous</a> •
|
93
|
+
<a href="index.html">Up</a>
|
94
|
+
|
95
|
+
<span>© 2006-2008 HAS</span>
|
84
96
|
</div>
|
85
97
|
|
86
|
-
<!--footer-->
|
87
|
-
<p class="footer">© 2006-2008 HAS</p>
|
88
98
|
</body>
|
89
99
|
</html>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
3
3
|
<head>
|
4
4
|
|
5
|
-
<title>appscript | Contents</title>
|
5
|
+
<title>rb-appscript manual | Contents</title>
|
6
6
|
|
7
7
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
8
8
|
<style type="text/css" media="all"><!--@import url(../full.css);--></style>
|
@@ -10,16 +10,28 @@
|
|
10
10
|
</head>
|
11
11
|
<body>
|
12
12
|
|
13
|
-
<h1
|
13
|
+
<h1><img src="../rb-appscript-logo.png" alt="rb-appscript" title="rb-appscript" /></h1>
|
14
14
|
|
15
15
|
<!-- top navigation -->
|
16
16
|
<div class="navbar">
|
17
|
-
|
18
|
-
|
17
|
+
<a href="../index.html">Previous</a> •
|
18
|
+
<a href="../index.html">Up</a> •
|
19
|
+
<a href="01_introduction.html">Next</a>
|
20
|
+
|
21
|
+
<span>
|
22
|
+
<strong><a href="../appscript-manual/index.html">appscript</a></strong> /
|
23
|
+
<a href="../mactypes-manual/index.html">mactypes</a> /
|
24
|
+
<a href="../osax-manual/index.html">osax</a> /
|
25
|
+
<a href="../aem-manual/index.html">aem</a>
|
26
|
+
</span>
|
19
27
|
</div>
|
20
28
|
|
21
29
|
<!-- content -->
|
22
|
-
<div id="content"
|
30
|
+
<div id="content">
|
31
|
+
|
32
|
+
<h2>Contents</h2>
|
33
|
+
|
34
|
+
<ol>
|
23
35
|
<li><a href="01_introduction.html">Introduction</a></li>
|
24
36
|
<li><a href="02_aboutappscripting.html">About Application Scripting</a></li>
|
25
37
|
<li><a href="03_quicktutorial.html">Quick Tutorial</a></li>
|
@@ -34,15 +46,19 @@
|
|
34
46
|
<li><a href="12_commandexamples.html">Command Examples</a></li>
|
35
47
|
<li><a href="13_performanceissues.html">Performance Issues</a></li>
|
36
48
|
<li><a href="14_notes.html">Notes</a></li>
|
37
|
-
</ol
|
49
|
+
</ol>
|
50
|
+
|
51
|
+
</div>
|
38
52
|
|
39
53
|
<!-- bottom navigation -->
|
40
|
-
|
41
|
-
|
42
|
-
|
54
|
+
|
55
|
+
<div class="footer">
|
56
|
+
<a href="../index.html">Previous</a> •
|
57
|
+
<a href="../index.html">Up</a> •
|
58
|
+
<a href="01_introduction.html">Next</a>
|
59
|
+
|
60
|
+
<span>© 2006-2008 HAS</span>
|
43
61
|
</div>
|
44
62
|
|
45
|
-
<!--footer-->
|
46
|
-
<p class="footer">© 2006-2008 HAS</p>
|
47
63
|
</body>
|
48
64
|
</html>
|