Mercurial > hg > xemacs-beta
view src/process.h @ 5634:2014ff433daf
Support hash COLLECTIONs, #'{all,try}-completion{s,}; add #'test-completion
src/ChangeLog addition:
2012-01-01 Aidan Kehoe <kehoea@parhasard.net>
Add #'test-completion, API from GNU.
Accept hash table COLLECTIONs in it and in the other
completion-oriented functions, #'try-completion,
#'all-completions, and those Lisp functions implemented in terms
of them.
* lisp.h: Update the prototype of map_obarray(), making FN
compatible with the FUNCTION argument of elisp_maphash();
* abbrev.c (abbrev_match_mapper):
* abbrev.c (record_symbol):
* doc.c (verify_doc_mapper):
* symbols.c (mapatoms_1):
* symbols.c (apropos_mapper):
Update these mapper functions to reflect the new argument to
map_obarray().
* symbols.c (map_obarray):
Call FN with two arguments, the string name of the symbol, and the
symbol itself, for API (mapper) compatibility with
elisp_maphash().
* minibuf.c (map_completion): New. Map a maphash_function_t across
a non function COLLECTION, as appropriate for #'try-completion and
friends.
* minibuf.c (map_completion_list): New. Map a maphash_function_t
across a pseudo-alist, as appropriate for the completion
functions.
* minibuf.c (ignore_completion_p): PRED needs to be called with
two args if and only if the collection is a hash table. Implement
this.
* minibuf.c (try_completion_mapper): New. The loop body of
#'try-completion, refactored out.
* minibuf.c (Ftry_completion): Use try_completion_mapper(),
map_completion().
* minibuf.c (all_completions_mapper): New. The loop body of
#'all-completions, refactored out.
* minibuf.c (Fall_completions): Use all_completions_mapper(),
map_completion().
* minibuf.c (test_completion_mapper): New. The loop body of
#'test-completion.
* minibuf.c (Ftest_completion): New, API from GNU.
* minibuf.c (syms_of_minibuf): Make Ftest_completion available.
tests/ChangeLog addition:
2012-01-01 Aidan Kehoe <kehoea@parhasard.net>
* automated/completion-tests.el: New.
Test #'try-completion, #'all-completion and #'test-completion with
list, vector and hash-table COLLECTION arguments.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sun, 01 Jan 2012 15:18:52 +0000 |
parents | 308d34e9f07d |
children |
line wrap: on
line source
/* Definitions for asynchronous process control in XEmacs. Copyright (C) 1985, 1992, 1993, 1994 Free Software Foundation, Inc. Copyright (C) 2002 Ben Wing. This file is part of XEmacs. XEmacs 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. XEmacs 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 XEmacs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef INCLUDED_process_h_ #define INCLUDED_process_h_ BEGIN_C_DECLS /* struct Lisp_Process is defined in procimpl.h; only process-*.c need to know about the guts of it. */ DECLARE_LISP_OBJECT (process, Lisp_Process); #define XPROCESS(x) XRECORD (x, process, Lisp_Process) #define wrap_process(p) wrap_record (p, process) #define PROCESSP(x) RECORDP (x, process) #define CHECK_PROCESS(x) CHECK_RECORD (x, process) #define PROCESS_LIVE_P(x) (EQ ((x)->status_symbol, Qrun)) #define PROCESS_READABLE_P(x) (!NILP ((x)->pipe_instream)) #define CHECK_LIVE_PROCESS(x) do { \ CHECK_PROCESS (x); \ if (! PROCESS_LIVE_P (XPROCESS (x))) \ dead_wrong_type_argument (Qprocess_live_p, (x)); \ } while (0) #define CHECK_READABLE_PROCESS(x) do { \ CHECK_PROCESS (x); \ if (! PROCESS_READABLE_P (XPROCESS (x))) \ dead_wrong_type_argument (Qprocess_readable_p, (x)); \ } while (0) EXFUN (Fdelete_process, 1); EXFUN (Fget_buffer_process, 1); EXFUN (Fget_process, 1); EXFUN (Fprocess_status, 1); EXFUN (Fprocess_kill_without_query, 2); EXFUN (Fprocess_id, 1); MODULE_API DECLARE_DOESNT_RETURN (report_process_error (const Ascbyte *, Lisp_Object)); DECLARE_DOESNT_RETURN (report_network_error (const Ascbyte *, Lisp_Object)); extern Lisp_Object Vlisp_EXEC_SUFFIXES; MODULE_API Ibyte *egetenv (const CIbyte *var); MODULE_API void eputenv (const CIbyte *var, const CIbyte *value); extern int env_initted; extern Lisp_Object Qprocess_live_p; Lisp_Object connect_to_file_descriptor (Lisp_Object name, Lisp_Object buffer, Lisp_Object infd, Lisp_Object outfd); int connected_via_filedesc_p (Lisp_Process *p); void kill_buffer_processes (Lisp_Object buffer); void close_process_descs (void); void set_process_filter (Lisp_Object proc, Lisp_Object filter, int filter_does_read, int set_stderr); void update_process_status (Lisp_Object p, Lisp_Object status_symbol, int exit_code, int core_dumped); void get_process_streams (Lisp_Process *p, Lisp_Object *instr, Lisp_Object *outstr, Lisp_Object *errstr); int get_process_selected_p (Lisp_Process *p, int do_err); void set_process_selected_p (Lisp_Process *p, int in_selected, int err_selected); Lisp_Process *get_process_from_usid (USID usid); #ifdef HAVE_SOCKETS int network_connection_p (Lisp_Object process); #else #define network_connection_p(x) 0 #endif extern Lisp_Object Qclosed, Qmulticast, Qopen, Qrun, Qstop, Qtcp, Qudp; extern Lisp_Object Vprocess_connection_type, Vprocess_list; /* Report all recent events of a change in process status (either run the sentinel or output a message). This is done while Emacs is waiting for keyboard input. */ void status_notify (void); void kick_status_notify (void); void deactivate_process (Lisp_Object proc); Charcount read_process_output (Lisp_Object proc, int read_stderr); int process_has_separate_stderr (Lisp_Object proc); const char *signal_name (int signum); Lisp_Object canonicalize_host_name (Lisp_Object host); END_C_DECLS /* The name of the file open to get a null file, or a data sink. MS-DOS, and OS/2 redefine this. */ #ifndef NULL_DEVICE #define NULL_DEVICE "/dev/null" #endif /* A string listing the possible suffixes used for executable files, separated by colons. MS-DOS, and OS/2 redefine this. */ #ifndef EXEC_SUFFIXES #define EXEC_SUFFIXES "" #endif #endif /* INCLUDED_process_h_ */