Як зрабіць win32 кансольны распазнаваць/VT100 кіравальныя паслядоўнасці ANSI?

Я строй палегчанай версіі бібліятэкі Ncurses. Да гэтага часу ён працуе даволі добра з VT100-сумяшчальных тэрміналаў, але win32 кансоль не распазнае \ 033 код як пачатак кіруючай паслядоўнасці:

# include 
# include "term.h"

int main(void) {
  puts(BOLD COLOR(FG, RED) "Bold text" NOT_BOLD " is cool!" CLEAR);
  return 0;
}

Screenshot

Што павінна быць зроблена на ўзроўні C-кода, для таго, што драйвер загружаны ANSI.SYS і ANSI/VT100 экрануе паслядоўнасці прызнаныя?

44
Калі ласка, звярніце ўвагу, што правілы гульні змяніліся карэнным чынам у апошніх версіях Windows 10.
дададзена аўтар Andreas Rejbrand, крыніца

11 адказы

[UPDATE] Перад тым як Windows, 10-годдзя абнаўлення:

ANSI.SYS мае абмежаванне, што ён можа працаваць толькі ў кантэксце падсістэмы MS-DOS пад Windows 95-Vista.

Microsoft KB101875 тлумачыць, як уключыць ANSI.SYS ў акне каманднага радка, , але гэта не адносіцца да Windows NT . Згодна з артыкулам: мы ўсе любім колеру , сучасныя версіі Windows, не маюць такую ​​добрую падтрымку ANSI.

Замест гэтага Microsoft стварыла шмат функцый, але гэта далёка ад неабходнасці працаваць паслядоўнасці знакаў ANSI/VT100.

Для больш дэталёвага тлумачэння, см Вікіпедыі артыкула :

<�Р> ANSI.SYS таксама працуе ў NT-сістэмах, заснаваных на 16-бітных атрыманых у спадчыну праграм, якiя выконваюць пад NTVDM.      <�Р> Кансоль Win32 першапачаткова не падтрымлівае ANSI кіравальныя паслядоўнасці на ўсіх. Праграмнае забеспячэнне, такія як Ansicon , аднак, можа выступаць у якасці абгорткі вакол стандартнай кансолі Win32 і дадаць падтрымку для кіраўнікоў паслядоўнасцяў ANSI. </р>

Так што я думаю, што <�моцны> ANSICON Джэйсан Худ ваша рашэнне. Яна напісана ў C , падтрымлівае 32-разрадныя і 64-разрадныя версіі Windows, а <�а HREF = "https://github.com/adoxa/ansicon" отн = "noreferrer"> крыніца даступны .

Акрамя таго, я знайшоў іншы падобны пытанне або паведамленне, якое ў канчатковым рахунку, быў дадзены адказ выкарыстоўваць ANSICON:

46
дададзена
Аднойчы я хак, каб ANSI працаваць у Windows XP без якіх-небудзь іншых прыладаў groups.google.com/forum/# тэма/alt.msdos.batch.nt/YZnoq80Mc & ZWNJ; DS
дададзена аўтар est, крыніца
Адказ абнаўляецца ў адпаведнасці з Рыч Тэрнер ўклад
дададзена аўтар Franco Rondini, крыніца
@Simon дзякуй, я выдаліў спасылку, таму што ён не працуе дарэчы ёсць архівуюцца версія кб/101875 тут
дададзена аўтар Franco Rondini, крыніца
Як часы мяняюцца;) У Windows 10 Anniversary Update і за яе межы, кансоль Windows, была абноўлена з даволі цвёрдай падтрымкай ANSI/VT паслядоўнасцяў, і ў Creators Update, былі абноўленыя для падтрымкі 24-бітных RGB колеру таксама: blogs.msdn.microsoft.com/commandline/2016/09/22/& hellip;
дададзена аўтар Rich Turner, крыніца

Пачынаючы з Windows 10 TH2 (v1511), conhost.exe і cmd.exe Падтрымка ANSI і VT100 Escape-паслядоўнасці з скрынкі (хоць яны павінны быць уключаны ).

См мой адказ на больш прывілеяванай для атрымання больш падрабязнай інфармацыі.

27
дададзена
105xx зборак былі толькі зборкамі, якія маюць VT100 паслядоўнасцяў ўключаны па змаўчанні. У папярэдніх і наступных зборках ён адключаны па змаўчанні прычына была ўключана па памылцы. Глядзіце тут для тлумачэння wpdev.uservoice.com/forums/…
дададзена аўтар Anatol Belski, крыніца

Пачынаючы з Windows 10, вы можаце выкарыстоўваць ENABLE_VIRTUAL_TERMINAL_PROCESSING для таго, каб кіраўнікі паслядоўнасці ANSI:

https://msdn.microsoft. кім/EN-US/бібліятэка/акна/настольныя/mt638032 (v = vs.85) .aspx

10
дададзена

Калі ANSICON не з'яўляецца прымальным, бо ён патрабуе, каб усталяваць нешта ў сістэме, больш лёгкага рашэння, якое аналізуе і пераўтворыць коды ANSI ў адпаведны Win32 API функцыі кансолі , такія як SetConsoleTextAttribute .

https://github.com/mattn/ansicolor-w32.c

6
дададзена

For coloring the cmd you need Windows.h and use SetConsoleTextAttribute() more details can be found in http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspx

5
дададзена
Гэта даволі грувасткае рашэнне, не кажучы ўжо пра тое, што гэта дазваляе толькі для афарбоўкі тэксту - ня астатняе кодаў ANSI.SYS. users.cybercity.dk/~bse26236/batutil/help/ANSI~ S_S.HTM
дададзена аўтар Witiko, крыніца

<�Моцны> Для Python 2.7 наступны скрыпт працуе для мяне добра з Windows 10 (v1607)

import os

print '\033[35m'+'color-test'+'\033[39m'+" test end"
os.system('') #enable VT100 Escape Sequence for WINDOWS 10 Ver. 1607
print '\033[35m'+'color-test'+'\033[39m'+" test end"

Вынік павінен быць:

[35mcolor-test[39m test end

color-test test end
5
дададзена
Гэта пачынае выглядаць чорнай магіі і няма гаворкі аб тым, як адключыць наладу пасля кансолі? як ні дзіўна, гэта працуе для мяне, але незразумела, чаму з чароўнай пустой радка.
дададзена аўтар Conrad B, крыніца
Гэта настолькі павярхоўна ...
дададзена аўтар forthe, крыніца

ANSI.SYS (у тэчцы system32) з'яўляецца «драйвер MSDOS» пастаўляецца як частка Windows XP, 2000 і больш ранніх версій NT. У 2000 і XP, ён знаходзіцца ў тэчцы system32 (я не памятаю структуру ранніх версій NT). Праграмы, якія працуюць у падсістэме DOS і выкарыстоўваць стандартны вывад можна выкарыстоўваць ANSI.SYS гэтак жа, як яны маглі пераязджаць MSDOS.

To load ansi.sys, you must use the device= or devicehigh= command in config, just as you would in MSDOS. On Windows NT 5 (2K & XP), each copy of the DOS subsystem can be given a separate config file in the pif/shortcut (use the "advanced" button), and there is a default file called CONFIG.NT (also in the system32 folder), which is used if the pif/shortcut does not specify a special config file.

Калі ANSI.SYS правільна загружаны, MEM/d паведаміць, што ён будзе загружаны. У больш ранніх версіях NT, вы можаце і павінны загрузіць адпаведнае асяроддзе DOS, каб загрузіць ANSI.SYS і ANSI мастацтва будзе працаваць у камандным радку. На Win 2K і XP, пагрузачныя ANSI.SYS не будзе мець ніякага ўплыву на вашу «CMD радку» таму што CMD не праграма DOS: гэта 32 бітная праграма кансолі для Windows. Па нейкай прычыне, што я не разумею, на WinXP, нават калі вы загружаеце фіксаваную копію command.com з дапамогай «command.com/р», камандны радок не будзе ўключана ANSI: магчыма, калі вы робіце гэта такім чынам гэта толькі эмулюе загрузку command.com?

У любым выпадку, калі вы карыстаецеся актуальную версію DOS з command.com, ANSI з'яўляецца уключаны пасля загрузкі: вы можаце прадэманстраваць яго выкарыстанне з невялікай колькасцю AnSi мастацтва, як гэта:

command /c type ansiart.ans

(Вось прыклад: http://artscene.textfiles.com/ansi/artwork/ beastie.ans )

Config.nt (у тэчцы system32) змяшчае прыклад сінтаксісу, каб загружаць драйверы прылад. Вам трэба будзе мець правы адміністратара для рэдагавання гэтага файла па змаўчанні, ці вы можаце зрабіць копію гэтага.

На Win 2K і XP, па змаўчанні «ярлык» для MSDOS з'яўляецца .PIF файл, а не .LNK файл. Калі вы ствараеце .lnk файл CMD, вы не зможаце ўсталяваць адмысловы конфіг і AutoExec файлы, ён будзе выкарыстоўваць CONFIG.NT па змаўчанні. Калі вы хочаце выкарыстоўваць спецыяльны канфігурацыйны файл толькі для аднаго прыкладання DOS, вы можаце зрабіць копію «MSDOS цэтліка», ці вы можаце зрабіць копію «_default.pif», знойдзеную ў тэчцы Windows.

1
дададзена
---------------
дададзена аўтар david, крыніца

Можа быць, ANSICON можа дапамагчы U

Проста запампуйце і распакуйце файлы ў залежнасці ад АС Windows: 32- або 64-разрадны

Install it with: ansicon -i

1
дададзена

Мне асабіста падабаецца чокаются . Ён не толькі апрацоўвае ANSI коду, ён таксама дадае шмат іншых функцый, таму кансоль для Windows паводзіць сябе як баш (гісторыя, зваротны пошук у гісторыі, спалучэнне клавіш і г.д.):

  • The same line editing as Bash (from GNU's Readline library).
  • History persistence between sessions.
  • Context sensitive completion;
    • Executables (and aliases).
    • Directory commands.
    • Environment variables
    • Thirdparty tools; Git, Mercurial, SVN, Go, and P4.
  • New keyboard shortcuts;
    • Paste from clipboard (Ctrl-V).
    • Incremental history search (Ctrl-R/Ctrl-S).
    • Powerful completion (TAB).
    • Undo (Ctrl-Z).
    • Automatic "cd .." (Ctrl-PgUp).
    • Environment variable expansion (Ctrl-Alt-E).
    • (press Alt-H for many more...)
  • Scriptable completion with Lua.
  • Coloured and scriptable prompt.
  • Auto-answering of the "Terminate batch job?" prompt.
0
дададзена

In lastest win10, it can be done by SetConsoleMode(originMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING). See https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#example

0
дададзена

I found this tool to be working for my end. Microsoft Color Tool from GitHub

Распакуйце сціснуты файл затым адкрыйце CMD з дазволу адміністрацыі.

Перайдзіце ў тэчку, дзе вы распакаваць файл у CMD.

Далей запусціце « colortool -b схема імя »

Імя-схема павінна быць заменена любы з гэтых варыянтаў ніжэй:

  • campbell.ini
  • Кэмпбэл-legacy.ini
  • CMD-legacy.ini
  • deuternopia.itermcolors
  • OneHalfDark.itermcolors
  • OneHalfLight.itermcolors
  • solarized_dark.itermcolors
  • solarized_light.itermcolors

У маім выпадку, каманда будзе так « colortool -b solarized_dark.itermcolors »

Націсніце прама на акне кансолі і абярыце Ўласцівасці.

Вам не трэба, каб змяніць любое значэнне проста націсніце кнопку «OK», каб захаваць налады. (Вы заўважыце, што ваш шрыфт ўжо ўтрымлівае колеру).

Кансоль нерухомасці

Затым перазагрузіце ЦМД або Powershell.

Колер ANSI павінен быць уключаны і працуе з каляровай схемай вы абралі раней.

0
дададзена