to pytanie powstaje, ponieważ lubię używać czcionek nieposiadających stałej szerokości (Sabon, Minion, Garamond itp.). Powoduje to problem podczas korzystania z trybu wcięcia w org, ponieważ tekst pod nagłówkami nie jest teraz wyrównany z nagłówkami. Przykład:
Czcionka to Georgia. Teraz, jeśli przejdę na konsole:
Myślę, że problem polega na tym, że w czcionkach nieposiadających odstępów „spacja” i * nie zajmują tego samego miejsca. Chociaż nie wiem jak to rozwiązać. Przeszukałem internet i sam nie mogłem znaleźć samouczka, aby dokładnie dostroić wcięcie. Próbowałem odczytać org-indent.el, ale dla mnie to długa droga do zrozumienia. Bardzo doceniamy pomoc!
indentation
fonts
Alex
źródło
źródło
org-indent
tak naprawdę nie istnieją, są tylkoline-prefix
właściwościami, więc można je zastąpić dowolną inną postacią, o ile jest to niewidoczne.SPC
znaków, ale z właściwością text (lub overlay), która narzuca twarz, która (domyślnie) ma czcionkę o stałej szerokości. Może prośba o ulepszenie organizacji jest w porządku. ;-)Odpowiedzi:
Jednym z rozwiązań jest modyfikacja,
org-indent-strings
aby używać znaków zamiast spacji jako znaku wcięcia. Oznacza to, że szerokość wcięcia zawsze będzie poprawna, nawet przy użyciu czcionki proporcjonalnej. Sztuczka polega zatem na ustawieniu koloru pierwszego planu wcięcia na taki sam, jak kolor tła, aby gwiazdy stały się niewidoczne.Możemy to osiągnąć za pomocą następującego kodu, który doradza funkcję
org-indent-initialize
:Wynik wygląda tak dla mnie w systemie Mac OS X przy użyciu
emacs -Q
i(set-face-font 'default :family "Gill Sans")
:źródło
(concat (make-string (1- i) ?\ )
na(concat (make-string (1- i) ?*)
w definicjiorg-indent-initialize
tj.(defun org-indent-initialize...
Następnie użyć Mx bajt-plik-kompilacji do skompilowania org-indent.el do org-indent.elc. Następnie uruchom ponownie emacsa.Odpowiedź przestarzała jest bardzo dobra, ale dla mnie nie zadziałała. Obecnie korzystam z Emacsa 24.4 i org 8.2.4 i doradzanie
org-indent-initialize
nic nie zrobiło. Musiałem przedefiniować funkcję ze zmienionym wcięciem i to zadziałało. Może po aktualizacji do Emacsa 24.5 i wersji 8.3 org doradztwo będzie działać.Ale musiałem także dokonać kilku innych korekt, ponieważ używam czcionek o zmiennej szerokości o różnych rozmiarach dla różnych poziomów nagłówków, co oznacza, że nagłówki poziomu 1
*
nie mają takiej samej szerokości jak poziomy 2 i tak dalej.Więc musiałem to zrobić:
org-hide
(używane do wcięcia linii nagłówka) iorg-indent
(używane do wcięcia linii innych niż nagłówek), aby upewnić się, że używają tej samej czcionki o tym samym rozmiarze.org-indent-boundary-character
na*
zamiast domyślnej(spacja). Jest to znak wstawiany po znakach wcięcia, ale przed treścią. Nie jestem pewien, czy zmiana tego jest koniecznością, ale wydaje się, że pomaga to w spójności. Może to zależeć od używanej czcionki, rozmiarów itp.
org-indent-initialize
Wydaje się, że dokonanie tych czynności oprócz zmiany jako przestarzałe, pod warunkiem. Skończyłem z buforem wyglądającym tak:Widać, że wraz ze spadkiem poziomu nagłówka wcięcie nie pokrywa się idealnie z tekstem nagłówka. Myślę, że dzieje się tak z powodu używania mniejszych czcionek w nagłówkach niższych poziomów i nie sądzę, że istnieje prosty sposób, aby to naprawić. Możliwe jest zrobienie czegoś z właściwościami tekstu, takimi jak
line-prefix
iwrap-prefix
, ponieważ można je ustawić na obrazy i znaki specjalne, ale prawdopodobnie byłoby to skomplikowane i powolne. Jeśli użyjesz tego samego rozmiaru czcionki dla wszystkich poziomów nagłówków, prawdopodobnie nie będzie to problemem.W każdym razie jest to prawdopodobnie wystarczająco dobre. :)
PS Zgodnie z życzeniem, oto moje
org-level
twarze. Są one kopiowanecustom-set-faces
, ale jeśli nie używaszcustomize
, możesz ustawić je poza nim.źródło
solarized-dark
motywu, który jest częściąsolarized-theme
pakietu, który możesz zainstalować z ELPA. Jeśli chodzi oorg-level-*
twarze, dodam je do powyższej odpowiedzi.org-bullets
paczki. Uruchompackage-list-packages
i sprawdź wszystkie pakiety zaczynające się odorg-
. :)Jakoś nie udało mi się sprawić, by inne odpowiedzi zadziałały w mojej konfiguracji, ale najszybszą i najłatwiejszą poprawką, która zadziałała dla mnie była:
Następnie zmień
Font Family
atrybut na czcionkę monospace (w moim przypadkuIosevka
).I to dosłownie wszystko, co musisz zrobić , ponieważ
org-indent
(twarz dla wcięcia konturu) automatycznie dziedziczyorg-hide
(twarz używana do ukrywania wiodących gwiazd w nagłówkach)źródło
Znacznie prostsze rozwiązanie: w trybie organizacji naciśnij
M-:
i uruchom następujące poleceniePo tym możesz potrzebować
M-x font-lock-fontify-buffer
. To rozwiązanie po prostu zmusza wiodące postacie (spacje i gwiazdki) do korzystania z czcionek o stałej szerokości.Będziesz także chciał zastąpić „Ubuntu Mono” wybraną czcionką o stałej szerokości,
źródło