So many good answers here for this age-old issue which was one of the first customizations I ever made back in the day (1988?). I approached the problem by defining a digitizer menu button that swapped out the snapang variable as such:
(defun sangb(/ sang wowa)(setq sang (getvar "snapang"))(if (= sang (/ pi 4))(setvar "snapang" (/ pi 1))(setvar "snapang" (/ pi 4)))(princ))(sangb)