Not sure how you will implement it, but I think you'll have to use grread
(defun rh:get_keypress (keys / key asc c flg)
(while (null flg)
(setq key (grread))
(cond ( (= 13 (cadr key)) (setq flg T))
( (= (car key) 2) (setq asc (cadr key) c (chr asc) flg (member asc (vl-string->list keys))))
)
)
c
)
pass in keys, which is a string, so if you want to capture the + key (rh:get_keypress "+")
they only problem is that it will wait for a key press.