Has anyone seen any paradigms they really like for...
# thinking-together
h
Has anyone seen any paradigms they really like for keyboard-navigating big, abstract mediums that aren't text? i really like how text can be keyboard navigated easily. Where your cursor + attention is about to go is always clear and we've invented lots of ways to accelerate getting your cursor to where you want it to go. How does that play out in things that aren't text though, like all the flow based languages we're seeing, or tools like Webflow that are trying to make it fast to create trees of stuff? Are we destined for slower mouse based interfaces that don't leverage muscle memory as much?
👍 6
i think part of why code feels nice to navigate is that it matches the paper metaphor that we're all very used to, things don't jump around or appear or stack on top of each other when you're working in a (normal) text editor, it's 2D, which monitors and the arrow keys are also
one thing i've been exploring is TV-remote style navigation of interfaces where the interface knows what all the selectable targets are and the arrow keys move a cursor in space between all the targets, like the Apple TV or Roku UI, but it suffers from some issues where it's unclear where your cursor might go to next, and that compounds as you jump farther so it's hard to make accelerated key commands like jump all the way to left or right or something of that nature.
text files also don't have inner hidden bits that you have to open by clicking something or buried menus, the only way you can change which part of a text file you are seeing is by scrolling, which again matches the paper metaphor really closely. we've invented all sorts of fun ways to jump around the different text files to allow developers to go in and out of abstractions and levels of detail, but the artifacts that express that detail don't really compress themselves or expand or change shape, unless you're using code folding, which i always found cumbersome
w
I find folding cumbersome due to a lack of mapped, memorized, and practiced keys for performing the higher level navigation actions I would want to execute.
p
Check out Grant’s work: https://constraint.systems He does experimental design tools with a Vim vibe to it.
y
I’ve been investigating this a bit. I made a prototype of a keyboard-oriented html/css editor a while ago, haven’t revisited it since but you might find it interesting as a non-text example of keyboard UI. Also seconding @Prathyush, check out grant’s work! https://twitter.com/yoshikischmitz/status/1185189779521953798?s=21
👍 1
Also iirc WorkFlowy is pretty keyboard friendly. You might find stuff like vim-wiki or org mode interesting, as those deal with trees and are primarily keyboard-driven as well.
Finally, if we extend this idea to non-pointer interfaces(i.e not mouse or touch), you can investigate video games that use d-pads and buttons as their input method and observe that buttons are pretty good at controlling embodied agents.
Oh! Also many structured code editors support keyboard navigation. Related, TiledText by @westoncb lets you do AST navigation using a game pad(w/ no pointers, as far as I’m aware): http://westoncb.com/projects/tiledtext
w
Yoshiki I see it's been about a year since those tweets—maybe time to resume that project? 😛 (really cool though—don't think I'd seen that before)
1
😅 1
I do think the Tiled Text input scheme did a couple things that would be useful for non-text UIs, but probably not for using keyboard control. It is "pointerless" though: it's a 1d input scheme, no moving a pointer in 2d space. The navigation scheme has two parts, one of which is less visible in the video: expansion/collapsing to change which level of the tree you're at, and 'cycling'. Cycling is what makes it possible to not use pointers. Two things needed to make cycling effective: 1. being able to move to higher tree levels, allowing you to skip over large sections 2. disconnecting the amount of space you have to swipe the input from the visual representation: whether a node is tiny or huge in the UI, you 'travel' the same distance with your input device.
👍 3
g
@Harry Brundage check out my demo of Flowsheets for some keyboard-based navigation:

https://youtu.be/Ki--ZvRBW38

Also there’s this twitter thread talking about why some keyboard interfaces work so well: https://twitter.com/gravislizard/status/927598314748502018?s=21
❤️ 2
h
thanks for these links friends!
i think one tricky thing that i haven't found much guidance on is keyboard navigating trees who's layout is governed by something other than the application / editor, like a webpage designer or a flowchart editor
in the webpage case the browser's layout engine is choosing where stuff goes, or in the flowchart editor the user is, and that means that the system can't then decide to lay stuff out in a way that makes keyboard navigation predictable and obvious, like say workflowy or org mode
i ended up with something super similar to Glen's work where you enter into and exit out of new spatial navigation contexts with enter/escape and then arrow key around to move between stuff, but it doesn't work so good because some navigation targets are tiny and say exactly north-west of the current cursor position, which key do i press, especially if there's other big navigation targets due north and due west
whereas Glen controls the layout and can avoid ambiguously placed navigation targets
g
they mention how wikipedia is a perfect case for mouse UI in that twitter thread and keyboard navigation would be awful for that kind of content
y
Another keyboard navigation pattern I like is vimperator’s hint-mode for clicking on links, tho it can get crowded. I wonder if one could make a hierarchical version of it to reduce visual clutter: https://en.m.wikipedia.org/wiki/Vimperator
👍 2
j
Superhuman.com is doing a really great job on this front. It's an email client that encourages you to be 100% keyboard-driven. Mouse is optional. Everything is set up very intuitively.
y
^ an interesting thing about superhuman is the culture and aesthetic they’ve fostered around keyboard shortcuts. I feel like they’ve made keyboard shortcuts cool and sexy, this desirable skill to master, and kinda turned it into a fun game of mastery.(tho I’m not the target audience, being someone that writes at most a couple emails a week) The VIM community also has a culture of respect for high keyboard usage but... well VIM isn’t quite as cool(I say this as a long time user)
c
Negative points for the rather invasive on-boarding of superhuman. They want loads of personal details before you get anywhere. I was put off by the 'fill in a load of details and a questionnaire, and then later we'll let you in for 30$ approach....'
w
@yoshiki Keyboard shortcuts are like learning a musical instrument: there are pluses and minuses. Is this particular instrument worth mastering?
👍 2
j
@yoshiki a nice example of that sort of "jump to it" keyboard interface (that I use all the time) is `ace-jump-mode`:

https://www.youtube.com/watch?v=UZkpmegySnc

c
FWIW, I use https://github.com/easymotion/vim-easymotion for the same thing in Vim.
👍 2
h
i was reading about Kakoune the other day (https://cosine.blue/2019-09-06-kakoune.html) and they made a really interesting insight into the vim motion commands that i really like
Whereas vi’s keystroke language follows verb-object order, Kakoune inverts that by following object-verb order. In real terms, that means you make a selection (object) before deciding what to do (verb) with it. The object might be a character, word, sentence, paragraph, parenthetical, regular expression, you name it; the verb might be deleteyank (copy), changeindent, or even transformative operations like lintformatuppercase, etc. In Kakoune, it is with this reversed grammar, this postfix notation, that you interactively sweep up a group or groups of characters before acting on them. That way if your object isn’t quite right, you can immediately correct it without having to undo and redo your verb.
it makes a lot of sense that the selecting and operating-on processes are two different ones where the second is a lot more likely to fail than the first, so better to latch progress and have the user's selection remain so they can try a failed operation again
z
Totally agree with the above point about difficulty navigating layout you don’t control with the keyboard. In general navigation seems to be the trickiest bit of making an application keyboard centric. On the keyboard the basic movement is really only (up, down, left, right) and if the layout makes it unclear where those directions will take you it’s hard to make it feel really good/be usable. Fixed layout ui’s can get away with some navigation that doesn’t make as much sense since the user can gain familiarity. Fluid layouts like a flowchart editor inherently dont have natural up/down/left/right navigation that will be quick and intuitive. I think the interaction model of jumping around to the nodes and edges of the flowchart is just not well suited to the keyboard as an input device. For flowcharts + keyboard maybe the right approach is going with the ‘grain’ of the keyboard and build a really good graphviz (or graphviz like language) editor with augmented text as the primary interaction mode. And then have mouse manipulation as a secondary interaction for smaller layout tweaks. That way you could assemble graphs as fast as you can type. Another route would be to build on a different input device better suited to the task of flowchart construction like ipad