2017-05-04 57 views
3

我有一些包含C++,C,Java和C#源代碼文件的目錄路徑和文件名(以及行號)的日誌文件。我編寫了一個正則表達式來搜索這些文件名和行號,並打開源代碼文件並將插入點定位到指定的行號(類似於與編譯命令一起使用時的下一個錯誤函數)。如何使用emacs/elisp來突出顯示部分字體鎖定源代碼

給定多次出現在日誌文件中的文件名我想添加突出顯示(並有選擇地刪除突出顯示)到源代碼文件顯示窗口/緩衝區。

如果沒有字體鎖定,我可以使用add-text-properties,remove-text-properties和add-face-text-property(其中是remove-face-text-property?關鍵字顏色編碼)。如果字體鎖定打開,這些函數不起作用!

如果打開字體鎖,我該如何做到這一點?我發現增量搜索功能可以實現這一功能,因此可以添加和刪除突出顯示,而不用搞亂字體鎖編碼。

感謝 齊格弗裏德

回答

0

使用覆蓋而不是文本的屬性。例如。突出與臉部bold BEG和END之間的文本,這樣做:

(let ((ol (make-overlay BEG END))) 
    (overlay-put ol 'face 'bold)) 
0

使用text屬性face由字體鎖突出否決任何亮 - 字型鎖要贏。在很多情況下,您仍然可以突出顯示文本,但遲早會在字體鎖定對緩衝區進行重新引導時突出顯示。

這並沒有適用於強調指出,使用覆蓋 - 字型鎖對覆蓋沒有影響。所以一個答案是隻使用覆蓋。但是,如果這對您的用例不起作用(使用疊加層有一些缺點),仍然有希望。

爲了防止字體鎖與其他高亮的干擾,典型的Emacs方法是愚弄字體鎖,認爲它是字體鎖高亮,即使它不涉及font-lock-keywords

但是,這樣做的效果是,當關閉font-lock-mode時會關閉此類突出顯示。這是好事還是壞事取決於你的用例。

在香草Emacs你沒有選擇這個。突出顯示無法被font-lock識別,否則它將被忽略,或者被識別爲「自己的一個」,在這種情況下,當關閉字體鎖定高亮顯示時關閉突出顯示。

如果當font-lock-mode關閉不需要你特別突出,那麼你可以只使用文本屬性font-lock-face,而不是財產face

如果您使用的庫highlight.el來實現你的高亮那麼你可以做,只是留下選項hlt-face-propfont-lock-face它的默認值。 (值font-lock-face表示突出顯示由字體鎖控制,值face表示font-lock不識別突出顯示。)

對於選項值爲face的情況,如果您還使用庫font-lock+.el,則不受字體鎖定的干擾 - 突出顯示與字體鎖定無關。 圖書館font-lock+.elhighlight.el自動加載,如果它在您的load-path。它可以防止字體鎖定移除使用此處定義的命令應用的突出顯示的面部屬性。

查看Highlight Library瞭解更多信息。

相關問題