Emacs-kleuren worden anders ingesteld wanneer TERM 'screen-256color' en 'xterm-256color' is

Ik gebruik Emacs in een terminal en ontdek dat wanneer de omgevingsvariabele TERM wordt gewijzigd tussen scherm-256kleur en xterm-256color , de standaardkleuren binnen Emacs zijn anders ingesteld.

Voor alle duidelijkheid: in beide situaties krijg ik volledige 256-bits kleurenondersteuning (wordt uitgevoerd met byobu/tmux en wordt respectievelijk uitgevoerd met Gnome Terminal), maar Emacs past verschillende kleuren toe, zodat wanneer ik naar hetzelfde Python-bestand kijk, de syntaxis markeren maakt gebruik van verschillende kleuren in elk. Wanneer ik de kleuren handmatig wijzig met behulp van kleurthema, selecteer in hetzelfde thema, gebruiken ze vervolgens dezelfde kleuren. Het probleem is dat ik geen idee heb hoe de kleuren zijn ingesteld om mee te beginnen, en nog belangrijker, waarom ze anders zijn ingesteld.

Dit gedrag blijft constant wanneer ik byobu forceer om TERM = xterm-256color te gebruiken, dus het lijkt niet alsof dit een probleem is met elk van de terminalemulators.

Hoe kan ik ervoor zorgen dat Emacs in elke situatie dezelfde kleuren gebruikt?

3

2 antwoord

Het probleem is dat ik geen idee heb hoe de kleuren zijn ingesteld om mee te beginnen, en nog belangrijker, waarom ze anders zijn ingesteld.

Misschien is deze discussie over StackOverflow relevant - sommige gedetailleerde antwoorden op wat er gaande is.


Mijn zaak was de manier waarop emacs achtergrondkleur detecteert . Het heeft een fallback voor xterm - * , maar niet voor scherm - * , en gebruikte een zwarte achtergrond terwijl het eigenlijk wit is (niet beoordelen).

Er is ook een oplossing in het gelinkte antwoord - de juiste achtergrondkleur handmatig instellen (in vergelijking met emacs "leugens" door TERM ), door te evalueren ( Alt + x eval , of Alt +: ) het volgende:

(let ((frame-background-mode 'light)) (frame-set-background-mode nil))
3
toegevoegd

Ik ben hier geen expert op, maar ik geloof dat dit niet noodzakelijkerwijs gerelateerd is aan Emacs, maar eerder aan de terminale mogelijkheden.

U kunt bijvoofbeeld de verschillende terminalmogelijkheden zien met infocmp -I -r -T xterm-256colof en infocmp -I -r -T screen-256colof . Ik maakte een snelle vergelijking tussen hen en merkte op dat xterm-256colof een aanzienlijke hoeveelheid meer mogelijkheden heeft.

Na wat gissen denk ik dat wat er gebeurt is dat Emacs de initc capaciteit vindt en het gebruikt om meer tinten van een bepaalde kleur voof het standaardthema te bieden. Zie bijvoofbeeld deze vraag:

https://stackoverflow.com/questions/ 2814478/how-can-i-uitgang-different-shades-of-green-to-the-terminal

Ik weet niet zeker of je dit gedrag volledig kunt beheren vanuit Emacs, maar zoals je hebt genoteerd, kun je colof-theme-select gebruiken om het gedrag te wijzigen. Een tijdelijke oplossing zou kunnen zijn om simpelweg (load-theme "theme" t) in uw .emacs te gebruiken om het thema te dwingen dat u in gedachten had.

Een andere optie zou kunnen zijn om handmatig de TERMINFO- of TERMCAP-omgevingsvariabelen in te stellen om naar een bestand met de juiste terminalmogelijkheden te wijzen.

Bijvoofbeeld, je zou kunnen doen:

expoft TERMINFO="$HOME/.terminfo"
infocmp -I -r -T xterm-256colof > $TERMINFO

of

expoft TERMCAP="$HOME/.termcap"
infocmp -C -r -T xterm-256colof > $TERMCAP

This fofces Emacs to use the terminal capabilities you had in mind. It may also have other side-effects but I haven't seen any yet.

I don't know why tmux/byobu seems to ignofe fofcing TERM as you describe. In tmux however, I know that you can use set-option -g xterm-256colof to fofce the terminal to use. I don't know about byobu however.

1
toegevoegd
Bang dat ik geen volledig antwoord kan geven. Ik had een (zeer) korte blik in de Emacs-bron (src/term.c) en het lijkt verschillende dingen te doen afhankelijk van deze mogelijkheden, dus dat is waarschijnlijk wat er gebeurt.
toegevoegd de auteur Nick Retallack, de bron
Ah, dat is interessant over xterm-256color met meer mogelijkheden. Het vreemde is dat het niet echt overeenkomt met wat ik qua kleur zie. Wanneer ik speel met alle verschillende kleurenpaletten in mijn terminalemulator (Guake), reageert Emacs met scherm-256kleur veel dynamischer dan Emacs die werken onder xterm-256color . Er is gewoon manier minder variatie in het uiterlijk van de paletten in het laatste geval. Zozeer zelfs dat de helft van hen er hetzelfde uitziet. Dus qua vormgeving lijkt het er bijna op dat scherm-256kleur meer mogelijkheden biedt.
toegevoegd de auteur Craig B., de bron
Oh het was niet dat BYOU TERM negeerde. Ik probeerde te zeggen dat wanneer ik TERM op xterm-256color zet, byobu het inderdaad honoreert en ook dezelfde kleuren weergeeft die ik zie voor die waarde van TERM in andere niet-schermachtige terminals. Wat ons vertelt dat het niet is om iets vreemds te doen.
toegevoegd de auteur Craig B., de bron
Nog een toevoeging: de kleuren kijken constant over de twee naar delen van de terminal die geen Emacs draaien. Misschien heeft dit, zoals je suggereert, te maken met hoe Emacs de kleuren initialiseert wanneer TERM xterm-256color is. Eerlijk gezegd, tenzij ik een rare opzet heb, lijkt het alsof het verkeerd gaat. Ik heb emacs geladen zonder mijn init-bestand en het doet het nog steeds.
toegevoegd de auteur Craig B., de bron