@@ -248,6 +248,10 @@ v_key_name(SCR *sp, CHAR_T ch)
248248 * followed by the character offset from the '@' character in the ASCII
249249 * character set. Del (0x7f) is represented as '^' followed by '?'.
250250 *
251+ * If set O_ALTNOTATION, most control characters less than 0x20 are
252+ * displayed using <C-char> notation. Carriage feed, escape, and
253+ * delete are displayed as <Ret>, <Esc>, and <Del>, respectively.
254+ *
251255 * XXX
252256 * The following code depends on the current locale being identical to
253257 * the ASCII map from 0x40 to 0x5f (since 0x1f + 0x40 == 0x5f). I'm
@@ -267,9 +271,236 @@ pr: sp->cname[0] = ch;
267271 goto done ;
268272 }
269273nopr : if (iscntrl (ch ) && (ch < 0x20 || ch == 0x7f )) {
274+ if (O_ISSET (sp , O_ALTNOTATION )) {
275+ if (ch == 0x00 ) {
276+ sp -> cname [0 ] = '<' ;
277+ sp -> cname [1 ] = 'C' ;
278+ sp -> cname [2 ] = '-' ;
279+ sp -> cname [3 ] = '@' ;
280+ sp -> cname [4 ] = '>' ;
281+ len = 5 ;
282+ } else if (ch == 0x01 ) {
283+ sp -> cname [0 ] = '<' ;
284+ sp -> cname [1 ] = 'C' ;
285+ sp -> cname [2 ] = '-' ;
286+ sp -> cname [3 ] = 'a' ;
287+ sp -> cname [4 ] = '>' ;
288+ len = 5 ;
289+ } else if (ch == 0x02 ) {
290+ sp -> cname [0 ] = '<' ;
291+ sp -> cname [1 ] = 'C' ;
292+ sp -> cname [2 ] = '-' ;
293+ sp -> cname [3 ] = 'b' ;
294+ sp -> cname [4 ] = '>' ;
295+ len = 5 ;
296+ } else if (ch == 0x03 ) {
297+ sp -> cname [0 ] = '<' ;
298+ sp -> cname [1 ] = 'C' ;
299+ sp -> cname [2 ] = '-' ;
300+ sp -> cname [3 ] = 'c' ;
301+ sp -> cname [4 ] = '>' ;
302+ len = 5 ;
303+ } else if (ch == 0x04 ) {
304+ sp -> cname [0 ] = '<' ;
305+ sp -> cname [1 ] = 'C' ;
306+ sp -> cname [2 ] = '-' ;
307+ sp -> cname [3 ] = 'd' ;
308+ sp -> cname [4 ] = '>' ;
309+ len = 5 ;
310+ } else if (ch == 0x05 ) {
311+ sp -> cname [0 ] = '<' ;
312+ sp -> cname [1 ] = 'C' ;
313+ sp -> cname [2 ] = '-' ;
314+ sp -> cname [3 ] = 'e' ;
315+ sp -> cname [4 ] = '>' ;
316+ len = 5 ;
317+ } else if (ch == 0x06 ) {
318+ sp -> cname [0 ] = '<' ;
319+ sp -> cname [1 ] = 'C' ;
320+ sp -> cname [2 ] = '-' ;
321+ sp -> cname [3 ] = 'f' ;
322+ sp -> cname [4 ] = '>' ;
323+ len = 5 ;
324+ } else if (ch == 0x07 ) {
325+ sp -> cname [0 ] = '<' ;
326+ sp -> cname [1 ] = 'C' ;
327+ sp -> cname [2 ] = '-' ;
328+ sp -> cname [3 ] = 'g' ;
329+ sp -> cname [4 ] = '>' ;
330+ len = 5 ;
331+ } else if (ch == 0x08 ) {
332+ sp -> cname [0 ] = '<' ;
333+ sp -> cname [1 ] = 'C' ;
334+ sp -> cname [2 ] = '-' ;
335+ sp -> cname [3 ] = 'h' ;
336+ sp -> cname [4 ] = '>' ;
337+ len = 5 ;
338+ } else if (ch == 0x0A ) {
339+ sp -> cname [0 ] = '<' ;
340+ sp -> cname [1 ] = 'N' ;
341+ sp -> cname [2 ] = 'L' ;
342+ sp -> cname [3 ] = '>' ;
343+ len = 4 ;
344+ } else if (ch == 0x0B ) {
345+ sp -> cname [0 ] = '<' ;
346+ sp -> cname [1 ] = 'C' ;
347+ sp -> cname [2 ] = '-' ;
348+ sp -> cname [3 ] = 'k' ;
349+ sp -> cname [4 ] = '>' ;
350+ len = 5 ;
351+ } else if (ch == 0x0C ) {
352+ sp -> cname [0 ] = '<' ;
353+ sp -> cname [1 ] = 'C' ;
354+ sp -> cname [2 ] = '-' ;
355+ sp -> cname [3 ] = 'l' ;
356+ sp -> cname [4 ] = '>' ;
357+ len = 5 ;
358+ } else if (ch == 0x0D ) {
359+ sp -> cname [0 ] = '<' ;
360+ sp -> cname [1 ] = 'R' ;
361+ sp -> cname [2 ] = 'e' ;
362+ sp -> cname [3 ] = 't' ;
363+ sp -> cname [4 ] = '>' ;
364+ len = 5 ;
365+ } else if (ch == 0x0E ) {
366+ sp -> cname [0 ] = '<' ;
367+ sp -> cname [1 ] = 'C' ;
368+ sp -> cname [2 ] = '-' ;
369+ sp -> cname [3 ] = 'n' ;
370+ sp -> cname [4 ] = '>' ;
371+ len = 5 ;
372+ } else if (ch == 0x0F ) {
373+ sp -> cname [0 ] = '<' ;
374+ sp -> cname [1 ] = 'C' ;
375+ sp -> cname [2 ] = '-' ;
376+ sp -> cname [3 ] = 'o' ;
377+ sp -> cname [4 ] = '>' ;
378+ len = 5 ;
379+ } else if (ch == 0x10 ) {
380+ sp -> cname [0 ] = '<' ;
381+ sp -> cname [1 ] = 'C' ;
382+ sp -> cname [2 ] = '-' ;
383+ sp -> cname [3 ] = 'p' ;
384+ sp -> cname [4 ] = '>' ;
385+ len = 5 ;
386+ } else if (ch == 0x11 ) {
387+ sp -> cname [0 ] = '<' ;
388+ sp -> cname [1 ] = 'C' ;
389+ sp -> cname [2 ] = '-' ;
390+ sp -> cname [3 ] = 'q' ;
391+ sp -> cname [4 ] = '>' ;
392+ len = 5 ;
393+ } else if (ch == 0x12 ) {
394+ sp -> cname [0 ] = '<' ;
395+ sp -> cname [1 ] = 'C' ;
396+ sp -> cname [2 ] = '-' ;
397+ sp -> cname [3 ] = 'r' ;
398+ sp -> cname [4 ] = '>' ;
399+ len = 5 ;
400+ } else if (ch == 0x13 ) {
401+ sp -> cname [0 ] = '<' ;
402+ sp -> cname [1 ] = 'C' ;
403+ sp -> cname [2 ] = '-' ;
404+ sp -> cname [3 ] = 's' ;
405+ sp -> cname [4 ] = '>' ;
406+ len = 5 ;
407+ } else if (ch == 0x14 ) {
408+ sp -> cname [0 ] = '<' ;
409+ sp -> cname [1 ] = 'C' ;
410+ sp -> cname [2 ] = '-' ;
411+ sp -> cname [3 ] = 't' ;
412+ sp -> cname [4 ] = '>' ;
413+ len = 5 ;
414+ } else if (ch == 0x15 ) {
415+ sp -> cname [0 ] = '<' ;
416+ sp -> cname [1 ] = 'C' ;
417+ sp -> cname [2 ] = '-' ;
418+ sp -> cname [3 ] = 'u' ;
419+ sp -> cname [4 ] = '>' ;
420+ len = 5 ;
421+ } else if (ch == 0x16 ) {
422+ sp -> cname [0 ] = '<' ;
423+ sp -> cname [1 ] = 'C' ;
424+ sp -> cname [2 ] = '-' ;
425+ sp -> cname [3 ] = 'v' ;
426+ sp -> cname [4 ] = '>' ;
427+ len = 5 ;
428+ } else if (ch == 0x17 ) {
429+ sp -> cname [0 ] = '<' ;
430+ sp -> cname [1 ] = 'C' ;
431+ sp -> cname [2 ] = '-' ;
432+ sp -> cname [3 ] = 'w' ;
433+ sp -> cname [4 ] = '>' ;
434+ len = 5 ;
435+ } else if (ch == 0x18 ) {
436+ sp -> cname [0 ] = '<' ;
437+ sp -> cname [1 ] = 'C' ;
438+ sp -> cname [2 ] = '-' ;
439+ sp -> cname [3 ] = 'x' ;
440+ sp -> cname [4 ] = '>' ;
441+ len = 5 ;
442+ } else if (ch == 0x19 ) {
443+ sp -> cname [0 ] = '<' ;
444+ sp -> cname [1 ] = 'C' ;
445+ sp -> cname [2 ] = '-' ;
446+ sp -> cname [3 ] = 'y' ;
447+ sp -> cname [4 ] = '>' ;
448+ len = 5 ;
449+ } else if (ch == 0x1A ) {
450+ sp -> cname [0 ] = '<' ;
451+ sp -> cname [1 ] = 'C' ;
452+ sp -> cname [2 ] = '-' ;
453+ sp -> cname [3 ] = 'z' ;
454+ sp -> cname [4 ] = '>' ;
455+ len = 5 ;
456+ } else if (ch == 0x1B ) {
457+ sp -> cname [0 ] = '<' ;
458+ sp -> cname [1 ] = 'E' ;
459+ sp -> cname [2 ] = 's' ;
460+ sp -> cname [3 ] = 'c' ;
461+ sp -> cname [4 ] = '>' ;
462+ len = 5 ;
463+ } else if (ch == 0x1C ) {
464+ sp -> cname [0 ] = '<' ;
465+ sp -> cname [1 ] = 'C' ;
466+ sp -> cname [2 ] = '-' ;
467+ sp -> cname [3 ] = '\\' ;
468+ sp -> cname [4 ] = '>' ;
469+ len = 5 ;
470+ } else if (ch == 0x1D ) {
471+ sp -> cname [0 ] = '<' ;
472+ sp -> cname [1 ] = 'C' ;
473+ sp -> cname [2 ] = '-' ;
474+ sp -> cname [3 ] = ']' ;
475+ sp -> cname [4 ] = '>' ;
476+ len = 5 ;
477+ } else if (ch == 0x1E ) {
478+ sp -> cname [0 ] = '<' ;
479+ sp -> cname [1 ] = 'C' ;
480+ sp -> cname [2 ] = '-' ;
481+ sp -> cname [3 ] = '^' ;
482+ sp -> cname [4 ] = '>' ;
483+ len = 5 ;
484+ } else if (ch == 0x1F ) {
485+ sp -> cname [0 ] = '<' ;
486+ sp -> cname [1 ] = 'C' ;
487+ sp -> cname [2 ] = '-' ;
488+ sp -> cname [3 ] = '_' ;
489+ sp -> cname [4 ] = '>' ;
490+ len = 5 ;
491+ } else if (ch == 0x7F ) {
492+ sp -> cname [0 ] = '<' ;
493+ sp -> cname [1 ] = 'D' ;
494+ sp -> cname [2 ] = 'e' ;
495+ sp -> cname [3 ] = 'l' ;
496+ sp -> cname [4 ] = '>' ;
497+ len = 5 ;
498+ }
499+ } else {
270500 sp -> cname [0 ] = '^' ;
271501 sp -> cname [1 ] = ch == 0x7f ? '?' : '@' + ch ;
272502 len = 2 ;
503+ }
273504 } else if (O_ISSET (sp , O_OCTAL )) {
274505#define BITS (sizeof(CHAR_T) * 8)
275506#define SHIFT (BITS - BITS % 3)
0 commit comments