Merge from emacs--devo--0

Patches applied:

 * emacs--devo--0  (patch 399-413)

   - Update from CVS
   - Rcirc update from Ryan Yeske
   - Merge from gnus--rel--5.10
   - Miscellaneous tq-related fixes.

 * gnus--rel--5.10  (patch 126-127)

   - Merge from emacs--devo--0
   - Update from CVS

Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-105
This commit is contained in:
Miles Bader 2006-08-28 04:33:45 +00:00
commit d65dc2c390
84 changed files with 2933 additions and 8240 deletions

View file

@ -29,7 +29,9 @@ Reminders sent out on 2006-06-08.
** Send an email to the various distributions, including the GNOME
and KDE projects, to use the new Emacs icons in etc/images/icons.
* BUGS
* WINDOWS SUPPORT BUGS.
These don't need to be fixed to start pretest, but we call the
attention of Windows users to fixing them.
** Markus Gritsch's report about Emacs looping on Windoze with the following
.emacs file, and then reduce Emacs frame width to "something quite narrow":
@ -39,13 +41,21 @@ and KDE projects, to use the new Emacs icons in etc/images/icons.
'(hscroll-step 1)
)
** Jorgen Schaefer <forcer@forcix.cx>'s June 18 bug report about
fields and invisible overlays needs attention from a field expert.
** Drew Adams 12 Aug bug rpt: overlay display artifact: trace left behind
Windows only bug.
* BUGS
** Milan Zamazal's Aug 23 bug report about crashes with certain fonts.
** C-g fails to interrupt accept-process-output in Gnus.
** Implement buffer-chars-modified-tick.
** henman@it.to-be.co.jp 09 Aug 2006: ispell.el problem.
** Make key-binding use the maps specified by positions given in the events.
* DOCUMENTATION

View file

@ -1,3 +1,40 @@
2006-08-25 Richard Stallman <rms@gnu.org>
* TUTORIAL: Give priority to graphical terminals over text terminals
regarding C-z.
2006-08-21 Sun Yijiang <sunyijiang@gmail.com>
* TUTORIAL.cn: Sync with the latest TUTORIAL.
2006-08-20 Dave Love <fx@gnu.org>
* emacs.py: Update to Dave Love's latest version.
(__all__): Fix args -> eargs. Add new `modpath' fun.
(eargs): Add `imports' arg.
(all_names): New fun.
(complete): Rewrite without using rlcompleter.
Remove `namespace' arg, add `imports' arg.
(ehelp): Replace g and l args with `imports'.
(eimport): Use __main__ rather than `emacs' namespace.
(modpath): New fun.
2006-08-20 Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se> (tiny change)
* emacs.py (eexecfile): Use the __main__ rather than `emacs' namespace.
2006-08-18 Primoz PETERLIN <primoz.peterlin@mf.uni-lj.si>
* TUTORIAL.sl: Synchronize with TUTORIAL.
2006-08-18 Mats Lidell <matsl@contactor.se>
* TUTORIAL.sv: Synchronize with TUTORIAL.
2006-08-18 Alfredo Finelli <alfredofnl@tiscali.it>
* TUTORIAL.it: Synchronize with TUTORIAL.
2006-08-15 Carsten Dominik <dominik@science.uva.nl>
* orgcard.tex: Version number change.

View file

@ -914,6 +914,13 @@ The variable `automatic-hscrolling' was renamed to
the window now works sensibly, by automatically adjusting the window's
vscroll property.
*** New customize option `overline-margin' controls the space between
overline and text.
*** New variable `x-underline-at-descent-line' controls the relative
position of the underline. When set, it overrides the
`x-use-underline-position-properties' variables.
+++
*** The new face `mode-line-inactive' is used to display the mode line
of non-selected windows. The `mode-line' face is now used to display
@ -4740,6 +4747,7 @@ keymap alist to this list.
*** The definition of a key-binding passed to define-key can use XEmacs-style
key-sequences, such as [(control a)].
** Abbrev changes:
+++
@ -5568,6 +5576,9 @@ been renamed to `disabled-command-function'. The variable
*** `emacsserver' now runs `pre-command-hook' and `post-command-hook'
when it receives a request from emacsclient.
+++
*** `current-idle-time' reports how long Emacs has been idle.
** Lisp file loading changes:
+++

View file

@ -21,7 +21,7 @@ a window doesn't select it.
but if you type M-n you should get the visited file name of the
current buffer.
** whitespace-cleanup should work only on the region if the region is active.
** describe-face should show an example of text in the face.
** Distribute a bar cursor of width > 1 evenly between the two glyphs
on each side of the bar (what to do at the edges?).
@ -125,6 +125,9 @@ current buffer.
** Internationalize Emacs's messages.
** Set up a facility to save backtraces when errors happen during
specified filters, specified timers, and specified hooks.
** Install mmc@maruska.dyndns.org's no-flicker change.
** Add a "current vertical pixel level" value that goes with point,

View file

@ -644,18 +644,18 @@ session--this is the command C-x C-c. (Do not worry about losing
changes you have made; C-x C-c offers to save each changed file before
it kills the Emacs.)
If you are using a graphical display that supports multiple
applications in parallel, you don't need any special command to move
from Emacs to another application. You can do this with the mouse or
with window manager commands. However, if you're using a text
terminal which can only show one application at a time, you need to
"suspend" Emacs to move to any other program.
C-z is the command to exit Emacs *temporarily*--so that you can go
back to the same Emacs session afterward.
On systems which allow it, C-z "suspends" Emacs; that is, it returns
to the shell but does not destroy the Emacs. In the most common
shells, you can resume Emacs with the `fg' command or with `%emacs'.
On systems which do not implement suspending, C-z creates a subshell
running under Emacs to give you the chance to run other programs and
return to Emacs afterward; it does not truly "exit" from Emacs. In
this case, the shell command `exit' is the usual way to get back to
Emacs from the subshell.
back to the same Emacs session afterward. When Emacs is running on a
text terminal, C-z "suspends" Emacs; that is, it returns to the shell
but does not destroy the Emacs. In the most common shells, you can
resume Emacs with the `fg' command or with `%emacs'.
The time to use C-x C-c is when you are about to log out. It's also
the right thing to use to exit an Emacs invoked under mail handling

View file

@ -165,7 +165,7 @@ M-comma
大部分的 Emacs 命令接受数字参数,并且对于多数命令而言,这些数字参数的作
用是指定命令的重复次数。为一个命令指定数字参数(也就是重复次数)的方法
是:先输入 C-u然后输入数字作为参数最后再输入命令。如果你有META (或
EDIT 或 ALT那么还有另一种办法按住 META 键不,然后输入数字。不
EDIT 或 ALT那么还有另一种办法按住 META 键不,然后输入数字。不
过我们还是建议你用 C-u因为它在任何终端机上都能用。这种数字参数也称为
“前缀参数”,意思是说这个参数是先于使用它的命令而输入的。
@ -174,9 +174,9 @@ EDIT
>> 为 C-n 或者 C-p 指定一个数字参数,这样你可以只用一个命令就把光标移动
到本行的附近。
虽然大部分命令用数字参数来作为其重复次数,但是也有些命令例外,它们将数
字参数另做它用。比如有些命令(目前还没学到)仅仅将前缀参数作为一个
志——只要有一个前缀参数出现,不管其值为何,命令的功能都会改变
虽然大部分命令把数字参数解释为其重复次数,但是也有些命令例外,它们将数
字参数另做它用。比如有些命令(我们目前还没学到)仅仅将前缀参数作为一个
志——只要给出有一个前缀参数,不管其值为何,它都会改变命令的功能。
而 C-v 和 M-v 则属于另一种类型的例外。当给定一个参数时,它们将滚动你指
定的“行数”而不是“屏数”。举例来说C-u 8 C-v 将屏幕向下滚动 8 行,
@ -188,8 +188,8 @@ EDIT
以给定一个参数然后执行 M-v。
如果你正在使用一个窗口系统,比如 X11 或者微软的 Windows那么在 Emacs
窗口的左边或者右边应该有一个长方形的区域叫“滚动条”,你可以用鼠标操纵
滚动条来滚动文字。
窗口的边应该有一个长方形的区域叫“滚动条”,你可以用鼠标操纵滚动条来
滚动文字。
>> 试着在“滚动条内的反白区域”上按一下鼠标中键。
文字应该会滚动到鼠标所指示的位置。
@ -202,10 +202,10 @@ EDIT
* 在 EMACS 失去响应的时候WHEN EMACS IS HUNG
-----------------------------------------------
如果 Emacs 对你的命令失去响应,你可以很安全地用 C-g 来终止这个命令。
C-g 也可以被用来终止一个执行过久的命令。
如果 Emacs 对你的命令失去响应,你可以用 C-g 来安全地终止这条命令。C-g
也可以终止一条执行过久的命令。
C-g 还可以被来取消数字参数和那些输入到一半的命令。
C-g 还可以取消数字参数和只输入到一半的命令。
>> 输入 C-u 100 设定一个值为 100 的数字参数,然后按 C-g。
现在再按 C-f光标应该只会移动一个字符因为你已经用 C-g 取消了参数。
@ -219,16 +219,16 @@ C-g
-----------------------------------
有一些 Emacs 命令被“禁用”了,以避免初学者在不了解其确切功能的情况下误
这些命令,造成麻烦。
它们,造成麻烦。
如果你用到了一个被禁用的命令Emacs 会显示一个提示消息,告诉你这个命令
到底是干什么的,询问你是否要继续,并在得到你的肯定之后再执行这命令。
你要是真的想执行被禁用的命令,那么在 Emacs 询问你的时候应该按空格。一般
来说如果你不想执行按“n”就行了
如果你真的想用这条命令,在 Emacs 询问你的时候应该按空格。一般来说,如果
你不想用就按“n”
>> 试试 C-x C-l (这是一个被禁用的命令)
然后用 n 来回答问
然后用 n 来回答问。
* 窗格WINDOWS
@ -245,7 +245,7 @@ Emacs
>> 把光标移到本行然后输入 C-u 0 C-l。
>> 输入 CONTROL-h k CONTROL-f。观察当一个新窗格出现时当前窗格用来显示
CONTROL-f 命令的文档)是如何小的。
CONTROL-f 命令的文档)是如何小的。
>> 输入 C-x 1 关掉文档窗格。
@ -265,33 +265,33 @@ Emacs
用法应该一样。一般来说 <Delback> 就是位于 <Return> 键上方某处的一个大号
通常被标示为“Delete”、“Del”或者“Backspace”。
如果你找到了标着“Backspace”的键那么它应该就是 <Delback>;即便你又在
键盘其它地方找到了一个标示为“Del”键,那么它也应该不是 <Delback>。
如果你找到了“Backspace”键那么它应该就是 <Delback>;哪怕你又在别的地
方找到了一个“Del”键那么它也应该不是 <Delback>。
一种更通用的说法是,<Delback> 将位于光标前的一个字符删除
一种更通用的说法是,<Delback> 将删除位于光标前的一个字符。
>> 现在就试试——敲点字,然后按几下 <Delback> 删除它们。
不用担心你会修改文件,你干什么都没关系,这里就是专给你练习用的。
如果一行文字很长、超出了窗格的宽度,显示不下的部分会在紧邻的下一行继续
显示。这时会有一个反斜线(控制台下是反斜线,如果你用图形窗口系统,则
该是一个小小的转弯箭头)显示在右边沿,表明这是某一行的接续显示。
显示。这时会有一个反斜线(控制台下是反斜线,如果你用图形窗口系统,则
该是一个小小的转弯箭头)显示在右边沿,表明这是某一行的接续显示。
>> 输入文字,一直到屏幕的右边界,然后继续,你会看到一个接续行出现。
>> 用 <Delback> 删掉一些文字,直到此行长度小于窗格宽度,接续行就消失了。
你可以像删除其他字符一样删除换行符。删除两行中间的换行符会将两行合并成
一行。如果合并的结果使这一行太长,超出了窗格宽度,它就会以一个接续行
显示。
换行符跟其他字符一样可以被删除。两行中间的换行符被删除后,这两行将会合
并成一行。如果合并的这一行太长,超出了窗格宽度,它就会以一个接续行
显示。
>> 移动光标到行的开头并输入 <Delback>。
这时本行与其前一行将被合并为一行。
>> 移动光标到行的开头并输入 <Delback>。
这时该行将与其前一行一起被合并为一行。
>> 输入 <Return> 重新插入你刚才删除的换行符。
前面过,大部分的 Emacs 命令都可以指定重复次数,这其中也包括输入字符的
命令。重复执行输入字符的命令实际上就是输入多个一样的字符。
前面过,大部分的 Emacs 命令都可以指定重复次数,这其中也包括输入字符的
命令。重复执行输入字符的命令实际上就是输入多个相同的字符。
>> 试试 C-u 8 *,这将会插入 ********。
@ -329,10 +329,10 @@ C-SPC
注意,“移除kill”和“删除delete”的不同在于被移除的东西可以找回
来,而被删除的就不行了。【实际上,移除掉的东西虽然看起来“消失”了,但
实际上被 Emacs 记录了下来,因此还可以找回来;而删除掉的东西虽然也可能还
在内存里但是已经被Emacs“抛弃”了所以就找不回来了。】重新插入被移
的文字称为“召回yank”。一般而言那些会去除很多文字的命令会把去
掉的文字储存起来(它们被设定成了“可召回”),而那些只是去除一个字符
者只是去除空白的命令就不会储存那些被去除掉的东西(因此你就无法召回)。
在内存里,但是已经被 Emacs“抛弃”了所以就找不回来了。】重新插入被移
的文字称为“召回yank”。一般而言那些会去除很多文字的命令会把去
掉的文字储存起来(它们被设定成了“可召回”),而那些只是去除一个字符
或者只是去除空白的命令就不会储存被去除掉的东西(自然你就无法召回了)。
>> 移动光标到一非空白行的行头,然后输入 C-k 移除那一行上的文字。
@ -409,9 +409,9 @@ C-_ Ҳ
存盘,就要在编辑前“寻找”到一个存盘文件。(这个过程通常也被称为“访问”
文件。)
寻找到一个文件意味着你可以在 Emacs 里查看这个文件的内容。从很多角度讲,
寻找到一个文件意味着你可以在 Emacs 里查看这个文件的内容。从很多方面讲,
这就等于你在直接编辑这个文件。但是你所做的修改只有在“存盘”的时候才会
被写入文件。也正因为如此,你可以丢弃一个改到一半的文件而不必把这个残
被写入文件。也正因为如此,你可以丢弃一个改到一半的文件而不必把这个残
文件也保存到计算机上。最后就算你真正存了盘Emacs 也会把存盘前的文件重
命名保存,以防你改完之后又想反悔。
@ -572,10 +572,10 @@ replace-string
字符串替换命令需要两个参数——被替换的字符串和用来替换它的字符串。每个
参数的输入用换行符来结束。
>> 将光标移到本行的下两行空白,然后输入
>> 将光标移到本行下面第二行的空白,然后输入
M-x repl s<Return>changed<Return>altered<Return>。
为了继续练习,保留一行原文如下
以下保留一行原文,以应练习之需
Notice how this line has changed: you've replaced... 】
请注意这一行是怎么改变的在光标之后的范围内你已经将“changed”这个
@ -617,7 +617,7 @@ replace-string
果位于文件的末尾,就显示 --Bot--。如果文件很小,一屏就足以显示全部内容,
那么状态栏会显示 --All--。
L 和其后的数字给出了光标所在行的行号。
“L” 和其后的数字给出了光标所在行的行号。
最开头的星号(*)表示你已经对文字做过改动。刚刚打开的文件肯定没有被改动
过,所以状态栏上显示的不是星号而是短线(-)。
@ -690,14 +690,14 @@ Emacs
功后,光标会停留在搜索目标出现的地方。
Emacs 的搜索命令的独特之处在于它是“渐进的incremental意思是搜
索与输入同时进行:你在这边一个字一个字地输入你想搜索的东西,同时 Emacs
在那边就替你搜索了。
索与输入同时进行:你在键盘上一字一句地输入搜索词的过程中Emacs 就已经
开始替你搜索了。
C-s 是向前搜索C-r 是向后搜索。不过手别这么快!先等等别着急试。
在你按下 C-s 之后你会发现回显区里有“I-search”字样出现这是在提示
你目前 Emacs 正处于“渐进搜索”状态,正在等待你输入搜索字串。<Return>
会结束搜索。
在你按下 C-s 之后你会发现回显区里有“I-search”字样出现提示你目前
Emacs 正处于“渐进搜索”状态,正在等待你输入搜索字串。<Return> 会结
束搜索。
>> 输入 C-s 开始一个搜索。注意敲慢一点,一次输入一个字符。
慢慢输入“cursor”整个词每敲一个字就暂停一下注意观察光标。
@ -917,10 +917,10 @@ Emacs
Emacs 快速指南Tutorial早有两个刘昭宏的中文译本繁简各一。其简体版本
TUTORIAL.cn基本由繁体版本TUTORIAL.zh经词语替换而得。然而繁简中文
不仅在用词习惯上有所不同,更有诸多表达方式和句法方面的差异。因此一直以来
阅读 TUTORIAL.cn 都略觉晦涩和生硬。这次重新翻译 TUTORIAL.cn 的动机正是源
于这种体验,希望我们的工作能够让本文更好的发挥其应有的作用。TUTORIAL.zh
的译文质量很高,在翻译过程中给予过我们多借鉴和参考,在此对刘昭宏的工作
不仅在用词习惯上有所不同,更有诸多表达方式与句法方面的差异,因此一直以来
用户使用 TUTORIAL.cn 都会略觉生硬和晦涩。这次重新翻译 TUTORIAL.cn 的动机
正是源于这种体验,希望我们的工作能够让本文更好地发挥其作用。TUTORIAL.zh
的译文质量很高,在翻译过程中给予过我们多借鉴和参考,在此对刘昭宏的工作
表示感谢。
翻译过程中最大的挑战莫过于术语译词的选择了。经过水木社区 Emacs 板热心网
@ -954,6 +954,10 @@ Emacs
中的“window”就只能译成“窗格”了。我们认为 Emacs 中 window 和
frame 的关系用窗格和窗口来类比是十分形象的。
《学习GNU Emacs》第二版一书对“window”和“frame”的翻译与本教程
刚好相反(分别译作“窗口”和“窗格”)。在此特别注明,以消除可能产生
的疑惑。
[2] 对于“delete”和“kill”的区别正文已经给出了详细的说明。“删除”和
“移除”相比较起来,前者更多地隐含着“破坏”和“不可恢复”的意思,而
后者更多地隐含着“被转移”和“可恢复”的意思。因此分别选择它们作为上

View file

@ -219,9 +219,9 @@ La schermata si sposta di 8 righe verso l'alto. Se vuoi tornare di nuovo
in basso puoi usare un argomento numerico con M-v.
Quando si usa un sistema a finestre, come X11 o MS-Windows, ci dovrebbe
essere un'area rettangolare allungata chiamata barra di scorrimento sul
lato sinistro della finestra di Emacs. Si può far scorrere il testo con
un click del mouse nella barra di scorrimento.
essere un'area rettangolare allungata chiamata barra di scorrimento a
un lato della finestra di Emacs. Si può far scorrere il testo con un
click del mouse nella barra di scorrimento.
>> Prova a premere il pulsante centrale del mouse sopra all'area
evidenziata nella barra di scorrimento. Verrà visualizzata una parte

View file

@ -222,7 +222,7 @@ To bi moralo zaslon premakniti navzgor za osem vrstic.
premaknili nazaj, poskusite M-v z istim argumentom.
Èe uporabljate grafièni vmesnik, denimo X11 ali MS Windows, imate
verjetno ob levem robu Emacsovega okna navpično pravokotno ploskev,
verjetno ob robu Emacsovega okna navpično pravokotno ploskev,
imenovano drsnik. Pogled na besedilo lahko premikate tudi tako, da z
mi¹ko kliknete na drsnik.

View file

@ -224,7 +224,7 @@ Detta borde ha flyttat sk
tillbaka igen är det bara att ge samma argument till M-v.
Om du använder Emacs under ett fönstersystem, som X11 eller
MS-Windows, finns det troligen ett rektangulärt område vänster sida
MS-Windows, finns det troligen ett rektangulärt område sidan
av Emacs-fönstret, en kallad rullningslist. Genom att klicka i den
med musen kan du rulla texten.

View file

@ -1,7 +1,7 @@
"""Definitions used by commands sent to inferior Python in python.el."""
# Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
# Author: Dave Love <d.love@dl.ac.uk>
# Author: Dave Love <fx@gnu.org>
# This file is part of GNU Emacs.
@ -20,16 +20,18 @@
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
import os, sys, traceback, inspect, rlcompleter, __main__
import os, sys, traceback, inspect, __main__
from sets import Set
__all__ = ["eexecfile", "args", "complete", "ehelp", "eimport"]
__all__ = ["eexecfile", "eargs", "complete", "ehelp", "eimport", "modpath"]
def eexecfile (file):
"""Execute FILE and then remove it.
Execute the file within the __main__ namespace.
If we get an exception, print a traceback with the top frame
(oursleves) excluded."""
(ourselves) excluded."""
try:
try: execfile (file, globals (), globals ())
try: execfile (file, __main__.__dict__)
except:
(type, value, tb) = sys.exc_info ()
# Lose the stack frame for this location.
@ -40,9 +42,10 @@ def eexecfile (file):
finally:
os.remove (file)
def eargs (name):
def eargs (name, imports):
"Get arglist of NAME for Eldoc &c."
try:
if imports: exec imports
parts = name.split ('.')
if len (parts) > 1:
exec 'import ' + parts[0] # might fail
@ -56,8 +59,7 @@ def eargs (name):
return
if inspect.ismethod (func):
func = func.im_func
if not inspect.isfunction (func):
return
if not inspect.isfunction (func): return
(args, varargs, varkw, defaults) = inspect.getargspec (func)
# No space between name and arglist for consistency with builtins.
print '_emacs_out', \
@ -65,41 +67,109 @@ def eargs (name):
defaults)
except: pass
def complete (text, namespace = None):
"""Complete TEXT in NAMESPACE and print a Lisp list of completions.
NAMESPACE is currently not used."""
if namespace is None: namespace = __main__.__dict__
c = rlcompleter.Completer (namespace)
try:
if '.' in text:
matches = c.attr_matches (text)
else:
matches = c.global_matches (text)
print '_emacs_out (',
for elt in matches:
print '"%s"' % elt,
print ')'
except:
print '_emacs_out ()'
def all_names (object):
"""Return (an approximation to) a list of all possible attribute
names reachable via the attributes of OBJECT, i.e. roughly the
leaves of the dictionary tree under it."""
def ehelp (name, g, l):
"""Get help on string NAME using globals G and locals L.
def do_object (object, names):
if inspect.ismodule (object):
do_module (object, names)
elif inspect.isclass (object):
do_class (object, names)
# Might have an object without its class in scope.
elif hasattr (object, '__class__'):
names.add ('__class__')
do_class (object.__class__, names)
# Probably not a good idea to try to enumerate arbitrary
# dictionaries...
return names
def do_module (module, names):
if hasattr (module, '__all__'): # limited export list
names.union_update (module.__all__)
for i in module.__all__:
do_object (getattr (module, i), names)
else: # use all names
names.union_update (dir (module))
for i in dir (module):
do_object (getattr (module, i), names)
return names
def do_class (object, names):
ns = dir (object)
names.union_update (ns)
if hasattr (object, '__bases__'): # superclasses
for i in object.__bases__: do_object (i, names)
return names
return do_object (object, Set ([]))
def complete (name, imports):
"""Complete TEXT in NAMESPACE and print a Lisp list of completions.
Exec IMPORTS first."""
import __main__, keyword
def class_members(object):
names = dir (object)
if hasattr (object, '__bases__'):
for super in object.__bases__:
names = class_members (super)
return names
names = Set ([])
base = None
try:
dict = __main__.__dict__.copy()
if imports: exec imports in dict
l = len (name)
if not "." in name:
for list in [dir (__builtins__), keyword.kwlist, dict.keys()]:
for elt in list:
if elt[:l] == name: names.add(elt)
else:
base = name[:name.rfind ('.')]
name = name[name.rfind('.')+1:]
try:
object = eval (base, dict)
names = Set (dir (object))
if hasattr (object, '__class__'):
names.add('__class__')
names.union_update (class_members (object))
except: names = all_names (dict)
except: return []
l = len(name)
print '_emacs_out (',
for n in names:
if name == n[:l]:
if base: print '"%s.%s"' % (base, n),
else: print '"%s"' % n,
print ')'
def ehelp (name, imports):
"""Get help on string NAME.
First try to eval name for, e.g. user definitions where we need
the object. Otherwise try the string form."""
try: help (eval (name, g, l))
locls = {}
if imports:
try: exec imports in locls
except: pass
try: help (eval (name, globals(), locls))
except: help (name)
def eimport (mod, dir):
"""Import module MOD with directory DIR at the head of the search path.
NB doesn't load from DIR if MOD shadows a system module."""
from __main__ import __dict__
path0 = sys.path[0]
sys.path[0] = dir
try:
try:
if globals().has_key(mod) and inspect.ismodule (eval (mod)):
reload(eval (mod))
if __dict__.has_key(mod) and inspect.ismodule (__dict__[mod]):
reload (__dict__[mod])
else:
globals ()[mod] = __import__ (mod)
__dict__[mod] = __import__ (mod)
except:
(type, value, tb) = sys.exc_info ()
print "Traceback (most recent call last):"
@ -107,6 +177,17 @@ def eimport (mod, dir):
finally:
sys.path[0] = path0
print '_emacs_ok' # ready for input and can call continuation
def modpath (module):
"""Return the source file for the given MODULE (or None).
Assumes that MODULE.py and MODULE.pyc are in the same directory."""
try:
path = __import__ (module).__file__
if path[-4:] == '.pyc' and os.path.exists (path[0:-1]):
path = path[:-1]
print "_emacs_out", path
except:
print "_emacs_out ()"
# print '_emacs_ok' # ready for input and can call continuation
# arch-tag: d90408f3-90e2-4de4-99c2-6eb9c7b9ca46

View file

@ -1,3 +1,277 @@
2006-08-27 Michael Olson <mwolson@gnu.org>
* emacs-lisp/tq.el: Small grammar fix in comments.
(tq-enqueue): Check for existence of queue rather than the
head queue item's question, which was a no-op.
(tq-filter, tq-process-buffer): Make sure the process buffer
exists before making it the current buffer.
2006-08-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* term/mac-win.el (mac-apple-event-map): Rename hicommand to hi-command.
(mac-dnd-drop-data): Apply 2006-08-22 change for x-dnd-drop-data.
(special-event-map): Apply 2006-08-16 change for x-win.el.
2006-08-26 Stefan Monnier <monnier@iro.umontreal.ca>
* progmodes/python.el (python-send-receive): Wait in the
process's buffer so as to check the right buffer-local variables.
2006-08-25 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/checkdoc.el: Remove * in defcustoms.
(defgroup checkdoc): Move to beginning.
* progmodes/python.el (python-preoutput-skip-next-prompt): New var.
(python-preoutput-continuation): Remove.
(python-preoutput-filter): Simplify correspondingly.
Remove handling of _emacs_ok. Make sure we skip _emacs_out's prompts.
Loop around to catch embedded _emacs_out output.
(run-python): Send the import&print command on a single line.
(python-send-command): Send command&print on a single line.
(python-send-string): Only add double \n if needed.
(python-send-receive): Loop until the result comes.
(python-mode-running): Defvar it.
(python-setup-brm): Remove unused var `menu'.
Only bind py-mode-map and `features' around brm-init.
(python-calculate-indentation): Remove unused var `point'.
(python-beginning-of-defun): Remove unused var `def-line'.
2006-08-25 Richard Stallman <rms@gnu.org>
* kmacro.el (kmacro-repeat-on-last-key): Doc fix.
2006-08-25 Michael Kifer <kifer@cs.stonybrook.edu>
* viper.el (viper-set-hooks): Use frame bindings for
viper-vi-state-cursor-color.
(viper-non-hook-settings): Don't set default
mode-line-buffer-identification.
* viper-util.el (viper-set-cursor-color-according-to-state): New fun.
(viper-set-cursor-color-according-to-state)
(viper-get-saved-cursor-color-in-replace-mode)
(viper-get-saved-cursor-color-in-insert-mode): Make conditional on
viper-emacs-state-cursor-color.
* viper-cmd.el (viper-envelop-ESC-key): Bug fix.
(viper-undo): Use point if undo-beg-posn is nil.
(viper-insert-state-post-command-sentinel, viper-change-state-to-emacs)
(viper-after-change-undo-hook): Don't use
viper-emacs-state-cursor-color by default.
(viper-undo): More sensible positioning after undo.
* viper-ex.el (ex-splice-args-in-1-letr-cmd): Get rid of caddr.
(viper-emacs-state-cursor-color): Default to nil, since this feature
doesn't work well yet.
* ediff-mult.el (ediff-intersect-directories)
(ediff-get-directory-files-under-revision, ediff-dir-diff-copy-file):
always expand filenames.
2006-08-24 Stefan Monnier <monnier@iro.umontreal.ca>
* tumme.el: Remove * in defcustoms's docstrings.
2006-08-24 Chong Yidong <cyd@stupidchicken.com>
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Accept internal time format for SECS arg.
(timer-relative-time): Doc fix.
* jit-lock.el: "Stealth fontification by requeuing timers" patch,
adapted from Martin Rudalics.
(jit-lock-stealth-repeat-timer, jit-lock-stealth-buffers): New vars.
(jit-lock-mode): Create jit-lock-stealth-repeat-timer.
(jit-lock-stealth-fontify): Reschedule as a idle timer instead of
using sit-for.
2006-08-24 Francesc Rocher <francesc.rocher@gmail.com>
* cus-start.el (all): Add `overline-margin' and
`x-underline-at-descent-line'.
2006-08-24 Kim F. Storm <storm@cua.dk>
* progmodes/grep.el (grep-find-use-xargs): Use explicit value `exec'
to mean "use find -exec"; nil now unambiguously means auto-detect.
(grep-compute-defaults): Set grep-find-use-xargs to `exec' if not `gnu'.
Use shell-quote-argument to build grep-find-command and grep-find-template.
(rgrep): Use shell-quote-argument to properly quote arguments to find.
Reported by Tom Seddon.
2006-08-23 Chong Yidong <cyd@stupidchicken.com>
* startup.el (fancy-splash-head): Give instructions for dismissing
the splash screen for default startup too.
(display-startup-echo-area-message, fancy-splash-screens)
(use-fancy-splash-screens-p): New arg hide-on-input. If nil, show
all splash text at once and keep the splash buffer around.
(command-line-1): Give display-startup-echo-area-message a t arg.
2006-08-23 Carsten Dominik <dominik@science.uva.nl>
* textmodes/org.el (org-follow-gnus-link): Make sure the dedicated
gnus frame is selected.
2006-08-23 Nick Roberts <nickrob@snap.net.nz>
* progmodes/gdb-ui.el (gdb-starting): Reset gdb-signalled to nil.
2006-08-22 Kim F. Storm <storm@cua.dk>
* ido.el (ido-set-matches-1): Fix full matching for subdirs.
Add suffix matching for subdirs.
2006-08-22 Jorgen Schaefer <forcer@forcix.cx> (tiny change)
* x-dnd.el (x-dnd-drop-data): Don't call goto-char if
mouse-yank-at-point is non-nil.
2006-08-22 Nick Roberts <nickrob@snap.net.nz>
* progmodes/gdb-ui.el (gdb-frame-memory-buffer): Make frame
a bit wider and remove fringes to fit initial output on line.
2006-08-21 Stefan Monnier <monnier@iro.umontreal.ca>
* frame.el (blink-cursor-end): Only ignore the error we care about.
(blink-cursor-mode): Use blink-cursor-end to simplify the code.
2006-08-21 Richard Stallman <rms@gnu.org>
* whitespace.el (whitespace-cleanup): Doc fix.
2006-08-20 Ryan Yeske <rcyeske@gmail.com>
* net/rcirc.el (rcirc-show-maximum-output): New var.
(rcirc-buffer-process): If no buffer argument is supplied, use
current-buffer.
(rcirc-complete-nick): Complete to the last completed nick first.
(rcirc-mode): Preserve the value of `rcirc-urls' across
connections. Setup scroll function.
(rcirc-scroll-to-bottom): New function.
(rcirc-print): Use nick syntax around regexp work.
Notice dim-nicks speaking only if they say our nick.
(rcirc-update-activity-string): Do not show the modeline indicator
if there are no live rcirc processes.
(rcirc-cmd-ignore): Ignore case.
(rcirc-browse-url-at-point): Fix off-by-one error.
2006-08-20 Stefan Monnier <monnier@iro.umontreal.ca>
* progmodes/python.el: Remove * in defcustom docstrings.
(run-python, python-proc, python-try-complete): Use derived-mode-p.
(python-mode): Set tab-width and indent-tabs-mode.
2006-08-20 Dave Love <fx@gnu.org>
* progmodes/python.el: Update to Dave Love's latest version.
(python-font-lock-keywords, python-mode): Don't use
font-lock-syntax-table, but match symbol elements explicitly instead.
(python-mode-map): Add help, and a few more key bindings.
(python-skip-comments/blanks): Move out of comments as well.
(python-continuation-line-p): Behave better with unbalanced parens.
(python-blank-line-p): New fun.
(python-open-block-statement-p): Don't use a heuristic.
(python-outdent-p): Better handle blocks-in-the-same-line.
(python-calculate-indentation): Misc improvements.
(python-comment-indent): Remove.
(python-block-pairs): New var.
(python-first-word): New fun.
(python-indentation-levels): Handle more common cases.
(python-indent-line-1): Add `leave' argument.
(python-indent-region): New fun.
(python-skip-out): New fun.
(python-beginning-of-statement, python-end-of-statement): Use it.
(python-next-statement): Return correct count even at eob.
(python-end-of-block): Fix paren-typo.
(python-imenu-create-index): Add module variables.
(run-python): Add `new' arg.
Check we're at a prompt before returning.
(python-send-command): Move to end of buffer.
Wait for prompt to return.
(python-set-proc): New fun.
(python-imports): New var.
(python-describe-symbol): Use it. Adjust to new interface of `ehelp'.
(python-eldoc-function): Try to move out of arg list.
(python-outline-level): Offset by 1.
(python-find-imports): New fun.
(python-symbol-completions): Use python-imports.
(python-module-path, ffap-alist): Add support for ffap.
(python-skeletons, python-mode-abbrev-table, def-python-skeleton)
(pythin-insert-*, python-default-template, python-expand-template):
Add templates/skeletons.
(python-setup-brm): Support for Bicycle Repair Man.
(python-abbrev-syntax-table): New var.
(python-abbrev-pc-hook, python-pea-hook): New funs.
2006-08-20 Chong Yidong <cyd@stupidchicken.com>
* frame.el (blink-cursor-start): Set timer first.
(blink-cursor-end): Ignore timer cancelling errors.
Suggested by Ken Manheimer.
2006-08-20 Juanma Barranquero <lekktu@gmail.com>
* newcomment.el (comment-box): Call `comment-normalize-vars'.
Add autoload cookie.
2006-08-20 Richard Stallman <rms@gnu.org>
* simple.el (line-number-at-pos): Doc fix.
* emacs-lisp/timer.el (run-with-idle-timer): Pass t to
timer-activate-when-idle, so timer can run before Emacs becomes
non-idle again.
2006-08-18 Yoni Rabkin Katzenell <yoni-r@actcom.com> (tiny change)
* whitespace.el (whitespace-cleanup-internal): New optional arg
REGION-ONLY. If it's non-nil, modify the message to the user
accordingly.
(whitespace-cleanup-region): Call whitespace-cleanup-internal with
a non-nil argument.
2006-08-18 Gustav H,Ae(Bllberg <gustav@gmail.com> (tiny change)
* rect.el (spaces-string): Simplify and add doc string.
2006-08-17 Romain Francoise <romain@orebokech.com>
* progmodes/gdb-ui.el (gdb-edit-locals-value): Balance parens.
2006-08-17 Richard Stallman <rms@gnu.org>
* compare-w.el (compare-windows): lambda's take an arg and pass
it to compare-windows-skip-whitespace.
2006-08-17 Martin Rudalics <rudalics@gmx.at>
* jit-lock.el (jit-lock-fontify-now): Protect the modified status of
the right buffer.
2006-08-17 Stefan Monnier <monnier@iro.umontreal.ca>
* pcvs-parse.el (cvs-parse-table): Accept the new `...' format for
removed files.
2006-08-17 Nick Roberts <nickrob@snap.net.nz>
* progmodes/gdb-ui.el (gdb-locals-watch-map)
(gdb-locals-watch-map-1): Suppress keymap first.
(gdb-edit-locals-map-1): New variable.
(gdb-edit-locals-value): New function.
(gdb-stack-list-locals-handler): Use them.
2006-08-16 Stefan Monnier <monnier@iro.umontreal.ca>
* mouse.el (global-map): Allow yanking with mouse-2 at a spot whose
cursor would normally be drawn in the fringe.
* font-lock.el (font-lock-extend-region-wholelines): Fix up typo.
Reported by Martin Rudalics <rudalics@gmx.at>.
2006-08-16 Richard Stallman <rms@gnu.org>
* term/x-win.el (x-clipboard-yank): Specify * in interactive spec.
@ -21,20 +295,20 @@
2006-08-15 Carsten Dominik <dominik@science.uva.nl>
* textmodes/org.el (org-clock-special-range,
org-clock-update-time-maybe): New functions.
* textmodes/org.el (org-clock-special-range)
(org-clock-update-time-maybe): New functions.
(org-stamp-time-of-day-regexp): Allow weekday to be of word chars,
not only a-z.
(org-agenda-get-blocks): Allow multiple blocks per headline.
(org-timestamp-change): Call `org-clock-update-time-maybe'.
(org-export-html-title-format)
(org-export-html-toplevel-hlevel): New options.
(org-export-language-setup): Added support for Czech.
(org-export-language-setup): Add support for Czech.
(org-mode, org-insert-todo-heading, org-find-visible)
(org-find-invisible, org-invisible-p, org-invisible-p2)
(org-back-to-heading, org-on-heading-p, org-up-heading-all)
(org-show-subtree, org-show-entry, org-make-options-regexp):
Removed compatibility support for old outline-mode.
Remove compatibility support for old outline-mode.
(org-check-occur-regexp): Funtion removed.
(org-on-heading-p, org-back-to-heading): Made defalias.
(org-set-local): New defsubst.
@ -44,7 +318,7 @@
(org-remember-apply-template, org-table-edit-field)
(org-table-edit-formulas, orgtbl-mode, org-export-as-ascii)
(org-set-autofill-regexps): Use `org-set-local'.
(org-table-eval-formula): Fixed bug with parsing of display flags.
(org-table-eval-formula): Fix bug with parsing of display flags.
2006-08-15 Nick Roberts <nickrob@snap.net.nz>
@ -53,8 +327,8 @@
<simon.marshall@misys.com>.
(gdb-stack-position): New variable.
(gdb-starting, gdb-exited): Reset gdb-stack-position to nil.
(gdb-frames-mode): Set gdb-stack-position to nil. Add to
overlay-arrow-variable-list
(gdb-frames-mode): Set gdb-stack-position to nil.
Add to overlay-arrow-variable-list
(gdb-reset): Delete gdb-stack-position from above list.
2006-08-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
@ -95,8 +369,8 @@
Add customization vars controlling allout-beginning-of-line and
allout-end-of-line conveniences.
(allout-header-prefix, allout-use-mode-specific-leader)
(allout-use-mode-specific-leader, allout-mode-leaders): Revised
docstrings.
(allout-use-mode-specific-leader, allout-mode-leaders):
Revise docstrings.
(allout-infer-header-lead): Change to be an alias for
allout-infer-header-lead-and-primary-bullet.
(allout-infer-header-lead-and-primary-bullet): New version of
@ -136,29 +410,26 @@
(allout-beginning-of-line): Respect `allout-beginning-of-line-cycles'.
(allout-end-of-line): Respect `allout-end-of-line-cycles'.
(allout-chart-subtree): Implement new mode, charting only the
visible items in the subtree, when new 'visible' parameter is
non-nil.
(allout-end-of-subtree): Properly handle the last item in the
buffer.
(allout-pre-command-business, allout-command-counter): Increment
an advertised counter so that cooperating enhancements can track
revisions of items.
visible items in the subtree, when new 'visible' parameter is non-nil.
(allout-end-of-subtree): Properly handle the last item in the buffer.
(allout-pre-command-business, allout-command-counter):
Increment an advertised counter so that cooperating enhancements can
track revisions of items.
(allout-open-topic): Run allout-structure-added-hook with suitable
arguments.
(allout-shift-in): Run allout-structure-shifted-hook with suitable
arguments.
(allout-shift-out): Fix doubling for negative args and ensure call
of allout-structure-shifted-hook by solely using allout-shift-in.
(allout-kill-line, allout-kill-topic): Run
allout-structure-deleted-hook with suitable arguments.
(allout-kill-line, allout-kill-topic):
Run allout-structure-deleted-hook with suitable arguments.
(allout-yank-processing): Run allout-structure-added-hook with
proper arguments.
(allout-yank): Enclose activity in allout-unprotected.
(allout-flag-region): Run allout-exposure-change-hook with
suitable arguments, instead of making the callee infer the
arguments.
(allout-encrypt-string): Support
allout-encryption-plaintext-sanitization-regexps,
suitable arguments, instead of making the callee infer the arguments.
(allout-encrypt-string):
Support allout-encryption-plaintext-sanitization-regexps,
allout-encryption-ciphertext-rejection-regexps, and
allout-encryption-ciphertext-rejection-ceiling. Indicate correct
en/de cryption mode in symmetric encryption failure message.

View file

@ -191,14 +191,16 @@ on third call it again advances points to the next difference and so on."
(setq skip-func-1 (if ignore-whitespace
(if (stringp compare-windows-whitespace)
(lambda () (compare-windows-skip-whitespace)
(lambda (pos)
(compare-windows-skip-whitespace pos)
t)
compare-windows-whitespace)))
(with-current-buffer b2
(setq skip-func-2 (if ignore-whitespace
(if (stringp compare-windows-whitespace)
(lambda () (compare-windows-skip-whitespace)
(lambda (pos)
(compare-windows-skip-whitespace pos)
t)
compare-windows-whitespace)))
(push-mark p2 t)

View file

@ -363,6 +363,7 @@ since it could result in memory overflow and make Emacs crash."
(other :tag "Unlimited" t)))
(unibyte-display-via-language-environment mule boolean)
(blink-cursor-alist cursor alist "22.1")
(overline-margin display integer "22.1")
;; xfaces.c
(scalable-fonts-allowed display boolean)
;; xfns.c
@ -374,6 +375,7 @@ since it could result in memory overflow and make Emacs crash."
;; xterm.c
(mouse-autoselect-window display boolean "21.3")
(x-use-underline-position-properties display boolean "21.3")
(x-underline-at-descent-line display boolean "22.1")
(x-stretch-cursor display boolean "21.1")))
this symbol group type standard version native-p
;; This function turns a value

View file

@ -648,8 +648,8 @@ behavior."
(mapcar
(lambda (elt)
(ediff-make-new-meta-list-element
(concat auxdir1 elt)
(concat auxdir2 elt)
(expand-file-name (concat auxdir1 elt))
(expand-file-name (concat auxdir2 elt))
(if lis3
(progn
;; The following is done because: In merging with
@ -660,7 +660,7 @@ behavior."
;; the second case, we insert nil.
(setq elt (ediff-add-slash-if-directory auxdir3 elt))
(if (file-exists-p (concat auxdir3 elt))
(concat auxdir3 elt))))))
(expand-file-name (concat auxdir3 elt)))))))
common)))
;; return result
(cons common-part difflist)
@ -716,7 +716,7 @@ behavior."
auxdir1 nil nil
merge-autostore-dir nil)
(mapcar (lambda (elt) (ediff-make-new-meta-list-element
(concat auxdir1 elt) nil nil))
(expand-file-name (concat auxdir1 elt)) nil nil))
common))
))
@ -1338,7 +1338,10 @@ Useful commands:
;; update ediff-meta-list by direct modification
(nconc meta-list
(list (ediff-make-new-meta-list-element
otherfile1 otherfile2 otherfile3)))
(expand-file-name otherfile1)
(expand-file-name otherfile2)
(if otherfile3
(expand-file-name otherfile3)))))
)
(ediff-update-meta-buffer meta-buf 'must-redraw)
))

View file

@ -193,8 +193,14 @@
(defvar compilation-error-regexp-alist)
(defvar compilation-mode-font-lock-keywords)
(defgroup checkdoc nil
"Support for doc string checking in Emacs Lisp."
:prefix "checkdoc"
:group 'lisp
:version "20.3")
(defcustom checkdoc-autofix-flag 'semiautomatic
"*Non-nil means attempt auto-fixing of doc strings.
"Non-nil means attempt auto-fixing of doc strings.
If this value is the symbol `query', then the user is queried before
any change is made. If the value is `automatic', then all changes are
made without asking unless the change is very-complex. If the value
@ -208,37 +214,39 @@ The value `never' is the same as nil, never ask or change anything."
(other :tag "semiautomatic" semiautomatic)))
(defcustom checkdoc-bouncy-flag t
"*Non-nil means to \"bounce\" to auto-fix locations.
"Non-nil means to \"bounce\" to auto-fix locations.
Setting this to nil will silently make fixes that require no user
interaction. See `checkdoc-autofix-flag' for auto-fixing details."
:group 'checkdoc
:type 'boolean)
(defcustom checkdoc-force-docstrings-flag t
"*Non-nil means that all checkable definitions should have documentation.
"Non-nil means that all checkable definitions should have documentation.
Style guide dictates that interactive functions MUST have documentation,
and that it's good but not required practice to make non user visible items
have doc strings."
:group 'checkdoc
:type 'boolean)
(put 'checkdoc-force-docstrings-flag 'safe-local-variable 'booleanp)
(defcustom checkdoc-force-history-flag t
"*Non-nil means that files should have a History section or ChangeLog file.
"Non-nil means that files should have a History section or ChangeLog file.
This helps document the evolution of, and recent changes to, the package."
:group 'checkdoc
:type 'boolean)
(defcustom checkdoc-permit-comma-termination-flag nil
"*Non-nil means the first line of a docstring may end with a comma.
"Non-nil means the first line of a docstring may end with a comma.
Ordinarily, a full sentence is required. This may be misleading when
there is a substantial caveat to the one-line description -- the comma
should be used when the first part could stand alone as a sentence, but
it indicates that a modifying clause follows."
:group 'checkdoc
:type 'boolean)
(put 'checkdoc-permit-comma-termination-flag 'safe-local-variable 'booleanp)
(defcustom checkdoc-spellcheck-documentation-flag nil
"*Non-nil means run Ispell on text based on value.
"Non-nil means run Ispell on text based on value.
This is automatically set to nil if Ispell does not exist on your
system. Possible values are:
@ -259,14 +267,14 @@ system. Possible values are:
"List of words that are correct when spell-checking Lisp documentation.")
(defcustom checkdoc-max-keyref-before-warn 10
"*The number of \\ [command-to-keystroke] tokens allowed in a doc string.
"The number of \\ [command-to-keystroke] tokens allowed in a doc string.
Any more than this and a warning is generated suggesting that the construct
\\ {keymap} be used instead."
:group 'checkdoc
:type 'integer)
(defcustom checkdoc-arguments-in-order-flag t
"*Non-nil means warn if arguments appear out of order.
"Non-nil means warn if arguments appear out of order.
Setting this to nil will mean only checking that all the arguments
appear in the proper form in the documentation, not that they are in
the same order as they appear in the argument list. No mention is
@ -298,7 +306,7 @@ problem discovered. This is useful for adding additional checks.")
A search leaves the cursor in front of the parameter list.")
(defcustom checkdoc-verb-check-experimental-flag t
"*Non-nil means to attempt to check the voice of the doc string.
"Non-nil means to attempt to check the voice of the doc string.
This check keys off some words which are commonly misused. See the
variable `checkdoc-common-verbs-wrong-voice' if you wish to add your own."
:group 'checkdoc
@ -2633,12 +2641,6 @@ function called to create the messages."
(setq checkdoc-pending-errors nil)
nil)))
(defgroup checkdoc nil
"Support for doc string checking in Emacs Lisp."
:prefix "checkdoc"
:group 'lisp
:version "20.3")
(custom-add-option 'emacs-lisp-mode-hook
(lambda () (checkdoc-minor-mode 1)))
@ -2650,5 +2652,5 @@ function called to create the messages."
(provide 'checkdoc)
;;; arch-tag: c49a7ec8-3bb7-46f2-bfbc-d5f26e033b26
;; arch-tag: c49a7ec8-3bb7-46f2-bfbc-d5f26e033b26
;;; checkdoc.el ends here

View file

@ -60,14 +60,22 @@ fire repeatedly that many seconds apart."
(defun timer-set-idle-time (timer secs &optional repeat)
"Set the trigger idle time of TIMER to SECS.
SECS may be an integer, floating point number, or the internal
time format (HIGH LOW USECS) returned by, e.g., `current-idle-time'.
If optional third argument REPEAT is non-nil, make the timer
fire each time Emacs is idle for that many seconds."
(or (timerp timer)
(error "Invalid timer"))
(if (consp secs)
(progn (aset timer 1 (car secs))
(aset timer 2 (if (consp (cdr secs)) (car (cdr secs)) (cdr secs)))
(aset timer 3 (or (and (consp (cdr secs)) (consp (cdr (cdr secs)))
(nth 2 secs))
0)))
(aset timer 1 0)
(aset timer 2 0)
(aset timer 3 0)
(timer-inc-time timer secs)
(timer-inc-time timer secs))
(aset timer 4 repeat)
timer)
@ -104,7 +112,7 @@ of SECS seconds since the epoch. SECS may be a fraction."
(defun timer-relative-time (time secs &optional usecs)
"Advance TIME by SECS seconds and optionally USECS microseconds.
SECS may be a fraction."
SECS may be either an integer or a floating point number."
(let ((high (car time))
(low (if (consp (cdr time)) (nth 1 time) (cdr time)))
(micro (if (numberp (car-safe (cdr-safe (cdr time))))
@ -412,7 +420,10 @@ This function is for compatibility; see also `run-with-timer'."
(defun run-with-idle-timer (secs repeat function &rest args)
"Perform an action the next time Emacs is idle for SECS seconds.
The action is to call FUNCTION with arguments ARGS.
SECS may be an integer or a floating point number.
SECS may be an integer, a floating point number, or the internal
time format (HIGH LOW USECS) returned by, e.g., `current-idle-time'.
If Emacs is currently idle, and has been idle for N seconds (N < SECS),
then it will call FUNCTION in SECS - N seconds from now.
If REPEAT is non-nil, do the action each time Emacs has been idle for
exactly SECS seconds (that is, only once for each time Emacs becomes idle).
@ -425,7 +436,7 @@ This function returns a timer object which you can use in `cancel-timer'."
(let ((timer (timer-create)))
(timer-set-function timer function args)
(timer-set-idle-time timer secs repeat)
(timer-activate-when-idle timer)
(timer-activate-when-idle timer t)
timer))
(defun with-timeout-handler (tag)

View file

@ -66,7 +66,7 @@
;; regexp: regular expression that matches the end of a response from
;; the process
(defun tq-queue-head-regexp (tq) (car (cdr (car (tq-queue tq)))))
;; closure: additional data to pass to function
;; closure: additional data to pass to the function
(defun tq-queue-head-closure (tq) (car (cdr (cdr (car (tq-queue tq))))))
;; fn: function to call upon receiving a complete response from the
;; process
@ -119,7 +119,7 @@ If DELAY-QUESTION is non-nil, delay sending this question until
the process has finished replying to any previous questions.
This produces more reliable results with some processes."
(let ((sendp (or (not delay-question)
(not (tq-queue-head-question tq)))))
(not (tq-queue tq)))))
(tq-queue-add tq (unless sendp question) regexp closure fn)
(when sendp
(process-send-string (tq-process tq) question))))
@ -131,14 +131,18 @@ This produces more reliable results with some processes."
(defun tq-filter (tq string)
"Append STRING to the TQ's buffer; then process the new data."
(with-current-buffer (tq-buffer tq)
(let ((buffer (tq-buffer tq)))
(when (buffer-live-p buffer)
(with-current-buffer buffer
(goto-char (point-max))
(insert string)
(tq-process-buffer tq)))
(tq-process-buffer tq)))))
(defun tq-process-buffer (tq)
"Check TQ's buffer for the regexp at the head of the queue."
(set-buffer (tq-buffer tq))
(let ((buffer (tq-buffer tq)))
(when (buffer-live-p buffer)
(set-buffer buffer)
(if (= 0 (buffer-size)) ()
(if (tq-queue-empty tq)
(let ((buf (generate-new-buffer "*spurious*")))
@ -159,7 +163,7 @@ This produces more reliable results with some processes."
answer)
(error nil))
(tq-queue-pop tq))
(tq-process-buffer tq))))))
(tq-process-buffer tq))))))))
(provide 'tq)

View file

@ -46,6 +46,8 @@
(defvar mark-even-if-inactive)
(defvar init-message)
(defvar initial)
(defvar undo-beg-posn)
(defvar undo-end-posn)
;; loading happens only in non-interactive compilation
;; in order to spare non-viperized emacs from being viperized
@ -196,7 +198,7 @@
(viper-save-cursor-color 'before-insert-mode))
;; set insert mode cursor color
(viper-change-cursor-color viper-insert-state-cursor-color)))
(if (eq viper-current-state 'emacs-state)
(if (and viper-emacs-state-cursor-color (eq viper-current-state 'emacs-state))
(let ((has-saved-cursor-color-in-emacs-mode
(stringp (viper-get-saved-cursor-color-in-emacs-mode))))
(or has-saved-cursor-color-in-emacs-mode
@ -722,12 +724,13 @@
(viper-set-replace-overlay (point-min) (point-min)))
(viper-hide-replace-overlay)
(if viper-emacs-state-cursor-color
(let ((has-saved-cursor-color-in-emacs-mode
(stringp (viper-get-saved-cursor-color-in-emacs-mode))))
(or has-saved-cursor-color-in-emacs-mode
(string= (viper-get-cursor-color) viper-emacs-state-cursor-color)
(viper-save-cursor-color 'before-emacs-mode))
(viper-change-cursor-color viper-emacs-state-cursor-color))
(viper-change-cursor-color viper-emacs-state-cursor-color)))
(viper-change-state 'emacs-state)
@ -1030,10 +1033,13 @@ as a Meta key and any number of multiple escapes is allowed."
(inhibit-quit t))
(if (viper-ESC-event-p event)
(progn
;; Emacs 22.50.8 introduced a bug, which makes even a single ESC into
;; a fast keyseq. To guard against this, we added a check if there
;; are other events as well
(if (and (viper-fast-keysequence-p) unread-command-events)
;; Some versions of Emacs (eg., 22.50.8 have a bug, which makes even
;; a single ESC into ;; a fast keyseq. To guard against this, we
;; added a check if there are other events as well. Keep the next
;; line for the next time the bug reappears, so that will remember to
;; report it.
;;(if (and (viper-fast-keysequence-p) unread-command-events)
(if (viper-fast-keysequence-p) ;; for Emacsen without the above bug
(progn
(let (minor-mode-map-alist emulation-mode-map-alists)
(viper-set-unread-command-events event)
@ -1744,12 +1750,14 @@ invokes the command before that, etc."
;; Hook used in viper-undo
(defun viper-after-change-undo-hook (beg end len)
(if undo-in-progress
(setq undo-beg-posn beg
undo-end-posn (or end beg))
;; some other hooks may be changing various text properties in
;; the buffer in response to 'undo'; so remove this hook to avoid
;; its repeated invocation
(remove-hook 'viper-undo-functions 'viper-after-change-undo-hook 'local))
(remove-hook 'viper-undo-functions 'viper-after-change-undo-hook 'local)
))
(defun viper-undo ()
"Undo previous change."
@ -1764,9 +1772,13 @@ invokes the command before that, etc."
(undo-start)
(undo-more 2)
(setq undo-beg-posn (or undo-beg-posn before-undo-pt)
undo-end-posn (or undo-end-posn undo-beg-posn))
;;(setq undo-beg-posn (or undo-beg-posn (point))
;; undo-end-posn (or undo-end-posn (point)))
;;(setq undo-beg-posn (or undo-beg-posn before-undo-pt)
;; undo-end-posn (or undo-end-posn undo-beg-posn))
(if (and undo-beg-posn undo-end-posn)
(progn
(goto-char undo-beg-posn)
(sit-for 0)
(if (and viper-keep-point-on-undo
@ -1776,13 +1788,13 @@ invokes the command before that, etc."
(viper-sit-for-short 300)
(goto-char undo-end-posn)
(viper-sit-for-short 300)
(if (and (> (viper-chars-in-region undo-beg-posn before-undo-pt) 1)
(> (viper-chars-in-region undo-end-posn before-undo-pt) 1))
(if (pos-visible-in-window-p undo-beg-posn)
(goto-char before-undo-pt)
(goto-char undo-beg-posn)))
(push-mark before-undo-pt t))
))
(if (and (eolp) (not (bolp))) (backward-char 1))
;;(if (not modified) (set-buffer-modified-p t))
)
(setq this-command 'viper-undo))
@ -3952,7 +3964,8 @@ Null string will repeat previous search."
(let ((val (viper-p-val arg))
(com (viper-getcom arg))
debug-on-error)
(if (null viper-s-string) (error viper-NoPrevSearch))
(if (or (null viper-s-string) (string= viper-s-string ""))
(error viper-NoPrevSearch))
(viper-search viper-s-string viper-s-forward arg)
(if com
(progn

View file

@ -208,12 +208,12 @@
;; If this is a one-letter magic command, splice in args.
(defun ex-splice-args-in-1-letr-cmd (key list)
(let ((onelet (ex-cmd-is-one-letter (assoc (substring key 0 1) list))))
(if onelet
(let ((oneletter (ex-cmd-is-one-letter (assoc (substring key 0 1) list))))
(if oneletter
(list key
(append (cadr onelet)
(append (cadr oneletter)
(if (< 1 (length key)) (list (substring key 1))))
(caddr onelet)))
(car (cdr (cdr oneletter))) ))
))

View file

@ -434,7 +434,10 @@ delete the text being replaced, as in standard Vi."
(if (fboundp 'make-variable-frame-local)
(make-variable-frame-local 'viper-insert-state-cursor-color))
(defcustom viper-emacs-state-cursor-color "Magenta"
;; viper-emacs-state-cursor-color doesn't work well. Causes cursor colors to be
;; confused in some cases. So, this var is nulled for now.
;; (defcustom viper-emacs-state-cursor-color "Magenta"
(defcustom viper-emacs-state-cursor-color nil
"Cursor color when Viper is in emacs state."
:type 'string
:group 'viper)

View file

@ -137,10 +137,10 @@
(x-display-color-p) ; emacs
))
(defsubst viper-get-cursor-color ()
(defun viper-get-cursor-color (&optional frame)
(viper-cond-compile-for-xemacs-or-emacs
(color-instance-name
(frame-property (selected-frame) 'cursor-color)) ; xemacs
(frame-property (or frame (selected-frame)) 'cursor-color)) ; xemacs
(cdr (assoc 'cursor-color (frame-parameters))) ; emacs
))
@ -152,18 +152,31 @@
;; cursor colors
(defun viper-change-cursor-color (new-color)
(defun viper-change-cursor-color (new-color &optional frame)
(if (and (viper-window-display-p) (viper-color-display-p)
(stringp new-color) (viper-color-defined-p new-color)
(not (string= new-color (viper-get-cursor-color))))
(viper-cond-compile-for-xemacs-or-emacs
(set-frame-property
(selected-frame) 'cursor-color (make-color-instance new-color))
(or frame (selected-frame))
'cursor-color (make-color-instance new-color))
(modify-frame-parameters
(selected-frame) (list (cons 'cursor-color new-color)))
(or frame (selected-frame))
(list (cons 'cursor-color new-color)))
)
))
(defun viper-set-cursor-color-according-to-state (&optional frame)
(cond ((eq viper-current-state 'replace-state)
(viper-change-cursor-color viper-replace-state-cursor-color frame))
((and (eq viper-current-state 'emacs-state)
viper-emacs-state-cursor-color)
(viper-change-cursor-color viper-emacs-state-cursor-color frame))
((eq viper-current-state 'insert-state)
(viper-change-cursor-color viper-insert-state-cursor-color frame))
(t
(viper-change-cursor-color viper-vi-state-cursor-color frame))))
;; By default, saves current frame cursor color in the
;; viper-saved-cursor-color-in-replace-mode property of viper-replace-overlay
(defun viper-save-cursor-color (before-which-mode)
@ -191,7 +204,7 @@
(if viper-emacs-p 'frame-parameter 'frame-property)
(selected-frame)
'viper-saved-cursor-color-in-replace-mode)
(if (eq viper-current-state 'emacs-mode)
(if (and (eq viper-current-state 'emacs-mode) viper-emacs-state-cursor-color)
viper-emacs-state-cursor-color
viper-vi-state-cursor-color)))
@ -201,7 +214,7 @@
(if viper-emacs-p 'frame-parameter 'frame-property)
(selected-frame)
'viper-saved-cursor-color-in-insert-mode)
(if (eq viper-current-state 'emacs-mode)
(if (and (eq viper-current-state 'emacs-mode) viper-emacs-state-cursor-color)
viper-emacs-state-cursor-color
viper-vi-state-cursor-color)))

View file

@ -534,10 +534,6 @@ If Viper is enabled, turn it off. Otherwise, turn it on."
(defun viper-mode ()
"Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Viper'."
(interactive)
(if (null viper-vi-state-cursor-color)
(modify-frame-parameters
(selected-frame)
(list (cons 'viper-vi-state-cursor-color (viper-get-cursor-color)))))
(if (not noninteractive)
(progn
;; if the user requested viper-mode explicitly
@ -618,7 +614,8 @@ This startup message appears whenever you load Viper, unless you type `y' now."
(or (memq major-mode viper-emacs-state-mode-list) ; don't switch to Vi
(memq major-mode viper-insert-state-mode-list) ; don't switch
(viper-change-state-to-vi)))))
(viper-change-state-to-vi))
)))
;; Apply a little heuristic to invoke vi state on major-modes
@ -863,7 +860,10 @@ It also can't undo some Viper settings."
;; So do it via the window-setup-hook
(add-hook 'window-setup-hook
'(lambda ()
(setq viper-vi-state-cursor-color (viper-get-cursor-color))))
(modify-frame-parameters
(selected-frame)
(list (cons 'viper-vi-state-cursor-color
(viper-get-cursor-color))))))
;; Tell vc-diff to put *vc* in Vi mode
(if (featurep 'vc)
@ -903,7 +903,6 @@ It also can't undo some Viper settings."
(defadvice set-cursor-color (after viper-set-cursor-color-ad activate)
"Change cursor color in VI state."
;;(setq viper-vi-state-cursor-color (ad-get-arg 0))
(modify-frame-parameters
(selected-frame)
(list (cons 'viper-vi-state-cursor-color (ad-get-arg 0))))
@ -1008,8 +1007,8 @@ It also can't undo some Viper settings."
;; these are primarily advices and Vi-ish variable settings
(defun viper-non-hook-settings ()
;; Viper changes the default mode-line-buffer-identification
(setq-default mode-line-buffer-identification '(" %b"))
;;;; Viper changes the default mode-line-buffer-identification
;;(setq-default mode-line-buffer-identification '(" %b"))
;; setup emacs-supported vi-style feel
(setq next-line-add-newlines nil

View file

@ -1088,9 +1088,9 @@ Put first the functions more likely to cause a change and cheaper to compute.")
"Move fontification boundaries to beginning of lines."
(let ((changed nil))
(goto-char font-lock-beg)
(unless (bobp) (setq changed t font-lock-beg (line-beginning-position)))
(unless (bolp) (setq changed t font-lock-beg (line-beginning-position)))
(goto-char font-lock-end)
(unless (bobp) (setq changed t font-lock-end (line-beginning-position 2)))
(unless (bolp) (setq changed t font-lock-end (line-beginning-position 2)))
changed))
(defun font-lock-default-fontify-region (beg end loudly)

View file

@ -1253,6 +1253,35 @@ The function `blink-cursor-start' is called when the timer fires.")
This timer calls `blink-cursor-timer-function' every
`blink-cursor-interval' seconds.")
(defun blink-cursor-start ()
"Timer function called from the timer `blink-cursor-idle-timer'.
This starts the timer `blink-cursor-timer', which makes the cursor blink
if appropriate. It also arranges to cancel that timer when the next
command starts, by installing a pre-command hook."
(when (null blink-cursor-timer)
;; Set up the timer first, so that if this signals an error,
;; blink-cursor-end is not added to pre-command-hook.
(setq blink-cursor-timer
(run-with-timer blink-cursor-interval blink-cursor-interval
'blink-cursor-timer-function))
(add-hook 'pre-command-hook 'blink-cursor-end)
(internal-show-cursor nil nil)))
(defun blink-cursor-timer-function ()
"Timer function of timer `blink-cursor-timer'."
(internal-show-cursor nil (not (internal-show-cursor-p))))
(defun blink-cursor-end ()
"Stop cursor blinking.
This is installed as a pre-command hook by `blink-cursor-start'.
When run, it cancels the timer `blink-cursor-timer' and removes
itself as a pre-command hook."
(remove-hook 'pre-command-hook 'blink-cursor-end)
(internal-show-cursor nil t)
(when blink-cursor-timer
(cancel-timer blink-cursor-timer)
(setq blink-cursor-timer nil)))
(define-minor-mode blink-cursor-mode
"Toggle blinking cursor mode.
With a numeric argument, turn blinking cursor mode on iff ARG is positive.
@ -1270,48 +1299,17 @@ cursor display. On a text-only terminal, this is not implemented."
:group 'cursor
:global t
(if blink-cursor-idle-timer (cancel-timer blink-cursor-idle-timer))
(if blink-cursor-timer (cancel-timer blink-cursor-timer))
(setq blink-cursor-idle-timer nil
blink-cursor-timer nil)
(if blink-cursor-mode
(progn
(setq blink-cursor-idle-timer nil)
(blink-cursor-end)
(when blink-cursor-mode
;; Hide the cursor.
;;(internal-show-cursor nil nil)
(setq blink-cursor-idle-timer
(run-with-idle-timer blink-cursor-delay
blink-cursor-delay
'blink-cursor-start)))
(internal-show-cursor nil t)))
'blink-cursor-start))))
(define-obsolete-variable-alias 'blink-cursor 'blink-cursor-mode "22.1")
(defun blink-cursor-start ()
"Timer function called from the timer `blink-cursor-idle-timer'.
This starts the timer `blink-cursor-timer', which makes the cursor blink
if appropriate. It also arranges to cancel that timer when the next
command starts, by installing a pre-command hook."
(when (null blink-cursor-timer)
(add-hook 'pre-command-hook 'blink-cursor-end)
(internal-show-cursor nil nil)
(setq blink-cursor-timer
(run-with-timer blink-cursor-interval blink-cursor-interval
'blink-cursor-timer-function))))
(defun blink-cursor-timer-function ()
"Timer function of timer `blink-cursor-timer'."
(internal-show-cursor nil (not (internal-show-cursor-p))))
(defun blink-cursor-end ()
"Stop cursor blinking.
This is installed as a pre-command hook by `blink-cursor-start'.
When run, it cancels the timer `blink-cursor-timer' and removes
itself as a pre-command hook."
(remove-hook 'pre-command-hook 'blink-cursor-end)
(internal-show-cursor nil t)
(cancel-timer blink-cursor-timer)
(setq blink-cursor-timer nil))
;; Hourglass pointer

View file

@ -1,3 +1,14 @@
2006-08-23 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
[ Backported bug fix from No Gnus. ]
* gnus.el (gnus-find-method-for-group): On killed/unknown groups, try
looking up the method using GROUP's prefix before inventing a new one.
It is used on killed/unknown groups in various places where returning
an all-new method isn't expected by the caller.
* gnus-util.el (gnus-group-server): Copy required macro from No Gnus.
2006-08-13 Romain Francoise <romain@orebokech.com>
* mm-extern.el (mm-extern-mail-server): End `y-or-n-p' prompt with a

View file

@ -607,6 +607,17 @@ If N, return the Nth ancestor instead."
(substring gname (match-end 0))
gname)))
(defmacro gnus-group-server (group)
"Find the server name of a foreign newsgroup.
For example, (gnus-group-server \"nnimap+yxa:INBOX.foo\") would
yield \"nnimap:yxa\"."
`(let ((gname ,group))
(if (string-match "^\\([^:+]+\\)\\(?:\\+\\([^:]*\\)\\)?:" gname)
(format "%s:%s" (match-string 1 gname) (or
(match-string 2 gname)
""))
(format "%s:%s" (car gnus-select-method) (cadr gnus-select-method)))))
(defun gnus-make-sort-function (funs)
"Return a composite sort condition based on the functions in FUNS."
(cond

View file

@ -4079,8 +4079,13 @@ If NEWSGROUP is nil, return the global kill file name instead."
(or gnus-override-method
(and (not group)
gnus-select-method)
(and (not (gnus-group-entry group)) ;; a new group
(gnus-group-name-to-method group))
(and (not (gnus-group-entry group))
;; Killed or otherwise unknown group.
(or
;; If we know a virtual server by that name, return its method.
(gnus-server-to-method (gnus-group-server group))
;; Guess a new method as last resort.
(gnus-group-name-to-method group)))
(let ((info (or info (gnus-get-info group)))
method)
(if (or (not info)

View file

@ -1840,6 +1840,7 @@ If INITIAL is non-nil, it specifies the initial input string."
(and d (cdr d)))))))
(if (member ido-default-item ido-ignore-item-temp-list)
(setq ido-default-item nil))
(ido-trace "new default" ido-default-item)
(setq ido-set-default-item nil))
(if ido-process-ignore-lists-inhibit
@ -3528,20 +3529,21 @@ for first matching file."
(let* ((case-fold-search ido-case-fold)
(slash (and (not ido-enable-prefix) (ido-final-slash ido-text)))
(text (if slash (substring ido-text 0 -1) ido-text))
(rexq (concat (if ido-enable-regexp text (regexp-quote text)) (if slash ".*/" "")))
(rex0 (if ido-enable-regexp text (regexp-quote text)))
(rexq (concat rex0 (if slash ".*/" "")))
(re (if ido-enable-prefix (concat "\\`" rexq) rexq))
(full-re (and do-full (not ido-enable-regexp) (not (string-match "\$\\'" re))
(concat "\\`" re "\\'")))
(full-re (and do-full (not ido-enable-regexp) (not (string-match "\$\\'" rex0))
(concat "\\`" rex0 (if slash "/" "") "\\'")))
(suffix-re (and do-full slash
(not ido-enable-regexp) (not (string-match "\$\\'" rex0))
(concat rex0 "/\\'")))
(prefix-re (and full-re (not ido-enable-prefix)
(concat "\\`" rexq)))
(non-prefix-dot (or (not ido-enable-dot-prefix)
(not ido-process-ignore-lists)
ido-enable-prefix
(= (length ido-text) 0)))
full-matches
prefix-matches
matches)
full-matches suffix-matches prefix-matches matches)
(setq ido-incomplete-regexp nil)
(condition-case error
(mapcar
@ -3555,6 +3557,8 @@ for first matching file."
(cond
((and full-re (string-match full-re name))
(setq full-matches (cons item full-matches)))
((and suffix-re (string-match suffix-re name))
(setq suffix-matches (cons item suffix-matches)))
((and prefix-re (string-match prefix-re name))
(setq prefix-matches (cons item prefix-matches)))
(t (setq matches (cons item matches))))))
@ -3566,9 +3570,14 @@ for first matching file."
;; special-case single match, and handle appropriately
;; elsewhere.
matches (cdr error))))
(if prefix-matches
(when prefix-matches
(ido-trace "prefix match" prefix-matches)
(setq matches (nconc prefix-matches matches)))
(if full-matches
(when suffix-matches
(ido-trace "suffix match" (list text suffix-re suffix-matches))
(setq matches (nconc suffix-matches matches)))
(when full-matches
(ido-trace "full match" (list text full-re full-matches))
(setq matches (nconc full-matches matches)))
(when (and (null matches)
ido-enable-flex-matching
@ -4096,12 +4105,13 @@ For details of keybindings, do `\\[describe-function] ido-find-file'."
try-single-dir-match
refresh)
(when ido-trace-enable
(ido-trace "\nexhibit" this-command)
(ido-trace "dir" ido-current-directory)
(ido-trace "contents" contents)
(ido-trace "list" ido-cur-list)
(ido-trace "matches" ido-matches)
(ido-trace "rescan" ido-rescan)
(ido-trace "rescan" ido-rescan))
(save-excursion
(goto-char (point-max))

View file

@ -171,6 +171,8 @@ If nil, contextual fontification is disabled.")
(defvar jit-lock-stealth-timer nil
"Timer for stealth fontification in Just-in-time Lock mode.")
(defvar jit-lock-stealth-repeat-timer nil
"Timer for repeated stealth fontification in Just-in-time Lock mode.")
(defvar jit-lock-context-timer nil
"Timer for context fontification in Just-in-time Lock mode.")
(defvar jit-lock-defer-timer nil
@ -178,6 +180,8 @@ If nil, contextual fontification is disabled.")
(defvar jit-lock-defer-buffers nil
"List of buffers with pending deferred fontification.")
(defvar jit-lock-stealth-buffers nil
"List of buffers that are being fontified stealthily.")
;;; JIT lock mode
@ -225,6 +229,13 @@ the variable `jit-lock-stealth-nice'."
(run-with-idle-timer jit-lock-stealth-time t
'jit-lock-stealth-fontify)))
;; Create, but do not activate, the idle timer for repeated
;; stealth fontification.
(when (and jit-lock-stealth-time (null jit-lock-stealth-repeat-timer))
(setq jit-lock-stealth-repeat-timer (timer-create))
(timer-set-function jit-lock-stealth-repeat-timer
'jit-lock-stealth-fontify '(t)))
;; Init deferred fontification timer.
(when (and jit-lock-defer-time (null jit-lock-defer-timer))
(setq jit-lock-defer-timer
@ -391,9 +402,10 @@ Defaults to the whole buffer. END can be out of bounds."
(buf (current-buffer)))
(run-with-timer
0 nil (lambda ()
(with-current-buffer buf
(with-buffer-prepared-for-jit-lock
(put-text-property start orig-start
'fontified t buf))))))
'fontified t)))))))
;; Find the start of the next chunk, if any.
(setq start (text-property-any next end 'fontified nil))))))))
@ -442,71 +454,55 @@ Value is nil if there is nothing more to fontify."
(t next))))
result))))
(defun jit-lock-stealth-fontify ()
(defun jit-lock-stealth-fontify (&optional repeat)
"Fontify buffers stealthily.
This functions is called after Emacs has been idle for
`jit-lock-stealth-time' seconds."
;; I used to check `inhibit-read-only' here, but I can't remember why. -stef
This function is called repeatedly after Emacs has become idle for
`jit-lock-stealth-time' seconds. Optional argument REPEAT is expected
non-nil in a repeated invocation of this function."
;; Cancel timer for repeated invocations.
(unless repeat
(cancel-timer jit-lock-stealth-repeat-timer))
(unless (or executing-kbd-macro
memory-full
(window-minibuffer-p (selected-window)))
(let ((buffers (buffer-list))
(outer-buffer (current-buffer))
(window-minibuffer-p (selected-window))
;; For first invocation set up `jit-lock-stealth-buffers'.
;; In repeated invocations it's already been set up.
(null (if repeat
jit-lock-stealth-buffers
(setq jit-lock-stealth-buffers (buffer-list)))))
(let ((buffer (car jit-lock-stealth-buffers))
(delay 0)
minibuffer-auto-raise
message-log-max)
(with-local-quit
(while (and buffers (not (input-pending-p)))
(with-current-buffer (pop buffers)
(when jit-lock-mode
;; This is funny. Calling sit-for with 3rd arg non-nil
;; so that it doesn't redisplay, internally calls
;; wait_reading_process_input also with a parameter
;; saying "don't redisplay." Since this function here
;; is called periodically, this effectively leads to
;; process output not being redisplayed at all because
;; redisplay_internal is never called. (That didn't
;; work in the old redisplay either.) So, we learn that
;; we mustn't call sit-for that way here. But then, we
;; have to be cautious not to call sit-for in a widened
;; buffer, since this could display hidden parts of that
;; buffer. This explains the seemingly weird use of
;; save-restriction/widen here.
message-log-max
start)
(if (and jit-lock-stealth-load
(> (car (load-average)) jit-lock-stealth-load))
;; Wait a little if load is too high.
(setq delay jit-lock-stealth-time)
(if (buffer-live-p buffer)
(with-current-buffer buffer
(if (and jit-lock-mode
(setq start (jit-lock-stealth-chunk-start (point))))
;; Fontify one block of at most `jit-lock-chunk-size'
;; characters.
(with-temp-message (if jit-lock-stealth-verbose
(concat "JIT stealth lock "
(buffer-name)))
;; In the following code, the `sit-for' calls cause a
;; redisplay, so it's required that the
;; buffer-modified flag of a buffer that is displayed
;; has the right value---otherwise the mode line of
;; an unmodified buffer would show a `*'.
(let (start
(nice (or jit-lock-stealth-nice 0))
(point (point-min)))
(while (and (setq start
(jit-lock-stealth-chunk-start point))
;; In case sit-for runs any timers,
;; give them the expected current buffer.
(with-current-buffer outer-buffer
(sit-for nice)))
;; fontify a block.
(jit-lock-fontify-now start (+ start jit-lock-chunk-size))
;; If stealth jit-locking is done backwards, this leads to
;; excessive O(n^2) refontification. -stef
;; (when (>= jit-lock-context-unfontify-pos start)
;; (setq jit-lock-context-unfontify-pos end))
;; Wait a little if load is too high.
(when (and jit-lock-stealth-load
(> (car (load-average)) jit-lock-stealth-load))
;; In case sit-for runs any timers,
;; give them the expected current buffer.
(with-current-buffer outer-buffer
(sit-for (or jit-lock-stealth-time 30))))))))))))))
(jit-lock-fontify-now start
(+ start jit-lock-chunk-size))
;; Run again after `jit-lock-stealth-nice' seconds.
(setq delay (or jit-lock-stealth-nice 0)))
;; Nothing to fontify here. Remove this buffer from
;; `jit-lock-stealth-buffers' and run again immediately.
(setq jit-lock-stealth-buffers (cdr jit-lock-stealth-buffers))))
;; Buffer is no longer live. Remove it from
;; `jit-lock-stealth-buffers' and run again immediately.
(setq jit-lock-stealth-buffers (cdr jit-lock-stealth-buffers))))
;; Call us again.
(when jit-lock-stealth-buffers
(timer-set-idle-time jit-lock-stealth-repeat-timer (current-idle-time))
(timer-inc-time jit-lock-stealth-repeat-timer delay)
(timer-activate-when-idle jit-lock-stealth-repeat-timer t)))))
;;; Deferred fontification.
@ -577,10 +573,10 @@ the three arguments of `after-change-functions': START END OLD-LEN.
The extended region to refontify is returned indirectly by modifying
the variables `jit-lock-start' and `jit-lock-end'.
Note that extending the region this way is not strictly necessary,
except that the nature of the redisplay code tends to otherwise leave
some of the rehighlighted text displayed with the old highlight until the
next redisplay. See comment in `jit-lock-fontify-now'.")
Note that extending the region this way is not strictly necessary, except
that the nature of the redisplay code tends to otherwise leave some of
the rehighlighted text displayed with the old highlight until the next
redisplay (see comment about repeated redisplay in `jit-lock-fontify-now').")
(defun jit-lock-after-change (start end old-len)
"Mark the rest of the buffer as not fontified after a change.

View file

@ -409,7 +409,7 @@ Optional arg EMPTY is message to print if no macros are defined."
(defun kmacro-repeat-on-last-key (keys)
"Process kmacro commands keys immidiately after cycling the ring."
"Process kmacro commands keys immediately after cycling the ring."
(setq keys (vconcat keys))
(let ((n (1- (length keys)))
cmd done repeat)

View file

@ -2398,6 +2398,8 @@ and selects that window."
(global-set-key [right-fringe mouse-1] 'mouse-set-point)
(global-set-key [mouse-2] 'mouse-yank-at-click)
;; Allow yanking also when the corresponding cursor is "in the fringe".
(global-set-key [right-fringe mouse-2] [mouse-2])
(global-set-key [mouse-3] 'mouse-save-then-kill)
;; By binding these to down-going events, we let the user use the up-going

View file

@ -40,6 +40,8 @@
;; Open a new irc connection with:
;; M-x irc RET
;;; Todo:
;;; Code:
(require 'ring)
@ -140,6 +142,10 @@ number. If zero or nil, no truncating is done."
(integer :tag "Number of lines"))
:group 'rcirc)
(defcustom rcirc-show-maximum-output t
"*If non-nil, scroll buffer to keep the point at the bottom of
the window.")
(defcustom rcirc-authinfo nil
"List of authentication passwords.
Each element of the list is a list with a SERVER-REGEXP string
@ -297,6 +303,7 @@ and the cdr part is used for encoding."
(defvar rcirc-urls nil
"List of urls seen in the current buffer.")
(put 'rcirc-urls 'permanent-local t)
(defvar rcirc-keepalive-seconds 60
"Number of seconds between keepalive pings.
@ -539,7 +546,10 @@ Function is called with PROCESS, COMMAND, SENDER, ARGS and LINE.")
(defun rcirc-buffer-process (&optional buffer)
"Return the process associated with channel BUFFER.
With no argument or nil as argument, use the current buffer."
(get-buffer-process (or buffer rcirc-server-buffer)))
(get-buffer-process (if buffer
(with-current-buffer buffer
rcirc-server-buffer)
rcirc-server-buffer)))
(defun rcirc-server-name (process)
"Return PROCESS server name, given by the 001 response."
@ -601,10 +611,11 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
(defvar rcirc-nick-completions nil)
(defvar rcirc-nick-completion-start-offset nil)
(defun rcirc-complete-nick ()
"Cycle through nick completions from list of nicks in channel."
(interactive)
(if (eq last-command 'rcirc-complete-nick)
(if (eq last-command this-command)
(setq rcirc-nick-completions
(append (cdr rcirc-nick-completions)
(list (car rcirc-nick-completions))))
@ -626,6 +637,7 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
rcirc-target))))))
(let ((completion (car rcirc-nick-completions)))
(when completion
(rcirc-put-nick-channel (rcirc-buffer-process) completion rcirc-target)
(delete-region (+ rcirc-prompt-end-marker
rcirc-nick-completion-start-offset)
(point))
@ -709,7 +721,6 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
(make-local-variable 'rcirc-short-buffer-name)
(setq rcirc-short-buffer-name nil)
(make-local-variable 'rcirc-urls)
(setq rcirc-urls nil)
(setq use-hard-newlines t)
(make-local-variable 'rcirc-decode-coding-system)
@ -742,6 +753,9 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
(make-local-variable 'kill-buffer-hook)
(add-hook 'kill-buffer-hook 'rcirc-kill-buffer-hook)
(make-local-variable 'window-scroll-functions)
(add-hook 'window-scroll-functions 'rcirc-scroll-to-bottom)
;; add to buffer list, and update buffer abbrevs
(when target ; skip server buffer
(let ((buffer (current-buffer)))
@ -1144,6 +1158,15 @@ is found by looking up RESPONSE in `rcirc-response-formats'."
(make-variable-buffer-local 'rcirc-last-sender)
(defvar rcirc-gray-toggle nil)
(make-variable-buffer-local 'rcirc-gray-toggle)
(defun rcirc-scroll-to-bottom (window display-start)
"Scroll window to show maximum output if `rcirc-show-maximum-output' is
non-nil."
(when rcirc-show-maximum-output
(with-selected-window window
(when (>= (window-point) rcirc-prompt-end-marker)
(recenter -1)))))
(defun rcirc-print (process sender response target text &optional activity)
"Print TEXT in the buffer associated with TARGET.
Format based on SENDER and RESPONSE. If ACTIVITY is non-nil,
@ -1240,16 +1263,19 @@ record activity."
;; record modeline activity
(when activity
(let ((nick-match
(with-syntax-table rcirc-nick-syntax-table
(string-match (concat "\\b"
(regexp-quote (rcirc-nick process))
"\\b")
text)))
text))))
(when (if rcirc-ignore-buffer-activity-flag
;; - Always notice when our nick is mentioned
nick-match
;; - Never bother us if a dim-nick spoke
;; - unless our nick is mentioned, don't bother us
;; - with dim-nicks
(or nick-match
(not (and rcirc-dim-nick-regexp sender
(string-match rcirc-dim-nick-regexp sender))))
(string-match rcirc-dim-nick-regexp sender)))))
(rcirc-record-activity
(current-buffer)
(when (or nick-match (and (not (rcirc-channel-p rcirc-target))
@ -1504,7 +1530,7 @@ activity. Only run if the buffer is not visible and
(lopri (car pair))
(hipri (cdr pair)))
(setq rcirc-activity-string
(if (or hipri lopri)
(cond ((or hipri lopri)
(concat "-"
(and hipri "[")
(rcirc-activity-string hipri)
@ -1514,8 +1540,10 @@ activity. Only run if the buffer is not visible and
(rcirc-activity-string lopri)
")"))
(and hipri "]")
"-")
"-[]-"))))
"-"))
((not (null (rcirc-process-list)))
"-[]-")
(t "")))))
(defun rcirc-activity-string (buffers)
(mapconcat (lambda (b)
@ -1771,7 +1799,7 @@ 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: ")
(when (not (string= "" nick))
(if (member nick rcirc-ignore-list)
(if (member-ignore-case nick rcirc-ignore-list)
(setq rcirc-ignore-list (delete nick rcirc-ignore-list))
(setq rcirc-ignore-list (cons nick rcirc-ignore-list))))
(rcirc-print process (rcirc-nick process) "IGNORE" target
@ -1800,6 +1828,7 @@ ones added to the list automatically are marked with an asterisk."
"://")
"www.")
(1+ (char "-a-zA-Z0-9_."))
(1+ (char "-a-zA-Z0-9_"))
(optional ":" (1+ (char "0-9"))))
(and (1+ (char "-a-zA-Z0-9_."))
(or ".com" ".net" ".org")
@ -1823,7 +1852,7 @@ ones added to the list automatically are marked with an asterisk."
(defun rcirc-browse-url-at-point (point)
"Send URL at point to `browse-url'."
(interactive "d")
(let ((beg (previous-single-property-change point 'mouse-face))
(let ((beg (previous-single-property-change (1+ point) 'mouse-face))
(end (next-single-property-change point 'mouse-face)))
(browse-url (buffer-substring-no-properties beg end))))

View file

@ -1062,11 +1062,13 @@ The strings used as comment starts are built from
lines
(nth 3 style))))))
;;;###autoload
(defun comment-box (beg end &optional arg)
"Comment out the BEG .. END region, putting it inside a box.
The numeric prefix ARG specifies how many characters to add to begin- and
end- comment markers additionally to what `comment-add' already specifies."
(interactive "*r\np")
(comment-normalize-vars)
(let ((comment-style (if (cadr (assoc comment-style comment-styles))
'box-multi 'box)))
(comment-region beg end (+ comment-add arg))))

View file

@ -285,6 +285,7 @@ The remaining KEYS are passed directly to `cvs-create-fileinfo'."
(and
(cvs-or
(cvs-match "warning: \\(.*\\) is not (any longer) pertinent$" (file 1))
(cvs-match "`\\(.*\\)' is no longer in the repository$" (file 1))
(cvs-match "\\(.*\\) is no longer in the repository$" (file 1)))
(cvs-parsed-fileinfo
(if dont-change-disc '(NEED-UPDATE . REMOVED) 'DEAD) file))

View file

@ -315,7 +315,7 @@ Also display the main routine in the disassembly buffer if present."
"Nil means just pop up the GUD buffer unless `gdb-show-main' is t.
In this case it starts with two windows: one displaying the GUD
buffer and the other with the source file with the main routine
of the inferior. Non-nil means display the layout shown for
of the debugged program. Non-nil means display the layout shown for
`gdba'."
:type 'boolean
:group 'gud
@ -384,8 +384,7 @@ With arg, use separate IO iff arg is positive."
(list t nil) nil "-c"
(concat gdb-cpp-define-alist-program " "
gdb-cpp-define-alist-flags)))))
(define-list (split-string output "\n" t))
(name))
(define-list (split-string output "\n" t)) (name))
(setq gdb-define-alist nil)
(dolist (define define-list)
(setq name (nth 1 (split-string define "[( ]")))
@ -1291,6 +1290,7 @@ not GDB."
(progn
(setq gud-running t)
(setq gdb-inferior-status "running")
(setq gdb-signalled nil)
(gdb-force-mode-line-update
(propertize gdb-inferior-status 'face font-lock-type-face))
(gdb-remove-text-properties)
@ -2639,8 +2639,11 @@ corresponding to the mode line clicked."
(defun gdb-frame-memory-buffer ()
"Display memory contents in a new frame."
(interactive)
(let ((special-display-regexps (append special-display-regexps '(".*")))
(special-display-frame-alist gdb-frame-parameters))
(let* ((special-display-regexps (append special-display-regexps '(".*")))
(special-display-frame-alist
(cons '(left-fringe . 0)
(cons '(right-fringe . 0)
(cons '(width . 83) gdb-frame-parameters)))))
(display-buffer (gdb-get-buffer-create 'gdb-memory-buffer))))
@ -2657,6 +2660,7 @@ corresponding to the mode line clicked."
(defvar gdb-locals-watch-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
(define-key map "\r" (lambda () (interactive)
(beginning-of-line)
(gud-watch)))
@ -3512,10 +3516,32 @@ in_scope=\"\\(.*?\\)\".*?}")
(defvar gdb-locals-watch-map-1
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
(define-key map "\r" 'gud-watch)
(define-key map [mouse-2] 'gud-watch)
map)
"Keymap to create watch expression of a complex data type local variable.")
(defvar gdb-edit-locals-map-1
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
(define-key map "\r" 'gdb-edit-locals-value)
(define-key map [mouse-2] 'gdb-edit-locals-value)
map)
"Keymap to edit value of a simple data type local variable.")
(defun gdb-edit-locals-value (&optional event)
"Assign a value to a variable displayed in the locals buffer."
(interactive (list last-input-event))
(save-excursion
(if event (posn-set-point (event-end event)))
(beginning-of-line)
(let* ((var (current-word))
(value (read-string (format "New value (%s): " var))))
(gdb-enqueue-input
(list (concat gdb-server-prefix"set variable " var " = " value "\n")
'ignore)))))
;; Dont display values of arrays or structures.
;; These can be expanded using gud-watch.
(defun gdb-stack-list-locals-handler ()
@ -3543,20 +3569,26 @@ in_scope=\"\\(.*?\\)\".*?}")
(let* ((window (get-buffer-window buf 0))
(start (window-start window))
(p (window-point window))
(buffer-read-only nil))
(buffer-read-only nil) (name) (value))
(erase-buffer)
(dolist (local locals-list)
(setq name (car local))
(if (or (not (nth 2 local))
(string-match "^\\0x" (nth 2 local)))
(setq value (nth 2 local))
(if (or (not value)
(string-match "^\\0x" value))
(add-text-properties 0 (length name)
`(mouse-face highlight
help-echo "mouse-2: create watch expression"
local-map ,gdb-locals-watch-map-1)
name))
name)
(add-text-properties 0 (length value)
`(mouse-face highlight
help-echo "mouse-2: edit value"
local-map ,gdb-edit-locals-map-1)
value))
(insert
(concat name "\t" (nth 1 local)
"\t" (nth 2 local) "\n")))
"\t" value "\n")))
(set-window-start window start)
(set-window-point window p))))))))

View file

@ -335,7 +335,7 @@ This variable's value takes effect when `grep-compute-defaults' is called.")
(defvar grep-find-use-xargs nil
"Whether \\[grep-find] uses the `xargs' utility by default.
If nil, it uses `find -exec'; if `gnu', it uses `find -print0' and `xargs -0';
If `exec', it uses `find -exec'; if `gnu', it uses `find -print0' and `xargs -0';
if not nil and not `gnu', it uses `find -print' and `xargs'.
This variable's value takes effect when `grep-compute-defaults' is called.")
@ -419,21 +419,29 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'."
(format "%s <C> %s <R> <F>" grep-program grep-options)))
(unless grep-find-use-xargs
(setq grep-find-use-xargs
(if (and
(cond
((and
(grep-probe find-program `(nil nil nil ,null-device "-print0"))
(grep-probe "xargs" `(nil nil nil "-0" "-e" "echo")))
'gnu)))
'gnu)
(t
'exec))))
(unless grep-find-command
(setq grep-find-command
(cond ((eq grep-find-use-xargs 'gnu)
(format "%s . -type f -print0 | xargs -0 -e %s"
find-program grep-command))
(grep-find-use-xargs
((eq grep-find-use-xargs 'exec)
(let ((cmd0 (format "%s . -type f -exec %s"
find-program grep-command)))
(cons
(format "%s {} %s %s"
cmd0 null-device
(shell-quote-argument ";"))
(1+ (length cmd0)))))
(t
(format "%s . -type f -print | xargs %s"
find-program grep-command))
(t (cons (format "%s . -type f -exec %s {} %s \\;"
find-program grep-command null-device)
(+ 22 (length grep-command)))))))
find-program grep-command)))))
(unless grep-find-template
(setq grep-find-template
(let ((gcmd (format "%s <C> %s <R>"
@ -441,11 +449,13 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'."
(cond ((eq grep-find-use-xargs 'gnu)
(format "%s . <X> -type f <F> -print0 | xargs -0 -e %s"
find-program gcmd))
(grep-find-use-xargs
((eq grep-find-use-xargs 'exec)
(format "%s . <X> -type f <F> -exec %s {} %s %s"
find-program gcmd null-device
(shell-quote-argument ";")))
(t
(format "%s . <X> -type f <F> -print | xargs %s"
find-program gcmd))
(t (format "%s . <X> -type f <F> -exec %s {} %s \\;"
find-program gcmd null-device))))))))
find-program gcmd))))))))
(unless (or (not grep-highlight-matches) (eq grep-highlight-matches t))
(setq grep-highlight-matches
(with-temp-buffer
@ -736,18 +746,26 @@ This command shares argument histories with \\[lgrep] and \\[grep-find]."
(let ((command (grep-expand-template
grep-find-template
regexp
(concat "\\( -name "
(concat (shell-quote-argument "(")
" -name "
(mapconcat #'shell-quote-argument
(split-string files)
" -o -name ")
" \\)")
" "
(shell-quote-argument ")"))
dir
(and grep-find-ignored-directories
(concat "\\( -path '*/"
(mapconcat #'identity
(concat (shell-quote-argument "(")
;; we should use shell-quote-argument here
" -path "
(mapconcat #'(lambda (dir)
(shell-quote-argument
(concat "*/" dir)))
grep-find-ignored-directories
"' -o -path '*/")
"' \\) -prune -o ")))))
" -o -path ")
" "
(shell-quote-argument ")")
" -prune -o ")))))
(when command
(if current-prefix-arg
(setq command

File diff suppressed because it is too large Load diff

View file

@ -181,12 +181,9 @@ the function is called."
;; this one is untouched --dv
(defun spaces-string (n)
"Returns a string with N spaces."
(if (<= n 8) (aref spaces-strings n)
(let ((val ""))
(while (> n 8)
(setq val (concat " " val)
n (- n 8)))
(concat val (aref spaces-strings n)))))
(make-string n ? )))
;;;###autoload
(defun delete-rectangle (start end &optional fill)

View file

@ -899,7 +899,9 @@ and the greater of them is not at the start of a line."
(defun line-number-at-pos (&optional pos)
"Return (narrowed) buffer line number at position POS.
If POS is nil, use current buffer location."
If POS is nil, use current buffer location.
Counting starts at (point-min), so the value refers
to the contents of the accessible portion of the buffer."
(let ((opoint (or pos (point))) start)
(save-excursion
(goto-char (point-min))

View file

@ -1269,11 +1269,16 @@ where FACE is a valid face specification, as it can be used with
"GNU Emacs is one component of the GNU/Linux operating system."
"GNU Emacs is one component of the GNU operating system."))
(insert "\n")
(unless (equal (buffer-name fancy-splash-outer-buffer) "*scratch*")
(fancy-splash-insert :face 'variable-pitch
(if fancy-splash-outer-buffer
(fancy-splash-insert
:face 'variable-pitch
(substitute-command-keys
"Type \\[recenter] to begin editing your file.\n"))))
(concat
"Type \\[recenter] to begin editing"
(if (equal (buffer-name fancy-splash-outer-buffer)
"*scratch*")
".\n"
" your file.\n"))))))
(defun fancy-splash-tail ()
"Insert the tail part of the splash screen into the current buffer."
@ -1343,9 +1348,10 @@ mouse."
(throw 'exit nil))
(defun fancy-splash-screens ()
(defun fancy-splash-screens (&optional hide-on-input)
"Display fancy splash screens when Emacs starts."
(setq fancy-splash-help-echo (startup-echo-area-message))
(if hide-on-input
(let ((old-hourglass display-hourglass)
(fancy-splash-outer-buffer (current-buffer))
splash-buffer
@ -1383,7 +1389,24 @@ mouse."
(setq display-hourglass old-hourglass
minor-mode-map-alist old-minor-mode-map-alist
emulation-mode-map-alists old-emulation-mode-map-alists)
(kill-buffer splash-buffer))))))
(kill-buffer splash-buffer)))))
;; If hide-on-input is non-nil, don't hide the buffer on input.
(if (or (window-minibuffer-p)
(window-dedicated-p (selected-window)))
(pop-to-buffer (current-buffer))
(switch-to-buffer "GNU Emacs"))
(erase-buffer)
(if pure-space-overflow
(insert "\
Warning Warning!!! Pure space overflow !!!Warning Warning
\(See the node Pure Storage in the Lisp manual for details.)\n"))
(let (fancy-splash-outer-buffer)
(fancy-splash-head)
(dolist (text fancy-splash-text)
(apply #'fancy-splash-insert text))
(fancy-splash-tail)
(set-buffer-modified-p nil)
(goto-char (point-min)))))
(defun fancy-splash-frame ()
"Return the frame to use for the fancy splash screen.
@ -1414,14 +1437,16 @@ we put it on this frame."
(> window-height (+ image-height 19)))))))
(defun normal-splash-screen ()
(defun normal-splash-screen (&optional hide-on-input)
"Display splash screen when Emacs starts."
(let ((prev-buffer (current-buffer)))
(unwind-protect
(with-current-buffer (get-buffer-create "GNU Emacs")
(erase-buffer)
(set (make-local-variable 'tab-width) 8)
(if hide-on-input
(set (make-local-variable 'mode-line-format)
(propertize "---- %b %-" 'face 'mode-line-buffer-id))
(propertize "---- %b %-" 'face 'mode-line-buffer-id)))
(if pure-space-overflow
(insert "\
@ -1437,9 +1462,13 @@ Warning Warning!!! Pure space overflow !!!Warning Warning
", one component of the GNU/Linux operating system.\n"
", a part of the GNU operating system.\n"))
(unless (equal (buffer-name prev-buffer) "*scratch*")
(if hide-on-input
(insert (substitute-command-keys
"\nType \\[recenter] to begin editing your file.\n")))
(concat
"\nType \\[recenter] to begin editing"
(if (equal (buffer-name prev-buffer) "*scratch*")
".\n"
" your file.\n")))))
(if (display-mouse-p)
;; The user can use the mouse to activate menus
@ -1555,15 +1584,18 @@ Type \\[describe-distribution] for information on getting the latest version."))
(goto-char (point-min))
(if (or (window-minibuffer-p)
(window-dedicated-p (selected-window)))
;; There's no point is using pop-to-buffer since creating
;; a new frame will generate enough events that the
;; subsequent `sit-for' will immediately return anyway.
nil ;; (pop-to-buffer (current-buffer))
;; If hide-on-input is nil, creating a new frame will
;; generate enough events that the subsequent `sit-for'
;; will immediately return anyway.
(pop-to-buffer (current-buffer))
(if hide-on-input
(save-window-excursion
(switch-to-buffer (current-buffer))
(sit-for 120))))
(sit-for 120))
(switch-to-buffer (current-buffer)))))
;; Unwind ... ensure splash buffer is killed
(kill-buffer "GNU Emacs"))))
(if hide-on-input
(kill-buffer "GNU Emacs")))))
(defun startup-echo-area-message ()
@ -1579,14 +1611,14 @@ Type \\[describe-distribution] for information on getting the latest version."))
(message "%s" (startup-echo-area-message))))
(defun display-splash-screen ()
(defun display-splash-screen (&optional hide-on-input)
"Display splash screen according to display.
Fancy splash screens are used on graphic displays,
normal otherwise."
(interactive)
(if (use-fancy-splash-screens-p)
(fancy-splash-screens)
(normal-splash-screen)))
(fancy-splash-screens hide-on-input)
(normal-splash-screen hide-on-input)))
(defun command-line-1 (command-line-args-left)
@ -1889,7 +1921,7 @@ normal otherwise."
;; If user typed input during all that work,
;; abort the startup screen. Otherwise, display it now.
(unless (input-pending-p)
(display-splash-screen))))
(display-splash-screen t))))
(defun command-line-normalize-file-name (file)

View file

@ -1589,7 +1589,7 @@ in `selection-converter-alist', which see."
(put 'autosave-now 'mac-apple-event-id "asav") ; kAEAutosaveNow
;; kAEInternetEventClass
(put 'get-url 'mac-apple-event-id "GURL") ; kAEGetURL
;; Converted HICommand events
;; Converted HI command events
(put 'about 'mac-apple-event-id "abou") ; kHICommandAbout
(defmacro mac-event-spec (event)
@ -1789,7 +1789,7 @@ Currently the `mailto' scheme is supported."
(define-key mac-apple-event-map [internet-event get-url] 'mac-ae-get-url)
(define-key mac-apple-event-map [hicommand about] 'display-splash-screen)
(define-key mac-apple-event-map [hi-command about] 'display-splash-screen)
;;; Converted Carbon Events
(defun mac-handle-toolbar-switch-mode (event)
@ -2258,7 +2258,8 @@ See also `mac-dnd-known-types'."
;; If dropping in an ordinary window which we could use,
;; let dnd-open-file-other-window specify what to do.
(progn
(goto-char (posn-point (event-start event)))
(when (not mouse-yank-at-point)
(goto-char (posn-point (event-start event))))
(funcall handler window action data))
;; If we can't display the file here,
;; make a new window for it.
@ -2433,8 +2434,8 @@ It returns a name of the created fontset."
;; Initiate drag and drop
(global-set-key [drag-n-drop] 'mac-dnd-handle-drag-n-drop-event)
(global-set-key [M-drag-n-drop] 'mac-dnd-handle-drag-n-drop-event)
(define-key special-event-map [drag-n-drop] 'mac-dnd-handle-drag-n-drop-event)
(define-key special-event-map [M-drag-n-drop] 'mac-dnd-handle-drag-n-drop-event)
;;;; Non-toolkit Scroll bars

View file

@ -9467,6 +9467,7 @@ onto the ring."
"Follow a Gnus link to GROUP and ARTICLE."
(require 'gnus)
(funcall (cdr (assq 'gnus org-link-frame-setup)))
(if gnus-other-frame-object (select-frame gnus-other-frame-object))
(if group (gnus-fetch-group group))
(if article
(or (gnus-summary-goto-article article nil 'force)

View file

@ -172,12 +172,12 @@
:group 'multimedia)
(defcustom tumme-dir "~/.emacs.d/tumme/"
"*Directory where thumbnail images are stored."
"Directory where thumbnail images are stored."
:type 'string
:group 'tumme)
(defcustom tumme-thumbnail-storage 'use-tumme-dir
"*How to store tumme's thumbnail files.
"How to store tumme's thumbnail files.
Tumme can store thumbnail files in one of two ways and this is
controlled by this variable. \"Use tumme dir\" means that the
thumbnails are stored in a central directory. \"Per directory\"
@ -193,17 +193,17 @@ that allows sharing of thumbnails across different programs."
:group 'tumme)
(defcustom tumme-db-file "~/.emacs.d/tumme/.tumme_db"
"*Database file where file names and their associated tags are stored."
"Database file where file names and their associated tags are stored."
:type 'string
:group 'tumme)
(defcustom tumme-temp-image-file "~/.emacs.d/tumme/.tumme_temp"
"*Name of temporary image file used by various commands."
"Name of temporary image file used by various commands."
:type 'string
:group 'tumme)
(defcustom tumme-gallery-dir "~/.emacs.d/tumme/.tumme_gallery"
"*Directory to store generated gallery html pages.
"Directory to store generated gallery html pages.
This path needs to be \"shared\" to the public so that it can access
the index.html page that tumme creates."
:type 'string
@ -211,7 +211,7 @@ the index.html page that tumme creates."
(defcustom tumme-gallery-image-root-url
"http://your.own.server/tummepics"
"*URL where the full size images are to be found.
"URL where the full size images are to be found.
Note that this path has to be configured in your web server. Tumme
expects to find pictures in this directory."
:type 'string
@ -219,7 +219,7 @@ expects to find pictures in this directory."
(defcustom tumme-gallery-thumb-image-root-url
"http://your.own.server/tummethumbs"
"*URL where the thumbnail images are to be found.
"URL where the thumbnail images are to be found.
Note that this path has to be configured in your web server. Tumme
expects to find pictures in this directory."
:type 'string
@ -227,14 +227,14 @@ expects to find pictures in this directory."
(defcustom tumme-cmd-create-thumbnail-program
"convert"
"*Executable used to create thumbnail.
"Executable used to create thumbnail.
Used together with `tumme-cmd-create-thumbnail-options'."
:type 'string
:group 'tumme)
(defcustom tumme-cmd-create-thumbnail-options
"%p -size %wx%h \"%f\" -resize %wx%h +profile \"*\" jpeg:\"%t\""
"*Format of command used to create thumbnail image.
"Format of command used to create thumbnail image.
Available options are %p which is replaced by
`tumme-cmd-create-thumbnail-program', %w which is replaced by
`tumme-thumb-width', %h which is replaced by `tumme-thumb-height',
@ -245,14 +245,14 @@ which is replaced by the file name of the thumbnail file."
(defcustom tumme-cmd-create-temp-image-program
"convert"
"*Executable used to create temporary image.
"Executable used to create temporary image.
Used together with `tumme-cmd-create-temp-image-options'."
:type 'string
:group 'tumme)
(defcustom tumme-cmd-create-temp-image-options
"%p -size %wx%h \"%f\" -resize %wx%h +profile \"*\" jpeg:\"%t\""
"*Format of command used to create temporary image for display window.
"Format of command used to create temporary image for display window.
Available options are %p which is replaced by
`tumme-cmd-create-temp-image-program', %w and %h which is replaced by
the calculated max size for width and height in the image display window,
@ -262,13 +262,13 @@ is replaced by the file name of the temporary file."
:group 'tumme)
(defcustom tumme-cmd-pngnq-program (executable-find "pngnq")
"*The file name of the `pngnq' program.
"The file name of the `pngnq' program.
It quantizes colors of PNG images down to 256 colors."
:type '(choice (const :tag "Not Set" nil) string)
:group 'tumme)
(defcustom tumme-cmd-pngcrush-program (executable-find "pngcrush")
"*The file name of the `pngcrush' program.
"The file name of the `pngcrush' program.
It optimizes the compression of PNG images. Also it adds PNG textual chunks
with the information required by the Thumbnail Managing Standard."
:type '(choice (const :tag "Not Set" nil) string)
@ -305,20 +305,20 @@ with the information required by the Thumbnail Managing Standard."
"-text b \"Thumb::URI\" \"file://%f\" "
"%q %t"
" ; rm %q")))
"*Command to create thumbnails according to the Thumbnail Managing Standard."
"Command to create thumbnails according to the Thumbnail Managing Standard."
:type 'string
:group 'tumme)
(defcustom tumme-cmd-rotate-thumbnail-program
"mogrify"
"*Executable used to rotate thumbnail.
"Executable used to rotate thumbnail.
Used together with `tumme-cmd-rotate-thumbnail-options'."
:type 'string
:group 'tumme)
(defcustom tumme-cmd-rotate-thumbnail-options
"%p -rotate %d \"%t\""
"*Format of command used to rotate thumbnail image.
"Format of command used to rotate thumbnail image.
Available options are %p which is replaced by
`tumme-cmd-rotate-thumbnail-program', %d which is replaced by the
number of (positive) degrees to rotate the image, normally 90 or 270
@ -329,14 +329,14 @@ of the thumbnail file."
(defcustom tumme-cmd-rotate-original-program
"jpegtran"
"*Executable used to rotate original image.
"Executable used to rotate original image.
Used together with `tumme-cmd-rotate-original-options'."
:type 'string
:group 'tumme)
(defcustom tumme-cmd-rotate-original-options
"%p -rotate %d -copy all \"%o\" > %t"
"*Format of command used to rotate original image.
"Format of command used to rotate original image.
Available options are %p which is replaced by
`tumme-cmd-rotate-original-program', %d which is replaced by the
number of (positive) degrees to rotate the image, normally 90 or
@ -348,7 +348,7 @@ original image file name and %t which is replaced by
(defcustom tumme-temp-rotate-image-file
"~/.emacs.d/tumme/.tumme_rotate_temp"
"*Temporary file for rotate operations."
"Temporary file for rotate operations."
:type 'string
:group 'tumme)
@ -361,14 +361,14 @@ original file with `tumme-temp-rotate-image-file'."
(defcustom tumme-cmd-write-exif-data-program
"exiftool"
"*Program used to write EXIF data to image.
"Program used to write EXIF data to image.
Used together with `tumme-cmd-write-exif-data-options'."
:type 'string
:group 'tumme)
(defcustom tumme-cmd-write-exif-data-options
"%p -%t=\"%v\" \"%f\""
"*Format of command used to write EXIF data.
"Format of command used to write EXIF data.
Available options are %p which is replaced by
`tumme-cmd-write-exif-data-program', %f which is replaced by the
image file name, %t which is replaced by the tag name and %v
@ -378,14 +378,14 @@ which is replaced by the tag value."
(defcustom tumme-cmd-read-exif-data-program
"exiftool"
"*Program used to read EXIF data to image.
"Program used to read EXIF data to image.
Used together with `tumme-cmd-read-exif-data-program-options'."
:type 'string
:group 'tumme)
(defcustom tumme-cmd-read-exif-data-options
"%p -s -s -s -%t \"%f\""
"*Format of command used to read EXIF data.
"Format of command used to read EXIF data.
Available options are %p which is replaced by
`tumme-cmd-write-exif-data-options', %f which is replaced
by the image file name and %t which is replaced by the tag name."
@ -394,7 +394,7 @@ by the image file name and %t which is replaced by the tag name."
(defcustom tumme-gallery-hidden-tags
(list "private" "hidden" "pending")
"*List of \"hidden\" tags.
"List of \"hidden\" tags.
Used by `tumme-gallery-generate' to leave out \"hidden\" images."
:type '(repeat string)
:group 'tumme)
@ -416,18 +416,18 @@ This is the default size for both `tumme-thumb-width' and `tumme-thumb-height'."
:group 'tumme)
(defcustom tumme-thumb-relief 2
"*Size of button-like border around thumbnails."
"Size of button-like border around thumbnails."
:type 'integer
:group 'tumme)
(defcustom tumme-thumb-margin 2
"*Size of the margin around thumbnails.
"Size of the margin around thumbnails.
This is where you see the cursor."
:type 'integer
:group 'tumme)
(defcustom tumme-line-up-method 'dynamic
"*Default method for line-up of thumbnails in thumbnail buffer.
"Default method for line-up of thumbnails in thumbnail buffer.
Used by `tumme-display-thumbs' and other functions that needs to
line-up thumbnails. Dynamic means to use the available width of the
window containing the thumbnail buffer, Fixed means to use
@ -441,19 +441,19 @@ line-up means that no automatic line-up will be done."
:group 'tumme)
(defcustom tumme-thumbs-per-row 3
"*Number of thumbnails to display per row in thumb buffer."
"Number of thumbnails to display per row in thumb buffer."
:type 'integer
:group 'tumme)
(defcustom tumme-display-window-width-correction 1
"*Number to be used to correct image display window width.
"Number to be used to correct image display window width.
Change if the default (1) does not work (i.e. if the image does not
completely fit)."
:type 'integer
:group 'tumme)
(defcustom tumme-display-window-height-correction 0
"*Number to be used to correct image display window height.
"Number to be used to correct image display window height.
Change if the default (0) does not work (i.e. if the image does not
completely fit)."
:type 'integer
@ -487,7 +487,7 @@ dired and you might want to turn it off."
:group 'tumme)
(defcustom tumme-display-properties-format "%b: %f (%t): %c"
"*Display format for thumbnail properties.
"Display format for thumbnail properties.
%b is replaced with associated dired buffer name, %f with file name
\(without path) of original image file, %t with the list of tags and %c
with the comment."
@ -500,20 +500,20 @@ with the comment."
(cond ((executable-find "display"))
((executable-find "xli"))
((executable-find "qiv") "qiv -t"))
"*Name of external viewer.
"Name of external viewer.
Including parameters. Used when displaying original image from
`tumme-thumbnail-mode'."
:type 'string
:group 'tumme)
(defcustom tumme-main-image-directory "~/pics/"
"*Name of main image directory, if any.
"Name of main image directory, if any.
Used by `tumme-copy-with-exif-file-name'."
:type 'string
:group 'tumme)
(defcustom tumme-show-all-from-dir-max-files 50
"*Maximum number of files to show using `tumme-show-all-from-dir'.
"Maximum number of files to show using `tumme-show-all-from-dir'.
before warning the user."
:type 'integer
:group 'tumme)

View file

@ -1,3 +1,8 @@
2006-08-25 Stefan Monnier <monnier@iro.umontreal.ca>
* url-handlers.el (url-file-local-copy): Tell url-copy-file that the
dest file will already exist.
2006-07-31 Stefan Monnier <monnier@iro.umontreal.ca>
* url-util.el (url-hexify-string): Only utf-8 encode if it's

View file

@ -213,7 +213,7 @@ A prefix arg makes KEEP-TIME non-nil."
Returns the name of the local copy, or nil, if FILE is directly
accessible."
(let ((filename (make-temp-file "url")))
(url-copy-file url filename)
(url-copy-file url filename 'ok-if-already-exists)
filename))
(defun url-insert (buffer &optional beg end)

View file

@ -518,13 +518,15 @@ and:
;;;###autoload
(defun whitespace-cleanup ()
"Cleanup the five different kinds of whitespace problems.
It normally applies to the whole buffer, but in Transient Mark mode
when the mark is active it applies to the region.
See `whitespace-buffer' docstring for a summary of the problems."
(interactive)
(if (and transient-mark-mode mark-active)
(whitespace-cleanup-region (region-beginning) (region-end))
(whitespace-cleanup-internal)))
(defun whitespace-cleanup-internal ()
(defun whitespace-cleanup-internal (&optional region-only)
;; If this buffer really contains a file, then run, else quit.
(whitespace-check-whitespace-mode current-prefix-arg)
(if (and buffer-file-name whitespace-mode)
@ -569,9 +571,12 @@ See `whitespace-buffer' docstring for a summary of the problems."
;; Call this recursively till everything is taken care of
(if whitespace-any
(whitespace-cleanup-internal)
;; if we are done, talk to the user
(progn
(if (not whitespace-silent)
(message "%s clean" buffer-file-name))
(unless whitespace-silent
(if region-only
(message "The region is now clean")
(message "%s is now clean" buffer-file-name)))
(whitespace-update-modeline)))
(setq tab-width whitespace-tabwith-saved))))
@ -582,7 +587,7 @@ See `whitespace-buffer' docstring for a summary of the problems."
(save-excursion
(save-restriction
(narrow-to-region s e)
(whitespace-cleanup-internal))
(whitespace-cleanup-internal t))
(whitespace-buffer t)))
(defun whitespace-buffer-leading ()

View file

@ -325,7 +325,8 @@ nil if not."
;; If dropping in an ordinary window which we could use,
;; let dnd-open-file-other-window specify what to do.
(progn
(goto-char (posn-point (event-start event)))
(when (not mouse-yank-at-point)
(goto-char (posn-point (event-start event))))
(funcall handler window action data))
;; If we can't display the file here,
;; make a new window for it.

View file

@ -1,3 +1,12 @@
2006-08-21 Robert J. Chassell <bob@rattlesnake.com>
* emacs-lisp-intro.texi: deleted in directory copy of texinfo.tex
and pointed towards ../man/texinfo.tex so only one file
needs updating. Added comment of what to do when building on own.
* texinfo.tex: changed to version 2006-02-13.16
to enable a DVI build using the more recent versions of TeX.
2006-05-25 David Kastrup <dak@gnu.org>
* emacs-lisp-intro.texi (setcar): replace an antelope rather than

View file

@ -1,4 +1,5 @@
\input texinfo @c -*-texinfo-*-
\input ../man/texinfo @c -*-texinfo-*-
@c change above to \input texinfo if building on own.
@comment %**start of header
@setfilename ../info/eintr
@c setfilename emacs-lisp-intro.info

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,28 @@
2006-08-27 Michael Olson <mwolson@gnu.org>
* processes.texi (Transaction Queues): Remove stray quote
character.
2006-08-25 Richard Stallman <rms@gnu.org>
* os.texi (Idle Timers): run-with-idle-timer allows Lisp time value.
Add xref.
2006-08-24 Chong Yidong <cyd@stupidchicken.com>
* os.texi (Timers): Avoid waiting inside timers.
2006-08-21 Lute Kamstra <lute@gnu.org>
* Makefile.in: Use ../man/texinfo.tex to build elisp.dvi.
2006-08-20 Richard Stallman <rms@gnu.org>
* os.texi (Idle Timers): New node, split out from Timers.
Document current-idle-time.
* commands.texi (Reading One Event): Update xref.
* elisp.texi (Top): Update subnode menu.
2006-08-16 Richard Stallman <rms@gnu.org>
* keymaps.texi (Extended Menu Items): Show format of cached

View file

@ -27,6 +27,7 @@ srcdir = @srcdir@
VPATH=@srcdir@
infodir = $(srcdir)/../info
usermanualdir = $(srcdir)/../man
TEXI2DVI = texi2dvi
SHELL = /bin/sh
@ -103,7 +104,7 @@ $(infodir)/elisp: $(srcs)
$(MAKEINFO) -I. -I$(srcdir) $(srcdir)/elisp.texi -o $(infodir)/elisp
elisp.dvi: $(srcs)
$(TEXI2DVI) -I $(srcdir) $(srcdir)/elisp.texi
$(TEXI2DVI) -I $(srcdir) -I $(usermanualdir) $(srcdir)/elisp.texi
# This is for use in a separate distro of the Emacs Lisp manual.
install: elisp

View file

@ -2231,7 +2231,7 @@ necessary for input to arrive.
If @var{seconds} is @code{nil}, Emacs is considered idle while waiting
for user input to arrive. Idle timers---those created with
@code{run-with-idle-timer} (@pxref{Timers})---can run during this
@code{run-with-idle-timer} (@pxref{Idle Timers})---can run during this
period. However, if @var{seconds} is non-@code{nil}, the state of
idleness remains unchanged. If Emacs is non-idle when
@code{read-event} is called, it remains non-idle throughout the

View file

@ -1039,6 +1039,8 @@ Operating System Interface
* Processor Run Time:: Getting the run time used by Emacs.
* Time Calculations:: Adding, subtracting, comparing times, etc.
* Timers:: Setting a timer to call a function at a certain time.
* Idle Timers:: Setting a timer to call a function when Emacs has
been idle for a certain length of time.
* Terminal Input:: Accessing and recordingo terminal input.
* Terminal Output:: Controlling and recording terminal output.
* Sound Output:: Playing sounds on the computer's speaker.

View file

@ -28,6 +28,8 @@ pertaining to the terminal and the screen.
* Processor Run Time:: Getting the run time used by Emacs.
* Time Calculations:: Adding, subtracting, comparing times, etc.
* Timers:: Setting a timer to call a function at a certain time.
* Idle Timers:: Setting a timer to call a function when Emacs has
been idle for a certain length of time.
* Terminal Input:: Accessing and recording terminal input.
* Terminal Output:: Controlling and recording terminal output.
* Sound Output:: Playing sounds on the computer's speaker.
@ -1392,6 +1394,13 @@ both before and after changing the buffer, to separate the timer's
changes from user commands' changes and prevent a single undo entry
from growing to be quite large.
Timer functions should also avoid calling functions that cause Emacs
to wait, such as @code{sit-for} (@pxref{Waiting}). This can lead to
unpredictable effects, since other timers (or even the same timer) can
run while waiting. If a timer function needs to perform an action
after a certain time has elapsed, it can do this by scheduling a new
timer.
If a timer function calls functions that can change the match data,
it should save and restore the match data. @xref{Saving Match Data}.
@ -1473,10 +1482,26 @@ calls one of those primitives. So use @code{with-timeout} only with a
a timer to avoid waiting too long for an answer. @xref{Yes-or-No
Queries}.
@defun cancel-timer timer
This cancels the requested action for @var{timer}, which should be a
timer---usually, one previously returned by @code{run-at-time} or
@code{run-with-idle-timer}. This cancels the effect of that call to
one of these functions; the arrival of the specified time will not
cause anything special to happen.
@end defun
@node Idle Timers
@section Idle Timers
Here is how to set up a timer that runs when Emacs is idle for a
certain length of time. Aside from how to set them up, idle timers
work just like ordinary timers.
@deffn Command run-with-idle-timer secs repeat function &rest args
Set up a timer which runs when Emacs has been idle for @var{secs}
seconds. The value of @var{secs} may be an integer or a floating point
number.
number; a value of the type returned by @code{current-idle-time}
is also allowed.
If @var{repeat} is @code{nil}, the timer runs just once, the first time
Emacs remains idle for a long enough time. More often @var{repeat} is
@ -1484,7 +1509,7 @@ non-@code{nil}, which means to run the timer @emph{each time} Emacs
remains idle for @var{secs} seconds.
The function @code{run-with-idle-timer} returns a timer value which you
can use in calling @code{cancel-timer} (see below).
can use in calling @code{cancel-timer} (@pxref{Timers}).
@end deffn
@cindex idleness
@ -1508,11 +1533,49 @@ minutes, and even if there have been garbage collections and autosaves.
input. Then it becomes idle again, and all the idle timers that are
set up to repeat will subsequently run another time, one by one.
@defun cancel-timer timer
Cancel the requested action for @var{timer}, which should be a value
previously returned by @code{run-at-time} or @code{run-with-idle-timer}.
This cancels the effect of that call to one of these functions; the
arrival of the specified time will not cause anything special to happen.
@c Emacs 19 feature
@defun current-idle-time
This function returns the length of time Emacs has been idle, as a
list of three integers: @code{(@var{high} @var{low} @var{microsec})}.
The integers @var{high} and @var{low} combine to give the number of
seconds of idleness, which is
@ifnottex
@var{high} * 2**16 + @var{low}.
@end ifnottex
@tex
$high*2^{16}+low$.
@end tex
The third element, @var{microsec}, gives the microseconds since the
start of the current second (or 0 for systems that return time with
the resolution of only one second).
The main use of this function is when an idle timer function wants to
``take a break'' for a while. It can set up another idle timer to
call the same function again, after a few seconds more idleness.
Here's an example:
@smallexample
(defvar resume-timer nil
"Timer that `timer-function' used to reschedule itself, or nil.")
(defun timer-function ()
;; @r{If the user types a command while @code{resume-timer}}
;; @r{is active, the next time this function is called from}
;; @r{its main idle timer, deactivate @code{resume-timer}.}
(when resume-timer
(cancel-timer resume-timer))
...@var{do the work for a while}...
(when @var{taking-a-break}
(setq resume-timer
(run-with-idle-timer
;; Compute an idle time @var{break-length}
;; more than the current value.
(time-add (current-idle-time)
(seconds-to-time @var{break-length}))
nil
'timer-function))))
@end smallexample
@end defun
@node Terminal Input

View file

@ -1520,7 +1520,7 @@ text at the end of the entire answer, but nothing before; that's how
If the argument @var{delay-question} is non-nil, delay sending this
question until the process has finished replying to any previous
questions. This produces more reliable results with some processes."
questions. This produces more reliable results with some processes.
The return value of @code{tq-enqueue} itself is not meaningful.
@end defun

View file

@ -1,3 +1,29 @@
2006-08-25 Kim F. Storm <storm@cua.dk>
* display.texi (Display Custom): Add variables overline-margin
and x-underline-at-descent-line.
2006-08-25 Richard Stallman <rms@gnu.org>
* entering.texi (Exiting): Rewrite to give graphical displays
priority over text terminals.
* search.texi (Incremental Search): Move index entries.
2006-08-23 Chong Yidong <cyd@stupidchicken.com>
* custom.texi (Init File): Reference Find Init to avoid "home
directory" confusion.
2006-08-22 Nick Roberts <nickrob@snap.net.nz>
* building.texi (Other GDB-UI Buffers): Describe how to edit
a value in the locals buffer.
2006-08-21 Richard Stallman <rms@gnu.org>
* search.texi (Basic Isearch): Add `isearch' index entry.
2006-08-16 Richard Stallman <rms@gnu.org>
* misc.texi (Saving Emacs Sessions): Clean up wording.

View file

@ -1028,7 +1028,8 @@ as are the commands to send signals to the debugged program.
@item Locals Buffer
The locals buffer displays the values of local variables of the
current frame for simple data types (@pxref{Frame Info, Frame Info,
Information on a frame, gdb, The GNU debugger}).
Information on a frame, gdb, The GNU debugger}). Press @key{RET} or
click @kbd{Mouse-2} on the value if you want to edit it.
Arrays and structures display their type only. With GDB 6.4 or later,
move point to their name and press @key{RET}, or alternatively click
@ -1040,7 +1041,7 @@ of GDB, use @kbd{Mouse-2} or @key{RET} on the type description
@findex toggle-gdb-all-registers
The registers buffer displays the values held by the registers
(@pxref{Registers,,, gdb, The GNU debugger}). Press @key{RET} or
click @kbd{Mouse-2} on a register if you want to change its value.
click @kbd{Mouse-2} on a register if you want to edit its value.
With GDB 6.4 or later, recently changed register values display with
@code{font-lock-warning-face}. With earlier versions of GDB, you can
press @key{SPC} to toggle the display of floating point registers

View file

@ -2063,9 +2063,8 @@ Reference Manual}.
@cindex rebinding keys, permanently
@cindex startup (init file)
When Emacs is started, it normally loads a Lisp program from the
file @file{.emacs} or @file{.emacs.el} in your home directory
(see @ref{General Variables, HOME}, if you don't know where that is).
When Emacs is started, it normally loads a Lisp program from the file
@file{.emacs} or @file{.emacs.el} in your home directory (@pxref{Find Init}).
We call this file your @dfn{init file} because it specifies how to
initialize Emacs for you. You can use the command line switch
@samp{-q} to prevent loading your init file, and @samp{-u} (or

View file

@ -1215,6 +1215,17 @@ page for other output. On such terminals, you might want to set the variable
assume, when resumed, that the screen page it is using still contains
what Emacs last wrote there.
@vindex overline-margin
On graphical display, this variables specifies the number of pixes
the overline is shown above the text. The value includes the height of
the overline itself (1 pixel). The default value is 2 pixels.
@vindex x-underline-at-descent-line
On graphical display, the underline is normally drawn at the
baseline level of the font. If @code{x-underline-at-descent-line} is
non-@code{nil}, the underline is drawn at the same position as the
font's decent line.
@ignore
arch-tag: 2219f910-2ff0-4521-b059-1bd231a536c4
@end ignore

View file

@ -69,20 +69,19 @@ already running Emacs. @xref{Emacs Server}.
@cindex leaving Emacs
@cindex quitting Emacs
There are two commands for exiting Emacs, and three kinds of exiting:
@dfn{suspending} Emacs, @dfn{Iconifying} Emacs, and @dfn{killing}
Emacs.
There are two commands for exiting Emacs, and three kinds of
exiting: @dfn{iconifying} Emacs, @dfn{suspending} Emacs, and
@dfn{killing} Emacs.
@dfn{Iconifying} means replacing the Emacs frame with a small box or
``icon'' on the screen. This is the usual way to exit Emacs when
you're using a graphical display---if you bother to ``exit'' at all.
(Just switching to another application is usually sufficient.)
@dfn{Suspending} means stopping Emacs temporarily and returning
control to its parent process (usually a shell), allowing you to resume
editing later in the same Emacs job, with the same buffers, same kill
ring, same undo history, and so on. This is the usual way to exit Emacs
when running on a text terminal.
@dfn{Iconifying} means replacing the Emacs frame with a small box
somewhere on the screen. This is the usual way to exit Emacs when you're
using a graphics terminal---if you bother to ``exit'' at all. (Just switching
to another application is usually sufficient.)
control to its parent process (usually a shell), allowing you to
resume editing later in the same Emacs job. This is the usual way to
exit Emacs when running it on a text terminal.
@dfn{Killing} Emacs means destroying the Emacs job. You can run Emacs
again later, but you will get a fresh Emacs; there is no way to resume
@ -97,12 +96,18 @@ Kill Emacs (@code{save-buffers-kill-emacs}).
@end table
@kindex C-z
@findex suspend-emacs
To suspend or iconify Emacs, type @kbd{C-z} (@code{suspend-emacs}).
On text terminals, this suspends Emacs. On graphical displays,
it iconifies the Emacs frame.
@findex iconify-or-deiconify-frame
On graphical displays, @kbd{C-z} runs the command
@code{iconify-or-deiconify-frame}, which temporarily iconifies (or
``minimizes'') the selected Emacs frame (@pxref{Frames}). You can
then use the window manager to select some other application. (You
could select another application without iconifying Emacs first, but
getting the Emacs frame out of the way can make it more convenient to
find the other application.)
Suspending Emacs takes you back to the shell from which you invoked
@findex suspend-emacs
On a text terminal, @kbd{C-z} runs the command @code{suspend-emacs}.
Suspending Emacs takes you back to the shell from which you invoked
Emacs. You can resume Emacs with the shell command @command{%emacs}
in most common shells. On systems that don't support suspending
programs, @kbd{C-z} starts an inferior shell that communicates
@ -112,19 +117,12 @@ subshell. (The way to do that is probably with @kbd{C-d} or
systems, you can only get back to the shell from which Emacs was run
(to log out, for example) when you kill Emacs.
@vindex cannot-suspend
Suspending can fail if you run Emacs under a shell that doesn't
support suspending programs, even if the system itself does support
it. In such a case, you can set the variable @code{cannot-suspend} to
a non-@code{nil} value to force @kbd{C-z} to start an inferior shell.
(One might also describe Emacs's parent shell as ``inferior'' for
failing to support job control properly, but that is a matter of
taste.)
On graphical displays, @kbd{C-z} has a different meaning: it runs
the command @code{iconify-or-deiconify-frame}, which temporarily
iconifies (or ``minimizes'') the selected Emacs frame
(@pxref{Frames}). Then you can use the window manager to get back to
a shell window.
support suspendion of its subjobs, even if the system itself does
support it. In such a case, you can set the variable
@code{cannot-suspend} to a non-@code{nil} value to force @kbd{C-z} to
start an inferior shell.
@kindex C-x C-c
@findex save-buffers-kill-emacs

View file

@ -33,6 +33,8 @@ asks interactively which occurrences to replace.
@node Incremental Search
@section Incremental Search
@cindex incremental search
@cindex isearch
An incremental search begins searching as soon as you type the first
character of the search string. As you type in the search string, Emacs
@ -63,7 +65,6 @@ Incremental search backward (@code{isearch-backward}).
@node Basic Isearch
@subsection Basics of Incremental Search
@cindex incremental search
@kindex C-s
@findex isearch-forward

View file

@ -1,3 +1,146 @@
2006-08-28 Kim F. Storm <storm@cua.dk>
* xdisp.c (get_window_cursor_type): Replace BOX cursor on images
with a hollow box cursor if image is larger than 32x32 (or the default
frame font if that is bigger). Replace any other cursor on images
with hollow box cursor, as redisplay doesn't support bar and hbar
cursors on images.
2006-08-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* alloc.c (BLOCK_INPUT_ALLOC, UNBLOCK_INPUT_ALLOC): Undo previous
change. Move mutex lock/unlock operations inside BLOCK_INPUT.
* dired.c (directory_files_internal_unwind, directory_files_internal)
(file_name_completion): Add BLOCK_INPUT around opendir/closedir.
* image.c [MAC_OS] (image_load_qt_1): Use ComponentResult instead
of OSErr.
* keyboard.c (in_sighandler): Remove variable.
(Fcurrent_idle_time): Add missing `doc:'.
(input_available_signal, init_keyboard): Undo previous change.
* keyboard.h (in_sighandler): Remove extern.
* mac.c (create_apple_event_from_event_ref, select)
(Fmac_get_file_creator, Fmac_get_file_type, Fmac_set_file_creator)
(Fmac_set_file_type, cfstring_create_normalized)
(mac_get_system_locale, select_and_poll_event, sys_select): Use
OSStatus instead of OSErr.
* macfns.c [TARGET_API_MAC_CARBON] (mac_update_proxy_icon): Don't
use FRAME_FILE_NAME. Use (FS)UpdateAlias.
(Fx_create_frame): Apply 2006-07-03 for xfns.c.
* macselect.c (get_scrap_from_symbol, clear_scrap, put_scrap_string)
(put_scrap_private_timestamp, scrap_has_target_type, get_scrap_string)
(get_scrap_private_timestamp, get_scrap_target_type_list)
(x_own_selection, x_get_foreign_selection)
(Fx_disown_selection_internal, Fx_selection_owner_p)
(Fx_selection_exists_p): Use OSStatus instead of OSErr.
* macterm.c (mac_draw_string_common, mac_query_char_extents)
(x_iconify_frame, XLoadQueryFont, install_window_handler)
(mac_handle_command_event, init_command_handler, init_menu_bar):
Use OSStatus instead of OSErr.
(x_free_frame_resources) [TARGET_API_MAC_CARBON]: Don't use
FRAME_FILE_NAME.
(x_query_font): Apply 2006-08-04 change for xterm.c.
(Qhi_command): Rename from Qhicommand. All uses changed.
* macterm.h (struct mac_output) [TARGET_API_MAC_CARBON]: Remove member
file_name.
(FRAME_FILE_NAME): Remove macro.
(install_window_handler, create_apple_event_from_event_ref):
Return OSStatus instead of OSErr.
2006-08-26 Kim F. Storm <storm@cua.dk>
* buffer.c (Fset_buffer_multibyte):
* editfns.c (Fcurrent_time, Fget_internal_run_time):
* macfns.c (Fxw_color_values):
* w32fns.c (Fxw_color_values):
* xfns.c (Fxw_color_values): Simplify; use list3.
* fileio.c (Fmake_directory_internal, Fdelete_directory)
(Fdelete_file): Simplify; use list1.
(Frename_file, Fadd_name_to_file, Fmake_symbolic_link):
Simplify; remove NO_ARG_ARRAY stuff, use list2.
2006-08-25 Kim F. Storm <storm@cua.dk>
* keyboard.c (Fcurrent_idle_time): Simplify.
2006-08-25 Richard Stallman <rms@gnu.org>
* fns.c (sxhash_string): Rotate properly; don't lose bits.
2006-08-24 Francesc Rocher <francesc.rocher@gmail.com>
* xdisp.c (overline_margin): New variable.
(x_produce_glyphs): Use it.
(syms_of_xdisp): DEFVAR_INT it.
* xterm.c (x_underline_at_descent_line): New variable.
(syms_of_xterm): DEFVAR_BOOL it.
(x_draw_glyph_string): Use it.
Draw underline and overline up to the end of line if the face
extends to the end of line.
* macterm.c: Likewise.
* w32term.c: Likewise.
2006-08-24 Nick Roberts <nickrob@snap.net.nz>
* buffer.c (Fswitch_to_buffer): Move buffer to front of
buffer-alist if necessary.
2006-08-22 Kim F. Storm <storm@cua.dk>
* xdisp.c (update_tool_bar): Redisplay toolbar also when only
number of items changes.
2006-08-22 Stefan Monnier <monnier@iro.umontreal.ca>
* buffer.c (Fset_buffer_multibyte): Record proper undo entry.
2006-08-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* keyboard.c: Clarify difference between in_sighandler and
handling_signal.
2006-08-21 Kim F. Storm <storm@cua.dk>
* macterm.c (x_draw_stretch_glyph_string):
* w32term.c (x_draw_stretch_glyph_string):
* xterm.c (x_draw_stretch_glyph_string): It is ok to draw a
stretch glyph in left marginal areas on header and mode lines.
2006-08-21 Kenichi Handa <handa@m17n.org>
* keyboard.c (syms_of_keyboard): Docstring of
Vunread_post_input_method_events and Vunread_input_method_events
fixed.
2006-08-20 Chong Yidong <cyd@stupidchicken.com>
* keyboard.c (show_help_echo): Preserve mouse movement flag if
tracking mouse.
2006-08-20 Richard Stallman <rms@gnu.org>
* xfaces.c (load_pixmap): Add quotes in error message.
* keyboard.c (Fcurrent_idle_time): New function.
(syms_of_keyboard): defsubr it.
2006-08-18 Nick Roberts <nickrob@snap.net.nz>
* window.c (Fset_window_fringes): Do nothing on a tty.
(Fwindow_fringes): Put ? operator after the line break.
2006-08-16 Andreas Schwab <schwab@suse.de>
* print.c (debug_output_compilation_hack): Fix return type.
@ -795,8 +938,8 @@
2006-06-14 Chong Yidong <cyd@stupidchicken.com>
* xdisp.c (back_to_previous_visible_line_start): Reset
it->continuation_lines_width.
* xdisp.c (back_to_previous_visible_line_start):
Reset it->continuation_lines_width.
2006-06-14 Richard Stallman <rms@gnu.org>
@ -867,8 +1010,8 @@
2006-06-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* macterm.c [USE_MAC_TSM] (mac_handle_text_input_event): Exclude
0x7f from ASCII range.
* macterm.c [USE_MAC_TSM] (mac_handle_text_input_event):
Exclude 0x7f from ASCII range.
2006-06-05 Jason Rumney <jasonr@gnu.org>

View file

@ -130,27 +130,17 @@ static pthread_mutex_t alloc_mutex;
#define BLOCK_INPUT_ALLOC \
do \
{ \
if (!in_sighandler) \
{ \
pthread_mutex_lock (&alloc_mutex); \
if (pthread_self () == main_thread) \
BLOCK_INPUT; \
else \
sigblock (sigmask (SIGIO)); \
} \
pthread_mutex_lock (&alloc_mutex); \
} \
while (0)
#define UNBLOCK_INPUT_ALLOC \
do \
{ \
if (!in_sighandler) \
{ \
pthread_mutex_unlock (&alloc_mutex); \
if (pthread_self () == main_thread) \
UNBLOCK_INPUT; \
else \
sigunblock (sigmask (SIGIO)); \
} \
} \
while (0)

View file

@ -1685,9 +1685,18 @@ the window-buffer correspondences. */)
char *err;
if (EQ (buffer, Fwindow_buffer (selected_window)))
/* Basically a NOP. Avoid signalling an error if the selected window
is dedicated, or a minibuffer, ... */
{
/* Basically a NOP. Avoid signalling an error in the case where
the selected window is dedicated, or a minibuffer. */
/* But do put this buffer at the front of the buffer list,
unless that has been inhibited. Note that even if
BUFFER is at the front of the main buffer-list already,
we still want to move it to the front of the frame's buffer list. */
if (NILP (norecord))
record_buffer (buffer);
return Fset_buffer (buffer);
}
err = no_switch_window (selected_window);
if (err) error (err);
@ -2118,10 +2127,11 @@ current buffer is cleared. */)
{
struct Lisp_Marker *tail, *markers;
struct buffer *other;
int undo_enabled_p = !EQ (current_buffer->undo_list, Qt);
int begv, zv;
int narrowed = (BEG != BEGV || Z != ZV);
int modified_p = !NILP (Fbuffer_modified_p (Qnil));
Lisp_Object old_undo = current_buffer->undo_list;
struct gcpro gcpro1;
if (current_buffer->base_buffer)
error ("Cannot do `set-buffer-multibyte' on an indirect buffer");
@ -2130,9 +2140,10 @@ current buffer is cleared. */)
if (NILP (flag) == NILP (current_buffer->enable_multibyte_characters))
return flag;
/* It would be better to update the list,
but this is good enough for now. */
if (undo_enabled_p)
GCPRO1 (old_undo);
/* Don't record these buffer changes. We will put a special undo entry
instead. */
current_buffer->undo_list = Qt;
/* If the cached position is for this buffer, clear it out. */
@ -2346,8 +2357,17 @@ current buffer is cleared. */)
set_intervals_multibyte (1);
}
if (undo_enabled_p)
current_buffer->undo_list = Qnil;
if (!EQ (old_undo, Qt))
{
/* Represent all the above changes by a special undo entry. */
extern Lisp_Object Qapply;
current_buffer->undo_list = Fcons (list3 (Qapply,
intern ("set-buffer-multibyte"),
NILP (flag) ? Qt : Qnil),
old_undo);
}
UNGCPRO;
/* Changing the multibyteness of a buffer means that all windows
showing that buffer must be updated thoroughly. */

View file

@ -135,7 +135,9 @@ directory_files_internal_unwind (dh)
Lisp_Object dh;
{
DIR *d = (DIR *) XSAVE_VALUE (dh)->pointer;
BLOCK_INPUT;
closedir (d);
UNBLOCK_INPUT;
return Qnil;
}
@ -197,7 +199,9 @@ directory_files_internal (directory, full, match, nosort, attrs, id_format)
/* Now *bufp is the compiled form of MATCH; don't call anything
which might compile a new regexp until we're done with the loop! */
BLOCK_INPUT;
d = opendir (SDATA (dirfilename));
UNBLOCK_INPUT;
if (d == NULL)
report_file_error ("Opening directory", Fcons (directory, Qnil));
@ -322,7 +326,9 @@ directory_files_internal (directory, full, match, nosort, attrs, id_format)
}
}
BLOCK_INPUT;
closedir (d);
UNBLOCK_INPUT;
/* Discard the unwind protect. */
specpdl_ptr = specpdl + count;
@ -509,7 +515,9 @@ file_name_completion (file, dirname, all_flag, ver_flag)
{
int inner_count = SPECPDL_INDEX ();
BLOCK_INPUT;
d = opendir (SDATA (Fdirectory_file_name (encoded_dir)));
UNBLOCK_INPUT;
if (!d)
report_file_error ("Opening directory", Fcons (dirname, Qnil));

View file

@ -1433,14 +1433,11 @@ resolution finer than a second. */)
()
{
EMACS_TIME t;
Lisp_Object result[3];
EMACS_GET_TIME (t);
XSETINT (result[0], (EMACS_SECS (t) >> 16) & 0xffff);
XSETINT (result[1], (EMACS_SECS (t) >> 0) & 0xffff);
XSETINT (result[2], EMACS_USECS (t));
return Flist (3, result);
return list3 (make_number ((EMACS_SECS (t) >> 16) & 0xffff),
make_number ((EMACS_SECS (t) >> 0) & 0xffff),
make_number (EMACS_USECS (t)));
}
DEFUN ("get-internal-run-time", Fget_internal_run_time, Sget_internal_run_time,
@ -1458,7 +1455,6 @@ systems that do not provide resolution finer than a second. */)
{
#ifdef HAVE_GETRUSAGE
struct rusage usage;
Lisp_Object result[3];
int secs, usecs;
if (getrusage (RUSAGE_SELF, &usage) < 0)
@ -1474,11 +1470,9 @@ systems that do not provide resolution finer than a second. */)
secs++;
}
XSETINT (result[0], (secs >> 16) & 0xffff);
XSETINT (result[1], (secs >> 0) & 0xffff);
XSETINT (result[2], usecs);
return Flist (3, result);
return list3 (make_number ((secs >> 16) & 0xffff),
make_number ((secs >> 0) & 0xffff),
make_number (usecs));
#else
return Fcurrent_time ();
#endif

View file

@ -2653,7 +2653,7 @@ DEFUN ("make-directory-internal", Fmake_directory_internal,
#else
if (mkdir (dir, 0777) != 0)
#endif
report_file_error ("Creating directory", Flist (1, &directory));
report_file_error ("Creating directory", list1 (directory));
return Qnil;
}
@ -2679,7 +2679,7 @@ DEFUN ("delete-directory", Fdelete_directory, Sdelete_directory, 1, 1, "FDelete
dir = SDATA (encoded_dir);
if (rmdir (dir) != 0)
report_file_error ("Removing directory", Flist (1, &directory));
report_file_error ("Removing directory", list1 (directory));
return Qnil;
}
@ -2710,7 +2710,7 @@ If file has multiple names, it continues to exist with the other names. */)
encoded_file = ENCODE_FILE (filename);
if (0 > unlink (SDATA (encoded_file)))
report_file_error ("Removing old name", Flist (1, &filename));
report_file_error ("Removing old name", list1 (filename));
return Qnil;
}
@ -2744,9 +2744,6 @@ This is what happens in interactive use with M-x. */)
(file, newname, ok_if_already_exists)
Lisp_Object file, newname, ok_if_already_exists;
{
#ifdef NO_ARG_ARRAY
Lisp_Object args[2];
#endif
Lisp_Object handler;
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
Lisp_Object encoded_file, encoded_newname, symlink_target;
@ -2815,15 +2812,7 @@ This is what happens in interactive use with M-x. */)
Fdelete_file (file);
}
else
#ifdef NO_ARG_ARRAY
{
args[0] = file;
args[1] = newname;
report_file_error ("Renaming", Flist (2, args));
}
#else
report_file_error ("Renaming", Flist (2, &file));
#endif
report_file_error ("Renaming", list2 (file, newname));
}
UNGCPRO;
return Qnil;
@ -2839,9 +2828,6 @@ This is what happens in interactive use with M-x. */)
(file, newname, ok_if_already_exists)
Lisp_Object file, newname, ok_if_already_exists;
{
#ifdef NO_ARG_ARRAY
Lisp_Object args[2];
#endif
Lisp_Object handler;
Lisp_Object encoded_file, encoded_newname;
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
@ -2881,15 +2867,7 @@ This is what happens in interactive use with M-x. */)
unlink (SDATA (newname));
if (0 > link (SDATA (encoded_file), SDATA (encoded_newname)))
{
#ifdef NO_ARG_ARRAY
args[0] = file;
args[1] = newname;
report_file_error ("Adding new name", Flist (2, args));
#else
report_file_error ("Adding new name", Flist (2, &file));
#endif
}
report_file_error ("Adding new name", list2 (file, newname));
UNGCPRO;
return Qnil;
@ -2907,9 +2885,6 @@ This happens for interactive use with M-x. */)
(filename, linkname, ok_if_already_exists)
Lisp_Object filename, linkname, ok_if_already_exists;
{
#ifdef NO_ARG_ARRAY
Lisp_Object args[2];
#endif
Lisp_Object handler;
Lisp_Object encoded_filename, encoded_linkname;
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
@ -2965,13 +2940,7 @@ This happens for interactive use with M-x. */)
}
}
#ifdef NO_ARG_ARRAY
args[0] = filename;
args[1] = linkname;
report_file_error ("Making symbolic link", Flist (2, args));
#else
report_file_error ("Making symbolic link", Flist (2, &filename));
#endif
report_file_error ("Making symbolic link", list2 (filename, linkname));
}
UNGCPRO;
return Qnil;

View file

@ -4402,7 +4402,7 @@ sxhash_string (ptr, len)
c = *p++;
if (c >= 0140)
c -= 40;
hash = ((hash << 3) + (hash >> 28) + c);
hash = ((hash << 4) + (hash >> 28) + c);
}
return hash & INTMASK;

View file

@ -2396,7 +2396,7 @@ image_load_qt_1 (f, img, type, fss, dh)
FSSpec *fss;
Handle dh;
{
OSErr err;
ComponentResult err;
GraphicsImportComponent gi;
Rect rect;
int width, height;

View file

@ -100,9 +100,6 @@ int interrupt_input_pending;
/* File descriptor to use for input. */
extern int input_fd;
/* Nonzero if we are executing from the SIGIO signal handler. */
int in_sighandler;
#ifdef HAVE_WINDOW_SYSTEM
/* Make all keyboard buffers much bigger when using X windows. */
#ifdef MAC_OS8
@ -1390,6 +1387,72 @@ DEFUN ("abort-recursive-edit", Fabort_recursive_edit, Sabort_recursive_edit, 0,
return Qnil;
}
#ifdef HAVE_MOUSE
/* Restore mouse tracking enablement. See Ftrack_mouse for the only use
of this function. */
static Lisp_Object
tracking_off (old_value)
Lisp_Object old_value;
{
do_mouse_tracking = old_value;
if (NILP (old_value))
{
/* Redisplay may have been preempted because there was input
available, and it assumes it will be called again after the
input has been processed. If the only input available was
the sort that we have just disabled, then we need to call
redisplay. */
if (!readable_events (READABLE_EVENTS_DO_TIMERS_NOW))
{
redisplay_preserve_echo_area (6);
get_input_pending (&input_pending,
READABLE_EVENTS_DO_TIMERS_NOW);
}
}
return Qnil;
}
DEFUN ("track-mouse", Ftrack_mouse, Strack_mouse, 0, UNEVALLED, 0,
doc: /* Evaluate BODY with mouse movement events enabled.
Within a `track-mouse' form, mouse motion generates input events that
you can read with `read-event'.
Normally, mouse motion is ignored.
usage: (track-mouse BODY ...) */)
(args)
Lisp_Object args;
{
int count = SPECPDL_INDEX ();
Lisp_Object val;
record_unwind_protect (tracking_off, do_mouse_tracking);
do_mouse_tracking = Qt;
val = Fprogn (args);
return unbind_to (count, val);
}
/* If mouse has moved on some frame, return one of those frames.
Return 0 otherwise. */
static FRAME_PTR
some_mouse_moved ()
{
Lisp_Object tail, frame;
FOR_EACH_FRAME (tail, frame)
{
if (XFRAME (frame)->mouse_moved)
return XFRAME (frame);
}
return 0;
}
#endif /* HAVE_MOUSE */
/* This is the actual command reading loop,
sans error-handling encapsulation. */
@ -2310,7 +2373,17 @@ show_help_echo (help, window, object, pos, ok_to_overwrite_keystroke_echo)
#ifdef HAVE_MOUSE
if (!noninteractive && STRINGP (help))
{
/* The mouse-fixup-help-message Lisp function can call
mouse_position_hook, which resets the mouse_moved flags.
This causes trouble if we are trying to read a mouse motion
event (i.e., if we are inside a `track-mouse' form), so we
restore the mouse_moved flag. */
FRAME_PTR f = NILP (do_mouse_tracking) ? NULL : some_mouse_moved ();
help = call1 (Qmouse_fixup_help_message, help);
if (f)
f->mouse_moved = 1;
}
#endif
if (STRINGP (help) || NILP (help))
@ -3464,72 +3537,6 @@ restore_getcjmp (temp)
bcopy (temp, getcjmp, sizeof getcjmp);
}
#ifdef HAVE_MOUSE
/* Restore mouse tracking enablement. See Ftrack_mouse for the only use
of this function. */
static Lisp_Object
tracking_off (old_value)
Lisp_Object old_value;
{
do_mouse_tracking = old_value;
if (NILP (old_value))
{
/* Redisplay may have been preempted because there was input
available, and it assumes it will be called again after the
input has been processed. If the only input available was
the sort that we have just disabled, then we need to call
redisplay. */
if (!readable_events (READABLE_EVENTS_DO_TIMERS_NOW))
{
redisplay_preserve_echo_area (6);
get_input_pending (&input_pending,
READABLE_EVENTS_DO_TIMERS_NOW);
}
}
return Qnil;
}
DEFUN ("track-mouse", Ftrack_mouse, Strack_mouse, 0, UNEVALLED, 0,
doc: /* Evaluate BODY with mouse movement events enabled.
Within a `track-mouse' form, mouse motion generates input events that
you can read with `read-event'.
Normally, mouse motion is ignored.
usage: (track-mouse BODY ...) */)
(args)
Lisp_Object args;
{
int count = SPECPDL_INDEX ();
Lisp_Object val;
record_unwind_protect (tracking_off, do_mouse_tracking);
do_mouse_tracking = Qt;
val = Fprogn (args);
return unbind_to (count, val);
}
/* If mouse has moved on some frame, return one of those frames.
Return 0 otherwise. */
static FRAME_PTR
some_mouse_moved ()
{
Lisp_Object tail, frame;
FOR_EACH_FRAME (tail, frame)
{
if (XFRAME (frame)->mouse_moved)
return XFRAME (frame);
}
return 0;
}
#endif /* HAVE_MOUSE */
/* Low level keyboard/mouse input.
kbd_buffer_store_event places events in kbd_buffer, and
kbd_buffer_get_event retrieves them. */
@ -4543,6 +4550,32 @@ timer_check (do_it_now)
UNGCPRO;
return nexttime;
}
DEFUN ("current-idle-time", Fcurrent_idle_time, Scurrent_idle_time, 0, 0, 0,
doc: /* Return the current length of Emacs idleness.
The value is returned as a list of three integers. The first has the
most significant 16 bits of the seconds, while the second has the
least significant 16 bits. The third integer gives the microsecond
count.
The microsecond count is zero on systems that do not provide
resolution finer than a second. */)
()
{
if (! EMACS_TIME_NEG_P (timer_idleness_start_time))
{
EMACS_TIME now, idleness_now;
EMACS_GET_TIME (now);
EMACS_SUB_TIME (idleness_now, now, timer_idleness_start_time);
return list3 (make_number ((EMACS_SECS (idleness_now) >> 16) & 0xffff),
make_number ((EMACS_SECS (idleness_now) >> 0) & 0xffff),
make_number (EMACS_USECS (idleness_now)));
}
return Qnil;
}
/* Caches for modify_event_symbol. */
static Lisp_Object accent_key_syms;
@ -6936,8 +6969,6 @@ input_available_signal (signo)
SIGNAL_THREAD_CHECK (signo);
#endif
in_sighandler = 1;
if (input_available_clear_time)
EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
@ -6949,7 +6980,6 @@ input_available_signal (signo)
sigfree ();
#endif
errno = old_errno;
in_sighandler = 0;
}
#endif /* SIGIO */
@ -10816,7 +10846,6 @@ init_keyboard ()
do_mouse_tracking = Qnil;
#endif
input_pending = 0;
in_sighandler = 0;
/* This means that command_loop_1 won't try to select anything the first
time through. */
@ -11130,6 +11159,7 @@ syms_of_keyboard ()
menu_bar_items_vector = Qnil;
staticpro (&menu_bar_items_vector);
defsubr (&Scurrent_idle_time);
defsubr (&Sevent_convert_list);
defsubr (&Sread_key_sequence);
defsubr (&Sread_key_sequence_vector);
@ -11187,14 +11217,16 @@ These events are processed first, before actual keyboard input. */);
DEFVAR_LISP ("unread-post-input-method-events", &Vunread_post_input_method_events,
doc: /* List of events to be processed as input by input methods.
These events are processed after `unread-command-events', but
before actual keyboard input. */);
These events are processed before `unread-command-events'
and actual keyboard input without given to `input-method-function'. */);
Vunread_post_input_method_events = Qnil;
DEFVAR_LISP ("unread-input-method-events", &Vunread_input_method_events,
doc: /* List of events to be processed as input by input methods.
These events are processed after `unread-command-events', but
before actual keyboard input. */);
before actual keyboard input.
If there's an active input method, the events are given to
`input-method-function'. */);
Vunread_input_method_events = Qnil;
DEFVAR_LISP ("meta-prefix-char", &meta_prefix_char,

View file

@ -190,9 +190,6 @@ extern EMACS_INT num_nonmacro_input_events;
/* Nonzero means polling for input is temporarily suppressed. */
extern int poll_suppress_count;
/* Nonzero if we are executing from the SIGIO signal handler. */
extern int in_sighandler;
/* Keymap mapping ASCII function key sequences onto their preferred forms.
Initialized by the terminal-specific lisp files. */
extern Lisp_Object Vfunction_key_map;

View file

@ -831,7 +831,7 @@ create_apple_event (class, id, result)
return err;
}
OSErr
OSStatus
create_apple_event_from_event_ref (event, num_params, names, types, result)
EventRef event;
UInt32 num_params;
@ -839,7 +839,7 @@ create_apple_event_from_event_ref (event, num_params, names, types, result)
EventParamType *types;
AppleEvent *result;
{
OSErr err;
OSStatus err;
UInt32 i, size;
CFStringRef string;
CFDataRef data;
@ -2424,7 +2424,7 @@ select (n, rfds, wfds, efds, timeout)
SELECT_TYPE *efds;
struct timeval *timeout;
{
OSErr err;
OSStatus err;
#if TARGET_API_MAC_CARBON
EventTimeout timeout_sec =
(timeout
@ -4192,7 +4192,7 @@ DEFUN ("mac-get-file-creator", Fmac_get_file_creator, Smac_get_file_creator, 1,
(filename)
Lisp_Object filename;
{
OSErr status;
OSStatus status;
#ifdef MAC_OSX
FSRef fref;
#else
@ -4246,7 +4246,7 @@ DEFUN ("mac-get-file-type", Fmac_get_file_type, Smac_get_file_type, 1, 1, 0,
(filename)
Lisp_Object filename;
{
OSErr status;
OSStatus status;
#ifdef MAC_OSX
FSRef fref;
#else
@ -4302,7 +4302,7 @@ assumed. Return non-nil if successful. */)
(filename, code)
Lisp_Object filename, code;
{
OSErr status;
OSStatus status;
#ifdef MAC_OSX
FSRef fref;
#else
@ -4362,7 +4362,7 @@ CODE must be a 4-character string. Return non-nil if successful. */)
(filename, code)
Lisp_Object filename, code;
{
OSErr status;
OSStatus status;
#ifdef MAC_OSX
FSRef fref;
#else
@ -4775,7 +4775,7 @@ cfstring_create_normalized (str, symbol)
UnicodeMapping map;
CFIndex length;
UniChar *in_text, *buffer = NULL, *out_buf = NULL;
OSErr err = noErr;
OSStatus err = noErr;
ByteCount out_read, out_size, out_len;
map.unicodeEncoding = CreateTextEncoding (kTextEncodingUnicodeDefault,
@ -4910,7 +4910,7 @@ On successful conversion, return the result string, else return nil. */)
static Lisp_Object
mac_get_system_locale ()
{
OSErr err;
OSStatus err;
LangCode lang;
RegionCode region;
LocaleRef locale;
@ -4987,7 +4987,7 @@ select_and_poll_event (n, rfds, wfds, efds, timeout)
struct timeval *timeout;
{
int r;
OSErr err;
OSStatus err;
r = select (n, rfds, wfds, efds, timeout);
if (r != -1)
@ -5017,7 +5017,7 @@ sys_select (n, rfds, wfds, efds, timeout)
SELECT_TYPE *efds;
struct timeval *timeout;
{
OSErr err;
OSStatus err;
int i, r;
EMACS_TIME select_timeout;

View file

@ -1945,63 +1945,80 @@ static void
mac_update_proxy_icon (f)
struct frame *f;
{
OSStatus err;
Lisp_Object file_name =
XBUFFER (XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer)->filename;
Window w = FRAME_MAC_WINDOW (f);
if (FRAME_FILE_NAME (f) == NULL && !STRINGP (file_name))
return;
if (FRAME_FILE_NAME (f) && STRINGP (file_name)
&& strcmp (FRAME_FILE_NAME (f), SDATA (file_name)) == 0)
return;
if (FRAME_FILE_NAME (f))
{
xfree (FRAME_FILE_NAME (f));
FRAME_FILE_NAME (f) = NULL;
}
AliasHandle alias = NULL;
BLOCK_INPUT;
err = GetWindowProxyAlias (w, &alias);
if (err == errWindowDoesNotHaveProxy && !STRINGP (file_name))
goto out;
if (STRINGP (file_name))
{
OSStatus err;
AEDesc desc;
#ifdef MAC_OSX
FSRef fref;
#else
FSSpec fss;
#endif
Boolean changed;
Lisp_Object encoded_file_name = ENCODE_FILE (file_name);
#ifdef MAC_OS8
SetPortWindowPort (w);
#endif
#ifdef MAC_OSX
err = AECoercePtr (TYPE_FILE_NAME, SDATA (encoded_file_name),
SBYTES (encoded_file_name), typeAlias, &desc);
SBYTES (encoded_file_name), typeFSRef, &desc);
#else
SetPortWindowPort (w);
err = AECoercePtr (TYPE_FILE_NAME, SDATA (encoded_file_name),
SBYTES (encoded_file_name), typeFSS, &desc);
#endif
if (err == noErr)
{
Size size = AEGetDescDataSize (&desc);
AliasHandle alias = (AliasHandle) NewHandle (size);
if (alias == NULL)
err = memFullErr;
else
{
HLock ((Handle) alias);
err = AEGetDescData (&desc, *alias, size);
HUnlock ((Handle) alias);
if (err == noErr)
err = SetWindowProxyAlias (w, alias);
DisposeHandle ((Handle) alias);
}
#ifdef MAC_OSX
err = AEGetDescData (&desc, &fref, sizeof (FSRef));
#else
err = AEGetDescData (&desc, &fss, sizeof (FSSpec));
#endif
AEDisposeDesc (&desc);
}
if (err == noErr)
{
FRAME_FILE_NAME (f) = xmalloc (SBYTES (file_name) + 1);
strcpy (FRAME_FILE_NAME (f), SDATA (file_name));
if (alias)
{
#ifdef MAC_OSX
err = FSUpdateAlias (NULL, &fref, alias, &changed);
#else
err = UpdateAlias (NULL, &fss, alias, &changed);
#endif
}
if (err != noErr || alias == NULL)
{
if (alias)
DisposeHandle ((Handle) alias);
#ifdef MAC_OSX
err = FSNewAliasMinimal (&fref, &alias);
#else
err = NewAliasMinimal (&fss, &alias);
#endif
changed = true;
}
}
if (err == noErr)
if (changed)
err = SetWindowProxyAlias (w, alias);
}
if (FRAME_FILE_NAME (f) == NULL)
if (alias)
DisposeHandle ((Handle) alias);
if (err != noErr || !STRINGP (file_name))
RemoveWindowProxy (w);
out:
UNBLOCK_INPUT;
}
#endif
@ -2566,7 +2583,6 @@ This function is an internal primitive--use `make-frame' instead. */)
f->output_data.mac = (struct mac_output *) xmalloc (sizeof (struct mac_output));
bzero (f->output_data.mac, sizeof (struct mac_output));
FRAME_FONTSET (f) = -1;
record_unwind_protect (unwind_create_frame, frame);
f->icon_name
= mac_get_arg (parms, Qicon_name, "iconName", "Title", RES_TYPE_STRING);
@ -2574,6 +2590,9 @@ This function is an internal primitive--use `make-frame' instead. */)
f->icon_name = Qnil;
/* FRAME_MAC_DISPLAY_INFO (f) = dpyinfo; */
/* With FRAME_MAC_DISPLAY_INFO set up, this unwind-protect is safe. */
record_unwind_protect (unwind_create_frame, frame);
#if GLYPH_DEBUG
image_cache_refcount = FRAME_X_IMAGE_CACHE (f)->refcount;
dpyinfo_refcount = dpyinfo->reference_count;
@ -2876,14 +2895,9 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0,
CHECK_STRING (color);
if (mac_defined_color (f, SDATA (color), &foo, 0))
{
Lisp_Object rgb[3];
rgb[0] = make_number (foo.red);
rgb[1] = make_number (foo.green);
rgb[2] = make_number (foo.blue);
return Flist (3, rgb);
}
return list3 (make_number (foo.red),
make_number (foo.green),
make_number (foo.blue));
else
return Qnil;
}

View file

@ -31,15 +31,15 @@ typedef int ScrapRef;
typedef ResType ScrapFlavorType;
#endif /* !TARGET_API_MAC_CARBON */
static OSErr get_scrap_from_symbol P_ ((Lisp_Object, int, ScrapRef *));
static OSStatus get_scrap_from_symbol P_ ((Lisp_Object, int, ScrapRef *));
static ScrapFlavorType get_flavor_type_from_symbol P_ ((Lisp_Object));
static int valid_scrap_target_type_p P_ ((Lisp_Object));
static OSErr clear_scrap P_ ((ScrapRef *));
static OSErr put_scrap_string P_ ((ScrapRef, Lisp_Object, Lisp_Object));
static OSErr put_scrap_private_timestamp P_ ((ScrapRef, unsigned long));
static OSStatus clear_scrap P_ ((ScrapRef *));
static OSStatus put_scrap_string P_ ((ScrapRef, Lisp_Object, Lisp_Object));
static OSStatus put_scrap_private_timestamp P_ ((ScrapRef, unsigned long));
static ScrapFlavorType scrap_has_target_type P_ ((ScrapRef, Lisp_Object));
static Lisp_Object get_scrap_string P_ ((ScrapRef, Lisp_Object));
static OSErr get_scrap_private_timestamp P_ ((ScrapRef, unsigned long *));
static OSStatus get_scrap_private_timestamp P_ ((ScrapRef, unsigned long *));
static Lisp_Object get_scrap_target_type_list P_ ((ScrapRef));
static void x_own_selection P_ ((Lisp_Object, Lisp_Object));
static Lisp_Object x_get_local_selection P_ ((Lisp_Object, Lisp_Object, int));
@ -108,13 +108,13 @@ static Lisp_Object Vmac_service_selection;
reference is set to *SCRAP, and it becomes NULL if there's no
corresponding scrap. Clear the scrap if CLEAR_P is non-zero. */
static OSErr
static OSStatus
get_scrap_from_symbol (sym, clear_p, scrap)
Lisp_Object sym;
int clear_p;
ScrapRef *scrap;
{
OSErr err = noErr;
OSStatus err = noErr;
Lisp_Object str = Fget (sym, Qmac_scrap_name);
if (!STRINGP (str))
@ -172,7 +172,7 @@ valid_scrap_target_type_p (sym)
/* Clear the scrap whose reference is *SCRAP. */
static INLINE OSErr
static INLINE OSStatus
clear_scrap (scrap)
ScrapRef *scrap;
{
@ -190,7 +190,7 @@ clear_scrap (scrap)
/* Put Lisp String STR to the scrap SCRAP. The target type is
specified by TYPE. */
static OSErr
static OSStatus
put_scrap_string (scrap, type, str)
ScrapRef scrap;
Lisp_Object type, str;
@ -211,7 +211,7 @@ put_scrap_string (scrap, type, str)
/* Put TIMESTAMP to the scrap SCRAP. The timestamp is used for
checking if the scrap is owned by the process. */
static INLINE OSErr
static INLINE OSStatus
put_scrap_private_timestamp (scrap, timestamp)
ScrapRef scrap;
unsigned long timestamp;
@ -233,7 +233,7 @@ scrap_has_target_type (scrap, type)
ScrapRef scrap;
Lisp_Object type;
{
OSErr err;
OSStatus err;
ScrapFlavorType flavor_type = get_flavor_type_from_symbol (type);
if (flavor_type)
@ -264,7 +264,7 @@ get_scrap_string (scrap, type)
ScrapRef scrap;
Lisp_Object type;
{
OSErr err;
OSStatus err;
Lisp_Object result = Qnil;
ScrapFlavorType flavor_type = get_flavor_type_from_symbol (type);
#if TARGET_API_MAC_CARBON
@ -310,12 +310,12 @@ get_scrap_string (scrap, type)
/* Get timestamp from the scrap SCRAP and set to *TIMPSTAMP. */
static OSErr
static OSStatus
get_scrap_private_timestamp (scrap, timestamp)
ScrapRef scrap;
unsigned long *timestamp;
{
OSErr err = noErr;
OSStatus err = noErr;
#if TARGET_API_MAC_CARBON
ScrapFlavorFlags flags;
@ -365,7 +365,7 @@ get_scrap_target_type_list (scrap)
{
Lisp_Object result = Qnil, rest, target_type;
#if TARGET_API_MAC_CARBON
OSErr err;
OSStatus err;
UInt32 count, i, type;
ScrapFlavorInfo *flavor_info = NULL;
Lisp_Object strings = Qnil;
@ -425,7 +425,7 @@ static void
x_own_selection (selection_name, selection_value)
Lisp_Object selection_name, selection_value;
{
OSErr err;
OSStatus err;
ScrapRef scrap;
struct gcpro gcpro1, gcpro2;
Lisp_Object rest, handler_fn, value, type;
@ -671,7 +671,7 @@ static Lisp_Object
x_get_foreign_selection (selection_symbol, target_type, time_stamp)
Lisp_Object selection_symbol, target_type, time_stamp;
{
OSErr err;
OSStatus err;
ScrapRef scrap;
Lisp_Object result = Qnil;
@ -765,7 +765,7 @@ Disowning it means there is no such selection. */)
Lisp_Object selection;
Lisp_Object time;
{
OSErr err;
OSStatus err;
ScrapRef scrap;
Lisp_Object local_selection_data;
@ -828,7 +828,7 @@ and t is the same as `SECONDARY'. */)
(selection)
Lisp_Object selection;
{
OSErr err;
OSStatus err;
ScrapRef scrap;
Lisp_Object result = Qnil, local_selection_data;
@ -873,7 +873,7 @@ and t is the same as `SECONDARY'. */)
(selection)
Lisp_Object selection;
{
OSErr err;
OSStatus err;
ScrapRef scrap;
Lisp_Object result = Qnil, rest;
@ -931,7 +931,7 @@ struct suspended_ae_info
struct suspended_ae_info *next;
};
/* List of deferred apple events at the startup time. */
/* List of apple events deferred at the startup time. */
static struct suspended_ae_info *deferred_apple_events = NULL;
/* List of suspended apple events, in order of expiration_tick. */

View file

@ -904,7 +904,7 @@ mac_draw_string_common (f, gc, x, y, buf, nchars, bg_width, bytes_per_char)
#if USE_ATSUI
if (GC_FONT (gc)->mac_style)
{
OSErr err;
OSStatus err;
ATSUTextLayout text_layout;
xassert (bytes_per_char == 2);
@ -1131,7 +1131,7 @@ mac_draw_image_string_16 (f, gc, x, y, buf, nchars, bg_width)
the font of the current graphics port. If CG_GLYPH is not NULL,
*CG_GLYPH is set to the glyph ID or 0 if it cannot be obtained. */
static OSErr
static OSStatus
mac_query_char_extents (style, c,
font_ascent_return, font_descent_return,
overall_return, cg_glyph)
@ -1149,7 +1149,7 @@ mac_query_char_extents (style, c,
void *cg_glyph;
#endif
{
OSErr err = noErr;
OSStatus err = noErr;
int width;
Rect char_bounds;
@ -1195,7 +1195,7 @@ mac_query_char_extents (style, c,
#if USE_CG_TEXT_DRAWING
if (err == noErr && cg_glyph)
{
OSErr err1;
OSStatus err1;
ATSUGlyphInfoArray glyph_info_array;
ByteCount count = sizeof (ATSUGlyphInfoArray);
@ -3585,7 +3585,9 @@ x_draw_stretch_glyph_string (s)
int background_width = s->background_width;
int x = s->x, left_x = window_box_left_offset (s->w, TEXT_AREA);
if (x < left_x)
/* Don't draw into left margin, fringe or scrollbar area
except for header line and mode line. */
if (x < left_x && !s->row->mode_line_p)
{
background_width -= left_x - x;
x = left_x;
@ -3679,14 +3681,14 @@ x_draw_glyph_string (s)
if (s->face->underline_defaulted_p)
mac_fill_rectangle (s->f, s->gc, s->x, s->y + dy,
s->width, h);
s->background_width, h);
else
{
XGCValues xgcv;
XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
XSetForeground (s->display, s->gc, s->face->underline_color);
mac_fill_rectangle (s->f, s->gc, s->x, s->y + dy,
s->width, h);
s->background_width, h);
XSetForeground (s->display, s->gc, xgcv.foreground);
}
}
@ -3698,14 +3700,14 @@ x_draw_glyph_string (s)
if (s->face->overline_color_defaulted_p)
mac_fill_rectangle (s->f, s->gc, s->x, s->y + dy,
s->width, h);
s->background_width, h);
else
{
XGCValues xgcv;
XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
XSetForeground (s->display, s->gc, s->face->overline_color);
mac_fill_rectangle (s->f, s->gc, s->x, s->y + dy,
s->width, h);
s->background_width, h);
XSetForeground (s->display, s->gc, xgcv.foreground);
}
}
@ -6331,7 +6333,7 @@ void
x_iconify_frame (f)
struct frame *f;
{
OSErr err;
OSStatus err;
/* A deactivate event does not occur when the last visible frame is
iconified. So if we clear the highlight here, it will not be
@ -6395,11 +6397,6 @@ x_free_frame_resources (f)
if (FRAME_SIZE_HINTS (f))
xfree (FRAME_SIZE_HINTS (f));
#if TARGET_API_MAC_CARBON
if (FRAME_FILE_NAME (f))
xfree (FRAME_FILE_NAME (f));
#endif
xfree (f->output_data.mac);
f->output_data.mac = NULL;
@ -7217,7 +7214,7 @@ init_font_name_table ()
if (!NILP (assq_no_quit (make_number (kTextEncodingMacUnicode),
text_encoding_info_alist)))
{
OSErr err;
OSStatus err;
struct Lisp_Hash_Table *h;
unsigned hash_code;
ItemCount nfonts, i;
@ -7799,7 +7796,7 @@ XLoadQueryFont (Display *dpy, char *fontname)
#if USE_ATSUI
if (strcmp (charset, "iso10646-1") == 0) /* XXX */
{
OSErr err;
OSStatus err;
ATSUAttributeTag tags[] = {kATSUFontTag, kATSUSizeTag,
kATSUQDBoldfaceTag, kATSUQDItalicTag};
ByteCount sizes[] = {sizeof (ATSUFontID), sizeof (Fixed),
@ -7882,7 +7879,7 @@ XLoadQueryFont (Display *dpy, char *fontname)
#if USE_ATSUI
if (font->mac_style)
{
OSErr err;
OSStatus err;
UniChar c;
font->min_byte1 = 0;
@ -8363,8 +8360,8 @@ x_query_font (f, fontname)
for (i = 0; i < dpyinfo->n_fonts; i++)
if (dpyinfo->font_table[i].name
&& (!strcmp (dpyinfo->font_table[i].name, fontname)
|| !strcmp (dpyinfo->font_table[i].full_name, fontname)))
&& (!xstricmp (dpyinfo->font_table[i].name, fontname)
|| !xstricmp (dpyinfo->font_table[i].full_name, fontname)))
return (dpyinfo->font_table + i);
return NULL;
}
@ -8558,7 +8555,7 @@ Point saved_menu_event_location;
/* Apple Events */
#if USE_CARBON_EVENTS
static Lisp_Object Qhicommand;
static Lisp_Object Qhi_command;
#ifdef MAC_OSX
extern Lisp_Object Qwindow;
static Lisp_Object Qtoolbar_switch_mode;
@ -8600,7 +8597,7 @@ static Lisp_Object Qservice, Qpaste, Qperform;
static pascal OSStatus mac_handle_window_event (EventHandlerCallRef,
EventRef, void *);
#endif
OSErr install_window_handler (WindowPtr);
OSStatus install_window_handler (WindowPtr);
extern void init_emacs_passwd_dir ();
extern int emacs_main (int, char **, char **);
@ -9401,15 +9398,15 @@ mac_handle_command_event (next_handler, event, data)
if (err != noErr || command.commandID == 0)
return eventNotHandledErr;
/* A HICommand event is mapped to an Apple event whose event class
symbol is `hicommand' and event ID is its command ID. */
/* A HI command event is mapped to an Apple event whose event class
symbol is `hi-command' and event ID is its command ID. */
err = mac_store_event_ref_as_apple_event (0, command.commandID,
Qhicommand, Qnil,
Qhi_command, Qnil,
event, num_params, names, types);
return err == noErr ? noErr : eventNotHandledErr;
}
static OSErr
static OSStatus
init_command_handler ()
{
EventTypeSpec specs[] = {{kEventClassCommand, kEventCommandProcess}};
@ -9910,11 +9907,11 @@ mac_store_service_event (event)
#endif /* USE_CARBON_EVENTS */
OSErr
OSStatus
install_window_handler (window)
WindowPtr window;
{
OSErr err = noErr;
OSStatus err = noErr;
#if USE_CARBON_EVENTS
EventTypeSpec specs_window[] =
{{kEventClassWindow, kEventWindowUpdate},
@ -11324,7 +11321,7 @@ static void
init_menu_bar ()
{
#ifdef MAC_OSX
OSErr err;
OSStatus err;
MenuRef menu;
MenuItemIndex menu_index;
@ -11507,7 +11504,7 @@ syms_of_macterm ()
Fput (Qsuper, Qmodifier_value, make_number (super_modifier));
#if USE_CARBON_EVENTS
Qhicommand = intern ("hicommand"); staticpro (&Qhicommand);
Qhi_command = intern ("hi-command"); staticpro (&Qhi_command);
#ifdef MAC_OSX
Qtoolbar_switch_mode = intern ("toolbar-switch-mode");
staticpro (&Qtoolbar_switch_mode);

View file

@ -335,11 +335,6 @@ struct mac_output {
/* Hints for the size and the position of a window. */
XSizeHints *size_hints;
#if TARGET_API_MAC_CARBON
/* File name for the proxy icon of this frame. Might be NULL. */
char *file_name;
#endif
#if USE_CG_DRAWING
/* Quartz 2D graphics context. */
CGContextRef cg_context;
@ -365,8 +360,6 @@ typedef struct mac_output mac_output;
#define FRAME_SIZE_HINTS(f) ((f)->output_data.mac->size_hints)
#define FRAME_FILE_NAME(f) ((f)->output_data.mac->file_name)
/* This gives the mac_display_info structure for the display F is on. */
#define FRAME_MAC_DISPLAY_INFO(f) (&one_mac_display_info)
#define FRAME_X_DISPLAY_INFO(f) (&one_mac_display_info)
@ -634,7 +627,7 @@ extern void mac_unload_font P_ ((struct mac_display_info *, XFontStruct *));
extern int mac_font_panel_visible_p P_ ((void));
extern OSStatus mac_show_hide_font_panel P_ ((void));
extern OSStatus mac_set_font_info_for_selection P_ ((struct frame *, int, int));
extern OSErr install_window_handler P_ ((WindowPtr));
extern OSStatus install_window_handler P_ ((WindowPtr));
extern void remove_window_handler P_ ((WindowPtr));
extern void do_menu_choice P_ ((SInt32));
extern OSStatus mac_post_mouse_moved_event P_ ((void));
@ -675,7 +668,7 @@ extern void mac_clear_font_name_table P_ ((void));
extern Lisp_Object mac_aedesc_to_lisp P_ ((const AEDesc *));
extern OSErr mac_ae_put_lisp P_ ((AEDescList *, UInt32, Lisp_Object));
#if TARGET_API_MAC_CARBON
extern OSErr create_apple_event_from_event_ref P_ ((EventRef, UInt32,
extern OSStatus create_apple_event_from_event_ref P_ ((EventRef, UInt32,
EventParamName *,
EventParamType *,
AppleEvent *));

View file

@ -6417,17 +6417,12 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0,
CHECK_STRING (color);
if (w32_defined_color (f, SDATA (color), &foo, 0))
{
Lisp_Object rgb[3];
rgb[0] = make_number ((GetRValue (foo.pixel) << 8)
| GetRValue (foo.pixel));
rgb[1] = make_number ((GetGValue (foo.pixel) << 8)
| GetGValue (foo.pixel));
rgb[2] = make_number ((GetBValue (foo.pixel) << 8)
| GetBValue (foo.pixel));
return Flist (3, rgb);
}
return list3 (make_number ((GetRValue (foo.pixel) << 8)
| GetRValue (foo.pixel)),
make_number ((GetGValue (foo.pixel) << 8)
| GetGValue (foo.pixel)),
make_number ((GetBValue (foo.pixel) << 8)
| GetBValue (foo.pixel)));
else
return Qnil;
}

View file

@ -93,6 +93,10 @@ static Lisp_Object last_window;
(Not yet supported, see TODO in x_draw_glyph_string.) */
int x_use_underline_position_properties;
/* Non-zero means to draw the underline at the same place as the descent line. */
int x_underline_at_descent_line;
extern unsigned int msh_mousewheel;
extern void free_frame_menubar ();
@ -2569,7 +2573,9 @@ x_draw_stretch_glyph_string (s)
int background_width = s->background_width;
int x = s->x, left_x = window_box_left_offset (s->w, TEXT_AREA);
if (x < left_x)
/* Don't draw into left margin, fringe or scrollbar area
except for header line and mode line. */
if (x < left_x && !s->row->mode_line_p)
{
background_width -= left_x - x;
x = left_x;
@ -2658,21 +2664,27 @@ x_draw_glyph_string (s)
&& (s->font->bdf || !s->font->tm.tmUnderlined))
{
unsigned long h = 1;
unsigned long dy = s->height - h;
unsigned long dy = 0;
/* TODO: Use font information for positioning and thickness
of underline. See OUTLINETEXTMETRIC, and xterm.c.
Note: If you make this work, don't forget to change the
doc string of x-use-underline-position-properties below. */
if (x_underline_at_descent_line)
dy = s->height - h;
else
{
/* TODO: Use font information for positioning and thickness of
underline. See OUTLINETEXTMETRIC, and xterm.c. Note: If
you make this work, don't forget to change the doc string of
x-use-underline-position-properties below. */
dy = s->height - h;
}
if (s->face->underline_defaulted_p)
{
w32_fill_area (s->f, s->hdc, s->gc->foreground, s->x,
s->y + dy, s->width, 1);
s->y + dy, s->background_width, 1);
}
else
{
w32_fill_area (s->f, s->hdc, s->face->underline_color, s->x,
s->y + dy, s->width, 1);
s->y + dy, s->background_width, 1);
}
}
@ -2684,12 +2696,12 @@ x_draw_glyph_string (s)
if (s->face->overline_color_defaulted_p)
{
w32_fill_area (s->f, s->hdc, s->gc->foreground, s->x,
s->y + dy, s->width, h);
s->y + dy, s->background_width, h);
}
else
{
w32_fill_area (s->f, s->hdc, s->face->overline_color, s->x,
s->y + dy, s->width, h);
s->y + dy, s->background_width, h);
}
}
@ -6685,6 +6697,14 @@ to 4.1, set this to nil.
NOTE: Not supported on MS-Windows yet. */);
x_use_underline_position_properties = 0;
DEFVAR_BOOL ("x-underline-at-descent-line",
&x_underline_at_descent_line,
doc: /* *Non-nil means to draw the underline at the same place as the descent line.
nil means to draw the underline according to the value of the variable
`x-use-underline-position-properties', which is usually at the baseline
level. The default value is nil. */);
x_underline_at_descent_line = 0;
DEFVAR_LISP ("x-toolkit-scroll-bars", &Vx_toolkit_scroll_bars,
doc: /* If not nil, Emacs uses toolkit scroll bars. */);
Vx_toolkit_scroll_bars = Qt;

View file

@ -6657,9 +6657,11 @@ display marginal areas and the text area. */)
if (!NILP (right_width))
CHECK_NATNUM (right_width);
if (!EQ (w->left_fringe_width, left_width)
/* Do nothing on a tty. */
if (FRAME_WINDOW_P (WINDOW_XFRAME (w))
&& (!EQ (w->left_fringe_width, left_width)
|| !EQ (w->right_fringe_width, right_width)
|| !EQ (w->fringes_outside_margins, outside_margins))
|| !EQ (w->fringes_outside_margins, outside_margins)))
{
w->left_fringe_width = left_width;
w->right_fringe_width = right_width;
@ -6687,10 +6689,11 @@ Value is a list of the form (LEFT-WIDTH RIGHT-WIDTH OUTSIDE-MARGINS). */)
Lisp_Object window;
{
struct window *w = decode_window (window);
return Fcons (make_number (WINDOW_LEFT_FRINGE_WIDTH (w)),
Fcons (make_number (WINDOW_RIGHT_FRINGE_WIDTH (w)),
Fcons ((WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w) ?
Qt : Qnil), Qnil)));
Fcons ((WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w)
? Qt : Qnil), Qnil)));
}

View file

@ -717,6 +717,10 @@ Lisp_Object Vresize_mini_windows;
struct buffer *displayed_buffer;
/* Space between overline and text. */
EMACS_INT overline_margin;
/* Value returned from text property handlers (see below). */
enum prop_handled
@ -9545,7 +9549,8 @@ update_tool_bar (f, save_match_data)
&new_n_tool_bar);
/* Redisplay the tool-bar if we changed it. */
if (NILP (Fequal (new_tool_bar, f->tool_bar_items)))
if (new_n_tool_bar != f->n_tool_bar_items
|| NILP (Fequal (new_tool_bar, f->tool_bar_items)))
{
/* Redisplay that happens asynchronously due to an expose event
may access f->tool_bar_items. Make sure we update both
@ -20611,7 +20616,7 @@ x_produce_glyphs (it)
/* 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 += 2;
it->ascent += overline_margin;
if (it->constrain_row_ascent_descent_p)
{
@ -20811,7 +20816,7 @@ x_produce_glyphs (it)
/* 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 += 2;
it->ascent += overline_margin;
take_vertical_position_into_account (it);
@ -21166,7 +21171,7 @@ x_produce_glyphs (it)
/* 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 += 2;
it->ascent += overline_margin;
take_vertical_position_into_account (it);
@ -21542,10 +21547,31 @@ get_window_cursor_type (w, glyph, width, active_cursor)
/* Use normal cursor if not blinked off. */
if (!w->cursor_off_p)
{
if (glyph != NULL && glyph->type == IMAGE_GLYPH) {
if (glyph != NULL && glyph->type == IMAGE_GLYPH)
{
if (cursor_type == FILLED_BOX_CURSOR)
{
/* Using a block cursor on large images can be very annoying.
So use a hollow cursor for "large" images. */
struct image *img = IMAGE_FROM_ID (f, glyph->u.img_id);
if (img != NULL && IMAGEP (img->spec))
{
/* Arbitrarily, interpret "Large" as >32x32 and >NxN
where N = size of default frame font size.
This should cover most of the "tiny" icons people may use. */
if (img->width > max (32, WINDOW_FRAME_COLUMN_WIDTH (w))
|| img->height > max (32, WINDOW_FRAME_LINE_HEIGHT (w)))
cursor_type = HOLLOW_BOX_CURSOR;
}
}
else if (cursor_type != NO_CURSOR)
{
/* Display current only supports BOX and HOLLOW cursors for images.
So for now, unconditionally use a HOLLOW cursor when cursor is
not a solid box cursor. */
cursor_type = HOLLOW_BOX_CURSOR;
}
}
return cursor_type;
}
@ -24443,6 +24469,12 @@ whose contents depend on various data. */);
doc: /* Inhibit try_cursor_movement display optimization. */);
inhibit_try_cursor_movement = 0;
#endif /* GLYPH_DEBUG */
DEFVAR_INT ("overline-margin", &overline_margin,
doc: /* *Space between overline and text, in pixels.
The default value is 2: the height of the overline (1 pixel) plus 1 pixel
margin to the caracter height. */);
overline_margin = 2;
}

View file

@ -1200,7 +1200,7 @@ load_pixmap (f, name, w_ptr, h_ptr)
if (bitmap_id < 0)
{
add_to_log ("Invalid or undefined bitmap %s", name, Qnil);
add_to_log ("Invalid or undefined bitmap `%s'", name, Qnil);
bitmap_id = 0;
if (w_ptr)

View file

@ -3531,14 +3531,9 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0,
CHECK_STRING (color);
if (x_defined_color (f, SDATA (color), &foo, 0))
{
Lisp_Object rgb[3];
rgb[0] = make_number (foo.red);
rgb[1] = make_number (foo.green);
rgb[2] = make_number (foo.blue);
return Flist (3, rgb);
}
return list3 (make_number (foo.red),
make_number (foo.green),
make_number (foo.blue));
else
return Qnil;
}

View file

@ -187,6 +187,10 @@ static Lisp_Object last_window;
int x_use_underline_position_properties;
/* Non-zero means to draw the underline at the same place as the descent line. */
int x_underline_at_descent_line;
/* This is a chain of structures for all the X displays currently in
use. */
@ -2742,7 +2746,9 @@ x_draw_stretch_glyph_string (s)
int background_width = s->background_width;
int x = s->x, left_x = window_box_left_offset (s->w, TEXT_AREA);
if (x < left_x)
/* Don't draw into left margin, fringe or scrollbar area
except for header line and mode line. */
if (x < left_x && !s->row->mode_line_p)
{
background_width -= left_x - x;
x = left_x;
@ -2858,14 +2864,6 @@ x_draw_glyph_string (s)
if (!XGetFontProperty (s->font, XA_UNDERLINE_THICKNESS, &h))
h = 1;
/* Get the underline position. This is the recommended
vertical offset in pixels from the baseline to the top of
the underline. This is a signed value according to the
specs, and its default is
ROUND ((maximum descent) / 2), with
ROUND(x) = floor (x + 0.5) */
#ifdef USE_FONT_BACKEND
if (enable_font_backend)
{
@ -2877,24 +2875,35 @@ x_draw_glyph_string (s)
}
else
#endif
if (x_underline_at_descent_line)
y = s->y + s->height - h;
else
{
/* Get the underline position. This is the recommended
vertical offset in pixels from the baseline to the top of
the underline. This is a signed value according to the
specs, and its default is
ROUND ((maximum descent) / 2), with
ROUND(x) = floor (x + 0.5) */
if (x_use_underline_position_properties
&& XGetFontProperty (s->font, XA_UNDERLINE_POSITION, &tem))
y = s->ybase + (long) tem;
else if (s->face->font)
y = s->ybase + (s->face->font->max_bounds.descent + 1) / 2;
else
y = s->y + s->height - h;
}
if (s->face->underline_defaulted_p)
XFillRectangle (s->display, s->window, s->gc,
s->x, y, s->width, h);
s->x, y, s->background_width, h);
else
{
XGCValues xgcv;
XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
XSetForeground (s->display, s->gc, s->face->underline_color);
XFillRectangle (s->display, s->window, s->gc,
s->x, y, s->width, h);
s->x, y, s->background_width, h);
XSetForeground (s->display, s->gc, xgcv.foreground);
}
}
@ -2906,14 +2915,14 @@ x_draw_glyph_string (s)
if (s->face->overline_color_defaulted_p)
XFillRectangle (s->display, s->window, s->gc, s->x, s->y + dy,
s->width, h);
s->background_width, h);
else
{
XGCValues xgcv;
XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
XSetForeground (s->display, s->gc, s->face->overline_color);
XFillRectangle (s->display, s->window, s->gc, s->x, s->y + dy,
s->width, h);
s->background_width, h);
XSetForeground (s->display, s->gc, xgcv.foreground);
}
}
@ -11435,6 +11444,14 @@ UNDERLINE_POSITION font properties, for example 7x13 on XFree prior
to 4.1, set this to nil. */);
x_use_underline_position_properties = 1;
DEFVAR_BOOL ("x-underline-at-descent-line",
&x_underline_at_descent_line,
doc: /* *Non-nil means to draw the underline at the same place as the descent line.
nil means to draw the underline according to the value of the variable
`x-use-underline-position-properties', which is usually at the baseline
level. The default value is nil. */);
x_underline_at_descent_line = 0;
DEFVAR_BOOL ("x-mouse-click-focus-ignore-position",
&x_mouse_click_focus_ignore_position,
doc: /* Non-nil means that a mouse click to focus a frame does not move point.