mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-17 01:34:21 +00:00
Merge branch 'emacs-30' of git.sv.gnu.org:/srv/git/emacs into emacs-30
This commit is contained in:
commit
b120397868
48 changed files with 436 additions and 331 deletions
1
.mailmap
1
.mailmap
|
|
@ -26,6 +26,7 @@ Andrew G Cohen <cohen@andy.bu.edu>
|
|||
Andrew G Cohen <cohen@andy.bu.edu> <cohen@bu.edu>
|
||||
Arash Esbati <arash@gnu.org> <arash.esbati@gmail.com>
|
||||
Arash Esbati <arash@gnu.org> <esbati@gmx.de>
|
||||
Arni Magnusson <thisisarni@gmail.com> <arnima@hafro.is>
|
||||
Artur Malabarba <bruce.connor.am@gmail.com> <am12548@it055607.users.bris.ac.uk>
|
||||
Artur Malabarba <bruce.connor.am@gmail.com> Artur Malabarba <address@hidden>
|
||||
Basil L. Contovounesios <basil@contovou.net> <contovob@tcd.ie>
|
||||
|
|
|
|||
|
|
@ -11433,7 +11433,7 @@
|
|||
|
||||
* etc/NEWS: Update announcement.
|
||||
|
||||
2024-05-15 Sean Whitton <spwhitton@spwhitton.name>
|
||||
2024-05-15 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
(eglot--managed-mode): Avoid calling track-changes unregistered
|
||||
|
||||
|
|
|
|||
|
|
@ -233,9 +233,22 @@ Philip Kaludercic
|
|||
lisp/emacs-lisp/compat.el
|
||||
lisp/net/rcirc.el
|
||||
|
||||
Sean Whitton
|
||||
VC
|
||||
lisp/vc/*
|
||||
doc/emacs/files.texi (Diff Mode)
|
||||
doc/emacs/maintaining.texi (Version Control)
|
||||
doc/emacs/vc*-xtra.texi
|
||||
doc/emacs/emerge-xtra.texi
|
||||
doc/misc/ediff.texi
|
||||
test/lisp/vc/*
|
||||
|
||||
==============================================================================
|
||||
2. Areas that someone is willing to maintain, although he would not
|
||||
necessarily mind if someone else was the official maintainer.
|
||||
This list also includes people who are in the process of handing over
|
||||
maintainership to someone listed above, but who want to continue to be
|
||||
CC'd as though they were still the primary maintainer, in the meantime.
|
||||
==============================================================================
|
||||
|
||||
Kelvin White
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ files.")
|
|||
("Noorul Islam" "Noorul Islam K M")
|
||||
;;; ("Tetsurou Okazaki" "OKAZAKI Tetsurou") ; FIXME?
|
||||
(nil "odanoburu@")
|
||||
(nil "one\\.last\\.kiss@outlook\\.com")
|
||||
("Xie Qi" "one\\.last\\.kiss@outlook\\.com" "shynur")
|
||||
("Cao ZhenXiang" "mail@ookami\\.one")
|
||||
("Óscar Fuentes" "Oscar Fuentes")
|
||||
(nil "pillule")
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ commands for moving by characters and by lines. Just as @kbd{C-n}
|
|||
usually moves to the same column in the following line, in Calendar
|
||||
mode it is bound to @code{calendar-forward-week}, which moves to the
|
||||
same day in the following week. And @kbd{C-p}
|
||||
(@code{calendar-backward-week} moves to the same day in the previous
|
||||
(@code{calendar-backward-week}) moves to the same day in the previous
|
||||
week. @kbd{C-f} (@code{calendar-forward-day}) and @kbd{C-b}
|
||||
(@code{calendar-backward-day}) move forward and back by days.
|
||||
|
||||
|
|
|
|||
|
|
@ -2664,14 +2664,13 @@ loaded, this command can use it to generate completion candidates.
|
|||
@xref{Symbol Completion}.
|
||||
|
||||
@findex list-tags
|
||||
@kbd{M-x list-tags} reads the name of one of the files covered by
|
||||
the selected tags table, and displays a list of tags defined in that
|
||||
file. Do not include a directory as part of the file name unless the
|
||||
file name recorded in the tags table includes a directory. This
|
||||
command works only with the etags backend, and requires a tags table
|
||||
for the project to be available. @xref{Tags Tables}. If used
|
||||
interactively, the default tag is file name of the current buffer if
|
||||
used interactively.
|
||||
@kbd{M-x list-tags} reads the name of one of the files covered by the
|
||||
selected tags table, with completion, and displays the list of tags
|
||||
defined in that file; it offers the current buffer's file name as the
|
||||
default file whose tags to list. Do not include a directory as part of
|
||||
the file name unless the file name recorded in the tags table includes a
|
||||
directory. This command works only with the etags backend, and requires
|
||||
a tags table for the project to be available. @xref{Tags Tables}.
|
||||
|
||||
@findex tags-next-file
|
||||
@kbd{M-x tags-next-file} visits files covered by the selected tags table.
|
||||
|
|
|
|||
|
|
@ -792,6 +792,46 @@ search engine whose @acronym{URL} is specified by the variable
|
|||
Wowser Manual}). If the region is not active, or doesn't contain any
|
||||
words, this command prompts the user for a URL or keywords to search.
|
||||
|
||||
@findex dictionary-search
|
||||
@findex dictionary
|
||||
@findex dictionary-tooltip-mode
|
||||
@cindex dictionary server protocol (DICT)
|
||||
@cindex word definition search
|
||||
@vindex dictionary-server
|
||||
You can also search for definitions of a word by querying dictionary
|
||||
servers via the @sc{dict} protocol defined by @acronym{RFC} 2229. Emacs
|
||||
includes a client for this protocol. Type @w{@kbd{M-x dictionary-search
|
||||
@key{RET}}} to connect to a @sc{dict} server and ask it to provide the
|
||||
available definitions of a word. This command prompts for the word to
|
||||
look up, using the word at point as the default, then asks the @sc{dict}
|
||||
server to provide the definitions of that word in one or more
|
||||
dictionaries. By default, the command first tries to connect to the
|
||||
@sc{dict} server installed on the local host, and if that fails, it
|
||||
tries @file{dict.org} after your confirmation; customize the variable
|
||||
@code{dictionary-server} to specify, as a string, the URL of a single
|
||||
server to use (use @samp{localhost} if you want to query only the local
|
||||
server). Normally, @code{dictionary-search} tells the server to look up
|
||||
the word in all the dictionaries available to the server, but if you
|
||||
invoke the command with a prefix argument, it will prompt for a single
|
||||
dictionary to look. The list of dictionaries available to a server can
|
||||
be displayed by pressing the @samp{Select dictionary} button shown in
|
||||
the @file{*Dictionary*} buffer, described below.
|
||||
|
||||
First time you use @code{dictionary-search}, it creates a new
|
||||
@file{*Dictionary*} buffer and turns on a special mode in it. The
|
||||
buffer shows buttons for selecting a dictionary, searching a definition
|
||||
of another word, etc. Subsequent @code{dictionary-search} commands
|
||||
reuse this buffer. To create another such buffer (e.g., too look up
|
||||
other words, perhaps in another dictionary), type @w{@kbd{M-x dictionary
|
||||
@key{RET}}}.
|
||||
|
||||
If you turn on @code{dictionary-tooltip-mode} in a buffer, Emacs will
|
||||
look up the definitions of the word at mouse pointer and show those
|
||||
definitions in a tool tip. This is handy when you are reading text with
|
||||
many words about whose meaning you are unsure.
|
||||
|
||||
For other options of dictionary-search, see the @code{dictionary}
|
||||
customization group (@pxref{Specific Customization}).
|
||||
|
||||
@node Symbol Search
|
||||
@section Symbol Search
|
||||
|
|
|
|||
|
|
@ -5551,7 +5551,7 @@
|
|||
* loading.texi (Hooks for Loading): Document after-load-functions.
|
||||
Copyedits.
|
||||
|
||||
2010-03-24 Arni Magnusson <arnima@hafro.is> (tiny change)
|
||||
2010-03-24 Arni Magnusson <thisisarni@gmail.com> (tiny change)
|
||||
|
||||
* frames.texi (Cursor Parameters): Fix typo. (Bug#5760)
|
||||
|
||||
|
|
|
|||
|
|
@ -1299,7 +1299,8 @@ and modification.
|
|||
This function returns @code{t} if the file @var{filename1} is
|
||||
newer than file @var{filename2}. If @var{filename1} does not
|
||||
exist, it returns @code{nil}. If @var{filename1} does exist, but
|
||||
@var{filename2} does not, it returns @code{t}.
|
||||
@var{filename2} does not, it returns @code{t}. Otherwise, it compares
|
||||
the times of last modification of the files.
|
||||
|
||||
In the following example, assume that the file @file{aug-19} was written
|
||||
on the 19th, @file{aug-20} was written on the 20th, and the file
|
||||
|
|
|
|||
|
|
@ -1732,11 +1732,11 @@ buffer-local variables interactively.
|
|||
@defun kill-all-local-variables &optional kill-permanent
|
||||
This function eliminates all the buffer-local variable bindings of the
|
||||
current buffer. As a result, the buffer will see the default values
|
||||
of most variables. By default, for variables marked as permanent and
|
||||
of most variables. By default, variables marked as permanent and
|
||||
local hook functions that have a non-@code{nil}
|
||||
@code{permanent-local-hook} property (@pxref{Setting Hooks}) won't be
|
||||
killed, but if the optional @var{kill-permanent} argument is
|
||||
non-@code{nil}, even these variables will be killed.
|
||||
non-@code{nil}, even those variables will be killed.
|
||||
|
||||
This function also resets certain other information pertaining to the
|
||||
buffer: it sets the local keymap to @code{nil}, the syntax table to the
|
||||
|
|
|
|||
|
|
@ -6407,7 +6407,7 @@
|
|||
* epa.texi (Mail-mode integration): Mention the way to do
|
||||
"encrypt-to-self". (Bug#1807)
|
||||
|
||||
2009-02-05 Arni Magnusson <arnima@hafro.is> (tiny change)
|
||||
2009-02-05 Arni Magnusson <thisisarni@gmail.com> (tiny change)
|
||||
|
||||
* ada-mode.texi (No project files): Fix typo. (Bug#2214)
|
||||
|
||||
|
|
|
|||
|
|
@ -123,14 +123,16 @@ Here's how to start using Eglot with your programming project:
|
|||
@item
|
||||
Select and install a language server.
|
||||
|
||||
Eglot comes pre-configured with many popular language servers, see the
|
||||
value of @code{eglot-server-programs}. If the server(s) mentioned
|
||||
there satisfy your needs for the programming language(s) with which
|
||||
you want to use Eglot, you just need to make sure those servers are
|
||||
installed on your system. Alternatively, install one or more servers
|
||||
of your choice and add them to the value of
|
||||
Eglot comes pre-configured for many popular language servers, see the
|
||||
value of @code{eglot-server-programs}. If the server(s) mentioned there
|
||||
satisfy your needs for the programming language(s) with which you want
|
||||
to use Eglot, you just need to make sure those servers are installed on
|
||||
your system and Eglot can find them.
|
||||
|
||||
Alternatively, install one or more servers of your choice and tell Eglot
|
||||
where to find them. To do that, you may add to the value of
|
||||
@code{eglot-server-programs}, as described in @ref{Setting Up LSP
|
||||
Servers}.
|
||||
Servers} or have Eglot prompt you about it (@pxref{Eglot Commands}).
|
||||
|
||||
@item
|
||||
Turn on Eglot for your project.
|
||||
|
|
@ -197,7 +199,7 @@ particular server(s) you want to install.
|
|||
|
||||
To use a language server, Eglot must know how to start it and which
|
||||
programming languages each server supports. This information is
|
||||
provided by the variable @code{eglot-server-programs}.
|
||||
commonly provided by the variable @code{eglot-server-programs}.
|
||||
|
||||
@defvar eglot-server-programs
|
||||
This variable associates major modes with names and command-line
|
||||
|
|
@ -939,12 +941,16 @@ to @w{@code{(disallow-non-standard-keys enforce-required-keys)}}.
|
|||
|
||||
@vindex eglot-server-initialized-hook
|
||||
@item eglot-server-initialized-hook
|
||||
A hook run after the server object is successfully initialized.
|
||||
A hook run after the server object is successfully initialized (which
|
||||
includes launching the process) but before any LSP communication is
|
||||
attempted. Each function receives a @code{eglot-lsp-server} instance as
|
||||
argument.
|
||||
|
||||
@vindex eglot-connect-hook
|
||||
@item eglot-connect-hook
|
||||
A hook run after connection to the server is successfully
|
||||
established. @xref{Starting Eglot}.
|
||||
A hook run after the LSP connection to the server is successfully
|
||||
established. Each function receives a @code{eglot-lsp-server} instance
|
||||
as argument. @xref{Starting Eglot}.
|
||||
|
||||
@item eglot-managed-mode-hook
|
||||
A hook run after Eglot started or stopped managing a buffer.
|
||||
|
|
|
|||
|
|
@ -232,12 +232,6 @@ and you cannot define your own. The @code{:metaclass} tag in
|
|||
should return instances of the metaclass, behave differently in
|
||||
@eieio{} in that they return symbols or plain structures instead.
|
||||
|
||||
@item EQL specialization
|
||||
EIEIO does not support it.
|
||||
|
||||
@item @code{:around} method tag
|
||||
This CLOS method tag is non-functional.
|
||||
|
||||
@item :default-initargs in @code{defclass}
|
||||
Each slot can have an @code{:initform} tag, so this is not really necessary.
|
||||
|
||||
|
|
@ -381,7 +375,7 @@ name, then the superclass showing up in the list first defines the
|
|||
slot attributes.
|
||||
|
||||
Inheritance in @eieio{} is more than just combining different slots.
|
||||
It is also important in method invocation. @ref{Methods}.
|
||||
It is also important in method invocation. @ref{Writing Methods}.
|
||||
|
||||
If a method is called on an instance of @code{my-subclass}, and that
|
||||
method only has an implementation on @code{my-baseclass}, or perhaps
|
||||
|
|
@ -810,158 +804,19 @@ variable name of the same name as the slot.
|
|||
@node Writing Methods
|
||||
@chapter Writing Methods
|
||||
|
||||
Writing a method in @eieio{} is similar to writing a function. The
|
||||
differences are that there are some extra options and there can be
|
||||
Writing a method in @eieio{} is similar to writing a function.
|
||||
The differences are that there are some extra options and there can be
|
||||
multiple definitions under the same function symbol.
|
||||
|
||||
Where a method defines an implementation for a particular data type, a
|
||||
@dfn{generic method} accepts any argument, but contains no code. It
|
||||
is used to provide the dispatching to the defined methods. A generic
|
||||
method has no body, and is merely a symbol upon which methods are
|
||||
attached. It also provides the base documentation for what methods
|
||||
with that name do.
|
||||
You do it using Emacs Lisp's built-in support for CLOS-style generic
|
||||
functions via the @code{cl-defgeneric} and @code{cl-defmethod} macros
|
||||
(@pxref{Generic Functions,,,elisp,GNU Emacs Lisp Reference Manual}).
|
||||
|
||||
@menu
|
||||
* Generics::
|
||||
* Methods::
|
||||
* Static Methods::
|
||||
@end menu
|
||||
|
||||
@node Generics
|
||||
@section Generics
|
||||
|
||||
Each @eieio{} method has one corresponding generic. This generic
|
||||
provides a function binding and the base documentation for the method
|
||||
symbol (@pxref{Symbol Components,,,elisp,GNU Emacs Lisp Reference
|
||||
Manual}).
|
||||
|
||||
@defmac cl-defgeneric method arglist [doc-string]
|
||||
This macro turns the (unquoted) symbol @var{method} into a function.
|
||||
@var{arglist} is the default list of arguments to use (not implemented
|
||||
yet). @var{doc-string} is the documentation used for this symbol.
|
||||
|
||||
A generic function acts as a placeholder for methods. There is no
|
||||
need to call @code{cl-defgeneric} yourself, as @code{cl-defmethod} will call
|
||||
it if necessary. Currently the argument list is unused.
|
||||
|
||||
@code{cl-defgeneric} signals an error if you attempt to turn an existing
|
||||
Emacs Lisp function into a generic function.
|
||||
|
||||
You can also create a generic method with @code{cl-defmethod}
|
||||
(@pxref{Methods}). When a method is created and there is no generic
|
||||
method in place with that name, then a new generic will be created,
|
||||
and the new method will use it.
|
||||
@end defmac
|
||||
|
||||
@node Methods
|
||||
@section Methods
|
||||
|
||||
A method is a function that is executed if the arguments passed
|
||||
to it matches the method's specializers. Different @eieio{} classes may
|
||||
share the same method names.
|
||||
|
||||
Methods are created with the @code{cl-defmethod} macro, which is similar
|
||||
to @code{defun}.
|
||||
|
||||
@defmac cl-defmethod method [:before | :around | :after ] arglist [doc-string] forms
|
||||
|
||||
@var{method} is the name of the function to create.
|
||||
|
||||
@code{:before}, @code{:around}, and @code{:after} specify execution order
|
||||
(i.e., when this form is called). If none of these symbols are present, the
|
||||
method is said to be a @emph{primary}.
|
||||
|
||||
@var{arglist} is the list of arguments to this method. The mandatory arguments
|
||||
in this list may have a type specializer (see the example below) which means
|
||||
that the method will only apply when those arguments match the given type
|
||||
specializer. An argument with no type specializer means that the method
|
||||
applies regardless of its value.
|
||||
|
||||
@var{doc-string} is the documentation attached to the implementation.
|
||||
All method doc-strings are incorporated into the generic method's
|
||||
function documentation.
|
||||
|
||||
@var{forms} is the body of the function.
|
||||
|
||||
@end defmac
|
||||
|
||||
@noindent
|
||||
In the following example, we create a method @code{mymethod} for the
|
||||
@code{classname} class:
|
||||
|
||||
@example
|
||||
(cl-defmethod mymethod ((obj classname) secondarg)
|
||||
"Doc string" )
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
This method only executes if the @var{obj} argument passed to it is an
|
||||
@eieio{} object of class @code{classname}.
|
||||
|
||||
A method with no type specializer is a @dfn{default method}. If a given
|
||||
class has no implementation, then the default method is called when
|
||||
that method is used on a given object of that class.
|
||||
|
||||
Only one method per combination of specializers and qualifiers (@code{:before},
|
||||
@code{:around}, or @code{:after}) is kept. If two @code{cl-defmethod}s appear
|
||||
with the same specializers and the same qualifiers, then the second
|
||||
implementation replaces the first.
|
||||
|
||||
When a method is called on an object, but there is no method specified
|
||||
for that object, but there is a method specified for object's parent
|
||||
class, the parent class's method is called. If there is a method
|
||||
defined for both, only the child's method is called. A child method
|
||||
may call a parent's method using @code{cl-call-next-method}, described
|
||||
below.
|
||||
|
||||
If multiple methods and default methods are defined for the same
|
||||
method and class, they are executed in this order:
|
||||
|
||||
@enumerate
|
||||
@item :around methods
|
||||
The most specific @code{:around} method is called first, which may invoke the
|
||||
less specific ones via @code{cl-call-next-method}. If it doesn't invoke
|
||||
@code{cl-call-next-method}, then no other methods will be executed. When there
|
||||
are no more @code{:around} methods to call, falls through to run the other
|
||||
(non-@code{:around}) methods.
|
||||
@item :before methods
|
||||
Called in sequence from most specific to least specific.
|
||||
@item primary methods
|
||||
The most specific method is called, which may invoke the less specific
|
||||
ones via @code{cl-call-next-method}.
|
||||
@item :after methods
|
||||
Called in sequence from least specific to most specific.
|
||||
@end enumerate
|
||||
|
||||
If no methods exist, Emacs signals a @code{cl-no-applicable-method} error.
|
||||
@xref{Signals}. If methods exist but none of them are primary, Emacs
|
||||
signals a @code{cl-no-primary-method} error. @xref{Signals}.
|
||||
|
||||
@defun cl-call-next-method &rest replacement-args
|
||||
@anchor{cl-call-next-method}
|
||||
|
||||
This function calls the superclass method from a subclass method.
|
||||
This is the ``next method'' specified in the current method list.
|
||||
|
||||
If @var{replacement-args} is non-@code{nil}, then use them instead of the
|
||||
arguments originally provided to the method.
|
||||
|
||||
Can only be used from within the lexical body of a primary or around method.
|
||||
@end defun
|
||||
|
||||
@defun cl-next-method-p
|
||||
@anchor{cl-next-method-p}
|
||||
Non-@code{nil} if there is a next method.
|
||||
|
||||
Can only be used from within the lexical body of a primary or around method.
|
||||
@end defun
|
||||
|
||||
@node Static Methods
|
||||
@section Static Methods
|
||||
|
||||
Static methods do not depend on an object instance, but instead
|
||||
operate on a class. You can create a static method by using
|
||||
the @code{subclass} specializer with @code{cl-defmethod}:
|
||||
EIEIO provides one extension to @code{cl-defmethod} to allow mathods to
|
||||
dispatch on a class argument: so-called ``static'' methods do not depend
|
||||
on an object instance, but instead operate on a class. You can create
|
||||
a static method by using the @code{subclass} specializer with
|
||||
@code{cl-defmethod}:
|
||||
|
||||
@example
|
||||
(cl-defmethod make-instance ((class (subclass mychild)) &rest args)
|
||||
|
|
|
|||
3
etc/TODO
3
etc/TODO
|
|
@ -788,9 +788,6 @@ to ASCII.
|
|||
|
||||
*** Provide a user friendly interface to specify fonts
|
||||
|
||||
** Use the XIE X extension, if available, for image display
|
||||
This is obsolete, as XIE itself is now considered obsolete.
|
||||
|
||||
** Make monochrome images honor the face
|
||||
Display those images using the foreground and background colors of the
|
||||
applicable faces.
|
||||
|
|
|
|||
|
|
@ -301,7 +301,6 @@ \section{Insert Mode}
|
|||
\key{delete line word}{C-u}
|
||||
\key{indent shiftwidth forward}{C-t}
|
||||
\key{indent shiftwidth backward}{C-d}
|
||||
\key{delete line word}{C-u}
|
||||
\key{quote following character}{C-v}
|
||||
\key{emulate Meta key in emacs state}{C-$\backslash$}
|
||||
\key{escape to Vi state for one command}{C-z}
|
||||
|
|
|
|||
|
|
@ -25198,7 +25198,7 @@
|
|||
* emacs-lisp/package-x.el (package-upload-buffer-internal):
|
||||
Use `equal' for upload base check.
|
||||
|
||||
2011-03-08 Arni Magnusson <arnima@hafro.is> (tiny change)
|
||||
2011-03-08 Arni Magnusson <thisisarni@gmail.com> (tiny change)
|
||||
|
||||
* textmodes/texinfo.el (texinfo-environments):
|
||||
Add deftypecv, deftypeivar, deftypemethod, deftypeop, html. (Bug#2783)
|
||||
|
|
|
|||
|
|
@ -6706,7 +6706,7 @@
|
|||
2014-10-12 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* progmodes/bat-mode.el (bat-font-lock-keywords): Fix \\<_ typo
|
||||
(bug#18622). Reported by Arni Magnusson <arnima@hafro.is>.
|
||||
(bug#18622). Reported by Arni Magnusson <thisisarni@gmail.com>.
|
||||
* progmodes/prolog.el (prolog-electric--underscore): Same.
|
||||
|
||||
2014-10-12 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
|
@ -20214,7 +20214,7 @@
|
|||
(dos-mode-syntax-table): Don't use "w" for symbol chars.
|
||||
(dos-font-lock-keywords): Try to adjust font-lock rules accordingly.
|
||||
|
||||
2013-08-07 Arni Magnusson <arnima@hafro.is>
|
||||
2013-08-07 Arni Magnusson <thisisarni@gmail.com>
|
||||
|
||||
* progmodes/dos.el: New file.
|
||||
* generic-x.el (bat-generic-mode): Redefine as an obsolete alias to
|
||||
|
|
|
|||
|
|
@ -245,7 +245,7 @@ showing only titles and no page number."
|
|||
See `doc-view-mupdf-use-svg'.
|
||||
|
||||
Only background and foreground colors are used as the SVG image's
|
||||
descriptors, see (info \"(elisp) SVG Images\"). Non-standard values may
|
||||
descriptors; see (info \"(elisp) SVG Images\"). Custom values may
|
||||
cause low-contrast issues with certain documents."
|
||||
:version "30.1")
|
||||
|
||||
|
|
|
|||
|
|
@ -385,6 +385,9 @@ If multiple rules match, only first one is executed.")
|
|||
(defvar electric-layout-allow-duplicate-newlines nil
|
||||
"If non-nil, allow duplication of `before' newlines.")
|
||||
|
||||
(defvar electric-layout-allow-in-comment-or-string nil
|
||||
"If non-nil, allow inserting newlines inside a comment or string.")
|
||||
|
||||
(defun electric-layout-post-self-insert-function ()
|
||||
(when electric-layout-mode
|
||||
(electric-layout-post-self-insert-function-1)))
|
||||
|
|
@ -409,7 +412,10 @@ If multiple rules match, only first one is executed.")
|
|||
(goto-char pos)
|
||||
(funcall probe last-command-event))))
|
||||
(when res (throw 'done res))))))))))
|
||||
(when rule
|
||||
(when (and rule
|
||||
(or electric-layout-allow-in-comment-or-string
|
||||
;; Not in a comment or string.
|
||||
(not (nth 8 (save-excursion (syntax-ppss pos))))))
|
||||
(goto-char pos)
|
||||
(when (functionp rule) (setq rule (funcall rule)))
|
||||
(dolist (sym (if (symbolp rule) (list rule) rule))
|
||||
|
|
|
|||
|
|
@ -574,13 +574,16 @@ R1 and R2 are dotted pairs. Colorize it with FACE."
|
|||
|
||||
(defun chart-bar-quickie (dir title namelst nametitle numlst numtitle
|
||||
&optional max sort-pred)
|
||||
"Wash over the complex EIEIO stuff and create a nice bar chart.
|
||||
Create it going in direction DIR [`horizontal' `vertical'] with TITLE
|
||||
using a name sequence NAMELST labeled NAMETITLE with values NUMLST
|
||||
labeled NUMTITLE.
|
||||
Optional arguments:
|
||||
Set the chart's max element display to MAX, and sort lists with
|
||||
SORT-PRED if desired."
|
||||
"Create a bar chart named TITLE in direction DIR [`horizontal' `vertical'].
|
||||
NAMELST is the list of bar names and NAMETITLE is the name the of axis
|
||||
containing them.
|
||||
NUMLST is the list of values and NUMTITLE is the name of the value
|
||||
axis.
|
||||
Optional argument MAX limits the chart's max element display to MAX by
|
||||
passing it as second argument to `chart-trim', otherwise the chart's
|
||||
display is unlimited.
|
||||
Optional argument SORT-PRED is a predicate function passed as second
|
||||
argument to `chart-sort' to sort the lists if desired."
|
||||
(let ((nc (make-instance 'chart-bar
|
||||
:title title
|
||||
:key-label "8-m" ; This is a text key pic
|
||||
|
|
|
|||
|
|
@ -2505,7 +2505,7 @@ by EXPANSION, and (setq NAME ...) will act like (setf EXPANSION ...).
|
|||
(defmacro cl-once-only (names &rest body)
|
||||
"Generate code to evaluate each of NAMES just once in BODY.
|
||||
|
||||
This macro helps with writing other macros. Each of names is
|
||||
This macro helps with writing other macros. Each of NAMES is
|
||||
either (NAME FORM) or NAME, which latter means (NAME NAME).
|
||||
During macroexpansion, each NAME is bound to an uninterned
|
||||
symbol. The expansion evaluates each FORM and binds it to the
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
;;; Code:
|
||||
|
||||
(require 'ert)
|
||||
(require 'ert-x)
|
||||
(require 'newcomment)
|
||||
(require 'pcase)
|
||||
|
||||
|
|
|
|||
|
|
@ -436,7 +436,8 @@ the values of nil for each."
|
|||
:usage "[NAME=VALUE]... [COMMAND]...")
|
||||
(if args
|
||||
(or (eshell-parse-local-variables args)
|
||||
(eshell-named-command (car args) (cdr args)))
|
||||
(throw 'eshell-replace-command
|
||||
`(eshell-named-command ,(car args) ',(cdr args))))
|
||||
(eshell-with-buffered-print
|
||||
(dolist (setting (sort (eshell-environment-variables) 'string-lessp))
|
||||
(eshell-buffered-print setting "\n"))))))
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
(defvar filesets-version "1.8.4")
|
||||
(defvar filesets-homepage
|
||||
"http://members.a1.net/t.link/CompEmacsFilesets.html")
|
||||
"https://web.archive.org/web/20210225032922/https://members.a1.net/t.link/CompEmacsFilesets.html")
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
|
|
|
|||
|
|
@ -174,6 +174,11 @@ The command run (after changing into DIR) is essentially
|
|||
except that the car of the variable `find-ls-option' specifies what to
|
||||
use in place of \"-ls\" as the final argument.
|
||||
|
||||
If your `find' program is not a GNU Find, the columns in the produced
|
||||
Dired display might fail to align. We recommend to install GNU Find in
|
||||
those cases (you may need to customize the value of `find-program' if
|
||||
you do so), which attempts to align the columns.
|
||||
|
||||
Collect output in the \"*Find*\" buffer. To kill the job before
|
||||
it finishes, type \\[kill-find].
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@
|
|||
;; Scheme: https://groups.csail.mit.edu/mac/ftpdir/scm/r5rs.info.tar.gz
|
||||
;; LaTeX: https://mirrors.ctan.org/info/latex2e-help-texinfo/latex2e.texi
|
||||
;; (or CTAN mirrors)
|
||||
;; Python: https://www.python.org/ftp/python/doc/
|
||||
;; SICP: https://github.com/webframp/sicp-info
|
||||
|
||||
;; Traditionally, makeinfo quoted `like this', but version 5 and later
|
||||
;; quotes 'like this' or ‘like this’. Doc specs with patterns
|
||||
|
|
@ -1081,6 +1083,7 @@ Return nil if there is nothing appropriate in the buffer near point."
|
|||
("srecode" "Index")
|
||||
("tramp" "Variable Index" "Function Index")
|
||||
("url" "Variable Index" "Function Index")
|
||||
("use-package" "Index")
|
||||
("vhdl" "(vhdl-mode)Variable Index" "(vhdl-mode)Command Index")
|
||||
("viper" "Variable Index" "Function Index")
|
||||
("vtable" "Index")
|
||||
|
|
|
|||
|
|
@ -410,7 +410,7 @@ with a space."
|
|||
;;; Syntax tables and abbrev-expansion
|
||||
|
||||
(defcustom mail-abbrev-mode-regexp
|
||||
"^\\(Resent-\\)?\\(To\\|From\\|Cc\\|Bcc\\|Reply-To\\):"
|
||||
"^\\(Resent-\\)?\\(To\\|From\\|Cc\\|Bcc\\|Reply-To\\|X-Debbugs-Cc\\):"
|
||||
"Regexp matching mail headers in which mail abbrevs should be expanded.
|
||||
This string will be handed to `looking-at' with point at the beginning
|
||||
of the current line; if it matches, abbrev mode will be turned on, otherwise
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
When t this still needs to be initialized.")
|
||||
|
||||
(defvar mail-address-field-regexp
|
||||
"^\\(Resent-\\)?\\(To\\|From\\|Cc\\|Bcc\\|Reply-To\\):")
|
||||
"^\\(Resent-\\)?\\(To\\|From\\|Cc\\|Bcc\\|Reply-To\\|X-Debbugs-Cc\\):")
|
||||
|
||||
;; `pattern' is bound dynamically before evaluating the forms in
|
||||
;; `mail-complete-alist' and may be part of user customizations of
|
||||
|
|
@ -61,7 +61,7 @@ When t this still needs to be initialized.")
|
|||
(defcustom mail-complete-alist
|
||||
;; Don't refer to mail-address-field-regexp here;
|
||||
;; that confuses some things such as cus-dep.el.
|
||||
'(("^\\(Resent-\\)?\\(To\\|From\\|Cc\\|Bcc\\|Reply-To\\):"
|
||||
'(("^\\(Resent-\\)?\\(To\\|From\\|Cc\\|Bcc\\|Reply-To\\|X-Debbugs-Cc\\):"
|
||||
. (mail-get-names pattern))
|
||||
("Newsgroups:" . (if (boundp 'gnus-active-hashtb)
|
||||
gnus-active-hashtb
|
||||
|
|
|
|||
|
|
@ -579,11 +579,13 @@ HEADER is a header component of a MIME-entity object (see
|
|||
(ignore-errors (base64-decode-region pos (point))))
|
||||
((string= transfer-encoding "quoted-printable")
|
||||
(quoted-printable-decode-region pos (point))))))
|
||||
(decode-coding-region
|
||||
pos (point)
|
||||
;; Use -dos decoding, to remove ^M characters left from base64 or
|
||||
;; rogue qp-encoded text.
|
||||
(coding-system-change-eol-conversion coding-system 1))
|
||||
;; If the text is empty, we don't have anything to decode.
|
||||
(and (/= pos (point))
|
||||
(decode-coding-region
|
||||
pos (point)
|
||||
;; Use -dos decoding, to remove ^M characters left from base64
|
||||
;; or rogue qp-encoded text.
|
||||
(coding-system-change-eol-conversion coding-system 1)))
|
||||
(if (and
|
||||
(or (not rmail-mime-coding-system) (consp rmail-mime-coding-system))
|
||||
(not (eq (coding-system-base coding-system) 'us-ascii)))
|
||||
|
|
|
|||
|
|
@ -23,25 +23,27 @@
|
|||
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
;; This package provides a common interface to query directory servers using
|
||||
;; different protocols such as LDAP, CCSO PH/QI or BBDB. Queries can be
|
||||
;; made through an interactive form or inline. Inline query strings in
|
||||
;; buffers are expanded with appropriately formatted query results
|
||||
;; (especially used to expand email addresses in message buffers). EUDC
|
||||
;; also interfaces with the BBDB package to let you register query results
|
||||
;; into your own BBDB database.
|
||||
|
||||
;;; Usage:
|
||||
;; EUDC comes with an extensive documentation, please refer to it.
|
||||
;; This package provides a common interface to query directory servers using
|
||||
;; different protocols such as LDAP, CCSO PH/QI or BBDB. Queries can be
|
||||
;; made through an interactive form or inline. Inline query strings in
|
||||
;; buffers are expanded with appropriately formatted query results
|
||||
;; (especially used to expand email addresses in message buffers). EUDC
|
||||
;; also interfaces with the BBDB package to let you register query results
|
||||
;; into your own BBDB database.
|
||||
;;
|
||||
;; The main entry points of EUDC are:
|
||||
;; `eudc-query-form': Query a directory server from a query form
|
||||
;; `eudc-expand-inline': Query a directory server for the e-mail address
|
||||
;; of the name before cursor and insert it in the
|
||||
;; buffer
|
||||
;; `eudc-get-phone': Get a phone number from a directory server
|
||||
;; `eudc-get-email': Get an e-mail address from a directory server
|
||||
;; `eudc-customize': Customize various aspects of EUDC
|
||||
;; Usage:
|
||||
;;
|
||||
;; EUDC comes with extensive documentation, please refer to it.
|
||||
;;
|
||||
;; The main entry points of EUDC are:
|
||||
;; `eudc-query-form': Query a directory server from a query form
|
||||
;; `eudc-expand-inline': Query a directory server for the e-mail address
|
||||
;; of the name before cursor and insert it in the
|
||||
;; buffer
|
||||
;; `eudc-get-phone': Get a phone number from a directory server
|
||||
;; `eudc-get-email': Get an e-mail address from a directory server
|
||||
;; `eudc-customize': Customize various aspects of EUDC
|
||||
|
||||
;;; Code:
|
||||
|
||||
|
|
|
|||
|
|
@ -2537,9 +2537,25 @@ activity. Only run if the buffer is not visible and
|
|||
(rcirc-activity-string lopri)
|
||||
")"))
|
||||
(and hipri "]")))
|
||||
;; Consistently don't display anything if there aren't
|
||||
;; any IRC connections. Otherwise, whether we display
|
||||
;; "[]" or not depends on whether or not this function
|
||||
;; happens to have been called in this session yet.
|
||||
;;
|
||||
;; Consistently display nothing, rather than
|
||||
;; consistently displaying "[]", for the sake of the
|
||||
;; following sort of case: the user has enabled
|
||||
;; `rcirc-track-minor-mode' using the customization
|
||||
;; system, but also starts up Emacs instances that
|
||||
;; aren't used for IRC. Due to the use of easy
|
||||
;; customization, `rcirc-track-minor-mode' will be
|
||||
;; turned on for every instance of Emacs. But we don't
|
||||
;; want to take up valuable mode line space when, say,
|
||||
;; Emacs is started up as the value of EDITOR/VISUAL.
|
||||
((not (null (rcirc-process-list)))
|
||||
"[]")
|
||||
(t "[]")))
|
||||
(t
|
||||
"")))
|
||||
(run-hooks 'rcirc-update-activity-string-hook)
|
||||
(force-mode-line-update t)))
|
||||
|
||||
|
|
|
|||
|
|
@ -178,7 +178,8 @@ If it is nil, logging is disabled."
|
|||
(with-current-buffer
|
||||
(get-buffer-create sieve-manage-log)
|
||||
(set-buffer-multibyte nil)
|
||||
(buffer-disable-undo)))
|
||||
(buffer-disable-undo)
|
||||
(current-buffer)))
|
||||
(goto-char (point-max))
|
||||
(apply #'insert args))))
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
;;; bat-mode.el --- Major mode for editing DOS/Windows scripts -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2003, 2008-2024 Free Software Foundation, Inc.
|
||||
;; Copyright (C) 2003-2024 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Arni Magnusson <arnima@hafro.is>
|
||||
;; Author: Arni Magnusson <thisisarni@gmail.com>
|
||||
;; Keywords: languages
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
|
|
|||
|
|
@ -324,10 +324,13 @@ characters of the current line."
|
|||
;; If the start of the previous sibling isn't at the
|
||||
;; beginning of a line, something's probably not quite
|
||||
;; right, go a step further. (E.g., comment after a
|
||||
;; statement.)
|
||||
;; statement.) If the previous sibling is the first named
|
||||
;; node then anchor to that, e.g. when returning an aggregate
|
||||
;; and starting the items on the same line as {.
|
||||
(_ (goto-char (treesit-node-start prev-sibling))
|
||||
(if (looking-back (rx bol (* whitespace))
|
||||
(line-beginning-position))
|
||||
(if (or (looking-back (rx bol (* whitespace))
|
||||
(line-beginning-position)))
|
||||
(null (treesit-node-prev-sibling prev-sibling t))
|
||||
(setq continue nil)
|
||||
(setq prev-sibling
|
||||
(treesit-node-prev-sibling prev-sibling)))))))
|
||||
|
|
|
|||
|
|
@ -6225,7 +6225,7 @@ default function."
|
|||
(t (funcall (default-value 'font-lock-syntactic-face-function) state))))
|
||||
|
||||
(defface cperl-method-call
|
||||
'((t (:inherit 'default )))
|
||||
'((t (:inherit default )))
|
||||
"Font Lock mode face for method calls.
|
||||
Usually, method calls are not fontified.
|
||||
We use this face to prevent calls to methods which look like
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@
|
|||
(declare-function treesit-node-type "treesit.c")
|
||||
(declare-function treesit-node-child-by-field-name "treesit.c")
|
||||
(declare-function treesit-query-capture "treesit.c")
|
||||
(declare-function treesit-query-compile "treesit.c")
|
||||
|
||||
(defgroup csharp nil
|
||||
"Major mode for editing C# code."
|
||||
|
|
@ -730,6 +731,52 @@ compilation and evaluation time conflicts."
|
|||
"readonly" "unmanaged")
|
||||
"C# keywords for tree-sitter font-locking.")
|
||||
|
||||
(defun csharp-ts-mode--test-this-expression ()
|
||||
"Return non-nil if (this_expression) is named in csharp grammar."
|
||||
(ignore-errors
|
||||
(treesit-query-compile 'c-sharp "(this_expression)" t)
|
||||
t))
|
||||
|
||||
(defun csharp-ts-mode--test-interpolated-string-text ()
|
||||
"Return non-nil if (interpolated_string_text) is in the grammar."
|
||||
(ignore-errors
|
||||
(treesit-query-compile 'c-sharp "(interpolated_string_text)" t)
|
||||
t))
|
||||
|
||||
(defun csharp-ts-mode--test-type-constraint ()
|
||||
"Return non-nil if (type_constraint) is in the grammar."
|
||||
(ignore-errors
|
||||
(treesit-query-compile 'c-sharp "(type_constraint)" t)
|
||||
t))
|
||||
|
||||
(defun csharp-ts-mode--test-type-of-expression ()
|
||||
"Return non-nil if (type_of_expression) is in the grammar."
|
||||
(ignore-errors
|
||||
(treesit-query-compile 'c-sharp "(type_of_expression)" t)
|
||||
t))
|
||||
|
||||
(defun csharp-ts-mode--test-name-equals ()
|
||||
"Return non-nil if (name_equals) is in the grammar."
|
||||
(ignore-errors
|
||||
(treesit-query-compile 'c-sharp "(name_equals)" t)
|
||||
t))
|
||||
|
||||
(defun csharp-ts-mode--test-if-directive ()
|
||||
"Return non-nil if (if_directive) is in the grammar."
|
||||
(ignore-errors
|
||||
(treesit-query-compile 'c-sharp "(if_directive)" t)
|
||||
t))
|
||||
|
||||
(defun csharp-ts-mode--test-method-declaration-type-field ()
|
||||
"Return non-nil if (method_declaration) has a type field."
|
||||
(ignore-errors
|
||||
(treesit-query-compile 'c-sharp "(method_declaration type: (_))" t)
|
||||
t))
|
||||
|
||||
(defvar csharp-ts-mode--type-field
|
||||
(if (csharp-ts-mode--test-method-declaration-type-field)
|
||||
'type: 'returns:))
|
||||
|
||||
(defvar csharp-ts-mode--font-lock-settings
|
||||
(treesit-font-lock-rules
|
||||
:language 'c-sharp
|
||||
|
|
@ -760,7 +807,9 @@ compilation and evaluation time conflicts."
|
|||
:feature 'keyword
|
||||
`([,@csharp-ts-mode--keywords] @font-lock-keyword-face
|
||||
(modifier) @font-lock-keyword-face
|
||||
(this_expression) @font-lock-keyword-face)
|
||||
,@(if (csharp-ts-mode--test-this-expression)
|
||||
'((this_expression) @font-lock-keyword-face)
|
||||
'("this" @font-lock-keyword-face)))
|
||||
|
||||
:language 'c-sharp
|
||||
:override t
|
||||
|
|
@ -786,18 +835,23 @@ compilation and evaluation time conflicts."
|
|||
:feature 'string
|
||||
`([(string_literal)
|
||||
(verbatim_string_literal)
|
||||
(interpolated_string_text)
|
||||
(interpolated_verbatim_string_text)
|
||||
(character_literal)
|
||||
"\""
|
||||
"$\""
|
||||
"@$\""
|
||||
"$@\""] @font-lock-string-face)
|
||||
,@(if (csharp-ts-mode--test-interpolated-string-text)
|
||||
'((interpolated_string_text)
|
||||
(interpolated_verbatim_string_text)
|
||||
(character_literal)
|
||||
"\""
|
||||
"$\""
|
||||
"@$\""
|
||||
"$@\"")
|
||||
'((interpolated_string_expression)
|
||||
(interpolation_start)
|
||||
(interpolation_quote)))]
|
||||
@font-lock-string-face)
|
||||
|
||||
:language 'c-sharp
|
||||
:override t
|
||||
:feature 'type
|
||||
'((predefined_type) @font-lock-type-face
|
||||
`((predefined_type) @font-lock-type-face
|
||||
(implicit_type) @font-lock-type-face
|
||||
(nullable_type) @font-lock-type-face
|
||||
(type_parameter
|
||||
|
|
@ -816,10 +870,17 @@ compilation and evaluation time conflicts."
|
|||
(cast_expression (generic_name (identifier) @font-lock-type-face))
|
||||
["operator"] @font-lock-type-face
|
||||
(type_parameter_constraints_clause
|
||||
target: (identifier) @font-lock-type-face)
|
||||
(type_constraint type: (identifier) @font-lock-type-face)
|
||||
(type_constraint type: (generic_name (identifier) @font-lock-type-face))
|
||||
(type_of_expression (identifier) @font-lock-type-face)
|
||||
(identifier) @font-lock-type-face)
|
||||
,@(if (csharp-ts-mode--test-type-constraint)
|
||||
'((type_constraint type: (identifier) @font-lock-type-face)
|
||||
(type_constraint type: (generic_name (identifier) @font-lock-type-face)))
|
||||
'((type_parameter_constraint (type type: (identifier) @font-lock-type-face))
|
||||
(type_parameter_constraint (type type: (generic_name (identifier) @font-lock-type-face)))))
|
||||
|
||||
,@(when (csharp-ts-mode--test-type-of-expression)
|
||||
'((type_of_expression (identifier) @font-lock-type-face))
|
||||
'((typeof_expression (identifier) @font-lock-type-face)))
|
||||
|
||||
(object_creation_expression
|
||||
type: (identifier) @font-lock-type-face)
|
||||
(object_creation_expression
|
||||
|
|
@ -832,8 +893,9 @@ compilation and evaluation time conflicts."
|
|||
:override t
|
||||
`((qualified_name (identifier) @font-lock-type-face)
|
||||
(using_directive (identifier) @font-lock-type-face)
|
||||
(using_directive (name_equals
|
||||
(identifier) @font-lock-type-face))
|
||||
,@(when (csharp-ts-mode--test-name-equals)
|
||||
'((using_directive (name_equals
|
||||
(identifier) @font-lock-type-face))))
|
||||
|
||||
(enum_declaration (identifier) @font-lock-type-face)
|
||||
(enum_member_declaration (identifier) @font-lock-variable-name-face)
|
||||
|
|
@ -861,10 +923,10 @@ compilation and evaluation time conflicts."
|
|||
;;; Check if keyword void_keyword is available, then return the correct rule."
|
||||
,@(condition-case nil
|
||||
(progn (treesit-query-capture 'csharp '((void_keyword) @capture))
|
||||
`((method_declaration type: [(identifier) (void_keyword)] @font-lock-type-face)))
|
||||
`((method_declaration ,csharp-ts-mode--type-field [(identifier) (void_keyword)] @font-lock-type-face)))
|
||||
(error
|
||||
`((method_declaration type: [(identifier) (predefined_type)] @font-lock-type-face))))
|
||||
(method_declaration type: (generic_name (identifier) @font-lock-type-face))
|
||||
`((method_declaration ,csharp-ts-mode--type-field [(identifier) (predefined_type)] @font-lock-type-face))))
|
||||
(method_declaration ,csharp-ts-mode--type-field (generic_name (identifier) @font-lock-type-face))
|
||||
(method_declaration name: (_) @font-lock-function-name-face)
|
||||
|
||||
(catch_declaration
|
||||
|
|
@ -907,25 +969,45 @@ compilation and evaluation time conflicts."
|
|||
:language 'c-sharp
|
||||
:feature 'directives
|
||||
:override t
|
||||
'((if_directive
|
||||
"if" @font-lock-preprocessor-face
|
||||
(identifier) @font-lock-variable-use-face)
|
||||
(elif_directive
|
||||
"elif" @font-lock-preprocessor-face
|
||||
(identifier) @font-lock-variable-use-face)
|
||||
(else_directive) @font-lock-preprocessor-face
|
||||
(endif_directive) @font-lock-preprocessor-face
|
||||
(define_directive
|
||||
"define" @font-lock-preprocessor-face
|
||||
(identifier) @font-lock-variable-use-face)
|
||||
(nullable_directive) @font-lock-preprocessor-face
|
||||
(pragma_directive) @font-lock-preprocessor-face
|
||||
(region_directive) @font-lock-preprocessor-face
|
||||
(endregion_directive) @font-lock-preprocessor-face
|
||||
(region_directive
|
||||
(preproc_message) @font-lock-variable-use-face)
|
||||
(endregion_directive
|
||||
(preproc_message) @font-lock-variable-use-face))))
|
||||
(if (csharp-ts-mode--test-if-directive)
|
||||
'((if_directive
|
||||
"if" @font-lock-preprocessor-face
|
||||
(identifier) @font-lock-variable-use-face)
|
||||
(elif_directive
|
||||
"elif" @font-lock-preprocessor-face
|
||||
(identifier) @font-lock-variable-use-face)
|
||||
(else_directive) @font-lock-preprocessor-face
|
||||
(endif_directive) @font-lock-preprocessor-face
|
||||
(define_directive
|
||||
"define" @font-lock-preprocessor-face
|
||||
(identifier) @font-lock-variable-use-face)
|
||||
(nullable_directive) @font-lock-preprocessor-face
|
||||
(pragma_directive) @font-lock-preprocessor-face
|
||||
(region_directive) @font-lock-preprocessor-face
|
||||
(endregion_directive) @font-lock-preprocessor-face
|
||||
(region_directive
|
||||
(preproc_message) @font-lock-variable-use-face)
|
||||
(endregion_directive
|
||||
(preproc_message) @font-lock-variable-use-face))
|
||||
'((preproc_if
|
||||
"#if" @font-lock-preprocessor-face
|
||||
(identifier) @font-lock-variable-use-face)
|
||||
(preproc_elif
|
||||
"#elif" @font-lock-preprocessor-face
|
||||
(identifier) @font-lock-variable-use-face)
|
||||
(preproc_else) @font-lock-preprocessor-face
|
||||
"#endif" @font-lock-preprocessor-face
|
||||
(preproc_define
|
||||
"#define" @font-lock-preprocessor-face
|
||||
(preproc_arg) @font-lock-variable-use-face)
|
||||
(preproc_nullable) @font-lock-preprocessor-face
|
||||
(preproc_pragma) @font-lock-preprocessor-face
|
||||
(preproc_region) @font-lock-preprocessor-face
|
||||
(preproc_endregion) @font-lock-preprocessor-face
|
||||
(preproc_region
|
||||
(preproc_arg) @font-lock-variable-use-face)
|
||||
(preproc_endregion
|
||||
(preproc_arg) @font-lock-variable-use-face)))))
|
||||
|
||||
;;;###autoload
|
||||
(add-to-list 'auto-mode-alist '("\\.cs\\'" . csharp-mode))
|
||||
|
|
|
|||
|
|
@ -178,9 +178,9 @@
|
|||
|
||||
;;; User tweakable stuff
|
||||
(defgroup eglot nil
|
||||
"Interaction with Language Server Protocol servers."
|
||||
"Interaction with Language Server Protocol (LSP) servers."
|
||||
:prefix "eglot-"
|
||||
:group 'applications)
|
||||
:group 'tools)
|
||||
|
||||
(defun eglot-alternatives (alternatives)
|
||||
"Compute server-choosing function for `eglot-server-programs'.
|
||||
|
|
@ -1487,18 +1487,21 @@ Use current server's or first available Eglot events buffer."
|
|||
|
||||
(defvar eglot-connect-hook
|
||||
'(eglot-signal-didChangeConfiguration)
|
||||
"Hook run after connecting in `eglot--connect'.")
|
||||
"Hook run after connecting to a server.
|
||||
Each function is passed an `eglot-lsp-server' instance
|
||||
as argument.")
|
||||
|
||||
(defvar eglot-server-initialized-hook
|
||||
'()
|
||||
"Hook run after a `eglot-lsp-server' instance is created.
|
||||
|
||||
That is before a connection was established. Use
|
||||
That is before a connection is established. Use
|
||||
`eglot-connect-hook' to hook into when a connection was
|
||||
successfully established and the server on the other side has
|
||||
received the initializing configuration.
|
||||
|
||||
Each function is passed the server as an argument")
|
||||
Each function is passed an `eglot-lsp-server' instance
|
||||
as argument.")
|
||||
|
||||
(defun eglot--cmd (contact)
|
||||
"Helper for `eglot--connect'."
|
||||
|
|
@ -3239,7 +3242,8 @@ for which LSP on-type-formatting should be requested."
|
|||
:resolveProvider)
|
||||
(plist-get lsp-comp :data))
|
||||
(eglot--request server :completionItem/resolve
|
||||
lsp-comp :cancel-on-input t)
|
||||
lsp-comp :cancel-on-input t
|
||||
:immediate t)
|
||||
lsp-comp))))))
|
||||
(when (and (consp eglot--capf-session)
|
||||
(= (car bounds) (car (nth 0 eglot--capf-session)))
|
||||
|
|
|
|||
|
|
@ -734,9 +734,6 @@ Return nil if NODE is not a defun node or doesn't have a name."
|
|||
(when (treesit-ready-p 'heex)
|
||||
(setq-local treesit-range-settings elixir-ts--treesit-range-rules)
|
||||
|
||||
(setq-local treesit-simple-indent-rules
|
||||
(append treesit-simple-indent-rules heex-ts--indent-rules))
|
||||
|
||||
(setq-local treesit-font-lock-settings
|
||||
(append treesit-font-lock-settings
|
||||
heex-ts--font-lock-settings))
|
||||
|
|
|
|||
|
|
@ -1894,27 +1894,40 @@ description of the arguments."
|
|||
(try-completion string (tags-table-files) predicate))))
|
||||
|
||||
(defun tags--get-current-buffer-name-in-tags-file ()
|
||||
"Get the file name that the current buffer corresponds in the tags file."
|
||||
(let ((tag-dir
|
||||
(save-excursion
|
||||
(visit-tags-table-buffer)
|
||||
(file-name-directory (buffer-file-name)))))
|
||||
(file-relative-name (buffer-file-name) tag-dir)))
|
||||
"Return file name that corresponds to the current buffer in the tags table.
|
||||
This returns the file name which corresponds to the current buffer relative
|
||||
to the directory of the current tags table (see `visit-tags-table-buffer').
|
||||
If no file is associated with the current buffer, this function returns nil."
|
||||
(let ((buf-fname (buffer-file-name)))
|
||||
;; FIXME: Are there interesting cases where 'buffer-file-name'
|
||||
;; returns nil, but there's some file we expect to find in TAGS that
|
||||
;; is associated with the buffer? The obvious cases of Dired and
|
||||
;; Info buffers are not interesting for TAGS, but are there any
|
||||
;; others?
|
||||
(if buf-fname
|
||||
(let ((tag-dir
|
||||
(save-excursion
|
||||
(visit-tags-table-buffer)
|
||||
(file-name-directory buf-fname))))
|
||||
(file-relative-name buf-fname tag-dir)))))
|
||||
|
||||
;;;###autoload
|
||||
(defun list-tags (file &optional _next-match)
|
||||
"Display list of tags in file FILE.
|
||||
This searches only the first table in the list, and no included
|
||||
tables. FILE should be as it appeared in the `etags' command,
|
||||
usually without a directory specification. If called
|
||||
interactively, FILE defaults to the file name of the current
|
||||
buffer."
|
||||
Interactively, prompt for FILE, with completion, offering the current
|
||||
buffer's file name as the defaul.
|
||||
This command searches only the first table in the list of tags tables,
|
||||
and does not search included tables.
|
||||
FILE should be as it was submitted to the `etags' command, which usually
|
||||
means relative to the directory of the tags table file."
|
||||
(interactive (list (completing-read
|
||||
"List tags in file: "
|
||||
'tags-complete-tags-table-file
|
||||
nil t
|
||||
;; Default FILE to the current buffer.
|
||||
;; Default FILE to the current buffer's file.
|
||||
(tags--get-current-buffer-name-in-tags-file))))
|
||||
(if (string-empty-p file)
|
||||
(user-error "You must specify a file name"))
|
||||
(with-output-to-temp-buffer "*Tags List*"
|
||||
(princ (substitute-command-keys "Tags in file `"))
|
||||
(tags-with-face 'highlight (princ file))
|
||||
|
|
|
|||
|
|
@ -676,19 +676,19 @@ Calls REPORT-FN directly."
|
|||
|
||||
(defun lua-ts-send-buffer ()
|
||||
"Send current buffer to the inferior Lua process."
|
||||
(interactive)
|
||||
(interactive nil lua-ts-mode)
|
||||
(lua-ts-send-region (point-min) (point-max)))
|
||||
|
||||
(defun lua-ts-send-file (file)
|
||||
"Send contents of FILE to the inferior Lua process."
|
||||
(interactive "f")
|
||||
(interactive "f" lua-ts-mode)
|
||||
(with-temp-buffer
|
||||
(insert-file-contents-literally file)
|
||||
(lua-ts-send-region (point-min) (point-max))))
|
||||
|
||||
(defun lua-ts-send-region (beg end)
|
||||
"Send region between BEG and END to the inferior Lua process."
|
||||
(interactive "r")
|
||||
(interactive "r" lua-ts-mode)
|
||||
(let ((string (buffer-substring-no-properties beg end))
|
||||
(proc-buffer (lua-ts-inferior-lua)))
|
||||
(comint-send-string proc-buffer "print()") ; Prevent output from
|
||||
|
|
|
|||
|
|
@ -77,18 +77,19 @@
|
|||
(declare-function treesit-parser-included-ranges "treesit.c")
|
||||
(declare-function treesit-parser-list "treesit.c")
|
||||
(declare-function treesit-parser-language "treesit.c")
|
||||
(declare-function treesit-query-compile "treesit.c")
|
||||
(declare-function treesit-search-forward "treesit.c")
|
||||
(declare-function treesit-node-prev-sibling "treesit.c")
|
||||
(declare-function treesit-node-first-child-for-pos "treesit.c")
|
||||
|
||||
;;; Install treesitter language parsers
|
||||
(defvar php-ts-mode--language-source-alist
|
||||
'((php . ("https://github.com/tree-sitter/tree-sitter-php" "v0.22.8" "php/src"))
|
||||
'((php . ("https://github.com/tree-sitter/tree-sitter-php" "v0.23.0" "php/src"))
|
||||
(phpdoc . ("https://github.com/claytonrcarter/tree-sitter-phpdoc"))
|
||||
(html . ("https://github.com/tree-sitter/tree-sitter-html" "v0.20.3"))
|
||||
(javascript . ("https://github.com/tree-sitter/tree-sitter-javascript" "v0.21.2"))
|
||||
(jsdoc . ("https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.21.0"))
|
||||
(css . ("https://github.com/tree-sitter/tree-sitter-css" "v0.21.0")))
|
||||
(html . ("https://github.com/tree-sitter/tree-sitter-html" "v0.23.0"))
|
||||
(javascript . ("https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.0"))
|
||||
(jsdoc . ("https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.0"))
|
||||
(css . ("https://github.com/tree-sitter/tree-sitter-css" "v0.23.0")))
|
||||
"Treesitter language parsers required by `php-ts-mode'.
|
||||
You can customize this variable if you want to stick to a specific
|
||||
commit and/or use different parsers.")
|
||||
|
|
@ -490,7 +491,7 @@ characters of the current line."
|
|||
(treesit-node-start parent)))))
|
||||
|
||||
(defun php-ts-mode--parent-html-heuristic (node parent _bol &rest _)
|
||||
"Returns position based on html indentation.
|
||||
"Return position based on html indentation.
|
||||
|
||||
Returns 0 if the NODE is after the </html>, otherwise returns the
|
||||
indentation point of the last word before the NODE, plus the
|
||||
|
|
@ -773,6 +774,21 @@ characters of the current line."
|
|||
"__FUNCTION__" "__LINE__" "__METHOD__" "__NAMESPACE__" "__TRAIT__")
|
||||
"PHP predefined constant.")
|
||||
|
||||
(defun php-ts-mode--test-namespace-name-as-prefix-p ()
|
||||
"Return t if namespace_name_as_prefix keyword is a named node, nil otherwise."
|
||||
(ignore-errors
|
||||
(progn (treesit-query-compile 'php "(namespace_name_as_prefix)" t) t)))
|
||||
|
||||
(defun php-ts-mode--test-namespace-aliasing-clause-p ()
|
||||
"Return t if namespace_name_as_prefix keyword is named node, nil otherwise."
|
||||
(ignore-errors
|
||||
(progn (treesit-query-compile 'php "(namespace_name_as_prefix)" t) t)))
|
||||
|
||||
(defun php-ts-mode--test-namespace-use-group-clause-p ()
|
||||
"Return t if namespace_use_group_clause keyword is named node, nil otherwise."
|
||||
(ignore-errors
|
||||
(progn (treesit-query-compile 'php "(namespace_use_group_clause)" t) t)))
|
||||
|
||||
(defun php-ts-mode--font-lock-settings ()
|
||||
"Tree-sitter font-lock settings."
|
||||
(treesit-font-lock-rules
|
||||
|
|
@ -866,7 +882,7 @@ characters of the current line."
|
|||
:language 'php
|
||||
:feature 'definition
|
||||
:override t
|
||||
'((php_tag) @font-lock-preprocessor-face
|
||||
`((php_tag) @font-lock-preprocessor-face
|
||||
("?>") @font-lock-preprocessor-face
|
||||
;; Highlights identifiers in declarations.
|
||||
(class_declaration
|
||||
|
|
@ -889,10 +905,16 @@ characters of the current line."
|
|||
("=>") @font-lock-keyword-face
|
||||
(object_creation_expression
|
||||
(name) @font-lock-type-face)
|
||||
(namespace_name_as_prefix "\\" @font-lock-delimiter-face)
|
||||
(namespace_name_as_prefix (namespace_name (name)) @font-lock-type-face)
|
||||
(namespace_use_clause (name) @font-lock-property-use-face)
|
||||
(namespace_aliasing_clause (name) @font-lock-type-face)
|
||||
,@(when (php-ts-mode--test-namespace-name-as-prefix-p)
|
||||
'((namespace_name_as_prefix "\\" @font-lock-delimiter-face)
|
||||
(namespace_name_as_prefix
|
||||
(namespace_name (name)) @font-lock-type-face)))
|
||||
,@(if (php-ts-mode--test-namespace-aliasing-clause-p)
|
||||
'((namespace_aliasing_clause (name) @font-lock-type-face))
|
||||
'((namespace_use_clause alias: (name) @font-lock-type-face)))
|
||||
,@(when (not (php-ts-mode--test-namespace-use-group-clause-p))
|
||||
'((namespace_use_group
|
||||
(namespace_use_clause (name) @font-lock-type-face))))
|
||||
(namespace_name "\\" @font-lock-delimiter-face)
|
||||
(namespace_name (name) @font-lock-type-face)
|
||||
(use_declaration (name) @font-lock-property-use-face))
|
||||
|
|
@ -931,8 +953,10 @@ characters of the current line."
|
|||
:language 'php
|
||||
:feature 'base-clause
|
||||
:override t
|
||||
'((base_clause (name) @font-lock-type-face)
|
||||
`((base_clause (name) @font-lock-type-face)
|
||||
(use_as_clause (name) @font-lock-property-use-face)
|
||||
,@(when (not (php-ts-mode--test-namespace-name-as-prefix-p))
|
||||
'((qualified_name prefix: "\\" @font-lock-delimiter-face)))
|
||||
(qualified_name (name) @font-lock-constant-face))
|
||||
|
||||
:language 'php
|
||||
|
|
|
|||
|
|
@ -233,23 +233,6 @@
|
|||
;; `python-imenu-format-parent-item-jump-label-function' variables for
|
||||
;; changing the way labels are formatted in the tree version.
|
||||
|
||||
;; If you used python-mode.el you may miss auto-indentation when
|
||||
;; inserting newlines. To achieve the same behavior you have two
|
||||
;; options:
|
||||
|
||||
;; 1) Enable the minor-mode `electric-indent-mode' (enabled by
|
||||
;; default) and use RET. If this mode is disabled use
|
||||
;; `newline-and-indent', bound to C-j.
|
||||
|
||||
;; 2) Add the following hook in your .emacs:
|
||||
|
||||
;; (add-hook 'python-mode-hook
|
||||
;; (lambda ()
|
||||
;; (define-key python-mode-map "\C-m" 'newline-and-indent)))
|
||||
|
||||
;; I'd recommend the first one since you'll get the same behavior for
|
||||
;; all modes out-of-the-box.
|
||||
|
||||
;; Flymake: A Flymake backend, using the pyflakes program by default,
|
||||
;; is provided. You can also use flake8 or pylint by customizing
|
||||
;; `python-flymake-command'.
|
||||
|
|
@ -425,7 +408,7 @@ To customize the Python interpreter for interactive use, modify
|
|||
"Keymap for `python-mode'.")
|
||||
|
||||
(defvar python-ts-mode-map (copy-keymap python-mode-map)
|
||||
"Keymap for `(copy-keymap python-mode-map)'.")
|
||||
"Keymap for `python-ts-mode'.")
|
||||
|
||||
|
||||
;;; Python specialized rx
|
||||
|
|
|
|||
|
|
@ -2661,7 +2661,7 @@ window is included in the count.
|
|||
If ALL-FRAMES is non-nil, count the windows in all frames instead
|
||||
just the selected frame.
|
||||
|
||||
See `walk-windows' for the precise meaning of this argument."
|
||||
See `walk-windows' for the precise meaning of these arguments."
|
||||
(length (window-list-1 nil minibuf all-frames)))
|
||||
|
||||
;;; Resizing windows.
|
||||
|
|
@ -4617,7 +4617,8 @@ Also see `switch-to-prev-buffer-skip-regexp'."
|
|||
"Buffers that `switch-to-prev-buffer' and `switch-to-next-buffer' should skip.
|
||||
The value can either be a regexp or a list of regexps. Buffers whose
|
||||
names match these regexps are skipped by `switch-to-prev-buffer'
|
||||
and `switch-to-next-buffer'.
|
||||
and `switch-to-next-buffer', unless there's no other buffer to
|
||||
switch to.
|
||||
|
||||
Also see `switch-to-prev-buffer-skip'."
|
||||
:type '(choice regexp
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ build should run on Windows 9X and newer systems).
|
|||
When the installation ends, perform the post-installation steps
|
||||
described on this page of the MinGW site:
|
||||
|
||||
http://www.mingw.org/wiki/Getting_Started
|
||||
https://web.archive.org/web/20210106033223/http://www.mingw.org/wiki/Getting_Started
|
||||
|
||||
in the "After Installing You Should ..." section. These steps are
|
||||
important for making your installation complete, and in particular
|
||||
|
|
|
|||
|
|
@ -5270,7 +5270,9 @@ decode_coding_raw_text (struct coding_system *coding)
|
|||
coding->chars_at_source = 1;
|
||||
coding->consumed_char = coding->src_chars;
|
||||
coding->consumed = coding->src_bytes;
|
||||
if (eol_dos && coding->source[coding->src_bytes - 1] == '\r')
|
||||
if (eol_dos
|
||||
&& coding->src_bytes > 0 /* empty source text? */
|
||||
&& coding->source[coding->src_bytes - 1] == '\r')
|
||||
{
|
||||
coding->consumed_char--;
|
||||
coding->consumed--;
|
||||
|
|
|
|||
|
|
@ -3788,7 +3788,8 @@ DEFUN ("unix-sync", Funix_sync, Sunix_sync, 0, 0, "",
|
|||
DEFUN ("file-newer-than-file-p", Ffile_newer_than_file_p, Sfile_newer_than_file_p, 2, 2, 0,
|
||||
doc: /* Return t if file FILE1 is newer than file FILE2.
|
||||
If FILE1 does not exist, the answer is nil;
|
||||
otherwise, if FILE2 does not exist, the answer is t. */)
|
||||
otherwise, if FILE2 does not exist, the answer is t.
|
||||
For existing files, this compares their last-modified times. */)
|
||||
(Lisp_Object file1, Lisp_Object file2)
|
||||
{
|
||||
struct stat st1, st2;
|
||||
|
|
|
|||
|
|
@ -669,6 +669,11 @@ nil, use FUNCTION instead."
|
|||
(eshell-match-command-output "env VAR=hello env" "VAR=hello\n")
|
||||
(should (equal (getenv "VAR") "value"))))
|
||||
|
||||
(ert-deftest esh-var-test/local-variables/env/no-locals ()
|
||||
"Test that \"env command\" works like \"command\"."
|
||||
(with-temp-eshell
|
||||
(eshell-match-command-output "env echo hi" "\\`hi\n")))
|
||||
|
||||
|
||||
;; Variable aliases
|
||||
|
||||
|
|
|
|||
|
|
@ -208,6 +208,21 @@ int main()
|
|||
}
|
||||
=-=-=
|
||||
|
||||
Name: Return Compund Literal
|
||||
|
||||
=-=
|
||||
struct pair { int fst, snd; };
|
||||
struct pair
|
||||
make_pair(int long_identifier_a[], int long_identifier_b[],
|
||||
int offset_a, int offset_b)
|
||||
{
|
||||
int base_offset = 10;
|
||||
return (struct pair) { long_identifier_a[base_offset + offset_b],
|
||||
long_identifier_b[base_offset + offset_b] };
|
||||
}
|
||||
|
||||
=-=-=
|
||||
|
||||
Name: Switch-Case statement
|
||||
|
||||
=-=
|
||||
|
|
@ -486,6 +501,30 @@ namespace A {
|
|||
}
|
||||
=-=-=
|
||||
|
||||
Name: Return Aggregate Initialized Struct
|
||||
|
||||
=-=
|
||||
struct pair { int x, y; }
|
||||
pair
|
||||
make_pair(int long_identifier_a[], int long_identifier_b[],
|
||||
int offset_a, int offset_b)
|
||||
{
|
||||
int base_offset = 10;
|
||||
return { long_identifier_a[base_offset + offset_b],
|
||||
long_identifier_b[base_offset + offset_b] };
|
||||
}
|
||||
=-=
|
||||
struct pair { int x, y; }
|
||||
pair
|
||||
make_pair(int long_identifier_a[], int long_identifier_b[],
|
||||
int offset_a, int offset_b)
|
||||
{
|
||||
int base_offset = 10;
|
||||
return { long_identifier_a[base_offset + offset_b],
|
||||
long_identifier_b[base_offset + offset_b] };
|
||||
}
|
||||
=-=-=
|
||||
|
||||
Code:
|
||||
(lambda ()
|
||||
(c-ts-mode)
|
||||
|
|
|
|||
Loading…
Reference in a new issue