branch: elpa/lua-mode commit b11a1364178f41f09cad5b7926d0ecc1b9d0de8a Author: juergen <juergen> Commit: juergen <juergen>
implemented lua-forward-sexp using lua-find-matching-token-word --- lua-mode.el | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/lua-mode.el b/lua-mode.el index dff2616..db60e62 100755 --- a/lua-mode.el +++ b/lua-mode.el @@ -239,6 +239,10 @@ traceback location." (defvar lua-mode-abbrev-table nil "Abbreviation table used in lua-mode buffers.") +(defvar lua-sexp-alist '(("then" . "end") + ("function" . "end") + ("do" . "end"))) + (define-abbrev-table 'lua-mode-abbrev-table '( ("end" "end" lua-indent-line 0) @@ -336,8 +340,8 @@ The following keys are bound: (unless (assq 'lua-mode hs-special-modes-alist) (add-to-list 'hs-special-modes-alist `(lua-mode - ,(regexp-opt '("do" "function" "then") 'words) ;start - ,(regexp-opt '("end") 'words) ;end + ,(regexp-opt (mapcar 'car lua-sexp-alist) 'words);start + ,(regexp-opt (mapcar 'cdr lua-sexp-alist) 'words) ;end nil lua-forward-sexp))) (run-hooks 'lua-mode-hook))) @@ -1238,9 +1242,27 @@ left out." ;;{{{ lua-forward-sexp (defun lua-forward-sexp (&optional count) - "Find begin and end of Lua block." - (let ((case-fold-search t)) - (re-search-forward "\\<end\\>" nil t))) + "Forward to block end" + (interactive "p") + (save-match-data + (let* ((count (or count 1)) + (stackheight 0) + (block-start (mapcar 'car lua-sexp-alist)) + (block-end (mapcar 'cdr lua-sexp-alist)) + (block-regex (regexp-opt (append block-start block-end) 'words)) + current-exp + ) + (while (> count 0) + ;; skip whitespace + (skip-chars-forward " \t\n") + (if (looking-at (regexp-opt block-start 'words)) + (let ((keyword (match-string 1))) + (lua-find-matching-token-word keyword nil)) + ;; If the current keyword is not a "begin" keyword, then just + ;; perform the normal forward-sexp. + (forward-sexp 1)) + (setq count (1- count)))))) + ;;}}} ;;{{{ menu bar