(defun delete-blank-lines-or-char () (interactive) (cond ((region-active-p) (delete-region (region-beginning) (region-end))) ((looking-at "\n\n") (delete-blank-lines)) ((looking-at "\\s-*\n[\\s-]*") (just-one-space) (delete-char 1) (just-one-space)) ((looking-at " ") (just-one-space)) (t (delete-char 1))) ) (global-set-key [delete] 'delete-blank-lines-or-char) (defadvice delete-blank-lines-or-char (around smart-delete-parenthesis activate) (cond ((looking-at ")") (save-excursion (forward-char 1) (backward-list 1) (delete-char 1)) (delete-char 1)) ((looking-at "(") (save-excursion (forward-list 1) (delete-char -1)) (delete-char 1)) (t ad-do-it)) )