1# QDirStat Development History
2
3This is more verbose than a traditional change log, thus the unusual name of
4this file.
5
6See the README.md file for the latest news:
7
8https://github.com/shundhammer/qdirstat/blob/master/README.md
9
10
11## QDirStat History
12
13- 2021-08-06
14
15  - Lots of internal restructuring and refactoring to keep the code
16    maintainable: In particular, the MainWindow code was getting out of hand
17    with more and more features and menu actions being added all the time, so
18    some of that was moved out to separate classes.
19
20    That involved quite some testing and rethinking how certain parts are
21    working, which in turn involved some head-scratching, rearranging code had
22    the byproduct of more internal documentation and also some small bug fixes.
23
24  - The "Permissions error" panel message didn't always go away when the user
25    had simply left it open and just opened a new directory; and probably also
26    in some other situations. Now it's always cleanly removed whenever a new
27    directory tree is read or when it's re-read ("Refresh all" or "Refresh
28    Selected"). That was one of those small bug fixes.
29
30
31- 2021-07-31
32
33  - Now the "File Age Statistics" window also shows statistics for the months
34    of this and the last year as collapsible (and by default collapsed) items
35    in the same list, so you can break down the age of files further for the
36    last 13-24 months. If a month entry is selected in that list, locating the
37    files of course only locates the files that were last modified within that
38    month.
39
40    <img width="500" src="https://user-images.githubusercontent.com/11538225/127743490-439ce7f8-40eb-405c-bbfb-89bc4a1873e0.png">
41
42    More details and more screenshots at [GitHub issue #172](https://github.com/shundhammer/qdirstat/issues/172).
43
44
45
46- 2021-07-29
47
48  - Added a "Back" and a "Forward" button to move back and forth in the history
49    of visited directories; i.e. QDirStat behaves now very much like a web
50    browser when navigating the filesystem.
51
52    It also has a history menu when you long-press the "Back" or "Forward"
53    buttons, and of course it uses the same keyboard shortcuts `[Alt] [Cursor
54    Left]` and `[Alt] [Cursor Right]` that all common web browsers use.
55
56
57- 2021-07-28
58
59  - Added a "Locate" button to the new _File Age Statistics_ view, using the
60    same window as the actions from the "Discover" menu.
61
62    This is enabled if there are no more than 1000 files in the currently
63    selected year to avoid the results list to become too long and too
64    unwieldy. If there are more than 1000 files in the currently selected year,
65    break it down to another subdirectory first; otherwise you'd be ending up
66    with the better part of the whole filesystem in the results list in the
67    extreme case.
68
69- 2021-07-27
70
71  - Added a whole new type of view: _File Age Statistics_, displaying file
72    modification times by years, so you can see during what time frame there
73    was any activity in a directory tree:
74
75    [<img width="700" src="https://user-images.githubusercontent.com/11538225/127198386-215ecc9a-325c-4954-afef-e1d7f271c013.png">](https://user-images.githubusercontent.com/11538225/127198386-215ecc9a-325c-4954-afef-e1d7f271c013.png)
76
77    More details and a lot more screenshots at [GitHub issue #172](https://github.com/shundhammer/qdirstat/issues/172).
78
79
80- 2021-07-02
81
82  - Don't show inactive (unmounted) mounts managed by the automounter anymore
83    in the "Mounted Filesystems" window. They were listed there as filesystem
84    type "autofs" and 0 bytes total size which was not very useful.
85
86    Once they become auto-mounted by a user accessing them in the filesystem,
87    they are shown there normally, of course.
88
89
90- 2021-06-26
91
92  - Improved the fix for [GitHub issue #169](https://github.com/shundhammer/qdirstat/issues/169):
93    Breadcrumbs navigator becomes too wide for very long paths.
94
95    Now no longer aggressively shortening all path components in the
96    breadcrumbs navigator when the complete path becomes even just a little bit
97    too long, but concentrating on the longest parts and shortening them one by
98    one until the complete path is not too long anymore.
99
100
101- 2021-06-24
102
103  - First (crude) fix for [GitHub issue #169](https://github.com/shundhammer/qdirstat/issues/169):
104    Breadcrumbs navigator becomes too wide for very long paths.
105    Now shortening path components if the overall path would become too wide.
106    Right now it shortens them a bit too aggressively.
107
108- 2021-06-21 [QDirStat AppImage and why I don't like it](https://github.com/shundhammer/qdirstat/issues/168)
109
110    TL;DR:
111    - It's big and fat (113 MB)
112    - It's an outdated version (QDirStat 1.6.1 from 16 months ago)
113    - It doesn't even tell you what version it contains
114    - It still needs a fairly recent version of GLibc, so you can't run it on Ubuntu 18.04 LTS
115    - It's unclear if at least the libraries inside (e.g. the Qt libs) are up to date
116
117------------
118
119
120- 2021-04-05 **New stable release: 1.7.1**
121
122  **Summary:**
123
124  - Added a "Discover" toplevel menu with actions to easily find
125    - the largest files
126    - the newest files
127    - the oldest files
128    - files with multiple hard links
129    - broken symbolic links
130    - sparse files
131
132  - Now showing the target of symbolic links in the details panel.
133    If the target does not exist, a **Broken Link** warning is also shown.
134
135  - Menu reorganization. The new toplevel menus are now:
136
137    File, Edit, View, Go To, Discover, Clean up, Help
138
139  - Enabled _Refresh Selected_ now for files as well. In that case, the parent
140    directory is refreshed.
141
142  - Added hotkey `[F6]` for _Refresh Selected_.
143
144  - Now ignoring the loopback mounts of installed snap packages in the "Open
145    Directory" dialog and in the "Mounted Filesystems" window.
146
147  - Added links to external documents to a new "Problems and Solutions" submenu
148    of the "Help" menu so they are more easily discoverable.
149
150  - Added a document about
151    [finding files that are shadowed by a mount](doc/Shadowed-by-Mount.md)
152    and a script for the most common case.
153
154  - Bug fix: Fixed [GitHub Issue #149](https://github.com/shundhammer/qdirstat/issues/149):
155
156    Segfault when using a cleanup action with refresh policy _AssumeDeleted_
157    after a cleanup action with _RefreshParent_ in the same directory.
158
159
160  **Details:**
161
162  - Added a "Discover" toplevel menu with actions to easily find
163    - the largest files
164    - the newest files
165    - the oldest files
166    - files with multiple hard links
167    - broken symbolic links
168    - sparse files
169
170    in the whole displayed directory tree or, if a directory is selected, in
171    that subtree.
172
173    In each case, a non-modal dialog is opened with a list of the results.
174    Clicking on one of them selects it in the main window where you can see
175    more details and use cleanup actions.
176
177    [<img width="750" src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-discover.png">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-discover.png)
178
179    Most of that was already there in some way or the other, but now it's
180    easier to discover (pun intended) and to use.
181
182    Finding large files is of course what the treemap is primarily for; just
183    spot large blobs and click on them to find out what they are and where they
184    are hiding.
185
186    Finding the newest files can also be done by sorting the tree by the "last
187    modified" column and then opening the topmost branches. This is often
188    useful to find out where some browser dumped that last download.
189
190    Similarly, to find the oldest files, enable the "oldest files" tree column,
191    sort by that and open branches until you can see a file.
192
193    Files with multiple hard links or sparse files were mentioned in the log;
194    otherwise they were not so easy to find (short of using the command line,
195    of course).
196
197
198  - Now showing the target of symbolic links in the details panel.
199
200    If it's a short path, the whole path is shown; otherwise without the path
201    (".../somewhere"), and the full path is shown as a pop-up upon mouse click.
202
203    If the target does not exist, a **Broken Link** warning is also shown.
204
205
206  - Menu reorganization: They had become a little too crowded, especially on
207    the top level.
208
209    - The new toplevel menus are now:
210
211      File, Edit, View, Go To, Discover, Clean up, Help
212
213      I.e. it's down to 7 items which is generally regarded as the gold
214      standard by usability experts.
215
216    - The former "Settings" menu is gone; "Configure QDirStat" is now in the
217      "Edit" menu. There was only that one action in the "Settings" menu, and
218      that is quite wasteful in terms of screen space and toplevel menu
219      complexity.
220
221    - Moved out some options entirely from the menus; they are still available
222      when editing the config file manually:
223
224      - "Show current path"
225      - "Treemap as side panel"
226
227    - "Expand tree level" is now limited to level 5 (formerly 9). Opening that
228      many tree branches means a huge performance drop anyway.
229
230    - The former "Treemap" menu is now a submenu of "View". Most of those
231      actions are available as tool bar buttons and mouse wheel operations
232      anyway.
233
234
235  - Enabled _Refresh Selected_ now for files as well. In that case, the parent
236    directory is refreshed.
237
238  - Added hotkey `[F6]` for _Refresh Selected_.
239
240    `[F5]` is still _Refresh All_ like in all web browsers. Since window
241    managers / desktop environments tend to consume `[F5]` with modifier keys
242    (`[Shift] [F5]`, `[Alt] [F5]`, `[Ctrl] [F5]`), this is the closest we can
243    get, and it's more consistent than using something like `[Ctrl] [R]`.
244
245    This was inspired by the discussion in [PR#145](https://github.com/shundhammer/qdirstat/pull/145).
246
247  - Now ignoring the loopback mounts of installed snap packages in the "Open
248    Directory" dialog and in the "Mounted Filesystems" window.
249
250    Yes, each of them has a separate loop mount, even if it's only installed,
251    not in active use. Those mounts clutter the output of commands like `df` or
252    `mount` with nonsensical cruft:
253
254    ```
255    df -hT | grep snap
256
257    /dev/loop0  squashfs  159M  159M  0 100% /snap/chromium/1244
258    /dev/loop1  squashfs   55M   55M  0 100% /snap/core18/1880
259    /dev/loop2  squashfs   63M   63M  0 100% /snap/gtk-common-themes/1506
260    /dev/loop3  squashfs   30M   30M  0 100% /snap/snapd/8542
261
262    ```
263
264    (From a freshly installed Xubuntu 20.04 LTS)
265
266
267
268  - Added links to external documents to a new "Problems and Solutions" submenu
269    of the "Help" menu so they are more easily discoverable.
270
271  - Added a document about
272    [finding files that are shadowed by a mount](doc/Shadowed-by-Mount.md)
273    and a script for the most common case.
274
275  - Bug fix: Fixed [GitHub Issue #149](https://github.com/shundhammer/qdirstat/issues/149):
276
277    Segfault when using a cleanup action with refresh policy _AssumeDeleted_
278    after a cleanup action with _RefreshParent_ in the same directory.
279
280----------
281
282
283- 2021-03-24
284
285  - New document about [finding files that are shadowed by a mount](doc/Shadowed-by-Mount.md)
286
287  - New script for finding files on the root filesystem that are shadowed by a
288    mount (see doc link above).
289
290
291- 2021-03-19
292
293  - Added a context menu to the "Locate Files" window (the "Discover" results)
294    with the cleanup actions that are applicable to files.
295
296  - Keyboard shortcuts for cleanups now also work in the "Locate Files" window.
297
298
299- 2020-12-21
300
301  - Fixed [GitHub Issue #149](https://github.com/shundhammer/qdirstat/issues/149):
302    Segfault when using a cleanup action with refresh policy _AssumeDeleted_ after
303    a cleanup action with _RefreshParent_ in the same directory.
304
305
306- 2020-11-23
307
308  - Menu reorganization: They had become a little too crowded, especially on
309    the top level.
310
311    - Moved out some options from the menus; they are still available when
312      editing the config file manually:
313
314      - "Show current path"
315      - "Treemap as side panel"
316
317    - "Expand tree level" is now limited to level 5 (formerly 9). Opening that
318      many tree branches means a huge performance drop anyway.
319
320    - The former "Treemap" menu is now a submenu of "View". Most of those
321      actions are available as tool bar buttons and mouse wheel operations
322      anyway.
323
324    - The former "Settings" menu is gone; "Configure QDirStat" is now in the
325      "Edit" menu. There was only that one action in the "Settings" menu, and
326      that is quite wasteful in terms of screen space and toplevel menu
327      complexity.
328
329      I experimented shortly with moving some more settings there, e.g. "Show
330      details panel" and "Show tremap", but I reverted that: The details panel
331      is different for each layout (L1, L2, L3), and the layout switching
332      actions are in the "View" menu where they belong; so "Show details panel"
333      should really remain near them. And not having "Show treemap" in the
334      "Treemap" submenu would be very confusing.
335
336    The new toplevel menus are now:
337
338    - File
339    - Edit
340    - View
341    - Go To
342    - Discover
343    - Clean up
344    - Help
345
346    I.e. it's down to 7 items which is generally regarded as the gold standard
347    by usability experts.
348
349    I am not completely happy yet with how additional views are scattered among
350    several menus:
351
352    - "File" -> "Show installed packages"
353    - "File" -> "Show unpackaged files"
354    - "View" -> "File size statistics"
355    - "View" -> "File type statistics"
356    - "View" -> "Show mounted filesystems"
357
358    The rationale is that those views in the "File" menu load completely new
359    content, replacing the scanned directory in both the tree view and the
360    treemap; thus they are on a similar level as "Open directory", so they are
361    right next to that action.
362
363    The other views open in separate windows, so they are add-on views to the
364    currently loaded directory tree.
365
366
367- 2020-11-22
368
369  - Added a "Discover" toplevel menu to easily find
370    - the largest files
371    - the newest files
372    - the oldest files
373    - files with multiple hard links
374    - broken symbolic links
375    - sparse files
376
377    in the whole displayed directory tree or, if a directory is selected, in
378    that subtree.
379
380    In each case, a non-modal dialog is opened with a list of the results.
381    Clicking on one of them selects it in the main window where you can see
382    more details and use cleanup actions.
383
384    [<img width="750" src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-discover.png">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-discover.png)
385
386    Most of that was already there in some way or the other, but now it's
387    easier to discover (pun intended) and to use.
388
389    Finding large files is of course what the treemap is primarily for; just
390    spot large blobs and click on them to find out what they are and where they
391    are hiding.
392
393    Finding the newest files can also be done by sorting the tree by the "last
394    modified" column and then opening the topmost branches. This is often
395    useful to find out where some browser dumped that last download.
396
397    Similarly, to find the oldest files, enable the "oldest files" tree column,
398    sort by that and open branches until you can see a file.
399
400    Files with multiple hard links or sparse files were mentioned in the log;
401    otherwise they were not so easy to find (short of using the command line,
402    of course).
403
404
405- 2020-10-23
406
407  - Now showing the target of symbolic links in the details panel.
408
409    If it's a short path, the whole path is shown; otherwise without the path
410    (".../somewhere"), and the full path is shown as a pop-up upon mouse click.
411
412    If the target does not exist, a **Broken Link** warning is also shown.
413
414- 2020-10-15
415
416  - Enabled _Refresh Selected_ now for files as well. In that case, the parent
417    directory is refreshed.
418
419  - Added hotkey `[F6]` for _Refresh Selected_.
420
421    `[F5]` is still _Refresh All_ like in all web browsers. Since window
422    managers / desktop environments tend to consume `[F5]` with modifier keys
423    (`[Shift] [F5]`, `[Alt] [F5]`, `[Ctrl] [F5]`), this is the closest we can
424    get, and it's more consistent than using something like `[Ctrl] [R]`.
425
426    This was inspired by the discussion in [PR#145](https://github.com/shundhammer/qdirstat/pull/145).
427
428- 2020-08-03
429
430  - Now ignoring the loopback mounts of installed snap packages in the "Open
431    Directory" dialog and in the "Mounted Filesystems" window.
432
433    Yes, each of them has a separate loop mount, even if it's only installed,
434    not in active use. Those mounts clutter the output of commands like `df` or
435    `mount` with nonsensical cruft:
436
437    ```
438    df -hT | grep snap
439
440    /dev/loop0  squashfs  159M  159M  0 100% /snap/chromium/1244
441    /dev/loop1  squashfs   55M   55M  0 100% /snap/core18/1880
442    /dev/loop2  squashfs   63M   63M  0 100% /snap/gtk-common-themes/1506
443    /dev/loop3  squashfs   30M   30M  0 100% /snap/snapd/8542
444
445    ```
446
447    (From a freshly installed Xubuntu 20.04 LTS)
448
449    Thanks a lot. Time to extend my `df` shell alias to exclude filesystem type
450    "squashfs", too:
451
452    ```
453    alias df='/bin/df -x tmpfs -x devtmpfs -x squashfs -h $*'
454    ```
455
456------------
457
458- 2020-07-26 **New stable release: 1.7**
459
460  **Summary:**
461
462  - Closing the gap between sizes reported by QDirstat and sizes reported by
463    the `du` command: Now also taking the allocated size into account.
464
465  - Now also displaying the allocated size where it makes sense.
466
467  - New "Mounted Filesystems" window showing output similar to the `df` command
468    (but without the cruft).
469
470  - New directory selection dialog showing all (real) filesystems.
471
472  - New checkbox to cross filesystems (temporarily) in the directory selection
473    dialog.
474
475  - Workaround for NTFS oddities: Ignoring hard links on NTFS.
476
477  - Added config option to ignore hard links in general.
478
479  - Added a document about Btrfs free size and how different tools tend to show
480    different values: [Btrfs-Free-Size.md](doc/Btrfs-Free-Size.md)
481
482  - Bug fixes
483
484
485  **Details:**
486
487  - Closing the gap between sizes reported by QDirstat and sizes reported by
488    the `du` command: Now also taking the allocated size into account.
489
490    There were repeated threads on various social media where users wondered
491    why QDirStat displayed different sizes than the `du` or the `df` commands,
492    sometimes slightly different, sometimes off by quite a lot.
493
494    In short, this is mostly due to the difference between a file's _byte size_
495    and its _allocated blocks_: On most filesystem types, a file of 49 bytes
496    still consumes a minimum of 4 KB (4096 bytes); disk space is allocated in
497    _clusters_ (typically 4 KB), not byte by byte. On a typical Linux root
498    filesystem with many thousands of tiny files, this difference can add up to
499    a lot.
500
501    Formerly, QDirStat only added up the _byte sizes_, disregarding the
502    allocated, but really unused part at the end of tiny files. The rationale
503    was that some filesystem types handle that in more intelligent ways, yet
504    there is no documented way to get information from a filesystem if it
505    actually does that. It turned out that in reality, most of them don't
506    bother; they simply let most of that last cluster go to waste.
507
508    Now QDirStat displays _both_ sizes where useful:
509
510    [<img width="845" src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-tiny-files.png">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-tiny-files.png)
511
512    - For tiny files, the tree view now shows both sizes: "49 B (4k)"
513
514    - For directories, the tree view now shows the total of the _allocated_
515      sizes. This may sound a bit inconsistent, but it feels very natural and
516      intuitive: You are typically interested in how much disk space the
517      subtree consumes, no matter if some part of that is really wasted.
518
519    - The _details_ view shows both sizes when there is a difference (in the
520      displayed numeric precision): "Size: 42.1 MB" vs. "Allocated: 42.2 MB",
521      but not "Size: 42.0 MB" vs. "Allocated: 42.0 MB".
522
523    - Treemap tiles now correspond to a file's _allocated_ size. This makes a
524      real difference for tiny files.
525
526    More details at [GitHub Issue #134](https://github.com/shundhammer/qdirstat/issues/134):
527    _Size Difference between QDirStat Reports and the "du" and "df" Commands_.
528
529
530  - New "Mounted Filesystems" window ("View" -> "Show Mounted Filesystems" or
531    Ctrl-M):
532
533    [<img width="611" src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-filesystems-window.png">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-filesystems-window.png)
534
535    This shows information about "normal" mounted filesystems (excluding system
536    mounts like `/dev`, `/proc`, `/sys`, bind mounts, Btrfs subvolumes) with
537    usage data as reported by the filesystem itself. The "Reserved" column
538    shows the disk space reserved for the root user on that filesystem, "Free"
539    is the available space for non-privileged users.
540
541    Sometimes the "Used" size reported here may be different from what QDirStat
542    reports after reading that complete filesystem; this can be due to
543    metadata, journals or snapshots. Notice that in those cases, the `du`
544    command will also display a different value than the `df` command.
545
546
547  - QDirStat now has its own custom directory selection dialog; it no longer
548    uses one of the simplistic Qt standard file dialogs:
549
550    [<img width="498" src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-open-dir-dialog.png">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-open-dir-dialog.png)
551
552    The "Places" bar on the left shows your home directory and all "real"
553    filesystems (the same as in the new "Mounted Filesystems" window). For each
554    filesystem, it shows
555
556    - The mount point
557    - The total size of the filesystem
558    - The filesystem type ("ext4", "btrfs", "ntfs", ...)
559    - The device name ("/dev/sda2") (in a tooltip)
560
561    In the "Path" combo box you can simply edit the path or copy and paste it
562    from another window. Use the "Up" button to move one directory level up.
563
564  - The "Cross Filesystems" checkbox lets you temporarily override the global
565    configuration option of the same name: QDirStat will then no longer stop
566    when a mount point is found during reading a subtree, it will descend into
567    that mounted filesystem and read it, too; but again, only for "real"
568    filesystems, not for system mounts such as `/dev`, `/sys`, `/proc`, not for
569    bind mounts, not for filesystems mounted multiple times, and not for
570    network mounts (NFS, Samba / CIFS).
571
572    More details at [GitHub Issue #129](https://github.com/shundhammer/qdirstat/issues/129).
573
574
575  - Added a workaround for wrong size sums on NTFS: Now disregarding hard links
576    on NTFS.
577
578    The (current?) _ntfs-3g_ implementation using _fuseblk_ seems to disagree
579    with Windows tools which files really have hard links.
580
581    It appears that _ntfs-3g_ regards even the MS-DOS compatible short filename
582    (`PROGRA~2` vs. `Program Files`) as a hard link which is of course utter
583    nonsense; that means that almost all files on an NTFS partition are
584    reported as having multiple hard links, so QDirStat displayed them as
585    having only half their real size.
586
587    Notice that this is a bug in _ntfs-3g_, not in QDirStat.
588
589    See also [GitHub Issue #88](https://github.com/shundhammer/qdirstat/issues/88).
590
591
592  - <summary>
593    Added a config option to ignore hard links.
594    </summary>
595
596     <details>
597
598     This is useful for a very small number of use cases. Hard links are not
599     very common anymore in today's Linux / BSD / Unix-like systems, so most
600     users won't have to bother with this at all.
601
602     By default, QDirStat sums up the disk space for a file with multiple hard
603     links for each hard link's share of the overall size: If a file with 1 MB
604     has 4 hard links, for each of those 4 links QDirStat adds 1/4 of the size
605     (i.e., 256 kB) to the parent directory. If all those 4 links are in the
606     same directory, that's very simple: They add up to 4 * 256 kB = 1 MB, so
607     the sum is correct.
608
609     If those hard links are all in different directories, each directory only
610     gets part of that disk space allocated, because in fact they share the disk
611     space among each other; the total disk space sum taking all those
612     directories into account is still correct, of course.
613
614     The trouble starts when you want to make a backup of only one of those
615     directories: Even though the disk space is still shared with other
616     directories, on the backup medium, you still need the disk space for that
617     complete file, i.e. the full 1 MB, not only that directory's share (256
618     kB). With a lot of hard-linked files, that can add up to a lot of
619     difference between what QDirStat displays and what disk space you actually
620     need for the backup.
621
622     There was a user who makes heavy use of that, and for that kind of use case
623     there is now the option to ignore hard links: In that case, QDirStat sums
624     up the complete size (the full 1 MB) for each hard link of the file.
625
626     While that is useful for this special case, and you can now see the total
627     size that you will need for your backup medium for that one directory, the
628     total size higher up in the directory tree where more than one of those
629     directories that share hard linked files with each other is off: That file
630     now appears 4 times with 1 MB each, so it will add up to 4 MB.
631
632     There is now a new config option in `~/.config/QDirStat/QDirStat.conf`:
633
634     ```ini
635     [DirectoryTree]
636     ...
637     IgnoreHardLinks=false
638     ```
639
640     This is intentionally not available in the GUI config dialog to avoid
641     confusion; use a text editor (while QDirStat is not running) to change
642     this setting.
643
644     Please use that config option only when you are aware of the consequences;
645     this is a specialized option for rare, specialized use cases. It basically
646     makes sense only if the other hard links are all outside the subtree that
647     QDirStat displays.
648
649     More details at [GitHub Issue #124](https://github.com/shundhammer/qdirstat/issues/124).
650     </details>
651
652
653  - There is now a new document about Btrfs free size and how different tools
654    tend to show different values: [Btrfs-Free-Size.md](doc/Btrfs-Free-Size.md)
655
656    Whenever users run out of disk space on Btrfs (which happens a lot, mostly
657    because of snapshots) and they try to figure out where all their disk space
658    went, they are confused about different tools reporting totally different
659    and inconsistent sizes; traditional Linux / Unix command line tools like
660    `du` and `df` just like GUI tools like QDirStat. Hopefully, this document
661    will shed some light on that.
662
663
664  **Bug Fixes:**
665
666  - Fixed the internal cache writer (the one called from the _File_ menu, not
667    the _qdirstat-cache-writer_ Perl script): For files with multiple hard
668    links, it wrote the wrong size to the cache file: The result of _size /
669    links_, not _size_.
670
671    This was part of [GitHub Issue #124](https://github.com/shundhammer/qdirstat/issues/124).
672
673  - Fixed crash when terminating with Ctrl-Q while reading directories
674    [(GitHub Issue #122)](https://github.com/shundhammer/qdirstat/issues/122).
675
676  - Now automatically reopening the old current branch in the tree view when
677    using actions like "refresh selected" and "continue reading at mount point
678    ([GitHub Issue #135](https://github.com/shundhammer/qdirstat/issues/135)).
679
680  - Not a bug, but a minor new feature: Now automatically expanding the first
681    directory level of a mount point after "continue reading at mount point".
682
683  - Now correctly labelling a mount point as mount point in the "Details"
684    panel.
685
686------------------
687
688- 2020-06-14
689
690  - Now displaying the allocated size for very small files (8 kB (2 clusters)
691    or less) in a much more subdued way so it's still there, but less
692    distracting.
693
694
695  - If a file is wasting very much space (i.e. if it uses 33% or less of its
696    allocated disk space), now displaying the allocated size in bold in the
697    "Details" panel to draw more attention to the fact. This affects pretty
698    much all tiny files with 1360 bytes or less since the cluster size of most
699    (all?) Linux filesystem is so large (4 kB for ext4, XFS, Btrfs).
700
701  Screenshot for both changes at [GitHub Issue #134](https://github.com/shundhammer/qdirstat/issues/134).
702
703
704- 2020-06-13
705
706  - Now automatically reopening the old current branch in the tree view when
707    using actions like "refresh selected" and "continue reading at mount point
708    ([GitHub Issue #135](https://github.com/shundhammer/qdirstat/issues/135)).
709
710  - Now automatically expanding the first directory level of a mount point
711    after "continue reading at mount point".
712
713  - Now correctly labelling a mount point as mount point in the "Details"
714    panel.
715
716
717- 2020-06-12
718
719  - NTFS is now detected as "ntfs", no longer as "fuseblk" in the "Open
720    Directory" and the "Filesystems" dialogs.
721
722    This was fallout of
723    [GitHub Issue #88](https://github.com/shundhammer/qdirstat/issues/88)
724    (NTFS hard links).
725
726  - Now ignoring hard links on NTFS; the (current?) ntfs-3g implementation
727    using fuseblk seems to disagree with Windows tools which files really have
728    hard links. And in this case I tend to have more faith in the Windows
729    tools. Now the total sizes of my Windows partitions as reported by QDirStat
730    are much closer to the sizes reported by the `df` command, the `statfs()`
731    system call and QDirStat's new "Filesystems" window.
732
733    See also [GitHub Issue #88](https://github.com/shundhammer/qdirstat/issues/88).
734
735
736- 2020-06-11
737
738  - Fixed [GitHub Issue #134](https://github.com/shundhammer/qdirstat/issues/134):
739    _Size Difference between QDirStat Reports and the "du" and "df" Commands_:
740
741    - Now also showing the _allocated_ size in the details panel for files and
742      directory trees. This can make a a big difference if there are lots of tiny files.
743
744    - Now showing the _allocated_ size for directories in the tree view, not
745      only the sum of all the _byte_ sizes of all the files in the subtree.
746
747    - Now using the _allocated_ size in the treemap so tiny files appear with
748      their true size, no longer disappearing in the grey background: A 6 bytes
749      file is now displayed with the 4 KB that it actually consumes, not just
750      the 6 bytes of its content.
751
752    More information and lots of screenshots at
753    [GitHub Issue #134](https://github.com/shundhammer/qdirstat/issues/134).
754
755
756- 2020-06-03
757
758  - New "Mounted Filesystems" window ("View" -> "Show Mounted Filesystems" or
759    Ctrl-M):
760
761    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-filesystems-window.png">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-filesystems-window.png)
762
763    This shows information about "normal" mounted filesystems (excluding system
764    mounts like /dev, /proc, /sys, bind mounts, Btrfs subvolumes) with usage
765    data as reported by the filesystem itself. The "Reserved" column shows the
766    disk space reserved for the root user on that filesystem, "Free" is the
767    available space for non-privileged users.
768
769    Sometimes the "Used" size reported here may be quite different from what
770    QDirStat reports after reading that complete filesystem; this can be due to
771    metadata, journals or snapshots.
772
773  - Added a document about Btrfs free size and how different tools tend to show
774    different values: [Btrfs-Free-Size.md](doc/Btrfs-Free-Size.md)
775
776
777
778- 2020-05-27
779
780  - Implemented [GitHub Issue #129](https://github.com/shundhammer/qdirstat/issues/129):
781    _Option to continue reading at all mount points at once_.
782
783    Previously, you could choose to either always cross filesystems while
784    reading directories, or you could later open the parent branch of the mount
785    point in the tree view and then use "Continue reading at mount point" from
786    the main menu / context menu.
787
788    Now you can change this setting temporarily for the current program run; it
789    will continue reading at "normal" mount points, i.e. excluding system
790    mounts like `/dev`, `/proc`, `/sys` and also bind mounts or network mounts; but
791    it still reads Btrfs subvolumes.
792
793  - This new option needed a check box in the "Open Directory" dialog; so from
794    now on, QDirStat no longer uses the generic Qt file dialog, it has a custom
795    one:
796
797    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-open-dir-dialog.png">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-open-dir-dialog.png)
798
799    In addition to that new check box at the bottom, there is now also a new
800    "places" widget for quick access to the user's home directory and all
801    ("normal", see above) mounted filesystems, including network mounts (NFS,
802    Samba / Cifs).
803
804
805- 2020-03-19
806
807  - Added a config option to ignore hard links.
808
809    This is useful for a very small number of use cases. Hard links are not
810    very common anymore in today's Linux / BSD / Unix-like systems, so most
811    users won't have to bother with this at all.
812
813    By default, QDirStat sums up the disk space for a file with multiple hard
814    links for each hard link's share of the overall size: If a file with 1 MB
815    has 4 hard links, for each of those 4 links QDirStat adds 1/4 of the size
816    (i.e., 256 kB) to the parent directory. If all those 4 links are in the
817    same directory, that's very simple: They add up to 4 * 256 kB = 1 MB, so
818    the sum is correct.
819
820    If those hard links are all in different directories, each directory only
821    gets part of that disk space allocated, because in fact they share the disk
822    space among each other; the total disk space sum taking all those
823    directories into account is still correct, of course.
824
825    The trouble starts when you want to make a backup of only one of those
826    directories: Even though the disk space is still shared with other
827    directories, on the backup medium, you still need the disk space for that
828    complete file, i.e. the full 1 MB, not only that directory's share (256
829    kB). With a lot of hard-linked files, that can add up to a lot of
830    difference between what QDirStat displays and what disk space you actually
831    need for the backup.
832
833    There was a user who makes heavy use of that, and for that kind of use case
834    there is now the option to ignore hard links: In that case, QDirStat sums
835    up the complete size (the full 1 MB) for each hard link of the file.
836
837    While that is useful for this special case, and you can now see the total
838    size that you will need for your backup medium for that one directory, the
839    total size higher up in the directory tree where more than one of those
840    directories that share hard linked files with each other is off: That file
841    now appears 4 times with 1 MB each, so it will add up to 4 MB.
842
843    So please use that config option only when you are aware of the
844    consequences; this is a specialized option for rare, specialized use
845    cases. It basically makes sense only if the other hard links are all
846    outside the subtree that QDirStat displays.
847
848    If in doubt, leave this option off (which is the default).
849
850    More details at [GitHub Issue #124](https://github.com/shundhammer/qdirstat/issues/124).
851
852
853- 2020-03-06
854
855  - Fixed the internal cache writer (the one called from the _File_ menu, not
856    the _qdirstat-cache-writer_ Perl script): For files with multiple hard
857    links, it wrote the wrong size to the cache file: The result of _size /
858    links_, not _size_.
859
860    This was part of [GitHub Issue #124](https://github.com/shundhammer/qdirstat/issues/124).
861
862- 2020-02-24
863
864  - Fixed crash when terminating with Ctrl-Q while reading directories
865    [(GitHub Issue #122)](https://github.com/shundhammer/qdirstat/issues/122).
866
867
868--------------
869
870
871- 2020-02-13 **New stable release: 1.6.1**
872
873  **Summary:**
874
875  - Much better handling for "permission denied" errors while reading directories
876
877  - Now showing the exact byte size (134 495 994 Bytes instead of 128.3 MB)
878    upon mouse click in the tree (right click) and in the details panel (left
879    or right click)
880
881  - New optional tree column "Oldest File" (not enabled by default)
882
883  - Bug fix: Support for dark widget themes in file size histogram window
884
885
886  **Details:**
887
888  - If you start QDirStat with insufficient permissions, you could easily
889    overlook large subtrees in the filesystem that consume disk space, but were
890    not visible to you. They did get a special icon, but you would have to open
891    the parent directory in the tree view to see that.
892
893    Now, QDirStat notifies you in several ways:
894
895    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-err-dirs-light.png" height="300">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-err-dirs-light.png)
896
897    - All parent directories that contain a subtree that could not be read are
898      now displayed in dark red in the tree view.
899
900    - The _Size_ field of those directories as well as other accumulated values
901      (_Items_, _Files_, _Subdirs_) are now preceded with a "greater than" sign
902      to indicate that there is most likely more, but that information could
903      not be retrieved: ">7.2 MB" indicating that it's at least 7.2 MB and most
904      likely more than that, but we don't know because one or more
905      subdirectories could not be read.
906
907    - A message panel in the main window between the tree view and the treemap
908      with a message that some directories could not be read.
909
910      You can close the message with the `[x]` close button on its right side,
911      but you can also simply leave it open. This is a lot less obtrusive than
912      a pop-up dialog, yet less temporary than a message in the bottom status
913      line that will disappear in a few seconds or when anything else is
914      reported.
915
916    - Clicking on the "Details..." link in that message opens a separate window
917      to report all directories that could not be read (typically because of
918      insufficient permissions).
919
920      This window is non-modal, i.e. you can still interact with the main
921      window when it is open. Click on any directory that it lists to locate it
922      in the main window: The tree view will open that branch and scroll to
923      make it visible.
924
925      [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-unreadable-dirs-window.png" height="300">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-unreadable-dirs-window.png)
926
927    - In addition to the "locked folder" icon, unreadable directories are shown
928      in bright red in the tree view.
929
930    - When an unreadable directory is selected in the tree view, the details
931      panel now shows a large padlock icon and a message "[Permission Denied]",
932      and the permissions are highlighted in red.
933
934  - You can now see the exact size in bytes both in the tree view and in the
935    details panel: 134 495 994 Bytes instead of 128.3 MB. The field is still
936    (somewhat) human readable with thousands separators (using blanks to avoid
937    confusion with different decimal / thousands separators in different
938    languages).
939
940    This can make it easier to compare sizes with other tools that report them
941    in bytes or that insist in using 1000-based units (QDirStat uses 1024-based
942    size units: 1 kB = 1024 Bytes; 1 MB = 1024 kB; 1 GB = 1024 MB; etc.).
943
944    Not using tool tips that appear automatically was a conscious decision:
945    This level of detailed information is not needed that often, and tool tips
946    get in the way whenever the mouse cursor lingers too long at an active
947    spot. More often than not a tool tip obscurs other content that the user
948    might want to read at that very moment. This is why in QDirStat in the rare
949    cases that you are interested in those exact numbers, you have to click:
950
951    - In the tree view, right-click a size field (a left click is used for
952      selecting an item in tree views, so the context menu is pressed into
953      service for that purpose (only for the size column)).
954
955      [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-byte-size.png" height="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-byte-size.png)
956
957    - In the details panel, use left or right click. To indicate what fields
958      can be clicked, they are now underlined when the mouse hovers over them.
959
960      [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-byte-size-2a.png" height="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-byte-size-2a.png)
961
962      _Hovering over fields that can be clicked shows them underlined, very
963      much like a hyperlink._
964
965      [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-byte-size-2b.png" height="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-byte-size-2b.png)
966
967      _Clicking (left or right mouse button) shows more details: In this case,
968      the exact byte size._
969
970  - There is now an optional new column "Oldest File" that shows the timestamp
971    (the mtime) of the oldest file in a subtree.  This is strictly about files;
972    directories, symlinks and special files (block or character devices, FIFOs
973    etc.) are ignored for this.
974
975    This may be useful to spot some old cruft, for example leftover dot files
976    in your home directory. Many programs generate such files when you start
977    them for the first time, and they are rarely cleaned up when they fall out
978    of use.
979
980    Notice that this column is not enabled by default. If you would like to use
981    it, switch to layout L2 or L3, right-click the tree header to open the
982    columns context menu, select _Hidden Columns_, then _Show Column "Oldest
983    File"_.
984
985    Of course you can also sort by this column to see the oldest files first
986    (or last).
987
988  - Fixed text color in histogram in dark widget themes
989    [(GitHub Issue #117)](https://github.com/shundhammer/qdirstat/issues/117).
990
991
992--------------------
993
994
995- 2020-02-12
996
997  - Fine-tuned error handling: If there is a "permission denied" error while
998    reading a directory, this will now be shown much more clearly: There is now
999    a clear distinction between "permission denied" any other generic "read
1000    error".
1001
1002  - For directories that could not be read because of insufficient permissions,
1003    now also showing an additional "locked" icon in the details panel, and
1004    coloring the permissions field in red to point to the cause of the problem.
1005
1006    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-unreadable-dirs-window.png" height="300">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-unreadable-dirs-window.png)
1007
1008    This color can be configured in `~/.config/QDirStat/QDirStat.conf`:
1009
1010        [DetailsPanel]
1011        DirReadErrColor=#ff0000
1012
1013- 2020-02-11
1014
1015  - Now also showing the exact byte size of all size fields (of 1 kB and above)
1016    upon click in the "Details" panel.  All clickable fields there are now
1017    underlined just like a hyperlink when the mouse hovers above them.
1018
1019    I thought long and hard about using tool tips for that, but tool tips have
1020    a nasty habit of getting in the way and obscuring other information that
1021    the user might want to read; so I decided to use explicit mouse clicks.
1022
1023    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-byte-size-2a.png">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-byte-size-2a.png)
1024
1025    _Hovering over fields that can be clicked shows them underlined, very much
1026    like a hyperlink._
1027
1028    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-byte-size-2b.png">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-byte-size-2b.png)
1029
1030   _Clicking (left or right mouse button) shows more details: In this case, the
1031   exact byte size._
1032
1033
1034
1035- 2019-12-22
1036
1037  - Brought back the exact byte size as the context menu for the "Size" column in the tree:
1038
1039    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-byte-size.png" height="300">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-byte-size.png)
1040
1041    I.e. a right click on the size now shows the exact number of bytes to avoid
1042    confusion between those people who know what a Megabyte or Gigabyte is and
1043    those who introduced the confusion with 1000-based units vs. the good old
1044    1024-based units that everybody in IT uses (including Microsoft everywhere
1045    in all versions of Windows).
1046
1047    _Back in the early days of computing, everything was easy: a Kilobyte was
1048    1024 bytes, a Megabyte was 1024 Kilobytes, and Gigabytes were Science
1049    Fiction. Then some morons came along who insisted on 1000-based units like
1050    everywhere in Physics. And they and the Real Engineers introduced a foul
1051    compromise: Rename 1024-based units to Kibibytes, Mibibytes etc. and
1052    redefine Kilobytes to be 1000 bytes, Megabytes to become 1000 Kilobytes
1053    etc.; since that day there is confusion what is what._
1054
1055    **QDirStat always used and always will use 1024-based units.**
1056
1057
1058- 2019-11-02
1059
1060  - Added a separate window to report all directories that could not be read
1061    (typically because of insufficient permissions). This window is opened only
1062    on request: When the user clicks on the "Details..." link in the panel
1063    message that reports that some directories could not be read.
1064
1065    This window is non-modal, i.e. you can still interact with the main window
1066    when it is open. Click on any directory that it lists to locate it in the
1067    main window.
1068
1069    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-unreadable-dirs-window.png" height="300">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-unreadable-dirs-window.png)
1070
1071  - Directories that could not be read are now also correctly reported in the
1072    unpackaged files view. Since they are empty when they could not be read,
1073    they will always end up in an `<Ignored>` branch which was previously not
1074    taken into account when reporting directories with read errors. This is now
1075    fixed.
1076
1077
1078- 2019-08-24
1079
1080  - If directories could not be read (typically because of insufficient
1081    permissions), now also posting a warning message in a new message panel.
1082
1083    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-err-dirs-light.png" width="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-err-dirs-light.png)
1084    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-err-dirs-dark.png" width="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-err-dirs-dark.png)
1085
1086    You can close the message with the `[x]` close button on its right side,
1087    but you can also simply leave it open. This is a lot less obtrusive than a
1088    pop-up dialog, yet less temporary than a message in the bottom status line
1089    that will disappear in a few seconds or when anything else is reported.
1090
1091    The infrastructure for this enables multiple such messages that can be
1092    closed in any order (or not at all) as the user likes. Each message can
1093    have a "Details..." link (not used in these examples) to provide more
1094    information.
1095
1096
1097- 2019-08-22
1098
1099  - Improved handling for directories that could not be read.
1100
1101    When you run QDirStat as a normal (non-root) user on system directories, it
1102    is very common that you get a "permission denied" error for directories
1103    that contain sensitive information. Such a directory gets a folder icon
1104    with a little lock to indicate that it's locked for you; there is no way to
1105    find out how much disk space it consumes.
1106
1107    Now, such directories are also displayed in a special color (for now bright
1108    red) in the tree. All their parents are now displayed in another (slightly
1109    less obtrusive) color to indicate that you probably don't see the complete
1110    disk space information for that subdirectory.
1111
1112    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-err-dirs-light.png" width="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-err-dirs-light.png)
1113    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-err-dirs-dark.png" width="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-err-dirs-dark.png)
1114
1115    In those examples, The `/etc/ssl/private` directory does not have read
1116    permissions for non-root users; note the icon with the lock and the red
1117    text color.
1118
1119    When you don't open that branch in the tree, you might not realize this;
1120    it's also in the log file, but most users don't read that. So its parent
1121    directories `/etc/ssl` and `/etc` are also displayed in a different color:
1122    Dark red in the light widget theme and yellow in the dark widget theme.
1123
1124    In addition to that, the parent directories now show a `>` prefix for the
1125    size, number of items, number of files, number of subdirs fields to
1126    indicate that there may be more. This is a hint (not only, but also) for
1127    color blind users.
1128
1129
1130- 2019-08-12
1131
1132  - Toned down over-information to reduce clutter:
1133
1134    - No longer showing column "Oldest File" in layout L2 by default.
1135
1136      Of course, you can always re-enable this if you like:
1137      Just switch to layout L2, right-click on the column header to open the
1138      column context menu, then "Hidden Columns" -> "Show Column 'Oldest File'".
1139
1140    - Removed "Oldest File" from the details panel for directories:
1141
1142      I found that this does not contribute any useful information here, yet it
1143      adds to the screen clutter. Information about the oldest file in a
1144      subtree is useful to drill down deeper into the subtree to find it, so
1145      the tree view is much better suited for that; having that information in
1146      the details panel as well does not add any value for that procedure.
1147
1148
1149- 2019-08-03
1150
1151  - Fixed text color in histogram in dark widget themes
1152    [(GitHub Issue #117)](https://github.com/shundhammer/qdirstat/issues/117).
1153
1154- 2019-08-01
1155
1156  - Added a column "Oldest File" that shows the timestamp (the mtime) of the
1157    oldest file in a subtree.  This is strictly about files; directories,
1158    symlinks and special files (block or character devices, FIFOs etc.) are
1159    ignored for this.
1160
1161    This is the first simple approach for
1162    [GitHub Issue #118](https://github.com/shundhammer/qdirstat/issues/118).
1163    (Click for screenshot)
1164
1165    This already helped me to spot some old cruft in my home directory; some
1166    dot directories from ancient versions of flashplayer and whatnot. This
1167    is more helpful than I initially thought.
1168
1169  - Added an entry "Oldest File" that does the same in the details panel for
1170    directories and packages.
1171
1172
1173- 2019-07-22 **New stable release: V1.6**
1174
1175  - Performance improvement while reading directories: On average 25% faster on
1176    normal (non-SSD) disks
1177
1178    See also this article: [Linux Disk Usage Tools Compared: QDirStat
1179    vs. K4DirStat vs. Baobab vs. Filelight vs. ncdu including
1180    benchmarks](https://github.com/shundhammer/qdirstat/issues/97)
1181
1182
1183  - Vast performance improvement for huge directories (with 100.000 entries or
1184    more in a single directory) in the tree view: There is now instant response
1185    for jumping from the first to the last item, dragging the scroll bar or
1186    using the mouse wheel.
1187
1188  - New **packages view**:
1189    QDirStat can now visualize the file lists of installed packages:
1190
1191    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-pkg-details.png" height="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-pkg-details.png)
1192
1193    I.e. files are now grouped by the package they belong to, and in each
1194    subtree only the files that belong to the package are displayed: In this
1195    example, in `/usr/bin` only the `chromium-browser` binary is displayed, not
1196    all the other files in `/usr/bin`. This is intentional.
1197
1198    You can display all installed packages with their file lists (but that
1199    takes a while), or you can select just a subset. Use Menu _File_ -> _Show
1200    Installed Packages_ or start QDirStat with a `pkg:/` command line argument.
1201
1202    As with the other package manager related features, this is supported for
1203    all Linux distributions that use one of _dpkg_, _rpm_ or _pacman_ (or any
1204    higher-level package manager based on any of those like _apt_, _zypper_
1205    etc.).
1206
1207    More details at [Pkg-View.md](doc/Pkg-View.md).
1208
1209
1210  - New **unpackaged files view**:
1211
1212    QDirStat can now visualize the files in system directories that are not
1213    packaged, i.e. that are not part of any file list of any installed software
1214    package.
1215
1216    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-unpkg-usr-share-qt5.png" height="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-unpkg-usr-share-qt5.png)
1217
1218    This can be useful to track down problems after package upgrades or after
1219    manually installing software with `sudo make install`.
1220
1221    This is supported for all Linux distributions that use _dpkg_ or _rpm_ (or
1222    any higher-level package manager based on any of those like _apt_, _zypper_
1223    etc.).
1224
1225    More details at [Unpkg-View.md](doc/Unpkg-View.md).
1226
1227
1228  - New standard cleanup: _Check File Type_. This uses the `file` command to
1229    find out more detailed information what exactly a file is and displays it
1230    in the cleanup output window.
1231
1232    More details, screenshots and how to get it if you already have an existing
1233    QDirStat cleanup configuration file (i.e. if you used QDirStat before):
1234    [GitHub Issue #102](https://github.com/shundhammer/qdirstat/issues/102).
1235
1236  - Implemented [GitHub Issue #90](https://github.com/shundhammer/qdirstat/issues/90):
1237    Support excluding directories containing a file with a specific name or pattern.
1238
1239    Similar to some backup tools, you can now specify an exclude rule that lets
1240    you exclude a directory that contains a file like `.nobackup` or
1241    `.qdirstatexclude`.
1242
1243  - Greatly improved the man page; see `man 1 qdirstat`.
1244
1245  - Some bug fixes.
1246
1247  See also the [release announcement](https://github.com/shundhammer/qdirstat/releases/tag/1.6).
1248
1249--------------------------------------------------
1250
1251
1252- 2019-07-18
1253
1254  - Greatly improved the man page; see `man 1 qdirstat`.
1255
1256    It started with the Debian maintainer of QDirStat asking for a man page
1257    because that's a standard requirement for Debian packages, and he even
1258    wrote the initial one; thanks again, Patrick!.
1259
1260    That initial man page was very concise, and as QDirStat keeps evolving, not
1261    only was there an increasing number of command line options that was not
1262    documented in the man page (but of course when invoking the program with
1263    the `--help` command line option), but it also didn't explain much beyond
1264    the command line arguments.
1265
1266    Now it contains not only the latest set of command line arguments including
1267    syntax and meaning of `pkg:/` and `unpkg:/` URLs, but also some general
1268    information what the program is (including what the treemap is) and how to
1269    use it.
1270
1271
1272- 2019-07-08
1273
1274  New **unpackaged files view**:
1275
1276  QDirStat can now visualize the files in system directories that are not
1277  packaged, i.e. that are not part of any file list of any installed software
1278  package.
1279
1280  This reads the complete file lists first (i.e. all file lists from all
1281  installed packages), then reads the requested directory as usual and puts the
1282  files that are packaged in a special branch `<Ignored>` in the tree view.
1283
1284  Those files are _not_ displayed in the treemap, i.e. the treemap now only
1285  contains unpackaged files.
1286
1287  [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-unpkg-usr-share-qt5.png" height="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-unpkg-usr-share-qt5.png)
1288
1289  **What is this Good For?**
1290
1291  - Recovering a wrecked system after botched upgrades
1292
1293  - Recovering from too much `sudo make install`
1294
1295  - Fixing packaging problems, e.g. find leftover shared libs that tend to get in
1296    the way
1297
1298  - QA for distro release managers, QA engineers, PMs
1299
1300  - Satisfying user curiosity
1301
1302  - _Because we can!_  ;-)
1303
1304  More details at [Unpkg-View.md](doc/Unpkg-View.md).
1305
1306  Comments and questions are welcome at [GitHub Issue #110](https://github.com/shundhammer/qdirstat/issues/110).
1307
1308  If you have a genuine problem with the new feature, please open a separate
1309  issue so it can be tracked properly.
1310
1311
1312
1313- 2019-06-16
1314
1315  - Added [documentation for the _pkg-tools_ scripts](scripts/pkg-tools/README.md).
1316
1317    In short, they can be used to see unpackaged files on a system that uses
1318    one of the supported package managers (_dpkg_, _rpm_, _pacman_), but it's a
1319    bit of a clunky solution, so this is meant for advanced users only.
1320
1321    ~~With a little bit of luck, there _may_ be a better solution forthcoming
1322    with real integration into QDirStat's GUI.~~
1323
1324    _Update 2019-07-08: This real integration into the GUI is now available._
1325
1326
1327- 2019-05-12
1328
1329  - New standard cleanup: _Check File Type_. This uses the `file` command to
1330    find out more detailed information what exactly a file is and displays it
1331    in the normal cleanup output window (the orange text is the interesting
1332    part).
1333
1334    More details and screenshots at [GitHub Issue #102](https://github.com/shundhammer/qdirstat/issues/102).
1335    Notice that you can also add this to any older version of QDirStat.
1336
1337
1338- 2019-05-11
1339
1340  - Implemented the single-command call to get all file lists for all installed
1341    packages for _rpm_ as well.
1342
1343    Now it's only _pacman_ that still needs a separate external command for
1344    each package. If anybody knows how to do this for _pacman_ as well, please
1345    let me know.
1346
1347  - Another drastic performance improvement in the packages view:
1348
1349    Now down to **6.5 seconds** on my system from initially 180 seconds for
1350    getting all file lists for all 2400 installed packages.
1351
1352    | sec   |  Version   | Description                                                         |
1353    |------:|------------|---------------------------------------------------------------------|
1354    | 180.0 | ce3e793298 | First pkg view; sequential separate `dpkg -L` calls                 |
1355    |  53.4 | 68038f0525 | Separate `dpkg -L` calls in multiple background processes           |
1356    |  38.5 | ce54879a48 | Single `dpkg -S "*"` call to get all file lists for all pkg at once |
1357    |  37.7 | 45b0a7a941 | Use cache for `lstat()` syscalls                                    |
1358    |  24.6 | c50e9a7686 | Use slower update timer for tree view while reading                 |
1359    |   6.5 | a1043a20fb | Keep tree collapsed during reading                                  |
1360
1361    (Much) more details at [GitHub Issue #101](https://github.com/shundhammer/qdirstat/issues/101).
1362
1363
1364- 2019-05-10
1365
1366  Drastic performance improvements in the packages view:
1367
1368  - When reading many (configurable; right now 200) package lists, QDirStat no
1369    longer fires off a separate background process (6 in parallel at any given
1370    time) for each external command (`dpkg-query --listfiles` or `rpm -ql` or
1371    `pacman -Qlp`) and collects their output.
1372
1373    Rather, it now tries to use a single external command that can return all
1374    file lists for all packages at once. It builds a cache from that and uses
1375    it to build the internal tree as it processes the read jobs for each
1376    package one by one.
1377
1378    Right now this works for _dpkg_ (`dpkg -S "*"`). Experiments show that it
1379    will also work for _rpm_ (that's on the _to do_ list).
1380
1381    But there does not seem to be an equivalent command for _pacman_; it looks
1382    as if _pacman_ can only return a file list for a single package or a list
1383    of all installed packages, but without any reference what package each file
1384    in that list belongs to. _If anybody knows, please contact me._
1385
1386  - Now caching the result of `lstat()` syscalls for directories in the package
1387    view since most packages share common system directories like `/usr`,
1388    `/usr/bin`, `/usr/share` etc.; `lstat()` is an expensive affair, and even
1389    just avoiding to switch from user space to kernel space and back that often
1390    is a speed improvement.
1391
1392  - Reduced the display update inverval in the packages view. While reading
1393    package information, there is not all that much to see anyway. Yet
1394    constantly recalculating the column widths to make sure they fit their
1395    content is expensive. This is now done just every 5 seconds, not 3 times a
1396    second.
1397
1398    There is even a noticeable difference when using the L1 layout and a
1399    smaller window size so there is less content to take care of.
1400
1401  The net effect of all this performance tuning is that on my machine (Xubuntu
1402  18.04 LTS (i.e. _dpkg_) with ~2400 packages) reading all packages with all
1403  their file lists is now down to under 30 seconds from formerly 90 to 120 (it
1404  varied wildly).
1405
1406
1407- 2019-05-09
1408
1409  - Now no longer showing a directory's own size (the size of the directory
1410    node, not of any file contained in the directory) in the packages view:
1411    This distorted both the treemap and the total sums. Directories are
1412    typically shared between a lot of packages, so it does not make very much
1413    sense to add the size of a very common directory like /usr/bin or /usr/lib
1414    to the total size of each package that owns a file in any of them, thus
1415    accounting for those directories many times. On my system, /usr/bin is
1416    shared between 454 packages, so its 68 kB would be added up 454 times, thus
1417    adding up to 30 MB.
1418
1419    In the treemap that meant that packages that install only one or two very
1420    small files (symlinks!) to a very common directory would show a lot of
1421    empty space; the 56 byte (or so) symlink would be completely dwarfed by the
1422    directory it is in, even if the directory only has 4 kB. A lot of such lone
1423    small files each in a separate directory meant a whole lot of empty space
1424    in the treemap, thus making packages very hard to compare against each
1425    other.
1426
1427    Of course this means that the size of the directory nodes is now completely
1428    missing in the toplevel total sum (the Pkg:/ node in the tree), but that is
1429    much less distorting than multiplying each of those directory node sizes by
1430    the number of packages that have files in each of them.
1431
1432  - No longer regarding the directory's own mtime (modification time) in the
1433    packages view: The latest overall mtime in a subtree cascades upward, so
1434    any change in any subtree would affect the latest mtime in the higher tree
1435    levels. But if that change was caused by something outside of the current
1436    view, this is irrelevant. So if you want to know the latest mtime anywhere
1437    in package _foo_ which includes the /usr/bin/foo command, it is irrelevant
1438    if one hour ago you installed or updated some other package which also
1439    installed some other commands to /usr/bin; you don't want that latest mtime
1440    of the /usr/bin directory to affect the display of every package that has a
1441    file in /usr/bin.
1442
1443
1444- 2019-05-04
1445
1446  New **packages view**:
1447  QDirStat can now visualize the file lists of installed packages:
1448
1449  [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-pkg-details.png" height="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-pkg-details.png)
1450
1451  I.e. files are now grouped by the package they belong to, and in each subtree
1452  only the files that belong to the package are displayed: In this example, in
1453  `/usr/bin` only the `chromium-browser` binary is displayed, not all the other
1454  files in `/usr/bin`. This is intentional.
1455
1456  You can display all installed packages with their file lists (but that takes
1457  a while), or you can select just a subset. Use Menu _File_ -> _Show Installed
1458  Packages_ or start QDirStat with a `pkg:/` command line argument.
1459
1460  As with the other package manager related features, this is supported for all
1461  Linux distributions that use one of _dpkg_, _rpm_ or _pacman_ (or any
1462  higher-level package manager based on any of those like _apt_, _zypper_ etc.).
1463
1464  More details at [Pkg-View.md](doc/Pkg-View.md).
1465
1466  Comments and questions are welcome at [GitHub Issue #100](https://github.com/shundhammer/qdirstat/issues/100).
1467
1468  If you have a genuine problem with the new feature, please open a separate
1469  issue so it can be tracked properly.
1470
1471
1472- 2019-04-12
1473
1474  - **Performance improvement** while reading directories: **25% faster** on my
1475    /work directory with an ext4 filesystem with 230 GB / 216k items on a
1476    rotational (non-SSD) disk; with cleared caches now 24.5 sec average
1477    compared to previously 32.5 sec average (with filled caches down to 1.5
1478    from previously 2.0 sec).
1479
1480    It now uses `fstatat()` (instead of `lstat()`) which accepts the file
1481    descriptor of an open directory, so glibc and the kernel save the time
1482    previously needed for parsing the path and locating the directory; that
1483    part will also bring some speed improvement for SSDs.
1484
1485    In addition to that, the entries for each directory are now sorted by i-no
1486    before calling `fstatat()` so the kernel can now read the i-nodes on disk
1487    in sequential order, thus saving disk seek times. SSD users will not
1488    benefit from that since there are no disk seek times on an SSD.
1489
1490  - Now using the name as the secondary sort field in the tree view if the
1491    primary sort field (usually the size) is equal for two items.
1492
1493  - Vast performance improvement for huge directories (with 100.000 entries or
1494    more in a single directory) in the tree view: There is now instant response
1495    for jumping from the first to the last item, dragging the scroll bar or
1496    using the mouse wheel.
1497
1498    It had turned out that by default the underlying QTreeView widget queries
1499    each item in turn how tall it wants to become (using the `sizeHint()`)
1500    which in turn had to query the font for each one for its metrics.
1501
1502    QDirStat now sets the QTreeView's `uniformRowHeights` flag to indicate that
1503    all rows have the same height, so this only needs to be done for the first
1504    one, and the result is simply multiplied by the number of items.
1505
1506    Amazingly enough it was not sorting the items (which is what comes to mind
1507    when there is such a performance bottleneck), no, it was someting as
1508    mundane as the widget having to figure out the proportions of its scroll
1509    bar slider vs. the scroll bar overall length. And for that, it needs to
1510    know the number of items (which is simple) and the height of each one
1511    (which was not).
1512
1513    The reason why the widget does that is because each item might have a
1514    different font or a different icon, and then each item might have a
1515    different height. That `uniformRowHeights` flag tells it that this is not
1516    the case.
1517
1518
1519- 2019-04-06
1520
1521  - New article _Linux Disk Usage Tools Compared: QDirStat vs. K4DirStat
1522    vs. Baobab vs. Filelight vs. ncdu_ including benchmarks:
1523    [GitHub Issue #97](https://github.com/shundhammer/qdirstat/issues/97)
1524
1525    (written in the GitHub issue tracker so users can join the discussion)
1526
1527
1528- 2019-04-05
1529
1530  - Performance boost for huge directories (with 100.000 entries or more in a single
1531    directory):
1532
1533    A routine that counts the direct children of a directory now uses a cached
1534    value for each directory so it does not have to be recalculated over and
1535    over again even if nothing changed. Amazingly enough, this little thing had
1536    turned out to be the performance bottleneck that had made QDirStat
1537    prohibitively slow for such directories. It was not the sorting of the
1538    entries (the sort order was always cached), no, the problem was something
1539    as trivial as counting the children on the current level of the tree view.
1540
1541    Of course, a directory that contains 100.000 entries in a single level
1542    still has quite some performance impact, but at least now it's
1543    tolerable. This was tested with up to 500.000 entries in a single directory
1544    (there is now a script that can create such a directory in the test/util
1545    directory of the source tree).
1546
1547    Hint: Avoid dragging the vertical scroll bar of the tree view in such a
1548    directory; better use keyboard commands such as the _Home_ or the _End_
1549    key. The scroll bar will make the underlying Qt widget go through every
1550    single entry in turn, and that will take a while (it will eventually become
1551    responsive again, though).
1552
1553    _Update 2019-04-12: This is now no longer an issue; using
1554    `uniformRowHeights` fixed that._
1555
1556
1557  - Implemented [GitHub Issue #90](https://github.com/shundhammer/qdirstat/issues/90):
1558    Support excluding directories containing a file with a specific name or pattern.
1559
1560    Similar to some backup tools, you can now specify an exclude rule that lets
1561    you exclude a directory that contains a file like `.nobackup` or
1562    `.qdirstatexclude`. The exclude rule configuration now has a new option for
1563    that:
1564
1565    [<img width="300" src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-config-exclude.png" >](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-config-exclude.png)
1566
1567    This makes it possible to reuse such files that are there anyway for some
1568    other tool and get a good idea how large the resulting backup will become.
1569
1570    Since this change required some refactoring in a quite sensitive part
1571    (reading the directories), please watch out for possible bugs that this might
1572    have introduced and report it if you find something.
1573
1574
1575--------
1576
1577
1578- 2018-11-07 **New stable release: V1.5**
1579
1580  Summary:
1581
1582  - (Optional) breadcrumbs navigation
1583
1584  - (Optional) a new "details" panel for the currently selected item
1585
1586  - (Optional) new tree columns:
1587    owner, group, permissions both in "rwxrwxrwx" and in octal format
1588
1589  - Package manager support for the major Linux package managers (dpkg / rpm /
1590    pacman) to see what package a system file belongs to.
1591
1592  - Quick-switchable different layouts for the main window
1593
1594  - A new "General" page in the configuration dialog
1595
1596  - Show in the window title if the program runs with root permissions (`sudo`
1597    etc.)
1598
1599  - (Optional) show the URL in the window title
1600
1601  - Some bug fixes
1602
1603  For more details, see the [full release announcement](https://github.com/shundhammer/qdirstat/releases/tag/1.5).
1604
1605
1606- 2018-11-03
1607
1608  Added showing release notes (in an external web browser) to the "Help" menu
1609  ("What's New in this Release").
1610
1611
1612- 2018-10-26
1613
1614  The pre-1.5 Beta is out: [QDirStat-1.4.97-Beta](https://github.com/shundhammer/qdirstat/releases/tag/1.4.97-Beta)
1615
1616
1617- 2018-10-21
1618
1619  - Updated all screenshots to the latest Git source version in preparation for the
1620    upcoming pre-1.5 Beta.
1621
1622  - Added a little left margin to the "Latest MTime" column in the tree to make
1623    it look less overcrowded.
1624
1625
1626- 2018-10-20
1627
1628  - Reintroduced showing the elapsed time during directory reading.
1629
1630    You might have noticed that QDirStat's performance has decreased with all
1631    the kernel patches to work around the Meltdown and Spectre security
1632    problems caused by CPU design; system calls have become a lot more
1633    expensive in terms of performance now. And QDirStat does a LOT of system
1634    calls while reading directories: `opendir()` / `readdir()` for each
1635    directory in the tree and `lstat()` for every single file or directory
1636    found in the tree: My 6.8 GB root filesystem has 275,000 items total and
1637    25,500 directories which means well over 300,000 system calls. Every single
1638    one of them now causes kernel page tables to be cleared and restored for
1639    every switch between user space and kernel space, and that means quite some
1640    performance impact.
1641
1642    This all means that it's now worthwhile again to display the elapsed time
1643    during directory reading. It used to be over in a heartbeat, so it wasn't
1644    worthwhile to display that; but that's different now.
1645
1646  - Added a _General_ page to the configuration dialog for miscellaneous
1647    settings.
1648
1649    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-config-general.png" width="300">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-config-general.png)
1650
1651    This is a bit unorganized (as might be expected for misc settings), but
1652    those misc settings had accumulated over time, so I decided to finally add
1653    such a page.
1654
1655    The settings were always accessible, but only by editing the config file
1656    (`~/.config/QDirStat/QDirStat.conf`) manually. For some settings you might
1657    still have to do that: Some are too exotic for general use, some others
1658    would confuse the average user much more than they would help.
1659
1660
1661- 2018-10-19
1662
1663  - Added different layouts to the main window:
1664
1665    You can now switch between three (at the moment) different layout options
1666    for the upper half of QDirStat's main window.
1667
1668    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-details-file-L1.png" width="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-details-file-L1.png)
1669    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-details-file-L2.png" width="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-details-file-L2.png)
1670    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-details-file-L3.png" width="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-details-file-L3.png)
1671
1672    - Layout 1 (short): Display only a bare minimum of columns in the tree
1673      view, but show the new details panel on the right side. This is to
1674      minimize clutter in the tree view, yet keep all the information
1675      available.
1676
1677    - Layout 2 (classic): Display the same columns as always in the tree view
1678      and additionally the new details panel on the right side.
1679
1680    - Layout 3 (full): Display all available columns in the tree view,
1681      including the new file owner, group, permissions in both "rwxrwxrwx" and
1682      octal. But don't display the new display side panel so there is enough
1683      screen space to show all those columns.
1684
1685    Switching between the layouts is as easy as pressing one of the three new
1686    buttons in the tool bar: L1, L2, L3. Or use the corresponding entries in
1687    the "View" menu. Or use the Alt-1, Alt-2, Alt-3 key combinations.
1688
1689    For each view, you can individually configure what columns to display and
1690    whether or not to display the new details side panel and / or the new
1691    breadcrumbs navigator.
1692
1693    The column widths are still configured globally (and this will remain like
1694    that); I experimented with that and found it _very_ awkward to have to set
1695    all of them individually for each layout.
1696
1697  - We are approaching a new release (I guess you figured that with all the
1698    recent changes). Most likely there will be at least one Beta release (if
1699    there are problems maybe more) before the 1.5-stable release.
1700
1701  - There is still some (limited) time to add even more package managers if
1702    anybody feels inclined to submit patches. But please be advised that I
1703    can't do much maintenance for any of those since I don't have any system
1704    with them readily available to test anything; the ones that I have use
1705    _dpkg_ or _rpm_.
1706
1707  - Fixed [GitHub Issue #86](https://github.com/shundhammer/qdirstat/issues/86):
1708    CacheWriter errors go unnoticed much too easily.
1709
1710    This was a direct result of me giving in to nagging people wanting features
1711    of very limited value: The status bar flickering like crazy all the time
1712    because somebody back some time ago had wanted the current treemap tile's
1713    path and size in the status bar as the mouse hovers over it.
1714    [GitHub Issue #30](https://github.com/shundhammer/qdirstat/issues/30)
1715
1716    The effect is that nobody pays attention anymore at all to that status bar
1717    because it's flickering all the time anyway, so it has become useless as a
1718    tool to report anything of importance; and status bar messages are gone
1719    immediately, too, when the user happens to move the mouse across the
1720    treemap.
1721
1722    As a consequence, I just disabled that by default; if anybody really wants
1723    it, edit the QDirStat config file (`~/.config/QDirStat/QDirStat.conf`) and
1724    enable it again:
1725
1726        UseTreemapHover=true
1727
1728    _Update 2018-10-20: This can now be changed in the new "General" page of
1729    the configuration dialog; no need to edit the config file manually._
1730
1731
1732- 2018-10-18
1733
1734  - Added support for the _pacman_ package manager for Manjaro and Arch Linux.
1735
1736    This should now cover the most common package managers for Linux to find
1737    out what package a system file belongs to: _dpkg_, _rpm_, _pacman_.
1738
1739    As mentioned before, higher-level package managers such as _apt_, _zypper_,
1740    _yum_ or front-ends like _synaptic_, _PackageKit_ all use one of the
1741    lower-level package managers internally, so it doesn't matter if you never
1742    used one of the lower-level tools before.
1743
1744  - Tried to add support for the _pkg_ package manager ("pkg info") for FreeBSD
1745    / OpenBSD, but unfortunately it only knows what package owns files of
1746    _ports_ / _3rd party_, not for the base system.
1747
1748    The helpful people in the _#freebsd_ IRC channel on _freenode_ confirmed
1749    that. So this will have to wait until there is useful support for it from
1750    the system side on those platforms. _BSD people, let me know!_
1751
1752
1753- 2018-10-16
1754
1755  - QDirStat now shows `[root]` in the window title if it is running with root
1756    privileges.
1757
1758  - If invoked with `sudo`, now restoring the owner of the config files to the
1759    real user (if possible) if those file are in the user's home directory.
1760    Previously on some systems they were owned by _root_ which meant they were
1761    no longer writable by the real user, silently discarding all subsequent
1762    changes to the configuration (including window sizes etc).
1763
1764    This might be different depending on how `sudo` is configured on a system;
1765    on SUSE, it uses the root user's home directory, on Ubuntu, the home
1766    directory of the user who invoked `sudo`.
1767
1768
1769- 2018-10-07
1770
1771  Added better classification of files to the new file details view:
1772
1773    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-details-file-L2.png" height="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-details-file-L2.png)
1774
1775  - MIME Category - this is the same as in the treemap colors, the same as you
1776    can configure in the _MIME Categories_ page in the QDirStat configuration
1777    dialog. By default, it shows very broad categories ("Documents, "Music",
1778    "Images", "Videos", "Source Files", ...), but you can configure them to
1779    much finer detail if you wish.
1780
1781  - System file or not. This is important if you want to run any cleanup
1782    actions in that directory; you probably don't want to mess with system
1783    files, even if running QDirStat as root.
1784
1785    A system file in this context is a file that is either owned by a system
1786    user (a UID < 500) or that is located in a known system directory (/usr,
1787    /lib, ..., but not /usr/local).
1788
1789  - For system files, the package that this file belongs to. This gives a
1790    surprising amount of insight (it was surprising to me, at least) where all
1791    the disk space on the system directories goes to, most importantly some of
1792    the big blobs in the tremap.
1793
1794    As of now, this is supported for Linux systems using a package manager
1795    based on _dpkg_ or on _rpm_:
1796
1797    - Debian
1798
1799    - Ubuntu / Kubuntu / Xubuntu / Lubuntu
1800
1801    - SUSE (openSUSE Tumbleweed or Leap, SLES)
1802
1803    - Red Hat (Fedora, RHEL)
1804
1805    ... and dozens more (basically all that are based on any of the above).
1806
1807    This works by running `dpkg -S` or `rpm -qf` as external commands, so this
1808    is a somewhat expensive operation. To keep the user interface responsive,
1809    QDirStat now has an "adaptive timer" for updating that information:
1810    Normally, the result is shown instantly, but if you click around wildly,
1811    there is a timer that is increased or decreased (thus "adaptive") for a
1812    delayed update after that timeout (0 / 333 / 1000 / 2500 millisec right
1813    now).
1814
1815    It can even handle _rpm_ installed as a foreign package manager on a _dpkg_
1816    based system (and the other way round); it tries the primary package
1817    manager first, then any others that are also installed.
1818
1819    Please notice that _apt_, _synaptic_, _zypper_, _pkgkit_ and whatnot are
1820    all higher level package managers that ultimately use one of the low level
1821    ones, so even if you only use a higher level package manager, it still
1822    works without restriction.
1823
1824    If your system does not use _dpkg_ or _rpm_, those who can are invited to
1825    contribute patches for other package managers; it's really simple:
1826
1827    https://github.com/shundhammer/qdirstat/blob/master/src/PkgManager.cpp#L140
1828
1829    The API is not final yet; there may be more regexp support in the near
1830    future (so it will only get simpler). But you get the idea.
1831
1832--------------------------------------------------
1833
1834- 2018-10-03
1835
1836  - Added a new details view next to the tree view.
1837    Of course this can be disabled (Menu _View_ -> uncheck _Show Details Panel_).
1838
1839    This view shows context-sensitive information about the currently selected
1840    item(s); see also the screenshots (still not complete, but you get the idea):
1841
1842    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-details-file-L2.png" height="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-details-file-L2.png)
1843    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-details-dir.png" height="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-details-dir.png)
1844    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-details-dot-entry.png" height="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-details-dot-entry.png)
1845    [<img src="https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-details-multi-sel.png" height="250">](https://raw.githubusercontent.com/shundhammer/qdirstat/master/screenshots/QDirStat-details-multi-sel.png)
1846
1847    What that details view displays so far:
1848
1849    - File: name, type (file / symlink / block device / character device /
1850      FIFO), size, user, group, permissions both as rwxrwxrwx and octal,
1851      modification time.
1852
1853    - Directory: name with appended slash to easier recognize what it is, type
1854      (directory), subtree total size, total items, total files, total
1855      subdirs, latest modification time in the entire subtree; directory own
1856      size, user, group, permissions both as rwxrwxrwx and octal, modification
1857      time of the directory node itself (that was never shown before).
1858
1859    - <Files> pseudo directory: Only the subtree information like for a
1860      directory, but no user / group / permissions since there is no
1861      counterpart for it on the filesystem.
1862
1863    - Multi-selection: Number of selected items, total size, number of files,
1864      number of directories, number of files in any subtrees of those
1865      directories. This should show a bit more clearly what is affected if you
1866      choose to delete all that selected stuff.
1867
1868    The view can scroll, so extremely long file names (as are common e.g. below
1869    `.git/objects` directories don't blow this view up to take all the screen
1870    space away from the tree and the treemap.
1871
1872
1873  - Unified the different size columns into one: No more "Subtree Size" and
1874    "Own Size" separately, but now just "Size". The reasoning used to be that
1875    there was no way to tell how large the directory node itself was. But that
1876    information is now readily available in the details view if anybody is
1877    really interested.
1878
1879  Plans for the immediate future:
1880
1881  - Add some package manager support, at least for the very common ones on
1882    Linux (_deb_ and _rpm_ so far): Find out what package a system file belongs
1883    to and show it (on demand or after a short delay) in the details view. This
1884    can be done even as non-root with some commands like `dpkg -S` or `rpm
1885    -qf`. There will probably be support for adding your own command lines in
1886    the config file if you use another package manager.
1887
1888  - Some simple checks if a file is probably a system file; for example, files
1889    below `/usr/bin` (and other very common system directories) and/or files
1890    that are owned by a user with a UID < 500 (or so) are very likely system
1891    files that should be very careful to delete. The details view should show
1892    you that; maybe there should also be a warning in the cleanup actions if
1893    any such files are affected by a potentially destructive cleanup action.
1894
1895  - Easily switchable different layouts for the tree columns and the details
1896    view:
1897
1898    - Minimalistic: Only the bare essentials of columns plus the details view.
1899
1900      This should remove a lot of the current clutter on the screen, and it
1901      should display the same information, only rearranged a bit. How often do
1902      you really need fields like number of items / files / subdirs in the tree
1903      view? They would be most useful there if you wish to sort the tree after
1904      any of them. How often do you do that? And with the new details view, the
1905      information is still available, but does not clutter the table.
1906
1907    - Default: Pretty much what you can see now in the new screenshots
1908
1909    - Maximum information: All columns, including the new user / group /
1910      permissions columns, but (to make space) no details view
1911
1912    If it makes sense (not sure yet), maybe also user defined views (say, 3 of
1913    them?) that you can define to your personal liking. I kinda like how camera
1914    makers use that (U1 / U2 on Nikon cameras, C1 / C2 / C3 on Canon and
1915    Panasonic). I am not completely sure yet just how useful that is; I'll need
1916    to experiment.
1917
1918
1919- 2018-10-02 Implemented a _breadcrumbs_ widget to show the current path and
1920  for easier navigation up the directory hierarchy. See also the new
1921  screenshots.
1922
1923  Of course this can be disabled (Menu _View_ -> uncheck _Show Current Path_).
1924
1925
1926- 2018-09-27 Fixed [GitHub issue #84](https://github.com/shundhammer/qdirstat/issues/84):
1927  Crash if picking up a cache file in the starting directory (subtree root).
1928
1929  This was a crash that happened when users had used the supplied
1930  _qdirstat-cache-writer_ script to generate cache files in certain directories
1931  for faster directory scanning (at the price of having slightly outdated
1932  data), and QDirStat was not started with that cache file as a command line
1933  argument, but it would find it while reading the directory at the starting
1934  directory (and only there). This was probably broken for a long time, yet
1935  nobody had noticed (or nobody bothered to write a bug report). This might be
1936  an indication that this cache file feature is not widely used, so only a
1937  small number of users seem to be affected. Anyway, this is now fixed.
1938
1939
1940- 2018-09-23 Implemented [GitHub issue #80](https://github.com/shundhammer/qdirstat/issues/80):
1941  Show directory/file user (owner), group and permissions in the tree view.
1942
1943  Those new columns are not visible by default. Use the context menu in the
1944  tree columns header to enable them. They might be useful for some users; for
1945  others, they may be just more clutter being displayed.
1946
1947  Sorting by those colums is somewhat basic; both user and group are sorted by
1948  the numeric uid or guid; the permissions are sorted by the numeric value of
1949  the mode field. Looking up user or group names is a somewhat costly
1950  operation. It might also make sense to order system files first (user with
1951  UID 0, i.e. root; other system users also have small UIDs.)
1952
1953  See issue #80 for a screenshot.
1954
1955
1956- 2018-08-26 Noah Davis (noahdvs) contributed a new application icon for QDirStat:
1957
1958  <img src="https://github.com/shundhammer/qdirstat/blob/master/src/icons/qdirstat.svg" height="64">
1959
1960  I had made the old icon myself back in early 2000 for the first KDirStat 0.86
1961  release. I never liked it very much, but the new application just needed an
1962  icon. Finally somebody with more artistic talent than myself made one that
1963  looks a lot more professional. Thank you, Noah!
1964
1965
1966- 2018-04-26 Implemented [GitHub issue #77](https://github.com/shundhammer/qdirstat/issues/77):
1967  Show the current URL in the window title. This is disabled by default.
1968  You can enable it manually in the config file (`~/.config/QDirStat/QDirStat.conf`):
1969
1970      [MainWindow]
1971      ...
1972      UrlInWindowTitle=true
1973
1974  Some day this will be configurable in a new tab in the configuration dialog,
1975  but right now there are only so few options that would go to such a "General"
1976  or "Misc" tab that it would look pretty lost and unorganized.
1977
1978
1979- 2018-02-08 Fixed [GitHub issue #74](https://github.com/shundhammer/qdirstat/issues/74):
1980Crash deleting folder while scan is in progress
1981
1982  This fix comes on two levels:
1983
1984  - A fix on the GUI-level that simply makes sure that the "move to trash"
1985    action in the tool bar / context menu is disabled while a directory tree is
1986    read.
1987
1988  - A fix on the low-level internal classes for the in-memory directory tree
1989    and the read job queue: This now also makes sure that whenever a subtree is
1990    deleted from the outside (e.g. because of cleanup actions), any pending
1991    directory read jobs for that subtree are removed from the job queue.
1992
1993- 2018-02-03 Fixed [GitHub issue #72](https://github.com/shundhammer/qdirstat/issues/72):
1994Allow to specify install prefix
1995
1996  You can now install to another location like `/usr/local` if desired.
1997  The default remains `/usr`. See section _Install to a Custom Directory_.
1998
1999
2000- 2018-01-12 Some small fixes:
2001
2002  - Fixed duplicate keyboard shortcut for actions "Stop Reading" (now: Ctrl-S)
2003    and "Copy URL to Clipboard" (still Ctrl-C).
2004
2005  - Fixed exclude rules not matching correctly against direct root directory
2006    children: A rule that should match "/var" now works correctly. You'd need
2007    to specify "//var" in the rule which of course was wrong.
2008
2009  - Now only adding the default exclude rule ".snapshot" once. If you remove
2010    that one, it should no longer keep reappearing if there are no other
2011    exclude rules.
2012
2013  - Fixed some minor issues in the exclude rule configuration dialog with some
2014    widgets not being correctly disabled if they made no sense to use.
2015
2016
2017----------------------------
2018
2019
2020- 2017-06-04 **New stable release: V1.4**
2021
2022  It's about time to ship all those latest changes.
2023
2024- 2017-06-04 Fixed problem with directories that have read, but not execute
2025  permissions thanks to _slodki_:
2026
2027  In that case, you'd get a warning in the log for every entry in such a
2028  directory, and it would get the wrong icon (a locked folder) and null values
2029  for all fields. Now checking for execute and read permission of the directory
2030  in advance and not even trying to read any contents (because the values would
2031  be bogus anyway).
2032
2033- 2017-05-31 Fixed [GitHub Issue #61](https://github.com/shundhammer/qdirstat/issues/61):
2034Files and directories with UTF-8 special characters in the name not read
2035correctly when built with Qt 4.x
2036
2037  This happened only when QDirStat was built against Qt 4.x, but that is the
2038  default for NHellFire's PPA, so this affects all Ubuntu users who installed
2039  QDirStat from that PPA.
2040
2041  Thanks to _slodki_ who pointed this problem out!
2042
2043- 2017-05-12 Checked code with [Coverity](https://scan.coverity.com/)
2044
2045  Coverity offers free static code analysis for Open Source projects.
2046  This is really an outstanding tool, and it does a really thorough analysis.
2047
2048  You might be glad to hear that while it complained about some minor things,
2049  there was not a single issue that would have been user relevant (let alone
2050  any security problems - there were none). Still, I did my best to fix the
2051  small complaints it had, and now we are down to zero outstanding defects
2052  reported by Coverity in QDirStat's 130,000 lines of code.
2053
2054- 2017-04-21 More consistency between file type and size statistics
2055
2056  Like the new file size statistics window, the older file type statistics
2057  window now uses the currently selected directory (in the tree view), not
2058  always the tree's toplevel directory. If nothing is selected, it still uses
2059  the toplevel directory.
2060
2061  That means that F3 no longer toggles that window, but re-populates it with
2062  the currently selected directory instead. This is consistent with the F2
2063  view.
2064
2065  Of course, the "Locate Files by Type" window now is also restricted to that
2066  subtree which actually gives it better functionality if you know that you
2067  want to locate files only there.
2068
2069  This means that you can now select a subdirectory in the tree, open the file
2070  type statistics for it (F3 key), then select any filename extension (suffix)
2071  in that window and then open the file size statistics (F2 key) for that file
2072  type in that subtree.
2073
2074  Previously, you would have to start QDirStat to show only that directory,
2075  then open the file type statistics window (F3), then the file size statistics
2076  window (F2) from there.
2077
2078
2079- 2017-04-14 _Let's do some real statistics_
2080
2081  It's been a while since the last official news here, but I wasn't idle during
2082  that time:
2083
2084  ![File Size Histogram Screenshot](https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-histogram.png)
2085
2086  This is a whole new kind of statistics in QDirStat showing how file sizes are
2087  distributed. You can start that for any selected directory (menu _View_ ->
2088  _File Size Statistics_ or F2) or from the _File Type Statistics" window if
2089  you select any filename suffix (extension) there and then _File Type_ ->
2090  _Size Statistics_ (or F2). In the latter case, you can see how large all your
2091  photos (.jpg), your videos (.mp4) or whatever are.
2092
2093  This new statistics window deals with a lot of things you might have come to
2094  hate at school or at university, and which your math teacher or your
2095  statistics professor never explained in a way that mere mortals can
2096  understand, so I added those explanations as a bonus. There is a landing page
2097  for that in that new window:
2098
2099  ![File Size Help](https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-stats-help.png)
2100
2101  Or you might use
2102  [this](https://github.com/shundhammer/qdirstat/tree/master/doc/stats)
2103  as a starting point.
2104
2105  Everybody thinking "I have no clue what this is all about", please have a
2106  look at the
2107  [Median, Quartiles and Percentiles Explained](https://github.com/shundhammer/qdirstat/blob/master/doc/stats/Median-Percentiles.md)
2108  document to convince yourself that really **everybody** can easily understand
2109  this.
2110
2111  I also opened a
2112  [GitHub issue to discuss this](https://github.com/shundhammer/qdirstat/issues/60);
2113  comments are welcome.
2114
2115
2116- 2017-03-10 Filling the gaps in the treemap
2117
2118  [GitHub issue #58](https://github.com/shundhammer/qdirstat/issues/58) shows
2119  that users feel under-informed when there are grey areas in the treemap. The
2120  explanation is simple: Treemap tiles are only displayed when they have at
2121  least a certain minimum size (by default 3 pixels). Otherwise the treemap
2122  just gets cluttered with tiny things that don't show any information
2123  whatsoever.
2124
2125  The remaining space is taken by its parent directory's tile. They were
2126  rendered just flat grey which makes their boundaries against each other
2127  invisible, thus giving the impression that there is nothing.
2128
2129  So I experimented with visible borders, but that completely destroyed the
2130  visual impression of the treemap because those borders were everywhere. Fill
2131  patterns also didn't help: They were just ugly, and there was no way to tell
2132  where one directory tile ends and where the next one starts.
2133
2134  Then I tried gradients. The first impression was good, but then I found that
2135  it was hard to tell which item was a (now over-emphasized) directory and
2136  which one a large file. Locating large files deep inside the directory
2137  hierarchy is the major strong point of the treemap visualization, so I
2138  wouldn't want to give that up. After playing a bit with the gradient
2139  parameters (toning it down and giving it just a little blueish tint) I ended
2140  up with this:
2141
2142  ![Using Gradients](https://cloud.githubusercontent.com/assets/11538225/23812600/7e769e48-05db-11e7-820c-2a6f70916403.png)
2143
2144  I think this is a good compromise.
2145
2146  Of course this is configurable: Edit `~/.config/QDirStat/QDirStat.conf`:
2147
2148      [Treemaps]
2149      ...
2150      DirGradientEnd=#707080
2151      DirGradientStart=#606070
2152      ...
2153      UseDirGradient=true
2154
2155  Beware that QSettings sorts the entries alphabetically, so the start is after
2156  the end (how philosophical...).
2157
2158----------------------------
2159
2160- 2017-03-05 **New stable release: V1.3**
2161
2162- 2017-02-27 Implemented [GitHub issue #30](https://github.com/shundhammer/qdirstat/issues/30):
2163
2164  When hovering over a treemap tile, display the full path and the total size
2165  of that element in the status bar. When the hover ends (when the mouse cursor
2166  leaves the treemap tile), display the current selection again in the status
2167  bar.
2168
2169- 2017-02-24 Improved logging: More secure and automatically log-rotating.
2170
2171  QDirStat now uses its own log directory `/tmp/qdirstat-$USER` (where `$USER`
2172  is your user name; the numeric user ID is now only used if the user name
2173  cannot be obtained). It no longer keeps one single log file growing, but
2174  starts a new one each time it is started. 3 old logs are kept; any older ones
2175  are deleted.
2176
2177  The permissions for that directory are set up in a pretty restrictive way
2178  (0700, i.e. `rwx------`) when it is created. If it already exists, QDirStat
2179  checks the owner and creates a new one with a random name if it is owned by
2180  anyone else than the user who started QDirStat.
2181
2182      [sh @ balrog] ~ 68 % ls -ld /tmp/qdirstat-sh
2183      drwx------ 2 sh sh 4096 Feb 24 18:29 /tmp/qdirstat-sh
2184      [sh @ balrog] ~ 69 % ls -l /tmp/qdirstat-sh
2185      total 16
2186      -rw-rw-r-- 1 sh sh 2067 Feb 24 18:29 qdirstat-00.old
2187      -rw-rw-r-- 1 sh sh 2067 Feb 24 18:07 qdirstat-01.old
2188      -rw-rw-r-- 1 sh sh 2067 Feb 24 18:07 qdirstat-02.old
2189      -rw-rw-r-- 1 sh sh 2067 Feb 24 18:29 qdirstat.log
2190
2191
2192  For anybody regularly watching the log file this means they will now have to
2193  use `tail -F qdirstat.log` rather than `tail -f` since the latter does not
2194  realize when the file it watches is renamed and a new one is created under
2195  the same name.
2196
2197- 2017-02-23 Fixed [GitHub issue #24](https://github.com/shundhammer/qdirstat/issues/24):
2198
2199   During directory reading, subdirectories would get out of sync when opening
2200   a tree branch.
2201
2202   It looks like QDirStat's tree display was a bit too dynamic for the concepts
2203   of the underlying Qt classes (QTreeView / QAbstractItemModel): During
2204   reading, QDirStat would sort the tree by the number of pending read
2205   jobs. That number is constantly changing, so the sort order would also
2206   constantly need to change. This is very hard to do properly with the
2207   limitations those underlying classes impose; basically it would require a
2208   reset of all the data the QTreeView keeps, thus making it forget things like
2209   its current scrollbar position or which tree branches were expanded or
2210   collapsed. That would make the user interface pretty much unusable.
2211
2212   So the fix for this is to not sort by read jobs, but by directory names
2213   instead since they don't change all the time. The user can still sort by any
2214   other column, but that sort is a momentary thing that might become invalid
2215   moments later as data (accumulated sizes, number of child items) are
2216   updated. Everybody please notice that **this is a known limitation** and any
2217   complaints about that will flatly be rejected. The alternative would be to
2218   not allow the user to sort at all during directory reading, and that is
2219   certainly a lot less desirable.
2220
2221
2222- 2017-02-22
2223
2224  - @flurbius contributed a patch to switch the main window layout from tree
2225    view above and treemap below to side-by-side (Menu _Treemap_ -> _Treemap as
2226    Side Panel_).
2227
2228  - Added new document [GitHub-Workflow.md](https://github.com/shundhammer/qdirstat/blob/master/doc/GitHub-Workflow.md)
2229    explaining how to work with GitHub and Git to contribute to QDirStat.
2230
2231- 2017-02-20 Locating files by type from the _File Type Statistics_ window
2232
2233![Locating FilesWindow](https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-locating-file-types.png)
2234
2235  You can now locate files with a specific filename extension directly:
2236
2237  - You select a file type (a filename extension) in the "File Type Statistics" window.
2238
2239  - You click "Locate" or you double-click the item.
2240
2241  - The "Locate Files" window opens.
2242
2243  - You click a directory there.
2244
2245  - In the main window, the branch for that directory opens, and all matching
2246    files are selected in the tree view and in the treemap.
2247
2248  - You can now directly start cleanup actions for those files.
2249
2250  See also [GitHub issue #48](https://github.com/shundhammer/qdirstat/issues/48).
2251
2252
2253- 2017-02-18 New document: [QDirStat for Servers](https://github.com/shundhammer/qdirstat/blob/master/doc/QDirStat-for-Servers.md)
2254  describing how to use QDirStat and the `qdirstat-cache-writer` script on
2255  headless (no X server, no X libs) servers.
2256
2257- 2017-02-17 _File Type Statistics_ window merged to Git master
2258
2259  Latest screenshot:
2260
2261  ![File Type Statistics Window Screenshot](https://github.com/shundhammer/qdirstat/blob/master/screenshots/QDirStat-file-type-stats.png)
2262
2263  **Limitations:**
2264
2265  Since filename extensions (suffixes) don't have as much semantics in
2266  Linux/Unix systems as they do in Windows, many files are categorized as
2267  "Other". This is a known limitation, but it's a limitation of the whole
2268  concept of using suffixes to categorize files by type. And no, checking file
2269  headers for magic byte sequences like the "file" command does is not an
2270  option here; QDirStat would have to do that for (at least) all the 30,000+
2271  files typically listed under the "Other" category. So we'll have to live with
2272  that limitation.
2273
2274  Next thing to come: Locating files with a specific suffix from there.
2275  See [GitHub issue #48](https://github.com/shundhammer/qdirstat/issues/48).
2276
2277
2278- 2017-02-12 Working on a _File Type Statistics_ window
2279
2280  People who know WinDirStat inevitably want that _File Type_ view in QDirStat,
2281  too. I was really reluctant to do that because I didn't quite see the point;
2282  in WinDirStat, it serves mostly as a legend to the treemap colors since they
2283  are constantly changing in WinDirStat: The file type that consumes most disk
2284  space always gets color #1, the next-most color #2 etc., so it depends which
2285  directory you scan what color each file type gets. In QDirStat, the colors
2286  are stable; they are predefined and configurable in the _MIME Type
2287  Categories_ configuration dialog.
2288
2289  And as most of you probably know, filename extensions have a much stricter
2290  meaning in Windows than on Linux/Unix systems; Linux people get very creative
2291  when it comes to using dots in filenames. Sometimes those dots delimit a
2292  filename's extension (suffix) from its base name, sometimes they are used for
2293  entirely different purposes.
2294
2295  Anyway, there was one user who was insistent enough to make me reconsider,
2296  and I did some experimenting this weekend, and now we have an (albeit still
2297  experimental) **File Type Statistics** view. So far, that code lives in a Git
2298  branch, but I think it will stabilize in the next one or two weeks, so I will
2299  merge it to Git master.
2300
2301
2302  See the whole discussion with more screenshots at
2303  [GitHub issue #45](https://github.com/shundhammer/qdirstat/issues/45)
2304
2305
2306- 2017-01-03 **New stable release: V1.2**
2307
2308  _Upgrading to this release is highly recommended for Btrfs users:_
2309
2310  If you used QDirStat to scan a Btrfs partition, any subvolumes of that
2311  partition were not scanned (see
2312  [GitHub issue #39](https://github.com/shundhammer/qdirstat/issues/39)).
2313
2314  Btrfs subvolumes were treated just like ordinary mount points (which, to all
2315  intents and purposes, they are). So you might have wondered why the _df_
2316  command shows your 40 GB root filesystem as 97% full, yet QDirStat shows only
2317  about 7 GB. The rest might be hidden in subvolumes.
2318
2319  QDirStat stops reading at mount points - which only makes sense because
2320  normally you want to know what eats up the disk space on that one partition
2321  that is filling up, not on any others like /home that are mounted
2322  there. Unfortunately, a Btrfs subvolume is also just another mount point, and
2323  QDirStat would stop reading there, too - at /var/log, at /var/spool, at
2324  /var/lib/libvirt etc.; a typical Btrfs root filesystem has about a dozen
2325  subvolumes, and all files in them were disregarded by QDirStat.
2326
2327  This is now fixed: Despite Btrfs doing its best to make this difficult (using
2328  one single privileged system call for all its functionality, including simple
2329  info calls), QDirStat now detects if a mount point is a Btrfs subvolume and
2330  continues reading if it is. QDirStat uses /proc/mounts (or, if this is not
2331  available, /etc/mtab) to find this out.
2332
2333  This is fixed in the _qdirstat-cache-writer_ script, too.
2334
2335
2336- 2016-12-11 Bernhard Walle contributed some patches for MacOS X support.
2337  Thanks, Bernhard!
2338
2339- 2016-12-09 Fixed Perl (_qdirstat-cache-writer_) part of
2340  [GitHub issue #39](https://github.com/shundhammer/qdirstat/issues/39):
2341  QDirStat doesn't scan Btrfs subvolumes
2342
2343  The _qdirstat-cache-writer_ script now also checks the device names of a
2344  mount point and its parent directory, not only their major/minor device
2345  numbers; so now it will not stop at Btrfs subvolumes while scanning.
2346
2347  That script uses a more simplistic approach than QDirStat itself: It invokes
2348  the _df_ command with that path and parses its output. If the path contains
2349  very weird special characters, this may fail, in which case that directory
2350  (which at that point is already known to have a different device major/minor
2351  number than its parent) is considered a filesystem boundary, and that branch
2352  is not scanned.
2353
2354
2355- 2016-12-08 Fixed C++ (QDirStat binary) part of
2356  [GitHub issue #39](https://github.com/shundhammer/qdirstat/issues/39):
2357  QDirStat doesn't scan Btrfs subvolumes
2358
2359  This was a bit of a challenge since the relevant Btrfs commands to obtain any
2360  useful information about subvolumes all require root privileges, and I really
2361  wouldn't want to scare users off by prompting for a _sudo_ password. QDirStat
2362  now fetches the information from /proc/mounts (or /etc/mtab if /proc/mounts
2363  is unavailable) and does some heuristics (which are not completely fool
2364  proof) to check if a potential mount point is still on the same device. That
2365  means that it will no longer treat a Btrfs subvolume as an ordinary mount
2366  point where it stops reading by default, but it just continues. On the other
2367  hand, another Btrfs mounted into the current filesystem is of course treated
2368  as a normal mount point. See also the corresponding
2369  [GitHub issue](https://github.com/shundhammer/qdirstat/issues/39)
2370  for details.
2371
2372  The Perl _qdirstat-cache-writer_ still has the old behaviour, i.e. it still
2373  stops at a subvolume mount point. This will be addressed next.
2374
2375
2376- 2016-12-07 Fixed [GitHub issue #40](https://github.com/shundhammer/qdirstat/issues/40):
2377  Crash without useful error message when no display available
2378
2379  When ssh'ing without -X to a remote machine and starting QDirStat there, it
2380  would just dump core and not issue any meaningful message. The fatal error
2381  message was only in the log file:
2382
2383  `<ERROR>   :0 ():  QXcbConnection: Could not connect to display`
2384
2385  Now this message is also repeated on stderr, and in this particular case
2386  ("Could not connect to display"), it does not dump core anymore, but just
2387  exits with error code 1.
2388
2389
2390- 2016-12-06 **Warning to Btrfs users** (Fixed as of 2012-12-09)
2391
2392  If you use QDirStat to scan a Btrfs partition,
2393  [any subvolumes of that partition are not scanned](https://github.com/shundhammer/qdirstat/issues/39):
2394  Btrfs subvolumes are treated just like ordinary
2395  mount points (which, to all intents and purposes, they are). So you might
2396  wonder why the _df_ command shows your 40 GB root filesystem as 97% full, yet
2397  QDirStat shows only about 7 GB. The rest might be hidden in subvolumes.
2398
2399  QDirStat stops reading at mount points - which only makes sense because
2400  normally you want to know what eats up the disk space on that one partition
2401  that is filling up, not on any others like /home that are mounted
2402  there. Unfortunately, a Btrfs subvolume is also just another mount point, and
2403  QDirStat will stop reading there, too - at /var/log, at /var/spool, at
2404  /var/lib/libvirt etc.; a typical Btrfs root filesystem has about a dozen
2405  subvolumes, and all files in them are currently disregarded by QDirStat. You
2406  can of course click on "Continue reading at mount point" individually in
2407  QDirStat's directory tree for each one of them, but that's tedious.
2408
2409  I am working on a solution. One approach would be to check if the current
2410  filesystem is Btrfs and list its subvolumes, but the Btrfs developers in
2411  their infinite wisdom decided that `btrfs subvolume list <path>` is a
2412  privileged operation, so QDirStat would have to use `sudo` with it and prompt
2413  for the root password (at which point I as a user would terminate the program
2414  and not use it anymore). **This is broken by design.** A simple info command
2415  like that should not require root privileges.
2416
2417
2418- 2016-10-31 (Halloween) **New stable release: V1.1-Pumpkin**
2419
2420  It's about time for another official release to get the accumulated fixes and
2421  small changes out into the world. Since today is Halloween, this release
2422  shall be named _Pumpkin_ (as in the unforgettable Charlie Brown's _Great
2423  Pumpkin_).
2424
2425  The last stable release, V1.0, was in mid-May (2016-05-16). Since then, there
2426  were 5 bug fixes and one small feature (the config file split up into
2427  independent parts so admins can provide presets to their users without
2428  overwriting the complete configuration), all described in greater detail
2429  below.
2430
2431
2432- 2016-10-23
2433
2434  - Fixed [GitHub issue #32](https://github.com/shundhammer/qdirstat/issues/32):
2435    %p does not escape single quotes properly
2436
2437    If you have a file name like `Don't do this.txt` (with a quote character in
2438    the name), the shell used when executing a cleanup action with this would
2439    complain about unmatched single quotes.
2440
2441    QDirStat had always escaped such single quotes, but not the way common
2442    shells (Bash, Zsh) expect it: They don't want a backslash in front of that
2443    embedded single quote. Rather, you need to terminate the string with a
2444    single quote, escape the embedded quote with a backslash (or put it into
2445    double quotes), and then re-open the old string with another single quote.
2446
2447    Thus, `'Don't do this'` becomes `'Don'\''t do this'`.
2448
2449    This is certainly not what most people expect. I just wonder how much other
2450    software is out there that does it the intuitive (yet wrong) way: Just
2451    escape the single quote with a backslash (`'Don\'t do this'`).
2452
2453    Of course, such file names should be avoided entirely, but you can't help
2454    some slightly broken MP3 ripper program doing it, so it needs to be handled
2455    correctly.
2456
2457  - Fixed [GitHub issue #31](https://github.com/shundhammer/qdirstat/issues/31):
2458    Segfault with cleanup action while reading directories
2459
2460    Now disabling cleanups that have a refresh policy other than "No Refresh"
2461    while directory reading is in progress; otherwise the re-read when the
2462    cleanup action has finished clashes with the directory read already in
2463    progress.
2464
2465    This is not an optimal solution, but a very pragmatic one; the optimal
2466    solution might queue updates and execute them after the main read is done.
2467
2468  - Fixed [GitHub issue #33](https://github.com/shundhammer/qdirstat/issues/33):
2469    Added command line option `--slow-update` (or `-s`) for slow remote X connections.
2470
2471
2472- 2016-08-12
2473
2474  - Fixed [GitHub issue #23](https://github.com/shundhammer/qdirstat/issues/23):
2475
2476    The internal cache writer would sometimes generate incorrect cache files
2477    because of buggy URL escaping resulting in an empty file name and thus
2478    invalid cache file syntax. This affected file names with colons (which is
2479    weird, but legal).
2480
2481    One of these days I'm going to throw out all that QUrl stuff and replace the
2482    few things that I need with something that actually works consistently and
2483    not just under optimum conditions.
2484
2485
2486- 2016-08-10
2487
2488  - Fixed [GitHub issue #22](https://github.com/shundhammer/qdirstat/issues/22):
2489
2490    Cache files containing the root filesystem would not display correctly or
2491    segfault under certain conditions. This is now fixed.
2492
2493  - Added "Refresh All" action to the main window tool bar. I had consciously
2494    avoided that because it's just too tempting to re-read the complete
2495    directory tree rather than think about what actually might have changed and
2496    then refresh just that, but it has become so common to use that action in
2497    web browsers that I found myself missing that more and more. And re-reading
2498    is not that expensive on today's mainstream PCs.
2499
2500
2501- 2016-07-02
2502
2503  - Fixed [GitHub issue #21](https://github.com/shundhammer/qdirstat/issues/21):
2504
2505    When started from a desktop menu, i.e. without any command line parameters,
2506    QDirStat would not prompt for a directory to read, but read the current
2507    directory (typically the user's home directory) right away.
2508
2509  - More graceful handling for nonexisting paths specified on the commmand
2510    line: It now no longer just throws an exception right after starting the
2511    program (which looks like a crash to the unwary user), but posts an error
2512    popup instead and then asks for a directory to read.
2513
2514
2515- 2016-06-29
2516
2517  - V1.01 (Development version)
2518
2519  - Split up config file into four separate ones below ~/.config/QDirStat:
2520
2521    - QDirStat.conf
2522    - QDirStat-cleanup.conf
2523    - QDirStat-exclude.conf
2524    - QDirStat-mime.conf
2525
2526    This should make it much easier for site administrators to provide their
2527    own site-wide cleanup actions, exclude rules, or MIME categories. I did
2528    this with this in mind:
2529
2530      http://moo.nac.uci.edu/~hjm/kdirstat/kdirstat-for-clusters.html
2531
2532    Here, they describe how users should overwrite their KDirStat config file
2533    with one provided by the site admin so all users have those carefully
2534    crafted cleanup actions. But that also means that all other settings get
2535    lost each time there is a change in any of those commands, and users have
2536    to update that config file again.
2537
2538    With the latest change, it is now possible to only replace the cleanup
2539    action config (QDirStat-cleanup.conf) and leave everything else untouched.
2540
2541    Notice that this is far from a perfect solution; all cleanup actions the
2542    user added himself still get lost. But doing this perfectly might pretty
2543    quickly become an overengineered solution that would be hard to understand
2544    for everybody.
2545
2546    As for migration from previous single-file configurations, QDirStat does
2547    that automatically: It reads the single file and moves the respective parts
2548    where they belong. No need to bother with any migration scrips or anything
2549    like that.
2550
2551
2552- 2016-05-16 **First stable release: V1.0**
2553
2554  After 3 months of Beta phase and 3 Beta releases, here is finally the
2555  official first stable release of QDirStat: Version 1.0.
2556
2557  In terms of source code, there were very little changes from the last Beta
2558  (0.98-Beta3 from 2016-04-08) and no real code change (only the version number
2559  increased) from the last check-in from 2016-04-11. This version can really be
2560  considered stable in the truest sense of the word. It was not rushed out the
2561  door, and there were no hectic last minute changes. It is well tested, and
2562  the community had ample opportunity to report any problems.
2563
2564
2565- 2016-04-11
2566
2567  - _buxit_ reported
2568    [GitHub issue #16](https://github.com/shundhammer/qdirstat/issues/16)
2569    and contributed the fix for it shortly afterwards:
2570    When clicking in the treemap, the corresponding item in the tree view was
2571    not always scrolled into the visible area. Now it is.
2572
2573- 2016-04-08
2574
2575  - Beta 3
2576
2577  - Fixed
2578    [GitHub issue #15](https://github.com/shundhammer/qdirstat/issues/15):
2579
2580    After a cleanup action is executed that needs refreshing the affected
2581    subtree, the parent directory is selected, which is intentional so the
2582    user's focus is not thrown off completely. There was a bug when you
2583    selected an item in the treemap afterwards, that change was not correctly
2584    propagated to the internal selection model: The parent directory remained
2585    selected (which was wrong), and the newly selected item was just added to
2586    the selection, i.e. that item and (typically) its parent directory was
2587    selected. When a potentially dangerous cleanup operation was now started,
2588    it would affect not only that item, but also the directory; and, worse,
2589    that directory often went out of the visible scope of the tree view. Yes,
2590    the confirmation popup would ask for both of them, but you all know how
2591    quickly users click away those popups without really reading them.
2592    This bug is now fixed.
2593
2594  - Improved the confirmation popup. Now highlighting directories much more if
2595    there is a "mixed" selection, i.e., both directories and non-directories
2596    are selected at the same time:
2597
2598    ![New cleanup confirmation popup](https://cloud.githubusercontent.com/assets/11538225/14390476/8b022c9a-fdb7-11e5-8eef-a5ba304d3bab.png)
2599
2600- 2016-03-20
2601
2602  - Beta 2
2603
2604    Beta 1 has now been out for 6 weeks, and I have not received one single bug
2605    report during that time. Maybe it's just business as usual, and people
2606    just keep waiting for others to do the testing, while they themselves are
2607    waiting for a stable release. Well, okay, so let them have their way: The
2608    current code is now officially V0.92 Beta 2. And it won't be another 6
2609    weeks; the next versions will come a lot more quickly. Once V1.0 final is
2610    out, any bug reports will have to wait until there is time to work on
2611    them. So, folks, use those Betas wisely.
2612
2613    BTW those who actually did test it will find that QDirStat is a lot more
2614    stable even in Beta 1 than other pieces of software in their official final
2615    release.
2616
2617- 2016-02-27
2618
2619  - Debian / Ubuntu packaging contributed by Nathan Rennie-Waldock.
2620    He also made a PPA repository available for various Ubuntu versions - see
2621    [Ubuntu packages](https://github.com/shundhammer/qdirstat#ubuntu) below.
2622
2623
2624- 2016-02-06
2625
2626  - Added tab for exclude rules configuration to the config dialog (see
2627    screenshot above). That's it: That was the last missing major feature.
2628
2629    **I hereby declare QDirStat to be Beta.**
2630
2631    _Please use the GitHub issue tracker for any bug reports._
2632
2633
2634  - Exclude rules can now optionally match against the full path again. I had
2635    changed this for just the directory name without the path by default, which
2636    makes regexps a lot simpler. You can now select the old behaviour, too, if
2637    you wish. This is configurable in the exclude rules tab of the config
2638    dialog.
2639
2640  - Made the config file format of the new view header columns human readable
2641    and editable. The first version from yesterday used the native format of
2642    Qt's QHeaderView -- a QByteArray in hex encoding. This was a sorry excuse
2643    for a settings format - not usable for anybody, not legible, much less
2644    editable. Trolls, WTF? Pretty and usable formats everywhere else, and a
2645    glorified (well, not even glorified) hexdump here?
2646
2647    I hope some admins who might want to provide ready-made config files for
2648    their users will appreciate that. If not, this is just for consistency's
2649    sake; I want to be able to read and edit my config file as I like, even
2650    without any graphical config dialogs.
2651
2652  - The tree view now uses "middle eliding" for texts that don't fit into a
2653    column. It used to elide at the end of the text, but that's not necessarily
2654    useful for long file names; they often differ only at the end with lots of
2655    text at the start in common. So, now it's no longer "VeryLongTextBlurb...",
2656    but "VeryLongTe...foo.o" if anything needs to be cut off. Of course, this
2657    makes most sense with the new column width modes, otherwise your column
2658    will simply be resized wide enough to fit everything in.
2659
2660- 2016-02-05
2661
2662  - Extended the context menu of the tree view header columns -- see latest
2663    screenshot above. The configuration is now saved and restored when entering
2664    the program. You can move the columns around (i.e. change their order),
2665    hide columns, and choose between automatic column width ("auto size") or
2666    setting it manually ("interactive size") for each column individually or
2667    for all columns at once.
2668
2669  - You can now read a cache file directly from the command line:
2670
2671        ````
2672        qdirstat --cache cache-file
2673        ````
2674
2675  - Fixed GitHub issue #9:
2676    [qdirstat-cache-writer creates broken cache file if some directory lacks Exec flag](https://github.com/shundhammer/qdirstat/issues/9)
2677
2678  - Fixed GitHub issue #10:
2679    [incorrect handling of sparse files with 0 allocated blocks](https://github.com/shundhammer/qdirstat/issues/10)
2680
2681- 2016-02-02
2682
2683  - Fixed a bug where directory names with a colon ":" were cut off when
2684    reading a cache file, thus all files and directories below that point could
2685    not find their parent directory, so that complete branch was cut off.
2686
2687  - Much improved performance for treemaps of large directory trees: Now not
2688    rebuilding the treemap immediately when the user resizes the window or
2689    drags the splitter dividing the main window, but just scheduling an update
2690    in 200 milliseconds. If another rebuild is requested during this time, the
2691    previous one is discarded. The net effect is that the treemap now is
2692    rebuilt only once, not for every pixel size change of the treemap
2693    subwindow, so the application remains responsive during dragging the
2694    splitter or resizing the main window.
2695
2696- 2016-02-01
2697
2698  - Fixed GitHub issue #6:
2699    [NullPointerException when reading cache file](https://github.com/shundhammer/qdirstat/issues/6)
2700
2701    The DirTreeModel and the DirCacheReader were somewhat out of sync with
2702    regard to which directory is ready for display in the tree view.
2703
2704- 2016-01-30
2705
2706  - Added a context menu for the tree view header. It's still very limited, but
2707    you can now turn off auto-resizing of the tree columns for the current
2708    session.
2709
2710  - Added a .desktop file so QDirStat should now show up in the menu of the
2711    major desktop environments (KDE, GNOME, Xfce, Unity, ...) and in their file
2712    managers' "Open With" menus when you right-click a directory.
2713
2714- 2016-01-29
2715
2716  - Since the missing tabs in the config dialog will also have a list of things
2717    at the left and details of the one current item of those things at the
2718    right, I tried to move out the common part of this as a base class. Since
2719    the things those config tabs manage have different types, I tried a C++
2720    template class. But **it turns out that in this year 2016 Qt's moc still
2721    does not support templates. WTF?!**
2722
2723  - 21:00 (Grrrr) Okay, I found a workaround, albeit a pretty ugly one: Work
2724    with void pointers and forced type casts. Yuck. That's being bombed back to
2725    the early 1990s - we had to do this kind of stuff back with OSF/Motif in
2726    plain C all the time. Type safety was unknown back then; you could get all
2727    kinds of nasty surprises by casting pointers slightly wrong, and the
2728    compiler had no chance (even if it hadn't been that crappy SunOS C
2729    compiler, but a decent GCC) to catch any of this.
2730
2731    25 years later, and we are still stuck with that kind of stone age
2732    programming - just because some tool never got ported to the 21st
2733    century. Sigh.
2734
2735    Yet another day of develpment completely wasted due to insufficiencies of
2736    underlying tools. Just great. I am getting fed up with this.
2737
2738
2739- 2016-01-22
2740
2741  - Improved usability of refreshing the tree after cleanup actions: They used
2742    to leave the tree behind with nothing selected, the branch the user just
2743    worked in closed (which is natural since it needed to be re-read from disk)
2744    and scrolled to another position - maximum disorientation for the user. Now
2745    the parent directory is selected, giving at least some hint where the
2746    action took place. It's not optimal yet, but much better than before.
2747
2748  - Improved usability of the tree widget: When an item in the treemap is
2749    selected, all other branches in the tree are now collapsed before the new
2750    branch is opened. But this required working around some design flaws in the
2751    underlying _QTreeView_ class.
2752
2753    **Rant:** Trolls, didn't it ever occur to you that if you are _constantly_
2754    using that _d->expandedIndexes_ from _QTreeViewPrivate_ in the _QTreeView_
2755    public class, derived widgets might need that information, too? There is
2756    **no way** to access the currently expanded items other than cheating in
2757    some creative way. Seriously, I am not going to duplicate that bookkeeping
2758    with the _expanded()_ and _collapsed()_ signals, always being off by some
2759    items or not getting the information that items were removed (or listen to
2760    half a dozen more signals for even more advanced bookkeeping). If a widget
2761    class cannot provide that kind of elementary information to its derived
2762    classes, it's poorly designed. Period.
2763
2764
2765- 2016-01-18
2766
2767  - Applied Qt4 compatibility patches from Michael Matz. The only nontrivial
2768    issue was a thin wrapper around QProcess to make it store the program to
2769    execute and its arguments in the constructor and use those later with a
2770    plain start() without any more arguments.
2771
2772- 2016-01-16
2773
2774   - The MIME categories and the corresponding treemap colors can now be
2775     configured - see screenshot above. Yes, this is a real treemap widget as a
2776     preview for the colors, complete with a demo directory tree with a random
2777     number of files with random sizes (i.e. it looks different for each
2778     invocation). That part was the last major feature that was missing; now
2779     it's only little stuff that's left (still quite a number of it, though).
2780
2781   - Treemap colors are now no longer fixed; there is now a rules engine called
2782     MimeCategorizer. It uses a new class MimeCategory that groups MIME types
2783     (by filename, not by magic numbers in the file) into broad categories like
2784     "Documents", "Videos", "Music", "Images". Each of these categories has a
2785     list of filename extensions that belong to it (".mp4", ".wmv", ".mov"
2786     etc. for "Videos", for example). The categorizer uses a very fast lookup
2787     map for the vast majority of the rules (simple file extensions), but it
2788     can also use more powerful wildcards wherever you like them.
2789
2790   - The log file is now created per user: It's now /tmp/qdirstat-$UID.log,
2791     which for most Linux home users (with only one user account on the
2792     machine) is typically /tmp/qdirstat-1000.log .
2793
2794- 2016-01-15
2795
2796  - Added new macros for use within cleanups: %terminal and %filemanager. They
2797    are expanded to the terminal window or file manager application,
2798    respectively, of the current desktop (KDE, GNOME, Xfce, ...).  I just
2799    wasted four hours (that could have been put to better use adding missing
2800    features - grrrr) because KDE's konsole misbehaves in every way possible
2801    (leading today's WTF count with 3):
2802
2803    - It won't let me start it in the background from within QDirStat; it
2804      simply exits. I tried all kinds of command line arguments (--nofork,
2805      --hold), I tried to wrap it into a subshell, into the _nohup_ command -
2806      nothing helped. WTF?
2807
2808    - It exits when QDirStat exits. Well, since it won't let me start it in the
2809      background, that's not too surprising. Still, if it does its own fork(),
2810      WTF?
2811
2812    - It doesn't give a damn about the current directory you start it from, it
2813      needs its --workdir command line argument. WTF?
2814
2815  - Added %d macro for cleanups: This is the directory name with full path. For
2816    directories, this is the same as %p. For files, this is their parent
2817    directory's %p.
2818
2819  - %terminal : Terminal window application of the current desktop; one of
2820
2821      - konsole
2822      - gnome-terminal
2823      - xfce4-terminal
2824      - lxterminal
2825      - eterm
2826      - xterm  (fallback)
2827
2828  - %filemanager : File manager application of the current desktop; one of
2829
2830      - konqueror
2831      - nautilus
2832      - thunar
2833      - pcmanfm
2834      - xdg-open (fallback)
2835
2836  - Which desktop is used is determined by the _$XDG_CURRENT_DESKTOP_
2837    environment variable. Currently supported:
2838
2839    - KDE
2840    - GNOME
2841    - Unity
2842    - Xfce
2843    - Lxde
2844    - Enlightenment
2845      (no clue how to start its file manager, though - using xdg-open here)
2846
2847  - Users can override this with the _$QDIRSTAT_DESKTOP_ environment variable,
2848    so you can get, say, the Xfce terminal or file manager despite currently
2849    running KDE if you set
2850
2851        export QDIRSTAT_DESKTOP="Xfce"
2852
2853  - Of course, you can still simply use your favourite file manager if you
2854    simply use its command instead of %filemanager in the default "Open File
2855    Manager Here" cleanup action.
2856
2857  - Added new standard cleanup actions:
2858
2859    - Git clean. Start "git clean -dfx" in the current item's directory. This
2860      is relevant for developers or for people who regularly build software
2861      from Git repositories.
2862
2863    - Clear directory contents. This removes everything inside a directory, but
2864      leaves the directory itself intact. ~/.thumbnails or browser cache
2865      directories are typical candidates for this with their ever-growing
2866      content: You probably want to keep the directory, but get rid of
2867      everything inside it.
2868
2869  - Redefined the semantics of the _file manager_ cleanup action: It no longer
2870    tries to open files with the corresponding application depending on MIME
2871    type, it now always opens a file manager in that directory (which can open
2872    the file in its app if you want that). It's now also renamed to "open file
2873    manager here". If you still want the old behaviour, you can easily add your
2874    own cleanup action with the "xdg-open %p" command.
2875
2876  - Added "Troubleshooting" section in this document.
2877
2878  - Cleanup actions that have an icon are now added to the tool bar. Right now,
2879    only some of the predefined actions have an icon. There is currently no way
2880    for the user to specify an icon for a cleanup action.
2881
2882
2883- 2016-01-13 Added "move to trash", this time as a normal action in the "Edit"
2884  menu, the toolbar and the context menus. This is a real implementation of the
2885  XDG Trash specification. It does not rely on outside tools that might or
2886  might not be available.
2887
2888- 2016-01-12 We have a first MacOS X port! Sonja Krause-Harder volunteered to
2889  install a Qt development environment (11 GB! Yikes!) on her MacBook. I would
2890  have expected some changes, but a simple "qmake; make" just did the
2891  job. Amazing! -- The major challenge was to find where "qmake" gets installed
2892  in that MacOS Qt environment.
2893
2894- 2016-01-10 Went through the old KDirStat changelog and found a few bugs that
2895  I had fixed there -- and promptly repeated with the new QDirStat:
2896
2897  - Disable cleanups while reading directories. This would result in a segfault.
2898
2899  - No longer showing the path of the current directory being read. This sped
2900    up reading /usr on my machine from 9.5 sec to 1.5 sec (!).
2901
2902- 2016-01-09 Cleaned up this README.md file. It had grown much too long.
2903
2904- 2016-01-08 Cleanups are now configurable - see screenshot.
2905
2906  - Cleanup actions can now be added, deleted, and moved up or down the list.
2907    There is no longer a hard limit to the number of cleanup actions; create as
2908    many as you like. Of course, your screen size is still the limit for those
2909    menus. ;-)
2910
2911  - In addition to the old cleanup parameters, you can now configure the output
2912    window behaviour.  The default is "show after timeout" with a timeout of
2913    half a second. This may sound pretty short, but I started with 3 seconds
2914    and found that it felt sluggish. A modern PC can get a lot of things done
2915    in half a second; yet waiting for more than that feels like an eternity. So
2916    if any action takes longer than that, an output window pops up. Of course,
2917    if there is any error, it pops up anyway.
2918
2919  - You can now configure the shell to use. I was weighing the pros and cons of
2920    always using either /bin/sh or the user's login shell, and I found that
2921    there is no killer argument in favour or against either option. For
2922    example, I use the _zsh_, and while it's a great interactive shell, it did
2923    give me problems for that "remove junk files" cleanup: "rm -f *.o *.bak *~"
2924    -- when any of the wildcards cannot be expanded because there is no such
2925    file, it complains. Okay, you can wrap the whole command in "/bin/bash -c",
2926    but that's yet another indirection, so now you can configuare /bin/bash for
2927    that particular cleanup action. On the other hand, for some things I might
2928    want my original shell environment, so I do want my login shell by default.
2929    This is now the default behaviour: Try $SHELL (the user's login shell), and
2930    if that environment variable is not set or whatever is set there is not
2931    executable, it falls back to /bin/bash and then /bin/sh. And you can still
2932    enter your own in an editable combo box (but not "ruby" or "perl" because
2933    the "-c" option is still added automatically).
2934
2935- 2016-01-05 I admit I had never really liked the way the output of cleanup
2936  actions was typically hidden. Most of the times I couldn't care less, but
2937  sometimes there were error messages that mostly went unnoticed - such as no
2938  permissions to convert a directory into a compressed tarball. Now we have
2939  something new: A process watcher window that looks very much like a terminal
2940  window. The commands and their output are displayed there: Normal output
2941  (stdout) in amber, error output (stderr) in red. It will be configurable for
2942  each individual cleanup action if this window is desired: You can choose to
2943  always open it, to not open it at all -- or to have it automatically open
2944  when there is any output on stderr. And there is also a checkbox to
2945  automatically close it when the cleanup process finishes successfully. This
2946  is all not 100% perfect yet, but it works quite well already.
2947
2948- 2016-01-04 Cleanups are back. They still need some work, and you'll have to
2949  edit the config file in ~/.config/QDirStat/QDirStat.conf to configure
2950  anything, but they work.
2951
2952- 2016-01-03 We are getting nearer to the target:
2953
2954  - Settings are read from and written to the settings file in all relevant
2955    places. This includes what columns to display and their order. See section
2956    'Settings' below.
2957
2958  - Refreshing the selected tree branch, continuing reading at mount points and
2959    at excluded directories now works.
2960
2961  - Context menus are back. I am somewhat proud of the way my new ActionManager
2962    handles that with Qt introspection to avoid duplicating stuff: I wanted to
2963    keep the QActions in the Qt Designer file. That ActionManager keeps a
2964    pointer to the MainWindow that is the parent of all those QActions, and
2965    attached views can search that widget tree for action names (yes, that
2966    works only if you keep those QObject names tidy - which I am doing anyway).
2967
2968  - Found some more icons for those actions.
2969
2970  - Exclude rules are now greatly simplified. They no longer get the entire
2971    path to match which requires quite complex regexps, they only get the last
2972    path component - i.e., no longer "/work/home/sh/src/qdirstat/src/.git", but
2973    only ".git". You can now even tell the exclude rule to use a simplfied
2974    syntax: "FixedString" or "Wildcard" in addition to the normal "RegExp".
2975
2976  - Still missing (this list is getting considerably shorter):
2977    - Cleanups
2978    - Settings dialog
2979
2980- 2016-01-01  New Year release
2981  - Added mouse operations to the treemap. Some where there in the old kdirstat
2982    (but I guess not many users knew about them), some are new:
2983
2984    - Left click: Select item and make it the current item.
2985    - Ctrl+Left click: Add item to selection or toggle selection.
2986    - Middle click: Select the current item's parent. Cycle back at toplevel.
2987    - Double click left: Zoom treemap in.
2988    - Double click middle: Zoom treemap out.
2989    - Mouse wheel: Zoom treemap in or out.
2990
2991  - Reliably sort by pending read jobs while reading.
2992
2993  - Fixed crashes if wildly clicking in the tree while reading. Yes, I
2994    know... "Doctor, it hurts when I do that!" - "Then don't do that."
2995
2996- 2015-12-31  New Year's Eve release
2997
2998  - Added the URL of the current item in the status bar at the bottom of the
2999    main window. If more than one item is selected, it displays the total sum
3000    of all selected items there.
3001
3002  - Treemap zoom in / out / zoom reset works. The treemap now automatically
3003    zooms out if an item outside its current scope is clicked in the tree view.
3004
3005  - Added more menu and toolbar actions and icons for many of them.
3006
3007  - The treemap's red "current item" rectangle is now stippled instead of a
3008    solid line if the current item is not also selected (users can do that with
3009    ctrl-click).
3010
3011  - Added "about" dialogs for the program and the used Qt version.
3012
3013- 2015-12-30  Treemap rendering now works as expected, and selecting items
3014	      (including multi-selection with shift-click and ctrl-click in the
3015	      tree view and ctrl-click in the treemap view) works. It was a bit
3016	      of a challenge to avoid Qt signal ping-pong between the selection
3017	      model object and the two views.
3018
3019- 2015-12-28  Treemaps are back. It's not perfect yet, but the basic rendering
3020	      works.  I admit I was somewhat scared of that part, but the
3021	      transition from Qt3 QCanvas to QGraphicsScene / QGraphicsView
3022	      went much smoother than I had expected. I am very glad I don't
3023	      have to dig deep into the math again with those cushioned
3024	      treemaps; that part worked completely unchanged. :-)
3025
3026- 2015-12-27  The tree view now supports _extended_ selection, i.e. you can
3027	      shift-click to select a range of items or ctrl-click to select or
3028	      deselect individual items. This was the most requested feature
3029	      for the last KDirStat. This means you can now select more than
3030	      one item at once to move it to the trash can etc. (once cleanup
3031	      actions are back).
3032
3033- 2015-12-25  Christmas release
3034
3035  - Sorting is now done internally in the DirTreeModel, and it's blazingly
3036    fast. It uses lazy sorting - postponing sorting until the last possible
3037    moment for each tree branch. Maybe the branch will never get visible, and
3038    then it doesn't need to be sorted at all. The QSortProxyModel is gone.
3039
3040  - Reading cache files finally works again. It was quite some hassle to find
3041    all the places where the invisible root item that is required for the
3042    QTreeView / QAbstractItemModel make a difference. I hope now I caught all
3043    of them.
3044
3045  - Fixed some bugs that resulted in segfaults. Well, it's a development
3046    version. Such things happen.
3047
3048  - Removed the section about K4DirStat in this README.md; that information was
3049    outdated. It turns out I hadn't looked at the most recent sources of
3050    K4DirStat - that was entirely my own stupidity. My apologies. Since right
3051    now I don't have an informed opinion about K4DirStat, I preferred to remove
3052    that section entirely for the time being. Looks like K4DirStat is indeed
3053    ported to Qt5 now.
3054
3055- 2015-12-20  First usable preview version - see screenshot above. It's still
3056	      pretty rough, and sorting via the QSortProxyModel seems to be
3057	      awfully slow once a number of tree branches were ever
3058	      opened. Looks like I'll have to do that myself, too.
3059
3060- 2015-12-18  Found the crippling bugs that made the DirTreeModel do crazy
3061	      things.  None of the Qt classes proved to be helpful to find that
3062	      - they just happily do the crazy things. That's what I call poor
3063	      design.  Now there is a first working QDirStat with a useful
3064	      display tree, including icons (but no percentage bar graph yet).
3065
3066- 2015-12-07  First working DirTreeModel -- still minimalistic, but working.
3067
3068- 2015-12-06  Created tree model based on QAbstractItemModel.
3069	      Compiles, but dumps core so far.
3070
3071- 2015-12-05  Imported and ported directory tree data classes.
3072	      Hammered through the compiler, but nothing usable so far.
3073
3074- 2015-11-28  QDirStat project is being set up. Nothing usable so far.
3075
3076
3077## KDirStat
3078
3079KDirStat is the predecessor to QDirStat. QDirStat is an 80% rewrite of the KDE3
3080based KDirStat.
3081
3082KDirStat home page: http://kdirstat.sourceforge.net/
3083
3084Sources: https://github.com/shundhammer/kdirstat
3085
3086### KDirStat History
3087
3088_(Incomplete list, just highlighting important releases)_
3089
3090- 2006-06-01 KDirStat 2.5.3: The last KDE3 based version.
3091
3092- 2006-01-08 KDirStat 2.5.2:
3093
3094  - New: Read and write cache files
3095
3096- 2005-02-22 KDirStat 2.4.4
3097
3098  - New: Handle hard links and sparse files
3099
3100- 2003-01-30 KDirStat 2.3.5
3101
3102  - New: colored treemap
3103
3104- 2003-01-05 KDirStat 2.3.3
3105
3106  - New: Treemaps (monochrome only)
3107
3108  - Communication between treemap and tree list view: Select an item in one
3109    view, and it is automatically selected in the other one, too.
3110
3111- 2002-02-25 KDirStat 2.0.0
3112
3113  - Complete rewrite for KDE 2 / Qt 2
3114
3115  - Doing internal caching and (very) lazy creating of QListViewItems for
3116    improved performance and resource consumption
3117
3118- 2000-01-21  KDirStat 0.86 for KDE 1 announced -- the first public version.
3119
3120