2 - (Grumz) implement the Help button in nact (or hide it meanwhile)
4 - (Grumz) i18n doen't works in the command line tool and for some part
5 of NACT like the scheme list, it seems..?
7 - Note about the schemas in Nautilus Actions:
8 a) actions are identified by uuid
9 b) so, all GConf keys have a path with the uuid of the action
10 c) I'm not willing to write a schema for each and every uuid
11 d) so, as of 1.11.2, the provided schema is general and should apply
13 e) but there is not yet an API to set a GConfMetaInfo for a key
14 note that gconftool-2 --dump is able to export for each entry a
15 <schema_key> which includes the path to the general schema key
16 but we cannot set it programatically (bad !)
18 - allow users to upload/download actions directly from a web repository
21 - changing conditions in IConditionsTab should trigger an update of the
24 - GOptions request enhancement so that the help for an option could be
25 multiline (by defining an optional maximum width)
27 - GLib bug for g_utf8_collate_key_for_filename()
28 (see the 26 exported actions, and the screenshot of Nautilus view)
30 - Gtk bug: Nautilus doesn't display the actions in the order of the provided
31 GList in its context menu (seems as if a cache would keep the actions which
32 were already here the previous time - to be confirmed)
34 - Gtk bug: gtk_tree_path_up returns TRUE even if there is no parent
35 cf. commit 5ee6938486cd82f1274969506873df950348dd61 and before
36 function nact-tree-model.c::add_parent
37 recreate a small code which reproduces this bug and open in bugzilla
39 - GConf Editor request enhancement: one should be able to refresh the hierarchy
42 - for each toolbar, let the user choose which buttons are displayed
44 - when a unique app is found, use libwnck (?) to activate it
46 - have a preference for modified and invalid fonts
48 - undo manager (at least Ctrl-Z)
50 - IActionTab: check_label has became useless since validity is global
51 to the action - remove, or extend to each field which can led to
54 - export: add a overwrite page: what to do if file already exists ?
56 - nautilus-actions-new:
57 give same defaults that when creating an action in NACT
58 choose the target I/O provider
60 - Nautilus bug when dnd to nautilus on other screen
61 see https://bugzilla.gnome.org/show_bug.cgi?id=593453
63 - nact: new action assistant
65 - DBus service: list current I/O providers
67 - DBus service: import/export an action or a menu
69 - optim: what about between base_builder_instance_init and
70 base_application_v_initialize_default_icon ?
72 - enhancement.config: na_pivot_is_level_zero_writable:
73 the provider which hosts the level-zero list of items should be a configuration option
75 - enhancement.ui: review statusbar layout
76 do not add extra height to statusbar
77 better encapsulate statusbar, lock indicator, possibly other indicators
79 - enhancement.ui: review toolbars layout
80 so that detacheable toolbars do not take so such big extra space
82 - enhancement.management: we should be able to fully export a configuration
83 this implies exporting menus and full tree
84 + restore hierarchy on import
86 - enhancement.ui: rows implicitely selected should have a special display
87 (as a sort of 'transparent' selection)
89 - nact-iactions-list.c: display_label
90 the 'editable' cell property should be set only once, instead of at each redraw
91 and more because we also compute this on selection change
92 what we should do: compute once, and monitor to only change when needed
94 - profile path and parameters should be set together as only one variable ?
96 - icon: is defined as localestring in desktop entry spec
97 but path is defined as string in this same spec
98 and icon may be a path -> so what to do with this ?
100 - in GConf, for v3, have conditions in a subfolder
111 - 20100408: gconf_concat_dir_and_key: have seen this as deprecated, but do not
112 find again the reference :(
113 not even in unstable library on the web
114 http://library.gnome.org/devel/gconf/unstable/gconf-gconf.html#gconf-concat-dir-and-key
116 - "x-nautilus-desktop:///" is rather a scheme than a folder => actually is an URI
118 - enhancement.ui: add a 'why this item is invalid'
121 SuggestedShortcut (see gnome-keybinding-properties)
136 existing: [x] boolean: accept multiple
137 we so only test if selection is unique or not
140 accept-multiple = FALSE -> '=1'
141 accept-multiple = TRUE -> '>0'
146 Type This define this .desktop file as an Action definition.
147 Defaults to "Action". string no
148 Name The label of the action, as it should appear in the context menu.
149 Parameters may appear in Name value, and will be substituted at runtime. localestring YES
150 Tooltip The tooltip associated with the item in the context menu.
151 Parameters may appear in Tooltip value, and will be substituted at runtime.
154 Icon The name of a themed icon, or the path to an icon.
155 Parameters may appear in Icon value, and will be substituted at runtime.
156 Defaults to empty. localestring no
157 Description A free description of the action, which may be used in the management UI, in a Web page, and so on.
158 Defaults to empty. localestring no
159 SuggestedShortcut A shortcut suggested for the action.
160 Please note that this might be only a suggestion as the shortcut may be already reserved for another use. Implementation should not override an already existing shortcut to define this one.
161 The format may look like "<Control>a" or "<Shift><Alt>F1".
162 Defaults to empty. string no
163 Enabled Whether the item is candidate to be displayed in the context menu.
164 A user might define many actions or menus, and choose to only enable some of them from time to time.
165 Defaults to "true". boolean no
166 Hidden Same meaning as in DES.
167 Defaults to "false". boolean no
168 TargetContext Whether the item targets the file manager context menu.
169 This means that the action will be candidate if defined conditions met the current selection.
170 Defaults to "true". boolean no
171 TargetLocation Whether the item targets a location menu, if the file manager supports this.
172 This means that the action will be candidate if defined conditions met the current location.
173 Defaults to "false". boolean no
174 TargetToolbar Whether the item targets the toolbar, if the file manager supports this.
175 Note that, in order to keep a nice and stable UI, the file manager may reserve toolbar actions to those only targeting the current folder.
176 Defaults to "false". boolean no
177 ToolbarLabel The label to be displayed in the toolbar, if it is not the same that those displayed in context menu.
178 Parameters may appear in ToolbarLabel value, and will be substituted at runtime.
179 Defaults to Name value. localestring no
182 The ordered list of the profiles attached to this action.
183 Each element of this strings list may be:
185 * a profile_id, i.e. the id of a profile, as an ASCII string
186 * a command to be executed, if the string is enclosed between square brackets ('['...']').
188 So, "Profiles" key has a dynamic value: if an element of the string list is enclosed between square brackets ('['...']'), it is considered as a command, optionally with parameters and arguments, and so will be subject to an evaluation at runtime. If the standard output of the command is a valid strings list, then it is substituted to the bracketed element. It the command doesn't exist or cannot be executed, the bracketed element is just ignored.
190 After reading, and maybe evaluation of dynamic elements, profiles identified by the "Profiles" value, but not found in this .desktop file, are just ignored.
192 It is up to the implementation to decide whether profiles found in this .desktop file, but not identified in this list, should or not be attached to the action.
193 It could be for example an acceptable fallback to append these « orphan » profiles at the end of the list of profiles.
194 Another choice might also be:
196 * at runtime, only attach to the action profiles which are listed in this "Profiles" key
197 * while a management UI may load all profiles found in the .desktop file.
202 Profile is identified by its profile_id, as an ASCII string.
204 Each profile defined in the "Profiles" key, whether statically by its profile_id identifiant, or as the result of an evaluated command, must be defined in a [X-Action-Profile profile_id] group.
206 When several profiles are defined for an action, only the first valid profile whose conditions are met at runtime is selected to be made available in the context menu.
208 Defining several profiles let so the user have ordered OR-ed set of conditions, i.e. have one action be available if one set of conditions is met, OR this same action, though most probably with a slightly different command, be available if another set of conditions is met, and so on.
210 In order to be valid, a profile must at least have an executable command.
211 Key Description Value type Req ?
212 Name The name of the profile; this name is not displayed in the context menu, and should just be thought as a convenience for the management UI. It may also be seen as a good place for a description of what the profile exactly does.
213 Defaults to empty. localestring no
214 Exec Same meaning as in DES.
215 Parameters may appear in Exec value, and will be substituted at runtime. string YES
216 Path The working directory the program should be started in.
217 Parameters may appear in Path value, and will be substituted at runtime.
218 Defaults to base directory of the current selection, which happens to be the value of "%d" parameter. string no
219 ExecutionMode Execution mode of the program.
220 This may be choosen between following values:
222 * Normal: Starts as a standard graphical user interface
223 * Terminal: Starts the preferred terminal of the graphical environment, and runs the command in it
224 * Embedded: Makes use of a special feature of the file manager which allows a terminal to be ran inside of it; an acceptable fallback is Terminal
225 * DisplayOutput: The ran terminal may be closed at end of the command, but standard streams (stdout, stderr) should be collected and displayed; an acceptable fallback is Terminal
227 Defaults to "Normal". string no
228 StartupNotify Same meaning as in DES.
229 Only relevant when ExecutionMode=Normal.
230 Defaults to "false". boolean no
231 StartupWMClass Same meaning as in DES.
232 Only relevant when ExecutionMode=Normal.
233 Defaults to empty. string no
234 ExecuteAs The user the command must be ran as. The user may be identified by its numeric UID or by its login.
235 The implementation should ignore a profile defining a non-existing UID or login as a value for the ExecuteAs key.
236 The implementation might require the presence of a well-configured subsystem (e.g. sudo).
237 Defaults to empty: the command will be executed as the current user. string no
240 Just as an action, a menu has label, tooltip, icon.
242 But, where an action is intended to eventually execute a command, a menu is just a way of gathering some subitems, actions or menus, in an ordered list.
244 In order to be valid, a menu must have a non-empty name, and include at least one valid subitem.
246 It is the responsability of the implementation to ensure that the displayed menus are relevant, i.e. not empty, with no separator at the begin or the end of the menu, with no double separator, etc.
248 The menu is so defined as a particular case of a .desktop file, identified by its desktop_file_id, whose the [Desktop Entry] section has following keys:
249 Key Description Value type Req ?
250 Type This define this .desktop file as a Menu definition.
251 Must be equal to "Menu". string YES
252 Name The label of the menu, as it should appear in the context menu.
253 Parameters may appear in Name value, and will be substituted at runtime. localestring YES
254 Tooltip The tooltip associated with the submenu in the context menu.
255 Parameters may appear in Tooltip value, and will be substituted at runtime.
256 Defaults to empty. localestring no
257 Icon The name of a themed icon, or the path to an icon, to be associated to the submenu.
258 Parameters may appear in Icon value, and will be substituted at runtime.
259 Defaults to empty. localestring no
260 Description A free description of the menu, which may be used in the management UI, in a Web page, and so on.
261 Defaults to empty. localestring no
262 SuggestedShortcut A shortcut suggested for the menu.
263 Please note that this might be only a suggestion as the shortcut may be already reserved for another use. Implementation should not override an already existing shortcut to define this one.
264 The format may look like "<Control>a" or "<Shift><Alt>F1".
265 Defaults to empty. string no
266 Enabled Whether the item is candidate to be displayed in the context menu.
267 A user might define many actions or menus, and choose to only enable some of them from time to time.
268 Defaults to "true". boolean no
269 Hidden Same meaning as in DES.
270 Defaults to "false". boolean no
273 The ordered list of the items (actions or menus) attached to this menu.
274 Each element of this strings list may be:
276 * the id of an action or a menu,
277 * a command to be executed, if the string is enclosed between square brackets ('['...']').
279 So, "ItemsList" key has a dynamic value: if an element of the string list is enclosed between square brackets ('['...']'), it is considered as a command, optionally with parameters and arguments, and so will be subject to an evaluation at runtime. If the standard output of the command is a valid strings list, then it is substituted to the bracketed element. It the command doesn't exist or cannot be executed, the bracketed element is just ignored.
281 The keyword SEPARATOR is a special case of desktop_file_id. It may be used to define a separator in the menu.
283 Actions or menus not identified here, or not identified as subitems of a menu or of a submenu, should not be ignored by the implementation; instead of that, the implementation should display these « orphan » items (though in a unspecified order).
287 As a remainder of that has been said above, each one of the following conditions may appear in a menu, an action or a profile.
289 Conditions are AND-ed, that is all specified conditions which appear in a menu, an action or a profile must be met in order the item be considered as a candidate.
291 When a condition is defined as a string list, elements of the list are considered as OR-ed.
292 When an element of the string list is negated, it must be considered as an AND condition.
296 The line « MimeTypes = image/*; video/*; » must be readen as « condition is met if each file in the current selection has a mimetype of "image/*" or of "video/*" »
298 And the line « MimeTypes = image/*; video/*; !image/bmp » must be readen as « condition is met if each file in the current selection has a mimetype of "image/*" or of "video/*", but must not have the "image/bmp" mimetype ».
300 Key Description Value type Req ?
302 NotShowIn Same meaning as in DES.
303 Note that, as in DES, only one of these two keys may be mentioned, else the condition group would be considered invalid.
304 Defaults to show anywhere. strings list no
305 TryExec Same meaning as in DES.
306 Note that, when specified, only the presence and the executability status of the specified file are checked.
307 Parameters may appear in TryExec value, and will be substituted at runtime.
308 Defaults to successful. string no
309 ShowIfRegistered The well-known name of a DBus service.
310 The item will be candidate if the named service is registered on session DBus at runtime.
311 Parameters may appear in ShowIfRegistered value, and will be substituted at runtime.
312 Defaults to successful.
313 Comment: This is the equivalent of KDE "X-KDE-ShowIfRunning" key.
315 ShowIfTrue A command which, when executed, should output a string on stdout.
316 The item will be candidate if the outputed string is equal to "true".
317 Parameters may appear in ShowIfTrue value, and will be substituted at runtime.
318 Example: [ -r %d/.svn/entries ] && echo "true"
319 Defaults to successful.
320 Comment: This is the equivalent of KDE "X-KDE-ShowIfDBusCall" key, extended to any command able to output a string.
322 ShowIfRunning The name of a process.
323 The item will be candidate if the process name is found in memory at runtime.
324 Parameters may appear in ShowIfRunning value, and will be substituted at runtime.
325 Defaults to successful. string no
326 MimeTypes Same meaning as in DES.
327 Each mimetype may be fully specified (e.g. "audio/mpeg;"), or as a group (e.g. "image/*;").
328 Mimetypes may be negated (e.g. "audio/*; !audio/mpeg;").
329 Some of well-known mimetypes include:
331 * "all/all": matches all items
332 * "all/allfiles": matches only files
333 * "inode/directory": matches only directories
335 '*' character is accepted as a wildcard in only two cases:
337 * when used alone as in "*;", i.e. when used as a group wildcard without subgroup,
338 * when used as the subgroup wildcard, after the '/' character, as in "image/*".
340 Defaults to "*;", which happends to be exactly equivalent to "all/all" or to "all/*".
341 Comment: This is the equivalent of "ServiceTypes", "X-KDE-ServiceTypes", "ExcludeServiceTypes" KDE and "MimeType" freedesktop keys.
343 Basenames List of basenames the selection should match in order this profile be selected.
344 '*' character is accepted as a wildcard.
345 Basenames may be negated (e.g. "*; !*.h;").
346 Defaults to "*;". strings list no
347 Matchcase Whether the above Basenames is case sensitive.
348 Defaults to "true". boolean no
349 SelectionCount Whether this profile may be selected depending of the count of the selection.
350 This is a string of the form "{'<'|'='|'>'} number".
351 Examples of valid strings are: "=0", "> 1", "< 10".
352 Defaults to ">0". string no
353 Schemes The list of schemes the selection must satisfy in order the item be selected.
354 Exemples of well-known schemes are:
361 Schemes may be negated, e.g. "!http;".
363 Comment: This is the equivalent of "X-KDE-Protocol" and "X-KDE-Protocols" KDE keys.
365 Folders A list of paths the current base directory must be in in order the item be selected.
366 A folder path may be negated (e.g. "/data; !/data/resources/secret;").
367 '*' character is accepted as a wildcard, replacing any level(s) of subdirectory (e.g. "/music; /video; !*/secret;").
368 Also note that a terminating '/*' is always implied by the definition of this key.
369 Last, note that different implementations today widely consider that, for a directory point of view, having no selection is roughly the same that selecting the currently opened folder. If this makes a difference for your action, then SelectionCount is for you. Defaults to "/". strings list no
370 Capabilities A list of capabilities each item of the selection must satisfy in order the item be candidate.
371 Capabilities may be negated.
372 Capabilities have to be choosen between following predefined ones:
374 * "Owner": current user is the owner of selected items
375 * "Readable": selected items are readable by user (probably more usefull when negated)
376 * "Writable": selected items are writable by user
377 * "Executable": selected items are executable by user
378 * "Local": selected items are local
381 Comment: This is the equivalent of "X-KDE-Require" KDE key.
385 Whenever parameters are said to be accepted, they will be replaced at run-time.
387 Also, this specification doesn't make any assumption about whether a parameter is relevant in a given situation, or secure, or may be used several times, or so. It instead considers that this sort of check is up to the action creator.
389 The implementation should take care of correctly shell-escape the substituted values, so that it should not be needed for the action creator to use any sort of quotes to handle spaces in filenames.
391 Though some parameters are not sensible to the count of the selection (e.g. "%c", the selection count itself), most have two declensions:
393 * a "singular" one, e.g. "%b", the basename of the selected item
394 * a "plural" one, e.g. "%B", a space-separated list of the basenames of selected items
396 When the selection is empty or contains only one element, these two forms are exactly equivalent.
397 When the selection contains more than one item:
399 * if the first parameter found in the Exec key is of a singular form, then the implementation should consider that the command is only able to deal with one item at a time, and thus that it has to be ran one time for each selected item;
401 * contrarily, if the first parameter found is of the plural form, then the implementation should consider that the command is able to deal with a list of items, and thus the command should be executed only once.
405 Say the current folder is /data, and the current selection contains the three files pierre, paul and jacques.
407 If the Exec key is "echo %b", then the following commands will be run:
412 If the Exec key is "echo %B", then the following command will be run:
413 "echo pierre paul jacques"
415 If the Exec key is "echo %b %B", then the following commands will be run:
416 "echo pierre pierre paul jacques"
417 "echo paul pierre paul jacques"
418 "echo jacques pierre paul jacques"
420 If the Exec key is "echo %B %b", then the following commands will be run:
421 "echo pierre paul jacques pierre"
422 The basename used is those of the first item of the selected items list as provided by the file manager. There is only a small chance that it would be those of the first visually selected item, and there is contrarily great chances that it would not be predictable at all.
424 Even if the choosen parameter is the same for all selected items, the behavior is the identical.
425 If the Exec key is "echo %d %B", then the following commands will be run:
426 "echo /data pierre paul jacques"
427 "echo /data pierre paul jacques"
428 "echo /data pierre paul jacques"
429 which obviously doesn't make many sense.
431 As the last three examples show up, action creator should avoid to mix singular and plural forms, unless they know what they are doing, whether it doesn't make sense or this may lead to unwaited results.
433 Nonetheless, mixing singular and plural forms, though we warn against, is not an error. As a counter example, there may be some situations where a command-line of the form "echo %B %d" would be useful. In that case, the following command would be run:
434 "echo pierre paul jacques /data"
435 It is left as an exercize for the reader to find a use case.
437 The word "first" in the following table makes so reference to the case where the singular form parameter is used in a plural form command. We recall one more time that which is the "first" element is not specified, and, most probably, rather unpredictable.
438 Parameter Description
440 %B space-separated list of basenames
441 %c count of selected items
442 %d (first) base directory
443 %D space-separated list of base directory of each selected items
445 %F space-separated list of selected file names
446 %h hostname of the (first) URI
447 %n username of the (first) URI
448 %p port number of the (first) URI
449 %s scheme of the (first) URI
451 %U space-separated list of selected URIs
452 %w (first) basename without the extension
453 %W space-separated list of basenames without their extension
455 %X space-separated list of extensions
456 %% the « % » character
458 - an item may become invalid at runtime
459 e.g. when the label contains only a list of extension (%X)
460 but selected files do not have extension - most likely, there should be other examples..
461 => label must be expanded and checked and kept before testing for candidate
463 - "write even if default" was added for version only
464 but version should not been written in desktop files (not in the spec)
465 so version should be explictely written (as type)
467 - an empty list is not a default value
468 e.g. basenames default value = [*]
469 after deleting this default value in the UI, we should write basenames=[] in the I/O provider
470 so that we really have an empty list
472 - 2010-06-17: ui enhancement
473 all edition (entry, buttons, etc.) fields should have a small emblem when read-only.
475 - default has changed for schemes (was coded as 'file' instead of '*')
476 when version is recorded (as 1.4.1 or 2.0) then schemes is reliable
477 when version is not recorded, it is a 2.30 serie, and scheme is not recorded when default (i.e. file)
478 do not try to force anything than that, but this will have to be documented
480 - ui.enhancement: let the user edit the current default schemes
481 when adding from defaults for a #NAIContext
483 - 2010-06-17: ui.enhancement: implement shortcut button in NactIPropertiesTab page
485 - 2010-06-21: it appears that na_ipivot_consumer_notify_of_items_changed() may be called more
486 than once in the plugin when more than one item is saved in NACT : this should be only once.
488 - 2010-06-28: import/export assistants result pages should be scrollable editbox, so that
489 the dialog box does not become taller of wider than the screen when there is a lot of
490 lines, making it unreadable
492 - 2010-07-27: enhancement: while editing a new filter, making it duplicate, try to keep editing
493 instead of terminating the edition and letting the old value
495 - 2010-06-20: TODO: is_candidate_for_show_in: get current environment
497 - 2010-08-07: review the notification bufferisation
498 + why na_ipivot_consumer_notify is it subject to is_notify_allowed for preferences ?