unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: chad <yandros@gmail.com>
To: Richard Stallman <rms@gnu.org>
Cc: EMACS development team <emacs-devel@gnu.org>, Po Lu <luangruo@yahoo.com>
Subject: Re: ns-do-applescript
Date: Tue, 31 May 2022 15:05:48 -0400	[thread overview]
Message-ID: <CAO2hHWYf9BUiEWodg4YfgkFX0vendxZK6L0-=BFT+ZBtePiCPQ@mail.gmail.com> (raw)
In-Reply-To: <87ee0bdhah.fsf@yahoo.com>

[-- Attachment #1: Type: text/plain, Size: 3407 bytes --]

Short, short version: imagine that Sun built a version of solaris that
almost entirely replaced "shell" with a variant of Java that didn't
*inititally* come with a stand-alone interpreter, but did add one later.
Then: s/Sun/Apple/, s/solaris/macosx/, and s/Java/AppleScript/.

Longer version:

Since Apple bundles together the user toolkit, system UI, "window manager",
and system services all behind a (sadly mostly proprietary) wall, native
macOS applications that want to do "plumbing" use a scripting language
called "Applescript", based very loosely around HyperCard. This dates back
to the previous millenium, to well before the Unix-like Mac OS X was built
from a combination of Mach, FreeBSD, and NextSTEP. In those days, there was
no multi-user OS underpinning that understood things like shell scripts and
forking processing. Applications that are "Applescript aware", which
includes basically everything that comes with the OS as well as much of the
3rd party software could be interacted with using "code" like "tell
application Music to play U2" or "tell application Mail to open new message
addressed to monopoly@microsoft.com" (as well as more complicated scripts
with variables, logic, etc).

At some point, Apple regularized the OS-level interface to this language,
and named it the "Open Scripting Architecture" -- presumably back when
adding the word "Open" to every kind of software was de rigueur. The ns
port of Emacs to macosx added the ability to use the system library calls
that tie applications into the OS-level infrastructure, known as "the
scripting system", "the scripting layer", or similar variants.

If memory serves, some time later macosx itself grew a unix-level cli for
this system itself, which is where "the osascript executable" came into
play, which allowed mixing between Applescript and other scripting
languages (I have seen both perl and tcl code that "automated" macosx by
generating AppleScript and feeding it to the system, probably via osascript
or a predecessor thereof). Before then, applications needed to link to the
built-in system scripting libraries and call the related functions.

In emacs, there are a few nice things that can be done by having Emacs ask
the OS to execute Applescript. Some of these, *in theory*, benefit from not
needing to fork an interpreter each time. In practice, macos these days
(note: I stopped using it regularly several years ago) has more or less
enough of a unix-like underpinning that people can mostly use the same sort
of inter-process techniques that they use on other operating systems. The
remaining areas of friction come from interacting with the system software;
for example, asking the default web browser the URL of its various windows.

From my point of view, this pretty clearly falls into the category of
native application support on a proprietary OS. It's not enabling anything
that doesn't already exist, by definition; but it is potentially making
life easier for Emacs users on that platform. In practice, there wasn't a
lot of upside when last I looked, so it probably doesn't warrant a lot of
effort to continue, but there are a few platform-standard things that it
enables that are useful and benefit from calling a library function rather
than forking an interpreter. Of course, that relies on there being someone
willing to maintain the glue to those library functions.

Hope that helps,
~Chad

[-- Attachment #2: Type: text/html, Size: 3820 bytes --]

  reply	other threads:[~2022-05-31 19:05 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <87bkvoo38y.fsf.ref@yahoo.com>
2022-05-23 12:14 ` ns-do-applescript Po Lu
2022-05-23 20:44   ` ns-do-applescript Filipp Gunbin
2022-05-24  0:26     ` ns-do-applescript Po Lu
2022-05-24 20:00       ` ns-do-applescript Daniel Martín
2022-05-24 20:11         ` ns-do-applescript Stefan Monnier
2022-05-25 13:57           ` ns-do-applescript Howard Melman
2022-05-26  8:27             ` ns-do-applescript Richard Stallman
2022-05-26 14:03               ` ns-do-applescript Howard Melman
2022-05-26 14:17                 ` ns-do-applescript Andreas Schwab
2022-05-26 14:51                   ` ns-do-applescript Howard Melman
2022-05-26 15:36                     ` ns-do-applescript Andreas Schwab
2022-05-26  8:24       ` ns-do-applescript Richard Stallman
2022-05-26  8:49         ` ns-do-applescript Po Lu
2022-05-27 22:49           ` ns-do-applescript Richard Stallman
2022-05-28  0:43             ` ns-do-applescript Po Lu
2022-05-29 21:21               ` ns-do-applescript Richard Stallman
2022-05-29 23:56                 ` ns-do-applescript Po Lu
2022-05-31 19:05                   ` chad [this message]
2022-06-01  0:35                     ` ns-do-applescript Po Lu
2022-06-01  1:10                       ` ns-do-applescript Stefan Monnier
2022-06-01 22:57                     ` ns-do-applescript Richard Stallman
2022-05-24 21:26     ` ns-do-applescript Richard Stallman
2022-05-24 23:01       ` ns-do-applescript Filipp Gunbin
2022-05-25  0:50       ` ns-do-applescript Po Lu
2022-05-25 12:09         ` ns-do-applescript Alexander Adolf
2022-05-24 21:21 ns-do-applescript Jon Snader
2022-05-25  2:28 ` ns-do-applescript Po Lu
2022-05-25  2:58   ` ns-do-applescript Tim Cross
2022-05-25  4:46     ` ns-do-applescript Po Lu
2022-05-25 10:05       ` ns-do-applescript Filipp Gunbin
2022-05-25 11:42       ` ns-do-applescript Pankaj Jangid
  -- strict thread matches above, loose matches on Subject: below --
2022-05-26 11:01 ns-do-applescript Pedro Andres Aranda Gutierrez
2022-05-26 14:07 ` ns-do-applescript Howard Melman
2022-05-26 15:07 ` ns-do-applescript Stefan Monnier
2022-05-27  9:40   ` ns-do-applescript Pedro Andres Aranda Gutierrez
2022-05-31  6:34 ns-do-applescript Pedro Andres Aranda Gutierrez
2022-05-31 23:08 ` ns-do-applescript Stefan Monnier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAO2hHWYf9BUiEWodg4YfgkFX0vendxZK6L0-=BFT+ZBtePiCPQ@mail.gmail.com' \
    --to=yandros@gmail.com \
    --cc=emacs-devel@gnu.org \
    --cc=luangruo@yahoo.com \
    --cc=rms@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).