Kuruluş modu girinti nasıl özelleştirilir?


12

bu soru aslında tek aralıklı yazı tiplerini (Sabon, Minion, Garamond, vb.) kullanmaktan hoşlandığım için ortaya çıkıyor. Misal: resim açıklamasını buraya girin

Yazı tipi Gürcistan. Şimdi, eğer teselli olarak değiştirirsem:

resim açıklamasını buraya girin

Bence sorun, tek aralıklı yazı tiplerinde "boşluk" ve * aynı alanı kaplamamasıdır. Gerçi bunu nasıl çözeceğimi bilmiyorum. İnternette arama yaptım ve girintiyi kendim ayarlamak için bir eğitim bulamadım. Ben org-indent.el okumaya çalıştım ama anlamak benim için uzun bir atış. Yardım büyük beğeni topluyor!


Ayrıca Emacs'ta oransal aralıklı serif yazı tiplerini kullanmayı seviyorum ve benzer sorunlar yaşadım. Belki de yazı tipinde bazı ince ayarların yardımcı olabileceğini düşünüyordum, ancak henüz tam olarak bakmadım.
Christian Gagné

1
Bunun ses modu ile ilgisi yoktur ve tek aralıklı yazı tiplerinin nasıl hizalanacağını merak edersiniz. Cevap, bunu kod kullanarak yapmanız gerektiğidir - diğer karakterlerle vb. Aynı genişliğe sahip boşluk karakterlerine güvenemezsiniz. Kısacası, genel olarak şansınız kalmaz.
Drew

@ "Genel olarak" haklı olabilirsiniz. Ancak bu özel sorun için bir çözüm var, cevabımı görün. Girintileme için kullanılan önde gelen alanlar org-indentgerçekten orada değil, sadece line-prefixözelliklerdir, bu yüzden görünmez olduğu sürece başka herhangi bir karakterle değiştirilebilirler.
kullanımdan kaldırıldı

@deprecated: Anlıyorum. Düzeltme için teşekkürler. BTW, belki de Org'un kendisi varsayılan olabilir, önerdiğiniz şeyi yapabilir. Veya yalnızca SPCkarakterleri kullanın, ancak (varsayılan olarak) tek aralıklı yazı tipine sahip bir yüz yerleştiren text (veya yer paylaşımı) özelliği ile. Belki bir Org geliştirme isteği vardır. ;-)
Drew

@Bunu yazı tipi kilidi ile yapmak çok kolay, değil mi?
Clément

Yanıtlar:


9

Bir çözüm, org-indent-stringsgirinti karakteri olarak boşluklar yerine yıldızlar kullanmak için değişiklik yapmaktır. Bu, girintinin genişliğinin orantılı bir yazı tipi kullanıldığında bile her zaman doğru olacağı anlamına gelir. Daha sonra hile, girintinin ön plan rengini arka plan rengiyle aynı olacak şekilde ayarlamaktır, böylece yıldızlar görünmez olur.

Bunu, işlevi öneren aşağıdaki kodla başarabiliriz org-indent-initialize:

(require 'cl)
(defun org-indent-use-stars-for-strings ()
  "Initialize the indentation strings with stars instead of spaces."
  (setq org-indent-strings (make-vector (1+ org-indent-max) nil))
  (aset org-indent-strings 0 nil)
  (loop for i from 1 to org-indent-max do
    (aset org-indent-strings i
          (org-add-props
          (concat (make-string (1- i) ?*) ; <- THIS IS THE ONLY CHANGE
              (char-to-string org-indent-boundary-char))
          nil 'face 'org-indent))))

(advice-add 'org-indent-initialize :after #'org-indent-use-stars-for-strings)
(set-face-foreground 'org-indent "white")

Sonuç Mac OS X'de emacs -Qve benim için şöyle görünür (set-face-font 'default :family "Gill Sans"):

resim açıklamasını buraya girin


Merhaba @precated, cevabı sağladığınız için çok teşekkür ederim! Bu aptalca bir soru ama kodunuzu org-indent.el veya init.el dosyasına mı yerleştirmeliyim? İkisi de benim için çalışmıyor gibi görünüyor. Emacs 24.4'ü pencerelerin altında kullanıyorum, - bir şey derlemem mi gerekiyor? Teşekkürler!
Alex

Tamam aptalca bir soru sordum. Org-indent.el dosyasını derlemeliyim. İlerisi için: en kolay yolu bu satırı değiştirmek olacaktır (concat (make-string (1- i) ?\ ) için (concat (make-string (1- i) ?*) tanımında arasında org-indent-initializeyani (defun org-indent-initialize... sonra org-indent.elc için derleme org-indent.el Mx bayt derleme dosyası kullanın. Ardından emacs'ı yeniden başlatın.
Alex

3

itirazın cevabı çok iyi, ama benim için pek işe yaramadı. Şu anda Emacs 24.4 ve org 8.2.4'teyim ve danışmanlık org-indent-initializehiçbir şey yapmadı. Değişen girinti karakteri ile işlevi yeniden tanımlamak zorunda kaldım ve bu işe yaradı. Belki Emacs 24.5 ve org 8.3'e yükselttiğimde danışmanlık işe yarayacaktır.

Ama aynı zamanda birkaç ayar daha yapmak zorunda kaldım, çünkü farklı başlık seviyeleri için farklı boyutta değişken genişlikli yazı tipleri kullanıyorum, yani seviye-1 başlıklarının seviye-2'lerle *aynı genişlik olmadığı anlamına gelir .

Bu yüzden de bunu yapmak zorunda kaldım:

  1. Aynı yazı tipini aynı boyutta kullandıklarından emin olmak için yüzleri org-hide(başlık satırlarını girintilemek için kullanılır) ve org-indent( başlık dışı satırları girintilemek için kullanılır) ayarlayın .
  2. Değişkeni Set org-indent-boundary-characteriçin *varsayılan yerine (bir boşluk). Bu, girinti karakterlerinden sonra ancak içerikten önce eklenen karakterdir. Bunu değiştirmenin bir gereklilik olup olmadığından emin değilim, ancak tutarlılığa yardımcı görünüyor. Kullandığınız yazı tipine, boyutlara vb. Bağlı olabilir.

Bu şeyleri, org-indent-initializekullanımdan kaldırıldığı gibi değişiklik yapmanın yanı sıra yapmak da yapmış gibi görünüyor. Ben böyle bir tampon ile sonuçlanır:

ekran görüntüsü

Başlık seviyesi düştükçe girintinin başlık metniyle tam olarak örtüşmediğini görebilirsiniz. Bunun alt düzey başlıklar için daha küçük yazı tipleri kullanması nedeniyle olduğunu düşünüyorum ve bunu düzeltmenin kolay bir yolu olduğunu düşünmüyorum. Gibi metin özellikleri ile bir şey yapmak mümkün olabilir line-prefixve wrap-prefixbu görüntülerin ve özel karakterlere dizisi olabilir, çünkü ancak bu muhtemelen karmaşık ve yavaş olacaktır. Tüm başlık düzeyleri için aynı yazı tipi boyutunu kullanırsanız, bu muhtemelen bir sorun oluşturmaz.

Her neyse, bu muhtemelen yeterince iyi. :)

PS İstendiği gibi, org-levelyüzlerim burada . Bunlar kopyalanır custom-set-faces, ancak kullanmazsanız customizebunları dışarıda ayarlayabilirsiniz.

 '(org-level-1 ((t (:inherit variable-pitch :foreground "#cb4b16" :weight bold :height 1.3))))
 '(org-level-2 ((t (:inherit variable-pitch :foreground "#859900" :weight bold :height 1.2))))
 '(org-level-3 ((t (:inherit variable-pitch :foreground "#268bd2" :weight bold :height 1.15))))
 '(org-level-4 ((t (:inherit variable-pitch :foreground "#b58900" :weight bold :height 1.1))))
 '(org-level-5 ((t (:inherit variable-pitch :foreground "#2aa198" :weight bold))))
 '(org-level-6 ((t (:inherit variable-pitch :foreground "#6c71c4" :weight bold))))
 '(org-level-7 ((t (:inherit variable-pitch :foreground "#d33682" :weight bold))))
 '(org-level-8 ((t (:inherit variable-pitch :foreground "#dc322f" :weight bold))))

@bluejay Bunun nasıl göründüğünü seviyorum. Bunu bir yere göndermek için tam yapılandırmaya sahip misiniz?
erikstokes

ELPA'dan yükleyebileceğiniz paketin bir solarized-darkparçası olan temayı kullanıyorum solarized-theme. org-level-*Yüzlere gelince , onları yukarıdaki cevaba ekleyeceğim.
blujay

Süper havalı görünüyor. Varsayılan * işaretini bu özel sembollerle nasıl değiştirirsiniz?
Alex

Bu org-bulletspaketten. İle package-list-packagesbaşlayan tüm paketleri çalıştırın org-. :)
blujay

2

Her nasılsa, kurulumum için çalışmak için diğer cevapları alamadım, ancak benim için çalışan en hızlı ve en kolay düzeltme:

`M-x customize-face org-hide`

Ardından, Font Familyözelliği tek aralıklı yazı tipinize değiştirin (benim durumumda Iosevka).

Ve tam anlamıyla yapmanız gereken tek şey bu , çünkü org-indent(anahat girintisi için yüz) otomatik olarak miras alır org-hide(başlıklardaki baştaki yıldızları gizlemek için kullanılan yüz)

resim açıklamasını buraya girin


1

Çok daha basit bir çözüm: Kuruluş modunda, M-:aşağıdakilere basın ve çalıştırın

(font-lock-add-keywords 
 nil 
 '(("^[[:space:]*]+" 0 '(face (:family "Ubuntu Mono")) append))
 'append)

Bundan M-x font-lock-fontify-buffersonra ihtiyacınız olabilir . Bu çözüm, önde gelen karakterleri (boşluklar ve yıldızlar) tek aralıklı yazı tipi kullanmaya zorlar.

Ayrıca, "Ubuntu Mono" yerine seçtiğiniz bir tek aralıklı yazı tipini,


Diğer çözümler düşünüldüğünde bu artık gerekli değildir. :)
blujay
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.