The wcwidth() POSIX helper returns the number of cells that a character occupies. This is normally 1, however, if it is 0 we simply discard this input (this should never happen as all characters that wcwidth() returns 0 for should already be handled by the VTE layer). But if it is >1, we write the character in the first cell, set the width correctly and mark all following characters as width=0. Everything else is left unchanged, that means, the running application has to be aware of wcwidth() and correctly send two backspaces to clear a width=2 character and so on. This behavior almost exactly matches the xterm behavior. There are some corner cases like erasing only one part of a multi-cell character etc. that might differ. However, these are non-standard cases that no application should never rely on. Anyway, if we spot any of these differences between xterm and kmscon, we should fix kmscon to behave like xterm does. Thanks to Shixin for looking this up in other emulators. Reported-by: Shixin Zeng Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
= KMSCON = Kmscon is a simple terminal emulator based on linux kernel mode setting (KMS). It is an attempt to replace the in-kernel VT implementation with a userspace console. See kmscon(1) man-page for usage information. == Requirements == Kmscon requires the following software: - libudev: providing input, video, etc. device hotplug support - libxkbcommon: providing internationalized keyboard handling Everything else is optional: For video output at least one of the following is required: - fbdev: For framebuffer video output the kernel headers must be installed and located in the default include path. - DRM: For unaccelerated drm output the "libdrm" library must be installed and accessible via pkg-config. - OpenGLES2: For accelerated video output via OpenGLESv2 the following must be installed: libdrm, libgbm, egl, glesv2 (i.e., mesa) For font handling the following is required: - 8x16: The 8x16 font is a static built-in font which does not require external dependencies. - freetype2: The freetype2 font uses libfreetype2 and libfontconfig to provide a very basic font backend. - pango: drawing text with pango Pango requires: glib, pango, fontconfig, freetype2 and more For multi-seat support you need the following packages: - systemd: Actually only the systemd-logind daemon and library is required. == Install == To compile the kmscon binary, run the standard autotools commands: $ ./autogen.sh (you need this only when building from git directly) $ ./configure --prefix=/usr $ make $ make install To compile the test applications, run: $ make check If you want only a very basic kmscon program without any major dependencies, use: $ ./configure --disable-debug --with-video=fbdev --disable-multi-seat --with-fonts=8x16 --disable-pciaccess --with-sessions=dummy,terminal However, you will loose a lot of functionality by dropping all dependencies. The following configure options are available. If build-time dependencies cannot be satisfied, an option is automatically turned off, except if you explicitly enable it via command line: --enable-multi-seat: This requires the systemd-logind library to provide multi-seat support for kmscon. [default: on] --enable-hotplug: This requires libudev for hotplugging support. This is currently mandatory and cannot be disabled. [default: on] --enable-pciaccess: Enable GPU detection via pciaccess [default: on] --enable-debug: Enable debug mode/messages [default: on] --enable-optimizations: Enable code optimizations [default: on] --enable-eloop-dbus: Build dbus extension for eloop library [default: off] Backends for several subsystems in kmscon can be selected with the following options (all of them take a comma-separated list of backend names): --with-video: Video backens. Available backends are: - fbdev: Linux fbdev video backend - dumb: Linux DRM dumb-buffer backend - drm: Linux DRM backend Default is: fbdev,dumb,drm --with-fonts: Font renderers. Available backends are: - 8x16: Static built-in non-scalable 8x16 font (ASCII only) - unifont: Static built-in non-scalable font (Unicode Unifont) Takes very long to compile - freetype2: Freetype2+fontconfig based scalable font renderer - pango: Pango based scalable font renderer Default is: 8x16,freetype2,pango --with-renderers: Console rendering backends. Available are: - bblit: Simply 2D blitting engine - bbulk: Same as bblit but with bulk-requests - gltex: OpenGLESv2 accelerated renderer --with-sessions: Built in sessions. Available sessions are: - dummy: Dummy fallback session - terminal: Terminal-emulator sessions The following options select which applications are built. If dependency-checks fail, they are disabled by default unless explicitly enabled on the command line: --enable-kmscon: Build kmscon application [default: on] --enable-wlterm: Build wlterm Wayland terminal [default: on] --enable-eloop: Build eloop event loop library [default: on] --enable-tsm: Build TSM terminal state-machine library [default: on] --enable-uterm: Build uterm library [default: on] == Running == To get usage information, run: $ ./kmscon --help You can then run kmscon with: $ ./kmscon [options] For debug output use "--debug". For verbose output use "--verbose". With "--xkb-layout=<lang>" you can switch the keyboard layout. See "man kmscon" / kmscon(1) for more information. == License == This software is licensed under the terms of an MIT-like license. Please see ./COPYING for further information. == FAQ == Please see http://github.com/dvdhrm/kmscon/wiki == Contact == This software is maintained by: David Herrmann <dh.herrmann@googlemail.com> If you have any questions, do not hesitate to contact one of the maintainers.
Description
Languages
C
93.4%
M4
2.9%
Makefile
1.6%
GLSL
1.3%
C++
0.7%
Other
0.1%