{"action":"closed","issue":{"url":"https://api.github.com/repos/z411/trackma/issues/139","labels_url":"https://api.github.com/repos/z411/trackma/issues/139/labels{/name}","comments_url":"https://api.github.com/repos/z411/trackma/issues/139/comments","events_url":"https://api.github.com/repos/z411/trackma/issues/139/events","html_url":"https://github.com/z411/trackma/issues/139","id":103991742,"number":139,"title":"CLI is badly designed","user":{"login":"bradenbest","id":6936507,"avatar_url":"https://avatars.githubusercontent.com/u/6936507?v=3","gravatar_id":"","url":"https://api.github.com/users/bradenbest","html_url":"https://github.com/bradenbest","followers_url":"https://api.github.com/users/bradenbest/followers","following_url":"https://api.github.com/users/bradenbest/following{/other_user}","gists_url":"https://api.github.com/users/bradenbest/gists{/gist_id}","starred_url":"https://api.github.com/users/bradenbest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bradenbest/subscriptions","organizations_url":"https://api.github.com/users/bradenbest/orgs","repos_url":"https://api.github.com/users/bradenbest/repos","events_url":"https://api.github.com/users/bradenbest/events{/privacy}","received_events_url":"https://api.github.com/users/bradenbest/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/z411/trackma/labels/CLI","name":"CLI","color":"02e10c"},{"url":"https://api.github.com/repos/z411/trackma/labels/enhancement","name":"enhancement","color":"84b6eb"}],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":9,"created_at":"2015-08-31T05:44:31Z","updated_at":"2015-10-25T03:08:19Z","closed_at":"2015-10-25T03:08:19Z","body":"The CLI interface is poorly designed and needs to be re-done. \r\n\r\nAs someone who uses (and designs his own) CLI interfaces for 99% of his work, I can confirm that the interface is unintuitive and clunky (I've designed better CLIs in bash in < 100 lines of code, cli.py is 700 lines, so it's in no way a complex problem). \r\n\r\nThe lack of documentation on the \"undocumented\" commands is unacceptable. A lot of this could be fixed by simply making it easier to read.\r\n\r\nFor example, the prompt line \r\n\r\n    MyAnimeList(anime) Watching> help\r\n\r\ncould be changed to look like \r\n\r\n    [mal] (anime) watching >> help\r\n\r\nAlready a lot easier to read. Add some colors in there and you have a winner. Just make sure to define a set of \"non-colors\" for terminals that can't handle color.\r\n\r\nThe biggest issue is with documentation, though. The ls-style help listing is ugly and cognitively difficult to navigate. An easier and better way to do it is to list it like an index\r\n\r\n    command   args          description\r\n    -----------------------------------\r\n    com1      <name, val>   does thing\r\n    com2      <none>        does other thing\r\n    ...\r\n\r\nBy keeping it simple, you let the user figure it out, and make it impossible for yourself to be lazy enough to \"not document\" a command. That makes it intuitive, rather than frustrating. \r\n\r\nAlso, for the sake of readability, I've found that vertical listings benefit a lot from maintaining a margin of at least two spaces between columns. Designing a CLI takes a lot of sitting back to take in the information, just as much as you do when designing a GUI. A good CLI conveys information quickly and efficiently with little to no parsing effort on the user's end. A bad CLI has to be studied like a map before the user can decipher what's going on.\r\n\r\nDesign can make or break a CLI, and because of the current CLI, I was actually turned off of this program for several months (until I found out it had a gtk interface).\r\n\r\nJust keep in mind that we already use one CLI: bash. We don't want to have to memorize a whole 'nother command line just for one specific task."}}