Services menu

The Services menu (or simply Services) is a user interface element in macOS. The services are programs that accept input from the user selection, process it, and optionally put the result back in the clipboard. The concept originated in the NeXTSTEP operating system, from which it was carried over into macOS and GNUstep. Similar features can be emulated on other operating systems.

macOS
Apple advertises the Services menu in connection with other features of its operating system. For example, it's possible to desktop search for a piece of text by selecting it with the mouse and using the service from Spotlight. Other central services are Grab for taking screenshots, and the system spell checker. The concept is similar to a GUI equivalent of a Unix pipe, allowing arbitrary data to be processed and passed between programs.

Services can be implemented as application services, which expose a portion of the functionality of an application to operate on selected data, usually without displaying an interface. In its developer documentation, Apple recommends that applications use services to provide features that are "generally useful", giving as an example a Usenet client providing ROT13 encryption as a service. Standalone services may also be created without a host application. Their simple, one-purpose nature and the fact that they don't require a GUI to be designed makes writing standalone services popular beginner's macOS programming projects.

Since many applications install their entries without asking the user, the macOS services menu tends to clog up with dozens of entries quickly. Most users only will ever use a small subset of the possible options, therefore cutting down and customizing the menu makes it both faster and more pleasant to use. Prior to Mac OS X Snow Leopard, third party software is required to do this; in Snow Leopard, the Services menu can be customized from the Keyboard pane of System Preferences.

Emulation
From the point of view of software, the Services menu is a means of inter-process communication. To the user, it is an interface for executing actions on selected data. The emulation of the Services menu is based on the fact that there are several ways this can be achieved in an operating system. Even in macOS, there is an alternative system called the context menu handler, which is carried over from classic Mac OS.

In the X Window System, any data selected in an application is available to all other programs. Thus the Services menu can be an application which retrieves the current selection, and lets the user choose an action. Missing is the part about returning the processed data back to the originating application. Instead, the service can open a new window to show the results.

Alternatively, the service could replace the current cut buffer with the results of the operation, leaving the user only to perform a paste (since different toolkits implement copy/select and paste commands differently, and probably not under external program control).