digraph finite_state_machine {
        rankdir=LR;
        node [shape = doublecircle, fixedsize = true, width = 1.2, height = 1.2]; standard;
        node [shape = circle];
        standard -> standard [ label = "any key" ];
        standard -> "command\nmode" [ label = "hotkey" ];
        "command\nmode" -> standard [ label = "single key command" ];
        "command\nmode" -> standard [ label = "invalid key" ];

        "command\nmode" -> "macro\ncommand" [ label = "m" ];
        "macro\ncommand" -> "macro\ndefinition" [ label = "macro key" ];
        "macro\ndefinition" -> "macro\ndefinition" [ label = "any key" ];
        "macro\ndefinition" -> standard [ label = "hotkey" ];

        "command\nmode" -> "macro\ndelete" [ label = "M" ];
        "macro\ndelete" -> standard [ label = "macro key" ];

        "command\nmode" -> "complex\ncommand" [ label = "multi key command" ];
        "complex\ncommand" -> "complex\ncommand" [ label = "any key" ];
        "complex\ncommand" -> standard [ label = "hotkey" ];
        "complex\ncommand" -> standard [ label = "invalid key" ];
}


