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 :

  1. diff --git a/misc/donnatella.conf b/misc/donnatella.conf
  2. index b6b2a03..b9810df 100644
  3. --- a/misc/donnatella.conf
  4. +++ b/misc/donnatella.conf
  5. @@ -136,6 +136,7 @@ key_mode_select_foreground=white
  6.  last_location=command:tv_set_location (:active, @config_get_string (donna/last_location))
  7.  marks=command:mark_load (,1)
  8.  registers=command:register_load_all (,1)
  9. +filters=command:filter_load ()
  10.  # enable when using layout "tm"
  11.  #tm=@tv_set_location(tm,task:/)
  12.  
  13. @@ -205,7 +206,7 @@ context_menu_colheader=columns<!columns>,-,:sort_order<!sort_order>,:second_sort
  14.  # some color filters
  15.  
  16.  [defaults/lists/arrangement/color_filters/]
  17. -filter=|*.tar.*|*.tgz|*.zip|*.rar
  18. +filter=|a
  19.  column=name
  20.  foreground=green
  21.  
  22. @@ -231,25 +232,25 @@ foreground-rgba=rgb(108,0,0)
  23.  
  24.  [defaults/lists/arrangement/color_filters/]
  25.  # modified less than an hour ago
  26. -filter=time:A<=1H
  27. +filter=|h
  28.  column=time
  29.  foreground-rgba=rgb(0,80,210)
  30.  
  31.  [defaults/lists/arrangement/color_filters/]
  32.  # modified today
  33. -filter=time:A0d
  34. +filter=|t
  35.  column=time
  36.  foreground-rgba=rgb(0,150,200)
  37.  
  38.  [defaults/lists/arrangement/color_filters/]
  39.  # modified yesterday
  40. -filter=time:A1d
  41. +filter=|y
  42.  column=time
  43.  foreground-rgba=rgb(0,200,160)
  44.  
  45.  [defaults/lists/arrangement/color_filters/]
  46.  # modified this week
  47. -filter=time:A0V
  48. +filter=|w
  49.  column=time
  50.  foreground-rgba=rgb(0,180,0)
  51.  
  52. @@ -410,7 +411,7 @@ type:ct=name
  53.  # File System
  54.  
  55.  [arrangements/]
  56. -mask=fs:/*
  57. +mask=^fs:/
  58.  columns=ln,name,size,time,perms,own
  59.  sort_column=name
  60.  sort_order:order=asc
  61. @@ -423,7 +424,7 @@ second_sort_always=true
  62.  # Search Results
  63.  
  64.  [arrangements/]
  65. -mask=exec:*
  66. +mask=^exec:
  67.  columns=ln,path,name,size,time,perms,own
  68.  sort_column=path
  69.  sort_order:order=asc
  70. @@ -440,7 +441,7 @@ width=285
  71.  # Configuration
  72.  
  73.  [arrangements/]
  74. -mask=config:/*
  75. +mask=^config:/
  76.  columns=ln,name,opt-type,value
  77.  
  78.  [arrangements//columns_options/name]
  79. @@ -453,7 +454,7 @@ width=420
  80.  # Task Manager
  81.  
  82.  [arrangements/]
  83. -mask=task:/*
  84. +mask=^task:/
  85.  columns=ln,name,progress,text,label
  86.  
  87.  [arrangements//columns_options/name]
  88. @@ -479,7 +480,7 @@ width=80
  89.  # Marks
  90.  
  91.  [arrangements/]
  92. -mask=mark:/*
  93. +mask=^mark:/
  94.  columns=ln,name,mark-type,mark-value
  95.  
  96.  [arrangements//columns_options/name]
  97. @@ -783,11 +784,9 @@ trigger=command:tv_start_interactive_search (%o)
  98.  [key_modes/donna/key_f]
  99.  type:key=spec
  100.  spec:spec=lower,upper
  101. -trigger=command:tv_set_visual_filter (%o, @config_get_string (filters/%k), 1)
  102. +trigger=command:tv_set_visual_filter (%o, filter:|%k, 1)
  103.  [key_modes/donna/key_F]
  104. -type:key=spec
  105. -spec:spec=lower,upper
  106. -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)
  107. +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))))
  108.  
  109.  # VF: by age
  110.  [key_modes/donna/key_ampersand]
  111. @@ -797,16 +796,16 @@ custom_chars=HMSdmVY
  112.  combine=age_unit
  113.  [key_modes/donna/key_q]
  114.  combine=age_unit
  115. -trigger=command:tv_set_visual_filter (%o, time:A%m%c)
  116. +trigger=command:tv_set_visual_filter (%o, filter:time:A%m%c)
  117.  [key_modes/donna/key_Q]
  118.  combine=age_unit
  119. -trigger=command:tv_set_visual_filter (%o, time:A<=%m%c)
  120. +trigger=command:tv_set_visual_filter (%o, filter:time:A<=%m%c)
  121.  
  122.  # VF: by size
  123.  [key_modes/donna/key_less]
  124. -trigger=command:tv_set_visual_filter (%o, size:<=%mM)
  125. +trigger=command:tv_set_visual_filter (%o, filter:size:<=%mM)
  126.  [key_modes/donna/key_greater]
  127. -trigger=command:tv_set_visual_filter (%o, size:>=%mM)
  128. +trigger=command:tv_set_visual_filter (%o, filter:size:>=%mM)
  129.  
  130.  
  131.  # F2 to rename
  132. @@ -814,16 +813,16 @@ trigger=command:tv_set_visual_filter (%o, size:>=%mM)
  133.  trigger=command:tv_column_edit (%o, %n, name)
  134.  # F6 to edit focused item (vim in a terminal)
  135.  [key_modes/donna/key_F6]
  136. -trigger=exec:!vim %:n
  137. +trigger=exec:!$EDITOR %:n
  138.  # F9 to view focused item (less in a terminal)
  139.  [key_modes/donna/key_F9]
  140. -trigger=exec:!less %:n
  141. +trigger=exec:!$LESS %:n
  142.  
  143.  # Terminals
  144.  [key_modes/donna/key_t]
  145. -trigger=exec:!bash
  146. +trigger=exec:!$SHELL
  147.  [key_modes/donna/key_T]
  148. -trigger=exec:>bash
  149. +trigger=exec:>$SHELL
  150.  
  151.  # selection stuff -- note that this required a patched GTK (to invert range)
  152.  [key_modes/donna/key_v]
  153. @@ -957,12 +956,12 @@ trigger=command:tv_save_tree_file (%o, @ask_text (Save Tree As...,Enter the name
  154.  name=Open Terminal Here
  155.  icon=terminal
  156.  is_sensitive=has_ref
  157. -trigger=exec:!WORKDIR=%:n bash
  158. +trigger=exec:!WORKDIR=%:n $SHELL
  159.  
  160.  [context_menus/tree_views/terminal_nw]
  161.  name=...In New Window
  162.  is_sensitive=has_ref
  163. -trigger=>WD=%:n bash
  164. +trigger=>WD=%:n $SHELL
  165.  
  166.  [context_menus/tree_views/tree_visuals]
  167.  type:context-type=empty
  168. @@ -1054,8 +1053,12 @@ name=Invert Selection
  169.  trigger=command:tv_selection (%o, i, :all)
  170.  
  171.  [context_menus/tree_views/selection_filter]
  172. +type:context-type=combined
  173.  name=Selection Filter...
  174. -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))
  175. +trigger=&donna-sel_filter %o
  176. +container=@<nodes_add (@nodes_add(@mru_get_nodes (mru:sel_filter)), filter:/)
  177. +submenus:enabled=combine
  178. +menu=sel_filter
  179.  
  180.  # Timestamp stuff
  181.  
  182. @@ -1091,6 +1094,12 @@ children:node-type=items
  183.  sort=true
  184.  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))))
  185.  
  186. +# Selection Filters
  187. +[menus/sel_filter]
  188. +sort=false
  189. +submenus:enabled=enabled
  190. +left_click=command:tv_selection_nodes (:active, d, @nodes_filter (@tv_get_nodes (:active, :all), @mru_add_node (mru:sel_filter, %n), :active))
  191. +
  192.  # to show children but not hidden/dotFiles
  193.  [menus/children_not_hidden]
  194.  sort=true
  195. @@ -1181,6 +1190,42 @@ terminal=term
  196.  prefix=!
  197.  terminal=term
  198.  terminal_cmdline=:hold
  199. +[providers/filter/]
  200. +alias=f
  201. +name=No filtering
  202. +icon_name=edit-delete
  203. +filter=
  204. +[providers/filter/]
  205. +alias=h
  206. +name=Within the hour
  207. +filter=time:A<=1H
  208. +[providers/filter/]
  209. +alias=t
  210. +name=Today
  211. +icon_name=vcalendar
  212. +filter=time:A0
  213. +[providers/filter/]
  214. +alias=y
  215. +name=Yesterday
  216. +filter=time:A1d
  217. +[providers/filter/]
  218. +alias=w
  219. +name=This week
  220. +filter=time:A0V
  221. +[providers/filter/]
  222. +alias=v
  223. +name=Videos
  224. +icon_name=video
  225. +filter=desc:* video
  226. +[providers/filter/]
  227. +alias=i
  228. +name=Images
  229. +icon_name=image
  230. +filter=desc:* image
  231. +[providers/filter/]
  232. +alias=a
  233. +name=Archives
  234. +filter=desc:* archive*
  235.  
  236.  
  237.  #
  238. @@ -1201,25 +1246,4 @@ node=config:/
  239.  box=box-orange
  240.  
  241.  
  242. -#
  243. -#       FILTERS
  244. -#
  245. -
  246. -[filters]
  247. -# used to unset current VF (via ff)
  248. -f=
  249. -# today
  250. -t=time:A0
  251. -# yesterday
  252. -y=time:A1d
  253. -# this week
  254. -w=time:A0V
  255. -# videos
  256. -v=desc:* video
  257. -# images
  258. -i=desc:* image
  259. -# archives
  260. -a=desc:* archive*
  261. -
  262. -
  263.  # 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.

Top of Page