summaryrefslogtreecommitdiffstats
path: root/gnome2-system-admin-guide/C/mimetypes.xml
diff options
context:
space:
mode:
Diffstat (limited to 'gnome2-system-admin-guide/C/mimetypes.xml')
-rw-r--r--gnome2-system-admin-guide/C/mimetypes.xml719
1 files changed, 719 insertions, 0 deletions
diff --git a/gnome2-system-admin-guide/C/mimetypes.xml b/gnome2-system-admin-guide/C/mimetypes.xml
new file mode 100644
index 0000000..ac3ff2f
--- /dev/null
+++ b/gnome2-system-admin-guide/C/mimetypes.xml
@@ -0,0 +1,719 @@
+<?xml version="1.0" encoding="utf-8"?>
+<chapter id="mimetypes-0">
+ <title>MIME Types</title>
+ <highlights>
+ <para>This chapter describes how applications detect MIME types,
+how to register MIME types, and how to add applications to the GNOME desktop.</para>
+ </highlights>
+ <sect1 id="mimetypes-1">
+ <title>Introduction</title>
+ <indexterm>
+ <primary>MIME types</primary>
+ <secondary>introduction</secondary>
+ </indexterm>
+ <para>A <firstterm>Multipurpose Internet Mail Extension</firstterm>
+(MIME) type identifies the format of a file. The MIME type enables applications
+to read the file. Applications such as Internet browsers and email applications
+use the MIME type to handle files of different types. For example, an email
+application can use the MIME type to detect what type of file is in a file
+attached to an email.</para>
+ <para>In the GNOME desktop, the <application>Nautilus</application> file manager
+uses MIME types to identify the type of a file. The file manager needs to
+know the MIME type of a file to perform the following tasks:</para>
+ <itemizedlist>
+ <listitem>
+ <para>Open the file in an appropriate application.</para>
+ </listitem>
+ <listitem>
+ <para>Display a string that describes the type of file.</para>
+ </listitem>
+ <listitem>
+ <para>Display an appropriate icon to represent the file.</para>
+ </listitem>
+ <listitem>
+ <para>Display a list of other applications that can open the file.</para>
+ </listitem>
+ </itemizedlist>
+ <para>If you add a new application, you must ensure that other applications
+can recognize the files associated with the application. You must perform
+several tasks to enable other applications to detect the MIME type of the
+application files.</para>
+ <para>This section describes how applications detect the MIME types of files,
+and how applications are associated with MIME types. This chapter also describes
+the procedure that you must follow to add a new application.</para>
+ </sect1>
+ <sect1 id="mimetypes-10">
+ <title>Detecting the MIME Type for a File</title>
+ <indexterm>
+ <primary>MIME types</primary>
+ <secondary>detecting</secondary>
+ </indexterm>
+ <indexterm>
+ <primary>detecting MIME types</primary>
+ </indexterm>
+ <para>Applications can detect the MIME type of a file as follows:</para>
+ <orderedlist>
+ <listitem>
+ <para>The application uses <firstterm>file content sniffers</firstterm>
+to search for a particular pattern in the file. A file content sniffer associates
+a specific pattern in a file with a MIME type. If the application finds a
+match for the pattern, the MIME type associated with the pattern is the MIME
+type of the file.</para>
+ </listitem>
+ <listitem>
+ <para>If file content sniffers do not identify the MIME type, then
+the application can check the filename. The application checks the filename
+against the <firstterm>MIME type registry</firstterm>. The MIME type registry
+associates particular filename extensions and filename patterns, with particular
+MIME types. If a match for the filename is found, the MIME type associated
+with the extension or pattern is the MIME type of the file.</para>
+ </listitem>
+ </orderedlist>
+ <para>The following sections provide further information on file content sniffers
+and the MIME type registry.</para>
+ <sect2 id="mimetypes-2">
+ <title>File Content Sniffers</title>
+ <indexterm>
+ <primary>MIME types</primary>
+ <secondary>file content sniffers</secondary>
+ </indexterm>
+ <indexterm>
+ <primary>file content sniffers</primary>
+ </indexterm>
+ <para>File content sniffers are specified in the file <filename>/usr/gnome/etc/gnome-vfs-mime-magic</filename>. The following is an example of a file content sniffer:</para>
+ <literallayout>0 string \x89PNG image/png</literallayout>
+ <para>The syntax for file content sniffers is as follows:</para>
+ <literallayout>offset_start[:offset_end] pattern_type pattern [&amp;pattern_mask] type</literallayout>
+ <para><xref linkend="mimetypes-TBL-3"/> describes the fields in a file content
+sniffer.</para>
+ <table frame="topbot" id="mimetypes-TBL-3">
+ <title>Fields in a File Content Sniffer</title>
+ <tgroup cols="2" colsep="0" rowsep="0">
+ <colspec colwidth="29.90*"/>
+ <colspec colwidth="70.10*"/>
+ <thead>
+ <row rowsep="1">
+ <entry valign="top">
+ <para>Field</para>
+ </entry>
+ <entry valign="top">
+ <para>Description</para>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>offset_start</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies the number of characters to ignore in
+the file before searching for a text pattern.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>pattern_type</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies the type of pattern to search for. The <literal>string</literal> pattern type is the only pattern type that is supported at
+the time of publication of this guide.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>pattern</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies the pattern to search for. </para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>pattern_mask</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies a <firstterm>pattern mask</firstterm>,
+in hexadecimal format. For more information on pattern masks, see the next
+section.</para>
+ <para>This field is optional. This field is not present in
+the example.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>type</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies the MIME type to associate with files that match
+this entry.</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <sect3 id="mimetypes-12">
+ <title>Pattern Masks</title>
+ <indexterm>
+ <primary>MIME types</primary>
+ <secondary>pattern mask</secondary>
+ </indexterm>
+ <indexterm>
+ <primary>pattern mask</primary>
+ </indexterm>
+ <para>A
+pattern mask identifies bits in the pattern to ignore when searching for a
+pattern in a file. The following is an example of a file content sniffer with
+a pattern mask:</para>
+ <literallayout>0 string BMxxxx\000\000 &amp;0xffff00000000ffff image/bmp</literallayout>
+ <para>The pattern and mask in the example are as follows:</para>
+ <informaltable frame="none">
+ <tgroup cols="9" colsep="0" rowsep="0">
+ <colspec colwidth="16.54*"/>
+ <colspec colwidth="10.21*"/>
+ <colspec colwidth="10.41*"/>
+ <colspec colwidth="10.21*"/>
+ <colspec colwidth="10.41*"/>
+ <colspec colwidth="10.21*"/>
+ <colspec colwidth="10.41*"/>
+ <colspec colwidth="10.21*"/>
+ <colspec colwidth="10.41*"/>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <para>Pattern</para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>B</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>M</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>x</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>x</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>x</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>x</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>\000</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>\000</literal>
+ </para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>Mask</para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>ff</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>ff</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>00</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>00</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>00</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>00</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>ff</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <literal>ff</literal>
+ </para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ <para>The pattern and mask specify a file with the following characteristics:</para>
+ <orderedlist>
+ <listitem>
+ <para>The file begins with <literal>BM</literal>.</para>
+ </listitem>
+ <listitem>
+ <para><literal>BM</literal> is followed by four bytes with any values.</para>
+ </listitem>
+ <listitem>
+ <para>The four bytes are followed by <literal>\000\000</literal>.</para>
+ </listitem>
+ </orderedlist>
+ <para>The file content sniffer specifies that the MIME type of files that
+match the pattern and mask is <literal>image/bmp</literal>.</para>
+ </sect3>
+ </sect2>
+ <sect2 id="mimetypes-4">
+ <title>MIME Type Registry</title>
+ <indexterm>
+ <primary>MIME types</primary>
+ <secondary>MIME type registry</secondary>
+ </indexterm>
+ <para>The MIME type registry is located in <filename>/usr/gnome/share/mime-info</filename>. The MIME type registry contains the following files:</para>
+ <informaltable frame="topbot">
+ <tgroup cols="2" colsep="0" rowsep="0">
+ <colspec colwidth="50*"/>
+ <colspec colwidth="50*"/>
+ <thead>
+ <row rowsep="1">
+ <entry valign="top">
+ <para>File</para>
+ </entry>
+ <entry valign="top">
+ <para>Filename Extension</para>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <para>MIME information file</para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <filename>.mime</filename>
+ </para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>MIME keys file</para>
+ </entry>
+ <entry valign="top">
+ <para>
+ <filename>.keys</filename>
+ </para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ <para>The following sections describe MIME information files and MIME keys
+files.</para>
+ <sect3 id="mimetypes-5">
+ <title>MIME Information Files</title>
+ <indexterm>
+ <primary>MIME types</primary>
+ <secondary>MIME information files</secondary>
+ </indexterm>
+ <para><firstterm>MIME information files</firstterm>
+associate MIME types with one or both of the following:</para>
+ <itemizedlist>
+ <listitem>
+ <para>Filename extensions</para>
+ </listitem>
+ <listitem>
+ <para>Filename patterns</para>
+ </listitem>
+ </itemizedlist>
+ <para>When an application searches for the MIME type of a file, the application
+checks the filename against the MIME information files. If a match for the
+filename is found, the MIME type associated with the extension or pattern
+is the MIME type of the file.</para>
+ <para>In MIME information files, the filename pattern to search for is written
+as a regular expression.</para>
+ <para>The format of MIME type entries in MIME information files is as follows:</para>
+ <literallayout><replaceable>MIME_type</replaceable>
+ ext[,priority]: <replaceable>list_of_extensions</replaceable>
+ regex[,priority]: <replaceable>list_of_regular_expressions</replaceable></literallayout>
+ <para>You can specify a priority value for the filename extension and the
+regular expression. You can use the priority value to differentiate composite
+filenames. For example, you can assign a priority of <literal>1</literal>
+to the <filename>.gz</filename> extension, and assign a higher priority of <literal>2</literal> to the <filename>.tar.gz</filename> extension. In this case, the
+file <filename>abc.tar.gz</filename> takes the MIME type for <filename>.tar.gz</filename>.</para>
+ <note>
+ <para>You must indent the <literal>ext</literal> field and the <literal>regex</literal> field with a tab character (<literal>\t</literal>).</para>
+ </note>
+ <para>The following MIME type entries are samples from the <filename>gnome-vfs.mime</filename> MIME information file:</para>
+ <literallayout>application/x-compressed-tar
+ regex,2: tar\.gz$
+ ext: tgz
+audio/x-real-audio
+ ext: rm ra ram
+image/jpeg
+ ext: jpe jpeg jpg
+image/png
+ ext: png
+text/html
+ ext: html htm HTML
+text/plain
+ ext: asc txt TXT
+text/x-readme
+ regex: README.*</literallayout>
+ <note>
+ <para>The file manager reads the MIME information files alphabetically.
+The alphabetical order determines the order in which MIME types are assigned
+to filename extensions or regular expressions. For example, if the same file
+extension is assigned to different MIME types in the files <filename>abc.mime</filename> and <filename>def.mime</filename>, the MIME type in <filename>abc.mime</filename> is used.</para>
+ </note>
+ </sect3>
+ <sect3 id="mimetypes-11">
+ <title>MIME Keys Files</title>
+ <indexterm>
+ <primary>MIME types</primary>
+ <secondary>MIME keys files</secondary>
+ </indexterm>
+ <para><firstterm>MIME keys file</firstterm> provide information
+about a MIME type that is used in the user interface. For example, the MIME
+keys file provides a description of a MIME type, and specifies an icon to
+represent files of that MIME type.</para>
+ <para>The following is a sample from a MIME keys file:</para>
+ <literallayout>text/html
+ description=HTML page
+ icon_filename=gnome-text-html
+ default_action_type=application
+ short_list_application_ids_for_novice_user_level=mozilla,netscape,galeon
+ category=Documents/World Wide Web</literallayout>
+ <note>
+ <para>You must indent the keys in a MIME keys file with a tab character
+(<literal>\t</literal>).</para>
+ </note>
+ <para><xref linkend="mimetypes-TBL-6"/> describes the most important keys in
+MIME keys files. Typically, the <literal>description</literal> key and the <literal>category</literal> key are localized.</para>
+ <table frame="topbot" id="mimetypes-TBL-6">
+ <title>Keys in MIME Keys Files</title>
+ <tgroup cols="2" colsep="0" rowsep="0">
+ <colspec colname="colspec0" colwidth="50*"/>
+ <colspec colname="colspec1" colwidth="50*"/>
+ <thead>
+ <row rowsep="1">
+ <entry valign="top">
+ <para>Key</para>
+ </entry>
+ <entry valign="top">
+ <para>Description</para>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry colname="colspec0">
+ <para>
+ <literal>can_be_executable</literal>
+ </para>
+ </entry>
+ <entry colname="colspec1">
+ <para>Specifies whether files of this MIME type
+can be executed.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>description</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Describes the MIME type. This description can be
+displayed in the file manager and other applications.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>icon_filename</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies the filename of an icon to represent the
+MIME type. Does not specify the path to the filename, or the filename extension. </para>
+ <para>This icon can be displayed in the file manager and other applications.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>default_action_type</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies the category of action to take when a
+file of this MIME type is opened by the user. Enter <literal>application</literal>
+for this MIME type for most applications.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>short_list_application_ids</literal>
+ <literal>_for_novice_user_level</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies the application to use when a file of this MIME type is opened by
+a user. Specify one or more applications, in order of priority. The applications
+must also be registered in the application registry.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>category</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies a category for the MIME type. The value
+of this key determines the location of the MIME type in the <application>File Types and Programs</application> preference tool.</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect3>
+ </sect2>
+ </sect1>
+ <sect1 id="mimetypes-7">
+ <title>Registering Applications for MIME Types</title>
+ <indexterm>
+ <primary>MIME types</primary>
+ <secondary>registering applications
+for</secondary>
+ </indexterm>
+ <indexterm>
+ <primary>applications</primary>
+ <secondary>registry</secondary>
+ </indexterm>
+ <para>The <firstterm>application registry</firstterm> contains text files that register applications. The application
+registration files contain a series of key-value pairs that specify details
+for applications. For example, the application registration files contain
+the following information:</para>
+ <itemizedlist>
+ <listitem>
+ <para>The command to use to start the application.</para>
+ </listitem>
+ <listitem>
+ <para>MIME types to associate with the application.</para>
+ </listitem>
+ </itemizedlist>
+ <para>An application registration file can contain one or more application
+registrations. Application registration files have a <filename>.applications</filename> extension.</para>
+ <para>The location of the application registry is <filename>/usr/share/gnome/application-registry</filename>. This directory contains a default application registration file
+that is called <filename>gnome-vfs.applications</filename>.</para>
+ <para>To register an application, add a registration file for the application
+to the application registry. </para>
+ <para>The following is an example of an application registration:</para>
+ <literallayout>eog
+ command=eog
+ name=Eye of Gnome
+ can_open_multiple_files=true
+ expects_uris=false
+ requires_terminal=false
+ mime_types=image/bmp,image/gif,image/jpeg,image/png,image/tiff,
+image/x-xpixmap,image/x-bmp,image/x-png,image/x-portable-anymap,
+image/x-portable-bitmap,image/x-portable-graymap,
+image/x-portable-pixmap</literallayout>
+ <para><xref linkend="mimetypes-TBL-8"/> describes the keys in application registration
+files.</para>
+ <table frame="topbot" id="mimetypes-TBL-8">
+ <title>Keys for an Application Registration</title>
+ <tgroup cols="2" colsep="0" rowsep="0">
+ <colspec colname="colspec0" colwidth="50*"/>
+ <colspec colname="colspec1" colwidth="50*"/>
+ <thead>
+ <row rowsep="1">
+ <entry valign="top">
+ <para>Key</para>
+ </entry>
+ <entry valign="top">
+ <para>Description</para>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <para>Application identifier</para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies a unique identifier for the application. This
+identifier must be the same as the identifier in the short_list_application_ids_for_novice_user_level
+key in the MIME keys file for the application.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>command</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies the command to use to start the application,
+and any options to use with the command.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>name</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies a name for the application. The name is used
+in the user interface. For example, the name is used in the <guimenu>Open
+With</guimenu> submenu in the file manager.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>can_open_multiple_files</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies whether the application can open several
+files at the same time.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>expects_uris</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies whether the application can process URIs.
+If the value of this key is <literal>true</literal>, the application registration
+entry must also contain a <literal>supported_uri_schemes</literal> key.</para>
+ </entry>
+ </row>
+ <row>
+ <entry colname="colspec0" valign="top">
+ <para>
+ <literal>supported_uri_schemes</literal>
+ </para>
+ </entry>
+ <entry colname="colspec1" valign="top">
+ <para>Specifies
+the URI schemes that the application can process.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>requires_terminal</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies whether to run the application in a terminal
+window. Enter <literal>true</literal> for this field for an application that
+does not create a window in which to run.</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>
+ <literal>mime_types</literal>
+ </para>
+ </entry>
+ <entry valign="top">
+ <para>Specifies the MIME types that the application can
+use.</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+ <sect1 id="mimetypes-9">
+ <title>Adding an Application to the GNOME Desktop</title>
+ <indexterm>
+ <primary>MIME types</primary>
+ <secondary>adding applications</secondary>
+ </indexterm>
+ <indexterm>
+ <primary>applications</primary>
+ <secondary>adding</secondary>
+ </indexterm>
+ <para>To add an application to the GNOME desktop, perform the
+following steps:</para>
+ <orderedlist>
+ <listitem>
+ <para>Add a menu item for the application. For more information
+on how to add an item to a menu, see <xref linkend="menustructure-0"/>.</para>
+ </listitem>
+ <listitem>
+ <para>Add an icon for the application to <filename>/usr/gnome/share/icons/<replaceable>theme_name</replaceable>/<replaceable>icon_size</replaceable>/apps</filename>.
+For more information on icons and themes, see <citetitle>Installing Themes</citetitle>. </para>
+ </listitem>
+ <listitem>
+ <para>If the application uses a new MIME type, add a file content
+sniffer for the new MIME type. For more information on file content sniffers,
+see <xref linkend="mimetypes-2"/>.</para>
+ </listitem>
+ <listitem>
+ <para>If the application uses a new MIME type, add a MIME information
+file for the application to the MIME type registry. For more information on
+MIME information files, see <xref linkend="mimetypes-5"/>.</para>
+ </listitem>
+ <listitem>
+ <para>Add a MIME keys file for the application to the MIME type
+registry. For more information on MIME keys files, see <xref linkend="mimetypes-11"/>.</para>
+ </listitem>
+ <listitem>
+ <para>If the application uses a new MIME type, add an icon for the
+MIME type to <filename>/usr/gnome/share/icons/<replaceable>theme_name</replaceable>/<replaceable>icon_size</replaceable>/mimetypes</filename>. For more information on icons
+and themes, see <citetitle>Installing Themes</citetitle>. </para>
+ </listitem>
+ <listitem>
+ <para>To associate the application with a MIME type, add an application
+registration file to the application registry. For more information on the
+application registry, see <xref linkend="mimetypes-7"/>.</para>
+ </listitem>
+ </orderedlist>
+ </sect1>
+</chapter>