merge changes in emacs-23 branch
This commit is contained in:
commit
9e69cb054d
18 changed files with 543 additions and 291 deletions
|
@ -1,3 +1,7 @@
|
|||
2010-08-26 Sven Joachim <svenjoac@gmx.de>
|
||||
|
||||
* emacs.1: Mention "maximized" value for the "fullscreen" X resource.
|
||||
|
||||
2010-05-07 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* Version 23.2 released.
|
||||
|
|
|
@ -403,11 +403,12 @@ sets the window's text color.
|
|||
The desired fullscreen size.
|
||||
The value can be one of
|
||||
.IR fullboth ,
|
||||
.IR maximized ,
|
||||
.IR fullwidth ,
|
||||
or
|
||||
.IR fullheight ,
|
||||
which correspond to the command-line options `\-fs', `\-fw', and
|
||||
`\-fh', respectively.
|
||||
which correspond to the command-line options `\-fs', `-mm', `\-fw',
|
||||
and `\-fh', respectively.
|
||||
Note that this applies to the initial frame only.
|
||||
.TP
|
||||
.BR geometry " (class " Geometry )
|
||||
|
|
|
@ -30,6 +30,19 @@
|
|||
|
||||
Sync with Tramp 2.1.19.
|
||||
|
||||
* tramp.texi (Inline methods, Default Method): Mention
|
||||
`tramp-inline-compress-start-size'. Remove "kludgy" phrase. Remove
|
||||
remark about doubled "-t" argument.
|
||||
(Auto-save and Backup): Remove reference to Emacs 21.
|
||||
(Filename Syntax): Describe port numbers.
|
||||
(Frequently Asked Questions): Adapt supported (X)Emacs versions. Adapt
|
||||
supported MS Windows versions. Remove obsolete URL. Recommend "sshx"
|
||||
and "scpx" for echoing shells. Use the $() syntax, texi2dvi reports
|
||||
errors with the backquotes.
|
||||
(External packages): File attributes cache flushing for asynchronous
|
||||
processes.
|
||||
(Traces and Profiles): Describe verbose level 9.
|
||||
|
||||
* trampver.texi: Update release number.
|
||||
|
||||
2010-08-23 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
|
|
@ -6,6 +6,10 @@
|
|||
|
||||
* NEWS: dbus.el supports alternative buses.
|
||||
|
||||
2010-08-22 Alex Harsanyi <harsanyi@mac.com> (tiny change)
|
||||
|
||||
* emacs3.py: Import imp module and use it (Bug#5756).
|
||||
|
||||
2010-08-14 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* tutorials/TUTORIAL.he: Use MAQAF instead of hyphen where appropriate.
|
||||
|
|
|
@ -1,10 +1,3 @@
|
|||
"""
|
||||
Warning: This file is automatically generated from emacs2.py with the
|
||||
2to3 script. Do not hand edit.
|
||||
"""
|
||||
|
||||
"""Definitions used by commands sent to inferior Python in python.el."""
|
||||
|
||||
# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
# Author: Dave Love <fx@gnu.org>
|
||||
|
||||
|
@ -23,7 +16,7 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import os, sys, traceback, inspect, __main__
|
||||
import os, sys, traceback, inspect, imp, __main__
|
||||
|
||||
try:
|
||||
set
|
||||
|
@ -216,7 +209,7 @@ def eimport (mod, dir):
|
|||
try:
|
||||
try:
|
||||
if mod in __dict__ and inspect.ismodule (__dict__[mod]):
|
||||
reload (__dict__[mod])
|
||||
imp.reload (__dict__[mod])
|
||||
else:
|
||||
__dict__[mod] = __import__ (mod)
|
||||
except:
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2010-08-28 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* quail/japanese.el (quail-japanese-update-translation): Fix
|
||||
handling of invalid key.
|
||||
|
||||
2010-08-15 Andreas Schwab <schwab@linux-m68k.org>
|
||||
|
||||
* quail/vntelex.el ("vietnamese-telex"): Doc fix.
|
||||
|
|
|
@ -43,20 +43,25 @@
|
|||
(or quail-current-str quail-current-key)
|
||||
""))
|
||||
(if (integerp control-flag)
|
||||
(if (= control-flag 0)
|
||||
(setq quail-current-str (aref quail-current-key 0))
|
||||
(cond ((= (aref quail-current-key 0) ?n)
|
||||
(let ((keylen (length quail-current-key)))
|
||||
(cond ((= control-flag 0)
|
||||
(setq quail-current-str (aref quail-current-key 0)
|
||||
control-flag t))
|
||||
((= (aref quail-current-key 0) ?n)
|
||||
(setq quail-current-str ?$B$s(B)
|
||||
(if (and quail-japanese-use-double-n
|
||||
(> keylen 0)
|
||||
(= (aref quail-current-key 1) ?n))
|
||||
(setq control-flag t)))
|
||||
((= (aref quail-current-key 0) (aref quail-current-key 1))
|
||||
((and (> keylen 1)
|
||||
(= (aref quail-current-key 0) (aref quail-current-key 1)))
|
||||
(setq quail-current-str ?$B$C(B))
|
||||
(t
|
||||
(setq quail-current-str (aref quail-current-key 0))))
|
||||
(if (integerp control-flag)
|
||||
(setq unread-command-events
|
||||
(list (aref quail-current-key control-flag)))))))
|
||||
(string-to-list
|
||||
(substring quail-current-key control-flag)))))))
|
||||
control-flag)
|
||||
|
||||
;; Convert Hiragana <-> Katakana in the current translation region.
|
||||
|
|
280
lisp/ChangeLog
280
lisp/ChangeLog
|
@ -1,3 +1,14 @@
|
|||
2010-08-31 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* international/mule-cmds.el (standard-display-european-internal):
|
||||
Setup standard-display-table for 8-bit characters by storing 8-bit
|
||||
characters in the element vector.
|
||||
|
||||
* disp-table.el (standard-display-8bit): Setup
|
||||
standard-display-table for 8-bit characters by storing 8-bit
|
||||
characters in the element vector.
|
||||
(standard-display-european): Likewise.
|
||||
|
||||
2010-08-31 Masatake YAMATO <yamato@redhat.com>
|
||||
|
||||
* textmodes/nroff-mode.el (nroff-view): New command.
|
||||
|
@ -157,6 +168,57 @@
|
|||
|
||||
* whitespace.el (whitespace-style): Adjust type declaration.
|
||||
|
||||
2010-08-26 Magnus Henoch <magnus.henoch@gmail.com>
|
||||
|
||||
* net/tramp-gvfs.el (tramp-gvfs-handle-copy-file): Do not pass
|
||||
empty argument to gvfs-copy.
|
||||
|
||||
2010-08-26 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* net/tramp-compat.el (tramp-compat-delete-file): Rewrite to
|
||||
handle new TRASH arg of `delete-file'.
|
||||
|
||||
2010-08-26 Christian Lynbech <christian.lynbech@tieto.com> (tiny change)
|
||||
|
||||
* net/tramp.el (tramp-handle-insert-directory): Don't use
|
||||
`forward-word', its default syntax could be changed.
|
||||
|
||||
2010-08-26 Toru TSUNEYOSHI <t_tuneyosi@hotmail.com>
|
||||
Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
Implement compression for inline methods.
|
||||
|
||||
* net/tramp.el (tramp-inline-compress-start-size): New defcustom.
|
||||
(tramp-copy-size-limit): Allow also nil.
|
||||
(tramp-inline-compress-commands): New defconst.
|
||||
(tramp-find-inline-compress, tramp-get-inline-compress)
|
||||
(tramp-get-inline-coding): New defuns.
|
||||
(tramp-get-remote-coding, tramp-get-local-coding): Remove,
|
||||
replaced by `tramp-get-inline-coding'.
|
||||
(tramp-handle-file-local-copy, tramp-handle-write-region)
|
||||
(tramp-method-out-of-band-p): Use `tramp-get-inline-coding'.
|
||||
|
||||
2010-08-26 Noah Lavine <noah549@gmail.com> (tiny change)
|
||||
|
||||
Detect ssh 'ControlMaster' argument automatically in some cases.
|
||||
|
||||
* net/tramp.el (tramp-detect-ssh-controlmaster): New defun.
|
||||
(tramp-default-method): Use it.
|
||||
|
||||
2010-08-26 Karel Klíč <kklic@redhat.com>
|
||||
|
||||
* net/tramp.el (tramp-file-name-for-operation):
|
||||
Add file-selinux-context.
|
||||
|
||||
2010-08-26 Łukasz Stelmach <lukasz.stelmach@iem.pw.edu.pl> (tiny change)
|
||||
|
||||
* play/cookie1.el (read-cookie): Fix off-by-one error (bug#6921).
|
||||
|
||||
2010-08-26 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* simple.el (beginning-of-buffer, end-of-buffer): Doc fix
|
||||
(Bug#6907).
|
||||
|
||||
2010-08-26 Nathan Weizenbaum <nweiz@cressida.sea.corp.google.com> (tiny change)
|
||||
|
||||
* progmodes/js.el: Make indentation more customizable (Bug#6914).
|
||||
|
@ -180,6 +242,211 @@
|
|||
|
||||
Sync with Tramp 2.1.19.
|
||||
|
||||
* net/tramp-cmds.el (tramp-cleanup-all-connections)
|
||||
(tramp-reporter-dump-variable, tramp-load-report-modules)
|
||||
(tramp-append-tramp-buffers): Use `tramp-compat-funcall'.
|
||||
(tramp-bug): Recommend setting of `tramp-verbose' to 9.
|
||||
|
||||
* net/tramp-compat.el (top): Do not autoload
|
||||
`tramp-handle-file-remote-p'. Load tramp-util.el and tramp-vc.el
|
||||
only when `start-file-process' is not bound.
|
||||
(byte-compile-not-obsolete-vars): Define if not bound.
|
||||
(tramp-compat-funcall): New defmacro.
|
||||
(tramp-compat-line-beginning-position)
|
||||
(tramp-compat-line-end-position)
|
||||
(tramp-compat-temporary-file-directory)
|
||||
(tramp-compat-make-temp-file, tramp-compat-file-attributes)
|
||||
(tramp-compat-copy-file, tramp-compat-copy-directory)
|
||||
(tramp-compat-delete-file, tramp-compat-delete-directory)
|
||||
(tramp-compat-number-sequence, tramp-compat-process-running-p):
|
||||
Use it.
|
||||
(tramp-advice-file-expand-wildcards): Do not use
|
||||
`tramp-handle-file-remote-p'.
|
||||
(tramp-compat-make-temp-file): Simplify fallback implementation.
|
||||
(tramp-compat-copy-file): Add PRESERVE-SELINUX-CONTEXT.
|
||||
(tramp-compat-copy-tree): Remove function.
|
||||
(tramp-compat-delete-file): New defun.
|
||||
(tramp-compat-delete-directory): Provide implementation for older
|
||||
Emacsen.
|
||||
(tramp-compat-file-attributes): Handle only
|
||||
`wrong-number-of-arguments' error.
|
||||
|
||||
* net/tramp-fish.el (tramp-fish-handle-copy-file): Add
|
||||
PRESERVE_SELINUX_CONTEXT.
|
||||
(tramp-fish-handle-delete-file): Add TRASH arg.
|
||||
(tramp-fish-handle-directory-files-and-attributes):
|
||||
Do not use `tramp-fish-handle-file-attributes.
|
||||
(tramp-fish-handle-file-local-copy)
|
||||
(tramp-fish-handle-insert-file-contents)
|
||||
(tramp-fish-maybe-open-connection): Use `with-progress-reporter'.
|
||||
|
||||
* net/tramp-gvfs.el (top): Require url-util.
|
||||
(tramp-gvfs-mount-point): Remove.
|
||||
(tramp-gvfs-file-name-handler-alist): Add `file-selinux-context'
|
||||
and `set-file-selinux-context'.
|
||||
(tramp-gvfs-stringify-dbus-message, tramp-gvfs-send-command)
|
||||
(tramp-gvfs-handle-file-selinux-context)
|
||||
(tramp-gvfs-handle-set-file-selinux-context): New defuns.
|
||||
(with-tramp-dbus-call-method): Format trace message.
|
||||
(tramp-gvfs-handle-copy-file): Handle PRESERVE-SELINUX-CONTEXT.
|
||||
(tramp-gvfs-handle-copy-file, tramp-gvfs-handle-rename-file):
|
||||
Implement backup call, when operation on local files fails. Use
|
||||
progress reporter. Flush properties of changed files.
|
||||
(tramp-gvfs-handle-delete-file): Add TRASH arg. Use
|
||||
`tramp-compat-delete-file'.
|
||||
(tramp-gvfs-handle-expand-file-name): Expand "~/".
|
||||
(tramp-gvfs-handle-make-directory): Make more traces.
|
||||
(tramp-gvfs-handle-write-region): Protect deleting tmpfile.
|
||||
(tramp-gvfs-url-file-name): Hexify file name in url.
|
||||
(tramp-gvfs-fuse-file-name): Take also prefix (like dav shares)
|
||||
into account for the resulting file name.
|
||||
(tramp-gvfs-handler-askquestion): Preserve current message, in
|
||||
order to let progress reporter continue afterwards. (Bug#6257)
|
||||
Return dummy mountpoint, when the answer is "no". See
|
||||
`tramp-gvfs-maybe-open-connection'.
|
||||
(tramp-gvfs-handler-mounted-unmounted)
|
||||
(tramp-gvfs-connection-mounted-p): Test also for new mountspec
|
||||
attribute "default_location". Set "prefix" property. Handle
|
||||
default-location.
|
||||
(tramp-gvfs-mount-spec): Return both prefix and mountspec.
|
||||
(tramp-gvfs-maybe-open-connection): Test, whether mountpoint
|
||||
exists. Raise an error, if not (due to a corresponding answer
|
||||
"no" in interactive questions, for example). Use
|
||||
`tramp-compat-funcall'.
|
||||
|
||||
* net/tramp-imap.el (top): Autoload `epg-make-context'.
|
||||
(tramp-imap-handle-copy-file): Add PRESERVE-SELINUX-CONTEXT.
|
||||
(tramp-imap-do-copy-or-rename-file)
|
||||
(tramp-imap-handle-insert-file-contents)
|
||||
(tramp-imap-handle-file-local-copy): Use `with-progress-reporter'.
|
||||
(tramp-imap-handle-delete-file): Add TRASH arg.
|
||||
|
||||
* net/tramp-smb.el (tramp-smb-handle-copy-file): Add
|
||||
PRESERVE-SELINUX-CONTEXT.
|
||||
(tramp-smb-handle-copy-file)
|
||||
(tramp-smb-handle-file-local-copy, tramp-smb-handle-rename-file)
|
||||
(tramp-smb-handle-write-region, tramp-smb-maybe-open-connection):
|
||||
Use `with-progress-reporter'.
|
||||
(tramp-smb-handle-delete-file): Add TRASH arg.
|
||||
|
||||
* net/tramp.el (tramp-methods): Move hostname to the end in all
|
||||
ssh `tramp-login-args'. Add `tramp-async-args' attribute where
|
||||
appropriate.
|
||||
(tramp-verbose): Describe verbose level 9.
|
||||
(tramp-completion-function-alist)
|
||||
(tramp-file-name-regexp, tramp-chunksize)
|
||||
(tramp-local-coding-commands, tramp-remote-coding-commands)
|
||||
(with-connection-property, tramp-completion-mode-p)
|
||||
(tramp-action-process-alive, tramp-action-out-of-band)
|
||||
(tramp-check-for-regexp, tramp-file-name-p, tramp-equal-remote)
|
||||
(tramp-exists-file-name-handler): Fix docstring.
|
||||
(tramp-remote-process-environment): Use `format' instead of
|
||||
`concat'. Protect version string by apostroph.
|
||||
(tramp-shell-prompt-pattern): Do not use a shy group in case of
|
||||
XEmacs.
|
||||
(tramp-file-name-regexp-unified)
|
||||
(tramp-completion-file-name-regexp-unified): On W32 systems, do
|
||||
not regard the volume letter as remote filename. (Bug#5447)
|
||||
(tramp-perl-file-attributes)
|
||||
(tramp-perl-directory-files-and-attributes): Don't pass "$3".
|
||||
(tramp-vc-registered-read-file-names): Read input as
|
||||
here-document, otherwise the command could exceed maximum length
|
||||
of command line.
|
||||
(tramp-file-name-handler-alist): Add `file-selinux-context' and
|
||||
`set-file-selinux-context'.
|
||||
(tramp-debug-message): Add `tramp-compat-funcall' to ignored
|
||||
backtrace functions.
|
||||
(tramp-error-with-buffer): Don't show the connection buffer when
|
||||
we are in completion mode.
|
||||
(tramp-progress-reporter-update, tramp-remote-selinux-p)
|
||||
(tramp-handle-file-selinux-context)
|
||||
(tramp-handle-set-file-selinux-context, tramp-process-sentinel)
|
||||
(tramp-connectable-p, tramp-open-shell, tramp-get-remote-trash):
|
||||
New defuns.
|
||||
(with-progress-reporter): New defmacro.
|
||||
(tramp-debug-outline-regexp): New defconst.
|
||||
(top, tramp-rfn-eshadow-setup-minibuffer)
|
||||
(tramp-rfn-eshadow-update-overlay, tramp-handle-set-file-times)
|
||||
(tramp-handle-dired-compress-file, tramp-handle-shell-command)
|
||||
(tramp-completion-mode-p, tramp-check-for-regexp)
|
||||
(tramp-open-connection-setup-interactive-shell)
|
||||
(tramp-compute-multi-hops, tramp-read-passwd, tramp-clear-passwd)
|
||||
(tramp-time-diff, tramp-coding-system-change-eol-conversion)
|
||||
(tramp-set-process-query-on-exit-flag, tramp-unload-tramp):
|
||||
Use `tramp-compat-funcall'.
|
||||
(tramp-handle-make-symbolic-link): Flush file properties.
|
||||
(tramp-handle-load, tramp-handle-file-local-copy)
|
||||
(tramp-handle-insert-file-contents, tramp-handle-write-region)
|
||||
(tramp-handle-vc-registered, tramp-maybe-send-script)
|
||||
(tramp-find-shell): Use `with-progress-reporter'.
|
||||
(tramp-do-file-attributes-with-stat): Add space in format string,
|
||||
in order to work around a bug in pdksh. Reported by Gilles Pion
|
||||
<gpion@lfdj.com>.
|
||||
(tramp-handle-verify-visited-file-modtime): Do not send a command
|
||||
when the connection is not established.
|
||||
(tramp-handle-set-file-times): Simplify the check for utc.
|
||||
(tramp-handle-directory-files-and-attributes)
|
||||
(tramp-get-remote-path): Use `copy-tree'.
|
||||
(tramp-completion-handle-file-name-all-completions): Ensure, that
|
||||
non remote files are still checked. Oops.
|
||||
(tramp-handle-copy-file, tramp-do-copy-or-rename-file): Handle
|
||||
PRESERVE-SELINUX-CONTEXT.
|
||||
(tramp-do-copy-or-rename-file): Add progress reporter.
|
||||
(tramp-do-copy-or-rename-file-directly): Do not use
|
||||
`tramp-handle-file-remote-p'.
|
||||
(tramp-do-copy-or-rename-file-out-of-band):
|
||||
Use `tramp-compat-delete-directory'.
|
||||
(tramp-do-copy-or-rename-file-out-of-band)
|
||||
(tramp-compute-multi-hops, tramp-maybe-open-connection):
|
||||
Use `format-spec-make'.
|
||||
(tramp-handle-delete-file): Add TRASH arg.
|
||||
(tramp-handle-dired-uncache): Flush directory cache, not only file
|
||||
cache.
|
||||
(tramp-handle-expand-file-name)
|
||||
(tramp-completion-handle-file-name-all-completions)
|
||||
(tramp-completion-handle-file-name-completion): Use
|
||||
`tramp-connectable-p'.
|
||||
(tramp-handle-start-file-process): Set connection property "vec".
|
||||
Use it, in order to invalidate file caches. Check only for
|
||||
`remote-tty' process property.
|
||||
Implement tty setting. (Bug#4604, Bug#6360)
|
||||
(tramp-file-name-for-operation): Add `call-process-region' and
|
||||
`set-file-selinux-context'.
|
||||
(tramp-find-foreign-file-name-handler)
|
||||
(tramp-advice-make-auto-save-file-name)
|
||||
(tramp-set-auto-save-file-modes): Remove superfluous check for
|
||||
`stringp'. This is done inside `tramp-tramp-file-p'.
|
||||
(tramp-file-name-handler): Trace 'quit. Catch the error for some
|
||||
operations when we are in completion mode. This gives the user
|
||||
the chance to correct the file name in the minibuffer.
|
||||
(tramp-completion-mode-p): Use `non-essential'.
|
||||
(tramp-handle-file-name-all-completions): Backward/ XEmacs
|
||||
compatibility: Use `completion-ignore-case' if
|
||||
`read-file-name-completion-ignore-case' does not exist.
|
||||
(tramp-get-debug-buffer): Use `tramp-debug-outline-regexp'.
|
||||
(tramp-find-shell, tramp-open-connection-setup-interactive-shell):
|
||||
`tramp-open-shell'.
|
||||
(tramp-action-password): Hide password prompt before next run.
|
||||
(tramp-process-actions): Widen connection buffer for the trace.
|
||||
(tramp-open-connection-setup-interactive-shell): Set `remote-tty'
|
||||
process property. Trace stty settings if `tramp-verbose' >= 9.
|
||||
Apply workaround for IRIX64 bug. Move argument of last
|
||||
`tramp-send-command' where it belongs to.
|
||||
(tramp-maybe-open-connection): Use `async-args' and `gw-args' in
|
||||
front of `login-args'.
|
||||
(tramp-get-ls-command, tramp-get-ls-command-with-dired): Run tests
|
||||
on "/dev/null" instead of "/".
|
||||
(tramp-get-ls-command-with-dired): Make test for "--dired"
|
||||
stronger.
|
||||
(tramp-set-auto-save-file-modes): Adapt version check.
|
||||
(tramp-set-process-query-on-exit-flag): Fix wrong parentheses.
|
||||
(tramp-handle-process-file): Call the program in a subshell, in
|
||||
order to preserve working directory.
|
||||
(tramp-handle-shell-command): Don't use hard-wired "/bin/sh" but
|
||||
`tramp-remote-sh' from `tramp-methods'.
|
||||
(tramp-get-ls-command): Make test for "--color=never" stronger.
|
||||
(tramp-check-for-regexp): Use (forward-line 1).
|
||||
|
||||
* net/trampver.el: Update release number.
|
||||
|
||||
2010-08-26 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
@ -265,6 +532,11 @@
|
|||
* mouse.el (mouse-yank-primary): Avoid setting primary when
|
||||
deactivating the mark (Bug#6872).
|
||||
|
||||
2010-08-23 Chris Foote <chris@foote.com.au> (tiny change)
|
||||
|
||||
* progmodes/python.el (python-block-pairs): Allow use of "finally"
|
||||
with "else" (Bug#3991).
|
||||
|
||||
2010-08-23 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* net/dbus.el: Accept UNIX domain sockets as bus address.
|
||||
|
@ -291,13 +563,19 @@
|
|||
* startup.el (command-line-1): Issue warning for ignored arguments
|
||||
--unibyte, etc (Bug#6886).
|
||||
|
||||
2010-08-22 Leo <sdl.web@gmail.com>
|
||||
|
||||
* net/rcirc.el (rcirc-add-or-remove): Accept a list of elements.
|
||||
(ignore, bright, dim, keyword): Split list of nicknames before
|
||||
passing to rcirc-add-or-remove (Bug#6894).
|
||||
|
||||
2010-08-22 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* emacs-lisp/easy-mmode.el (define-minor-mode): Doc fix (Bug#6880).
|
||||
|
||||
2010-08-22 Leo <sdl.web@gmail.com>
|
||||
|
||||
Fix buffer-list rename&refresh after after killing a buffer in ido.
|
||||
Fix buffer-list rename&refresh after killing a buffer in ido.
|
||||
* lisp/ido.el: Revert Óscar's.
|
||||
(ido-kill-buffer-at-head): Exit the minibuffer with ido-exit=refresh.
|
||||
Remember the buffers at head, rather than their name.
|
||||
|
|
|
@ -110,11 +110,27 @@ Valid symbols are `truncation', `wrap', `escape', `control',
|
|||
|
||||
;;;###autoload
|
||||
(defun standard-display-8bit (l h)
|
||||
"Display characters in the range L to H literally."
|
||||
"Display characters representing raw bytes in the range L to H literally.
|
||||
|
||||
On a terminal display, each character in the range is displayed
|
||||
by sending the corresponding byte directly to the terminal.
|
||||
|
||||
On a graphic display, each character in the range is displayed
|
||||
using the default font by a glyph whose code is the corresponding
|
||||
byte.
|
||||
|
||||
Note that ASCII printable characters (SPC to TILDA) are displayed
|
||||
in the default way after this call."
|
||||
(or standard-display-table
|
||||
(setq standard-display-table (make-display-table)))
|
||||
(if (> h 255)
|
||||
(setq h 255))
|
||||
(while (<= l h)
|
||||
(aset standard-display-table l (if (or (< l ?\s) (>= l 127)) (vector l)))
|
||||
(if (< l 128)
|
||||
(aset standard-display-table l
|
||||
(if (or (< l ?\s) (= l 127)) (vector l)))
|
||||
(let ((c (unibyte-char-to-multibyte l)))
|
||||
(aset standard-display-table c (vector c))))
|
||||
(setq l (1+ l))))
|
||||
|
||||
;;;###autoload
|
||||
|
@ -236,9 +252,12 @@ in `.emacs'."
|
|||
(and (null arg)
|
||||
(char-table-p standard-display-table)
|
||||
;; Test 161, because 160 displays as a space.
|
||||
(equal (aref standard-display-table 161) [161])))
|
||||
(equal (aref standard-display-table
|
||||
(unibyte-char-to-multibyte 161))
|
||||
(vector (unibyte-char-to-multibyte 161)))))
|
||||
(progn
|
||||
(standard-display-default 160 255)
|
||||
(standard-display-default
|
||||
(unibyte-char-to-multibyte 160) (unibyte-char-to-multibyte 255))
|
||||
(unless (or (memq window-system '(x w32 ns)))
|
||||
(and (terminal-coding-system)
|
||||
(set-terminal-coding-system nil))))
|
||||
|
|
|
@ -1952,7 +1952,7 @@ See `set-language-info-alist' for use in programs."
|
|||
(> (aref (number-to-string (nth 2 (x-server-version))) 0)
|
||||
?3))
|
||||
;; Make non-line-break space display as a plain space.
|
||||
(aset standard-display-table 160 [32]))
|
||||
(aset standard-display-table (unibyte-char-to-multibyte 160) [32]))
|
||||
;; Most Windows programs send out apostrophes as \222. Most X fonts
|
||||
;; don't contain a character at that position. Map it to the ASCII
|
||||
;; apostrophe. [This is actually RIGHT SINGLE QUOTATION MARK,
|
||||
|
@ -1960,7 +1960,7 @@ See `set-language-info-alist' for use in programs."
|
|||
;; fonts probably have the appropriate glyph at this position,
|
||||
;; so they could use standard-display-8bit. It's better to use a
|
||||
;; proper windows-1252 coding system. --fx]
|
||||
(aset standard-display-table 146 [39]))))
|
||||
(aset standard-display-table (unibyte-char-to-multibyte 146) [39]))))
|
||||
|
||||
(defun set-language-environment-coding-systems (language-name)
|
||||
"Do various coding system setups for language environment LANGUAGE-NAME."
|
||||
|
|
|
@ -1085,7 +1085,7 @@ Create the buffer if it doesn't exist."
|
|||
(goto-char (point-max))
|
||||
(when (not (equal 0 (- (point) rcirc-prompt-end-marker)))
|
||||
;; delete a trailing newline
|
||||
(when (bolp)
|
||||
(when (eq (point) (point-at-bol))
|
||||
(delete-char -1))
|
||||
(let ((input (buffer-substring-no-properties
|
||||
rcirc-prompt-end-marker (point))))
|
||||
|
@ -2151,12 +2151,13 @@ With a prefix arg, prompt for new topic."
|
|||
(rcirc-send-string process (format "PRIVMSG %s :\C-aACTION %s\C-a"
|
||||
target args)))
|
||||
|
||||
(defun rcirc-add-or-remove (set &optional elt)
|
||||
(if (and elt (not (string= "" elt)))
|
||||
(if (member-ignore-case elt set)
|
||||
(delete elt set)
|
||||
(cons elt set))
|
||||
set))
|
||||
(defun rcirc-add-or-remove (set &rest elements)
|
||||
(dolist (elt elements)
|
||||
(if (and elt (not (string= "" elt)))
|
||||
(setq set (if (member-ignore-case elt set)
|
||||
(delete elt set)
|
||||
(cons elt set)))))
|
||||
set)
|
||||
|
||||
(defun-rcirc-command ignore (nick)
|
||||
"Manage the ignore list.
|
||||
|
@ -2164,7 +2165,9 @@ Ignore NICK, unignore NICK if already ignored, or list ignored
|
|||
nicks when no NICK is given. When listing ignored nicks, the
|
||||
ones added to the list automatically are marked with an asterisk."
|
||||
(interactive "sToggle ignoring of nick: ")
|
||||
(setq rcirc-ignore-list (rcirc-add-or-remove rcirc-ignore-list nick))
|
||||
(setq rcirc-ignore-list
|
||||
(apply #'rcirc-add-or-remove rcirc-ignore-list
|
||||
(split-string nick nil t)))
|
||||
(rcirc-print process nil "IGNORE" target
|
||||
(mapconcat
|
||||
(lambda (nick)
|
||||
|
@ -2176,14 +2179,18 @@ ones added to the list automatically are marked with an asterisk."
|
|||
(defun-rcirc-command bright (nick)
|
||||
"Manage the bright nick list."
|
||||
(interactive "sToggle emphasis of nick: ")
|
||||
(setq rcirc-bright-nicks (rcirc-add-or-remove rcirc-bright-nicks nick))
|
||||
(setq rcirc-bright-nicks
|
||||
(apply #'rcirc-add-or-remove rcirc-bright-nicks
|
||||
(split-string nick nil t)))
|
||||
(rcirc-print process nil "BRIGHT" target
|
||||
(mapconcat 'identity rcirc-bright-nicks " ")))
|
||||
|
||||
(defun-rcirc-command dim (nick)
|
||||
"Manage the dim nick list."
|
||||
(interactive "sToggle deemphasis of nick: ")
|
||||
(setq rcirc-dim-nicks (rcirc-add-or-remove rcirc-dim-nicks nick))
|
||||
(setq rcirc-dim-nicks
|
||||
(apply #'rcirc-add-or-remove rcirc-dim-nicks
|
||||
(split-string nick nil t)))
|
||||
(rcirc-print process nil "DIM" target
|
||||
(mapconcat 'identity rcirc-dim-nicks " ")))
|
||||
|
||||
|
@ -2192,7 +2199,9 @@ ones added to the list automatically are marked with an asterisk."
|
|||
Mark KEYWORD, unmark KEYWORD if already marked, or list marked
|
||||
keywords when no KEYWORD is given."
|
||||
(interactive "sToggle highlighting of keyword: ")
|
||||
(setq rcirc-keywords (rcirc-add-or-remove rcirc-keywords keyword))
|
||||
(setq rcirc-keywords
|
||||
(apply #'rcirc-add-or-remove rcirc-keywords
|
||||
(split-string keyword nil t)))
|
||||
(rcirc-print process nil "KEYWORD" target
|
||||
(mapconcat 'identity rcirc-keywords " ")))
|
||||
|
||||
|
|
|
@ -138,7 +138,7 @@ Optional fifth arg REQUIRE-MATCH non-nil forces a matching cookie."
|
|||
(vec (cookie-snarf phrase-file
|
||||
startmsg endmsg))
|
||||
(i (length vec)))
|
||||
(while (> (setq i (1- i)) 0)
|
||||
(while (>= (setq i (1- i)) 0)
|
||||
(setq alist (cons (list (aref vec i)) alist)))
|
||||
(put sym 'completion-alist alist))))
|
||||
nil require-match nil nil))
|
||||
|
|
|
@ -782,7 +782,7 @@ Set `python-indent' locally to the value guessed."
|
|||
'(("else" "if" "elif" "while" "for" "try" "except")
|
||||
("elif" "if" "elif")
|
||||
("except" "try" "except")
|
||||
("finally" "try" "except"))
|
||||
("finally" "else" "try" "except"))
|
||||
"Alist of keyword matches.
|
||||
The car of an element is a keyword introducing a statement which
|
||||
can close a block opened by a keyword in the cdr.")
|
||||
|
|
|
@ -804,15 +804,16 @@ If BACKWARD-ONLY is non-nil, only delete them before point."
|
|||
(constrain-to-field nil orig-pos t)))))
|
||||
|
||||
(defun beginning-of-buffer (&optional arg)
|
||||
"Move point to the beginning of the buffer; leave mark at previous position.
|
||||
With \\[universal-argument] prefix, do not set mark at previous position.
|
||||
"Move point to the beginning of the buffer.
|
||||
With numeric arg N, put point N/10 of the way from the beginning.
|
||||
If the buffer is narrowed, this command uses the beginning of the
|
||||
accessible part of the buffer.
|
||||
|
||||
If the buffer is narrowed, this command uses the beginning and size
|
||||
of the accessible part of the buffer.
|
||||
If Transient Mark mode is disabled, leave mark at previous
|
||||
position, unless a \\[universal-argument] prefix is supplied.
|
||||
|
||||
Don't use this command in Lisp programs!
|
||||
\(goto-char (point-min)) is faster and avoids clobbering the mark."
|
||||
\(goto-char (point-min)) is faster."
|
||||
(interactive "^P")
|
||||
(or (consp arg)
|
||||
(region-active-p)
|
||||
|
@ -829,15 +830,16 @@ Don't use this command in Lisp programs!
|
|||
(if (and arg (not (consp arg))) (forward-line 1)))
|
||||
|
||||
(defun end-of-buffer (&optional arg)
|
||||
"Move point to the end of the buffer; leave mark at previous position.
|
||||
With \\[universal-argument] prefix, do not set mark at previous position.
|
||||
"Move point to the end of the buffer.
|
||||
With numeric arg N, put point N/10 of the way from the end.
|
||||
If the buffer is narrowed, this command uses the end of the
|
||||
accessible part of the buffer.
|
||||
|
||||
If the buffer is narrowed, this command uses the beginning and size
|
||||
of the accessible part of the buffer.
|
||||
If Transient Mark mode is disabled, leave mark at previous
|
||||
position, unless a \\[universal-argument] prefix is supplied.
|
||||
|
||||
Don't use this command in Lisp programs!
|
||||
\(goto-char (point-max)) is faster and avoids clobbering the mark."
|
||||
\(goto-char (point-max)) is faster."
|
||||
(interactive "^P")
|
||||
(or (consp arg) (region-active-p) (push-mark))
|
||||
(let ((size (- (point-max) (point-min))))
|
||||
|
|
|
@ -1,3 +1,33 @@
|
|||
2010-08-31 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* dispextern.h (FACE_FOR_CHAR): Use an ASCII face for 8-bit
|
||||
characters.
|
||||
|
||||
* term.c (encode_terminal_code): Fix the previous change.
|
||||
(produce_glyphs): Don't set it->char_to_display here. Don't
|
||||
handle unibyte-display-via-language-environment here.
|
||||
(produce_special_glyphs): Set temp_it.char_to_display before
|
||||
calling produce_glyphs.
|
||||
|
||||
* xdisp.c (get_next_display_element): Set it->char_to_display
|
||||
here. Convert all 8-bit bytes from unibyte buffer/string to 8-bit
|
||||
characters.
|
||||
(get_overlay_arrow_glyph_row): Set it.char_to_display too before
|
||||
calling PRODUCE_GLYPHS.
|
||||
(append_space_for_newline): Save and store it->char_to_display.
|
||||
Set it->char_to_display before calling PRODUCE_GLYPHS.
|
||||
(extend_face_to_end_of_line): Set it->char_to_display before
|
||||
calling PRODUCE_GLYPHS.
|
||||
(get_glyph_face_and_encoding): Set the glyph code an 8-bit
|
||||
character to its byte value.
|
||||
(get_char_glyph_code): New function.
|
||||
(produce_stretch_glyph): Set it2.char_to_display too before
|
||||
calling x_produce_glyphs.
|
||||
(x_produce_glyphs): Simplify by using the same code for ASCII and
|
||||
non-ASCII characters. Don't set it->char_to_display here. Don't
|
||||
handle unibyte-display-via-language-environment here. For a
|
||||
charater of no glyph, use font->space_width instead of FONT_WIDTH.
|
||||
|
||||
2010-08-31 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* keyboard.c (Fwindow_system): Fix compilation for USE_LISP_UNION_TYPE.
|
||||
|
@ -15,6 +45,11 @@
|
|||
* composite.c (composition_update_it): Fix computing of
|
||||
cmp_it->width.
|
||||
|
||||
2010-08-29 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* term.c (encode_terminal_code): Encode byte chars to the
|
||||
correspnding bytes.
|
||||
|
||||
2010-08-29 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* nsterm.m (ns_draw_window_cursor): Draw BAR_CURSOR correct for R2L.
|
||||
|
|
|
@ -1718,7 +1718,7 @@ struct face_cache
|
|||
This macro is only meaningful for multibyte character CHAR. */
|
||||
|
||||
#define FACE_FOR_CHAR(F, FACE, CHAR, POS, OBJECT) \
|
||||
(ASCII_CHAR_P (CHAR) \
|
||||
((ASCII_CHAR_P (CHAR) || CHAR_BYTE8_P (CHAR)) \
|
||||
? (FACE)->ascii_face->id \
|
||||
: face_for_char ((F), (FACE), (CHAR), (POS), (OBJECT)))
|
||||
|
||||
|
@ -2275,9 +2275,11 @@ struct it
|
|||
composition. */
|
||||
struct composition_it cmp_it;
|
||||
|
||||
/* The character to display, possibly translated to multibyte
|
||||
if unibyte_display_via_language_environment is set. This
|
||||
is set after produce_glyphs has been called. */
|
||||
/* The character to display, possibly translated to multibyte if
|
||||
multibyte_p is zero or unibyte_display_via_language_environment
|
||||
is set. This is set after get_next_display_element has been
|
||||
called. If we are setting it->C directly before calling
|
||||
PRODUCE_GLYPHS, this should be set beforehand too. */
|
||||
int char_to_display;
|
||||
|
||||
/* If what == IT_IMAGE, the id of the image to display. */
|
||||
|
|
45
src/term.c
45
src/term.c
|
@ -689,7 +689,8 @@ encode_terminal_code (struct glyph *src, int src_len, struct coding_system *codi
|
|||
encode_terminal_src_size);
|
||||
buf = encode_terminal_src + nbytes;
|
||||
}
|
||||
if (char_charset (c, charset_list, NULL))
|
||||
if (CHAR_BYTE8_P (c)
|
||||
|| char_charset (c, charset_list, NULL))
|
||||
{
|
||||
/* Store the multibyte form of C at BUF. */
|
||||
buf += CHAR_STRING (c, buf);
|
||||
|
@ -1614,18 +1615,15 @@ produce_glyphs (struct it *it)
|
|||
goto done;
|
||||
}
|
||||
|
||||
/* Maybe translate single-byte characters to multibyte. */
|
||||
it->char_to_display = it->c;
|
||||
|
||||
if (it->c >= 040 && it->c < 0177)
|
||||
if (it->char_to_display >= 040 && it->char_to_display < 0177)
|
||||
{
|
||||
it->pixel_width = it->nglyphs = 1;
|
||||
if (it->glyph_row)
|
||||
append_glyph (it);
|
||||
}
|
||||
else if (it->c == '\n')
|
||||
else if (it->char_to_display == '\n')
|
||||
it->pixel_width = it->nglyphs = 0;
|
||||
else if (it->c == '\t')
|
||||
else if (it->char_to_display == '\t')
|
||||
{
|
||||
int absolute_x = (it->current_x
|
||||
+ it->continuation_lines_width);
|
||||
|
@ -1656,32 +1654,19 @@ produce_glyphs (struct it *it)
|
|||
it->pixel_width = nspaces;
|
||||
it->nglyphs = nspaces;
|
||||
}
|
||||
else if (CHAR_BYTE8_P (it->c))
|
||||
else if (CHAR_BYTE8_P (it->char_to_display))
|
||||
{
|
||||
if (unibyte_display_via_language_environment
|
||||
&& (it->c >= 0240))
|
||||
{
|
||||
it->char_to_display = BYTE8_TO_CHAR (it->c);
|
||||
it->pixel_width = CHAR_WIDTH (it->char_to_display);
|
||||
it->nglyphs = it->pixel_width;
|
||||
if (it->glyph_row)
|
||||
append_glyph (it);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Coming here means that it->c is from display table, thus
|
||||
we must send the raw 8-bit byte as is to the terminal.
|
||||
Although there's no way to know how many columns it
|
||||
occupies on a screen, it is a good assumption that a
|
||||
single byte code has 1-column width. */
|
||||
it->pixel_width = it->nglyphs = 1;
|
||||
if (it->glyph_row)
|
||||
append_glyph (it);
|
||||
}
|
||||
/* Coming here means that we must send the raw 8-bit byte as is
|
||||
to the terminal. Although there's no way to know how many
|
||||
columns it occupies on a screen, it is a good assumption that
|
||||
a single byte code has 1-column width. */
|
||||
it->pixel_width = it->nglyphs = 1;
|
||||
if (it->glyph_row)
|
||||
append_glyph (it);
|
||||
}
|
||||
else
|
||||
{
|
||||
it->pixel_width = CHAR_WIDTH (it->c);
|
||||
it->pixel_width = CHAR_WIDTH (it->char_to_display);
|
||||
it->nglyphs = it->pixel_width;
|
||||
|
||||
if (it->glyph_row)
|
||||
|
@ -1917,7 +1902,7 @@ produce_special_glyphs (struct it *it, enum display_element_type what)
|
|||
else
|
||||
abort ();
|
||||
|
||||
temp_it.c = GLYPH_CHAR (glyph);
|
||||
temp_it.c = temp_it.char_to_display = GLYPH_CHAR (glyph);
|
||||
temp_it.face_id = GLYPH_FACE (glyph);
|
||||
temp_it.len = CHAR_BYTES (temp_it.c);
|
||||
|
||||
|
|
319
src/xdisp.c
319
src/xdisp.c
|
@ -5762,10 +5762,23 @@ get_next_display_element (struct it *it)
|
|||
struct charset *unibyte = CHARSET_FROM_ID (charset_unibyte);
|
||||
enum { char_is_other = 0, char_is_nbsp, char_is_soft_hyphen }
|
||||
nbsp_or_shy = char_is_other;
|
||||
int decoded = it->c;
|
||||
int c = it->c; /* This is the character to display. */
|
||||
|
||||
if (! it->multibyte_p && ! ASCII_CHAR_P (c))
|
||||
{
|
||||
xassert (SINGLE_BYTE_CHAR_P (c));
|
||||
if (unibyte_display_via_language_environment)
|
||||
{
|
||||
c = DECODE_CHAR (unibyte, c);
|
||||
if (c < 0)
|
||||
c = BYTE8_TO_CHAR (it->c);
|
||||
}
|
||||
else
|
||||
c = BYTE8_TO_CHAR (it->c);
|
||||
}
|
||||
|
||||
if (it->dp
|
||||
&& (dv = DISP_CHAR_VECTOR (it->dp, it->c),
|
||||
&& (dv = DISP_CHAR_VECTOR (it->dp, c),
|
||||
VECTORP (dv)))
|
||||
{
|
||||
struct Lisp_Vector *v = XVECTOR (dv);
|
||||
|
@ -5791,21 +5804,10 @@ get_next_display_element (struct it *it)
|
|||
goto get_next;
|
||||
}
|
||||
|
||||
if (unibyte_display_via_language_environment
|
||||
&& !ASCII_CHAR_P (it->c))
|
||||
decoded = DECODE_CHAR (unibyte, it->c);
|
||||
|
||||
if (it->c >= 0x80 && ! NILP (Vnobreak_char_display))
|
||||
{
|
||||
if (it->multibyte_p)
|
||||
nbsp_or_shy = (it->c == 0xA0 ? char_is_nbsp
|
||||
: it->c == 0xAD ? char_is_soft_hyphen
|
||||
: char_is_other);
|
||||
else if (unibyte_display_via_language_environment)
|
||||
nbsp_or_shy = (decoded == 0xA0 ? char_is_nbsp
|
||||
: decoded == 0xAD ? char_is_soft_hyphen
|
||||
: char_is_other);
|
||||
}
|
||||
if (! ASCII_CHAR_P (c) && ! NILP (Vnobreak_char_display))
|
||||
nbsp_or_shy = (c == 0xA0 ? char_is_nbsp
|
||||
: c == 0xAD ? char_is_soft_hyphen
|
||||
: char_is_other);
|
||||
|
||||
/* Translate control characters into `\003' or `^C' form.
|
||||
Control characters coming from a display table entry are
|
||||
|
@ -5813,27 +5815,23 @@ get_next_display_element (struct it *it)
|
|||
the translation. This could easily be changed but I
|
||||
don't believe that it is worth doing.
|
||||
|
||||
If it->multibyte_p is nonzero, non-printable non-ASCII
|
||||
characters are also translated to octal form.
|
||||
NBSP and SOFT-HYPEN are property translated too.
|
||||
|
||||
If it->multibyte_p is zero, eight-bit characters that
|
||||
don't have corresponding multibyte char code are also
|
||||
Non-printable characters and raw-byte characters are also
|
||||
translated to octal form. */
|
||||
if ((it->c < ' '
|
||||
if (((c < ' ' || c == 127) /* ASCII control chars */
|
||||
? (it->area != TEXT_AREA
|
||||
/* In mode line, treat \n, \t like other crl chars. */
|
||||
|| (it->c != '\t'
|
||||
|| (c != '\t'
|
||||
&& it->glyph_row
|
||||
&& (it->glyph_row->mode_line_p || it->avoid_cursor_p))
|
||||
|| (it->c != '\n' && it->c != '\t'))
|
||||
|| (c != '\n' && c != '\t'))
|
||||
: (nbsp_or_shy
|
||||
|| (it->multibyte_p
|
||||
? ! CHAR_PRINTABLE_P (it->c)
|
||||
: (! unibyte_display_via_language_environment
|
||||
? it->c >= 0x80
|
||||
: (decoded >= 0x80 && decoded < 0xA0))))))
|
||||
|| CHAR_BYTE8_P (c)
|
||||
|| ! CHAR_PRINTABLE_P (c))))
|
||||
{
|
||||
/* IT->c is a control character which must be displayed
|
||||
/* C is a control character, NBSP, SOFT-HYPEN, raw-byte,
|
||||
or a non-printable character which must be displayed
|
||||
either as '\003' or as `^C' where the '\\' and '^'
|
||||
can be defined in the display table. Fill
|
||||
IT->ctl_chars with glyphs for what we have to
|
||||
|
@ -5845,7 +5843,7 @@ get_next_display_element (struct it *it)
|
|||
|
||||
/* Handle control characters with ^. */
|
||||
|
||||
if (it->c < 128 && it->ctl_arrow_p)
|
||||
if (ASCII_CHAR_P (c) && it->ctl_arrow_p)
|
||||
{
|
||||
int g;
|
||||
|
||||
|
@ -5878,7 +5876,7 @@ get_next_display_element (struct it *it)
|
|||
}
|
||||
|
||||
XSETINT (it->ctl_chars[0], g);
|
||||
XSETINT (it->ctl_chars[1], it->c ^ 0100);
|
||||
XSETINT (it->ctl_chars[1], c ^ 0100);
|
||||
ctl_len = 2;
|
||||
goto display_control;
|
||||
}
|
||||
|
@ -5893,7 +5891,7 @@ get_next_display_element (struct it *it)
|
|||
face_id = merge_faces (it->f, Qnobreak_space, 0,
|
||||
it->face_id);
|
||||
|
||||
it->c = ' ';
|
||||
c = ' ';
|
||||
XSETINT (it->ctl_chars[0], ' ');
|
||||
ctl_len = 1;
|
||||
goto display_control;
|
||||
|
@ -5939,7 +5937,6 @@ get_next_display_element (struct it *it)
|
|||
if (EQ (Vnobreak_char_display, Qt)
|
||||
&& nbsp_or_shy == char_is_soft_hyphen)
|
||||
{
|
||||
it->c = '-';
|
||||
XSETINT (it->ctl_chars[0], '-');
|
||||
ctl_len = 1;
|
||||
goto display_control;
|
||||
|
@ -5951,55 +5948,25 @@ get_next_display_element (struct it *it)
|
|||
if (nbsp_or_shy)
|
||||
{
|
||||
XSETINT (it->ctl_chars[0], escape_glyph);
|
||||
it->c = (nbsp_or_shy == char_is_nbsp ? ' ' : '-');
|
||||
XSETINT (it->ctl_chars[1], it->c);
|
||||
c = (nbsp_or_shy == char_is_nbsp ? ' ' : '-');
|
||||
XSETINT (it->ctl_chars[1], c);
|
||||
ctl_len = 2;
|
||||
goto display_control;
|
||||
}
|
||||
|
||||
{
|
||||
unsigned char str[MAX_MULTIBYTE_LENGTH];
|
||||
int len;
|
||||
int i;
|
||||
char str[10];
|
||||
int len, i;
|
||||
|
||||
/* Set IT->ctl_chars[0] to the glyph for `\\'. */
|
||||
if (CHAR_BYTE8_P (it->c))
|
||||
{
|
||||
str[0] = CHAR_TO_BYTE8 (it->c);
|
||||
len = 1;
|
||||
}
|
||||
else if (it->c < 256)
|
||||
{
|
||||
str[0] = it->c;
|
||||
len = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* It's an invalid character, which shouldn't
|
||||
happen actually, but due to bugs it may
|
||||
happen. Let's print the char as is, there's
|
||||
not much meaningful we can do with it. */
|
||||
str[0] = it->c;
|
||||
str[1] = it->c >> 8;
|
||||
str[2] = it->c >> 16;
|
||||
str[3] = it->c >> 24;
|
||||
len = 4;
|
||||
}
|
||||
if (CHAR_BYTE8_P (c))
|
||||
/* Display \200 instead of \17777600. */
|
||||
c = CHAR_TO_BYTE8 (c);
|
||||
len = sprintf (str, "%03o", c);
|
||||
|
||||
XSETINT (it->ctl_chars[0], escape_glyph);
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
int g;
|
||||
XSETINT (it->ctl_chars[i * 4], escape_glyph);
|
||||
/* Insert three more glyphs into IT->ctl_chars for
|
||||
the octal display of the character. */
|
||||
g = ((str[i] >> 6) & 7) + '0';
|
||||
XSETINT (it->ctl_chars[i * 4 + 1], g);
|
||||
g = ((str[i] >> 3) & 7) + '0';
|
||||
XSETINT (it->ctl_chars[i * 4 + 2], g);
|
||||
g = (str[i] & 7) + '0';
|
||||
XSETINT (it->ctl_chars[i * 4 + 3], g);
|
||||
}
|
||||
ctl_len = len * 4;
|
||||
XSETINT (it->ctl_chars[i + 1], str[i]);
|
||||
ctl_len = len + 1;
|
||||
}
|
||||
|
||||
display_control:
|
||||
|
@ -6014,6 +5981,11 @@ get_next_display_element (struct it *it)
|
|||
it->ellipsis_p = 0;
|
||||
goto get_next;
|
||||
}
|
||||
it->char_to_display = c;
|
||||
}
|
||||
else if (success_p)
|
||||
{
|
||||
it->char_to_display = it->c;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6040,7 +6012,8 @@ get_next_display_element (struct it *it)
|
|||
: STRINGP (it->string) ? IT_STRING_CHARPOS (*it)
|
||||
: IT_CHARPOS (*it));
|
||||
|
||||
it->face_id = FACE_FOR_CHAR (it->f, face, it->c, pos, it->string);
|
||||
it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display, pos,
|
||||
it->string);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -16481,15 +16454,19 @@ get_overlay_arrow_glyph_row (struct window *w, Lisp_Object overlay_arrow_string)
|
|||
|
||||
/* Get the next character. */
|
||||
if (multibyte_p)
|
||||
it.c = string_char_and_length (p, &it.len);
|
||||
it.c = it.char_to_display = string_char_and_length (p, &it.len);
|
||||
else
|
||||
it.c = *p, it.len = 1;
|
||||
{
|
||||
it.c = it.char_to_display = *p, it.len = 1;
|
||||
if (! ASCII_CHAR_P (it.c))
|
||||
it.char_to_display = BYTE8_TO_CHAR (it.c);
|
||||
}
|
||||
p += it.len;
|
||||
|
||||
/* Get its face. */
|
||||
ilisp = make_number (p - arrow_string);
|
||||
face = Fget_text_property (ilisp, Qface, overlay_arrow_string);
|
||||
it.face_id = compute_char_face (f, it.c, face);
|
||||
it.face_id = compute_char_face (f, it.char_to_display, face);
|
||||
|
||||
/* Compute its width, get its glyphs. */
|
||||
n_glyphs_before = it.glyph_row->used[TEXT_AREA];
|
||||
|
@ -16721,6 +16698,7 @@ append_space_for_newline (struct it *it, int default_face_p)
|
|||
append_space_for_newline has been called. */
|
||||
enum display_element_type saved_what = it->what;
|
||||
int saved_c = it->c, saved_len = it->len;
|
||||
int saved_char_to_display = it->char_to_display;
|
||||
int saved_x = it->current_x;
|
||||
int saved_face_id = it->face_id;
|
||||
struct text_pos saved_pos;
|
||||
|
@ -16733,7 +16711,7 @@ append_space_for_newline (struct it *it, int default_face_p)
|
|||
it->what = IT_CHARACTER;
|
||||
memset (&it->position, 0, sizeof it->position);
|
||||
it->object = make_number (0);
|
||||
it->c = ' ';
|
||||
it->c = it->char_to_display = ' ';
|
||||
it->len = 1;
|
||||
|
||||
if (default_face_p)
|
||||
|
@ -16754,6 +16732,7 @@ append_space_for_newline (struct it *it, int default_face_p)
|
|||
it->face_id = saved_face_id;
|
||||
it->len = saved_len;
|
||||
it->c = saved_c;
|
||||
it->char_to_display = saved_char_to_display;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -16886,7 +16865,7 @@ extend_face_to_end_of_line (struct it *it)
|
|||
it->what = IT_CHARACTER;
|
||||
memset (&it->position, 0, sizeof it->position);
|
||||
it->object = make_number (0);
|
||||
it->c = ' ';
|
||||
it->c = it->char_to_display = ' ';
|
||||
it->len = 1;
|
||||
/* The last row's blank glyphs should get the default face, to
|
||||
avoid painting the rest of the window with the region face,
|
||||
|
@ -20490,7 +20469,12 @@ get_glyph_face_and_encoding (struct frame *f, struct glyph *glyph,
|
|||
|
||||
if (face->font)
|
||||
{
|
||||
unsigned code = face->font->driver->encode_char (face->font, glyph->u.ch);
|
||||
unsigned code;
|
||||
|
||||
if (CHAR_BYTE8_P (glyph->u.ch))
|
||||
code = CHAR_TO_BYTE8 (glyph->u.ch);
|
||||
else
|
||||
code = face->font->driver->encode_char (face->font, glyph->u.ch);
|
||||
|
||||
if (code != FONT_INVALID_CODE)
|
||||
STORE_XCHAR2B (char2b, (code >> 8), (code & 0xFF));
|
||||
|
@ -20505,6 +20489,26 @@ get_glyph_face_and_encoding (struct frame *f, struct glyph *glyph,
|
|||
}
|
||||
|
||||
|
||||
/* Get glyph code of character C in FONT in the two-byte form CHAR2B.
|
||||
Retunr 1 if FONT has a glyph for C, otherwise return 0. */
|
||||
|
||||
static INLINE int
|
||||
get_char_glyph_code (int c, struct font *font, XChar2b *char2b)
|
||||
{
|
||||
unsigned code;
|
||||
|
||||
if (CHAR_BYTE8_P (c))
|
||||
code = CHAR_TO_BYTE8 (c);
|
||||
else
|
||||
code = font->driver->encode_char (font, c);
|
||||
|
||||
if (code == FONT_INVALID_CODE)
|
||||
return 0;
|
||||
STORE_XCHAR2B (char2b, (code >> 8), (code & 0xFF));
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* Fill glyph string S with composition components specified by S->cmp.
|
||||
|
||||
BASE_FACE is the base face of the composition.
|
||||
|
@ -21909,10 +21913,14 @@ produce_stretch_glyph (struct it *it)
|
|||
{
|
||||
int maxlen = ((IT_BYTEPOS (*it) >= GPT ? ZV : GPT)
|
||||
- IT_BYTEPOS (*it));
|
||||
it2.c = STRING_CHAR_AND_LENGTH (p, it2.len);
|
||||
it2.c = it2.char_to_display = STRING_CHAR_AND_LENGTH (p, it2.len);
|
||||
}
|
||||
else
|
||||
it2.c = *p, it2.len = 1;
|
||||
{
|
||||
it2.c = it2.char_to_display = *p, it2.len = 1;
|
||||
if (! ASCII_CHAR_P (it2.c))
|
||||
it2.char_to_display = BYTE8_TO_CHAR (it2.c);
|
||||
}
|
||||
|
||||
it2.glyph_row = NULL;
|
||||
it2.what = IT_CHARACTER;
|
||||
|
@ -22082,49 +22090,12 @@ x_produce_glyphs (struct it *it)
|
|||
if (it->what == IT_CHARACTER)
|
||||
{
|
||||
XChar2b char2b;
|
||||
struct font *font;
|
||||
struct face *face = FACE_FROM_ID (it->f, it->face_id);
|
||||
struct font_metrics *pcm;
|
||||
int font_not_found_p;
|
||||
struct font *font = face->font;
|
||||
int font_not_found_p = font == NULL;
|
||||
struct font_metrics *pcm = NULL;
|
||||
int boff; /* baseline offset */
|
||||
/* We may change it->multibyte_p upon unibyte<->multibyte
|
||||
conversion. So, save the current value now and restore it
|
||||
later.
|
||||
|
||||
Note: It seems that we don't have to record multibyte_p in
|
||||
struct glyph because the character code itself tells whether
|
||||
or not the character is multibyte. Thus, in the future, we
|
||||
must consider eliminating the field `multibyte_p' in the
|
||||
struct glyph. */
|
||||
int saved_multibyte_p = it->multibyte_p;
|
||||
|
||||
/* Maybe translate single-byte characters to multibyte, or the
|
||||
other way. */
|
||||
it->char_to_display = it->c;
|
||||
if (!ASCII_BYTE_P (it->c)
|
||||
&& ! it->multibyte_p)
|
||||
{
|
||||
if (SINGLE_BYTE_CHAR_P (it->c)
|
||||
&& unibyte_display_via_language_environment)
|
||||
{
|
||||
struct charset *unibyte = CHARSET_FROM_ID (charset_unibyte);
|
||||
|
||||
/* get_next_display_element assures that this decoding
|
||||
never fails. */
|
||||
it->char_to_display = DECODE_CHAR (unibyte, it->c);
|
||||
it->multibyte_p = 1;
|
||||
it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display,
|
||||
-1, Qnil);
|
||||
face = FACE_FROM_ID (it->f, it->face_id);
|
||||
}
|
||||
}
|
||||
|
||||
/* Get font to use. Encode IT->char_to_display. */
|
||||
get_char_face_and_encoding (it->f, it->char_to_display, it->face_id,
|
||||
&char2b, it->multibyte_p, 0);
|
||||
font = face->font;
|
||||
|
||||
font_not_found_p = font == NULL;
|
||||
if (font_not_found_p)
|
||||
{
|
||||
/* When no suitable font found, display an empty box based
|
||||
|
@ -22144,16 +22115,12 @@ x_produce_glyphs (struct it *it)
|
|||
boff = VCENTER_BASELINE_OFFSET (font, it->f) - boff;
|
||||
}
|
||||
|
||||
if (it->char_to_display >= ' '
|
||||
&& (!it->multibyte_p || it->char_to_display < 128))
|
||||
if (it->char_to_display != '\n' && it->char_to_display != '\t')
|
||||
{
|
||||
/* Either unibyte or ASCII. */
|
||||
int stretched_p;
|
||||
|
||||
it->nglyphs = 1;
|
||||
|
||||
pcm = get_per_char_metric (it->f, font, &char2b);
|
||||
|
||||
if (it->override_ascent >= 0)
|
||||
{
|
||||
it->ascent = it->override_ascent;
|
||||
|
@ -22166,6 +22133,15 @@ x_produce_glyphs (struct it *it)
|
|||
it->descent = FONT_DESCENT (font) - boff;
|
||||
}
|
||||
|
||||
if (! font_not_found_p
|
||||
&& get_char_glyph_code (it->char_to_display, font, &char2b))
|
||||
{
|
||||
pcm = get_per_char_metric (it->f, font, &char2b);
|
||||
if (pcm->width == 0
|
||||
&& pcm->rbearing == 0 && pcm->lbearing == 0)
|
||||
pcm = NULL;
|
||||
}
|
||||
|
||||
if (pcm)
|
||||
{
|
||||
it->phys_ascent = pcm->ascent + boff;
|
||||
|
@ -22177,7 +22153,7 @@ x_produce_glyphs (struct it *it)
|
|||
it->glyph_not_available_p = 1;
|
||||
it->phys_ascent = it->ascent;
|
||||
it->phys_descent = it->descent;
|
||||
it->pixel_width = FONT_WIDTH (font);
|
||||
it->pixel_width = font->space_width;
|
||||
}
|
||||
|
||||
if (it->constrain_row_ascent_descent_p)
|
||||
|
@ -22351,7 +22327,7 @@ x_produce_glyphs (struct it *it)
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (it->char_to_display == '\t')
|
||||
else /* i.e. (it->char_to_display == '\t') */
|
||||
{
|
||||
if (font->space_width > 0)
|
||||
{
|
||||
|
@ -22382,85 +22358,6 @@ x_produce_glyphs (struct it *it)
|
|||
it->nglyphs = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* A multi-byte character. Assume that the display width of the
|
||||
character is the width of the character multiplied by the
|
||||
width of the font. */
|
||||
|
||||
/* If we found a font, this font should give us the right
|
||||
metrics. If we didn't find a font, use the frame's
|
||||
default font and calculate the width of the character by
|
||||
multiplying the width of font by the width of the
|
||||
character. */
|
||||
|
||||
pcm = get_per_char_metric (it->f, font, &char2b);
|
||||
|
||||
if (font_not_found_p || !pcm)
|
||||
{
|
||||
int char_width = CHAR_WIDTH (it->char_to_display);
|
||||
|
||||
if (char_width == 0)
|
||||
/* This is a non spacing character. But, as we are
|
||||
going to display an empty box, the box must occupy
|
||||
at least one column. */
|
||||
char_width = 1;
|
||||
it->glyph_not_available_p = 1;
|
||||
it->pixel_width = font->space_width * char_width;
|
||||
it->phys_ascent = FONT_BASE (font) + boff;
|
||||
it->phys_descent = FONT_DESCENT (font) - boff;
|
||||
}
|
||||
else
|
||||
{
|
||||
it->pixel_width = pcm->width;
|
||||
it->phys_ascent = pcm->ascent + boff;
|
||||
it->phys_descent = pcm->descent - boff;
|
||||
if (it->glyph_row
|
||||
&& (pcm->lbearing < 0
|
||||
|| pcm->rbearing > pcm->width))
|
||||
it->glyph_row->contains_overlapping_glyphs_p = 1;
|
||||
}
|
||||
it->nglyphs = 1;
|
||||
it->ascent = FONT_BASE (font) + boff;
|
||||
it->descent = FONT_DESCENT (font) - boff;
|
||||
if (face->box != FACE_NO_BOX)
|
||||
{
|
||||
int thick = face->box_line_width;
|
||||
|
||||
if (thick > 0)
|
||||
{
|
||||
it->ascent += thick;
|
||||
it->descent += thick;
|
||||
}
|
||||
else
|
||||
thick = - thick;
|
||||
|
||||
if (it->start_of_box_run_p)
|
||||
it->pixel_width += thick;
|
||||
if (it->end_of_box_run_p)
|
||||
it->pixel_width += thick;
|
||||
}
|
||||
|
||||
/* If face has an overline, add the height of the overline
|
||||
(1 pixel) and a 1 pixel margin to the character height. */
|
||||
if (face->overline_p)
|
||||
it->ascent += overline_margin;
|
||||
|
||||
take_vertical_position_into_account (it);
|
||||
|
||||
if (it->ascent < 0)
|
||||
it->ascent = 0;
|
||||
if (it->descent < 0)
|
||||
it->descent = 0;
|
||||
|
||||
if (it->glyph_row)
|
||||
append_glyph (it);
|
||||
if (it->pixel_width == 0)
|
||||
/* We assure that all visible glyphs have at least 1-pixel
|
||||
width. */
|
||||
it->pixel_width = 1;
|
||||
}
|
||||
it->multibyte_p = saved_multibyte_p;
|
||||
}
|
||||
else if (it->what == IT_COMPOSITION && it->cmp_it.ch < 0)
|
||||
{
|
||||
|
@ -22556,7 +22453,7 @@ x_produce_glyphs (struct it *it)
|
|||
}
|
||||
else
|
||||
{
|
||||
width = FONT_WIDTH (font);
|
||||
width = font->space_width;
|
||||
ascent = FONT_BASE (font);
|
||||
descent = FONT_DESCENT (font);
|
||||
lbearing = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue