рдпреА рдХреЗ рд▓рд┐рдП рдореЗрдиреВ

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ рдЕрднреА рднреА рд╡рд┐рдо рдФрд░ рдПрдорд╛рдХреНрд╕ рдХреЗ рд╕рдорд╛рди рдПрдХ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдпреА рдХреЗ рд╕рд╛рде рдмреИрдардХрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ред рдХрд┐рдЯ рдореЗрдВ рд╡рд┐рдо рдФрд░ рдЗрдореИрдХ рд╕рд┐рдореБрд▓реЗрд╢рди рднреА рд╣реИрдВред
Vim рдпрд╛ Emacs рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг, рдХреЗрд╡рд▓ Cua- рдЕрдиреБрдХрд╛рд░ рдиреЗ рдореБрдЭреЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛рдпрд╛ред рд╡рд╣рд╛рдБ рдХреБрдЫ рд╣реЙрдЯрдХреАрдЬрд╝ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдореБрдЭрд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдЯрд┐рдВрдЧ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рд╕рд╛рдзрд╛рд░рдг рдЧреНрд░рд╛рдлрд┐рдХ рд╕рдВрдкрд╛рджрдХреЛрдВ рдореЗрдВ, рдпрд╣ рдореБрдЭреЗ рдореЗрдиреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд▓рдЧрддрд╛ рд╣реИред Alt рджрдмрд╛рдПрдВ, рдПрдХ рдореЗрдиреВ рдЦреБрд▓рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдореЗрдВ рдПрдХ рдЕрдХреНрд╖рд░ рд░реЗрдЦрд╛рдВрдХрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╣рдо рдЗрд╕ рддрддреНрд╡ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдХрдорд╛рдВрдб рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдореЗрдиреВ рдореЗрдВ рдЭрд╛рдВрдХрдХрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдзреАрд░реЗ-рдзреАрд░реЗ рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рддрддрд╛ рдореЗрдВ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдпреА рдореЗрдВ рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдЫрд╡рд┐


рд╣рдордиреЗ рд╕рд╛рдзрд╛рд░рдг рд╣реЙрдЯрдХреАрдЬрд╝ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпреА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдмрд╛рдЗрдВрдбрд░реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЖ ред рдпрд╣ рдЫреЛрдЯрд╛, рдФрд░ рд╡рд┐рдо рдФрд░ рдПрдордПрд╕реАрдПрд╕ рдПрдирд╛рд▓реЙрдЧ рдмрд╛рдБрдзрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрджрд┐рдо рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП (рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП) - рдпрд╣реА рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣реЙрдЯрдХреАрдЬрд╝ рдХреЛ рдЖрдо рддреМрд░ рдкрд░ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рджреНрд╡рд╛рд░рд╛ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
keymap :: KeymapSet keymap = portableKeymap ctrl -- | Introduce a keymap that is compatible with both windows and osx, -- by parameterising the event modifier required for commands portableKeymap :: (Event -> Event) -> KeymapSet portableKeymap cmd = modelessKeymapSet $ selfInsertKeymap <|> move <|> select <|> rect <|> other cmd 

рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ <|> рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рдЖрдЧреЗ рджреЗрдЦреЗрдВ рдЕрдиреНрдп cmd:
 other cmd = choice [ spec KBS ?>>! deleteSel bdeleteB, spec KDel ?>>! deleteSel (deleteN 1), spec KEnter ?>>! replaceSel "\n", cmd (char 'q') ?>>! askQuitEditor, cmd (char 'f') ?>> isearchKeymap Forward, cmd (char 'x') ?>>! cut, cmd (char 'c') ?>>! copy, cmd (char 'v') ?>>! paste, cmd (spec KIns) ?>>! copy, shift (spec KIns) ?>>! paste, cmd (char 'z') ?>>! undoB, cmd (char 'y') ?>>! redoB, cmd (char 's') ?>>! fwriteE, cmd (char 'o') ?>>! findFile, cmd (char '/') ?>>! withModeB modeToggleCommentSelection, cmd (char ']') ?>>! autoIndentB IncreaseOnly, cmd (char '[') ?>>! autoIndentB DecreaseOnly ] 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдВрдЬреА рд╕рдВрдпреЛрдЬрди рдмрд╛рдИрдВ рдУрд░ рд╣реИ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рджрд╛рдИрдВ рдУрд░ рд╣реИред рдпрд╛рдиреА рдЬрдм рдЖрдк cmd (char 'c') рджрдмрд╛рддреЗ рд╣реИрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ cmd ctrl рд╣реИ) - рд╣рдореЗрдВ рдХреЙрдкреА рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдХреЛрдб рднреА рд╕реАрдзрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЗрди рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЦреБрдж рдХреЛ рдХреЙрдкреА рдХрд┐рдпрд╛ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдореЗрдиреВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдореЗрдиреВ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ?


рдореЗрдиреВ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рд╣реИ, рдФрд░ Yi.MiniBuffer рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреА рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдлрдВрдХреНрд╢рди рд╣реИ
 spawnMinibufferE :: String -> KeymapEndo -> EditorM BufferRef 

рдЬреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдкрд╛рда рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреА рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдЪрд╛рдмрд┐рдпреЛрдВ рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╛рдиреА рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдкрдВрдХреНрддрд┐ рдореЗрдВ рдореЗрдиреВ рдЖрдЗрдЯрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдмрд╛рдЗрдВрдбрд░реЛрдВ рдореЗрдВ рд╣рдо рдХреБрдВрдЬрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдкрдХрдбрд╝ рд▓реЗрдВрдЧреЗред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдВ рдЬреЛ рдореЗрдиреВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдореЗрдиреВ рдореЗрдВ рдЖрдЗрдЯрдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдпрд╛ рддреЛ рдПрдХ рд╕рдмрдореЗрдиреВ рдЦреЛрд▓рддреА рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реЛрддреА рд╣реИред рддреЛ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
 -- | Menu type Menu = [MenuItem] -- | Menu utem data MenuItem = MenuAction String (MenuContext -> Char -> Keymap) | SubMenu String Menu -- | Menu action context data MenuContext = MenuContext { parentBuffer :: BufferRef } 

рд╕рдмрдореЗрдиреВ рд╡реЗрд░рд┐рдПрдВрдЯ рдореЗрдВ рдПрдХ рд╢реАрд░реНрд╖рдХ рдФрд░ рдПрдХ рд╕рдмрдореЗрдиреВ рд╣реЛрддрд╛ рд╣реИ, рдореЗрдиреНрдпреВрдПрд╢рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рд╢реАрд░реНрд╖рдХ рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдмрд╛рдБрдз рдмрдирд╛рддрд╛ рд╣реИред
MenuContext рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрджрд░реНрдн рд╣реИ рдЬрд┐рд╕реЗ рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрдм рддрдХ рдХреЗрд╡рд▓ рд╕реНрд░реЛрдд рдмрдлрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореЗрдиреВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕реЗ рд╕реЗрд╡ рдмрдЯрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛), рдЪрд╛рд░ рд╡рд╣ рдмрдЯрди рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдореЗрдиреВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЪреВрдВрдХрд┐ рдкреНрд░рдХрд╛рд░ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╣реИ, рдЖрдк рдмрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдореЗрдиреВ рд╢реБрд░реВ рдХрд░реЗрдВ:
 -- | Fold menu item foldItem :: (String -> (MenuContext -> Char -> Keymap) -> a) -> (String -> [a] -> a) -> MenuItem -> a foldItem mA sM (MenuAction title act) = mA title act foldItem mA sM (SubMenu title sm) = sM title (map (foldItem mA sM) sm) -- | Fold menu foldMenu :: (String -> (MenuContext -> Char -> Keymap) -> a) -> (String -> [a] -> a) -> Menu -> [a] foldMenu mA sM = map (foldItem mA sM) 


рд╣рдореЗрдВ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рдореЗрдиреВ рдЖрдЗрдЯрдо рдмрдирд╛рддреЗ рд╣реИрдВред SubMenu рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ, SubMenu "рдлрд╛рдЗрд▓" рд╣реИ ... рд▓реЗрдХрд┐рди MenuAction рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдВрдЧреЗ (рдЙрд╕реА рдХреЗ рджрд╛рдИрдВ рдУрд░? >> рдмрд╛рдЗрдВрдбрд░реНрд╕ рдореЗрдВ)ред рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рджреЛ рдХрд╛ рдПрдХ рдХреЛрдб рджреВрдВрдЧрд╛:
 -- | Action on item action_ :: (YiAction ax, Show x) => String -> a -> MenuItem action_ title act = action title (const act) -- | Action on item with context action :: (YiAction ax, Show x) => String -> (MenuContext -> a) -> MenuItem action title act = MenuAction title act' where act' ctx c = char c ?>>! (do withEditor closeBufferAndWindowE runAction $ makeAction (act ctx)) 

рдпрд╣рд╛рдВ рд╣рдо рдПрдХ MenuItem рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрдм рдЖрдк рдЙрдкрдпреБрдХреНрдд рдмрдЯрди (рдЪрд╛рд░ рд╕реА) рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЗрдиреВ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдПрдХ рдореЗрдиреВ рдбрд┐рд╕реНрдкреНрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗред
 -- | Start menu action startMenu :: Menu -> EditorM () startMenu m = do --  ,   ctx <- fmap MenuContext (gets currentBuffer) startMenu' ctx m where --  ,      (, ) startMenu' ctx = showMenu . foldMenu onItem onSub where showMenu :: [(String, Maybe Keymap)] -> EditorM () --   тАФ      ,    showMenu is = void $ spawnMinibufferE menuItems (const (subMap is)) where menuItems = (intercalate " " (map fst is)) --    тАФ --   +    ,   onItem title act = (title, fmap (act ctx) (menuEvent title)) where --    тАФ --  +  ,        onSub title is = (title, fmap subMenu (menuEvent title)) where --  'c'        subMenu c = char c ?>>! closeBufferAndWindowE >> showMenu is --        Esc,        subMap is = choice $ closeMenu : mapMaybe snd is where closeMenu = spec KEsc ?>>! closeBufferAndWindowE 

рдкреВрд░рд╛ рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдПрдХ рдореЗрдиреВ рдмрдирд╛рдПрдБ


рдЕрдм рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореЗрдиреВ рдмрдирд╛рдиреЗ рд▓рд╛рдпрдХ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдмрдЯрди рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдЖрдк рдЬрд╛рдБрдЪ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдПрдХ рдмрдбрд╝реЗ, рдкрддреНрддреЗрджрд╛рд░ рдореЗрдиреВ рдХреЛ рд▓рд┐рдЦрд╛, рдЬреЛ рдореБрдЭреЗ рдпреА рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбреНрдпреВрд▓реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рднрд░ рдЖрдпрд╛ рдерд╛ред рдЬрдм рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдХреНрд╕рд░ рд╡реНрдпреВ - рд╡рд┐рдВрдбреЛрдЬ рд╕рдмрдореЗрдиреВ рдкрд░ рдЬрд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВрдиреЗ рдЗрд╕ рдореЗрдиреВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╣реЙрдЯрдХреА рдкрд░ рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдЕрдм рдЖрдк рди рдХреЗрд╡рд▓ рд▓рдВрдмреЗ VWS рд╕рдВрдпреЛрдЬрди рд╕реЗ рд╡рд┐рдВрдбреЛ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╕рд┐рд░реНрдл Ctrl-W - S рднреАред

рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдореЗрдиреВ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд╕рдмрдореЗрдиреВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ:
 -- | Main menu mainMenu :: Menu mainMenu = [ menu "File" [ action_ "Quit" askQuitEditor, action "Save" (fwriteBufferE . parentBuffer)], menu "Edit" [ action_ "Auto complete" wordComplete, action_ "Completion" completeWordB], menu "Tools" [ menu "Ghci" ghciMenu], menu "View" [ menu "Windows" windowsMenu, menu "Tabs" tabsMenu, menu "Buffers" buffersMenu, menu "Layout" [ action_ "Next" layoutManagersNextE, action_ "Previous" layoutManagersPreviousE]]] -- | Windows menu windowsMenu :: Menu windowsMenu = [ action_ "Next" nextWinE, action_ "Previous" prevWinE, action_ "Split" splitE, action_ "sWap" swapWinWithFirstE, action_ "Close" tryCloseE, action_ "cLose-all-but-this" closeOtherE] 

рдкреВрд░реЗ рдореЗрдиреВ рдХреЛ рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдкрд░рд┐рдгрд╛рдо


рд╣рдо рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдореЗрдиреВ рдФрд░ рд╕рдмрдореЗрдиреВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ!


рдкрд░рд┐рдгрд╛рдо


рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдмрд┐рд▓реНрдЯ-рдЗрди рд╕рд░рд▓ рдСрдЯреЛ-рдкреВрд░реНрдг, рдлрд┐рд░ рдЬреАрдПрдЪрд╕реАрдЖрдИ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛ред рдЕрдЧрд▓рд╛ рдЪрд░рдг hlint рдЯреВрд▓ рд╣реИ (рдпрд╣ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдорд╛рдирдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдХрд╣рд╛рдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХреБрдЫ рд╕реБрдкрд░рдлреНрд▓рд╕ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрджрд┐) рдФрд░ рдЕрдиреНрдпред

рд╕рднреА рдХреЛрдб GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

рдЕрджреНрдпрддрди

рддреАрди рдХрд╛рд░реНрдпреЛрдВ actionB , actionE рдФрд░ actionY рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ actionY ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдиреНрд╣реЗрдВ runAction . makeAction рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ runAction . makeAction runAction . makeAction
рдПрдХрд▓ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд

Source: https://habr.com/ru/post/In142769/


All Articles