• Stars
    star
    277
  • Rank 148,875 (Top 3 %)
  • Language NASL
  • Created over 5 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

It’s that terminal! This project was mostly created (or started) in a livestream series.

That terminal.

It’s the terminal that was featured in a programming livestream series on Bisqwit’s YouTube channel, at: https://www.youtube.com/watch?v=9e38ORrkbtc&list=PLzLzYGEbdY5nKCfUgfk8tCO9veao_P1fV

Screenshot showcasing the character set support

Features

Supported:

  • Dozens of built-in fonts (covering the entire basic multilingual plane of Unicode and then some)
  • Single-width and double-width characters (such as CJK + English text)
  • Video recording at any frame rate, including at rates faster than your OS can handle
  • Automated input
  • Resizing of terminal dimensions / font size at any time
  • Way more terminal escape codes than a typical user will ever depend on

Not supported (yet!)

  • Copy and paste
  • User-supplied fonts
  • Configuration of key features without recompiling source code
  • Bidirectional rendering (such as Arabic and Hebrew)
  • Combining diacritics
  • Letters that change shape depending on position in word (such as word-final glyphs in Hebrew)

This program is designed for programming video production purposes.

What is a terminal emulator?

A terminal emulator is a program that emulates a terminal.

A terminal is a device or a program that connects two things:

  1. user-interface (typically keyboard and screen)
  2. a system (typically a local or remote shell, or a BBS) that reads input and writes output (standard input and standard output respectively).

This communication is entirely text-based, and includes in-band signaling like the ANSI escape codes.

A terminal emulator converts keyboard input (including arrow keys) into a character stream, and reads character stream from the application and converts that into symbols, cursor movements, and colors, on the screen.

What is terminal emulator not?

A terminal emulator is not a shell nor a command interpreter. It does not understand anything you type. It just converts those keys into a character stream and passes them to another program that hopefully does understand them.

Why is it called an “emulator”?

Back in the early ages of computing, computers were extremely expensive. The typical architecture was such that you had one central computer, and a number of dumb terminals (and later, smart terminals).

These terminals were devices that… «drum roll»… translated between the user-interface and the input & output of the central computer. They had no computing capabilities of their own.

Over time as computers became cheaper, it became possible to run these text-based systems locally. The local computer then ran a terminal emulator to interface with these local systems, that still communicated using text streams.

The emulator emulates the terminal such as the VT100. The VT100 was a remarkable milestone in the history of glass screen based terminal emulators, started by the Datapoint 3300 and the DEC VT05. These devices were a giant’s leap of improvement over using a line printer for the display device.

Even in today’s time, many decades later, the system of combining a text-based stream and a terminal emulator remains a useful and efficient paradigm, and really, the de-facto way to maintain UNIX-style systems. Some people, such as yours truly, even use it as their primary user-interface for most tasks on the computer.

Even the Microsoft® Windows® Command Prompt utilizes a terminal emulator (Win32 Console), even though the division between console programs and the terminal emulator is not as obvious in Windows as it is in UNIX-style systems like Linux.

Modern terminal emulators not only emulate historic terminals like the VT100, VT220, VT240, VT340, VT420, and VT525, but also support other ANSI escape codes that have been created specifically for terminal emulators, such as the 256-color and 16777216-color SGR parameters, which are supported by my program as well.

What is this terminal emulator used for?

It is a tool I use for creating videos. It is supposed to replace the DOSBox-based toolchain I have used until now. The input daemon is similarly being replaced, as is the tool that I use for generating the input in the first place.

It also seeks to make that editor obsolete, replacing it with Joe.

Why do you need a custom terminal? Why not Xterm?

  • I need something that I can customize for artistic reasons, even if that breaks compatibility with other programs.
  • I also need to be able to change fonts and terminal sizes at whim with simple keyboard inputs (mouse input is too delicate to script).
  • And I need to record video while doing that. This is a video production tool after all.

Supported escape codes

You can find the list of escapes supported by this emulator in a separate document.

Supported fonts

You can find the list of fonts supported by this emulator in a separate document.

This terminal emulator fully supports single-width and double-width characters (such as CJK). The best font sizes to try that are 4x8, 6x9, 8x16, and 9x18, because they match perfectly with the CJK fonts at 8x8, 12x9, 16x16 and 18x18 at integer scaling. The 8x16 (+16x16) font has best coverage for Unicode, thanks to Unifont.

Supported keyboard inputs

In a separate document.

Author

That terminal is written by Joel Yliluoma. You can find my homepage at: https://iki.fi/bisqwit/ And you can contact me through e-mail: [email protected]

More Repositories

1

compiler_series

Material for the Creating a Compiler video lesson series.
Yacc
532
star
2

that_editor

*That* editor.
C++
361
star
3

cpp_parallelization_examples

The study & production material for https://www.youtube.com/watch?v=Pc8DfEyAxzg
C++
173
star
4

TinyDeflate

A deflate/gzip decompressor that requires minimal amount of memory to work
C++
170
star
5

speech_synth_series

Let’s Create a Speech Synthesizer
PHP
104
star
6

fft

A collection of Fast Fourier Transform algorithms implemented in C++20.
SourcePawn
102
star
7

password_codecs

Collection of password encoders and decoders created with the video series at: https://www.youtube.com/playlist?list=PLzLzYGEbdY5nEFQsxzFanSDv_38Hz0w7B
C++
84
star
8

adlmidi

ADLMIDI is a MIDI player that uses OPL3 emulation.
C++
59
star
9

crt-filter

The CRT filter that I used in my "what is that editor" video
C++
52
star
10

tinyprintf

printf replacement for embedded programming
C++
51
star
11

nescom

NES assembler and particularly clever disassembler
C++
43
star
12

dirr

ls replacement, friendlier than ls
C++
31
star
13

lvm2defrag

PHP
25
star
14

animmerger

Animation merging, quantizing and dithering swiss army knife
C++
18
star
15

nandcombinator

Exhaustive 2-input NAND combinations research tool
C++
17
star
16

viewnes

NES graphics/data hex inspection tool
PHP
13
star
17

tokumaru

Codemasters/Tokumaru NES tile compressor+decompressor
C++
5
star
18

6502delay

Collection of 6502 delay code generators
4
star
19

hy-ohte

Helsingin yliopisto: OHTE Harjoitustyö
3
star
20

cysex21

This is just a mandatory exercise for the Cybersecurity course in University of Helsinki. It is not meant to be useful for any practical purpose.
PHP
3
star
21

polytrain

JavaScript
2
star