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 :
@@ -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
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:/)
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.