with Ada, Editor, Job, Visible_Key_Names;
use Visible_Key_Names;
procedure Emacs_Commands is
    package Ed renames Editor;
    type Intent is (Prompt, Execute);
    Action : Intent;
    Key_1, Key_2 : Rational_Key_Names;
begin
    case Action is
        when Prompt =>
            case Key_1 is
                when C_U =>
                    Ed.Set.Argument_Digit;
                when C_X | C_Z =>
                    case Key_2 is
                        when C_C | C_Z =>
                            Ed.Quit;
                        when others =>
                            null;
                    end case;
                when others =>
                    null;
            end case;
        when Execute =>
            case Key_1 is
                when Window =>
                    case Key_2 is
                        when Window | '=' =>
                            Ed.Window.Directory;
                        when others =>
                            null;
                    end case;
                when C_A | Cs_A =>
                    Ed.Line.Beginning_Of;
                when C_B | Cs_B | C_H | Cs_H =>
                    Ed.Cursor.Left;
                when C_D | Cs_D =>
                    Ed.Char.Delete_Forward;
                when C_E | Cs_E =>
                    Ed.Line.End_Of;
                when C_F | Cs_F =>
                    Ed.Cursor.Right;
                when C_G | Cs_G =>
                    Job.Interrupt;
                when C_K | Cs_K =>
                    Ed.Line.Delete_Forward;
                    -- {macro}      when Cs_K =>
                    --                  Ed.Line.Delete_Forward;
                    --                  Ed.Cursor.Down;
                    --                  Ed.Line.End_Of;
                    --                  Ed.Line.Beginning_Of (1);
                    --                  Ed.Char.Delete_Backward;
                    -- {macro}      when C_J | Cs_J =>
                    --                  Ed.Line.Indent;
                    --                  Ed.Char.Tab_Forward;
                when C_I | Cs_I | Tab =>
                    Ed.Char.Tab_Forward;
                when C_N | Cs_N =>
                    Ed.Cursor.Down;
                when C_O | Cs_O =>
                    Ed.Line.Open;
                when C_P | Cs_P =>
                    Ed.Cursor.Up;
                when Cs_U =>
                    Ed.Line.Delete_Backward;
                when C_V | Cs_V =>
                    Ed.Image.Down;
                when C_Space | C_At_Sign =>
                    Ed.Set.Designation_Off;
                when M_B | Ms_B | Ms_H | M_H =>
                    Ed.Word.Previous;
                when M_F | Ms_F =>
                    Ed.Word.Next;
                when others =>
                    null;
            end case;
    end case;
end Emacs_Commands;