MicroEmacs / Macros-Imenu
Motivation
Providing an Emacs like imenu command for MicroEmacs.
imenu.emf is an macro simliar to the emacs imenu. You must save the file imenu.emf to your microemacs/user directory and add the lines:
define-macro-file imenu imenu define-macro-file imenu imenu-refresh
to your user.emf-file in order to invoke imenu. If you want to redefine the indexing schema you must invoke imenu-refresh.

; imenu.emf
define-macro imenu
; i use a high number trying not to disturb the original .osd.next variable
; hopefully that your session will not be to long
set-variable #l0 10000 ; dangerous is somebody is building here an other osd
set-variable #l1 1 ; osd incrementor for item-additions
!if &or ¬ &exists :index-string ¬ @# ; then ask for a new one
set-variable :index-string @ml "index what"
!endif
; at first destroy possible old items
set-variable #l5 40 ; let's say there is a max of 40 items
!while &great #l5 1
-1 osd #l0
set-variable #l5 &dec #l5 1
!done
; constant osd
osd #l0 0 "b"
set-alpha-mark "p"
beginning-of-buffer
!force search-forward :index-string
!while $status
beginning-of-line
set-mark
2 forward-word
exchange-point-and-mark
copy-region
set-variable #l2 @y
-1 yank
end-of-line
osd #l0 &pinc #l1 1 "" &cat &cat &cat &cat "|" #l2 " |" $window-line "|" f imenu-osd-goto-line
!force search-forward :index-string
!done
goto-alpha-mark "p"
#l0 osd 0 "ba" &add $cursor-x 1 &sub $cursor-y 1
!emacro
0 define-macro imenu-osd-goto-line
; fetch the line number and goto
goto-line &lget $result 2
!emacro