[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/evil-matchit b24a7232a2 218/244: support octave, requires
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/evil-matchit b24a7232a2 218/244: support octave, requires emacs25+, clean up tests |
Date: |
Thu, 6 Jan 2022 02:59:03 -0500 (EST) |
branch: elpa/evil-matchit
commit b24a7232a2de114cb09774111c2ff8462451894f
Author: Chen Bin <chenbin.sh@gmail.com>
Commit: Chen Bin <chenbin.sh@gmail.com>
support octave, requires emacs25+, clean up tests
---
README.org | 3 +-
evil-matchit-octave.el | 57 ++++++++++
evil-matchit.el | 9 +-
pkg.sh | 2 +-
tests/evil-matchit-tests.el | 268 +++++++++++++++++++-------------------------
tests/hello-git.diff | 11 ++
tests/hello-gnu.diff | 8 ++
tests/hello.c | 20 ++++
tests/hello.el | 5 +
tests/hello.f | 21 ++++
tests/hello.html | 8 ++
tests/hello.js | 3 +
tests/hello.lua | 14 +++
tests/hello.m | 7 ++
tests/hello.md | 9 ++
tests/hello.v | 14 +++
16 files changed, 300 insertions(+), 159 deletions(-)
diff --git a/README.org b/README.org
index 6d57cd2885..6f2a3e996a 100644
--- a/README.org
+++ b/README.org
@@ -19,6 +19,7 @@ Many modern languages are supported:
- Markdown
- Perl
- Latex
+- MATLAB/Octave
- CMake
- Org-mode (match tag of org-mode and tags of other languages embedded in org
file)
- Ruby
@@ -37,7 +38,7 @@ Many modern languages are supported:
This package uses Evil as its vi layer!
-Tested on Emacs 24.4, 24.5, 25.1, 26, 27, 28
+Tested on Emacs 25.1, 26, 27, 28
* Why use evil-matchit
- No learning curve. Press "%" to jump. That's all!
diff --git a/evil-matchit-octave.el b/evil-matchit-octave.el
new file mode 100644
index 0000000000..1dd7d6d046
--- /dev/null
+++ b/evil-matchit-octave.el
@@ -0,0 +1,57 @@
+;;; evil-matchit-octave.el --- octave plugin of evil-matchit
+
+;; Copyright (C) 2020 Chen Bin <chenbin DOT sh AT gmail DOT com>
+
+;; Author: Chen Bin <chenbin DOT sh AT gmail DOT com>
+
+;; This file is not part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of evil-matchit
+;;
+;; evil-matchit is free software: you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as published
+;; by the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; evil-matchit is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;;
+;;; Commentary:
+;;
+;;; Code:
+
+;; OPTIONAL, you don't need SDK to write a plugin for evil-matchit
+;; but SDK do make you write less code, isn't it?
+;; All you need to do is just define the match-tags for SDK algorithm to
lookup.
+(require 'evil-matchit-sdk)
+
+(defvar evilmi-octave-extract-keyword-howtos
+ '(("^[ \t]*\\([a-zA-Z]+\\)[ \t]*" 1)))
+
+;; Octave (http://www.octave.org) syntax
+(defvar evilmi-octave-match-tags
+ '((("if" "for" "while" "switch" "function") ("elseif" "else" "case"
"otherwise") ("end"))))
+
+;;;###autoload
+(defun evilmi-octave-get-tag ()
+ "Get current tag info."
+ (evilmi-sdk-get-tag evilmi-octave-match-tags
+ evilmi-octave-extract-keyword-howtos))
+
+;;;###autoload
+(defun evilmi-octave-jump (info num)
+ "Use INFO returned by `evilmi-octave-get-tag' and NUM to jump to matched
tag."
+ (evilmi-sdk-jump info
+ num
+ evilmi-octave-match-tags
+ evilmi-octave-extract-keyword-howtos))
+
+(provide 'evil-matchit-octave)
+;;; evil-matchit-octave.el ends here
diff --git a/evil-matchit.el b/evil-matchit.el
index 2035d7d27a..8962d95ce2 100644
--- a/evil-matchit.el
+++ b/evil-matchit.el
@@ -4,9 +4,9 @@
;; Author: Chen Bin <chenbin DOT sh AT gmail DOT com>
;; URL: http://github.com/redguardtoo/evil-matchit
-;; Version: 2.3.9
+;; Version: 2.3.10
;; Keywords: matchit vim evil
-;; Package-Requires: ((evil "1.2.0") (emacs "24.4"))
+;; Package-Requires: ((evil "1.2.0") (emacs "25.1"))
;;
;; This file is not part of GNU Emacs.
@@ -172,6 +172,9 @@ Some people prefer using \"m\" instead.")
;; Ocaml
(evilmi-load-plugin-rules '(tuareg-mode) '(simple ocaml))
+ ;; Octave
+ (evilmi-load-plugin-rules '(octave-mode) '(simple octave))
+
;; Python
(evilmi-load-plugin-rules '(python-mode) '(simple python))
@@ -310,7 +313,7 @@ If IS-INNER is t, the region is inner text object."
(defun evilmi-version()
"Print version."
(interactive)
- (message "2.3.9"))
+ (message "2.3.10"))
(defvar evil-matchit-mode-map (make-sparse-keymap)
"Keymap used by the minor mode.")
diff --git a/pkg.sh b/pkg.sh
index 553e29fbfe..ee1de47900 100755
--- a/pkg.sh
+++ b/pkg.sh
@@ -1,6 +1,6 @@
#!/bin/bash
name=evil-matchit
-version=2.3.9
+version=2.3.10
pkg=$name-$version
mkdir $pkg
cp README.org $pkg
diff --git a/tests/evil-matchit-tests.el b/tests/evil-matchit-tests.el
index e91114d091..e4326bb9de 100644
--- a/tests/evil-matchit-tests.el
+++ b/tests/evil-matchit-tests.el
@@ -21,6 +21,7 @@
;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
;;; Commentary:
+;;; Code:
(require 'ert)
(require 'evil-matchit)
@@ -28,6 +29,12 @@
(setq evilmi-may-jump-by-percentage nil)
(setq evilmi-debug nil) ; debug
+(defun evilmi-test-read-file (file)
+ "Read FILE's content into current buffer."
+ (let* ((files (directory-files-recursively default-directory file)))
+ (when files
+ (insert-file-contents (car files)))))
+
(ert-deftest evilmi-test-generic ()
(let* ((str "123456")
(jump-offset (+ 1 (length str))))
@@ -70,8 +77,11 @@
(ert-deftest evilmi-test-javascript ()
(with-temp-buffer
- (insert "function hello() {\n console.log('hello world');\n}")
+ (evilmi-test-read-file "hello.js")
(js-mode)
+
+ (font-lock-ensure)
+
;; for javascript, jump from anywhere in function beginning
(goto-char (+ 3 (point-min)))
(evilmi-jump-items)
@@ -86,14 +96,23 @@
(evilmi-jump-items)
(should (eq (following-char) ?{))
- ;; jump between ends of string can't be tested.
- ;; because font face is not useable in batch mode
+ (search-forward "'")
+ (backward-char 1)
+ (let* ((beg (point))
+ end)
+ (should (string= "'" (string (following-char))))
+ (evilmi-jump-items)
+ (setq end (point))
+ (should (> end beg))
+ (should (string= (buffer-substring-no-properties (1+ beg) end) "hello
world"))
+ (evilmi-jump-items)
+ (should (eq (point) beg)))
(should (eq major-mode 'js-mode))))
(ert-deftest evilmi-test-html ()
(with-temp-buffer
- (insert "<html lang=\"en\">\n<head>\n<link rel=\"icon\"
href=\"%PUBLIC_URL%/favicon.ico\" />\n</head>\n<body>\n<p>Hello
world!</p>\n</body>\n</html>")
+ (evilmi-test-read-file "hello.html")
(html-mode)
;; jump from start again
@@ -129,9 +148,7 @@
(ert-deftest evilmi-test-c ()
(with-temp-buffer
- (insert "#ifdef CONFIG_COMPAT\n#ifndef TEST1\nstruct mtip_s {\n int
v1;\n}\n#endif\n#endif\n"
- "static int fn1()\n{\nprintf(\"hello world\");\n}\nint a = 3;\n"
- "switch(c) {\ncase 'a':\nbreak;\ncase 'b':\nbreak;\n}\n")
+ (evilmi-test-read-file "hello.c")
(c-mode)
;; jump from start
@@ -179,20 +196,7 @@
(ert-deftest evilmi-test-lua ()
(with-temp-buffer
- (insert "if configTable:FindFirstChild(configName) then\n"
- " configs[configName] =
configTable:FindFirstChild(configName).Value\n"
- "else\n"
- " configs[configName] = defaultValue\n"
- "end\n"
- "\n"
- "local thread = coroutine.create(function()\n"
- " while true do\n"
- " wait()\n"
- " if state then\n"
- " display.Text = state.Name\n"
- " end\n"
- " end\n"
- "end)\n")
+ (evilmi-test-read-file "hello.lua")
(lua-mode)
;; jump from start
@@ -225,18 +229,7 @@
(ert-deftest evilmi-test-diff ()
(with-temp-buffer
- (insert "diff 1\n"
- "index abed2b7\n"
- "--- a/1.c\n"
- "+++ b/1.c\n"
- "line1\n"
- "line2\n"
- "diff 2"
- "index abed2b7\n"
- "--- a/2.c\n"
- "+++ b/2.c\n"
- "line3\n"
- "line4")
+ (evilmi-test-read-file "hello-git.diff")
(diff-mode)
;; test git diff
@@ -265,14 +258,7 @@
;; test GNU diff
(erase-buffer)
- (insert "--- a/1.c\n"
- "+++ b/1.c\n"
- "line1\n"
- "line2\n"
- "--- a/2.c\n"
- "+++ b/2.c\n"
- "line3\n"
- "line4")
+ (evilmi-test-read-file "hello-gnu.diff")
;; jump to diff end
(goto-char (point-min))
(evilmi-jump-items)
@@ -289,11 +275,7 @@
(ert-deftest evilmi-test-fortran ()
(with-temp-buffer
- (insert "PROGRAM cows\n"
- "IMPLICIT NONE\n"
- "INTEGER :: func_name\n"
- "PRINT *,func_name(2, 1.3)\n"
- "END PROGRAM\n")
+ (evilmi-test-read-file "hello.f")
(f90-mode)
(goto-char (point-min))
@@ -305,13 +287,8 @@
(should (string= "PROGRAM cows" (evilmi-sdk-curline)))
;; lower case conditional statement
- (erase-buffer)
- (insert "if (x < x1) then\n"
- " print 1\n"
- "else\n"
- " print 2\n"
- "end if\n")
- (goto-char (point-min))
+ (search-forward "if (x < x1)")
+ (goto-char (line-beginning-position))
(evilmi-jump-items)
(should (string= "else" (evilmi-sdk-curline)))
(evilmi-jump-items)
@@ -320,17 +297,8 @@
(should (string= "if (x < x1) then" (evilmi-sdk-curline)))
;; upper case conditional statement
- (erase-buffer)
- (insert "IF (x < 50) THEN\n"
- " Grade = 'F'\n"
- "ELSE IF (x < 60) THEN\n"
- " Grade = 'D'\n"
- "ELSE IF (x < 70) THEN\n"
- " Grade = 'C'\n"
- "ELSE\n"
- " Grade = 'A'\n"
- "END IF\n")
- (goto-char (point-min))
+ (search-forward "IF (x < 50)")
+ (goto-char (line-beginning-position))
(evilmi-jump-items)
(should (string= "ELSE IF (x < 60) THEN" (evilmi-sdk-curline)))
(evilmi-jump-items)
@@ -344,16 +312,7 @@
(ert-deftest evilmi-test-verilog ()
(with-temp-buffer
- (insert "`ifdef behavioral\n"
- " `include \"groupA_beh.v \";\n"
- " `include \"groupB_beh.v \";\n"
- " `include \"ctrl_beh.v \";\n"
- "`else\n"
- " `include \"groupA_synth.v \";\n"
- " `include \"groupB_ synth.v \";\n"
- " `include \"ctrl_ synth.v \";\n"
- "`endif\n"
- )
+ (evilmi-test-read-file "hello.v")
(verilog-mode)
(goto-char (point-min))
@@ -364,14 +323,9 @@
(evilmi-jump-items)
(should (string= "`ifdef behavioral" (evilmi-sdk-curline)))
- (erase-buffer)
- (insert "always @(WRITE or READ or STATUS) // test \n"
- " /* hello */"
- " begin\n"
- " out = 9;\n"
- " end\n"
- " // more comment\n")
(goto-char (point-min))
+ (search-forward "always")
+ (goto-char (line-beginning-position))
(evilmi-jump-items)
(should (string= "end" (thing-at-point 'symbol)))
@@ -379,14 +333,7 @@
(ert-deftest evilmi-test-markdown ()
(with-temp-buffer
- (insert "### test1\n"
- "```java\n"
- "Example 1\n"
- "```\n\n"
- "### test2\n"
- "```c\n"
- "Example 2\n"
- "```\n")
+ (evilmi-test-read-file "hello.md")
(markdown-mode)
(goto-char (point-min))
@@ -410,26 +357,21 @@
(ert-deftest evilmi-test-emacs-lisp ()
(with-temp-buffer
- (insert ";; test1\n"
- ";; {{\n"
- ";; java\n"
- ";; }}\n"
- "test\n")
+ (evilmi-test-read-file "hello.el")
(emacs-lisp-mode)
- (when (fboundp 'font-lock-ensure)
- (font-lock-ensure)
+ (font-lock-ensure)
- (goto-char (point-min))
- (forward-char 2)
- (evilmi-jump-items)
- ;; still at the same line if there is no bracket at point
- (should (string= ";; test1" (evilmi-sdk-curline)))
- ;; test matched brackets
- (search-forward "{")
- (evilmi-jump-items)
- (should (string= ";; }}" (evilmi-sdk-curline)))
- (evilmi-jump-items)
- (should (string= ";; {{" (evilmi-sdk-curline))))
+ (goto-char (point-min))
+ (forward-char 2)
+ (evilmi-jump-items)
+ ;; still at the same line if there is no bracket at point
+ (should (string= ";; test1" (evilmi-sdk-curline)))
+ ;; test matched brackets
+ (search-forward "{")
+ (evilmi-jump-items)
+ (should (string= ";; }}" (evilmi-sdk-curline)))
+ (evilmi-jump-items)
+ (should (string= ";; {{" (evilmi-sdk-curline)))
(should (eq major-mode 'emacs-lisp-mode))))
@@ -440,76 +382,94 @@
(defun prepare (&rest text)
(progn
- (erase-buffer)
- (apply 'insert text)
- (goto-char (point-min))
- (font-lock-ensure)))
+ (erase-buffer)
+ (apply 'insert text)
+ (goto-char (point-min))
+ (font-lock-ensure)))
(defun expect (text)
(progn
- (insert "|")
- (should (string= text (thing-at-point 'line)))
- (delete-backward-char 1)))
+ (insert "|")
+ (should (string= text (thing-at-point 'line)))
+ (delete-backward-char 1)))
- (when (fboundp 'font-lock-ensure)
- ;; if then
- ;; TODO: doesn't work if there's no whitespace before if
- (prepare " if foo then 1 else 2")
+ ;; if then
+ ;; TODO: doesn't work if there's no whitespace before if
+ (prepare " if foo then 1 else 2")
- (evilmi-jump-items)
- (expect " if foo |then 1 else 2")
+ (evilmi-jump-items)
+ (expect " if foo |then 1 else 2")
- (evilmi-jump-items)
- (expect " |if foo then 1 else 2")
+ (evilmi-jump-items)
+ (expect " |if foo then 1 else 2")
- ;; parentheses
- (prepare "let x = (1, 2) in 3")
+ ;; parentheses
+ (prepare "let x = (1, 2) in 3")
- (evilmi-jump-items)
- (expect "let x = (1, 2|) in 3" )
+ (evilmi-jump-items)
+ (expect "let x = (1, 2|) in 3" )
- (evilmi-jump-items)
- (expect "let x = |(1, 2) in 3" )
+ (evilmi-jump-items)
+ (expect "let x = |(1, 2) in 3" )
- ;; struct end
- (prepare "module X = struct type t = int end")
+ ;; struct end
+ (prepare "module X = struct type t = int end")
- (evilmi-jump-items)
- (expect "module X = struct type t = int |end" )
+ (evilmi-jump-items)
+ (expect "module X = struct type t = int |end" )
- (evilmi-jump-items)
- (expect "module X = |struct type t = int end" )
+ (evilmi-jump-items)
+ (expect "module X = |struct type t = int end" )
- ;; TODO: begin end doesn't seem to be working
- (prepare "begin 1 end ;;")
+ ;; TODO: begin end doesn't seem to be working
+ (prepare "begin 1 end ;;")
- (evilmi-jump-items)
- (expect "|begin 1 end ;;")
+ (evilmi-jump-items)
+ (expect "|begin 1 end ;;")
- ;; match with
- (prepare "let _ = match x with _ -> ()")
+ ;; match with
+ (prepare "let _ = match x with _ -> ()")
- (evilmi-jump-items)
- (expect "let _ = match x |with _ -> ()" )
+ (evilmi-jump-items)
+ (expect "let _ = match x |with _ -> ()" )
- (evilmi-jump-items)
- (expect "let _ = |match x with _ -> ()" )
+ (evilmi-jump-items)
+ (expect "let _ = |match x with _ -> ()" )
- ;; let in
- (prepare
- "let () =\n"
- " let x = foo in bar")
+ ;; let in
+ (prepare
+ "let () =\n"
+ " let x = foo in bar")
- (goto-char 10)
- (expect "| let x = foo in bar" )
+ (goto-char 10)
+ (expect "| let x = foo in bar" )
- (evilmi-jump-items)
- (expect " let x = foo |in bar" )
+ (evilmi-jump-items)
+ (expect " let x = foo |in bar" )
- (evilmi-jump-items)
- (expect " |let x = foo in bar" ))
+ (evilmi-jump-items)
+ (expect " |let x = foo in bar" )
(should (eq major-mode 'tuareg-mode))))
+(ert-deftest evilmi-test-octave ()
+ (with-temp-buffer
+ (evilmi-test-read-file "hello.m")
+ (octave-mode)
+ (font-lock-ensure)
+
+ (goto-char (point-min))
+ (evilmi-jump-items)
+ ;; still at the same line if there is no bracket at point
+ (should (string= "elseif a < 80" (evilmi-sdk-curline)))
+ (evilmi-jump-items)
+ (should (string= "else" (evilmi-sdk-curline)))
+ (evilmi-jump-items)
+ (should (string= "end" (evilmi-sdk-curline)))
+ (evilmi-jump-items)
+ (should (string= "if a < 30" (evilmi-sdk-curline)))
+
+ (should (eq major-mode 'octave-mode))))
+
(ert-run-tests-batch-and-exit)
;;; evil-matchit-tests.el ends here
diff --git a/tests/hello-git.diff b/tests/hello-git.diff
new file mode 100644
index 0000000000..c8c31b93de
--- /dev/null
+++ b/tests/hello-git.diff
@@ -0,0 +1,11 @@
+diff 1
+index abed2b7
+--- a/1.c
++++ b/1.c
+line1
+line2
+diff 2index abed2b7
+--- a/2.c
++++ b/2.c
+line3
+line4
\ No newline at end of file
diff --git a/tests/hello-gnu.diff b/tests/hello-gnu.diff
new file mode 100644
index 0000000000..cb8f53ce20
--- /dev/null
+++ b/tests/hello-gnu.diff
@@ -0,0 +1,8 @@
+--- a/1.c
++++ b/1.c
+line1
+line2
+--- a/2.c
++++ b/2.c
+line3
+line4
\ No newline at end of file
diff --git a/tests/hello.c b/tests/hello.c
new file mode 100644
index 0000000000..fa2172ee55
--- /dev/null
+++ b/tests/hello.c
@@ -0,0 +1,20 @@
+#ifdef CONFIG_COMPAT
+#ifndef TEST1
+struct mtip_s {
+ int v1;
+};
+#endif
+#endif
+
+static int fn1()
+{
+ printf("hello world");
+}
+
+int a = 3;
+switch(c) {
+case 'a':
+ break;
+case 'b':
+ break;
+}
diff --git a/tests/hello.el b/tests/hello.el
new file mode 100644
index 0000000000..5fa83c23e6
--- /dev/null
+++ b/tests/hello.el
@@ -0,0 +1,5 @@
+;; test1
+;; {{
+;; java
+;; }}
+test
diff --git a/tests/hello.f b/tests/hello.f
new file mode 100644
index 0000000000..810911fcbc
--- /dev/null
+++ b/tests/hello.f
@@ -0,0 +1,21 @@
+PROGRAM cows
+IMPLICIT NONE
+INTEGER :: func_name
+PRINT *,func_name(2, 1.3)
+END PROGRAM
+
+if (x < x1) then
+ print 1
+else
+ print 2
+end if
+
+IF (x < 50) THEN
+ Grade = 'F'
+ELSE IF (x < 60) THEN
+ Grade = 'D'
+ELSE IF (x < 70) THEN
+ Grade = 'C'
+ELSE
+ Grade = 'A'
+END IF
diff --git a/tests/hello.html b/tests/hello.html
new file mode 100644
index 0000000000..0d029096f7
--- /dev/null
+++ b/tests/hello.html
@@ -0,0 +1,8 @@
+<html lang="en">
+<head>
+<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
+</head>
+<body>
+<p>Hello world!</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/tests/hello.js b/tests/hello.js
new file mode 100644
index 0000000000..73955f05bc
--- /dev/null
+++ b/tests/hello.js
@@ -0,0 +1,3 @@
+function hello() {
+ console.log('hello world');
+}
\ No newline at end of file
diff --git a/tests/hello.lua b/tests/hello.lua
new file mode 100644
index 0000000000..8a3acec496
--- /dev/null
+++ b/tests/hello.lua
@@ -0,0 +1,14 @@
+if configTable:FindFirstChild(configName) then
+ configs[configName] = configTable:FindFirstChild(configName).Value
+else
+ configs[configName] = defaultValue
+end
+
+local thread = coroutine.create(function()
+ while true do
+ wait()
+ if state then
+ display.Text = state.Name
+ end
+ end
+end)
diff --git a/tests/hello.m b/tests/hello.m
new file mode 100644
index 0000000000..8b9dc7263f
--- /dev/null
+++ b/tests/hello.m
@@ -0,0 +1,7 @@
+if a < 30
+ disp('small');
+elseif a < 80
+ disp('medium');
+else
+ disp('large');
+end
diff --git a/tests/hello.md b/tests/hello.md
new file mode 100644
index 0000000000..17998be30e
--- /dev/null
+++ b/tests/hello.md
@@ -0,0 +1,9 @@
+### test1
+```java
+Example 1
+```
+
+### test2
+```c
+Example 2
+```
diff --git a/tests/hello.v b/tests/hello.v
new file mode 100644
index 0000000000..48a09dd118
--- /dev/null
+++ b/tests/hello.v
@@ -0,0 +1,14 @@
+`ifdef behavioral
+ `include "groupA_beh.v ";
+ `include "groupB_beh.v ";
+ `include "ctrl_beh.v ";
+`else
+ `include "groupA_synth.v ";
+ `include "groupB_ synth.v ";
+ `include "ctrl_ synth.v ";
+`endif
+always @(WRITE or READ or STATUS) // test
+ /* hello */ begin
+ out = 9;
+ end
+ // more comment
- [nongnu] elpa/evil-matchit 076ace3ee2 188/244: README, (continued)
- [nongnu] elpa/evil-matchit 076ace3ee2 188/244: README, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit ec0ea006e9 184/244: improve html tag matching algorithm, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit 943bf5fb2b 189/244: ruby code might use tab, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit b363d12390 202/244: fix evil-matchit-diff, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit 7cd10d332d 191/244: extra logic to find html open tag, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit 3076a8ca5d 232/244: org-mode can use simple rule, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit 8fba4f12e1 208/244: minor issue in emacs lisp comment, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit f9faa0b9bf 244/244: README, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit 24a95751f4 239/244: Merge pull request #134 from dankessler/matlab-mode, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit 0f23f97aef 234/244: use github workflows instead of travis ci, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit b24a7232a2 218/244: support octave, requires emacs25+, clean up tests,
ELPA Syncer <=
- [nongnu] elpa/evil-matchit c2d3798650 054/244: support template lik PHP, better algorithm v1.4.0, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit 67eec20d48 086/244: updated README, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit f981f722df 088/244: avoid hang in python-mode, v2.1.1, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit 0b35f26191 091/244: javascript could use evilmi-simple-*, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit 6346825fd8 099/244: less picky about latex tags, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit 080639aed3 100/244: clean code and doc, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit b01763bf76 107/244: initialize evilmi-plugins only once v2.1.5, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit 1d55eba1d3 112/244: fix bug on verilog if statement, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit 01ade592db 114/244: enhance js matching algorithm, ELPA Syncer, 2022/01/06
- [nongnu] elpa/evil-matchit 277623d8be 116/244: support css/less/scss, ELPA Syncer, 2022/01/06