aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Morris <[email protected]>2014-04-12 12:24:17 -0700
committerGlenn Morris <[email protected]>2014-04-12 12:24:17 -0700
commite0af409500d5f44b34a6e8d971f0c7abe1d747fe (patch)
treeda8c3218399660418391a9bc35d955aa4ff07c73
parent3197074e49162f96a6eb33ca45fbbfddcf1ae01a (diff)
parent5121b6923beb2fb62b179b4a95b07f9feb969f3d (diff)
Merge from emacs-24; up to 2014-04-07T20:54:[email protected]
-rw-r--r--lisp/ChangeLog24
-rw-r--r--lisp/international/characters.el14
-rw-r--r--lisp/net/tramp-sh.el4
-rw-r--r--lisp/progmodes/octave.el50
-rw-r--r--lisp/term/w32-win.el3
-rw-r--r--lisp/term/x-win.el2
-rw-r--r--src/ChangeLog13
-rw-r--r--src/indent.c11
-rw-r--r--src/w32.c9
-rw-r--r--src/xdisp.c23
10 files changed, 123 insertions, 30 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 08591ac591..1eebbe986b 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,27 @@
+2014-04-12 Eli Zaretskii <[email protected]>
+
+ * international/characters.el <standard-case-table>: Add entries
+ for letters from the Coptic block u+2C80-u+2CFF. (Bug#17243)
+ Set category of Coptic characters be 'g' (Greek).
+
+2014-04-12 Leo Liu <[email protected]>
+
+ * progmodes/octave.el (completion-table-with-cache):
+ Define if not available.
+ (octave-goto-function-definition, octave-sync-function-file-names)
+ (octave-find-definition-default-filename):
+ Backquote upattern for compatibility.
+
+2014-04-12 Michael Albinus <[email protected]>
+
+ * net/tramp-sh.el (tramp-sh-handle-file-truename): Quote the file
+ name twice due to backticks. (Bug#17238)
+
+2014-04-12 Glenn Morris <[email protected]>
+
+ * term/w32-win.el (x-win-suspend-error):
+ * term/x-win.el (x-win-suspend-error): Sync docs.
+
2014-04-12 Matthias Dahl <[email protected]>
* faces.el (make-face): Remove deprecated optional argument. The
diff --git a/lisp/international/characters.el b/lisp/international/characters.el
index 54ab362df0..63b2b4f0ed 100644
--- a/lisp/international/characters.el
+++ b/lisp/international/characters.el
@@ -791,6 +791,20 @@ with L, LRE, or LRO Unicode bidi character type.")
(modify-category-entry (+ c 26) ?l)
(setq c (1+ c)))
+ ;; Coptic
+ (let ((pair-ranges '((#x2C80 . #x2CE2)
+ (#x2CEB . #x2CF2))))
+ (dolist (elt pair-ranges)
+ (let ((from (car elt)) (to (cdr elt)))
+ (while (< from to)
+ (set-case-syntax-pair from (1+ from) tbl)
+ (setq from (+ from 2))))))
+ ;; There's no Coptic category. However, Coptic letters that are
+ ;; part of the Greek block above get the Greek category, and those
+ ;; in this block are derived from Greek letters, so let's be
+ ;; consistent about their category.
+ (modify-category-entry '(#x2C80 . #x2CFF) ?g)
+
;; Fullwidth Latin
(setq c #xff21)
(while (<= c #xff3a)
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 8ff29a8b42..4d0b5ae54d 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -950,13 +950,15 @@ target of the symlink differ."
(tramp-message v 4 "Finding true name for `%s'" filename)
(cond
;; Use GNU readlink --canonicalize-missing where available.
+ ;; We must quote the file name twice due to the backticks.
((tramp-get-remote-readlink v)
(setq result
(tramp-send-command-and-read
v
(format "echo \"\\\"`%s --canonicalize-missing %s`\\\"\""
(tramp-get-remote-readlink v)
- (tramp-shell-quote-argument localname)))))
+ (tramp-shell-quote-argument
+ (tramp-shell-quote-argument localname))))))
;; Use Perl implementation.
((and (tramp-get-remote-perl v)
diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el
index 123aac03ea..3fdcec219d 100644
--- a/lisp/progmodes/octave.el
+++ b/lisp/progmodes/octave.el
@@ -40,7 +40,19 @@
(unless (fboundp 'user-error)
(defalias 'user-error 'error))
(unless (fboundp 'delete-consecutive-dups)
- (defalias 'delete-consecutive-dups 'delete-dups)))
+ (defalias 'delete-consecutive-dups 'delete-dups))
+ (unless (fboundp 'completion-table-with-cache)
+ (defun completion-table-with-cache (fun &optional ignore-case)
+ ;; See eg bug#11906.
+ (let* (last-arg last-result
+ (new-fun
+ (lambda (arg)
+ (if (and last-arg (string-prefix-p last-arg arg ignore-case))
+ last-result
+ (prog1
+ (setq last-result (funcall fun arg))
+ (setq last-arg arg))))))
+ (completion-table-dynamic new-fun)))))
(eval-when-compile
(unless (fboundp 'setq-local)
(defmacro setq-local (var val)
@@ -1048,8 +1060,8 @@ directory and makes this the current buffer's default directory."
(unless found (goto-char orig))
found))))
(pcase (and buffer-file-name (file-name-extension buffer-file-name))
- ("cc" (funcall search
- "\\_<DEFUN\\(?:_DLD\\)?\\s-*(\\s-*\\(\\(?:\\sw\\|\\s_\\)+\\)" 1))
+ (`"cc" (funcall search
+ "\\_<DEFUN\\(?:_DLD\\)?\\s-*(\\s-*\\(\\(?:\\sw\\|\\s_\\)+\\)" 1))
(t (funcall search octave-function-header-regexp 3)))))
(defun octave-function-file-p ()
@@ -1118,19 +1130,19 @@ q: Don't fix\n" func file))
(read-char-choice
"Which name to use? (a/b/q) " '(?a ?b ?q))))))
(pcase c
- (?a (let ((newname (expand-file-name
- (concat func (file-name-extension
- buffer-file-name t)))))
- (when (or (not (file-exists-p newname))
- (yes-or-no-p
- (format "Target file %s exists; proceed? " newname)))
- (when (file-exists-p buffer-file-name)
- (rename-file buffer-file-name newname t))
- (set-visited-file-name newname))))
- (?b (save-excursion
- (goto-char name-start)
- (delete-region name-start name-end)
- (insert file)))))))))
+ (`?a (let ((newname (expand-file-name
+ (concat func (file-name-extension
+ buffer-file-name t)))))
+ (when (or (not (file-exists-p newname))
+ (yes-or-no-p
+ (format "Target file %s exists; proceed? " newname)))
+ (when (file-exists-p buffer-file-name)
+ (rename-file buffer-file-name newname t))
+ (set-visited-file-name newname))))
+ (`?b (save-excursion
+ (goto-char name-start)
+ (delete-region name-start name-end)
+ (insert file)))))))))
(defun octave-update-function-file-comment (beg end)
"Query replace function names in function file comment."
@@ -1789,19 +1801,19 @@ If the environment variable OCTAVE_SRCDIR is set, it is searched first."
(defun octave-find-definition-default-filename (name)
"Default value for `octave-find-definition-filename-function'."
(pcase (file-name-extension name)
- ("oct"
+ (`"oct"
(octave-find-definition-default-filename
(concat "libinterp/dldfcn/"
(file-name-sans-extension (file-name-nondirectory name))
".cc")))
- ("cc"
+ (`"cc"
(let ((file (or (locate-file name (octave-source-directories))
(locate-file (file-name-nondirectory name)
(octave-source-directories)))))
(or (and file (file-exists-p file))
(error "File `%s' not found" name))
file))
- ("mex"
+ (`"mex"
(if (yes-or-no-p (format "File `%s' may be binary; open? "
(file-name-nondirectory name)))
name
diff --git a/lisp/term/w32-win.el b/lisp/term/w32-win.el
index 96cf0838cb..e2cabe5397 100644
--- a/lisp/term/w32-win.el
+++ b/lisp/term/w32-win.el
@@ -206,7 +206,8 @@ European languages which are distributed with Windows as
See the documentation of `create-fontset-from-fontset-spec' for the format.")
(defun x-win-suspend-error ()
- "Report an error when a suspend is attempted."
+ "Report an error when a suspend is attempted.
+This returns an error if any Emacs frames are X frames, or always under W32."
(error "Suspending an Emacs running under W32 makes no sense"))
(defvar dynamic-library-alist)
diff --git a/lisp/term/x-win.el b/lisp/term/x-win.el
index 6ba348d8c7..964b911255 100644
--- a/lisp/term/x-win.el
+++ b/lisp/term/x-win.el
@@ -1326,6 +1326,8 @@ Request data types in the order specified by `x-select-request-type'."
;;; Window system initialization.
(defun x-win-suspend-error ()
+ "Report an error when a suspend is attempted.
+This returns an error if any Emacs frames are X frames, or always under W32."
;; Don't allow suspending if any of the frames are X frames.
(if (memq 'x (mapcar 'window-system (frame-list)))
(error "Cannot suspend Emacs while running under X")))
diff --git a/src/ChangeLog b/src/ChangeLog
index 927b001034..30852b3ae5 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,16 @@
+2014-04-12 Eli Zaretskii <[email protected]>
+
+ * xdisp.c (move_it_by_lines): If a large portion of buffer text is
+ covered by a display string that ends in a newline, and that cases
+ going back by DVPOS lines to hit the search limit, lift the limit
+ and go back until DVPOS is reached. (Bug#17244)
+
+ * indent.c (Fvertical_motion): Handle correctly the case when the
+ display string is preceded by an empty line.
+
+ * w32.c (sys_umask) <WRITE_USER>: Remove redundant constant, and
+ use S_IWRITE instead.
+
2014-04-11 Glenn Morris <[email protected]>
* keyboard.c (Fopen_dribble_file): Make file private. (Bug#17187)
diff --git a/src/indent.c b/src/indent.c
index 683d44841b..dc86251892 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -2051,8 +2051,15 @@ whether or not it is currently displayed in some window. */)
string, move_it_to will overshoot it, while vertical-motion
wants to put the cursor _before_ the display string. So in
that case, we move to buffer position before the display
- string, and avoid overshooting. */
- move_it_to (&it, disp_string_at_start_p ? PT - 1 : PT,
+ string, and avoid overshooting. But if the position before
+ the display string is a newline, we don't do this, because
+ otherwise we will end up in a screen line that is one too
+ far back. */
+ move_it_to (&it,
+ (!disp_string_at_start_p
+ || FETCH_BYTE (IT_BYTEPOS (it)) == '\n')
+ ? PT
+ : PT - 1,
-1, -1, -1, MOVE_TO_POS);
/* IT may move too far if truncate-lines is on and PT lies
diff --git a/src/w32.c b/src/w32.c
index ca7d1869b6..371cae9cb9 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -5353,11 +5353,6 @@ utime (const char *name, struct utimbuf *times)
return 0;
}
-/* Emacs expects us to support the traditional octal form of the mode
- bits, which is not what msvcrt.dll wants. */
-
-#define WRITE_USER 00200
-
int
sys_umask (int mode)
{
@@ -5369,14 +5364,14 @@ sys_umask (int mode)
at all. */
/* FIXME: if the GROUP and OTHER bits are reset, we should use ACLs
to prevent access by other users on NTFS. */
- if ((mode & WRITE_USER) != 0)
+ if ((mode & S_IWRITE) != 0)
arg |= S_IWRITE;
retval = _umask (arg);
/* Merge into the return value the bits they've set the last time,
which msvcrt.dll ignores and never returns. Emacs insists on its
notion of mask being identical to what we return. */
- retval |= (current_mask & ~WRITE_USER);
+ retval |= (current_mask & ~S_IWRITE);
current_mask = mode;
return retval;
diff --git a/src/xdisp.c b/src/xdisp.c
index 3431a7bad2..067d9f6ac0 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -9511,6 +9511,7 @@ move_it_by_lines (struct it *it, ptrdiff_t dvpos)
ptrdiff_t start_charpos, i;
int nchars_per_row
= (it->last_visible_x - it->first_visible_x) / FRAME_COLUMN_WIDTH (it->f);
+ bool hit_pos_limit = false;
ptrdiff_t pos_limit;
/* Start at the beginning of the screen line containing IT's
@@ -9527,8 +9528,11 @@ move_it_by_lines (struct it *it, ptrdiff_t dvpos)
pos_limit = BEGV;
else
pos_limit = max (start_charpos + dvpos * nchars_per_row, BEGV);
+
for (i = -dvpos; i > 0 && IT_CHARPOS (*it) > pos_limit; --i)
back_to_previous_visible_line_start (it);
+ if (i > 0 && IT_CHARPOS (*it) <= pos_limit)
+ hit_pos_limit = true;
reseat (it, it->current.pos, 1);
/* Move further back if we end up in a string or an image. */
@@ -9572,6 +9576,25 @@ move_it_by_lines (struct it *it, ptrdiff_t dvpos)
else
bidi_unshelve_cache (it2data, 1);
}
+ else if (hit_pos_limit && pos_limit > BEGV
+ && dvpos < 0 && it2.vpos < -dvpos)
+ {
+ /* If we hit the limit, but still didn't make it far enough
+ back, that means there's a display string with a newline
+ covering a large chunk of text, and that caused
+ back_to_previous_visible_line_start try to go too far.
+ Punish those who commit such atrocities by going back
+ until we've reached DVPOS, after lifting the limit, which
+ could make it slow for very long lines. "If it hurts,
+ don't do that!" */
+ dvpos += it2.vpos;
+ RESTORE_IT (it, it, it2data);
+ for (i = -dvpos; i > 0; --i)
+ {
+ back_to_previous_visible_line_start (it);
+ it->vpos--;
+ }
+ }
else
RESTORE_IT (it, it, it2data);
}