Command line interfaces are reified UIs
>There is, after all, no fundamental reason a GUI could not be designed with the goal of reification of interaction in mind; it’s just that it is rarely done in practice.If we have to search for an underlying reason, it's that most GUI interactions by most end users don't need reification and therefore, that code is not put in.If the GUI has obvious needs for reification, the programmers account for it.  Two examples that come to mind are computer chess games, and software audio workstations.Many computer users who are comfortable with UNIX command line will nevertheless "move chess pieces" by clicking and dragging the piece from one square to another.  However, virtually all chess programs still record the algebraic chessboard notation of each move and the players can see the tally of moves scrolling on the side of the board.The other example has music producers mixing a song.  They will adjust the sliders/faders of volume panning and the software will record their moves.  It's known in the trade as "mix automation".  When the song is played back, the software makes the sliders mimic the same moves.  The automation in "reified" into a time graph[1] such that one can move the nodes around to fine tune the movements more precisely than the fingers did in real time.As for other GUI applications like typical business data entry screens, etc... most GUI toolkits like C# Winforms, C++ Qt, HTML buttons, etc do not include a macro recorder in the default event loop.  Therefore, to "reify" the GUI in the same fashion as chess programs or the audio software requires grafting data structures and programming extra code to "record" the button presses into a timeline.  Programmers won't do this unless there's a customer need for it.  (E.g. Photoshop lets you reify the GUI as "actions" for later playback")[1] example yellow line graphs the fader or knob changes: http://cdm.link/app/uploads/2014/06/logicmixing-640x399.jpg