summaryrefslogtreecommitdiffstats
path: root/data
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 15:59:36 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 15:59:36 +0000
commitec52555862913a23417735f9f7f5402f5230da13 (patch)
tree5e43a30d289a3daa69dddfbb060216ff6332f197 /data
parentInitial commit. (diff)
downloadnautilus-upstream.tar.xz
nautilus-upstream.zip
Adding upstream version 3.38.2.upstream/3.38.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'data')
-rw-r--r--data/.gitignore7
-rw-r--r--data/dbus-interfaces.xml59
-rw-r--r--data/dbus-interfaces2.xml84
-rw-r--r--data/freedesktop-dbus-interfaces.xml43
-rw-r--r--data/icons/hicolor/scalable/apps/org.gnome.Nautilus.svg253
-rw-r--r--data/icons/hicolor/scalable/apps/org.gnome.NautilusDevel.svg1
-rw-r--r--data/icons/hicolor/symbolic/apps/org.gnome.Nautilus-symbolic.svg30
-rw-r--r--data/lineup-parameters.c483
-rw-r--r--data/meson.build142
-rw-r--r--data/nautilus-autorun-software.desktop.in11
-rw-r--r--data/ontology/meson.build8
-rw-r--r--data/ontology/nautilus.description9
-rw-r--r--data/ontology/nautilus.ontology20
-rw-r--r--data/org.freedesktop.FileManager1.service.in3
-rw-r--r--data/org.gnome.Nautilus.appdata.xml.in.in62
-rw-r--r--data/org.gnome.Nautilus.desktop.in.in20
-rw-r--r--data/org.gnome.Nautilus.search-provider.ini.in5
-rw-r--r--data/org.gnome.Nautilus.service.in3
-rw-r--r--data/org.gnome.nautilus.gschema.xml287
-rwxr-xr-xdata/run-uncrustify.sh26
-rw-r--r--data/shell-search-provider-dbus-interfaces.xml44
-rw-r--r--data/tracker/meson.build31
-rw-r--r--data/tracker/org.gnome.Nautilus.Tracker3.Miner.Extract.service.in7
-rw-r--r--data/tracker/org.gnome.Nautilus.Tracker3.Miner.Files.service.in7
-rw-r--r--data/tracker/org.gnome.Nautilus.domain.rule.in21
-rw-r--r--data/uncrustify.cfg135
26 files changed, 1801 insertions, 0 deletions
diff --git a/data/.gitignore b/data/.gitignore
new file mode 100644
index 0000000..89808d7
--- /dev/null
+++ b/data/.gitignore
@@ -0,0 +1,7 @@
+/lineup-parameters
+/nautilus-autorun-software.desktop
+/org.freedesktop.FileManager1.service
+/org.gnome.Nautilus.appdata.xml
+/org.gnome.Nautilus.desktop
+/org.gnome.Nautilus.service
+/org.gnome.nautilus.gschema.valid
diff --git a/data/dbus-interfaces.xml b/data/dbus-interfaces.xml
new file mode 100644
index 0000000..a388af0
--- /dev/null
+++ b/data/dbus-interfaces.xml
@@ -0,0 +1,59 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+
+<!--
+ Copyright (C) 2011 Red Hat, Inc.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General
+ Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
+
+ Author: Alexander Larsson <alexl@redhat.com>
+-->
+
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+ <interface name='org.gnome.Nautilus.FileOperations'>
+
+ <!--
+ This interface has been deprecated. Please switch to
+ org.gnome.Nautilus.FileOperations2 interace.
+ -->
+ <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
+
+ <method name='CopyURIs'>
+ <arg type='as' name='SourceFilesURIList' direction='in'/>
+ <arg type='s' name='DestinationDirectoryURI' direction='in'/>
+ </method>
+ <method name='MoveURIs'>
+ <arg type='as' name='SourceFilesURIList' direction='in'/>
+ <arg type='s' name='DestinationDirectoryURI' direction='in'/>
+ </method>
+ <method name='EmptyTrash'>
+ </method>
+ <method name='TrashFiles'>
+ <arg type='as' name='URIs' direction='in'/>
+ </method>
+ <method name='CreateFolder'>
+ <arg type='s' name='URI' direction='in'/>
+ </method>
+ <method name='RenameFile'>
+ <arg type='s' name='URI' direction='in'/>
+ <arg type='s' name='NewName' direction='in'/>
+ </method>
+ <method name='Undo'>
+ </method>
+ <method name='Redo'>
+ </method>
+ <property name="UndoStatus" type="i" access="read"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces2.xml b/data/dbus-interfaces2.xml
new file mode 100644
index 0000000..8216be0
--- /dev/null
+++ b/data/dbus-interfaces2.xml
@@ -0,0 +1,84 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+
+<!--
+ Copyright (C) 2011 Red Hat, Inc.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General
+ Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
+
+ Author: Alexander Larsson <alexl@redhat.com>
+-->
+
+<!--
+ org.gnome.Nautilus.FileOperations2:
+ @short_description: Nautilus File Operations D-Bus interface
+
+ This API is meant to be consumed by desktop components, and optimized
+ for their needs. This API is considered private and must not be used
+ by applications.
+
+ All methods takes platform_data argument that can be used to pass
+ extra data. Currently supported arguments are:
+ - parent-handle (s): the parent window identifier, used to set parent
+ window for dialogs; must be in x11:XID or
+ wayland:HANDLE form
+ - timestamp (u): the timestamp of the user interaction
+-->
+<node xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+ <interface name='org.gnome.Nautilus.FileOperations2'>
+
+ <method name='CopyURIs'>
+ <arg type='as' name='sources' direction='in'/>
+ <arg type='s' name='destination' direction='in'/>
+ <arg type='a{sv}' name='platform_data' direction='in'/>
+ </method>
+ <method name='MoveURIs'>
+ <arg type='as' name='sources' direction='in'/>
+ <arg type='s' name='destination' direction='in'/>
+ <arg type='a{sv}' name='platform_data' direction='in'/>
+ </method>
+ <method name='EmptyTrash'>
+ <arg type="b" name="ask_confirmation" direction='in'/>
+ <arg type='a{sv}' name='platform_data' direction='in'/>
+ </method>
+ <method name='TrashURIs'>
+ <arg type='as' name='uris' direction='in'/>
+ <arg type='a{sv}' name='platform_data' direction='in'/>
+ </method>
+ <method name='DeleteURIs'>
+ <arg type='as' name='uris' direction='in'/>
+ <arg type='a{sv}' name='platform_data' direction='in'/>
+ </method>
+ <method name='CreateFolder'>
+ <arg type='s' name='parent_uri' direction='in'/>
+ <arg type='s' name='new_folder_name' direction='in'/>
+ <arg type='a{sv}' name='platform_data' direction='in'/>
+ </method>
+ <method name='RenameURI'>
+ <arg type='s' name='uri' direction='in'/>
+ <arg type='s' name='new_name' direction='in'/>
+ <arg type='a{sv}' name='platform_data' direction='in'/>
+ </method>
+ <method name='Undo'>
+ <arg type='a{sv}' name='platform_data' direction='in'/>
+ </method>
+ <method name='Redo'>
+ <arg type='a{sv}' name='platform_data' direction='in'/>
+ </method>
+
+ <property name="UndoStatus" type="i" access="read"/>
+
+ </interface>
+</node>
diff --git a/data/freedesktop-dbus-interfaces.xml b/data/freedesktop-dbus-interfaces.xml
new file mode 100644
index 0000000..d648205
--- /dev/null
+++ b/data/freedesktop-dbus-interfaces.xml
@@ -0,0 +1,43 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+
+<!--
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General
+ Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
+-->
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+ <interface name='org.freedesktop.FileManager1'>
+ <method name='ShowFolders'>
+ <arg type='as' name='URIs' direction='in'/>
+ <arg type='s' name='StartupId' direction='in'/>
+ </method>
+ <method name='ShowItems'>
+ <arg type='as' name='URIs' direction='in'/>
+ <arg type='s' name='StartupId' direction='in'/>
+ </method>
+ <method name='ShowItemProperties'>
+ <arg type='as' name='URIs' direction='in'/>
+ <arg type='s' name='StartupId' direction='in'/>
+ </method>
+ <property name="OpenLocations" type="as" access="read"/>
+ <!--
+ An extension to the official FileManager1 interface that allows Nautilus
+ to publish a mapping of windows to the locations in each window.
+ This can be used by shell extensions like dash-to-dock/ubuntu-dock to
+ associate special dock icons with windows where the icon's location is
+ open.
+ -->
+ <property name="OpenWindowsWithLocations" type="a{sas}" access="read"/>
+ </interface>
+</node>
diff --git a/data/icons/hicolor/scalable/apps/org.gnome.Nautilus.svg b/data/icons/hicolor/scalable/apps/org.gnome.Nautilus.svg
new file mode 100644
index 0000000..dea3e0f
--- /dev/null
+++ b/data/icons/hicolor/scalable/apps/org.gnome.Nautilus.svg
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ viewBox="0 0 128 128"
+ style="display:inline;enable-background:new"
+ version="1.0"
+ id="svg11300"
+ height="128"
+ width="128">
+ <title
+ id="title4162">Adwaita Icon Template</title>
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient1245">
+ <stop
+ id="stop1241"
+ offset="0"
+ style="stop-color:#9a9996;stop-opacity:1" />
+ <stop
+ id="stop1243"
+ offset="1"
+ style="stop-color:#c0bfbc;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient1697">
+ <stop
+ style="stop-color:#deddda;stop-opacity:1"
+ offset="0"
+ id="stop1685" />
+ <stop
+ id="stop1687"
+ offset="0.04545455"
+ style="stop-color:#eeeeec;stop-opacity:1" />
+ <stop
+ style="stop-color:#deddda;stop-opacity:1"
+ offset="0.09090909"
+ id="stop1689" />
+ <stop
+ id="stop1691"
+ offset="0.90909094"
+ style="stop-color:#deddda;stop-opacity:1" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="0.95454544"
+ id="stop1693" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="1"
+ id="stop1695" />
+ </linearGradient>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="238"
+ x2="108"
+ y1="238"
+ x1="20"
+ id="linearGradient1049"
+ xlink:href="#linearGradient1697" />
+ <linearGradient
+ y2="238"
+ x2="74"
+ y1="238"
+ x1="50"
+ gradientTransform="translate(2,-22)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1185"
+ xlink:href="#linearGradient1697" />
+ <linearGradient
+ y2="200"
+ x2="65"
+ y1="204"
+ x1="65"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1348"
+ xlink:href="#linearGradient1245" />
+ </defs>
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>GNOME Design Team</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source />
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
+ <dc:title>Adwaita Icon Template</dc:title>
+ <dc:subject>
+ <rdf:Bag />
+ </dc:subject>
+ <dc:date />
+ <dc:rights>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:rights>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:publisher>
+ <dc:identifier />
+ <dc:relation />
+ <dc:language />
+ <dc:coverage />
+ <dc:description />
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:contributor>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Notice" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Attribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-172)"
+ style="display:inline"
+ id="layer1">
+ <g
+ style="display:inline"
+ id="layer9">
+ <g
+ transform="matrix(0.25,0,0,-0.25,-6,217)"
+ id="g15447-1" />
+ <g
+ id="g1207">
+ <rect
+ ry="8.017911"
+ rx="8.7725897"
+ y="234"
+ x="20"
+ height="58"
+ width="88"
+ id="rect1041"
+ style="opacity:1;vector-effect:none;fill:url(#linearGradient1049);fill-opacity:1;stroke:none;stroke-width:0.01184966px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
+ <rect
+ style="opacity:1;vector-effect:none;fill:#f6f5f4;fill-opacity:1;stroke:none;stroke-width:0.01184966px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
+ id="rect15435-6"
+ width="88"
+ height="108"
+ x="20"
+ y="180"
+ rx="8.7725897"
+ ry="8.017911" />
+ <rect
+ ry="4.0021734"
+ rx="4"
+ y="186"
+ x="24"
+ height="98"
+ width="80"
+ id="rect1167"
+ style="display:inline;opacity:1;vector-effect:none;fill:#1a5fb4;fill-opacity:1;stroke:none;stroke-width:0.0119126px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ style="display:inline;opacity:1;vector-effect:none;fill:#3584e4;fill-opacity:1;stroke:none;stroke-width:0.0119126px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect15441-8"
+ width="80"
+ height="98"
+ x="24"
+ y="184"
+ rx="4"
+ ry="4.0021734" />
+ <rect
+ style="display:inline;opacity:1;vector-effect:none;fill:#1c71d8;fill-opacity:1;stroke:none;stroke-width:0.01190936px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect15443-6"
+ width="80"
+ height="2"
+ x="24"
+ y="216"
+ rx="0"
+ ry="0" />
+ <rect
+ style="display:inline;opacity:1;vector-effect:none;fill:#1c71d8;fill-opacity:1;stroke:none;stroke-width:0.01190936px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect15461-2"
+ width="80"
+ height="2"
+ x="24"
+ y="248"
+ rx="0"
+ ry="0" />
+ <g
+ id="g1088">
+ <path
+ id="path26035"
+ d="m 55,196 h 18 c 1.662,0 3,1 3,3 v 5 H 72.03125 L 72,200 H 56 l 0.03125,4 H 52 v -5 c 0,-1.662 1.338,-3 3,-3 z"
+ style="opacity:1;vector-effect:none;fill:url(#linearGradient1185);fill-opacity:1;stroke:none;stroke-width:0.01184966px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
+ <rect
+ style="opacity:0.1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1059"
+ width="24"
+ height="4"
+ x="52"
+ y="202"
+ ry="1.5" />
+ <path
+ style="opacity:1;fill:url(#linearGradient1348);fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 55,200 c -1.662,0 -3,1.338 -3,3 v 1 h 4 v -2 h 16 v 2 h 4 v -1 c 0,-1.662 -1.338,-3 -3,-3 z"
+ id="rect1061" />
+ <rect
+ y="202"
+ x="56"
+ height="2"
+ width="16"
+ id="rect1189"
+ style="opacity:0.1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <use
+ x="0"
+ y="0"
+ xlink:href="#g1088"
+ id="use1090"
+ transform="translate(0,32)"
+ width="100%"
+ height="100%" />
+ <use
+ height="100%"
+ width="100%"
+ transform="translate(0,64)"
+ id="use1092"
+ xlink:href="#g1088"
+ y="0"
+ x="0" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/data/icons/hicolor/scalable/apps/org.gnome.NautilusDevel.svg b/data/icons/hicolor/scalable/apps/org.gnome.NautilusDevel.svg
new file mode 100644
index 0000000..d64ac0f
--- /dev/null
+++ b/data/icons/hicolor/scalable/apps/org.gnome.NautilusDevel.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><clipPath id="g"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="m"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="b"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="K"><path d="M0 0h128v128H0z"/></clipPath><clipPath id="l"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="c"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="k"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="j"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="d"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="i"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="e"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="h"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="f"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="H"><path d="M0 0h128v128H0z"/></clipPath><clipPath id="n"><path d="M0 0h128v128H0z"/></clipPath><clipPath id="M"><path d="M0 0h128v128H0z"/></clipPath><linearGradient id="v" gradientUnits="userSpaceOnUse" x1="50" y1="238" x2="74" y2="238" gradientTransform="translate(2 -162)"><stop offset="0" stop-color="#deddda"/><stop offset=".045" stop-color="#eeeeec"/><stop offset=".091" stop-color="#deddda"/><stop offset=".909" stop-color="#deddda"/><stop offset=".955" stop-color="#eeeeec"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="aa" gradientUnits="userSpaceOnUse" x1="65" y1="204" x2="65" y2="200" gradientTransform="translate(0 -108)"><stop offset="0" stop-color="#9a9996"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="p" gradientUnits="userSpaceOnUse" x1="50" y1="238" x2="74" y2="238" gradientTransform="translate(2 -194)"><stop offset="0" stop-color="#deddda"/><stop offset=".045" stop-color="#eeeeec"/><stop offset=".091" stop-color="#deddda"/><stop offset=".909" stop-color="#deddda"/><stop offset=".955" stop-color="#eeeeec"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="Q" gradientUnits="userSpaceOnUse" x1="50" y1="238" x2="74" y2="238" gradientTransform="translate(2 -194)"><stop offset="0" stop-color="#deddda"/><stop offset=".045" stop-color="#eeeeec"/><stop offset=".091" stop-color="#deddda"/><stop offset=".909" stop-color="#deddda"/><stop offset=".955" stop-color="#eeeeec"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="Y" gradientUnits="userSpaceOnUse" x1="50" y1="238" x2="74" y2="238" gradientTransform="translate(2 -130)"><stop offset="0" stop-color="#deddda"/><stop offset=".045" stop-color="#eeeeec"/><stop offset=".091" stop-color="#deddda"/><stop offset=".909" stop-color="#deddda"/><stop offset=".955" stop-color="#eeeeec"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="s" gradientUnits="userSpaceOnUse" x1="65" y1="204" x2="65" y2="200" gradientTransform="translate(0 -172)"><stop offset="0" stop-color="#9a9996"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="W" gradientUnits="userSpaceOnUse" x1="65" y1="204" x2="65" y2="200" gradientTransform="translate(0 -140)"><stop offset="0" stop-color="#9a9996"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="o" gradientUnits="userSpaceOnUse" x1="20" y1="238" x2="108" y2="238" gradientTransform="translate(0 -172)"><stop offset="0" stop-color="#deddda"/><stop offset=".045" stop-color="#eeeeec"/><stop offset=".091" stop-color="#deddda"/><stop offset=".909" stop-color="#deddda"/><stop offset=".955" stop-color="#eeeeec"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="U" gradientUnits="userSpaceOnUse" x1="50" y1="238" x2="74" y2="238" gradientTransform="translate(2 -162)"><stop offset="0" stop-color="#deddda"/><stop offset=".045" stop-color="#eeeeec"/><stop offset=".091" stop-color="#deddda"/><stop offset=".909" stop-color="#deddda"/><stop offset=".955" stop-color="#eeeeec"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="y" gradientUnits="userSpaceOnUse" x1="65" y1="204" x2="65" y2="200" gradientTransform="translate(0 -140)"><stop offset="0" stop-color="#9a9996"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="L" gradientUnits="userSpaceOnUse" x1="300" y1="235" x2="428" y2="235" gradientTransform="matrix(0 .37 -.98462 0 295.385 -30.36)"><stop offset="0" stop-color="#f9f06b"/><stop offset="1" stop-color="#f5c211"/></linearGradient><linearGradient id="B" gradientUnits="userSpaceOnUse" x1="50" y1="238" x2="74" y2="238" gradientTransform="translate(2 -130)"><stop offset="0" stop-color="#deddda"/><stop offset=".045" stop-color="#eeeeec"/><stop offset=".091" stop-color="#deddda"/><stop offset=".909" stop-color="#deddda"/><stop offset=".955" stop-color="#eeeeec"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="S" gradientUnits="userSpaceOnUse" x1="65" y1="204" x2="65" y2="200" gradientTransform="translate(0 -172)"><stop offset="0" stop-color="#9a9996"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="E" gradientUnits="userSpaceOnUse" x1="65" y1="204" x2="65" y2="200" gradientTransform="translate(0 -108)"><stop offset="0" stop-color="#9a9996"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="P" gradientUnits="userSpaceOnUse" x1="20" y1="238" x2="108" y2="238" gradientTransform="translate(0 -172)"><stop offset="0" stop-color="#deddda"/><stop offset=".045" stop-color="#eeeeec"/><stop offset=".091" stop-color="#deddda"/><stop offset=".909" stop-color="#deddda"/><stop offset=".955" stop-color="#eeeeec"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><mask id="u"><g filter="url(#a)"><path fill-opacity=".1" d="M0 0h128v128H0z"/></g></mask><mask id="r"><g filter="url(#a)"><path fill-opacity=".1" d="M0 0h128v128H0z"/></g></mask><mask id="ab"><g filter="url(#a)"><path fill-opacity=".1" d="M0 0h128v128H0z"/></g></mask><mask id="x"><g filter="url(#a)"><path fill-opacity=".1" d="M0 0h128v128H0z"/></g></mask><mask id="X"><g filter="url(#a)"><path fill-opacity=".1" d="M0 0h128v128H0z"/></g></mask><mask id="T"><g filter="url(#a)"><path fill-opacity=".1" d="M0 0h128v128H0z"/></g></mask><mask id="A"><g filter="url(#a)"><path fill-opacity=".1" d="M0 0h128v128H0z"/></g></mask><mask id="ad"><use xlink:href="#J"/></mask><mask id="V"><g filter="url(#a)"><path fill-opacity=".1" d="M0 0h128v128H0z"/></g></mask><mask id="D"><g filter="url(#a)"><path fill-opacity=".1" d="M0 0h128v128H0z"/></g></mask><mask id="Z"><g filter="url(#a)"><path fill-opacity=".1" d="M0 0h128v128H0z"/></g></mask><mask id="R"><g filter="url(#a)"><path fill-opacity=".1" d="M0 0h128v128H0z"/></g></mask><mask id="G"><g filter="url(#a)"><path fill-opacity=".1" d="M0 0h128v128H0z"/></g></mask><mask id="O"><g filter="url(#a)"><path fill-opacity=".8" d="M0 0h128v128H0z"/></g></mask><g id="w" clip-path="url(#d)"><path d="M61.5 78h21a1.5 1.5 0 011.5 1.5v1a1.5 1.5 0 01-1.5 1.5h-21a1.5 1.5 0 01-1.5-1.5v-1a1.5 1.5 0 011.5-1.5zm0 0"/></g><g id="F" clip-path="url(#g)"><path d="M64 110h16v2H64zm0 0"/></g><g id="C" clip-path="url(#f)"><path d="M61.5 110h21a1.5 1.5 0 011.5 1.5v1a1.5 1.5 0 01-1.5 1.5h-21a1.5 1.5 0 01-1.5-1.5v-1a1.5 1.5 0 011.5-1.5zm0 0"/></g><g id="J" clip-path="url(#H)" filter="url(#a)"><use xlink:href="#I"/></g><g id="z" clip-path="url(#e)"><path d="M64 78h16v2H64zm0 0"/></g><g id="I" clip-path="url(#n)"><path d="M28 62h72a8 8 0 018 8v42a8 8 0 01-8 8H28a8 8 0 01-8-8V70a8 8 0 018-8zm0 0" fill="url(#o)"/><path d="M28 8h72a8 8 0 018 8v92a8 8 0 01-8 8H28a8 8 0 01-8-8V16a8 8 0 018-8zm0 0" fill="#f6f5f4"/><path d="M28 14h72c2.21 0 4 1.79 4 4v90c0 2.21-1.79 4-4 4H28c-2.21 0-4-1.79-4-4V18c0-2.21 1.79-4 4-4zm0 0" fill="#1a5fb4"/><path d="M28 12h72c2.21 0 4 1.79 4 4v90c0 2.21-1.79 4-4 4H28c-2.21 0-4-1.79-4-4V16c0-2.21 1.79-4 4-4zm0 0" fill="#3584e4"/><path d="M24 44h80v2H24zm0 0M24 76h80v2H24zm0 0" fill="#1c71d8"/><path d="M55 24h18c1.66 0 3 1 3 3v5h-3.969L72 28H56l.031 4H52v-5c0-1.66 1.34-3 3-3zm0 0" fill="url(#p)"/><use xlink:href="#q" transform="translate(-8 -16)" mask="url(#r)"/><path d="M55 28c-1.66 0-3 1.34-3 3v1h4v-2h16v2h4v-1c0-1.66-1.34-3-3-3zm0 0" fill="url(#s)"/><use xlink:href="#t" transform="translate(-8 -16)" mask="url(#u)"/><path d="M55 56h18c1.66 0 3 1 3 3v5h-3.969L72 60H56l.031 4H52v-5c0-1.66 1.34-3 3-3zm0 0" fill="url(#v)"/><use xlink:href="#w" transform="translate(-8 -16)" mask="url(#x)"/><path d="M55 60c-1.66 0-3 1.34-3 3v1h4v-2h16v2h4v-1c0-1.66-1.34-3-3-3zm0 0" fill="url(#y)"/><use xlink:href="#z" transform="translate(-8 -16)" mask="url(#A)"/><path d="M55 88h18c1.66 0 3 1 3 3v5h-3.969L72 92H56l.031 4H52v-5c0-1.66 1.34-3 3-3zm0 0" fill="url(#B)"/><use xlink:href="#C" transform="translate(-8 -16)" mask="url(#D)"/><path d="M55 92c-1.66 0-3 1.34-3 3v1h4v-2h16v2h4v-1c0-1.66-1.34-3-3-3zm0 0" fill="url(#E)"/><use xlink:href="#F" transform="translate(-8 -16)" mask="url(#G)"/></g><g id="t" clip-path="url(#c)"><path d="M64 46h16v2H64zm0 0"/></g><g id="q" clip-path="url(#b)"><path d="M61.5 46h21a1.5 1.5 0 011.5 1.5v1a1.5 1.5 0 01-1.5 1.5h-21a1.5 1.5 0 01-1.5-1.5v-1a1.5 1.5 0 011.5-1.5zm0 0"/></g><g id="N" clip-path="url(#K)"><path d="M128 80.64V128H0V80.64zm0 0" fill="url(#L)"/><path d="M13.309 80.64L60.664 128H81.88l-47.36-47.36zm42.421 0L103.094 128h21.215L76.945 80.64zm42.43 0L128 110.48V89.27l-8.629-8.63zM0 88.548v21.215L18.238 128h21.215zm0 0"/></g><g id="ac" clip-path="url(#M)"><use xlink:href="#N" mask="url(#O)"/></g><filter id="a" filterUnits="objectBoundingBox" x="0%" y="0%" width="100%" height="100%"><feColorMatrix in="SourceGraphic" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter></defs><path d="M28 62h72a8 8 0 018 8v42a8 8 0 01-8 8H28a8 8 0 01-8-8V70a8 8 0 018-8zm0 0" fill="url(#P)"/><path d="M28 8h72a8 8 0 018 8v92a8 8 0 01-8 8H28a8 8 0 01-8-8V16a8 8 0 018-8zm0 0" fill="#f6f5f4"/><path d="M28 14h72c2.21 0 4 1.79 4 4v90c0 2.21-1.79 4-4 4H28c-2.21 0-4-1.79-4-4V18c0-2.21 1.79-4 4-4zm0 0" fill="#1a5fb4"/><path d="M28 12h72c2.21 0 4 1.79 4 4v90c0 2.21-1.79 4-4 4H28c-2.21 0-4-1.79-4-4V16c0-2.21 1.79-4 4-4zm0 0" fill="#3584e4"/><path d="M24 44h80v2H24zm0 0M24 76h80v2H24zm0 0" fill="#1c71d8"/><path d="M55 24h18c1.66 0 3 1 3 3v5h-3.969L72 28H56l.031 4H52v-5c0-1.66 1.34-3 3-3zm0 0" fill="url(#Q)"/><use xlink:href="#q" transform="translate(-8 -16)" mask="url(#R)"/><path d="M55 28c-1.66 0-3 1.34-3 3v1h4v-2h16v2h4v-1c0-1.66-1.34-3-3-3zm0 0" fill="url(#S)"/><use xlink:href="#t" transform="translate(-8 -16)" mask="url(#T)"/><path d="M55 56h18c1.66 0 3 1 3 3v5h-3.969L72 60H56l.031 4H52v-5c0-1.66 1.34-3 3-3zm0 0" fill="url(#U)"/><use xlink:href="#w" transform="translate(-8 -16)" mask="url(#V)"/><path d="M55 60c-1.66 0-3 1.34-3 3v1h4v-2h16v2h4v-1c0-1.66-1.34-3-3-3zm0 0" fill="url(#W)"/><use xlink:href="#z" transform="translate(-8 -16)" mask="url(#X)"/><path d="M55 88h18c1.66 0 3 1 3 3v5h-3.969L72 92H56l.031 4H52v-5c0-1.66 1.34-3 3-3zm0 0" fill="url(#Y)"/><use xlink:href="#C" transform="translate(-8 -16)" mask="url(#Z)"/><path d="M55 92c-1.66 0-3 1.34-3 3v1h4v-2h16v2h4v-1c0-1.66-1.34-3-3-3zm0 0" fill="url(#aa)"/><use xlink:href="#F" transform="translate(-8 -16)" mask="url(#ab)"/><use xlink:href="#ac" mask="url(#ad)"/></svg> \ No newline at end of file
diff --git a/data/icons/hicolor/symbolic/apps/org.gnome.Nautilus-symbolic.svg b/data/icons/hicolor/symbolic/apps/org.gnome.Nautilus-symbolic.svg
new file mode 100644
index 0000000..2281d98
--- /dev/null
+++ b/data/icons/hicolor/symbolic/apps/org.gnome.Nautilus-symbolic.svg
@@ -0,0 +1,30 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:svg='http://www.w3.org/2000/svg' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' id='svg7384' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' version='1.1' inkscape:version='0.47 r22583' height='16' sodipodi:docname='system-file-manager-symbolic.svg' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns='http://www.w3.org/2000/svg' width='16'>
+ <metadata id='metadata90'>
+ <rdf:RDF>
+ <cc:Work rdf:about=''>
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource='http://purl.org/dc/dcmitype/StillImage'/>
+ <dc:title>Gnome Symbolic Icon Theme</dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview inkscape:object-paths='true' inkscape:cy='-218.16054' inkscape:current-layer='layer11' inkscape:window-width='1920' pagecolor='#555753' showborder='false' showguides='true' inkscape:snap-nodes='false' objecttolerance='10' showgrid='true' inkscape:object-nodes='true' inkscape:pageshadow='2' inkscape:guide-bbox='true' inkscape:window-x='0' inkscape:snap-bbox='true' bordercolor='#666666' id='namedview88' inkscape:window-maximized='1' inkscape:snap-global='true' inkscape:window-y='26' gridtolerance='10' inkscape:zoom='1' inkscape:window-height='1021' borderopacity='1' guidetolerance='10' inkscape:snap-bbox-midpoints='false' inkscape:cx='-144.56708' inkscape:bbox-paths='false' inkscape:snap-grids='true' inkscape:pageopacity='1' inkscape:snap-to-guides='true'>
+ <inkscape:grid visible='true' spacingx='1px' type='xygrid' spacingy='1px' id='grid4866' empspacing='2' enabled='true' snapvisiblegridlinesonly='true'/>
+ </sodipodi:namedview>
+ <title id='title9167'>Gnome Symbolic Icon Theme</title>
+ <defs id='defs7386'/>
+ <g transform='translate(-202.0002,-490)' inkscape:groupmode='layer' id='layer9' inkscape:label='status' style='display:inline'/>
+ <g transform='translate(-202.0002,-490)' inkscape:groupmode='layer' id='layer10' inkscape:label='devices'/>
+ <g transform='translate(-202.0002,-490)' inkscape:groupmode='layer' id='layer11' inkscape:label='apps'>
+
+ <path inkscape:connector-curvature='0' d='M 205.1875,490 C 203.98238,490 203,491.01795 203,492.21875 l 0,11.5625 c 0,1.2008 0.98238,2.21875 2.1875,2.21875 l 9.625,0 c 1.20512,0 2.1875,-1.01795 2.1875,-2.21875 l 0,-11.5625 C 217,491.01795 216.01762,490 214.8125,490 l -9.625,0 z m -0.1875,3 10,0 0,11 -10,0 0,-11 z m 1,1 0,4 8.03125,0 0,-4 L 206,494 z m 2.34375,1.4375 a 0.50004997,0.50004997 0 0 1 0.0625,0 0.50004997,0.50004997 0 0 1 0.59375,0.5 l 0,0.0625 2,0 0,-0.0625 a 0.50004997,0.50004997 0 1 1 1,0 L 212,496 c 0,0.54535 -0.45465,1 -1,1 l -2,0 c -0.54535,0 -1,-0.45465 -1,-1 l 0,-0.0625 a 0.50004997,0.50004997 0 0 1 0.34375,-0.5 z m -2.3125,3.5625 0,4 8.03125,0 0,-4 -8.03125,0 z m 2.3125,1.4375 a 0.50004997,0.50004997 0 0 1 0.0625,0 0.50004997,0.50004997 0 0 1 0.59375,0.5 l 0,0.0625 2,0 0,-0.0625 a 0.50004997,0.50004997 0 1 1 1,0 L 212,501 c 0,0.54535 -0.45465,1 -1,1 l -2,0 c -0.54535,0 -1,-0.45465 -1,-1 l 0,-0.0625 a 0.50004997,0.50004997 0 0 1 0.34375,-0.5 z' id='rect11668-7' style='color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate'/>
+ </g>
+ <g transform='translate(-202.0002,-490)' inkscape:groupmode='layer' id='layer12' inkscape:label='actions'/>
+ <g transform='translate(-202.0002,-490)' inkscape:groupmode='layer' id='layer13' inkscape:label='places'/>
+ <g transform='translate(-202.0002,-490)' inkscape:groupmode='layer' id='layer14' inkscape:label='mimetypes'/>
+ <g transform='translate(-202.0002,-490)' inkscape:groupmode='layer' id='layer15' inkscape:label='emblems' style='display:inline'/>
+ <g transform='translate(-202.0002,-490)' inkscape:groupmode='layer' id='g4953' inkscape:label='categories' style='display:inline'/>
+</svg>
diff --git a/data/lineup-parameters.c b/data/lineup-parameters.c
new file mode 100644
index 0000000..51a01e1
--- /dev/null
+++ b/data/lineup-parameters.c
@@ -0,0 +1,483 @@
+/*
+ * This file is part of gnome-c-utils.
+ *
+ * Copyright © 2013 Sébastien Wilmet <swilmet@gnome.org>
+ *
+ * gnome-c-utils is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * gnome-c-utils is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with gnome-c-utils. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * Line up parameters of function declarations.
+ *
+ * Usage: lineup-parameters [file]
+ * If the file is not given, stdin is read.
+ * The result is printed to stdout.
+ *
+ * The restrictions:
+ * - The function name must be at column 0, followed by a space and an opening
+ * parenthesis;
+ * - One parameter per line;
+ * - A paramater must follow certain rules (see the regex in the code), but it
+ * doesn't accept all possibilities of the C language.
+ * - The opening curly brace ("{") of the function must also be at column 0.
+ *
+ * If one restriction is missing, the function declaration is not modified.
+ *
+ * Example:
+ *
+ * gboolean
+ * frobnitz (Frobnitz *frobnitz,
+ * gint magic_number,
+ * GError **error)
+ * {
+ * ...
+ * }
+ *
+ * Becomes:
+ *
+ * gboolean
+ * frobnitz (Frobnitz *frobnitz,
+ * gint magic_number,
+ * GError **error)
+ * {
+ * ...
+ * }
+ */
+
+/*
+ * Use with Vim:
+ *
+ * Although this script can be used in Vim (or other text editors), a Vim plugin
+ * exists:
+ * http://damien.lespiau.name/blog/2009/12/07/aligning-c-function-parameters-with-vim/
+ *
+ * You can use a selection:
+ * - place the cursor at the function's name;
+ * - press V to start the line selection;
+ * - press ]] to go to the "{";
+ * - type ":" followed by "!lineup-parameters".
+ *
+ * Note: the "{" is required in the selection, to detect that we are in a
+ * function declaration.
+ *
+ * You can easily map these steps with a keybinding (F8 in the example below).
+ * Note that I'm not a Vim expert, so there is maybe a better way to configure
+ * this stuff.
+ *
+ * function! LineupParameters()
+ * let l:winview = winsaveview()
+ * execute "normal {V]]:!lineup-parameters\<CR>"
+ * call winrestview(l:winview)
+ * endfunction
+ *
+ * autocmd Filetype c map <F8> :call LineupParameters()<CR>
+ */
+
+/* TODO support "..." vararg parameter. */
+
+#include <gio/gio.h>
+#include <gio/gunixinputstream.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+#include <unistd.h>
+
+#define USE_TABS FALSE
+
+typedef struct
+{
+ gchar *type;
+ guint nb_stars;
+ gchar *name;
+} ParameterInfo;
+
+static void
+parameter_info_free (ParameterInfo *param_info)
+{
+ g_free (param_info->type);
+ g_free (param_info->name);
+ g_slice_free (ParameterInfo, param_info);
+}
+
+static gboolean
+match_function_name (const gchar *line,
+ gchar **function_name,
+ gint *first_param_pos)
+{
+ static GRegex *regex = NULL;
+ GMatchInfo *match_info;
+ gint end_pos;
+ gboolean match = FALSE;
+
+ if (G_UNLIKELY (regex == NULL))
+ regex = g_regex_new ("^(\\w+) ?\\(", G_REGEX_OPTIMIZE, 0, NULL);
+
+ g_regex_match (regex, line, 0, &match_info);
+
+ if (g_match_info_matches (match_info) &&
+ g_match_info_fetch_pos (match_info, 1, NULL, &end_pos) &&
+ g_match_info_fetch_pos (match_info, 0, NULL, first_param_pos))
+ {
+ match = TRUE;
+
+ if (function_name != NULL)
+ *function_name = g_strndup (line, end_pos);
+ }
+
+ g_match_info_free (match_info);
+ return match;
+}
+
+static gboolean
+match_parameter (gchar *line,
+ ParameterInfo **info,
+ gboolean *is_last_parameter)
+{
+ static GRegex *regex = NULL;
+ GMatchInfo *match_info;
+ gint start_pos = 0;
+
+ if (G_UNLIKELY (regex == NULL))
+ regex = g_regex_new ("^\\s*(?<type>(const\\s+)?\\w+)\\s+(?<stars>\\**)\\s*(?<name>\\w+)\\s*(?<end>,|\\))\\s*$",
+ G_REGEX_OPTIMIZE,
+ 0,
+ NULL);
+
+ if (is_last_parameter != NULL)
+ *is_last_parameter = FALSE;
+
+ match_function_name (line, NULL, &start_pos);
+
+ g_regex_match (regex, line + start_pos, 0, &match_info);
+
+ if (!g_match_info_matches (match_info))
+ {
+ g_match_info_free (match_info);
+ return FALSE;
+ }
+
+ if (info != NULL)
+ {
+ gchar *stars;
+
+ *info = g_slice_new0 (ParameterInfo);
+
+ (*info)->type = g_match_info_fetch_named (match_info, "type");
+ (*info)->name = g_match_info_fetch_named (match_info, "name");
+ g_assert ((*info)->type != NULL);
+ g_assert ((*info)->name != NULL);
+
+ stars = g_match_info_fetch_named (match_info, "stars");
+ (*info)->nb_stars = strlen (stars);
+ g_free (stars);
+ }
+
+ if (is_last_parameter != NULL)
+ {
+ gchar *end = g_match_info_fetch_named (match_info, "end");
+ *is_last_parameter = g_str_equal (end, ")");
+ g_free (end);
+ }
+
+ g_match_info_free (match_info);
+ return TRUE;
+}
+
+static gboolean
+match_opening_curly_brace (const gchar *line)
+{
+ static GRegex *regex = NULL;
+
+ if (G_UNLIKELY (regex == NULL))
+ regex = g_regex_new ("^{\\s*$", G_REGEX_OPTIMIZE, 0, NULL);
+
+ return g_regex_match (regex, line, 0, NULL);
+}
+
+/* Returns the number of lines that take the function declaration.
+ * Returns 0 if not a function declaration. */
+static guint
+get_function_declaration_length (gchar **lines)
+{
+ guint nb_lines = 1;
+ gchar **cur_line = lines;
+
+ while (*cur_line != NULL)
+ {
+ gboolean match_param;
+ gboolean is_last_param;
+
+ match_param = match_parameter (*cur_line, NULL, &is_last_param);
+
+ if (is_last_param)
+ {
+ gchar *next_line = *(cur_line + 1);
+
+ if (next_line == NULL ||
+ !match_opening_curly_brace (next_line))
+ return 0;
+
+ return nb_lines;
+ }
+
+ if (!match_param)
+ return 0;
+
+ nb_lines++;
+ cur_line++;
+ }
+ /* should not be reachable - but silences a compiler warning */
+ return 0;
+}
+
+static GSList *
+get_list_parameter_infos (gchar **lines,
+ guint length)
+{
+ GSList *list = NULL;
+ gint i;
+
+ for (i = length - 1; i >= 0; i--)
+ {
+ ParameterInfo *info = NULL;
+
+ match_parameter (lines[i], &info, NULL);
+ g_assert (info != NULL);
+
+ list = g_slist_prepend (list, info);
+ }
+
+ return list;
+}
+
+static void
+compute_spacing (GSList *parameter_infos,
+ guint *max_type_length,
+ guint *max_stars_length)
+{
+ GSList *l;
+ *max_type_length = 0;
+ *max_stars_length = 0;
+
+ for (l = parameter_infos; l != NULL; l = l->next)
+ {
+ ParameterInfo *info = l->data;
+ guint type_length = strlen (info->type);
+
+ if (type_length > *max_type_length)
+ *max_type_length = type_length;
+
+ if (info->nb_stars > *max_stars_length)
+ *max_stars_length = info->nb_stars;
+ }
+}
+
+static void
+print_parameter (ParameterInfo *info,
+ guint max_type_length,
+ guint max_stars_length)
+{
+ gint type_length;
+ gint nb_spaces;
+ gchar *spaces;
+ gchar *stars;
+
+ g_print ("%s", info->type);
+
+ type_length = strlen (info->type);
+ nb_spaces = max_type_length - type_length;
+ g_assert (nb_spaces >= 0);
+
+ spaces = g_strnfill (nb_spaces, ' ');
+ g_print ("%s ", spaces);
+ g_free (spaces);
+
+ nb_spaces = max_stars_length - info->nb_stars;
+ g_assert (nb_spaces >= 0);
+ spaces = g_strnfill (nb_spaces, ' ');
+ g_print ("%s", spaces);
+ g_free (spaces);
+
+ stars = g_strnfill (info->nb_stars, '*');
+ g_print ("%s", stars);
+ g_free (stars);
+
+ g_print ("%s", info->name);
+}
+
+static void
+print_function_declaration (gchar **lines,
+ guint length)
+{
+ gchar **cur_line = lines;
+ gchar *function_name;
+ gint nb_spaces_to_parenthesis;
+ GSList *parameter_infos;
+ GSList *l;
+ guint max_type_length;
+ guint max_stars_length;
+ gchar *spaces;
+
+ if (!match_function_name (*cur_line, &function_name, NULL))
+ g_error ("The line doesn't match a function name.");
+
+ g_print ("%s (", function_name);
+
+ nb_spaces_to_parenthesis = strlen (function_name) + 2;
+
+ if (USE_TABS)
+ {
+ gchar *tabs = g_strnfill (nb_spaces_to_parenthesis / 8, '\t');
+ gchar *spaces_after_tabs = g_strnfill (nb_spaces_to_parenthesis % 8, ' ');
+
+ spaces = g_strdup_printf ("%s%s", tabs, spaces_after_tabs);
+
+ g_free (tabs);
+ g_free (spaces_after_tabs);
+ }
+ else
+ {
+ spaces = g_strnfill (nb_spaces_to_parenthesis, ' ');
+ }
+
+ parameter_infos = get_list_parameter_infos (lines, length);
+ compute_spacing (parameter_infos, &max_type_length, &max_stars_length);
+
+ for (l = parameter_infos; l != NULL; l = l->next)
+ {
+ ParameterInfo *info = l->data;
+
+ if (l != parameter_infos)
+ g_print ("%s", spaces);
+
+ print_parameter (info, max_type_length, max_stars_length);
+
+ if (l->next != NULL)
+ g_print (",\n");
+ }
+
+ g_print (")\n");
+
+ g_free (function_name);
+ g_free (spaces);
+ g_slist_free_full (parameter_infos, (GDestroyNotify)parameter_info_free);
+}
+
+static void
+parse_contents (gchar **lines)
+{
+ gchar **cur_line = lines;
+
+ /* Skip the empty last line, to avoid adding an extra \n. */
+ for (cur_line = lines; cur_line[0] != NULL && cur_line[1] != NULL; cur_line++)
+ {
+ guint length;
+
+ if (!match_function_name (*cur_line, NULL, NULL))
+ {
+ g_print ("%s\n", *cur_line);
+ continue;
+ }
+
+ length = get_function_declaration_length (cur_line);
+
+ if (length == 0)
+ {
+ g_print ("%s\n", *cur_line);
+ continue;
+ }
+
+ print_function_declaration (cur_line, length);
+
+ cur_line += length - 1;
+ }
+}
+
+static gchar *
+get_file_contents (gchar *arg)
+{
+ GFile *file;
+ gchar *path;
+ gchar *contents;
+ GError *error = NULL;
+
+ file = g_file_new_for_commandline_arg (arg);
+ path = g_file_get_path (file);
+ g_file_get_contents (path, &contents, NULL, &error);
+
+ if (error != NULL)
+ g_error ("Impossible to get file contents: %s", error->message);
+
+ g_object_unref (file);
+ g_free (path);
+ return contents;
+}
+
+static gchar *
+get_stdin_contents (void)
+{
+ GInputStream *stream;
+ GString *string;
+ GError *error = NULL;
+
+ stream = g_unix_input_stream_new (STDIN_FILENO, FALSE);
+ string = g_string_new ("");
+
+ while (TRUE)
+ {
+ gchar buffer[4097] = { '\0' };
+ gssize nb_bytes_read = g_input_stream_read (stream, buffer, 4096, NULL, &error);
+
+ if (nb_bytes_read == 0)
+ break;
+
+ if (error != NULL)
+ g_error ("Impossible to read stdin: %s", error->message);
+
+ g_string_append (string, buffer);
+ }
+
+ g_input_stream_close (stream, NULL, NULL);
+ g_object_unref (stream);
+
+ return g_string_free (string, FALSE);
+}
+
+gint
+main (gint argc,
+ gchar *argv[])
+{
+ gchar *contents;
+ gchar **contents_lines;
+
+ setlocale (LC_ALL, "");
+
+ if (argc > 2)
+ {
+ g_printerr ("Usage: %s [file]\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ if (argc == 2)
+ contents = get_file_contents (argv[1]);
+ else
+ contents = get_stdin_contents ();
+
+ contents_lines = g_strsplit (contents, "\n", 0);
+ g_free (contents);
+
+ parse_contents (contents_lines);
+
+ return EXIT_SUCCESS;
+}
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 0000000..9a4e2ff
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,142 @@
+icondir = join_paths('icons', 'hicolor', 'scalable', 'apps')
+install_data(
+ join_paths(icondir, 'org.gnome.Nautilus' + profile + '.svg'),
+ install_dir: join_paths(datadir, icondir),
+ rename: '@0@.svg'.format(application_id)
+)
+
+icondir = join_paths('icons', 'hicolor', 'symbolic', 'apps')
+
+install_data(
+ join_paths(icondir, 'org.gnome.Nautilus-symbolic.svg'),
+ install_dir: join_paths(datadir, icondir),
+ rename: '@0@-symbolic.svg'.format(application_id)
+)
+
+po_dir = join_paths(meson.source_root(), 'po')
+
+line_up_parameters = executable(
+ 'lineup-parameters',
+ 'lineup-parameters.c',
+ build_by_default: false,
+ dependencies: [
+ gio,
+ gio_unix,
+ ]
+)
+
+desktop_conf = configuration_data()
+
+desktop_conf.set('icon', application_id)
+
+desktop = i18n.merge_file(
+ 'desktop',
+ input: configure_file(
+ input: files('org.gnome.Nautilus.desktop.in.in'),
+ output: 'org.gnome.Nautilus.desktop.in',
+ configuration: desktop_conf
+ ),
+ output: '@0@.desktop'.format(application_id),
+ install: true,
+ install_dir: desktopdir,
+ po_dir: po_dir,
+ type: 'desktop'
+)
+
+desktop_autorun_software = i18n.merge_file(
+ 'desktop-autorun-software',
+ input: 'nautilus-autorun-software.desktop.in',
+ output: 'nautilus-autorun-software.desktop',
+ install: true,
+ install_dir: desktopdir,
+ po_dir: po_dir,
+ type: 'desktop'
+)
+
+appdata_conf = configuration_data()
+
+appdata_conf.set('appid', application_id)
+
+appdata = i18n.merge_file(
+ 'appdata',
+ input: configure_file(
+ input: files('org.gnome.Nautilus.appdata.xml.in.in'),
+ output: 'org.gnome.Nautilus.appdata.xml.in',
+ configuration: appdata_conf
+ ),
+ output: '@0@.appdata.xml'.format(application_id),
+ install: true,
+ install_dir: join_paths(datadir, 'metainfo'),
+ po_dir: po_dir
+)
+
+service_conf = configuration_data()
+service_conf.set('appid', application_id)
+service_conf.set('bindir', join_paths(prefix, bindir))
+
+configure_file(
+ input: 'org.gnome.Nautilus.service.in',
+ output: '@0@.service'.format(application_id),
+ configuration: service_conf,
+ install_dir: servicedir
+)
+
+configure_file(
+ input: 'org.freedesktop.FileManager1.service.in',
+ output: 'org.freedesktop.FileManager1.service',
+ configuration: service_conf,
+ install_dir: servicedir
+)
+
+search_provider_conf = configuration_data()
+
+search_provider_conf.set('appid', application_id)
+search_provider_conf.set('profile', profile)
+
+configure_file(
+ configuration: search_provider_conf,
+ input: files('org.gnome.Nautilus.search-provider.ini.in'),
+ install_dir: join_paths(datadir, 'gnome-shell', 'search-providers'),
+ output: '@0@.search-provider.ini'.format(application_id)
+)
+
+gnome.compile_schemas(
+ build_by_default: true,
+ depend_files: 'org.gnome.nautilus.gschema.xml'
+)
+
+install_data(
+ 'org.gnome.nautilus.gschema.xml',
+ install_dir: join_paths(datadir, 'glib-2.0', 'schemas')
+)
+
+desktop_file_validate = find_program('desktop-file-validate', required: false)
+if desktop_file_validate.found()
+ test(
+ 'validate-desktop',
+ desktop_file_validate,
+ args: [
+ desktop.full_path()
+ ]
+ )
+ test(
+ 'validate-desktop-autorun-software',
+ desktop_file_validate,
+ args: [
+ desktop_autorun_software.full_path()
+ ]
+ )
+endif
+
+appstream_util = find_program('appstream-util', required: false)
+if appstream_util.found()
+ test(
+ 'validate-appdata', appstream_util,
+ args: [
+ 'validate-relax', '--nonet', appdata.full_path()
+ ]
+ )
+endif
+
+subdir('ontology')
+subdir('tracker')
diff --git a/data/nautilus-autorun-software.desktop.in b/data/nautilus-autorun-software.desktop.in
new file mode 100644
index 0000000..a42c94e
--- /dev/null
+++ b/data/nautilus-autorun-software.desktop.in
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Name=Run Software
+TryExec=nautilus-autorun-software
+Exec=nautilus-autorun-software %u
+# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+Icon=application-x-executable
+NoDisplay=true
+Terminal=false
+StartupNotify=true
+Type=Application
+MimeType=x-content/unix-software;
diff --git a/data/ontology/meson.build b/data/ontology/meson.build
new file mode 100644
index 0000000..cb80e86
--- /dev/null
+++ b/data/ontology/meson.build
@@ -0,0 +1,8 @@
+ontology_data = files(
+ 'nautilus.description',
+ 'nautilus.ontology',
+)
+
+install_data(ontology_data,
+ install_dir: join_paths(datadir, 'nautilus', 'ontology')
+)
diff --git a/data/ontology/nautilus.description b/data/ontology/nautilus.description
new file mode 100644
index 0000000..42f4102
--- /dev/null
+++ b/data/ontology/nautilus.description
@@ -0,0 +1,9 @@
+@prefix dsc: <http://tracker.api.gnome.org/ontology/v3/dsc#> .
+
+<virtual-ontology-uri:nautilus.ontology> a dsc:Ontology ;
+ dsc:title "Nautilus ontology" ;
+ dsc:description "Tracker database schema for Nautilus private data." ;
+
+ dsc:localPrefix "nautilus" ;
+ dsc:baseUrl "https://gitlab.gnome.org/GNOME/nautilus#" ;
+ dsc:relativePath "./nautilus.ontology" ;
diff --git a/data/ontology/nautilus.ontology b/data/ontology/nautilus.ontology
new file mode 100644
index 0000000..a3706bc
--- /dev/null
+++ b/data/ontology/nautilus.ontology
@@ -0,0 +1,20 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+@prefix nrl: <http://tracker.api.gnome.org/ontology/v3/nrl#> .
+@prefix nautilus: <https://gitlab.gnome.org/GNOME/nautilus#> .
+
+nautilus: a nrl:Namespace, nrl:Ontology ;
+ nrl:prefix "nautilus" ;
+ nrl:lastModified "2020-05-01T10:00:00Z" .
+
+nautilus:File a rdfs:Class ;
+ rdfs:comment "Represents a file on disk by its URL. Equivalent to http://tracker.api.gnome.org/ontology/v3/nfo#FileDataObject" ;
+ rdfs:subClassOf rdfs:Resource ;
+ nrl:notify true .
+
+nautilus:starred a rdf:Property ;
+ rdfs:comment "Marks files that are starred in Nautilus." ;
+ rdfs:domain nautilus:File ;
+ rdfs:range xsd:boolean ;
+ nrl:maxCardinality 1 .
diff --git a/data/org.freedesktop.FileManager1.service.in b/data/org.freedesktop.FileManager1.service.in
new file mode 100644
index 0000000..6a0bbe0
--- /dev/null
+++ b/data/org.freedesktop.FileManager1.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.freedesktop.FileManager1
+Exec=@bindir@/nautilus --gapplication-service
diff --git a/data/org.gnome.Nautilus.appdata.xml.in.in b/data/org.gnome.Nautilus.appdata.xml.in.in
new file mode 100644
index 0000000..aa8f508
--- /dev/null
+++ b/data/org.gnome.Nautilus.appdata.xml.in.in
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component type="desktop-application">
+ <id>@appid@.desktop</id>
+ <metadata_license>CC0-1.0</metadata_license>
+ <name>Files</name>
+ <summary>Access and organize files</summary>
+ <description>
+ <p>
+ Files, also known as Nautilus, is the default file manager of the GNOME desktop.
+ It provides a simple and integrated way of managing your files and browsing your file system.
+ </p>
+ <p>
+ Nautilus supports all the basic functions of a file manager and more.
+ It can search and manage your files and folders, both locally and on a network,
+ read and write data to and from removable media, run scripts, and launch applications.
+ It has three views: Icon Grid, Icon List, and Tree List.
+ Its functions can be extended with plugins and scripts.
+ </p>
+ </description>
+ <categories>
+ <category>System</category>
+ </categories>
+ <url type="bugtracker">https://gitlab.gnome.org/GNOME/nautilus/issues</url>
+ <url type="donation">https://www.gnome.org/support-gnome/</url>
+ <url type="help">https://wiki.gnome.org/action/show/Apps/Nautilus</url>
+ <url type="homepage">https://wiki.gnome.org/action/show/Apps/Nautilus</url>
+ <url type="translate">https://wiki.gnome.org/TranslationProject</url>
+ <launchable type="desktop-id">@appid@.desktop</launchable>
+ <releases>
+ <release version="3.38.2" date="2020-11-20" />
+ </releases>
+ <project_group>GNOME</project_group>
+ <project_license>GPL-2.0+</project_license>
+ <developer_name>The GNOME Project</developer_name>
+ <screenshots>
+ <screenshot type="default">
+ <image>https://static.gnome.org/appdata/nautilus/nautilus-201901141.png</image>
+ <caption>Tile View</caption>
+ </screenshot>
+ <screenshot>
+ <image>https://static.gnome.org/appdata/nautilus/nautilus-201901142.png</image>
+ <caption>List View</caption>
+ </screenshot>
+ <screenshot>
+ <image>https://static.gnome.org/appdata/nautilus/nautilus-201901143.png</image>
+ <caption>Search</caption>
+ </screenshot>
+ <screenshot>
+ <image>https://static.gnome.org/appdata/nautilus/nautilus-201901144.png</image>
+ <caption>Other Locations</caption>
+ </screenshot>
+ </screenshots>
+ <update_contact>nautilus-list@gnome.org</update_contact>
+ <translation type="gettext">nautilus</translation>
+ <kudos>
+ <kudo>HiDpiIcon</kudo>
+ <kudo>ModernToolkit</kudo>
+ <kudo>Notifications</kudo>
+ <kudo>SearchProvider</kudo>
+ </kudos>
+</component>
+
diff --git a/data/org.gnome.Nautilus.desktop.in.in b/data/org.gnome.Nautilus.desktop.in.in
new file mode 100644
index 0000000..42e0c27
--- /dev/null
+++ b/data/org.gnome.Nautilus.desktop.in.in
@@ -0,0 +1,20 @@
+[Desktop Entry]
+Name=Files
+Comment=Access and organize files
+# Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
+Keywords=folder;manager;explore;disk;filesystem;nautilus;
+Exec=nautilus --new-window %U
+# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+Icon=@icon@
+Terminal=false
+Type=Application
+DBusActivatable=true
+StartupNotify=true
+Categories=GNOME;GTK;Utility;Core;FileManager;
+MimeType=inode/directory;application/x-7z-compressed;application/x-7z-compressed-tar;application/x-bzip;application/x-bzip-compressed-tar;application/x-compress;application/x-compressed-tar;application/x-cpio;application/x-gzip;application/x-lha;application/x-lzip;application/x-lzip-compressed-tar;application/x-lzma;application/x-lzma-compressed-tar;application/x-tar;application/x-tarz;application/x-xar;application/x-xz;application/x-xz-compressed-tar;application/zip;application/gzip;application/bzip2;
+X-GNOME-UsesNotifications=true
+Actions=new-window;
+
+[Desktop Action new-window]
+Name=New Window
+Exec=nautilus --new-window
diff --git a/data/org.gnome.Nautilus.search-provider.ini.in b/data/org.gnome.Nautilus.search-provider.ini.in
new file mode 100644
index 0000000..0ef7f79
--- /dev/null
+++ b/data/org.gnome.Nautilus.search-provider.ini.in
@@ -0,0 +1,5 @@
+[Shell Search Provider]
+DesktopId=@appid@.desktop
+BusName=@appid@
+ObjectPath=/org/gnome/Nautilus@profile@/SearchProvider
+Version=2
diff --git a/data/org.gnome.Nautilus.service.in b/data/org.gnome.Nautilus.service.in
new file mode 100644
index 0000000..55505ef
--- /dev/null
+++ b/data/org.gnome.Nautilus.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=@appid@
+Exec=@bindir@/nautilus --gapplication-service
diff --git a/data/org.gnome.nautilus.gschema.xml b/data/org.gnome.nautilus.gschema.xml
new file mode 100644
index 0000000..941812e
--- /dev/null
+++ b/data/org.gnome.nautilus.gschema.xml
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist>
+ <enum id="org.gnome.nautilus.SpeedTradeoff">
+ <value value="0" nick="always"/>
+ <value value="1" nick="local-only"/>
+ <value value="2" nick="never"/>
+ </enum>
+
+ <enum id="org.gnome.nautilus.ClickPolicy">
+ <value value="0" nick="single"/>
+ <value value="1" nick="double"/>
+ </enum>
+
+ <enum id="org.gnome.nautilus.ActivationChoice">
+ <value value="0" nick="launch"/>
+ <value value="1" nick="display"/>
+ <value value="2" nick="ask"/>
+ </enum>
+
+ <enum id="org.gnome.nautilus.FolderView">
+ <value value="0" nick="icon-view"/>
+ <value value="1" nick="list-view"/>
+ </enum>
+
+ <enum id="org.gnome.nautilus.SortOrder">
+ <!--
+ When touching this, make sure to keep the values in sync with the
+ #NautilusFileSortType enum in the `src/nautilus-file.h` code header file.
+ -->
+ <value value="0" nick="name"/>
+ <value value="1" nick="size"/>
+ <value value="2" nick="type"/>
+ <value value="3" nick="mtime"/>
+ <value value="4" nick="atime"/>
+ <value value="5" nick="starred"/>
+ </enum>
+
+ <enum id="org.gnome.nautilus.CanvasZoomLevel">
+ <value value="0" nick="small"/>
+ <value value="1" nick="standard"/>
+ <value value="2" nick="large"/>
+ <value value="3" nick="larger"/>
+ <value value="4" nick="largest"/>
+ </enum>
+
+ <enum id="org.gnome.nautilus.ListZoomLevel">
+ <value value="0" nick="small"/>
+ <value value="1" nick="standard"/>
+ <value value="2" nick="large"/>
+ <value value="3" nick="larger"/>
+ </enum>
+
+ <enum id="org.gnome.nautilus.TabPosition">
+ <value value="0" nick="after-current-tab"/>
+ <value value="1" nick="end"/>
+ </enum>
+
+ <enum id="org.gnome.nautilus.SearchFilterTimeType">
+ <value value="0" nick="last_modified"/>
+ <value value="1" nick="last_used"/>
+ </enum>
+
+ <enum id="org.gnome.nautilus.CompressionFormat">
+ <value value="0" nick="zip"/>
+ <value value="1" nick="tar.xz"/>
+ <value value="2" nick="7z"/>
+ </enum>
+
+ <schema path="/org/gnome/nautilus/" id="org.gnome.nautilus" gettext-domain="nautilus">
+ <child schema="org.gnome.nautilus.preferences" name="preferences"/>
+ <child schema="org.gnome.nautilus.compression" name="compression"/>
+ <child schema="org.gnome.nautilus.icon-view" name="icon-view"/>
+ <child schema="org.gnome.nautilus.list-view" name="list-view"/>
+ <child schema="org.gnome.nautilus.window-state" name="window-state"/>
+ </schema>
+
+ <schema path="/org/gnome/nautilus/preferences/" id="org.gnome.nautilus.preferences" gettext-domain="nautilus">
+ <key name="tabs-open-position" enum="org.gnome.nautilus.TabPosition">
+ <aliases>
+ <alias value='after_current_tab' target='after-current-tab'/>
+ </aliases>
+ <default>'after-current-tab'</default>
+ <summary>Where to position newly open tabs in browser windows</summary>
+ <description>If set to “after-current-tab”, then new tabs are inserted after the current tab. If set to “end”, then new tabs are appended to the end of the tab list.</description>
+ </key>
+ <key type="b" name="always-use-location-entry">
+ <default>false</default>
+ <summary>Always use the location entry, instead of the pathbar</summary>
+ <description>If set to true, then Nautilus browser windows will always use a textual input entry for the location toolbar, instead of the pathbar.</description>
+ </key>
+ <key name="recursive-search" enum="org.gnome.nautilus.SpeedTradeoff">
+ <default>'local-only'</default>
+ <summary>Where to perform recursive search</summary>
+ <description>In which locations Nautilus should search on subfolders. Available values are “local-only”, “always”, “never”.</description>
+ </key>
+ <key name="search-filter-time-type" enum="org.gnome.nautilus.SearchFilterTimeType">
+ <default>'last_modified'</default>
+ <summary>Filter the search dates using either last used or last modified</summary>
+ <description>Filter the search dates using either last used or last modified.</description>
+ </key>
+ <key type="b" name="show-delete-permanently">
+ <default>false</default>
+ <summary>Whether to show a context menu item to delete permanently</summary>
+ <description>If set to true, then Nautilus will show a delete permanently context menu item to bypass the Trash.</description>
+ </key>
+ <key type="b" name="show-create-link">
+ <default>false</default>
+ <summary>Whether to show context menu items to create links from copied or selected files</summary>
+ <description>If set to true, then Nautilus will show context menu items to create links from the copied or selected files.</description>
+ </key>
+ <key type="b" name="confirm-trash">
+ <default>true</default>
+ <summary>Whether to ask for confirmation when deleting files, or emptying the Trash</summary>
+ <description>If set to true, then Nautilus will ask for confirmation when you attempt to delete files, or empty the Trash.</description>
+ </key>
+ <key name="show-directory-item-counts" enum="org.gnome.nautilus.SpeedTradeoff">
+ <aliases><alias value='local_only' target='local-only'/></aliases>
+ <default>'local-only'</default>
+ <summary>When to show number of items in a folder</summary>
+ <description>Speed tradeoff for when to show the number of items in a folder. If set to “always” then always show item counts, even if the folder is on a remote server. If set to “local-only” then only show counts for local file systems. If set to “never” then never bother to compute item counts.</description>
+ </key>
+ <key name="click-policy" enum="org.gnome.nautilus.ClickPolicy">
+ <default>'double'</default>
+ <summary>Type of click used to launch/open files</summary>
+ <description>Possible values are “single” to launch files on a single click, or “double” to launch them on a double click.</description>
+ </key>
+ <key name="executable-text-activation" enum="org.gnome.nautilus.ActivationChoice">
+ <default>'display'</default>
+ <summary>What to do with executable text files when activated</summary>
+ <description>What to do with executable text files when they are activated (single or double clicked). Possible values are “launch” to launch them as programs, “ask” to ask what to do via a dialog, and “display” to display them as text files.</description>
+ </key>
+ <key type="b" name="install-mime-activation">
+ <default>true</default>
+ <summary>Show the package installer for unknown MIME types</summary>
+ <description>Whether to show the user a package installer dialog in case an unknown MIME type is opened, in order to search for an application to handle it.</description>
+ </key>
+ <key type="b" name="mouse-use-extra-buttons">
+ <default>true</default>
+ <summary>Use extra mouse button events in Nautilus’ browser window</summary>
+ <description>For users with mice that have “Forward” and “Back” buttons, this key will determine if any action is taken inside of Nautilus when either is pressed.</description>
+ </key>
+ <key type="i" name="mouse-forward-button">
+ <default>9</default>
+ <summary>Mouse button to activate the “Forward” command in browser window</summary>
+ <description>For users with mice that have buttons for “Forward” and “Back”, this key will set which button activates the “Forward” command in a browser window. Possible values range between 6 and 14.</description>
+ </key>
+ <key type="i" name="mouse-back-button">
+ <default>8</default>
+ <summary>Mouse button to activate the “Back” command in browser window</summary>
+ <description>For users with mice that have buttons for “Forward” and “Back”, this key will set which button activates the “Back” command in a browser window. Possible values range between 6 and 14.</description>
+ </key>
+ <key name="show-image-thumbnails" enum="org.gnome.nautilus.SpeedTradeoff">
+ <aliases><alias value='local_only' target='local-only'/></aliases>
+ <default>'local-only'</default>
+ <summary>When to show thumbnails of files</summary>
+ <description>Speed trade-off for when to show a file as a thumbnail. If set to “always” then always thumbnail, even if the folder is on a remote server. If set to “local-only” then only show thumbnails for local file systems. If set to “never” then never bother to thumbnail files, just use a generic icon. Despite what the name may suggest, this applies to any previewable file type.</description>
+ </key>
+ <key type="t" name="thumbnail-limit">
+ <range max="5000"/>
+ <default>10</default>
+ <summary>Maximum image size for thumbnailing</summary>
+ <description>Images over this size (in megabytes) won’t be thumbnailed. The purpose of this setting is to avoid thumbnailing large images that may take a long time to load or use lots of memory.</description>
+ </key>
+ <key name="default-sort-order" enum="org.gnome.nautilus.SortOrder">
+ <aliases>
+ <alias value='modification_date' target='mtime'/>
+ </aliases>
+ <default>'name'</default>
+ <summary>Default sort order</summary>
+ <description>The default sort-order for items in the icon view. Possible values are “name”, “size”, “type”, “mtime”, “atime” and “starred”.</description>
+ </key>
+ <key type="b" name="default-sort-in-reverse-order">
+ <default>false</default>
+ <summary>Reverse sort order in new windows</summary>
+ <description>If true, files in new windows will be sorted in reverse order. I.e., if sorted by name, then instead of sorting the files from “a” to “z”, they will be sorted from “z” to “a”; if sorted by size, instead of being incrementally they will be sorted decrementally.</description>
+ </key>
+ <key name="default-folder-viewer" enum="org.gnome.nautilus.FolderView">
+ <aliases>
+ <alias value='icon_view' target='icon-view'/>
+ <alias value='compact_view' target='icon-view'/>
+ <alias value='compact-view' target='icon-view'/>
+ <alias value='list_view' target='list-view'/>
+ </aliases>
+ <default>'icon-view'</default>
+ <summary>Default folder viewer</summary>
+ <description>When a folder is visited this viewer is used unless you have selected another view for that particular folder. Possible values are “list-view”, and “icon-view”.</description>
+ </key>
+ <key type="b" name="show-hidden-files">
+ <default>false</default>
+ <summary>Whether to show hidden files</summary>
+ <description>This key is deprecated and ignored. The “show-hidden” key from “org.gtk.Settings.FileChooser” is now used instead.</description>
+ </key>
+ <key name="search-view" enum="org.gnome.nautilus.FolderView">
+ <default>'list-view'</default>
+ <summary>What viewer should be used when searching</summary>
+ <description>When searching Nautilus will switch to the type of view in this setting.</description>
+ </key>
+ <key type="b" name="open-folder-on-dnd-hover">
+ <default>true</default>
+ <summary>Whether to open the hovered folder after a timeout when drag and drop operation</summary>
+ <description>If this is set to true, when performing a drag and drop operation the hovered folder will open automatically after a timeout.</description>
+ </key>
+ <key type="b" name="use-experimental-views">
+ <default>false</default>
+ <summary>Enable new experimental views</summary>
+ <description>Whether to use the new experimental views using the latest GTK+ widgets to help giving feedback and shaping their future.</description>
+ </key>
+ <key type="b" name="fts-enabled">
+ <default>true</default>
+ <summary>Whether to have full text search enabled by default when opening a new window/tab</summary>
+ <description>If set to true, then Nautilus will also match the file contents besides the name. This toggles the default active state, which can still be overridden in the search popover</description>
+ </key>
+ </schema>
+
+ <schema path="/org/gnome/nautilus/compression/" id="org.gnome.nautilus.compression" gettext-domain="nautilus">
+ <key name="default-compression-format" enum="org.gnome.nautilus.CompressionFormat">
+ <default>'zip'</default>
+ <summary>Default format for compressing files</summary>
+ <description>The format that will be selected when compressing files.</description>
+ </key>
+ </schema>
+
+ <schema path="/org/gnome/nautilus/icon-view/" id="org.gnome.nautilus.icon-view" gettext-domain="nautilus">
+ <key type="as" name="captions">
+ <default>[ 'none', 'none', 'none' ]</default>
+ <summary>List of possible captions on icons</summary>
+ <description>A list of captions below an icon in the icon view. The actual number of captions shown depends on the zoom level. Some possible values are: “size”, “type”, “date_modified”, “owner”, “group”, “permissions”, and “mime_type”.</description>
+ </key>
+ <key name="default-zoom-level" enum="org.gnome.nautilus.CanvasZoomLevel">
+ <default>'large'</default>
+ <summary>Default icon view zoom level</summary>
+ </key>
+ <key type="as" name="text-ellipsis-limit">
+ <default>[ '3' ]</default>
+ <summary>Text Ellipsis Limit</summary>
+ <description>A string specifying how parts of overlong file names should be replaced by ellipses, depending on the zoom level. Each of the list entries is of the form “Zoom Level:Integer”. For each specified zoom level, if the given integer is larger than 0, the file name will not exceed the given number of lines. If the integer is 0 or smaller, no limit is imposed on the specified zoom level. A default entry of the form “Integer” without any specified zoom level is also allowed. It defines the maximum number of lines for all other zoom levels. Examples: 0 — always display overlong file names; 3 — shorten file names if they exceed three lines; smallest:5,smaller:4,0 — shorten file names if they exceed five lines for zoom level “smallest”. Shorten file names if they exceed four lines for zoom level “smaller”. Do not shorten file names for other zoom levels. Available zoom levels: small, standard, large.</description>
+ </key>
+ </schema>
+
+ <schema path="/org/gnome/nautilus/list-view/" id="org.gnome.nautilus.list-view" gettext-domain="nautilus">
+ <key name="default-zoom-level" enum="org.gnome.nautilus.ListZoomLevel">
+ <default>'standard'</default>
+ <summary>Default list view zoom level</summary>
+ </key>
+ <key type="as" name="default-visible-columns">
+ <default>[ 'name', 'size', 'date_modified', 'starred' ]</default>
+ <summary>Columns visible in list view</summary>
+ </key>
+ <key type="as" name="default-column-order">
+ <default>[ 'name', 'size', 'type', 'owner', 'group', 'permissions', 'mime_type', 'where', 'date_modified', 'date_modified_with_time', 'date_accessed', 'recency', 'starred' ]</default>
+ <summary>Column order in list view</summary>
+ </key>
+ <key type="b" name="use-tree-view">
+ <default>false</default>
+ <summary>Use tree view</summary>
+ <description>Whether a tree should be used for list view navigation instead of a flat list.</description>
+ </key>
+ </schema>
+
+ <schema path="/org/gnome/nautilus/window-state/" id="org.gnome.nautilus.window-state" gettext-domain="nautilus">
+ <key type="(ii)" name="initial-size">
+ <default>(890, 550)</default>
+ <summary>Initial size of the window</summary>
+ <description>A tuple containing the initial width and height of the application window.</description>
+ </key>
+ <key type="b" name="maximized">
+ <default>false</default>
+ <summary>Whether the navigation window should be maximized</summary>
+ <description>Whether the navigation window should be maximized by default.</description>
+ </key>
+ <key type="i" name="sidebar-width">
+ <default>188</default>
+ <summary>Width of the side pane</summary>
+ <description>The default width of the side pane in new windows.</description>
+ </key>
+ <key type="b" name="start-with-location-bar">
+ <default>true</default>
+ <summary>Show location bar in new windows</summary>
+ <description>If set to true, newly opened windows will have the location bar visible.</description>
+ </key>
+ <key type="b" name="start-with-sidebar">
+ <default>true</default>
+ <summary>Show side pane in new windows</summary>
+ <description>If set to true, newly opened windows will have the side pane visible.</description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/data/run-uncrustify.sh b/data/run-uncrustify.sh
new file mode 100755
index 0000000..78ac8d6
--- /dev/null
+++ b/data/run-uncrustify.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+DATA=$(dirname "$BASH_SOURCE")
+UNCRUSTIFY=$(command -v uncrustify)
+
+if [ -z "$UNCRUSTIFY" ];
+then
+ echo "Uncrustify is not installed on your system."
+ exit 1
+fi
+
+if [ ! -x "$DATA/lineup-parameters" ];
+then
+ echo "Script lineup-parameters does not exists here in (source directory)/data, probably because Nautilus was built in a different directory than the source directory.
+Copy the program in the (build directory)/data/lineup-parameters here in (source directory)/data and run again run-uncrustify.sh."
+ exit 1
+fi
+
+for DIR in "$DATA/../"{src,test,libnautilus-extension,eel,extensions}
+do
+ for FILE in $(find "$DIR" -name "*.c" -not -path "*/gtk/*" -not -path "*/animation/*" -not -path "*/audio-video-properties/*")
+ do
+ # Aligning prototypes is not working yet, so avoid headers
+ "$UNCRUSTIFY" -c "$DATA/uncrustify.cfg" --no-backup "$FILE"
+ "$DATA/lineup-parameters" "$FILE" > "$FILE.temp" && mv "$FILE.temp" "$FILE"
+ done
+done
diff --git a/data/shell-search-provider-dbus-interfaces.xml b/data/shell-search-provider-dbus-interfaces.xml
new file mode 100644
index 0000000..f6840e2
--- /dev/null
+++ b/data/shell-search-provider-dbus-interfaces.xml
@@ -0,0 +1,44 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+
+<!--
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General
+ Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
+-->
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+ <interface name='org.gnome.Shell.SearchProvider2'>
+ <method name='GetInitialResultSet'>
+ <arg type='as' name='Terms' direction='in' />
+ <arg type='as' name='Results' direction='out' />
+ </method>
+ <method name = 'GetSubsearchResultSet'>
+ <arg type='as' name='PreviousResults' direction='in' />
+ <arg type='as' name='Terms' direction='in' />
+ <arg type='as' name='Results' direction='out' />
+ </method>
+ <method name = 'GetResultMetas'>
+ <arg type='as' name='Results' direction='in' />
+ <arg type='aa{sv}' name='Metas' direction='out' />
+ </method>
+ <method name = 'ActivateResult'>
+ <arg type='s' name='Result' direction='in' />
+ <arg type='as' name='Terms' direction='in' />
+ <arg type='u' name='Timestamp' direction='in' />
+ </method>
+ <method name = 'LaunchSearch'>
+ <arg type='as' name='Terms' direction='in' />
+ <arg type='u' name='Timestamp' direction='in' />
+ </method>
+ </interface>
+</node>
diff --git a/data/tracker/meson.build b/data/tracker/meson.build
new file mode 100644
index 0000000..5320af1
--- /dev/null
+++ b/data/tracker/meson.build
@@ -0,0 +1,31 @@
+# Files needed for running Tracker inside the Flatpak sandbox, for systems
+# which don't have a suitable version of Tracker in the host OS.
+#
+# We must export the .service files from the sandbox so they work on the
+# session bus. This means the Tracker domain name must correspond with the
+# application ID.
+
+domain_ontologies_dir = get_option('datadir') / 'tracker3' / 'domain-ontologies'
+dbus_services_dir = get_option('datadir') / 'dbus-1' / 'services'
+
+tracker_domain_config = configuration_data()
+tracker_domain_config.set('application_id', application_id)
+tracker_domain_config.set('domain_rule', get_option('prefix') / domain_ontologies_dir / application_id + '.domain.rule')
+
+configure_file(
+ input: 'org.gnome.Nautilus.domain.rule.in',
+ output: application_id + '.domain.rule',
+ configuration: tracker_domain_config,
+ install_dir: domain_ontologies_dir)
+
+configure_file(
+ input: 'org.gnome.Nautilus.Tracker3.Miner.Extract.service.in',
+ output: application_id + '.Tracker3.Miner.Extract.service',
+ configuration: tracker_domain_config,
+ install_dir: dbus_services_dir)
+
+configure_file(
+ input: 'org.gnome.Nautilus.Tracker3.Miner.Files.service.in',
+ output: application_id + '.Tracker3.Miner.Files.service',
+ configuration: tracker_domain_config,
+ install_dir: dbus_services_dir)
diff --git a/data/tracker/org.gnome.Nautilus.Tracker3.Miner.Extract.service.in b/data/tracker/org.gnome.Nautilus.Tracker3.Miner.Extract.service.in
new file mode 100644
index 0000000..eb7a87a
--- /dev/null
+++ b/data/tracker/org.gnome.Nautilus.Tracker3.Miner.Extract.service.in
@@ -0,0 +1,7 @@
+[D-BUS Service]
+Name=@application_id@.Tracker3.Miner.Extract
+Exec=/app/libexec/tracker-extract-3 --domain-ontology @domain_rule@
+
+# Miner details needed for tracker-control
+Path=/org/freedesktop/Tracker3/Miner/Extract
+NameSuffix=Miner.Files
diff --git a/data/tracker/org.gnome.Nautilus.Tracker3.Miner.Files.service.in b/data/tracker/org.gnome.Nautilus.Tracker3.Miner.Files.service.in
new file mode 100644
index 0000000..4fa7371
--- /dev/null
+++ b/data/tracker/org.gnome.Nautilus.Tracker3.Miner.Files.service.in
@@ -0,0 +1,7 @@
+[D-BUS Service]
+Name=@application_id@.Tracker3.Miner.Files
+Exec=/app/libexec/tracker-miner-fs-3 --domain-ontology @domain_rule@ --initial-sleep 0
+
+# Miner details needed for tracker-control
+Path=/org/freedesktop/Tracker3/Miner/Files
+NameSuffix=Miner.Files
diff --git a/data/tracker/org.gnome.Nautilus.domain.rule.in b/data/tracker/org.gnome.Nautilus.domain.rule.in
new file mode 100644
index 0000000..ec0808e
--- /dev/null
+++ b/data/tracker/org.gnome.Nautilus.domain.rule.in
@@ -0,0 +1,21 @@
+# This defines a private Tracker domain for Nautilus.
+#
+# It's used to run the Tracker indexer inside a Flatpak sandbox, when Nautilus
+# is running on a host that doesn't have a suitable version of Tracker
+# installed.
+
+[DomainOntology]
+# Location for the Tracker database
+CacheLocation=$XDG_CACHE_HOME/nautilus/miner/files
+
+# Name of the ontology to use, must be one located in
+# $(sharedir)/tracker/ontologies
+OntologyName=nepomuk
+
+# DBus name for the owner (not optional). Tracker will use
+# the domain as the prefix of the DBus name for all the
+# services related to this domain ontology.
+Domain=@application_id@
+
+# List of miners we expect to run in this domain.
+Miners=Miner.Files;Miner.Extract
diff --git a/data/uncrustify.cfg b/data/uncrustify.cfg
new file mode 100644
index 0000000..3883681
--- /dev/null
+++ b/data/uncrustify.cfg
@@ -0,0 +1,135 @@
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Allman style
+#
+
+# indent
+indent_ternary_operator = 1
+
+# indent using tabs
+output_tab_size = 4
+indent_columns = output_tab_size
+indent_with_tabs = 0
+
+# indent case
+indent_switch_case = indent_columns
+indent_case_brace = 0
+
+# newlines
+newlines = lf
+nl_after_semicolon = true
+nl_start_of_file = remove
+nl_end_of_file = force
+nl_end_of_file_min = 1
+
+# spaces
+sp_return_paren = force # "return (1);" vs "return(1);"
+sp_sizeof_paren = force # "sizeof (int)" vs "sizeof(int)"
+sp_assign = force
+sp_arith = force
+sp_bool = force
+sp_compare = force
+sp_after_comma = force
+sp_case_label = force
+sp_else_brace = force
+sp_brace_else = force
+sp_func_call_paren = force # "foo (" vs "foo("
+sp_func_proto_paren = force # "int foo ();" vs "int foo();"
+sp_before_ptr_star = force
+sp_after_ptr_star_qualifier = force # "const char * const" vs. "const char *const"
+sp_after_ptr_star = remove
+sp_between_ptr_star = remove # "**var" vs "* *var"
+sp_inside_paren = remove # "( 1 )" vs "(1)"
+sp_inside_fparen = remove # "( 1 )" vs "(1)" - functions
+sp_inside_sparen = remove # "( 1 )" vs "(1)" - if/for/etc
+sp_after_cast = force # "(int) a" vs "(int)a"
+sp_func_call_user_paren = remove # For gettext, "_()" vs. "_ ()"
+set func_call_user _ N_ C_ # Needed for sp_after_cast
+sp_before_semi = remove
+sp_paren_paren = remove # Space between (( and ))
+
+eat_blanks_before_close_brace = true
+eat_blanks_after_open_brace = true
+
+# Allman style for curly braces
+nl_assign_brace = force
+nl_enum_brace = force
+nl_union_brace = force
+nl_struct_brace = force
+nl_class_brace = force
+nl_do_brace = force
+nl_if_brace = force
+nl_for_brace = force
+nl_else_brace = force
+nl_elseif_brace = force
+nl_while_brace = force
+nl_switch_brace = force
+nl_before_case = true
+nl_fcall_brace = force
+nl_fdef_brace = force
+nl_brace_else = force
+nl_brace_while = force
+nl_case_colon_brace = force
+nl_after_brace_open = true
+
+# Function calls and parameters
+nl_func_paren = remove
+nl_func_def_paren = remove
+nl_func_decl_start = remove
+nl_func_def_start = remove
+nl_func_decl_args = force
+nl_func_def_args = force
+nl_func_decl_end = remove
+nl_func_def_end = remove
+
+# Code modifying options (non-whitespace)
+mod_full_brace_do = force
+mod_full_brace_for = force
+mod_full_brace_function = force
+mod_full_brace_if = force
+mod_full_brace_while = force
+mod_case_brace = force
+mod_remove_extra_semicolon = true
+
+# Align
+align_func_params = true
+align_single_line_func = true
+align_var_def_star_style = 2
+
+# one liners
+nl_func_leave_one_liners = true
+nl_enum_leave_one_liners = true
+nl_assign_leave_one_liners = true
+
+# Comments
+cmt_cpp_to_c = true # "/* */" vs. "//"
+cmt_cpp_group = true # Group single line comments to block
+cmt_c_group = true
+cmt_convert_tab_to_spaces = true
+#cmt_reflow_mode = 2 # Full reflow (seems doesn't work quite well, it doesn't reorder the comments)
+#cmt_width = 80 # Line width
+cmt_star_cont = true # Whether to put a star on subsequent comment lines
+cmt_sp_after_star_cont = 1 # The number of spaces to insert after the star on subsequent comment lines
+cmt_c_nl_start = false # false/true
+cmt_c_nl_end = true # false/true
+# For multi-line comments with a '*' lead, remove leading spaces if the first and last lines of
+# the comment are the same length. Default=True
+cmt_multi_check_last = false
+
+# Encoding
+utf8_bom = remove
+utf8_force = true
+