Paragrafı cümle başına bir satıra nasıl bölebilirim, ancak yine de görsel olarak sarabilir miyim?


14

Bu, satır başına bir cümle ile dosyaları düzenleme işlemine benzer (işlev olarak ve gerekçe olarak), ancak her cümlede görsel molalar yerine tam, akan bir paragrafa sahip olmak istiyorum.

Aktif olduğunda, aynı paragraftan ( \n\nveya ile ayrılmış değil) görsel olarak çizgilere katılacak paragraph-separateve daha sonra visual-line-modegerçekten eklemeden çizgiyi saran davranışı (belki de türetilmiş ) etkinleştirecek küçük bir moda sahip olmak istiyorum \n.

Böyle bir mod var mı? Değilse, sonuca ulaşmak için bir paragrafın görüntü özelliklerini değiştirme işlemine nasıl devam edebilirim? (Sonuçta, bu tür bir modun özüdür ve snippet'ten biri geliştirilebilir.)


[...] görsel olarak katılacak [...]. Altta yatan \n(varsa) mı demek istediniz , yoksa satır başına 1 paragraf sağlamak için yeni satırları gerçekten kaldırmasını mı istiyorsunuz?
Jonathan Leech-Pepin

1
Belki de buffer-display-tableyeni satırların \nboşluk veya başka bir şey gibi görünmesini sağlamak için kullanabilirsiniz - bağlantıdaki aşağıdaki örneğe bakın: stackoverflow.com/a/24842771/2112489 Bunun avantajı, belge edilir değil güncellenmiştir. Yeni çizgi hemen hemen her şey olabilir - örneğin, gülen bir yüz, boşluklar, bir yastık sembolü, vb. Görsel efekt, sarmanın oluşmasıdır.
hukukçu

@ JonathanLeech-Pepin Yeni satırları orada tutmak istiyorum. Aslında, yeni satırı bir cümle ucuna zorlamak istiyorum, ancak bu ayrı bir kanca ile yapılabilir.
Sean Allred

1
@lawlist görsel efekt yeni satırların her yere gidecek olması değil mi? Tüm paragraflar tek bir paragrafa daraltılmayacak mı?
Malabarba

1
Bu talebe sempati duyuyorum, ancak OP tarafından açıklanan küçük modun doğru çözüm olmadığını düşünün. Temel sorun, diff kod için tasarlanmış metin için iyi çalışmıyor olmasıdır. Emacs'ta bu soruna geçici bir çözüm bulmak, çeşitli nedenlerle olası ancak temiz bir çözüm değildir. Farkı metinle iyi çalışacak şekilde geliştirmek çok daha iyi olur.
tmalsburg

Yanıtlar:


3

Tom'un dediği gibi, yeni satırlara bir display özelliği koymak biraz işe yarayacaktır.

Sorun hangi çizgilerin sarılı olduğunu bulmaktır.

İşte başlamanıza bir örnek:

(let ((eol-regexp "[[:graph:]] ?\\(\n\\)[^\t\n ]"))
  (font-lock-add-keywords nil
   `((,eol-regexp 1 '(face default display " ")))))

(visual-line-mode 1)

Bu, eğer grafik karakterlerden önce geliyorsa ve bir sonraki satır girintili veya boş değilse satırsonlarını "kaldıracaktır". Size uygun bir şey bulmak için denemeler yapmanız gerekecek.

Bazı açıklamalar:

  1. font-lock-add-keywordsyazı tipi kilitlemesine bir kurallar listesi ekler (bu nedenle yazı tipi kilidinin etkinleştirilmesi gerekir. İlk argüman bir mod olabilir (örneğin text-mode); bizim durumumuzda nil, yani kuralı yalnızca geçerli arabellek için ekleyin.
  2. "Kuralımız" dır (,eol-regexp 1 '(face default display " ")). İlk unsur, daha önce oluşturduğumuz düzenli ifadedir; ikincisi ilgilendiğimiz alt ifade; üçüncüsü, uygulamak istediğimiz "yüz" dür.
  3. Yeni satırlar için bir yüz kullanmak bizim için yararlı olmasa da, metin özellikleri de ekleyebiliriz. Bu yüzden varsayılan yüzü kullanıyoruz ve bir display özelliği cadı, alt dizeyi 1 (yani satırsonu) bir boşlukla değiştiriyor.
  4. Kendinizi ayağa vurursanız, arabelleği silin veya anahtar kelimeyi kaldırın font-lock-remove-keywords.
  5. Ayrıca eklemek displayisteyebilirsiniz font-lock-extra-managed-props(Bunu denemedim).
  6. Zor kısmı normal ifadeyi doğru elde etmektir. "\ (\ n \) [^ \ n]" hemen ardından başka bir satır gelmeyen yeni satırlarla eşleşir. ". \ {30, \} \ (\ n \)" yalnızca en az 30 karakterden önce gelen yeni satırlarla eşleşir.

Yukarıdakilerin bir uygulamasını github.com/andersjohansson/tex-fold-linebreaks
zakkak

0

Sorunu doğru anlarsam, arabellekteki tüm yeni satırları olduğu gibi korumak istersiniz; ancak bazılarını boşluk olarak görüntülemek istersiniz. Sonra, sözcük kaydırma istiyorsunuz.

Kelime kaydırma için kullanabileceğinizi düşünüyorum visual-line-mode.

Yeni satırlarla uğraşmak için, farklı bir şekilde görüntülemek istediğiniz satırlara bir değer olarak (tek bir boşluktan oluşan bir dize) bir displayözellik koyabilirsiniz " ".

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.