1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-23 07:19:15 +00:00

Merged from emacs--devo--0

Patches applied:

 * emacs@sv.gnu.org/emacs--devo--0--patch-744
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-745
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-746
   Merge from emacs--rel--22

 * emacs@sv.gnu.org/emacs--devo--0--patch-747
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-748
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-749
   Merge from gnus--rel--5.10

 * emacs@sv.gnu.org/emacs--devo--0--patch-750
   Merge from emacs--rel--22

 * emacs@sv.gnu.org/emacs--devo--0--patch-751
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-752
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-753
   Merge from emacs--rel--22

 * emacs@sv.gnu.org/emacs--devo--0--patch-754
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-755
   Merge from emacs--rel--22

 * emacs@sv.gnu.org/emacs--devo--0--patch-756
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-757
   Update from CVS: lisp/textmodes/sgml-mode.el: Revert last change.

 * emacs@sv.gnu.org/emacs--devo--0--patch-758
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-759
   Merge from emacs--rel--22

 * emacs@sv.gnu.org/emacs--devo--0--patch-760
   Update from CVS

 * emacs@sv.gnu.org/emacs--devo--0--patch-761
   Update from CVS

 * emacs@sv.gnu.org/emacs--rel--22--patch-14
   Update from CVS

 * emacs@sv.gnu.org/emacs--rel--22--patch-15
   Update from CVS

 * emacs@sv.gnu.org/emacs--rel--22--patch-16
   Update from CVS: src/xterm.c (XTread_socket): Revert last change.

 * emacs@sv.gnu.org/emacs--rel--22--patch-17
   Update from CVS

 * emacs@sv.gnu.org/emacs--rel--22--patch-18
   Update from CVS

 * emacs@sv.gnu.org/emacs--rel--22--patch-19
   Update from CVS

 * emacs@sv.gnu.org/emacs--rel--22--patch-20
   Update from CVS

 * emacs@sv.gnu.org/emacs--rel--22--patch-21
   Update from CVS

 * emacs@sv.gnu.org/gnus--rel--5.10--patch-221
   Update from CVS

Revision: emacs@sv.gnu.org/emacs--multi-tty--0--patch-12
Creator:  Karoly Lorentey <karoly@lorentey.hu>
This commit is contained in:
Miles Bader 2007-05-20 23:29:14 +00:00
commit 7be1c21aed
71 changed files with 4650 additions and 3254 deletions

95
AUTHORS
View File

@ -334,9 +334,9 @@ Cheng Gao: changed MORE.STUFF flymake.el tips.texi url-dired.el
Chong Yidong: changed cus-edit.el simple.el files.el custom.el Chong Yidong: changed cus-edit.el simple.el files.el custom.el
display.texi longlines.el xdisp.c files.texi info.el keyboard.c display.texi longlines.el xdisp.c files.texi info.el keyboard.c
compile.el custom.texi text.texi frames.texi image-mode.el mouse.el compile.el custom.texi text.texi xterm.c frames.texi image-mode.el
misc.texi startup.el wid-edit.el xterm.c cus-theme.el mouse.el misc.texi startup.el wid-edit.el cus-theme.el
and 295 other files and 296 other files
Chris Hanson: changed xscheme.el scheme.el xterm.c hpux.h x11term.c Chris Hanson: changed xscheme.el scheme.el xterm.c hpux.h x11term.c
hp9000s300.h keyboard.c process.c texinfmt.el emacsclient.c sort.el hp9000s300.h keyboard.c process.c texinfmt.el emacsclient.c sort.el
@ -456,10 +456,10 @@ Dave Lambert: changed sol2-5.h xfns.c xterm.c xterm.h
Dave Love: wrote autoarg.el autoconf.el benchmark.el cfengine.el Dave Love: wrote autoarg.el autoconf.el benchmark.el cfengine.el
code-pages.el elide-head.el georgian.el hl-line.el latin-8.el code-pages.el elide-head.el georgian.el hl-line.el latin-8.el
latin-9.el latin1-disp.el python.el refill.el rfc1345.el latin-9.el latin1-disp.el python.el refill.el rfc1345.el sgml-input.el
sgml-input.el smiley.el subst-big5.el subst-gb2312.el subst-jis.el smiley.el subst-big5.el subst-gb2312.el subst-jis.el subst-ksc.el
subst-ksc.el tool-bar.el ucs-tables.el uni-input.el utf-16.el tool-bar.el ucs-tables.el uni-input.el utf-16.el utf-7.el utf-8-lang.el
utf-7.el utf-8-lang.el welsh.el welsh.el
and changed configure.in Makefile.in help.el fortran.el browse-url.el and changed configure.in Makefile.in help.el fortran.el browse-url.el
mule-cmds.el simple.el xterm.c cus-edit.el files.el info.el mule.el mule-cmds.el simple.el xterm.c cus-edit.el files.el info.el mule.el
wid-edit.el fns.c vc.el rfc2047.el bindings.el cus-start.el buffer.c wid-edit.el fns.c vc.el rfc2047.el bindings.el cus-start.el buffer.c
@ -550,8 +550,8 @@ and changed w32menu.c w32term.c close.png close.xpm empty.png empty.xpm
David Reitter: wrote mailclient.el David Reitter: wrote mailclient.el
and changed commands.h cus-edit.el easy-mmode.el emacsbug.el and changed commands.h cus-edit.el easy-mmode.el emacsbug.el
emacsclient.c keymap.c macterm.c menu-bar.el minibuf.c sendmail.el emacsclient.c keymap.c macterm.c menu-bar.el minibuf.c python.el
url-http.el sendmail.el url-http.el
David Robinson: changed menu-bar.el x-win.el David Robinson: changed menu-bar.el x-win.el
@ -561,6 +561,8 @@ David Vazquez: changed m4-mode.el
David Z. Maze: changed nnml.el nnrss.el David Z. Maze: changed nnml.el nnrss.el
Davis Herring: changed timeclock.el
Deanna Phillips: changed configure.in Deanna Phillips: changed configure.in
Decklin Foster: changed nngateway.el Decklin Foster: changed nngateway.el
@ -597,7 +599,7 @@ Didier Verna: wrote gnus-diary.el nndiary.el
and changed nntp.el gnus-art.el gnus-msg.el gnus-group.el gnus-start.el and changed nntp.el gnus-art.el gnus-msg.el gnus-group.el gnus-start.el
gnus-sum.el gnus-xmas.el gnus-picon.el gnus-salt.el cus-edit.el rect.el gnus-sum.el gnus-xmas.el gnus-picon.el gnus-salt.el cus-edit.el rect.el
dgnushack.el gnus-agent.el gnus-ems.el gnus-fun.el gnus-topic.el dgnushack.el gnus-agent.el gnus-ems.el gnus-fun.el gnus-topic.el
message.el nnmail.el nnmbox.el smiley.el gnus.texi message.el nnmail.el nnmbox.el smiley.el
Dirk Herrmann: changed bibtex.el Dirk Herrmann: changed bibtex.el
@ -634,7 +636,7 @@ and changed diary.el tex-mode.el cal-tex.el cal-mayan.el holiday.el
Edward O'connor: changed erc.el erc-viper.el erc-log.el erc-track.el Edward O'connor: changed erc.el erc-viper.el erc-log.el erc-track.el
viper.el erc-backend.el erc-chess.el erc-dcc.el erc-ezbounce.el viper.el erc-backend.el erc-chess.el erc-dcc.el erc-ezbounce.el
erc-goodies.el erc-list.el erc-macs.el erc-match.el erc-ring.el erc-goodies.el erc-list.el erc-macs.el erc-match.el erc-ring.el
erc-stamp.el goto-addr.el erc-stamp.el goto-addr.el python.el
Edwin Steiner: changed gnus-nocem.el Edwin Steiner: changed gnus-nocem.el
@ -649,9 +651,9 @@ Eli Tziperman: wrote rmail-spam-filter.el
Eli Zaretskii: wrote codepage.el rxvt.el tty-colors.el Eli Zaretskii: wrote codepage.el rxvt.el tty-colors.el
and changed msdos.c Makefile.in makefile.w32-in files.el info.el fileio.c and changed msdos.c Makefile.in makefile.w32-in files.el info.el fileio.c
startup.el mainmake.v2 config.bat menu-bar.el pc-win.el rmail.el startup.el mainmake.v2 config.bat rmail.el menu-bar.el pc-win.el
simple.el msdos.h internal.el xfaces.c emacs.c frame.c dosfns.c simple.el msdos.h internal.el xfaces.c emacs.c frame.c dosfns.c
faces.el frame.el and 531 other files faces.el frame.el and 532 other files
Emanuele Giaquinta: changed rxvt.el configure.in etags.c frame.el Emanuele Giaquinta: changed rxvt.el configure.in etags.c frame.el
sh-script.el text.texi sh-script.el text.texi
@ -746,8 +748,8 @@ Francesc Rocher: changed cus-start.el macterm.c w32term.c xdisp.c xterm.c
Francesco Potort,Al(B: wrote cmacexp.el Francesco Potort,Al(B: wrote cmacexp.el
and changed etags.c man.el delta.h undigest.el etags.1 comint.el and changed etags.c man.el delta.h undigest.el etags.1 comint.el
configure.in uniquify.el latin-post.el rmail.el Makefile.in etags.el configure.in uniquify.el latin-post.el maintaining.texi rmail.el
latin-alt.el maintaining.texi sgml-mode.el data.c european.el Makefile.in etags.el latin-alt.el sgml-mode.el data.c european.el
filelock.c files.el generic-x.el gud.el and 43 other files filelock.c files.el generic-x.el gud.el and 43 other files
Francis J. Wright: wrote woman.el Francis J. Wright: wrote woman.el
@ -852,9 +854,9 @@ Giuseppe Scrivano: changed buffer.c configure.in sysdep.c xsmfns.c
Glenn Morris: changed f90.el diary-lib.el calendar.el fortran.el Glenn Morris: changed f90.el diary-lib.el calendar.el fortran.el
calendar.texi appt.el sh-script.el Makefile.in timeclock.el cal-menu.el calendar.texi appt.el sh-script.el Makefile.in timeclock.el cal-menu.el
files.el complete.el configure.in startup.el MACHINES abbrevs.texi files.el complete.el configure.in programs.texi startup.el MACHINES
cal-hebrew.el cal-islam.el emacs.texi fr-refcard.tex holidays.el abbrevs.texi cal-hebrew.el cal-islam.el emacs.texi faq.texi
and 145 other files and 151 other files
Glynn Clements: wrote gamegrid.el snake.el tetris.el Glynn Clements: wrote gamegrid.el snake.el tetris.el
@ -996,8 +998,8 @@ Ivar Rummelhoff: wrote winner.el
Iwamuro Motonori: changed gnus-kill.el Iwamuro Motonori: changed gnus-kill.el
J.D. Smith: changed idlwave.el idlw-shell.el idlw-help.el idlw-rinfo.el J.D. Smith: changed idlwave.el idlw-shell.el idlw-help.el idlw-rinfo.el
idlw-toolbar.el comint.el vc.el bibtex.el files.texi hideshow.el idlw-toolbar.el comint.el idlwave.texi vc.el bibtex.el files.texi
idlw-complete-structtag.el idlwave.texi misc.texi mouse.el hideshow.el idlw-complete-structtag.el misc.texi mouse.el
Jaap-Henk Hoepman: changed mm-decode.el Jaap-Henk Hoepman: changed mm-decode.el
@ -1175,8 +1177,8 @@ Joel Ray Holveck: changed gnus-sum.el info.el
Joev Dubach: changed nntp.el Joev Dubach: changed nntp.el
Johan Bockg,Ae(Brd: changed erc.el erc-backend.el cl-macs.el erc-match.el Johan Bockg,Ae(Brd: changed erc.el erc-backend.el cl-macs.el erc-match.el
erc-nickserv.el erc-ring.el erc-speak.el erc-track.el simple.el custom.el erc-nickserv.el erc-ring.el erc-speak.el erc-track.el
align.el bytecomp.el calendar.el cl.texi custom.el dired-aux.el simple.el align.el bytecomp.el calendar.el cl.texi dired-aux.el
dired-x.el display.texi erc-bbdb.el erc-button.el erc-compat.el dired-x.el display.texi erc-bbdb.el erc-button.el erc-compat.el
erc-dcc.el and 16 other files erc-dcc.el and 16 other files
@ -1281,9 +1283,9 @@ Juan Le,As(Bn Lahoz Garc,Am(Ba: wrote wdired.el
and changed files.el perl-mode.el and changed files.el perl-mode.el
Juanma Barranquero: changed makefile.w32-in subr.el faces.el help-fns.el Juanma Barranquero: changed makefile.w32-in subr.el faces.el help-fns.el
files.el buffer.c simple.el w32fns.c emacsclient.c replace.el files.el simple.el buffer.c w32fns.c emacsclient.c replace.el
vhdl-mode.el bs.el cperl-mode.el eval.c org.el process.c xdisp.c vhdl-mode.el bs.el cperl-mode.el eval.c org.el process.c xdisp.c
idlwave.el sh-script.el window.c ada-mode.el and 628 other files idlwave.el sh-script.el window.c ada-mode.el and 629 other files
Juergen Hoetzel: changed url-handlers.el Juergen Hoetzel: changed url-handlers.el
@ -1328,11 +1330,11 @@ Kailash C. Chowksey: changed HELLO Makefile.in ind-util.el kannada.el
Kanematsu Daiji: changed nnimap.el Kanematsu Daiji: changed nnimap.el
Karl Berry: changed info.texi emacs.texi elisp.texi anti.texi Karl Berry: changed emacs.texi info.texi elisp.texi anti.texi
display.texi emacs-xtra.texi filelock.c gnu.texi mule.texi text.texi display.texi emacs-xtra.texi filelock.c gnu.texi mule.texi texinfo.tex
building.texi cmdargs.texi copyright.el custom.texi customize.texi text.texi building.texi cmdargs.texi control.texi copyright.el
dired.c faq.texi frames.texi help.texi lists.texi loading.texi custom.texi customize.texi dired.c dired.texi faq.texi frames.texi
and 71 other files and 72 other files
Karl Chen: changed files.el align.el cc-vars.el gnus-art.el help-mode.el Karl Chen: changed files.el align.el cc-vars.el gnus-art.el help-mode.el
jka-cmpr-hook.el make-mode.el perl-mode.el python.el tex-mode.el jka-cmpr-hook.el make-mode.el perl-mode.el python.el tex-mode.el
@ -1696,10 +1698,9 @@ Martin Lorentzon: changed vc.el vc-cvs.el vc-hooks.el vc-rcs.el
Martin Neitzel: changed sc.el Martin Neitzel: changed sc.el
Martin Rudalics: changed cus-edit.el wid-edit.el cus-start.el files.el Martin Rudalics: changed cus-edit.el wid-edit.el cus-start.el files.el
flyspell.el font-lock.el complete.el insdel.c macmenu.c syntax.c flyspell.el font-lock.el complete.el insdel.c ispell.el macmenu.c
w32menu.c wdired.el whitespace.el window.el xdisp.c xmenu.c syntax.c w32menu.c wdired.el whitespace.el window.el xdisp.c xmenu.c
backups.texi buffer.c buffer.h casefiddle.c cc-mode.el backups.texi buffer.c buffer.h casefiddle.c and 36 other files
and 36 other files
Martin Stjernholm: wrote cc-bytecomp.el Martin Stjernholm: wrote cc-bytecomp.el
and changed cc-engine.el cc-cmds.el cc-langs.el cc-defs.el cc-mode.el and changed cc-engine.el cc-cmds.el cc-langs.el cc-defs.el cc-mode.el
@ -1838,10 +1839,10 @@ Michal Jankowski: changed insdel.c keyboard.c
Michal Nazarewicz: changed ispell.el Michal Nazarewicz: changed ispell.el
Micha,Ak(Bl Cadilhac: changed ido.el fill.el ispell.el anti.texi battery.el Micha,Ak(Bl Cadilhac: changed ido.el fill.el ispell.el Makefile anti.texi
blackbox.el bs.el cmuscheme.el complete.el cus-edit.el dispnew.c battery.el blackbox.el bs.el cmuscheme.el complete.el cus-edit.el
faq.texi flyspell.el footnote.el glasses.el info.el life.el lpr.el dispnew.c faq.texi flyspell.el footnote.el fr-refcard.ps fr-refcard.tex
make-mode.el misc.texi pong.el and 9 other files glasses.el info.el life.el lpr.el and 12 other files
Michelangelo Grigni: wrote ffap.el Michelangelo Grigni: wrote ffap.el
and changed gnus-score.el and changed gnus-score.el
@ -1941,6 +1942,8 @@ Niimi Satoshi: changed pp.el search.c
Niklas Morberg: changed nnweb.el gnus-art.el nnimap.el spam.el Niklas Morberg: changed nnweb.el gnus-art.el nnimap.el spam.el
Nikolaj Schumacher: changed compile.el
Noah Friedman: wrote eldoc.el rlogin.el rsz-mini.el type-break.el Noah Friedman: wrote eldoc.el rlogin.el rsz-mini.el type-break.el
and changed comint.el emacs-buffer.gdb files.el mailabbrev.el sendmail.el and changed comint.el emacs-buffer.gdb files.el mailabbrev.el sendmail.el
subr.el timer.el yow.el battery.el complete.el config.in configure.in subr.el timer.el yow.el battery.el complete.el config.in configure.in
@ -2062,7 +2065,7 @@ and changed iso-acc.el process.c sysdep.c
Per Cederqvist: wrote ewoc.el Per Cederqvist: wrote ewoc.el
and changed vc.el vc-hooks.el diff-mode.el etags.c etags.el forms.el and changed vc.el vc-hooks.el diff-mode.el etags.c etags.el forms.el
hexl.el hexl.el process.c
Per Persson: wrote gnus-vm.el Per Persson: wrote gnus-vm.el
@ -2399,8 +2402,8 @@ and changed comint.el font-lock.el shell.el rmail.el fortran.el
Skip Collins: changed w32fns.c w32term.c w32term.h Skip Collins: changed w32fns.c w32term.c w32term.h
Slawomir Nowaczyk: changed python.el TUTORIAL.pl flyspell.el ls-lisp.el Slawomir Nowaczyk: changed emacs.py python.el TUTORIAL.pl flyspell.el
w32proc.c ls-lisp.el w32proc.c
Spencer Thomas: changed dabbrev.el emacsclient.c emacsserver.c gnus.texi Spencer Thomas: changed dabbrev.el emacsclient.c emacsserver.c gnus.texi
server.el tcp.c unexec.c server.el tcp.c unexec.c
@ -2414,7 +2417,7 @@ Stefan Monnier: wrote bibtex.el cvs-status.el diff-mode.el log-edit.el
reveal.el smerge-mode.el reveal.el smerge-mode.el
and changed vc.el font-lock.el pcvs.el newcomment.el subr.el lisp.h and changed vc.el font-lock.el pcvs.el newcomment.el subr.el lisp.h
keyboard.c keymap.c tex-mode.el fill.el alloc.c compile.el files.el keyboard.c keymap.c tex-mode.el fill.el alloc.c compile.el files.el
regex.c simple.el easy-mmode.el info.el syntax.c vc-hooks.el xdisp.c regex.c simple.el easy-mmode.el vc-hooks.el info.el syntax.c xdisp.c
sh-script.el and 518 other files sh-script.el and 518 other files
Steinar Bang: changed imap.el Steinar Bang: changed imap.el
@ -2424,7 +2427,7 @@ Stephan Stahl: changed which-func.el buff-menu.el buffer.c dired-x.texi
Stephen A. Wood: changed fortran.el Stephen A. Wood: changed fortran.el
Stephen Berman: changed allout.el recentf.el Stephen Berman: changed allout.el find-dired.el recentf.el
Stephen C. Gilardi: changed configure.in Stephen C. Gilardi: changed configure.in
@ -2460,7 +2463,7 @@ Steve Youngs: changed mh-utils.el mh-xemacs-compat.el dgnushack.el
Steven E. Harris: changed nnheader.el Steven E. Harris: changed nnheader.el
Steven Huwig: changed python.el Steven Huwig: changed emacs.py python.el
Steven L. Baur: wrote earcon.el footnote.el gnus-audio.el gnus-setup.el Steven L. Baur: wrote earcon.el footnote.el gnus-audio.el gnus-setup.el
and changed gnus-xmas.el gnus-msg.el add-log.el dgnushack.el edebug.el and changed gnus-xmas.el gnus-msg.el add-log.el dgnushack.el edebug.el
@ -2680,7 +2683,7 @@ Werner Lemberg: wrote sisheng.el vntelex.el
and changed TUTORIAL.de Makefile.in calc.texi chinese.el czech.el and changed TUTORIAL.de Makefile.in calc.texi chinese.el czech.el
european.el idlwave.el reftex-vars.el reftex.el reftex.texi slovak.el european.el idlwave.el reftex-vars.el reftex.el reftex.texi slovak.el
supercite.el .cvsignore advice.el calc-forms.el calc-sel.el calendar.el supercite.el .cvsignore advice.el calc-forms.el calc-sel.el calendar.el
china-util.el cl-macs.el cl.texi complete.el and 43 other files china-util.el cl-macs.el cl.texi complete.el and 44 other files
Wes Hardaker: changed gnus-score.el gnus-art.el gnus-sum.el gnus-win.el Wes Hardaker: changed gnus-score.el gnus-art.el gnus-sum.el gnus-win.el
@ -2731,11 +2734,13 @@ Yagi Tatsuya: changed gnus-art.el gnus-start.el
Yamamoto Mitsuharu: changed macterm.c macfns.c mac-win.el mac.c macterm.h Yamamoto Mitsuharu: changed macterm.c macfns.c mac-win.el mac.c macterm.h
macmenu.c macgui.h image.c macselect.c keyboard.c xdisp.c makefile.MPW macmenu.c macgui.h image.c macselect.c keyboard.c xdisp.c makefile.MPW
config.h emacs.c Makefile.in macos.texi darwin.h xfaces.c INSTALL config.h emacs.c Makefile.in macos.texi INSTALL darwin.h xfaces.c
dispnew.c alloc.c and 77 other files dispnew.c alloc.c and 77 other files
Yann Dirson: changed imenu.el Yann Dirson: changed imenu.el
Yavor Doganov: changed emacs.1 etags.1
Yoichi Nakayama: changed browse-url.el finder.el man.el rfc2368.el Yoichi Nakayama: changed browse-url.el finder.el man.el rfc2368.el
Yoni Rabkin Katzenell: changed faces.el whitespace.el Yoni Rabkin Katzenell: changed faces.el whitespace.el

View File

@ -1,3 +1,15 @@
2007-05-20 Nick Roberts <nickrob@snap.net.nz>
* configure.in: Use HAVE_GPM instead of HAVE_GPM_H and implement
it like others.
* configure: Regenerate.
2007-05-20 Nick Roberts <nickrob@snap.net.nz>
* configure.in (AC_CHECK_HEADERS) Add gpm.h.
(AC_CHECK_LIB): Add -lgpm.
* configure: Regenerate.
2007-05-03 Glenn Morris <rgm@gnu.org> 2007-05-03 Glenn Morris <rgm@gnu.org>
* configure: Tweak message about the absence of shell functions. * configure: Tweak message about the absence of shell functions.

View File

@ -112,6 +112,12 @@ Miles Bader
Thien-Thi Nguyen Thien-Thi Nguyen
VMS VMS
Juanma Barranquero
lisp/bs.el
lisp/server.el
lib-src/emacsclient.c
lib-src/grep-changelog
============================================================================== ==============================================================================
3. 3.
============================================================================== ==============================================================================
@ -149,13 +155,16 @@ src/filelock.c
src/filemode.c src/filemode.c
src/firstfile.c src/firstfile.c
src/floatfns.c src/floatfns.c
src/fringe.c
src/fns.c src/fns.c
src/fontset.c src/fontset.c
src/getloadavg.c src/getloadavg.c
src/gmalloc.c src/gmalloc.c
src/gtkutil.c
src/hftctl.c src/hftctl.c
src/indent.c src/indent.c
src/insdel.c src/insdel.c
src/image.c
src/lastfile.c src/lastfile.c
src/lread.c src/lread.c
src/m/ src/m/

View File

@ -53,12 +53,7 @@ http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00732.html
** michael.ewe@arcor.de, Apr 24: 22.0.98 not starting on Solaris 10/I386 ** michael.ewe@arcor.de, Apr 24: 22.0.98 not starting on Solaris 10/I386
http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg01113.html http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg01113.html
** Takaaki.Ota@am.sony.com, May 2: table cell menu does not appear at the menubar ** coldwell@redhat.com, May 18: 22.0.99 emacs dumper (?) problem
Bug is intermittent.
** Install python.el `with' patch from trunk.
** Install vc-hooks.el patch from trunk.
* DOCUMENTATION * DOCUMENTATION

View File

@ -427,6 +427,14 @@ http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00257.html
http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg01427.html http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg01427.html
lisp/progmodes/python.el
Dave Love alerted us to a potential legal problem:
http://lists.gnu.org/archive/html/emacs-pretest-bug/2007-04/msg00459.html
On consultation with a lawyer, we found there was no problem:
http://lists.gnu.org/archive/html/emacs-devel/2007-05/msg00466.html
** Issues that are "fixed" for the release of Emacs 22, but we may ** Issues that are "fixed" for the release of Emacs 22, but we may
wish to revisit later in more detail wish to revisit later in more detail
@ -587,8 +595,9 @@ Done: TUTORIAL.eo
*** These are copyright issues still to be addressed: *** These are copyright issues still to be addressed:
python.el potential legal problem None known.
http://lists.gnu.org/archive/html/emacs-pretest-bug/2007-04/msg00459.html
This file is part of GNU Emacs. This file is part of GNU Emacs.

225
configure vendored
View File

@ -412,10 +412,10 @@ else
fi fi
test \$exitcode = 0") || { test \$exitcode = 0") || {
echo Please tell bug-autoconf@gnu.org about your system, echo No shell found that supports shell functions.
echo including any error possibly output before this message. echo Please tell autoconf@gnu.org about your system,
echo This can help us improve future autoconf versions. echo including any error possibly output before this
echo Configuration will now proceed without shell functions. echo message
} }
@ -683,7 +683,6 @@ LIBSOUND
PKG_CONFIG PKG_CONFIG
ALSA_CFLAGS ALSA_CFLAGS
ALSA_LIBS ALSA_LIBS
CFLAGS_SOUND CFLAGS_SOUND
SET_MAKE SET_MAKE
XMKMF XMKMF
@ -1340,6 +1339,7 @@ Optional Packages:
--with-tiff use -ltiff for displaying TIFF images --with-tiff use -ltiff for displaying TIFF images
--with-gif use -lungif for displaying GIF images --with-gif use -lungif for displaying GIF images
--with-png use -lpng for displaying PNG images --with-png use -lpng for displaying PNG images
--with-gpm use -lgpm for mouse support on a GNU/Linux console
--with-gtk use GTK (same as --with-x-toolkit=gtk) --with-gtk use GTK (same as --with-x-toolkit=gtk)
--with-pkg-config-prog Path to pkg-config to use for finding GTK --with-pkg-config-prog Path to pkg-config to use for finding GTK
--without-toolkit-scroll-bars --without-toolkit-scroll-bars
@ -1942,6 +1942,12 @@ if test "${with_png+set}" = set; then
fi fi
# Check whether --with-gpm was given.
if test "${with_gpm+set}" = set; then
withval=$with_gpm;
fi
# Check whether --with-gtk was given. # Check whether --with-gtk was given.
if test "${with_gtk+set}" = set; then if test "${with_gtk+set}" = set; then
withval=$with_gtk; withval=$with_gtk;
@ -6492,7 +6498,6 @@ cat >>confdefs.h <<\_ACEOF
#define HAVE_ALSA 1 #define HAVE_ALSA 1
_ACEOF _ACEOF
fi fi
fi fi
@ -13937,6 +13942,213 @@ _ACEOF
fi fi
fi fi
### Use -lgpm if available, unless `--with-gpm=no'.
HAVE_GPM=no
if test "${with_gpm}" != "no"; then
if test "${ac_cv_header_gpm_h+set}" = set; then
{ echo "$as_me:$LINENO: checking for gpm.h" >&5
echo $ECHO_N "checking for gpm.h... $ECHO_C" >&6; }
if test "${ac_cv_header_gpm_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
{ echo "$as_me:$LINENO: result: $ac_cv_header_gpm_h" >&5
echo "${ECHO_T}$ac_cv_header_gpm_h" >&6; }
else
# Is the header compilable?
{ echo "$as_me:$LINENO: checking gpm.h usability" >&5
echo $ECHO_N "checking gpm.h usability... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
#include <gpm.h>
_ACEOF
rm -f conftest.$ac_objext
if { (ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
ac_header_compiler=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_header_compiler=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
echo "${ECHO_T}$ac_header_compiler" >&6; }
# Is the header present?
{ echo "$as_me:$LINENO: checking gpm.h presence" >&5
echo $ECHO_N "checking gpm.h presence... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <gpm.h>
_ACEOF
if { (ac_try="$ac_cpp conftest.$ac_ext"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } >/dev/null && {
test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
test ! -s conftest.err
}; then
ac_header_preproc=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_header_preproc=no
fi
rm -f conftest.err conftest.$ac_ext
{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
echo "${ECHO_T}$ac_header_preproc" >&6; }
# So? What about this header?
case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
yes:no: )
{ echo "$as_me:$LINENO: WARNING: gpm.h: accepted by the compiler, rejected by the preprocessor!" >&5
echo "$as_me: WARNING: gpm.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
{ echo "$as_me:$LINENO: WARNING: gpm.h: proceeding with the compiler's result" >&5
echo "$as_me: WARNING: gpm.h: proceeding with the compiler's result" >&2;}
ac_header_preproc=yes
;;
no:yes:* )
{ echo "$as_me:$LINENO: WARNING: gpm.h: present but cannot be compiled" >&5
echo "$as_me: WARNING: gpm.h: present but cannot be compiled" >&2;}
{ echo "$as_me:$LINENO: WARNING: gpm.h: check for missing prerequisite headers?" >&5
echo "$as_me: WARNING: gpm.h: check for missing prerequisite headers?" >&2;}
{ echo "$as_me:$LINENO: WARNING: gpm.h: see the Autoconf documentation" >&5
echo "$as_me: WARNING: gpm.h: see the Autoconf documentation" >&2;}
{ echo "$as_me:$LINENO: WARNING: gpm.h: section \"Present But Cannot Be Compiled\"" >&5
echo "$as_me: WARNING: gpm.h: section \"Present But Cannot Be Compiled\"" >&2;}
{ echo "$as_me:$LINENO: WARNING: gpm.h: proceeding with the preprocessor's result" >&5
echo "$as_me: WARNING: gpm.h: proceeding with the preprocessor's result" >&2;}
{ echo "$as_me:$LINENO: WARNING: gpm.h: in the future, the compiler will take precedence" >&5
echo "$as_me: WARNING: gpm.h: in the future, the compiler will take precedence" >&2;}
;;
esac
{ echo "$as_me:$LINENO: checking for gpm.h" >&5
echo $ECHO_N "checking for gpm.h... $ECHO_C" >&6; }
if test "${ac_cv_header_gpm_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_header_gpm_h=$ac_header_preproc
fi
{ echo "$as_me:$LINENO: result: $ac_cv_header_gpm_h" >&5
echo "${ECHO_T}$ac_cv_header_gpm_h" >&6; }
fi
if test $ac_cv_header_gpm_h = yes; then
{ echo "$as_me:$LINENO: checking for Gpm_Open in -lgpm" >&5
echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6; }
if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lgpm $LIBS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char Gpm_Open ();
int
main ()
{
return Gpm_Open ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(eval "$ac_link") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext &&
$as_test_x conftest$ac_exeext; then
ac_cv_lib_gpm_Gpm_Open=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_lib_gpm_Gpm_Open=no
fi
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ echo "$as_me:$LINENO: result: $ac_cv_lib_gpm_Gpm_Open" >&5
echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6; }
if test $ac_cv_lib_gpm_Gpm_Open = yes; then
HAVE_GPM=yes
fi
fi
fi
if test "${HAVE_GPM}" = "yes"; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_GPM 1
_ACEOF
fi
if test "${ac_cv_header_malloc_malloc_h+set}" = set; then if test "${ac_cv_header_malloc_malloc_h+set}" = set; then
{ echo "$as_me:$LINENO: checking for malloc/malloc.h" >&5 { echo "$as_me:$LINENO: checking for malloc/malloc.h" >&5
echo $ECHO_N "checking for malloc/malloc.h... $ECHO_C" >&6; } echo $ECHO_N "checking for malloc/malloc.h... $ECHO_C" >&6; }
@ -23111,6 +23323,7 @@ echo " Does Emacs use -ljpeg? ${HAVE_JPEG}"
echo " Does Emacs use -ltiff? ${HAVE_TIFF}" echo " Does Emacs use -ltiff? ${HAVE_TIFF}"
echo " Does Emacs use -lungif? ${HAVE_GIF}" echo " Does Emacs use -lungif? ${HAVE_GIF}"
echo " Does Emacs use -lpng? ${HAVE_PNG}" echo " Does Emacs use -lpng? ${HAVE_PNG}"
echo " Does Emacs use -lgpm? ${HAVE_GPM}"
echo " Does Emacs use X toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}" echo " Does Emacs use X toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}"
echo echo

View File

@ -113,6 +113,8 @@ AC_ARG_WITH(gif,
[ --with-gif use -lungif for displaying GIF images]) [ --with-gif use -lungif for displaying GIF images])
AC_ARG_WITH(png, AC_ARG_WITH(png,
[ --with-png use -lpng for displaying PNG images]) [ --with-png use -lpng for displaying PNG images])
AC_ARG_WITH(gpm,
[ --with-gpm use -lgpm for mouse support on a GNU/Linux console])
AC_ARG_WITH(gtk, AC_ARG_WITH(gtk,
[ --with-gtk use GTK (same as --with-x-toolkit=gtk)]) [ --with-gtk use GTK (same as --with-x-toolkit=gtk)])
AC_ARG_WITH(pkg-config-prog, AC_ARG_WITH(pkg-config-prog,
@ -1620,7 +1622,6 @@ if test "${with_sound}" != "no"; then
LIBSOUND="$LIBSOUND $ALSA_LIBS" LIBSOUND="$LIBSOUND $ALSA_LIBS"
CFLAGS_SOUND="$CFLAGS_SOUND $ALSA_CFLAGS" CFLAGS_SOUND="$CFLAGS_SOUND $ALSA_CFLAGS"
AC_DEFINE(HAVE_ALSA, 1, [Define to 1 if ALSA is available.]) AC_DEFINE(HAVE_ALSA, 1, [Define to 1 if ALSA is available.])
AC_SUBST()
fi fi
AC_SUBST(CFLAGS_SOUND) AC_SUBST(CFLAGS_SOUND)
fi fi
@ -2507,6 +2508,17 @@ if test "${HAVE_X11}" = "yes"; then
fi fi
fi fi
### Use -lgpm if available, unless `--with-gpm=no'.
HAVE_GPM=no
if test "${with_gpm}" != "no"; then
AC_CHECK_HEADER(gpm.h,
AC_CHECK_LIB(gpm, Gpm_Open, HAVE_GPM=yes))
fi
if test "${HAVE_GPM}" = "yes"; then
AC_DEFINE(HAVE_GPM, 1, [Define to 1 if you have the gpm library (-lgpm).])
fi
dnl Check for malloc/malloc.h on darwin dnl Check for malloc/malloc.h on darwin
AC_CHECK_HEADER(malloc/malloc.h, AC_DEFINE(HAVE_MALLOC_MALLOC_H, 1, [Define to 1 if you have the <malloc/malloc.h> header file.])) AC_CHECK_HEADER(malloc/malloc.h, AC_DEFINE(HAVE_MALLOC_MALLOC_H, 1, [Define to 1 if you have the <malloc/malloc.h> header file.]))
@ -3267,6 +3279,7 @@ echo " Does Emacs use -ljpeg? ${HAVE_JPEG}"
echo " Does Emacs use -ltiff? ${HAVE_TIFF}" echo " Does Emacs use -ltiff? ${HAVE_TIFF}"
echo " Does Emacs use -lungif? ${HAVE_GIF}" echo " Does Emacs use -lungif? ${HAVE_GIF}"
echo " Does Emacs use -lpng? ${HAVE_PNG}" echo " Does Emacs use -lpng? ${HAVE_PNG}"
echo " Does Emacs use -lgpm? ${HAVE_GPM}"
echo " Does Emacs use X toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}" echo " Does Emacs use X toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}"
echo echo

View File

@ -1,3 +1,31 @@
2007-05-19 Glenn Morris <rgm@gnu.org>
* images/cancel.pbm: Convert from PGM to PBM.
* images/copy.pbm, images/next-node.pbm, images/prev-node.pbm:
* images/save.pbm, images/up-node.pbm: Convert from PPM to PBM.
2007-05-17 Glenn Morris <rgm@gnu.org>
* PROBLEMS (Dumping): Mention OpenBSD macppc problem.
2007-05-15 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
* fr-refcard.tex: Rewrite using German layout.
* fr-refcard.ps: Regenerate.
2007-05-12 Richard Stallman <rms@gnu.org>
* refcard.tex (section{Incremental Search}): Minor corrections.
2007-05-12 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
* Makefile (viperCard.ps, calccard.ps refcard.ps)
(sk-dired-ref.ps sk-refcard.ps sk-survival.ps)
(de-refcard.ps fr-refcard.ps pt-br-refcard.ps orgcard.ps): Use an
explicit output argument for `dvips'.
2007-05-05 Glenn Morris <rgm@gnu.org> 2007-05-05 Glenn Morris <rgm@gnu.org>
* NEWS: Re-order. * NEWS: Re-order.

View File

@ -64,10 +64,10 @@ use the set command until the inferior process has been started.
Put a breakpoint early in `main', or suspend the Emacs, Put a breakpoint early in `main', or suspend the Emacs,
to get an opportunity to do the set command. to get an opportunity to do the set command.
When Emacs is running in a terminal, it is useful to use a separate terminal When Emacs is running in a terminal, it is sometimes useful to use a separate
for the debug session. This can be done by starting Emacs as usual, then terminal for the debug session. This can be done by starting Emacs as usual,
attaching to it from gdb with the `attach' command which is explained in the then attaching to it from gdb with the `attach' command which is explained in
node "Attach" of the GDB manual. the node "Attach" of the GDB manual.
** Examining Lisp object values. ** Examining Lisp object values.

View File

@ -75,22 +75,22 @@ gnus-booklet.dvi: gnus-refcard.tex
## A4, landscape. ## A4, landscape.
de-refcard.ps fr-refcard.ps pt-br-refcard.ps orgcard.ps: %.ps: %.dvi de-refcard.ps fr-refcard.ps pt-br-refcard.ps orgcard.ps: %.ps: %.dvi
dvips -t a4 -t landscape $< dvips -t a4 -t landscape $< -o $@
## A4, portrait. ## A4, portrait.
cs-dired-ref.ps cs-refcard.ps cs-survival.ps fr-drdref.ps \ cs-dired-ref.ps cs-refcard.ps cs-survival.ps fr-drdref.ps \
pl-refcard.ps ru-refcard.ps \ pl-refcard.ps ru-refcard.ps \
sk-dired-ref.ps sk-refcard.ps sk-survival.ps: %.ps: %.dvi sk-dired-ref.ps sk-refcard.ps sk-survival.ps: %.ps: %.dvi
dvips -t a4 $< dvips -t a4 $< -o $@
## letter, landscape. ## letter, landscape.
calccard.ps refcard.ps: %.ps: %.dvi calccard.ps refcard.ps: %.ps: %.dvi
dvips -t letter -t landscape $< dvips -t letter -t landscape $< -o $@
## letter, portrait. ## letter, portrait.
dired-ref.ps gnus-booklet.ps gnus-refcard.ps survival.ps vipcard.ps \ dired-ref.ps gnus-booklet.ps gnus-refcard.ps survival.ps vipcard.ps \
viperCard.ps: %.ps: %.dvi viperCard.ps: %.ps: %.dvi
dvips -t letter $< dvips -t letter $< -o $@
.PHONY: mostlyclean clean distclean maintainer-clean unlock relock .PHONY: mostlyclean clean distclean maintainer-clean unlock relock

View File

@ -357,7 +357,7 @@ in the value, use `$$'.
** The default values of paragraph-start and indent-line-function have ** The default values of paragraph-start and indent-line-function have
been changed to reflect those used in Text mode rather than those used been changed to reflect those used in Text mode rather than those used
in Indented-Text mode. in Paragraph-Indent Text mode.
** The default for the paper size (variable ps-paper-type) is taken ** The default for the paper size (variable ps-paper-type) is taken
from the locale. from the locale.
@ -5013,9 +5013,9 @@ of multiline constructs so that such constructs get properly recognized.
*** New variable `magic-mode-alist' determines major mode for a file by *** New variable `magic-mode-alist' determines major mode for a file by
looking at the file contents. It takes precedence over `auto-mode-alist'. looking at the file contents. It takes precedence over `auto-mode-alist'.
*** New variable `file-start-mode-alist' determines major mode for a file by *** New variable `magic-fallback-mode-alist' determines major mode for a file by
looking at the file contents. It is handled after `auto-mode-alist', looking at the file contents. It is handled after `auto-mode-alist',
only if `auto-mode-alist' says nothing about the file. only if `auto-mode-alist' (and `magic-mode-alist') says nothing about the file.
*** XML or SGML major mode is selected when file starts with an `<?xml' *** XML or SGML major mode is selected when file starts with an `<?xml'
or `<!DOCTYPE' declaration. or `<!DOCTYPE' declaration.

View File

@ -2772,6 +2772,15 @@ Remove the "#if 0" and "#endif" directives which surround this, save
the file, and then reconfigure and rebuild Emacs. The dumping process the file, and then reconfigure and rebuild Emacs. The dumping process
should now succeed. should now succeed.
*** OpenBSD 4.0 macppc: Segfault during dumping.
The build aborts with signal 11 when the command `./temacs --batch
--load loadup bootstrap' tries to load files.el. A workaround seems
to be to reduce the level of compiler optimization used during the
build (from -O2 to -O1). It is possible this is an OpenBSD
GCC problem specific to the macppc architecture, possibly only
occurring with older versions of GCC (e.g. 3.3.5).
** Installation ** Installation
*** Installing Emacs gets an error running `install-info'. *** Installing Emacs gets an error running `install-info'.

File diff suppressed because it is too large Load Diff

View File

@ -66,7 +66,7 @@
\def\versionnumber{2.3} \def\versionnumber{2.3}
\def\versionemacs{22} \def\versionemacs{22}
\def\versionyear{2006} % latest update \def\versionyear{2007} % latest update
\def\year{2007} % latest copyright year \def\year{2007} % latest copyright year
\def\shortcopyrightnotice{\vskip 1ex plus 2 fill \def\shortcopyrightnotice{\vskip 1ex plus 2 fill
@ -79,14 +79,16 @@
\centerline{v\versionnumber{} pour GNU Emacs version \versionemacs, \centerline{v\versionnumber{} pour GNU Emacs version \versionemacs,
\versionyear} \versionyear}
\centerline{conception de Stephen Gildea} \centerline{conception de Stephen Gildea}
\centerline{traduction fran\c{c}aise d'\'Eric Jacoboni} \centerline{traduction fran\c{c}aise de Micha\"el Cadilhac}
% previously: Eric Jacoboni
Vous pouvez faire et distribuer des copies de cette carte, pourvu que Vous pouvez faire et distribuer des copies de cette carte, pourvu que
la note de copyright et cette note de permission soient conserv\'ees sur la note de copyright et cette note de permission soient conserv\'ees sur
toutes les copies. toutes les copies.
Pour les copies du manuel GNU Emacs, \'ecrivez \`a la Free Software Pour des copies du manuel GNU Emacs, \'ecrivez \`a la Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
\endgroup} \endgroup}
@ -121,13 +123,10 @@
\else %2 or 3 columns uses prereduced size \else %2 or 3 columns uses prereduced size
\hsize 3.2in \hsize 3.2in
\vsize 7.95in \vsize 7.95in
\if 1\the\letterpaper % \hoffset -.75in
\vsize 7.95in \hoffset -.49in
\else % \voffset -.745in
\vsize 7.65in \voffset -.84in
\fi
\hoffset -.75in
\voffset -.745in
\font\titlefont=cmbx10 \scaledmag2 \font\titlefont=cmbx10 \scaledmag2
\font\headingfont=cmbx10 \scaledmag1 \font\headingfont=cmbx10 \scaledmag1
\font\smallfont=cmr6 \font\smallfont=cmr6
@ -146,11 +145,6 @@
\def\it{\eightit} \def\it{\eightit}
\def\tt{\eighttt} \def\tt{\eighttt}
\normalbaselineskip=.8\normalbaselineskip \normalbaselineskip=.8\normalbaselineskip
\if 1\the\letterpaper
\normalbaselineskip=.8\normalbaselineskip
\else
\normalbaselineskip=.7\normalbaselineskip
\fi
\normallineskip=.8\normallineskip \normallineskip=.8\normallineskip
\normallineskiplimit=.8\normallineskiplimit \normallineskiplimit=.8\normallineskiplimit
\normalbaselines\rm %make definitions take effect \normalbaselines\rm %make definitions take effect
@ -200,7 +194,7 @@
\chardef\{=`\{ \chardef\{=`\{
\chardef\}=`\} \chardef\}=`\}
\hyphenation{mini-buf-fer} \hyphenation{mini-tam-pon}
\parindent 0pt \parindent 0pt
\parskip 1ex plus .5ex minus .5ex \parskip 1ex plus .5ex minus .5ex
@ -216,8 +210,8 @@
% section - new major section. Argument is section name. % section - new major section. Argument is section name.
\outer\def\section#1{\par\filbreak \outer\def\section#1{\par\filbreak
\vskip 2ex plus 2ex minus 2ex {\headingfont #1}\mark{#1}% \vskip 2ex plus 1.5ex minus 2.5ex {\headingfont #1}\mark{#1}%
\vskip 1ex plus 1ex minus 1.5ex} \vskip 1.5ex plus 1ex minus 1.5ex}
\newdimen\keyindent \newdimen\keyindent
@ -250,10 +244,9 @@
% \key{description of key}{key-name} % \key{description of key}{key-name}
% prints the description left-justified, and the key-name in a \kbd % prints the description left-justified, and the key-name in a \kbd
% form near the right margin. % form near the right margin.
\def\key#1#2{\leavevmode\hbox to \hsize{\vbox \def\key#1#2{\leavevmode\hbox to \hsize{\vtop
{\hsize=.75\hsize\rightskip=1em \tolerance=20000 {\hsize=.75\hsize\rightskip=1em
\raggedright \hskip\keyindent\relax#1}\kbd{#2}\hfil}}
\hskip\keyindent\hangindent=1em\strut#1\strut}\kbd{\quad#2}\hss}}
\newbox\metaxbox \newbox\metaxbox
\setbox\metaxbox\hbox{\kbd{M-x }} \setbox\metaxbox\hbox{\kbd{M-x }}
@ -265,12 +258,10 @@
% Tries to justify the beginning of the command name at the same place % Tries to justify the beginning of the command name at the same place
% as \key starts the key name. (The "M-x " sticks out to the left.) % as \key starts the key name. (The "M-x " sticks out to the left.)
% Note: was \hsize=.74, but changed to avoid overflow in some places. % Note: was \hsize=.74, but changed to avoid overflow in some places.
\def\metax#1#2{\leavevmode\hbox to \hsize{\vbox \def\metax#1#2{\leavevmode\hbox to \hsize{\hbox to .75\hsize
{\hsize=.66\hsize\rightskip=1em {\hskip\keyindent\relax#1\hfil}%
\raggedright \tolerance=20000 \hskip -\metaxwidth minus 1fil
\hskip\keyindent\hangindent=1em\strut#1\strut\par}% \kbd{#2}\hfil}}
%\hskip-\metaxwidth minus 1fil
\kbd{#2}\hss}}
% threecol - like "key" but with two key names. % threecol - like "key" but with two key names.
% for example, one for doing the action backward, and one for forward. % for example, one for doing the action backward, and one for forward.
@ -284,395 +275,378 @@
\centerline{(pour la version \versionemacs)} \centerline{(pour la version \versionemacs)}
\section{Lancement d'Emacs} \section{Lancer Emacs}
Pour lancer GNU Emacs \versionemacs, il suffit de taper son nom : \kbd{emacs} Pour lancer GNU Emacs \versionemacs, tapez juste son nom : \kbd{emacs}.
Pour charger un fichier \`a \'editer, voir Fichiers, ci-dessous.
\section{Quitter Emacs} \section{Quitter Emacs}
\key{suspend Emacs (ou l'iconifie sous X)}{C-z} \key{Suspendre Emacs (ou l'iconifier sous X)}{C-z}
\key{quitter d\'efinitivement Emacs}{C-x C-c} \key{Quitter d\'efinitivement Emacs}{C-x C-c}
\section{Fichiers} \section{Fichiers}
\key{{\bf lire} un fichier dans Emacs}{C-x C-f} \key{{\bf Lire} un fichier}{C-x C-f}
\key{{\bf sauvegarder} un fichier sur disque}{C-x C-s} \key{{\bf Sauvegarder} un fichier}{C-x C-s}
\key{sauvegarder {\bf tous} les fichiers}{C-x s} \key{Sauvegarder {\bf tous} les fichiers}{C-x s}
\key{{\bf ins\'erer} le contenu d'un autre fichier dans ce tampon}{C-x i} \key{{\bf Ins\'erer} un fichier sous le point (curseur)}{C-x i}
\key{remplacer ce fichier par le fichier voulu}{C-x C-v} \key{Remplacer le fichier par un autre fichier}{C-x C-v}
\key{\'ecrire le tampon dans un fichier donn\'e}{C-x C-w} \key{Sauvegarder sous un autre nom de fichier}{C-x C-w}
\key{bascule du mode lecture-seule du tampon}{C-x C-q} \key{Basculer en mode lecture seule}{C-x C-q}
\section{Obtenir de l'aide} \section{Obtenir de l'aide}
Le syst\`eme d'aide est simple. Faites \kbd{C-h} (ou \kbd{F1}) et suivez Le syst\`eme d'aide est simple. Faites \kbd{C-h} (ou \kbd{F1}) et
les instructions. Si vous d\'ebutez, faites \kbd{C-h t} pour suivre un suivez les instructions. Si vous d\'ebutez, faites \kbd{C-h t} pour un
{\bf didacticiel}. {\bf didacticiel}.
\key{supprimer la fen\^etre d'aide}{C-x 1} \key{Supprimer la fen\^etre d'aide}{C-x 1}
\key{faire d\'efiler la fen\^etre d'aide}{C-M-v} \key{Faire d\'efiler la fen\^etre d'aide}{C-M-v}
\key{apropos : montrer les commandes contenant une certaine cha\^\i{}ne}{C-h a} \key{Rechercher des commandes selon une cha\^\i{}ne}{C-h a}
\key{d\'ecrire la fonction lanc\'ee par une touche}{C-h k} \key{D\'ecrire la fonction associ\'ee \`a une touche}{C-h k}
\key{d\'ecrire une fonction}{C-h f} \key{D\'ecrire une fonction}{C-h f}
\key{obtenir des informations sp\'ecifiques au mode}{C-h m} \key{Obtenir des informations relatives au mode}{C-h m}
\section{R\'ecup\'eration des erreurs} \section{R\'ecup\'eration sur erreurs}
\key{{\bf avorter} une commande partiellement tap\'ee ou ex\'ecut\'ee}{C-g} \key{{\bf Abandonner} une commande}{C-g}
\metax{{\bf r\'ecup\'erer} les fichier perdus par un crash du syst\`eme}{M-x recover-session} \metax{{\bf R\'ecup\'erer} les fichiers apr\`es un crash}{M-x recover-session}
\metax{{\bf annuler} une modification non souhait\'ee}{C-x u, C-_ {\rm ou} C-/} \metax{{\bf Annuler} une modification}{C-x u, C-_ {\rm ou} C-/}
\metax{restaurer un tampon avec son contenu initial}{M-x revert-buffer} \metax{Annuler toutes les modifications}{M-x revert-buffer}
\key{r\'eafficher un \'ecran perturb\'e}{C-l} \key{R\'eafficher un \'ecran perturb\'e}{C-l}
\shortcopyrightnotice
\section{Recherche incr\'ementale} \section{Recherche incr\'ementale}
\key{rechercher vers l'avant}{C-s} \key{Rechercher en avant}{C-s}
\key{rechercher vers l'arri\`ere}{C-r} \key{Rechercher en arri\`ere}{C-r}
\key{rechercher vers l'avant par expression rationnelle}{C-M-s} \key{Rechercher en avant (expression rationnelle)}{C-M-s}
\key{rechercher vers l'arri\`ere par expression rationnelle}{C-M-r} \key{Rechercher en arri\`ere (expression rationnelle)}{C-M-r}
\key{s\'electionner la cha\^\i{}ne de recherche pr\'ec\'edente}{M-p} \key{Utiliser la cha\^\i{}ne de recherche pr\'ec\'edente}{M-p}
\key{s\'electionner la cha\^\i{}ne de recherche suivante}{M-n} \key{Utiliser la cha\^\i{}ne de recherche suivante}{M-n}
\key{sortir de la recherche incr\'ementale}{RET} \key{Quitter la recherche incr\'ementale}{RET}
\key{annuler l'effet du dernier caract\`ere}{DEL} \key{Annuler l'effet du dernier caract\`ere}{DEL}
\key{annuler la recherche en cours}{C-g} \key{Annuler la recherche en cours}{C-g}
Refaites \kbd{C-s} ou \kbd{C-r} pour r\'ep\'eter la recherche dans une Refaites \kbd{C-s} ou \kbd{C-r} pour r\'ep\'eter la recherche dans une
direction quelconque. des directions.
Si Emacs est encore en train de chercher, \kbd{C-g} n'annule que ce En cours de recherche, \kbd{C-g} efface les derniers caract\`eres et
qui n'a pas \'et\'e fait. ne conserve que le pr\'efixe d\'ej\`a trouv\'e.
\shortcopyrightnotice
\section{D\'eplacements} \section{D\'eplacements}
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
\threecol{{\bf entit\'e sur laquelle se d\'eplacer}}{{\bf en arri\`ere}}{{\bf en avant}} \threecol{{\bf Objet sur lequel se d\'eplacer}}{{\bf En
\threecol{caract\`ere}{C-b}{C-f} arri\`ere}}{{\bf En avant}}
\threecol{mot}{M-b}{M-f} \threecol{Caract\`ere}{C-b}{C-f}
\threecol{ligne}{C-p}{C-n} \threecol{Mot}{M-b}{M-f}
\threecol{aller au d\'ebut (ou \`a la fin) de la ligne}{C-a}{C-e} \threecol{Ligne}{C-p}{C-n}
\threecol{phrase}{M-a}{M-e} \threecol{Aller en d\'ebut/fin de la ligne}{C-a}{C-e}
\threecol{paragraphe}{M-\{}{M-\}} \threecol{Phrase}{M-a}{M-e}
\threecol{page}{C-x [}{C-x ]} \threecol{Paragraphe}{M-\{}{M-\}}
\threecol{s-expression}{C-M-b}{C-M-f} \threecol{Page}{C-x [}{C-x ]}
\threecol{fonction}{C-M-a}{C-M-e} \threecol{S-expression}{C-M-b}{C-M-f}
\threecol{aller au d\'ebut (ou \`a la fin) du tampon}{M-<}{M->} \threecol{Fonction}{C-M-a}{C-M-e}
\threecol{Aller en d\'ebut/fin du tampon}{M-<}{M->}
} }
\key{passer \`a l'\'ecran suivant}{C-v} \key{Passer \`a l'\'ecran suivant}{C-v}
\key{passer \`a l'\'ecran pr\'ec\'edent}{M-v} \key{Passer \`a l'\'ecran pr\'ec\'edent}{M-v}
\key{d\'efiler l'\'ecran vers la droite}{C-x <} \key{Faire d\'efiler l'\'ecran vers la gauche}{C-x <}
\key{d\'efiler l'\'ecran vers la gauche}{C-x >} \key{Faire d\'efiler l'\'ecran vers la droite}{C-x >}
\key{placer la ligne courante au centre de l'\'ecran}{C-u C-l} \key{Placer la ligne courante au centre de l'\'ecran}{C-u C-l}
\section{D\'etruire et supprimer} \section{D\'etruire et supprimer}
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
\threecol{{\bf entit\'e \`a supprimer}}{{\bf en arri\`ere}}{{\bf en avant}} \threecol{{\bf Objet \`a supprimer}}{{\bf En arri\`ere}}{{\bf En avant}}
\threecol{caract\`ere (suppression, pas destruction)}{DEL}{C-d} \threecol{Caract\`ere (suppression)}{DEL}{C-d}
\threecol{mot}{M-DEL}{M-d} \threecol{Mot}{M-DEL}{M-d}
\threecol{ligne (jusqu'\`a la fin)}{M-0 C-k}{C-k} \threecol{Ligne (jusqu'au d\'ebut/fin)}{M-0 C-k}{C-k}
\threecol{phrase}{C-x DEL}{M-k} \threecol{Phrase}{C-x DEL}{M-k}
\threecol{s-expression}{M-- C-M-k}{C-M-k} \threecol{S-expression}{M-- C-M-k}{C-M-k}
} }
\key{d\'etruire une {\bf r\'egion}}{C-w} \key{D\'etruire une {\bf r\'egion}}{C-w}
\key{copier une r\'egion dans le kill ring}{M-w} \key{Copier une r\'egion dans le {\it kill ring}}{M-w}
\key{d\'etruire jusqu'\`a l'occurrence suivante de {\it car}}{M-z {\it car}} \key{D\'etruire jusqu'\`a l'occurrence suivante de {\it car}}{M-z {\it car}}
\key{r\'ecup\'erer la derni\`ere chose d\'etruite}{C-y} \key{R\'ecup\'erer la derni\`ere r\'egion d\'etruite}{C-y}
\key{remplacer la derni\`ere r\'ecup\'eration par ce qui a \'et\'e d\'etruit avant}{M-y} \key{R\'ecup\'erer la r\'egion d\'etruite pr\'ec\'edente}{M-y}
\section{Marquer} \section{Marquer}
\key{placer la marque ici}{C-@ {\rm ou} C-SPC} \key{Placer la marque au point}{C-@ {\rm ou} C-SPC}
\key{\'echanger le point et la marque}{C-x C-x} \key{\'Echanger le point et la marque}{C-x C-x}
\key{placer la marque {\it arg\/} {\bf mots} plus loin}{M-@} \key{Placer la marque un {\bf mot} plus loin}{M-@}
\key{marquer le {\bf paragraphe}}{M-h} \key{Marquer le {\bf paragraphe}}{M-h}
\key{marquer la {\bf page}}{C-x C-p} \key{Marquer la {\bf page}}{C-x C-p}
\key{marquer la {\bf s-expression}}{C-M-@} \key{Marquer la {\bf s-expression}}{C-M-@}
\key{marquer la {\bf fonction}}{C-M-h} \key{Marquer la {\bf fonction}}{C-M-h}
\key{marquer tout le {\bf tampon}}{C-x h} \key{Marquer tout le {\bf tampon}}{C-x h}
\section{Remplacement interactif} \section{Remplacement interactif}
\key{remplacer interactivement une cha\^\i{}ne de texte}{M-\%} \key{Remplacer une cha\^\i{}ne de texte}{M-\%}
% query-replace-regexp est liee a C-M-% mais on ne peut pas le % query-replace-regexp est liee a C-M-% mais on ne peut pas le
% taper dans une console. % taper dans une console.
% Hack to prevent overflow. Please someone fix this properly. \metax{\hskip 10pt \`a l'aide d'expr. rationnelles}{M-x query-replace-regexp}
\metax{en utilisant les expressions \hskip 20pt rationnelles}
{\hskip -30pt M-x query-replace-regexp}
Les r\'eponses admises dans le mode de remplacement interactif sont : R\'eponses possibles pour chaque occurrence dans le mode de
remplacement interactif :
\key{{\bf remplacer} celle-l\`a, passer \`a la suivante}{SPC} \key{{\bf Remplacer} celle-l\`a, passer \`a la suivante}{SPC}
\key{remplacer celle-l\`a, rester l\`a}{,} \key{Remplacer celle-l\`a, rester l\`a}{,}
\key{{\bf passer} \`a la suivante sans remplacer}{DEL} \key{{\bf Passer} \`a la suivante sans remplacer}{DEL}
\key{remplacer toutes les correspondances suivantes}{!} \key{Remplacer toutes les occurrences suivantes}{!}
\key{{\bf revenir} \`a la correspondance pr\'ec\'edente}{^} \key{{\bf Revenir} \`a l'occurrence pr\'ec\'edente}{^}
\key{{\bf sortir} du remplacement interactif}{RET} \key{{\bf Quitter} le remplacement interactif}{RET}
\key{entrer dans l'\'edition r\'ecursive (\kbd{C-M-c} pour sortir)}{C-r} \key{{\bf \'Editer} avant de reprendre (\kbd{C-M-c} : sortir)}{C-r}
\section{Fen\^etres multiples} \section{Fen\^etres multiples}
Lorsqu'il y a deux commandes, la seconde est une commande identique \`a Lorsqu'il y a deux commandes, la seconde est celle qui concerne non
la premi\`ere pour un cadre au lieu d'une fen\^etre. pas les fen\^etres mais les cadres.
{\setbox0=\hbox{\kbd{0}}\advance\hsize by 0\wd0 {\setbox0=\hbox{\kbd{0}}\advance\hsize by 0\wd0
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
\threecol{supprimer toutes les autres fen\^etres}{C-x 1\ \ \ \ }{C-x 5 1} \threecol{Supprimer toutes les autres fen\^etres}{C-x 1\ \ \ \ }{C-x 5 1}
\threecol{diviser la fen\^etre horizontalement}{C-x 2\ \ \ \ }{C-x 5 2} \threecol{Supprimer cette fen\^etre}{C-x 0\ \ \ \ }{C-x 5 0}
\threecol{supprimer cette fen\^etre}{C-x 0\ \ \ \ }{C-x 5 0} \threecol{Diviser la fen\^etre horizontalement}{C-x 2\ \ \ \ }{C-x 5 2}
}} }}
\key{diviser la fen\^etre verticalement}{C-x 3} \key{Diviser la fen\^etre verticalement}{C-x 3}
\key{faire d\'efiler l'autre fen\^etre}{C-M-v} \key{Faire d\'efiler l'autre fen\^etre}{C-M-v}
%% tabskip reduced from 10 to 3pt to fit on letterpaper. %% tabskip reduced from 10 to 3pt to fit on letterpaper.
{\setbox0=\hbox{\kbd{0}}\advance\hsize by 2\wd0 {\setbox0=\hbox{\kbd{0}}\advance\hsize by 2\wd0
\paralign to \hsize{#\tabskip=3pt plus 1 fil&#\tabskip=0pt&#\cr \paralign to \hsize{#\tabskip=3pt plus 1 fil&#\tabskip=0pt&#\cr
\threecol{placer le curseur dans une autre fen\^etre}{C-x o}{C-x 5 o} \threecol{S\'electionner une autre fen\^etre}{C-x o}{C-x 5 o}
%% Hack in a line break to avoid overflow. \threecol{Choisir un tampon (autre fen\^etre)}{C-x 4 b}{C-x 5 b}
\threecol{\raggedright s\'electionner le tampon dans\cr \threecol{Afficher un tampon (autre fen\^etre)}{C-x 4 C-o}{C-x 5 C-o}
\hskip 10pt l'autre fen\^etre}{C-x 4 b}{C-x 5 b} \threecol{Lire un fichier (autre fen\^etre)}{C-x 4 f}{C-x 5 f}
\threecol{afficher le tampon dans l'autre fen\^etre}{C-x 4 C-o}{C-x 5 C-o} \threecol{\hskip 10pt en lecture seule}{C-x 4 r}{C-x 5 r}
\threecol{charger un fichier dans l'autre fen\^etre}{C-x 4 f}{C-x 5 f} \threecol{Lancer Dired (autre fen\^etre)}{C-x 4 d}{C-x 5 d}
%% Hack in a line break to avoid overflow. \threecol{Trouver un tag (autre fen\^etre)}{C-x 4 .}{C-x 5 .}
\threecol{\raggedright charger un fichier en lecture seule\cr
\hskip 10pt dans l'autre fen\^etre}{C-x 4 r}{C-x 5 r}
\threecol{lancer Dired dans l'autre fen\^etre}{C-x 4 d}{C-x 5 d}
\threecol{trouver un tag dans l'autre fen\^etre}{C-x 4 .}{C-x 5 .}
}} }}
\key{agrandir la fen\^etre}{C-x ^} \key{Agrandir la fen\^etre verticalement}{C-x ^}
\key{rapetisser la fen\^etre}{C-x \{} \key{R\'eduire la fen\^etre horizontalement}{C-x \{}
\key{\'elargir la fen\^etre}{C-x \}} \key{Agrandir la fen\^etre horizontalement}{C-x \}}
\section{Formater} \section{Formater}
\key{indenter la {\bf ligne} courante (d\'epend du mode)}{TAB} \key{Indenter la {\bf ligne} courante (selon le mode)}{TAB}
\key{indenter la {\bf r\'egion} courante (d\'epend du mode)}{C-M-\\} \key{Indenter la {\bf r\'egion} courante (selon le mode)}{C-M-\\}
\key{indenter la {\bf s-expression} courante (d\'epend du mode)}{C-M-q} \key{Indenter la {\bf s-expr.} courante (selon le mode)}{C-M-q}
\key{indenter la r\'egion sur {\it arg\/} colonnes}{C-x TAB} \key{Indenter la r\'egion sur une colonne}{C-x TAB}
\key{Ins\'erer un retour \`a la ligne apr\`es le point}{C-o}
\key{D\'eplacer le reste de la ligne vers le bas}{C-M-o}
\key{Supprimer les lignes vierges autour du point}{C-x C-o}
\key{Joindre \`a la ligne pr\'ec\'edente (suiv. avec {\it arg\/})}{M-^}
\key{Supprimer tous les espaces autour du point}{M-\\}
\key{Mettre exactement une espace au point}{M-SPC}
\key{ins\'erer un newline apr\`es le point}{C-o} \key{Formater le paragraphe}{M-q}
\key{d\'eplacer le reste de la ligne vers le bas}{C-M-o} \key{Placer la marge droite \`a {\it arg\/} colonnes}{C-u {\it arg\/} C-x f}
\key{supprimer les lignes blanches autour du point}{C-x C-o} \key{D\'efinir le pr\'efixe des lignes}{C-x .}
\key{joindre la ligne \`a la pr\'ec\'edente (\`a la suivante avec arg)}{M-^}
\key{supprimer tous les espaces autour du point}{M-\\}
\key{mettre exactement un espace \`a l'emplacement du point}{M-SPC}
\key{remplir le paragraphe}{M-q} \key{D\'efinir la fonte}{M-o}
\key{placer la marge droite}{C-x f}
\key{d\'efinir le pr\'efixe par lequel commencera chaque ligne}{C-x .}
\key{d\'efinir la fonte}{M-o}
\section{Modifier la casse} \section{Modifier la casse}
\key{mettre le mot en majuscules}{M-u} \key{Mettre le mot en capitales}{M-u}
\key{mettre le mot en minuscules}{M-l} \key{Mettre le mot en minuscules}{M-l}
\key{mettre le mot en capitales}{M-c} \key{Mettre une majuscule au mot}{M-c}
\key{mettre la r\'egion en majuscules}{C-x C-u} \key{Mettre la r\'egion en capitales}{C-x C-u}
\key{mettre la r\'egion en minuscules}{C-x C-l} \key{Mettre la r\'egion en minuscules}{C-x C-l}
\section{Le mini-tampon} \section{Le mini-tampon}
Les touches suivantes sont utilisables dans le mini-tampon : Dans le mini-tampon :
\key{compl\'eter autant que possible}{TAB} \key{Compl\'eter autant que possible}{TAB}
\key{compl\'eter un mot}{SPC} \key{Compl\'eter un mot}{SPC}
\key{compl\'eter et ex\'ecuter}{RET} \key{Compl\'eter et ex\'ecuter}{RET}
\key{montrer les compl\'etions possibles}{?} \key{Montrer les compl\`etements possibles}{?}
\key{rechercher l'entr\'ee pr\'ec\'edente du mini-tampon}{M-p} \key{Utiliser l'entr\'ee pr\'ec\'edente du mini-tampon}{M-p}
\key{rechercher l'entr\'ee suivante du mini-tampon ou le d\'efaut}{M-n} \key{Utiliser l'entr\'ee suivante du mini-tampon}{M-n}
\key{rechercher \`a rebours par expr. rationnelle dans l'historique}{M-r} \key{Rechercher en arri\`ere dans l'historique}{M-r}
\key{rechercher vers l'avant par expr. rationnelle dans l'historique}{M-s} \key{Rechercher en avant dans l'historique}{M-s}
\key{annuler la commande}{C-g} \key{Quitter en annulant la commande}{C-g}
Faites \kbd{C-x ESC ESC} pour \'editer et r\'ep\'eter la derni\`ere commande Faites \kbd{C-x ESC ESC} pour \'editer et r\'ep\'eter la derni\`ere
ayant utilis\'e le minitampon. Faites \kbd{F10} pour activer la barre de commande ayant utilis\'e le mini-tampon. Faites \kbd{F10} pour
menu utilisant le minitampon. utiliser la barre de menu sur un terminal en utilisant le mini-tampon.
\newcolumn \newcolumn
\title{Carte de r\'ef\'erence de GNU Emacs} \title{Carte de r\'ef\'erence de GNU Emacs}
\section{Tampons} \section{Tampons}
\key{s\'electionner un autre tampon}{C-x b} \key{Choisir un autre tampon}{C-x b}
\key{\'enum\'erer tous les tampons}{C-x C-b} \key{Lister tous les tampons}{C-x C-b}
\key{supprimer un tampon}{C-x k} \key{Supprimer un tampon}{C-x k}
\section{Transposer} \section{Transposer}
\key{transposer des {\bf caract\`eres}}{C-t} \key{Transposer des {\bf caract\`eres}}{C-t}
\key{transposer des {\bf mots}}{M-t} \key{Transposer des {\bf mots}}{M-t}
\key{transposer des {\bf lignes}}{C-x C-t} \key{Transposer des {\bf lignes}}{C-x C-t}
\key{transposer des {\bf s-expressions}}{C-M-t} \key{Transposer des {\bf s-expressions}}{C-M-t}
\section{V\'erifier l'orthographe} \section{V\'erifier l'orthographe}
\key{v\'erifier l'orthographe du mot courant}{M-\$} \key{V\'erifier l'orthographe du mot courant}{M-\$}
\metax{v\'erifier l'orthographe de tous les mots d'une r\'egion}{M-x ispell-region} \metax{V\'erifier l'orthographe d'une r\'egion}{M-x ispell-region}
\metax{v\'erifier l'orthographe de tout le tampon}{M-x ispell-buffer} \metax{V\'erifier l'orthographe de tout le tampon}{M-x ispell-buffer}
\section{Tags} \section{Tags}
\key{trouver un tag (une d\'efinition)}{M-.} \key{Trouver un tag (une d\'efinition)}{M-.}
\key{trouver l'occurrence suivante du tag}{C-u M-.} \key{Passer \`a l'occurrence suivante du tag}{C-u M-.}
\metax{sp\'ecifier un nouveau fichier de tags}{M-x visit-tags-table} \metax{Sp\'ecifier un autre fichier de tags}{M-x visit-tags-table}
\metax{rechercher par expr. rationnelles dans tous les fichiers du \metax{Rechercher dans tous les fichiers des tags}{M-x tags-search}
tableau de tags}{M-x tags-search}
%% Overflow hack.
\metax{lancer un remplacement interactif sur tous les fichiers}%
{\hskip -9pt M-x tags-query-replace}
\key{continuer la derni\`ere recherche de tags ou le remplacement interactif}{M-,}
\section{Shells} \metax{Remplacer dans tous les fichiers}{M-x tags-query-replace}
\key{Continuer la recherche ou le remplacement}{M-,}
\key{ex\'ecuter une commande shell}{M-!} \section{Shell}
\key{lancer une commande shell sur la r\'egion}{M-|}
\key{filtrer la r\'egion avec une commande shell}{C-u M-|} \key{Ex\'ecuter une commande shell}{M-!}
\key{lancer un shell dans la fen\^etre \kbd{*shell*}}{M-x shell} \key{Lancer une commande shell sur la r\'egion}{M-|}
\key{Filtrer la r\'egion avec une commande shell}{C-u M-|}
\key{Lancer un shell dans la fen\^etre {\tt *shell*}}{M-x shell}
\section{Rectangles} \section{Rectangles}
\key{copier le rectangle dans le registre}{C-x r r} \key{Copier le rectangle dans un registre}{C-x r r}
\key{d\'etruire le rectangle}{C-x r k} \key{D\'etruire le rectangle}{C-x r k}
\key{r\'ecup\'erer le rectangle}{C-x r y} \key{R\'ecup\'erer le rectangle}{C-x r y}
\key{ouvrir le rectangle, en d\'ecalant le texte \`a droite}{C-x r o} \key{D\'ecaler le rectangle \`a droite}{C-x r o}
\key{vider le rectangle}{C-x r c} \key{Vider le rectangle}{C-x r c}
\key{pr\'efixer chaque ligne avec une cha\^\i{}ne}{C-x r t} \key{Pr\'efixer chaque ligne du rectangle}{C-x r t}
\section{Abr\'eviations} \section{Abr\'eviations}
\key{ajouter une abr\'eviation globale}{C-x a g} \key{Ajouter une abr\'eviation globale}{C-x a g}
\key{ajouter une abr\'eviation locale au mode}{C-x a l} \key{Ajouter une abr\'eviation locale au mode}{C-x a l}
\key{ajouter une expansion globale pour cette abr\'eviation}{C-x a i g} \key{Ajouter une expansion globale}{C-x a i g}
\key{ajouter une expansion locale au mode pour cette abr\'eviation}{C-x a i l} \key{Ajouter une expansion locale au mode}{C-x a i l}
\key{faire une expansion explicite de cette abr\'eviation}{C-x a e} \key{Faire une expansion explicite de l'abr\'eviation}{C-x a e}
\key{faire une expansion dynamique du mot pr\'ec\'edent}{M-/} \key{Faire une expansion du mot pr\'ec\'edent}{M-/}
\section{Expressions rationnelles} \section{Expressions rationnelles}
\key{un unique caract\`ere quelconque, sauf une fin de ligne}{. {\rm(point)}} \key{Un caract\`ere quelconque, sauf fin de ligne}{. {\rm(point)}}
\key{z\'ero r\'ep\'etition ou plus}{*} \key{Z\'ero r\'ep\'etition ou plus}{*}
\key{une r\'ep\'etition ou plus}{+} \key{Une r\'ep\'etition ou plus}{+}
\key{z\'ero ou une r\'ep\'etition}{?} \key{Z\'ero ou une r\'ep\'etition}{?}
\key{caract\`ere sp\'ecial pour quoter l'expression rationnelle {\it c\/}}{\\{\it c}} \key{\'Echapper le caract\`ere sp\'ecial {\it c\/}}{\\{\it c}}
\key{alternative (``ou'')}{\\|} \key{Alternative (``ou'' non exclusif)}{\\|}
\key{regroupement}{\\( {\rm$\ldots$} \\)} \key{Regroupement}{\\( {\rm$\ldots$} \\)}
\key{le m\^eme texte que dans le {\it n\/}i\`eme groupe}{\\{\it n}} \key{Reprendre le texte du {\it n\/}-i\`eme groupement}{\\{\it n}}
\key{limite de mot}{\\b} \key{Limite de mot}{\\b}
\key{non limite de mot}{\\B} \key{Non limite de mot}{\\B}
%% tabskip reduced from 10 to 5pt for letterpaper. %% tabskip reduced from 10 to 5pt for letterpaper.
\paralign to \hsize{#\tabskip=5pt plus 1 fil&#\tabskip=0pt&#\cr \paralign to \hsize{#\tabskip=5pt plus 1 fil&#\tabskip=0pt&#\cr
\threecol{{\bf entit\'e}}{{\bf d\'ebut}}{{\bf fin}} \threecol{{\bf Objet}}{{\bf D\'ebut}}{{\bf Fin}}
\threecol{ligne}{^}{\$} \threecol{Ligne}{^}{\$}
\threecol{mot}{\\<}{\\>} \threecol{Mot}{\\<}{\\>}
\threecol{tampon}{\\`}{\\'} \threecol{Tampon}{\\`}{\\'}
\threecol{{\bf classe de caract\`ere}}{{\bf correspond}} \threecol{{\bf Classe de caract\`ere}}{{\bf Correspond}}%
{{\bf correspond \`a d'autres}} {{\bf Compl\'ement}}
\threecol{ensemble explicite}{[ {\rm$\ldots$} ]}{[^ {\rm$\ldots$} ]} \threecol{Ensemble explicite}{[ {\rm$\ldots$} ]}{[^ {\rm$\ldots$} ]}
\threecol{caract\`ere de mot}{\\w}{\\W} \threecol{Caract\`ere de mot}{\\w}{\\W}
%% Overflow hack. \threecol{Caract\`ere avec la syntaxe {\it c}}{\\s{\it c}}{\\S{\it c}}
\threecol{\raggedright caract\`ere avec la\cr \hskip 5pt syntaxe {\it c}}%
{\\s{\it c}}{\\S{\it c}}
} }
\section{Jeux de caract\`eres internationaux} \section{Jeux de caract\`eres internationaux}
\key{indiquer la langue principale}{C-x RET l} \key{Pr\'eciser la langue principale}{C-x RET l}
%% Overflow hack. \metax{Lister les m\'ethodes de saisie}{M-x list-input-methods}
\metax{montrer toutes les m\'ethodes de saisie} \key{Activer/d\'esactiver la m\'ethode de saisie}{C-\\}
{\hskip -10pt M-x list-input-methods} \key{Choisir le codage pour la commande suivante}{C-x RET c}
\key{activer ou d\'esactiver la m\'ethode de saisie}{C-\\} \metax{Lister les codages}{M-x list-coding-systems}
\key{choisir le syst\`eme de codage pour la commande suivante}{C-x RET c} \metax{Choisir le codage pr\'ef\'er\'e}{M-x prefer-coding-system}
%% Overflow hack.
\metax{montrer tous les syst\`emes de codage}%
{\hskip -10pt M-x list-coding-systems}
%% Overflow hack.
\metax{choisir le syst\`eme de codage pr\'ef\'er\'e}%
{\hskip -10pt M-x prefer-coding-system}
\section{Info} \section{Info}
\key{entrer dans le visualisateur de la documentation Info}{C-h i} \key{Lire une documentation Info}{C-h i}
\key{chercher une fonction ou une variable pr\'ecise dans Info}{C-h S} \key{Rechercher une fonction/variable dans Info}{C-h S}
\beginindentedkeys \beginindentedkeys
Se d\'eplacer dans un n\oe{}ud : Se d\'eplacer dans un n\oe{}ud :
\key{une page plus bas}{SPC} \key{Page suivante}{SPC}
\key{une page plus haut}{DEL} \key{Page pr\'ec\'edente}{DEL}
\key{d\'ebut du n\oe{}ud}{. {\rm (point)}} \key{D\'ebut du n\oe{}ud}{. {\rm (point)}}
Passer de n\oe{}ud en n\oe{}ud : Navigation entre n\oe{}uds :
\key{n\oe{}ud {\bf suivant}}{n} \key{N\oe{}ud {\bf suivant}}{n}
\key{n\oe{}ud {\bf pr\'ec\'edent}}{p} \key{N\oe{}ud {\bf pr\'ec\'edent}}{p}
\key{aller {\bf plus haut}}{u} \key{{\bf Remonter} d'un niveau}{u}
\key{choisir un sujet de menu par son nom}{m} \key{Choisir un sujet du menu par son nom}{m}
\key{choisir le {\it n\/}i\`eme sujet de menu par son num\'ero (1--9)}{{\it n}} \key{Choisir le {\it n\/}-i\`eme sujet (1--9)}{{\it n}}
\key{suivre une r\'ef\'erence crois\'ee (on revient avec \kbd{l})}{f} \key{Suivre une r\'ef\'erence crois\'ee (retour avec \kbd{l})}{f}
\key{revenir au dernier n\oe{}ud visit\'e}{l} \key{Revenir au dernier n\oe{}ud visit\'e}{l}
\key{revenir au n\oe{}ud du r\'epertoire}{d} \key{Aller au sommaire Info}{d}
\key{aller au n\oe{}ud de plus haut niveau du fichier Info}{t} \key{Aller au n\oe{}ud le plus haut du manuel}{t}
\key{aller sur n'importe quel n\oe{}ud par son nom}{g} \key{Aller sur un n\oe{}ud par son nom}{g}
Autres : Autres :
\key{lancer le {\bf didacticiel} Info}{h} \key{Aller au {\bf didacticiel} Info}{h}
\key{chercher un sujet dans l'index}{i} \key{Rechercher un sujet dans l'index}{i}
\key{rechercher les n\oe{}uds avec une expression rationnelle}{s} \key{Rechercher un n\oe{}ud par expr. rationnelle}{s}
\key{{\bf quitter} Info}{q} \key{{\bf Quitter} Info}{q}
\endindentedkeys \endindentedkeys
\section{Registres} \section{Registres}
\key{sauver la r\'egion dans un registre}{C-x r s} \key{Sauver la r\'egion dans un registre}{C-x r s}
\key{ins\'erer le contenu du registre dans le tampon}{C-x r i} \key{Ins\'erer le contenu d'un registre}{C-x r i}
\key{sauver la valeur du point dans un registre}{C-x r SPC} \key{Sauver la valeur du point dans un registre}{C-x r SPC}
\key{sauter au point sauv\'e dans le registre}{C-x r j} \key{Aller au point sauv\'e dans un registre}{C-x r j}
\section{Macros clavier} \section{Macros clavier}
\key{{\bf lancer} la d\'efinition d'une macro clavier}{C-x (} \key{{\bf Lancer} la d\'efinition d'une macro clavier}{C-x (}
\key{{\bf terminer} la d\'efinition d'une macro clavier}{C-x )} \key{{\bf Terminer} la d\'efinition d'une macro clavier}{C-x )}
\key{{\bf ex\'ecuter} la derni\`ere macro clavier d\'efinie}{C-x e} \key{{\bf Ex\'ecuter} la derni\`ere macro clavier d\'efinie}{C-x e}
\key{ajouter \`a la derni\`ere macro clavier}{C-u C-x (} \key{Faire un ajout \`a la derni\`ere macro clavier}{C-u C-x (}
\metax{donner un nom \`a la derni\`ere macro clavier}{M-x name-last-kbd-macro} \metax{Nommer la derni\`ere macro clavier}{M-x name-last-kbd-macro}
\metax{ins\'erer une d\'efinition Lisp dans le tampon}{M-x insert-kbd-macro} \metax{En ins\'erer une d\'efinition Lisp}{M-x insert-kbd-macro}
\section{Commandes de gestion d'Emacs Lisp} \section{Commandes de gestion d'Emacs Lisp}
\key{\'evaluer la {\bf s-expression} situ\'ee avant le point}{C-x C-e} \key{\'Evaluer la {\bf s-expression} avant le point}{C-x C-e}
\key{\'evaluer la {\bf defun} courante}{C-M-x} \key{\'Evaluer la {\bf defun} courante}{C-M-x}
\metax{\'evaluer la {\bf r\'egion}}{M-x eval-region} \metax{\'Evaluer la {\bf r\'egion}}{M-x eval-region}
\key{lire et \'evaluer le mini-tampon}{M-:} \key{Lire et \'evaluer dans le mini-tampon}{M-:}
\metax{charger \`a partir du r\'epertoire syst\`eme standard}{M-x load-library} \metax{Charger depuis un r\'epertoire standard}{M-x load-library}
\section{Personnalisation simple} \section{Personnalisation simple}
\metax{personnaliser les variables et les fontes}{M-x customize} \metax{Personnaliser les variables et les fontes}{M-x customize}
% The intended audience here is the person who wants to make simple % The intended audience here is the person who wants to make simple
% customizations and knows Lisp syntax. % customizations and knows Lisp syntax.
Cr\'eation de liaisons de touches globales en Emacs Lisp (exemples): Exemples de d\'efinition globale de touches en Emacs Lisp :
\beginexample% \beginexample%
(global-set-key "\\C-cg" 'goto-line) (global-set-key "\\C-cg" 'goto-line)
@ -683,7 +657,8 @@ \section{\'Ecriture de commandes}
\beginexample% \beginexample%
(defun \<nom-commande> (\<args>) (defun \<nom-commande> (\<args>)
"\<documentation>" (interactive "\<template>") "\<documentation>"
(interactive "\<template>")
\<body>) \<body>)
\endexample \endexample
@ -691,8 +666,7 @@ \section{\'Ecriture de commandes}
\beginexample% \beginexample%
(defun cette-ligne-en-haut-de-la-fenetre (line) (defun cette-ligne-en-haut-de-la-fenetre (line)
%% Leading space omitted to avoid linebreak and underfull hbox. "Positionne la ligne courante en haut de la fen\^etre.
"Repositionne la ligne du point en haut de la fenetre.
Avec ARG, place le point sur la ligne ARG." Avec ARG, place le point sur la ligne ARG."
(interactive "P") (interactive "P")
(recenter (if (null line) (recenter (if (null line)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -330,7 +330,7 @@ \section{Incremental Search}
\key{abort current search}{C-g} \key{abort current search}{C-g}
Use \kbd{C-s} or \kbd{C-r} again to repeat the search in either direction. Use \kbd{C-s} or \kbd{C-r} again to repeat the search in either direction.
If Emacs is still searching, \kbd{C-g} cancels only the part not done. If Emacs is still searching, \kbd{C-g} cancels only the part not matched.
\shortcopyrightnotice \shortcopyrightnotice
@ -478,7 +478,7 @@ \section{The Minibuffer}
\key{abort command}{C-g} \key{abort command}{C-g}
Type \kbd{C-x ESC ESC} to edit and repeat the last command that used the Type \kbd{C-x ESC ESC} to edit and repeat the last command that used the
minibuffer. Type \kbd{F10} to activate the menu bar using the minibuffer. minibuffer. Type \kbd{F10} to activate menu bar items on text terminals.
\newcolumn \newcolumn
\title{GNU Emacs Reference Card} \title{GNU Emacs Reference Card}
@ -657,7 +657,7 @@ \section{Writing Commands}
\beginexample% \beginexample%
(defun this-line-to-top-of-window (line) (defun this-line-to-top-of-window (line)
"Reposition line point is on to top of window. "Reposition current line to top of window.
With ARG, put point on line ARG." With ARG, put point on line ARG."
(interactive "P") (interactive "P")
(recenter (if (null line) (recenter (if (null line)

View File

@ -1,3 +1,11 @@
2007-05-18 Francesco Potort,Al(B <pot@gnu.org>
* etags.c: Extern definitions of some more pointer functions for
standalone compilation, especially important for 64bit platforms.
(main, print_help): --members is now the default for etags.
(C_entries): Parse start of C comment as a space == end of token.
This is not necessary for C++ comment, already parsed as newline.
2007-04-26 Glenn Morris <rgm@gnu.org> 2007-04-26 Glenn Morris <rgm@gnu.org>
* makefile.w32-in (VERSION): Increase to 22.1.50. * makefile.w32-in (VERSION): Increase to 22.1.50.

View File

@ -60,10 +60,10 @@ University of California, as described above. */
/* /*
* Authors: * Authors:
* Ctags originally by Ken Arnold. * 1983 Ctags originally by Ken Arnold.
* Fortran added by Jim Kleckner. * 1984 Fortran added by Jim Kleckner.
* Ed Pelegri-Llopart added C typedefs. * 1984 Ed Pelegri-Llopart added C typedefs.
* Gnu Emacs TAGS format and modifications by RMS? * 1985 Emacs TAGS format by Richard Stallman.
* 1989 Sam Kendall added C++. * 1989 Sam Kendall added C++.
* 1992 Joseph B. Wells improved C and C++ parsing. * 1992 Joseph B. Wells improved C and C++ parsing.
* 1993 Francesco Potortì reorganised C and C++. * 1993 Francesco Potortì reorganised C and C++.
@ -80,7 +80,7 @@ University of California, as described above. */
* configuration file containing regexp definitions for etags. * configuration file containing regexp definitions for etags.
*/ */
char pot_etags_version[] = "@(#) pot revision number is 17.26"; char pot_etags_version[] = "@(#) pot revision number is 17.31";
#define TRUE 1 #define TRUE 1
#define FALSE 0 #define FALSE 0
@ -159,7 +159,14 @@ char pot_etags_version[] = "@(#) pot revision number is 17.26";
# include <stdlib.h> # include <stdlib.h>
# include <string.h> # include <string.h>
# else /* no standard C headers */ # else /* no standard C headers */
extern char *getenv (); extern char *getenv ();
extern char *strcpy ();
extern char *strncpy ();
extern char *strcat ();
extern char *strncat ();
extern unsigned long strlen ();
extern PTR malloc ();
extern PTR realloc ();
# ifdef VMS # ifdef VMS
# define EXIT_SUCCESS 1 # define EXIT_SUCCESS 1
# define EXIT_FAILURE 0 # define EXIT_FAILURE 0
@ -483,7 +490,7 @@ static char
*midtk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz$0123456789"; *midtk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz$0123456789";
static bool append_to_tagfile; /* -a: append to tags */ static bool append_to_tagfile; /* -a: append to tags */
/* The next four default to TRUE for etags, but to FALSE for ctags. */ /* The next five default to TRUE for etags, but to FALSE for ctags. */
static bool typedefs; /* -t: create tags for C and Ada typedefs */ static bool typedefs; /* -t: create tags for C and Ada typedefs */
static bool typedefs_or_cplusplus; /* -T: create tags for C typedefs, level */ static bool typedefs_or_cplusplus; /* -T: create tags for C typedefs, level */
/* 0 struct/enum/union decls, and C++ */ /* 0 struct/enum/union decls, and C++ */
@ -875,7 +882,7 @@ etags --help --lang=ada.");
# define EMACS_NAME "standalone" # define EMACS_NAME "standalone"
#endif #endif
#ifndef VERSION #ifndef VERSION
# define VERSION "version" # define VERSION "17.31"
#endif #endif
static void static void
print_version () print_version ()
@ -969,7 +976,11 @@ Relative ones are stored relative to the output file's directory.\n");
puts ("--no-globals\n\ puts ("--no-globals\n\
Do not create tag entries for global variables in some\n\ Do not create tag entries for global variables in some\n\
languages. This makes the tags file smaller."); languages. This makes the tags file smaller.");
puts ("--no-members\n\ if (CTAGS)
puts ("--members\n\
Create tag entries for members of structures in some languages.");
else
puts ("--no-members\n\
Do not create tag entries for members of structures\n\ Do not create tag entries for members of structures\n\
in some languages."); in some languages.");
@ -1215,7 +1226,7 @@ main (argc, argv)
if (!CTAGS) if (!CTAGS)
{ {
typedefs = typedefs_or_cplusplus = constantypedefs = TRUE; typedefs = typedefs_or_cplusplus = constantypedefs = TRUE;
globals = TRUE; globals = members = TRUE;
} }
/* When the optstring begins with a '-' getopt_long does not rearrange the /* When the optstring begins with a '-' getopt_long does not rearrange the
@ -3397,17 +3408,15 @@ C_entries (c_ext, inf)
case '/': case '/':
if (*lp == '*') if (*lp == '*')
{ {
lp++;
incomm = TRUE; incomm = TRUE;
continue; lp++;
c = ' ';
} }
else if (/* cplpl && */ *lp == '/') else if (/* cplpl && */ *lp == '/')
{ {
c = '\0'; c = '\0';
break;
} }
else break;
break;
case '%': case '%':
if ((c_ext & YACC) && *lp == '%') if ((c_ext & YACC) && *lp == '%')
{ {

View File

@ -1,3 +1,169 @@
2007-05-20 Nick Roberts <nickrob@snap.net.nz>
* t-mouse.el (t-mouse-mode): Reset t-mouse-mode to nil if there
is an error.
* term/linux.el (terminal-init-linux): Don't signal an error
if gpm isn't running.
2007-05-20 Nick Roberts <nickrob@snap.net.nz>
* t-mouse.el: Reduce to a minor-mode macro call.
(t-mouse-mode) Remove the lighter.
* term/linux.el (terminal-init-linux): Enable t-mouse by default.
2007-05-19 Dan Nicolaescu <dann@ics.uci.edu>
* files.el (auto-mode-alist): Change the regexp so that
ChangeLog.unicode and ChangeLog.multi-tty use change-log-mode.
2007-05-19 Chong Yidong <cyd@stupidchicken.com>
* paren.el (show-paren-function): Undo 2007-04-19 and 2007-04-20
changes.
2007-05-19 Kevin Ryde <user42@zip.com.au>
* info.el (Info-fontify-node): Fontify https as well as http and ftp.
2007-05-18 Thien-Thi Nguyen <ttn@gnuvola.org>
* textmodes/sgml-mode.el: Revert last change.
2007-05-18 Richard Stallman <rms@gnu.org>
* simple.el (push-mark): Doc fix.
2007-05-18 Rob Riepel <riepel@Stanford.EDU>
* emulation/tpu-edt.el (CSI-map, SS3-map) Moved from global-map to
tpu-global-map.
(tpu-original-global-map) Variable deleted.
(tpu-control-keys-map) New keymap variable.
(tpu-set-control-keys) Use tpu-reset-control-keys rather than
setting keymapping directly.
(tpu-reset-control-keys) Use tpu-control-keys-map instead of
tpu-global-map.
(tpu-edt-on): Activate the tpu-global-map.
(tpu-edt-off): Deactivate the tpu-global-map.
2007-05-18 Ryan Yeske <rcyeske@gmail.com>
* textmodes/ispell.el (ispell-get-word): Return markers
for start and end positions.
(ispell-word): Assume END is a marker.
2007-05-17 Vinicius Jose Latorre <viniciusjl@ig.com.br>
* printing.el: Group together all XEmacs/Emacs definitions.
(pr-version): New version 6.9.
(pr-global-menubar, pr-menu-char-height, pr-menu-char-width): New funs.
(pr-menu-char-height, pr-menu-char-width): Fix initialization code.
(pr-menu-bind): Fix code.
(pr-e-frame-char-height, pr-e-frame-char-width)
(pr-e-mouse-pixel-position, pr-x-add-submenu, pr-x-event-function)
(pr-x-event-object, pr-x-find-menu-item, pr-x-font-height)
(pr-x-font-width, pr-x-get-popup-menu-response, pr-x-make-event)
(pr-x-misc-user-event-p, pr-x-relabel-menu-item, pr-x-event-x-pixel)
(pr-x-event-y-pixel): Aliases eliminated.
(pr-xemacs-global-menubar): Macro moved.
(current-menubar, current-mouse-event, zmacs-region-stays)
(deactivate-mark, pr-menu-position, pr-menu-state, pr-ps-name-old)
(pr-txt-name-old, pr-ps-utility-old, pr-even-or-odd-old, pr-temp-menu):
Vars moved.
(pr-region-active-p, pr-menu-position, pr-menu-lookup, pr-menu-lock)
(pr-update-mode-line, pr-do-update-menus, pr-menu-alist)
(pr-relabel-menu-item, pr-menu-set-ps-title, pr-menu-set-txt-title)
(pr-menu-set-utility-title, pr-even-or-odd-pages)
(pr-f-set-keymap-parents, pr-f-set-keymap-name, pr-f-read-string)
(pr-keep-region-active, pr-menu-get-item, pr-menu-set-item-name): Funs
moved.
2007-05-17 Christian Plate <cplate@web.de> (tiny change)
* textmodes/sgml-mode.el (sgml-tag):
Fix bug: Call sgml-transformation-function.
2007-05-17 Martin Rudalics <rudalics@gmx.at>
* hilit-chg.el (highlight-changes-rotate-faces): Don't set
modified flag of buffer. Use `inhibit-modification-hooks'.
2007-05-16 Richard Stallman <rms@gnu.org>
* buff-menu.el (Buffer-menu-sort-column): Doc fix.
2007-05-16 Stefan Monnier <monnier@iro.umontreal.ca>
* files.el (magic-mode-alist, magic-fallback-mode-alist):
Move the *ml, Postscript, and XmCD entries to the fallback part.
* files.el (magic-fallback-mode-alist):
Rename from file-start-mode-alist.
2007-05-16 Nikolaj Schumacher <n_schumacher@web.de> (tiny change)
* progmodes/compile.el (compilation-handle-exit): Quote first
argument of `run-hook-with-args'.
2007-05-16 Juanma Barranquero <lekktu@gmail.com>
* buff-menu.el (Buffer-menu-sort-column):
* dabbrev.el (dabbrev-upcase-means-case-search):
* dired.el (dired-recursive-deletes, dired-recursive-copies):
* info.el (Info-current-subfile):
* ls-lisp.el (ls-lisp-verbosity):
* msb.el (msb-menu-cond):
* pcvs.el (cvs-dired-use-hook):
* simple.el (set-mark-command-repeat-pop):
* time.el (display-time-24hr-format, display-time-mail-file):
Doc fixes.
* tutorial.el (get-lang-string, tutorial--find-changed-keys):
* printing.el (pr-ps-fast-fire): Fix typos in docstrings.
* view.el (view-inhibit-help-message): Fix typo in docstring.
(view-scroll-auto-exit, view-try-extend-at-buffer-end): Doc fixes.
2007-05-16 Martin Rudalics <rudalics@gmx.at>
* textmodes/ispell.el (ispell-start-process): Defend against bad
default-directory.
2007-05-14 Eli Zaretskii <eliz@gnu.org>
* mail/rmail.el (rmail-convert-to-babyl-format): Check
content-transfer-encoding _last_, because it's its position that
we need as value of base64-header-field-end.
2007-05-14 Juanma Barranquero <lekktu@gmail.com>
* files.el (mode-require-final-newline, require-final-newline)
(enable-local-variables, enable-local-eval): Doc fixes.
2007-05-13 Vinicius Jose Latorre <viniciusjl@ig.com.br>
* ps-print.el: Use default color when foreground or background color
are unspecified. Reported by Leo <sdl.web@gmail.com>.
(ps-print-version): New version 6.7.4.
(ps-rgb-color): New argument. Use default color when color is
unspecified.
(ps-begin-job): Fix code.
2007-05-12 Chong Yidong <cyd@stupidchicken.com>
* longlines.el (longlines-mode): Make longlines-auto-wrap
buffer-local. Add hooks unconditionally.
(longlines-auto-wrap): Toggle wrapping.
(longlines-after-change-function)
(longlines-post-command-function): Check longlines-auto-wrap.
2007-05-12 Nick Roberts <nickrob@snap.net.nz>
* xt-mouse.el (xterm-mouse-debug-buffer): New variable.
(xterm-mouse-translate): Use it.
2007-05-10 Richard Stallman <rms@gnu.org> 2007-05-10 Richard Stallman <rms@gnu.org>
* international/iso-cvt.el (iso-cvt-read-only): Ignore arguments. * international/iso-cvt.el (iso-cvt-read-only): Ignore arguments.

View File

@ -102,8 +102,9 @@ as it is by default."
;; This should get updated & resorted when you click on a column heading ;; This should get updated & resorted when you click on a column heading
(defvar Buffer-menu-sort-column nil (defvar Buffer-menu-sort-column nil
"2 for sorting by buffer names. 5 for sorting by file names. "Which column to sort the menu on.
nil for default sorting by visited order.") Use 2 to sort by buffer names, or 5 to sort by file names.
nil means sort by visited order (the default).")
(defconst Buffer-menu-buffer-column 4) (defconst Buffer-menu-buffer-column 4)

View File

@ -147,7 +147,7 @@ Any other non-nil version means case is not significant."
(defcustom dabbrev-upcase-means-case-search nil (defcustom dabbrev-upcase-means-case-search nil
"*The significance of an uppercase character in an abbreviation. "*The significance of an uppercase character in an abbreviation.
nil means case fold search when searching for possible expansions; A nil value means case fold search when searching for possible expansions;
non-nil means case sensitive search. non-nil means case sensitive search.
This variable has an effect only when the value of This variable has an effect only when the value of

View File

@ -1360,10 +1360,10 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
(define-key map (define-key map
[menu-bar regexp image-dired-mark-tagged-files] [menu-bar regexp image-dired-mark-tagged-files]
'(menu-item "Mark From Image Tag..." image-dired-mark-tagged-files '(menu-item "Mark From Image Tag..." image-dired-mark-tagged-files
:help "Mark files whose image tags matches regexp")) :help "Mark files whose image tags matches regexp"))
(define-key map [menu-bar regexp dashes-1] (define-key map [menu-bar regexp dashes-1]
'("--")) '("--"))
(define-key map [menu-bar regexp downcase] (define-key map [menu-bar regexp downcase]
'(menu-item "Downcase" dired-downcase '(menu-item "Downcase" dired-downcase
@ -1471,9 +1471,9 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
[menu-bar operate image-dired-display-thumbs] [menu-bar operate image-dired-display-thumbs]
'(menu-item "Display Image-Dired" image-dired-display-thumbs '(menu-item "Display Image-Dired" image-dired-display-thumbs
:help "Display image-dired for current or marked image files")) :help "Display image-dired for current or marked image files"))
(define-key map [menu-bar operate dashes-3] (define-key map [menu-bar operate dashes-3]
'("--")) '("--"))
(define-key map [menu-bar operate query-replace] (define-key map [menu-bar operate query-replace]
'(menu-item "Query Replace in Files..." dired-do-query-replace-regexp '(menu-item "Query Replace in Files..." dired-do-query-replace-regexp
@ -2364,7 +2364,7 @@ Optional argument means return a file name relative to `default-directory'."
(defcustom dired-recursive-deletes nil ; Default only delete empty directories. (defcustom dired-recursive-deletes nil ; Default only delete empty directories.
"*Decide whether recursive deletes are allowed. "*Decide whether recursive deletes are allowed.
nil means no recursive deletes. A value of nil means no recursive deletes.
`always' means delete recursively without asking. This is DANGEROUS! `always' means delete recursively without asking. This is DANGEROUS!
`top' means ask for each directory at top level, but delete its subdirectories `top' means ask for each directory at top level, but delete its subdirectories
without asking. without asking.
@ -3101,7 +3101,7 @@ The idea is to set this buffer-locally in special dired buffers.")
(when (eq major-mode 'dired-mode) (when (eq major-mode 'dired-mode)
(setq mode-name (setq mode-name
(let (case-fold-search) (let (case-fold-search)
(cond ((string-match (cond ((string-match
dired-sort-by-name-regexp dired-actual-switches) dired-sort-by-name-regexp dired-actual-switches)
"Dired by name") "Dired by name")
((string-match ((string-match
@ -3208,7 +3208,7 @@ To be called first in body of `dired-sort-other', etc."
(defcustom dired-recursive-copies nil (defcustom dired-recursive-copies nil
"*Decide whether recursive copies are allowed. "*Decide whether recursive copies are allowed.
nil means no recursive copies. A value of nil means no recursive copies.
`always' means copy recursively without asking. `always' means copy recursively without asking.
`top' means ask for each directory at top level. `top' means ask for each directory at top level.
Anything else means ask for each directory." Anything else means ask for each directory."

View File

@ -584,9 +584,12 @@ GOLD is the ASCII 7-bit escape sequence <ESC>OP.")
"Maps the SS3 function keys on the VT100 keyboard. "Maps the SS3 function keys on the VT100 keyboard.
SS3 is DEC's name for the sequence <ESC>O.") SS3 is DEC's name for the sequence <ESC>O.")
(defvar tpu-global-map nil "TPU-edt global keymap.") (defvar tpu-global-map
(defvar tpu-original-global-map global-map (let ((map (make-sparse-keymap)))
"Original non-TPU global keymap.") (define-key map "\e[" CSI-map)
(define-key map "\eO" SS3-map)
map)
"TPU-edt global keymap.")
(and (not (boundp 'minibuffer-local-ns-map)) (and (not (boundp 'minibuffer-local-ns-map))
(defvar minibuffer-local-ns-map (make-sparse-keymap) (defvar minibuffer-local-ns-map (make-sparse-keymap)
@ -2267,46 +2270,43 @@ Accepts a prefix argument for the number of tpu-pan-columns to scroll."
;;; ;;;
;;; Functions to set, reset, and toggle the control key bindings ;;; Functions to set, reset, and toggle the control key bindings
;;; ;;;
(defun tpu-set-control-keys nil
(defvar tpu-control-keys-map
(let ((map (make-sparse-keymap)))
(define-key map "\C-\\" 'quoted-insert) ; ^\
(define-key map "\C-a" 'tpu-toggle-overwrite-mode) ; ^A
(define-key map "\C-b" 'repeat-complex-command) ; ^B
(define-key map "\C-e" 'tpu-current-end-of-line) ; ^E
(define-key map "\C-h" 'tpu-next-beginning-of-line) ; ^H (BS)
(define-key map "\C-j" 'tpu-delete-previous-word) ; ^J (LF)
(define-key map "\C-k" 'tpu-define-macro-key) ; ^K
(define-key map "\C-l" 'tpu-insert-formfeed) ; ^L (FF)
(define-key map "\C-r" 'recenter) ; ^R
(define-key map "\C-u" 'tpu-delete-to-bol) ; ^U
(define-key map "\C-v" 'tpu-quoted-insert) ; ^V
(define-key map "\C-w" 'redraw-display) ; ^W
(define-key map "\C-z" 'tpu-exit) ; ^Z
map))
(defun tpu-set-control-keys ()
"Set control keys to TPU style functions." "Set control keys to TPU style functions."
(define-key global-map "\C-\\" 'quoted-insert) ; ^\ (tpu-reset-control-keys 'tpu))
(define-key global-map "\C-a" 'tpu-toggle-overwrite-mode) ; ^A
(define-key global-map "\C-b" 'repeat-complex-command) ; ^B
(define-key global-map "\C-e" 'tpu-current-end-of-line) ; ^E
(define-key global-map "\C-h" 'tpu-next-beginning-of-line) ; ^H (BS)
(define-key global-map "\C-j" 'tpu-delete-previous-word) ; ^J (LF)
(define-key global-map "\C-k" 'tpu-define-macro-key) ; ^K
(define-key global-map "\C-l" 'tpu-insert-formfeed) ; ^L (FF)
(define-key global-map "\C-r" 'recenter) ; ^R
(define-key global-map "\C-u" 'tpu-delete-to-bol) ; ^U
(define-key global-map "\C-v" 'tpu-quoted-insert) ; ^V
(define-key global-map "\C-w" 'redraw-display) ; ^W
(define-key global-map "\C-z" 'tpu-exit) ; ^Z
(setq tpu-control-keys t))
(defun tpu-reset-control-keys (tpu-style) (defun tpu-reset-control-keys (tpu-style)
"Set control keys to TPU or Emacs style functions." "Set control keys to TPU or Emacs style functions."
(let* ((tpu (and tpu-style (not tpu-control-keys))) (let ((parent (keymap-parent tpu-global-map)))
(emacs (and (not tpu-style) tpu-control-keys)) (if tpu-style
(doit (or tpu emacs))) (if (eq parent tpu-control-keys-map)
(cond (doit nil ;All done already.
(if emacs (setq tpu-global-map (copy-keymap global-map))) ;; Insert tpu-control-keys-map in the global map.
(let ((map (if tpu tpu-global-map tpu-original-global-map))) (set-keymap-parent tpu-control-keys-map parent)
(set-keymap-parent tpu-global-map tpu-control-keys-map))
(define-key global-map "\C-\\" (lookup-key map "\C-\\")) ; ^\ (if (not (eq parent tpu-control-keys-map))
(define-key global-map "\C-a" (lookup-key map "\C-a")) ; ^A nil ;All done already.
(define-key global-map "\C-b" (lookup-key map "\C-b")) ; ^B ;; Remove tpu-control-keys-map from the global map.
(define-key global-map "\C-e" (lookup-key map "\C-e")) ; ^E (set-keymap-parent tpu-global-map (keymap-parent parent))
(define-key global-map "\C-h" (lookup-key map "\C-h")) ; ^H (BS) (set-keymap-parent tpu-control-keys-map nil)))
(define-key global-map "\C-j" (lookup-key map "\C-j")) ; ^J (LF) (setq tpu-control-keys tpu-style)))
(define-key global-map "\C-k" (lookup-key map "\C-k")) ; ^K
(define-key global-map "\C-l" (lookup-key map "\C-l")) ; ^L (FF)
(define-key global-map "\C-r" (lookup-key map "\C-r")) ; ^R
(define-key global-map "\C-u" (lookup-key map "\C-u")) ; ^U
(define-key global-map "\C-v" (lookup-key map "\C-v")) ; ^V
(define-key global-map "\C-w" (lookup-key map "\C-w")) ; ^W
(define-key global-map "\C-z" (lookup-key map "\C-z")) ; ^Z
(setq tpu-control-keys tpu-style))))))
(defun tpu-toggle-control-keys nil (defun tpu-toggle-control-keys nil
"Toggles control key bindings between TPU-edt and Emacs." "Toggles control key bindings between TPU-edt and Emacs."
@ -2447,8 +2447,11 @@ If FILE is nil, try to load a default file. The default file names are
(defun tpu-edt-on () (defun tpu-edt-on ()
"Turn on TPU/edt emulation." "Turn on TPU/edt emulation."
(interactive) (interactive)
(and window-system (tpu-load-xkeys nil)) ;; First, activate tpu-global-map, while protecting the original keymap.
(tpu-arrow-history) (set-keymap-parent tpu-global-map global-map)
(setq global-map tpu-global-map)
(use-global-map global-map)
;; Then do the normal TPU setup.
(transient-mark-mode t) (transient-mark-mode t)
(add-hook 'post-command-hook 'tpu-search-highlight) (add-hook 'post-command-hook 'tpu-search-highlight)
(tpu-set-mode-line t) (tpu-set-mode-line t)
@ -2457,10 +2460,14 @@ If FILE is nil, try to load a default file. The default file names are
(setq-default page-delimiter "\f") (setq-default page-delimiter "\f")
(setq-default truncate-lines t) (setq-default truncate-lines t)
(setq scroll-step 1) (setq scroll-step 1)
(setq global-map (copy-keymap global-map))
(tpu-set-control-keys) (tpu-set-control-keys)
(define-key global-map "\e[" CSI-map) (and window-system (tpu-load-xkeys nil))
(define-key global-map "\eO" SS3-map) (tpu-arrow-history)
;; Then protect tpu-global-map from user modifications.
(let ((map (make-sparse-keymap)))
(set-keymap-parent map global-map)
(setq global-map map)
(use-global-map map))
(setq tpu-edt-mode t)) (setq tpu-edt-mode t))
(defun tpu-edt-off () (defun tpu-edt-off ()
@ -2472,8 +2479,13 @@ If FILE is nil, try to load a default file. The default file names are
(setq-default page-delimiter "^\f") (setq-default page-delimiter "^\f")
(setq-default truncate-lines nil) (setq-default truncate-lines nil)
(setq scroll-step 0) (setq scroll-step 0)
(setq global-map tpu-original-global-map) ;; Remove tpu-global-map from the global map.
(use-global-map global-map) (let ((map global-map))
(while map
(let ((parent (keymap-parent map)))
(if (eq tpu-global-map parent)
(set-keymap-parent map (keymap-parent parent))
(setq map parent)))))
(setq tpu-edt-mode nil)) (setq tpu-edt-mode nil))
(provide 'tpu-edt) (provide 'tpu-edt)

View File

@ -287,7 +287,7 @@ A value of t means do this only when the file is about to be saved.
A value of `visit' means do this right after the file is visited. A value of `visit' means do this right after the file is visited.
A value of `visit-save' means do it at both of those times. A value of `visit-save' means do it at both of those times.
Any other non-nil value means ask user whether to add a newline, when saving. Any other non-nil value means ask user whether to add a newline, when saving.
nil means don't add newlines. A value of nil means don't add newlines.
Certain major modes set this locally to the value obtained Certain major modes set this locally to the value obtained
from `mode-require-final-newline'." from `mode-require-final-newline'."
@ -309,10 +309,10 @@ A value of `visit' means do this right after the file is visited.
A value of `visit-save' means do it at both of those times. A value of `visit-save' means do it at both of those times.
Any other non-nil value means ask user whether to add a newline, when saving. Any other non-nil value means ask user whether to add a newline, when saving.
nil means do not add newlines. That is a risky choice in this variable A value of nil means do not add newlines. That is a risky choice in this
since this value is used for modes for files that ought to have final newlines. variable since this value is used for modes for files that ought to have
So if you set this to nil, you must explicitly check and add final newlines. So if you set this to nil, you must explicitly check and
a final newline, whenever you save a file that really needs one." add a final newline, whenever you save a file that really needs one."
:type '(choice (const :tag "When visiting" visit) :type '(choice (const :tag "When visiting" visit)
(const :tag "When saving" t) (const :tag "When saving" t)
(const :tag "When visiting or saving" visit-save) (const :tag "When visiting or saving" visit-save)
@ -459,7 +459,7 @@ not safe, Emacs queries you, once, whether to set them all.
:safe means set the safe variables, and ignore the rest. :safe means set the safe variables, and ignore the rest.
:all means set all variables, whether safe or not. :all means set all variables, whether safe or not.
(Don't set it permanently to :all.) (Don't set it permanently to :all.)
nil means always ignore the file local variables. A value of nil means always ignore the file local variables.
Any other value means always query you once whether to set them all. Any other value means always query you once whether to set them all.
\(When you say yes to certain values, they are remembered as safe, but \(When you say yes to certain values, they are remembered as safe, but
@ -491,7 +491,7 @@ specified in a -*- line.")
"Control processing of the \"variable\" `eval' in a file's local variables. "Control processing of the \"variable\" `eval' in a file's local variables.
The value can be t, nil or something else. The value can be t, nil or something else.
A value of t means obey `eval' variables; A value of t means obey `eval' variables;
nil means ignore them; anything else means query." A value of nil means ignore them; anything else means query."
:type '(choice (const :tag "Obey" t) :type '(choice (const :tag "Obey" t)
(const :tag "Ignore" nil) (const :tag "Ignore" nil)
(other :tag "Query" other)) (other :tag "Query" other))
@ -1924,7 +1924,7 @@ since only a single case-insensitive search through the alist is made."
("\\.[sS]\\'" . asm-mode) ("\\.[sS]\\'" . asm-mode)
("\\.asm\\'" . asm-mode) ("\\.asm\\'" . asm-mode)
("[cC]hange\\.?[lL]og?\\'" . change-log-mode) ("[cC]hange\\.?[lL]og?\\'" . change-log-mode)
("[cC]hange[lL]og[-.][0-9]+\\'" . change-log-mode) ("[cC]hange[lL]og[-.][-0-9a-z]+\\'" . change-log-mode)
("\\$CHANGE_LOG\\$\\.TXT" . change-log-mode) ("\\$CHANGE_LOG\\$\\.TXT" . change-log-mode)
("\\.scm\\.[0-9]*\\'" . scheme-mode) ("\\.scm\\.[0-9]*\\'" . scheme-mode)
("\\.[ck]?sh\\'\\|\\.shar\\'\\|/\\.z?profile\\'" . sh-mode) ("\\.[ck]?sh\\'\\|\\.shar\\'\\|/\\.z?profile\\'" . sh-mode)
@ -2120,8 +2120,20 @@ of the regular expression. The mode is then determined as the mode
associated with that interpreter in `interpreter-mode-alist'.") associated with that interpreter in `interpreter-mode-alist'.")
(defvar magic-mode-alist (defvar magic-mode-alist
`((image-type-auto-detected-p . image-mode) `((image-type-auto-detected-p . image-mode))
;; The < comes before the groups (but the first) to reduce backtracking. "Alist of buffer beginnings vs. corresponding major mode functions.
Each element looks like (REGEXP . FUNCTION) or (MATCH-FUNCTION . FUNCTION).
After visiting a file, if REGEXP matches the text at the beginning of the
buffer, or calling MATCH-FUNCTION returns non-nil, `normal-mode' will
call FUNCTION rather than allowing `auto-mode-alist' to decide the buffer's
major mode.
If FUNCTION is nil, then it is not called. (That is a way of saying
\"allow `auto-mode-alist' to decide for these files.\")")
(put 'magic-mode-alist 'risky-local-variable t)
(defvar magic-fallback-mode-alist
`(;; The < comes before the groups (but the first) to reduce backtracking.
;; TODO: UTF-16 <?xml may be preceded by a BOM 0xff 0xfe or 0xfe 0xff. ;; TODO: UTF-16 <?xml may be preceded by a BOM 0xff 0xfe or 0xfe 0xff.
;; We use [ \t\r\n] instead of `\\s ' to make regex overflow less likely. ;; We use [ \t\r\n] instead of `\\s ' to make regex overflow less likely.
(,(let* ((incomment-re "\\(?:[^-]\\|-[^-]\\)") (,(let* ((incomment-re "\\(?:[^-]\\|-[^-]\\)")
@ -2140,19 +2152,6 @@ associated with that interpreter in `interpreter-mode-alist'.")
. sgml-mode) . sgml-mode)
("%!PS" . ps-mode) ("%!PS" . ps-mode)
("# xmcd " . conf-unix-mode)) ("# xmcd " . conf-unix-mode))
"Alist of buffer beginnings vs. corresponding major mode functions.
Each element looks like (REGEXP . FUNCTION) or (MATCH-FUNCTION . FUNCTION).
After visiting a file, if REGEXP matches the text at the beginning of the
buffer, or calling MATCH-FUNCTION returns non-nil, `normal-mode' will
call FUNCTION rather than allowing `auto-mode-alist' to decide the buffer's
major mode.
If FUNCTION is nil, then it is not called. (That is a way of saying
\"allow `auto-mode-alist' to decide for these files.\")")
(put 'magic-mode-alist 'risky-local-variable t)
(defvar file-start-mode-alist
nil
"Like `magic-mode-alist' but has lower priority than `auto-mode-alist'. "Like `magic-mode-alist' but has lower priority than `auto-mode-alist'.
Each element looks like (REGEXP . FUNCTION) or (MATCH-FUNCTION . FUNCTION). Each element looks like (REGEXP . FUNCTION) or (MATCH-FUNCTION . FUNCTION).
After visiting a file, if REGEXP matches the text at the beginning of the After visiting a file, if REGEXP matches the text at the beginning of the
@ -2161,11 +2160,11 @@ call FUNCTION, provided that `magic-mode-alist' and `auto-mode-alist'
have not specified a mode for this file. have not specified a mode for this file.
If FUNCTION is nil, then it is not called.") If FUNCTION is nil, then it is not called.")
(put 'file-start-mode-alist 'risky-local-variable t) (put 'magic-fallback-mode-alist 'risky-local-variable t)
(defvar magic-mode-regexp-match-limit 4000 (defvar magic-mode-regexp-match-limit 4000
"Upper limit on `magic-mode-alist' regexp matches. "Upper limit on `magic-mode-alist' regexp matches.
Also applies to `file-start-mode-alist'.") Also applies to `magic-fallback-mode-alist'.")
(defun set-auto-mode (&optional keep-mode-if-same) (defun set-auto-mode (&optional keep-mode-if-same)
"Select major mode appropriate for current buffer. "Select major mode appropriate for current buffer.
@ -2284,7 +2283,7 @@ only set the major mode, if that would change it."
(when mode (when mode
(set-auto-mode-0 mode keep-mode-if-same) (set-auto-mode-0 mode keep-mode-if-same)
(setq done t)))))) (setq done t))))))
;; Next try matching the buffer beginning against file-start-mode-alist. ;; Next try matching the buffer beginning against magic-fallback-mode-alist.
(unless done (unless done
(if (setq done (save-excursion (if (setq done (save-excursion
(goto-char (point-min)) (goto-char (point-min))
@ -2292,7 +2291,7 @@ only set the major mode, if that would change it."
(narrow-to-region (point-min) (narrow-to-region (point-min)
(min (point-max) (min (point-max)
(+ (point-min) magic-mode-regexp-match-limit))) (+ (point-min) magic-mode-regexp-match-limit)))
(assoc-default nil file-start-mode-alist (assoc-default nil magic-fallback-mode-alist
(lambda (re dummy) (lambda (re dummy)
(if (functionp re) (if (functionp re)
(funcall re) (funcall re)

View File

@ -1,3 +1,8 @@
2007-05-10 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-art.el (gnus-article-mode): Fix comment about displaying
non-break space.
2007-05-09 Didier Verna <didier@xemacs.org> 2007-05-09 Didier Verna <didier@xemacs.org>
* gnus-diary.el, nndiary.el: Remove the description comment (nndiary is * gnus-diary.el, nndiary.el: Remove the description comment (nndiary is

View File

@ -3925,7 +3925,8 @@ commands:
(make-local-variable 'gnus-article-image-alist) (make-local-variable 'gnus-article-image-alist)
(make-local-variable 'gnus-article-charset) (make-local-variable 'gnus-article-charset)
(make-local-variable 'gnus-article-ignored-charsets) (make-local-variable 'gnus-article-ignored-charsets)
;; Prevent recent Emacsen from displaying non-break space as "\ ". ;; Prevent Emacs 22 from displaying non-break space with `nobreak-space'
;; face.
(set (make-local-variable 'nobreak-char-display) nil) (set (make-local-variable 'nobreak-char-display) nil)
(setq cursor-in-non-selected-windows nil) (setq cursor-in-non-selected-windows nil)
(gnus-set-default-directory) (gnus-set-default-directory)

View File

@ -790,17 +790,37 @@ this, eval the following in the buffer to be saved:
(interactive) (interactive)
;; If not in active mode do nothing but don't complain because this ;; If not in active mode do nothing but don't complain because this
;; may be bound to a hook. ;; may be bound to a hook.
(if (eq highlight-changes-mode 'active) (when (eq highlight-changes-mode 'active)
(let ((after-change-functions nil)) (let ((modified (buffer-modified-p))
;; ensure hilit-chg-list is made and up to date (inhibit-modification-hooks t))
(hilit-chg-make-list) ;; The `modified' related code tries to combine two goals: (1) Record the
;; remove our existing overlays ;; rotation in `buffer-undo-list' and (2) avoid setting the modified flag
(hilit-chg-hide-changes) ;; of the current buffer due to the rotation. We do this by inserting (in
;; for each change text property, increment it ;; `buffer-undo-list') entries restoring buffer-modified-p to nil before
(hilit-chg-map-changes 'hilit-chg-bump-change) ;; and after the entry for the rotation.
;; and display them all if active (unless modified
(if (eq highlight-changes-mode 'active) ;; Install the "before" entry.
(hilit-chg-display-changes)))) (setq buffer-undo-list
(cons '(apply restore-buffer-modified-p nil)
buffer-undo-list)))
(unwind-protect
(progn
;; ensure hilit-chg-list is made and up to date
(hilit-chg-make-list)
;; remove our existing overlays
(hilit-chg-hide-changes)
;; for each change text property, increment it
(hilit-chg-map-changes 'hilit-chg-bump-change)
;; and display them all if active
(if (eq highlight-changes-mode 'active)
(hilit-chg-display-changes)))
(unless modified
;; Install the "after" entry.
(setq buffer-undo-list
(cons '(apply restore-buffer-modified-p nil)
buffer-undo-list))
(restore-buffer-modified-p nil)))))
;; This always returns nil so it is safe to use in write-file-functions ;; This always returns nil so it is safe to use in write-file-functions
nil) nil)

View File

@ -288,7 +288,7 @@ It doesn't contain directory names or file name extensions added by Info.")
(defvar Info-current-subfile nil (defvar Info-current-subfile nil
"Info subfile that is actually in the *info* buffer now. "Info subfile that is actually in the *info* buffer now.
nil if current Info file is not split into subfiles.") It is nil if current Info file is not split into subfiles.")
(defvar Info-current-node nil (defvar Info-current-node nil
"Name of node that Info is now looking at, or nil.") "Name of node that Info is now looking at, or nil.")
@ -4074,7 +4074,8 @@ the variable `Info-file-list-for-emacs'."
;; Fontify http and ftp references ;; Fontify http and ftp references
(goto-char (point-min)) (goto-char (point-min))
(when not-fontified-p (when not-fontified-p
(while (re-search-forward "[hf]t?tp://[^ \t\n\"`({<>})']+" nil t) (while (re-search-forward "\\(https?\\|ftp\\)://[^ \t\n\"`({<>})']+"
nil t)
(add-text-properties (match-beginning 0) (match-end 0) (add-text-properties (match-beginning 0) (match-end 0)
'(font-lock-face info-xref '(font-lock-face info-xref
mouse-face highlight mouse-face highlight

File diff suppressed because it is too large Load Diff

View File

@ -110,6 +110,7 @@ are indicated with a symbol."
(add-hook 'change-major-mode-hook 'longlines-mode-off nil t) (add-hook 'change-major-mode-hook 'longlines-mode-off nil t)
(add-hook 'before-revert-hook 'longlines-before-revert-hook nil t) (add-hook 'before-revert-hook 'longlines-before-revert-hook nil t)
(make-local-variable 'buffer-substring-filters) (make-local-variable 'buffer-substring-filters)
(make-local-variable 'longlines-auto-wrap)
(set (make-local-variable 'isearch-search-fun-function) (set (make-local-variable 'isearch-search-fun-function)
'longlines-search-function) 'longlines-search-function)
(add-to-list 'buffer-substring-filters 'longlines-encode-string) (add-to-list 'buffer-substring-filters 'longlines-encode-string)
@ -149,12 +150,10 @@ are indicated with a symbol."
(add-to-list 'message-indent-citation-function (add-to-list 'message-indent-citation-function
'longlines-decode-region t))) 'longlines-decode-region t)))
(add-hook 'after-change-functions 'longlines-after-change-function nil t)
(add-hook 'post-command-hook 'longlines-post-command-function nil t)
(when longlines-auto-wrap (when longlines-auto-wrap
(auto-fill-mode 0) (auto-fill-mode 0)))
(add-hook 'after-change-functions
'longlines-after-change-function nil t)
(add-hook 'post-command-hook
'longlines-post-command-function nil t)))
;; Turn off longlines mode ;; Turn off longlines mode
(setq buffer-file-format (delete 'longlines buffer-file-format)) (setq buffer-file-format (delete 'longlines buffer-file-format))
(if longlines-showing (if longlines-showing
@ -365,29 +364,27 @@ Hard newlines are left intact."
;; Auto wrap ;; Auto wrap
(defun longlines-auto-wrap (&optional arg) (defun longlines-auto-wrap (&optional arg)
"Turn on automatic line wrapping, and wrap the entire buffer. "Toggle automatic line wrapping.
With optional argument ARG, turn off line wrapping." With optional argument ARG, turn on line wrapping if and only if ARG is positive.
If automatic line wrapping is turned on, wrap the entire buffer."
(interactive "P") (interactive "P")
(remove-hook 'after-change-functions 'longlines-after-change-function t) (and (null arg)
(remove-hook 'post-command-hook 'longlines-post-command-function t) (null longlines-auto-wrap)
(if arg (setq arg 1))
(progn (setq longlines-auto-wrap nil) (if (> (prefix-numeric-value arg) 0)
(message "Auto wrap disabled.")) (let ((mod (buffer-modified-p)))
(setq longlines-auto-wrap t) (setq longlines-auto-wrap t)
(add-hook 'after-change-functions (longlines-wrap-region (point-min) (point-max))
'longlines-after-change-function nil t) (set-buffer-modified-p mod)
(add-hook 'post-command-hook (message "Auto wrap enabled."))
'longlines-post-command-function nil t) (setq longlines-auto-wrap nil)
(let ((mod (buffer-modified-p))) (message "Auto wrap disabled.")))
(longlines-wrap-region (point-min) (point-max))
(set-buffer-modified-p mod))
(message "Auto wrap enabled.")))
(defun longlines-after-change-function (beg end len) (defun longlines-after-change-function (beg end len)
"Update `longlines-wrap-beg' and `longlines-wrap-end'. "Update `longlines-wrap-beg' and `longlines-wrap-end'.
This is called by `after-change-functions' to keep track of the region This is called by `after-change-functions' to keep track of the region
that has changed." that has changed."
(unless undo-in-progress (when (and longlines-auto-wrap (not undo-in-progress))
(setq longlines-wrap-beg (setq longlines-wrap-beg
(if longlines-wrap-beg (min longlines-wrap-beg beg) beg)) (if longlines-wrap-beg (min longlines-wrap-beg beg) beg))
(setq longlines-wrap-end (setq longlines-wrap-end
@ -396,7 +393,7 @@ that has changed."
(defun longlines-post-command-function () (defun longlines-post-command-function ()
"Perform line wrapping on the parts of the buffer that have changed. "Perform line wrapping on the parts of the buffer that have changed.
This is called by `post-command-hook' after each command." This is called by `post-command-hook' after each command."
(when longlines-wrap-beg (when (and longlines-auto-wrap longlines-wrap-beg)
(if (or (eq this-command 'yank) (if (or (eq this-command 'yank)
(eq this-command 'yank-pop)) (eq this-command 'yank-pop))
(longlines-decode-region (point) (mark t))) (longlines-decode-region (point) (mark t)))

View File

@ -113,7 +113,7 @@ option will have no effect until you restart Emacs."
(t '(links uid gid))) ; GNU ls (t '(links uid gid))) ; GNU ls
"*A list of optional file attributes that ls-lisp should display. "*A list of optional file attributes that ls-lisp should display.
It should contain none or more of the symbols: links, uid, gid. It should contain none or more of the symbols: links, uid, gid.
nil (or an empty list) means display none of them. A value of nil (or an empty list) means display none of them.
Concepts come from UNIX: `links' means count of names associated with Concepts come from UNIX: `links' means count of names associated with
the file\; `uid' means user (owner) identifier\; `gid' means group the file\; `uid' means user (owner) identifier\; `gid' means group

View File

@ -1959,12 +1959,13 @@ is non-nil if the user has supplied the password interactively.
(base64-header-field-end (base64-header-field-end
(save-excursion (save-excursion
(goto-char start) (goto-char start)
;; Don't try to decode non-text data.
(and (re-search-forward (and (re-search-forward
"^content-transfer-encoding:\\(\n?[\t ]\\)*base64\\(\n?[\t ]\\)*"
header-end t)
;; Don't try to decode non-text data.
(re-search-forward
"^content-type:\\(\n?[\t ]\\)\\(text\\|message\\)/" "^content-type:\\(\n?[\t ]\\)\\(text\\|message\\)/"
header-end t)
(goto-char start)
(re-search-forward
"^content-transfer-encoding:\\(\n?[\t ]\\)*base64\\(\n?[\t ]\\)*"
header-end t))))) header-end t)))))
(if quoted-printable-header-field-end (if quoted-printable-header-field-end
(save-excursion (save-excursion
@ -2066,14 +2067,14 @@ is non-nil if the user has supplied the password interactively.
header-end t))) header-end t)))
(base64-header-field-end (base64-header-field-end
(and (and
(save-excursion
(re-search-forward
"^content-transfer-encoding:\\(\n?[\t ]\\)*base64\\(\n?[\t ]\\)*"
header-end t))
;; Don't decode non-text data. ;; Don't decode non-text data.
(save-excursion (save-excursion
(re-search-forward (re-search-forward
"^content-type:\\(\n?[\t ]\\)\\(text\\|message\\)/" "^content-type:\\(\n?[\t ]\\)\\(text\\|message\\)/"
header-end t))
(save-excursion
(re-search-forward
"^content-transfer-encoding:\\(\n?[\t ]\\)*base64\\(\n?[\t ]\\)*"
header-end t)))) header-end t))))
(size (size
;; Get the numeric value from the Content-Length field. ;; Get the numeric value from the Content-Length field.

View File

@ -230,7 +230,7 @@ the test is surrounded by calls to `save-excursion' and
`save-match-data'. `save-match-data'.
The categories are sorted by MENU-SORT-KEY. Smaller keys are on top. The categories are sorted by MENU-SORT-KEY. Smaller keys are on top.
nil means don't display this menu. A value of nil means don't display this menu.
MENU-TITLE is really a format. If you add %d in it, the %d is MENU-TITLE is really a format. If you add %d in it, the %d is
replaced with the number of items in that menu. replaced with the number of items in that menu.

View File

@ -2315,7 +2315,7 @@ Sensible values are `cvs-examine', `cvs-status' and `cvs-quickdir'."
;;;###autoload ;;;###autoload
(defcustom cvs-dired-use-hook '(4) (defcustom cvs-dired-use-hook '(4)
"Whether or not opening a CVS directory should run PCL-CVS. "Whether or not opening a CVS directory should run PCL-CVS.
nil means never do it. A value of nil means never do it.
ALWAYS means to always do it unless a prefix argument is given to the ALWAYS means to always do it unless a prefix argument is given to the
command that prompted the opening of the directory. command that prompted the opening of the directory.
Anything else means to do it only if the prefix arg is equal to this value." Anything else means to do it only if the prefix arg is equal to this value."

View File

@ -6,11 +6,11 @@
;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Keywords: wp, print, PostScript ;; Keywords: wp, print, PostScript
;; Version: 6.8.4 ;; Version: 6.9
;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre ;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
(defconst pr-version "6.8.4" (defconst pr-version "6.9"
"printing.el, v 6.8.4 <2005/06/11 vinicius> "printing.el, v 6.9 <2007/02/11 vinicius>
Please send all bug fixes and enhancements to Please send all bug fixes and enhancements to
Vinicius Jose Latorre <viniciusjl@ig.com.br> Vinicius Jose Latorre <viniciusjl@ig.com.br>
@ -1093,46 +1093,456 @@ If SUFFIX is non-nil, add that at the end of the file name."
(set-default-file-modes umask))))) (set-default-file-modes umask)))))
;; GNU Emacs
(defalias 'pr-e-frame-char-height 'frame-char-height) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defalias 'pr-e-frame-char-width 'frame-char-width) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defalias 'pr-e-mouse-pixel-position 'mouse-pixel-position) ;; XEmacs Definitions
;; XEmacs
(defalias 'pr-x-add-submenu 'add-submenu)
(defalias 'pr-x-event-function 'event-function)
(defalias 'pr-x-event-object 'event-object)
(defalias 'pr-x-find-menu-item 'find-menu-item)
(defalias 'pr-x-font-height 'font-height)
(defalias 'pr-x-font-width 'font-width)
(defalias 'pr-x-get-popup-menu-response 'get-popup-menu-response)
(defalias 'pr-x-make-event 'make-event)
(defalias 'pr-x-misc-user-event-p 'misc-user-event-p)
(defalias 'pr-x-relabel-menu-item 'relabel-menu-item)
(defalias 'pr-x-event-x-pixel 'event-x-pixel)
(defalias 'pr-x-event-y-pixel 'event-y-pixel)
(cond (cond
((featurep 'xemacs) ; XEmacs ((featurep 'xemacs) ; XEmacs
(defvar current-menubar nil) ;; XEmacs
(defvar current-mouse-event nil)
(defvar zmacs-region-stays nil)
(defalias 'pr-f-set-keymap-parents 'set-keymap-parents) (defalias 'pr-f-set-keymap-parents 'set-keymap-parents)
(defalias 'pr-f-set-keymap-name 'set-keymap-name) (defalias 'pr-f-set-keymap-name 'set-keymap-name)
;; XEmacs
(defun pr-f-read-string (prompt initial history default) (defun pr-f-read-string (prompt initial history default)
(let ((str (read-string prompt initial))) (let ((str (read-string prompt initial)))
(if (and str (not (string= str ""))) (if (and str (not (string= str "")))
str str
default))) default)))
(defun pr-keep-region-active ()
(setq zmacs-region-stays t)))
;; XEmacs
(defvar zmacs-region-stays nil)
;; XEmacs
(defun pr-keep-region-active ()
(setq zmacs-region-stays t))
;; XEmacs
(defun pr-region-active-p ()
(and pr-auto-region (not zmacs-region-stays) (ps-mark-active-p)))
;; XEmacs
(defun pr-menu-char-height ()
(font-height (face-font 'default)))
;; XEmacs
(defun pr-menu-char-width ()
(font-width (face-font 'default)))
;; XEmacs
(defmacro pr-xemacs-global-menubar (&rest body)
`(save-excursion
(let ((temp (get-buffer-create (make-temp-name " *Temp"))))
;; be sure to access global menubar
(set-buffer temp)
,@body
(kill-buffer temp))))
;; XEmacs
(defun pr-global-menubar (pr-menu-spec)
;; Menu binding
(pr-xemacs-global-menubar
(add-submenu nil (cons "Printing" pr-menu-spec) "Apps"))
(setq pr-menu-print-item nil))
;; XEmacs
(defvar current-mouse-event nil)
(defun pr-menu-position (entry index horizontal)
(make-event
'button-release
(list 'button 1
'x (- (event-x-pixel current-mouse-event) ; X
(* horizontal pr-menu-char-width))
'y (- (event-y-pixel current-mouse-event) ; Y
(* (pr-menu-index entry index) pr-menu-char-height)))))
(defvar pr-menu-position nil)
(defvar pr-menu-state nil)
;; XEmacs
(defvar current-menubar nil) ; to avoid compilation gripes
(defun pr-menu-lookup (path)
(car (find-menu-item current-menubar (cons "Printing" path))))
;; XEmacs
(defun pr-menu-lock (entry index horizontal state path)
(when pr-menu-lock
(or (and pr-menu-position (eq state pr-menu-state))
(setq pr-menu-position (pr-menu-position entry index horizontal)
pr-menu-state state))
(let* ((menu (pr-menu-lookup path))
(result (get-popup-menu-response menu pr-menu-position)))
(and (misc-user-event-p result)
(funcall (event-function result)
(event-object result))))
(setq pr-menu-position nil)))
;; XEmacs
(defalias 'pr-update-mode-line 'set-menubar-dirty-flag)
;; XEmacs
(defvar pr-ps-name-old "PostScript Printers")
(defvar pr-txt-name-old "Text Printers")
(defvar pr-ps-utility-old "PostScript Utility")
(defvar pr-even-or-odd-old "Print All Pages")
;; XEmacs
(defun pr-do-update-menus (&optional force)
(pr-menu-alist pr-ps-printer-alist
'pr-ps-name
'pr-menu-set-ps-title
'("Printing")
'pr-ps-printer-menu-modified
force
pr-ps-name-old
'postscript 2)
(pr-menu-alist pr-txt-printer-alist
'pr-txt-name
'pr-menu-set-txt-title
'("Printing")
'pr-txt-printer-menu-modified
force
pr-txt-name-old
'text 2)
(let ((save-var pr-ps-utility-menu-modified))
(pr-menu-alist pr-ps-utility-alist
'pr-ps-utility
'pr-menu-set-utility-title
'("Printing" "PostScript Print" "File")
'save-var
force
pr-ps-utility-old
nil 1))
(pr-menu-alist pr-ps-utility-alist
'pr-ps-utility
'pr-menu-set-utility-title
'("Printing" "PostScript Preview" "File")
'pr-ps-utility-menu-modified
force
pr-ps-utility-old
nil 1)
(pr-even-or-odd-pages ps-even-or-odd-pages force))
;; XEmacs
(defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
entry index)
(when (and alist (or force (symbol-value modified-sym)))
(pr-xemacs-global-menubar
(add-submenu menu-path
(pr-menu-create name alist var-sym
fun entry index)))
(funcall fun (symbol-value var-sym))
(set modified-sym nil)))
;; XEmacs
(defun pr-relabel-menu-item (newname var-sym)
(pr-xemacs-global-menubar
(relabel-menu-item
(list "Printing" (symbol-value var-sym))
newname)
(set var-sym newname)))
;; XEmacs
(defun pr-menu-set-ps-title (value &optional item entry index)
(pr-relabel-menu-item (format "PostScript Printer: %s" value)
'pr-ps-name-old)
(pr-ps-set-printer value)
(and index
(pr-menu-lock entry index 12 'toggle nil)))
;; XEmacs
(defun pr-menu-set-txt-title (value &optional item entry index)
(pr-relabel-menu-item (format "Text Printer: %s" value)
'pr-txt-name-old)
(pr-txt-set-printer value)
(and index
(pr-menu-lock entry index 12 'toggle nil)))
;; XEmacs
(defun pr-menu-set-utility-title (value &optional item entry index)
(pr-xemacs-global-menubar
(let ((newname (format "%s" value)))
(relabel-menu-item
(list "Printing" "PostScript Print" "File" pr-ps-utility-old)
newname)
(relabel-menu-item
(list "Printing" "PostScript Preview" "File" pr-ps-utility-old)
newname)
(setq pr-ps-utility-old newname)))
(pr-ps-set-utility value)
(and index
(pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
;; XEmacs
(defun pr-even-or-odd-pages (value &optional no-lock)
(pr-relabel-menu-item (cdr (assq value pr-even-or-odd-alist))
'pr-even-or-odd-old)
(setq ps-even-or-odd-pages value)
(or no-lock
(pr-menu-lock 'postscript-options 8 12 'toggle nil)))
)
(t ; GNU Emacs (t ; GNU Emacs
(defvar deactivate-mark nil) ;; Do nothing
)) ; end cond featurep
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; GNU Emacs Definitions
(cond
((featurep 'xemacs) ; XEmacs
;; Do nothing
)
(t ; GNU Emacs
;; GNU Emacs
(defalias 'pr-f-set-keymap-parents 'set-keymap-parent) (defalias 'pr-f-set-keymap-parents 'set-keymap-parent)
(defalias 'pr-f-set-keymap-name 'ignore) (defalias 'pr-f-set-keymap-name 'ignore)
(defalias 'pr-f-read-string 'read-string) (defalias 'pr-f-read-string 'read-string)
;; GNU Emacs
(defvar deactivate-mark nil)
;; GNU Emacs
(defun pr-keep-region-active () (defun pr-keep-region-active ()
(setq deactivate-mark nil)))) (setq deactivate-mark nil))
;; GNU Emacs
(defun pr-region-active-p ()
(and pr-auto-region transient-mark-mode mark-active))
;; GNU Emacs
(defun pr-menu-char-height ()
(frame-char-height))
;; GNU Emacs
(defun pr-menu-char-width ()
(frame-char-width))
;; GNU Emacs
;; Menu binding
(require 'easymenu)
;; Replace existing "print" item by "Printing" item.
;; If you're changing this file, you'll load it a second,
;; third... time, but "print" item exists only in the first load.
(eval-and-compile
(cond
;; GNU Emacs 20
((< emacs-major-version 21)
(defun pr-global-menubar (pr-menu-spec)
(easy-menu-change '("tools") "Printing" pr-menu-spec pr-menu-print-item)
(when pr-menu-print-item
(easy-menu-remove-item nil '("tools") pr-menu-print-item)
(setq pr-menu-print-item nil
pr-menu-bar (vector 'menu-bar 'tools
(pr-get-symbol "Printing")))))
)
;; GNU Emacs 21 & 22
(t
(defun pr-global-menubar (pr-menu-spec)
(let ((menu-file (if (= emacs-major-version 21)
'("menu-bar" "files") ; GNU Emacs 21
'("menu-bar" "file")))) ; GNU Emacs 22 or higher
(cond
(pr-menu-print-item
(easy-menu-add-item global-map menu-file
(easy-menu-create-menu "Print" pr-menu-spec)
"print-buffer")
(dolist (item '("print-buffer" "print-region"
"ps-print-buffer-faces" "ps-print-region-faces"
"ps-print-buffer" "ps-print-region"))
(easy-menu-remove-item global-map menu-file item))
(setq pr-menu-print-item nil
pr-menu-bar (vector 'menu-bar
(pr-get-symbol (nth 1 menu-file))
(pr-get-symbol "Print"))))
(t
(easy-menu-add-item global-map menu-file
(easy-menu-create-menu "Print" pr-menu-spec)))
)))
)))
(eval-and-compile
(cond
(ps-windows-system
;; GNU Emacs for Windows 9x/NT
(defun pr-menu-position (entry index horizontal)
(let ((pos (cdr (mouse-pixel-position))))
(list
(list (or (car pos) 0) ; X
(- (or (cdr pos) 0) ; Y
(* (pr-menu-index entry index) pr-menu-char-height)))
(selected-frame)))) ; frame
)
(t
;; GNU Emacs
(defun pr-menu-position (entry index horizontal)
(let ((pos (cdr (mouse-pixel-position))))
(list
(list (- (or (car pos) 0) ; X
(* horizontal pr-menu-char-width))
(- (or (cdr pos) 0) ; Y
(* (pr-menu-index entry index) pr-menu-char-height)))
(selected-frame)))) ; frame
)))
(defvar pr-menu-position nil)
(defvar pr-menu-state nil)
;; GNU Emacs
(defun pr-menu-lookup (path)
(lookup-key global-map
(if path
(vconcat pr-menu-bar
(mapcar 'pr-get-symbol
(if (listp path)
path
(list path))))
pr-menu-bar)))
;; GNU Emacs
(defun pr-menu-lock (entry index horizontal state path)
(when pr-menu-lock
(or (and pr-menu-position (eq state pr-menu-state))
(setq pr-menu-position (pr-menu-position entry index horizontal)
pr-menu-state state))
(let* ((menu (pr-menu-lookup path))
(result (x-popup-menu pr-menu-position menu)))
(and result
(let ((command (lookup-key menu (vconcat result))))
(if (fboundp command)
(funcall command)
(eval command)))))
(setq pr-menu-position nil)))
;; GNU Emacs
(defalias 'pr-update-mode-line 'force-mode-line-update)
;; GNU Emacs
(defun pr-do-update-menus (&optional force)
(pr-menu-alist pr-ps-printer-alist
'pr-ps-name
'pr-menu-set-ps-title
"PostScript Printers"
'pr-ps-printer-menu-modified
force
"PostScript Printers"
'postscript 2)
(pr-menu-alist pr-txt-printer-alist
'pr-txt-name
'pr-menu-set-txt-title
"Text Printers"
'pr-txt-printer-menu-modified
force
"Text Printers"
'text 2)
(let ((save-var pr-ps-utility-menu-modified))
(pr-menu-alist pr-ps-utility-alist
'pr-ps-utility
'pr-menu-set-utility-title
'("PostScript Print" "File" "PostScript Utility")
'save-var
force
"PostScript Utility"
nil 1))
(pr-menu-alist pr-ps-utility-alist
'pr-ps-utility
'pr-menu-set-utility-title
'("PostScript Preview" "File" "PostScript Utility")
'pr-ps-utility-menu-modified
force
"PostScript Utility"
nil 1)
(pr-even-or-odd-pages ps-even-or-odd-pages force))
;; GNU Emacs
(defun pr-menu-get-item (name-list)
;; NAME-LIST is a string or a list of strings.
(or (listp name-list)
(setq name-list (list name-list)))
(and name-list
(let* ((reversed (reverse name-list))
(name (pr-get-symbol (car reversed)))
(path (nreverse (cdr reversed)))
(menu (lookup-key
global-map
(vconcat pr-menu-bar
(mapcar 'pr-get-symbol path)))))
(assq name (nthcdr 2 menu)))))
;; GNU Emacs
(defvar pr-temp-menu nil)
;; GNU Emacs
(defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
entry index)
(when (and alist (or force (symbol-value modified-sym)))
(easy-menu-define pr-temp-menu nil ""
(pr-menu-create name alist var-sym fun entry index))
(let ((item (pr-menu-get-item menu-path)))
(and item
(let* ((binding (nthcdr 3 item))
(key-binding (cdr binding)))
(setcar binding pr-temp-menu)
(and key-binding (listp (car key-binding))
(setcdr binding (cdr key-binding))) ; skip KEY-BINDING
(funcall fun (symbol-value var-sym) item))))
(set modified-sym nil)))
;; GNU Emacs
(defun pr-menu-set-item-name (item name)
(and item
(setcar (nthcdr 2 item) name))) ; ITEM-NAME
;; GNU Emacs
(defun pr-menu-set-ps-title (value &optional item entry index)
(pr-menu-set-item-name (or item
(pr-menu-get-item "PostScript Printers"))
(format "PostScript Printer: %s" value))
(pr-ps-set-printer value)
(and index
(pr-menu-lock entry index 12 'toggle nil)))
;; GNU Emacs
(defun pr-menu-set-txt-title (value &optional item entry index)
(pr-menu-set-item-name (or item
(pr-menu-get-item "Text Printers"))
(format "Text Printer: %s" value))
(pr-txt-set-printer value)
(and index
(pr-menu-lock entry index 12 'toggle nil)))
;; GNU Emacs
(defun pr-menu-set-utility-title (value &optional item entry index)
(let ((name (symbol-name value)))
(if item
(pr-menu-set-item-name item name)
(pr-menu-set-item-name
(pr-menu-get-item
'("PostScript Print" "File" "PostScript Utility"))
name)
(pr-menu-set-item-name
(pr-menu-get-item
'("PostScript Preview" "File" "PostScript Utility"))
name)))
(pr-ps-set-utility value)
(and index
(pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
;; GNU Emacs
(defun pr-even-or-odd-pages (value &optional no-lock)
(pr-menu-set-item-name (pr-menu-get-item "Print All Pages")
(cdr (assq value pr-even-or-odd-alist)))
(setq ps-even-or-odd-pages value)
(or no-lock
(pr-menu-lock 'postscript-options 8 12 'toggle nil)))
)) ; end cond featurep
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -1592,7 +2002,7 @@ DEFAULT It's a way to set default values when this entry is selected.
(VARIABLE . VALUE) (VARIABLE . VALUE)
That associates VARIABLE with VALUE. when this entry is Which associates VARIABLE with VALUE. When this entry is
selected, it's executed the following command: selected, it's executed the following command:
(set VARIABLE (eval VALUE)) (set VARIABLE (eval VALUE))
@ -2147,7 +2557,7 @@ DEFAULT It's a way to set default values when this entry is selected.
(VARIABLE-SYM . VALUE) (VARIABLE-SYM . VALUE)
That associates VARIABLE-SYM with VALUE. when this entry is Which associates VARIABLE-SYM with VALUE. When this entry is
selected, it's executed the following command: selected, it's executed the following command:
(set (make-local-variable VARIABLE-SYM) (eval VALUE)) (set (make-local-variable VARIABLE-SYM) (eval VALUE))
@ -2327,7 +2737,7 @@ DEFAULT It's a way to set default values when this entry is selected.
(VARIABLE . VALUE) (VARIABLE . VALUE)
That associates VARIABLE with VALUE. when this entry is Which associates VARIABLE with VALUE. When this entry is
selected, it's executed the following command: selected, it's executed the following command:
(set VARIABLE (eval VALUE)) (set VARIABLE (eval VALUE))
@ -2452,11 +2862,7 @@ See also `pr-menu-char-height' and `pr-menu-char-width'."
:group 'printing) :group 'printing)
(defcustom pr-menu-char-height (defcustom pr-menu-char-height (pr-menu-char-height)
(cond ((featurep 'xemacs) ; XEmacs
(pr-x-font-height (face-font 'default)))
(t ; GNU Emacs
(pr-e-frame-char-height)))
"*Specify menu char height in pixels. "*Specify menu char height in pixels.
This variable is used to guess which vertical position should be locked the This variable is used to guess which vertical position should be locked the
@ -2468,11 +2874,7 @@ See also `pr-menu-lock' and `pr-menu-char-width'."
:group 'printing) :group 'printing)
(defcustom pr-menu-char-width (defcustom pr-menu-char-width (pr-menu-char-width)
(cond ((featurep 'xemacs) ; XEmacs
(pr-x-font-width (face-font 'default)))
(t ; GNU Emacs
(pr-e-frame-char-width)))
"*Specify menu char width in pixels. "*Specify menu char width in pixels.
This variable is used to guess which horizontal position should be locked the This variable is used to guess which horizontal position should be locked the
@ -2544,7 +2946,7 @@ SETTING It's a cons like:
(VARIABLE . VALUE) (VARIABLE . VALUE)
That associates VARIABLE with VALUE. when this entry is Which associates VARIABLE with VALUE. When this entry is
selected, it's executed the following command: selected, it's executed the following command:
* If LOCAL is non-nil: * If LOCAL is non-nil:
@ -2772,15 +3174,6 @@ See `pr-ps-printer-alist'.")
;; Keys & Menus ;; Keys & Menus
(defmacro pr-xemacs-global-menubar (&rest body)
`(save-excursion
(let ((temp (get-buffer-create (make-temp-name " *Temp"))))
;; be sure to access global menubar
(set-buffer temp)
,@body
(kill-buffer temp))))
(defsubst pr-visible-p (key) (defsubst pr-visible-p (key)
(memq key pr-visible-entry-list)) (memq key pr-visible-entry-list))
@ -2802,16 +3195,6 @@ See `pr-ps-printer-alist'.")
'easy-menu-intern 'easy-menu-intern
(lambda (s) (if (stringp s) (intern s) s)))) (lambda (s) (if (stringp s) (intern s) s))))
(cond
((featurep 'xemacs) ; XEmacs
(defvar zmacs-region-stays nil) ; to avoid compilation gripes
(defun pr-region-active-p ()
(and pr-auto-region (not zmacs-region-stays) (ps-mark-active-p))))
(t ; GNU Emacs
(defun pr-region-active-p ()
(and pr-auto-region transient-mark-mode mark-active))))
(defconst pr-menu-spec (defconst pr-menu-spec
;; Menu mapping: ;; Menu mapping:
@ -3070,51 +3453,7 @@ menu.
Calls `pr-update-menus' to adjust menus." Calls `pr-update-menus' to adjust menus."
(interactive) (interactive)
(cond (pr-global-menubar pr-menu-spec)
((featurep 'xemacs) ; XEmacs
;; Menu binding
(pr-xemacs-global-menubar
(pr-x-add-submenu nil (cons "Printing" pr-menu-spec) "Apps"))
(setq pr-menu-print-item nil))
(t ; GNU Emacs
;; Menu binding
(require 'easymenu)
;; Replace existing "print" item by "Printing" item.
;; If you're changing this file, you'll load it a second,
;; third... time, but "print" item exists only in the first load.
(cond
;; Emacs 20
((< emacs-major-version 21)
(easy-menu-change '("tools") "Printing" pr-menu-spec pr-menu-print-item)
(when pr-menu-print-item
(easy-menu-remove-item nil '("tools") pr-menu-print-item)
(setq pr-menu-print-item nil
pr-menu-bar (vector 'menu-bar 'tools
(pr-get-symbol "Printing")))))
;; Emacs 21 & 22
(t
(let ((menu-file (if (= emacs-major-version 21)
'("menu-bar" "files") ; Emacs 21
'("menu-bar" "file")))) ; Emacs 22 or higher
(cond
(pr-menu-print-item
(easy-menu-add-item global-map menu-file
(easy-menu-create-menu "Print" pr-menu-spec)
"print-buffer")
(dolist (item '("print-buffer" "print-region"
"ps-print-buffer-faces" "ps-print-region-faces"
"ps-print-buffer" "ps-print-region"))
(easy-menu-remove-item global-map menu-file item))
(setq pr-menu-print-item nil
pr-menu-bar (vector 'menu-bar
(pr-get-symbol (nth 1 menu-file))
(pr-get-symbol "Print"))))
(t
(easy-menu-add-item global-map menu-file
(easy-menu-create-menu "Print" pr-menu-spec)))
))))))
(pr-update-menus t)) (pr-update-menus t))
@ -4402,7 +4741,7 @@ Interactively, you have the following situations:
C-u 2 M-x pr-ps-fast-fire RET C-u 2 M-x pr-ps-fast-fire RET
The command prompts the user for a N-UP value, then for a current The command prompts the user for a N-UP value, then for a current
PostScript printer and, finally, for a file name. Then change the active PostScript printer and, finally, for a file name. Then change the active
printer to that choosen by user and saves the PostScript image in printer to that chosen by user and saves the PostScript image in
that file instead of sending it to the printer. that file instead of sending it to the printer.
@ -4421,7 +4760,7 @@ zero and the argument SELECT is treated as follows:
If it's an integer greater or equal to 2, the command prompts the user for a If it's an integer greater or equal to 2, the command prompts the user for a
current PostScript printer and for a file name. Then change the active current PostScript printer and for a file name. Then change the active
printer to that choosen by user and saves the PostScript image in that file printer to that chosen by user and saves the PostScript image in that file
instead of sending it to the printer. instead of sending it to the printer.
If it's a symbol which it's defined in `pr-ps-printer-alist', it's the new If it's a symbol which it's defined in `pr-ps-printer-alist', it's the new
@ -4841,94 +5180,6 @@ See `pr-visible-entry-alist'.")
(+ index 2)) (+ index 2))
(defvar pr-menu-position nil)
(defvar pr-menu-state nil)
(cond
((featurep 'xemacs)
;; XEmacs
(defvar current-mouse-event nil) ; to avoid compilation gripes
(defun pr-menu-position (entry index horizontal)
(pr-x-make-event
'button-release
(list 'button 1
'x (- (pr-x-event-x-pixel current-mouse-event) ; X
(* horizontal pr-menu-char-width))
'y (- (pr-x-event-y-pixel current-mouse-event) ; Y
(* (pr-menu-index entry index) pr-menu-char-height)))))
)
(ps-windows-system
;; GNU Emacs for Windows 9x/NT
(defun pr-menu-position (entry index horizontal)
(let ((pos (cdr (pr-e-mouse-pixel-position))))
(list
(list (or (car pos) 0) ; X
(- (or (cdr pos) 0) ; Y
(* (pr-menu-index entry index) pr-menu-char-height)))
(selected-frame)))) ; frame
)
(t
;; GNU Emacs
(defun pr-menu-position (entry index horizontal)
(let ((pos (cdr (pr-e-mouse-pixel-position))))
(list
(list (- (or (car pos) 0) ; X
(* horizontal pr-menu-char-width))
(- (or (cdr pos) 0) ; Y
(* (pr-menu-index entry index) pr-menu-char-height)))
(selected-frame)))) ; frame
))
(cond
((featurep 'xemacs)
;; XEmacs
(defvar current-menubar nil) ; to avoid compilation gripes
(defun pr-menu-lookup (path)
(car (pr-x-find-menu-item current-menubar (cons "Printing" path))))
;; XEmacs
(defun pr-menu-lock (entry index horizontal state path)
(when pr-menu-lock
(or (and pr-menu-position (eq state pr-menu-state))
(setq pr-menu-position (pr-menu-position entry index horizontal)
pr-menu-state state))
(let* ((menu (pr-menu-lookup path))
(result (pr-x-get-popup-menu-response menu pr-menu-position)))
(and (pr-x-misc-user-event-p result)
(funcall (pr-x-event-function result)
(pr-x-event-object result))))
(setq pr-menu-position nil))))
(t
;; GNU Emacs
(defun pr-menu-lookup (path)
(lookup-key global-map
(if path
(vconcat pr-menu-bar
(mapcar 'pr-get-symbol
(if (listp path)
path
(list path))))
pr-menu-bar)))
;; GNU Emacs
(defun pr-menu-lock (entry index horizontal state path)
(when pr-menu-lock
(or (and pr-menu-position (eq state pr-menu-state))
(setq pr-menu-position (pr-menu-position entry index horizontal)
pr-menu-state state))
(let* ((menu (pr-menu-lookup path))
(result (x-popup-menu pr-menu-position menu)))
(and result
(let ((command (lookup-key menu (vconcat result))))
(if (fboundp command)
(funcall command)
(eval command)))))
(setq pr-menu-position nil)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Printer & Utility Selection ;; Printer & Utility Selection
@ -4991,237 +5242,6 @@ If menu binding was not done, calls `pr-menu-bind'."
alist))) alist)))
(cond
((featurep 'xemacs)
;; XEmacs
(defalias 'pr-update-mode-line 'set-menubar-dirty-flag)
;; XEmacs
(defvar pr-ps-name-old "PostScript Printers")
(defvar pr-txt-name-old "Text Printers")
(defvar pr-ps-utility-old "PostScript Utility")
(defvar pr-even-or-odd-old "Print All Pages")
;; XEmacs
(defun pr-do-update-menus (&optional force)
(pr-menu-alist pr-ps-printer-alist
'pr-ps-name
'pr-menu-set-ps-title
'("Printing")
'pr-ps-printer-menu-modified
force
pr-ps-name-old
'postscript 2)
(pr-menu-alist pr-txt-printer-alist
'pr-txt-name
'pr-menu-set-txt-title
'("Printing")
'pr-txt-printer-menu-modified
force
pr-txt-name-old
'text 2)
(let ((save-var pr-ps-utility-menu-modified))
(pr-menu-alist pr-ps-utility-alist
'pr-ps-utility
'pr-menu-set-utility-title
'("Printing" "PostScript Print" "File")
'save-var
force
pr-ps-utility-old
nil 1))
(pr-menu-alist pr-ps-utility-alist
'pr-ps-utility
'pr-menu-set-utility-title
'("Printing" "PostScript Preview" "File")
'pr-ps-utility-menu-modified
force
pr-ps-utility-old
nil 1)
(pr-even-or-odd-pages ps-even-or-odd-pages force))
;; XEmacs
(defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
entry index)
(when (and alist (or force (symbol-value modified-sym)))
(pr-xemacs-global-menubar
(pr-x-add-submenu menu-path
(pr-menu-create name alist var-sym
fun entry index)))
(funcall fun (symbol-value var-sym))
(set modified-sym nil)))
;; XEmacs
(defun pr-relabel-menu-item (newname var-sym)
(pr-xemacs-global-menubar
(pr-x-relabel-menu-item
(list "Printing" (symbol-value var-sym))
newname)
(set var-sym newname)))
;; XEmacs
(defun pr-menu-set-ps-title (value &optional item entry index)
(pr-relabel-menu-item (format "PostScript Printer: %s" value)
'pr-ps-name-old)
(pr-ps-set-printer value)
(and index
(pr-menu-lock entry index 12 'toggle nil)))
;; XEmacs
(defun pr-menu-set-txt-title (value &optional item entry index)
(pr-relabel-menu-item (format "Text Printer: %s" value)
'pr-txt-name-old)
(pr-txt-set-printer value)
(and index
(pr-menu-lock entry index 12 'toggle nil)))
;; XEmacs
(defun pr-menu-set-utility-title (value &optional item entry index)
(pr-xemacs-global-menubar
(let ((newname (format "%s" value)))
(pr-x-relabel-menu-item
(list "Printing" "PostScript Print" "File" pr-ps-utility-old)
newname)
(pr-x-relabel-menu-item
(list "Printing" "PostScript Preview" "File" pr-ps-utility-old)
newname)
(setq pr-ps-utility-old newname)))
(pr-ps-set-utility value)
(and index
(pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
;; XEmacs
(defun pr-even-or-odd-pages (value &optional no-lock)
(pr-relabel-menu-item (cdr (assq value pr-even-or-odd-alist))
'pr-even-or-odd-old)
(setq ps-even-or-odd-pages value)
(or no-lock
(pr-menu-lock 'postscript-options 8 12 'toggle nil))))
(t
;; GNU Emacs
(defalias 'pr-update-mode-line 'force-mode-line-update)
;; GNU Emacs
(defun pr-do-update-menus (&optional force)
(pr-menu-alist pr-ps-printer-alist
'pr-ps-name
'pr-menu-set-ps-title
"PostScript Printers"
'pr-ps-printer-menu-modified
force
"PostScript Printers"
'postscript 2)
(pr-menu-alist pr-txt-printer-alist
'pr-txt-name
'pr-menu-set-txt-title
"Text Printers"
'pr-txt-printer-menu-modified
force
"Text Printers"
'text 2)
(let ((save-var pr-ps-utility-menu-modified))
(pr-menu-alist pr-ps-utility-alist
'pr-ps-utility
'pr-menu-set-utility-title
'("PostScript Print" "File" "PostScript Utility")
'save-var
force
"PostScript Utility"
nil 1))
(pr-menu-alist pr-ps-utility-alist
'pr-ps-utility
'pr-menu-set-utility-title
'("PostScript Preview" "File" "PostScript Utility")
'pr-ps-utility-menu-modified
force
"PostScript Utility"
nil 1)
(pr-even-or-odd-pages ps-even-or-odd-pages force))
;; GNU Emacs
(defun pr-menu-get-item (name-list)
;; NAME-LIST is a string or a list of strings.
(or (listp name-list)
(setq name-list (list name-list)))
(and name-list
(let* ((reversed (reverse name-list))
(name (pr-get-symbol (car reversed)))
(path (nreverse (cdr reversed)))
(menu (lookup-key
global-map
(vconcat pr-menu-bar
(mapcar 'pr-get-symbol path)))))
(assq name (nthcdr 2 menu)))))
;; GNU Emacs
(defvar pr-temp-menu nil)
;; GNU Emacs
(defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
entry index)
(when (and alist (or force (symbol-value modified-sym)))
(easy-menu-define pr-temp-menu nil ""
(pr-menu-create name alist var-sym fun entry index))
(let ((item (pr-menu-get-item menu-path)))
(and item
(let* ((binding (nthcdr 3 item))
(key-binding (cdr binding)))
(setcar binding pr-temp-menu)
(and key-binding (listp (car key-binding))
(setcdr binding (cdr key-binding))) ; skip KEY-BINDING
(funcall fun (symbol-value var-sym) item))))
(set modified-sym nil)))
;; GNU Emacs
(defun pr-menu-set-item-name (item name)
(and item
(setcar (nthcdr 2 item) name))) ; ITEM-NAME
;; GNU Emacs
(defun pr-menu-set-ps-title (value &optional item entry index)
(pr-menu-set-item-name (or item
(pr-menu-get-item "PostScript Printers"))
(format "PostScript Printer: %s" value))
(pr-ps-set-printer value)
(and index
(pr-menu-lock entry index 12 'toggle nil)))
;; GNU Emacs
(defun pr-menu-set-txt-title (value &optional item entry index)
(pr-menu-set-item-name (or item
(pr-menu-get-item "Text Printers"))
(format "Text Printer: %s" value))
(pr-txt-set-printer value)
(and index
(pr-menu-lock entry index 12 'toggle nil)))
;; GNU Emacs
(defun pr-menu-set-utility-title (value &optional item entry index)
(let ((name (symbol-name value)))
(if item
(pr-menu-set-item-name item name)
(pr-menu-set-item-name
(pr-menu-get-item
'("PostScript Print" "File" "PostScript Utility"))
name)
(pr-menu-set-item-name
(pr-menu-get-item
'("PostScript Preview" "File" "PostScript Utility"))
name)))
(pr-ps-set-utility value)
(and index
(pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
;; GNU Emacs
(defun pr-even-or-odd-pages (value &optional no-lock)
(pr-menu-set-item-name (pr-menu-get-item "Print All Pages")
(cdr (assq value pr-even-or-odd-alist)))
(setq ps-even-or-odd-pages value)
(or no-lock
(pr-menu-lock 'postscript-options 8 12 'toggle nil)))))
(defun pr-ps-set-utility (value) (defun pr-ps-set-utility (value)
(let ((item (cdr (assq value pr-ps-utility-alist)))) (let ((item (cdr (assq value pr-ps-utility-alist))))
(or item (or item

View File

@ -1448,7 +1448,7 @@ Turning the mode on runs the normal hook `compilation-minor-mode-hook'."
(with-no-warnings (with-no-warnings
(if compilation-finish-function (if compilation-finish-function
(funcall compilation-finish-function (current-buffer) msg))) (funcall compilation-finish-function (current-buffer) msg)))
(run-hook-with-args compilation-finish-functions (current-buffer) msg))) (run-hook-with-args 'compilation-finish-functions (current-buffer) msg)))
;; Called when compilation process changes state. ;; Called when compilation process changes state.
(defun compilation-sentinel (proc msg) (defun compilation-sentinel (proc msg)

View File

@ -10,11 +10,11 @@
;; Maintainer: Kenichi Handa <handa@m17n.org> (multi-byte characters) ;; Maintainer: Kenichi Handa <handa@m17n.org> (multi-byte characters)
;; Vinicius Jose Latorre <viniciusjl@ig.com.br> ;; Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Keywords: wp, print, PostScript ;; Keywords: wp, print, PostScript
;; Version: 6.7.3 ;; Version: 6.7.4
;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre ;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
(defconst ps-print-version "6.7.3" (defconst ps-print-version "6.7.4"
"ps-print.el, v 6.7.3 <2007/02/06 vinicius> "ps-print.el, v 6.7.4 <2007/05/13 vinicius>
Vinicius's last change version -- this file may have been edited as part of Vinicius's last change version -- this file may have been edited as part of
Emacs without changes to the version number. When reporting bugs, please also Emacs without changes to the version number. When reporting bugs, please also
@ -5817,21 +5817,27 @@ XSTART YSTART are the relative position for the first page in a sheet.")
(ps-get-size (symbol-value font-sym) "font size" font-sym)) (ps-get-size (symbol-value font-sym) "font size" font-sym))
(defun ps-rgb-color (color default) (defun ps-rgb-color (color unspecified default)
(cond ((and color (listp color) (= (length color) 3) (cond
(let ((cl color) ;; (float float float) ==> (R G B)
(ok t) e) ((and color (listp color) (= (length color) 3)
(while (and ok cl) (let ((cl color)
(setq e (car cl) (ok t) e)
cl (cdr cl) (while (and ok cl)
ok (and (floatp e) (<= 0.0 e) (<= e 1.0)))) (setq e (car cl)
ok)) cl (cdr cl)
color) ok (and (floatp e) (<= 0.0 e) (<= e 1.0))))
((and (floatp color) (<= 0.0 color) (<= color 1.0)) ok))
(list color color color)) color)
((stringp color) (ps-color-scale color)) ;; float ==> 0.0 = black .. 1.0 = white
(t (list default default default)) ((and (floatp color) (<= 0.0 color) (<= color 1.0))
)) (list color color color))
;; "colorName" but different from "unspecified-[bf]g"
((and (stringp color) (not (string= color unspecified)))
(ps-color-scale color))
;; ok, use the default
(t
(list default default default))))
(defun ps-begin-job (genfunc) (defun ps-begin-job (genfunc)
@ -5913,6 +5919,7 @@ XSTART YSTART are the relative position for the first page in a sheet.")
(ps-face-background-name 'default)) (ps-face-background-name 'default))
(t (t
ps-default-bg)) ps-default-bg))
"unspecified-bg"
1.0) 1.0)
ps-default-foreground (ps-rgb-color ps-default-foreground (ps-rgb-color
(cond (cond
@ -5924,6 +5931,7 @@ XSTART YSTART are the relative position for the first page in a sheet.")
(ps-face-foreground-name 'default)) (ps-face-foreground-name 'default))
(t (t
ps-default-fg)) ps-default-fg))
"unspecified-fg"
0.0) 0.0)
ps-default-color (and (eq ps-print-color-p t) ps-default-foreground) ps-default-color (and (eq ps-print-color-p t) ps-default-foreground)
ps-current-color ps-default-color ps-current-color ps-default-color

View File

@ -3196,7 +3196,7 @@ will pop the mark twice, and
C-u \\[set-mark-command] \\[set-mark-command] \\[set-mark-command] C-u \\[set-mark-command] \\[set-mark-command] \\[set-mark-command]
will pop the mark three times. will pop the mark three times.
nil means \\[set-mark-command]'s behavior does not change A value of nil means \\[set-mark-command]'s behavior does not change
after C-u \\[set-mark-command]." after C-u \\[set-mark-command]."
:type 'boolean :type 'boolean
:group 'editing-basics) :group 'editing-basics)
@ -3263,12 +3263,11 @@ purposes. See the documentation of `set-mark' for more information."
If the last global mark pushed was not in the current buffer, If the last global mark pushed was not in the current buffer,
also push LOCATION on the global mark ring. also push LOCATION on the global mark ring.
Display `Mark set' unless the optional second arg NOMSG is non-nil. Display `Mark set' unless the optional second arg NOMSG is non-nil.
In Transient Mark mode, activate mark if optional third arg ACTIVATE non-nil.
Novice Emacs Lisp programmers often try to use the mark for the wrong Novice Emacs Lisp programmers often try to use the mark for the wrong
purposes. See the documentation of `set-mark' for more information. purposes. See the documentation of `set-mark' for more information.
In Transient Mark mode, this does not activate the mark." In Transient Mark mode, activate mark if optional third arg ACTIVATE non-nil."
(unless (null (mark t)) (unless (null (mark t))
(setq mark-ring (cons (copy-marker (mark-marker)) mark-ring)) (setq mark-ring (cons (copy-marker (mark-marker)) mark-ring))
(when (> (length mark-ring) mark-ring-max) (when (> (length mark-ring) mark-ring-max)

View File

@ -1,7 +1,7 @@
;;; t-mouse.el --- mouse support within the text terminal ;;; t-mouse.el --- mouse support within the text terminal
;; Authors: Alessandro Rubini and Ian T Zimmerman ;; Author: Nick Roberts <nickrob@gnu.org>
;; Maintainer: Nick Roberts <nickrob@gnu.org> ;; Maintainer: FSF
;; Keywords: mouse gpm linux ;; Keywords: mouse gpm linux
;; Copyright (C) 1994, 1995, 1998, 2006, 2007 Free Software Foundation, Inc. ;; Copyright (C) 1994, 1995, 1998, 2006, 2007 Free Software Foundation, Inc.
@ -25,282 +25,43 @@
;;; Commentary: ;;; Commentary:
;; This package provides access to mouse event as reported by the ;; This package provides access to mouse event as reported by the gpm-Linux
;; gpm-Linux package. It uses the program "mev" to get mouse events. ;; package. It tries to reproduce the functionality offered by Emacs under X.
;; It tries to reproduce the functionality offered by Emacs under X.
;; The "gpm" server runs under Linux, so this package is rather ;; The "gpm" server runs under Linux, so this package is rather
;; Linux-dependent. ;; Linux-dependent.
;; Modified by Nick Roberts for Emacs 22. In particular, the mode-line is ;; The file, t-mouse.el was originally written by Alessandro Rubini and Ian T
;; now position sensitive. ;; Zimmerman, and Emacs communicated with gpm through a client program called
;; mev. Now the interface with gpm is directly through a Unix socket, so this
(defvar t-mouse-process nil ;; file is reduced to a single minor mode macro call.
"Embeds the process which passes mouse events to Emacs.
It is used by the program t-mouse.")
(defvar t-mouse-filter-accumulator ""
"Accumulates input from the mouse reporting process.")
(defvar t-mouse-debug-buffer nil
"Events normally posted to command queue are printed here in debug mode.
See `t-mouse-start-debug'.")
(defvar t-mouse-current-xy '(0 . 0)
"Stores the last mouse position t-mouse has been told about.")
(defvar t-mouse-drag-start nil
"Whenever a drag starts in a special part of a window
\(not the text), the `translated' starting coordinates including the
window and part involved are saved here. This is necessary lest they
get re-translated when the button goes up, at which time window
configuration may have changed.")
(defvar t-mouse-prev-set-selection-function 'x-set-selection)
(defvar t-mouse-prev-get-selection-function 'x-get-selection)
(defvar t-mouse-swap-alt-keys nil
"When set, Emacs will handle mouse events with the right Alt
\(a.k.a. Alt-Ger) modifier, not with the regular left Alt modifier.
Useful for people who play strange games with their keyboard tables.")
(defvar t-mouse-fix-21 nil
"Enable brain-dead chords for 2 button mice.")
;;
;;; Code: ;;; Code:
;; get the number of the current virtual console
(defun t-mouse-tty ()
"Return number of virtual terminal Emacs is running on, as a string.
For example, \"2\" for /dev/tty2."
(with-temp-buffer
(call-process "ps" nil t nil "h" (format "%s" (emacs-pid)))
(goto-char (point-min))
(if (or
;; Many versions of "ps", all different....
(re-search-forward " +tty\\(.?[0-9a-f]\\)" nil t)
(re-search-forward "p \\([0-9a-f]\\)" nil t)
(re-search-forward "v0\\([0-9a-f]\\)" nil t)
(re-search-forward "[0-9]+ +\\([0-9]+\\)" nil t)
(re-search-forward "[\\t ]*[0-9]+[\\t ]+\\([0-9]+\\)" nil t)
(re-search-forward " +vc/\\(.?[0-9a-f]\\)" nil t)
(re-search-forward " +pts/\\(.?[0-9a-f]\\)" nil t))
(buffer-substring (match-beginning 1) (match-end 1)))))
;; due to a horrible kludge in Emacs' keymap handler
;; (read_key_sequence) mouse clicks on funny parts of windows generate
;; TWO events, the first being a dummy of the sort '(mode-line).
;; That's why Per Abrahamsen's code in xt-mouse.el doesn't work for
;; the modeline, for instance.
;; now get this: the Emacs C code that generates these fake events
;; depends on certain things done by the very lowest level input
;; handlers; namely the symbols for the events (for instance
;; 'C-S-double-mouse-2) must have an 'event-kind property, set to
;; 'mouse-click. Since events from unread-command-events do not pass
;; through the low level handlers, they don't get this property unless
;; I set it myself. I imagine this has caused innumerable attempts by
;; hackers to do things similar to t-mouse to lose.
;; The next page of code is devoted to fixing this ugly problem.
;; WOW! a fully general powerset generator
;; (C) Ian Zimmerman Mon Mar 23 12:00:16 PST 1998 :-)
(defun t-mouse-powerset (l)
(if (null l) '(nil)
(let ((l1 (t-mouse-powerset (cdr l)))
(first (nth 0 l)))
(append
(mapcar (function (lambda (l) (cons first l))) l1) l1))))
;; and a slightly less general cartesian product
(defun t-mouse-cartesian (l1 l2)
(if (null l1) l2
(append (mapcar (function (lambda (x) (append (nth 0 l1) x))) l2)
(t-mouse-cartesian (cdr l1) l2))))
(let* ((modifier-sets (t-mouse-powerset '(control meta shift)))
(typed-sets (t-mouse-cartesian '((down) (drag))
'((mouse-1) (mouse-2) (mouse-3))))
(multipled-sets (t-mouse-cartesian '((double) (triple)) typed-sets))
(all-sets (t-mouse-cartesian modifier-sets multipled-sets)))
(while all-sets
(let ((event-sym (event-convert-list (nth 0 all-sets))))
(if (not (get event-sym 'event-kind))
(put event-sym 'event-kind 'mouse-click)))
(setq all-sets (cdr all-sets))))
(defun t-mouse-make-event-element (x-dot-y-avec-time)
(let* ((x-dot-y (nth 0 x-dot-y-avec-time))
(time (nth 1 x-dot-y-avec-time))
(x (car x-dot-y))
(y (cdr x-dot-y))
(w (window-at x y))
(ltrb (window-edges w))
(left (nth 0 ltrb))
(top (nth 1 ltrb))
(event (if w
(posn-at-x-y (- x left) (- y top) w t)
(append (list nil 'menu-bar)
(nthcdr 2 (posn-at-x-y x y))))))
(setcar (nthcdr 3 event) time)
event))
;;; This fun is partly Copyright (C) 1994 Per Abrahamsen <abraham@iesd.auc.dk>
(defun t-mouse-make-event ()
"Make a Lisp style event from the contents of mouse input accumulator.
Also trim the accumulator by all the data used to build the event."
(let (ob (ob-pos (condition-case nil
(progn
;; this test is just needed for Fedora Core 3
(if (string-match "STILL RUNNING_1\n"
t-mouse-filter-accumulator)
(setq t-mouse-filter-accumulator
(substring
t-mouse-filter-accumulator (match-end 0))))
(read-from-string t-mouse-filter-accumulator))
(error nil))))
;; this test is just needed for Fedora Core 3
(if (or (eq (car ob-pos) 'STILL) (eq (car ob-pos) '***) (not ob-pos))
nil
(setq ob (car ob-pos))
(if (string-match "mev:$" (prin1-to-string ob))
(error "Can't open mouse connection"))
(setq t-mouse-filter-accumulator
(substring t-mouse-filter-accumulator (cdr ob-pos)))
;;now the real work
(let ((event-type (nth 0 ob))
(current-xy-avec-time (nth 1 ob))
(type-switch (length ob)))
(if t-mouse-fix-21
(let
;;Acquire the event's symbol's name.
((event-name-string (symbol-name event-type))
end-of-root-event-name
new-event-name-string)
(if (string-match "-\\(21\\|\\12\\)$" event-name-string)
;;Transform the name to what it should have been.
(progn
(setq end-of-root-event-name (match-beginning 0))
(setq new-event-name-string
(concat (substring
event-name-string 0
end-of-root-event-name) "-3"))
;;Change the event to the symbol that corresponds to the
;;name we made. The proper symbol already exists.
(setq event-type
(intern new-event-name-string))))))
;;store current position for mouse-position
(setq t-mouse-current-xy (nth 0 current-xy-avec-time))
;;events have many types but fortunately they differ in length
(cond
((= type-switch 4) ;must be drag
(let ((count (nth 2 ob))
(start-element
(or t-mouse-drag-start
(t-mouse-make-event-element (nth 3 ob))))
(end-element
(t-mouse-make-event-element current-xy-avec-time)))
(setq t-mouse-drag-start nil)
(list event-type start-element end-element count)))
((= type-switch 3) ;down or up
(let ((count (nth 2 ob))
(element
(t-mouse-make-event-element current-xy-avec-time)))
(if (and (not t-mouse-drag-start)
(symbolp (nth 1 element)))
;; OUCH! GOTCHA! emacs uses setc[ad]r on these!
(setq t-mouse-drag-start (copy-sequence element))
(setq t-mouse-drag-start nil))
(list event-type element count)))
((= type-switch 2) ;movement
(list (if (eq 'vertical-scroll-bar
(nth 1 t-mouse-drag-start)) 'scroll-bar-movement
'mouse-movement)
(t-mouse-make-event-element current-xy-avec-time))))))))
(defun t-mouse-process-filter (proc string)
(setq t-mouse-filter-accumulator
(concat t-mouse-filter-accumulator string))
(let ((event (t-mouse-make-event)))
(while event
(if (or track-mouse
(not (eq 'mouse-movement (event-basic-type event))))
(setq unread-command-events
(nconc unread-command-events (list event))))
(if t-mouse-debug-buffer
(print unread-command-events t-mouse-debug-buffer))
(setq event (t-mouse-make-event)))))
(defun t-mouse-mouse-position-function (pos)
"Return the t-mouse-position unless running with a window system.
The (secret) scrollbar interface is not implemented yet."
(setcdr pos t-mouse-current-xy)
pos)
;; It should be possible to just send SIGTSTP to the inferior with
;; stop-process. That doesn't work; mev receives the signal fine but
;; is not really stopped: instead it returns from
;; kill(getpid(), SIGTSTP) immediately. I don't understand what's up
;; itz Tue Mar 24 14:27:38 PST 1998.
(add-hook 'suspend-hook
(function (lambda ()
(and t-mouse-process
;(stop-process t-mouse-process)
(process-send-string
t-mouse-process "push -enone -dall -Mnone\n")))))
(add-hook 'suspend-resume-hook
(function (lambda ()
(and t-mouse-process
;(continue-process t-mouse-process)
(process-send-string t-mouse-process "pop\n")))))
;;;###autoload ;;;###autoload
(define-minor-mode t-mouse-mode (define-minor-mode t-mouse-mode
"Toggle t-mouse mode. "Toggle t-mouse mode to use the mouse in Linux consoles.
With prefix arg, turn t-mouse mode on iff arg is positive. With prefix arg, turn t-mouse mode on iff arg is positive.
Turn it on to use Emacs mouse commands, and off to use t-mouse commands." This allows the use of the mouse when operating on a Linux console, in the
nil " Mouse" nil :global t same way as you can use the mouse under X11.
(unless window-system It requires the `mev' program, part of the `gpm' utilities."
:global t :group 'mouse
(if window-system
(error "t-mouse only works in the console on GNU/Linux")
(if t-mouse-mode (if t-mouse-mode
;; Turn it on. Starts getting a stream of mouse events from an
;; asynchronous process. Only works if Emacs is running on a virtual
;; terminal without a window system.
(progn (progn
(setq mouse-position-function #'t-mouse-mouse-position-function) (unless (fboundp 'term-open-connection)
(let ((tty (t-mouse-tty)) (progn
(process-connection-type t)) (setq t-mouse-mode nil)
(if (not (stringp tty)) (error "Emacs must be built with Gpm to use this mode")))
(error "Cannot find a virtual terminal")) (unless (term-open-connection)
(setq t-mouse-process (progn
(start-process "t-mouse" nil (setq t-mouse-mode nil)
"mev" "-i" "-E" "-C" tty (error "Can't open mouse connection"))))
(if t-mouse-swap-alt-keys ;; Turn it off
"-M-leftAlt" "-M-rightAlt") (term-close-connection))))
"-e-move"
"-dall" "-d-hard"
"-f")))
(setq t-mouse-filter-accumulator "")
(set-process-filter t-mouse-process 't-mouse-process-filter)
(set-process-query-on-exit-flag t-mouse-process nil))
;; Turn it off
(setq mouse-position-function nil)
(delete-process t-mouse-process)
(setq t-mouse-process nil))))
(provide 't-mouse) (provide 't-mouse)

View File

@ -9,6 +9,9 @@
;; It can't really display underlines. ;; It can't really display underlines.
(tty-no-underline) (tty-no-underline)
(condition-case nil (t-mouse-mode 1)
(error nil))
;; Make Latin-1 input characters work, too. ;; Make Latin-1 input characters work, too.
;; Meta will continue to work, because the kernel ;; Meta will continue to work, because the kernel
;; turns that into Escape. ;; turns that into Escape.

View File

@ -1669,7 +1669,7 @@ quit spell session exited."
;; to avoid collapsing markers before and after ;; to avoid collapsing markers before and after
;; into a single place. ;; into a single place.
(ispell-insert-word new-word) (ispell-insert-word new-word)
(delete-region (point) (+ (point) (- end start))) (delete-region (point) end)
;; It is meaningless to preserve the cursor position ;; It is meaningless to preserve the cursor position
;; inside a word that has changed. ;; inside a word that has changed.
(setq cursor-location (point)) (setq cursor-location (point))
@ -1751,8 +1751,8 @@ which is in `ispell-local-dictionary-alist' or `ispell-dictionary-alist'."
;; return dummy word when just flagging misspellings ;; return dummy word when just flagging misspellings
(list "" (point) (point)) (list "" (point) (point))
(error "No word found to check!")) (error "No word found to check!"))
(setq start (match-beginning 0) (setq start (copy-marker (match-beginning 0))
end (point) end (point-marker)
word (buffer-substring-no-properties start end)) word (buffer-substring-no-properties start end))
(list word start end)))) (list word start end))))
@ -2483,7 +2483,12 @@ When asynchronous processes are not supported, `run' is always returned."
(defun ispell-start-process () (defun ispell-start-process ()
"Start the ispell process, with support for no asynchronous processes. "Start the ispell process, with support for no asynchronous processes.
Keeps argument list for future ispell invocations for no async support." Keeps argument list for future ispell invocations for no async support."
(let (args) (let ((default-directory default-directory)
args)
(unless (and (file-directory-p default-directory)
(file-readable-p default-directory))
;; Defend against bad `default-directory'.
(setq default-directory (expand-file-name "~/")))
;; Local dictionary becomes the global dictionary in use. ;; Local dictionary becomes the global dictionary in use.
(setq ispell-current-dictionary (setq ispell-current-dictionary
(or ispell-local-dictionary ispell-dictionary)) (or ispell-local-dictionary ispell-dictionary))

View File

@ -37,7 +37,7 @@
(defcustom display-time-mail-file nil (defcustom display-time-mail-file nil
"*File name of mail inbox file, for indicating existence of new mail. "*File name of mail inbox file, for indicating existence of new mail.
Non-nil and not a string means don't check for mail. nil means use Non-nil and not a string means don't check for mail; nil means use
default, which is system-dependent, and is the same as used by Rmail." default, which is system-dependent, and is the same as used by Rmail."
:type '(choice (const :tag "None" none) :type '(choice (const :tag "None" none)
(const :tag "Default" nil) (const :tag "Default" nil)
@ -94,7 +94,7 @@ past 15 minutes. The default is to display 1 minute load average."
(defcustom display-time-24hr-format nil (defcustom display-time-24hr-format nil
"*Non-nil indicates time should be displayed as hh:mm, 0 <= hh <= 23. "*Non-nil indicates time should be displayed as hh:mm, 0 <= hh <= 23.
nil means 1 <= hh <= 12, and an AM/PM suffix is used." A value of nil means 1 <= hh <= 12, and an AM/PM suffix is used."
:type 'boolean :type 'boolean
:group 'display-time) :group 'display-time)

View File

@ -406,8 +406,8 @@ where
WHERE is a text describing the key sequences to which DEF-FUN is WHERE is a text describing the key sequences to which DEF-FUN is
bound now (or, if it is remapped, a key sequence bound now (or, if it is remapped, a key sequence
for the function it is remapped to) for the function it is remapped to)
REMARK is a list with info about rebinding. It has either of these REMARK is a list with info about rebinding. It has either of
formats: these formats:
\(TEXT cua-mode) \(TEXT cua-mode)
\(TEXT current-binding KEY-FUN DEF-FUN KEY WHERE) \(TEXT current-binding KEY-FUN DEF-FUN KEY WHERE)
@ -912,14 +912,14 @@ See `get-lang-string' for more information.")
(defun get-lang-string (lang stringid &optional no-eng-fallback) (defun get-lang-string (lang stringid &optional no-eng-fallback)
"Get a language specific string for Emacs. "Get a language specific string for Emacs.
In certain places Emacs can replace a string showed to the user with a language specific string. In certain places Emacs can replace a string shown to the user with
This function retrieves such strings. a language specific string. This function retrieves such strings.
LANG is the language specification. It should be one of those LANG is the language specification. It should be one of those
strings that can be returned by `read-language-name'. STRINGID strings that can be returned by `read-language-name'. STRINGID
is a symbol that specifies the string to retrieve. is a symbol that specifies the string to retrieve.
If no string is found for STRINGID in the choosen language then If no string is found for STRINGID in the chosen language then
the English string is returned unless NO-ENG-FALLBACK is non-nil. the English string is returned unless NO-ENG-FALLBACK is non-nil.
See `lang-strings' for more information. See `lang-strings' for more information.

View File

@ -64,13 +64,13 @@
;; is now controlled by the presence of a value in `view-return-to-alist'. ;; is now controlled by the presence of a value in `view-return-to-alist'.
(defcustom view-scroll-auto-exit nil (defcustom view-scroll-auto-exit nil
"*Non-nil means scrolling past the end of buffer exits View mode. "*Non-nil means scrolling past the end of buffer exits View mode.
nil means attempting to scroll past the end of the buffer, A value of nil means attempting to scroll past the end of the buffer,
only rings the bell and gives a message on how to leave." only rings the bell and gives a message on how to leave."
:type 'boolean :type 'boolean
:group 'view) :group 'view)
(defcustom view-try-extend-at-buffer-end nil (defcustom view-try-extend-at-buffer-end nil
"*Non-nil means try load more of file when reaching end of buffer. "*Non-nil means try to load more of file when reaching end of buffer.
This variable is mainly intended to be temporarily set to non-nil by This variable is mainly intended to be temporarily set to non-nil by
the F command in view-mode, but you can set it to t if you want the action the F command in view-mode, but you can set it to t if you want the action
for all scroll commands in view mode." for all scroll commands in view mode."
@ -94,7 +94,7 @@ considered for restoring."
:group 'view) :group 'view)
(defcustom view-inhibit-help-message nil (defcustom view-inhibit-help-message nil
"*Non-nil inhibits the help message showed upon entering View mode." "*Non-nil inhibits the help message shown upon entering View mode."
:type 'boolean :type 'boolean
:group 'view :group 'view
:version "22.1") :version "22.1")

View File

@ -43,6 +43,8 @@
;;; Code: ;;; Code:
(defvar xterm-mouse-debug-buffer nil)
;; XXX Perhaps this should be terminal-local instead. --lorentey ;; XXX Perhaps this should be terminal-local instead. --lorentey
(define-key function-key-map "\e[M" 'xterm-mouse-translate) (define-key function-key-map "\e[M" 'xterm-mouse-translate)
@ -96,6 +98,8 @@
(list (intern (format "drag-mouse-%d" (list (intern (format "drag-mouse-%d"
(+ 1 xterm-mouse-last))) (+ 1 xterm-mouse-last)))
down-data click-data))))) down-data click-data)))))
(if xterm-mouse-debug-buffer
(print unread-command-events xterm-mouse-debug-buffer))
(if (and (symbolp down-where) (if (and (symbolp down-where)
(consp down-where)) (consp down-where))
(vector (list down-where down-data) down) (vector (list down-where down-data) down)

View File

@ -1,3 +1,12 @@
2007-05-12 Richard Stallman <rms@gnu.org>
* text.texi (Margins): indent-to-left-margin is not the default.
(Mode-Specific Indent): For indent-line-function, the default
is indent-relative.
* modes.texi (Example Major Modes): Explain last line of text-mode
is redundant.
2007-05-10 Richard Stallman <rms@gnu.org> 2007-05-10 Richard Stallman <rms@gnu.org>
* keymaps.texi (Scanning Keymaps): Update where-is-internal example. * keymaps.texi (Scanning Keymaps): Update where-is-internal example.

View File

@ -7,7 +7,7 @@
@c Version of the manual and of Emacs. @c Version of the manual and of Emacs.
@c Please remember to update the edition number in README as well. @c Please remember to update the edition number in README as well.
@set VERSION 2.9 @set VERSION 2.9
@set EMACSVER 22.0.99 @set EMACSVER 22.0.990
@dircategory Emacs @dircategory Emacs
@direntry @direntry

View File

@ -616,7 +616,7 @@ the text at the beginning of the buffer matches @var{regexp} and
@code{auto-mode-alist} gets to decide the mode. @code{auto-mode-alist} gets to decide the mode.
@end defvar @end defvar
@defvar file-start-mode-alist @defvar magic-fallback-mode-alist
This works like @code{magic-mode-alist}, except that it is handled This works like @code{magic-mode-alist}, except that it is handled
only if @code{auto-mode-alist} does not specify a mode for this file. only if @code{auto-mode-alist} does not specify a mode for this file.
@end defvar @end defvar
@ -956,7 +956,11 @@ Turning on Text mode runs the normal hook `text-mode-hook'."
@end group @end group
@end smallexample @end smallexample
But here is how it was defined formerly, before @noindent
(The last line is redundant nowadays, since @code{indent-relative} is
the default value, and we'll delete it in a future version.)
Here is how it was defined formerly, before
@code{define-derived-mode} existed: @code{define-derived-mode} existed:
@smallexample @smallexample

View File

@ -1655,11 +1655,10 @@ they default to the whole buffer.
@end defun @end defun
@defun indent-to-left-margin @defun indent-to-left-margin
This is the default @code{indent-line-function}, used in Fundamental This function adjusts the indentation at the beginning of the current
mode, Text mode, etc. Its effect is to adjust the indentation at the line to the value specified by the variable @code{left-margin}. (That
beginning of the current line to the value specified by the variable may involve either inserting or deleting whitespace.) This function
@code{left-margin}. This may involve either inserting or deleting is value of @code{indent-line-function} in Paragraph-Indent Text mode.
whitespace.
@end defun @end defun
@defvar left-margin @defvar left-margin
@ -2199,9 +2198,7 @@ various commands) to indent the current line. The command
In Lisp mode, the value is the symbol @code{lisp-indent-line}; in C In Lisp mode, the value is the symbol @code{lisp-indent-line}; in C
mode, @code{c-indent-line}; in Fortran mode, @code{fortran-indent-line}. mode, @code{c-indent-line}; in Fortran mode, @code{fortran-indent-line}.
In Fundamental mode, Text mode, and many other modes with no standard The default value is @code{indent-relative}.
for indentation, the value is @code{indent-to-left-margin} (which is the
default value).
@end defvar @end defvar
@deffn Command indent-according-to-mode @deffn Command indent-according-to-mode

View File

@ -1,3 +1,8 @@
2007-05-19 Eli Zaretskii <eliz@gnu.org>
* INSTALL: Fix URL of EmacsW32 site where building with image
support is described.
2007-04-26 Glenn Morris <rgm@gnu.org> 2007-04-26 Glenn Morris <rgm@gnu.org>
* emacs.rc: Increase version to 22.1.50. * emacs.rc: Increase version to 22.1.50.

View File

@ -271,8 +271,12 @@
Binaries for the image libraries (among many others) can be found at Binaries for the image libraries (among many others) can be found at
the GnuWin32 project. These are built with MinGW, but they can be the GnuWin32 project. These are built with MinGW, but they can be
used with both GCC/MinGW and MSVC builds of Emacs. See the info on used with both GCC/MinGW and MSVC builds of Emacs. See the info on
http://ourcomments.org/Emacs/EmacsW32.html for more details about http://ourcomments.org/Emacs/w32-build-emacs.html, under "How to Get
installing image support libraries. Images Support", for more details about installing image support
libraries. Note specifically that, due to some packaging snafus in
the GnuWin32-supplied image libraries, you will need to download
_source_ packages for some of the libraries in order to get the
header files necessary for building Emacs with image support.
* Building * Building

View File

@ -1,3 +1,103 @@
2007-05-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* Makefile.in: Move GPM check outside HAVE_X_WINDOWS.
2007-05-20 Nick Roberts <nickrob@snap.net.nz>
* config.in, keyboard.c, Makefile.in, sysdep.c, term.c,
* termhooks.h: Use HAVE_GPM instead of HAVE_GPM_H.
2007-05-20 Nick Roberts <nickrob@snap.net.nz>
* keyboard.c (make_lispy_event): Make case GPM_CLICK_EVENT
conditional on [HAVE_GPM_H].
2007-05-19 Stefan Monnier <monnier@iro.umontreal.ca>
* syntax.c (skip_chars): Update syntax-table only after we checked that
the new location is valid.
2007-05-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* macterm.c (x_calc_absolute_position): Add BLOCK_INPUT around
mac_get_window_bounds.
2007-05-20 Nick Roberts <nickrob@snap.net.nz>
* Makefile.in (LIBGPM): Allow it to be set from configure.
If set then link Emacs with it.
* config.in: Regenerate.
* lisp.h (add_gpm_wait_descriptor, delete_gpm_wait_descriptor):
New externs.
* termhooks.h [HAVE_GPM_H] (enum event_kind): Add GPM_CLICK_EVENT.
Include gpm.h.
(handle_one_term_event, term_gpm) New externs.
* sysdep.c [HAVE_GPM_H] (init_sys_modes): Make gpm_fd nonblocking
and allow it to be interrupted by SIGIO.
* process.c (gpm_wait_mask, max_gpm_desc): New variables.
(wait_reading_process_output): Wait on gpm_fd too.
(add_gpm_wait_descriptor, delete_gpm_wait_descriptor)): New functions.
(add_gpm_wait_descriptor_called_flag): New variable.
(delete_keyboard_wait_descriptor): Check gpm_wait_mask.
* keyboard.c [HAVE_GPM_H] (Qmouse_fixup_help_message)
(make_lispy_movement, tracking_off, Ftrack_mouse, some_mouse_moved)
(show_help_echo, readable_events, kbd_buffer_get_event, init_keyboard):
Extend HAVE_MOUSE ifdefs to HAVE_GPM_H.
(make_lispy_event): Add case GPM_CLICK_EVENT.
(read_avail_input): Handle mouse input.
* term.c (write_glyphs_with_face): New function.
[HAVE_GPM_H]: Include buffer.h, sys/fcntl.h.
(mouse_face_beg_row, mouse_face_beg_col, mouse_face_end_row)
(mouse_face_end_col, mouse_face_past_end, mouse_face_window)
(mouse_face_face_id, term_gpm, pos_x, pos_y)
(last_mouse_x, last_mouse_y): New variables.
(term_show_mouse_face, term_clear_mouse_face, fast_find_position)
(term_mouse_highlight, term_mouse_movement, term_mouse_position)
(term_mouse_click, handle_one_term_event, Fterm_open_connection)
(Fterm_close_connection): New functions.
(term_init): Initialise mouse_face_window.
2007-05-19 Chong Yidong <cyd@stupidchicken.com>
* xdisp.c (redisplay_window): If first window line is a
continuation line, recompute the new window start instead of
recentering.
2007-05-18 Glenn Morris <rgm@gnu.org>
* m/alpha.h (ORDINARY_LINK): No longer define on OpenBSD.
Suggested by Alfred M. Szmidt <ams@gnu.org>.
2007-05-17 Glenn Morris <rgm@gnu.org>
* m/macppc.h (ORDINARY_LINK): No longer define on OpenBSD.
2007-05-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* macterm.c [USE_CARBON_EVENTS] (mac_convert_event_ref): Also convert
dead key repeat and up events.
2007-05-14 Chong Yidong <cyd@stupidchicken.com>
* image.c (pbm_load): Check image size for monochrome pbm.
2007-05-13 Chong Yidong <cyd@stupidchicken.com>
* xterm.c (XTread_socket): Revert last change.
2007-05-12 Chong Yidong <cyd@stupidchicken.com>
* image.c (pbm_load): Correctly check image size for greyscale pbm.
* xterm.c (XTread_socket): Yet Another Uncaught X Error Crash (YAUXEC).
2007-05-07 Stefan Monnier <monnier@iro.umontreal.ca> 2007-05-07 Stefan Monnier <monnier@iro.umontreal.ca>
* editfns.c (Ftranspose_regions): Yet another int/Lisp_Object mixup (YAILOM) * editfns.c (Ftranspose_regions): Yet another int/Lisp_Object mixup (YAILOM)

View File

@ -457,6 +457,15 @@ LIBX= $(LIBXMENU) LD_SWITCH_X_SITE -lX10 LIBX10_MACHINE LIBX10_SYSTEM
#else /* not HAVE_X_WINDOWS */ #else /* not HAVE_X_WINDOWS */
#endif /* not HAVE_X_WINDOWS */ #endif /* not HAVE_X_WINDOWS */
#if HAVE_GPM
#ifndef LIBGPM
#define LIBGPM -lgpm
#endif /* not defined LIBGPM */
#else /* not HAVE_GPM */
#define LIBGPM
#endif /* not HAVE_GPM */
LIBSOUND= @LIBSOUND@ LIBSOUND= @LIBSOUND@
CFLAGS_SOUND= @CFLAGS_SOUND@ CFLAGS_SOUND= @CFLAGS_SOUND@
@ -939,7 +948,7 @@ SOME_MACHINE_LISP = ${dotdot}/lisp/mouse.elc \
Note that SunOS needs -lm to come before -lc; otherwise, you get Note that SunOS needs -lm to come before -lc; otherwise, you get
duplicated symbols. If the standard libraries were compiled duplicated symbols. If the standard libraries were compiled
with GCC, we might need gnulib again after them. */ with GCC, we might need gnulib again after them. */
LIBES = $(LOADLIBES) $(LIBS) $(LIBX) $(LIBSOUND) \ LIBES = $(LOADLIBES) $(LIBS) $(LIBX) $(LIBSOUND) LIBGPM \
LIBS_SYSTEM LIBS_MACHINE LIBS_TERMCAP \ LIBS_SYSTEM LIBS_MACHINE LIBS_TERMCAP \
LIBS_DEBUG $(GETLOADAVG_LIBS) $(GNULIB_VAR) LIB_MATH LIB_STANDARD \ LIBS_DEBUG $(GETLOADAVG_LIBS) $(GNULIB_VAR) LIB_MATH LIB_STANDARD \
$(GNULIB_VAR) $(GNULIB_VAR)

View File

@ -231,6 +231,9 @@ Boston, MA 02110-1301, USA. */
/* Define to 1 if you have the ungif library (-lungif). */ /* Define to 1 if you have the ungif library (-lungif). */
#undef HAVE_GIF #undef HAVE_GIF
/* Define to 1 if you have the gpm library (-lgpm). */
#undef HAVE_GPM
/* Define to 1 if you have the `grantpt' function. */ /* Define to 1 if you have the `grantpt' function. */
#undef HAVE_GRANTPT #undef HAVE_GRANTPT

View File

@ -5732,7 +5732,17 @@ pbm_load (f, img)
if (raw_p) if (raw_p)
{ {
if ((x & 7) == 0) if ((x & 7) == 0)
c = *p++; {
if (p >= end)
{
x_destroy_x_image (ximg);
x_clear_image (f, img);
image_error ("Invalid image size in image `%s'",
img->spec, Qnil);
goto error;
}
c = *p++;
}
g = c & 0x80; g = c & 0x80;
c <<= 1; c <<= 1;
} }
@ -5744,9 +5754,13 @@ pbm_load (f, img)
} }
else else
{ {
if (raw_p && (p + 3 * height * width > end)) if (raw_p
&& ((type == PBM_GRAY)
? (p + height * width > end)
: (p + 3 * height * width > end)))
{ {
x_destroy_x_image (ximg); x_destroy_x_image (ximg);
x_clear_image (f, img);
image_error ("Invalid image size in image `%s'", image_error ("Invalid image size in image `%s'",
img->spec, Qnil); img->spec, Qnil);
goto error; goto error;

View File

@ -508,7 +508,7 @@ Lisp_Object Qmake_frame_visible;
Lisp_Object Qselect_window; Lisp_Object Qselect_window;
Lisp_Object Qhelp_echo; Lisp_Object Qhelp_echo;
#ifdef HAVE_MOUSE #if defined (HAVE_MOUSE) || defined (HAVE_GPM)
Lisp_Object Qmouse_fixup_help_message; Lisp_Object Qmouse_fixup_help_message;
#endif #endif
@ -661,7 +661,7 @@ static Lisp_Object read_char_x_menu_prompt ();
static Lisp_Object read_char_minibuf_menu_prompt P_ ((int, int, static Lisp_Object read_char_minibuf_menu_prompt P_ ((int, int,
Lisp_Object *)); Lisp_Object *));
static Lisp_Object make_lispy_event P_ ((struct input_event *)); static Lisp_Object make_lispy_event P_ ((struct input_event *));
#ifdef HAVE_MOUSE #if defined (HAVE_MOUSE) || defined (HAVE_GPM)
static Lisp_Object make_lispy_movement P_ ((struct frame *, Lisp_Object, static Lisp_Object make_lispy_movement P_ ((struct frame *, Lisp_Object,
enum scroll_bar_part, enum scroll_bar_part,
Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
@ -1466,7 +1466,7 @@ DEFUN ("abort-recursive-edit", Fabort_recursive_edit, Sabort_recursive_edit, 0,
return Qnil; return Qnil;
} }
#ifdef HAVE_MOUSE #if defined (HAVE_MOUSE) || defined (HAVE_GPM)
/* Restore mouse tracking enablement. See Ftrack_mouse for the only use /* Restore mouse tracking enablement. See Ftrack_mouse for the only use
of this function. */ of this function. */
@ -1542,7 +1542,7 @@ some_mouse_moved ()
return 0; return 0;
} }
#endif /* HAVE_MOUSE */ #endif /* HAVE_MOUSE || HAVE_GPM */
/* This is the actual command reading loop, /* This is the actual command reading loop,
sans error-handling encapsulation. */ sans error-handling encapsulation. */
@ -2476,7 +2476,7 @@ show_help_echo (help, window, object, pos, ok_to_overwrite_keystroke_echo)
return; return;
} }
#ifdef HAVE_MOUSE #if defined (HAVE_MOUSE) || defined (HAVE_GPM)
if (!noninteractive && STRINGP (help)) if (!noninteractive && STRINGP (help))
{ {
/* The mouse-fixup-help-message Lisp function can call /* The mouse-fixup-help-message Lisp function can call
@ -3753,7 +3753,7 @@ readable_events (flags)
return 1; return 1;
} }
#ifdef HAVE_MOUSE #if defined (HAVE_MOUSE) || defined (HAVE_GPM)
if (!(flags & READABLE_EVENTS_IGNORE_SQUEEZABLES) if (!(flags & READABLE_EVENTS_IGNORE_SQUEEZABLES)
&& !NILP (do_mouse_tracking) && some_mouse_moved ()) && !NILP (do_mouse_tracking) && some_mouse_moved ())
return 1; return 1;
@ -4103,7 +4103,7 @@ kbd_buffer_get_event (kbp, used_mouse_menu, end_time)
{ {
if (kbd_fetch_ptr != kbd_store_ptr) if (kbd_fetch_ptr != kbd_store_ptr)
break; break;
#ifdef HAVE_MOUSE #if defined (HAVE_MOUSE) || defined (HAVE_GPM)
if (!NILP (do_mouse_tracking) && some_mouse_moved ()) if (!NILP (do_mouse_tracking) && some_mouse_moved ())
break; break;
#endif #endif
@ -4125,7 +4125,7 @@ kbd_buffer_get_event (kbp, used_mouse_menu, end_time)
#endif /* SIGIO */ #endif /* SIGIO */
if (kbd_fetch_ptr != kbd_store_ptr) if (kbd_fetch_ptr != kbd_store_ptr)
break; break;
#ifdef HAVE_MOUSE #if defined (HAVE_MOUSE) || defined (HAVE_GPM)
if (!NILP (do_mouse_tracking) && some_mouse_moved ()) if (!NILP (do_mouse_tracking) && some_mouse_moved ())
break; break;
#endif #endif
@ -4361,7 +4361,7 @@ kbd_buffer_get_event (kbp, used_mouse_menu, end_time)
} }
} }
} }
#ifdef HAVE_MOUSE #if defined (HAVE_MOUSE) || defined (HAVE_GPM)
/* Try generating a mouse motion event. */ /* Try generating a mouse motion event. */
else if (!NILP (do_mouse_tracking) && some_mouse_moved ()) else if (!NILP (do_mouse_tracking) && some_mouse_moved ())
{ {
@ -4406,7 +4406,7 @@ kbd_buffer_get_event (kbp, used_mouse_menu, end_time)
if (!NILP (x) && NILP (obj)) if (!NILP (x) && NILP (obj))
obj = make_lispy_movement (f, bar_window, part, x, y, time); obj = make_lispy_movement (f, bar_window, part, x, y, time);
} }
#endif /* HAVE_MOUSE */ #endif /* HAVE_MOUSE || HAVE GPM */
else else
/* We were promised by the above while loop that there was /* We were promised by the above while loop that there was
something for us to read! */ something for us to read! */
@ -6123,6 +6123,66 @@ make_lispy_event (event)
} }
#endif #endif
#ifdef HAVE_GPM
case GPM_CLICK_EVENT:
{
FRAME_PTR f = XFRAME (event->frame_or_window);
Lisp_Object head, position;
Lisp_Object *start_pos_ptr;
Lisp_Object start_pos;
int button = event->code;
if (button >= ASIZE (button_down_location))
{
button_down_location = larger_vector (button_down_location,
button + 1, Qnil);
mouse_syms = larger_vector (mouse_syms, button + 1, Qnil);
}
start_pos_ptr = &AREF (button_down_location, button);
start_pos = *start_pos_ptr;
position = make_lispy_position (f, &event->x, &event->y,
event->timestamp);
if (event->modifiers & down_modifier)
*start_pos_ptr = Fcopy_alist (position);
else if (event->modifiers & (up_modifier | drag_modifier))
{
if (!CONSP (start_pos))
return Qnil;
event->modifiers &= ~up_modifier;
}
head = modify_event_symbol (button,
event->modifiers,
Qmouse_click, Vlispy_mouse_stem,
NULL,
&mouse_syms,
XVECTOR (mouse_syms)->size);
if (event->modifiers & drag_modifier)
return Fcons (head,
Fcons (start_pos,
Fcons (position,
Qnil)));
else if (event->modifiers & double_modifier)
return Fcons (head,
Fcons (position,
Fcons (make_number (2),
Qnil)));
else if (event->modifiers & triple_modifier)
return Fcons (head,
Fcons (position,
Fcons (make_number (3),
Qnil)));
else
return Fcons (head,
Fcons (position,
Qnil));
}
#endif /* HAVE_GPM */
/* The 'kind' field of the event is something we don't recognize. */ /* The 'kind' field of the event is something we don't recognize. */
default: default:
abort (); abort ();
@ -7057,7 +7117,27 @@ tty_read_avail_input (struct terminal *terminal,
if (! tty->input) if (! tty->input)
return 0; /* The terminal is suspended. */ return 0; /* The terminal is suspended. */
/* Determine how many characters we should *try* to read. */ #ifdef HAVE_GPM
if (term_gpm && gpm_tty == tty->terminal->id)
{
Gpm_Event event;
struct input_event hold_quit;
int gpm;
EVENT_INIT (hold_quit);
hold_quit.kind = NO_EVENT;
while (gpm = Gpm_GetEvent (&event), gpm == 1) {
nread += handle_one_term_event (tty, &event, &hold_quit);
}
if (hold_quit.kind != NO_EVENT)
kbd_buffer_store_event (&hold_quit);
if (nread)
return nread;
}
#endif /* HAVE_GPM */
/* Determine how many characters we should *try* to read. */
#ifdef FIONREAD #ifdef FIONREAD
/* Find out how much input is available. */ /* Find out how much input is available. */
if (ioctl (fileno (tty->input), FIONREAD, &n_to_read) < 0) if (ioctl (fileno (tty->input), FIONREAD, &n_to_read) < 0)
@ -11440,7 +11520,7 @@ init_keyboard ()
recent_keys_index = 0; recent_keys_index = 0;
kbd_fetch_ptr = kbd_buffer; kbd_fetch_ptr = kbd_buffer;
kbd_store_ptr = kbd_buffer; kbd_store_ptr = kbd_buffer;
#ifdef HAVE_MOUSE #if defined (HAVE_MOUSE) || defined (HAVE_GPM)
do_mouse_tracking = Qnil; do_mouse_tracking = Qnil;
#endif #endif
input_pending = 0; input_pending = 0;
@ -11636,7 +11716,7 @@ syms_of_keyboard ()
Qmenu_bar = intern ("menu-bar"); Qmenu_bar = intern ("menu-bar");
staticpro (&Qmenu_bar); staticpro (&Qmenu_bar);
#ifdef HAVE_MOUSE #if defined (HAVE_MOUSE) || defined (HAVE_GPM)
Qmouse_fixup_help_message = intern ("mouse-fixup-help-message"); Qmouse_fixup_help_message = intern ("mouse-fixup-help-message");
staticpro (&Qmouse_fixup_help_message); staticpro (&Qmouse_fixup_help_message);
#endif #endif
@ -11768,7 +11848,7 @@ syms_of_keyboard ()
defsubr (&Sread_key_sequence); defsubr (&Sread_key_sequence);
defsubr (&Sread_key_sequence_vector); defsubr (&Sread_key_sequence_vector);
defsubr (&Srecursive_edit); defsubr (&Srecursive_edit);
#ifdef HAVE_MOUSE #if defined (HAVE_MOUSE) || defined (HAVE_GPM)
defsubr (&Strack_mouse); defsubr (&Strack_mouse);
#endif #endif
defsubr (&Sinput_pending_p); defsubr (&Sinput_pending_p);

View File

@ -3101,6 +3101,8 @@ extern int wait_reading_process_output P_ ((int, int, int, int,
int)); int));
extern void add_keyboard_wait_descriptor P_ ((int)); extern void add_keyboard_wait_descriptor P_ ((int));
extern void delete_keyboard_wait_descriptor P_ ((int)); extern void delete_keyboard_wait_descriptor P_ ((int));
extern void add_gpm_wait_descriptor P_ ((int));
extern void delete_gpm_wait_descriptor P_ ((int));
extern void close_process_descs P_ ((void)); extern void close_process_descs P_ ((void));
extern void init_process P_ ((void)); extern void init_process P_ ((void));
extern void syms_of_process P_ ((void)); extern void syms_of_process P_ ((void));

View File

@ -99,10 +99,6 @@ NOTE-END
# endif # endif
#endif #endif
#if defined(__OpenBSD__)
#define ORDINARY_LINK
#endif
#ifdef __ELF__ #ifdef __ELF__
#undef UNEXEC #undef UNEXEC
#define UNEXEC unexelf.o #define UNEXEC unexelf.o

View File

@ -66,10 +66,6 @@ Boston, MA 02110-1301, USA. */
/* #define NO_SOCK_SIGIO */ /* #define NO_SOCK_SIGIO */
#if defined(__OpenBSD__)
#define ORDINARY_LINK
#endif
#define UNEXEC unexelf.o #define UNEXEC unexelf.o
#define NO_TERMIO #define NO_TERMIO

View File

@ -6079,7 +6079,9 @@ x_calc_absolute_position (f)
/* Find the offsets of the outside upper-left corner of /* Find the offsets of the outside upper-left corner of
the inner window, with respect to the outer window. */ the inner window, with respect to the outer window. */
BLOCK_INPUT;
mac_get_window_bounds (f, &inner, &outer); mac_get_window_bounds (f, &inner, &outer);
UNBLOCK_INPUT;
width_diff = (outer.right - outer.left) - (inner.right - inner.left); width_diff = (outer.right - outer.left) - (inner.right - inner.left);
height_diff = (outer.bottom - outer.top) - (inner.bottom - inner.top); height_diff = (outer.bottom - outer.top) - (inner.bottom - inner.top);
@ -9159,15 +9161,16 @@ mac_get_mouse_btn (EventRef ref)
/* Normally, ConvertEventRefToEventRecord will correctly handle all /* Normally, ConvertEventRefToEventRecord will correctly handle all
events. However the click of the mouse wheel is not converted to a events. However the click of the mouse wheel is not converted to a
mouseDown or mouseUp event. Likewise for dead key down events. mouseDown or mouseUp event. Likewise for dead key events. This
This calls ConvertEventRef, but then checks to see if it is a mouse calls ConvertEventRefToEventRecord, but then checks to see if it is
up/down, or a dead key down carbon event that has not been a mouse up/down, or a dead key Carbon event that has not been
converted, and if so, converts it by hand (to be picked up in the converted, and if so, converts it by hand (to be picked up in the
XTread_socket loop). */ XTread_socket loop). */
static Boolean mac_convert_event_ref (EventRef eventRef, EventRecord *eventRec) static Boolean mac_convert_event_ref (EventRef eventRef, EventRecord *eventRec)
{ {
OSStatus err; OSStatus err;
Boolean result = ConvertEventRefToEventRecord (eventRef, eventRec); Boolean result = ConvertEventRefToEventRecord (eventRef, eventRec);
EventKind action;
if (result) if (result)
return result; return result;
@ -9196,6 +9199,14 @@ static Boolean mac_convert_event_ref (EventRef eventRef, EventRecord *eventRec)
switch (GetEventKind (eventRef)) switch (GetEventKind (eventRef))
{ {
case kEventRawKeyDown: case kEventRawKeyDown:
action = keyDown;
goto keystroke_common;
case kEventRawKeyRepeat:
action = autoKey;
goto keystroke_common;
case kEventRawKeyUp:
action = keyUp;
keystroke_common:
{ {
unsigned char char_codes; unsigned char char_codes;
UInt32 key_code; UInt32 key_code;
@ -9209,7 +9220,7 @@ static Boolean mac_convert_event_ref (EventRef eventRef, EventRecord *eventRec)
NULL, &key_code); NULL, &key_code);
if (err == noErr) if (err == noErr)
{ {
eventRec->what = keyDown; eventRec->what = action;
eventRec->message = char_codes | ((key_code & 0xff) << 8); eventRec->message = char_codes | ((key_code & 0xff) << 8);
result = 1; result = 1;
} }

View File

@ -336,6 +336,10 @@ static SELECT_TYPE non_keyboard_wait_mask;
static SELECT_TYPE non_process_wait_mask; static SELECT_TYPE non_process_wait_mask;
/* Mask for the gpm mouse input descriptor. */
static SELECT_TYPE gpm_wait_mask;
#ifdef NON_BLOCKING_CONNECT #ifdef NON_BLOCKING_CONNECT
/* Mask of bits indicating the descriptors that we wait for connect to /* Mask of bits indicating the descriptors that we wait for connect to
complete on. Once they complete, they are removed from this mask complete on. Once they complete, they are removed from this mask
@ -357,6 +361,9 @@ static int max_process_desc;
/* The largest descriptor currently in use for keyboard input. */ /* The largest descriptor currently in use for keyboard input. */
static int max_keyboard_desc; static int max_keyboard_desc;
/* The largest descriptor currently in use for gpm mouse input. */
static int max_gpm_desc;
/* Nonzero means delete a process right away if it exits. */ /* Nonzero means delete a process right away if it exits. */
static int delete_exited_processes; static int delete_exited_processes;
@ -4451,7 +4458,8 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
IF_NON_BLOCKING_CONNECT (Ctemp = connect_wait_mask); IF_NON_BLOCKING_CONNECT (Ctemp = connect_wait_mask);
EMACS_SET_SECS_USECS (timeout, 0, 0); EMACS_SET_SECS_USECS (timeout, 0, 0);
if ((select (max (max_process_desc, max_keyboard_desc) + 1, if ((select (max (max (max_process_desc, max_keyboard_desc),
max_gpm_desc) + 1,
&Atemp, &Atemp,
#ifdef NON_BLOCKING_CONNECT #ifdef NON_BLOCKING_CONNECT
(num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0), (num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0),
@ -4596,7 +4604,8 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
} }
#endif #endif
nfds = select (max (max_process_desc, max_keyboard_desc) + 1, nfds = select (max (max (max_process_desc, max_keyboard_desc),
max_gpm_desc) + 1,
&Available, &Available,
#ifdef NON_BLOCKING_CONNECT #ifdef NON_BLOCKING_CONNECT
(check_connect ? &Connecting : (SELECT_TYPE *)0), (check_connect ? &Connecting : (SELECT_TYPE *)0),
@ -6975,6 +6984,21 @@ add_keyboard_wait_descriptor (desc)
max_keyboard_desc = desc; max_keyboard_desc = desc;
} }
static int add_gpm_wait_descriptor_called_flag;
void
add_gpm_wait_descriptor (desc)
int desc;
{
if (! add_gpm_wait_descriptor_called_flag)
FD_CLR (0, &input_wait_mask);
add_gpm_wait_descriptor_called_flag = 1;
FD_SET (desc, &input_wait_mask);
FD_SET (desc, &gpm_wait_mask);
if (desc > max_gpm_desc)
max_gpm_desc = desc;
}
/* From now on, do not expect DESC to give keyboard input. */ /* From now on, do not expect DESC to give keyboard input. */
void void
@ -6990,10 +7014,29 @@ delete_keyboard_wait_descriptor (desc)
if (desc == max_keyboard_desc) if (desc == max_keyboard_desc)
for (fd = 0; fd < lim; fd++) for (fd = 0; fd < lim; fd++)
if (FD_ISSET (fd, &input_wait_mask) if (FD_ISSET (fd, &input_wait_mask)
&& !FD_ISSET (fd, &non_keyboard_wait_mask)) && !FD_ISSET (fd, &non_keyboard_wait_mask)
&& !FD_ISSET (fd, &gpm_wait_mask))
max_keyboard_desc = fd; max_keyboard_desc = fd;
} }
void
delete_gpm_wait_descriptor (desc)
int desc;
{
int fd;
int lim = max_gpm_desc;
FD_CLR (desc, &input_wait_mask);
FD_CLR (desc, &non_process_wait_mask);
if (desc == max_gpm_desc)
for (fd = 0; fd < lim; fd++)
if (FD_ISSET (fd, &input_wait_mask)
&& !FD_ISSET (fd, &non_keyboard_wait_mask)
&& !FD_ISSET (fd, &non_process_wait_mask))
max_gpm_desc = fd;
}
/* Return nonzero if *MASK has a bit set /* Return nonzero if *MASK has a bit set
that corresponds to one of the keyboard input descriptors. */ that corresponds to one of the keyboard input descriptors. */

View File

@ -1669,10 +1669,10 @@ skip_chars (forwardp, syntaxp, string, lim, handle_iso_classes)
p = GPT_ADDR; p = GPT_ADDR;
stop = endp; stop = endp;
} }
UPDATE_SYNTAX_TABLE_BACKWARD (pos - 1);
if (! fastmap[(int) SYNTAX (p[-1])]) if (! fastmap[(int) SYNTAX (p[-1])])
break; break;
p--, pos--; p--, pos--;
UPDATE_SYNTAX_TABLE_BACKWARD (pos - 1);
} }
} }
} }

View File

@ -1747,6 +1747,14 @@ init_sys_modes (tty_out)
fcntl (fileno (tty_out->input), F_GETOWN, 0); fcntl (fileno (tty_out->input), F_GETOWN, 0);
fcntl (fileno (tty_out->input), F_SETOWN, getpid ()); fcntl (fileno (tty_out->input), F_SETOWN, getpid ());
init_sigio (fileno (tty_out->input)); init_sigio (fileno (tty_out->input));
#ifdef HAVE_GPM
if (term_gpm)
{
fcntl (gpm_fd, F_SETOWN, getpid ());
fcntl (gpm_fd, F_SETFL, O_NONBLOCK);
init_sigio (gpm_fd);
}
#endif /* HAVE_GPM */
} }
#endif /* F_GETOWN */ #endif /* F_GETOWN */
#endif /* F_SETOWN_BUG */ #endif /* F_SETOWN_BUG */

View File

@ -171,6 +171,9 @@ static int system_uses_terminfo;
char *tparam (); char *tparam ();
extern char *tgetstr (); extern char *tgetstr ();
static void term_clear_mouse_face ();
static void term_mouse_highlight (struct frame *f, int x, int y);
#ifdef WINDOWSNT #ifdef WINDOWSNT
@ -184,6 +187,35 @@ extern char *tgetstr ();
#define FRAME_TERMCAP_P(_f_) 0 #define FRAME_TERMCAP_P(_f_) 0
#endif /* WINDOWSNT */ #endif /* WINDOWSNT */
#ifdef HAVE_GPM
#include <sys/fcntl.h>
#include "buffer.h"
/* Nonzero means mouse is enabled on Linux console. */
int term_gpm = 0;
/* The id of the terminal device for which we have gpm support. */
int gpm_tty;
/* These variables describe the range of text currently shown in its
mouse-face, together with the window they apply to. As long as
the mouse stays within this range, we need not redraw anything on
its account. Rows and columns are glyph matrix positions in
MOUSE_FACE_WINDOW. */
static int mouse_face_beg_row, mouse_face_beg_col;
static int mouse_face_end_row, mouse_face_end_col;
static int mouse_face_past_end;
static Lisp_Object mouse_face_window;
static int mouse_face_face_id;
/* FRAME and X, Y position of mouse when last checked for
highlighting. X and Y can be negative or out of range for the frame. */
struct frame *mouse_face_mouse_frame;
int mouse_face_mouse_x, mouse_face_mouse_y;
static int pos_x, pos_y;
static int last_mouse_x, last_mouse_y;
#endif /* HAVE_GPM */
/* Ring the bell on a tty. */ /* Ring the bell on a tty. */
@ -715,6 +747,66 @@ tty_write_glyphs (struct frame *f, struct glyph *string, int len)
cmcheckmagic (tty); cmcheckmagic (tty);
} }
static void
tty_write_glyphs_with_face (f, string, len, face_id)
register struct frame *f;
register struct glyph *string;
register int len, face_id;
{
unsigned char *conversion_buffer;
struct coding_system *coding;
struct tty_display_info *tty = FRAME_TTY (f);
tty_turn_off_insert (tty);
tty_hide_cursor (tty);
/* Don't dare write in last column of bottom line, if Auto-Wrap,
since that would scroll the whole frame on some terminals. */
if (AutoWrap (tty)
&& curY (tty) + 1 == FRAME_LINES (f)
&& (curX (tty) + len) == FRAME_COLS (f))
len --;
if (len <= 0)
return;
cmplus (tty, len);
/* If terminal_coding does any conversion, use it, otherwise use
safe_terminal_coding. We can't use CODING_REQUIRE_ENCODING here
because it always return 1 if the member src_multibyte is 1. */
coding = (FRAME_TERMINAL_CODING (f)->common_flags & CODING_REQUIRE_ENCODING_MASK
? FRAME_TERMINAL_CODING (f) : &safe_terminal_coding);
/* The mode bit CODING_MODE_LAST_BLOCK should be set to 1 only at
the tail. */
coding->mode &= ~CODING_MODE_LAST_BLOCK;
/* Turn appearance modes of the face. */
tty_highlight_if_desired (tty);
turn_on_face (f, face_id);
coding->mode |= CODING_MODE_LAST_BLOCK;
conversion_buffer = encode_terminal_code (string, len, coding);
if (coding->produced > 0)
{
BLOCK_INPUT;
fwrite (conversion_buffer, 1, coding->produced, tty->output);
if (ferror (tty->output))
clearerr (tty->output);
if (tty->termscript)
fwrite (conversion_buffer, 1, coding->produced, tty->termscript);
UNBLOCK_INPUT;
}
/* Turn appearance modes off. */
turn_off_face (f, face_id);
tty_turn_off_highlight (tty);
cmcheckmagic (tty);
}
/* An implementation of insert_glyphs for termcap frames. */ /* An implementation of insert_glyphs for termcap frames. */
static void static void
@ -2246,6 +2338,663 @@ the currently selected frame. */)
return Qnil; return Qnil;
} }
/***********************************************************************
Mouse
***********************************************************************/
#ifdef HAVE_GPM
static void
term_show_mouse_face (enum draw_glyphs_face draw)
{
struct window *w = XWINDOW (mouse_face_window);
int save_x, save_y;
int i, j;
struct frame *f = XFRAME (w->frame);
struct tty_display_info *tty = FRAME_TTY (f);
if (/* If window is in the process of being destroyed, don't bother
to do anything. */
w->current_matrix != NULL
/* Recognize when we are called to operate on rows that don't exist
anymore. This can happen when a window is split. */
&& mouse_face_end_row < w->current_matrix->nrows)
{
/* write_glyphs writes at cursor position, so we need to
temporarily move cursor coordinates to the beginning of
the highlight region. */
/* Save current cursor co-ordinates */
save_y = curY (tty);
save_x = curX (tty);
/* Note that mouse_face_beg_row etc. are window relative. */
for (i = mouse_face_beg_row; i <= mouse_face_end_row; i++)
{
int start_hpos, end_hpos, nglyphs;
struct glyph_row *row = MATRIX_ROW (w->current_matrix, i);
/* Don't do anything if row doesn't have valid contents. */
if (!row->enabled_p)
continue;
/* For all but the first row, the highlight starts at column 0. */
if (i == mouse_face_beg_row)
start_hpos = mouse_face_beg_col;
else
start_hpos = 0;
if (i == mouse_face_end_row)
end_hpos = mouse_face_end_col;
else
{
end_hpos = row->used[TEXT_AREA];
if (draw == DRAW_NORMAL_TEXT)
row->fill_line_p = 1; /* Clear to end of line */
}
if (end_hpos <= start_hpos)
continue;
/* Record that some glyphs of this row are displayed in
mouse-face. */
row->mouse_face_p = draw > 0;
nglyphs = end_hpos - start_hpos;
if (end_hpos >= row->used[TEXT_AREA])
nglyphs = row->used[TEXT_AREA] - start_hpos;
pos_y = row->y + WINDOW_TOP_EDGE_Y (w);
pos_x = row->used[LEFT_MARGIN_AREA] + start_hpos
+ WINDOW_LEFT_EDGE_X (w);
cursor_to (f, pos_y, pos_x);
if (draw == DRAW_MOUSE_FACE)
{
tty_write_glyphs_with_face (f, row->glyphs[TEXT_AREA] + start_hpos,
nglyphs, mouse_face_face_id);
}
else /* draw == DRAW_NORMAL_TEXT */
write_glyphs (f, row->glyphs[TEXT_AREA] + start_hpos, nglyphs);
}
cursor_to (f, save_y, save_x);
}
}
static void
term_clear_mouse_face ()
{
if (!NILP (mouse_face_window))
term_show_mouse_face (DRAW_NORMAL_TEXT);
mouse_face_beg_row = mouse_face_beg_col = -1;
mouse_face_end_row = mouse_face_end_col = -1;
mouse_face_window = Qnil;
}
/* Find the glyph matrix position of buffer position POS in window W.
*HPOS and *VPOS are set to the positions found. W's current glyphs
must be up to date. If POS is above window start return (0, 0).
If POS is after end of W, return end of last line in W.
- taken from msdos.c */
static int
fast_find_position (struct window *w, int pos, int *hpos, int *vpos)
{
int i, lastcol, line_start_position, maybe_next_line_p = 0;
int yb = window_text_bottom_y (w);
struct glyph_row *row = MATRIX_ROW (w->current_matrix, 0), *best_row = row;
while (row->y < yb)
{
if (row->used[TEXT_AREA])
line_start_position = row->glyphs[TEXT_AREA]->charpos;
else
line_start_position = 0;
if (line_start_position > pos)
break;
/* If the position sought is the end of the buffer,
don't include the blank lines at the bottom of the window. */
else if (line_start_position == pos
&& pos == BUF_ZV (XBUFFER (w->buffer)))
{
maybe_next_line_p = 1;
break;
}
else if (line_start_position > 0)
best_row = row;
/* Don't overstep the last matrix row, lest we get into the
never-never land... */
if (row->y + 1 >= yb)
break;
++row;
}
/* Find the right column within BEST_ROW. */
lastcol = 0;
row = best_row;
for (i = 0; i < row->used[TEXT_AREA]; i++)
{
struct glyph *glyph = row->glyphs[TEXT_AREA] + i;
int charpos;
charpos = glyph->charpos;
if (charpos == pos)
{
*hpos = i;
*vpos = row->y;
return 1;
}
else if (charpos > pos)
break;
else if (charpos > 0)
lastcol = i;
}
/* If we're looking for the end of the buffer,
and we didn't find it in the line we scanned,
use the start of the following line. */
if (maybe_next_line_p)
{
++row;
lastcol = 0;
}
*vpos = row->y;
*hpos = lastcol + 1;
return 0;
}
static void
term_mouse_highlight (struct frame *f, int x, int y)
{
enum window_part part;
Lisp_Object window;
struct window *w;
struct buffer *b;
if (NILP (Vmouse_highlight)
|| !f->glyphs_initialized_p)
return;
mouse_face_mouse_x = x;
mouse_face_mouse_y = y;
mouse_face_mouse_frame = f;
/* Which window is that in? */
window = window_from_coordinates (f, x, y, &part, &x, &y, 0);
/* Not on a window -> return. */
if (!WINDOWP (window))
return;
if (!EQ (window, mouse_face_window))
term_clear_mouse_face ();
w = XWINDOW (window);
/* Are we in a window whose display is up to date?
And verify the buffer's text has not changed. */
b = XBUFFER (w->buffer);
if (part == ON_TEXT
&& EQ (w->window_end_valid, w->buffer)
&& XFASTINT (w->last_modified) == BUF_MODIFF (b)
&& XFASTINT (w->last_overlay_modified) == BUF_OVERLAY_MODIFF (b))
{
int pos, i, nrows = w->current_matrix->nrows;
struct glyph_row *row;
struct glyph *glyph;
/* Find the glyph under X/Y. */
glyph = NULL;
if (y >= 0 && y < nrows)
{
row = MATRIX_ROW (w->current_matrix, y);
/* Give up if some row before the one we are looking for is
not enabled. */
for (i = 0; i <= y; i++)
if (!MATRIX_ROW (w->current_matrix, i)->enabled_p)
break;
if (i > y /* all rows upto and including the one at Y are enabled */
&& row->displays_text_p
&& x < window_box_width (w, TEXT_AREA))
{
glyph = row->glyphs[TEXT_AREA];
if (x >= row->used[TEXT_AREA])
glyph = NULL;
else
{
glyph += x;
if (!BUFFERP (glyph->object))
glyph = NULL;
}
}
}
/* Clear mouse face if X/Y not over text. */
if (glyph == NULL)
{
term_clear_mouse_face ();
return;
}
if (!BUFFERP (glyph->object))
abort ();
pos = glyph->charpos;
/* Check for mouse-face. */
{
extern Lisp_Object Qmouse_face;
Lisp_Object mouse_face, overlay, position, *overlay_vec;
int noverlays, obegv, ozv;;
struct buffer *obuf;
/* If we get an out-of-range value, return now; avoid an error. */
if (pos > BUF_Z (b))
return;
/* Make the window's buffer temporarily current for
overlays_at and compute_char_face. */
obuf = current_buffer;
current_buffer = b;
obegv = BEGV;
ozv = ZV;
BEGV = BEG;
ZV = Z;
/* Is this char mouse-active? */
XSETINT (position, pos);
/* Put all the overlays we want in a vector in overlay_vec. */
GET_OVERLAYS_AT (pos, overlay_vec, noverlays, NULL, 0);
/* Sort overlays into increasing priority order. */
noverlays = sort_overlays (overlay_vec, noverlays, w);
/* Check mouse-face highlighting. */
if (!(EQ (window, mouse_face_window)
&& y >= mouse_face_beg_row
&& y <= mouse_face_end_row
&& (y > mouse_face_beg_row
|| x >= mouse_face_beg_col)
&& (y < mouse_face_end_row
|| x < mouse_face_end_col
|| mouse_face_past_end)))
{
/* Clear the display of the old active region, if any. */
term_clear_mouse_face ();
/* Find the highest priority overlay that has a mouse-face
property. */
overlay = Qnil;
for (i = noverlays - 1; i >= 0; --i)
{
mouse_face = Foverlay_get (overlay_vec[i], Qmouse_face);
if (!NILP (mouse_face))
{
overlay = overlay_vec[i];
break;
}
}
/* If no overlay applies, get a text property. */
if (NILP (overlay))
mouse_face = Fget_text_property (position, Qmouse_face,
w->buffer);
/* Handle the overlay case. */
if (!NILP (overlay))
{
/* Find the range of text around this char that
should be active. */
Lisp_Object before, after;
int ignore;
before = Foverlay_start (overlay);
after = Foverlay_end (overlay);
/* Record this as the current active region. */
fast_find_position (w, XFASTINT (before),
&mouse_face_beg_col,
&mouse_face_beg_row);
mouse_face_past_end
= !fast_find_position (w, XFASTINT (after),
&mouse_face_end_col,
&mouse_face_end_row);
mouse_face_window = window;
mouse_face_face_id
= face_at_buffer_position (w, pos, 0, 0,
&ignore, pos + 1, 1);
/* Display it as active. */
term_show_mouse_face (DRAW_MOUSE_FACE);
}
/* Handle the text property case. */
else if (!NILP (mouse_face))
{
/* Find the range of text around this char that
should be active. */
Lisp_Object before, after, beginning, end;
int ignore;
beginning = Fmarker_position (w->start);
XSETINT (end, (BUF_Z (b) - XFASTINT (w->window_end_pos)));
before
= Fprevious_single_property_change (make_number (pos + 1),
Qmouse_face,
w->buffer, beginning);
after
= Fnext_single_property_change (position, Qmouse_face,
w->buffer, end);
/* Record this as the current active region. */
fast_find_position (w, XFASTINT (before),
&mouse_face_beg_col,
&mouse_face_beg_row);
mouse_face_past_end
= !fast_find_position (w, XFASTINT (after),
&mouse_face_end_col,
&mouse_face_end_row);
mouse_face_window = window;
mouse_face_face_id
= face_at_buffer_position (w, pos, 0, 0,
&ignore, pos + 1, 1);
/* Display it as active. */
term_show_mouse_face (DRAW_MOUSE_FACE);
}
}
/* Look for a `help-echo' property. */
{
Lisp_Object help;
extern Lisp_Object Qhelp_echo;
/* Check overlays first. */
help = Qnil;
for (i = noverlays - 1; i >= 0 && NILP (help); --i)
{
overlay = overlay_vec[i];
help = Foverlay_get (overlay, Qhelp_echo);
}
if (!NILP (help))
{
help_echo_string = help;
help_echo_window = window;
help_echo_object = overlay;
help_echo_pos = pos;
}
/* Try text properties. */
else if (NILP (help)
&& ((STRINGP (glyph->object)
&& glyph->charpos >= 0
&& glyph->charpos < SCHARS (glyph->object))
|| (BUFFERP (glyph->object)
&& glyph->charpos >= BEGV
&& glyph->charpos < ZV)))
{
help = Fget_text_property (make_number (glyph->charpos),
Qhelp_echo, glyph->object);
if (!NILP (help))
{
help_echo_string = help;
help_echo_window = window;
help_echo_object = glyph->object;
help_echo_pos = glyph->charpos;
}
}
}
BEGV = obegv;
ZV = ozv;
current_buffer = obuf;
}
}
}
static int
term_mouse_movement (FRAME_PTR frame, Gpm_Event *event)
{
/* Has the mouse moved off the glyph it was on at the last sighting? */
if (event->x != last_mouse_x || event->y != last_mouse_y)
{
frame->mouse_moved = 1;
term_mouse_highlight (frame, event->x - 1, event->y - 1);
/* Remember which glyph we're now on. */
last_mouse_x = event->x;
last_mouse_y = event->y;
return 1;
}
return 0;
}
/* Return the current position of the mouse.
Set *f to the frame the mouse is in, or zero if the mouse is in no
Emacs frame. If it is set to zero, all the other arguments are
garbage.
Set *bar_window to Qnil, and *x and *y to the column and
row of the character cell the mouse is over.
Set *time to the time the mouse was at the returned position.
This should clear mouse_moved until the next motion
event arrives.
NOT CURRENTLY INVOKED: see mouse_position_hook below. */
static void
term_mouse_position (FRAME_PTR *fp, int insist, Lisp_Object *bar_window,
enum scroll_bar_part *part, Lisp_Object *x,
Lisp_Object *y, unsigned long *time)
{
Gpm_Event event;
struct timeval now;
int i;
BLOCK_INPUT;
*fp = SELECTED_FRAME ();
*bar_window = Qnil;
*part = 0;
i = Gpm_GetSnapshot (&event);
XSETINT (*x, event.x);
XSETINT (*y, event.y);
gettimeofday(&now, 0);
*time = (now.tv_sec * 1000) + (now.tv_usec / 1000);
UNBLOCK_INPUT;
}
/* Prepare a mouse-event in *RESULT for placement in the input queue.
If the event is a button press, then note that we have grabbed
the mouse. */
static Lisp_Object
term_mouse_click (struct input_event *result, Gpm_Event *event,
struct frame *f)
{
struct timeval now;
int i, j;
result->kind = GPM_CLICK_EVENT;
for (i = 0, j = GPM_B_LEFT; i < 3; i++, j >>= 1 )
{
if (event->buttons & j) {
result->code = i; /* button number */
break;
}
}
gettimeofday(&now, 0);
result->timestamp = (now.tv_sec * 1000) + (now.tv_usec / 1000);
if (event->type & GPM_UP)
result->modifiers = up_modifier;
else if (event->type & GPM_DOWN)
result->modifiers = down_modifier;
else
result->modifiers = 0;
if (event->type & GPM_SINGLE)
result->modifiers |= click_modifier;
if (event->type & GPM_DOUBLE)
result->modifiers |= double_modifier;
if (event->type & GPM_TRIPLE)
result->modifiers |= triple_modifier;
if (event->type & GPM_DRAG)
result->modifiers |= drag_modifier;
if (!(event->type & (GPM_MOVE|GPM_DRAG))) {
/* 1 << KG_SHIFT */
if (event->modifiers & (1 << 0))
result->modifiers |= shift_modifier;
/* 1 << KG_CTRL */
if (event->modifiers & (1 << 2))
result->modifiers |= ctrl_modifier;
/* 1 << KG_ALT || KG_ALTGR */
if (event->modifiers & (1 << 3)
|| event->modifiers & (1 << 1))
result->modifiers |= meta_modifier;
}
XSETINT (result->x, event->x - 1);
XSETINT (result->y, event->y - 1);
XSETFRAME (result->frame_or_window, f);
result->arg = Qnil;
return Qnil;
}
int
handle_one_term_event (struct tty_display_info *tty, Gpm_Event *event, struct input_event* hold_quit)
{
struct frame *f = XFRAME (tty->top_frame);
int i, j, fd;
struct input_event ie;
int do_help = 0;
int count = 0;
EVENT_INIT (ie);
ie.kind = NO_EVENT;
ie.arg = Qnil;
if (event->type & GPM_MOVE) {
unsigned char buf[6 * sizeof (short)];
unsigned short *arg = (unsigned short *) buf + 1;
const char *name;
previous_help_echo_string = help_echo_string;
help_echo_string = Qnil;
/* Display mouse pointer */
buf[sizeof(short) - 1] = 2; /* set selection */
arg[0] = arg[2] = (unsigned short) event->x;
arg[1] = arg[3] = (unsigned short) event->y;
arg[4] = (unsigned short) 3;
name = (const char *) ttyname (0);
fd = open (name, O_WRONLY);
ioctl (fd, TIOCLINUX, buf + sizeof (short) - 1);
close(fd);
term_mouse_movement (f, event);
/* If the contents of the global variable help_echo_string
has changed, generate a HELP_EVENT. */
if (!NILP (help_echo_string)
|| !NILP (previous_help_echo_string))
do_help = 1;
goto done;
}
else {
f->mouse_moved = 0;
term_mouse_click (&ie, event, f);
//kbd_buffer_store_event_hold (&ie, hold_quit);
}
done:
if (ie.kind != NO_EVENT)
{
kbd_buffer_store_event_hold (&ie, hold_quit);
count++;
}
if (do_help
&& !(hold_quit && hold_quit->kind != NO_EVENT))
{
Lisp_Object frame;
if (f)
XSETFRAME (frame, f);
else
frame = Qnil;
gen_help_event (help_echo_string, frame, help_echo_window,
help_echo_object, help_echo_pos);
count++;
}
return count;
}
DEFUN ("term-open-connection", Fterm_open_connection, Sterm_open_connection,
0, 0, 0,
doc: /* Open a connection to Gpm. */)
()
{
struct tty_display_info *tty = FRAME_TTY (SELECTED_FRAME ());
Gpm_Connect connection;
connection.eventMask = ~0;
connection.defaultMask = ~GPM_HARD;
connection.maxMod = ~0;
connection.minMod = 0;
/* We only support GPM on the controlling tty. */
if (term_gpm || tty->terminal->id > 1
|| Gpm_Open (&connection, 0) < 0)
return Qnil;
else
{
term_gpm = 1;
gpm_tty = tty->terminal->id;
reset_sys_modes (tty);
init_sys_modes (tty);
add_gpm_wait_descriptor (gpm_fd);
return Qt;
}
}
DEFUN ("term-close-connection", Fterm_close_connection, Sterm_close_connection,
0, 0, 0,
doc: /* Close a connection to Gpm. */)
()
{
delete_gpm_wait_descriptor (gpm_fd);
while (Gpm_Close()); /* close all the stack */
term_gpm = 0;
return Qnil;
}
#endif /* HAVE_GPM */
/*********************************************************************** /***********************************************************************
Initialization Initialization
@ -2509,6 +3258,14 @@ init_tty (char *name, char *terminal_type, int must_succeed)
encode_terminal_bufsize = 0; encode_terminal_bufsize = 0;
#ifdef HAVE_GPM
/* TODO: Can't get Gpm_Snapshot in term_mouse_position to work: test with
(mouse-position). Also set-mouse-position won't work as is. */
/* mouse_position_hook = term_mouse_position; */
mouse_face_window = Qnil;
#endif
#ifdef WINDOWSNT #ifdef WINDOWSNT
initialize_w32_display (); initialize_w32_display ();
@ -3139,6 +3896,10 @@ bigger, or it may make it blink, or it may do nothing at all. */);
defsubr (&Scontrolling_tty_p); defsubr (&Scontrolling_tty_p);
defsubr (&Ssuspend_tty); defsubr (&Ssuspend_tty);
defsubr (&Sresume_tty); defsubr (&Sresume_tty);
#ifdef HAVE_GPM
defsubr (&Sterm_open_connection);
defsubr (&Sterm_close_connection);
#endif /* HAVE_GPM */
} }

View File

@ -191,7 +191,11 @@ enum event_kind
symbols, respectively. Member `arg' is a Lisp object converted symbols, respectively. Member `arg' is a Lisp object converted
from the received Apple event. Parameters for non-Apple events from the received Apple event. Parameters for non-Apple events
are converted to those in Apple events. */ are converted to those in Apple events. */
MAC_APPLE_EVENT MAC_APPLE_EVENT,
#endif
#ifdef HAVE_GPM
GPM_CLICK_EVENT
#endif #endif
}; };
@ -290,6 +294,17 @@ enum {
meta_modifier = CHAR_META /* Under X, the XK_Meta_[LR] keysyms. */ meta_modifier = CHAR_META /* Under X, the XK_Meta_[LR] keysyms. */
}; };
#ifdef HAVE_GPM
#include <gpm.h>
extern int handle_one_term_event (struct tty_display_info *, Gpm_Event *, struct input_event *);
/* Nonzero means mouse is enabled on Linux console */
extern int term_gpm;
/* The id of the terminal device for which we have gpm support. */
extern int gpm_tty;
#endif
#endif /* CONSP */ #endif /* CONSP */

View File

@ -12786,7 +12786,7 @@ redisplay_window (window, just_this_one_p)
int rc; int rc;
int centering_position = -1; int centering_position = -1;
int last_line_misfit = 0; int last_line_misfit = 0;
int save_beg_unchanged, save_end_unchanged; int beg_unchanged, end_unchanged;
SET_TEXT_POS (lpoint, PT, PT_BYTE); SET_TEXT_POS (lpoint, PT, PT_BYTE);
opoint = lpoint; opoint = lpoint;
@ -12851,8 +12851,8 @@ redisplay_window (window, just_this_one_p)
set_buffer_internal_1 (XBUFFER (w->buffer)); set_buffer_internal_1 (XBUFFER (w->buffer));
SET_TEXT_POS (opoint, PT, PT_BYTE); SET_TEXT_POS (opoint, PT, PT_BYTE);
save_beg_unchanged = BEG_UNCHANGED; beg_unchanged = BEG_UNCHANGED;
save_end_unchanged = END_UNCHANGED; end_unchanged = END_UNCHANGED;
current_matrix_up_to_date_p current_matrix_up_to_date_p
= (!NILP (w->window_end_valid) = (!NILP (w->window_end_valid)
@ -12977,6 +12977,8 @@ redisplay_window (window, just_this_one_p)
w->force_start = Qt; w->force_start = Qt;
} }
force_start:
/* Handle case where place to start displaying has been specified, /* Handle case where place to start displaying has been specified,
unless the specified location is outside the accessible range. */ unless the specified location is outside the accessible range. */
if (!NILP (w->force_start) if (!NILP (w->force_start)
@ -13156,40 +13158,16 @@ redisplay_window (window, just_this_one_p)
than a simple mouse-click. */ than a simple mouse-click. */
if (NILP (w->start_at_line_beg) if (NILP (w->start_at_line_beg)
&& NILP (do_mouse_tracking) && NILP (do_mouse_tracking)
&& CHARPOS (startp) > BEGV) && CHARPOS (startp) > BEGV
&& CHARPOS (startp) > BEG + beg_unchanged
&& CHARPOS (startp) <= Z - end_unchanged)
{ {
#if 0 w->force_start = Qt;
/* The following code tried to make BEG_UNCHANGED and if (XMARKER (w->start)->buffer == current_buffer)
END_UNCHANGED up to date (similar to try_window_id). compute_window_start_on_continuation_line (w);
Is it important to do so? SET_TEXT_POS_FROM_MARKER (startp, w->start);
goto force_start;
The trouble is that it's a little too strict when it }
comes to overlays: modify_overlay can call
BUF_COMPUTE_UNCHANGED, which alters BUF_BEG_UNCHANGED and
BUF_END_UNCHANGED directly without moving the gap.
This can result in spurious recentering when overlays are
altered in the buffer. So unless it's proven necessary,
let's leave this commented out for now. -- cyd. */
if (MODIFF > SAVE_MODIFF
|| BEG_UNCHANGED + END_UNCHANGED > Z_BYTE)
{
if (GPT - BEG < BEG_UNCHANGED)
BEG_UNCHANGED = GPT - BEG;
if (Z - GPT < END_UNCHANGED)
END_UNCHANGED = Z - GPT;
}
#endif
if (CHARPOS (startp) > BEG + save_beg_unchanged
&& CHARPOS (startp) <= Z - save_end_unchanged)
{
/* There doesn't seems to be a simple way to find a new
window start that is near the old window start, so
we just recenter. */
goto recenter;
}
}
#if GLYPH_DEBUG #if GLYPH_DEBUG
debug_method_add (w, "same window start"); debug_method_add (w, "same window start");