* nsterm.m (windowDidResize:,windowWillExitFullScreen:)
(windowDidExitFullScreen:): Return if frame is dead.
These functions may be called when a fullscreen frame
is closed; they are called before, not after.
May address Bug#21428.
* lisp/frame.el (redisplay--variables): Make it a hash-table.
* src/xdisp.c (maybe_set_redisplay): Access redisplay--variables
as a hash-table. This speeds up this function by an order of
magnitude: where previously a setq was slowed down by 100% by
introducing the maybe_set_redisplay test, it is now only 5%
slower.
(syms_of_xdisp) <redisplay--variables>: Doc fix.
* src/buffer.c (report_overlay_modification): When called with
AFTER non-zero, don't invoke overlay modification hooks if the
buffer recorded in last_overlay_modification_hooks is different
from the current buffer. (Bug#21824)
The fringe bitmaps were inverted, the background was not transparent,
the image data was horizontally mirrored, and periodic fringe bitmaps
were not supported.
* nsimage.m ([EmacsImage initFromXBM:width:height:fg:bg:]): When
both background and foreground colors are 0, set the background
alpha channel to 0 (making the background transparent). When
copying the image data, do this from the most significant bit
(leftmost) to the least (rightmost), to avoid mirroring.
* nsterm.m (ns_draw_fringe_bitmap): Don't invert the image bits. Add
support for periodic images (e.g. the empty line indicator).
Input events started to arrive before ns_term_init() was finished.
Solved by blocking input. This also seems to correct the "You
can't open the application "Emacs" because it may be damaged or
incomplete" error issued when double-clicking on the Emacs
application.
* nsterm.m (ns_constrain_all_frames, ns_init_term): Block input.
* nsterm.m (ns_send_appdefined, EmacsApp): Trace output.
* nsterm.h (struct ns_output): New flag, in_animation.
* nsfns.m (Fx_create_frame): Initialize in_animation flag.
* nsmenu.m (free_frame_tool_bar, update_frame_tool_bar): Set
in_animation flag around call to "setVisible". Set new tool bar
height before call to setVisible.
* nsterm.m (x_set_window_size): Don't call [view setRow:
andColumns:] as this fools the subsequent call to updateFrameSize
from performing the real resize.
(windowDidResize): Don't update anything when in_animation is
non-zero.
Trace output.
* nsmenu.m (free_frame_tool_bar, update_frame_tool_bar)
(EmacsToolbar):
* nsterm.m (x_set_window_size, updateFrameSize)
([EmacsView setRows: andColumns:])
Mainly, explain how to use it without hanging Emacs, or giving the
impression that it is hanging. Also mention `pre-command-hook'.
(pre-command-hook): Mention `post-command-hook'.
* src/lisp.h (LISP_MACRO_DEFUN, LISP_MACRO_DEFUN_VOID): Remove.
All uses rewritten to define the function directly rather than to
use a macro to define the function. This conforms to Standard C,
which does not allow stray semicolons at the top level. I hope it
also avoids the problems with TAGS. Those macros, though clever,
were pretty confusing anyway, and it wasn’t clear they were worth
the aggravation even without the TAGS problem.
* src/window.c (wset_update_mode_line): New function, sets either the
window's update_mode_line flag or the global update_mode_lines
variable.
(Fset_window_start, set_window_buffer, window_scroll_pixel_based)
(window_scroll_line_based): Call it instead of only setting the
window's update_mode_line flag.
* src/window.c (set_window_buffer): If the window is the frame's
selected window, set update_mode_lines, not the window's
update_mode_line flag. (Bug#21739)
* src/buffer.c (Fkill_buffer): Undo last change.
(set_update_modelines_for_buf): Function deleted.
* src/lisp.h (LISP_MACRO_DEFUN): Mention in the commentary the
need to end each invocation with a semi-colon.
Add a semi-colon at the end of each invocation of LISP_MACRO_DEFUN
and LISP_MACRO_DEFUN_VOID. This is to avoid missing in TAGS
inline functions defined immediately after each invocation, and
also avoid tagging every invocation of these macros.
* src/buffer.c (set_update_modelines_for_buf): New function.
(Fkill_buffer): Use it to set the global variable
update_mode_lines if the killed buffer was displayed in some
window. Don't set windows_or_buffers_changed. This is a better
fix for bug#21739 than the previous fix, since it will cause only
redisplay of mode lines, not of entire windows, but will still
catch attention of x_consider_frame_title in xdisp.c, which
redraws the frame title.
Full-height, full-width, and maximized windows now cover the
entire screen (except the menu bar), including the part where the
system dock is placed. The system zoom animation is no longer
used.
Made NonMaximized->FullWidth->FullHeight->NonMaximized restore the
original size.
* nsterm.m (ns_menu_bar_height): New function, return height of
the menu bar, or 0 when it's hidden.
* nsterm.m (constrain_frame_rect): New function for constraining a
frame.
* nsterm.m (ns_constrain_all_frames): Set frame size explicitly
rather than relying on the system doing it for us by writing back
the current frame size.
* nsterm.m (windowWillUseStandardFrame): Register non-maximized
width or height as new user size. When entering full width or
height, the other size component is taken from the user size.
* nsterm.m (fullscreenState): New method for accessing the
fullscreen state.
* nsterm.m (constrainFrameRect): Restrict frame to be placed under
the menu bar, if present. The old version, sometimes, restricted
the height of a frame to the screen, this version never does this.
* nsterm.m (zoom): Perform zoom by setting the frame to the full
size of the screen (minus the menu bar). The default system
function, with the zoom animation, is no longer used, as the final
frame size doesn't cover the entire screen.
Rework how to constrain resizing to the character grid. The old
system used "resizeIncrements" in NSWindows. However, once a frame
was resized so that it was not aligned to the text grid, it
remained unaligned even after a resize. In addition, it conflicted
when resizing a fullheight window.
* nsterm.m (windowWillResize): Restrict frame size to text grid,
unless when pixelwise frame resizing is enabled.
* nsterm.m (updateFrameSize, initFrameFromEmacs)
(toggleFullScreen, handleFS): Don't set resizeIncrements.
Redesign the NS trace system. The call structure is represented
using indentations and vertical lines. The NSTRACE macro accepts
printf-style arguments. New macros for printing various
information.
* nsterm.h (NSTRACE_ENABLED): Macro to enable trace system.
* nsterm.h (NSTRACE, NSTRACE_WHEN, NSTRACE_UNLESS): Macros to
start a new block (typically a function), accept printf-style
arguments.
* nsterm.h (NSTRACE_MSG): Macro for extra information, accepts
printf-style arguments.
* nsterm.h (NSTRACE_what): Macros for printing various types.
* nsterm.h (NSTRACE_FMT_what): Macro with printf format string
snippets.
* nsterm.h (NSTRACE_ARG_what): Macros for passing printf-style
arguments, corresponds to NSTRACE_FMT_what.
* nsterm.h (NSTRACE_RETURN): Macro to print return value, accept
printf-style arguments.
* nsterm.h (NSTRACE_RETURN_what): Macros to print return value for
various types.
* nsterm.m: Remove old NSTRACE macro.
* nsterm.m (nstrace_num): Trace counter.
* nsterm.m (nstrace_depth): Current call depth.
* nsterm.m (nstrace_leave): NSTRACE support function, called when
the local variable "nstrace_enabled" goes out of scope using the
"cleanup" extension.
* nsterm.m (ns_print_fullscreen_type_name): NSTRACE_FSTYPE support
function.
* nsterm.m (constrain_frame_rect, ns_constrain_all_frames)
(ns_update_auto_hide_menu_bar, ns_update_begin)
(ns_update_window_begin, update_window_end, ns_update_end)
(ns_focus, ns_unfocus, ns_ring_bell, ns_frame_raise_lower)
(ns_frame_rehighlight, x_make_frame_visible)
(x_make_frame_invisible, x_iconify_frame, x_free_frame_resources)
(x_destroy_window, x_set_offset, x_set_window_size)
(ns_fullscreen_hook, ns_lisp_to_color, ns_color_to_lisp)
(ns_defined_color, frame_set_mouse_pixel_position)
(note_mouse_movement, ns_mouse_position, ns_frame_up_to_date)
(ns_define_frame_cursor, x_get_keysym_name, ns_redraw_scroll_bars)
(ns_clear_frame, ns_clear_frame_area, ns_scroll_run)
(ns_after_update_window_line, ns_shift_glyphs_for_insert)
(dumpcursor, ns_draw_vertical_window_border)
(ns_draw_window_divider, ns_draw_relief)
(ns_dumpglyphs_box_or_relief, ns_maybe_dumpglyphs_background)
(ns_dumpglyphs_image, ns_draw_glyph_string, ns_send_appdefined)
(ns_read_socket, ns_select, ns_set_vertical_scroll_bar)
(ns_set_horizontal_scroll_bar, ns_condemn_scroll_bars)
(ns_redeem_scroll_bar, ns_judge_scroll_bars, ns_delete_terminal)
(ns_create_terminal, ns_term_init, sendEvent)
(applicationDidFinishLaunching, applicationDidBecomeActive)
(timeout_handler, fd_handler, EmacsView_dealloc, changeFont)
(acceptsFirstResponder, resetCursorRects, keyDown, mouseDown)
(deltaIsZero, rightMouseDown, otherMouseDown, mouseUp)
(rightMouseUp, otherMouseUp, scrollWheel, mouseMoved)
(mouse_autoselect_window, in_window, mouseDragged)
(rightMouseDragged, otherMouseDragged, windowShouldClose)
(updateFrameSize, windowWillResize, windowDidResize)
(windowDidBecomeKey, windowDidResignKey, windowWillMiniaturize)
(initFrameFromEmacs, windowDidMove, windowDidDeminiaturize)
(windowDidExpose, windowDidMiniaturize, windowWillEnterFullScreen)
(windowDidEnterFullScreen, windowWillExitFullScreen)
(windowDidExitFullScreen, toggleFullScreen, handleFS, setFSValue)
(mouseEntered, mouseExited, menuDown, toolbarClicked, drawRect)
(draggingEntered, performDragOperation, validRequestorForSendType)
(setMiniwindowImage, constrainFrameRect, performZoom, zoom)
(EmacsScroller_initFrame, EmacsScroller_setFrame)
(EmacsScroller_dealloc, condemn, reprieve, judge)
(resetCursorRects, setPosition, EmacsScroller_mouseDown)
(EmacsScroller_mouseDragged, syms_of_nsterm): Use new trace system.
* nsfns.m: Remove old NSTRACE macro.
* nsfns.m (x_set_icon_name, ns_set_name, x_explicitly_set_name)
(x_implicitly_set_name, x_set_title, ns_set_name_as_filename)
(ns_implicitly_set_icon_type, x_set_icon_type): Use new trace system.
* nsimage.m: Remove old NSTRACE macro.
* nsimage.m (ns_image_from_XBM, ns_image_for_XPM)
(ns_image_from_bitmap_file, ns_load_image): Use new trace system.
* nsmenu.m: Remove old NSTRACE macro.
* nsmenu.m (ns_update_menubar, ns_menu_show, ns_popup_dialog):
Use new trace system.
This attempts to document some of the issues recently discussed
on emacs-devel, and to indicate other such issues. The section
could be a lot longer.
* doc/lispref/os.texi (Security Considerations):
New node.
* doc/lispref/elisp.texi (Top):
* doc/lispref/processes.texi (Shell Arguments):
* lisp/subr.el (shell-quote-argument):
* src/callproc.c (syms_of_callproc):
Reference it.
Omit ‘#include "foo.h"’ unless the file needs foo.h (Bug#21707).
In a few cases, add ‘#include "foo.h"’ if the file needs foo.h
but does not include it directly. As a general rule, a source
file should include foo.h if it needs the interfaces that foo.h
defines.
* src/alloc.c: Don’t include process.h. Include dispextern.h,
systime.h.
* src/atimer.c: Don’t include blockinput.h.
* src/buffer.c: Include coding.h, systime.h. Don’t include
keyboard.h, coding.h.
* src/callint.c: Don’t include commands.h, keymap.h.
* src/callproc.c: Don’t include character.h, ccl.h, composite.h,
systty.h, termhooks.h.
* src/casetab.c: Don’t include character.h.
* src/category.c: Don’t include charset.h, keymap.h.
* src/ccl.h: Don’t include character.h.
* src/character.c: Don’t include charset.h.
* src/charset.c: Don’t include disptab.h.
* src/chartab.c: Don’t include ccl.h.
* src/cm.c: Don’t include frame.h, termhooks.h.
* src/cmds.c: Don’t include window.h, dispextern.h.
* src/coding.c: Don’t include window.h, frame.h.
* src/composite.c: Include composite.h. Don’t include window.h,
font.h.
* src/data.c: Don’t include syssignal.h, termhooks.h, font.h.
* src/dbusbind.c: Don’t include frame.h.
* src/decompress.c: Don’t include character.h.
* src/dired.c: Don’t include character.h, commands.h, charset.h.
* src/dispnew.c: Don’t include character.h, indent.h, intervals.h,
process.h, timespec.h. Include systime.h.
* src/doc.c: Include coding.h. Don’t include keyboard.h.
* src/editfns.c: Include composite.h. Don’t include frame.h.
* src/emacs.c: Include fcntl.h, coding.h. Don’t include
commands.h, systty.h..
* src/fileio.c: Don’t include intervals.h, dispextern.h.
Include composite.h.
* src/filelock.c: Don’t include character.h, systime.h.
* src/fns.c: Don’t include time.h, commands.h, keyboard.h,
keymap.h, frame.h, blockinput.h, xterm.h. Include composite.h.
* src/font.c: Include termhooks.h.
* src/font.h: Don’t include ccl.h, frame.h. Add forward decls of
struct composition_it, struct face, struct glyph_string.
* src/fontset.c: Don’t include buffer.h, ccl.h, keyboard.h,
intervals.h, window.h, termhooks.h.
* src/frame.c: Don’t include character.h, commands.h, font.h.
* src/frame.h: Don’t include dispextern.h.
* src/fringe.c: Don’t include character.h.
* src/ftcrfont.c: Don’t include dispextern.h, frame.h,
character.h, charset.h, fontset.h.
* src/ftfont.c: Don’t include frame.h, blockinput.h, coding.h,
fontset.h.
* src/ftxfont.c: Don’t include dispextern.h, character.h,
charset.h, fontset.h.
* src/gfilenotify.c: Don’t include frame.h, process.h.
* src/gtkutil.c: Include dispextern.h, frame.h, systime.h.
Don’t include syssignal.h, buffer.h, charset.h, font.h.
* src/gtkutil.h: Don’t include frame.h.
* src/image.c: Include fcntl.h and stdio.h instead of sysstdio.h.
Don’t include character.h.
* src/indent.c: Don’t include keyboard.h, termchar.h.
* src/inotify.c: Don’t include character.h, frame.h.
* src/insdel.c: Include composite.h. Don’t include blockinput.h.
* src/intervals.c: Don’t include character.h, keyboard.h.
* src/intervals.h: Don’t include dispextern.h, composite.h.
* src/keyboard.c: Don’t include sysstdio.h, disptab.h, puresize.h.
Include coding.h.
* src/keyboard.h: Don’t incldue systime.h.
* src/keymap.c: Don’t include charset.h, frame.h.
* src/lread.c: Include dispextern.h and systime.h.
Don’t include frame.h. Include systime.h.
* src/macros.c: Don’t include commands.h, character.h, buffer.h.
* src/menu.c: Include character.h, coding.h. Don’t include
dispextern.h.
* src/menu.h: Don’t include systime.h.
* src/minibuf.c: Don’t include commands.h, dispextern.h, syntax.h,
intervals.h, termhooks.h.
* src/print.c: Include coding.h. Don’t include keyboard.h,
window.h, dispextern.h, termchar.h, termhooks.h, font.h.
Add forward decl of struct terminal.
* src/process.c: Don’t include termhooks.h, commands.h,
dispextern.h, composite.h.
* src/region-cache.c: Don’t include character.h.
* src/scroll.c: Don’t include keyboard.h, window.h.
* src/search.c: Don’t include category.h, commands.h.
* src/sound.c: Don’t include dispextern.h.
* src/syntax.c: Don’t include command.h, keymap.h.
* src/sysdep.c: Don’t include window.h, dispextern.h.
* src/systime.h: Use ‘#ifdef emacs’, not ‘#ifdef EMACS_LISP_H’,
* src/term.c: Don’t include systty.h, intervals.h, xterm.h.
* src/terminal.c: Include character.h.
Don’t include charset.h, coding.h.
* src/textprop.c: Don’t include character.h.
* src/undo.c: Don’t include character.h, commands.h, window.h.
* src/unexsol.c: Don’t include character.h, charset.h.
* src/widget.c: Include widget.h. Don’t include keyboard.h,
window.h, dispextern.h, blockinput.h, character.h, font.h.
* src/widgetprv.h: Don’t include widget.h.
* src/window.c: Don’t include character.h, menu.h, intervals.h.
* src/xdisp.c: Include composite.h, systime.h. Don’t include
macros.h, process.h.
* src/xfaces.c: Don’t include charset.h, keyboard.h, termhooks.h,
intervals.h.
* src/xfns.c: Don’t include menu.h, character.h, intervals.h,
epaths.h, fontset.h, systime.h, atimer.h, termchar.h.
* src/xfont.c: Don’t include dispextern.h, fontset.h, ccl.h.
* src/xftfont.c: Don’t include dispextern.h, character.h, fontset.h.
* src/xgselect.c: Don’t include timespec.h, frame.h.
Include systime.h.
* src/xgselect.h: Don’t include time.h.
Use a forward decl to struct timespec instead.
* src/xmenu.c: Don’t include keymap.h, character.h, charset.h,
dispextern.h. Include systime.h.
* src/xml.c: Don’t include character.h.
* src/xrdb.c [USE_MOTIF]: Don’t include keyboard.h.
* src/xselect.c: Don’t include dispextern.h, character.h,
buffer.h, process.h.
* src/xsmfns.c: Don’t include systime.h, sysselect.h.
* src/xterm.c: Don’t include syssignal.h, charset.h, disptab.h,
intervals.h process.h, keymap.h, xgselect.h. Include composite.h.
This is more compatible with Common Lisp and XEmacs (Bug#21690). See:
http://lists.gnu.org/archive/html/emacs-devel/2015-10/msg01053.html
* lisp/color.el (color-hue-to-rgb, color-hsl-to-rgb)
(color-xyz-to-srgb, color-xyz-to-lab):
* lisp/emacs-lisp/cl-extra.el (cl-float-limits):
* lisp/net/shr-color.el (shr-color-hue-to-rgb)
(shr-color-hsl-to-rgb-fractions):
Exploit the change to simplify the code a bit.
* lisp/emacs-lisp/bytecomp.el (byte-compile-quo):
Don’t complain about single-argument calls to ‘/’.
* src/data.c (arith_driver, float_arith_driver):
Implement the change.
* src/image.c (x_find_image_fd): Handle the case of -2 returned by
'openp' specially. This special case was lost in the changes on
2015-08-18. (Bug#21685)
* src/xdisp.c (redisplay_internal): If redisplaying the selected
window or one of the frames turns on the frame's 'redisplay' flag,
redisplay again. (Bug#21428)
* src/frame.c (x_set_font): Set the frame's 'fonts_changed' flag.
Redo src/*.h so that each include file is idempotent (that is, can
be included multiple times with the latter inclusions having no
effect) and standalone (that is, can be included by itself,
with no include file other than config.h needed as a prerequisite).
This is standard practice in GNU programs nowadays.
* lwlib/lwlib-widget.h, src/buffer.h, src/category.h, src/character.h:
* src/charset.h, src/coding.h, src/commands.h, src/disptab.h:
* src/fontset.h, src/gnutls.h, src/indent.h, src/keymap.h, src/macros.h:
* src/regex.h [emacs]:
* src/syntax.h, src/systty.h, src/termhooks.h:
Include lisp.h, for Lisp_Object.
* src/buffer.h, src/category.h, src/cm.h, src/commands.h, src/disptab.h:
* src/indent.h, src/intervals.h, src/keyboard.h, src/macros.h:
* src/process.h, src/puresize.h, src/region-cache.h, src/syntax.h:
* src/syssignal.h, src/sysstdio.h, src/systty.h, src/termchar.h:
* src/termopts.h, src/tparam.h, src/unexec.h:
Protect against multiple inclusion.
* src/buffer.h: Include character.h, for STRING_CHAR.
* src/emacsgtkfixed.h (struct frame):
* src/fontset.h (struct face):
* src/region-cache.h (struct buffer):
* src/termhooks.h (struct glyph):
* src/xsettings.h (struct x_display_info):
Add possibly-forward decl.
* src/syntax.h: Include buffer.h, for BVAR.
* src/sysselect.h: Include lisp.h, for eassume.
* src/termchar.h: Include <stdio.h>, for FILE.
* src/widget.h: Include <X11/IntrinsicP.h>, for Widget.
* src/xsettings.h: Include <X11/Xlib.h>, for XEvent.