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
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
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.

Top of Page