It happens very often that output in terminals has ANSI control sequences that gives it better readability, different colors, bold, underline, hence I think it would be interesting to be able to benefit this in questions and answers.
Here's an example dmesg -H
output, but of course it doesn't work right now and will be atrociously ugly :
[32m[1m[Aug22 16:11] [0m[33mpci 0000:01:00.0[0m: [10de:1198] type 00 class 0x030000
[32m[ +0.000036] [0m[33mpci 0000:01:00.0[0m: reg 0x10: [mem 0xf6000000-0xf6ffffff]
[32m[ +0.000017] [0m[33mpci 0000:01:00.0[0m: reg 0x14: [mem 0xe0000000-0xefffffff 64bit pref]
[32m[ +0.000016] [0m[33mpci 0000:01:00.0[0m: reg 0x1c: [mem 0xf0000000-0xf1ffffff 64bit pref]
[32m[ +0.000012] [0m[33mpci 0000:01:00.0[0m: reg 0x24: [io 0xe000-0xe07f]
[32m[ +0.000012] [0m[33mpci 0000:01:00.0[0m: reg 0x30: [mem 0xf7000000-0xf707ffff pref]
[32m[ +0.000052] [0m[33mpci 0000:01:00.0[0m: Enabling HDA controller
[32m[ +0.000087] [0m[33mpci 0000:01:00.0[0m: 32.000 Gb/s available PCIe bandwidth, limited by 2.5 GT/s x16 link at 0000:00:01.0 (capable of 126.016 Gb/s with 8 GT/s x16 link)
[32m[ +0.000486] [0m[33mpci 0000:01:00.0[0m: vgaarb: VGA device added: decodes=io+mem,owns=none,locks=none
[32m[ +0.000011] [0m[33mi915 0000:00:02.0[0m: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=io+mem
[32m[ +0.000160] [0m[33mpci 0000:01:00.1[0m: [10de:0e0a] type 00 class 0x040300
[32m[ +0.000029] [0m[33mpci 0000:01:00.1[0m: reg 0x10: [mem 0x00000000-0x00003fff]
[32m[ +0.000057] [0m[33mpci 0000:01:00.1[0m: Max Payload Size set to 256 (was 128, max 256)
[32m[ +0.000382] [0m[33mpcieport 0000:00:01.0[0m[1m: ASPM: current common clock configuration is broken, reconfiguring[0m
[32m[ +0.009663] [0m[33mpci 0000:01:00.0[0m: BAR 1: assigned [mem 0xe0000000-0xefffffff 64bit pref]
[32m[ +0.000037] [0m[33mpci 0000:01:00.0[0m: BAR 3: assigned [mem 0xf0000000-0xf1ffffff 64bit pref]
[32m[ +0.000018] [0m[33mpci 0000:01:00.0[0m: BAR 0: assigned [mem 0xf6000000-0xf6ffffff]
[32m[ +0.000003] [0m[33mpci 0000:01:00.0[0m: BAR 6: assigned [mem 0xf7000000-0xf707ffff pref]
[32m[ +0.000002] [0m[33mpci 0000:01:00.1[0m: BAR 0: assigned [mem 0xf7080000-0xf7083fff]
[32m[ +0.000002] [0m[33mpci 0000:01:00.0[0m: BAR 5: assigned [io 0xe000-0xe07f]
[32m[ +0.000004] [0m[33mpcieport 0000:00:01.0[0m: PCI bridge to [bus 01]
[32m[ +0.000001] [0m[33mpcieport 0000:00:01.0[0m: bridge window [io 0xe000-0xefff]
[32m[ +0.000003] [0m[33mpcieport 0000:00:01.0[0m: bridge window [mem 0xf6000000-0xf70fffff]
[32m[ +0.000002] [0m[33mpcieport 0000:00:01.0[0m: bridge window [mem 0xe0000000-0xf1ffffff 64bit pref]
[32m[ +0.000176] [0m[33mpci 0000:01:00.1[0m: D0 power state depends on 0000:01:00.0
[32m[ +0.000036] [0m[33msnd_hda_intel 0000:01:00.1[0m: enabling device (0000 -> 0002)
[32m[ +0.000057] [0m[33msnd_hda_intel 0000:01:00.1[0m: Disabling MSI
[32m[ +0.000006] [0m[33msnd_hda_intel 0000:01:00.1[0m: Handle vga_switcheroo audio client
[32m[ +0.041484] [0m[33mIPMI message handler[0m: version 39.2
[32m[ +0.016187] [0mipmi device interface
[32m[ +0.704043] [0m[33mnvidia[0m[1m: module license 'NVIDIA' taints kernel.[0m
[32m[ +0.000001] [0m[1mDisabling lock debugging due to kernel taint[0m
[32m[ +0.012267] [0m[33mnvidia-nvlink[0m: Nvlink Core is being initialized, major device number 237
[32m[ +0.000320] [0m[33mnvidia 0000:01:00.0[0m: enabling device (0006 -> 0007)
[32m[ +0.000078] [0m[33mnvidia 0000:01:00.0[0m: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=none
[32m[ +0.099429] [0m[33mNVRM[0m[1m: loading NVIDIA UNIX x86_64 Kernel Module 440.100 Fri May 29 08:45:51 UTC 2020[0m
[32m[ +0.055239] [0m[33mnvidia-modeset[0m: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms 440.100 Fri May 29 08:14:04 UTC 2020
[32m[ +0.002640] [0m[drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver
[32m[ +0.020768] [0m[33mACPI Warning[0m[1m: \_SB.PCI0.PEG0.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20190816/nsarguments-59)[0m
[32m[ +30.855545] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: RmInitAdapter failed! (0x24:0x65:1185)[0m
[32m[ +0.000034] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0[0m
[32m[ +0.000492] [0m[31m[drm:nv_drm_load [nvidia_drm]] *ERROR* [nvidia-drm] [GPU ID 0x00000100] Failed to allocate NvKmsKapiDevice[0m
[32m[ +0.000122] [0m[31m[drm:nv_drm_probe_devices [nvidia_drm]] *ERROR* [nvidia-drm] [GPU ID 0x00000100] Failed to register device[0m
[32m[ +0.071852] [0m[33mnvidia-uvm[0m: Loaded the UVM driver, major device number 235.
[32m[1m[Aug22 16:14] [0m[33mLockdown[0m: systemd-logind: hibernation is restricted; see man kernel_lockdown.7
[32m[ +3.384946] [0m[33mrfkill[0m: input handler enabled
[32m[ +9.980611] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: RmInitAdapter failed! (0x26:0x65:1227)[0m
[32m[ +0.000047] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0[0m
[32m[ +8.167869] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: RmInitAdapter failed! (0x26:0x65:1227)[0m
[32m[ +0.000075] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0[0m
[32m[ +0.099416] [0m[33mgnome-shell[6474][0m[2m[31m: segfault at 20 ip 00007f4d29a83356 sp 00007ffd43c62db0 error 4 in libnvidia-glsi.so.440.100[7f4d29a21000+95000][0m
[32m[ +0.000004] [0m[33mCode[0m: 48 8b 5c 24 08 48 8b 6c 24 10 48 83 c4 18 c3 0f 1f 44 00 00 48 8b 3d f1 31 24 00 e8 74 31 00 00 89 de 48 89 c7 e8 5a fe ff ff <48> 8b 78 20 e8 61 60 01 00 48 83 f8 01 48 89 45 00 19 c0 83 e0 0f
[32m[ +4.409548] [0m[33mLockdown[0m: systemd-logind: hibernation is restricted; see man kernel_lockdown.7
[32m[ +0.281982] [0m[33mrfkill[0m: input handler disabled
[32m[ +10.468885] [0m[33mrfkill[0m: input handler enabled
[32m[1m[Aug22 16:15] [0m[33mLockdown[0m: systemd-logind: hibernation is restricted; see man kernel_lockdown.7
[32m[ +0.355605] [0m[33mrfkill[0m: input handler disabled
[32m[ +8.056674] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: RmInitAdapter failed! (0x26:0x65:1227)[0m
[32m[ +0.000069] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0[0m
[32m[ +8.172351] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: RmInitAdapter failed! (0x26:0x65:1227)[0m
[32m[ +0.000030] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0[0m
[32m[ +8.171805] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: RmInitAdapter failed! (0x26:0x65:1227)[0m
[32m[ +0.000022] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0[0m
[32m[ +8.167969] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: RmInitAdapter failed! (0x26:0x65:1227)[0m
[32m[ +0.000022] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0[0m
[32m[ +8.171784] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: RmInitAdapter failed! (0x26:0x65:1227)[0m
[32m[ +0.000070] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0[0m
[32m[ +8.168094] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: RmInitAdapter failed! (0x26:0x65:1227)[0m
[32m[ +0.000023] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0[0m
[32m[ +8.171857] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: RmInitAdapter failed! (0x26:0x65:1227)[0m
[32m[ +0.000031] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0[0m
[32m[1m[Aug22 16:16] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: RmInitAdapter failed! (0x26:0x65:1227)[0m
[32m[ +0.000025] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0[0m
[32m[ +8.171680] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: RmInitAdapter failed! (0x26:0x65:1227)[0m
[32m[ +0.000023] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0[0m
[32m[ +8.171964] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: RmInitAdapter failed! (0x26:0x65:1227)[0m
[32m[ +0.000039] [0m[33mNVRM[0m[1m: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0[0m
EDIT :
Imho, it should work this way : the code block is started with ```ansi
and finishes with ```
, which is consistent with current usage, explicitly requesting ANSI escape sequences parsing.
Now, is it worth it in terms of development ? I'm pretty sure there's already much code in the open addressing the problem of ANSI sequences parsing, maybe even libraries. It's already possible to copy the output from the GNOME terminal as HTML with colour tags (that aren't recognised here afaik), hence much of the work has already been done somewhere.
So yes, imo it is worth it, the investment wouldn't be that big and the results of having coloured + emphasized console output posted instead of the current monochrome would be beneficial.
That being said, I'm not the one who would have to implement this, and only those people could say for sure.
--color=never
todmesg
arguments and it removes all those control chars ;)-L always
to get the above result, because I think it could add much readability if the ANSI escape sequences were interpreted.dmesg -H -L=always >dmesg.txt
, then opened the file in Emacs, copied part of it in the clipboard and pasted here. I suppose you don't use the Gnome terminal, as I just tried to copy and paste into Emacs from a Gnome terminal window, and only got the text stripped of all ANSI sequences... or maybe you use a special configuration in Gnome terminal ?