Mercurial > emacs
view lib-src/make-path.c @ 1778:1f18bfe28e2f
* termhooks.h (mouse_position_hook): Doc fix.
(set_vertical_scrollbar_hook): This doesn't return anything any
more, and doesn't take a struct scrollbar * argument any more.
(condemn_scrollbars_hook, redeem_scrollbar_hook,
judge_scrollbars_hook): Doc fixes.
* term.c (mouse_position_hook): Doc fix.
(set_vertical_scrollbar_hook): This doesn't return
anything any more. Doc fixes.
* keyboard.c (kbd_buffer_get_event): Receive the scrollbar's
window from *mouse_position_hook and pass it to
make_lispy_movement, instead of working with a pointer to a struct
scrollbar.
(make_lispy_event): We don't need a window_from_scrollbar function
anymore; we are given the window directly in *EVENT.
Unify the code which generates
text-area mouse clicks and scrollbar clicks; use the same code to
distinguish clicks from drags on the scrollbar as in the text area.
Distinguish clicks from drags by storing a copy of the lispy
position list returned as part of the event.
(button_down_location): Make this a lisp vector, rather than an
array of random structures.
(struct mouse_position): Remove this; it's been replaced by a lisp
list.
(make_lispy_movement): Accept the scrollbar's window as a
parameter, rather than the scrollbar itself.
If FRAME is zero, assume that the other arguments are garbage.
(syms_of_keyboard): No need to staticpro each window of
button_down_location now; just initialize and staticpro it.
* window.c (window_from_scrollbar): Function deleted; no longer
needed.
* xdisp.c (redisplay_window): Just pass the window to
set_vertical_scrollbar hook; don't pass the scrollbar object too.
* xterm.c (XTmouse_position): Don't return a pointer to the
scrollbar for scrollbar motion; instead, return the scrollbar's
window.
* keyboard.c (apply_modifiers): Don't assume that the Qevent_kind
property of BASE is set when we first create the new modified
symbol. Check that the Qevent_kind property is properly set each
time we return any symbol.
* termhooks.h (struct input_event): Replace the frame member with
a Lisp_Object member by the name of frame_or_window. Doc fixes.
Remove the scrollbar member; instead, use frame_or_window to hold the
window whose scrollbar was clicked.
* keyboard.c (kbd_buffer_store_event, kbd_buffer_get_event,
make_lispy_event): Adjust references to frame member of struct
input_event to use frame_or_window now.
* xterm.c (construct_mouse_click, XTread_socket): Same.
* keyboard.c (kbd_buffer_frames): Renamed to
kbd_buffer_frame_or_window, and made to exist even when
MULTI_FRAME isn't defined; single-frame systems might have
scrollbars. Use it to GCPRO the frame_or_window field in the
event queue.
(kbd_buffer_store_event, kbd_buffer_get_event,
stuff_buffered_input): Set and clear the
appropriate element of kbd_buffer_frame_or_window, whether or not
MULTI_FRAME is #defined.
(read_avail_input): When reading characters directly from stdin,
set the frame_or_window field of the event appropriately,
depending on whether or not MULTI_FRAME is #defined.
(Fdiscard_input, init_keyboard): Zap kbd_buffer_frame_or_window,
not kbd_buffer_frames.
(syms_of_keyboard): Initialize and staticpro
kbd_buffer_frame_or_window, whether or not MULTI_FRAME is
#defined.
* keyboard.c (head_table): Make Qscrollbar_movement have a
Qevent_kind property of Qmouse_movement, not Qscrollbar_movement.
* keyboard.c (read_key_sequence): If we decide to throw away a
mouse event which has prefix symbols (`mode-line',
`vertical-scrollbar', etcetera), remember that we may have to
unwind two characters, not just one.
* keyboard.c (read_key_sequence): Doc fixes.
* keyboard.c (kbd_buffer_store_event): Fix reversed sense of test
for focus redirection.
* keyboard.c (read_char): Don't echo mouse movements.
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Thu, 14 Jan 1993 15:11:19 +0000 |
parents | 3d7bd998e203 |
children | 07010383044d |
line wrap: on
line source
/* Make all the directories along a path. Copyright (C) 1992 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* This program works like mkdir, except that it generates intermediate directories if they don't exist. This is just like the `mkdir -p' command on most systems; unfortunately, the mkdir command on some of the purer BSD systems (like Mt. Xinu) don't have that option. */ #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <errno.h> extern int errno; char *prog_name; int touchy_mkdir (path) char *path; { struct stat buf; /* If PATH already exists and is a directory, return success. */ if (stat (path, &buf) >= 0 && (buf.st_mode & S_IFMT) == S_IFDIR) return 0; /* Otherwise, try to make it. If PATH exists but isn't a directory, this will signal an error. */ if (mkdir (path, 0777) < 0) { fprintf (stderr, "%s: ", prog_name); perror (path); return -1; } return 0; } int main (argc, argv) int argc; char **argv; { prog_name = *argv; for (argc--, argv++; argc > 0; argc--, argv++) { char *path = *argv; int i; /* Stop at each slash in path and try to create the directory. Skip any initial slash. */ for (i = (path[0] == '/') ? 1 : 0; path[i]; i++) if (path[i] == '/') { path[i] = '\0'; if (touchy_mkdir (path) < 0) goto next_pathname; path[i] = '/'; } touchy_mkdir (path); next_pathname: ; } }