1. (defun delete-blank-lines-or-char ()
  2.   (interactive)
  3.   (cond
  4.    ((region-active-p) (delete-region (region-beginning) (region-end)))
  5.    ((looking-at "\n\n") (delete-blank-lines))
  6.    ((looking-at "\\s-*\n[\\s-]*") (just-one-space) (delete-char 1) (just-one-space))
  7.    ((looking-at "  ") (just-one-space))
  8.    (t (delete-char 1)))
  9.   )
  10.  
  11. (global-set-key [delete] 'delete-blank-lines-or-char)
  12.  
  13. (defadvice delete-blank-lines-or-char (around smart-delete-parenthesis activate)
  14.   (cond
  15.    ((looking-at ")")
  16.     (save-excursion
  17.       (forward-char 1)
  18.       (backward-list 1)
  19.       (delete-char 1))
  20.     (delete-char 1))
  21.    ((looking-at "(")
  22.     (save-excursion
  23.       (forward-list 1)
  24.       (delete-char -1))
  25.     (delete-char 1))
  26.    (t ad-do-it))
  27.   )