diff options
Diffstat (limited to 'kio/DESKTOP_ENTRY_STANDARD')
-rw-r--r-- | kio/DESKTOP_ENTRY_STANDARD | 373 |
1 files changed, 373 insertions, 0 deletions
diff --git a/kio/DESKTOP_ENTRY_STANDARD b/kio/DESKTOP_ENTRY_STANDARD new file mode 100644 index 000000000..e19cc24c8 --- /dev/null +++ b/kio/DESKTOP_ENTRY_STANDARD @@ -0,0 +1,373 @@ + ---------------------------------------------------------------------------------------------------------------------------- + + Desktop Entry Standard + + Preston Brown + + <pbrown@kde.org> + + Jonathan Blandford + + <jrb@redhat.com> + + Owen Taylor + + <otaylor@gtk.org> + + Version 0.9.4 + + ---------------------------------------------------------------------------------------------------------------------------- + + Table of Contents + + Introduction + + Basic format of the file + + Possible value types + + Recognized desktop entry keys + + Character set encoding of the file + + List of valid Exec parameter variables + + Detailed discussion of supporting MIME types + + Extending the format + + A. Example Desktop Entry File + + B. Currently reserved for use within KDE + + C. Deprecated Items + + D. The Legacy-Mixed encoding (Deprecated) + +Introduction + + Both the KDE and GNOME desktop environments have adopted a similar format for "desktop entries," or configuration files + describing how a particular program is to be launched, how it appears in menus, etc. It is to the larger community's benefit + that a unified standard be agreed upon by all parties such that interoperation between the two environments, and indeed any + additional environments that implement the specification, becomes simpler. + +Basic format of the file + + These desktop entry files should have the extension ".desktop". Determining file type on basis of extension makes determining + the file type very easy and quick. When no file extension is present, the desktop system should fall back to recognition via + "magic detection." Desktop entries which describe how a directory is to be formatted/displayed should be simply called + ".directory". + + The basic format of the desktop entry file requires that there be a "group" header named "[Desktop Entry]". This "group" entry + denotes that all {key,value} pairs following it belong in the Desktop Entry group. There may be other groups present in the file + (see MIME types discussion below), but this is the most important group which explicitly needs to be supported. This group + should also be used as the "magic key" for automatic mime type detection. There should be nothing proceeding this group in the + desktop entry file but possibly one or more comments (see below). + + Group headers may not contain the characters '[' and ']' as those delimit the header. + + Lines beginning with a "#" and blank lines are considered comments and will be ignored, however they should be preserved across + reads / writes of the desktop entry file. + + Compliant implementations MUST not remove any fields from the file, even if they don't support them. Such fields must be + maintained in a list somewhere, and if the file is "rewritten," they will be included. This ensures that any desktop-specific + extensions will be preserved even if another system accesses and changes the file. + + Entries in the file are {key,value} pairs in the format: + + Name=Value + + Space before and after the equals sign should be ignored; the "=" sign is the actual delimiter. + + The escape sequences \s, \n, \t, \r, and \\ are supported, meaning ASCII space, newline, tab, carriage return, and backslash, + respectively. + +Possible value types + + The value types recognized are string, localestring, regexp, boolean (encoded as the string true/false), and numeric. + + The difference between string and localestring is that the value for a string key must contain only ASCII characters and while + the value of a localestring key may contain UTF-8 characters. (See section 5.) + + Some keys can have multiple values; these should be separated by a semicolon. Those keys which have several values should have a + semicolon as the trailing character. For lists of strings, semicolons are simply not allowed in the strings, there is no escape + mechanism. + +Recognized desktop entry keys + + Keys with type localestring may be postfixed by [LOCALE], where LOCALE is the locale type of the entry. LOCALE must be of the + form lang[_COUNTRY][ ENCODING][ MODIFIER], where _COUNTRY, .ENCODING, and @MODIFIER may be omitted. If a postfixed key occurs, + the same key must be also present without the postfix. + + When reading in the desktop entry file, the value of the key is selected by matching the current POSIX locale for the + LC_MESSAGES category against the locale postfixes of all occurrences of the key, with the .ENCODING part stripped. The .ENCODING + field is used only when the Encoding key for the desktop entry file is Legacy-Mixed, (see Appendix D.) + + The matching of is done as follows. If LC_MESSAGES is of the form LANG_COUNTRY.ENCODING@MODIFIER, then it will match a key of + the form LANG_COUNTRY@MODIFIER. If such a key does not exist, it will attempt to match LANG_COUNTRY followed by LANG@MODIFIER. + Then, a match against LANG by itself will be attempted. Finally, if no matching key is found the required key without a locale + specified is used. The encoding from the LC_MESSAGES value is ignored when matching. + + If LC_MESSAGES does not have a MODIFIER field, then no key with a modifier will be matched. Similarly, if LC_MESSAGES does not + have a COUNTRY field, then no key with a country specified will be matched. If LC_MESSAGES just has a LANG field, then it will + do a straight match to a key with a similar value. The following table lists possible matches of various LC_MESSAGES in the + order in which they are matched. Note that the ENCODING field isn't shown. + + Table 1. Locale Matching + + +-------------------------------------------------------------------------------------------------+ + | LC_MESSAGES Value | Possible Keys in Order of Matching | + |-----------------------+-------------------------------------------------------------------------| + | LANG_COUNTRY@MODIFIER | LANG_COUNTRY@MODIFIER, LANG_COUNTRY, LANG@MODIFIER, LANG, Default Value | + |-----------------------+-------------------------------------------------------------------------| + | LANG_COUNTRY | LANG_COUNTRY, LANG, Default Value | + |-----------------------+-------------------------------------------------------------------------| + | LANG@MODIFIER | LANG@MODIFIER, LANG, Default Value | + |-----------------------+-------------------------------------------------------------------------| + | LANG | LANG, Default Value | + +-------------------------------------------------------------------------------------------------+ + + For example, if the current value of the LC_MESSAGES category is sr_YU Latn and the desktop file includes: + + Name=Foo + Name[sr_YU]=... + Name[sr Latn]= + Name[sr]=... + + then the value of the Name keyed by "sr_YU" is used. + + Case is significant. The keys "Name" and "NAME" are not equivalent. The same holds for group names. Key values are case + sensitive as well. + + Keys are either OPTIONAL or REQUIRED. If a key is optional it may or may not be present in the file. However, if it isn't, the + implementation of the standard should not blow up, it must provide some sane defaults. Additionally, keys either MUST or MAY be + supported by a particular implementation. + + Some keys only make sense in the context when another particular key is also present. + + Some example keys: Name[C], Comment[it]. + + Table 2. Standard Keys + + +------------------------------------------------------------------------------------------------------------------------------+ + | Key | Description | Value Type | REQ? | MUST? | Type | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | Type | There are 4 types of desktop entries: Application(1), Link(2), | string | YES | YES | | + | | FSDevice(3) and Directory(4). | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | | Version of Desktop Entry Specification (While the version | | | | | + | | field is not required to be present, it should be in all newer | | | | | + | Version | implementations of the Desktop Entry specification. If the | numeric | NO | YES | 1-4 | + | | version number is not present, a "pre-standard" desktop entry | | | | | + | | file is to be assumed). | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | Encoding | Encoding of the whole desktop entry file (UTF-8 or | string | YES | YES | 1-4 | + | | LegacyMixed). | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | Name | Specific name of the application, for example "Mozilla". | localestring | YES | YES | 1-4 | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | GenericName | Generic name of the application, for example "Web Browser". | localestring | NO | YES | 1-4 | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | | NoDisplay means "this application exists, but don't display it | | | | | + | | in the menus". This can be useful to e.g. associate this | | | | | + | NoDisplay | application with mimetypes, so that it gets launched from a | boolean | NO | NO | 1-4 | + | | file manager (or other apps), without having a menu entry for | | | | | + | | it (there are tons of good reasons for this, including e.g. | | | | | + | | the netscape -remote, or kfmclient openURL kind of stuff). | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | Comment | Tooltip for the entry, for example "View sites on the | localestring | NO | YES | 1-4 | + | | Internet"; should not be redundant with Name or GenericName. | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | | Icon to display in file manager, menus, etc. If the name is an | | | | | + | | absolute path, the given file will be used. If the name is not | | | | | + | Icon | an absolute path, an implementation-dependent search algorithm | string | NO | YES | 1-4 | + | | will be used to locate the icon. Icons may be localized with | | | | | + | | the Icon[xx]= syntax. | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | | Hidden should have been called Deleted. It means the user | | | | | + | | deleted (at his level) something that was present (at an upper | | | | | + | | level, e.g. in the system dirs). It's strictly equivalent to | | | | | + | Hidden | the .desktop file not existing at all, as far as that user is | boolean | NO | NO | 1-4 | + | | concerned. This can also be used to "uninstall" existing files | | | | | + | | (e.g. due to a renaming) - by letting "make install" install a | | | | | + | | file with Hidden=true in it. | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | | A list of regular expressions to match against for a file | | | | | + | FilePattern | manager to determine if this entry's icon should be displayed. | regexp(s) | NO | NO | 1 | + | | Usually simply the name of the main executable and friends. | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | | Filename of a binary on disk used to determine if the program | | | | | + | TryExec | is actually installed. If not, entry may not show in menus, | string | NO | NO | 1 | + | | etc. | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | Exec | Program to execute, possibly with arguments. | string | NO | YES | 1 | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | Path | If entry is type Application, the working directory to run the | string | NO | YES | 1 | + | | program in. | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | Terminal | Whether the program runs in a terminal window | boolean | NO | YES | 1 | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | SwallowTitle | If entry is swallowed onto the panel, this should be the title | localestring | NO | NO | 1 | + | | of window | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | SwallowExec | Program to exec if swallowed app is clicked. | string | NO | NO | 1 | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | Actions | Additional actions possible, see MIME type discussion in the | string(s) | NO | YES | 1 | + | | section called "Detailed discussion of supporting MIME types". | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | MimeType | The MIME type(s) supported by this entry. | regexp(s) | NO | NO | 1 | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | SortOrder | This may specify the order in which to display files. | string(s) | NO | NO | 4 | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | Dev | The device to mount. | string | NO | NO | 3 | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | FSType | The type of filesystem to try to mount. | string | NO | NO | 3 | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | MountPoint | The mount point of the device in question. | string | NO | NO | 3 | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | ReadOnly | Specifies whether or not the device is read-only. | boolean | NO | NO | 3 | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | | Icon to display when device is not mounted Mounted devices | | | | | + | UnmountIcon | display icon from Icon key. UnmountIcons may be localized with | string | NO | NO | 3 | + | | the UnmountIcon[xx]= syntax. | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | URL | If entry is Link type, the URL to access. | string | NO | YES | 2 | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | Categories | Categories in which the entry should be shown in a menu (for | string(s) | NO | NO | 1 | + | | possible values see the xdg-menu specification). | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | | A list of strings identifying the environments that should | | | | | + | OnlyShowIn / NotShowIn | display/not display a given .desktop item. Only one of these | string(s) | NO | NO | 1-4 | + | | keys, either OnlyShowIn or NotShowIn, may appear in a Group. | | | | | + | | (for possible values see the xdg-menu specification) | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | | If true, it is KNOWN that the application will send a "remove" | | | | | + | StartupNotify | message when started with the DESKTOP_LAUNCH_ID environment | boolean | NO | NO | 1 | + | | variable set (see the startup notification spec for more | | | | | + | | details). | | | | | + |------------------------+----------------------------------------------------------------+--------------+------+-------+------| + | | If true, it is KNOWN that the application will map at least | | | | | + | StartupWMClass | one window with the given string as its WM class or WM name | string | NO | NO | 1 | + | | hint (see the startup notification spec for more details). | | | | | + +------------------------------------------------------------------------------------------------------------------------------+ + +Character set encoding of the file + + Desktop entry files are encoded as lines of 8-bit characters separated by LF characters. + + o Key names must contain only the characters 'A-Za-z0-9-' + + o Group names may contain all ASCII characters except for control characters and '[' and ']'. + + o Values of type string may contain all ASCII characters except for control characters. + + o Values of type boolean must either be the string 'true' or 'false'. + + o Numeric values must be a valid floating point number as recognized by the %f specifier for scanf. + + Comment lines are uninterpreted and may contain any character (except for LF). However, using UTF-8 for comment lines that + contain characters not in ASCII is encouraged. + + The encoding for values of type localestring is determined by the Encoding field. + +List of valid Exec parameter variables + + Each "Exec" field may take a number of arguments which will be expanded by the file manager or program launcher and passed to + the program if necessary. + + Literal % characters must be escaped as %%, and adding new format characters is not allowed. It's a fatal error to have an Exec + field with a format character not given in the spec (exception to this are the deprecated format characters which can be + ignored, that is expanded to no parameters, by the implementation). Again for emphasis: nonstandard extensions are not allowed + here - you must add an X-Foo-Exec field if you have nonstandard Exec lines. + + The escaping of the exec parameters is done in the way the mailcap specification describes. Take a look at RFC 1524 for more + information. + + Recognized fields are as follows: + + +------------------------------------------------------------------------------------------------------------------------------+ + | | a single file name, even if multiple files are selected. The system reading the Desktop Entry should recognize that the | + | | program in question cannot handle multiple file arguments, and it should should probably spawn and execute multiple | + | %f | copies of a program for each selected file if the program is not able to handle additional file arguments. If files are | + | | not on the local file system (i.e. HTTP or FTP locations), the files will be copied to the local file system and %f | + | | will be expanded to point at the temporary file. Used for programs that do not understand URL syntax. | + |----+-------------------------------------------------------------------------------------------------------------------------| + | %F | a list of files. Use for apps that can open several local files at once. | + |----+-------------------------------------------------------------------------------------------------------------------------| + | %u | a single URL. | + |----+-------------------------------------------------------------------------------------------------------------------------| + | %U | a list of URLs. | + |----+-------------------------------------------------------------------------------------------------------------------------| + | %d | directory containing the file that would be passed in a %f field | + |----+-------------------------------------------------------------------------------------------------------------------------| + | %D | list of directories containing the files that would be passed in to a %F field | + |----+-------------------------------------------------------------------------------------------------------------------------| + | %n | a single filename (without path) | + |----+-------------------------------------------------------------------------------------------------------------------------| + | %N | a list of filenames (without path) | + |----+-------------------------------------------------------------------------------------------------------------------------| + | %i | the Icon field of the desktop entry expanded as two parameters, first "--icon" and then the contents of the Icon field | + | | (should not expand as any prameters if the Icon field is empty or missing) | + |----+-------------------------------------------------------------------------------------------------------------------------| + | %c | the translated Name field associated with the desktop entry | + |----+-------------------------------------------------------------------------------------------------------------------------| + | %k | the location of the desktop file as either a uri (if for example gotten from the vfolder system) or a local filename or | + | | empty if no location is known | + |----+-------------------------------------------------------------------------------------------------------------------------| + | %v | the name of the Device entry in the desktop file | + +------------------------------------------------------------------------------------------------------------------------------+ + +Detailed discussion of supporting MIME types + + It is in every desktop's best interest to have thorough support for mime types. The old /etc/mailcap and /etc/mime.types files + are rather limited in scope and frankly, are outdated. Various desktop systems have come up with different ways of extending + this original system, but none are compatible with each other. The Desktop Entry Standard hopes to be able to provide the + beginnings of a solution to this problem. + + At a very basic level, the "Exec" key provides the default action to take when the program described by a desktop entry is used + to open a document or data file. Usually this consists of some action along the lines of "kedit %f" or "ee %f". This is a good + start, but it isn't as flexible as it can be. + + Let us first establish that a program which supports a MIME type or multiple mime types may be able to support multiple actions + on those MIME types as well. The desktop entry may want to define additional actions in addition to the default. The toplevel + "Exec" key describes the default action; Let us define this action to also be known as the "Open" action. Additional actions + which might be possible include View, Edit, Play, etc. A further revision of this document will probably specify several + "standard" actions in addition to the default "Open" action, but in all cases, the number of actions is arbitrary. + + Let us use a sound player as a simple example. Call it sp. The default Exec (Open) action for this program would likely look + something like: + + Exec=sp %u + + However, imagine the sound player also supports editing of sound files in a graphical manner. We might wish to define an + additional action which could accomodate this. Adding the action would be performed like this: + + Actions=Edit; + + [Desktop Action Edit] + Exec=sp -edit %u + + As you can see, defining the action "edit" will enable an additional group of the name [Desktop Action actionname] to be read. + This group can contain an additional Exec line, as well as possibly other information like a new Name, Comment, Icon, and Path. + Thus right-clicking on a .wav file will show both the default "Open" action and this "Edit" action to both be displayed as + choices in the context-menu. A left click (double or single, whichever the file manager implements) would cause the default + action to take place. These are implementation-specific details which are up to the implementer, and are not enforced by this + standard. + + If no DefaultApp is specified for a particular MIME type, any one of the programs registered which claim to be able to handle + the MIME type may become the default handler. This behaviour is undefined and implementation-specific. KDE doesn't use a + DefaultApp anymore, but assigns a Preference number to each program, so that the highest number is the one chosen for handling + the MIME type. + +Extending the format + + If the standard is to be amended with a new {key,value} pair which should be applicable to all supporting parties, a group + discussion will take place. This is the preferred method for introducing changes. If one particular party wishes to add a field + for personal use, they should prefix the key with the string "X-PRODUCT", i.e. "X-NewDesktop-Foo", following the precedent set + by other IETF and RFC standards. + + Alternatively, fields can be placed in their own group, where they may then have arbitrary key names. If this is the case, the + group should follow the scheme outlined above, i.e. [X-PRODUCT GROUPNAME] or something similar. These steps will avoid namespace + clashes between different yet similar environments. + + ---------------------------------------------------------------------------------------------------------------------------- |