开发者

Modify Alt+f in Emacs for tex-mode

开发者 https://www.devze.com 2023-04-01 18:28 出处:网络
Alt+f in emacs when writing in tex mode seems to not include the . as part of the word. So 开发者_运维百科how do I modify the alt+f behavior to remain the same exact when going forward if there is pun

Alt+f in emacs when writing in tex mode seems to not include the . as part of the word. So 开发者_运维百科how do I modify the alt+f behavior to remain the same exact when going forward if there is punctiation to include that as part of the word.

I have a separate file that loads for when writing in tex so I will just throw it in there so it doesn't affect normal emacs behavior.

Thanks for any help.

Thought of an addition to this but same related problem is when using Alt+d and deleting. Getting it to delete not only the word but also the punctation following eg.. (,.! etc..).


The following code should work for you:

(defun unpunctuate-syntax (str)
  "Make the characters of the given string word characters."
  (let ((st (copy-syntax-table (syntax-table))))
    (dotimes (n (length str))
      (modify-syntax-entry (elt str n) "w" st))
    (set-syntax-table st)))

(defun dots-are-not-punctuation ()
  (unpunctuate-syntax "."))

(add-hook 'TeX-mode-hook 'dots-are-not-punctuation)

The way M-f (the forward-word function) works is that it skips all characters in the buffer that have type "w" (ie word) in the current syntax table.

This code makes a modified syntax table and gives it to the buffer and the add-hook bit at the bottom sets it to run when you open a file in TeX-mode. (This method avoids you having to do the separate file thing you described).

You might notice that I make a copy of the syntax table rather than editing the one belonging to the TeX major mode. This is because I always get things wrong when playing with syntax tables and you can mess things up royally... This method means you just have to close the buffer and start again!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号