Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Je kunt ook een cookievrije versie van de website bezoeken met minder functionaliteit. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

[WinXP] ANSI-escape codes gebruiken voor kleurtjes onder cmd

Pagina: 1
Acties:

  • muba
  • Registratie: april 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Ik wil graag, met behulp van ANSI-escape codes, leurtjes gebruiken onder de command prompt van WinXP. Standaard gebruik ik natuurlijk cmd, maar als het noodzakelijk is om command.com te gebruiken is dat ook geen probleem.

Vanzelfsprekend heb ik c:\windows\system32\ansi.sys geladen vanui c:\windows\system32\config.nt met device=. Toch krijg ik geen kleurtjes te zien, maar in plaats daarvan de volledige escape-code ([ESC][32m) etc.

Is hier op de een of andere manier een oplossing voor? Des noods door iets anders dan de ANSI-escape codes te gebruiken?

Uiteraard is het commando 'color' geen uitkomst, omdat daarmee alle letters/de gehele achtergrond van een andere kleur voorzien, en dat is dus niet de bedoeling.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • elevator
  • Registratie: december 2001
  • Niet online

elevator

Officieel moto fan :)

Je kan dit vrij gemakkelijk vinden - zoek maar eens op "ansi color command.com", de 4e hit is dan bv:
http://www.evergreen.edu/...otes/program/ansi_esc.htm

Hier kunnen we lezen:

Restrictions:
Windows NT does not support ANSI.SYS escape sequences in Win32 Console applications.
The Windows 2000/NT Command Interpreter, CMD.EXE, does not support ANSI.SYS. Use COMMAND.COM instead.
Er staan ook wat leuke voorbeeldjes, maar ik denk dat dit gemakkelijk te vinden is allemaal.

I laid there quiet, watched you have your way
I might have cried, the tears were silent inside
You called me names, made me feel like I was dumb
I didn't feel a thing and now I'm gone, gone, gone.


  • elevator
  • Registratie: december 2001
  • Niet online

elevator

Officieel moto fan :)

Op verzoek terug open.

-

Als je er nu achter komt dat bepaalde commando's in een batchfile nog steeds niet ANSI codes interprete, moet je eens opletten ofdat je er achter kan komen waarom dat is.

Wat gebeurt er namelijk op het moment dat jij een batchfile uitvoert - Windows start in de background een cmd.exe op (je ziet dat aan het feit dat er bijvoorbeeld tijdelijk scrollbars komen in je window die er niet zijn), voert hierin de batchfile uit, en returned naar het parent process.

• command.com http://azrael.elexer.com/zooi/bat_01.png
• cmd.exe http://azrael.elexer.com/zooi/bat_02.png
• command.com http://azrael.elexer.com/zooi/bat_03.png

Hoe kan je dit dan toch simpel oplossen? Je kan Windows forceren om jouw batchfile uit te laten voeren met command.com, zie hier het verschil:

http://azrael.elexer.com/zooi/bat_04.png

I laid there quiet, watched you have your way
I might have cried, the tears were silent inside
You called me names, made me feel like I was dumb
I didn't feel a thing and now I'm gone, gone, gone.


  • muba
  • Registratie: april 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Ok, heel erg bedankt voor A) het heropenen van dit topic, en B) de deels zeer bruikbare tips.
Om de een of andere reden werkt het nog steeds niet met het perlscript, zelfs niet als ik dus doe 'command /c perl script.pl'. Dus ik heb jou voorbeeld gevolgd en een simpel batch-bestandje gemaakt die ANSI-kleurtjes zou moeten maken. Deze uitvoeren met 'command /c batch.bat' geeft gelukkig wel het gewenste resultaat.

Toen ben ik even goed gaan opletten, en ik ontdekte dat als ik typ 'command /c perl script.pl', dat die scrollbars van cmd.exe TOCH verschijnen. Ligt dat aan Perl?
http://members.home.nl/par/voorbeeld.jpg

Ligt dat aan mijn (on)kunde? Ik weet het niet, dus vraag ik nogmaals om hulp.

Waarschijnlijk heeft het er ook mee te maken dat een batch-bestand door command.com intern uitgevoerd kan worden, maar dat voor het starten van perl.exe toch cmd.exe nodig is. Valt dit te omzeilen? Moet ik iets anders vinden dan perl of afzien van de kleurtjes?

muba wijzigde deze reactie 08-10-2003 00:48 (18%)

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • elevator
  • Registratie: december 2001
  • Niet online

elevator

Officieel moto fan :)

Perl is (net zoals cmd.exe) een 32-bits process, en dus zal het interpreteren van de ANSi niet door Windows afgehandeld moeten worden.

Traditioneel gezien worden er op DOS en Windows eigenlijk ANSi code interpreters ingebouwd in de software die ANSi uitspuugt (als je kijkt bv. naar de wat oudere ANSI-BBS terminals zoals Telix of Terminate, deze hadden allemaal eigen telnet emulators 'on board').

Zo te zien is dit precies wat je zoekt - een Perl library om ANSi codes te interpreten.

Mag ik overigens vragen waarom je ANSI codes wilt gaan gebruiken in een Perl programma? Je kan in de Win32 console ook direct aanspreken onder Perl zo te zien (click) en dat is code technisch gezien 'mooier' dan via een interpreter.

I laid there quiet, watched you have your way
I might have cried, the tears were silent inside
You called me names, made me feel like I was dumb
I didn't feel a thing and now I'm gone, gone, gone.


  • muba
  • Registratie: april 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Goed, die library ga ik dalijk ff mee stoeien, kijken hoe ver ik kom.
Die tweede link, wat daar in staat ken ik wel, maar uiteindelijk spuugt dat ook gewoon letterlijk ansi-escape sequences uit.

Ik zal een kleine toelichting geven. Ik weet niet of je bekend bent met het fenomeen MOO (een soort MUD), maar daarbij kun je in strings codes als [blue] en [bold] en [red] en [bg_green] etc etc opnemen, die door de server worden omgezet in de ANSI-escape reeksen. Dat is natuurlijk ideaal, en ik vond dat ik dat ook moest hebben.

Dus heb ik een kleine Perl-module geschreven die zulk soort codes ook kan omzetten. Dat is echt heel handig programmeren (als je ten minste graag kleuren zoals ik :) )

Goed, ik ga dus eerst even proberen met die library en kijken wat dat oplevert, het resultaat post ik hier wel.

Komt mij net opeens nog een vraag te boven (is dat goed Nederlands?)... zijn er geen andere (gratis!) command-shells in plaats van / naast cmd.exe die wel ANSI-kleuren ondersteunen?

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • elevator
  • Registratie: december 2001
  • Niet online

elevator

Officieel moto fan :)

Misschien dat ik me vergis, maar als ik het zo lees, dan is dit meer een 1:1 mapping van de Win32 console API en niet iets wat ANSI modes uitspuugt. In tegenstelling tot (bv) Linux consoles, wordt er intern door Windows geen ANSI gebruikt.

Overigens - muds worden toch meestal via telnet gespeeld of vergis ik me nu heel erg? In hoeverre is een lokale interpretatie van ANSi dan echt belangrijk ?

elevator wijzigde deze reactie 08-10-2003 01:06 (21%)

I laid there quiet, watched you have your way
I might have cried, the tears were silent inside
You called me names, made me feel like I was dumb
I didn't feel a thing and now I'm gone, gone, gone.


  • muba
  • Registratie: april 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

je hebt gelijk, maar sommige telnet-clients (en vooral MOO-clients, die meestal speciale features hebben) kunnen ansi-escape reeksen omzetten naar de juiste kleuren. Dan is het dus wel zo handig als er vanuit de server ansi-escape reeksen gestuurd worden. Maar eigenlijk is dit onderwerp een beetje een afdwaling van het topic :D

Hoe dan ook, ik ben dus bezig geweest met Win32::Console, en dat heeft 1 voordeel (je ziet de letterlijke escape-reeks niet meer!) en 1 nadeel (je ziet ook geen kleuren :D)

http://members.home.nl/par/voorbeeld2.jpg
Heb voor de zekerheid even gecontroleerd of $FG_GREEN en $BG_YELLOW wel iets waren, en zo te zien dus wel. Ik kom langzaam dichterbij, maar nog niet genoeg.

Terwijl ik wacht op misschien nieuwe tips/informatie/..., ga ik het internet afschuimen naar alternatieven voor cmd.exe

In elk geval, tot zover bedankt!

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • muba
  • Registratie: april 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

hmm, this might be interessting:
For example, to highlight the prompt in MS-DOS command prompt, you must add "dosonly" to your CONFIG.NT file, and run COMMAND (not CMD) from MS-DOS Command Prompt. You can then run a batch file that includes the PROMPT command with ANSI escape sequences to highlight the prompt.

Ff proberen dus

.EDIT: Laat maar, ik zit niet op te letten. Met dit commando maak je o.a. perl.exe volledig onbereikbaar vanuit command.com, omdat dat een 32bit prog is... hoo :)

muba wijzigde deze reactie 08-10-2003 01:52 (23%)

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • muba
  • Registratie: april 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Ah!
Ik heb een mooie work-around gevonden!
Vanuit cmd.exe kan je (natuurlijk!) command.com aanroepen. En dan werkt alles wel goed.
Vanuit cmd.exe een batch aanroepen met als inhoud 'command /c echo dingetjes in {ESC}[32mkleur!' werkt wel.
Dus ik ga mn perl-script dusdanig ombouwen dat prints waar ansi bij komt kijken, via command.coms echo gaan. Waarschijnlijk geen nette of mooie oplossing, maar ik krijg wat ik hebben wil: KLEUR!

Heel erg bedankt, elevator. Je hebt me heel erg in de goede richting gestuurd, en ik weet niet of ik er anders zo snel achter gekomen zou zijn. Tof!

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • elevator
  • Registratie: december 2001
  • Niet online

elevator

Officieel moto fan :)

Mooi dat het toch nog opgelost is - maar even zodat ik het zelf ook snap ;)

Ik schrijf zelf ook wel eens een applicatie die via telnet gebruikt wordt, en om dan op de telnet client ANSI kleuren te zien te krijgen, moet ik ruwe ANSI codes sturen. Pas als ik lokaal ook kleurtjes wil weergeven (eg: een operator moet kunnen 'mee kijken' op een game), heb ik lokaal een ANSi interpreter nodig.

Misschien dat ik je verkeerd begrijp hoor :)

I laid there quiet, watched you have your way
I might have cried, the tears were silent inside
You called me names, made me feel like I was dumb
I didn't feel a thing and now I'm gone, gone, gone.


  • muba
  • Registratie: april 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Ik ga het stap voor stap proberen uit te leggen. Ik begrijp je redenatie, maar een MOO is net iets anders dan een MUD.

In een MOO kunnen de spelers zelf ook dingen maken en daar beschrijvingen bij maken of bepaalde kleine programmaatjes (verbs) om het geheel samen te laten werken.

In deze beschrijvingen of verbs kun je ANSI-reeksen ({ESC}[32m bijv) opnemen, zodat je in die descriptions of verbs kleuren kan opnemen.

Niet iedereen kent natuurlijk al die numerieke codes uit zijn hoofd, en daarnaast is het in Windows best moeilijk geworden om het ESCAPE-karakter uit je toetsenbord te krijgen om het naar de server (waar de verbs worden opgeslagen) te sturen.

Daarom is er een soort parser bedacht, die gebruik maakt van codes als [blue] en [green] en [bold] en [bg_white] etc, zodat makers van descriptions en verbs die kunnen gebruiken in plaats van de echte ANSI-reeksen.

Deze parser wordt aangeroepen vanuit dat gedeelte van de server dat de data naar de verbonden spelers stuurt, dus de woordcodes ([green]) worden omgezet naar ANSI-reeksen ({ESC}[32m), zodat de mensen thuis gewoon kleurtjes op hun scherm zien.

Nu programmeer ik niet alleen in MOO's, maar ook graag voor mezelf en vaak maak ik dan text-only applicaties, meestal in Perl.

Ik vond/vindt die MOO-woordcodes voor ANSI-reeksen wel erg handig, dus toen dacht ik: hee, dat wil ik ook hebben in mijn Perl-bouwsels. Dus toen ben ik een soortgelijke parser gaan maken voor Perl. En dat werkt. Maar niet zomaar onder XP :) Maar wel als je het via command.com's echo doet :)

Ik hoop dat je het snapt?

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • elevator
  • Registratie: december 2001
  • Niet online

elevator

Officieel moto fan :)

Nu snap ik wat je bedoelt inderdaad. Je wilt de "moo-code" parser (om het zo maar even te noemen ;) ) ook in een programma gebruiken wat je alleen lokaal gebruikt.

Ik was even nieuwsgierig :)

I laid there quiet, watched you have your way
I might have cried, the tears were silent inside
You called me names, made me feel like I was dumb
I didn't feel a thing and now I'm gone, gone, gone.


  • muba
  • Registratie: april 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Juist :)
Maargoed, in principe mag dit topic nu *wel* dicht :D
Nogmaals bedankt!

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea

Pagina: 1


Populair: Samsung Gamecontrollers Game-accessoires Smartphones Sony Microsoft Apple Games Consoles Politiek en recht

© 1998 - 2014 Tweakers.net B.V. Tweakers is onderdeel van De Persgroep en partner van Computable, Autotrack en Carsom.nl Hosting door True

Beste nieuwssite en prijsvergelijker van het jaar 2013