add functions from http://draketo.de/light/english/emacs/babcore#sec-3-13