#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \
|| defined(HAVE_NS) || defined (USE_GTK)
-extern void set_frame_menubar P_ ((struct frame *f, int, int));
+extern void set_frame_menubar (struct frame *f, int, int);
extern int pending_menu_activation;
#endif
/* A handler function called to set up iterator IT from the property
at IT's current position. Value is used to steer handle_stop. */
- enum prop_handled (*handler) P_ ((struct it *it));
+ enum prop_handled (*handler) (struct it *it);
};
-static enum prop_handled handle_face_prop P_ ((struct it *));
-static enum prop_handled handle_invisible_prop P_ ((struct it *));
-static enum prop_handled handle_display_prop P_ ((struct it *));
-static enum prop_handled handle_composition_prop P_ ((struct it *));
-static enum prop_handled handle_overlay_change P_ ((struct it *));
-static enum prop_handled handle_fontified_prop P_ ((struct it *));
+static enum prop_handled handle_face_prop (struct it *);
+static enum prop_handled handle_invisible_prop (struct it *);
+static enum prop_handled handle_display_prop (struct it *);
+static enum prop_handled handle_composition_prop (struct it *);
+static enum prop_handled handle_overlay_change (struct it *);
+static enum prop_handled handle_fontified_prop (struct it *);
/* Properties handled by iterators. */
\f
/* Function prototypes. */
-static void setup_for_ellipsis P_ ((struct it *, int));
-static void mark_window_display_accurate_1 P_ ((struct window *, int));
-static int single_display_spec_string_p P_ ((Lisp_Object, Lisp_Object));
-static int display_prop_string_p P_ ((Lisp_Object, Lisp_Object));
-static int cursor_row_p P_ ((struct window *, struct glyph_row *));
-static int redisplay_mode_lines P_ ((Lisp_Object, int));
-static char *decode_mode_spec_coding P_ ((Lisp_Object, char *, int));
-
-static Lisp_Object get_it_property P_ ((struct it *it, Lisp_Object prop));
-
-static void handle_line_prefix P_ ((struct it *));
-
-static void pint2str P_ ((char *, int, int));
-static void pint2hrstr P_ ((char *, int, int));
-static struct text_pos run_window_scroll_functions P_ ((Lisp_Object,
- struct text_pos));
-static void reconsider_clip_changes P_ ((struct window *, struct buffer *));
-static int text_outside_line_unchanged_p P_ ((struct window *, int, int));
-static void store_mode_line_noprop_char P_ ((char));
-static int store_mode_line_noprop P_ ((const unsigned char *, int, int));
-static void x_consider_frame_title P_ ((Lisp_Object));
-static void handle_stop P_ ((struct it *));
-static void handle_stop_backwards P_ ((struct it *, EMACS_INT));
-static int tool_bar_lines_needed P_ ((struct frame *, int *));
-static int single_display_spec_intangible_p P_ ((Lisp_Object));
-static void ensure_echo_area_buffers P_ ((void));
-static Lisp_Object unwind_with_echo_area_buffer P_ ((Lisp_Object));
-static Lisp_Object with_echo_area_buffer_unwind_data P_ ((struct window *));
-static int with_echo_area_buffer P_ ((struct window *, int,
- int (*) (EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT),
- EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT));
-static void clear_garbaged_frames P_ ((void));
-static int current_message_1 P_ ((EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT));
-static int truncate_message_1 P_ ((EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT));
-static int set_message_1 P_ ((EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT));
-static int display_echo_area P_ ((struct window *));
-static int display_echo_area_1 P_ ((EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT));
-static int resize_mini_window_1 P_ ((EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT));
-static Lisp_Object unwind_redisplay P_ ((Lisp_Object));
-static int string_char_and_length P_ ((const unsigned char *, int *));
-static struct text_pos display_prop_end P_ ((struct it *, Lisp_Object,
- struct text_pos));
-static int compute_window_start_on_continuation_line P_ ((struct window *));
-static Lisp_Object safe_eval_handler P_ ((Lisp_Object));
-static void insert_left_trunc_glyphs P_ ((struct it *));
-static struct glyph_row *get_overlay_arrow_glyph_row P_ ((struct window *,
- Lisp_Object));
-static void extend_face_to_end_of_line P_ ((struct it *));
-static int append_space_for_newline P_ ((struct it *, int));
-static int cursor_row_fully_visible_p P_ ((struct window *, int, int));
-static int try_scrolling P_ ((Lisp_Object, int, EMACS_INT, EMACS_INT, int, int));
-static int try_cursor_movement P_ ((Lisp_Object, struct text_pos, int *));
-static int trailing_whitespace_p P_ ((int));
-static int message_log_check_duplicate P_ ((int, int, int, int));
-static void push_it P_ ((struct it *));
-static void pop_it P_ ((struct it *));
-static void sync_frame_with_window_matrix_rows P_ ((struct window *));
-static void select_frame_for_redisplay P_ ((Lisp_Object));
-static void redisplay_internal P_ ((int));
-static int echo_area_display P_ ((int));
-static void redisplay_windows P_ ((Lisp_Object));
-static void redisplay_window P_ ((Lisp_Object, int));
-static Lisp_Object redisplay_window_error ();
-static Lisp_Object redisplay_window_0 P_ ((Lisp_Object));
-static Lisp_Object redisplay_window_1 P_ ((Lisp_Object));
-static int update_menu_bar P_ ((struct frame *, int, int));
-static int try_window_reusing_current_matrix P_ ((struct window *));
-static int try_window_id P_ ((struct window *));
-static int display_line P_ ((struct it *));
-static int display_mode_lines P_ ((struct window *));
-static int display_mode_line P_ ((struct window *, enum face_id, Lisp_Object));
-static int display_mode_element P_ ((struct it *, int, int, int, Lisp_Object, Lisp_Object, int));
-static int store_mode_line_string P_ ((char *, Lisp_Object, int, int, int, Lisp_Object));
-static char *decode_mode_spec P_ ((struct window *, int, int, int,
- Lisp_Object *));
-static void display_menu_bar P_ ((struct window *));
-static int display_count_lines P_ ((int, int, int, int, int *));
-static int display_string P_ ((unsigned char *, Lisp_Object, Lisp_Object,
- EMACS_INT, EMACS_INT, struct it *, int, int, int, int));
-static void compute_line_metrics P_ ((struct it *));
-static void run_redisplay_end_trigger_hook P_ ((struct it *));
-static int get_overlay_strings P_ ((struct it *, int));
-static int get_overlay_strings_1 P_ ((struct it *, int, int));
-static void next_overlay_string P_ ((struct it *));
-static void reseat P_ ((struct it *, struct text_pos, int));
-static void reseat_1 P_ ((struct it *, struct text_pos, int));
-static void back_to_previous_visible_line_start P_ ((struct it *));
-void reseat_at_previous_visible_line_start P_ ((struct it *));
-static void reseat_at_next_visible_line_start P_ ((struct it *, int));
-static int next_element_from_ellipsis P_ ((struct it *));
-static int next_element_from_display_vector P_ ((struct it *));
-static int next_element_from_string P_ ((struct it *));
-static int next_element_from_c_string P_ ((struct it *));
-static int next_element_from_buffer P_ ((struct it *));
-static int next_element_from_composition P_ ((struct it *));
-static int next_element_from_image P_ ((struct it *));
-static int next_element_from_stretch P_ ((struct it *));
-static void load_overlay_strings P_ ((struct it *, int));
-static int init_from_display_pos P_ ((struct it *, struct window *,
- struct display_pos *));
-static void reseat_to_string P_ ((struct it *, unsigned char *,
- Lisp_Object, int, int, int, int));
+static void setup_for_ellipsis (struct it *, int);
+static void mark_window_display_accurate_1 (struct window *, int);
+static int single_display_spec_string_p (Lisp_Object, Lisp_Object);
+static int display_prop_string_p (Lisp_Object, Lisp_Object);
+static int cursor_row_p (struct window *, struct glyph_row *);
+static int redisplay_mode_lines (Lisp_Object, int);
+static char *decode_mode_spec_coding (Lisp_Object, char *, int);
+
+static Lisp_Object get_it_property (struct it *it, Lisp_Object prop);
+
+static void handle_line_prefix (struct it *);
+
+static void pint2str (char *, int, int);
+static void pint2hrstr (char *, int, int);
+static struct text_pos run_window_scroll_functions (Lisp_Object,
+ struct text_pos);
+static void reconsider_clip_changes (struct window *, struct buffer *);
+static int text_outside_line_unchanged_p (struct window *, int, int);
+static void store_mode_line_noprop_char (char);
+static int store_mode_line_noprop (const unsigned char *, int, int);
+static void x_consider_frame_title (Lisp_Object);
+static void handle_stop (struct it *);
+static void handle_stop_backwards (struct it *, EMACS_INT);
+static int tool_bar_lines_needed (struct frame *, int *);
+static int single_display_spec_intangible_p (Lisp_Object);
+static void ensure_echo_area_buffers (void);
+static Lisp_Object unwind_with_echo_area_buffer (Lisp_Object);
+static Lisp_Object with_echo_area_buffer_unwind_data (struct window *);
+static int with_echo_area_buffer (struct window *, int,
+ int (*) (EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT),
+ EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT);
+static void clear_garbaged_frames (void);
+static int current_message_1 (EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT);
+static int truncate_message_1 (EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT);
+static int set_message_1 (EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT);
+static int display_echo_area (struct window *);
+static int display_echo_area_1 (EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT);
+static int resize_mini_window_1 (EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT);
+static Lisp_Object unwind_redisplay (Lisp_Object);
+static int string_char_and_length (const unsigned char *, int *);
+static struct text_pos display_prop_end (struct it *, Lisp_Object,
+ struct text_pos);
+static int compute_window_start_on_continuation_line (struct window *);
+static Lisp_Object safe_eval_handler (Lisp_Object);
+static void insert_left_trunc_glyphs (struct it *);
+static struct glyph_row *get_overlay_arrow_glyph_row (struct window *,
+ Lisp_Object);
+static void extend_face_to_end_of_line (struct it *);
+static int append_space_for_newline (struct it *, int);
+static int cursor_row_fully_visible_p (struct window *, int, int);
+static int try_scrolling (Lisp_Object, int, EMACS_INT, EMACS_INT, int, int);
+static int try_cursor_movement (Lisp_Object, struct text_pos, int *);
+static int trailing_whitespace_p (int);
+static int message_log_check_duplicate (int, int, int, int);
+static void push_it (struct it *);
+static void pop_it (struct it *);
+static void sync_frame_with_window_matrix_rows (struct window *);
+static void select_frame_for_redisplay (Lisp_Object);
+static void redisplay_internal (int);
+static int echo_area_display (int);
+static void redisplay_windows (Lisp_Object);
+static void redisplay_window (Lisp_Object, int);
+static Lisp_Object redisplay_window_error (Lisp_Object);
+static Lisp_Object redisplay_window_0 (Lisp_Object);
+static Lisp_Object redisplay_window_1 (Lisp_Object);
+static int update_menu_bar (struct frame *, int, int);
+static int try_window_reusing_current_matrix (struct window *);
+static int try_window_id (struct window *);
+static int display_line (struct it *);
+static int display_mode_lines (struct window *);
+static int display_mode_line (struct window *, enum face_id, Lisp_Object);
+static int display_mode_element (struct it *, int, int, int, Lisp_Object, Lisp_Object, int);
+static int store_mode_line_string (char *, Lisp_Object, int, int, int, Lisp_Object);
+static char *decode_mode_spec (struct window *, int, int, int,
+ Lisp_Object *);
+static void display_menu_bar (struct window *);
+static int display_count_lines (int, int, int, int, int *);
+static int display_string (unsigned char *, Lisp_Object, Lisp_Object,
+ EMACS_INT, EMACS_INT, struct it *, int, int, int, int);
+static void compute_line_metrics (struct it *);
+static void run_redisplay_end_trigger_hook (struct it *);
+static int get_overlay_strings (struct it *, int);
+static int get_overlay_strings_1 (struct it *, int, int);
+static void next_overlay_string (struct it *);
+static void reseat (struct it *, struct text_pos, int);
+static void reseat_1 (struct it *, struct text_pos, int);
+static void back_to_previous_visible_line_start (struct it *);
+void reseat_at_previous_visible_line_start (struct it *);
+static void reseat_at_next_visible_line_start (struct it *, int);
+static int next_element_from_ellipsis (struct it *);
+static int next_element_from_display_vector (struct it *);
+static int next_element_from_string (struct it *);
+static int next_element_from_c_string (struct it *);
+static int next_element_from_buffer (struct it *);
+static int next_element_from_composition (struct it *);
+static int next_element_from_image (struct it *);
+static int next_element_from_stretch (struct it *);
+static void load_overlay_strings (struct it *, int);
+static int init_from_display_pos (struct it *, struct window *,
+ struct display_pos *);
+static void reseat_to_string (struct it *, unsigned char *,
+ Lisp_Object, int, int, int, int);
static enum move_it_result
move_it_in_display_line_to (struct it *, EMACS_INT, int,
enum move_operation_enum);
-void move_it_vertically_backward P_ ((struct it *, int));
-static void init_to_row_start P_ ((struct it *, struct window *,
- struct glyph_row *));
-static int init_to_row_end P_ ((struct it *, struct window *,
- struct glyph_row *));
-static void back_to_previous_line_start P_ ((struct it *));
-static int forward_to_next_line_start P_ ((struct it *, int *));
-static struct text_pos string_pos_nchars_ahead P_ ((struct text_pos,
- Lisp_Object, int));
-static struct text_pos string_pos P_ ((int, Lisp_Object));
-static struct text_pos c_string_pos P_ ((int, unsigned char *, int));
-static int number_of_chars P_ ((unsigned char *, int));
-static void compute_stop_pos P_ ((struct it *));
-static void compute_string_pos P_ ((struct text_pos *, struct text_pos,
- Lisp_Object));
-static int face_before_or_after_it_pos P_ ((struct it *, int));
-static EMACS_INT next_overlay_change P_ ((EMACS_INT));
-static int handle_single_display_spec P_ ((struct it *, Lisp_Object,
- Lisp_Object, Lisp_Object,
- struct text_pos *, int));
-static int underlying_face_id P_ ((struct it *));
-static int in_ellipses_for_invisible_text_p P_ ((struct display_pos *,
- struct window *));
+void move_it_vertically_backward (struct it *, int);
+static void init_to_row_start (struct it *, struct window *,
+ struct glyph_row *);
+static int init_to_row_end (struct it *, struct window *,
+ struct glyph_row *);
+static void back_to_previous_line_start (struct it *);
+static int forward_to_next_line_start (struct it *, int *);
+static struct text_pos string_pos_nchars_ahead (struct text_pos,
+ Lisp_Object, int);
+static struct text_pos string_pos (int, Lisp_Object);
+static struct text_pos c_string_pos (int, unsigned char *, int);
+static int number_of_chars (unsigned char *, int);
+static void compute_stop_pos (struct it *);
+static void compute_string_pos (struct text_pos *, struct text_pos,
+ Lisp_Object);
+static int face_before_or_after_it_pos (struct it *, int);
+static EMACS_INT next_overlay_change (EMACS_INT);
+static int handle_single_display_spec (struct it *, Lisp_Object,
+ Lisp_Object, Lisp_Object,
+ struct text_pos *, int);
+static int underlying_face_id (struct it *);
+static int in_ellipses_for_invisible_text_p (struct display_pos *,
+ struct window *);
#define face_before_it_pos(IT) face_before_or_after_it_pos ((IT), 1)
#define face_after_it_pos(IT) face_before_or_after_it_pos ((IT), 0)
#ifdef HAVE_WINDOW_SYSTEM
-static void update_tool_bar P_ ((struct frame *, int));
-static void build_desired_tool_bar_string P_ ((struct frame *f));
-static int redisplay_tool_bar P_ ((struct frame *));
-static void display_tool_bar_line P_ ((struct it *, int));
-static void notice_overwritten_cursor P_ ((struct window *,
- enum glyph_row_area,
- int, int, int, int));
-static void append_stretch_glyph P_ ((struct it *, Lisp_Object,
- int, int, int));
+static void update_tool_bar (struct frame *, int);
+static void build_desired_tool_bar_string (struct frame *f);
+static int redisplay_tool_bar (struct frame *);
+static void display_tool_bar_line (struct it *, int);
+static void notice_overwritten_cursor (struct window *,
+ enum glyph_row_area,
+ int, int, int, int);
+static void append_stretch_glyph (struct it *, Lisp_Object,
+ int, int, int);
This is the height of W minus the height of a mode line, if any. */
INLINE int
-window_text_bottom_y (w)
- struct window *w;
+window_text_bottom_y (struct window *w)
{
int height = WINDOW_TOTAL_HEIGHT (w);
the left and right of the window. */
INLINE int
-window_box_width (w, area)
- struct window *w;
- int area;
+window_box_width (struct window *w, int area)
{
int cols = XFASTINT (w->total_cols);
int pixels = 0;
including mode lines of W, if any. */
INLINE int
-window_box_height (w)
- struct window *w;
+window_box_height (struct window *w)
{
struct frame *f = XFRAME (w->frame);
int height = WINDOW_TOTAL_HEIGHT (w);
whole window, to the right of the left fringe of W. */
INLINE int
-window_box_left_offset (w, area)
- struct window *w;
- int area;
+window_box_left_offset (struct window *w, int area)
{
int x;
whole window, to the left of the right fringe of W. */
INLINE int
-window_box_right_offset (w, area)
- struct window *w;
- int area;
+window_box_right_offset (struct window *w, int area)
{
return window_box_left_offset (w, area) + window_box_width (w, area);
}
whole window, to the right of the left fringe of W. */
INLINE int
-window_box_left (w, area)
- struct window *w;
- int area;
+window_box_left (struct window *w, int area)
{
struct frame *f = XFRAME (w->frame);
int x;
whole window, to the left of the right fringe of W. */
INLINE int
-window_box_right (w, area)
- struct window *w;
- int area;
+window_box_right (struct window *w, int area)
{
return window_box_left (w, area) + window_box_width (w, area);
}
*BOX_WIDTH, and *BOX_HEIGHT the pixel width and height of the box. */
INLINE void
-window_box (w, area, box_x, box_y, box_width, box_height)
- struct window *w;
- int area;
- int *box_x, *box_y, *box_width, *box_height;
+window_box (struct window *w, int area, int *box_x, int *box_y,
+ int *box_width, int *box_height)
{
if (box_width)
*box_width = window_box_width (w, area);
This can modify IT's settings. */
int
-line_bottom_y (it)
- struct it *it;
+line_bottom_y (struct it *it)
{
int line_height = it->max_ascent + it->max_descent;
int line_top_y = it->current_y;
Set *ROWH and *VPOS to row's visible height and VPOS (row number). */
int
-pos_visible_p (w, charpos, x, y, rtop, rbot, rowh, vpos)
- struct window *w;
- int charpos, *x, *y, *rtop, *rbot, *rowh, *vpos;
+pos_visible_p (struct window *w, int charpos, int *x, int *y,
+ int *rtop, int *rbot, int *rowh, int *vpos)
{
struct it it;
struct text_pos top;
character. */
static INLINE int
-string_char_and_length (str, len)
- const unsigned char *str;
- int *len;
+string_char_and_length (const unsigned char *str, int *len)
{
int c;
in STRING, return the position NCHARS ahead (NCHARS >= 0). */
static struct text_pos
-string_pos_nchars_ahead (pos, string, nchars)
- struct text_pos pos;
- Lisp_Object string;
- int nchars;
+string_pos_nchars_ahead (struct text_pos pos, Lisp_Object string, int nchars)
{
xassert (STRINGP (string) && nchars >= 0);
for character position CHARPOS in STRING. */
static INLINE struct text_pos
-string_pos (charpos, string)
- int charpos;
- Lisp_Object string;
+string_pos (int charpos, Lisp_Object string)
{
struct text_pos pos;
xassert (STRINGP (string));
means recognize multibyte characters. */
static struct text_pos
-c_string_pos (charpos, s, multibyte_p)
- int charpos;
- unsigned char *s;
- int multibyte_p;
+c_string_pos (int charpos, unsigned char *s, int multibyte_p)
{
struct text_pos pos;
non-zero means recognize multibyte characters. */
static int
-number_of_chars (s, multibyte_p)
- unsigned char *s;
- int multibyte_p;
+number_of_chars (unsigned char *s, int multibyte_p)
{
int nchars;
NEWPOS->charpos must be >= POS.charpos. */
static void
-compute_string_pos (newpos, pos, string)
- struct text_pos *newpos, pos;
- Lisp_Object string;
+compute_string_pos (struct text_pos *newpos, struct text_pos pos, Lisp_Object string)
{
xassert (STRINGP (string));
xassert (CHARPOS (*newpos) >= CHARPOS (pos));
frame F. FACE_ID specifies what line's height to estimate. */
int
-estimate_mode_line_height (f, face_id)
- struct frame *f;
- enum face_id face_id;
+estimate_mode_line_height (struct frame *f, enum face_id face_id)
{
#ifdef HAVE_WINDOW_SYSTEM
if (FRAME_WINDOW_P (f))
not force the value into range. */
void
-pixel_to_glyph_coords (f, pix_x, pix_y, x, y, bounds, noclip)
- FRAME_PTR f;
- register int pix_x, pix_y;
- int *x, *y;
- NativeRectangle *bounds;
- int noclip;
+pixel_to_glyph_coords (FRAME_PTR f, register int pix_x, register int pix_y,
+ int *x, int *y, NativeRectangle *bounds, int noclip)
{
#ifdef HAVE_WINDOW_SYSTEM
return 0. */
int
-glyph_to_pixel_coords (w, hpos, vpos, frame_x, frame_y)
- struct window *w;
- int hpos, vpos;
- int *frame_x, *frame_y;
+glyph_to_pixel_coords (struct window *w, int hpos, int vpos,
+ int *frame_x, int *frame_y)
{
#ifdef HAVE_WINDOW_SYSTEM
if (FRAME_WINDOW_P (XFRAME (WINDOW_FRAME (w))))
static
struct glyph *
-x_y_to_hpos_vpos (w, x, y, hpos, vpos, dx, dy, area)
- struct window *w;
- int x, y;
- int *hpos, *vpos, *dx, *dy, *area;
+x_y_to_hpos_vpos (struct window *w, int x, int y, int *hpos, int *vpos,
+ int *dx, int *dy, int *area)
{
struct glyph *glyph, *end;
struct glyph_row *row = NULL;
Takes pseudo-windows into account. */
void
-frame_to_window_pixel_xy (w, x, y)
- struct window *w;
- int *x, *y;
+frame_to_window_pixel_xy (struct window *w, int *x, int *y)
{
if (w->pseudo_window_p)
{
Return the number of stored rectangles. */
int
-get_glyph_string_clip_rects (s, rects, n)
- struct glyph_string *s;
- NativeRectangle *rects;
- int n;
+get_glyph_string_clip_rects (struct glyph_string *s, NativeRectangle *rects, int n)
{
XRectangle r;
Return in *NR the clipping rectangle for glyph string S. */
void
-get_glyph_string_clip_rect (s, nr)
- struct glyph_string *s;
- NativeRectangle *nr;
+get_glyph_string_clip_rect (struct glyph_string *s, NativeRectangle *nr)
{
get_glyph_string_clip_rects (s, nr, 1);
}
*/
void
-get_phys_cursor_geometry (w, row, glyph, xp, yp, heightp)
- struct window *w;
- struct glyph_row *row;
- struct glyph *glyph;
- int *xp, *yp, *heightp;
+get_phys_cursor_geometry (struct window *w, struct glyph_row *row,
+ struct glyph *glyph, int *xp, int *yp, int *heightp)
{
struct frame *f = XFRAME (WINDOW_FRAME (w));
int x, y, wd, h, h0, y0;
*/
void
-remember_mouse_glyph (f, gx, gy, rect)
- struct frame *f;
- int gx, gy;
- NativeRectangle *rect;
+remember_mouse_glyph (struct frame *f, int gx, int gy, NativeRectangle *rect)
{
Lisp_Object window;
struct window *w;
/* Error handler for safe_eval and safe_call. */
static Lisp_Object
-safe_eval_handler (arg)
- Lisp_Object arg;
+safe_eval_handler (Lisp_Object arg)
{
add_to_log ("Error during redisplay: %s", arg, Qnil);
return Qnil;
redisplay during the evaluation. */
Lisp_Object
-safe_call (nargs, args)
- int nargs;
- Lisp_Object *args;
+safe_call (int nargs, Lisp_Object *args)
{
Lisp_Object val;
Return the result, or nil if something went wrong. */
Lisp_Object
-safe_call1 (fn, arg)
- Lisp_Object fn, arg;
+safe_call1 (Lisp_Object fn, Lisp_Object arg)
{
Lisp_Object args[2];
args[0] = fn;
the desired matrix of W. */
void
-init_iterator (it, w, charpos, bytepos, row, base_face_id)
- struct it *it;
- struct window *w;
- EMACS_INT charpos, bytepos;
- struct glyph_row *row;
- enum face_id base_face_id;
+init_iterator (struct it *it, struct window *w,
+ EMACS_INT charpos, EMACS_INT bytepos,
+ struct glyph_row *row, enum face_id base_face_id)
{
int highlight_region_p;
enum face_id remapped_base_face_id = base_face_id;
}
/* Clear IT. */
- bzero (it, sizeof *it);
+ memset (it, 0, sizeof *it);
it->current.overlay_string_index = -1;
it->current.dpvec_index = -1;
it->base_face_id = remapped_base_face_id;
/* Initialize IT for the display of window W with window start POS. */
void
-start_display (it, w, pos)
- struct it *it;
- struct window *w;
- struct text_pos pos;
+start_display (struct it *it, struct window *w, struct text_pos pos)
{
struct glyph_row *row;
int first_vpos = WINDOW_WANTS_HEADER_LINE_P (w) ? 1 : 0;
text. W is the window we display, for text property lookup. */
static int
-in_ellipses_for_invisible_text_p (pos, w)
- struct display_pos *pos;
- struct window *w;
+in_ellipses_for_invisible_text_p (struct display_pos *pos, struct window *w)
{
Lisp_Object prop, window;
int ellipses_p = 0;
is zero if there are overlay strings with newlines at POS. */
static int
-init_from_display_pos (it, w, pos)
- struct it *it;
- struct window *w;
- struct display_pos *pos;
+init_from_display_pos (struct it *it, struct window *w, struct display_pos *pos)
{
EMACS_INT charpos = CHARPOS (pos->pos), bytepos = BYTEPOS (pos->pos);
int i, overlay_strings_with_newlines = 0;
starting at ROW->start. */
static void
-init_to_row_start (it, w, row)
- struct it *it;
- struct window *w;
- struct glyph_row *row;
+init_to_row_start (struct it *it, struct window *w, struct glyph_row *row)
{
init_from_display_pos (it, w, &row->start);
it->start = row->start;
end position. */
static int
-init_to_row_end (it, w, row)
- struct it *it;
- struct window *w;
- struct glyph_row *row;
+init_to_row_end (struct it *it, struct window *w, struct glyph_row *row)
{
int success = 0;
to stop. */
static void
-handle_stop (it)
- struct it *it;
+handle_stop (struct it *it)
{
enum prop_handled handled;
int handle_overlay_change_p;
information for IT's current position. */
static void
-compute_stop_pos (it)
- struct it *it;
+compute_stop_pos (struct it *it)
{
register INTERVAL iv, next_iv;
Lisp_Object object, limit, position;
xmalloc. */
static EMACS_INT
-next_overlay_change (pos)
- EMACS_INT pos;
+next_overlay_change (EMACS_INT pos)
{
int noverlays;
EMACS_INT endpos;
regions of text. */
static enum prop_handled
-handle_fontified_prop (it)
- struct it *it;
+handle_fontified_prop (struct it *it)
{
Lisp_Object prop, pos;
enum prop_handled handled = HANDLED_NORMALLY;
Called from handle_stop. */
static enum prop_handled
-handle_face_prop (it)
- struct it *it;
+handle_face_prop (struct it *it)
{
int new_face_id;
EMACS_INT next_stop;
Otherwise, use the iterator's base_face_id. */
static int
-underlying_face_id (it)
- struct it *it;
+underlying_face_id (struct it *it)
{
int face_id = it->base_face_id, i;
position. Value is the id of the face. */
static int
-face_before_or_after_it_pos (it, before_p)
- struct it *it;
- int before_p;
+face_before_or_after_it_pos (struct it *it, int before_p)
{
int face_id, limit;
EMACS_INT next_check_charpos;
position. Called from handle_stop. */
static enum prop_handled
-handle_invisible_prop (it)
- struct it *it;
+handle_invisible_prop (struct it *it)
{
enum prop_handled handled = HANDLED_NORMALLY;
Replaces LEN characters from buffer. */
static void
-setup_for_ellipsis (it, len)
- struct it *it;
- int len;
+setup_for_ellipsis (struct it *it, int len)
{
/* Use the display table definition for `...'. Invalid glyphs
will be handled by the method returning elements from dpvec. */
Otherwise we return HANDLED_NORMALLY. */
static enum prop_handled
-handle_display_prop (it)
- struct it *it;
+handle_display_prop (struct it *it)
{
Lisp_Object prop, object, overlay;
struct text_pos *position;
at START_POS in OBJECT. */
static struct text_pos
-display_prop_end (it, object, start_pos)
- struct it *it;
- Lisp_Object object;
- struct text_pos start_pos;
+display_prop_end (struct it *it, Lisp_Object object, struct text_pos start_pos)
{
Lisp_Object end;
struct text_pos end_pos;
treated as intangible. */
static int
-single_display_spec_intangible_p (prop)
- Lisp_Object prop;
+single_display_spec_intangible_p (Lisp_Object prop)
{
/* Skip over `when FORM'. */
if (CONSP (prop) && EQ (XCAR (prop), Qwhen))
treated as intangible. */
int
-display_prop_intangible_p (prop)
- Lisp_Object prop;
+display_prop_intangible_p (Lisp_Object prop)
{
if (CONSP (prop)
&& CONSP (XCAR (prop))
/* Return 1 if PROP is a display sub-property value containing STRING. */
static int
-single_display_spec_string_p (prop, string)
- Lisp_Object prop, string;
+single_display_spec_string_p (Lisp_Object prop, Lisp_Object string)
{
if (EQ (string, prop))
return 1;
/* Return 1 if STRING appears in the `display' property PROP. */
static int
-display_prop_string_p (prop, string)
- Lisp_Object prop, string;
+display_prop_string_p (Lisp_Object prop, Lisp_Object string)
{
if (CONSP (prop)
&& CONSP (XCAR (prop))
called asynchronously from note_mouse_highlight. */
static EMACS_INT
-string_buffer_position_lim (w, string, from, to, back_p)
- struct window *w;
- Lisp_Object string;
- EMACS_INT from, to;
- int back_p;
+string_buffer_position_lim (struct window *w, Lisp_Object string,
+ EMACS_INT from, EMACS_INT to, int back_p)
{
Lisp_Object limit, prop, pos;
int found = 0;
called asynchronously from note_mouse_highlight. */
EMACS_INT
-string_buffer_position (w, string, around_charpos)
- struct window *w;
- Lisp_Object string;
- EMACS_INT around_charpos;
+string_buffer_position (struct window *w, Lisp_Object string, EMACS_INT around_charpos)
{
Lisp_Object limit, prop, pos;
const int MAX_DISTANCE = 1000;
position. Called from handle_stop. */
static enum prop_handled
-handle_composition_prop (it)
- struct it *it;
+handle_composition_prop (struct it *it)
{
Lisp_Object prop, string;
EMACS_INT pos, pos_byte, start, end;
Called from handle_stop. */
static enum prop_handled
-handle_overlay_change (it)
- struct it *it;
+handle_overlay_change (struct it *it)
{
if (!STRINGP (it->string) && get_overlay_strings (it, 0))
return HANDLED_RECOMPUTE_PROPS;
Otherwise IT->string is set to nil. */
static void
-next_overlay_string (it)
- struct it *it;
+next_overlay_string (struct it *it)
{
++it->current.overlay_string_index;
if (it->current.overlay_string_index == it->n_overlay_strings)
static int
-compare_overlay_entries (e1, e2)
- void *e1, *e2;
+compare_overlay_entries (const void *e1, const void *e2)
{
struct overlay_entry *entry1 = (struct overlay_entry *) e1;
struct overlay_entry *entry2 = (struct overlay_entry *) e2;
compare_overlay_entries. */
static void
-load_overlay_strings (it, charpos)
- struct it *it;
- int charpos;
+load_overlay_strings (struct it *it, int charpos)
{
extern Lisp_Object Qwindow, Qpriority;
Lisp_Object overlay, window, str, invisible;
entries = \
(struct overlay_entry *) alloca (new_size \
* sizeof *entries); \
- bcopy (old, entries, size * sizeof *entries); \
+ memcpy (entries, old, size * sizeof *entries); \
size = new_size; \
} \
\
least one overlay string was found. */
static int
-get_overlay_strings_1 (it, charpos, compute_stop_p)
- struct it *it;
- int charpos;
- int compute_stop_p;
+get_overlay_strings_1 (struct it *it, int charpos, int compute_stop_p)
{
/* Get the first OVERLAY_STRING_CHUNK_SIZE overlay strings to
process. This fills IT->overlay_strings with strings, and sets
}
static int
-get_overlay_strings (it, charpos)
- struct it *it;
- int charpos;
+get_overlay_strings (struct it *it, int charpos)
{
it->string = Qnil;
it->method = GET_FROM_BUFFER;
processed. */
static void
-push_it (it)
- struct it *it;
+push_it (struct it *it)
{
struct iterator_stack_entry *p;
}
static void
-iterate_out_of_display_property (it)
- struct it *it;
+iterate_out_of_display_property (struct it *it)
{
/* Maybe initialize paragraph direction. If we are at the beginning
of a new paragraph, next_element_from_buffer may not have a
elements from an overlay string, or from a buffer. */
static void
-pop_it (it)
- struct it *it;
+pop_it (struct it *it)
{
struct iterator_stack_entry *p;
/* Set IT's current position to the previous line start. */
static void
-back_to_previous_line_start (it)
- struct it *it;
+back_to_previous_line_start (struct it *it)
{
IT_CHARPOS (*it) = find_next_newline_no_quit (IT_CHARPOS (*it) - 1, -1);
IT_BYTEPOS (*it) = CHAR_TO_BYTE (IT_CHARPOS (*it));
leads to wrong cursor motion. */
static int
-forward_to_next_line_start (it, skipped_p)
- struct it *it;
- int *skipped_p;
+forward_to_next_line_start (struct it *it, int *skipped_p)
{
int old_selective, newline_found_p, n;
const int MAX_NEWLINE_DISTANCE = 500;
IT->hpos. */
static void
-back_to_previous_visible_line_start (it)
- struct it *it;
+back_to_previous_visible_line_start (struct it *it)
{
while (IT_CHARPOS (*it) > BEGV)
{
face information etc. */
void
-reseat_at_previous_visible_line_start (it)
- struct it *it;
+reseat_at_previous_visible_line_start (struct it *it)
{
back_to_previous_visible_line_start (it);
reseat (it, it->current.pos, 1);
is invisible because of text properties. */
static void
-reseat_at_next_visible_line_start (it, on_newline_p)
- struct it *it;
- int on_newline_p;
+reseat_at_next_visible_line_start (struct it *it, int on_newline_p)
{
int newline_found_p, skipped_p = 0;
IT->check_charpos of a property. */
static void
-reseat (it, pos, force_p)
- struct it *it;
- struct text_pos pos;
- int force_p;
+reseat (struct it *it, struct text_pos pos, int force_p)
{
int original_pos = IT_CHARPOS (*it);
IT->stop_pos to POS, also. */
static void
-reseat_1 (it, pos, set_stop_p)
- struct it *it;
- struct text_pos pos;
- int set_stop_p;
+reseat_1 (struct it *it, struct text_pos pos, int set_stop_p)
{
/* Don't call this function when scanning a C string. */
xassert (it->s == NULL);
calling this function. */
static void
-reseat_to_string (it, s, string, charpos, precision, field_width, multibyte)
- struct it *it;
- unsigned char *s;
- Lisp_Object string;
- int charpos;
- int precision, field_width, multibyte;
+reseat_to_string (struct it *it, unsigned char *s, Lisp_Object string,
+ int charpos, int precision, int field_width, int multibyte)
{
/* No region in strings. */
it->region_beg_charpos = it->region_end_charpos = -1;
it->stop_charpos = -1;
/* Set iterator position and end position. */
- bzero (&it->current, sizeof it->current);
+ memset (&it->current, 0, sizeof it->current);
it->current.overlay_string_index = -1;
it->current.dpvec_index = -1;
xassert (charpos >= 0);
/* Map enum it_method value to corresponding next_element_from_* function. */
-static int (* get_next_element[NUM_IT_METHODS]) P_ ((struct it *it)) =
+static int (* get_next_element[NUM_IT_METHODS]) (struct it *it) =
{
next_element_from_buffer,
next_element_from_display_vector,
static int last_escape_glyph_merged_face_id = 0;
int
-get_next_display_element (it)
- struct it *it;
+get_next_display_element (struct it *it)
{
/* Non-zero means that we found a display element. Zero means that
we hit the end of what we iterate over. Performance note: the
decrement position function which would not be easy to write. */
void
-set_iterator_to_next (it, reseat_p)
- struct it *it;
- int reseat_p;
+set_iterator_to_next (struct it *it, int reseat_p)
{
/* Reset flags indicating start and end of a sequence of characters
with box. Reset them at the start of this function because
is restored into IT->face_id in set_iterator_to_next. */
static int
-next_element_from_display_vector (it)
- struct it *it;
+next_element_from_display_vector (struct it *it)
{
Lisp_Object gc;
overlay string. */
static int
-next_element_from_string (it)
- struct it *it;
+next_element_from_string (struct it *it)
{
struct text_pos position;
reached, including padding spaces. */
static int
-next_element_from_c_string (it)
- struct it *it;
+next_element_from_c_string (struct it *it)
{
int success_p = 1;
ellipsis if an ellipsis is to be displayed. */
static int
-next_element_from_ellipsis (it)
- struct it *it;
+next_element_from_ellipsis (struct it *it)
{
if (it->selective_display_ellipsis_p)
setup_for_ellipsis (it, it->len);
static int
-next_element_from_image (it)
- struct it *it;
+next_element_from_image (struct it *it)
{
it->what = IT_IMAGE;
return 1;
always 1. */
static int
-next_element_from_stretch (it)
- struct it *it;
+next_element_from_stretch (struct it *it)
{
it->what = IT_STRETCH;
return 1;
position. */
static void
-handle_stop_backwards (it, charpos)
- struct it *it;
- EMACS_INT charpos;
+handle_stop_backwards (struct it *it, EMACS_INT charpos)
{
EMACS_INT where_we_are = IT_CHARPOS (*it);
struct display_pos save_current = it->current;
end. */
static int
-next_element_from_buffer (it)
- struct it *it;
+next_element_from_buffer (struct it *it)
{
int success_p = 1;
/* Run the redisplay end trigger hook for IT. */
static void
-run_redisplay_end_trigger_hook (it)
- struct it *it;
+run_redisplay_end_trigger_hook (struct it *it)
{
Lisp_Object args[3];
next_element_from_string when necessary. */
static int
-next_element_from_composition (it)
- struct it *it;
+next_element_from_composition (struct it *it)
{
it->what = IT_COMPOSITION;
it->len = it->cmp_it.nbytes;
TO_CHARPOS. */
void
-move_it_to (it, to_charpos, to_x, to_y, to_vpos, op)
- struct it *it;
- int to_charpos, to_x, to_y, to_vpos;
- int op;
+move_it_to (struct it *it, int to_charpos, int to_x, int to_y, int to_vpos, int op)
{
enum move_it_result skip, skip2 = MOVE_X_REACHED;
int line_height, line_start_x = 0, reached = 0;
set to the top of the line moved to. */
void
-move_it_vertically_backward (it, dy)
- struct it *it;
- int dy;
+move_it_vertically_backward (struct it *it, int dy)
{
int nlines, h;
struct it it2, it3;
end, IT will be on the start of a screen line. */
void
-move_it_vertically (it, dy)
- struct it *it;
- int dy;
+move_it_vertically (struct it *it, int dy)
{
if (dy <= 0)
move_it_vertically_backward (it, -dy);
/* Move iterator IT past the end of the text line it is in. */
void
-move_it_past_eol (it)
- struct it *it;
+move_it_past_eol (struct it *it)
{
enum move_it_result rc;
truncate-lines nil. */
void
-move_it_by_lines (it, dvpos, need_y_p)
- struct it *it;
- int dvpos, need_y_p;
+move_it_by_lines (struct it *it, int dvpos, int need_y_p)
{
struct position pos;
/* Return 1 if IT points into the middle of a display vector. */
int
-in_display_vector_p (it)
- struct it *it;
+in_display_vector_p (struct it *it)
{
return (it->method == GET_FROM_DISPLAY_VECTOR
&& it->current.dpvec_index > 0
to *Messages*. */
void
-add_to_log (format, arg1, arg2)
- char *format;
- Lisp_Object arg1, arg2;
+add_to_log (char *format, Lisp_Object arg1, Lisp_Object arg2)
{
Lisp_Object args[3];
Lisp_Object msg, fmt;
len = SBYTES (msg) + 1;
SAFE_ALLOCA (buffer, char *, len);
- bcopy (SDATA (msg), buffer, len);
+ memcpy (buffer, SDATA (msg), len);
message_dolog (buffer, len - 1, 1, 0);
SAFE_FREE ();
/* Output a newline in the *Messages* buffer if "needs" one. */
void
-message_log_maybe_newline ()
+message_log_maybe_newline (void)
{
if (message_log_need_newline)
message_dolog ("", 0, 1, 0);
so the buffer M must NOT point to a Lisp string. */
void
-message_dolog (m, nbytes, nlflag, multibyte)
- const char *m;
- int nbytes, nlflag, multibyte;
+message_dolog (const char *m, int nbytes, int nlflag, int multibyte)
{
if (!NILP (Vmemory_full))
return;
value N > 1 if we should also append " [N times]". */
static int
-message_log_check_duplicate (prev_bol, prev_bol_byte, this_bol, this_bol_byte)
- int prev_bol, this_bol;
- int prev_bol_byte, this_bol_byte;
+message_log_check_duplicate (int prev_bol, int prev_bol_byte,
+ int this_bol, int this_bol_byte)
{
int i;
int len = Z_BYTE - 1 - this_bol_byte;
This may GC, so the buffer M must NOT point to a Lisp string. */
void
-message2 (m, nbytes, multibyte)
- const char *m;
- int nbytes;
- int multibyte;
+message2 (const char *m, int nbytes, int multibyte)
{
/* First flush out any partial line written with print. */
message_log_maybe_newline ();
/* The non-logging counterpart of message2. */
void
-message2_nolog (m, nbytes, multibyte)
- const char *m;
- int nbytes, multibyte;
+message2_nolog (const char *m, int nbytes, int multibyte)
{
struct frame *sf = SELECTED_FRAME ();
message_enable_multibyte = multibyte;
This function cancels echoing. */
void
-message3 (m, nbytes, multibyte)
- Lisp_Object m;
- int nbytes;
- int multibyte;
+message3 (Lisp_Object m, int nbytes, int multibyte)
{
struct gcpro gcpro1;
USE_SAFE_ALLOCA;
SAFE_ALLOCA (buffer, char *, nbytes);
- bcopy (SDATA (m), buffer, nbytes);
+ memcpy (buffer, SDATA (m), nbytes);
message_dolog (buffer, nbytes, 1, multibyte);
SAFE_FREE ();
}
and make this cancel echoing. */
void
-message3_nolog (m, nbytes, multibyte)
- Lisp_Object m;
- int nbytes, multibyte;
+message3_nolog (Lisp_Object m, int nbytes, int multibyte)
{
struct frame *sf = SELECTED_FRAME ();
message_enable_multibyte = multibyte;
that was alloca'd. */
void
-message1 (m)
- char *m;
+message1 (char *m)
{
message2 (m, (m ? strlen (m) : 0), 0);
}
/* The non-logging counterpart of message1. */
void
-message1_nolog (m)
- char *m;
+message1_nolog (char *m)
{
message2_nolog (m, (m ? strlen (m) : 0), 0);
}
which gets replaced with STRING. */
void
-message_with_string (m, string, log)
- char *m;
- Lisp_Object string;
- int log;
+message_with_string (char *m, Lisp_Object string, int log)
{
CHECK_STRING (string);
/* VARARGS 1 */
void
-message (m, a1, a2, a3)
- char *m;
- EMACS_INT a1, a2, a3;
+message (char *m, EMACS_INT a1, EMACS_INT a2, EMACS_INT a3)
{
if (noninteractive)
{
/* The non-logging version of message. */
void
-message_nolog (m, a1, a2, a3)
- char *m;
- EMACS_INT a1, a2, a3;
+message_nolog (char *m, EMACS_INT a1, EMACS_INT a2, EMACS_INT a3)
{
Lisp_Object old_log_max;
old_log_max = Vmessage_log_max;
critical. */
void
-update_echo_area ()
+update_echo_area (void)
{
if (!NILP (echo_area_buffer[0]))
{
If they aren't, make new ones. */
static void
-ensure_echo_area_buffers ()
+ensure_echo_area_buffers (void)
{
int i;
Value is what FN returns. */
static int
-with_echo_area_buffer (w, which, fn, a1, a2, a3, a4)
- struct window *w;
- int which;
- int (*fn) P_ ((EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT));
- EMACS_INT a1;
- Lisp_Object a2;
- EMACS_INT a3, a4;
+with_echo_area_buffer (struct window *w, int which,
+ int (*fn) (EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT),
+ EMACS_INT a1, Lisp_Object a2, EMACS_INT a3, EMACS_INT a4)
{
Lisp_Object buffer;
int this_one, the_other, clear_buffer_p, rc;
FN called in with_echo_area_buffer. */
static Lisp_Object
-with_echo_area_buffer_unwind_data (w)
- struct window *w;
+with_echo_area_buffer_unwind_data (struct window *w)
{
int i = 0;
Lisp_Object vector, tmp;
with_echo_area_buffer_unwind_data. */
static Lisp_Object
-unwind_with_echo_area_buffer (vector)
- Lisp_Object vector;
+unwind_with_echo_area_buffer (Lisp_Object vector)
{
set_buffer_internal_1 (XBUFFER (AREF (vector, 0)));
Vdeactivate_mark = AREF (vector, 1);
non-zero means we will print multibyte. */
void
-setup_echo_area_for_printing (multibyte_p)
- int multibyte_p;
+setup_echo_area_for_printing (int multibyte_p)
{
/* If we can't find an echo area any more, exit. */
if (! FRAME_LIVE_P (XFRAME (selected_frame)))
display the current message. */
static int
-display_echo_area (w)
- struct window *w;
+display_echo_area (struct window *w)
{
int i, no_message_p, window_height_changed_p, count;
Value is non-zero if height of W was changed. */
static int
-display_echo_area_1 (a1, a2, a3, a4)
- EMACS_INT a1;
- Lisp_Object a2;
- EMACS_INT a3, a4;
+display_echo_area_1 (EMACS_INT a1, Lisp_Object a2, EMACS_INT a3, EMACS_INT a4)
{
struct window *w = (struct window *) a1;
Lisp_Object window;
is active, don't shrink it. */
void
-resize_echo_area_exactly ()
+resize_echo_area_exactly (void)
{
if (BUFFERP (echo_area_buffer[0])
&& WINDOWP (echo_area_window))
resize_mini_window returns. */
static int
-resize_mini_window_1 (a1, exactly, a3, a4)
- EMACS_INT a1;
- Lisp_Object exactly;
- EMACS_INT a3, a4;
+resize_mini_window_1 (EMACS_INT a1, Lisp_Object exactly, EMACS_INT a3, EMACS_INT a4)
{
return resize_mini_window ((struct window *) a1, !NILP (exactly));
}
Value is non-zero if the window height has been changed. */
int
-resize_mini_window (w, exact_p)
- struct window *w;
- int exact_p;
+resize_mini_window (struct window *w, int exact_p)
{
struct frame *f = XFRAME (w->frame);
int window_height_changed_p = 0;
current message. */
Lisp_Object
-current_message ()
+current_message (void)
{
Lisp_Object msg;
static int
-current_message_1 (a1, a2, a3, a4)
- EMACS_INT a1;
- Lisp_Object a2;
- EMACS_INT a3, a4;
+current_message_1 (EMACS_INT a1, Lisp_Object a2, EMACS_INT a3, EMACS_INT a4)
{
Lisp_Object *msg = (Lisp_Object *) a1;
worth optimizing. */
int
-push_message ()
+push_message (void)
{
Lisp_Object msg;
msg = current_message ();
/* Restore message display from the top of Vmessage_stack. */
void
-restore_message ()
+restore_message (void)
{
Lisp_Object msg;
/* Handler for record_unwind_protect calling pop_message. */
Lisp_Object
-pop_message_unwind (dummy)
- Lisp_Object dummy;
+pop_message_unwind (Lisp_Object dummy)
{
pop_message ();
return Qnil;
/* Pop the top-most entry off Vmessage_stack. */
void
-pop_message ()
+pop_message (void)
{
xassert (CONSP (Vmessage_stack));
Vmessage_stack = XCDR (Vmessage_stack);
somewhere. */
void
-check_message_stack ()
+check_message_stack (void)
{
if (!NILP (Vmessage_stack))
abort ();
time we display it---but don't redisplay it now. */
void
-truncate_echo_area (nchars)
- int nchars;
+truncate_echo_area (int nchars)
{
if (nchars == 0)
echo_area_buffer[0] = Qnil;
message to at most NCHARS characters. */
static int
-truncate_message_1 (nchars, a2, a3, a4)
- EMACS_INT nchars;
- Lisp_Object a2;
- EMACS_INT a3, a4;
+truncate_message_1 (EMACS_INT nchars, Lisp_Object a2, EMACS_INT a3, EMACS_INT a4)
{
if (BEG + nchars < Z)
del_range (BEG + nchars, Z);
*/
void
-set_message (s, string, nbytes, multibyte_p)
- const char *s;
- Lisp_Object string;
- int nbytes, multibyte_p;
+set_message (const char *s, Lisp_Object string, int nbytes, int multibyte_p)
{
message_enable_multibyte
= ((s && multibyte_p)
current. */
static int
-set_message_1 (a1, a2, nbytes, multibyte_p)
- EMACS_INT a1;
- Lisp_Object a2;
- EMACS_INT nbytes, multibyte_p;
+set_message_1 (EMACS_INT a1, Lisp_Object a2, EMACS_INT nbytes, EMACS_INT multibyte_p)
{
const char *s = (const char *) a1;
Lisp_Object string = a2;
last displayed. */
void
-clear_message (current_p, last_displayed_p)
- int current_p, last_displayed_p;
+clear_message (int current_p, int last_displayed_p)
{
if (current_p)
{
and ensure a complete redisplay of all windows. */
static void
-clear_garbaged_frames ()
+clear_garbaged_frames (void)
{
if (frame_garbaged)
{
mini-windows height has been changed. */
static int
-echo_area_display (update_frame_p)
- int update_frame_p;
+echo_area_display (int update_frame_p)
{
Lisp_Object mini_window;
struct window *w;
}
static Lisp_Object
-unwind_format_mode_line (vector)
- Lisp_Object vector;
+unwind_format_mode_line (Lisp_Object vector)
{
mode_line_target = XINT (AREF (vector, 0));
mode_line_noprop_ptr = mode_line_noprop_buf + XINT (AREF (vector, 1));
frame title. */
static int
-store_mode_line_noprop (str, field_width, precision)
- const unsigned char *str;
- int field_width, precision;
+store_mode_line_noprop (const unsigned char *str, int field_width, int precision)
{
int n = 0;
int dummy, nbytes;
frame_title_format. */
static void
-x_consider_frame_title (frame)
- Lisp_Object frame;
+x_consider_frame_title (Lisp_Object frame)
{
struct frame *f = XFRAME (frame);
higher level than this.) */
if (! STRINGP (f->name)
|| SBYTES (f->name) != len
- || bcmp (title, SDATA (f->name), len) != 0)
+ || memcmp (title, SDATA (f->name), len) != 0)
x_implicitly_set_name (f, make_string (title, len), Qnil);
}
}
appropriate. This can call eval. */
void
-prepare_menu_bars ()
+prepare_menu_bars (void)
{
int all_windows;
struct gcpro gcpro1, gcpro2;
updated value of this flag, to pass to the next call. */
static int
-update_menu_bar (f, save_match_data, hooks_run)
- struct frame *f;
- int save_match_data;
- int hooks_run;
+update_menu_bar (struct frame *f, int save_match_data, int hooks_run)
{
Lisp_Object window;
register struct window *w;
positions are relative to updated_window. */
void
-set_output_cursor (cursor)
- struct cursor_pos *cursor;
+set_output_cursor (struct cursor_pos *cursor)
{
output_cursor.hpos = cursor->hpos;
output_cursor.vpos = cursor->vpos;
selected_window and display the cursor at the given position. */
void
-x_cursor_to (vpos, hpos, y, x)
- int vpos, hpos, y, x;
+x_cursor_to (int vpos, int hpos, int y, int x)
{
struct window *w;
static Lisp_Object
-update_tool_bar_unwind (frame)
- Lisp_Object frame;
+update_tool_bar_unwind (Lisp_Object frame)
{
selected_frame = frame;
return Qnil;
and restore it here. */
static void
-update_tool_bar (f, save_match_data)
- struct frame *f;
- int save_match_data;
+update_tool_bar (struct frame *f, int save_match_data)
{
#if defined (USE_GTK) || defined (HAVE_NS)
int do_update = FRAME_EXTERNAL_TOOL_BAR (f);
been set up previously by calling prepare_menu_bars. */
static void
-build_desired_tool_bar_string (f)
- struct frame *f;
+build_desired_tool_bar_string (struct frame *f)
{
int i, size, size_needed;
struct gcpro gcpro1, gcpro2, gcpro3;
*/
static void
-display_tool_bar_line (it, height)
- struct it *it;
- int height;
+display_tool_bar_line (struct it *it, int height)
{
struct glyph_row *row = it->glyph_row;
int max_x = it->last_visible_x;
returned in *N_ROWS if non-NULL. */
static int
-tool_bar_lines_needed (f, n_rows)
- struct frame *f;
- int *n_rows;
+tool_bar_lines_needed (struct frame *f, int *n_rows)
{
struct window *w = XWINDOW (f->tool_bar_window);
struct it it;
height should be changed. */
static int
-redisplay_tool_bar (f)
- struct frame *f;
+redisplay_tool_bar (struct frame *f)
{
struct window *w;
struct it it;
GLYPH doesn't display a tool-bar item. */
static int
-tool_bar_item_info (f, glyph, prop_idx)
- struct frame *f;
- struct glyph *glyph;
- int *prop_idx;
+tool_bar_item_info (struct frame *f, struct glyph *glyph, int *prop_idx)
{
Lisp_Object prop;
int success_p;
1 otherwise. */
static int
-get_tool_bar_item (f, x, y, glyph, hpos, vpos, prop_idx)
- struct frame *f;
- int x, y;
- struct glyph **glyph;
- int *hpos, *vpos, *prop_idx;
+get_tool_bar_item (struct frame *f, int x, int y, struct glyph **glyph,
+ int *hpos, int *vpos, int *prop_idx)
{
Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
struct window *w = XWINDOW (f->tool_bar_window);
release. */
void
-handle_tool_bar_click (f, x, y, down_p, modifiers)
- struct frame *f;
- int x, y, down_p;
- unsigned int modifiers;
+handle_tool_bar_click (struct frame *f, int x, int y, int down_p,
+ unsigned int modifiers)
{
Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
struct window *w = XWINDOW (f->tool_bar_window);
note_mouse_highlight. */
static void
-note_tool_bar_highlight (f, x, y)
- struct frame *f;
- int x, y;
+note_tool_bar_highlight (struct frame *f, int x, int y)
{
Lisp_Object window = f->tool_bar_window;
struct window *w = XWINDOW (window);
Horizontal scrolling
************************************************************************/
-static int hscroll_window_tree P_ ((Lisp_Object));
-static int hscroll_windows P_ ((Lisp_Object));
+static int hscroll_window_tree (Lisp_Object);
+static int hscroll_windows (Lisp_Object);
/* For all leaf windows in the window tree rooted at WINDOW, set their
hscroll value so that PT is (i) visible in the window, and (ii) so
changed. */
static int
-hscroll_window_tree (window)
- Lisp_Object window;
+hscroll_window_tree (Lisp_Object window)
{
int hscrolled_p = 0;
int hscroll_relative_p = FLOATP (Vhscroll_step);
of WINDOW are cleared. */
static int
-hscroll_windows (window)
- Lisp_Object window;
+hscroll_windows (Lisp_Object window)
{
int hscrolled_p = hscroll_window_tree (window);
if (hscrolled_p)
redisplay_internal for display optimization. */
static INLINE int
-text_outside_line_unchanged_p (w, start, end)
- struct window *w;
- int start, end;
+text_outside_line_unchanged_p (struct window *w, int start, int end)
{
int unchanged_p = 1;
mini-buffer if that is in use. */
void
-redisplay ()
+redisplay (void)
{
redisplay_internal (0);
}
static Lisp_Object
-overlay_arrow_string_or_property (var)
- Lisp_Object var;
+overlay_arrow_string_or_property (Lisp_Object var)
{
Lisp_Object val;
/* Return 1 if there are any overlay-arrows in current_buffer. */
static int
-overlay_arrow_in_current_buffer_p ()
+overlay_arrow_in_current_buffer_p (void)
{
Lisp_Object vlist;
has changed. */
static int
-overlay_arrows_changed_p ()
+overlay_arrows_changed_p (void)
{
Lisp_Object vlist;
/* Mark overlay arrows to be updated on next redisplay. */
static void
-update_overlay_arrows (up_to_date)
- int up_to_date;
+update_overlay_arrows (int up_to_date)
{
Lisp_Object vlist;
Return nil if no overlay arrow. */
static Lisp_Object
-overlay_arrow_at_row (it, row)
- struct it *it;
- struct glyph_row *row;
+overlay_arrow_at_row (struct it *it, struct glyph_row *row)
{
Lisp_Object vlist;
position. BUF and PT are the current point buffer and position. */
int
-check_point_in_composition (prev_buf, prev_pt, buf, pt)
- struct buffer *prev_buf, *buf;
- int prev_pt, pt;
+check_point_in_composition (struct buffer *prev_buf, int prev_pt,
+ struct buffer *buf, int pt)
{
EMACS_INT start, end;
Lisp_Object prop;
in window W. */
static INLINE void
-reconsider_clip_changes (w, b)
- struct window *w;
- struct buffer *b;
+reconsider_clip_changes (struct window *w, struct buffer *b)
{
if (b->clip_changed
&& !NILP (w->window_end_valid)
directly. */
static void
-select_frame_for_redisplay (frame)
- Lisp_Object frame;
+select_frame_for_redisplay (Lisp_Object frame)
{
Lisp_Object tail, tem;
Lisp_Object old = selected_frame;
causes some problems. */
static void
-redisplay_internal (preserve_echo_area)
- int preserve_echo_area;
+redisplay_internal (int preserve_echo_area)
{
struct window *w = XWINDOW (selected_window);
struct frame *f;
called. This is useful for debugging. */
void
-redisplay_preserve_echo_area (from_where)
- int from_where;
+redisplay_preserve_echo_area (int from_where)
{
TRACE ((stderr, "redisplay_preserve_echo_area (%d)\n", from_where));
failure during redisplay, for example). */
static Lisp_Object
-unwind_redisplay (val)
- Lisp_Object val;
+unwind_redisplay (Lisp_Object val)
{
Lisp_Object old_redisplaying_p, old_frame;
redisplay_internal is called. */
static void
-mark_window_display_accurate_1 (w, accurate_p)
- struct window *w;
- int accurate_p;
+mark_window_display_accurate_1 (struct window *w, int accurate_p)
{
if (BUFFERP (w->buffer))
{
be redisplayed the next time redisplay_internal is called. */
void
-mark_window_display_accurate (window, accurate_p)
- Lisp_Object window;
- int accurate_p;
+mark_window_display_accurate (Lisp_Object window, int accurate_p)
{
struct window *w;
macro DISP_CHAR_VECTOR. */
Lisp_Object
-disp_char_vector (dp, c)
- struct Lisp_Char_Table *dp;
- int c;
+disp_char_vector (struct Lisp_Char_Table *dp, int c)
{
Lisp_Object val;
/* Redisplay all leaf windows in the window tree rooted at WINDOW. */
static void
-redisplay_windows (window)
- Lisp_Object window;
+redisplay_windows (Lisp_Object window)
{
while (!NILP (window))
{
}
static Lisp_Object
-redisplay_window_error ()
+redisplay_window_error (Lisp_Object ignore)
{
displayed_buffer->display_error_modiff = BUF_MODIFF (displayed_buffer);
return Qnil;
}
static Lisp_Object
-redisplay_window_0 (window)
- Lisp_Object window;
+redisplay_window_0 (Lisp_Object window)
{
if (displayed_buffer->display_error_modiff < BUF_MODIFF (displayed_buffer))
redisplay_window (window, 0);
}
static Lisp_Object
-redisplay_window_1 (window)
- Lisp_Object window;
+redisplay_window_1 (Lisp_Object window)
{
if (displayed_buffer->display_error_modiff < BUF_MODIFF (displayed_buffer))
redisplay_window (window, 1);
Return 0 if cursor is not on this row, 1 otherwise. */
int
-set_cursor_from_row (w, row, matrix, delta, delta_bytes, dy, dvpos)
- struct window *w;
- struct glyph_row *row;
- struct glyph_matrix *matrix;
- int delta, delta_bytes, dy, dvpos;
+set_cursor_from_row (struct window *w, struct glyph_row *row,
+ struct glyph_matrix *matrix, int delta, int delta_bytes,
+ int dy, int dvpos)
{
struct glyph *glyph = row->glyphs[TEXT_AREA];
struct glyph *end = glyph + row->used[TEXT_AREA];
point. */
if (/* previous candidate is a glyph in TEXT_AREA of that row */
w->cursor.hpos >= 0
- && w->cursor.hpos < MATRIX_ROW_USED(matrix, w->cursor.vpos)
+ && w->cursor.hpos < MATRIX_ROW_USED (matrix, w->cursor.vpos)
&& BUFFERP (g1->object)
&& (g1->charpos == pt_old /* an exact match always wins */
|| (BUFFERP (glyph->object)
We assume that the window's buffer is really current. */
static INLINE struct text_pos
-run_window_scroll_functions (window, startp)
- Lisp_Object window;
- struct text_pos startp;
+run_window_scroll_functions (Lisp_Object window, struct text_pos startp)
{
struct window *w = XWINDOW (window);
SET_MARKER_FROM_TEXT_POS (w->start, startp);
as if point had gone off the screen. */
static int
-cursor_row_fully_visible_p (w, force_p, current_matrix_p)
- struct window *w;
- int force_p;
- int current_matrix_p;
+cursor_row_fully_visible_p (struct window *w, int force_p, int current_matrix_p)
{
struct glyph_matrix *matrix;
struct glyph_row *row;
if (PT > CHARPOS (it.current.pos))
{
int y0 = line_bottom_y (&it);
-
- /* Compute the distance from the scroll margin to PT
- (including the height of the cursor line). Moving the
- iterator unconditionally to PT can be slow if PT is far
- away, so stop 10 lines past the window bottom (is there a
- way to do the right thing quickly?). */
- move_it_to (&it, PT, -1,
- it.last_visible_y + 10 * FRAME_LINE_HEIGHT (f),
+ /* Compute how many pixels below window bottom to stop searching
+ for PT. This avoids costly search for PT that is far away if
+ the user limited scrolling by a small number of lines, but
+ always finds PT if scroll_conservatively is set to a large
+ number, such as most-positive-fixnum. */
+ int slack = max (scroll_max, 10 * FRAME_LINE_HEIGHT (f));
+ int y_to_move =
+ slack >= INT_MAX - it.last_visible_y
+ ? INT_MAX
+ : it.last_visible_y + slack;
+
+ /* Compute the distance from the scroll margin to PT or to
+ the scroll limit, whichever comes first. This should
+ include the height of the cursor line, to make that line
+ fully visible. */
+ move_it_to (&it, PT, -1, y_to_move,
-1, MOVE_TO_POS | MOVE_TO_Y);
dy = line_bottom_y (&it) - y0;
return SCROLLING_FAILED;
start_display (&it, w, startp);
- move_it_vertically (&it, amount_to_scroll);
+ if (scroll_max < INT_MAX)
+ move_it_vertically (&it, amount_to_scroll);
+ else
+ {
+ /* Extra precision for users who set scroll-conservatively
+ to most-positive-fixnum: make sure the amount we scroll
+ the window start is never less than amount_to_scroll,
+ which was computed as distance from window bottom to
+ point. This matters when lines at window top and lines
+ below window bottom have different height. */
+ struct it it1 = it;
+ /* We use a temporary it1 because line_bottom_y can modify
+ its argument, if it moves one line down; see there. */
+ int start_y = line_bottom_y (&it1);
+
+ do {
+ move_it_by_lines (&it, 1, 1);
+ it1 = it;
+ } while (line_bottom_y (&it1) - start_y < amount_to_scroll);
+ }
/* If STARTP is unchanged, move it down another screen line. */
if (CHARPOS (it.current.pos) == CHARPOS (startp))
screen line with the minimum distance from the old start W->start. */
static int
-compute_window_start_on_continuation_line (w)
- struct window *w;
+compute_window_start_on_continuation_line (struct window *w)
{
struct text_pos pos, start_pos;
int window_start_changed_p = 0;
};
static int
-try_cursor_movement (window, startp, scroll_step)
- Lisp_Object window;
- struct text_pos startp;
- int *scroll_step;
+try_cursor_movement (Lisp_Object window, struct text_pos startp, int *scroll_step)
{
struct window *w = XWINDOW (window);
struct frame *f = XFRAME (w->frame);
++row;
if (!row->enabled_p)
rc = CURSOR_MOVEMENT_MUST_SCROLL;
- /* If rows are bidi-reordered, back up until we find a row
- that does not belong to a continuation line. This is
- because we must consider all rows of a continued line as
- candidates for cursor positioning, since row start and
- end positions change non-linearly with vertical position
- in such rows. */
- /* FIXME: Revisit this when glyph ``spilling'' in
- continuation lines' rows is implemented for
- bidi-reordered rows. */
- if (!NILP (XBUFFER (w->buffer)->bidi_display_reordering))
- {
- while (MATRIX_ROW_CONTINUATION_LINE_P (row))
- {
- xassert (row->enabled_p);
- --row;
- /* If we hit the beginning of the displayed portion
- without finding the first row of a continued
- line, give up. */
- if (row <= w->current_matrix->rows)
- {
- rc = CURSOR_MOVEMENT_MUST_SCROLL;
- break;
- }
-
- }
- }
}
if (rc == CURSOR_MOVEMENT_CANNOT_BE_USED)
{
- int scroll_p = 0;
+ int scroll_p = 0, must_scroll = 0;
int last_y = window_text_bottom_y (w) - this_scroll_margin;
if (PT > XFASTINT (w->last_point))
{
/* if PT is not in the glyph row, give up. */
rc = CURSOR_MOVEMENT_MUST_SCROLL;
+ must_scroll = 1;
+ }
+ else if (rc != CURSOR_MOVEMENT_SUCCESS
+ && !NILP (XBUFFER (w->buffer)->bidi_display_reordering))
+ {
+ /* If rows are bidi-reordered and point moved, back up
+ until we find a row that does not belong to a
+ continuation line. This is because we must consider
+ all rows of a continued line as candidates for the
+ new cursor positioning, since row start and end
+ positions change non-linearly with vertical position
+ in such rows. */
+ /* FIXME: Revisit this when glyph ``spilling'' in
+ continuation lines' rows is implemented for
+ bidi-reordered rows. */
+ while (MATRIX_ROW_CONTINUATION_LINE_P (row))
+ {
+ xassert (row->enabled_p);
+ --row;
+ /* If we hit the beginning of the displayed portion
+ without finding the first row of a continued
+ line, give up. */
+ if (row <= w->current_matrix->rows)
+ {
+ rc = CURSOR_MOVEMENT_MUST_SCROLL;
+ break;
+ }
+
+ }
}
+ if (must_scroll)
+ ;
else if (rc != CURSOR_MOVEMENT_SUCCESS
- && MATRIX_ROW_PARTIALLY_VISIBLE_P (w, row)
- && make_cursor_line_fully_visible_p)
+ && MATRIX_ROW_PARTIALLY_VISIBLE_P (w, row)
+ && make_cursor_line_fully_visible_p)
{
if (PT == MATRIX_ROW_END_CHARPOS (row)
&& !row->ends_at_zv_p
}
else if (scroll_p)
rc = CURSOR_MOVEMENT_MUST_SCROLL;
- else if (!NILP (XBUFFER (w->buffer)->bidi_display_reordering))
+ else if (rc != CURSOR_MOVEMENT_SUCCESS
+ && !NILP (XBUFFER (w->buffer)->bidi_display_reordering))
{
/* With bidi-reordered rows, there could be more than
one candidate row whose start and end positions
do
{
- rv |= set_cursor_from_row (w, row, w->current_matrix,
- 0, 0, 0, 0);
+ if (MATRIX_ROW_START_CHARPOS (row) <= PT
+ && PT <= MATRIX_ROW_END_CHARPOS (row)
+ && cursor_row_p (w, row))
+ rv |= set_cursor_from_row (w, row, w->current_matrix,
+ 0, 0, 0, 0);
/* As soon as we've found the first suitable row
whose ends_at_zv_p flag is set, we are done. */
if (rv
}
++row;
}
- while (MATRIX_ROW_BOTTOM_Y (row) < last_y
- && MATRIX_ROW_START_CHARPOS (row) <= PT
- && PT <= MATRIX_ROW_END_CHARPOS (row)
- && cursor_row_p (w, row));
+ while ((MATRIX_ROW_CONTINUATION_LINE_P (row)
+ && MATRIX_ROW_BOTTOM_Y (row) <= last_y)
+ || (MATRIX_ROW_START_CHARPOS (row) == PT
+ && MATRIX_ROW_BOTTOM_Y (row) < last_y));
/* If we didn't find any candidate rows, or exited the
loop before all the candidates were examined, signal
to the caller that this method failed. */
if (rc != CURSOR_MOVEMENT_SUCCESS
- && (!rv
- || (MATRIX_ROW_START_CHARPOS (row) <= PT
- && PT <= MATRIX_ROW_END_CHARPOS (row))))
- rc = CURSOR_MOVEMENT_CANNOT_BE_USED;
- else
+ && (!rv || MATRIX_ROW_CONTINUATION_LINE_P (row)))
+ rc = CURSOR_MOVEMENT_MUST_SCROLL;
+ else if (rv)
rc = CURSOR_MOVEMENT_SUCCESS;
}
else
}
void
-set_vertical_scroll_bar (w)
- struct window *w;
+set_vertical_scroll_bar (struct window *w)
{
int start, end, whole;
retry. */
static void
-redisplay_window (window, just_this_one_p)
- Lisp_Object window;
- int just_this_one_p;
+redisplay_window (Lisp_Object window, int just_this_one_p)
{
struct window *w = XWINDOW (window);
struct frame *f = XFRAME (w->frame);
(*FRAME_TERMINAL (f)->redeem_scroll_bar_hook) (w);
}
- /* Restore current_buffer and value of point in it. */
- TEMP_SET_PT_BOTH (CHARPOS (opoint), BYTEPOS (opoint));
+ /* Restore current_buffer and value of point in it. The window
+ update may have changed the buffer, so first make sure `opoint'
+ is still valid (Bug#6177). */
+ if (CHARPOS (opoint) < BEGV)
+ TEMP_SET_PT_BOTH (BEGV, BEGV_BYTE);
+ else if (CHARPOS (opoint) > ZV)
+ TEMP_SET_PT_BOTH (Z, Z_BYTE);
+ else
+ TEMP_SET_PT_BOTH (CHARPOS (opoint), BYTEPOS (opoint));
+
set_buffer_internal_1 (old);
/* Avoid an abort in TEMP_SET_PT_BOTH if the buffer has become
shorter. This can be caused by log truncation in *Messages*. */
set in FLAGS.) */
int
-try_window (window, pos, flags)
- Lisp_Object window;
- struct text_pos pos;
- int flags;
+try_window (Lisp_Object window, struct text_pos pos, int flags)
{
struct window *w = XWINDOW (window);
struct it it;
W->start is the new window start. */
static int
-try_window_reusing_current_matrix (w)
- struct window *w;
+try_window_reusing_current_matrix (struct window *w)
{
struct frame *f = XFRAME (w->frame);
struct glyph_row *row, *bottom_row;
Window redisplay reusing current matrix when buffer has changed
************************************************************************/
-static struct glyph_row *find_last_unchanged_at_beg_row P_ ((struct window *));
-static struct glyph_row *find_first_unchanged_at_end_row P_ ((struct window *,
- int *, int *));
+static struct glyph_row *find_last_unchanged_at_beg_row (struct window *);
+static struct glyph_row *find_first_unchanged_at_end_row (struct window *,
+ int *, int *);
static struct glyph_row *
-find_last_row_displaying_text P_ ((struct glyph_matrix *, struct it *,
- struct glyph_row *));
+find_last_row_displaying_text (struct glyph_matrix *, struct it *,
+ struct glyph_row *);
/* Return the last row in MATRIX displaying text. If row START is
a pointer to the row found. */
static struct glyph_row *
-find_last_row_displaying_text (matrix, it, start)
- struct glyph_matrix *matrix;
- struct it *it;
- struct glyph_row *start;
+find_last_row_displaying_text (struct glyph_matrix *matrix, struct it *it,
+ struct glyph_row *start)
{
struct glyph_row *row, *row_found;
when the current matrix was built. */
static struct glyph_row *
-find_last_unchanged_at_beg_row (w)
- struct window *w;
+find_last_unchanged_at_beg_row (struct window *w)
{
int first_changed_pos = BEG + BEG_UNCHANGED;
struct glyph_row *row;
changes. */
static struct glyph_row *
-find_first_unchanged_at_end_row (w, delta, delta_bytes)
- struct window *w;
- int *delta, *delta_bytes;
+find_first_unchanged_at_end_row (struct window *w, int *delta, int *delta_bytes)
{
struct glyph_row *row;
struct glyph_row *row_found = NULL;
try_window_reusing_current_matrix. */
static void
-sync_frame_with_window_matrix_rows (w)
- struct window *w;
+sync_frame_with_window_matrix_rows (struct window *w)
{
struct frame *f = XFRAME (w->frame);
struct glyph_row *window_row, *window_row_end, *frame_row;
containing CHARPOS or null. */
struct glyph_row *
-row_containing_pos (w, charpos, start, end, dy)
- struct window *w;
- int charpos;
- struct glyph_row *start, *end;
- int dy;
+row_containing_pos (struct window *w, int charpos, struct glyph_row *start,
+ struct glyph_row *end, int dy)
{
struct glyph_row *row = start;
struct glyph_row *best_row = NULL;
7. Update W's window end information. */
static int
-try_window_id (w)
- struct window *w;
+try_window_id (struct window *w)
{
struct frame *f = XFRAME (w->frame);
struct glyph_matrix *current_matrix = w->current_matrix;
#if GLYPH_DEBUG
-void dump_glyph_row P_ ((struct glyph_row *, int, int));
-void dump_glyph_matrix P_ ((struct glyph_matrix *, int));
-void dump_glyph P_ ((struct glyph_row *, struct glyph *, int));
+void dump_glyph_row (struct glyph_row *, int, int);
+void dump_glyph_matrix (struct glyph_matrix *, int);
+void dump_glyph (struct glyph_row *, struct glyph *, int);
/* Dump the contents of glyph matrix MATRIX on stderr.
Used for non-window-redisplay windows, and for windows w/o left fringe. */
static struct glyph_row *
-get_overlay_arrow_glyph_row (w, overlay_arrow_string)
- struct window *w;
- Lisp_Object overlay_arrow_string;
+get_overlay_arrow_glyph_row (struct window *w, Lisp_Object overlay_arrow_string)
{
struct frame *f = XFRAME (WINDOW_FRAME (w));
struct buffer *buffer = XBUFFER (w->buffer);
produce_special_glyphs. */
static void
-insert_left_trunc_glyphs (it)
- struct it *it;
+insert_left_trunc_glyphs (struct it *it)
{
struct it truncate_it;
struct glyph *from, *end, *to, *toend;
must not be zero. */
static void
-compute_line_metrics (it)
- struct it *it;
+compute_line_metrics (struct it *it)
{
struct glyph_row *row = it->glyph_row;
int area, i;
end of the line if the row ends in italic text. */
static int
-append_space_for_newline (it, default_face_p)
- struct it *it;
- int default_face_p;
+append_space_for_newline (struct it *it, int default_face_p)
{
if (FRAME_WINDOW_P (it->f))
{
saved_pos = it->position;
it->what = IT_CHARACTER;
- bzero (&it->position, sizeof it->position);
+ memset (&it->position, 0, sizeof it->position);
it->object = make_number (0);
it->c = ' ';
it->len = 1;
left of the leftmost glyph. */
static void
-extend_face_to_end_of_line (it)
- struct it *it;
+extend_face_to_end_of_line (struct it *it)
{
struct face *face;
struct frame *f = it->f;
(((it->ascent + it->descent)
* FONT_BASE (font)) / FONT_HEIGHT (font));
saved_pos = it->position;
- bzero (&it->position, sizeof it->position);
+ memset (&it->position, 0, sizeof it->position);
saved_avoid_cursor = it->avoid_cursor_p;
it->avoid_cursor_p = 1;
saved_face_id = it->face_id;
saved_pos = it->position;
it->what = IT_CHARACTER;
- bzero (&it->position, sizeof it->position);
+ memset (&it->position, 0, sizeof it->position);
it->object = make_number (0);
it->c = ' ';
it->len = 1;
trailing whitespace. */
static int
-trailing_whitespace_p (charpos)
- int charpos;
+trailing_whitespace_p (int charpos)
{
int bytepos = CHAR_TO_BYTE (charpos);
int c = 0;
/* Highlight trailing whitespace, if any, in ROW. */
void
-highlight_trailing_whitespace (f, row)
- struct frame *f;
- struct glyph_row *row;
+highlight_trailing_whitespace (struct frame *f, struct glyph_row *row)
{
int used = row->used[TEXT_AREA];
used to hold the cursor. */
static int
-cursor_row_p (w, row)
- struct window *w;
- struct glyph_row *row;
+cursor_row_p (struct window *w, struct glyph_row *row)
{
int cursor_row_p = 1;
/* Return the character-property PROP at the current position in IT. */
static Lisp_Object
-get_it_property (it, prop)
- struct it *it;
- Lisp_Object prop;
+get_it_property (struct it *it, Lisp_Object prop)
{
Lisp_Object position;
glyphs were produced by PRODUCE_GLYPHS, and the line needs to be
continued. */
static void
-unproduce_glyphs (it, n)
- struct it *it;
- int n;
+unproduce_glyphs (struct it *it, int n)
{
struct glyph *glyph, *end;
/* Find the positions in a bidi-reordered ROW to serve as ROW->minpos
and ROW->maxpos. */
static void
-find_row_edges (it, row, min_pos, min_bpos, max_pos, max_bpos)
- struct it *it;
- struct glyph_row *row;
- EMACS_INT min_pos, min_bpos, max_pos, max_bpos;
+find_row_edges (struct it *it, struct glyph_row *row,
+ EMACS_INT min_pos, EMACS_INT min_bpos,
+ EMACS_INT max_pos, EMACS_INT max_bpos)
{
/* FIXME: Revisit this when glyph ``spilling'' in continuation
lines' rows is implemented for bidi-reordered rows. */
only. */
static int
-display_line (it)
- struct it *it;
+display_line (struct it *it)
{
struct glyph_row *row = it->glyph_row;
Lisp_Object overlay_arrow_string;
for the menu bar. */
static void
-display_menu_bar (w)
- struct window *w;
+display_menu_bar (struct window *w)
{
struct frame *f = XFRAME (WINDOW_FRAME (w));
struct it it;
the number of windows whose mode lines were redisplayed. */
static int
-redisplay_mode_lines (window, force)
- Lisp_Object window;
- int force;
+redisplay_mode_lines (Lisp_Object window, int force)
{
int nwindows = 0;
sum number of mode lines and header lines displayed. */
static int
-display_mode_lines (w)
- struct window *w;
+display_mode_lines (struct window *w)
{
Lisp_Object old_selected_window, old_selected_frame;
int n = 0;
displayed. */
static int
-display_mode_line (w, face_id, format)
- struct window *w;
- enum face_id face_id;
- Lisp_Object format;
+display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format)
{
struct it it;
struct face *face;
Return the updated list. */
static Lisp_Object
-move_elt_to_front (elt, list)
- Lisp_Object elt, list;
+move_elt_to_front (Lisp_Object elt, Lisp_Object list)
{
register Lisp_Object tail, prev;
register Lisp_Object tem;
`store_mode_line_string', or `display_string'. */
static int
-display_mode_element (it, depth, field_width, precision, elt, props, risky)
- struct it *it;
- int depth;
- int field_width, precision;
- Lisp_Object elt, props;
- int risky;
+display_mode_element (struct it *it, int depth, int field_width, int precision,
+ Lisp_Object elt, Lisp_Object props, int risky)
{
int n = 0, field, prec;
int literal = 0;
*/
static int
-store_mode_line_string (string, lisp_string, copy_string, field_width, precision, props)
- char *string;
- Lisp_Object lisp_string;
- int copy_string;
- int field_width;
- int precision;
- Lisp_Object props;
+store_mode_line_string (char *string, Lisp_Object lisp_string, int copy_string,
+ int field_width, int precision, Lisp_Object props)
{
int len;
int n = 0;
the positive integer D to BUF using a minimal field width WIDTH. */
static void
-pint2str (buf, width, d)
- register char *buf;
- register int width;
- register int d;
+pint2str (register char *buf, register int width, register int d)
{
register char *p = buf;
};
static void
-pint2hrstr (buf, width, d)
- char *buf;
- int width;
- int d;
+pint2hrstr (char *buf, int width, int d)
{
/* We aim to represent the nonnegative integer D as
QUOTIENT.TENTHS * 10 ^ (3 * EXPONENT). */
static unsigned char invalid_eol_type[] = "(*invalid*)";
static char *
-decode_mode_spec_coding (coding_system, buf, eol_flag)
- Lisp_Object coding_system;
- register char *buf;
- int eol_flag;
+decode_mode_spec_coding (Lisp_Object coding_system, register char *buf, int eol_flag)
{
Lisp_Object val;
int multibyte = !NILP (current_buffer->enable_multibyte_characters);
eol_str = invalid_eol_type;
eol_str_len = sizeof (invalid_eol_type) - 1;
}
- bcopy (eol_str, buf, eol_str_len);
+ memcpy (buf, eol_str, eol_str_len);
buf += eol_str_len;
}
static char lots_of_dashes[] = "--------------------------------------------------------------------------------------------------------------------------------------------";
static char *
-decode_mode_spec (w, c, field_width, precision, string)
- struct window *w;
- register int c;
- int field_width, precision;
- Lisp_Object *string;
+decode_mode_spec (struct window *w, register int c, int field_width,
+ int precision, Lisp_Object *string)
{
Lisp_Object obj;
struct frame *f = XFRAME (WINDOW_FRAME (w));
Set *BYTE_POS_PTR to 1 if we found COUNT lines, 0 if we hit LIMIT. */
static int
-display_count_lines (start, start_byte, limit_byte, count, byte_pos_ptr)
- int start, start_byte, limit_byte, count;
- int *byte_pos_ptr;
+display_count_lines (int start, int start_byte, int limit_byte, int count,
+ int *byte_pos_ptr)
{
register unsigned char *cursor;
unsigned char *base;
with index START. */
reseat_to_string (it, NILP (lisp_string) ? string : NULL, lisp_string, start,
precision, field_width, multibyte);
- if (string && STRINGP (lisp_string))
+ if (string && STRINGP (lisp_string))
/* LISP_STRING is the one returned by decode_mode_spec. We should
ignore its text properties. */
it->stop_charpos = -1;
and 1 if it's invisible and without an ellipsis. */
int
-invisible_p (propval, list)
- register Lisp_Object propval;
- Lisp_Object list;
+invisible_p (register Lisp_Object propval, Lisp_Object list)
{
register Lisp_Object tail, proptail;
: - 1)
int
-calc_pixel_width_or_height (res, it, prop, font, width_p, align_to)
- double *res;
- struct it *it;
- Lisp_Object prop;
- struct font *font;
- int width_p, *align_to;
+calc_pixel_width_or_height (double *res, struct it *it, Lisp_Object prop,
+ struct font *font, int width_p, int *align_to)
{
double pixels;
face-override for drawing S. */
#ifdef HAVE_NTGUI
-#define OPTIONAL_HDC(hdc) hdc,
+#define OPTIONAL_HDC(hdc) HDC hdc,
#define DECLARE_HDC(hdc) HDC hdc;
#define ALLOCATE_HDC(hdc, f) hdc = get_frame_dc ((f))
#define RELEASE_HDC(hdc, f) release_frame_dc ((f), (hdc))
#endif
static void
-init_glyph_string (s, OPTIONAL_HDC (hdc) char2b, w, row, area, start, hl)
- struct glyph_string *s;
- DECLARE_HDC (hdc)
- XChar2b *char2b;
- struct window *w;
- struct glyph_row *row;
- enum glyph_row_area area;
- int start;
- enum draw_glyphs_face hl;
+init_glyph_string (struct glyph_string *s,
+ OPTIONAL_HDC (hdc)
+ XChar2b *char2b, struct window *w, struct glyph_row *row,
+ enum glyph_row_area area, int start, enum draw_glyphs_face hl)
{
- bzero (s, sizeof *s);
+ memset (s, 0, sizeof *s);
s->w = w;
s->f = XFRAME (w->frame);
#ifdef HAVE_NTGUI
with head *HEAD and tail *TAIL. Set *HEAD and *TAIL to the result. */
static INLINE void
-append_glyph_string_lists (head, tail, h, t)
- struct glyph_string **head, **tail;
- struct glyph_string *h, *t;
+append_glyph_string_lists (struct glyph_string **head, struct glyph_string **tail,
+ struct glyph_string *h, struct glyph_string *t)
{
if (h)
{
result. */
static INLINE void
-prepend_glyph_string_lists (head, tail, h, t)
- struct glyph_string **head, **tail;
- struct glyph_string *h, *t;
+prepend_glyph_string_lists (struct glyph_string **head, struct glyph_string **tail,
+ struct glyph_string *h, struct glyph_string *t)
{
if (h)
{
Set *HEAD and *TAIL to the resulting list. */
static INLINE void
-append_glyph_string (head, tail, s)
- struct glyph_string **head, **tail;
- struct glyph_string *s;
+append_glyph_string (struct glyph_string **head, struct glyph_string **tail,
+ struct glyph_string *s)
{
s->next = s->prev = NULL;
append_glyph_string_lists (head, tail, s, s);
DISPLAY_P is non-zero. */
static INLINE struct face *
-get_char_face_and_encoding (f, c, face_id, char2b, multibyte_p, display_p)
- struct frame *f;
- int c, face_id;
- XChar2b *char2b;
- int multibyte_p, display_p;
+get_char_face_and_encoding (struct frame *f, int c, int face_id,
+ XChar2b *char2b, int multibyte_p, int display_p)
{
struct face *face = FACE_FROM_ID (f, face_id);
a pointer to a realized face that is ready for display. */
static INLINE struct face *
-get_glyph_face_and_encoding (f, glyph, char2b, two_byte_p)
- struct frame *f;
- struct glyph *glyph;
- XChar2b *char2b;
- int *two_byte_p;
+get_glyph_face_and_encoding (struct frame *f, struct glyph *glyph,
+ XChar2b *char2b, int *two_byte_p)
{
struct face *face;
Value is the index of a component not in S. */
static int
-fill_composite_glyph_string (s, base_face, overlaps)
- struct glyph_string *s;
- struct face *base_face;
- int overlaps;
+fill_composite_glyph_string (struct glyph_string *s, struct face *base_face,
+ int overlaps)
{
int i;
/* For all glyphs of this composition, starting at the offset
}
static int
-fill_gstring_glyph_string (s, face_id, start, end, overlaps)
- struct glyph_string *s;
- int face_id;
- int start, end, overlaps;
+fill_gstring_glyph_string (struct glyph_string *s, int face_id,
+ int start, int end, int overlaps)
{
struct glyph *glyph, *last;
Lisp_Object lgstring;
Value is the index of the first glyph not in S. */
static int
-fill_glyph_string (s, face_id, start, end, overlaps)
- struct glyph_string *s;
- int face_id;
- int start, end, overlaps;
+fill_glyph_string (struct glyph_string *s, int face_id,
+ int start, int end, int overlaps)
{
struct glyph *glyph, *last;
int voffset;
/* Fill glyph string S from image glyph S->first_glyph. */
static void
-fill_image_glyph_string (s)
- struct glyph_string *s;
+fill_image_glyph_string (struct glyph_string *s)
{
xassert (s->first_glyph->type == IMAGE_GLYPH);
s->img = IMAGE_FROM_ID (s->f, s->first_glyph->u.img_id);
Value is the index of the first glyph not in S. */
static int
-fill_stretch_glyph_string (s, row, area, start, end)
- struct glyph_string *s;
- struct glyph_row *row;
- enum glyph_row_area area;
- int start, end;
+fill_stretch_glyph_string (struct glyph_string *s, struct glyph_row *row,
+ enum glyph_row_area area, int start, int end)
{
struct glyph *glyph, *last;
int voffset, face_id;
}
static struct font_metrics *
-get_per_char_metric (f, font, char2b)
- struct frame *f;
- struct font *font;
- XChar2b *char2b;
+get_per_char_metric (struct frame *f, struct font *font, XChar2b *char2b)
{
static struct font_metrics metrics;
unsigned code = (XCHAR2B_BYTE1 (char2b) << 8) | XCHAR2B_BYTE2 (char2b);
assumed to be zero. */
void
-x_get_glyph_overhangs (glyph, f, left, right)
- struct glyph *glyph;
- struct frame *f;
- int *left, *right;
+x_get_glyph_overhangs (struct glyph *glyph, struct frame *f, int *left, int *right)
{
*left = *right = 0;
if no glyphs are overwritten. */
static int
-left_overwritten (s)
- struct glyph_string *s;
+left_overwritten (struct glyph_string *s)
{
int k;
glyph in front of S overwrites S. */
static int
-left_overwriting (s)
- struct glyph_string *s;
+left_overwriting (struct glyph_string *s)
{
int i, k, x;
struct glyph *glyphs = s->row->glyphs[s->area];
no such glyph is found. */
static int
-right_overwritten (s)
- struct glyph_string *s;
+right_overwritten (struct glyph_string *s)
{
int k = -1;
if no such glyph is found. */
static int
-right_overwriting (s)
- struct glyph_string *s;
+right_overwriting (struct glyph_string *s)
{
int i, k, x;
int end = s->row->used[s->area];
in the drawing area. */
static INLINE void
-set_glyph_string_background_width (s, start, last_x)
- struct glyph_string *s;
- int start;
- int last_x;
+set_glyph_string_background_width (struct glyph_string *s, int start, int last_x)
{
/* If the face of this glyph string has to be drawn to the end of
the drawing area, set S->extends_to_end_of_line_p. */
BACKWARD_P non-zero means process predecessors. */
static void
-compute_overhangs_and_x (s, x, backward_p)
- struct glyph_string *s;
- int x;
- int backward_p;
+compute_overhangs_and_x (struct glyph_string *s, int x, int backward_p)
{
if (backward_p)
{
Value is the x-position reached, relative to AREA of W. */
static int
-draw_glyphs (w, x, row, area, start, end, hl, overlaps)
- struct window *w;
- int x;
- struct glyph_row *row;
- enum glyph_row_area area;
- EMACS_INT start, end;
- enum draw_glyphs_face hl;
- int overlaps;
+draw_glyphs (struct window *w, int x, struct glyph_row *row,
+ enum glyph_row_area area, EMACS_INT start, EMACS_INT end,
+ enum draw_glyphs_face hl, int overlaps)
{
struct glyph_string *head, *tail;
struct glyph_string *s;
Called from x_produce_glyphs when IT->glyph_row is non-null. */
static INLINE void
-append_glyph (it)
- struct it *it;
+append_glyph (struct it *it)
{
struct glyph *glyph;
enum glyph_row_area area = it->area;
non-null. */
static INLINE void
-append_composite_glyph (it)
- struct it *it;
+append_composite_glyph (struct it *it)
{
struct glyph *glyph;
enum glyph_row_area area = it->area;
IT->voffset. */
static INLINE void
-take_vertical_position_into_account (it)
- struct it *it;
+take_vertical_position_into_account (struct it *it)
{
if (it->voffset)
{
an overview of struct display_iterator. */
static void
-produce_image_glyph (it)
- struct it *it;
+produce_image_glyph (struct it *it)
{
struct image *img;
struct face *face;
stretch. ASCENT is the ascent of the glyph (0 <= ASCENT <= HEIGHT). */
static void
-append_stretch_glyph (it, object, width, height, ascent)
- struct it *it;
- Lisp_Object object;
- int width, height;
- int ascent;
+append_stretch_glyph (struct it *it, Lisp_Object object,
+ int width, int height, int ascent)
{
struct glyph *glyph;
enum glyph_row_area area = it->area;
ASCENT must be in the range 0 <= ASCENT <= 100. */
static void
-produce_stretch_glyph (it)
- struct it *it;
+produce_stretch_glyph (struct it *it)
{
/* (space :width WIDTH :height HEIGHT ...) */
Lisp_Object prop, plist;
static Lisp_Object
-calc_line_height_property (it, val, font, boff, override)
- struct it *it;
- Lisp_Object val;
- struct font *font;
- int boff, override;
+calc_line_height_property (struct it *it, Lisp_Object val, struct font *font,
+ int boff, int override)
{
Lisp_Object face_name = Qnil;
int ascent, descent, height;
for an overview of struct it. */
void
-x_produce_glyphs (it)
- struct it *it;
+x_produce_glyphs (struct it *it)
{
int extra_line_spacing = it->extra_line_spacing;
it->pixel_width = 0;
it->nglyphs = 0;
- height = get_it_property(it, Qline_height);
+ height = get_it_property (it, Qline_height);
/* Split (line-height total-height) list */
if (CONSP (height)
&& CONSP (XCDR (height))
total_height = XCAR (XCDR (height));
height = XCAR (height);
}
- height = calc_line_height_property(it, height, font, boff, 1);
+ height = calc_line_height_property (it, height, font, boff, 1);
if (it->override_ascent >= 0)
{
it->ascent = XINT (height) - it->descent;
if (!NILP (total_height))
- spacing = calc_line_height_property(it, total_height, font, boff, 0);
+ spacing = calc_line_height_property (it, total_height, font, boff, 0);
else
{
- spacing = get_it_property(it, Qline_spacing);
- spacing = calc_line_height_property(it, spacing, font, boff, 0);
+ spacing = get_it_property (it, Qline_spacing);
+ spacing = calc_line_height_property (it, spacing, font, boff, 0);
}
if (INTEGERP (spacing))
{
row being updated. */
void
-x_write_glyphs (start, len)
- struct glyph *start;
- int len;
+x_write_glyphs (struct glyph *start, int len)
{
int x, hpos;
Insert LEN glyphs from START at the nominal cursor position. */
void
-x_insert_glyphs (start, len)
- struct glyph *start;
- int len;
+x_insert_glyphs (struct glyph *start, int len)
{
struct frame *f;
struct window *w;
updated_window. TO_X == -1 means clear to the end of this area. */
void
-x_clear_end_of_line (to_x)
- int to_x;
+x_clear_end_of_line (int to_x)
{
struct frame *f;
struct window *w = updated_window;
of the bar cursor. */
static enum text_cursor_kinds
-get_specified_cursor_type (arg, width)
- Lisp_Object arg;
- int *width;
+get_specified_cursor_type (Lisp_Object arg, int *width)
{
enum text_cursor_kinds type;
/* Set the default cursor types for specified frame. */
void
-set_frame_cursor_types (f, arg)
- struct frame *f;
- Lisp_Object arg;
+set_frame_cursor_types (struct frame *f, Lisp_Object arg)
{
int width;
Lisp_Object tem;
In all other cases, we want a hollow box cursor. */
static enum text_cursor_kinds
-get_window_cursor_type (w, glyph, width, active_cursor)
- struct window *w;
- struct glyph *glyph;
- int *width;
- int *active_cursor;
+get_window_cursor_type (struct window *w, struct glyph *glyph, int *width,
+ int *active_cursor)
{
struct frame *f = XFRAME (w->frame);
struct buffer *b = XBUFFER (w->buffer);
are window-relative. */
static void
-notice_overwritten_cursor (w, area, x0, x1, y0, y1)
- struct window *w;
- enum glyph_row_area area;
- int x0, y0, x1, y1;
+notice_overwritten_cursor (struct window *w, enum glyph_row_area area,
+ int x0, int x1, int y0, int y1)
{
int cx0, cx1, cy0, cy1;
struct glyph_row *row;
with respect to the overlapping part OVERLAPS. */
void
-x_fix_overlapping_area (w, row, area, overlaps)
- struct window *w;
- struct glyph_row *row;
- enum glyph_row_area area;
- int overlaps;
+x_fix_overlapping_area (struct window *w, struct glyph_row *row,
+ enum glyph_row_area area, int overlaps)
{
int i, x;
comment of draw_glyphs for the meaning of HL. */
void
-draw_phys_cursor_glyph (w, row, hl)
- struct window *w;
- struct glyph_row *row;
- enum draw_glyphs_face hl;
+draw_phys_cursor_glyph (struct window *w, struct glyph_row *row,
+ enum draw_glyphs_face hl)
{
/* If cursor hpos is out of bounds, don't draw garbage. This can
happen in mini-buffer windows when switching between echo area
Erase the image of a cursor of window W from the screen. */
void
-erase_phys_cursor (w)
- struct window *w;
+erase_phys_cursor (struct window *w)
{
struct frame *f = XFRAME (w->frame);
Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
where to put the cursor is specified by HPOS, VPOS, X and Y. */
void
-display_and_set_cursor (w, on, hpos, vpos, x, y)
- struct window *w;
- int on, hpos, vpos, x, y;
+display_and_set_cursor (struct window *w, int on,
+ int hpos, int vpos, int x, int y)
{
struct frame *f = XFRAME (w->frame);
int new_cursor_type;
of ON. */
void
-update_window_cursor (w, on)
- struct window *w;
- int on;
+update_window_cursor (struct window *w, int on)
{
/* Don't update cursor in windows whose frame is in the process
of being deleted. */
in the window tree rooted at W. */
static void
-update_cursor_in_window_tree (w, on_p)
- struct window *w;
- int on_p;
+update_cursor_in_window_tree (struct window *w, int on_p)
{
while (w)
{
Don't change the cursor's position. */
void
-x_update_cursor (f, on_p)
- struct frame *f;
- int on_p;
+x_update_cursor (struct frame *f, int on_p)
{
update_cursor_in_window_tree (XWINDOW (f->root_window), on_p);
}
is about to be rewritten. */
void
-x_clear_cursor (w)
- struct window *w;
+x_clear_cursor (struct window *w)
{
if (FRAME_VISIBLE_P (XFRAME (w->frame)) && w->phys_cursor_on_p)
update_window_cursor (w, 0);
Display the active region described by mouse_face_* according to DRAW. */
void
-show_mouse_face (dpyinfo, draw)
- Display_Info *dpyinfo;
- enum draw_glyphs_face draw;
+show_mouse_face (Display_Info *dpyinfo, enum draw_glyphs_face draw)
{
struct window *w = XWINDOW (dpyinfo->mouse_face_window);
struct frame *f = XFRAME (WINDOW_FRAME (w));
face was actually drawn unhighlighted. */
int
-clear_mouse_face (dpyinfo)
- Display_Info *dpyinfo;
+clear_mouse_face (Display_Info *dpyinfo)
{
int cleared = 0;
Non-zero if physical cursor of window W is within mouse face. */
int
-cursor_in_mouse_face_p (w)
- struct window *w;
+cursor_in_mouse_face_p (struct window *w)
{
Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (XFRAME (w->frame));
int in_mouse_face = 0;
Value is non-zero if a glyph was found. */
static int
-fast_find_string_pos (w, pos, object, hpos, vpos, x, y, right_p)
- struct window *w;
- EMACS_INT pos;
- Lisp_Object object;
- int *hpos, *vpos, *x, *y;
- int right_p;
+fast_find_string_pos (struct window *w, EMACS_INT pos, Lisp_Object object,
+ int *hpos, int *vpos, int *x, int *y, int right_p)
{
int yb = window_text_bottom_y (w);
struct glyph_row *r;
/* See if position X, Y is within a hot-spot of an image. */
static int
-on_hot_spot_p (hot_spot, x, y)
- Lisp_Object hot_spot;
- int x, y;
+on_hot_spot_p (Lisp_Object hot_spot, int x, int y)
{
if (!CONSP (hot_spot))
return 0;
}
Lisp_Object
-find_hot_spot (map, x, y)
- Lisp_Object map;
- int x, y;
+find_hot_spot (Lisp_Object map, int x, int y)
{
while (CONSP (map))
{
/* Display frame CURSOR, optionally using shape defined by POINTER. */
static void
-define_frame_cursor1 (f, cursor, pointer)
- struct frame *f;
- Cursor cursor;
- Lisp_Object pointer;
+define_frame_cursor1 (struct frame *f, Cursor cursor, Lisp_Object pointer)
{
/* Do not change cursor shape while dragging mouse. */
if (!NILP (do_mouse_tracking))
position relative to the start of the mode line. */
static void
-note_mode_line_or_margin_highlight (window, x, y, area)
- Lisp_Object window;
- int x, y;
- enum window_part area;
+note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y,
+ enum window_part area)
{
struct window *w = XWINDOW (window);
struct frame *f = XFRAME (w->frame);
X and Y can be negative or out of range. */
void
-note_mouse_highlight (f, x, y)
- struct frame *f;
- int x, y;
+note_mouse_highlight (struct frame *f, int x, int y)
{
Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
enum window_part part;
functions to ensure the mouse-highlight is off. */
void
-x_clear_window_mouse_face (w)
- struct window *w;
+x_clear_window_mouse_face (struct window *w)
{
Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (XFRAME (w->frame));
Lisp_Object window;
This is used when the size of F is changed. */
void
-cancel_mouse_face (f)
- struct frame *f;
+cancel_mouse_face (struct frame *f)
{
Lisp_Object window;
Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
which intersects rectangle R. R is in window-relative coordinates. */
static void
-expose_area (w, row, r, area)
- struct window *w;
- struct glyph_row *row;
- XRectangle *r;
- enum glyph_row_area area;
+expose_area (struct window *w, struct glyph_row *row, XRectangle *r,
+ enum glyph_row_area area)
{
struct glyph *first = row->glyphs[area];
struct glyph *end = row->glyphs[area] + row->used[area];
non-zero if mouse-face was overwritten. */
static int
-expose_line (w, row, r)
- struct window *w;
- struct glyph_row *row;
- XRectangle *r;
+expose_line (struct window *w, struct glyph_row *row, XRectangle *r)
{
xassert (row->enabled_p);
LAST_OVERLAPPING_ROW is the last such row. */
static void
-expose_overlaps (w, first_overlapping_row, last_overlapping_row, r)
- struct window *w;
- struct glyph_row *first_overlapping_row;
- struct glyph_row *last_overlapping_row;
- XRectangle *r;
+expose_overlaps (struct window *w,
+ struct glyph_row *first_overlapping_row,
+ struct glyph_row *last_overlapping_row,
+ XRectangle *r)
{
struct glyph_row *row;
/* Return non-zero if W's cursor intersects rectangle R. */
static int
-phys_cursor_in_rect_p (w, r)
- struct window *w;
- XRectangle *r;
+phys_cursor_in_rect_p (struct window *w, XRectangle *r)
{
XRectangle cr, result;
struct glyph *cursor_glyph;
have vertical scroll bars. */
void
-x_draw_vertical_border (w)
- struct window *w;
+x_draw_vertical_border (struct window *w)
{
struct frame *f = XFRAME (WINDOW_FRAME (w));
mouse-face. */
static int
-expose_window (w, fr)
- struct window *w;
- XRectangle *fr;
+expose_window (struct window *w, XRectangle *fr)
{
struct frame *f = XFRAME (w->frame);
XRectangle wr, r;
non-zero if the exposure overwrites mouse-face. */
static int
-expose_window_tree (w, r)
- struct window *w;
- XRectangle *r;
+expose_window_tree (struct window *w, XRectangle *r)
{
struct frame *f = XFRAME (w->frame);
int mouse_face_overwritten_p = 0;
the entire frame. */
void
-expose_frame (f, x, y, w, h)
- struct frame *f;
- int x, y, w, h;
+expose_frame (struct frame *f, int x, int y, int w, int h)
{
XRectangle r;
int mouse_face_overwritten_p = 0;
empty. */
int
-x_intersect_rectangles (r1, r2, result)
- XRectangle *r1, *r2, *result;
+x_intersect_rectangles (XRectangle *r1, XRectangle *r2, XRectangle *result)
{
XRectangle *left, *right;
XRectangle *upper, *lower;
***********************************************************************/
void
-syms_of_xdisp ()
+syms_of_xdisp (void)
{
Vwith_echo_area_save_vector = Qnil;
staticpro (&Vwith_echo_area_save_vector);
/* Initialize this module when Emacs starts. */
void
-init_xdisp ()
+init_xdisp (void)
{
Lisp_Object root_window;
struct window *mini_w;
/* Return non-zero if houglass timer has been started or hourglass is shown. */
int
-hourglass_started ()
+hourglass_started (void)
{
return hourglass_shown_p || hourglass_atimer != NULL;
}
/* Cancel a currently active hourglass timer, and start a new one. */
void
-start_hourglass ()
+start_hourglass (void)
{
#if defined (HAVE_WINDOW_SYSTEM)
EMACS_TIME delay;
/* Cancel the hourglass cursor timer if active, hide a busy cursor if
shown. */
void
-cancel_hourglass ()
+cancel_hourglass (void)
{
#if defined (HAVE_WINDOW_SYSTEM)
if (hourglass_atimer)