donnatella 0.3.0 released
A new version of donnatella, your GTK3 file manager, is available. A bunch of fixes and improvments/optimizations since 0.2.0, some new things as well, the most "important" ones being the addition of custom properties, and facilities for scripting
Sicne day one, things have been quite configurable in donna, but there was no scripting support. Instead, donna uses commands and lets you combine them as you want, assign them a click or key, etc And when that's not enough? Well, then you script.
It is now possible to communicate with donna, i.e. trigger commands (nodes,
really, it's not actually limited to commands) and get their return values. All
this easilly in any language of your choice, either using the socket directly or
via helper donna-trigger
And if you could always configure donna as you wanted, defining the layout and configuring columns as you'd like, things can now go even further via the addition of custom properties.
You'll now be able to have columns for video duration, uncompressed size of archives, or whatever you can come up with!
Changes since 0.2.0
Quick recap over the different changes since last version :
- Add command
exec()
See this post for more - Add event "notify-dirname" when current directory changes
- provider-exec: Parse environment variables See this post for more
- Add custom properties See this post and this one for more
- treeview:
save_to_config()
: Fix not saving right column layout - ColumnType text: Add tooltip, and option
property_tooltip
- ColumnType time: Support ":property" & ":format" in tooltip options
- treeview: Fix not refreshing column options saved to arrangement/defaults
- tree: Trigger flat item when selected
- config: Fix not exporting/saving empty categories
- Command
config_save()
: Emit event info upon save - ColumnType time: Remove tooltip versions of some options (not needed/useful)
- ColumnType time: Add new specifier
%f
for "fluid" format See this post for more - ColumnTypes time, perms & text: Add option
align
- Add a socket to communicate with donna from e.g. scripts; as well as helper
donna-trigger
See this post for more - Add command
intref_free()
- tree: Add commands
root_{g,s}et_child_visual()
to get/set tree visuals even for a row that isn't accessible or not yet loaded - Add provider filter to handle filters See this post for more
- Add command
get_node_from()
- Add command
node_set_property()
- Provider command: Add prefix '<' to make the node a container instead of an item: See this post for more
- Content menus: Add new context-type "combined" for defining both the item and the submenu (via container) part of a menu item. See this post for more
- Add command
node_get_children()
- Add command
nodes_add()
- Add provider mru to maintain Most Recently Used lists. See this post for more
- Menus: Fix keys (e.g. Enter) not triggering items
- Add
$DONNATELLA_CONFIG_DIR
& extend$PATH
(for scripts) See this post for more - Add commands
{nodes,strings}_{len,get_item}
- GTK+3.14 fixes/compatibility changes, update patchset
gtk3-donnatella
- list: Fix refreshing relative line number column (when not first one)
- Many other fixes & optimizations; see
git log
for details
Configuration updates
As you might know if you've read the posts about changes pushed in next
alongside changes in the code, were changes in the (default) configuration as
well. And since almost everything in donna is configurable, you might wanna use
an updated config as well.
There are, however, no automatic process for this. You can use your favorite tool to handle the merging, even do a 3-way merge using the original .conf file if you want.
And in case it might help, here are the changes done between 0.2.0 and 0.3.0 :
- diff --git a/misc/donnatella.conf b/misc/donnatella.conf
- index b6b2a03..b9810df 100644
- --- a/misc/donnatella.conf
- +++ b/misc/donnatella.conf
- @@ -136,6 +136,7 @@ key_mode_select_foreground=white
- last_location=command:tv_set_location (:active, @config_get_string (donna/last_location))
- marks=command:mark_load (,1)
- registers=command:register_load_all (,1)
- +filters=command:filter_load ()
- # enable when using layout "tm"
- #tm=@tv_set_location(tm,task:/)
- @@ -205,7 +206,7 @@ context_menu_colheader=columns<!columns>,-,:sort_order<!sort_order>,:second_sort
- # some color filters
- [defaults/lists/arrangement/color_filters/]
- -filter=|*.tar.*|*.tgz|*.zip|*.rar
- +filter=|a
- column=name
- foreground=green
- @@ -231,25 +232,25 @@ foreground-rgba=rgb(108,0,0)
- [defaults/lists/arrangement/color_filters/]
- # modified less than an hour ago
- -filter=time:A<=1H
- +filter=|h
- column=time
- foreground-rgba=rgb(0,80,210)
- [defaults/lists/arrangement/color_filters/]
- # modified today
- -filter=time:A0d
- +filter=|t
- column=time
- foreground-rgba=rgb(0,150,200)
- [defaults/lists/arrangement/color_filters/]
- # modified yesterday
- -filter=time:A1d
- +filter=|y
- column=time
- foreground-rgba=rgb(0,200,160)
- [defaults/lists/arrangement/color_filters/]
- # modified this week
- -filter=time:A0V
- +filter=|w
- column=time
- foreground-rgba=rgb(0,180,0)
- @@ -410,7 +411,7 @@ type:ct=name
- # File System
- [arrangements/]
- -mask=fs:/*
- +mask=^fs:/
- columns=ln,name,size,time,perms,own
- sort_column=name
- sort_order:order=asc
- @@ -423,7 +424,7 @@ second_sort_always=true
- # Search Results
- [arrangements/]
- -mask=exec:*
- +mask=^exec:
- columns=ln,path,name,size,time,perms,own
- sort_column=path
- sort_order:order=asc
- @@ -440,7 +441,7 @@ width=285
- # Configuration
- [arrangements/]
- -mask=config:/*
- +mask=^config:/
- columns=ln,name,opt-type,value
- [arrangements//columns_options/name]
- @@ -453,7 +454,7 @@ width=420
- # Task Manager
- [arrangements/]
- -mask=task:/*
- +mask=^task:/
- columns=ln,name,progress,text,label
- [arrangements//columns_options/name]
- @@ -479,7 +480,7 @@ width=80
- # Marks
- [arrangements/]
- -mask=mark:/*
- +mask=^mark:/
- columns=ln,name,mark-type,mark-value
- [arrangements//columns_options/name]
- @@ -783,11 +784,9 @@ trigger=command:tv_start_interactive_search (%o)
- [key_modes/donna/key_f]
- type:key=spec
- spec:spec=lower,upper
- -trigger=command:tv_set_visual_filter (%o, @config_get_string (filters/%k), 1)
- +trigger=command:tv_set_visual_filter (%o, filter:|%k, 1)
- [key_modes/donna/key_F]
- -type:key=spec
- -spec:spec=lower,upper
- -trigger=command:tv_set_visual_filter (%o, @config_set_string (filters/%k, @ask_text (Enter filter %k,,@config_try_get_string (filters/%k, @tv_get_visual_filter (%o)))), 1)
- +trigger=command:tv_set_visual_filter (%o, @get_node_from (filter, @ask_text (Enter visual filter,, @node_get_property (@tv_get_visual_filter (%o), location))))
- # VF: by age
- [key_modes/donna/key_ampersand]
- @@ -797,16 +796,16 @@ custom_chars=HMSdmVY
- combine=age_unit
- [key_modes/donna/key_q]
- combine=age_unit
- -trigger=command:tv_set_visual_filter (%o, time:A%m%c)
- +trigger=command:tv_set_visual_filter (%o, filter:time:A%m%c)
- [key_modes/donna/key_Q]
- combine=age_unit
- -trigger=command:tv_set_visual_filter (%o, time:A<=%m%c)
- +trigger=command:tv_set_visual_filter (%o, filter:time:A<=%m%c)
- # VF: by size
- [key_modes/donna/key_less]
- -trigger=command:tv_set_visual_filter (%o, size:<=%mM)
- +trigger=command:tv_set_visual_filter (%o, filter:size:<=%mM)
- [key_modes/donna/key_greater]
- -trigger=command:tv_set_visual_filter (%o, size:>=%mM)
- +trigger=command:tv_set_visual_filter (%o, filter:size:>=%mM)
- # F2 to rename
- @@ -814,16 +813,16 @@ trigger=command:tv_set_visual_filter (%o, size:>=%mM)
- trigger=command:tv_column_edit (%o, %n, name)
- # F6 to edit focused item (vim in a terminal)
- [key_modes/donna/key_F6]
- -trigger=exec:!vim %:n
- +trigger=exec:!$EDITOR %:n
- # F9 to view focused item (less in a terminal)
- [key_modes/donna/key_F9]
- -trigger=exec:!less %:n
- +trigger=exec:!$LESS %:n
- # Terminals
- [key_modes/donna/key_t]
- -trigger=exec:!bash
- +trigger=exec:!$SHELL
- [key_modes/donna/key_T]
- -trigger=exec:>bash
- +trigger=exec:>$SHELL
- # selection stuff -- note that this required a patched GTK (to invert range)
- [key_modes/donna/key_v]
- @@ -957,12 +956,12 @@ trigger=command:tv_save_tree_file (%o, @ask_text (Save Tree As...,Enter the name
- name=Open Terminal Here
- icon=terminal
- is_sensitive=has_ref
- -trigger=exec:!WORKDIR=%:n bash
- +trigger=exec:!WORKDIR=%:n $SHELL
- [context_menus/tree_views/terminal_nw]
- name=...In New Window
- is_sensitive=has_ref
- -trigger=>WD=%:n bash
- +trigger=>WD=%:n $SHELL
- [context_menus/tree_views/tree_visuals]
- type:context-type=empty
- @@ -1054,8 +1053,12 @@ name=Invert Selection
- trigger=command:tv_selection (%o, i, :all)
- [context_menus/tree_views/selection_filter]
- +type:context-type=combined
- name=Selection Filter...
- -trigger=command:tv_selection_nodes (%o, d, @nodes_filter (@tv_get_nodes (%o, :all), @ask_text (Selection Filter,Enter the selection filter to apply), %o))
- +trigger=&donna-sel_filter %o
- +container=@<nodes_add (@nodes_add(@mru_get_nodes (mru:sel_filter)), filter:/)
- +submenus:enabled=combine
- +menu=sel_filter
- # Timestamp stuff
- @@ -1091,6 +1094,12 @@ children:node-type=items
- sort=true
- left_click=command:tv_goto_line (:active, s+f, @nodes_io (%n, c, @tv_get_location (:active), @ask_text (New Items,Enter the name of the item to create,@node_get_property(%n,name))))
- +# Selection Filters
- +[menus/sel_filter]
- +sort=false
- +submenus:enabled=enabled
- +left_click=command:tv_selection_nodes (:active, d, @nodes_filter (@tv_get_nodes (:active, :all), @mru_add_node (mru:sel_filter, %n), :active))
- +
- # to show children but not hidden/dotFiles
- [menus/children_not_hidden]
- sort=true
- @@ -1181,6 +1190,42 @@ terminal=term
- prefix=!
- terminal=term
- terminal_cmdline=:hold
- +[providers/filter/]
- +alias=f
- +name=No filtering
- +icon_name=edit-delete
- +filter=
- +[providers/filter/]
- +alias=h
- +name=Within the hour
- +filter=time:A<=1H
- +[providers/filter/]
- +alias=t
- +name=Today
- +icon_name=vcalendar
- +filter=time:A0
- +[providers/filter/]
- +alias=y
- +name=Yesterday
- +filter=time:A1d
- +[providers/filter/]
- +alias=w
- +name=This week
- +filter=time:A0V
- +[providers/filter/]
- +alias=v
- +name=Videos
- +icon_name=video
- +filter=desc:* video
- +[providers/filter/]
- +alias=i
- +name=Images
- +icon_name=image
- +filter=desc:* image
- +[providers/filter/]
- +alias=a
- +name=Archives
- +filter=desc:* archive*
- #
- @@ -1201,25 +1246,4 @@ node=config:/
- box=box-orange
- -#
- -# FILTERS
- -#
- -
- -[filters]
- -# used to unset current VF (via ff)
- -f=
- -# today
- -t=time:A0
- -# yesterday
- -y=time:A1d
- -# this week
- -w=time:A0V
- -# videos
- -v=desc:* video
- -# images
- -i=desc:* image
- -# archives
- -a=desc:* archive*
- -
- -
- # EOF
Downloads and whatnot
See donnatella for longer descriptions & all the links you should need.
And of course, as always, new bug reports, suggestions or any other form of constructive criticism is very much welcome.