mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-06 06:20:55 -08:00
Merge from savannah/emacs-30
64851d101aImprove Android "adaptive icon"9b294059d7Fix documentation for Emacs 30f50167ab95; Update NEWS and corresponding manuals4e22ef870cAdd D-Bus testf784d946d4; Repair corruption in etc/DEBUGc750fbb539; * etc/DEBUG: Advice for debugging Emacs on OpenBSD (bug...38179f85f8Merge remote-tracking branch 'savannah/scratch/windows-98...72cf9964f3Inaccuracy in efaq.texifc48e9e8ed; Fix typos in DOS Makefile scripts9b8d754579; * etc/NEWS: Explain Nextstep.8819e5a45dFix treesit crash (bug#71681)eaf2dc96c1; Fix SHR test on MS-Windows57880f597cDelete redundant mention of `with-eval-after-load'ea8ce98434* doc/misc/efaq.texi (New in Emacs 30): Fix typos.45a20d781a; Fix typos in symbolsd95f039af4Document security fixes in FAQd063af203cAdd "New in Emacs 30" to FAQca6b484162; * etc/NEWS: Move "Minibuffer and Completions"35c46663e4; * etc/NEWS: Move item to "Lisp Changes".0515b38d28; * etc/NEWS: Move keyboard macro items closer together.22af3a7103; * etc/NEWS: More copy-edits.000ef8876a; * etc/NEWS: Move items to "Incompatible Lisp Changes".4088dc8e4c; * etc/NEWS: Rearrange "Incompatible Lisp Changes".179800f36b; * lisp/epg.el (epg--start): Add commentary about encoding.73898f0214Fix non-ASCII filename operatiion on EasyPG (bug#71500)a65b6aac6bSilence warning with global minor mode :predicatef5f7343ac4; * etc/NEWS: Move an item to "Startup Changes"c95066bf18; * etc/NEWS: Move some Lisp items to better place.bf7db88ce1; * etc/NEWS: Rearrange "Editing Changes in Emacs 30.1"000424eb9e; * etc/NEWS: Make touch screen support more prominent.5b5671587f; * etc/NEWS: Rearrange "Changes in Emacs 30.1".31124abdef; * lisp/thingatpt.el (sexp-at-point): Doc fix (bug#71777).44f269d6e6Fix: make 'xwidget-webkit-scroll-backward' scroll backwards358085997cMerge branch 'emacs-30' of git.savannah.gnu.org:/srv/git/...736b7cad40Add jsdoc support to php-ts-mode in <script> element5f3d964e39Update to Transient v0.7.2-4-gf75bc48d2d8881d526Fix typo incurring leaks of face structures219501dd62; Fix use of @footnote in cc-mode.texic7be2dcac4Merge branch 'emacs-30' of git.sv.gnu.org:/srv/git/emacs ...f0a4879975Sync with Tramp 2.7.153dcf2b949; * etc/NEWS: Move the mwheel entry to a better place.a5726782d0; Sort tree-sitter modes in NEWSdaa89dc939; * etc/NEWS: Rearrange "New Modes and Packages in Emacs ...4ddbf4f70e; * etc/NEWS: Move many items.437b1ced26; * etc/NEWS: Copy-edits.7372b2eb30Expand docstring of which-key-modedf0eb5be1eImprove documentation of 'remove-overlays' in ELisp manual73c1252bb6Fix link to major mode variable in docstringc4ad54812aMake `shell-mode' more robustc4ec905c9aCorrect ommissions in rmc.elbf862fc277* lisp/hi-lock.el: More fixes related to revert-buffer.6cc8ffae9aUpdate to Org 9.7.5-9-ga091cac477443ab8; Fix typo in lua-ts-mode.el6e5e4d6193; Add 'eglot-ensure' option to 'lua-ts-mode-hook'58a2f36a8b; * etc/NEWS: Copy edit.df53ef176aMerge branch 'emacs-30' of git.savannah.gnu.org:/srv/git/...039e6ffd86Write Antinews for Emacs 30 ELisp Referencebf8c9f702b(eval-last-sexp): Fix bug#717746d94090cad* lisp/hi-lock.el: More fixes for revert-buffer (bug#57534)280c91782a* lisp/hi-lock.el (hi-lock-revert-buffer-rehighlight): Im...339310d020* lisp/tab-bar.el (tab-bar-select-restore-windows): Impro...c1e7569a92Write Antinews for Emacs 30 user manual233f683da8; * lisp/erc/erc-backend.el (erc-server-reconnect-timeout...20a672b3b2Change ERC version for Emacs 30 to 5.6.0.30.1cbede3d43d* src/w32uniscribe.c (syms_of_w32uniscribe_for_pdumper): ...6f9f9a2155Fix two tests for --without-all build98daa10f06; * etc/PROBLEMS (PGTK): Remove redundant 2nd PGTK section.ced33bc239Fix handling of non-nil 'dired-movement-style'b1e9b6fd67; * lisp/gnus/message.el (message-idna-to-ascii-rhs): Doc...5eb9a0d2c7; * etc/NEWS: Fix last change (bug#71720).6ec77f580dDo not prematurely truncate python eldoc stringf475a1a254; Fix simple-tests as fallout of last changeaa10d0c5acAdd tests for `kill-whole-line' (bug#65734)058bb4ca25kill-whole-line: Honor visibility; fix kill-ring when rea...e45173d114* lisp/hi-lock.el (hi-lock-file-patterns-policy): Add val...d6afb017de* lisp/progmodes/xref.el (xref-revert-buffer-restore-poin...8d55b38e2aFix Cygwin build82125b1a66Use 'revert-function' in *xref* buffer860840621aPrevent crashes and related issues if initial activity is...d5c6eb1f96Doc fix in 'php-ts-mode'fb15affde8Avoid compiler warnings in the Cygwin-w32 build8d354925ddAdd new face 'widget-unselected' to wid-edit.el1809f6a93eAlways perform Eshell process cleanup runs in the Eshell ...8b1841021cAvert crash in store_mode_line_string on Android 5.0 and ...e7c85f9235Use HarfBuzz in Cygwin-w32 build8e3e206bd3; * src/buffer.c (syms_of_buffer) <mode-line-format>: ASC...fe0d9dfb3b; * lisp/treesit.el (treesit--syntax-propertize-start): F...2f18929319Fix tabbing between widgets (bug#70594)6ad6507532; * lisp/which-key.el (which-key-dont-use-unicode): Add :...60b38c317b* lisp/touch-screen.el (touch-screen-inhibit-drag): Anoth...a4ca30ac2eFix rescaling of images via 'text-scale-mode' in EWW0e43606b20* lisp/touch-screen.el (touch-screen-inhibit-drag): Fix t...1b4c562721Fix latent side-effects of respecting field boundaries in...e4046f33ab; * lisp/simple.el (undo-auto--boundaries): Doc fix (bug#...008eeb21fd; * lisp/language/cyrillic.el: Delete obsolete commentary...680155d3f0Add missing builtin package declarationsce4f56caf7Extend treesitter tests on emba7e8a97ac78Show entries from key-translation-map in which-key mode4a0958642d* lisp/tab-bar.el (tab-bar-tab-group-face-function): Impr...a769f171e7; Fix flymake tests with GCC 14.96e27c2ecfDon't show char name for multi-char translations0715abfa86Reset ls-lisp-use-string-collate when ls-lisp-emulation c...4fcc38966bUpdate to Transient v0.7.2-1-gf273c0c8b7d5ca3a8f* doc/misc/calc.texi (Musical Notes): Fix typo.164f75822b; Fix typos768e92b9c0Update options that depend on 'which-key-dont-use-unicode'4b2682b17c; Remove debugging message in Completion Preview test73a58329a6Fix omission of updates to child frames on Android0edacf2aa7Add jsdoc support to js-ts-modecace0cbee9; Restore inadvertently removed line.2b04effb13; * test/lisp/net/shr-tests.el (shr-test--rendering-check...6619aec6bc; Don't run new 'shr-test/zoom-image' when built without ...5d19bfda32; * admin/release-branch.txt: Update and fix typo.fb11294d41; Fix typosd9bd1718f9Backport: Minor changes in tramp-tests.el1728de5a77Backport: Tramp: Fix bug#71709, and other minor changesdd0fc6aff6New branch emacs-30bc72c33ac3* admin/admin.el: (set-version): Fix regexp for configure...60475a73d1Disable Ffile_system_info for Android special directories18e7a9f3d0Restore functionality on Windows 985f8a9cd4b6Fix a bug in 'switch-to-buffer'5f9b5803beFix zooming images in SHR6f2036243f; Doc fix in 'php-ts-mode'.2f1c882a16Colorize CSS property value like `css--fontify-region'dd0994aa36Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs486ea8ef5a* configure.ac: Disable kqueue on Haiku.737fa7c529Fix 'Customize' menu entry for 'php-ts-mode'cb7be6035eFix compilation on prerelease versions of Haiku2b848a4e50Fix FIXME in comment77e3a56507Update SKK-JISYO.L from upstreame5bae78861Update publicsuffix.txt from upstreambf5f74288bAdd assignment form as `etc/copyright-assign.txt`fcd3798804; Merge from origin/emacs-290f01cb0ebdBump Emacs version to 29.4.50014aab9847Fix for grammar change of keyword "virtual" in tree-sitte...fa364a0d46Revert "; * etc/HISTORY: Delete never-released Emacs 28.3."a81417e576Update Tramp version (don't merge to master)ff389163eeManually merge NEWS.29 from emacs-29ea05713122; * etc/HISTORY: Delete never-released Emacs 28.3.d3469978b8Merge from origin/emacs-293739342a4e; Merge from origin/emacs-2938e738a35eMerge from origin/emacs-294c4c94fa10; Merge from origin/emacs-291313b8966aMerge from origin/emacs-294a76af51bbReplace literal whitespace with `\s`e41dd2241f; Merge from origin/emacs-298520ec829d; * lisp/editorconfig.el (editorconfig-indentation-alist)...99161fb714Fix non-existing `editorconfig-set-indentation-python-mode`fd15d89ec5Merge remote-tracking branch 'origin/emacs-29' into emacs-296a299b3cacRelease Emacs 29.43f3c08bcc7Add before-save-hook to man page files7b0e6cb3ffUse UTC when generating man page timestampsa7cb642a9fMerge from origin/emacs-296491d11b53; Merge from origin/emacs-292f39a4b28aMerge from origin/emacs-29150e2b979c; * src/xfns.c (unwind_create_frame): Add missing definit...75fdeef7b4Allow to expand truncated long lines in *Compilation* buf...fb1b188e1aEglot: Fix command execution (bug#71642)155cc89de0Support for indentation of PHP alternative syntax control...7f7b28a250; Wayland SECONDARY selection problem11fb3510f4Prevent auto-revert when deleting entry (bug#71264)a4fe4ca93cFix font lock regex for user defined constant in PHPe1ba4ebb49Make Compilation mode recognize non-legacy Kotlin/Gradle ...4f03083499; Improve documentation of EditorConfig supportc0bfe42948List Andrea Corallo as co-maintainer in ack.texib3d6880512* admin/MAINTAINERS: Add myself in (co-)maintainers.7cc939bf27; * lisp/ldefs-boot.el: Regenerated for Emacs 29.4959eacc2a7Bump Emacs version to 29.49a02fce714Update files for Emacs 29.4d96c54d388* admin/authors.el: Update for Emacs 29.4fd207432e5* etc/NEWS: Update for Emacs 29.4c645e1d820org-link-expand-abbrev: Do not evaluate arbitrary unsafe ...50a237c468Update Tramp version (don't merge to master)f3e80dd0f7* admin/emacs-shell-lib: Backport to Bash 4.4 or older.ce85d3811dFix bug#49289 also for other auth-source backends # Conflicts: # etc/NEWS
This commit is contained in:
commit
7c8d4e96ba
21 changed files with 525 additions and 202 deletions
|
|
@ -3138,7 +3138,7 @@ if test "${HAVE_W32}" = "yes"; then
|
|||
NATIVE_IMAGE_API="yes (w32)"
|
||||
W32_OBJ="$W32_OBJ w32image.o"
|
||||
fi
|
||||
W32_LIBS="$W32_LIBS -lwinmm -lusp10 -lgdi32 -lcomdlg32"
|
||||
W32_LIBS="$W32_LIBS -lwinmm -lgdi32 -lcomdlg32"
|
||||
W32_LIBS="$W32_LIBS -lmpr -lwinspool -lole32 -lcomctl32"
|
||||
W32_RES_LINK="\$(EMACSRES)"
|
||||
CLIENTRES="emacsclient.res"
|
||||
|
|
|
|||
|
|
@ -643,14 +643,11 @@ long, by using Auto Fill mode. @xref{Filling}.
|
|||
Normally, the first character of each continuation line is
|
||||
positioned at the beginning of the screen line where it is displayed.
|
||||
The minor mode @code{visual-wrap-prefix-mode} and its global
|
||||
(@pxref{Minor Modes}) counterpart
|
||||
@code{global-visual-wrap-prefix-mode} arranges that continuation lines
|
||||
be prefixed by slightly adjusted versions of the fill prefixes
|
||||
(@pxref{Fill Prefix}) of their respective logical lines, so that
|
||||
indentation characters or the prefixes of source code comments are
|
||||
replicated across every continuation line, and the appearance of such
|
||||
comments or indentation is not broken. These prefixes are only shown
|
||||
on display, and does not change the buffer text in any way.
|
||||
counterpart (@pxref{Minor Modes}) @code{global-visual-wrap-prefix-mode}
|
||||
arranges for continuation lines to be indented on display using a fill
|
||||
prefix (@pxref{Fill Prefix}) automatically computed from each line's
|
||||
surrounding context. These prefixes are display-only feature, and do
|
||||
not change the buffer text in any way.
|
||||
|
||||
Sometimes, you may need to edit files containing many long logical
|
||||
lines, and it may not be practical to break them all up by adding
|
||||
|
|
|
|||
|
|
@ -313,6 +313,8 @@ Kill buffer @var{buffer} (@code{kill-buffer}).
|
|||
Offer to kill each buffer, one by one.
|
||||
@item M-x kill-matching-buffers
|
||||
Offer to kill all buffers matching a regular expression.
|
||||
@item M-x kill-matching-buffers-no-ask
|
||||
Like @code{kill-matching-buffers}, but don't ask for confirmation.
|
||||
@end table
|
||||
|
||||
@findex kill-buffer
|
||||
|
|
@ -334,13 +336,16 @@ by one. An answer of @kbd{yes} means to kill the buffer, just like
|
|||
with a space, which are used internally by Emacs.
|
||||
|
||||
@findex kill-matching-buffers
|
||||
@findex kill-matching-buffers-no-ask
|
||||
The command @kbd{M-x kill-matching-buffers} prompts for a regular
|
||||
expression and kills all buffers whose names match that expression.
|
||||
@xref{Regexps}. Like @code{kill-some-buffers}, it asks for
|
||||
confirmation before each kill. This command normally ignores buffers
|
||||
whose names begin with a space, which are used internally by Emacs.
|
||||
To kill internal buffers as well, call @code{kill-matching-buffers}
|
||||
with a prefix argument.
|
||||
@xref{Regexps}. Like @code{kill-some-buffers}, it asks for confirmation
|
||||
before each kill. This command normally ignores buffers whose names
|
||||
begin with a space, which are used internally by Emacs. To kill
|
||||
internal buffers as well, call @code{kill-matching-buffers} with a
|
||||
prefix argument. The command @w{@kbd{M-x kill-matching-buffers-no-ask}}
|
||||
works like @code{kill-matching-buffers}, but doesn't ask for
|
||||
confirmation before killing each matching buffer.
|
||||
|
||||
The Buffer Menu feature is also convenient for killing various
|
||||
buffers. @xref{Several Buffers}.
|
||||
|
|
|
|||
|
|
@ -477,6 +477,14 @@ non-@code{nil} if the buffer is to be saved). Any other
|
|||
non-@code{nil} value means that all buffers should be saved without
|
||||
asking. The default is @code{ask}.
|
||||
|
||||
@vindex grep-use-headings
|
||||
@vindex grep-heading@r{ face}
|
||||
By default, grep matches are shown with the file names prefixed to
|
||||
each line. But if the variable @code{grep-use-headings} is customized
|
||||
to a non-@code{nil} value, the matches are split into sections, one
|
||||
section for each file with matches, and the file names are shown in the
|
||||
section headings using a special face @code{grep-heading}.
|
||||
|
||||
@findex grep-find
|
||||
@findex find-grep
|
||||
The command @kbd{M-x grep-find} (also available as @kbd{M-x
|
||||
|
|
@ -1313,6 +1321,10 @@ of output to its standard output, you may wish to separate its I/O
|
|||
from interaction with GDB. Use the command @w{@kbd{M-x
|
||||
gdb-display-io-buffer}} to show a window with a buffer to which Emacs
|
||||
redirects the input and output from the program you are debugging.
|
||||
However, if the variable @code{gdb-display-io-buffer} is @code{nil},
|
||||
Emacs will not create nor display a separate I/O buffer, but will
|
||||
instead redirect the program's interaction to the GUD interaction
|
||||
buffer.
|
||||
|
||||
@findex gdb-display-registers-buffer
|
||||
@item Registers Buffer
|
||||
|
|
|
|||
|
|
@ -803,9 +803,9 @@ The @code{dired-keep-marker-copy} user option controls how this
|
|||
command handles file marking. The default is to mark all new copies
|
||||
of files with a @samp{C} mark.
|
||||
|
||||
@item D
|
||||
@findex dired-do-delete
|
||||
@kindex D @r{(Dired)}
|
||||
@item D
|
||||
Delete the specified files (@code{dired-do-delete}). This is like the
|
||||
shell command @code{rm}.
|
||||
|
||||
|
|
@ -813,6 +813,13 @@ Like the other commands in this section, this command operates on the
|
|||
@emph{marked} files, or the next @var{n} files. By contrast, @kbd{x}
|
||||
(@code{dired-do-flagged-delete}) deletes all @dfn{flagged} files.
|
||||
|
||||
@findex dired-do-open
|
||||
@kindex E @r{(Dired)}
|
||||
@item E
|
||||
``Open'' the specified files using an external program. The program is
|
||||
selected according to the system conventions, as determined by the
|
||||
variable @code{shell-command-guess-open}.
|
||||
|
||||
@findex dired-do-rename
|
||||
@kindex R @r{(Dired)}
|
||||
@cindex renaming files (in Dired)
|
||||
|
|
|
|||
|
|
@ -1633,8 +1633,8 @@ commands to visit the corresponding source locations.
|
|||
manipulate and apply parts of patches:
|
||||
|
||||
@table @kbd
|
||||
@item M-n
|
||||
@findex diff-hunk-next
|
||||
@item M-n
|
||||
Move to the next hunk-start (@code{diff-hunk-next}). With prefix
|
||||
argument @var{n}, move forward to the @var{n}th next hunk.
|
||||
|
||||
|
|
@ -1645,45 +1645,50 @@ you set @code{diff-refine} to the symbol @code{navigation}, Diff mode
|
|||
only refines the hunk you move to with this command or with
|
||||
@code{diff-hunk-prev}.
|
||||
|
||||
@item M-p
|
||||
@findex diff-hunk-prev
|
||||
@item M-p
|
||||
Move to the previous hunk-start (@code{diff-hunk-prev}). With prefix
|
||||
argument @var{n}, move back to the @var{n}th previous hunk. Like
|
||||
@kbd{M-n}, this command refines the hunk you move to if you set
|
||||
@code{diff-refine} to the symbol @code{navigation}.
|
||||
|
||||
@item M-@}
|
||||
@findex diff-file-next
|
||||
@item M-@}
|
||||
Move to the next file-start, in a multi-file patch
|
||||
(@code{diff-file-next}). With prefix argument @var{n}, move forward
|
||||
to the start of the @var{n}th next file.
|
||||
|
||||
@item M-@{
|
||||
@findex diff-file-prev
|
||||
@item M-@{
|
||||
Move to the previous file-start, in a multi-file patch
|
||||
(@code{diff-file-prev}). With prefix argument @var{n}, move back to
|
||||
the start of the @var{n}th previous file.
|
||||
|
||||
@item M-k
|
||||
@findex diff-hunk-kill
|
||||
@item M-k
|
||||
Kill the hunk at point (@code{diff-hunk-kill}).
|
||||
|
||||
@item M-K
|
||||
@findex diff-file-kill
|
||||
@item M-K
|
||||
In a multi-file patch, kill the current file part.
|
||||
(@code{diff-file-kill}).
|
||||
|
||||
@item C-c C-a
|
||||
@findex diff-apply-hunk
|
||||
@cindex patches, applying
|
||||
@item C-c C-a
|
||||
Apply this hunk to its target file (@code{diff-apply-hunk}). With a
|
||||
prefix argument of @kbd{C-u}, revert this hunk, i.e.@: apply the
|
||||
reverse of the hunk, which changes the ``new'' version into the ``old''
|
||||
version. If @code{diff-jump-to-old-file} is non-@code{nil}, apply the
|
||||
hunk to the ``old'' version of the file instead.
|
||||
|
||||
@item C-c C-b
|
||||
@findex diff-apply-buffer
|
||||
@item C-c @key{RET} a
|
||||
Apply all the hunks in the buffer (@code{diff-apply-buffer}). If the
|
||||
diffs were applied successfully, save the changed buffers.
|
||||
|
||||
@findex diff-refine-hunk
|
||||
@item C-c C-b
|
||||
Highlight the changes of the hunk at point with a finer granularity
|
||||
(@code{diff-refine-hunk}). This allows you to see exactly which parts
|
||||
of each changed line were actually changed.
|
||||
|
|
@ -1693,9 +1698,9 @@ By default, Diff mode refines hunks as Emacs displays them, so you may
|
|||
find this command useful if you customize @code{diff-refine} to a
|
||||
non-default value.
|
||||
|
||||
@item C-c C-c
|
||||
@findex diff-goto-source
|
||||
@vindex diff-jump-to-old-file
|
||||
@item C-c C-c
|
||||
Go to the source file and line corresponding to this hunk
|
||||
(@code{diff-goto-source}). By default, this jumps to the ``new''
|
||||
version of the file, the one shown first on the file header.
|
||||
|
|
@ -1710,20 +1715,20 @@ this jumps to the work file by default. With a prefix argument, jump
|
|||
to the ``old'' revision of the file (@pxref{Old Revisions}), when
|
||||
point is on the old line, or otherwise jump to the ``new'' revision.
|
||||
|
||||
@item C-c C-e
|
||||
@findex diff-ediff-patch
|
||||
@item C-c C-e
|
||||
Start an Ediff session with the patch (@code{diff-ediff-patch}).
|
||||
@xref{Top, Ediff, Ediff, ediff, The Ediff Manual}.
|
||||
|
||||
@item C-c C-n
|
||||
@findex diff-restrict-view
|
||||
@item C-c C-n
|
||||
Restrict the view to the current hunk (@code{diff-restrict-view}).
|
||||
@xref{Narrowing}. With a prefix argument, restrict the
|
||||
view to the current file of a multiple-file patch. To widen again,
|
||||
use @kbd{C-x n w} (@code{widen}).
|
||||
|
||||
@item C-c C-r
|
||||
@findex diff-reverse-direction
|
||||
@item C-c C-r
|
||||
Reverse the direction of comparison for the entire buffer
|
||||
(@code{diff-reverse-direction}). With a prefix argument, reverse the
|
||||
direction only inside the current region (@pxref{Mark}). Reversing
|
||||
|
|
@ -1731,8 +1736,8 @@ the direction means changing the hunks and the file-start headers to
|
|||
produce a patch that would change the ``new'' version into the ``old''
|
||||
one.
|
||||
|
||||
@item C-c C-s
|
||||
@findex diff-split-hunk
|
||||
@item C-c C-s
|
||||
Split the hunk at point (@code{diff-split-hunk}) into two separate
|
||||
hunks. This inserts a hunk header and modifies the header of the
|
||||
current hunk. This command is useful for manually editing patches,
|
||||
|
|
@ -1743,35 +1748,35 @@ produced by the @option{-c} or @option{--context} options to
|
|||
@command{diff}, first convert the buffer to the unified diff format
|
||||
with @kbd{C-c C-u}.
|
||||
|
||||
@item C-c C-d
|
||||
@findex diff-unified->context
|
||||
@item C-c C-d
|
||||
Convert the entire buffer to the @dfn{context diff format}
|
||||
(@code{diff-unified->context}). With a prefix argument, convert only
|
||||
the hunks within the region.
|
||||
|
||||
@item C-c C-u
|
||||
@findex diff-context->unified
|
||||
@item C-c C-u
|
||||
Convert the entire buffer to unified diff format
|
||||
(@code{diff-context->unified}). With a prefix argument, convert
|
||||
unified format to context format. When the mark is active, convert
|
||||
only the hunks within the region.
|
||||
|
||||
@item C-c C-l
|
||||
@findex diff-refresh-hunk
|
||||
@item C-c C-l
|
||||
Re-generate the current hunk (@code{diff-refresh-hunk}).
|
||||
|
||||
@item C-c C-w
|
||||
@vindex diff-ignore-whitespace-switches
|
||||
@findex diff-ignore-whitespace-hunk
|
||||
@item C-c C-w
|
||||
Re-generate the current hunk, disregarding changes in whitespace.
|
||||
With a non-@code{nil} prefix arg, re-generate all the hunks
|
||||
(@code{diff-ignore-whitespace-hunk}). This calls @code{diff-command}
|
||||
with @code{diff-ignore-whitespace-switches}, which defaults to
|
||||
@samp{-b}, meaning ignore changes in whitespace only.
|
||||
|
||||
@item C-x 4 A
|
||||
@findex diff-add-change-log-entries-other-window
|
||||
@findex add-change-log-entry-other-window@r{, in Diff mode}
|
||||
@item C-x 4 A
|
||||
Generate a ChangeLog entry, like @kbd{C-x 4 a} does (@pxref{Change
|
||||
Log}), for each one of the hunks
|
||||
(@code{diff-add-change-log-entries-other-window}). This creates a
|
||||
|
|
|
|||
|
|
@ -302,6 +302,13 @@ a pure white space string to the kill ring, you can say:
|
|||
non-@code{nil} value, identical subsequent kills yield a single
|
||||
kill-ring entry, without duplication.
|
||||
|
||||
@findex kill-ring-deindent-mode
|
||||
If you enable the minor mode @code{kill-ring-deindent-mode}, text
|
||||
saved to the kill-ring will have its indentation decreased by the amount
|
||||
of indentation of the first saved line. That is, if the first line of
|
||||
the saved text was indented @var{n} columns, this mode will remove that
|
||||
number of columns from the indentation of each saved line.
|
||||
|
||||
@node Yanking
|
||||
@section Yanking
|
||||
@cindex moving text
|
||||
|
|
|
|||
|
|
@ -1850,6 +1850,9 @@ Run shell command in the current project's root directory
|
|||
@item C-x p &
|
||||
Run shell command asynchronously in the current project's root
|
||||
directory (@code{project-async-shell-command}).
|
||||
@item C-x p o
|
||||
Run the next command in the current project
|
||||
(@code{project-any-command}).
|
||||
@end table
|
||||
|
||||
Emacs provides commands for handling project files conveniently.
|
||||
|
|
@ -1946,6 +1949,11 @@ directory. @xref{Top,Eshell,Eshell, eshell, Eshell: The Emacs Shell}.
|
|||
The command @kbd{C-x p &} (@code{project-async-shell-command}) runs
|
||||
@code{async-shell-command} in the current project's root directory.
|
||||
|
||||
@findex project-any-command
|
||||
Finally, the command @kbd{C-x p o} (@code{project-any-command}) will
|
||||
run the next command you type, whether related to files or not, in the
|
||||
current project.
|
||||
|
||||
@node Project Buffer Commands
|
||||
@subsection Project Commands That Operate on Buffers
|
||||
|
||||
|
|
@ -1958,6 +1966,9 @@ List the project buffers (@code{project-list-buffers}).
|
|||
@item C-x p k
|
||||
Kill all live buffers that belong to the current project
|
||||
(@code{project-kill-buffers}).
|
||||
@item C-x p o
|
||||
Run the next command in the current project
|
||||
(@code{project-any-command}).
|
||||
@end table
|
||||
|
||||
@findex project-switch-to-buffer
|
||||
|
|
@ -1986,6 +1997,10 @@ project that satisfy any of @code{project-kill-buffer-conditions}. If
|
|||
@code{project-kill-buffers-display-buffer-list} is non-@code{nil}, the
|
||||
buffers to be killed will be displayed first.
|
||||
|
||||
Finally, the command @kbd{C-x p o} (@code{project-any-command}) will
|
||||
run the next command you type, whether related to buffers or not, in the
|
||||
current project.
|
||||
|
||||
@node Switching Projects
|
||||
@subsection Switching Projects
|
||||
|
||||
|
|
|
|||
|
|
@ -452,6 +452,15 @@ While in the completion list buffer, kill it and delete the window
|
|||
showing it (@code{kill-current-buffer}).
|
||||
@end table
|
||||
|
||||
@vindex minibuffer-visible-completions
|
||||
If the variable @code{minibuffer-visible-completions} is customized to
|
||||
a non-@code{nil} value, it changes the commands bound to the arrow keys:
|
||||
instead of moving in the minibuffer, they move between completion
|
||||
candidates, like meta-arrow keys do by default. Similarly,
|
||||
@kbd{@key{RET}} selects the current candidate, like @kbd{M-@key{RET}}
|
||||
does normally. @code{C-g} hides the completion window, but leaves the
|
||||
minibuffer active, so you can continue typing at the prompt.
|
||||
|
||||
@node Completion Exit
|
||||
@subsection Completion Exit
|
||||
|
||||
|
|
@ -685,6 +694,17 @@ then move to a candidate by cursor motion commands and select it with
|
|||
@code{second-tab}, then the first @kbd{@key{TAB}} will pop up the
|
||||
completions list buffer, and the second one will switch to it.
|
||||
|
||||
@findex previous-line-completion
|
||||
@findex next-line-completion
|
||||
@vindex completion-auto-wrap
|
||||
When the window showing the completions is selected, either because
|
||||
you customized @code{completion-auto-select} or because you switched to
|
||||
it by typing @kbd{C-x o}, the @kbd{@key{UP}} and @kbd{@key{DOWN}} arrow
|
||||
keys move by lines between completion candidates; with a prefix numeric
|
||||
argument, they move that many lines. If @code{completion-auto-wrap} is
|
||||
non-@code{nil}, these commands will wrap at bottom and top of the
|
||||
candidate list.
|
||||
|
||||
@vindex completion-cycle-threshold
|
||||
If @code{completion-cycle-threshold} is non-@code{nil}, completion
|
||||
commands can cycle through completion alternatives. Normally, if
|
||||
|
|
|
|||
|
|
@ -1208,6 +1208,12 @@ Hide everything except the top @var{n} levels of heading lines
|
|||
Hide everything except for the heading or body that point is in, plus
|
||||
the headings leading up from there to the top level of the outline
|
||||
(@code{outline-hide-other}).
|
||||
@item C-c / h @var{regexp} @key{RET}
|
||||
Hide bodies of headings that match @var{regexp}
|
||||
(@code{outline-hide-by-heading-regexp}).
|
||||
@item C-c / s @var{regexp} @key{RET}
|
||||
Show bodies of headings that match @var{regexp}
|
||||
(@code{outline-show-by-heading-regexp}).
|
||||
@end table
|
||||
|
||||
@findex outline-hide-entry
|
||||
|
|
@ -1253,6 +1259,16 @@ headers leading up from there to top level in the outline) and the top
|
|||
level headings. It also reveals body lines preceding the first
|
||||
heading in the buffer.
|
||||
|
||||
@findex outline-hide-by-heading-regexp
|
||||
@findex outline-show-by-heading-regexp
|
||||
@kindex C-c / h @r{(Outline mode)}
|
||||
@kindex C-c / s @r{(Outline mode)}
|
||||
The command @kbd{C-c / h} (@code{outline-hide-by-heading-regexp})
|
||||
prompts for a regular expression, and hides all the body lines of
|
||||
headings which match the regular expression. The command @kbd{C-c / s}
|
||||
likewise prompts for a regular expression, and reveals the bodies of
|
||||
matching headings.
|
||||
|
||||
@findex outline-hide-body
|
||||
@findex outline-show-all
|
||||
@kindex C-c C-t @r{(Outline mode)}
|
||||
|
|
|
|||
72
etc/DEBUG
72
etc/DEBUG
|
|
@ -1157,6 +1157,12 @@ Please refer to the LLDB reference on the web for more information
|
|||
about LLDB. If you already know GDB, you will also find a mapping
|
||||
from GDB commands to corresponding LLDB commands there.
|
||||
|
||||
** Debugging Emacs on OpenBSD
|
||||
|
||||
To debug Emacs on OpenBSD, use the 'egdb' command from the 'gdb'
|
||||
package. This reportedly works both if Emacs was compiled with GCC and
|
||||
if it was compiled with clang.
|
||||
|
||||
** Debugging Emacs on Android.
|
||||
|
||||
A script located in the java/ directory automates the procedures
|
||||
|
|
@ -1282,39 +1288,39 @@ the crash.
|
|||
The third form is printed when Emacs misuses the JVM in some fashion
|
||||
that is detected by the Android CheckJNI facility. It looks like:
|
||||
|
||||
A/art﹕ art/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: ...
|
||||
A/art﹕ art/runtime/check_jni.cc:65] in call to CallVoidMethodV
|
||||
A/art﹕ art/runtime/check_jni.cc:65] from void android.os.MessageQueue.nativePollOnce(long, int)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] "main" prio=5 tid=1 Runnable
|
||||
A/art﹕ art/runtime/check_jni.cc:65] | group="main" sCount=0 dsCount=0 obj=0x87d30ef0 self=0xb4f07800
|
||||
A/art﹕ art/runtime/check_jni.cc:65] | sysTid=18828 nice=-11 cgrp=apps sched=0/0 handle=0xb6fdeec8
|
||||
A/art﹕ art/runtime/check_jni.cc:65] | state=R schedstat=( 2249126546 506089308 3210 ) utm=183 stm=41 core=3 HZ=100
|
||||
A/art﹕ art/runtime/check_jni.cc:65] | stack=0xbe0c8000-0xbe0ca000 stackSize=8MB
|
||||
A/art﹕ art/runtime/check_jni.cc:65] | held mutexes= "mutator lock"(shared held)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #00 pc 00004640 /system/lib/libbacktrace_libc++.so (UnwindCurrent::Unwind(unsigned int, ucontext*)+23)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #01 pc 00002e8d /system/lib/libbacktrace_libc++.so (Backtrace::Unwind(unsigned int, ucontext*)+8)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #02 pc 00248381 /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, char const*, art::mirror::ArtMethod*)+68)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #03 pc 0022cd0b /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+146)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #04 pc 000b189b /system/lib/libart.so (art::JniAbort(char const*, char const*)+582)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #05 pc 000b1fd5 /system/lib/libart.so (art::JniAbortF(char const*, char const*, ...)+60)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #06 pc 000b50e5 /system/lib/libart.so (art::ScopedCheck::ScopedCheck(_JNIEnv*, int, char const*)+1284)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #07 pc 000bc59f /system/lib/libart.so (art::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+30)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #08 pc 00063803 /system/lib/libandroid_runtime.so (???)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #09 pc 000776bd /system/lib/libandroid_runtime.so (android::NativeDisplayEventReceiver::dispatchVsync(long long, int, unsigned int)+40)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #10 pc 00077885 /system/lib/libandroid_runtime.so (android::NativeDisplayEventReceiver::handleEvent(int, int, void*)+80)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #11 pc 00010f6f /system/lib/libutils.so (android::Looper::pollInner(int)+482)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #12 pc 00011019 /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #13 pc 000830c1 /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] native: #14 pc 000b22d7 /system/framework/arm/boot.oat (Java_android_os_MessageQueue_nativePollOnce__JI+102)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] at android.os.MessageQueue.nativePollOnce(Native method)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] at android.os.MessageQueue.next(MessageQueue.java:143)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] at android.os.Looper.loop(Looper.java:130)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] at android.app.ActivityThread.main(ActivityThread.java:5832)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] at java.lang.reflect.Method.invoke!(Native method)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] at java.lang.reflect.Method.invoke(Method.java:372)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
|
||||
A/art﹕ art/runtime/check_jni.cc:65] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
|
||||
A/art﹕ art/runtime/check_jni.cc:65]
|
||||
A/art: art/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: ...
|
||||
A/art: art/runtime/check_jni.cc:65] in call to CallVoidMethodV
|
||||
A/art: art/runtime/check_jni.cc:65] from void android.os.MessageQueue.nativePollOnce(long, int)
|
||||
A/art: art/runtime/check_jni.cc:65] "main" prio=5 tid=1 Runnable
|
||||
A/art: art/runtime/check_jni.cc:65] | group="main" sCount=0 dsCount=0 obj=0x87d30ef0 self=0xb4f07800
|
||||
A/art: art/runtime/check_jni.cc:65] | sysTid=18828 nice=-11 cgrp=apps sched=0/0 handle=0xb6fdeec8
|
||||
A/art: art/runtime/check_jni.cc:65] | state=R schedstat=( 2249126546 506089308 3210 ) utm=183 stm=41 core=3 HZ=100
|
||||
A/art: art/runtime/check_jni.cc:65] | stack=0xbe0c8000-0xbe0ca000 stackSize=8MB
|
||||
A/art: art/runtime/check_jni.cc:65] | held mutexes= "mutator lock"(shared held)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #00 pc 00004640 /system/lib/libbacktrace_libc++.so (UnwindCurrent::Unwind(unsigned int, ucontext*)+23)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #01 pc 00002e8d /system/lib/libbacktrace_libc++.so (Backtrace::Unwind(unsigned int, ucontext*)+8)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #02 pc 00248381 /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, char const*, art::mirror::ArtMethod*)+68)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #03 pc 0022cd0b /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+146)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #04 pc 000b189b /system/lib/libart.so (art::JniAbort(char const*, char const*)+582)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #05 pc 000b1fd5 /system/lib/libart.so (art::JniAbortF(char const*, char const*, ...)+60)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #06 pc 000b50e5 /system/lib/libart.so (art::ScopedCheck::ScopedCheck(_JNIEnv*, int, char const*)+1284)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #07 pc 000bc59f /system/lib/libart.so (art::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+30)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #08 pc 00063803 /system/lib/libandroid_runtime.so (???)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #09 pc 000776bd /system/lib/libandroid_runtime.so (android::NativeDisplayEventReceiver::dispatchVsync(long long, int, unsigned int)+40)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #10 pc 00077885 /system/lib/libandroid_runtime.so (android::NativeDisplayEventReceiver::handleEvent(int, int, void*)+80)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #11 pc 00010f6f /system/lib/libutils.so (android::Looper::pollInner(int)+482)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #12 pc 00011019 /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #13 pc 000830c1 /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
|
||||
A/art: art/runtime/check_jni.cc:65] native: #14 pc 000b22d7 /system/framework/arm/boot.oat (Java_android_os_MessageQueue_nativePollOnce__JI+102)
|
||||
A/art: art/runtime/check_jni.cc:65] at android.os.MessageQueue.nativePollOnce(Native method)
|
||||
A/art: art/runtime/check_jni.cc:65] at android.os.MessageQueue.next(MessageQueue.java:143)
|
||||
A/art: art/runtime/check_jni.cc:65] at android.os.Looper.loop(Looper.java:130)
|
||||
A/art: art/runtime/check_jni.cc:65] at android.app.ActivityThread.main(ActivityThread.java:5832)
|
||||
A/art: art/runtime/check_jni.cc:65] at java.lang.reflect.Method.invoke!(Native method)
|
||||
A/art: art/runtime/check_jni.cc:65] at java.lang.reflect.Method.invoke(Method.java:372)
|
||||
A/art: art/runtime/check_jni.cc:65] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
|
||||
A/art: art/runtime/check_jni.cc:65] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
|
||||
A/art: art/runtime/check_jni.cc:65]
|
||||
|
||||
In such situations, the first line explains what infraction Emacs
|
||||
committed, while the ensuing ones print backtraces for each running
|
||||
|
|
|
|||
129
etc/NEWS.30
129
etc/NEWS.30
|
|
@ -58,6 +58,7 @@ ALSA on these operating systems instead.
|
|||
|
||||
* Startup Changes in Emacs 30.1
|
||||
|
||||
---
|
||||
** On GNU/Linux, Emacs is now the default application for 'org-protocol'.
|
||||
Org mode provides a way to quickly capture bookmarks, notes, and links
|
||||
using 'emacsclient':
|
||||
|
|
@ -71,7 +72,7 @@ arranges for Emacs to be the default application for the 'org-protocol'
|
|||
URI scheme. See the Org mode manual, Info node "(org) Protocols" for
|
||||
more details.
|
||||
|
||||
---
|
||||
+++
|
||||
** New variable lets Lisp code read emacsclient arguments.
|
||||
When '--eval' is passed to emacsclient and Emacs is evaluating each
|
||||
argument, the new variable 'server-eval-args-left' is set to those
|
||||
|
|
@ -84,6 +85,7 @@ escaping (to protect them from the shell).
|
|||
|
||||
* Incompatible Changes in Emacs 30.1
|
||||
|
||||
---
|
||||
** Tree-Sitter modes are now declared as submodes of the non-TS modes.
|
||||
In order to help the use of those Tree-Sitter modes, they are now
|
||||
declared to have the corresponding non-Tree-Sitter mode as an
|
||||
|
|
@ -94,6 +96,7 @@ collections of snippets automatically apply to the new Tree-Sitter modes.
|
|||
Note that those modes still do not inherit from the non-TS mode, so
|
||||
configuration settings installed via mode hooks are not affected.
|
||||
|
||||
---
|
||||
** Mouse wheel events should now always be 'wheel-up/down/left/right'.
|
||||
At those places where the old 'mouse-4/5/6/7' events could still occur
|
||||
(i.e., X11 input in the absence of XInput2, and 'xterm-mouse-mode'),
|
||||
|
|
@ -124,6 +127,7 @@ to your init file:
|
|||
|
||||
(advice-add 'completion-at-point :after #'minibuffer-hide-completions)
|
||||
|
||||
---
|
||||
** The default process filter was rewritten in native code.
|
||||
The round-trip through the Lisp function
|
||||
'internal-default-process-filter' is skipped when the process filter is
|
||||
|
|
@ -158,6 +162,7 @@ see the variable 'url-request-extra-headers'.
|
|||
|
||||
* Changes in Emacs 30.1
|
||||
|
||||
---
|
||||
** Emacs now supports Unicode Standard version 15.1.
|
||||
|
||||
+++
|
||||
|
|
@ -184,20 +189,23 @@ TTY frames.
|
|||
|
||||
---
|
||||
** Support for underline colors on TTY frames.
|
||||
Colors specified in face underlines will now also be displayed in TTY
|
||||
frames with the previously mentioned capabilities.
|
||||
Colors specified in the underline face will now also be displayed on TTY
|
||||
frames on terminals that support the 'Su' or 'Smulx' capabilities.
|
||||
|
||||
+++
|
||||
** Modeline elements can now be right-aligned.
|
||||
Anything following the symbol 'mode-line-format-right-align' in
|
||||
'mode-line-format' will be right-aligned. Exactly where it is
|
||||
right-aligned to is controlled by the new user option
|
||||
'mode-line-right-align-edge'.
|
||||
|
||||
---
|
||||
** X selection requests are now handled much faster and asynchronously.
|
||||
This means it should be less necessary to disable the likes of
|
||||
'select-active-regions' when Emacs is running over a slow network
|
||||
connection.
|
||||
|
||||
---
|
||||
** Emacs now updates invisible frames that are made visible by a compositor.
|
||||
If an invisible or an iconified frame is shown to the user by the
|
||||
compositing manager, Emacs will now redisplay such a frame even though
|
||||
|
|
@ -209,8 +217,8 @@ example, as part of preview for iconified frames.
|
|||
The only exception is w32notify.
|
||||
|
||||
+++
|
||||
** Image ':map' property is now recomputed when image is transformed.
|
||||
Now images with clickable maps work as expected after you run commands
|
||||
** The ':map' property of images is now recomputed when image is transformed.
|
||||
Images with clickable maps now work as expected after you run commands
|
||||
such as 'image-increase-size', 'image-decrease-size', 'image-rotate',
|
||||
'image-flip-horizontally', and 'image-flip-vertically'.
|
||||
Set the new user option 'image-recompute-map-p' to nil to prevent Emacs
|
||||
|
|
@ -218,11 +226,13 @@ from recomputing image maps.
|
|||
|
||||
** Minibuffer and Completions
|
||||
|
||||
+++
|
||||
*** New commands 'previous-line-completion' and 'next-line-completion'.
|
||||
Bound to '<up>' and '<down>' arrow keys, respectively, they navigate
|
||||
the "*Completions*" buffer vertically by lines, wrapping at the
|
||||
top/bottom when 'completion-auto-wrap' is non-nil.
|
||||
|
||||
+++
|
||||
*** New user option 'minibuffer-visible-completions'.
|
||||
When customized to non-nil, you can use arrow keys in the minibuffer
|
||||
to navigate the completions displayed in the "*Completions*" window.
|
||||
|
|
@ -231,6 +241,7 @@ completions window. When the completions window is not visible,
|
|||
then all these keys have their usual meaning in the minibuffer.
|
||||
This option is supported for in-buffer completion as well.
|
||||
|
||||
---
|
||||
*** Selected completion candidates are deselected on typing.
|
||||
When you type at the minibuffer prompt, the current completion
|
||||
candidate will be un-highlighted, and point in the "*Completions*" window
|
||||
|
|
@ -242,6 +253,7 @@ the minibuffer contents instead. This deselection behavior can be
|
|||
controlled with the new user option 'completion-auto-deselect', which
|
||||
is t by default.
|
||||
|
||||
+++
|
||||
*** New value 'historical' for user option 'completions-sort'.
|
||||
When 'completions-sort' is set to 'historical', completion candidates
|
||||
will be first sorted alphabetically, and then re-sorted by their order
|
||||
|
|
@ -304,6 +316,7 @@ It specifies how 'set-window-configuration' and 'window-state-put'
|
|||
should proceed with windows whose buffer was killed after the
|
||||
corresponding configuration or state was recorded.
|
||||
|
||||
---
|
||||
*** New variable 'window-point-context-set-function'.
|
||||
It can be used to set a context for window point in all windows by
|
||||
'window-point-context-set' before calling 'current-window-configuration'
|
||||
|
|
@ -336,8 +349,9 @@ window systems other than macOS and GNUstep (Nextstep).
|
|||
|
||||
+++
|
||||
*** New global minor mode 'modifier-bar-mode'.
|
||||
When this minor mode is enabled, buttons representing modifier keys
|
||||
are displayed along the tool bar.
|
||||
When this minor mode is enabled, the tool bar displays buttons
|
||||
representing modifier keys. Clicking on these buttons applies the
|
||||
corresponding modifiers to the next input event.
|
||||
|
||||
+++
|
||||
*** New user option 'tool-bar-always-show-default'.
|
||||
|
|
@ -413,10 +427,12 @@ Switch to a buffer visiting the source of what is being described in
|
|||
This user option controls outline visibility in the output buffer of
|
||||
'describe-bindings' when 'describe-bindings-outline' is non-nil.
|
||||
|
||||
---
|
||||
*** 'describe-function' shows function inferred type when available.
|
||||
For native compiled Lisp functions 'describe-function' prints (after
|
||||
the signature) the automatically inferred function type as well.
|
||||
|
||||
---
|
||||
*** 'describe-function' now shows the type of the function object.
|
||||
The text used to say things like "car is is a built-in function" whereas
|
||||
it now says "car is a primitive-function" where "primitive-function" is
|
||||
|
|
@ -427,6 +443,7 @@ get information about that type.
|
|||
*** 'C-h m' ('describe-mode') uses outlining by default.
|
||||
Set 'describe-mode-outline' to nil to get back the old behavior.
|
||||
|
||||
---
|
||||
*** 'C-h k' ('describe-key') shows Unicode name.
|
||||
For keybindings which produce single characters via translation or input
|
||||
methods, 'C-h k' now shows the Unicode name of the produced character in
|
||||
|
|
@ -436,6 +453,7 @@ addition to the character itself, e.g.
|
|||
|
||||
€ 'EURO SIGN' (translated from C-x 8 E)
|
||||
|
||||
---
|
||||
*** 'C-h b' ('describe-bindings') shows Unicode names.
|
||||
For keybindings which produce single characters via translation (such as
|
||||
those using the 'C-x 8' or 'A-' prefix, or 'dead-acute', 'dead-grave',
|
||||
|
|
@ -465,8 +483,10 @@ This command can toggle boolean options for the duration of a session.
|
|||
*** New prefix argument for modifying directory-local variables.
|
||||
The commands 'add-dir-local-variable', 'delete-dir-local-variable' and
|
||||
'copy-file-locals-to-dir-locals' now take an optional prefix argument,
|
||||
to enter the file name you want to modify.
|
||||
to enter the file name where you want to modify directory-local
|
||||
variables.
|
||||
|
||||
+++
|
||||
*** New user option 'safe-local-variable-directories'.
|
||||
This user option names directories in which Emacs will treat all
|
||||
directory-local variables as safe.
|
||||
|
|
@ -474,6 +494,10 @@ directory-local variables as safe.
|
|||
+++
|
||||
** CL Print
|
||||
|
||||
+++
|
||||
*** There is a new chapter in the CL manual documenting cl-print.el.
|
||||
See the Info node "(cl) Printing".
|
||||
|
||||
+++
|
||||
*** You can expand the "..." truncation everywhere.
|
||||
The code that allowed "..." to be expanded in the "*Backtrace*" buffer
|
||||
|
|
@ -494,13 +518,9 @@ This setting causes byte-compiled functions to be printed in full by
|
|||
'prin1'. A button on this output can be activated to disassemble the
|
||||
function.
|
||||
|
||||
+++
|
||||
*** There is a new chapter in the CL manual documenting cl-print.el.
|
||||
See the Info node "(cl) Printing".
|
||||
|
||||
** Miscellaneous
|
||||
|
||||
---
|
||||
+++
|
||||
*** New command 'kill-matching-buffers-no-ask'.
|
||||
This works like 'kill-matching-buffers', but without asking for
|
||||
confirmation.
|
||||
|
|
@ -512,9 +532,9 @@ between the auto save file and the current file.
|
|||
|
||||
+++
|
||||
*** 'read-passwd' can toggle the visibility of passwords.
|
||||
Use 'TAB' in the minibuffer to show or hide the password. Likewise,
|
||||
there is an icon on the mode-line, which toggles the visibility of the
|
||||
password when clicking with 'mouse-1'.
|
||||
Use 'TAB' in the minibuffer to show or hide the password.
|
||||
Alternatively, click the new show-password icon on the mode-line with
|
||||
'mouse-1' to toggle the visibility of the password.
|
||||
|
||||
*** 'advice-remove' is now an interactive command.
|
||||
When called interactively, 'advice-remove' now prompts for an advised
|
||||
|
|
@ -541,8 +561,8 @@ remote buffers. The default is nil.
|
|||
|
||||
+++
|
||||
*** New user option 'remote-file-name-access-timeout'.
|
||||
When a positive number, this option limits the call of 'access-file'
|
||||
for remote files to this number of seconds. Default is nil.
|
||||
If a positive number, this option limits the call of 'access-file'
|
||||
for remote files to that number of seconds. Default is nil.
|
||||
|
||||
+++
|
||||
*** New user option 'yes-or-no-prompt'.
|
||||
|
|
@ -554,7 +574,8 @@ This allows the user to customize the prompt that is appended by
|
|||
*** New user option 'menu-bar-close-window'.
|
||||
When non-nil, selecting "Close" from the "File" menu or clicking
|
||||
"Close" in the tool bar will result in the current window being
|
||||
closed, if possible.
|
||||
deleted, if possible. The default is nil, and these gestures kill the
|
||||
buffer shown in the current window, but don't delete the window.
|
||||
|
||||
---
|
||||
*** New face 'display-time-date-and-time'.
|
||||
|
|
@ -585,8 +606,9 @@ Homebrew.
|
|||
|
||||
+++
|
||||
*** 'write-region-inhibit-fsync' now defaults to t in interactive mode,
|
||||
as it has in batch mode since Emacs 24.
|
||||
as it did in batch mode since Emacs 24.
|
||||
|
||||
---
|
||||
*** The default value of 'read-process-output-max' was increased to 65536.
|
||||
|
||||
+++
|
||||
|
|
@ -613,11 +635,11 @@ buffers.
|
|||
(This minor mode is the 'adaptive-wrap' ELPA package renamed and
|
||||
lightly edited for inclusion in Emacs.)
|
||||
|
||||
---
|
||||
+++
|
||||
** New global minor mode 'kill-ring-deindent-mode'.
|
||||
When enabled, text being saved to the kill ring will be de-indented by
|
||||
the column number at its start. For example, saving the entire
|
||||
function call within:
|
||||
function call within an indented block:
|
||||
|
||||
foo ()
|
||||
{
|
||||
|
|
@ -626,16 +648,16 @@ foo ()
|
|||
argument_3_compute ());
|
||||
}
|
||||
|
||||
will save:
|
||||
will save this to the kill ring:
|
||||
|
||||
long_function_with_several_arguments (argument_1_compute (),
|
||||
argument_2_compute (),
|
||||
argument_3_compute ())
|
||||
|
||||
to the kill ring, omitting the two columns of extra indentation that
|
||||
would otherwise be present in the second and third lines of the
|
||||
function call.
|
||||
This omits the two columns of extra indentation that would otherwise be
|
||||
copied from the second and third lines and saved to the kill ring.
|
||||
|
||||
---
|
||||
** New command 'replace-regexp-as-diff'.
|
||||
It reads a regexp to search for and a string to replace with, then
|
||||
displays a buffer with replacements as diffs. After reviewing the
|
||||
|
|
@ -706,6 +728,7 @@ whereas if the mouse pointer is in the left half of a glyph, point
|
|||
will be put in front the buffer position corresponding to that glyph.
|
||||
By default this is disabled.
|
||||
|
||||
---
|
||||
** New pre-defined values for 'electric-quote-chars'.
|
||||
The available customization options for 'electric-quote-chars' have been
|
||||
updated with common pairs of quotation characters, including "‘", "’",
|
||||
|
|
@ -713,7 +736,7 @@ updated with common pairs of quotation characters, including "‘", "’",
|
|||
The default is unchanged.
|
||||
|
||||
+++
|
||||
** 'M-TAB' now invokes 'completion-at-point' also in Text mode.
|
||||
** 'M-TAB' now invokes 'completion-at-point' in Text mode.
|
||||
By default, Text mode no longer binds 'M-TAB' to 'ispell-complete-word'.
|
||||
Instead, this mode arranges for 'completion-at-point', globally bound to
|
||||
'M-TAB', to perform word completion as well. You can have Text mode
|
||||
|
|
@ -764,14 +787,17 @@ These languages are spoken in Pakistan and Afghanistan.
|
|||
*** New input method "english-colemak".
|
||||
This input method supports the Colemak keyboard layout.
|
||||
|
||||
---
|
||||
*** Additional 'C-x 8' key translations for "æ" and "Æ".
|
||||
These characters can now be input with 'C-x 8 a e' and 'C-x 8 A E',
|
||||
respectively, in addition to the existing translations 'C-x 8 / e' and
|
||||
'C-x 8 / E'.
|
||||
|
||||
---
|
||||
*** New 'C-x 8' key translations for "low" quotes "„", and "‚".
|
||||
These can now be entered with 'C-x , "' and 'C-x , ''.
|
||||
|
||||
---
|
||||
*** New German language 'C-x 8' key translations for quotation marks.
|
||||
The characters "„", "“", and "”" can now be entered with 'C-x 8 v',
|
||||
'C-x 8 b' and 'C-x 8 n'. The single versions "‚", "‘", and "’" can now
|
||||
|
|
@ -779,6 +805,7 @@ be entered with 'C-x 8 V', 'C-x 8 B' and 'C-x 8 N'. These characters
|
|||
are used for the official German quoting style. Using them requires
|
||||
activating German language support via 'iso-transl-set-language'.
|
||||
|
||||
---
|
||||
*** "latin-prefix" and "latin-postfix" quotation marks additions.
|
||||
These input methods can now produce single, double and "low" left and
|
||||
right quotation marks:
|
||||
|
|
@ -788,17 +815,20 @@ right quotation marks:
|
|||
by using "[", "]", and "," for "left", "right", and "low" respectively
|
||||
to modify "'" and """.
|
||||
|
||||
---
|
||||
*** "latin-prefix" and "latin-postfix" guillemets support.
|
||||
These input methods can now produce single guillemets "‹" and "›". For
|
||||
"latin-prefix" use "~~<" and "~~>", for "latin-postfix" use "<~" and
|
||||
">~". Double guillemets ("«" and "»") were already supported.
|
||||
|
||||
---
|
||||
*** New French language 'C-x 8' key translations for "‹" and "›".
|
||||
These characters can now be entered using 'C-x 8 ~ <' and 'C-x 8 ~ >'
|
||||
respectively, after activating French language support via
|
||||
'iso-transl-set-language'. Double guillemets were already supported via
|
||||
'C-x 8 <' and 'C-x 8 >'
|
||||
|
||||
---
|
||||
*** Additional 'C-x 8' key translation for Euro "€" currency symbol.
|
||||
This can now be entered using 'C-x 8 E' in addition to the existing
|
||||
'C-x 8 * E' translation.
|
||||
|
|
@ -808,11 +838,12 @@ This can now be entered using 'C-x 8 E' in addition to the existing
|
|||
|
||||
** Outline mode
|
||||
|
||||
+++
|
||||
*** New commands to show/hide outlines by regexp.
|
||||
'/ h' ('outline-hide-by-heading-regexp') asks for a regexp and then
|
||||
'C-c / h' ('outline-hide-by-heading-regexp') asks for a regexp and then
|
||||
hides the body lines of all outlines whose heading lines match the
|
||||
regexp. '/ s' ('outline-show-by-heading-regexp') does the same but
|
||||
shows the matched outlines.
|
||||
regexp. 'C-c / s' ('outline-show-by-heading-regexp') does the inverse:
|
||||
it shows the bodies of outlines that matched a regexp.
|
||||
|
||||
+++
|
||||
*** 'outline-minor-mode' is supported in tree-sitter major modes.
|
||||
|
|
@ -828,6 +859,7 @@ This user option associates manual names with URLs. It affects the
|
|||
Emacs-included manuals are set. Further associations can be added for
|
||||
arbitrary Info manuals.
|
||||
|
||||
---
|
||||
*** Emacs can now display Info manuals compressed with 'lzip'.
|
||||
This requires the 'lzip' program to be installed on your system.
|
||||
|
||||
|
|
@ -859,7 +891,7 @@ If you want to get back the old behavior, set the user option to the value
|
|||
(setopt gdb-locals-table-row-config
|
||||
`((type . 0) (name . 0) (value . ,gdb-locals-value-limit)))
|
||||
|
||||
---
|
||||
+++
|
||||
*** New user option 'gdb-display-io-buffer'.
|
||||
If this is nil, 'M-x gdb' will neither create nor display a separate
|
||||
buffer for the I/O of the program being debugged, but will instead
|
||||
|
|
@ -868,11 +900,13 @@ default is t, to preserve previous behavior.
|
|||
|
||||
** Grep
|
||||
|
||||
+++
|
||||
*** New user option 'grep-use-headings'.
|
||||
When non-nil, the output of Grep is split into sections, one for each
|
||||
file, instead of having file names prefixed to each line. It is
|
||||
equivalent to the "--heading" option of some tools such as 'git grep'
|
||||
and 'rg'. The headings are displayed using the new 'grep-heading' face.
|
||||
The default is nil.
|
||||
|
||||
** Compilation mode
|
||||
|
||||
|
|
@ -882,6 +916,7 @@ This is because it partly acts by modifying other rules which may
|
|||
occasionally be surprising. It can be re-enabled by adding 'omake' to
|
||||
'compilation-error-regexp-alist'.
|
||||
|
||||
---
|
||||
*** Lua errors and stack traces are now recognized.
|
||||
Compilation mode now recognizes Lua language errors and stack traces.
|
||||
Every Lua error is recognized as a compilation error, and every Lua
|
||||
|
|
@ -895,22 +930,26 @@ When non-nil, display the name of the current project on the mode
|
|||
line. Clicking 'mouse-1' on the project name pops up the project
|
||||
menu. The default value is nil.
|
||||
|
||||
---
|
||||
*** New user option 'project-file-history-behavior'.
|
||||
Customizing it to 'relativize' makes commands like 'project-find-file'
|
||||
and 'project-find-dir' display previous history entries relative to
|
||||
the current project.
|
||||
|
||||
--
|
||||
*** New user option 'project-key-prompt-style'.
|
||||
The look of the key prompt in the project switcher has been changed
|
||||
slightly. To get the previous one, set this option to 'brackets'.
|
||||
|
||||
---
|
||||
*** 'project-try-vc' tries harder to find the responsible VCS.
|
||||
When 'project-vc-extra-root-markers' is non-nil, and causes a
|
||||
subdirectory project to be detected which is not a VCS root, we now
|
||||
additionally traverse the parent directories until a VCS root is found
|
||||
subdirectory project to be detected which is not a VCS root, Project now
|
||||
additionally traverses the parent directories until a VCS root is found
|
||||
(if any), so that the ignore rules for that repository are used, and
|
||||
the file listing's performance is still optimized.
|
||||
|
||||
+++
|
||||
*** New commands 'project-any-command' and 'project-prefix-or-any-command'.
|
||||
The former is now bound to 'C-x p o' by default.
|
||||
The latter is designed primarily for use as a value of
|
||||
|
|
@ -948,15 +987,16 @@ With this value only the revision number is displayed on the mode-line.
|
|||
*** Obsolete command 'vc-switch-backend' re-added as 'vc-change-backend'.
|
||||
The command was previously obsoleted and unbound in Emacs 28.
|
||||
|
||||
---
|
||||
*** Support for viewing VC change history across renames.
|
||||
When a fileset's VC change history ('C-x v l') ends at a rename, we
|
||||
now print the old name(s) and a button which jumps to their history.
|
||||
Git and Hg are supported. Naturally, 'vc-git-print-log-follow' should
|
||||
be nil for this to work (or '--follow' should not be in
|
||||
'vc-hg-print-log-switches', in Hg's case). Unlike when the '--follow'
|
||||
switch is used, commands to see the diff of the old revision ('d'),
|
||||
check out an old file version ('f') or annotate it right away ('a'),
|
||||
also work on revisions which precede renames.
|
||||
When a fileset's VC change history ends at a rename, ('C-x v l') now
|
||||
prints the old name(s) and shows a button which jumps to the history of
|
||||
the files under the old names. This feature is supported for Git and
|
||||
Hg. Naturally, 'vc-git-print-log-follow' should be nil for this to work
|
||||
(or '--follow' should not be in 'vc-hg-print-log-switches', in Hg's
|
||||
case). Unlike when the '--follow' switch is used, commands to see the
|
||||
diff of the old revision ('d'), to check out an old file version ('f')
|
||||
or to annotate it ('a'), also work on revisions which precede renames.
|
||||
|
||||
---
|
||||
*** 'vc-annotate' now abbreviates the Git revision in the buffer name.
|
||||
|
|
@ -964,6 +1004,7 @@ When using the Git backend, 'vc-annotate' will use an abbreviated
|
|||
revision identifier in its buffer name. To restore the previous
|
||||
behavior, set 'vc-annotate-use-short-revision' to nil.
|
||||
|
||||
---
|
||||
*** New option 'vc-git-file-name-changes-switches'.
|
||||
It allows tweaking the thresholds for rename and copy detection.
|
||||
|
||||
|
|
@ -989,6 +1030,7 @@ This allows changing which type of whitespace changes are ignored when
|
|||
regenerating hunks with 'diff-ignore-whitespace-hunk'. Defaults to
|
||||
the previously hard-coded "-b".
|
||||
|
||||
+++
|
||||
*** New command 'diff-apply-buffer' bound to 'C-c RET a'.
|
||||
It applies the diff in the entire diff buffer and
|
||||
saves all modified file buffers.
|
||||
|
|
@ -1003,6 +1045,7 @@ It also controls how to move point when encountering a boundary
|
|||
(e.g., if every line is visible, invoking 'dired-next-line' at
|
||||
the last line will move to the first line). The default is nil.
|
||||
|
||||
---
|
||||
*** New user option 'dired-filename-display-length'.
|
||||
It is an integer representing the maximum display length of filenames.
|
||||
The middle part of a filename whose length exceeds the restriction is
|
||||
|
|
@ -1010,6 +1053,7 @@ hidden and an ellipsis is displayed instead. A value of 'window'
|
|||
means using the right edge of window as the display restriction. The
|
||||
default is nil.
|
||||
|
||||
---
|
||||
*** New user option 'shell-command-guess-functions'.
|
||||
It defines how to populate a list of commands available
|
||||
for 'M-!', 'M-&', '!', '&' and the context menu "Open With"
|
||||
|
|
@ -1018,16 +1062,19 @@ based on marked files in Dired. Possible backends are
|
|||
and a universal command such as "open" or "start"
|
||||
that delegates to the OS.
|
||||
|
||||
+++
|
||||
*** New command 'dired-do-open'.
|
||||
This command is bound to 'E' (mnemonics "External"). Also it can be
|
||||
used by clicking "Open" in the context menu; it "opens" the marked or
|
||||
clicked on files according to the OS conventions. For example, on
|
||||
systems supporting XDG, this runs 'xdg-open' on the files.
|
||||
|
||||
+++
|
||||
*** New variable 'dired-guess-shell-alist-optional'.
|
||||
It contains commands for external viewers and players for various media
|
||||
formats, moved to this list from 'dired-guess-shell-alist-default'.
|
||||
|
||||
---
|
||||
*** The default value of 'dired-omit-size-limit' was increased.
|
||||
After performance improvements to omitting in large directories, the new
|
||||
default value is 300k, up from 100k. This means 'dired-omit-mode' will
|
||||
|
|
|
|||
|
|
@ -21,22 +21,26 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. -->
|
|||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="512"
|
||||
android:viewportHeight="512">
|
||||
<path
|
||||
android:pathData="M-4.99,-5.79h521.12v526.76h-521.12z"
|
||||
android:strokeWidth="10.6667">
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path android:pathData="M0,0h108v108h-108z"
|
||||
android:strokeWidth="0"
|
||||
android:strokeColor="#00000000">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:startX="0"
|
||||
android:startY="0"
|
||||
android:endX="512"
|
||||
android:endY="512"
|
||||
<gradient android:startX="28.44"
|
||||
android:startY="22.95"
|
||||
android:endX="75.57"
|
||||
android:endY="86.47"
|
||||
android:type="linear">
|
||||
<item android:offset="0" android:color="#FF8381C5"/>
|
||||
<item android:offset="0.64" android:color="#FE806BBC"/>
|
||||
<item android:offset="0.64" android:color="#FE7E55B3"/>
|
||||
<item android:offset="1" android:color="#FDA52ECB"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:pathData="m0,0v108h108v-108zM54,21a33,33 0,0 1,33 33,33 33,0 0,1 -33,33 33,33 0,0 1,-33 -33,33 33,0 0,1 33,-33z"
|
||||
android:strokeWidth="0"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#ffffff"/>
|
||||
</vector>
|
||||
|
|
|
|||
|
|
@ -21,19 +21,13 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. -->
|
|||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="512"
|
||||
android:viewportHeight="512">
|
||||
<group android:scaleX="0.6"
|
||||
android:scaleY="0.6"
|
||||
android:translateX="102.4"
|
||||
android:translateY="102.4">
|
||||
<path
|
||||
android:pathData="m174.83,422.11c0,0 19.74,1.4 45.13,-0.84 10.28,-0.91 49.33,-4.74 78.52,-11.14 0,0 35.59,-7.62 54.63,-14.63 19.92,-7.34 30.76,-13.57 35.64,-22.4 -0.21,-1.81 1.5,-8.22 -7.68,-12.08 -23.49,-9.85 -50.73,-8.07 -104.63,-9.21 -59.78,-2.05 -79.66,-12.06 -90.26,-20.12 -10.16,-8.18 -5.05,-30.79 38.47,-50.71 21.92,-10.61 107.87,-30.19 107.87,-30.19 -28.95,-14.31 -82.92,-39.46 -94.01,-44.89 -9.73,-4.76 -25.3,-11.94 -28.68,-20.61 -3.83,-8.33 9.04,-15.51 16.22,-17.56 23.14,-6.68 55.82,-10.83 85.55,-11.29 14.95,-0.23 17.37,-1.2 17.37,-1.2 20.62,-3.42 34.2,-17.53 28.54,-39.88 -5.08,-22.81 -31.86,-36.21 -57.31,-31.57 -23.97,4.37 -81.74,21.15 -81.74,21.15 71.41,-0.62 83.36,0.57 88.7,8.04 3.15,4.41 -1.43,10.45 -20.48,13.56 -20.73,3.39 -63.83,7.46 -63.83,7.46 -41.34,2.46 -70.47,2.62 -79.2,21.11 -5.71,12.08 6.09,22.76 11.25,29.45 21.84,24.29 53.39,37.39 73.69,47.04 7.64,3.63 30.06,10.48 30.06,10.48 -65.88,-3.62 -113.4,16.61 -141.28,39.9 -31.53,29.16 -17.58,63.92 47.01,85.33 38.15,12.64 57.07,18.59 113.98,13.46 33.52,-1.81 38.8,-0.73 39.14,2.02 0.47,3.87 -37.23,13.49 -47.52,16.46 -26.19,7.55 -94.83,22.8 -95.17,22.88z"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path android:pathData="m44.28,77.94c0,0 2.74,0.2 6.25,-0.12 1.42,-0.13 6.84,-0.67 10.88,-1.57 0,0 4.93,-1.08 7.57,-2.07 2.76,-1.04 4.26,-1.92 4.94,-3.17 -0.03,-0.26 0.21,-1.16 -1.06,-1.71C69.6,67.91 65.83,68.17 58.36,68 50.07,67.71 47.32,66.3 45.85,65.16 44.44,64.01 45.15,60.81 51.18,57.99 54.22,56.5 66.13,53.73 66.13,53.73 62.12,51.71 54.64,48.15 53.1,47.39 51.75,46.71 49.6,45.7 49.13,44.47c-0.53,-1.18 1.25,-2.19 2.25,-2.48 3.21,-0.94 7.73,-1.53 11.86,-1.6 2.07,-0.03 2.41,-0.17 2.41,-0.17 2.86,-0.48 4.74,-2.48 3.96,-5.64 -0.7,-3.22 -4.42,-5.12 -7.94,-4.46 -3.32,0.62 -11.33,2.99 -11.33,2.99 9.89,-0.09 11.55,0.08 12.29,1.14 0.44,0.62 -0.2,1.48 -2.84,1.92 -2.87,0.48 -8.85,1.05 -8.85,1.05 -5.73,0.35 -9.76,0.37 -10.98,2.98 -0.79,1.71 0.84,3.22 1.56,4.16 3.03,3.43 7.4,5.28 10.21,6.65 1.06,0.51 4.17,1.48 4.17,1.48 -9.13,-0.51 -15.71,2.35 -19.58,5.64 -4.37,4.12 -2.44,9.03 6.51,12.06 5.29,1.79 7.91,2.63 15.79,1.9 4.64,-0.26 5.38,-0.1 5.42,0.29 0.07,0.55 -5.16,1.91 -6.59,2.33 -3.63,1.07 -13.14,3.22 -13.19,3.23z"
|
||||
android:strokeLineJoin="miter"
|
||||
android:strokeWidth="0"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#a0000000"
|
||||
android:strokeColor="#00000000"
|
||||
android:fillType="evenOdd"
|
||||
android:strokeLineCap="butt"/>
|
||||
</group>
|
||||
</vector>
|
||||
|
|
|
|||
|
|
@ -1395,6 +1395,10 @@ main (int argc, char **argv)
|
|||
the additional call here is harmless.) */
|
||||
cache_system_info ();
|
||||
#ifdef WINDOWSNT
|
||||
/* This must be called to initialize w32_unicode_filenames and
|
||||
is_windows_9x prior to w32_init_current_directory. */
|
||||
globals_of_w32 ();
|
||||
|
||||
/* On Windows 9X, we have to load UNICOWS.DLL as early as possible,
|
||||
to have non-stub implementations of APIs we need to convert file
|
||||
names between UTF-8 and the system's ANSI codepage. */
|
||||
|
|
@ -1506,11 +1510,10 @@ main (int argc, char **argv)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
emacs_wd = emacs_get_current_dir_name ();
|
||||
#ifdef WINDOWSNT
|
||||
initial_wd = emacs_wd;
|
||||
#endif
|
||||
#endif /* WINDOWSNT */
|
||||
#ifdef HAVE_PDUMPER
|
||||
if (dumped_with_pdumper_p ())
|
||||
pdumper_record_wd (emacs_wd);
|
||||
|
|
@ -2165,7 +2168,6 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
|
|||
init_atimer ();
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
globals_of_w32 ();
|
||||
#ifdef HAVE_W32NOTIFY
|
||||
globals_of_w32notify ();
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -10624,6 +10624,7 @@ maybe_load_unicows_dll (void)
|
|||
pWideCharToMultiByte = (WideCharToMultiByte_Proc)
|
||||
get_proc_addr (ret, "WideCharToMultiByte");
|
||||
multiByteToWideCharFlags = MB_ERR_INVALID_CHARS;
|
||||
load_unicows_dll_for_w32fns (ret);
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
|
|
@ -10658,6 +10659,7 @@ maybe_load_unicows_dll (void)
|
|||
multiByteToWideCharFlags = 0;
|
||||
else
|
||||
multiByteToWideCharFlags = MB_ERR_INVALID_CHARS;
|
||||
load_unicows_dll_for_w32fns (NULL);
|
||||
return LoadLibrary ("Gdi32.dll");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,6 +170,7 @@ extern void release_listen_threads (void);
|
|||
extern void init_ntproc (int);
|
||||
extern void term_ntproc (int);
|
||||
extern HANDLE maybe_load_unicows_dll (void);
|
||||
extern void load_unicows_dll_for_w32fns (HMODULE);
|
||||
extern void globals_of_w32 (void);
|
||||
|
||||
extern void term_timers (void);
|
||||
|
|
|
|||
75
src/w32fns.c
75
src/w32fns.c
|
|
@ -2612,6 +2612,7 @@ my_post_msg (W32Msg * wmsg, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
}
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
|
||||
/* The Windows keyboard hook callback. */
|
||||
static LRESULT CALLBACK
|
||||
funhook (int code, WPARAM w, LPARAM l)
|
||||
|
|
@ -2688,8 +2689,8 @@ funhook (int code, WPARAM w, LPARAM l)
|
|||
can prevent this by setting the
|
||||
w32-pass-[lr]window-to-system variable to
|
||||
NIL. */
|
||||
if ((hs->vkCode == VK_LWIN && !NILP (Vw32_pass_lwindow_to_system)) ||
|
||||
(hs->vkCode == VK_RWIN && !NILP (Vw32_pass_rwindow_to_system)))
|
||||
if ((hs->vkCode == VK_LWIN && !NILP (Vw32_pass_lwindow_to_system))
|
||||
|| (hs->vkCode == VK_RWIN && !NILP (Vw32_pass_rwindow_to_system)))
|
||||
{
|
||||
/* Not prevented - Simulate the keypress to the system. */
|
||||
memset (inputs, 0, sizeof (inputs));
|
||||
|
|
@ -2704,7 +2705,6 @@ funhook (int code, WPARAM w, LPARAM l)
|
|||
inputs[1].ki.dwFlags
|
||||
= KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP;
|
||||
inputs[1].ki.time = 0;
|
||||
SendInput (2, inputs, sizeof (INPUT));
|
||||
}
|
||||
else if (focus != NULL)
|
||||
{
|
||||
|
|
@ -6150,6 +6150,7 @@ DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
|
|||
if (harfbuzz_available)
|
||||
register_font_driver (&harfbuzz_font_driver, f);
|
||||
#endif
|
||||
if (uniscribe_available)
|
||||
register_font_driver (&uniscribe_font_driver, f);
|
||||
register_font_driver (&w32font_driver, f);
|
||||
|
||||
|
|
@ -7227,6 +7228,7 @@ w32_create_tip_frame (struct w32_display_info *dpyinfo, Lisp_Object parms)
|
|||
if (harfbuzz_available)
|
||||
register_font_driver (&harfbuzz_font_driver, f);
|
||||
#endif
|
||||
if (uniscribe_available)
|
||||
register_font_driver (&uniscribe_font_driver, f);
|
||||
register_font_driver (&w32font_driver, f);
|
||||
|
||||
|
|
@ -8265,6 +8267,8 @@ DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 5, 0,
|
|||
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
static int (WINAPI *pfnSHFileOperationW) (LPSHFILEOPSTRUCTW);
|
||||
|
||||
/* Moving files to the system recycle bin.
|
||||
Used by `move-file-to-trash' instead of the default moving to ~/.Trash */
|
||||
DEFUN ("system-move-file-to-trash", Fsystem_move_file_to_trash,
|
||||
|
|
@ -8276,6 +8280,9 @@ DEFUN ("system-move-file-to-trash", Fsystem_move_file_to_trash,
|
|||
Lisp_Object encoded_file;
|
||||
Lisp_Object operation;
|
||||
|
||||
/* Required on Windows 9X. */
|
||||
maybe_load_unicows_dll ();
|
||||
|
||||
operation = Qdelete_file;
|
||||
if (!NILP (Ffile_directory_p (filename))
|
||||
&& NILP (Ffile_symlink_p (filename)))
|
||||
|
|
@ -8324,7 +8331,10 @@ DEFUN ("system-move-file-to-trash", Fsystem_move_file_to_trash,
|
|||
| FOF_NOERRORUI | FOF_NO_CONNECTED_ELEMENTS;
|
||||
file_op_w.fAnyOperationsAborted = FALSE;
|
||||
|
||||
result = SHFileOperationW (&file_op_w);
|
||||
/* This is stated to exist on all versions of Windows NT Emacs
|
||||
supports. */
|
||||
eassert (pfnSHFileOperationW);
|
||||
result = (*pfnSHFileOperationW) (&file_op_w);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -8389,6 +8399,10 @@ If optional parameter FRAME is not specified, use selected frame. */)
|
|||
return Qnil;
|
||||
}
|
||||
|
||||
#ifndef CYGWIN
|
||||
static BOOL (WINAPI *pfnShellExecuteExW) (LPSHELLEXECUTEINFOW);
|
||||
#endif /* !CYGWIN */
|
||||
|
||||
DEFUN ("w32-shell-execute", Fw32_shell_execute, Sw32_shell_execute, 2, 4, 0,
|
||||
doc: /* Get Windows to perform OPERATION on DOCUMENT.
|
||||
This is a wrapper around the ShellExecute system function, which
|
||||
|
|
@ -8539,6 +8553,9 @@ a ShowWindow flag:
|
|||
const int file_url_len = sizeof (file_url_str) - 1;
|
||||
int doclen;
|
||||
|
||||
/* Required on Windows 9X. */
|
||||
maybe_load_unicows_dll ();
|
||||
|
||||
if (strncmp (SSDATA (document), file_url_str, file_url_len) == 0)
|
||||
{
|
||||
/* Passing "file:///" URLs to ShellExecute causes shlwapi.dll to
|
||||
|
|
@ -8598,7 +8615,7 @@ a ShowWindow flag:
|
|||
doc_w = xmalloc (doclen * sizeof (wchar_t));
|
||||
pMultiByteToWideChar (CP_UTF8, multiByteToWideCharFlags,
|
||||
SSDATA (document), -1, doc_w, doclen);
|
||||
if (use_unicode)
|
||||
if (use_unicode && pfnShellExecuteExW)
|
||||
{
|
||||
wchar_t current_dir_w[MAX_PATH];
|
||||
SHELLEXECUTEINFOW shexinfo_w;
|
||||
|
|
@ -8650,7 +8667,7 @@ a ShowWindow flag:
|
|||
shexinfo_w.lpDirectory = current_dir_w;
|
||||
shexinfo_w.nShow =
|
||||
(FIXNUMP (show_flag) ? XFIXNUM (show_flag) : SW_SHOWDEFAULT);
|
||||
success = ShellExecuteExW (&shexinfo_w);
|
||||
success = (*pfnShellExecuteExW) (&shexinfo_w);
|
||||
xfree (doc_w);
|
||||
}
|
||||
else
|
||||
|
|
@ -9121,6 +9138,7 @@ and width values are in pixels.
|
|||
menu_bar.cbSize = sizeof (menu_bar);
|
||||
menu_bar.rcBar.right = menu_bar.rcBar.left = 0;
|
||||
menu_bar.rcBar.top = menu_bar.rcBar.bottom = 0;
|
||||
|
||||
GetMenuBarInfo (FRAME_W32_WINDOW (f), 0xFFFFFFFD, 0, &menu_bar);
|
||||
single_menu_bar_height = GetSystemMetrics (SM_CYMENU);
|
||||
wrapped_menu_bar_height = GetSystemMetrics (SM_CYMENUSIZE);
|
||||
|
|
@ -10007,6 +10025,8 @@ Internal use only. */)
|
|||
|
||||
#if defined WINDOWSNT && !defined HAVE_DBUS
|
||||
|
||||
static BOOL (WINAPI *pfnShell_NotifyIconW) (DWORD, PNOTIFYICONDATAW);
|
||||
|
||||
/***********************************************************************
|
||||
Tray notifications
|
||||
***********************************************************************/
|
||||
|
|
@ -10273,7 +10293,7 @@ add_tray_notification (struct frame *f, const char *icon, const char *tip,
|
|||
}
|
||||
}
|
||||
|
||||
if (!Shell_NotifyIconW (NIM_ADD, (PNOTIFYICONDATAW)&nidw))
|
||||
if (!(*pfnShell_NotifyIconW) (NIM_ADD, (PNOTIFYICONDATAW)&nidw))
|
||||
{
|
||||
/* GetLastError returns meaningless results when
|
||||
Shell_NotifyIcon fails. */
|
||||
|
|
@ -10305,7 +10325,7 @@ delete_tray_notification (struct frame *f, int id)
|
|||
nidw.hWnd = FRAME_W32_WINDOW (f);
|
||||
nidw.uID = id;
|
||||
|
||||
if (!Shell_NotifyIconW (NIM_DELETE, (PNOTIFYICONDATAW)&nidw))
|
||||
if (!(*pfnShell_NotifyIconW) (NIM_DELETE, (PNOTIFYICONDATAW)&nidw))
|
||||
{
|
||||
/* GetLastError returns meaningless results when
|
||||
Shell_NotifyIcon fails. */
|
||||
|
|
@ -10372,8 +10392,8 @@ The following parameters are supported:
|
|||
characters long, and will be truncated if it's longer.
|
||||
|
||||
Note that versions of Windows before W2K support only `:icon' and `:tip'.
|
||||
You can pass the other parameters, but they will be ignored on those
|
||||
old systems.
|
||||
You can pass the other parameters, but they will be ignored on
|
||||
those old systems.
|
||||
|
||||
There can be at most one active notification at any given time. An
|
||||
active notification must be removed by calling `w32-notification-close'
|
||||
|
|
@ -10389,7 +10409,10 @@ usage: (w32-notification-notify &rest PARAMS) */)
|
|||
enum NI_Severity severity;
|
||||
unsigned timeout = 0;
|
||||
|
||||
if (nargs == 0)
|
||||
/* Required on Windows 9X. */
|
||||
maybe_load_unicows_dll ();
|
||||
|
||||
if (nargs == 0 || !pfnShell_NotifyIconW)
|
||||
return Qnil;
|
||||
|
||||
arg_plist = Flist (nargs, args);
|
||||
|
|
@ -10448,7 +10471,7 @@ DEFUN ("w32-notification-close",
|
|||
{
|
||||
struct frame *f = SELECTED_FRAME ();
|
||||
|
||||
if (FIXNUMP (id))
|
||||
if (FIXNUMP (id) && !pfnShell_NotifyIconW)
|
||||
delete_tray_notification (f, XFIXNUM (id));
|
||||
|
||||
return Qnil;
|
||||
|
|
@ -11499,7 +11522,7 @@ globals_of_w32fns (void)
|
|||
get_proc_addr (wtsapi32_lib, "WTSRegisterSessionNotification");
|
||||
WTSUnRegisterSessionNotification_fn = (WTSUnRegisterSessionNotification_Proc)
|
||||
get_proc_addr (wtsapi32_lib, "WTSUnRegisterSessionNotification");
|
||||
#endif
|
||||
#endif /* WINDOWSNT */
|
||||
|
||||
/* Support OS dark mode on Windows 10 version 1809 and higher.
|
||||
See `w32_applytheme' which uses appropriate APIs per version of Windows.
|
||||
|
|
@ -11580,6 +11603,32 @@ Changing the value takes effect only for frames created after the change. */);
|
|||
syms_of_w32uniscribe ();
|
||||
}
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
|
||||
/* Initialize pointers to functions whose real implementations exist in
|
||||
UNICOWS.DLL on Windows 9X. UNICOWS should be a pointer to a loaded
|
||||
handle referencing UNICOWS.DLL, or NULL on Windows NT systems. */
|
||||
|
||||
void
|
||||
load_unicows_dll_for_w32fns (HMODULE unicows)
|
||||
{
|
||||
if (!unicows)
|
||||
/* The functions following are defined by SHELL32.DLL onw Windows
|
||||
NT. */
|
||||
unicows = GetModuleHandle ("shell32");
|
||||
|
||||
pfnSHFileOperationW
|
||||
= (void *) get_proc_addr (unicows, "SHFileOperationW");
|
||||
pfnShellExecuteExW
|
||||
= (void *) get_proc_addr (unicows, "ShellExecuteExW");
|
||||
#ifndef HAVE_DBUS
|
||||
pfnShell_NotifyIconW
|
||||
= (void *) get_proc_addr (unicows, "Shell_NotifyIconW");
|
||||
#endif /* !HAVE_DBUS */
|
||||
}
|
||||
|
||||
#endif /* WINDOWSNT */
|
||||
|
||||
#ifdef NTGUI_UNICODE
|
||||
|
||||
Lisp_Object
|
||||
|
|
|
|||
|
|
@ -120,6 +120,10 @@ struct notification {
|
|||
/* Used for communicating notifications to the main thread. */
|
||||
struct notifications_set *notifications_set_head;
|
||||
|
||||
/* Function pointers. */
|
||||
static BOOL (WINAPI *pfnReadDirectoryChangesW) (HANDLE, PVOID, DWORD, BOOL,
|
||||
DWORD, PDWORD, LPOVERLAPPED,
|
||||
LPOVERLAPPED_COMPLETION_ROUTINE);
|
||||
static Lisp_Object watch_list;
|
||||
|
||||
/* Signal to the main thread that we have file notifications for it to
|
||||
|
|
@ -252,10 +256,10 @@ watch_completion (DWORD status, DWORD bytes_ret, OVERLAPPED *io_info)
|
|||
|
||||
/* Calling ReadDirectoryChangesW quickly to watch again for new
|
||||
notifications. */
|
||||
if (!ReadDirectoryChangesW (dirwatch->dir, dirwatch->buf,
|
||||
if (!(*pfnReadDirectoryChangesW) (dirwatch->dir, dirwatch->buf,
|
||||
DIRWATCH_BUFFER_SIZE, dirwatch->subtree,
|
||||
dirwatch->filter, &_bytes, dirwatch->io_info,
|
||||
watch_completion))
|
||||
dirwatch->filter, &_bytes,
|
||||
dirwatch->io_info, watch_completion))
|
||||
{
|
||||
DebPrint (("ReadDirectoryChangesW error: %lu\n", GetLastError ()));
|
||||
/* If this call fails, it means that the directory is not
|
||||
|
|
@ -270,7 +274,7 @@ watch_completion (DWORD status, DWORD bytes_ret, OVERLAPPED *io_info)
|
|||
|
||||
/* If we were asked to terminate the thread, then fire the event. */
|
||||
if (terminate)
|
||||
SetEvent(dirwatch->terminate);
|
||||
SetEvent (dirwatch->terminate);
|
||||
}
|
||||
|
||||
/* Worker routine for the watch thread. */
|
||||
|
|
@ -284,7 +288,7 @@ watch_worker (LPVOID arg)
|
|||
|
||||
if (dirwatch->dir)
|
||||
{
|
||||
bErr = ReadDirectoryChangesW (dirwatch->dir, dirwatch->buf,
|
||||
bErr = (*pfnReadDirectoryChangesW) (dirwatch->dir, dirwatch->buf,
|
||||
DIRWATCH_BUFFER_SIZE, dirwatch->subtree,
|
||||
dirwatch->filter, &_bytes,
|
||||
dirwatch->io_info, watch_completion);
|
||||
|
|
@ -436,7 +440,7 @@ remove_watch (struct notification *dirwatch)
|
|||
DebPrint (("QueueUserAPC failed (%lu)!\n", GetLastError ()));
|
||||
|
||||
/* We also signal the thread that it can terminate. */
|
||||
SetEvent(dirwatch->terminate);
|
||||
SetEvent (dirwatch->terminate);
|
||||
|
||||
/* Wait for the thread to exit. FIXME: is there a better method
|
||||
that is not overly complex? */
|
||||
|
|
@ -466,7 +470,7 @@ remove_watch (struct notification *dirwatch)
|
|||
CloseHandle (dirwatch->thr);
|
||||
dirwatch->thr = NULL;
|
||||
}
|
||||
CloseHandle(dirwatch->terminate);
|
||||
CloseHandle (dirwatch->terminate);
|
||||
xfree (dirwatch->buf);
|
||||
xfree (dirwatch->io_info);
|
||||
xfree (dirwatch->watchee);
|
||||
|
|
@ -575,6 +579,8 @@ generate notifications correctly, though. */)
|
|||
report_file_notify_error ("Watching filesystem events is not supported",
|
||||
Qnil);
|
||||
}
|
||||
else
|
||||
eassert (pfnReadDirectoryChangesW);
|
||||
|
||||
/* filenotify.el always passes us a directory, either the parent
|
||||
directory of a file to be watched, or the directory to be
|
||||
|
|
@ -649,7 +655,7 @@ WATCH-DESCRIPTOR should be an object returned by `w32notify-add-watch'. */)
|
|||
if (!NILP (watch_object))
|
||||
{
|
||||
watch_list = Fdelete (watch_object, watch_list);
|
||||
dirwatch = (struct notification *)xmint_pointer (watch_descriptor);
|
||||
dirwatch = (struct notification *) xmint_pointer (watch_descriptor);
|
||||
if (w32_valid_pointer_p (dirwatch, sizeof(struct notification)))
|
||||
status = remove_watch (dirwatch);
|
||||
}
|
||||
|
|
@ -687,7 +693,7 @@ watch by calling `w32notify-rm-watch' also makes it invalid. */)
|
|||
if (!NILP (watch_object))
|
||||
{
|
||||
struct notification *dirwatch =
|
||||
(struct notification *)xmint_pointer (watch_descriptor);
|
||||
(struct notification *) xmint_pointer (watch_descriptor);
|
||||
if (w32_valid_pointer_p (dirwatch, sizeof(struct notification))
|
||||
&& dirwatch->dir != NULL)
|
||||
return Qt;
|
||||
|
|
@ -699,6 +705,16 @@ watch by calling `w32notify-rm-watch' also makes it invalid. */)
|
|||
void
|
||||
globals_of_w32notify (void)
|
||||
{
|
||||
HANDLE kernel32 = GetModuleHandle ("kernel32");
|
||||
|
||||
/* Initialize pointers to IO functions that provide file
|
||||
notifications. In the event that these are absent, no harm will be
|
||||
done, since their absence indicates that Emacs is running on
|
||||
Windows 9X, where file notifications are unavailable at the
|
||||
outset. */
|
||||
pfnReadDirectoryChangesW
|
||||
= (void *) get_proc_addr (kernel32, "ReadDirectoryChangesW");
|
||||
|
||||
watch_list = Qnil;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -108,6 +108,31 @@ memq_no_quit (Lisp_Object elt, Lisp_Object list)
|
|||
return (CONSP (list));
|
||||
}
|
||||
|
||||
|
||||
/* Uniscribe function pointers. */
|
||||
static HRESULT (WINAPI * pfnScriptItemize) (const WCHAR *,
|
||||
int,
|
||||
int,
|
||||
const SCRIPT_CONTROL *,
|
||||
const SCRIPT_STATE *,
|
||||
SCRIPT_ITEM *, int *);
|
||||
static HRESULT (WINAPI * pfnScriptShape) (HDC, SCRIPT_CACHE *,
|
||||
const WCHAR *,
|
||||
int, int, SCRIPT_ANALYSIS *,
|
||||
WORD *, WORD *, SCRIPT_VISATTR *,
|
||||
int *);
|
||||
static HRESULT (WINAPI * pfnScriptPlace) (HDC, SCRIPT_CACHE *,
|
||||
const WORD *, int,
|
||||
const SCRIPT_VISATTR *,
|
||||
SCRIPT_ANALYSIS *,
|
||||
int *, GOFFSET *, ABC *);
|
||||
static HRESULT (WINAPI * pfnScriptGetGlyphABCWidth) (HDC, SCRIPT_CACHE *,
|
||||
WORD, ABC *);
|
||||
static HRESULT (WINAPI * pfnScriptFreeCache) (SCRIPT_CACHE *);
|
||||
static HRESULT (WINAPI * pfnScriptGetCMap) (HDC, SCRIPT_CACHE *,
|
||||
const WCHAR *,
|
||||
int, DWORD, WORD *);
|
||||
|
||||
|
||||
/* Font backend interface implementation. */
|
||||
static Lisp_Object
|
||||
|
|
@ -202,7 +227,7 @@ uniscribe_close (struct font *font)
|
|||
else
|
||||
#endif
|
||||
if (uniscribe_font->cache)
|
||||
ScriptFreeCache ((SCRIPT_CACHE) &(uniscribe_font->cache));
|
||||
(*pfnScriptFreeCache) ((SCRIPT_CACHE) &(uniscribe_font->cache));
|
||||
|
||||
uniscribe_font->cache = NULL;
|
||||
|
||||
|
|
@ -320,7 +345,7 @@ uniscribe_shape (Lisp_Object lgstring, Lisp_Object direction)
|
|||
max_items = 2;
|
||||
items = xmalloc (sizeof (SCRIPT_ITEM) * max_items + 1);
|
||||
|
||||
while ((result = ScriptItemize (chars, nchars, max_items, NULL, NULL,
|
||||
while ((result = (*pfnScriptItemize) (chars, nchars, max_items, NULL, NULL,
|
||||
items, &nitems)) == E_OUTOFMEMORY)
|
||||
{
|
||||
/* If that wasn't enough, keep trying with one more run. */
|
||||
|
|
@ -344,14 +369,15 @@ uniscribe_shape (Lisp_Object lgstring, Lisp_Object direction)
|
|||
{
|
||||
int nglyphs, nchars_in_run;
|
||||
nchars_in_run = items[i+1].iCharPos - items[i].iCharPos;
|
||||
/* Force ScriptShape to generate glyphs in the same order as
|
||||
/* Force (*pfnScriptShape) to generate glyphs in the same order as
|
||||
they are in the input LGSTRING, which is in the logical
|
||||
order. */
|
||||
items[i].a.fLogicalOrder = 1;
|
||||
|
||||
/* Context may be NULL here, in which case the cache should be
|
||||
used without needing to select the font. */
|
||||
result = ScriptShape (context, (SCRIPT_CACHE) &(uniscribe_font->cache),
|
||||
result
|
||||
= (*pfnScriptShape) (context, (SCRIPT_CACHE) &(uniscribe_font->cache),
|
||||
chars + items[i].iCharPos, nchars_in_run,
|
||||
max_glyphs - done_glyphs, &(items[i].a),
|
||||
glyphs, clusters, attributes, &nglyphs);
|
||||
|
|
@ -365,7 +391,9 @@ uniscribe_shape (Lisp_Object lgstring, Lisp_Object direction)
|
|||
context = get_frame_dc (f);
|
||||
old_font = SelectObject (context, FONT_HANDLE (font));
|
||||
|
||||
result = ScriptShape (context, (SCRIPT_CACHE) &(uniscribe_font->cache),
|
||||
result
|
||||
= (*pfnScriptShape) (context,
|
||||
(SCRIPT_CACHE) &(uniscribe_font->cache),
|
||||
chars + items[i].iCharPos, nchars_in_run,
|
||||
max_glyphs - done_glyphs, &(items[i].a),
|
||||
glyphs, clusters, attributes, &nglyphs);
|
||||
|
|
@ -390,7 +418,9 @@ uniscribe_shape (Lisp_Object lgstring, Lisp_Object direction)
|
|||
}
|
||||
else
|
||||
{
|
||||
result = ScriptPlace (context, (SCRIPT_CACHE) &(uniscribe_font->cache),
|
||||
result
|
||||
= (*pfnScriptPlace) (context,
|
||||
(SCRIPT_CACHE) &(uniscribe_font->cache),
|
||||
glyphs, nglyphs, attributes, &(items[i].a),
|
||||
advances, offsets, &overall_metrics);
|
||||
if (result == E_PENDING && !context)
|
||||
|
|
@ -400,7 +430,8 @@ uniscribe_shape (Lisp_Object lgstring, Lisp_Object direction)
|
|||
context = get_frame_dc (f);
|
||||
old_font = SelectObject (context, FONT_HANDLE (font));
|
||||
|
||||
result = ScriptPlace (context,
|
||||
result
|
||||
= (*pfnScriptPlace) (context,
|
||||
(SCRIPT_CACHE) &(uniscribe_font->cache),
|
||||
glyphs, nglyphs, attributes, &(items[i].a),
|
||||
advances, offsets, &overall_metrics);
|
||||
|
|
@ -469,7 +500,7 @@ uniscribe_shape (Lisp_Object lgstring, Lisp_Object direction)
|
|||
then updated for each successive glyph in the
|
||||
grapheme cluster. */
|
||||
/* FIXME: Should we use DIRECTION here instead
|
||||
of what ScriptItemize guessed? */
|
||||
of what (*pfnScriptItemize) guessed? */
|
||||
if (items[i].a.fRTL)
|
||||
{
|
||||
int j1 = j;
|
||||
|
|
@ -496,7 +527,7 @@ uniscribe_shape (Lisp_Object lgstring, Lisp_Object direction)
|
|||
LGLYPH_SET_ASCENT (lglyph, font->ascent);
|
||||
LGLYPH_SET_DESCENT (lglyph, font->descent);
|
||||
|
||||
result = ScriptGetGlyphABCWidth
|
||||
result = (*pfnScriptGetGlyphABCWidth)
|
||||
(context, (SCRIPT_CACHE) &(uniscribe_font->cache),
|
||||
glyphs[j], &char_metric);
|
||||
if (result == E_PENDING && !context)
|
||||
|
|
@ -505,7 +536,7 @@ uniscribe_shape (Lisp_Object lgstring, Lisp_Object direction)
|
|||
f = XFRAME (selected_frame);
|
||||
context = get_frame_dc (f);
|
||||
old_font = SelectObject (context, FONT_HANDLE (font));
|
||||
result = ScriptGetGlyphABCWidth
|
||||
result = (*pfnScriptGetGlyphABCWidth)
|
||||
(context, (SCRIPT_CACHE) &(uniscribe_font->cache),
|
||||
glyphs[j], &char_metric);
|
||||
}
|
||||
|
|
@ -624,7 +655,8 @@ uniscribe_encode_char (struct font *font, int c)
|
|||
convert surrogate pairs to glyph indexes correctly. */
|
||||
{
|
||||
items = (SCRIPT_ITEM *) alloca (sizeof (SCRIPT_ITEM) * 2 + 1);
|
||||
if (SUCCEEDED (ScriptItemize (ch, len, 2, NULL, NULL, items, &nitems)))
|
||||
if (SUCCEEDED ((*pfnScriptItemize) (ch, len, 2, NULL, NULL, items,
|
||||
&nitems)))
|
||||
{
|
||||
HRESULT result;
|
||||
/* Surrogates seem to need 2 here, even though only one glyph is
|
||||
|
|
@ -635,11 +667,11 @@ uniscribe_encode_char (struct font *font, int c)
|
|||
SCRIPT_VISATTR attrs[2];
|
||||
int nglyphs;
|
||||
|
||||
/* Force ScriptShape to generate glyphs in the logical
|
||||
/* Force (*pfnScriptShape) to generate glyphs in the logical
|
||||
order. */
|
||||
items[0].a.fLogicalOrder = 1;
|
||||
|
||||
result = ScriptShape (context,
|
||||
result = (*pfnScriptShape) (context,
|
||||
(SCRIPT_CACHE) &(uniscribe_font->cache),
|
||||
ch, len, 2, &(items[0].a),
|
||||
glyphs, clusters, attrs, &nglyphs);
|
||||
|
|
@ -651,7 +683,8 @@ uniscribe_encode_char (struct font *font, int c)
|
|||
f = XFRAME (selected_frame);
|
||||
context = get_frame_dc (f);
|
||||
old_font = SelectObject (context, FONT_HANDLE (font));
|
||||
result = ScriptShape (context,
|
||||
result
|
||||
= (*pfnScriptShape) (context,
|
||||
(SCRIPT_CACHE) &(uniscribe_font->cache),
|
||||
ch, len, 2, &(items[0].a),
|
||||
glyphs, clusters, attrs, &nglyphs);
|
||||
|
|
@ -670,7 +703,8 @@ uniscribe_encode_char (struct font *font, int c)
|
|||
when shaped. But we still need the return from here
|
||||
to be valid for the shaping engine to be invoked
|
||||
later. */
|
||||
result = ScriptGetCMap (context,
|
||||
result
|
||||
= (*pfnScriptGetCMap) (context,
|
||||
(SCRIPT_CACHE) &(uniscribe_font->cache),
|
||||
ch, len, 0, glyphs);
|
||||
if (SUCCEEDED (result) && glyphs[0])
|
||||
|
|
@ -942,7 +976,7 @@ uniscribe_check_otf_1 (HDC context, Lisp_Object script, Lisp_Object lang,
|
|||
|
||||
no_support:
|
||||
if (cache)
|
||||
ScriptFreeCache (&cache);
|
||||
(*pfnScriptFreeCache) (&cache);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -1505,11 +1539,43 @@ syms_of_w32uniscribe_for_pdumper (void)
|
|||
return;
|
||||
|
||||
/* Don't register if Uniscribe is not available. */
|
||||
HMODULE uniscribe = GetModuleHandle ("usp10");
|
||||
HMODULE uniscribe;
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
uniscribe = LoadLibrary ("usp10.dll");
|
||||
if (!uniscribe)
|
||||
return;
|
||||
|
||||
pfnScriptItemize = (void *) get_proc_addr (uniscribe, "ScriptItemize");
|
||||
pfnScriptShape = (void *) get_proc_addr (uniscribe, "ScriptShape");
|
||||
pfnScriptPlace = (void *) get_proc_addr (uniscribe, "ScriptPlace");
|
||||
pfnScriptGetGlyphABCWidth
|
||||
= (void *) get_proc_addr (uniscribe, "ScriptGetGlyphABCWidth");
|
||||
pfnScriptFreeCache
|
||||
= (void *) get_proc_addr (uniscribe, "ScriptFreeCache");
|
||||
pfnScriptGetCMap
|
||||
= (void *) get_proc_addr (uniscribe, "ScriptGetCMap");
|
||||
if (!pfnScriptItemize || !pfnScriptShape || !pfnScriptPlace
|
||||
|| !pfnScriptGetGlyphABCWidth || !pfnScriptFreeCache
|
||||
|| !pfnScriptGetCMap)
|
||||
{
|
||||
FreeLibrary (uniscribe);
|
||||
return;
|
||||
}
|
||||
#else /* Cygwin */
|
||||
uniscribe = GetModuleHandle ("usp10.dll");
|
||||
if (!uniscribe)
|
||||
return;
|
||||
|
||||
pfnScriptItemize = &ScriptItemize;
|
||||
pfnScriptShape = &ScriptShape;
|
||||
pfnScriptPlace = &ScriptPlace;
|
||||
pfnScriptGetGlyphABCWidth = &ScriptGetGlyphABCWidth;
|
||||
pfnScriptFreeCache = &ScriptFreeCache;
|
||||
pfnScriptGetCMap = &ScriptGetCMap;
|
||||
|
||||
uniscribe_available = 1;
|
||||
#endif /* Cygwin */
|
||||
|
||||
register_font_driver (&uniscribe_font_driver, NULL);
|
||||
|
||||
|
|
|
|||
|
|
@ -792,6 +792,58 @@ is in progress."
|
|||
;; Cleanup.
|
||||
(dbus-unregister-service :session dbus--test-service)))
|
||||
|
||||
(ert-deftest dbus-test05-register-signal-with-nils ()
|
||||
"Check signal registration for an own service.
|
||||
SERVICE, PATH, INTERFACE and SIGNAL are ‘nil’. This is interpreted as a
|
||||
wildcard for the respective argument."
|
||||
(skip-unless dbus--test-enabled-session-bus)
|
||||
(dbus-ignore-errors (dbus-unregister-service :session dbus--test-service))
|
||||
|
||||
(unwind-protect
|
||||
(let ((member "Member")
|
||||
(handler #'dbus--test-signal-handler)
|
||||
registered)
|
||||
|
||||
;; Register signal handler.
|
||||
(should
|
||||
(equal
|
||||
(setq
|
||||
registered
|
||||
(dbus-register-signal
|
||||
:session nil nil nil nil handler))
|
||||
`((:signal :session nil nil)
|
||||
(nil nil ,handler))))
|
||||
|
||||
(dbus-register-signal
|
||||
:session nil dbus--test-path
|
||||
dbus--test-interface member handler)
|
||||
(dbus-register-signal
|
||||
:session dbus--test-service nil
|
||||
dbus--test-interface member handler)
|
||||
(dbus-register-signal
|
||||
:session dbus--test-service dbus--test-path
|
||||
nil member handler)
|
||||
(dbus-register-signal
|
||||
:session dbus--test-service dbus--test-path
|
||||
dbus--test-interface nil handler)
|
||||
|
||||
;; Send one argument, basic type.
|
||||
(setq dbus--test-signal-received nil)
|
||||
(dbus-send-signal
|
||||
:session dbus--test-service dbus--test-path
|
||||
dbus--test-interface member "foo")
|
||||
(with-timeout (1 (dbus--test-timeout-handler))
|
||||
(while (null dbus--test-signal-received)
|
||||
(read-event nil nil 0.1)))
|
||||
(should (equal dbus--test-signal-received '("foo")))
|
||||
|
||||
;; Unregister signal.
|
||||
(should (dbus-unregister-object registered))
|
||||
(should-not (dbus-unregister-object registered)))
|
||||
|
||||
;; Cleanup.
|
||||
(dbus-unregister-service :session dbus--test-service)))
|
||||
|
||||
(ert-deftest dbus-test06-register-property ()
|
||||
"Check property registration for an own service."
|
||||
(skip-unless dbus--test-enabled-session-bus)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue