From ce41e3468ec77acb958de244f86ed65f6c5cbedf Mon Sep 17 00:00:00 2001 From: Kurtis Rader Date: Sat, 16 Apr 2016 20:03:14 -0700 Subject: [PATCH] add way to comment/uncomment a command Fixes #2375 (cherry picked from commit 2f8d0e9aba3662fcb1032ffe33bc6faf2e04eb8f) --- .../__fish_toggle_comment_commandline.fish | 17 +++++++++++++++++ share/functions/fish_default_key_bindings.fish | 5 ++++- share/functions/fish_vi_key_bindings.fish | 8 ++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 share/functions/__fish_toggle_comment_commandline.fish diff --git a/share/functions/__fish_toggle_comment_commandline.fish b/share/functions/__fish_toggle_comment_commandline.fish new file mode 100644 index 000000000..8bdd7e822 --- /dev/null +++ b/share/functions/__fish_toggle_comment_commandline.fish @@ -0,0 +1,17 @@ +# This is meant to be bound to key sequences such as \e#. It provides a simple way to quickly +# comment/uncomment the current command. This is something introduced by the Korn shell (ksh) in +# 1993. It allows you to capture a command in the shell history without executing it. Then +# retrieving the command from the shell history and removing the comment chars. +# +# This deliberately does not execute the command when removing the comment characters to give you an +# opportunity to modify the command. + +function __fish_toggle_comment_commandline --description 'Comment/uncomment the current command' + set -l cmdlines (commandline -b) + if test "$cmdlines" = "" + return + end + set -l cmdlines (printf '%s\n' '#'$cmdlines | string replace -r '^##' '') + commandline -r $cmdlines + string match -q '#*' $cmdlines[1]; and commandline -f execute +end diff --git a/share/functions/fish_default_key_bindings.fish b/share/functions/fish_default_key_bindings.fish index 8d86c7eec..c65cd49ea 100644 --- a/share/functions/fish_default_key_bindings.fish +++ b/share/functions/fish_default_key_bindings.fish @@ -144,5 +144,8 @@ function fish_default_key_bindings -d "Default (Emacs-like) key bindings for fis bind $argv \eOc forward-word bind $argv \eOd backward-word end -end + # Make it easy to turn an unexecuted command into a comment in the shell history. Also, + # remove the commenting chars so the command can be further edited then executed. + bind \e\# __fish_toggle_comment_commandline +end diff --git a/share/functions/fish_vi_key_bindings.fish b/share/functions/fish_vi_key_bindings.fish index f63956677..2518ab74c 100644 --- a/share/functions/fish_vi_key_bindings.fish +++ b/share/functions/fish_vi_key_bindings.fish @@ -224,4 +224,12 @@ function fish_vi_key_bindings --description 'vi-like key bindings for fish' bind -M visual -m default \e end-selection force-repaint set fish_bind_mode $init_mode + + # Make it easy to turn an unexecuted command into a comment in the shell history. Also, remove + # the commenting chars so the command can be further edited then executed. + bind -M default \# __fish_toggle_comment_commandline + bind -M visual \# __fish_toggle_comment_commandline + bind -M default \e\# __fish_toggle_comment_commandline + bind -M insert \e\# __fish_toggle_comment_commandline + bind -M visual \e\# __fish_toggle_comment_commandline end