(defprotocol IVim
(init [vim])
(open-buffer [vim file-name])
(get-current-buffer [vim])
(set-current-buffer [vim buffer-ptr])
(get-file-name [vim buffer-ptr])
(get-line [vim buffer-ptr line-num])
(get-line-count [vim buffer-ptr])
(set-on-buffer-update [vim callback])
(set-on-auto-command [vim callback])
(get-command-text [vim])
(get-command-position [vim])
(get-command-completion [vim])
(get-cursor-column [vim])
(get-cursor-line [vim])
(set-cursor-position [vim line-num col-num])
(input [vim input])
(input-unicode [vim input])
(execute [vim cmd])
(set-on-quit [vim callback])
(set-on-unhandled-escape [vim callback])
(set-tab-size [vim size])
(get-tab-size [vim])
(get-visual-type [vim])
(visual-active? [vim])
(select-active? [vim])
(get-visual-range [vim])
(get-search-highlights [vim start-line end-line]
"Warning: This function could behave badly if you don't have hlsearch enabled:
(execute vim \"set hlsearch\")")
(get-search-pattern [vim]
"Warning: This function could behave badly if you don't have hlsearch enabled:
(execute vim \"set hlsearch\")")
(set-on-stop-search-highlight [vim callback])
(get-window-width [vim])
(get-window-height [vim])
(get-window-top-line [vim])
(get-window-left-column [vim])
(set-window-width [vim width])
(set-window-height [vim height])
(set-window-top-left [vim top left])
(get-mode [vim])
(set-on-yank [vim callback])
(set-on-message [vim callback]))