BrowserUk has asked for the wisdom of the Perl Monks concerning the following question:

This is off topic I know. I'll let y'all decide whether it's too far off and should be reaped, but it's very perl related for me.

I am having to use a unix system via a secure shell to do some perl stuff, but I find the bash command line editing "features" as frustrating as hell.

So, does anyone have an .inputrc file that maps the pc keyboard to "sensible" mappings that they could let me have?

Things like:

Thanks. Buk


Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
  • Comment on (OT): .inputrc mapping PC keyboard to sensible set vi or set emacs functions.
  • Download Code

Replies are listed 'Best First'.
Re: (OT): .inputrc mapping PC keyboard to sensible set vi or set emacs functions.
by flyingmoose (Priest) on Mar 02, 2004 at 01:08 UTC
    Here is Fedora Core 1's default /etc/inputrc:
      And here is /etc/bashrc: I have no idea if this is going to help or not.
Re: (OT): .inputrc mapping PC keyboard to sensible set vi or set emacs functions.
by Anonymous Monk on Mar 02, 2004 at 04:35 UTC
    man readline for details on .inputrc # the config of your SSH client means this may not work with your clie +nt, either change the escapes or fix your client. ~/.inputrc # Home "\e[71": beginning-of-line # End "\e[79": end-of-line # Delete "\e[83": forward-backward-delete-char # Excercises for reader :-) # "": forward-word # "": backward-word # "": backward-delete-word # "": kill-whole-line
Re: (OT): .inputrc mapping PC keyboard to sensible set vi or set emacs functions.
by tachyon (Chancellor) on Mar 03, 2004 at 01:32 UTC

    Copy and paste to ~/.inputrc. Run bind -f .inputrc to make it active during a session. Does almost most all of what you want....

    Details man readline. s/C/\\C/g. English names don't work as advertised.

    # do not bell on tab-completion set bell-style off set meta-flag on set input-meta on set convert-meta on set output-meta on # Alt + Backspace delete by words # \C-\b does not give you the behaviour you want # as backspace the key is sent as ^h or ^127 ^\177 # ie it already uses Ctrl+something so Ctrl+Ctrl+something is not vali +d "\M-\b": backward-delete-word # Ctrl + K deletes the current line "\C-k": kill-whole-line # Alt + K deletes the current line "\M-k": kill-whole-line # for linux console and RH/Debian xterm # these codes simulate numeric keypad layout # found on some old machines when there were less keys # Home "\e[1~": beginning-of-line # End "\e[4~": end-of-line # Page Up "\e[5~": beginning-of-history # Page Down "\e[6~": end-of-history # this makes DEL key a universal deleter # it deletes under the cursor if there is a char there # at ^ it deletes like a normal delete key # at $ it deletes like a backspace key "\e[3~": forward-backward-delete-char # these control how the arrows work # arrow keys are problematic due to erratic placement # net effect of this is that arrows work as normal # but alt arrow or control arrow moves by word # this is control arrow "\eOC": forward-word "\eOD": backward-word # this is alt arrow "\e\e[C": forward-word "\e\e[D": backward-word # misc miscompatibility hacks! # for rxvt "\e[8~": end-of-line # for non RH/Debian xterm, can't hurt for RH/DEbian xterm "\eOH": beginning-of-line "\eOF": end-of-line # for freebsd console "\e[H": beginning-of-line "\e[F": end-of-line

    To find out what your clients keymappings *really* are just run this script:

    [root@devel3 root]# cat key #!/usr/bin/perl use Term::ReadKey; my $RAW = $ARGV[0] ? 1 : 0; ReadMode 4 unless $RAW; sleep 1 while (not defined ($key = ReadKey(-1))) printf "Get key '%s' %d \%o\n", $key, ord($key), ord($key); ReadMode 0 unless $RAW; [root@devel3 root]#

    It is very handy. Just press the key (combo) and read the result. Called with the raw arg (actually any true value) it will show you the key mappings in ANSI style. You need to do this as lots of special keyboard keys are ASCII 7. Anyway without it it will give you the key and dec and octal names which may or may not help. Note in raw mode when you see a key combo produce:

    ^[ this must be replaced with: \e in the .inputrc file. So if you run ./key and say press Ctrl+Left_Arro +w you will get this: $ ./key raw ^[OC Anyway now we know Ctrl+Left_Arrow is ^[OC so in your .inputrc you put: "\eOC": forward-word note s/\^[/\\e/g Then do a bind -f .inputrc and it just works.

    cheers

    tachyon

      I've followed these instructions to the letter, and still nothing works.

      Whether I use a vanilla putty session, (I blew it away and re-installed from scratch to ensure that nothing was left over from my earlier attempts to configure). Or a vanilla SSH 3.2.9 (build 283) (Also re-installed from scratch).

      In both cases, with the .inputrc file from above, uploaded using the SSH file transfer widget and bound using the command shown. Nothing works.

      I also tried logging out and logging back in, in the forelorn hope that the .inputrc file would be read and acted upon when a new session was started, but still nothing changed. I think that the problem lies in the set up at the host end rather than PC end. Maybe it is non-standard. Surely not everyone using a (RH 7) linux system has to go through this?

      None of the edit keys do anything at all except the backspace key? I cannot even retrieve the previous command using the up-arrow.

      All of which has made my use of Linux over the last 6-weeks a less than wow experience.


      Examine what is said, not who speaks.
      "Efficiency is intelligent laziness." -David Dunham
      "Think for yourself!" - Abigail
        Maybe your SSH client is junk. What happens when you SSH from a similar linux system to another? PuTTY works well for when I need to use a Windows client (which is not often -- but PuTTY is decent).

        Also, which Linux distribution (name and version) is this?