mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-23 07:19:15 +00:00
Merge from origin/emacs-28
8807a4f532
Enable 256 colors in fbterm.bbc23ca8ab
One more fix for find-file.el0cbcaf5119
; Yet another doc fix for 'ff-other-file-alist' (bug#57325)2d9a391727
Recommend using fbterm in the Linux console.a5a92e577c
; * src/window.c (syms_of_window) <window-point-insertion-...4d52fe6b96
* lisp/find-file.el (ff-other-file-alist): Doc fix. (Bug#...d111b5b651
* lisp/info.el (Info-mode): Support the Linux console better.cc945ec0ed
; Fix doc strings in latin1-disp.el195fcc932e
Improve the documentation of glyphless-character display72ae02377e
; * lisp/jit-lock.el (jit-lock-chunk-size): Doc fix.3fb69fad49
Fix documentation of 'glyphless-char-display' # Conflicts: # lisp/international/characters.el # src/xdisp.c
This commit is contained in:
commit
0bd860cc2e
@ -8554,6 +8554,7 @@ Display with @var{graphical} on graphical displays, and with
|
||||
must be one of the display methods described above.
|
||||
@end table
|
||||
|
||||
@vindex glyphless-char@r{ face}
|
||||
@noindent
|
||||
The @code{thin-space}, @code{empty-box}, @code{hex-code}, and
|
||||
@acronym{ASCII} string display methods are drawn with the
|
||||
@ -8618,7 +8619,8 @@ codepoints (typically emojis).
|
||||
|
||||
@item no-font
|
||||
Characters for which there is no suitable font, or which cannot be
|
||||
encoded by the terminal's coding system.
|
||||
encoded by the terminal's coding system, or those for which the
|
||||
text-mode terminal has no glyphs.
|
||||
@end table
|
||||
|
||||
@c FIXME: this can also be 'acronym', but that's not currently
|
||||
|
@ -1602,6 +1602,7 @@ is better to write ``Emacs and XEmacs.''
|
||||
* Filling paragraphs with a single space::
|
||||
* Escape sequences in shell output::
|
||||
* Fullscreen mode on MS-Windows::
|
||||
* Emacs in a Linux console::
|
||||
@end menu
|
||||
|
||||
@node Setting up a customization file
|
||||
@ -3031,6 +3032,102 @@ To compute the correct values for width and height, first maximize the
|
||||
Emacs frame and then evaluate @code{(frame-height)} and
|
||||
@code{(frame-width)} with @kbd{M-:}.
|
||||
|
||||
@node Emacs in a Linux console
|
||||
@section How can I alleviate the limitations of the Linux console?
|
||||
@cindex Console, Linux console, TTY, fbterm
|
||||
|
||||
If possible, we recommend running Emacs inside @command{fbterm}, when
|
||||
in a Linux console. This brings the Linux console on par with most
|
||||
terminal emulators under X. To do this, install @command{fbterm}, for
|
||||
example with the package manager of your GNU/Linux distribution, and
|
||||
execute the command
|
||||
|
||||
@example
|
||||
$ fbterm
|
||||
@end example
|
||||
|
||||
This will create a sample configuration file @file{~/.fbtermrc} in
|
||||
your home directory. Edit that file and change the options
|
||||
@code{font-names} and @code{font-size} if necessary. For the former,
|
||||
you can choose one or more of the lines in the output of the following
|
||||
command, separated by commas:
|
||||
|
||||
@example
|
||||
$ fc-list :spacing=mono family | sed 's/ /\\ /g'
|
||||
@end example
|
||||
|
||||
You can now start Emacs inside @command{fbterm} with the command
|
||||
|
||||
@example
|
||||
$ fbterm -- env TERM=fbterm emacs
|
||||
@end example
|
||||
|
||||
In some versions of @command{fbterm}, setting @env{TERM} to
|
||||
@samp{fbterm} can be omitted. To check whether it is needed, start
|
||||
Emacs inside @command{fbterm} with the command
|
||||
|
||||
@example
|
||||
$ fbterm -- emacs
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
and type @kbd{M-x list-colors-display}. If only 8 colors are
|
||||
displayed, it is necessary; if 256 colors are displayed, it isn't.
|
||||
|
||||
You may want to add an alias for that command in your shell
|
||||
configuration file. For example, if you use Bash, you can add the
|
||||
following line to your @file{~/.bashrc} file:
|
||||
|
||||
@example
|
||||
alias emacs="fbterm -- env TERM=fbterm emacs"
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
or, if you use Emacs both in the Linux console and under X:
|
||||
|
||||
@example
|
||||
[[ "$(tty)" =~ "/dev/tty" ]] && alias emacs="fbterm -- env TERM=fbterm emacs"
|
||||
@end example
|
||||
|
||||
The @command{fbterm} terminal emulator may define a number of key
|
||||
bindings for its own use, some of which conflict with those that Emacs
|
||||
uses. Execute the following two commands as root to ensure that
|
||||
@command{fbterm} does not define these key bindings:
|
||||
|
||||
@example
|
||||
# chmod a-s `which fbterm`
|
||||
# setcap cap_sys_tty_config=-ep `which fbterm`
|
||||
@end example
|
||||
|
||||
If you use Emacs as root, the above is not enough however, because the
|
||||
root user has all privileges. You can use the following command to
|
||||
start Emacs inside @command{fbterm} as root while ensuring that
|
||||
@command{fbterm} does not define any key bindings for its own use:
|
||||
|
||||
@example
|
||||
# capsh --drop=cap_sys_tty_config -- -c "fbterm -- env TERM=fbterm emacs"
|
||||
@end example
|
||||
|
||||
Again you may want to add a shortcut for that command in the shell
|
||||
configuration file of the root user. In this case however, it is not
|
||||
possible to use an alias, because the command line arguments passed to
|
||||
Emacs need to be inserted in the string at the end of the command. A
|
||||
wrapper script or a function can be used to do that. For example, if
|
||||
you use Bash, you can add the following function in the root user
|
||||
@file{~/.bashrc} file:
|
||||
|
||||
@example
|
||||
function emacs ()
|
||||
@{
|
||||
CMD="fbterm -- env TERM=fbterm emacs "
|
||||
for ARG in "$@@"
|
||||
do
|
||||
CMD="$CMD '$ARG' "
|
||||
done
|
||||
capsh --drop=cap_sys_tty_config -- -c "$CMD"
|
||||
@}
|
||||
@end example
|
||||
|
||||
@c ------------------------------------------------------------
|
||||
@node Bugs and problems
|
||||
@chapter Bugs and problems
|
||||
|
@ -2267,6 +2267,13 @@ term/xterm.el) for more details.
|
||||
|
||||
*** Linux console problems with double-width characters
|
||||
|
||||
If possible, we recommend running Emacs inside fbterm, when in a Linux
|
||||
console (see the node "Emacs in a Linux console" in the Emacs FAQ).
|
||||
Most Unicode characters should then be displayed correctly.
|
||||
|
||||
If that is not possible, the following may be useful to alleviate the
|
||||
problem of displaying Unicode characters in a raw console.
|
||||
|
||||
The Linux console declares UTF-8 encoding, but supports only a limited
|
||||
number of Unicode characters, and can cause Emacs produce corrupted or
|
||||
garbled display with some unusual characters and sequences. Emacs 28
|
||||
|
@ -193,18 +193,32 @@ The value could be an alist or a symbol whose value is an alist.
|
||||
Each element of the alist has the form
|
||||
|
||||
(REGEXP (EXTENSION...))
|
||||
or
|
||||
(REGEXP FUNCTION)
|
||||
|
||||
where REGEXP is the regular expression matching a file's extension,
|
||||
EXTENSIONs is the list of literal file-name extensions to search for,
|
||||
and FUNCTION is a function of one argument, the current file's name,
|
||||
that returns the list of extensions to search for.
|
||||
The list of extensions should contain the most used extensions before the
|
||||
others, since the search algorithm searches sequentially through each
|
||||
directory specified in `ff-search-directories'. If a file is not found,
|
||||
a new one is created with the first matching extension (`.cc' yields `.hh').
|
||||
This alist should be set by the major mode."
|
||||
and EXTENSIONs is the list of literal file-name extensions to search
|
||||
for. The list of extensions should contain the most used extensions
|
||||
before the others, since the search algorithm searches sequentially
|
||||
through each directory specified in `ff-search-directories'.
|
||||
|
||||
Alist elements can also be of the form
|
||||
|
||||
(REGEXP FUNCTION)
|
||||
|
||||
where FUNCTION is a function of one argument, the current file's name,
|
||||
that returns the list of possible names of the corresponding files, with
|
||||
or without leading directories. Note the difference: FUNCTION returns
|
||||
the list of file names, not their extensions. This is for the case when
|
||||
REGEXP is not enough to determine the file name of the other file.
|
||||
|
||||
If a file is not found, a new one is created with the first
|
||||
matching extension or name (e.g., `.cc' yields `.hh').
|
||||
|
||||
This alist should be set by the major mode.
|
||||
|
||||
Note: if an element of the alist names a FUNCTION as its cdr, that
|
||||
function must return a non-nil list of file-names. It cannot
|
||||
return nil, nor can it signal in any way a failure to find a suitable
|
||||
list of file names."
|
||||
:type '(choice (repeat (list regexp (choice (repeat string) function)))
|
||||
symbol))
|
||||
|
||||
@ -615,7 +629,7 @@ name of the first file found."
|
||||
(while (and suffixes (not found))
|
||||
|
||||
(setq filename (concat fname-stub this-suffix))
|
||||
(setq file (concat dir "/" filename))
|
||||
(setq file (expand-file-name filename dir))
|
||||
|
||||
(if (not ff-quiet-mode)
|
||||
(message "Finding %s..." file))
|
||||
|
@ -4451,9 +4451,12 @@ Advanced commands:
|
||||
(setq buffer-read-only t)
|
||||
(setq Info-tag-table-marker (make-marker))
|
||||
(unless (or (display-multi-font-p)
|
||||
(coding-system-equal
|
||||
(coding-system-base (terminal-coding-system))
|
||||
'utf-8))
|
||||
(and (coding-system-equal
|
||||
(coding-system-base (terminal-coding-system))
|
||||
'utf-8)
|
||||
;; The Linux console has limited character
|
||||
;; repertoire even when its encoding is UTF-8.
|
||||
(not (equal (tty-type) "linux"))))
|
||||
(dolist (elt info-symbols-and-replacements)
|
||||
(let ((ch (car elt))
|
||||
(repl (cdr elt)))
|
||||
|
@ -1661,12 +1661,14 @@ GROUP must be one of these symbols:
|
||||
like U+2069 (PDI) and U+202B (RLE).
|
||||
`variation-selectors':
|
||||
Characters in the range U+FE00..U+FE0F and
|
||||
U+E0100..U+E01EF, used for selecting alternate glyph
|
||||
presentations, such as Emoji vs Text presentation, of
|
||||
the preceding character(s).
|
||||
`no-font': For GUI frames, characters for which no suitable
|
||||
font is found; for text-mode frames, characters
|
||||
that cannot be encoded by `terminal-coding-system'.
|
||||
U+E0100..U+E01EF, used for choosing between
|
||||
glyph variations, such as Emoji vs Text
|
||||
presentation, of the preceding character(s).
|
||||
`no-font': For GUI frames, characters for which no
|
||||
suitable font is found; for text-mode frames,
|
||||
characters that cannot be encoded by
|
||||
`terminal-coding-system' or those for which
|
||||
the terminal has no glyphs.
|
||||
|
||||
METHOD must be one of these symbols:
|
||||
`zero-width': don't display.
|
||||
@ -1680,7 +1682,10 @@ METHOD must be one of these symbols:
|
||||
Do not set its value directly from Lisp; the value takes effect
|
||||
only via a custom `:set'
|
||||
function (`update-glyphless-char-display'), which updates
|
||||
`glyphless-char-display'."
|
||||
`glyphless-char-display'.
|
||||
|
||||
See also the `glyphless-char' face, which is used to display the
|
||||
visual representation of these characters."
|
||||
:version "28.1"
|
||||
:type '(alist :key-type (symbol :tag "Character Group")
|
||||
:value-type (symbol :tag "Display Method"))
|
||||
|
@ -87,7 +87,7 @@ This option also treats some characters in the `mule-unicode-...'
|
||||
charsets if you don't have a Unicode font with which to display them.
|
||||
|
||||
Setting this variable directly does not take effect;
|
||||
use either \\[customize] or the function `latin1-display'."
|
||||
use either \\[customize] or the command `latin1-display'."
|
||||
:group 'latin1-display
|
||||
:type 'boolean
|
||||
:require 'latin1-disp
|
||||
@ -746,7 +746,7 @@ This uses the transliterations of the Lynx browser. The display isn't
|
||||
changed if the display can render Unicode characters.
|
||||
|
||||
Setting this variable directly does not take effect;
|
||||
use either \\[customize] or the function `latin1-display'."
|
||||
use either \\[customize] or the command `latin1-display-ucs-per-lynx'."
|
||||
:group 'latin1-display
|
||||
:type 'boolean
|
||||
:require 'latin1-disp
|
||||
|
@ -45,9 +45,12 @@ Preserves the `buffer-modified-p' state of the current buffer."
|
||||
:group 'font-lock)
|
||||
|
||||
(defcustom jit-lock-chunk-size 1500
|
||||
"Jit-lock fontifies chunks of at most this many characters at a time.
|
||||
"Jit-lock asks to fontify chunks of at most this many characters at a time.
|
||||
|
||||
This variable controls both `display-time' and stealth fontification.
|
||||
The actual size of the fontified chunk of text can be different,
|
||||
depending on what the `fontification-functions' actually decide to do.
|
||||
|
||||
This variable controls both display-time and stealth fontifications.
|
||||
|
||||
The optimum value is a little over the typical number of buffer
|
||||
characters which fit in a typical window."
|
||||
|
27
lisp/term/fbterm.el
Normal file
27
lisp/term/fbterm.el
Normal file
@ -0,0 +1,27 @@
|
||||
;;; fbterm.el -*- lexical-binding:t -*-
|
||||
|
||||
;; Copyright (C) 2022 Free Software Foundation, Inc.
|
||||
|
||||
;; Note that, in some versions of fbterm, the TERM environment
|
||||
;; variable is set to "linux". When that's the case, the code below
|
||||
;; will not be executed, and only 8 colors will be available. It is
|
||||
;; therefore necessary, with these versions of fbterm, to set that
|
||||
;; environment variable to "fbterm" to enable its 256 color mode
|
||||
;; extension. See also the node "Emacs in a Linux console" of the
|
||||
;; Emacs FAQ.
|
||||
|
||||
(require 'term/xterm)
|
||||
|
||||
(defun terminal-init-fbterm ()
|
||||
"Terminal initialization function for fbterm."
|
||||
|
||||
;; fbterm can't display underlines, even though its terminfo data
|
||||
;; says it can.
|
||||
(tty-no-underline)
|
||||
|
||||
;; fbterm supports xterm's 256 color mode extension.
|
||||
(xterm-register-default-colors xterm-standard-colors))
|
||||
|
||||
(provide 'term/fbterm)
|
||||
|
||||
;;; fbterm.el ends here
|
@ -8363,7 +8363,8 @@ on their symbols to be controlled by this variable. */);
|
||||
Vscroll_preserve_screen_position = Qnil;
|
||||
|
||||
DEFVAR_LISP ("window-point-insertion-type", Vwindow_point_insertion_type,
|
||||
doc: /* Type of marker to use for `window-point'. */);
|
||||
doc: /* Insertion type of marker to use for `window-point'.
|
||||
See `marker-insertion-type' for the meaning of the possible values. */);
|
||||
Vwindow_point_insertion_type = Qnil;
|
||||
DEFSYM (Qwindow_point_insertion_type, "window-point-insertion-type");
|
||||
|
||||
|
28
src/xdisp.c
28
src/xdisp.c
@ -7842,7 +7842,13 @@ lookup_glyphless_char_display (int c, struct it *it)
|
||||
&& CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (Vglyphless_char_display)) >= 1)
|
||||
{
|
||||
if (c >= 0)
|
||||
glyphless_method = CHAR_TABLE_REF (Vglyphless_char_display, c);
|
||||
{
|
||||
glyphless_method = CHAR_TABLE_REF (Vglyphless_char_display, c);
|
||||
if (CONSP (glyphless_method))
|
||||
glyphless_method = FRAME_WINDOW_P (it->f)
|
||||
? XCAR (glyphless_method)
|
||||
: XCDR (glyphless_method);
|
||||
}
|
||||
else
|
||||
glyphless_method = XCHAR_TABLE (Vglyphless_char_display)->extras[0];
|
||||
|
||||
@ -31773,9 +31779,9 @@ gui_produce_glyphs (struct it *it)
|
||||
/* When no suitable font is found, display this character by
|
||||
the method specified in the first extra slot of
|
||||
Vglyphless_char_display. */
|
||||
Lisp_Object acronym = lookup_glyphless_char_display (-1, it);
|
||||
Lisp_Object acronym = lookup_glyphless_char_display (-1, it);
|
||||
|
||||
eassert (it->what == IT_GLYPHLESS);
|
||||
eassert (it->what == IT_GLYPHLESS);
|
||||
produce_glyphless_glyph (it, true,
|
||||
STRINGP (acronym) ? acronym : Qnil);
|
||||
goto done;
|
||||
@ -37109,16 +37115,20 @@ Each element, if non-nil, should be one of the following:
|
||||
`empty-box': display as an empty box
|
||||
`thin-space': display as 1-pixel width space
|
||||
`zero-width': don't display
|
||||
Any other value is interpreted as `empty-box'.
|
||||
An element may also be a cons cell (GRAPHICAL . TEXT), which specifies the
|
||||
display method for graphical terminals and text terminals respectively.
|
||||
GRAPHICAL and TEXT should each have one of the values listed above.
|
||||
|
||||
The char-table has one extra slot to control the display of a character for
|
||||
which no font is found. This slot only takes effect on graphical terminals.
|
||||
Its value should be an ASCII acronym string, `hex-code', `empty-box', or
|
||||
`thin-space'. It could also be a cons cell of any two of these, to specify
|
||||
separate values for graphical and text terminals.
|
||||
The default is `empty-box'.
|
||||
The char-table has one extra slot to control the display of characters
|
||||
for which no font is found on graphical terminals, and characters that
|
||||
cannot be displayed by text-mode terminals. Its value should be an
|
||||
ASCII acronym string, `hex-code', `empty-box', or `thin-space'. It
|
||||
could also be a cons cell of any two of these, to specify separate
|
||||
values for graphical and text terminals. The default is `empty-box'.
|
||||
|
||||
With the obvious exception of `zero-width', all the other representations
|
||||
are displayed using the face `glyphless-char'.
|
||||
|
||||
If a character has a non-nil entry in an active display table, the
|
||||
display table takes effect; in this case, Emacs does not consult
|
||||
|
Loading…
Reference in New Issue
Block a user