/usr/include
NameSizeModeActions
aarch64-linux-gnu/-0755rm
alpha-linux-gnu/-0755rm
arm-linux-gnueabi/-0755rm
arm-linux-gnueabihf/-0755rm
arpa/-0755rm
asm-generic/-0755rm
c++/-0755rm
drm/-0755rm
finclude/-0755rm
hppa-linux-gnu/-0755rm
i386-linux-gnu/-0755rm
linux/-0755rm
loongarch64-linux-gnu/-0755rm
m68k-linux-gnu/-0755rm
mariadb/-0755rm
mips-linux-gnu/-0755rm
mips64-linux-gnuabi64/-0755rm
mips64el-linux-gnuabi64/-0755rm
mipsel-linux-gnu/-0755rm
mipsisa64r6el-linux-gnuabi64/-0755rm
misc/-0755rm
mtd/-0755rm
mysql/-0755rm
net/-0755rm
netash/-0755rm
netatalk/-0755rm
netax25/-0755rm
neteconet/-0755rm
netinet/-0755rm
netipx/-0755rm
netiucv/-0755rm
netpacket/-0755rm
netrom/-0755rm
netrose/-0755rm
nfs/-0755rm
openssl/-0755rm
php8.3/-0755rm
powerpc-linux-gnu/-0755rm
powerpc64-linux-gnu/-0755rm
powerpc64le-linux-gnu/-0755rm
protocols/-0755rm
rdma/-0755rm
regulator/-0755rm
riscv64-linux-gnu/-0755rm
rpc/-0755rm
rpcsvc/-0755rm
ruby-3.3.0/-0755rm
s390x-linux-gnu/-0755rm
scsi/-0755rm
sh4-linux-gnu/-0755rm
sound/-0755rm
sparc64-linux-gnu/-0755rm
video/-0755rm
X11/-0755rm
x86_64-linux-gnu/-0755rm
x86_64-linux-gnux32/-0755rm
xen/-0755rm
aio.h77490644editdlrm
aliases.h20280644editdlrm
alloca.h12030644editdlrm
ar.h17310644editdlrm
argp.h255480644editdlrm
argz.h60540644editdlrm
assert.h51070644editdlrm
byteswap.h14490644editdlrm
complex.h81800644editdlrm
cpio.h22680644editdlrm
crypt.h111310644editdlrm
ctype.h109690644editdlrm
dirent.h126170644editdlrm
dlfcn.h85810644editdlrm
elf.h1960940644editdlrm
emacs-module.h369700644editdlrm
endian.h22990644editdlrm
envz.h28670644editdlrm
err.h23830644editdlrm
errno.h16790644editdlrm
error.h24300644editdlrm
execinfo.h15230644editdlrm
fcntl.h114170644editdlrm
features-time64.h15320644editdlrm
features.h192140644editdlrm
fenv.h57880644editdlrm
fmtmsg.h32400644editdlrm
fnmatch.h22960644editdlrm
fstab.h31110644editdlrm
fts.h95940644editdlrm
ftw.h63730644editdlrm
gawkapi.h416970644editdlrm
gconv.h42110644editdlrm
gdbm.h123280644editdlrm
getopt.h14690644editdlrm
glob.h73090644editdlrm
gmpxx.h1295020644editdlrm
gnu-versions.h23430644editdlrm
gnumake.h29130644editdlrm
grp.h68470644editdlrm
gshadow.h46890644editdlrm
iconv.h19120644editdlrm
ifaddrs.h28410644editdlrm
inttypes.h113090644editdlrm
jerror.h158640644editdlrm
jmorecfg.h141920644editdlrm
jpegint.h157820644editdlrm
jpeglib.h502810644editdlrm
langinfo.h178490644editdlrm
lastlog.h1260644editdlrm
libgen.h13860644editdlrm
libintl.h45800644editdlrm
limits.h57060644editdlrm
link.h78010644editdlrm
locale.h76750644editdlrm
malloc.h59840644editdlrm
math.h492890644editdlrm
mcheck.h24350644editdlrm
memory.h9560644editdlrm
mntent.h33590644editdlrm
monetary.h19660644editdlrm
mqueue.h45730644editdlrm
netdb.h284660644editdlrm
nl_types.h17530644editdlrm
nss.h144080644editdlrm
obstack.h213070644editdlrm
paths.h29830644editdlrm
poll.h220644editdlrm
printf.h68750644editdlrm
proc_service.h34770644editdlrm
pthread.h484220644editdlrm
pty.h15700644editdlrm
pwd.h63170644editdlrm
regex.h259400644editdlrm
regexp.h13870644editdlrm
resolv.h123880644editdlrm
re_comp.h9630644editdlrm
sched.h50430644editdlrm
search.h54500644editdlrm
semaphore.h34740644editdlrm
setjmp.h31900644editdlrm
sgtty.h13440644editdlrm
shadow.h56320644editdlrm
signal.h130450644editdlrm
spawn.h83880644editdlrm
stab.h2640644editdlrm
stdbit.h269070644editdlrm
stdc-predef.h24620644editdlrm
stdint.h81550644editdlrm
stdio.h341720644editdlrm
stdio_ext.h28000644editdlrm
stdlib.h410390644editdlrm
string.h199690644editdlrm
strings.h47530644editdlrm
syscall.h250644editdlrm
sysexits.h52320644editdlrm
syslog.h240644editdlrm
tar.h37520644editdlrm
termio.h2140644editdlrm
termios.h35990644editdlrm
tgmath.h487790644editdlrm
threads.h78140644editdlrm
thread_db.h160240644editdlrm
time.h151150644editdlrm
ttyent.h24940644editdlrm
uchar.h31170644editdlrm
ucontext.h20370644editdlrm
ulimit.h15840644editdlrm
unistd.h450530644editdlrm
utime.h19150644editdlrm
utmp.h32230644editdlrm
utmpx.h41000644editdlrm
values.h19560644editdlrm
wait.h220644editdlrm
wchar.h391020644editdlrm
wctype.h55490644editdlrm
wordexp.h25020644editdlrm
zconf.h164640644editdlrm
zlib.h968290644editdlrm
Edit: /usr/include/emacs-module.h (36970B)
/* emacs-module.h - GNU Emacs module API. Copyright (C) 2015-2025 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs 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. GNU Emacs 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 GNU Emacs. If not, see . */ /* This file defines the Emacs module API. Please see the chapter `Dynamic Modules' in the GNU Emacs Lisp Reference Manual for information how to write modules and use this header file. */ #ifndef EMACS_MODULE_H #define EMACS_MODULE_H #include #include #include #if ((defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 202311 \ && !defined __bool_true_false_are_defined && !defined __cplusplus) #include #endif #define EMACS_MAJOR_VERSION 30 #if defined __cplusplus && __cplusplus >= 201103L # define EMACS_NOEXCEPT noexcept #else # define EMACS_NOEXCEPT #endif #if defined __cplusplus && __cplusplus >= 201703L # define EMACS_NOEXCEPT_TYPEDEF noexcept #else # define EMACS_NOEXCEPT_TYPEDEF #endif #if 3 < __GNUC__ + (3 <= __GNUC_MINOR__) # define EMACS_ATTRIBUTE_NONNULL(...) \ __attribute__ ((__nonnull__ (__VA_ARGS__))) #elif (defined __has_attribute \ && (!defined __clang_minor__ \ || 3 < __clang_major__ + (5 <= __clang_minor__))) # if __has_attribute (__nonnull__) # define EMACS_ATTRIBUTE_NONNULL(...) \ __attribute__ ((__nonnull__ (__VA_ARGS__))) # endif #endif #ifndef EMACS_ATTRIBUTE_NONNULL # define EMACS_ATTRIBUTE_NONNULL(...) #endif #ifdef __cplusplus extern "C" { #endif /* Current environment. */ typedef struct emacs_env_30 emacs_env; /* Opaque pointer representing an Emacs Lisp value. BEWARE: Do not assume NULL is a valid value! */ typedef struct emacs_value_tag *emacs_value; enum { emacs_variadic_function = -2 }; /* Struct passed to a module init function (emacs_module_init). */ struct emacs_runtime { /* Structure size (for version checking). */ ptrdiff_t size; /* Private data; users should not touch this. */ struct emacs_runtime_private *private_members; /* Return an environment pointer. */ emacs_env *(*get_environment) (struct emacs_runtime *runtime) EMACS_ATTRIBUTE_NONNULL (1); }; /* Type aliases for function pointer types used in the module API. Note that we don't use these aliases directly in the API to be able to mark the function arguments as 'noexcept' before C++20. However, users can use them if they want. */ /* Function prototype for the module Lisp functions. These must not throw C++ exceptions. */ typedef emacs_value (*emacs_function) (emacs_env *env, ptrdiff_t nargs, emacs_value *args, void *data) EMACS_NOEXCEPT_TYPEDEF EMACS_ATTRIBUTE_NONNULL (1); /* Function prototype for module user-pointer and function finalizers. These must not throw C++ exceptions. */ typedef void (*emacs_finalizer) (void *data) EMACS_NOEXCEPT_TYPEDEF; /* Possible Emacs function call outcomes. */ enum emacs_funcall_exit { /* Function has returned normally. */ emacs_funcall_exit_return = 0, /* Function has signaled an error using `signal'. */ emacs_funcall_exit_signal = 1, /* Function has exited using `throw'. */ emacs_funcall_exit_throw = 2 }; /* Possible return values for emacs_env.process_input. */ enum emacs_process_input_result { /* Module code may continue */ emacs_process_input_continue = 0, /* Module code should return control to Emacs as soon as possible. */ emacs_process_input_quit = 1 }; /* Define emacs_limb_t so that it is likely to match GMP's mp_limb_t. This micro-optimization can help modules that use mpz_export and mpz_import, which operate more efficiently on mp_limb_t. It's OK (if perhaps a bit slower) if the two types do not match, and modules shouldn't rely on the two types matching. */ typedef size_t emacs_limb_t; #define EMACS_LIMB_MAX SIZE_MAX struct emacs_env_25 { /* Structure size (for version checking). */ ptrdiff_t size; /* Private data; users should not touch this. */ struct emacs_env_private *private_members; /* Memory management. */ emacs_value (*make_global_ref) (emacs_env *env, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); void (*free_global_ref) (emacs_env *env, emacs_value global_value) EMACS_ATTRIBUTE_NONNULL(1); /* Non-local exit handling. */ enum emacs_funcall_exit (*non_local_exit_check) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); void (*non_local_exit_clear) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); enum emacs_funcall_exit (*non_local_exit_get) (emacs_env *env, emacs_value *symbol, emacs_value *data) EMACS_ATTRIBUTE_NONNULL(1, 2, 3); void (*non_local_exit_signal) (emacs_env *env, emacs_value symbol, emacs_value data) EMACS_ATTRIBUTE_NONNULL(1); void (*non_local_exit_throw) (emacs_env *env, emacs_value tag, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); /* Function registration. */ emacs_value (*make_function) (emacs_env *env, ptrdiff_t min_arity, ptrdiff_t max_arity, emacs_value (*func) (emacs_env *env, ptrdiff_t nargs, emacs_value* args, void *data) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1), const char *docstring, void *data) EMACS_ATTRIBUTE_NONNULL(1, 4); emacs_value (*funcall) (emacs_env *env, emacs_value func, ptrdiff_t nargs, emacs_value* args) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*intern) (emacs_env *env, const char *name) EMACS_ATTRIBUTE_NONNULL(1, 2); /* Type conversion. */ emacs_value (*type_of) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); bool (*is_not_nil) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); bool (*eq) (emacs_env *env, emacs_value a, emacs_value b) EMACS_ATTRIBUTE_NONNULL(1); intmax_t (*extract_integer) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*make_integer) (emacs_env *env, intmax_t n) EMACS_ATTRIBUTE_NONNULL(1); double (*extract_float) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*make_float) (emacs_env *env, double d) EMACS_ATTRIBUTE_NONNULL(1); /* Copy the content of the Lisp string VALUE to BUFFER as an utf8 null-terminated string. SIZE must point to the total size of the buffer. If BUFFER is NULL or if SIZE is not big enough, write the required buffer size to SIZE and return true. Note that SIZE must include the last null byte (e.g. "abc" needs a buffer of size 4). Return true if the string was successfully copied. */ bool (*copy_string_contents) (emacs_env *env, emacs_value value, char *buf, ptrdiff_t *len) EMACS_ATTRIBUTE_NONNULL(1, 4); /* Create a Lisp string from a utf8 encoded string. */ emacs_value (*make_string) (emacs_env *env, const char *str, ptrdiff_t len) EMACS_ATTRIBUTE_NONNULL(1, 2); /* Embedded pointer type. */ emacs_value (*make_user_ptr) (emacs_env *env, void (*fin) (void *) EMACS_NOEXCEPT, void *ptr) EMACS_ATTRIBUTE_NONNULL(1); void *(*get_user_ptr) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); void (*set_user_ptr) (emacs_env *env, emacs_value arg, void *ptr) EMACS_ATTRIBUTE_NONNULL(1); void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr)) (void *) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1); void (*set_user_finalizer) (emacs_env *env, emacs_value arg, void (*fin) (void *) EMACS_NOEXCEPT) EMACS_ATTRIBUTE_NONNULL(1); /* Vector functions. */ emacs_value (*vec_get) (emacs_env *env, emacs_value vector, ptrdiff_t index) EMACS_ATTRIBUTE_NONNULL(1); void (*vec_set) (emacs_env *env, emacs_value vector, ptrdiff_t index, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vector) EMACS_ATTRIBUTE_NONNULL(1); }; struct emacs_env_26 { /* Structure size (for version checking). */ ptrdiff_t size; /* Private data; users should not touch this. */ struct emacs_env_private *private_members; /* Memory management. */ emacs_value (*make_global_ref) (emacs_env *env, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); void (*free_global_ref) (emacs_env *env, emacs_value global_value) EMACS_ATTRIBUTE_NONNULL(1); /* Non-local exit handling. */ enum emacs_funcall_exit (*non_local_exit_check) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); void (*non_local_exit_clear) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); enum emacs_funcall_exit (*non_local_exit_get) (emacs_env *env, emacs_value *symbol, emacs_value *data) EMACS_ATTRIBUTE_NONNULL(1, 2, 3); void (*non_local_exit_signal) (emacs_env *env, emacs_value symbol, emacs_value data) EMACS_ATTRIBUTE_NONNULL(1); void (*non_local_exit_throw) (emacs_env *env, emacs_value tag, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); /* Function registration. */ emacs_value (*make_function) (emacs_env *env, ptrdiff_t min_arity, ptrdiff_t max_arity, emacs_value (*func) (emacs_env *env, ptrdiff_t nargs, emacs_value* args, void *data) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1), const char *docstring, void *data) EMACS_ATTRIBUTE_NONNULL(1, 4); emacs_value (*funcall) (emacs_env *env, emacs_value func, ptrdiff_t nargs, emacs_value* args) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*intern) (emacs_env *env, const char *name) EMACS_ATTRIBUTE_NONNULL(1, 2); /* Type conversion. */ emacs_value (*type_of) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); bool (*is_not_nil) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); bool (*eq) (emacs_env *env, emacs_value a, emacs_value b) EMACS_ATTRIBUTE_NONNULL(1); intmax_t (*extract_integer) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*make_integer) (emacs_env *env, intmax_t n) EMACS_ATTRIBUTE_NONNULL(1); double (*extract_float) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*make_float) (emacs_env *env, double d) EMACS_ATTRIBUTE_NONNULL(1); /* Copy the content of the Lisp string VALUE to BUFFER as an utf8 null-terminated string. SIZE must point to the total size of the buffer. If BUFFER is NULL or if SIZE is not big enough, write the required buffer size to SIZE and return true. Note that SIZE must include the last null byte (e.g. "abc" needs a buffer of size 4). Return true if the string was successfully copied. */ bool (*copy_string_contents) (emacs_env *env, emacs_value value, char *buf, ptrdiff_t *len) EMACS_ATTRIBUTE_NONNULL(1, 4); /* Create a Lisp string from a utf8 encoded string. */ emacs_value (*make_string) (emacs_env *env, const char *str, ptrdiff_t len) EMACS_ATTRIBUTE_NONNULL(1, 2); /* Embedded pointer type. */ emacs_value (*make_user_ptr) (emacs_env *env, void (*fin) (void *) EMACS_NOEXCEPT, void *ptr) EMACS_ATTRIBUTE_NONNULL(1); void *(*get_user_ptr) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); void (*set_user_ptr) (emacs_env *env, emacs_value arg, void *ptr) EMACS_ATTRIBUTE_NONNULL(1); void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr)) (void *) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1); void (*set_user_finalizer) (emacs_env *env, emacs_value arg, void (*fin) (void *) EMACS_NOEXCEPT) EMACS_ATTRIBUTE_NONNULL(1); /* Vector functions. */ emacs_value (*vec_get) (emacs_env *env, emacs_value vector, ptrdiff_t index) EMACS_ATTRIBUTE_NONNULL(1); void (*vec_set) (emacs_env *env, emacs_value vector, ptrdiff_t index, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vector) EMACS_ATTRIBUTE_NONNULL(1); /* Returns whether a quit is pending. */ bool (*should_quit) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); }; struct emacs_env_27 { /* Structure size (for version checking). */ ptrdiff_t size; /* Private data; users should not touch this. */ struct emacs_env_private *private_members; /* Memory management. */ emacs_value (*make_global_ref) (emacs_env *env, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); void (*free_global_ref) (emacs_env *env, emacs_value global_value) EMACS_ATTRIBUTE_NONNULL(1); /* Non-local exit handling. */ enum emacs_funcall_exit (*non_local_exit_check) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); void (*non_local_exit_clear) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); enum emacs_funcall_exit (*non_local_exit_get) (emacs_env *env, emacs_value *symbol, emacs_value *data) EMACS_ATTRIBUTE_NONNULL(1, 2, 3); void (*non_local_exit_signal) (emacs_env *env, emacs_value symbol, emacs_value data) EMACS_ATTRIBUTE_NONNULL(1); void (*non_local_exit_throw) (emacs_env *env, emacs_value tag, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); /* Function registration. */ emacs_value (*make_function) (emacs_env *env, ptrdiff_t min_arity, ptrdiff_t max_arity, emacs_value (*func) (emacs_env *env, ptrdiff_t nargs, emacs_value* args, void *data) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1), const char *docstring, void *data) EMACS_ATTRIBUTE_NONNULL(1, 4); emacs_value (*funcall) (emacs_env *env, emacs_value func, ptrdiff_t nargs, emacs_value* args) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*intern) (emacs_env *env, const char *name) EMACS_ATTRIBUTE_NONNULL(1, 2); /* Type conversion. */ emacs_value (*type_of) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); bool (*is_not_nil) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); bool (*eq) (emacs_env *env, emacs_value a, emacs_value b) EMACS_ATTRIBUTE_NONNULL(1); intmax_t (*extract_integer) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*make_integer) (emacs_env *env, intmax_t n) EMACS_ATTRIBUTE_NONNULL(1); double (*extract_float) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*make_float) (emacs_env *env, double d) EMACS_ATTRIBUTE_NONNULL(1); /* Copy the content of the Lisp string VALUE to BUFFER as an utf8 null-terminated string. SIZE must point to the total size of the buffer. If BUFFER is NULL or if SIZE is not big enough, write the required buffer size to SIZE and return true. Note that SIZE must include the last null byte (e.g. "abc" needs a buffer of size 4). Return true if the string was successfully copied. */ bool (*copy_string_contents) (emacs_env *env, emacs_value value, char *buf, ptrdiff_t *len) EMACS_ATTRIBUTE_NONNULL(1, 4); /* Create a Lisp string from a utf8 encoded string. */ emacs_value (*make_string) (emacs_env *env, const char *str, ptrdiff_t len) EMACS_ATTRIBUTE_NONNULL(1, 2); /* Embedded pointer type. */ emacs_value (*make_user_ptr) (emacs_env *env, void (*fin) (void *) EMACS_NOEXCEPT, void *ptr) EMACS_ATTRIBUTE_NONNULL(1); void *(*get_user_ptr) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); void (*set_user_ptr) (emacs_env *env, emacs_value arg, void *ptr) EMACS_ATTRIBUTE_NONNULL(1); void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr)) (void *) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1); void (*set_user_finalizer) (emacs_env *env, emacs_value arg, void (*fin) (void *) EMACS_NOEXCEPT) EMACS_ATTRIBUTE_NONNULL(1); /* Vector functions. */ emacs_value (*vec_get) (emacs_env *env, emacs_value vector, ptrdiff_t index) EMACS_ATTRIBUTE_NONNULL(1); void (*vec_set) (emacs_env *env, emacs_value vector, ptrdiff_t index, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vector) EMACS_ATTRIBUTE_NONNULL(1); /* Returns whether a quit is pending. */ bool (*should_quit) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); /* Processes pending input events and returns whether the module function should quit. */ enum emacs_process_input_result (*process_input) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL (1); struct timespec (*extract_time) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL (1); emacs_value (*make_time) (emacs_env *env, struct timespec time) EMACS_ATTRIBUTE_NONNULL (1); bool (*extract_big_integer) (emacs_env *env, emacs_value arg, int *sign, ptrdiff_t *count, emacs_limb_t *magnitude) EMACS_ATTRIBUTE_NONNULL (1); emacs_value (*make_big_integer) (emacs_env *env, int sign, ptrdiff_t count, const emacs_limb_t *magnitude) EMACS_ATTRIBUTE_NONNULL (1); }; struct emacs_env_28 { /* Structure size (for version checking). */ ptrdiff_t size; /* Private data; users should not touch this. */ struct emacs_env_private *private_members; /* Memory management. */ emacs_value (*make_global_ref) (emacs_env *env, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); void (*free_global_ref) (emacs_env *env, emacs_value global_value) EMACS_ATTRIBUTE_NONNULL(1); /* Non-local exit handling. */ enum emacs_funcall_exit (*non_local_exit_check) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); void (*non_local_exit_clear) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); enum emacs_funcall_exit (*non_local_exit_get) (emacs_env *env, emacs_value *symbol, emacs_value *data) EMACS_ATTRIBUTE_NONNULL(1, 2, 3); void (*non_local_exit_signal) (emacs_env *env, emacs_value symbol, emacs_value data) EMACS_ATTRIBUTE_NONNULL(1); void (*non_local_exit_throw) (emacs_env *env, emacs_value tag, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); /* Function registration. */ emacs_value (*make_function) (emacs_env *env, ptrdiff_t min_arity, ptrdiff_t max_arity, emacs_value (*func) (emacs_env *env, ptrdiff_t nargs, emacs_value* args, void *data) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1), const char *docstring, void *data) EMACS_ATTRIBUTE_NONNULL(1, 4); emacs_value (*funcall) (emacs_env *env, emacs_value func, ptrdiff_t nargs, emacs_value* args) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*intern) (emacs_env *env, const char *name) EMACS_ATTRIBUTE_NONNULL(1, 2); /* Type conversion. */ emacs_value (*type_of) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); bool (*is_not_nil) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); bool (*eq) (emacs_env *env, emacs_value a, emacs_value b) EMACS_ATTRIBUTE_NONNULL(1); intmax_t (*extract_integer) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*make_integer) (emacs_env *env, intmax_t n) EMACS_ATTRIBUTE_NONNULL(1); double (*extract_float) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*make_float) (emacs_env *env, double d) EMACS_ATTRIBUTE_NONNULL(1); /* Copy the content of the Lisp string VALUE to BUFFER as an utf8 null-terminated string. SIZE must point to the total size of the buffer. If BUFFER is NULL or if SIZE is not big enough, write the required buffer size to SIZE and return true. Note that SIZE must include the last null byte (e.g. "abc" needs a buffer of size 4). Return true if the string was successfully copied. */ bool (*copy_string_contents) (emacs_env *env, emacs_value value, char *buf, ptrdiff_t *len) EMACS_ATTRIBUTE_NONNULL(1, 4); /* Create a Lisp string from a utf8 encoded string. */ emacs_value (*make_string) (emacs_env *env, const char *str, ptrdiff_t len) EMACS_ATTRIBUTE_NONNULL(1, 2); /* Embedded pointer type. */ emacs_value (*make_user_ptr) (emacs_env *env, void (*fin) (void *) EMACS_NOEXCEPT, void *ptr) EMACS_ATTRIBUTE_NONNULL(1); void *(*get_user_ptr) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); void (*set_user_ptr) (emacs_env *env, emacs_value arg, void *ptr) EMACS_ATTRIBUTE_NONNULL(1); void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr)) (void *) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1); void (*set_user_finalizer) (emacs_env *env, emacs_value arg, void (*fin) (void *) EMACS_NOEXCEPT) EMACS_ATTRIBUTE_NONNULL(1); /* Vector functions. */ emacs_value (*vec_get) (emacs_env *env, emacs_value vector, ptrdiff_t index) EMACS_ATTRIBUTE_NONNULL(1); void (*vec_set) (emacs_env *env, emacs_value vector, ptrdiff_t index, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vector) EMACS_ATTRIBUTE_NONNULL(1); /* Returns whether a quit is pending. */ bool (*should_quit) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); /* Processes pending input events and returns whether the module function should quit. */ enum emacs_process_input_result (*process_input) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL (1); struct timespec (*extract_time) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL (1); emacs_value (*make_time) (emacs_env *env, struct timespec time) EMACS_ATTRIBUTE_NONNULL (1); bool (*extract_big_integer) (emacs_env *env, emacs_value arg, int *sign, ptrdiff_t *count, emacs_limb_t *magnitude) EMACS_ATTRIBUTE_NONNULL (1); emacs_value (*make_big_integer) (emacs_env *env, int sign, ptrdiff_t count, const emacs_limb_t *magnitude) EMACS_ATTRIBUTE_NONNULL (1); void (*(*EMACS_ATTRIBUTE_NONNULL (1) get_function_finalizer) (emacs_env *env, emacs_value arg)) (void *) EMACS_NOEXCEPT; void (*set_function_finalizer) (emacs_env *env, emacs_value arg, void (*fin) (void *) EMACS_NOEXCEPT) EMACS_ATTRIBUTE_NONNULL (1); int (*open_channel) (emacs_env *env, emacs_value pipe_process) EMACS_ATTRIBUTE_NONNULL (1); void (*make_interactive) (emacs_env *env, emacs_value function, emacs_value spec) EMACS_ATTRIBUTE_NONNULL (1); /* Create a unibyte Lisp string from a string. */ emacs_value (*make_unibyte_string) (emacs_env *env, const char *str, ptrdiff_t len) EMACS_ATTRIBUTE_NONNULL(1, 2); }; struct emacs_env_29 { /* Structure size (for version checking). */ ptrdiff_t size; /* Private data; users should not touch this. */ struct emacs_env_private *private_members; /* Memory management. */ emacs_value (*make_global_ref) (emacs_env *env, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); void (*free_global_ref) (emacs_env *env, emacs_value global_value) EMACS_ATTRIBUTE_NONNULL(1); /* Non-local exit handling. */ enum emacs_funcall_exit (*non_local_exit_check) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); void (*non_local_exit_clear) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); enum emacs_funcall_exit (*non_local_exit_get) (emacs_env *env, emacs_value *symbol, emacs_value *data) EMACS_ATTRIBUTE_NONNULL(1, 2, 3); void (*non_local_exit_signal) (emacs_env *env, emacs_value symbol, emacs_value data) EMACS_ATTRIBUTE_NONNULL(1); void (*non_local_exit_throw) (emacs_env *env, emacs_value tag, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); /* Function registration. */ emacs_value (*make_function) (emacs_env *env, ptrdiff_t min_arity, ptrdiff_t max_arity, emacs_value (*func) (emacs_env *env, ptrdiff_t nargs, emacs_value* args, void *data) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1), const char *docstring, void *data) EMACS_ATTRIBUTE_NONNULL(1, 4); emacs_value (*funcall) (emacs_env *env, emacs_value func, ptrdiff_t nargs, emacs_value* args) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*intern) (emacs_env *env, const char *name) EMACS_ATTRIBUTE_NONNULL(1, 2); /* Type conversion. */ emacs_value (*type_of) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); bool (*is_not_nil) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); bool (*eq) (emacs_env *env, emacs_value a, emacs_value b) EMACS_ATTRIBUTE_NONNULL(1); intmax_t (*extract_integer) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*make_integer) (emacs_env *env, intmax_t n) EMACS_ATTRIBUTE_NONNULL(1); double (*extract_float) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*make_float) (emacs_env *env, double d) EMACS_ATTRIBUTE_NONNULL(1); /* Copy the content of the Lisp string VALUE to BUFFER as an utf8 null-terminated string. SIZE must point to the total size of the buffer. If BUFFER is NULL or if SIZE is not big enough, write the required buffer size to SIZE and return true. Note that SIZE must include the last null byte (e.g. "abc" needs a buffer of size 4). Return true if the string was successfully copied. */ bool (*copy_string_contents) (emacs_env *env, emacs_value value, char *buf, ptrdiff_t *len) EMACS_ATTRIBUTE_NONNULL(1, 4); /* Create a Lisp string from a utf8 encoded string. */ emacs_value (*make_string) (emacs_env *env, const char *str, ptrdiff_t len) EMACS_ATTRIBUTE_NONNULL(1, 2); /* Embedded pointer type. */ emacs_value (*make_user_ptr) (emacs_env *env, void (*fin) (void *) EMACS_NOEXCEPT, void *ptr) EMACS_ATTRIBUTE_NONNULL(1); void *(*get_user_ptr) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); void (*set_user_ptr) (emacs_env *env, emacs_value arg, void *ptr) EMACS_ATTRIBUTE_NONNULL(1); void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr)) (void *) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1); void (*set_user_finalizer) (emacs_env *env, emacs_value arg, void (*fin) (void *) EMACS_NOEXCEPT) EMACS_ATTRIBUTE_NONNULL(1); /* Vector functions. */ emacs_value (*vec_get) (emacs_env *env, emacs_value vector, ptrdiff_t index) EMACS_ATTRIBUTE_NONNULL(1); void (*vec_set) (emacs_env *env, emacs_value vector, ptrdiff_t index, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vector) EMACS_ATTRIBUTE_NONNULL(1); /* Returns whether a quit is pending. */ bool (*should_quit) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); /* Processes pending input events and returns whether the module function should quit. */ enum emacs_process_input_result (*process_input) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL (1); struct timespec (*extract_time) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL (1); emacs_value (*make_time) (emacs_env *env, struct timespec time) EMACS_ATTRIBUTE_NONNULL (1); bool (*extract_big_integer) (emacs_env *env, emacs_value arg, int *sign, ptrdiff_t *count, emacs_limb_t *magnitude) EMACS_ATTRIBUTE_NONNULL (1); emacs_value (*make_big_integer) (emacs_env *env, int sign, ptrdiff_t count, const emacs_limb_t *magnitude) EMACS_ATTRIBUTE_NONNULL (1); void (*(*EMACS_ATTRIBUTE_NONNULL (1) get_function_finalizer) (emacs_env *env, emacs_value arg)) (void *) EMACS_NOEXCEPT; void (*set_function_finalizer) (emacs_env *env, emacs_value arg, void (*fin) (void *) EMACS_NOEXCEPT) EMACS_ATTRIBUTE_NONNULL (1); int (*open_channel) (emacs_env *env, emacs_value pipe_process) EMACS_ATTRIBUTE_NONNULL (1); void (*make_interactive) (emacs_env *env, emacs_value function, emacs_value spec) EMACS_ATTRIBUTE_NONNULL (1); /* Create a unibyte Lisp string from a string. */ emacs_value (*make_unibyte_string) (emacs_env *env, const char *str, ptrdiff_t len) EMACS_ATTRIBUTE_NONNULL(1, 2); }; struct emacs_env_30 { /* Structure size (for version checking). */ ptrdiff_t size; /* Private data; users should not touch this. */ struct emacs_env_private *private_members; /* Memory management. */ emacs_value (*make_global_ref) (emacs_env *env, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); void (*free_global_ref) (emacs_env *env, emacs_value global_value) EMACS_ATTRIBUTE_NONNULL(1); /* Non-local exit handling. */ enum emacs_funcall_exit (*non_local_exit_check) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); void (*non_local_exit_clear) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); enum emacs_funcall_exit (*non_local_exit_get) (emacs_env *env, emacs_value *symbol, emacs_value *data) EMACS_ATTRIBUTE_NONNULL(1, 2, 3); void (*non_local_exit_signal) (emacs_env *env, emacs_value symbol, emacs_value data) EMACS_ATTRIBUTE_NONNULL(1); void (*non_local_exit_throw) (emacs_env *env, emacs_value tag, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); /* Function registration. */ emacs_value (*make_function) (emacs_env *env, ptrdiff_t min_arity, ptrdiff_t max_arity, emacs_value (*func) (emacs_env *env, ptrdiff_t nargs, emacs_value* args, void *data) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1), const char *docstring, void *data) EMACS_ATTRIBUTE_NONNULL(1, 4); emacs_value (*funcall) (emacs_env *env, emacs_value func, ptrdiff_t nargs, emacs_value* args) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*intern) (emacs_env *env, const char *name) EMACS_ATTRIBUTE_NONNULL(1, 2); /* Type conversion. */ emacs_value (*type_of) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); bool (*is_not_nil) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); bool (*eq) (emacs_env *env, emacs_value a, emacs_value b) EMACS_ATTRIBUTE_NONNULL(1); intmax_t (*extract_integer) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*make_integer) (emacs_env *env, intmax_t n) EMACS_ATTRIBUTE_NONNULL(1); double (*extract_float) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); emacs_value (*make_float) (emacs_env *env, double d) EMACS_ATTRIBUTE_NONNULL(1); /* Copy the content of the Lisp string VALUE to BUFFER as an utf8 null-terminated string. SIZE must point to the total size of the buffer. If BUFFER is NULL or if SIZE is not big enough, write the required buffer size to SIZE and return true. Note that SIZE must include the last null byte (e.g. "abc" needs a buffer of size 4). Return true if the string was successfully copied. */ bool (*copy_string_contents) (emacs_env *env, emacs_value value, char *buf, ptrdiff_t *len) EMACS_ATTRIBUTE_NONNULL(1, 4); /* Create a Lisp string from a utf8 encoded string. */ emacs_value (*make_string) (emacs_env *env, const char *str, ptrdiff_t len) EMACS_ATTRIBUTE_NONNULL(1, 2); /* Embedded pointer type. */ emacs_value (*make_user_ptr) (emacs_env *env, void (*fin) (void *) EMACS_NOEXCEPT, void *ptr) EMACS_ATTRIBUTE_NONNULL(1); void *(*get_user_ptr) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL(1); void (*set_user_ptr) (emacs_env *env, emacs_value arg, void *ptr) EMACS_ATTRIBUTE_NONNULL(1); void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr)) (void *) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1); void (*set_user_finalizer) (emacs_env *env, emacs_value arg, void (*fin) (void *) EMACS_NOEXCEPT) EMACS_ATTRIBUTE_NONNULL(1); /* Vector functions. */ emacs_value (*vec_get) (emacs_env *env, emacs_value vector, ptrdiff_t index) EMACS_ATTRIBUTE_NONNULL(1); void (*vec_set) (emacs_env *env, emacs_value vector, ptrdiff_t index, emacs_value value) EMACS_ATTRIBUTE_NONNULL(1); ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vector) EMACS_ATTRIBUTE_NONNULL(1); /* Returns whether a quit is pending. */ bool (*should_quit) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL(1); /* Processes pending input events and returns whether the module function should quit. */ enum emacs_process_input_result (*process_input) (emacs_env *env) EMACS_ATTRIBUTE_NONNULL (1); struct timespec (*extract_time) (emacs_env *env, emacs_value arg) EMACS_ATTRIBUTE_NONNULL (1); emacs_value (*make_time) (emacs_env *env, struct timespec time) EMACS_ATTRIBUTE_NONNULL (1); bool (*extract_big_integer) (emacs_env *env, emacs_value arg, int *sign, ptrdiff_t *count, emacs_limb_t *magnitude) EMACS_ATTRIBUTE_NONNULL (1); emacs_value (*make_big_integer) (emacs_env *env, int sign, ptrdiff_t count, const emacs_limb_t *magnitude) EMACS_ATTRIBUTE_NONNULL (1); void (*(*EMACS_ATTRIBUTE_NONNULL (1) get_function_finalizer) (emacs_env *env, emacs_value arg)) (void *) EMACS_NOEXCEPT; void (*set_function_finalizer) (emacs_env *env, emacs_value arg, void (*fin) (void *) EMACS_NOEXCEPT) EMACS_ATTRIBUTE_NONNULL (1); int (*open_channel) (emacs_env *env, emacs_value pipe_process) EMACS_ATTRIBUTE_NONNULL (1); void (*make_interactive) (emacs_env *env, emacs_value function, emacs_value spec) EMACS_ATTRIBUTE_NONNULL (1); /* Create a unibyte Lisp string from a string. */ emacs_value (*make_unibyte_string) (emacs_env *env, const char *str, ptrdiff_t len) EMACS_ATTRIBUTE_NONNULL(1, 2); /* Add module environment functions newly added in Emacs 30 here. Before Emacs 30 is released, remove this comment and start module-env-31.h on the master branch. */ }; /* Every module should define a function as follows. */ extern int emacs_module_init (struct emacs_runtime *runtime) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL (1); #ifdef __cplusplus } #endif #endif /* EMACS_MODULE_H */