在過去的幾年中,我一直在慢慢地增長Emacs配置,增加點點滴滴,添加新模式等等。大約一年前,一個問題開始經常發生:有些代碼將修改位設置在我的緩衝區。它實際上並沒有改變任何東西,它只是設置這個標誌。這是有點煩人,因爲每次我運行compile
或save-some-buffers
我必須手動放棄這些緩衝區中的更改重置修改的位。我怎樣才能找到有問題的代碼?誰在我的Emacs文件上設置修改標誌?
回答
如果真的是明確地將緩衝區設置爲修改而不更改任何內容,那麼我想它應該調用set-buffer-modified-p
。
我本來要建議debug-on-entry
爲set-buffer-modified-p
,但粗略的測試表明,在一般的極大的破壞,所以這裏的一種方法可以表明其緩衝你有興趣:
(defvar my-debug-set-buffer-modified-p-buffers nil)
(defadvice set-buffer-modified-p
(before my-debug-set-buffer-modified-p-advice)
(when (memq (current-buffer) my-debug-set-buffer-modified-p-buffers)
(debug)))
(ad-activate 'set-buffer-modified-p)
(defun my-debug-set-buffer-modified-p (buffer)
(interactive (list (current-buffer)))
(if (memq buffer my-debug-set-buffer-modified-p-buffers)
(progn (setq my-debug-set-buffer-modified-p-buffers
(delq buffer my-debug-set-buffer-modified-p-buffers))
(message "Disabled for %s" buffer))
(add-to-list 'my-debug-set-buffer-modified-p-buffers buffer)
(message "Enabled for %s" buffer)))
相反菲爾斯,我希望修改後的p標誌不是由set-buffer-modified-p
設置的,而是由緩衝區的實際更改設置的。這是可能的原因是Emacs將文本屬性視爲屬於緩衝區的內容,因此更改它們會設置修改的p標誌,即使在很多情況下,結果也是不可見的,即使它可見也是如此一般不會被用戶認爲是修改(用戶通常理解爲「保存緩衝區時會影響文件」)。
因此,大部分設置文本屬性的代碼都需要小心重置修改後的p標誌。做到這一點的最佳方式通常是將設置屬性的代碼包裝在with-silent-modification
中。
單向嘗試追蹤罪魁禍首是試圖撤消修改(例如使用C-/
),但當然,如果修改不可見,撤銷它也將不可見。因此,您可能需要查看C-h v buffer-undo-list RET
這是用於跟蹤修改的內部數據。幸運的是,不僅是修改過的p集,還有撤銷列表,並且該列表將告訴您發生了什麼變化。例如,該列表可能看起來像(nil (nil face nil 12345708 . 12345713))
,這意味着更改是將face
屬性設置爲位置12345708和12345713之間的新值,並且該屬性的舊值爲nil
(即上面的第3個nil
)。有時用M-: (goto-char 12345708) RET
查看受影響的職位就足以找出責任人。正在尋找M-: (get-text-property 12345708 'face) RET
的時候,它給了你設定的新的價值,更有用。
- 1. 在文件上設置SUID標誌?
- 2. EMACS緩衝區等於文件時如何重置緩衝區修改標誌
- 3. 設置在一類改性標誌
- 4. 修改UserAccountControl標誌 - 切換標誌
- 5. 如何根據文件類型設置Emacs標籤設置?
- 6. 上下文需要FLAG_ACTIVITY_NEW_TASK標誌,但我已經設置了標誌
- 7. Emacs:在更改日誌模式下設置填充列
- 8. 爲什麼我不能在emacs上設置標記?
- 9. 在Cygwin上設置emacs
- 10. 防止在git上修改被修改的文件被修改
- 11. 使用OTA修改設置文件
- 12. 在makefile中設置標誌的條件
- 13. 我如何在Android上設置日誌文件最大大小
- 14. 設置的emacs我無法更改字體爲我的emacs配置窗口
- 15. NSCalendarUnit - 修改單位標誌
- 16. ELF修改部分標誌
- 17. Windows中的日誌文件修改
- 18. 如何在我的mac(shell或eclipse)上設置和修改CLASSPATH?
- 19. 找出用戶名(誰)在C#中的修改文件
- 20. Emacs:設置doc-view-continuous不適用於修改的鍵綁定
- 21. 我的.emacs文件在Mac OS X上的位置
- 22. 誰更改文件?
- 23. 修改我的.htaccess文件
- 24. 如何設置文件上次修改日期?
- 25. 在運行時修改JVM標誌
- 26. Win7上我的emacs配置文件在哪裏?
- 27. 修改Android設備上的zip文件內的xml文件
- 28. 我如何在JSF/Richfaces上設置HttpOnly標誌
- 29. 設置文件的「上次修改日期」|觸摸文件(Noob-request)
- 30. 在emacs組織模式之外爲.emacs文件設置
我完全同意 - 如果我的回答實際上顯示罪魁禍首,我會非常驚訝。不過,這似乎值得把它作爲一個可能的原因來消除;我想不出一個明顯的方式來調試替代:) – phils
@phils你會走出很遠的一個肢體,不同意維護者! :) –