182270653Santon#!/bin/sh 282270653Santon# 3*f45a9042Sjasper# $OpenBSD: emacs.sh,v 1.15 2021/09/02 07:14:15 jasper Exp $ 45ed25df9Santon# 582270653Santon# Copyright (c) 2017 Anton Lindqvist <anton@openbsd.org> 637f3e371Sschwarze# Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org> 782270653Santon# 882270653Santon# Permission to use, copy, modify, and distribute this software for any 982270653Santon# purpose with or without fee is hereby granted, provided that the above 1082270653Santon# copyright notice and this permission notice appear in all copies. 1182270653Santon# 1282270653Santon# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1382270653Santon# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1482270653Santon# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1582270653Santon# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1682270653Santon# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1782270653Santon# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1882270653Santon# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1982270653Santon 2082270653Santon. "${1:-.}/subr.sh" 2182270653Santon 22f8e6ffd8SantonKSH=$2 23f8e6ffd8Santon 2482270653SantonEDITOR= 25997ea89aSantonENV= 2682270653SantonHISTFILE= 2782270653SantonMAIL= 28c0603667SantonPS1=' # ' 2982270653SantonVISUAL=emacs 30*f45a9042Sjasperexport EDITOR ENV HISTFILE MAIL PS1 VISUAL 3182270653Santon 326908c6b3Sschwarze# The function testseq() sets up a pseudo terminal and feeds its first 336908c6b3Sschwarze# argument to a shell on standard input. It then checks that output 346908c6b3Sschwarze# from the shell to the pseudo terminal agrees with the second argument. 356908c6b3Sschwarze 3682270653Santon# auto-insert 37c0603667Santontestseq "abc" " # abc" 3837f3e371Sschwarze 3937f3e371Sschwarze# insertion of valid UTF-8 40c0603667Santontestseq "z\0002\0302\0200" " # z\b\0302\0200z\b" 41c0603667Santontestseq "z\0002\0337\0277" " # z\b\0337\0277z\b" 42c0603667Santontestseq "z\0002\0340\0240\0200" " # z\b\0340\0240\0200z\b" 43c0603667Santontestseq "z\0002\0354\0277\0277" " # z\b\0354\0277\0277z\b" 44c0603667Santontestseq "z\0002\0355\0200\0200" " # z\b\0355\0200\0200z\b" 45c0603667Santontestseq "z\0002\0355\0237\0277" " # z\b\0355\0237\0277z\b" 46c0603667Santontestseq "z\0002\0356\0200\0200" " # z\b\0356\0200\0200z\b" 47c0603667Santontestseq "z\0002\0357\0277\0277" " # z\b\0357\0277\0277z\b" 4806284b46Sschwarzetestseq "z\0002\0360\0220\0200\0200" " # z\b\0360\0220\0200\0200z\b" 4906284b46Sschwarzetestseq "z\0002\0360\0277\0277\0277" " # z\b\0360\0277\0277\0277z\b" 5006284b46Sschwarzetestseq "z\0002\0361\0200\0200\0200" " # z\b\0361\0200\0200\0200z\b" 5106284b46Sschwarzetestseq "z\0002\0363\0277\0277\0277" " # z\b\0363\0277\0277\0277z\b" 52c0603667Santontestseq "z\0002\0364\0200\0200\0200" " # z\b\0364\0200\0200\0200z\b" 53c0603667Santontestseq "z\0002\0364\0217\0277\0277" " # z\b\0364\0217\0277\0277z\b" 5437f3e371Sschwarze 5537f3e371Sschwarze# insertion of incomplete UTF-8 56c0603667Santontestseq "z\0002\0302\0006" " # z\b\0302z\bz" 57c0603667Santontestseq "z\0002\0377\0006" " # z\b\0377z\bz" 58c0603667Santontestseq "z\0002\0337\0006" " # z\b\0337z\bz" 59c0603667Santontestseq "z\0002\0340\0006" " # z\b\0340z\bz" 60c0603667Santontestseq "z\0002\0357\0006" " # z\b\0357z\bz" 61c0603667Santontestseq "z\0002\0364\0006" " # z\b\0364z\bz" 62c0603667Santontestseq "z\0002\0340\0240\0006" " # z\b\0340\0240z\bz" 63c0603667Santontestseq "z\0002\0354\0277\0006" " # z\b\0354\0277z\bz" 64c0603667Santontestseq "z\0002\0355\0200\0006" " # z\b\0355\0200z\bz" 65c0603667Santontestseq "z\0002\0355\0237\0006" " # z\b\0355\0237z\bz" 66c0603667Santontestseq "z\0002\0356\0200\0006" " # z\b\0356\0200z\bz" 67c0603667Santontestseq "z\0002\0357\0277\0006" " # z\b\0357\0277z\bz" 6806284b46Sschwarzetestseq "z\0002\0360\0220\0200\0006" " # z\b\0360\0220\0200z\bz" 6906284b46Sschwarzetestseq "z\0002\0360\0277\0277\0006" " # z\b\0360\0277\0277z\bz" 7006284b46Sschwarzetestseq "z\0002\0361\0200\0200\0006" " # z\b\0361\0200\0200z\bz" 71998a0ad9Sschwarzetestseq "z\0002\0363\0200\0200\0006" " # z\b\0363\0200\0200z\bz" 72998a0ad9Sschwarzetestseq "z\0002\0363\0277\0277\0006" " # z\b\0363\0277\0277z\bz" 73c0603667Santontestseq "z\0002\0364\0200\0200\0006" " # z\b\0364\0200\0200z\bz" 74c0603667Santontestseq "z\0002\0364\0217\0277\0006" " # z\b\0364\0217\0277z\bz" 7537f3e371Sschwarze 7637f3e371Sschwarze# insertion of invalid bytes 77c0603667Santontestseq "z\0002\0300\0277" " # z\b\0300z\b\b\0300\0277z\b" 78c0603667Santontestseq "z\0002\0301\0277" " # z\b\0301z\b\b\0301\0277z\b" 79c0603667Santontestseq "z\0002\0360\0217" " # z\b\0360z\b\b\0360\0217z\b" 80c0603667Santontestseq "z\0002\0365\0217" " # z\b\0365z\b\b\0365\0217z\b" 81c0603667Santontestseq "z\0002\0367\0217" " # z\b\0367z\b\b\0367\0217z\b" 82c0603667Santontestseq "z\0002\0370\0217" " # z\b\0370z\b\b\0370\0217z\b" 83c0603667Santontestseq "z\0002\0377\0217" " # z\b\0377z\b\b\0377\0217z\b" 8437f3e371Sschwarze 8537f3e371Sschwarze# insertion of excessively long encodings 8637f3e371Sschwarzetestseq "z\0002\0340\0200\0200" \ 87c0603667Santon " # z\b\0340z\b\b\0340\0200z\b\b\0340\0200\0200z\b" 8837f3e371Sschwarzetestseq "z\0002\0340\0201\0277" \ 89c0603667Santon " # z\b\0340z\b\b\0340\0201z\b\b\0340\0201\0277z\b" 9037f3e371Sschwarzetestseq "z\0002\0340\0202\0200" \ 91c0603667Santon " # z\b\0340z\b\b\0340\0202z\b\b\0340\0202\0200z\b" 9237f3e371Sschwarzetestseq "z\0002\0340\0237\0277" \ 93c0603667Santon " # z\b\0340z\b\b\0340\0237z\b\b\0340\0237\0277z\b" 9406284b46Sschwarzetestseq "z\0002\0360\0200\0200\0200" \ 9506284b46Sschwarze " # z\b\0360z\b\b\0360\0200z\b\b\0360\0200\0200z\b\b\0360\0200\0200\0200z\b" 9606284b46Sschwarzetestseq "z\0002\0360\0217\0277\0277" \ 9706284b46Sschwarze " # z\b\0360z\b\b\0360\0217z\b\b\0360\0217\0277z\b\b\0360\0217\0277\0277z\b" 9837f3e371Sschwarze 9937f3e371Sschwarze# insertion of surrogates and execessive code points 10037f3e371Sschwarzetestseq "z\0002\0355\0240\0200" \ 101c0603667Santon " # z\b\0355z\b\b\0355\0240z\b\b\0355\0240\0200z\b" 10237f3e371Sschwarzetestseq "z\0002\0355\0277\0277" \ 103c0603667Santon " # z\b\0355z\b\b\0355\0277z\b\b\0355\0277\0277z\b" 10437f3e371Sschwarzetestseq "z\0002\0364\0220\0200\0200" \ 105c0603667Santon " # z\b\0364z\b\b\0364\0220z\b\b\0364\0220\0200z\b\b\0364\0220\0200\0200z\b" 10637f3e371Sschwarzetestseq "z\0002\0364\0277\0277\0277" \ 107c0603667Santon " # z\b\0364z\b\b\0364\0277z\b\b\0364\0277\0277z\b\b\0364\0277\0277\0277z\b" 1080a8992d0Santon 1090a8992d0Santon# insertion of unmatched meta sequence 110c0603667Santontestseq "z\0002\0033[3z" " # z\b\0007" 111aaf5d128Santon 112aaf5d128Santon# ^C, ^G: abort 113aaf5d128Santontestseq "echo 1\0003" " # echo 1\r\n # " 114aaf5d128Santontestseq "echo 1\0007" " # echo 1\r\n # " 115aaf5d128Santon 116aaf5d128Santon# ^B, Left: backward-char 117aaf5d128Santontestseq "\0002" " # \0007" 118aaf5d128Santontestseq "a\0002" " # a\0010" 119aaf5d128Santontestseq "\0303\0266\0002" " # \0303\0266\0010" 120aaf5d128Santontestseq "a\0033[D" " # a\0010" 121aaf5d128Santontestseq "a\0033OD" " # a\0010" 122aaf5d128Santon 123aaf5d128Santon# ^[b, Ctrl-Left: backward-word 124aaf5d128Santontestseq "\0033b" " # \0007" 125aaf5d128Santontestseq "a1_$\0033b" " # a1_$\0010\0010\0010\0010" 126aaf5d128Santontestseq "a1 \0303\0266\0033b\0033b" " # a1 \0303\0266\0010\0010\0010\0010" 127aaf5d128Santontestseq "a1_$\0033[1;5D" " # a1_$\0010\0010\0010\0010" 128aaf5d128Santon 129aaf5d128Santon# ^[<: beginning-of-history 130aaf5d128Santontestseq "\0033<" " # \0007" 131aaf5d128Santontestseq ": 1\n: 2\n\0033<" " # : 1\r\r\n # : 2\r\r\n # \r # : 1 \0010" 132aaf5d128Santon 133aaf5d128Santon# ^A, Home, Ctrl-Down: beginning-of-line 134aaf5d128Santontestseq "\0001" " # " 135aaf5d128Santontestseq "aa\0001" " # aa\0010\0010" 136aaf5d128Santontestseq "\0303\0266\0001" " # \0303\0266\0010" 137aaf5d128Santontestseq "aa\0033[H" " # aa\0010\0010" 138aaf5d128Santontestseq "aa\0033OH" " # aa\0010\0010" 139aaf5d128Santontestseq "aa\0033[1~" " # aa\0010\0010" 140aaf5d128Santontestseq "aa\0033[1;5B" " # aa\0010\0010" 141aaf5d128Santon 142aaf5d128Santon# [n] ^[C, ^[c: capitalize-word 143aaf5d128Santontestseq "\0033C\0033c" " # \0007\0007" 144aaf5d128Santontestseq "ab cd\0001\0033C" " # ab cd\0010\0010\0010\0010\0010Ab" 145aaf5d128Santontestseq "ab\0001\00332\0033C" " # ab\0010\0010Ab" 146aaf5d128Santontestseq "ab cd\0001\00332\0033C" " # ab cd\0010\0010\0010\0010\0010Ab Cd" 147aaf5d128Santontestseq "1a\0001\0033C" " # 1a\0010\00101a" 148aaf5d128Santontestseq "\0026\0002\0001\0033C" " # ^B\0010\0010^B" 149aaf5d128Santontestseq "\0303\0266b\0001\0033C" " # \0303\0266b\0010\0010\0303\0266b" 150aaf5d128Santon 151aaf5d128Santon# ^[#: comment 152aaf5d128Santontestseq "\0033#" " # \r # \0010\r\r\n # " 153aaf5d128Santontestseq "a\0033#" " # a\r # #a \0010\0010\0010\r\r\n # " 154aaf5d128Santon 155aaf5d128Santon# XXX ^[^[: complete 156aaf5d128Santon# XXX ^X^[: complete-command 157aaf5d128Santon# XXX ^[^X: complete-file 158aaf5d128Santon# XXX ^I, ^[=: complete-list 159aaf5d128Santon 160aaf5d128Santon# [n] ERASE, ^?, ^H: delete-char-backward 161aaf5d128Santontestseq "\0177\0010" " # \0007\0007" 162aaf5d128Santontestseq "ab\00332\0177" " # ab\0010\0010 \0010\0010" 163aaf5d128Santontestseq "a\00332\0177" " # a\0010 \0010" 164aaf5d128Santontestseq "\0303\0266\0177" " # \0303\0266\0010 \0010" 165aaf5d128Santon 166aaf5d128Santon# [n] Delete: delete-char-forward 167aaf5d128Santontestseq "\0033[3~" " # \0007" 168aaf5d128Santontestseq "a\0033[3~" " # a\0007" 169aaf5d128Santontestseq "a\0001\0033[3~" " # a\0010 \0010" 170aaf5d128Santontestseq "ab\0001\00332\0033[3~" " # ab\0010\0010 \0010\0010" 171aaf5d128Santontestseq "a\0001\00332\0033[3~" " # a\0010 \0010" 172aaf5d128Santontestseq "\0303\0266\0001\0033[3~" " # \0303\0266\0010 \0010" 173aaf5d128Santon 174aaf5d128Santon# [n] ^[ERASE, ^[^?, ^[^H, ^[h: delete-word-backward 175aaf5d128Santontestseq "\0033\0177\033\0010\0033h" " # \0007\0007\0007" 176aaf5d128Santontestseq "ab\0033\0177" " # ab\0010\0010 \0010\0010" 177aaf5d128Santontestseq "ab cd\00332\0033\0177" \ 178aaf5d128Santon " # ab cd\0010\0010\0010\0010\0010 \0010\0010\0010\0010\0010" 179aaf5d128Santontestseq "ab\00332\0033\0177" " # ab\0010\0010 \0010\0010" 180aaf5d128Santontestseq "ab \0303\0266\0033\0177" " # ab \0303\0266\0010 \0010" 181aaf5d128Santon 182aaf5d128Santon# [n] ^[d: delete-word-forward 183aaf5d128Santontestseq "\0033d" " # \0007" 184aaf5d128Santontestseq "ab\0001\0033d" " # ab\0010\0010 \0010\0010" 185aaf5d128Santontestseq "ab cd\0001\00332\0033d" \ 186aaf5d128Santon " # ab cd\0010\0010\0010\0010\0010 \0010\0010\0010\0010\0010" 187aaf5d128Santontestseq "ab\0001\00332\0033d" " # ab\0010\0010 \0010\0010" 188aaf5d128Santon 189aaf5d128Santon# [n] ^N, ^XB, Down: down-history 190aaf5d128Santon# [n] ^P, ^XA, Up: up-history 191aaf5d128Santontestseq "\0016\0030B\0020\0030A" " # \0007\0007\0007\0007" 192aaf5d128Santontestseq ": 1\n\0020\0016" " # : 1\r\r\n # \r # : 1 \0010\0007" 193aaf5d128Santontestseq ": 1\n: 2\n\0020\0020\0016" \ 194aaf5d128Santon " # : 1\r\r\n # : 2\r\r\n # \r # : 2 \0010\r # : 1 \0010\r # : 2 \0010" 195aaf5d128Santontestseq ": 1\n: 2\n\0033[A\0033[A\0033[B" \ 196aaf5d128Santon " # : 1\r\r\n # : 2\r\r\n # \r # : 2 \0010\r # : 1 \0010\r # : 2 \0010" 197aaf5d128Santontestseq ": 1\n: 2\n\0033OA\0033OA\0033OB" \ 198aaf5d128Santon " # : 1\r\r\n # : 2\r\r\n # \r # : 2 \0010\r # : 1 \0010\r # : 2 \0010" 199aaf5d128Santon 200aaf5d128Santon# [n] ^[L, ^[l: downcase-word 201aaf5d128Santontestseq "\0033L\0033l" " # \0007\0007" 202aaf5d128Santontestseq "AB\0001\0033L" " # AB\0010\0010ab" 203aaf5d128Santontestseq "AB CD\0001\00332\0033L" " # AB CD\0010\0010\0010\0010\0010ab cd" 204aaf5d128Santontestseq "AB\0001\00332\0033L" " # AB\0010\0010ab" 205aaf5d128Santontestseq "1A\0001\0033L" " # 1A\0010\00101a" 206aaf5d128Santontestseq "\0026\0002A\0001\0033L" " # ^BA\0010\0010\0010^Ba" 207aaf5d128Santontestseq "\0303\0266A\0001\0033L" " # \0303\0266A\0010\0010\0303\0266a" 208aaf5d128Santon 209aaf5d128Santon# ^[>: end-of-history 210aaf5d128Santontestseq "\0033>" " # \0007" 211aaf5d128Santontestseq ": 1\n\0033>" " # : 1\r\r\n # \r # : 1 \0010" 212aaf5d128Santon 213aaf5d128Santon# ^E, End, Ctrl-Up: end-of-line 214aaf5d128Santontestseq "\0005" " # " 215aaf5d128Santontestseq "abc\0001\0005" " # abc\0010\0010\0010abc" 216aaf5d128Santontestseq "\0303\0266\0001\0005" " # \0303\0266\0010\0303\0266" 217aaf5d128Santontestseq "abc\0001\0033[F" " # abc\0010\0010\0010abc" 218aaf5d128Santontestseq "abc\0001\0033OF" " # abc\0010\0010\0010abc" 219aaf5d128Santontestseq "abc\0001\0033[4~" " # abc\0010\0010\0010abc" 220aaf5d128Santontestseq "abc\0001\0033[1;5A" " # abc\0010\0010\0010abc" 221aaf5d128Santon 222aaf5d128Santon# ^_: eot 223aaf5d128Santontestseq "\0037" " # ^D\r\r" 224aaf5d128Santon 225aaf5d128Santon# [n] ^D: eot-or-delete 226aaf5d128Santontestseq "\0004" " # ^D\r\r" 227aaf5d128Santon 228aaf5d128Santon# ^X^X: exchange-point-and-mark 229aaf5d128Santon# ^[space: set-mark-command 230aaf5d128Santontestseq "\0030\0030" " # \0007" 231aaf5d128Santontestseq "abc\0033 \0001\0030\0030" " # abc\0010\0010\0010abc" 232aaf5d128Santontestseq "\0303\0266\0033 \0001\0030\0030" " # \0303\0266\0010\0303\0266" 233aaf5d128Santon 234aaf5d128Santon# XXX ^[*: expand-file 235aaf5d128Santon 236aaf5d128Santon# [n] ^F, ^XC, Right: forward-char 237aaf5d128Santontestseq "\0006\0030C" " # \0007\0007" 238aaf5d128Santontestseq "abc\0001\0006" " # abc\0010\0010\0010a" 239aaf5d128Santontestseq "abc\0001\00332\0006" " # abc\0010\0010\0010ab" 240aaf5d128Santontestseq "a\0001\00332\0006" " # a\0010a" 241aaf5d128Santontestseq "\0303\0266\0001\0006" " # \0303\0266\0010\0303\0266" 242aaf5d128Santontestseq "abc\0001\0033[C" " # abc\0010\0010\0010a" 243aaf5d128Santontestseq "abc\0001\0033OC" " # abc\0010\0010\0010a" 244aaf5d128Santon 245aaf5d128Santon# [n] ^[f, Ctrl-Right: forward-word 246aaf5d128Santontestseq "\0033f" " # \0007" 247aaf5d128Santontestseq "ab\0001\0033f" " # ab\0010\0010ab" 248aaf5d128Santontestseq "ab cd\0001\00332\0033f" " # ab cd\0010\0010\0010\0010\0010ab cd" 249aaf5d128Santontestseq "ab\0001\00332\0033f" " # ab\0010\0010ab" 250aaf5d128Santontestseq "\0303\0266\0001\0033f" " # \0303\0266\0010\0303\0266" 251aaf5d128Santontestseq "ab\0001\0033[1;5C" " # ab\0010\0010ab" 252aaf5d128Santon 253aaf5d128Santon# [n] ^[g: goto-history 254aaf5d128Santontestseq "\0033g" " # \0007" 255aaf5d128Santontestseq ": 1\n\0033g" " # : 1\r\r\n # \r # : 1 \0010" 256aaf5d128Santontestseq ": 1\n: 2\n\00332\0033g" " # : 1\r\r\n # : 2\r\r\n # \r # : 2 \0010" 257aaf5d128Santontestseq ": 1\n\00332\0033g" " # : 1\r\r\n # \0007" 258aaf5d128Santon 259aaf5d128Santon# KILL: kill-line 260aaf5d128Santontestseq "\0025" " # \r # \0010" 261aaf5d128Santontestseq "ab\0025" " # ab\r # \0010\0010\0010" 262aaf5d128Santon 263aaf5d128Santon# [n] ^K: kill-to-eol 264aaf5d128Santontestseq "\0013" " # " 265aaf5d128Santontestseq "abc\0002\0002\0013" " # abc\0010\0010 \0010\0010" 266aaf5d128Santon 267aaf5d128Santon# XXX ^[?: list 268aaf5d128Santon# XXX ^X?: list-command 269aaf5d128Santon# XXX ^X^Y: list-file 270aaf5d128Santon 271aaf5d128Santon# ^J, ^M: newline 272aaf5d128Santontestseq "\0012\0015" " # \r\r\n # \r\r\n # " 273aaf5d128Santontestseq ": 1\0012" " # : 1\r\r\n # " 274aaf5d128Santontestseq ": 1\0001\0012" " # : 1\0010\0010\0010\r\r\n # " 275aaf5d128Santon 276aaf5d128Santon# ^O: newline-and-next 277aaf5d128Santontestseq "\0017" " # \r\r\n # \0007" 278aaf5d128Santontestseq ": 1\n: 2\n\0020\0020\0017" \ 279aaf5d128Santon " # : 1\r\r\n # : 2\r\r\n # \r # : 2 \0010\r # : 1 \0010\r\r\n # \r # : 2 \0010" 280aaf5d128Santon 281aaf5d128Santon# QUIT: no-op 282aaf5d128Santontestseq "\0034" " # " 283aaf5d128Santon 284aaf5d128Santon# [n] ^[., ^[_: prev-hist-word 285aaf5d128Santontestseq "\0033.\0033_" " # \0007\0007" 286aaf5d128Santontestseq ": 1\n\0033." " # : 1\r\r\n # 1" 287aaf5d128Santontestseq ": 1\n\00331\0033." " # : 1\r\r\n # :" 288aaf5d128Santontestseq ": 1\n\00333\0033." " # : 1\r\r\n # " 289aaf5d128Santon 290aaf5d128Santon# ^V, ^^: quote 291aaf5d128Santontestseq "\0026\0001" " # ^A" 292aaf5d128Santontestseq "\0036\0001" " # ^A" 293aaf5d128Santon 294aaf5d128Santon# [n] ^[^]: search-character-backward 295aaf5d128Santontestseq "\0033\0035a" " # \0007" 296aaf5d128Santontestseq "echo\0033\0035e" " # echo\0010\0010\0010\0010" 297aaf5d128Santontestseq "echo\0033\0035a" " # echo\0007" 298aaf5d128Santontestseq "eecho\00332\0033\0035e" " # eecho\0010\0010\0010\0010\0010" 299aaf5d128Santontestseq "echo\00332\0033\0035e" " # echo\0007" 300aaf5d128Santon 301aaf5d128Santon# [n] ^]: search-character-forward 302aaf5d128Santontestseq "\0035a" " # \0007" 303aaf5d128Santontestseq "echo\0001\0035o" " # echo\0010\0010\0010\0010ech" 304aaf5d128Santontestseq "echo\0001\0035a" " # echo\0010\0010\0010\0010\0007" 305aaf5d128Santontestseq "echoo\0001\00332\0035o" " # echoo\0010\0010\0010\0010\0010echo" 306aaf5d128Santon# XXX differs from search-character-backward, should ring bell 307aaf5d128Santontestseq "echo\0001\00332\0035o" " # echo\0010\0010\0010\0010ech" 308aaf5d128Santon 309aaf5d128Santon# ^R: search-history 310aaf5d128Santontestseq "\0022" " # \r\nI-search: " 311aaf5d128Santontestseq "echo\n\0022e" \ 312aaf5d128Santon " # echo\r\r\n\r\n # \r\nI-search: \r\n\r # echo \0010\0010\0010\0010" 313aaf5d128Santontestseq "echo\n\0022a" " # echo\r\r\n\r\n # \r\nI-search: \0007\r\nI-search: a" 314aaf5d128Santon 315aaf5d128Santon# ^T: transpose-chars 316aaf5d128Santontestseq "\0024" " # \0007" 317aaf5d128Santontestseq "a\0024" " # a\0007" 318aaf5d128Santontestseq "ab\0024" " # ab\0010\0010ba" 319aaf5d128Santontestseq "ab\0001\0024" " # ab\0010\0010\0007" 320aaf5d128Santon# XXX UTF-8 testseq "\0303\0266a\0024" " # \0303\0266a\0010\0010a\303\0266" 321aaf5d128Santon 322aaf5d128Santon# [n] ^[U, ^[u: upcase-word 323aaf5d128Santontestseq "\0033U\0033u" " # \0007\0007" 324aaf5d128Santontestseq "ab\0001\0033U" " # ab\0010\0010AB" 325aaf5d128Santontestseq "ab cd\0001\00332\0033U" " # ab cd\0010\0010\0010\0010\0010AB CD" 326aaf5d128Santontestseq "ab\0001\00332\0033U" " # ab\0010\0010AB" 327aaf5d128Santontestseq "1a\0001\0033U" " # 1a\0010\00101A" 328aaf5d128Santontestseq "\0026\0002a\0001\0033U" " # ^Ba\0010\0010\0010^BA" 329aaf5d128Santontestseq "\0303\0266a\0001\0033U" " # \0303\0266a\0010\0010\0303\0266A" 330aaf5d128Santon 331aaf5d128Santon# ^Y: yank 332aaf5d128Santontestseq "\0031" " # \r\nnothing to yank\r\n # " 333aaf5d128Santontestseq "abc\0027\0031" " # abc\0010\0010\0010 \0010\0010\0010abc" 334aaf5d128Santontestseq "ab/cd\0027\0001\0031" \ 335aaf5d128Santon " # ab/cd\0010\0010 \0010\0010\0010\0010\0010cdab/\0010\0010\0010" 336aaf5d128Santon 337aaf5d128Santon# ^[y: yank-pop 338aaf5d128Santontestseq "\0033y" " # \r\nyank something first\r\n # " 339aaf5d128Santontestseq "ab/cd\0027\0027\0031\0033y" \ 340aaf5d128Santon " # ab/cd\0010\0010 \0010\0010\0010\0010\0010 \0010\0010\0010ab/\0010\0010\0010 \0010\0010\0010cd" 341