mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-26 07:33:47 +00:00
Merge from trunk.
This commit is contained in:
commit
47ec731ece
25
autogen/configure
vendored
25
autogen/configure
vendored
@ -4640,6 +4640,11 @@ case "${canonical}" in
|
||||
opsys=freebsd
|
||||
;;
|
||||
|
||||
## DragonFly ports
|
||||
*-*-dragonfly* )
|
||||
opsys=dragonfly
|
||||
;;
|
||||
|
||||
## FreeBSD kernel + glibc based userland
|
||||
*-*-kfreebsd*gnu* )
|
||||
opsys=gnu-kfreebsd
|
||||
@ -8462,7 +8467,7 @@ esac
|
||||
|
||||
LD_SWITCH_SYSTEM=
|
||||
case "$opsys" in
|
||||
freebsd)
|
||||
freebsd|dragonfly)
|
||||
## Let `ld' find image libs and similar things in /usr/local/lib.
|
||||
## The system compiler, GCC, has apparently been modified to not
|
||||
## look there, contrary to what a stock GCC would do.
|
||||
@ -8552,7 +8557,7 @@ case "$opsys" in
|
||||
## IBM's X11R5 uses -lIM and -liconv in AIX 3.2.2.
|
||||
aix4-2) LIBS_SYSTEM="-lrts -lIM -liconv" ;;
|
||||
|
||||
freebsd) LIBS_SYSTEM="-lutil" ;;
|
||||
freebsd|dragonfly) LIBS_SYSTEM="-lutil" ;;
|
||||
|
||||
hpux*) LIBS_SYSTEM="-l:libdld.sl" ;;
|
||||
|
||||
@ -8589,7 +8594,7 @@ case $opsys in
|
||||
## Adding -lm confuses the dynamic linker, so omit it.
|
||||
LIB_MATH=
|
||||
;;
|
||||
freebsd )
|
||||
freebsd | dragonfly )
|
||||
SYSTEM_TYPE=berkeley-unix
|
||||
;;
|
||||
gnu-linux | gnu-kfreebsd )
|
||||
@ -13783,7 +13788,7 @@ mail_lock=no
|
||||
case "$opsys" in
|
||||
aix4-2) mail_lock="lockf" ;;
|
||||
|
||||
gnu|freebsd|netbsd|openbsd|darwin|irix6-5) mail_lock="flock" ;;
|
||||
gnu|freebsd|dragonfly|netbsd|openbsd|darwin|irix6-5) mail_lock="flock" ;;
|
||||
|
||||
## On GNU/Linux systems, both methods are used by various mail programs.
|
||||
## I assume most people are using newer mailers that have heard of flock.
|
||||
@ -14150,7 +14155,7 @@ $as_echo "$emacs_cv_freebsd_terminfo" >&6; }
|
||||
fi
|
||||
;;
|
||||
|
||||
openbsd) LIBS_TERMCAP="-lncurses" ;;
|
||||
openbsd | dragonfly) LIBS_TERMCAP="-lncurses" ;;
|
||||
|
||||
## hpux: Make sure we get select from libc rather than from libcurses
|
||||
## because libcurses on HPUX 10.10 has a broken version of select.
|
||||
@ -15527,7 +15532,7 @@ $as_echo "#define HAVE_PROCFS 1" >>confdefs.h
|
||||
esac
|
||||
|
||||
case $opsys in
|
||||
darwin | freebsd | netbsd | openbsd )
|
||||
darwin | dragonfly | freebsd | netbsd | openbsd )
|
||||
|
||||
$as_echo "#define DONT_REOPEN_PTY 1" >>confdefs.h
|
||||
|
||||
@ -15609,7 +15614,7 @@ case $opsys in
|
||||
|
||||
;;
|
||||
|
||||
gnu-linux | gnu-kfreebsd | freebsd | netbsd )
|
||||
gnu-linux | gnu-kfreebsd | dragonfly | freebsd | netbsd )
|
||||
if test "x$ac_cv_func_grantpt" = xyes; then
|
||||
|
||||
$as_echo "#define UNIX98_PTYS 1" >>confdefs.h
|
||||
@ -15688,7 +15693,7 @@ esac
|
||||
|
||||
|
||||
case $opsys in
|
||||
aix4-2 | cygwin | gnu | irix6-5 | freebsd | netbsd | openbsd | darwin )
|
||||
aix4-2 | cygwin | gnu | irix6-5 | dragonfly | freebsd | netbsd | openbsd | darwin )
|
||||
$as_echo "#define SIGNALS_VIA_CHARACTERS 1" >>confdefs.h
|
||||
|
||||
;;
|
||||
@ -15752,7 +15757,7 @@ case $opsys in
|
||||
darwin) $as_echo "#define TAB3 OXTABS" >>confdefs.h
|
||||
;;
|
||||
|
||||
gnu | freebsd | netbsd | openbsd )
|
||||
gnu | dragonfly | freebsd | netbsd | openbsd )
|
||||
|
||||
$as_echo "#define TABDLY OXTABS" >>confdefs.h
|
||||
|
||||
@ -15831,7 +15836,7 @@ if test x$GCC = xyes; then
|
||||
|
||||
else
|
||||
case $opsys in
|
||||
freebsd | netbsd | openbsd | irix6-5 | sol2* )
|
||||
dragonfly | freebsd | netbsd | openbsd | irix6-5 | sol2* )
|
||||
$as_echo "#define GC_SETJMP_WORKS 1" >>confdefs.h
|
||||
|
||||
;;
|
||||
|
@ -1,3 +1,13 @@
|
||||
2013-04-19 Masatake YAMATO <yamato@redhat.com>
|
||||
|
||||
* progmodes/sh-script.el (sh-imenu-generic-expression): Handle
|
||||
function names with a single character. (Bug#11182)
|
||||
|
||||
2013-04-19 Dima Kogan <dima@secretsauce.net> (tiny change)
|
||||
|
||||
* progmodes/gud.el (gud-perldb-marker-filter): Understand position info
|
||||
for subroutines defined in an eval (bug#14182).
|
||||
|
||||
2013-04-19 Thierry Volpiatto <thierry.volpiatto@gmail.com>
|
||||
|
||||
* bookmark.el (bookmark-completing-read): Improve handling of empty
|
||||
|
@ -1487,14 +1487,38 @@ into one that invokes an Emacs-enabled debugging session.
|
||||
(let ((output ""))
|
||||
|
||||
;; Process all the complete markers in this chunk.
|
||||
(while (string-match "\032\032\\(\\([a-zA-Z]:\\)?[^:\n]*\\):\\([0-9]*\\):.*\n"
|
||||
gud-marker-acc)
|
||||
;;
|
||||
;; Here I match the string coming out of perldb.
|
||||
;; The strings can look like any of
|
||||
;;
|
||||
;; "\032\032/tmp/tst.pl:6:0\n"
|
||||
;; "\032\032(eval 5)[/tmp/tst.pl:6]:3:0\n"
|
||||
;; "\032\032(eval 17)[Basic/Core/Core.pm.PL (i.e. PDL::Core.pm):2931]:1:0\n"
|
||||
;;
|
||||
;; From those I want the filename and the line number. First I look for
|
||||
;; the eval case. If that doesn't match, I look for the "normal" case.
|
||||
(while
|
||||
(string-match
|
||||
(eval-when-compile
|
||||
(let ((file-re "\\(?:[a-zA-Z]:\\)?[^:\n]*"))
|
||||
(concat "\032\032\\(?:"
|
||||
(concat
|
||||
"(eval [0-9]+)\\["
|
||||
"\\(" file-re "\\)" ; Filename.
|
||||
"\\(?: (i\\.e\\. [^)]*)\\)?"
|
||||
":\\([0-9]*\\)\\]") ; Line number.
|
||||
"\\|"
|
||||
(concat
|
||||
"\\(?1:" file-re "\\)" ; Filename.
|
||||
":\\(?2:[0-9]*\\)") ; Line number.
|
||||
"\\):.*\n")))
|
||||
gud-marker-acc)
|
||||
(setq
|
||||
|
||||
;; Extract the frame position from the marker.
|
||||
gud-last-frame
|
||||
(cons (match-string 1 gud-marker-acc)
|
||||
(string-to-number (match-string 3 gud-marker-acc)))
|
||||
(string-to-number (match-string 2 gud-marker-acc)))
|
||||
|
||||
;; Append any text before the marker to the output we're going
|
||||
;; to return - we don't include the marker in this text.
|
||||
|
@ -3176,6 +3176,7 @@ To this:
|
||||
(\"decorator\" . 173)
|
||||
(\"decorator.wrap\" . 353)
|
||||
(\"decorator.wrapped_f\" . 393))"
|
||||
;; Inspired by imenu--flatten-index-alist removed in revno 21853.
|
||||
(apply
|
||||
'nconc
|
||||
(mapcar
|
||||
@ -3187,14 +3188,14 @@ To this:
|
||||
(cond ((or (numberp pos) (markerp pos))
|
||||
(list (cons name pos)))
|
||||
((listp pos)
|
||||
(message "%S" item)
|
||||
(cons
|
||||
(cons name (cdar pos))
|
||||
(python-imenu-create-flat-index (cddr item) name))))))
|
||||
(or alist
|
||||
(let ((python-imenu-format-item-label-function (lambda (type name) name))
|
||||
(python-imenu-format-parent-item-label-function (lambda (type name) name))
|
||||
(python-imenu-format-parent-item-jump-label-function (lambda (type name) name)))
|
||||
(let* ((fn (lambda (type name) name))
|
||||
(python-imenu-format-item-label-function fn)
|
||||
(python-imenu-format-parent-item-label-function fn)
|
||||
(python-imenu-format-parent-item-jump-label-function fn))
|
||||
(python-imenu-create-index))))))
|
||||
|
||||
|
||||
|
@ -335,11 +335,11 @@ shell it really is."
|
||||
. ((nil
|
||||
;; function FOO
|
||||
;; function FOO()
|
||||
"^\\s-*function\\s-+\\\([[:alpha:]_][[:alnum:]_]+\\)\\s-*\\(?:()\\)?"
|
||||
"^\\s-*function\\s-+\\\([[:alpha:]_][[:alnum:]_]*\\)\\s-*\\(?:()\\)?"
|
||||
1)
|
||||
;; FOO()
|
||||
(nil
|
||||
"^\\s-*\\([[:alpha:]_][[:alnum:]_]+\\)\\s-*()"
|
||||
"^\\s-*\\([[:alpha:]_][[:alnum:]_]*\\)\\s-*()"
|
||||
1)
|
||||
)))
|
||||
"Alist of regular expressions for recognizing shell function definitions.
|
||||
|
@ -1,3 +1,22 @@
|
||||
2013-04-20 Erik Charlebois <erikcharlebois@gmail.com>
|
||||
|
||||
* w32fns.c (w32_fullscreen_rect): New function to compute the
|
||||
window rectangle for the given fullscreen mode.
|
||||
(w32_wnd_proc): When in a fullscreen mode, WM_WINDOWPOSCHANGING no
|
||||
longer tunes the window size. This keeps the window's edges flush
|
||||
with the screen and allows the taskbar to hide itself in fullboth.
|
||||
|
||||
* w32term.c (w32fullscreen_hook): 'fullboth' now shows without
|
||||
window decorations and uses the entire screen.
|
||||
|
||||
* w32term.h (w32_fullscreen_rect) Add prototype.
|
||||
(struct w32_output): Replace normal_width, normal_height,
|
||||
normal_top, and normal_left members with a single normal_placement
|
||||
struct.
|
||||
(FRAME_NORMAL_WIDTH, FRAME_NORMAL_HEIGHT, FRAME_NORMAL_TOP):
|
||||
Remove macros.
|
||||
(FRAME_NORMAL_PLACEMENT): New macro.
|
||||
|
||||
2013-04-16 Juanma Barranquero <lekktu@gmail.com>
|
||||
|
||||
* minibuf.c (Ftest_completion): Silence compiler warning.
|
||||
|
72
src/w32fns.c
72
src/w32fns.c
@ -157,6 +157,8 @@ typedef HWND (WINAPI * ImmSetCompositionWindow_Proc) (IN HIMC context,
|
||||
typedef HMONITOR (WINAPI * MonitorFromPoint_Proc) (IN POINT pt, IN DWORD flags);
|
||||
typedef BOOL (WINAPI * GetMonitorInfo_Proc)
|
||||
(IN HMONITOR monitor, OUT struct MONITOR_INFO* info);
|
||||
typedef HMONITOR (WINAPI * MonitorFromWindow_Proc)
|
||||
(IN HWND hwnd, IN DWORD dwFlags);
|
||||
|
||||
TrackMouseEvent_Proc track_mouse_event_fn = NULL;
|
||||
ImmGetCompositionString_Proc get_composition_string_fn = NULL;
|
||||
@ -165,6 +167,7 @@ ImmReleaseContext_Proc release_ime_context_fn = NULL;
|
||||
ImmSetCompositionWindow_Proc set_ime_composition_window_fn = NULL;
|
||||
MonitorFromPoint_Proc monitor_from_point_fn = NULL;
|
||||
GetMonitorInfo_Proc get_monitor_info_fn = NULL;
|
||||
MonitorFromWindow_Proc monitor_from_window_fn = NULL;
|
||||
|
||||
#ifdef NTGUI_UNICODE
|
||||
#define unicode_append_menu AppendMenuW
|
||||
@ -336,6 +339,66 @@ x_real_positions (FRAME_PTR f, int *xptr, int *yptr)
|
||||
*yptr = rect.top;
|
||||
}
|
||||
|
||||
/* Returns the window rectangle appropriate for the given fullscreen mode.
|
||||
The normal rect parameter was the window's rectangle prior to entering
|
||||
fullscreen mode. If multiple monitor support is available, the nearest
|
||||
monitor to the window is chosen. */
|
||||
|
||||
void
|
||||
w32_fullscreen_rect (HWND hwnd, int fsmode, RECT normal, RECT *rect)
|
||||
{
|
||||
struct MONITOR_INFO mi = { sizeof(mi) };
|
||||
if (monitor_from_window_fn && get_monitor_info_fn)
|
||||
{
|
||||
HMONITOR monitor =
|
||||
monitor_from_window_fn (hwnd, MONITOR_DEFAULT_TO_NEAREST);
|
||||
get_monitor_info_fn (monitor, &mi);
|
||||
}
|
||||
else
|
||||
{
|
||||
mi.rcMonitor.left = 0;
|
||||
mi.rcMonitor.top = 0;
|
||||
mi.rcMonitor.right = GetSystemMetrics (SM_CXSCREEN);
|
||||
mi.rcMonitor.bottom = GetSystemMetrics (SM_CYSCREEN);
|
||||
mi.rcWork.left = 0;
|
||||
mi.rcWork.top = 0;
|
||||
mi.rcWork.right = GetSystemMetrics (SM_CXMAXIMIZED);
|
||||
mi.rcWork.bottom = GetSystemMetrics (SM_CYMAXIMIZED);
|
||||
}
|
||||
|
||||
switch (fsmode)
|
||||
{
|
||||
case FULLSCREEN_BOTH:
|
||||
rect->left = mi.rcMonitor.left;
|
||||
rect->top = mi.rcMonitor.top;
|
||||
rect->right = mi.rcMonitor.right;
|
||||
rect->bottom = mi.rcMonitor.bottom;
|
||||
break;
|
||||
case FULLSCREEN_MAXIMIZED:
|
||||
rect->left = mi.rcWork.left;
|
||||
rect->top = mi.rcWork.top;
|
||||
rect->right = mi.rcWork.right;
|
||||
rect->bottom = mi.rcWork.bottom;
|
||||
break;
|
||||
case FULLSCREEN_WIDTH:
|
||||
rect->left = mi.rcWork.left;
|
||||
rect->top = normal.top;
|
||||
rect->right = mi.rcWork.right;
|
||||
rect->bottom = normal.bottom;
|
||||
break;
|
||||
case FULLSCREEN_HEIGHT:
|
||||
rect->left = normal.left;
|
||||
rect->top = mi.rcWork.top;
|
||||
rect->right = normal.right;
|
||||
rect->bottom = mi.rcWork.bottom;
|
||||
break;
|
||||
case FULLSCREEN_NONE:
|
||||
default:
|
||||
*rect = normal;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
DEFUN ("w32-define-rgb-color", Fw32_define_rgb_color,
|
||||
@ -3693,6 +3756,13 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
/* Don't restrict the sizing of tip frames. */
|
||||
if (hwnd == tip_window)
|
||||
return 0;
|
||||
|
||||
/* Don't restrict the sizing of fullscreened frames, allowing them to be
|
||||
flush with the sides of the screen. */
|
||||
f = x_window_to_frame (dpyinfo, hwnd);
|
||||
if (f && FRAME_PREV_FSMODE (f) != FULLSCREEN_NONE)
|
||||
return 0;
|
||||
|
||||
{
|
||||
WINDOWPLACEMENT wp;
|
||||
LPWINDOWPOS lppos = (WINDOWPOS *) lParam;
|
||||
@ -7637,6 +7707,8 @@ globals_of_w32fns (void)
|
||||
GetProcAddress (user32_lib, "MonitorFromPoint");
|
||||
get_monitor_info_fn = (GetMonitorInfo_Proc)
|
||||
GetProcAddress (user32_lib, "GetMonitorInfoA");
|
||||
monitor_from_window_fn = (MonitorFromWindow_Proc)
|
||||
GetProcAddress (user32_lib, "MonitorFromWindow");
|
||||
|
||||
{
|
||||
HMODULE imm32_lib = GetModuleHandle ("imm32.dll");
|
||||
|
106
src/w32term.c
106
src/w32term.c
@ -5663,88 +5663,40 @@ w32fullscreen_hook (FRAME_PTR f)
|
||||
{
|
||||
if (FRAME_VISIBLE_P (f))
|
||||
{
|
||||
int width, height, top_pos, left_pos, pixel_height, pixel_width;
|
||||
int cur_w = FRAME_COLS (f), cur_h = FRAME_LINES (f);
|
||||
RECT workarea_rect;
|
||||
HWND hwnd = FRAME_W32_WINDOW(f);
|
||||
DWORD dwStyle = GetWindowLong (hwnd, GWL_STYLE);
|
||||
RECT rect;
|
||||
|
||||
block_input ();
|
||||
/* Record current "normal" dimensions for restoring later. */
|
||||
if (!( FRAME_PREV_FSMODE (f) == FULLSCREEN_BOTH
|
||||
|| FRAME_PREV_FSMODE (f) == FULLSCREEN_MAXIMIZED))
|
||||
{
|
||||
if (FRAME_PREV_FSMODE (f) != FULLSCREEN_HEIGHT)
|
||||
{
|
||||
FRAME_NORMAL_HEIGHT (f) = cur_h;
|
||||
FRAME_NORMAL_TOP (f) = f->top_pos;
|
||||
}
|
||||
if (FRAME_PREV_FSMODE (f) != FULLSCREEN_WIDTH)
|
||||
{
|
||||
FRAME_NORMAL_WIDTH (f) = cur_w;
|
||||
FRAME_NORMAL_LEFT (f) = f->left_pos;
|
||||
}
|
||||
}
|
||||
eassert (FRAME_NORMAL_HEIGHT (f) > 0);
|
||||
eassert (FRAME_NORMAL_WIDTH (f) > 0);
|
||||
x_real_positions (f, &f->left_pos, &f->top_pos);
|
||||
x_fullscreen_adjust (f, &width, &height, &top_pos, &left_pos);
|
||||
block_input();
|
||||
f->want_fullscreen &= ~FULLSCREEN_WAIT;
|
||||
|
||||
SystemParametersInfo (SPI_GETWORKAREA, 0, &workarea_rect, 0);
|
||||
pixel_height = workarea_rect.bottom - workarea_rect.top;
|
||||
pixel_width = workarea_rect.right - workarea_rect.left;
|
||||
/* Need to send SC_RESTORE to the window, in case we are
|
||||
resizing from FULLSCREEN_MAXIMIZED. Otherwise, the mouse
|
||||
resize hints will not be shown by the window manager when the
|
||||
mouse pointer hovers over the window edges, because the WM
|
||||
will still think the window is maximized. */
|
||||
if (f->want_fullscreen != FULLSCREEN_BOTH)
|
||||
SendMessage (FRAME_W32_WINDOW (f), WM_SYSCOMMAND, SC_RESTORE, 0);
|
||||
if (FRAME_PREV_FSMODE (f) == FULLSCREEN_NONE)
|
||||
GetWindowPlacement (hwnd, &FRAME_NORMAL_PLACEMENT (f));
|
||||
|
||||
if (FRAME_PREV_FSMODE (f) == FULLSCREEN_BOTH)
|
||||
{
|
||||
SetWindowLong (hwnd, GWL_STYLE, dwStyle | WS_OVERLAPPEDWINDOW);
|
||||
SetWindowPos (hwnd, NULL, 0, 0, 0, 0,
|
||||
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
|
||||
SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
|
||||
}
|
||||
|
||||
w32_fullscreen_rect (hwnd, f->want_fullscreen,
|
||||
FRAME_NORMAL_PLACEMENT (f).rcNormalPosition, &rect);
|
||||
FRAME_PREV_FSMODE (f) = f->want_fullscreen;
|
||||
switch (f->want_fullscreen)
|
||||
{
|
||||
case FULLSCREEN_BOTH:
|
||||
PostMessage (FRAME_W32_WINDOW (f), WM_SYSCOMMAND, SC_MAXIMIZE, 0);
|
||||
break;
|
||||
case FULLSCREEN_MAXIMIZED:
|
||||
height =
|
||||
FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, pixel_height)
|
||||
- XINT (Ftool_bar_lines_needed (selected_frame))
|
||||
+ (NILP (Vmenu_bar_mode) ? 1 : 0);
|
||||
width =
|
||||
FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, pixel_width)
|
||||
- FRAME_SCROLL_BAR_COLS (f);
|
||||
left_pos = workarea_rect.left;
|
||||
top_pos = workarea_rect.top;
|
||||
break;
|
||||
case FULLSCREEN_WIDTH:
|
||||
width =
|
||||
FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, pixel_width)
|
||||
- FRAME_SCROLL_BAR_COLS (f);
|
||||
height = FRAME_NORMAL_HEIGHT (f);
|
||||
left_pos = workarea_rect.left;
|
||||
break;
|
||||
case FULLSCREEN_HEIGHT:
|
||||
height =
|
||||
FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, pixel_height)
|
||||
- XINT (Ftool_bar_lines_needed (selected_frame))
|
||||
+ (NILP (Vmenu_bar_mode) ? 1 : 0);
|
||||
width = FRAME_NORMAL_WIDTH (f);
|
||||
top_pos = workarea_rect.top;
|
||||
break;
|
||||
case FULLSCREEN_NONE:
|
||||
height = FRAME_NORMAL_HEIGHT (f);
|
||||
width = FRAME_NORMAL_WIDTH (f);
|
||||
left_pos = FRAME_NORMAL_LEFT (f);
|
||||
top_pos = FRAME_NORMAL_TOP (f);
|
||||
break;
|
||||
}
|
||||
if (f->want_fullscreen == FULLSCREEN_BOTH)
|
||||
{
|
||||
SetWindowLong (hwnd, GWL_STYLE, dwStyle & ~WS_OVERLAPPEDWINDOW);
|
||||
SetWindowPos (hwnd, HWND_TOP, rect.left, rect.top,
|
||||
rect.right - rect.left, rect.bottom - rect.top,
|
||||
SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWindowPos (hwnd, HWND_TOP, rect.left, rect.top,
|
||||
rect.right - rect.left, rect.bottom - rect.top, 0);
|
||||
}
|
||||
|
||||
if (cur_w != width || cur_h != height)
|
||||
{
|
||||
x_set_offset (f, left_pos, top_pos, 1);
|
||||
x_set_window_size (f, 1, width, height);
|
||||
do_pending_window_change (0);
|
||||
}
|
||||
f->want_fullscreen = FULLSCREEN_NONE;
|
||||
unblock_input ();
|
||||
}
|
||||
|
@ -71,6 +71,8 @@ struct w32_palette_entry {
|
||||
};
|
||||
|
||||
extern void w32_regenerate_palette (struct frame *f);
|
||||
extern void w32_fullscreen_rect (HWND hwnd, int fsmode, RECT normal,
|
||||
RECT *rect);
|
||||
|
||||
|
||||
/* For each display (currently only one on w32), we have a structure that
|
||||
@ -362,7 +364,7 @@ struct w32_output
|
||||
/* Frame geometry and full-screen mode before it was resized by
|
||||
specifying the 'fullscreen' frame parameter. Used to restore the
|
||||
geometry when 'fullscreen' is reset to nil. */
|
||||
int normal_width, normal_height, normal_top, normal_left;
|
||||
WINDOWPLACEMENT normal_placement;
|
||||
int prev_fsmode;
|
||||
};
|
||||
|
||||
@ -396,11 +398,8 @@ extern struct w32_output w32term_display;
|
||||
#define FRAME_SMALLEST_FONT_HEIGHT(F) \
|
||||
FRAME_W32_DISPLAY_INFO(F)->smallest_font_height
|
||||
|
||||
#define FRAME_NORMAL_WIDTH(F) ((F)->output_data.w32->normal_width)
|
||||
#define FRAME_NORMAL_HEIGHT(F) ((F)->output_data.w32->normal_height)
|
||||
#define FRAME_NORMAL_TOP(F) ((F)->output_data.w32->normal_top)
|
||||
#define FRAME_NORMAL_LEFT(F) ((F)->output_data.w32->normal_left)
|
||||
#define FRAME_PREV_FSMODE(F) ((F)->output_data.w32->prev_fsmode)
|
||||
#define FRAME_NORMAL_PLACEMENT(F) ((F)->output_data.w32->normal_placement)
|
||||
#define FRAME_PREV_FSMODE(F) ((F)->output_data.w32->prev_fsmode)
|
||||
|
||||
|
||||
/* W32-specific scroll bar stuff. */
|
||||
|
@ -1,3 +1,7 @@
|
||||
2013-04-01 Masatake YAMATO <yamato@redhat.com>
|
||||
|
||||
* automated/imenu-tests.el: New file. (Bug#14112)
|
||||
|
||||
2013-04-19 Fabián Ezequiel Gallina <fgallina@gnu.org>
|
||||
|
||||
* automated/python-tests.el (python-imenu-prev-index-position-1):
|
||||
|
87
test/automated/imenu-test.el
Normal file
87
test/automated/imenu-test.el
Normal file
@ -0,0 +1,87 @@
|
||||
;;; imenu-tests.el --- Test suite for imenu.
|
||||
|
||||
;; Copyright (C) 2013 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Masatake YAMATO <yamato@redhat.com>
|
||||
;; Keywords: tools convenience
|
||||
|
||||
;; 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'imenu)
|
||||
|
||||
;; (imenu-simple-scan-deftest-gather-strings-from-list
|
||||
;; '(nil t 'a (0 . "x") ("c" . "d") ("a" 0 "b") ))
|
||||
;; => ("b" "a" "d" "c" "x")
|
||||
(defun imenu-simple-scan-deftest-gather-strings-from-list(input)
|
||||
"Gather strings from INPUT, a list."
|
||||
(let ((result ()))
|
||||
(while input
|
||||
(cond
|
||||
((stringp input)
|
||||
(setq result (cons input result)
|
||||
input nil))
|
||||
((atom input)
|
||||
(setq input nil))
|
||||
((listp (car input))
|
||||
(setq result (append
|
||||
(imenu-simple-scan-deftest-gather-strings-from-list (car input))
|
||||
result)
|
||||
input (cdr input)))
|
||||
((stringp (car input))
|
||||
(setq result (cons (car input) result)
|
||||
input (cdr input)))
|
||||
(t
|
||||
(setq input (cdr input)))))
|
||||
result))
|
||||
|
||||
(defmacro imenu-simple-scan-deftest (name doc major-mode content expected-items)
|
||||
"Generate an ert test for mode-own imenu expression.
|
||||
Run `imenu-create-index-function' at the buffer which content is
|
||||
CONTENT with MAJOR-MODE. A generated test runs `imenu-create-index-function'
|
||||
at the buffer which content is CONTENT with MAJOR-MODE. Then it compares a list
|
||||
of strings which are picked up from the result with EXPECTED-ITEMS."
|
||||
(let ((xname (intern (concat "imenu-simple-scan-deftest-" (symbol-name name)))))
|
||||
`(ert-deftest ,xname ()
|
||||
,doc
|
||||
(with-temp-buffer
|
||||
(insert ,content)
|
||||
(funcall ',major-mode)
|
||||
(let ((result-items (sort (imenu-simple-scan-deftest-gather-strings-from-list
|
||||
(funcall imenu-create-index-function))
|
||||
#'string-lessp))
|
||||
(expected-items (sort (copy-sequence ,expected-items) #'string-lessp)))
|
||||
(should (equal result-items expected-items))
|
||||
)))))
|
||||
|
||||
(imenu-simple-scan-deftest sh "Test imenu expression for sh-mode." sh-mode "a()
|
||||
{
|
||||
}
|
||||
function b
|
||||
{
|
||||
}
|
||||
function c()
|
||||
{
|
||||
}
|
||||
function ABC_D()
|
||||
{
|
||||
}
|
||||
" '("a" "b" "c" "ABC_D"))
|
||||
|
||||
(provide 'imenu-tests)
|
||||
|
||||
;;; imenu-tests.el ends here
|
Loading…
Reference in New Issue
Block a user