rb-appscript 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +59 -0
- data/LICENSE +65 -0
- data/README +1 -1
- data/TODO +13 -13
- data/doc/aem-manual/04_references.html +13 -13
- data/doc/aem-manual/05_targettingapplications.html +7 -5
- data/doc/aem-manual/06_buildingandsendingevents.html +1 -1
- data/doc/aem-manual/08_examples.html +6 -6
- data/doc/aem-manual/index.html +3 -4
- data/doc/appscript-manual/02_aboutappscripting.html +2 -10
- data/doc/appscript-manual/04_gettinghelp.html +32 -18
- data/doc/appscript-manual/05_keywordconversion.html +7 -7
- data/doc/appscript-manual/06_classesandenums.html +2 -21
- data/doc/appscript-manual/07_applicationobjects.html +11 -2
- data/doc/appscript-manual/08_realvsgenericreferences.html +1 -1
- data/doc/appscript-manual/09_referenceforms.html +13 -13
- data/doc/appscript-manual/10_referenceexamples.html +7 -7
- data/doc/appscript-manual/11_applicationcommands.html +30 -28
- data/doc/appscript-manual/13_performanceissues.html +3 -3
- data/doc/appscript-manual/{15_notes.html → 14_notes.html} +18 -13
- data/doc/appscript-manual/full.css +1 -2
- data/doc/appscript-manual/index.html +3 -4
- data/doc/index.html +2 -1
- data/doc/mactypes-manual/index.html +23 -13
- data/doc/osax-manual/index.html +27 -5
- data/rb-appscript.gemspec +1 -1
- data/sample/AB_list_people_with_emails.rb +2 -1
- data/sample/Add_iCal_event.rb +18 -0
- data/sample/Export_Address_Book_phone_numbers.rb +56 -0
- data/sample/Hello_world.rb +9 -1
- data/sample/Select_all_HTML_files.rb +4 -2
- data/sample/iTunes_top40_to_html.rb +7 -4
- data/src/lib/_aem/aemreference.rb +50 -51
- data/src/lib/_aem/codecs.rb +148 -178
- data/src/lib/_aem/connect.rb +0 -2
- data/src/lib/_aem/findapp.rb +1 -1
- data/src/lib/_aem/mactypes.rb +2 -9
- data/src/lib/_aem/send.rb +2 -2
- data/src/lib/_appscript/defaultterminology.rb +2 -2
- data/src/lib/_appscript/referencerenderer.rb +119 -14
- data/src/lib/_appscript/reservedkeywords.rb +5 -0
- data/src/lib/_appscript/safeobject.rb +190 -0
- data/src/lib/_appscript/terminology.rb +195 -90
- data/src/lib/aem.rb +8 -9
- data/src/lib/appscript.rb +175 -159
- data/src/lib/osax.rb +65 -29
- data/src/rbae.c +42 -2
- data/test/test_aemreference.rb +3 -3
- data/test/test_appscriptcommands.rb +135 -0
- data/test/test_appscriptreference.rb +10 -8
- data/test/test_mactypes.rb +7 -1
- data/test/test_osax.rb +57 -0
- data/test/testall.sh +2 -1
- metadata +10 -9
- data/doc/aem-manual/09_notes.html +0 -41
- data/doc/appscript-manual/14_problemapps.html +0 -192
- data/misc/adobeunittypes.rb +0 -14
- data/misc/dump.rb +0 -72
- data/rb-appscript-0.2.0.gem +0 -0
@@ -37,11 +37,12 @@
|
|
37
37
|
|
38
38
|
<li>Names that match the methods already defined on appscript's Application and Reference classes have an underscore appended. The reserved method names are:
|
39
39
|
|
40
|
-
<pre><code>abort_transaction
|
41
|
-
after
|
42
|
-
and
|
43
|
-
any
|
44
|
-
before
|
40
|
+
<pre><code>abort_transaction instance_variable_get
|
41
|
+
after instance_variable_set
|
42
|
+
and instance_variables
|
43
|
+
any is_in
|
44
|
+
before is_not_in
|
45
|
+
by_aem_app keywords
|
45
46
|
by_creator last
|
46
47
|
by_id launch
|
47
48
|
by_name le
|
@@ -73,8 +74,7 @@ ID to_a
|
|
73
74
|
id to_s
|
74
75
|
ignore type
|
75
76
|
inspect untaint
|
76
|
-
instance_eval wait_reply
|
77
|
-
instance_variable_get</code></pre>
|
77
|
+
instance_eval wait_reply</code></pre>
|
78
78
|
</div>
|
79
79
|
</li>
|
80
80
|
</ul>
|
@@ -47,7 +47,7 @@ AEM::AEEnum.new('xyz ')</code></pre>
|
|
47
47
|
|
48
48
|
<h2>Common AE types</h2>
|
49
49
|
|
50
|
-
<table width=100% summary="AE-Ruby type mappings">
|
50
|
+
<table width="100%" summary="AE-Ruby type mappings">
|
51
51
|
<thead>
|
52
52
|
<tr><th>AE type</th><th>appscript name</th><th>Ruby class</th></tr>
|
53
53
|
</thead>
|
@@ -133,26 +133,7 @@ $KCODE = "UTF8"</code></pre>
|
|
133
133
|
|
134
134
|
<h3>Unit types</h3>
|
135
135
|
|
136
|
-
<p>
|
137
|
-
|
138
|
-
<pre><code>:centimeters :cubic_inches
|
139
|
-
:meters :cubic_feet
|
140
|
-
:kilometers :cubic_yards
|
141
|
-
:inches
|
142
|
-
:feet :liters
|
143
|
-
:yards :quarts
|
144
|
-
:miles :gallons
|
145
|
-
|
146
|
-
:square_meters :grams
|
147
|
-
:square_kilometers :kilograms
|
148
|
-
:square_feet :ounces
|
149
|
-
:square_yards :pounds
|
150
|
-
:square_miles
|
151
|
-
:degrees_Celsius
|
152
|
-
:cubic_centimeters :degrees_Fahrenheit
|
153
|
-
:cubic_meters :degrees_Kelvin</code></pre>
|
154
|
-
|
155
|
-
<p>Values are represented by instances of the <code>MacTypes::Units</code> class, e.g. <code>MacTypes::Units.inches(3.0)</code>. See the <a href="../mactypes-manual/index.html">mactypes manual</a> for more information.</p>
|
136
|
+
<p>Unit type values are represented by instances of the <code>MacTypes::Units</code> class, e.g. <code>MacTypes::Units.inches(3.0)</code>. See the <a href="../mactypes-manual/index.html">mactypes manual</a> for more information.</p>
|
156
137
|
|
157
138
|
|
158
139
|
<h3>Miscellaneous types</h3>
|
@@ -35,6 +35,8 @@ app.by_pid(pid) # Unix process id for a local process
|
|
35
35
|
|
36
36
|
app.by_url(url) # eppc URL for a remote process
|
37
37
|
|
38
|
+
app.by_aem_app(aem_app) # AEM::Application instance
|
39
|
+
|
38
40
|
app.current # the host process</code></pre>
|
39
41
|
|
40
42
|
<p>For convenience, the most commonly used form, <code>app.by_name(name)</code>, can be shortened to:</p>
|
@@ -59,6 +61,9 @@ app.current # the host process</code></pre>
|
|
59
61
|
|
60
62
|
<dt><code>url</code></dt>
|
61
63
|
<dd>A URL of form <code>eppc://[user[:password]@host/Application%20Name[?[uid=#]&[pid=#]</code>, e.g. <code>eppc://johnsmith:foobar@office-mac.local/TextEdit?uid=501</code>. The host name/IP address and the process name (case-sensitive) are required. The username and password are optional: if omitted, the OS will obtain this information from the user's keychain or display a dialog asking the user to input one or both values. The user id and process id are also optional; if the process id is given, the process name will be ignored.</dd>
|
64
|
+
|
65
|
+
<dt><code>aem_app</code></dt>
|
66
|
+
<dd>An <code>AEM::Application</code> instance.</dd>
|
62
67
|
</dl>
|
63
68
|
|
64
69
|
|
@@ -126,9 +131,13 @@ set(reference, :to => value) -- Set an object's data.
|
|
126
131
|
|
127
132
|
<h2>Transaction support</h2>
|
128
133
|
|
129
|
-
<p>Application objects implement three additional methods, <code>start_transaction</code>, <code>end_transaction</code> and <code>abort_transaction</code> that allow a sequence of related commands to be handled as a single operation by applications that support transactions, e.g. FileMaker Pro
|
134
|
+
<p>Application objects implement three additional methods, <code>start_transaction</code>, <code>end_transaction</code> and <code>abort_transaction</code> that allow a sequence of related commands to be handled as a single operation by applications that support transactions, e.g. FileMaker Pro.</p>
|
135
|
+
|
136
|
+
<p>Once the application object's <code>start_transaction</code> method is called, all subsequent commands to that application will be sent as part of the same transaction until <code>end_transaction</code> or <code>abort_transaction</code> is called.</p>
|
137
|
+
|
138
|
+
<p>The <code>start_transaction</code> method takes an optional <code>session</code> argument that indicates the specific transaction session to open (in applications that support this).</p>
|
130
139
|
|
131
|
-
<p class="hilitebox">Remember to call <code>end_transaction</code> or <code>abort_transaction</code> at the end of every transaction. If a transaction is accidentally left open, appscript will try to end it automatically when the application object is garbage-collected, but this is not guaranteed to succeed.</p>
|
140
|
+
<p class="hilitebox">Remember to call <code>end_transaction</code> or <code>abort_transaction</code> at the end of every transaction. (This includes transactions interrupted by a raised exception.) If a transaction is accidentally left open, appscript will try to end it automatically when the application object is garbage-collected, but this is not guaranteed to succeed.</p>
|
132
141
|
|
133
142
|
|
134
143
|
<h2>Local application launching notes</h2>
|
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
<!-- content -->
|
22
22
|
<div id="content">
|
23
|
-
<h2>Property
|
23
|
+
<h2>Property reference</h2>
|
24
24
|
|
25
25
|
<p>A property either contains a simple value or represents a one-to-one relationship between two application objects. Properties either describe the application object (its name, class, size, color, preferences, etc.) or provide a convenient reference to other object(s) of interest to users (e.g. home, current_track).</p>
|
26
26
|
|
@@ -34,7 +34,7 @@ finder.<em>home</em>.files.<em>name</em></code></pre>
|
|
34
34
|
|
35
35
|
|
36
36
|
|
37
|
-
<h2>Element
|
37
|
+
<h2>Element references</h2>
|
38
38
|
|
39
39
|
<p>Elements represent a one-to-many relationship between application objects. Elements usually reflect the containment structure of the application object model and generally provide multiple ways of referencing some or all of those objects (e.g. characters/words/paragraphs of documents by index/relative-position/range/filter).</p>
|
40
40
|
|
@@ -52,8 +52,8 @@ textedit.<em>documents</em>.<em>paragraphs</em>.<em>words</em></code></pre>
|
|
52
52
|
<h3>by Name</h3>
|
53
53
|
|
54
54
|
<p>Syntax:</p>
|
55
|
-
<pre><code>elements[
|
56
|
-
|
55
|
+
<pre><code>elements[selector]
|
56
|
+
selector : String -- name of object (as matches its 'name' property)</code></pre>
|
57
57
|
|
58
58
|
<p>Examples:</p>
|
59
59
|
<pre><code>disks['Macintosh HD']
|
@@ -65,8 +65,8 @@ files['index.html']</code></pre>
|
|
65
65
|
<h3>by Index</h3>
|
66
66
|
|
67
67
|
<p>Syntax:</p>
|
68
|
-
<pre><code>elements[
|
69
|
-
|
68
|
+
<pre><code>elements[selector]
|
69
|
+
selector : Fixnum | Bignum -- index of object</code></pre>
|
70
70
|
|
71
71
|
<p>Examples:</p>
|
72
72
|
<pre><code>words[3]
|
@@ -78,8 +78,8 @@ items[-1]</code></pre>
|
|
78
78
|
<h3>by ID</h3>
|
79
79
|
|
80
80
|
<p>Syntax:</p>
|
81
|
-
<pre><code>elements.ID(
|
82
|
-
|
81
|
+
<pre><code>elements.ID(selector)
|
82
|
+
selector : anything -- object's id</code></pre>
|
83
83
|
|
84
84
|
<p>Examples:</p>
|
85
85
|
<pre><code>windows.ID(4321)</code></pre>
|
@@ -102,9 +102,9 @@ files.any</code></pre>
|
|
102
102
|
<h3>by Relative Position</h3>
|
103
103
|
|
104
104
|
<p>Syntax:</p>
|
105
|
-
<pre><code>elements[
|
105
|
+
<pre><code>elements[selector].previous(class) -- nearest element of a given class to appear
|
106
106
|
before the specified element
|
107
|
-
elements[
|
107
|
+
elements[selector].next(class) -- nearest element of a given class to appear
|
108
108
|
after the specified element
|
109
109
|
class : Symbol -- class of element (see <a href="4_classesandenums.html">Classes and Enumerated Types</a>)</code></pre>
|
110
110
|
|
@@ -202,15 +202,15 @@ its.words[1].starts_with('A').or(
|
|
202
202
|
|
203
203
|
|
204
204
|
|
205
|
-
<h2>Insertion
|
205
|
+
<h2>Insertion location</h2>
|
206
206
|
|
207
207
|
<p>Insertion locations can be specified at the beginning or end of all elements, or before or after a specified element or element range.</p>
|
208
208
|
|
209
209
|
<p>Syntax:</p>
|
210
210
|
<pre><code>elements.start
|
211
211
|
elements.end
|
212
|
-
elements[
|
213
|
-
elements[
|
212
|
+
elements[selector].before
|
213
|
+
elements[selector].after</code></pre>
|
214
214
|
|
215
215
|
<p>Examples:</p>
|
216
216
|
<pre><code>documents.end
|
@@ -32,7 +32,7 @@ app('Finder')
|
|
32
32
|
app('/Applications/TextEdit.app')</code></pre>
|
33
33
|
|
34
34
|
|
35
|
-
<h2>Property
|
35
|
+
<h2>Property references</h2>
|
36
36
|
|
37
37
|
<pre><code># a reference to startup disk of application "Finder"
|
38
38
|
app('Finder').startup_disk
|
@@ -51,7 +51,7 @@ app('TextEdit').documents.text
|
|
51
51
|
app('TextEdit').documents[1].text.paragraphs.characters[1].color</code></pre>
|
52
52
|
|
53
53
|
|
54
|
-
<h2>All
|
54
|
+
<h2>All elements references</h2>
|
55
55
|
|
56
56
|
<pre><code># a reference to disks of application "Finder"
|
57
57
|
app('Finder').disks
|
@@ -61,7 +61,7 @@ app('Finder').disks
|
|
61
61
|
app('TextEdit').documents.text.paragraphs.words</code></pre>
|
62
62
|
|
63
63
|
|
64
|
-
<h2>Single
|
64
|
+
<h2>Single element references</h2>
|
65
65
|
|
66
66
|
<pre><code># a reference to disk 1 of application "Finder"
|
67
67
|
app('Finder').disks[1]
|
@@ -79,7 +79,7 @@ app('TextEdit').documents.last.text.paragraphs.middle
|
|
79
79
|
app('Finder').home.files.any</code></pre>
|
80
80
|
|
81
81
|
|
82
|
-
<h2>Relative
|
82
|
+
<h2>Relative references</h2>
|
83
83
|
|
84
84
|
<pre><code># a reference to paragraph before paragraph 6 of text of document 1 of application "TextEdit"
|
85
85
|
app('TextEdit').documents[1].text.paragraphs[6].previous(:paragraph)
|
@@ -88,7 +88,7 @@ app('TextEdit').documents[1].text.paragraphs[6].previous(:paragraph)
|
|
88
88
|
app('Tex-Edit Plus').documents[1].characters[30].next(:paragraph)</code></pre>
|
89
89
|
|
90
90
|
|
91
|
-
<h2>Element
|
91
|
+
<h2>Element range references</h2>
|
92
92
|
|
93
93
|
<pre><code># a reference to words 1 thru 4 of text of document 1 of application "TextEdit"
|
94
94
|
app('TextEdit').documents[1].text.words[1, 4]
|
@@ -103,7 +103,7 @@ app('Finder').home.folders['Documents', 'Music']
|
|
103
103
|
app('Tex-Edit Plus').documents[1].text[con.words[3], con.paragraphs[7]]</code></pre>
|
104
104
|
|
105
105
|
|
106
|
-
<h2>Filter
|
106
|
+
<h2>Filter references</h2>
|
107
107
|
|
108
108
|
<pre><code># a reference to every document of application "TextEdit" whose text is "\n"
|
109
109
|
app('TextEdit').documents[its.text.eq("\n")]
|
@@ -119,7 +119,7 @@ app('Finder').home.folders['Documents'].files[
|
|
119
119
|
its.name_extension.eq('txt').AND(its.size.lt(10240))]</code></pre>
|
120
120
|
|
121
121
|
|
122
|
-
<h2>Insertion
|
122
|
+
<h2>Insertion location references</h2>
|
123
123
|
|
124
124
|
<pre><code># a reference to end of documents of application "TextEdit"
|
125
125
|
app('TextEdit').documents.end
|
@@ -125,13 +125,7 @@ app('Finder').home.items.get(:result_type => :alias)</code></pre>
|
|
125
125
|
|
126
126
|
<pre><code>reference.command(direct_parameter[, keyword_parameters])</code></pre>
|
127
127
|
|
128
|
-
<p>the reference upon which it is called will be packed as
|
129
|
-
|
130
|
-
<pre><code>insertion_location.make(:new => some_class)</code></pre>
|
131
|
-
|
132
|
-
<p>instead of:</p>
|
133
|
-
|
134
|
-
<pre><code>application.make(:new => some_class, :at => insertion_location)</code></pre></li>
|
128
|
+
<p>the reference upon which it is called will be packed as the Apple event's 'subject' attribute (<code>keySubjectAttr</code>).</p></li>
|
135
129
|
|
136
130
|
|
137
131
|
<li><p>When the <code>set</code> command is called on a reference, its <code>to</code> parameter can be written as a direct parameter; i.e.:</p>
|
@@ -148,6 +142,17 @@ app('Finder').home.items.get(:result_type => :alias)</code></pre>
|
|
148
142
|
|
149
143
|
<p>The first form is preferred, although all three are supported.</p></li>
|
150
144
|
|
145
|
+
|
146
|
+
<li><p>If the <code>make</code> command is called on an insertion location reference, appscript will pack that reference as the Apple event's <code>at</code> parameter if it doesn't already have one; i.e.:</p>
|
147
|
+
|
148
|
+
<pre><code>insertion_location.make(:new => some_class)</code></pre>
|
149
|
+
|
150
|
+
<p>is equivalent to:</p>
|
151
|
+
|
152
|
+
<pre><code>application.make(:new => some_class, :at => insertion_location)</code></pre>
|
153
|
+
|
154
|
+
<p>If the <code>make</code> command is called on an object reference, appscript will pack that reference as the Apple event's 'subject' attribute. (Note that some applications may not handle the subject attribute correctly, in which case the reference should be passed as the <code>make</code> command's <code>at</code> parameter instead.)</p></li>
|
155
|
+
|
151
156
|
</ol>
|
152
157
|
|
153
158
|
|
@@ -155,39 +160,36 @@ app('Finder').home.items.get(:result_type => :alias)</code></pre>
|
|
155
160
|
|
156
161
|
<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>
|
157
162
|
|
158
|
-
<pre><code>
|
163
|
+
<pre><code>d = app('TextEdit').documents</code></pre>
|
159
164
|
|
160
|
-
<p>is <em>not</em>
|
165
|
+
<p>is <em>not</em> the same as:</p>
|
161
166
|
|
162
|
-
<pre><code>set
|
167
|
+
<pre><code>set d to documents of app "TextEdit"</code></pre>
|
163
168
|
|
164
|
-
<p>even though the two may look similar. In the first case, the value assigned to
|
169
|
+
<p>even though the two may look similar. In the first case, the value assigned to <code>d</code> is an appscript reference: <code>app('TextEdit').documents</code>. In the second, AppleScript evaluates the <code>documents of app "TextEdit"</code> reference by performing an implicit <code>get</code> command and then assigning its result, a list of references to individual documents, to <code>d</code>. To obtain the original reference as an AppleScript value, the literal reference must be preceded by an <code>a reference to</code> operator as shown below.</p>
|
165
170
|
|
166
|
-
<
|
167
|
-
<li><p>Getting a reference to all disks:</p>
|
171
|
+
<p>To get a single reference to all documents:</p>
|
168
172
|
|
169
|
-
<pre><code>set
|
170
|
-
return
|
171
|
-
--> a reference to
|
173
|
+
<pre><code>set d to a reference to documents of app "TextEdit"
|
174
|
+
return d
|
175
|
+
--> a reference to documents of app "TextEdit"
|
172
176
|
|
173
|
-
<pre><code>foo = app('Finder').disks
|
174
|
-
print foo
|
175
|
-
--> app('Finder').disks</code></pre></li>
|
176
177
|
|
178
|
+
d = app('TextEdit').documents
|
179
|
+
print d
|
180
|
+
--> app('TextEdit').documents</code></pre>
|
177
181
|
|
178
|
-
<li><p>Getting a list of references to each disk:</p>
|
179
182
|
|
180
|
-
<
|
181
|
-
return foo
|
182
|
-
--> {disk "Mac HD" of application "Finder", disk "ZIP-100" of application "Finder"}</code></pre>
|
183
|
+
<p>To get a list of references to each document:</p>
|
183
184
|
|
184
|
-
<pre><code>
|
185
|
-
|
186
|
-
-->
|
185
|
+
<pre><code>set d to get documents of app "TextEdit" -- (explicit 'get' is optional)
|
186
|
+
return d
|
187
|
+
--> {document 1 of app "TextEdit", document 2 of app "TextEdit"}
|
187
188
|
|
188
|
-
</li>
|
189
|
-
</ul>
|
190
189
|
|
190
|
+
d = app('TextEdit').documents.get -- (explicit 'get' is required)
|
191
|
+
print d
|
192
|
+
--> [app('TextEdit').documents[1], app('TextEdit').documents[2]]</code></pre>
|
191
193
|
|
192
194
|
|
193
195
|
</div>
|
@@ -14,13 +14,13 @@
|
|
14
14
|
|
15
15
|
<!-- top navigation -->
|
16
16
|
<div class="navbar">
|
17
|
-
<a href="12_commandexamples.html">Previous</a> | <a href="index.html">Up</a> | <a href="
|
17
|
+
<a href="12_commandexamples.html">Previous</a> | <a href="index.html">Up</a> | <a href="14_notes.html">Next</a>
|
18
18
|
|
19
19
|
</div>
|
20
20
|
|
21
21
|
<!-- content -->
|
22
22
|
<div id="content">
|
23
|
-
<h2>About
|
23
|
+
<h2>About performance</h2>
|
24
24
|
|
25
25
|
<p>Application scripting is subject to a number of potential performance bottlenecks:</p>
|
26
26
|
|
@@ -108,7 +108,7 @@ p result</code></pre>
|
|
108
108
|
|
109
109
|
<!-- bottom navigation -->
|
110
110
|
<div class="navbar">
|
111
|
-
<a href="12_commandexamples.html">Previous</a> | <a href="index.html">Up</a> | <a href="
|
111
|
+
<a href="12_commandexamples.html">Previous</a> | <a href="index.html">Up</a> | <a href="14_notes.html">Next</a>
|
112
112
|
|
113
113
|
</div>
|
114
114
|
|
@@ -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 |
|
5
|
+
<title>appscript | 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,17 +10,23 @@
|
|
10
10
|
</head>
|
11
11
|
<body>
|
12
12
|
|
13
|
-
<h1>
|
13
|
+
<h1>14. Notes</h1>
|
14
14
|
|
15
15
|
<!-- top navigation -->
|
16
16
|
<div class="navbar">
|
17
|
-
<a href="
|
17
|
+
<a href="13_performanceissues.html">Previous</a> | <a href="index.html">Up</a>
|
18
18
|
|
19
19
|
</div>
|
20
20
|
|
21
21
|
<!-- content -->
|
22
22
|
<div id="content">
|
23
|
-
|
23
|
+
|
24
|
+
<h2>Dealing with problem applications</h2>
|
25
|
+
|
26
|
+
<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>
|
27
|
+
|
28
|
+
|
29
|
+
<h2>Security issues</h2>
|
24
30
|
|
25
31
|
<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>
|
26
32
|
|
@@ -49,32 +55,31 @@
|
|
49
55
|
|
50
56
|
<p>Many thanks to Bill Birkett, Jordan Breeding, FUJIMOTO Hisakuni, Alexander Kellett, Chris Nebel, Matt Neuburg, Laurent Sansonetti and Michelle Steiner, and to all those who have contributed comments, suggestions and bug reports to py-appscript.</p>
|
51
57
|
|
58
|
+
<p>Thanks also to <a href="http://www.macosforge.org/">Mac OS Forge</a> and <a href="http://rubyforge.org/">RubyForge</a> for providing project hosting and support.</p>
|
59
|
+
|
52
60
|
|
53
61
|
<h2>Donations</h2>
|
54
62
|
|
55
63
|
<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>
|
56
64
|
|
57
65
|
|
58
|
-
<h2>
|
59
|
-
|
60
|
-
<p>(C) 2006 HAS -- hhas -at- users - sourceforge - net; <a href="http://rb-appscript.rubyforge.org">http://rb-appscript.rubyforge.org</a></p>
|
66
|
+
<h2>Website</h2>
|
61
67
|
|
62
|
-
<p
|
68
|
+
<p><a href="http://rb-appscript.rubyforge.org">http://rb-appscript.rubyforge.org</a></p>
|
63
69
|
|
64
70
|
|
65
|
-
<h2>
|
71
|
+
<h2>Copyright</h2>
|
66
72
|
|
67
|
-
<
|
68
|
-
<li><a href="http://www.cs.utexas.edu/users/wcook/papers/AppleScript/AppleScript95.pdf">The Open Scripting Architecture: Automating, Integrating, and Customizing Applications</a> (Cook & Harris, 1993) -- An excellent overview of the OSA infrastructure, which includes Apple event-based application scripting. (PDF)</li>
|
73
|
+
<p>(C) 2006 HAS -- hhas -at- users - sourceforge - net</p>
|
69
74
|
|
70
|
-
|
75
|
+
<p>Appscript is released under the MIT License.</p>
|
71
76
|
|
72
77
|
|
73
78
|
</div>
|
74
79
|
|
75
80
|
<!-- bottom navigation -->
|
76
81
|
<div class="navbar">
|
77
|
-
<a href="
|
82
|
+
<a href="13_performanceissues.html">Previous</a> | <a href="index.html">Up</a>
|
78
83
|
|
79
84
|
</div>
|
80
85
|
|