Sözdizimi, kod olarak daraltılmış python dizesi değişmezlerini vurgulayın

Daha fazla python kodu içeren bazı uzun dize değişmezleri olan bazı python kodlarım var. Bu dizgiler çoğu zaman varsayılan olarak olduğu gibi, tekdüze renkli olmalıdır.

Bununla birlikte, arabamı bu dizelerden herhangi birisine daraltmak istiyorum ve sonra sözdizimi sözdizimine sahiplerdi. Kodları, kod içinde dizeleri değil (örneğin, "" "gibi) kod> orjinal bufferda yok)

Bunu yapmak için herhangi bir yolu var, bu pek çok elisp içermiyor mu?

NOT: Gereksiz olarak daraltmaya gerek duymuyorum, sadece sözdizimini vurgulamak daha iyi görünüyordu, tam tamponda olduğu gibi kafa karıştırıcı olurdu ...

5
Sadece dizgenin içeriğine daraltmak değil, tırnak dahil değil, sorunu çözmek?
katma yazar Louis Salin, kaynak
Jmlorenzi, darp ettikten sonra, istediğiniz herhangi bir vurguyu desteklemek için ana modu değiştirebilirsiniz. Ardından genişledikten sonra tekrar değiştir. @lindydancer string-edit paketi hakkında konuşuyor ancak istediğiniz gibi vurgulamayı desteklemiyor.
katma yazar Louis Salin, kaynak
Bir süre önce birinin HTML modunda benzer bir şey yaptığını gördüm, ama şimdi onu nerede gördüğümü hatırlıyorum. Her neyse, temel fikir, gömülü kodu yeni bir arabelleğe kopyalamak ve uygun ana modunu kullanarak göstermekti. Bir kez bittiğinde, bir sihirli anahtar dizisi (C-c C-c gibi) sonucu orijinal olarak bulunduğu yere geri kopyalayacaktır. Ne yazık ki, biraz elisp yazmayı gerektiriyor, korkarım.
katma yazar Daniel McPherson, kaynak
@JordonBiondo Benim dizimde daraltma (tırnak işareti olmadan) vurgulamayı değiştirmez ... Ayrıca font-lock-fontify-buffer komutunu çalıştırmaz
katma yazar Faito Dayo, kaynak
@Lindydancer Teşekkürler! Böyle bir şey yapılabileceğini düşünmüştüm ama elisp yeteneğim çok düşük ... Umarım bunu denemek için biraz zaman alırım ...
katma yazar Faito Dayo, kaynak

1 cevap

Bu, polymode ile yapılabilir.

(require 'polymode)
(defcustom pm-host/python
  (pm-bchunkmode "python"
                 :mode 'python-mode
                 :font-lock-narrow nil)
  "Python host chunkmode"
  :group 'hostmodes
  :type 'object)

(defcustom pm-inner/python
  (pm-hbtchunkmode "python"
                   :mode 'python-mode
                   :head-reg  "\"\"\""
                   :tail-reg  "\"\"\"")
  "Python typical chunk."
  :group 'innermodes
  :type 'object)

(defcustom pm-poly/python
  (pm-polymode-one "python"
                   :hostmode 'pm-host/python
                   :innermode 'pm-inner/python)
  "Python typical polymode."
  :group 'polymodes
  :type 'object)

(define-polymode poly-python-mode pm-poly/python)
  1. C-x b test.py RET
  2. M-x poly-python-mode RET

Bu modda, üç tırnaklı dizgiler python kodu olarak vurgulanır. (Normalde iyi bir fikir değil, ama bunu değiştirebilirsin).

enter image description here

Şu anda, polymode font-kilitlemeyi güncelleyen sorunlara sahip görünüyor. Ancak, bu pratikte çalışmalıdır.

4
katma
@PythonNut Bu benim için çalışmıyor ... Belki de yazı tipi kilitlemeyle ilgili sorunlardan bahsediyorsunuz? Bunlar hangi konular? Emacs 24.3.1 kullanıyorum
katma yazar Faito Dayo, kaynak
Şimdi görüyorum ... Gerçekten de metni değiştirmek güncellemeyi zorluyor ... ama bu üzücü bir şey değil. Neyse, cevap için çok teşekkürler!
katma yazar Faito Dayo, kaynak
@elethan, sonunda not ettiğim gibi, geçiş yaparken font-kilitleme ile ilgili bazı sorunlar var gibi görünüyor. Ben buna bakıyorum ve çözülüp çözülmeyeceğini görmek için bir sorun ortaya çıkaracaktır.
katma yazar PythonNut, kaynak
@elethan Ah, büyük modlar değişmiyor. ;) Polmode'ye geri dönmek için python-mode kullanmanız gerekecektir.
katma yazar PythonNut, kaynak
@jmlorenzi tam olarak sorun nedir? Sorun başlangıçta açılmayacaksa, tırnak içindeki python kodunda bir değişiklik yapmayı deneyin. Bu vurgulamak için zorlamalıdır. Bahsettiğim hata bu.
katma yazar PythonNut, kaynak
Umarım bu OP için çalışır, ama benim için harika çalışıyor! Bunu değiştirebileceğini söylüyorsun, ama bunu nasıl yapıyorsun? Onu açabilirim ama nasıl değiştirileceğini anlayamıyorum ...
katma yazar Lord Loh., kaynak
Ama dediğimde, onu kapatamam, yani komutu anlayamıyorum. Sözdizimi vurgulamanın gitmediğini anlıyorum, ancak poly-python-mode 'u ikinci kez çağırdığımda, mod satırımda hala PM görüyorum. hala aktif
katma yazar Lord Loh., kaynak
Tamam, python-mode 'a geri dönmek bir çekicilik gibi çalışır! Python modundan çıkmış olduğumun farkında değildim ... (BTW, site bana izin verdikten sonra ödül vereceğim. Cevabınız için teşekkürler ... benim sorum olmamasına rağmen, haha!)
katma yazar Lord Loh., kaynak