VC++ Named Bookmarks
Back when I first started using the Microsoft C++ compiler (VC++ 4.1, I think) I found the named bookmark system absolutely indispensable for keeping track of important places in the code. I also used it to keep track of all bugs that I fixed by prefixing the bookmark name with a bug number - that way I could easily find the relevant code if I had a similar or related bug. I liked it so much that I modelled HexEdit's bookmark system on the Visual Studio system. (Actually I think the VC++ IDE was called Developer Studio, not Visual Studio, in those days.)
The things that made the bookmark system particularly useful were that bookmarks were persistent, project-wide and you could assign each bookmark a meaningful name. You needed to know nothing but the name of the bookmark to be able to jump straight to the source code. You could even jump to a bookmark in a file that was not even open and the IDE would kindly open it for you.
[The worst thing was that the bookmarks were stored in a binary format and you could easily lose all your bookmarks if the file became corrupted, which often happened. I quickly learnt to backup the bookmarks file regularly but not being text it was not amenable to being placed under version control.]
As I said, I modelled the HexEdit bookmarks on the VC++ 6 (DevStudio) bookmarks system but there were also some improvements...
Improved Dialog
First I made the bookmarks dialog modeless so you could leave it open to always be able to see the list. This also makes it simple to jump to a bookmark (just by double-clicking it) and it's also much easier to add a new one.
It is just stupid for a dialog that contains a list to not be resizeable, especialy as monitors are always becoming of higher resolution. I always found the pokey little Dev Studio dialog to be annoying.
Finding Bookmarks
The HexEdit bookmarks dialog supports several columns of information which can be resized and even hidden. Sorting on a particular column can make it easy find the bookmark you are looking for.
One thing I find annoying is when you can't remember the name of a bookmark. HexEdit also keeps track of when each bookmark was last modified (created or moved) and when it was last accessed, or jumped to. This information can be useful to find a bookmark you can't remember the name of.
Fixing Annoyances
It's annoying when you go to jump to a bookmark but the file it points to no longer exists on disk. HexEdit provides a Validate button so you can check that all the bookmarks are valid.
I also got rid of the silly idea of having completely separate lists of named and unnamed bookmarks. In HexEdit if you create an "unnamed" bookmark (eg by pressing Ctrl+F2) it adds a bookmark prefixed with "Unnamed" such as "Unnamed001".
One annoyance I encounter when using HexEdit is that bookmarks mysteriously seem to move. (And no, it is not a bug in HexEdit). I suspect the most common reason is that the file has been modified outside of HexEdit rendering the bookmark slightly out of place. As a way around this I recently added a very useful feature -- if you see a bookmark is in the wrong place you can just click and drag it to the right place.
Bookmarks Tool
Visual Studio Bookmarks
When VS.Net (aka Visual Studio 2002) was released Microsoft rewrote the IDE and accidentally or intentionally removed almost all support for bookmarks. This was a major step backward from VC++6 so obviously I wrote an email of complaint. I also made a list of suggestions in the same or another email including most of the facilities in HexEdit:
- modeless, resizeable, dockable bookmarks window
- sortable list with multiple columns
- Ctrl+F2 (unnamed bookmark) should just create a special name and add it to the list of named bookmarks
- bookmark categories