Commit graph

47057 commits

Author SHA1 Message Date
Lars Ingebrigtsen
c0c5f43f49 Clean up fix_command code slightly
* src/callint.c (fix_command): Remove superfluous check.
2022-08-08 17:47:07 +02:00
Lars Ingebrigtsen
27e1568967 select-active-regions doc string improvement
* src/keyboard.c (syms_of_keyboard): Mention
post-select-region-hook.
2022-08-08 17:47:07 +02:00
Mattias Engdegård
9aae83fe30 * src/print.c (struct print_buffer): Revert gratuitous format change. 2022-08-08 16:26:29 +02:00
Lars Ingebrigtsen
7f8a3d4e91 Clean up fix_command slightly
* src/callint.c (fix_command): Remove now-unused parameter.
(Fcall_interactively): Ditto.
2022-08-08 16:01:24 +02:00
Lars Ingebrigtsen
ffc81ebc4b Allow specifying how args are to be stored in `command-history'
* doc/lispref/functions.texi (Declare Form): Document
`interactive-args'
* lisp/replace.el (replace-string): Store the correct interactive
arguments (bug#45607).

* lisp/emacs-lisp/byte-run.el (byte-run--set-interactive-args):
New function.
(defun-declarations-alist): Use it.

* src/callint.c (fix_command): Remove the old hack (which now
longer works since interactive specs are byte-compiled) and
instead rely on `interactive-args'.
2022-08-08 15:53:41 +02:00
Po Lu
498c5d26bb ; Fix coding style in recently installed changes to print.c
* src/print.c (struct print_buffer, struct print_context): Fix
brace position and make comments more like what is in
lisp.h/xterm.c/etc.
2022-08-08 20:56:50 +08:00
Stefan Kangas
3d7d8ddc5a ; Fix typos 2022-08-08 14:23:29 +02:00
Mattias Engdegård
8c8ae51640 Group print buffer state in a struct
* src/print.c (print_buffer, print_buffer_size, print_buffer_pos)
(print_buffer_pos_byte): Replace with...
(struct print_buffer, print_buffer): ...this.
* src/print.c: (print_free_buffer, print_unwind)
(print_prepare, print_finish, printchar, strout): Adapt users.
2022-08-08 13:26:13 +02:00
Mattias Engdegård
14f0ebc9ac Turn large macros in print.c to functions
This is easier to read and maintain, and makes the state explicit.
It is a pure refactoring; the compiled code should be equivalent.

* src/print.c (PRINTPREPARE, PRINTFINISH): Replace with...
(struct print_context, print_prepare, print_finish): ...these new
functions and explicit state in a struct.
(Fwrite_char, write_string, Fterpri, Fprin1, Fprin1_to_string)
(Fprinc, Fprint): Adapt callers.
2022-08-08 13:12:47 +02:00
Po Lu
9b661ff1a8 Fix warnings outside XI2 builds
* src/xterm.c (x_query_pointer): Juggle some definitions around.
2022-08-08 11:59:08 +08:00
Po Lu
16b8948d79 Improve handling of pointer focus under the input extension
* src/xfns.c (x_relative_mouse_position)
(Fx_mouse_absolute_pixel_position, compute_tip_xy): Use
x_query_pointer instead of XQueryPointer.
* src/xterm.c (xi_populate_device_from_info): Set new attachment
field.
(xi_handle_focus_change): Set client pointer.
(xi_focus_handle_for_device, xi_handle_interaction): Use
attached keyboard device to handle focus.
(x_query_pointer): New function.
(XTmouse_position, x_scroll_bar_report_motion)
(x_horizontal_scroll_bar_report_motion, handle_one_xevent): Use
x_query_pointer instead of XQueryPointer.
(x_term_init): Initialize client pointer device.
* src/xterm.h (struct xi_device_t): New field `attachment'.
(struct x_display_info): New field `client_pointer_device'.
2022-08-08 11:44:53 +08:00
Lars Ingebrigtsen
af90a31629 Pacify a gcc warning in xi_handle_focus_change
* src/xterm.c (xi_handle_focus_change): Pacify a wrong warning on
gcc (Debian 10.2.1-6).

xterm.c: In function ‘xi_handle_focus_change’:
xterm.c:12564:25: warning: ‘source’ may be used uninitialized in
this function [-Wmaybe-uninitialized]
12564 |       ie.device = source->name;
      |                   ~~~~~~^~~~~~
2022-08-07 17:22:54 +02:00
Eli Zaretskii
7592953553 Fix 'vertical-motion' in bidi-reordered text
* src/xdisp.c (move_it_vertically_backward): Fix the case of long
bidi-reordered lines when starting from its last (top-most) screen
line.
(move_it_by_lines): Fix logic of detection when going by lines
overshoots.
2022-08-07 17:03:52 +03:00
Mattias Engdegård
08a74ab05a Cease emitting negative file offsets for user variables
'User variables' were made obsolete in Emacs 24 along with
user-variable-p; the sign of the position in (#$ . POS) hasn't
mattered since.

* lisp/emacs-lisp/bytecomp.el (byte-compile-output-docform):
Don't emit negative position when doc string starts with `*`.
* src/lread.c (get_lazy_string): Explain.
2022-08-07 10:52:16 +02:00
Mattias Engdegård
7778f83b3e Use struct for saved strings in the reader
* src/lread.c (saved_doc_string, saved_doc_string_size)
(saved_doc_string_length, saved_doc_string_position)
(prev_saved_doc_string, prev_saved_doc_string_size)
(prev_saved_doc_string_length, prev_saved_doc_string_position):
Replace with...
(struct saved_string, saved_strings): ...this.
* src/lread.c (Fload, skip_lazy_string, get_lazy_string):
Adapt code.
2022-08-07 10:25:03 +02:00
Mattias Engdegård
c46863d9bb Make force-load-doc-strings work again
When load-force-doc-strings is true, read (#$ . POS) as the (unibyte)
string referred to.  This feature was lost by mistake in the recent
nonrecursive reader rewrite.

Noticed by Stefan Monnier.

* src/lread.c (get_lazy_string): New function (code mostly recycled
from an old version).
(read0): Detect (#$ . FIXNUM) and retrieve the string if appropriate.
* test/src/lread-resources/lazydoc.el:
* test/src/lread-tests.el (lread-force-load-doc-strings):
New test.
2022-08-07 10:25:03 +02:00
Po Lu
6fd4ab250b Revert "Improve X event timestamp tracking"
This reverts commit 4b98a79a50.

This change was installed without answering several important
questions.
2022-08-07 11:47:26 +08:00
Daniel Colascione
4b98a79a50 Improve X event timestamp tracking
Fix two problems with our handling of X timestamps

1) We're not properly updating the X interaction timestamp after
receiving certain input events, and

2) X events sent in response to emacsclient commands get stale
timestamps because the timestamp tracking doesn't take into account
that interactions with the user can occur outside the X input
event channel.

* src/xterm.c:
(x_display_set_last_user_time_1): New function.
(x_display_set_last_user_time): Call it.
(x_ewmh_activate_frame): Refactor.
(x_focus_frame): Don't call XSetInputFocus if we can use EWMH activation.
(server_timestamp_predicate): New function.
(x_get_server_time): New function.
(x_note_oob_interaction): New function.
(x_create_terminal): Register new function as terminal hook.

* src/termhooks.h: New hook: note_oob_interaction_hook.

* src/gtkutil.h:
(xg_set_user_timestamp): Declare.

* src/gtkutil.c:
(xg_set_user_timestamp): New function.

* src/frame.c:
(Fframe_note_oob_interaction): New function.
(syms_of_frame): Register it.

* lisp/server.el:
(server-switch-buffer): Call frame-note-oob-interaction when user
requests frame be raised.
2022-08-06 23:44:07 -04:00
Po Lu
02ee025487 Correctly set user time on GTK+ for key press events
* src/xterm.c (x_set_gtk_user_time): New function.
(handle_one_xevent): Call that after key press event on GTK+.
2022-08-07 10:18:14 +08:00
Eli Zaretskii
a2127251a5 ; * src/composite.c: Include stdlib.h. 2022-08-06 18:37:57 +03:00
Eli Zaretskii
6223e251a5 ; * src/composite.c (Fcomposition_sort_rules): Fix last change. 2022-08-06 18:00:16 +03:00
Eli Zaretskii
315b00ff8d New function 'composition-sort-rules'
* src/composite.c (Fcomposition_sort_rules)
(compare_composition_rules): New functions.
2022-08-06 17:58:08 +03:00
Eli Zaretskii
55c25e73d4 Fix C-n/C-p inside bidirectional text
* src/xdisp.c (move_it_by_lines, try_cursor_movement): Handle
glyph rows whose direction of increasing buffer positions is
reverse of the normal: going down in the window makes buffer
positions higher.
* src/indent.c (Fvertical_motion): When looking for the last glyph
row occupied by point, take into account the bidi iteration
direction.
2022-08-06 16:24:34 +03:00
Po Lu
28c01bd484 Correctly initialize values after a new device is enabled
* src/xterm.c (handle_one_xevent): Initialize new device to
zero.  (bug#57011)
2022-08-06 14:51:08 +08:00
Eli Zaretskii
e46668847d * src/puresize.h (BASE_PURESIZE): Bump the value. (Bug#57007) 2022-08-06 09:11:01 +03:00
Po Lu
a97e9d80db Improve XI focus handling for entry and exit events
* src/xterm.c (handle_one_xevent): Skip useless
x_detect_focus_change calls in more cases.
2022-08-06 10:59:15 +08:00
Po Lu
15a9e73a17 * src/callproc.c (emacs_spawn): Fix Mac OS X build. 2022-08-06 10:27:03 +08:00
Po Lu
32ab6d7105 Improve XI focus handling
* src/xterm.c (handle_one_xevent): Skip useless
x_detect_focus_change calls in some cases.
2022-08-06 10:17:38 +08:00
Jim Porter
4e59830bc0 Add STREAM argument to 'process-tty-name'
* src/process.c (process-tty-name): Add STREAM argument.

* lisp/eshell/esh-io.el (eshell-close-target): Only call
'process-send-eof' once if the process's stdin is a pipe.

* test/src/process-tests.el (make-process/test-connection-type): Check
behavior of 'process-tty-name'.

* doc/lispref/processes.texi (Process Information): Document the new
argument.

* etc/NEWS: Announce this change.
2022-08-05 17:58:54 -07:00
Jim Porter
d7b89ea407 Allow creating processes where only one of stdin or stdout is a PTY
* src/lisp.h (emacs_spawn):
* src/callproc.c (emacs_spawn): Add PTY_IN and PTY_OUT arguments to
specify which streams should be set up as a PTY.
(call_process): Adjust call to 'emacs_spawn'.

* src/process.h (Lisp_Process): Replace 'pty_flag' with 'pty_in' and
'pty_out'.

* src/process.c (is_pty_from_symbol): New function.
(make-process): Allow :connection-type to be a cons cell, and allow
using a stderr process with a PTY for stdin/stdout.
(create_process): Handle creating a process where only one of stdin or
stdout is a PTY.

* lisp/eshell/esh-proc.el (eshell-needs-pipe, eshell-needs-pipe-p):
Remove.
(eshell-gather-process-output): Use 'make-process' and set
':connection-type' as needed by the value of 'eshell-in-pipeline-p'.

* lisp/net/tramp.el (tramp-handle-make-process):
* lisp/net/tramp-adb.el (tramp-adb-handle-make-process):
* lisp/net/tramp-sh.el (tramp-sh-handle-make-process): Don't signal an
error when ':connection-type' is a cons cell.

* test/src/process-tests.el
(process-test-sentinel-wait-function-working-p): Allow passing PROC
in, and rework into...
(process-test-wait-for-sentinel): ... this.
(process-test-sentinel-accept-process-output)
(process-test-sentinel-sit-for, process-test-quoted-batfile)
(process-test-stderr-filter): Use 'process-test-wait-for-sentinel'.
(make/process/test-connection-type): New function.
(make-process/connection-type/pty, make-process/connection-type/pty-2)
(make-process/connection-type/pipe)
(make-process/connection-type/pipe-2)
(make-process/connection-type/in-pty)
(make-process/connection-type/out-pty)
(make-process/connection-type/pty-with-stderr-buffer)
(make-process/connection-type/out-pty-with-stderr-buffer): New tests.

* test/lisp/eshell/esh-proc-tests.el (esh-proc-test--detect-pty-cmd):
New variable.
(esh-proc-test/pipeline-connection-type/no-pipeline)
(esh-proc-test/pipeline-connection-type/first)
(esh-proc-test/pipeline-connection-type/middle)
(esh-proc-test/pipeline-connection-type/last): New tests.

* doc/lispref/processes.texi (Asynchronous Processes): Document new
':connection-type' behavior.
(Output from Processes): Remove caveat about ':stderr' forcing
'make-process' to use pipes.

* etc/NEWS: Announce this change (bug#56025).
2022-08-05 17:58:54 -07:00
Stefan Monnier
0da97d6685 * src/keyboard.c (timer_check_2): Replace redundant test with assertion 2022-08-05 12:34:47 -04:00
Eli Zaretskii
aff5961274 Avoid assertion violations in 'back_to_previous_visible_line_start'
* src/xdisp.c (init_iterator): Always initialize narrowed_begv to
zero, since SET_WITH_NARROWED_BEGV depends on it being non-zero as
an indication that long-line optimizations are in use.
(back_to_previous_visible_line_start): When long-line
optimizations are in effect, we may end up not on a newline.
2022-08-05 15:53:06 +03:00
Lars Ingebrigtsen
7fccb83d07 Make loaddefs.el dependencies more explicit in src/Makefile.in
* src/Makefile.in (LC_ALL): Add loaddefs.el as a dependency, too,
since that file may be deleted, but the loaddefs.elc file still
exists.  This causes problems in nativecomp builds.
2022-08-05 13:51:28 +02:00
Po Lu
cbe1af96a2 Fix oldXMenu grab handling
* src/xmenu.c (x_menu_translate_generic_event, pop_down_menu):
Clear grab correctly on individual XI2 devices.
2022-08-05 16:26:01 +08:00
Po Lu
4b1ec39561 Improve multi-pointer X support
* etc/TODO: Document that MPX support still needs work.
* src/xterm.c (xi_handle_interaction): New function.
(handle_one_xevent): Call it in the appropriate places.
2022-08-05 13:23:39 +08:00
Po Lu
0dbe0fd410 Improve input extension focus handling with multiple master devices
* src/xterm.c (x_cache_xi_devices): Initialize device fields to
0.
(xi_handle_focus_change, xi_focus_handle_for_device)
(xi_handle_delete_frame): New functions; store focus information
per-device instead.
(x_detect_focus_change): Handle GenericEvents that way instead.
(handle_one_xevent): Don't cache XI devices on DeviceChanged.
(x_free_frame_resources): Clear any frame focus information.

* src/xterm.h (struct xi_device_t): New fields for focus
tracking.  Add comments describing fields.
2022-08-05 10:18:18 +08:00
Gregory Heytings
5a79bb2aed Merge branch 'feature/long-lines-improvements' 2022-08-04 21:19:36 +02:00
Gregory Heytings
a95c5baa6a ; * src/keyboard.c (safe_run_hooks_maybe_narrowed): Fix broken merge. 2022-08-04 14:02:25 +02:00
Po Lu
9313551fae ; * src/xterm.c (x_sync_init_fences): Fix number of fences announced. 2022-08-04 19:58:22 +08:00
Gregory Heytings
e2b774e64a Merge branch 'master' into feature/long-lines-improvements 2022-08-04 12:21:31 +02:00
Eli Zaretskii
5e33712672 ; * src/composite.c (find_automatic_composition): Fix a typo. 2022-08-04 12:47:32 +03:00
Gregory Heytings
82b602dc2f Improve Bidi with long lines.
* src/composite.c (composition_compute_stop_pos): Use an 'endpos' that
is not too far away.
(find_automatic_composition): Use a 'head' that is not too far away.
Also make sure that this code path is not taken when long line
optimizations are disabled.

* src/dispextern.h (struct composition_it): Add a field that points
to the parent iterator.

* src/xdisp.c (init_iterator): Set it.
2022-08-04 11:07:28 +02:00
Po Lu
78129dcf53 Correctly implement refresh synchronization fences
* configure.ac (HAVE_XSYNC): Also check for XSyncTriggerFence.

* src/xfns.c (Fx_create_frame): Create fences.
* src/xterm.c (x_atom_refs): New atom.
(x_sync_trigger_fence, x_sync_init_fences, x_sync_free_fences):
New functions.
(x_sync_update_finish): Trigger the appropriate fence.
(x_free_frame_resources): Free fences.
* src/xterm.h (struct x_display_info): New atom
`_NET_WM_SYNC_FENCES'.
(struct x_output): New field `sync_fences'.
2022-08-04 15:38:23 +08:00
Lars Ingebrigtsen
50e4fc9f0e Adjust src/Makefile.in comments about make-docfile
* src/Makefile.in ($(etc)/DOC): Remove comment aboout make-docfile
being run twice (because it no longer is).
2022-08-04 08:05:25 +02:00
Po Lu
d6dbaecb2e Reduce code duplication in XI scroll bar code
* src/xterm.c (xi_select_scroll_bar_events): New function.
(x_create_toolkit_scroll_bar)
(x_create_horizontal_toolkit_scroll_bar, x_scroll_bar_create):
Factor out input extension code there.
2022-08-04 13:59:27 +08:00
Lars Ingebrigtsen
c2bddf8fe7 Remove read_string_literal purify doc string hack
* src/lread.c (read_string_literal): Since we're now
byte-compiling the loaddefs files (so doc strings come from the
.elc files), remove the hack that make this return 0 when the
string starts with "\\n".
2022-08-04 07:23:59 +02:00
Lars Ingebrigtsen
40c1132711 Remove VCSWITNESS dependency, since we're always rescanning now
* Makefile.in (VCSWITNESS): Remove, since we're always rescanning
for loaddefs.
* src/Makefile.in ($(lispsource)/loaddefs.el): Remove VCSWITNESS
dependency.
2022-08-04 07:03:52 +02:00
Po Lu
cb8eb5e830 Avoid redundant calls to XFlush in x_make_frame_visible
* src/xterm.c (x_make_frame_visible): Keep track of whether or
not the output buffer was implictly flushed before issuing
XFlush.
2022-08-04 09:13:53 +08:00
Lars Ingebrigtsen
261d6afd6e Byte-compile the in-tree loaddefs.el files
* lisp/Makefile.in (all): Add "autoloads", which now otherwise
won't be done.
($(lisp)/loaddefs.el): Remove this target, since it's always done,
and would then trigger a re-compilation of loaddefs.elc.

* lisp/loadup.el: Load loaddefs.elc (if it exists).

* lisp/emacs-lisp/loaddefs-gen.el (loaddefs-generate): Don't
include no-byte-compile cookies in the Emacs build.

* src/Makefile.in ($(pdmp)): Depend on loaddefs.elc to ensure that
it's built by this point.
($(etc)/DOC): Don't scan loaddefs.el for doc strings, since they
are now picked up from the .elc file (bug#53024).
2022-08-03 14:22:16 +02:00
Po Lu
6fb206329f ; * src/xterm.c (x_if_event): Minor speed improvements. 2022-08-03 20:17:31 +08:00