branch: externals/jinx commit 3bdda6b2bbcd2cc2363e639033a14cdb7511f0d2 Author: Daniel Mendler <m...@daniel-mendler.de> Commit: Daniel Mendler <m...@daniel-mendler.de>
Module initialization: Print a message for outdated Enchant (Fix #111) --- CHANGELOG.org | 2 +- jinx-mod.c | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.org b/CHANGELOG.org index 60b4aedd51..048435f031 100644 --- a/CHANGELOG.org +++ b/CHANGELOG.org @@ -12,7 +12,7 @@ - Add =jinx-correct-nearest=, =jinx-correct-all= and =jinx-correct-word= commands. The command =jinx-correct= dispatches to one of those commands depending on the prefix argument. -- Require libenchant 2.3.1 or newer. +- Recommend libenchant 2.3.1 or newer. Print a message if Enchant is outdated. * Version 0.9 (2023-07-02) diff --git a/jinx-mod.c b/jinx-mod.c index 959ed38289..408a72caf6 100644 --- a/jinx-mod.c +++ b/jinx-mod.c @@ -145,9 +145,15 @@ static emacs_value jinx_add(emacs_env* env, ptrdiff_t jinx_unused(nargs), static emacs_value jinx_wordchars(emacs_env* env, ptrdiff_t jinx_unused(nargs), emacs_value args[], void* jinx_unused(data)) { EnchantDict* dict = env->get_user_ptr(env, args[0]); - return dict - ? jinx_str(env, enchant_dict_get_extra_word_characters(dict)) - : Qnil; + if (dict) { + // Enchant older than 2.3.1 sometimes does not return UTF-8 + // See https://github.com/AbiWord/enchant/blob/master/NEWS + emacs_value str = jinx_str(env, enchant_dict_get_extra_word_characters(dict)); + if (env->non_local_exit_check(env) == emacs_funcall_exit_return) + return str; + env->non_local_exit_clear(env); + } + return Qnil; } static emacs_value jinx_suggest(emacs_env* env, ptrdiff_t jinx_unused(nargs), @@ -174,7 +180,10 @@ int emacs_module_init(struct emacs_runtime *runtime) { int v0, v1, v2; if (sscanf(enchant_get_version(), "%d.%d.%d", &v0, &v1, &v2) != 3 || v0 * 10000 + v1 * 100 + v2 < 20301) - return 3; // Require Enchant 2.3.1 or newer + env->funcall(env, env->intern(env, "message"), 1, + (emacs_value[]){ + jinx_str(env, "Jinx: Enchant 2.3.1 or newer is recommended") + }); Qt = env->make_global_ref(env, env->intern(env, "t")); Qnil = env->make_global_ref(env, env->intern(env, "nil")); jinx_defun(env, "jinx--mod-suggest", 2, 2, jinx_suggest);