view src/blockinput.h @ 76136:4aa6d6384e7d

(org-table-overlay-coordinates) (org-table-toggle-coordinate-overlays): New functions. (org-table-overlay-coordinates, org-table-coordinate-overlays): New variables. (org-startup-with-deadline-check): Option removed. (org-mode): Remove deadline check on startup. (org-table-limit-column-width): Option removed. (org-table-formula-numbers-only): Option removed. (org-link-style, org-link-format): Options removed. (org-select-agenda-window, org-fit-agenda-window): Options removed. (org-export-ascii-show-new-buffer) (org-export-html-show-new-buffer): Options removed. (org-activate-links): Camel option removed. (org-file-link-context-use-camel-case): Option removed. (org-camel-regexp): Veriable removed. (org-activate-camels): Function removed. (org-store-link): Removed Camel stuff. (org-make-org-heading-camel): Function removed. (org-open-at-point): Removed camel stuff. (org-link-search): Removed camel stuff. (org-camel-to-words): Function removed. (org-get-agenda-file-buffer): Make sure we prepare the base buffers, not any indirect buffers. (org-sort-entries): Sort top-level when not on a headline, and no active region. (org-in-regexp): New function. (org-search-not-self): Renamed from `org-search-not-link'. (org-open-link-marker): New variable. (org-open-at-point): Set `org-open-link-marker'. (org-print-icalendar-entries): Fixed bug with excluding DONE entries from the exported list. (org-edit-formula-lisp-indent): New command. (orgtbl-to-texinfo, orgtbl-to-html): New functions. (orgtbl-to-latex, orgtbl-insert-radio-table) (orgtbl-toggle-comment, orgtbl-send-table): New functions. (orgtbl-radio-table-templates): New option. (org-store-link-props): (org-remember-templates): More possibilities to insert info into templates. (org-remember-apply-template): Make use of the extended template capabilities. (org-remember-redo-template): New command. (org-upgrade-old-links) (org-table-modify-formulas, org-table-replace-in-formulas) (org-table-find-dataline) (org-table-get-vertical-vector): Functions removed. (org-table-remove-rectangle-highlight) (org-time-stamp-format, org-toggle-log-option) (org-table-highlight-rectangle) (org-table-iterate, org-table-make-reference): (org-translate-time, org-tree-to-indirect-buffer) (org-table-field-info, org-table-fix-formulas) (org-table-force-dataline, org-table-get-descriptor-line) (org-table-get-range) (org-skip-comments, org-sort) (org-sort-entries, org-sublist, org-table-add-rectangle-overlay) (org-table-current-dline, org-table-current-field-formula) (org-table-edit-backward-field) (org-table-edit-formulas-post-command) (org-table-edit-line-down, org-table-edit-line-up) (org-agenda-archive) (org-agenda-clock-cancel) (org-agenda-clock-out, org-agenda-list-stuck-projects) (org-agenda-open-link, org-agenda-show-new-time) (org-agenda-skip-subtree-when-regexp-matches) (org-agenda-tree-to-indirect-buffer, org-agenda-undo) (org-at-regexp-p, org-auto-repeat-maybe, org-check-log-option) (org-do-sort, org-file-image-p, org-find-overlays) (org-find-row-type, org-get-indirect-buffer, org-get-repeat) (org-highlight-until-next-command, org-isearch-end) (org-match-any-p, org-next-link, org-previous-link): (org-remove-subtree-entries-from-agenda, org-replace-escapes) (org-rewrite-old-row-references) (org-isearch-post-command) (org-table-edit-move, org-table-edit-next-field) (org-table-edit-scroll, org-table-edit-scroll-down) (org-set-frame-title, org-show-reference) (org-unhighlight-once, org-verify-change-for-undo): New functions. (org-show-variable): Command removed. (org-add-log-maybe): New arguments STATE, FINDPOS (org-table-sort-lines): Rewritten from scratch. (org-link-search): New argument AVOID-POS. (org-print-icalendar-entries): Argument CATEGORY removed. (org-run-agenda-series): Argument WONDOW removed. (org-next-link, org-previous-link): New commands. (org-agenda-date-format): New option. (org-table-iterate): New command. (org-table-modify-formulas) (org-table-replace-in-formulas): Functions removed. (org-table-fix-formulas): New function. (org-table-insert-column, org-table-delete-column) (org-table-move-column): Use `org-table-fix-formulas'. (org-follow-gnus-link): Patch from Bastien/Leo. (org-table-current-field-formula): New function. (org-file-image-p): New function. (org-agenda-show-new-time): New function. (org-agenda-date-later): Call `org-agenda-show-new-time'. (org-with-remote-undo): New macro. (org-agenda-undo): New command. (org-verify-change-for-undo): New function. (org-time-stamp-format): New function. (org-agenda-get-timestamps): Skip scheduled if DONE and requested by user. (org-match-any-p): New function. (org-make-tags-matcher): Handle regular expressions for tag and todo matches. (org-read-date): Accept "+N" as input for a date relative to the current date. (org-remove-subtree-entries-from-agenda): New function. (org-agenda-archive, org-agenda-kill): Use `org-remove-subtree-entries-from-agenda'. (org-do-sort, org-sort-entries): New functions. (org-sort): New command. (org-table-sort-lines): Use `org-do-sort'. (org-fix-decoded-time): New function. (org-table-number-regexp): Require 0x... to identify as number in tables. (org-startup-options): New keywords for note taking. (org-upgrade-old-links): Function removed. (org-get-repeat): New function. (org-show-context): Also show siblings on current level. (org-show-siblings): New function. (org-isearch-end, org-isearch-post-command): New functions. (org-show-siblings): New option. (org-show-context): Use `org-show-siblings'. (org-table-maybe-recalculate-line): No longer require `calc-eval' to be bound, because user may just use elisp.
author Carsten Dominik <dominik@science.uva.nl>
date Sun, 25 Feb 2007 06:39:11 +0000
parents 205d5c1af245
children 922696f363b0 f83d17e1ace6
line wrap: on
line source

/* blockinput.h - interface to blocking complicated interrupt-driven input.
   Copyright (C) 1989, 1993, 2001, 2002, 2003, 2004,
                 2005, 2006, 2007  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 2, 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; see the file COPYING.  If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.  */

#ifndef EMACS_BLOCKINPUT_H
#define EMACS_BLOCKINPUT_H

#include "atimer.h"

/* When Emacs is using signal-driven input, the processing of those
   input signals can get pretty hairy.  For example, when Emacs is
   running under X windows, handling an input signal can entail
   retrieving events from the X event queue, or making other X calls.

   If an input signal occurs while Emacs is in the midst of some
   non-reentrant code, and the signal processing invokes that same
   code, we lose.  For example, malloc and the Xlib functions aren't
   usually re-entrant, and both are used by the X input signal handler
   - if we try to process an input signal in the midst of executing
   any of these functions, we'll lose.

   To avoid this, we make the following requirements:

   * Everyone must evaluate BLOCK_INPUT before entering these functions,
   and then call UNBLOCK_INPUT after performing them.  Calls
   BLOCK_INPUT and UNBLOCK_INPUT may be nested.

   * Any complicated interrupt handling code should test
   interrupt_input_blocked, and put off its work until later.

   * If the interrupt handling code wishes, it may set
   interrupt_input_pending to a non-zero value.  If that flag is set
   when input becomes unblocked, UNBLOCK_INPUT will send a new SIGIO.  */

extern volatile int interrupt_input_blocked;

/* Nonzero means an input interrupt has arrived
   during the current critical section.  */
extern int interrupt_input_pending;


/* Non-zero means asynchronous timers should be run when input is
   unblocked.  */

extern int pending_atimers;

/* Begin critical section. */
#define BLOCK_INPUT (interrupt_input_blocked++)

/* End critical section.

   If doing signal-driven input, and a signal came in when input was
   blocked, reinvoke the signal handler now to deal with it.

   We used to have two possible definitions of this macro - one for
   when SIGIO was #defined, and one for when it wasn't; when SIGIO
   wasn't #defined, we wouldn't bother to check if we should re-invoke
   the signal handler.  But that doesn't work very well; some of the
   files which use this macro don't #include the right files to get
   SIGIO.

   So, we always test interrupt_input_pending now; that's not too
   expensive, and it'll never get set if we don't need to resignal.  */

#define UNBLOCK_INPUT 				\
  do						\
    {						\
      --interrupt_input_blocked;		\
      if (interrupt_input_blocked == 0)		\
	{					\
	  if (interrupt_input_pending)		\
	    reinvoke_input_signal ();		\
	  if (pending_atimers)			\
	    do_pending_atimers ();		\
	}					\
      else if (interrupt_input_blocked < 0)	\
	abort ();				\
    }						\
  while (0)

/* Undo any number of BLOCK_INPUT calls,
   and also reinvoke any pending signal.  */

#define TOTALLY_UNBLOCK_INPUT			\
  do if (interrupt_input_blocked != 0)		\
    {						\
      interrupt_input_blocked = 1;		\
      UNBLOCK_INPUT;				\
    }						\
  while (0)

/* Undo any number of BLOCK_INPUT calls down to level LEVEL,
   and also (if the level is now 0) reinvoke any pending signal.  */

#define UNBLOCK_INPUT_TO(LEVEL)				\
  do							\
    {							\
      interrupt_input_blocked = (LEVEL) + 1;		\
      UNBLOCK_INPUT;					\
    }							\
  while (0)

#define UNBLOCK_INPUT_RESIGNAL UNBLOCK_INPUT

/* In critical section ? */
#define INPUT_BLOCKED_P (interrupt_input_blocked > 0)

/* Defined in keyboard.c */
/* Don't use a prototype here; it causes trouble in some files.  */
extern void reinvoke_input_signal ();

#endif /* EMACS_BLOCKINPUT_H */

/* arch-tag: 51a9ec86-945a-4966-8f04-2d1341250e03
   (do not change this comment) */