A puzzle

Hrvoje Niksic <[email protected]> Thu, 18 Apr 2002 23:05:49 +0200
Newsgroups gmane.emacs.xemacs.mule
Message-ID <[email protected]>
Guess what this command does.

(defun unfuckify ()
  (interactive)
  (let ((count 0))
    (catch 'out
      (while (search-forward "~" nil t)
	(message "[chszd] ")
	(let ((event (next-command-event))
	      replacement)
	  (when (event-matches-key-specifier-p event (quit-char))
	    (keyboard-quit))
	  (when (equal (event-key event) 'return)
	    (throw 'out nil))
	  (setq replacement
		(case (event-to-character event)
		  (?c ?č) (?C ?Č)
		  (?h ?ć) (?H ?Ć)
		  (?s ?š) (?S ?Š)
		  (?z ?ž) (?Z ?Ž)
		  (?d ?đ) (?D ?Đ)
		  (?\  nil)
		  (otherwise
		   (error "Wrong char: %s" event))))
	  (when replacement
	    (backward-char 1)
	    (delete-char 1)
	    (insert-char replacement)
	    (undo-boundary)
	    (incf count)))))
    (message "%d replacements performed" count)))