Adrian,

On 21 Jul 2008, at 16:44, Gilbert Harman wrote:

A followup.  Carbon Emacs has a command do-applescript that I was
using to get the focus back to the email program alpine.



the patch below works for me.
Any comments? Otherwise I'll check this in.

- David




*** nsfns.m     19 Jul 2008 15:03:37 -0400      1.7
--- nsfns.m     21 Jul 2008 18:11:27 -0400      
***************
*** 2192,2197 ****
--- 2192,2282 ----
= = = = ====================================================================== */


+
+ /* Compile and execute the AppleScript SCRIPT and return the error
+    status as function value.  A zero is returned if compilation and
+    execution is successful, in which case *RESULT is set to a Lisp
+ string or a number containing the resulting script value. Otherwise,
+    1 is returned. */
+
+ static int
+ do_applescript (script, result)
+      Lisp_Object script, *result;
+ {
+   NSAppleEventDescriptor *desc;
+   NSDictionary* errorDict;
+   NSAppleEventDescriptor* returnDescriptor = NULL;
+
+   NSAppleScript* scriptObject =
+     [[NSAppleScript alloc] initWithSource:
+                            [NSString stringWithUTF8String: SDATA (script)]];
+
+   returnDescriptor = [scriptObject executeAndReturnError: &errorDict];
+   [scriptObject release];
+
+   *result = Qnil;
+
+   if (returnDescriptor != NULL)
+     {
+       // successful execution
+       if (kAENullEvent != [returnDescriptor descriptorType])
+         {
+         *result = Qt;
+         // script returned an AppleScript result
+         if ((typeUnicodeText == [returnDescriptor descriptorType]) ||
+             (typeUTF16ExternalRepresentation
+              == [returnDescriptor descriptorType]) ||
+             (typeUTF8Text == [returnDescriptor descriptorType]) ||
+             (typeCString == [returnDescriptor descriptorType]))
+           {
+             desc = [returnDescriptor coerceToDescriptorType: typeUTF8Text];
+             if (desc)
+               *result = build_string([[desc stringValue] UTF8String]);
+           }
+         else
+             {
+             /* use typeUTF16ExternalRepresentation? */
+             // coerce the result to the appropriate ObjC type
+             desc = [returnDescriptor coerceToDescriptorType: typeUTF8Text];
+             if (desc)
+               *result = make_number([desc int32Value]);
+             }
+         }
+     }
+   else
+     {
+       // no script result, return error
+       return 1;
+     }
+   return 0;
+ }
+
+ DEFUN ("do-applescript", Fdo_applescript, Sdo_applescript, 1, 1, 0,
+        doc: /* Execute AppleScript SCRIPT and return the result.  If
+ compilation and execution are successful, the resulting script value
+ is returned as a string, a number or, in the case of other constructs,
+ t.  In case the execution fails, an error is signaled. */)
+     (script)
+     Lisp_Object script;
+ {
+   Lisp_Object result;
+   long status;
+
+   CHECK_STRING (script);
+   check_ns ();
+
+   BLOCK_INPUT;
+   status = do_applescript (script, &result);
+   UNBLOCK_INPUT;
+   if (status == 0)
+     return result;
+   else if (!STRINGP (result))
+     error ("AppleScript error %d", status);
+   else
+     error ("%s", SDATA (result));
+ }
+
+
DEFUN ("xw-color-defined-p", Fns_color_defined_p, Sns_color_defined_p, 1, 2, 0, "Return t if the current NS display supports the color named COLOR.\n\
  The optional argument FRAME is currently ignored.")
***************
*** 2550,2555 ****
--- 2635,2641 ----
    defsubr (&Sns_list_fonts);
    defsubr (&Sns_font_name);
    defsubr (&Sns_list_colors);
+   defsubr (&Sdo_applescript);
    defsubr (&Sns_color_defined_p);
    defsubr (&Sns_color_values);
    defsubr (&Sns_server_max_request_size);

Attachment: smime.p7s
Description: S/MIME cryptographic signature

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Emacs-app-dev- mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emacs-app-dev-

Reply via email to