Kursywa w Emacsie na terminalu tekstowym (rxvt-unicode)

15

Korzystam z Emacsa działającego w urxvt i nie mogę zmusić kursywy do pracy w Emacsie, chociaż terminal go obsługuje.

Oto moja obecna konfiguracja:

  • Nie ustawiłem $TERM, więc jest to ustawienie domyślne rxvt-unicode-256color.
  • Mój ~/.Xdefaultsokreśla się URxvt.font: xft:Inconsolata:size=15jako czcionkę terminalową.
  • Uruchomienie echo '\e[3mitalics\e[m'w powłoce rzeczywiście daje wynik italics, więc kursywą w terminalu jest , w zasadzie, działanie.

Podczas dostosowywania „Kursywa” twarz, to nie ma żadnej różnicy, czy mogę wybrać italic, oblique, normallub romanjako wartość dla Slantatrybutu, ani też nie, jeśli nie ustawić Slantatrybut w ogóle. Próbowałem tego również w połączeniu z wyraźnym zdefiniowaniem URxvt.italicFontw moim ~/.Xdefaults, ale bezskutecznie.

Pogrubienie działa dobrze, kursywa w ogóle nie działa. Jakieś pomysły?

Igor
źródło
Nie zdawałem sobie sprawy, że w terminalu jest nawet możliwe kursywą. Dziękuję za to.
wfaulk,

Odpowiedzi:

10

W skrócie: nie możesz używać bieżącej wersji Emacsa (sprawdzonej za pomocą 23.2), ale zobacz możliwe obejście poniżej.

Dłuższa historia: obsługa kursywy jest zakodowana w bazie danych terminfo jako funkcja sitm(wpisz kursywę) i ritm(wyjdź kursywą) (zwana także ZHi ZRdla zgodności termcap); możesz sprawdzić, czy twój terminal je obsługuje:

infocmp $TERM | egrep '(sitm|ritm)'

Jeśli nie są one obecne, rxvt-unicode-256coloropis terminala nie dostarcza informacji do biblioteki ncurses o możliwościach kursywy terminala i możesz je dodać, w przeciwnym razie żadna aplikacja TTY nie będzie mogła używać kursywy.

Jednak funkcja turn_on_face(w źródłach Emacsa, plik src/term.cw linii 1919--2012), która zarządza terminalem, nie obsługuje kursywy: sprawdza pogrubienie / przyciemnienie / miganie / podkreślenie atrybutów twarzy. W rzeczywistości nie ma zakodowanego atrybutu „kursywa” struct face.

Rzeczywiście, mój Emacs (wersja 23.1 na Ubuntu 11.04 natty) pokazuje twarze pochylone (które są wyświetlane poprawnie w X11), jak podkreślono w TTY. (Co oznacza, że ​​jeśli nie przejmujesz się podkreślaniem, możesz po prostu zmienić opis terminfo terminala, aby użyć sekwencji ucieczki kursywą enter / exit zamiast podkreślenia enter / exit i uzyskać kursywę.)

Riccardo Murri
źródło
Ta odpowiedź wygląda dobrze, ale w tej chwili nie mogę jej przetestować, ponieważ jedyną instalacją Linuksa, którą mam, jest gość na hoście Win7. W rezultacie mam trudności z testowaniem tego. W szczególności nie mogę wstawić kodów specjalnych ascii. Jeśli ktoś inny może przetestować, aby potwierdzić lub wyjaśnić, co robię źle z sekwencjami ucieczki, chętnie przyznam nagrodę.
vschum
@vschum Jeśli próbujesz zmienić bazę danych terminfo, ta odpowiedź powinna pomóc. Nie możemy pomóc z twoimi trudnościami, chyba że je wyjaśnisz; możesz zadać pytanie na ich temat.
Gilles „SO- przestań być zły”
@Gilles Właściwie to ma więcej wspólnego z tą odpowiedzią . Nie mogę wymyślić, jak wstawić sekwencje, aby sprawdzić, czy kursywa działają, czy nie. Po wpisaniu ESC [3 m nic nie pojawia się w terminalu.
vschum
2
@vschum Naciśnięcie ESCnie wstawia znaku zmiany znaczenia. Możesz nacisnąć, Ctrl+V ESCaby wstawić, ale rzadko musisz. Np. Znak zmiany znaczenia reprezentowany jest przez \Eźródło w terminfo; w terminalu (z bash / ksh / zsh), spróbuj echo $'\e[3mhello\e[0m'.
Gilles „SO- przestań być zły”,
4

Dodaję tę odpowiedź, ponieważ pozostałe są nieaktualne. Emacs 24.5 poprawnie wyświetla twarze kursywą w terminalach.

wprowadź opis zdjęcia tutaj

Jest to emacs 24.5 działający w terminalu ( emacs -nw). Terminal jest, uxvrta konfiguracja w moim .Xdefaultsto:

URxvt*termName: rxvt-unicode-256color
URxvt.font: xft:DejaVu Sans Mono:size=9
Casey
źródło
3

Odnośnie emacsa, który nie może używać kursywy w emulatorach terminali, które zapewniają tę funkcjonalność: Tak jest błąd emacsa # 9652, który został naprawiony przez Chong Yidong 10 czerwca 2012 r.

Poprawka nie występuje w żadnej wydanej wersji emacsa, ale na przykład w pakiecie emacs-snapshot z emacs.naquadah.org .

Gregor Zattler
źródło
Informacje te są prawdopodobnie nieaktualne ...
Samuel Edwin Ward