From d65c63322ef52443b372c3c49dbd3584596fed6b Mon Sep 17 00:00:00 2001 From: Kurtis Rader Date: Mon, 30 Nov 2015 15:44:51 -0800 Subject: [PATCH] allow \cJ (\n) to be bound separate from \cM (\r) This makes it possible (on UNIX systems, don't know about MS Windows) to bind \cJ (\n) independently of \cM (\r, aka [enter]). Resolves #217 --- share/functions/fish_default_key_bindings.fish | 1 + share/functions/fish_vi_key_bindings.fish | 1 + src/input.cpp | 1 + src/reader.cpp | 2 ++ 4 files changed, 5 insertions(+) diff --git a/share/functions/fish_default_key_bindings.fish b/share/functions/fish_default_key_bindings.fish index 6647e8a64..cac095d3d 100644 --- a/share/functions/fish_default_key_bindings.fish +++ b/share/functions/fish_default_key_bindings.fish @@ -9,6 +9,7 @@ function fish_default_key_bindings -d "Default (Emacs-like) key bindings for fis bind $argv "" self-insert bind $argv \n execute + bind $argv \r execute bind $argv \ck kill-line bind $argv \cy yank diff --git a/share/functions/fish_vi_key_bindings.fish b/share/functions/fish_vi_key_bindings.fish index 53551f0fb..98f2ca129 100644 --- a/share/functions/fish_vi_key_bindings.fish +++ b/share/functions/fish_vi_key_bindings.fish @@ -38,6 +38,7 @@ function fish_vi_key_bindings --description 'vi-like key bindings for fish' bind -k right forward-char bind -k left backward-char bind -m insert \n execute + bind -m insert \r execute bind -m insert i force-repaint bind -m insert I beginning-of-line force-repaint bind -m insert a forward-char force-repaint diff --git a/src/input.cpp b/src/input.cpp index e87286626..bc64889eb 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -499,6 +499,7 @@ int input_init() { input_mapping_add(L"", L"self-insert"); input_mapping_add(L"\n", L"execute"); + input_mapping_add(L"\r", L"execute"); input_mapping_add(L"\t", L"complete"); input_mapping_add(L"\x3", L"commandline \"\""); input_mapping_add(L"\x4", L"exit"); diff --git a/src/reader.cpp b/src/reader.cpp index 63b702835..df1964924 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -1028,6 +1028,8 @@ void reader_init() /* Set the mode used for the terminal, initialized to the current mode */ memcpy(&shell_modes, &terminal_mode_on_startup, sizeof shell_modes); + shell_modes.c_iflag &= ~ICRNL; /* turn off mapping CR (\cM) to NL (\cJ) */ + shell_modes.c_iflag &= ~INLCR; /* turn off mapping NL (\cJ) to CR (\cM) */ shell_modes.c_lflag &= ~ICANON; /* turn off canonical mode */ shell_modes.c_lflag &= ~ECHO; /* turn off echo mode */ shell_modes.c_iflag &= ~IXON; /* disable flow control */