Update NACT user's manual
[nautilus-actions.git] / TODO
blob8f311012735e7ee58257f059db7c4f5214eace55
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
12      to all actions
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
19   (REST services ?)
21 - changing conditions in IConditionsTab should trigger an update of the
22   example label
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
40   (F5 ?)
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
52   unvalidity
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
101   configurations/
102     id/
103        properties/
104        conditions/
105        profiles/
106           profile-un/
107             properties/
108             conditions/
109             command/
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'
120 - Implement:
121         SuggestedShortcut (see gnome-keybinding-properties)
122         GetItemsList
123         Path
124         ExecutionMode
125         StartupNotify
126         StartupWMClass
127         ExecuteAs
128         OnlyShowIn
129         NotShowIn
130         TryExec
131         ShowIfRegistered
132         ShowIfTrue
133         ShowIfRunning
134         SelectionCount
136         existing: [x] boolean: accept multiple
137                 we so only test if selection is unique or not
139         next: a string 
140                 accept-multiple = FALSE -> '=1'
141                 accept-multiple = TRUE  -> '>0'
143         Capabilities
145 Action definition
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.
152 Defaults to empty.
153         localestring    no
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
180 Profiles
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.
199         strings list    YES
200 Profile definition
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
238 Menu definition
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
271 ItemsList
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).
284         strings list    YES
285 Conditions
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.
294 Example:
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 ?
301 OnlyShowIn,
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.
314         string  no
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.
321         string  no
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.
342         strings list    no
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:
356     * "file"
357     * "sftp"
358     * "smb"
359     * "http"
361 Schemes may be negated, e.g. "!http;".
362 Defaults to "*;".
363 Comment:        This is the equivalent of "X-KDE-Protocol" and "X-KDE-Protocols" KDE keys.
364         strings list    no
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
380 Defaults to "*;".
381 Comment:        This is the equivalent of "X-KDE-Require" KDE key.
382         strings list    no
383 Parameters
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;
400     *
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.
403 Example:
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:
408     "echo pierre"
409     "echo paul"
410     "echo jacques"
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
439 %b      (first) basename
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
444 %f      (first) file name
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
450 %u      (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
454 %x      (first) 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 ?