I've run into this problem, i'm making a CLI that enables the user to make bookmarks, notes or comments on elements. Each element has it's internal unique identifiers and usual entity stuff. The problem is this:

12309453518123) "stuff that belongs to this entity" by Michael245
82374928374298) "other stuff that belongs to another entity" by Robert126

And the list goes on and on...

When the user whants to bookmark the first one for example:

>bookmark add 12309453518123

It's just horrible. What do you suggest?

edit: What i might want (but i'm shure this is wrong):

>bookmark add Mic8123
  • Doesn't entities have more readable/memorable attributes that identify them? Some sort of hierarcical structure where you could give autocomplete suggestions?
    – katDNA
    Dec 2, 2011 at 6:31

2 Answers 2


I assume that this HAS to be a command line interface?

Then first off: Why both "add" and "bookmark"? You should construct the commands with a verb/action as the first part. That is either:

>bookmark entityX


>addBookmark entityX

Then the trick is to find som memorable identifier. If you've ever tried using the filesystem on unix you will know that you can get autocomplete suggestions by typing the first letter(s) and pressing TAB (if I remember correctly ;) ). Then you just keep TAB'ing until you reach the desired suggestion. You type the path separator (a slash) and then you can autocomplete the next part of the path.

One suggestion for a memorable identifier could be username/NameOfEntity. Lets say Michael245 has entity 12309453518123. He has named it 'stuff', making the command:

>bookmark Michael245/stuff

The user could then enter 'bookmark mich', TAB through the Michaels and Micheles, enter '/st', TAB through Michael245's entities starting with 'st'.

This only works if Michael245 is forced to select a name for his entities that is unique among his collection, and if the bookmarking users has some way to explore the entities to discover who ownes what entities - but then the interface wouldn't make much sense without that ;)

  • 2
    "bookmark add" makes sense if you also have "bookmark edit", "bookmark list" and "bookmark remove". That's better than addBookmark, listBookmarks etc because you can type "bookmark /?" to see all bookmark commands, you've got all commands grouped under one namespace which is easier to remember, and it's expandable and adaptable without creating new hidden commands.
    – Rahul
    Dec 2, 2011 at 10:21
  • I agree with Rahul, but asking users to name everything they make would make sense?
    – alfa64
    Dec 2, 2011 at 15:22

You might find some inspiration from Git's revision specification syntax. It has a similar problem, in that it needs nice ways to name objects which are identified by unmemorable SHA1 hashes.

  • The hash (internal identifier) can be abbreviated if the abbreviation is currently unique; so your example could become bookmark add 1230. This will only work well if your identifiers are uniformly distributed.

  • Allow searching for elements: using git's syntax bookmark add :/other stuff, requiring the match is unique. If your interface has search commands, then allow expressing "use the *n*th match of this search. Since you apparently have text and author names, allow searching in either field (specifically).

  • If elements have relationships between them, then allow following the relationship from another named element.

  • Allow the user to give names to elements that are of interest (in git these are branches and tags).

Finally, an idea not from Git:

  • Allow specifying objects that have been recently mentioned in output (especially the first or last such) or are otherwise of recent interest. (Before doing this, consider whether the user might run your application in two separate terminals and become confused.)
  • Yes, initially i thought about indexing the results of the query as they appear onscreen, and then store every identifier with a matching list number. The users will have multiple terminals, so thats another problem, as you suggest.
    – alfa64
    Dec 2, 2011 at 17:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.