view src/opaque.h @ 5371:6f10ac29bf40

Be better about searching for chars typed via XIM and x-compose.el, isearch lisp/ChangeLog addition: 2011-03-12 Aidan Kehoe <kehoea@parhasard.net> * isearch-mode.el (isearch-mode-map): Document why we bind the ASCII characters to isearch-printing-char in more detail. * isearch-mode.el (isearch-maybe-frob-keyboard-macros): If `this-command' is nil and the keys typed would normally be bound to `self-insert-command' in the global map, force `isearch-printing-char' to be called with an appropriate value for last-command-event. Addresses an issue where searching for characters generated from x-compose.el and XIM threw errors for me in dired. src/ChangeLog addition: 2011-03-12 Aidan Kehoe <kehoea@parhasard.net> * event-stream.c (Fdispatch_event): As documented, allow pre-command-hook to usefully modify this-command even when this-command is nil (that is, we would normally throw an undefined-keystroke-sequence error). Don't throw that error if this-command was modified, instead try to execute the new value. Allow pre-command-hook to modify last-command-event in this specific context. Don't document this, for the moment.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 12 Mar 2011 13:11:31 +0000
parents a9c41067dd88
children 308d34e9f07d
line wrap: on
line source

/* Opaque Lisp objects.
   Copyright (C) 1993 Sun Microsystems, Inc.
   Copyright (C) 1995, 1996 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 2, 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; see the file COPYING.  If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.  */

/* Synched up with: Not in FSF. */

/* Written by Ben Wing, October 1993. */

#ifndef INCLUDED_opaque_h_
#define INCLUDED_opaque_h_

typedef struct Lisp_Opaque
{
  NORMAL_LISP_OBJECT_HEADER header;
  Bytecount size;
  max_align_t data[1];
} Lisp_Opaque;

DECLARE_LISP_OBJECT (opaque, Lisp_Opaque);
#define XOPAQUE(x) XRECORD (x, opaque, Lisp_Opaque)
#define wrap_opaque(p) wrap_record (p, opaque)
#define OPAQUEP(x) RECORDP (x, opaque)
/* #define CHECK_OPAQUE(x) CHECK_RECORD (x, opaque)
   Opaque pointers should never escape to the Lisp level, so
   functions should not be doing this. */

/* Alternative DATA arguments to make_opaque() */
#define OPAQUE_CLEAR  ((const void *)  0)
#define OPAQUE_UNINIT ((const void *) -1)

#define OPAQUE_SIZE(op) ((op)->size)
#define OPAQUE_DATA(op) ((void *) ((op)->data))
#define XOPAQUE_SIZE(op) OPAQUE_SIZE (XOPAQUE (op))
#define XOPAQUE_DATA(op) OPAQUE_DATA (XOPAQUE (op))

Lisp_Object make_opaque (const void *data, Bytecount size);

typedef struct Lisp_Opaque_Ptr
{
  NORMAL_LISP_OBJECT_HEADER header;
  void *ptr;
} Lisp_Opaque_Ptr;

DECLARE_LISP_OBJECT (opaque_ptr, Lisp_Opaque_Ptr);
#define XOPAQUE_PTR(x) XRECORD (x, opaque_ptr, Lisp_Opaque_Ptr)
#define wrap_opaque_ptr(p) wrap_record (p, opaque_ptr)
#define OPAQUE_PTRP(x) RECORDP (x, opaque_ptr)

EXTERN_C MODULE_API Lisp_Object make_opaque_ptr (void *val);
EXTERN_C MODULE_API void free_opaque_ptr (Lisp_Object ptr);

#define get_opaque_ptr(op) (XOPAQUE_PTR (op)->ptr)
#define set_opaque_ptr(op, ptr_) (XOPAQUE_PTR (op)->ptr = (ptr_))

#endif /* INCLUDED_opaque_h_ */