ハイフネーション解除

必要に迫られて数分でハックしたもの。思いのほか便利だったのでここにメモとして残しておく。

(defun interactive-dehyphenation ()
  (interactive)
  (while (and (looking-at ".")
              (re-search-forward "\\([^\n]\\)\n" nil t))
    (if (string= (match-string 1) "-")
        (let* ((word-break (1- (point)))
               (prev-word (buffer-substring (progn (backward-word 1)
                                                   (point))
                                            word-break))
               (next-word (buffer-substring (1+ word-break)
                                            (progn (forward-line)
                                                   (forward-word 1)
                                                   (point)))))
          (goto-char word-break)
          (if (y-or-n-p (concat "Concat: \"" prev-word " " next-word "\"? "))
              (delete-backward-char 1))
          (delete-char 1))
      (when (looking-at ".")
        (backward-delete-char 1)
        (insert " "))))
  (message "done."))