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