Allow datablocks to be deleted instantly
When you save your blend file (Ctrl+S), Blender doesn't write any zero-user datablocks, so making a datablock have zero users is the only way to remove some types of datablocks from your scene.
Shift-clicking the "x" on a datablock picker sets its users to zero.
Changes proposed:
1) Let users delete datablocks immediately.
An image, material etc. that you definitely don't need anymore, users should be able to delete these things at once. This action needs to be undoable.
Note the "Shift + Ctrl + Click to delete". Without this, some people are left with having to clear all users for the datablock, saving the file and then reloading it --- just to see the datablock(s) gone!
2) Let users disable garbage collection if they want.
Blender's garbage collection is what causes datablocks with zero links to users ( shown with a little zero on the picker list) to not be written when you save your .blend file.
Some people might want to keep some datablocks (images, materials etc.) even if they might not be linked to any users. You can set fake-users for each datablock you want to keep around (more things to worry about...), or a new option could be added to User Preferences that disables this behaviour:
So people can disable that checkbox (and behaviour) if they want.
2 Comments
What you're proposing is not a removal of users. From your very description, it's clear that datablocks still have have users. What you're actually proposing is that all datablocks always have a fake user so they're not automatically clean up when the file closes.
The argument splits about 50/50. For some datablocks (Actions), it used to be that there was always a fake user enabled by default and you'd have to remove the fake user before removing the datablock. The problem there is that people complained because they couldn't figure out how to remove the datablock and that their files got unnecessarily big. So, in the name of consistency, Actions were made to behave like all other datablocks (no fake user by default). Now folks on the other side of the fence complain that unlinked datablocks get lost.
There's not a neat and clear solution here. While there's value in guaranteeing that datablocks never get automatically cleaned up, it can be a hassle for users if they have to manually clean up all datablocks. Remember that datablocks exist for all kinds of datatypes in Blender. Take, for example, meshes. If mesh datablocks always have a fake user, that means when you delete the object that points the mesh datablock, you don't actually remove that datablock... just the object pointing to it. You'd need to manually go in and get rid of the mesh datablock separately.
There's value in this idea from an asset management standpoint, but I think it's going to need a lot more thought before we find the best solution in Blender.
@Jason van Gumster: I agree with some of your points, like on meaning and language. I've retouched some of the text and title, I hope it's an improvement.
I disagree on your point about mesh datablocks. I think they are a special case and deleting the mesh object should also instantly delete its datablock, unless that datablock is shared by other instances. For users like a material slot and the image editor you have a datablock picker right there on the interface with an X and F buttons, you're expected to pick and change datablocks as you work. But for meshes the picker looks simpler, and a mesh is more tightly linked to its datablock: how many times since you started using Blender have you changed the datablock of a mesh? For me it was like the one time when I was trying this feature out. So meshes are a special case IMO.
What I'd like the most is the ability to instantly delete a datablock. A secondary proposal is an option to automatically force fake-user on all datablocks, like you said. This would probably be easier to implement than changing the garbage collection stuff like I suggested in the post.