(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))
)