yuutayamada / nim-emacs-module

10 stars 2 forks source link

What is this?

This is a wrapper library to use Emacs Dynamic Module feature from Nim language.

Note that the Emacs Dynamic Module feature is supported from Emacs 25.1 onwards.

Note

I'm either Nim and C language's newbie, so probably I'm doing something wrong... So beware. (PRs are welcome!)

Requirements

Usage Example

  1. Clone this repo.
  2. cd test
  3. make sample
    • If the above make step fails, set EMACS_MODULE_DIR to the directory containing the emacs-module.h header file. Example: make sample EMACS_MODULE_DIR=/dir/containing/emacs-module.h/.

Output

emacs --batch -L .  -l test.el -f ert-run-tests-batch-and-exit
Running 6 tests (2018-06-21 15:27:04-0400, selector ‘t’)
   passed  1/6  sample-mod-test-non-local-exit-signal-test (0.055210 sec)
   passed  2/6  sample-mod-test-non-local-exit-throw-test (0.000234 sec)
   passed  3/6  sample-mod-test-return-t (0.000264 sec)
   passed  4/6  sample-mod-test-return-uname-cmd (0.000247 sec)
   passed  5/6  sample-mod-test-sum (0.000267 sec)
   passed  6/6  sample-mod-test-vector-test (0.001737 sec)

Ran 6 tests, 6 results as expected (2018-06-21 15:27:04-0400, 0.058906 sec)

Another Example

This example shows how simple it is to write a Nim proc with the extra functionality as that of the mymod_test function in the Emacs Modules tutorial.

Spoiler: Other than few lines of boilerplate code, all you do is:

emacs.defun(return42, 0):
  env.make_integer(env, 42)

Full code

Assuming that you already are past Steps 1 and 2 above, do:

make return42

Output

emacs --batch -L .  -l test-return42.el -f ert-run-tests-batch-and-exit
Running 1 tests (2018-06-21 16:48:28-0400, selector ‘t’)
   passed  1/1  return42-return42-cmd (0.000421 sec)

Ran 1 tests, 1 results as expected (2018-06-21 16:48:28-0400, 0.000766 sec)

Other References