Metin tabanlı kullanıcı arayüzü

Metin tabanlı kullanıcı arayüzü (TUI - Text-based user interface), metinsel kullanıcı arayüzü veya terminal kullanıcı arabirimi olarak da adlandırılır, grafik kullanıcı arayüzlerinin (GUI) icadından bir süre sonra ortaya çıkan ve onu grafik kullanıcı arayüzünden ayırt etmek için türetilen yeni bir terimdir. TUI'de bilgisayar grafikleri metin kipinde görüntülenir. Gelişmiş bir TUI, GUI'ler gibi tüm ekran alanını kullanabilir ve fare ve diğer girişleri kabul edebilir.

Metin terminalleri türleri

Metin uygulamasının bakış açısından, bir metin ekranı (ve onunla iletişim) üç tipten birine ait olabilir (burada erişilebilirliği azaltmak için sıralı bir şekilde düzenlenebilir):
1. Bir video bağdaştırıcısı veya merkezi işlemcinin kendisi tarafından kontrol edilen asıl bir metin kipi ekranı. Bu, çeşitli kişisel bilgisayarlarda ve mobil cihazlarda yerel olarak çalışan bir uygulama için normal bir durumdur. İşletim sistemi tarafından engellenmezse, akıllı bir program bir donanım metin kipinin tüm gücünden yararlanabilir.
2. Bir metin kipi emülatörü. Örnek olarak, X Pencere Sistemi için xterm ve Microsoft Windows için win32 konsoludur (pencere kipinde). Bu genellikle gerçek bir metin kipi ekranı bekleyen programları destekler, ancak oldukça yavaş çalışabilir. Kendi yazı tipi yüklemesi gibi gelişmiş bir metin kipinin belirli işlevleri neredeyse kesin kullanılamaz hale gelir.
3. Uzak bir metin terminali. İletişim yetenekleri genellikle, Telnet ve Secure Shell gibi durumlarda, bant dışı bir kanal olarak birkaç ioctl (input/output control, giriş / çıkış kontrolü) ile birkaç seri hatta veya öykünmeye (emulation) indirgenir. Bu en kötü durumdur, çünkü yazılım kısıtlamaları uzak bir ekran cihazının yeteneklerinin kullanımını engellemektedir.
Linux ve diğer Unix benzeri sistemler altında, bir program üç durumdan herhangi birine kolayca uyum sağlar, çünkü aynı arayüz (yani standart akışlar) ekranı ve klavyeyi kontrol eder. Ayrıca, özel programlama kütüphaneleri, metnin verilen görüntüleme cihazına ve arayüzüne uygun bir şekilde çıktısının alınmasına yardımcı olur. Windows ile bir karşılaştırma için aşağıya bakınız.

ANSI uyumlu terminallerde

Amerikan Ulusal Standartlar Enstitüsü (ANSI) ANSI X3.64, TUI'ler oluşturmada terminalleri sürmek için kullanılabilecek standart bir kaçış dizisi (Escape sequence) kümesini tanımlar (bkz. ANSI kaçış kodu). Kaçış dizileri rastgele imleç hareketleri ve renk değişikliklerine izin vererek, yukarıdaki bölümde belirtilen her üç durum için desteklenebilir. Bununla birlikte, tüm terminaller bu standardı takip etmez ve birçok uyumlu olmayan ancak işlevsel olarak eşdeğer olan diziler vardır.

DOS ve Microsoft Windows altında

IBM Kişisel Bilgisayarlar (Personal Computers) ve bağlanabilirliklerinde, Temel Giriş Çıkış Sistemi (BIOS, Basic Input Output System) ve DOS sistemi (Disk Operating System) çağrıları, ekrana metin yazmanın bir yolunu sunar ve ANSI.SYS sürücüsü, standart ANSI çıkış dizilerini işleyebilir. Bununla birlikte, programcılar kısa sürede doğrudan ekran arabelleğine veri yazmanın programlama için çok daha hızlı ve daha basit bir yol olduğunu ve yöntemin hataya daha az eğilimli olduğunu öğrendi; ayrıntılar için VGA uyumlu metin kipine (VGA-compatible text mode) bakınız. Programlama yöntemlerindeki bu değişiklik birçok DOS TUI programıyla sonuçlandı. Win32 konsol ortamı, uygulama bir pencerede çalışsa bile, belirli EGA/VGA metin kipi özelliklerinin, özellikle metin arabelleğine rastgele erişime sahip olmasıyla (emulation) ünlüdür. Öte yandan, Windows altında çalışan programlar (hem yerel hem de DOS uygulamaları), yukarıda belirtilen win32 konsol katmanı nedeniyle, Linux ve DOS programlarından çok daha az ekran ve klavye kontrolüne sahiptir.
Çoğu zaman bu programlar, beyaz veya sarı karakterlerle ana ekran için mavi bir arka plan kullandılar, ancak genellikle kullanıcı renk özelleştirmesi de bulunmaktaydı. Genellikle IBM'in kod sayfası 437'deki kutu çizim karakterlerini (Box-drawing characters) kullandılar. Daha sonra, arayüz, grafik kullanıcı arayüzleri (GUI) tarafından derinden etkilendi, aşağı açılır menüler, örtüşen pencereler, iletişim kutuları (dialog box) ve anımsatıcılar veya klavye kısayolları tarafından işletilen GUI widget'ları ekledi. Kısa bir süre sonra fare girişi eklendi – ya metin çözünürlüğünde basit bir renkli kutu olarak veya Geliştirilmiş Grafik Bağdaştırıcısının (EGA, Enhanced Graphics Adapter) ve Video Grafik Dizisi (VGA, Video Graphics Array) ekran bağdaştırıcılarının metin karakter şekillerini yazılımla yeniden tanımlama yeteneği sayesinde grafik çözünürlükte ek işlevler sağlandı.
Bu tür bazı önemli programlar Microsoft Word, DOS Shell, WordPerfect, Norton Commander, Turbo Vision tabanlı Borland Turbo Pascal ve Turbo C (ikincisine conio kütüphanesi dâhildir), Lotus 1-2-3 ve diğerleri idi. Bu arayüzlerin bazıları, 1990'ların başında Microsoft Windows 3.1x döneminde bile hayatta kalmıştı. Örneğin, 16-bit Windows altında gerçek GUI programları yazmak için kullanılan Microsoft C 6.0 derleyicisi, hala kendi TUI'sine sahiptir.
Microsoft Windows, başlangıcından beri DOS yazılımını görüntülemek için bir konsol içermektedir. Daha sonraki sürümler, Win32 konsolunu, komut satırı arayüzü ve TUI programları için yerel bir arayüz olarak ekledi. Konsol genellikle pencere modunda açılır, ancak Alt ve Enter tuşlarına birlikte basılarak tam, gerçek metin modu ekranına geçebilir veya tam tersi yapılabilir. Tam ekran kipi, Windows Vista ve sonraki sürümlerinde kullanılamaz, ancak bazı geçici çözümlerle birlikte kullanılabilir.

Unix benzeri sistemler altında

Unix benzeri işletim sistemlerinde, TUI'ler genellikle terminal kontrol kütüphanesi curses'ları veya çoğunlukla uyumlu bir kütüphane olan ncurses kullanılarak oluşturulur.
Curses kütüphanesinin Berkeley Unix ile ortaya çıkışı, TUI yazmak için taşınabilir ve kararlı bir API oluşturdu. Aynı arayüzleri kullanarak çeşitli [[|metin terminal tipleri ile konuşma yeteneği, basit bir hat arayüzü kullanmak yerine tüm terminal ekranını kaplayan "görsel" Unix programlarının daha yaygın olarak kullanılmasına yol açtı. Bu, vi, pine veya mutt gibi posta istemcileri, SMIT, SAM, FreeBSD'nin Sysinstall gibi sistem yönetim araçları ve lynx gibi web tarayıcıları gibi metin editörlerinde görülebilir. w3m ve pine ve vi'ın eski sürümleri gibi bazı uygulamalar, uygulamadaki curses'larla ilişkili birçok işlevi yerine getiren daha az kullanılabilecek termcap kütüphanesini kullanır.
Buna ek olarak, Linux'un popülaritesindeki artış, birçok eski DOS kullanıcısını birçok TUI'de bir DOS etkisini teşvik eden Unix benzeri bir platforma getirmiştir. Örneğin, minicom programı, popüler DOS programı Telix'ten modellenmiştir. Twin masaüstü gibi diğer bazı TUI programları uyarlama derleyicileri kullanılarak uyarlanmıştı.
Çoğu Unix benzeri işletim sistemi (Linux, FreeBSD vb.), genellikle bir Ctrl-Alt-F tuş kombinasyonu aracılığıyla erişilen sanal konsolları desteklemektedir. Örneğin, Linux altında 64 konsola erişilebilir (işlev tuşları ile 12), her biri tam ekran metin kipinde görüntülenebilir.
Özgür yazılım programı GNU Screen, tek bir TUI içindeki çoklu oturumları yönetmeyi sağlar ve böylece metin modu ve komut satırı arayüzleri için bir pencere yöneticisi gibi olduğu düşünülebilir. Tmux da bunu yapabilir. Özel macOS metin düzenleyicisi BBEdit, tam ekran kabuk penceresi olarak çalışan bir shell worksheet (kabuk çalışma sayfası) işlevi içerir. Ücretsiz Emacs metin düzenleyicisi, benzer işlevsellik sağlamak için tamponlarından birinin içinde bir kabuk çalıştırabilir. Emacs'ta birkaç kabuk uygulaması vardır, ancak yalnızca ansi-term TUI uygulamalarını çalıştırmak için uygundur. Diğer ortak kabuk kipleri, shell ve eshell sadece komut satırlarına benzetilebilir ve TUI uygulamaları "Terminal tam olarak işlevsel değil" ("Terminal is not fully functional.") uyarısı verir veya bozuk bir arayüz görüntüler. Ücretsiz Vim ve Neovim metin düzenleyicileri terminal pencerelerine sahiptir (xterm simülasyonu). Bu özellik, işleri, paralel yapıları veya testleri çalıştırmak için tasarlanmıştır, ancak hafif bir terminal çoklayıcı olarak da kullanılabilir (pencere bölmeleri ve sekme sayfalarıyla birlikte).

OpenVMS

VAX/VMS ve daha sonra geliştirilen OpenVMS, Ekran Yönetimi aracı veya SMG olarak bilinen curses'lar için benzer bir araca sahipti. Bu, komut satırından çağrılabilir veya SMG$ kütüphanesini kullanan programlardan çağrılabilir.

Oberon

Bir diğer TUI türü, ilkin 1988'de piyasaya sürülen ve hala bakımı yapılan Oberon işletim sisteminin birincil arayüzüydü. Diğer çoğu metin tabanlı kullanıcı arabirimlerinin aksine, Oberon, metin kipinde bir konsol veya terminal kullanmaz, ancak metnin fare tıklamaları için birincil hedef olduğu büyük bir bit eşlemli ekran gerektirir. Module.Procedure parameters ~ biçimindeki komutlar, köprü bağlantılar (hyperlinks) gibi bir orta tıklamayla etkinleştirilebilir. Ekranın herhangi bir yerinde görüntülenen metin düzenlenebilir ve gerekli komut sözdizimi ile biçimlendirilmişse, orta tuşla tıklanarak yürütülebilir. Uygun biçimde biçimlendirilmiş komutlar içeren herhangi bir metin dosyası, araç metni (tool text) olarak adlandırılabilir ve böylece kullanıcı tarafından yapılandırılabilir bir menü görevi görür. Bir önceki komutun çıktısı bile düzenlenebilir ve yeni bir komut olarak kullanılabilir. Bu yaklaşım, hem geleneksel diyalog odaklı konsol menülerinden hem de komut satırı arayüzlerinden radikal olarak farklıdır.
Grafiksel araçları kullanmadığından, yalnızca düz metin kullandığından ve ancak döşeme penceresi yöneticisi olan bir GUI'ye benzer işlevsellik sunduğundan, Metin Kullanıcı Arabirimi veya TUI olarak adlandırılır. Kısa bir giriş için, Oberon Sistemi ile ilgili ilk yayınlanan raporun (Report on the Oberon System) dördüncü sayfasındaki 2. paragrafa bakınız.
Oberon'un kullanıcı arayüzü, Bell Labs işletim sisteminden Plan 9 için Acme metin düzenleyicisini ve e-posta istemcisinin tasarımını etkiledi.

Gömülü sistemlerde

Modern gömülü sistemler, kişisel bilgisayarlar gibi bir monitörde TUI'yi görüntüleme yeteneğine sahiptir. Bu işlev genellikle, özel entegre devreler, modüller veya FPGA kullanılarak gerçekleştirilir.
Video devreleri veya modülleri genellikle UART (Universal asynchronous receiver-transmitter) üzerinden ayarlanan VT100 uyumlu komut kullanılarak kontrol edilir, FPGA tasarımları genellikle doğrudan video belleği erişimine izin verir.