Patches applied:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 * emacs@sv.gnu.org/emacs--devo--0--patch-441
   lisp/url/url-methods.el: Fix format error when http_proxy is empty string

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-582
This commit is contained in:
Karoly Lorentey 2006-10-14 17:36:28 +00:00
commit 12b6af5c7e
312 changed files with 18192 additions and 8333 deletions

317
AUTHORS
View file

@ -12,7 +12,7 @@ Abraham Nahum: changed configure.in dgux4.h sysdep.c
Abramo Bagnara: changed term.c
Adrian Aichner: changed erc-log.el erc.el erc-autojoin.el erc-backend.el
erc-dcc.el erc-members.el erc-nets.el erc-sound.el
erc-dcc.el erc-members.el erc-nets.el erc-sound.el etags.c
Adrian Colley: changed aix3-2.h
@ -46,7 +46,7 @@ Albert L. Ting: changed gnus-group.el mail-hist.el
Alex Coventry: changed files.el
Alex Ott: changed TUTORIAL.ru ispell.el ru-refcard.ps ru-refcard.tex
Alex Ott: changed TUTORIAL.ru ru-refcard.tex ispell.el ru-refcard.ps
Alex Rezinsky: wrote which-func.el
@ -56,8 +56,8 @@ Alex Schroeder: wrote ansi-color.el cus-theme.el erc-compat.el
and changed erc.el erc-track.el erc-button.el erc-stamp.el erc-match.el
erc-autoaway.el erc-nickserv.el Makefile erc-autojoin.el erc-fill.el
erc-pcomplete.el erc-complete.el erc-ibuffer.el erc-members.el
comint.el custom.el erc-bbdb.el erc-chess.el erc-ezbounce.el
erc-imenu.el erc-page.el and 24 other files
rcirc.texi comint.el custom.el erc-bbdb.el erc-chess.el erc-ezbounce.el
erc-imenu.el and 24 other files
Alexander Klimov: changed man.el
@ -80,6 +80,8 @@ Alfred Correira: changed generic-x.el
Alfred M. Szmidt: changed compile.el html2text.el
Alfredo Finelli: changed TUTORIAL.it
Ami Fischman: changed calendar.el diary-lib.el
Anders Holst: wrote hippie-exp.el
@ -110,11 +112,12 @@ Andreas Leue: changed artist.el
Andreas Luik: changed xfns.c xterm.c
Andreas Schwab: changed Makefile.in files.el lisp.h xdisp.c alloc.c
configure.in fns.c coding.c dired.el editfns.c info.el eval.c fileio.c
print.c simple.el buffer.c minibuf.c xterm.c emacs.c keyboard.c
process.c and 443 other files
configure.in fns.c print.c coding.c dired.el editfns.c info.el eval.c
fileio.c simple.el buffer.c minibuf.c xterm.c emacs.c keyboard.c
process.c and 444 other files
Andreas Seltenreich: changed nnweb.el gnus-art.el gnus-ml.el gnus.texi
Andreas Seltenreich: changed nnweb.el gnus-art.el gnus-ml.el gnus-srvr.el
gnus-start.el gnus-util.el gnus.el gnus.texi mm-url.el nnslashdot.el
url-cookie.el url-http.el
Andrew Choi: wrote mac-win.el
@ -189,6 +192,8 @@ Benjamin Riefenstahl: changed emacs.c mac-win.el macterm.c ms-w32.h
Benjamin Rutt: changed vc.el diff-mode.el ffap.el nnmbox.el simple.el
vc-cvs.el
Bill Atkins: changed wdired.el
Bill Burton: changed ptx.h sequent-ptx.h
Bill Carpenter: wrote feedmail.el (public domain)
@ -231,6 +236,8 @@ and changed isearch.el sendmail.el
Bob Halley: changed esh-io.el
Bob Rogers: changed ffap.el
Bob Weiner: changed info.el quail.el
Boris Goldowsky: wrote avoid.el descr-text.el enriched.el facemenu.el
@ -304,17 +311,18 @@ Charlie Martin: wrote autoinsert.el
Cheng Gao: changed MORE.STUFF flymake.el tips.texi url-dired.el
url-file.el url-handlers.el url-http.el url-nfs.el
Chong Yidong: changed custom.el cus-edit.el longlines.el display.texi
files.el files.texi simple.el text.texi custom.texi cus-theme.el
wid-edit.el xterm.c frames.texi info.el misc.texi mouse.el xfns.c
anti.texi dired.texi image.c keymaps.texi and 131 other files
Chong Yidong: changed cus-edit.el custom.el simple.el display.texi
longlines.el files.el text.texi custom.texi files.texi wid-edit.el
cus-theme.el info.el keyboard.c xterm.c compile.el frames.texi
image-mode.el keymaps.texi misc.texi mouse.el sendmail.el
and 156 other files
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
syntax.c texnfo-upd.el x11fns.c xfns.c dired.el fileio.c hp9000s800.h
indent.c info.el man.el and 17 other files
Chris Moore: changed wdired.el
Chris Moore: changed dired.el wdired.el
Chris Prince: changed w32term.c
@ -378,10 +386,10 @@ Dan Christensen: changed gnus-sum.el nnfolder.el gnus-art.el
gnus-group.el gnus-score.el nnmail.el
Dan Nicolaescu: wrote iris-ansi.el romanian.el
and changed term.el hideshow.el xterm.el isearch.el icon.el cus-edit.el
font-lock.el lisp.h sh-script.el eterm-color.ti faces.el rxvt.el
vhdl-mode.el bindings.el compile.el dabbrev.el grep.el ibuffer.el
imenu.el outline.el replace.el and 153 other files
and changed term.el xterm.el hideshow.el isearch.el icon.el lisp.h
cus-edit.el font-lock.el sh-script.el eterm-color.ti faces.el
ibuffer.el rxvt.el vhdl-mode.el xterm.c bindings.el compile.el
dabbrev.el grep.el imenu.el outline.el and 159 other files
Daniel Brockman: changed cus-start.el format-spec.el ibuffer.el rcirc.el
@ -425,7 +433,7 @@ Dave Love: wrote autoarg.el autoconf.el benchmark.el cfengine.el
welsh.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
wid-edit.el vc.el fns.c 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
byte-opt.el bytecomp.el and 729 other files
Dave Pearson: wrote 5x5.el quickurl.el
@ -470,10 +478,9 @@ David J. Mackenzie: changed configure.in etags.c fakemail.c movemail.c
etags-vmslib.c fortran.el hexl.c isearch.el and 12 other files
David Kastrup: changed greek.el replace.el search.c ange-ftp.el faq.texi
calc.el meta-mode.el process.c search.texi DEBUG MAILINGLISTS
Makefile.in autoload.el browse-url.el buffer.c building.texi
calc-alg.el configure.in cus-theme.el desktop.el dispnew.c
and 21 other files
help.el mouse.el Makefile.in calc.el desktop.el keymaps.texi
meta-mode.el process.c search.texi DEBUG MAILINGLISTS autoload.el
browse-url.el buffer.c building.texi calc-alg.el and 30 other files
David K,Ae(Bgedal: wrote tempo.el
and changed sendmail.el xmenu.c
@ -530,6 +537,8 @@ Deepak Goel: changed README ada-mode.el ada-xref.el appt.el apropos.el
Denis Howe: wrote browse-url.el
Denis St,A|(Bnkel: changed ibuf-ext.el
Derek Atkins: changed pgg-pgp.el
Derek L. Davies: changed gud.el
@ -542,7 +551,7 @@ Diane Murray: changed erc.el erc-button.el erc-menu.el erc-match.el
erc-track.el erc-nets.el erc-backend.el erc-list.el erc-nickserv.el
erc-autoaway.el erc-stamp.el erc-compat.el erc-goodies.el erc-log.el
Makefile erc-fill.el erc-ibuffer.el erc-notify.el erc-ring.el
erc-speak.el erc-speedbar.el and 22 other files
erc-speak.el erc-speedbar.el and 25 other files
Dick King: wrote uniquify.el
@ -584,8 +593,8 @@ 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
viper.el erc-backend.el erc-chess.el erc-dcc.el erc-ezbounce.el
erc-list.el erc-macs.el erc-match.el erc-ring.el erc-stamp.el
goto-addr.el
erc-goodies.el erc-list.el erc-macs.el erc-match.el erc-ring.el
erc-stamp.el goto-addr.el
Edwin Steiner: changed gnus-nocem.el
@ -601,8 +610,8 @@ Eli Tziperman: wrote rmail-spam-filter.el
Eli Zaretskii: wrote codepage.el rxvt.el tty-colors.el
and changed msdos.c Makefile.in files.el makefile.w32-in info.el fileio.c
startup.el mainmake.v2 config.bat menu-bar.el pc-win.el simple.el
internal.el msdos.h xfaces.c rmail.el dosfns.c frame.c faces.el emacs.c
frame.el and 512 other files
internal.el msdos.h xfaces.c frame.c rmail.el dosfns.c faces.el
frame.el emacs.c and 517 other files
Emanuele Giaquinta: changed rxvt.el configure.in etags.c frame.el
sh-script.el text.texi
@ -628,8 +637,8 @@ Eric Decker: changed hp9000s800.h hpux.h sysdep.c
Eric Ding: wrote goto-addr.el
and changed mh-utils.el mh-e.el mh-comp.el mh-mime.el
Eric Hanchrow: changed TUTORIAL.es abbrev.el autorevert.el dired.el
emacsclient.c ispell.el make-dist
Eric Hanchrow: changed TUTORIAL.es abbrev.el autorevert.el delphi.el
dired.el emacsclient.c ispell.el make-dist
Eric M. Ludlam: wrote checkdoc.el dframe.el ezimage.el sb-image.el
speedbar.el
@ -686,6 +695,8 @@ Flemming Hoejstrup Hansen: changed forms.el
Florian Weimer: changed message.el coding.c gnus-art.el gnus.el gnus.texi
mm-util.el
Francesc Rocher: changed cus-start.el macterm.c w32term.c xdisp.c xterm.c
Francesco Potort,Al(B: wrote cmacexp.el
and changed etags.c man.el delta.h undigest.el comint.el configure.in
uniquify.el etags.1 latin-post.el rmail.el etags.el latin-alt.el
@ -699,7 +710,7 @@ Francis Litterio: changed erc.el erc-list.el erc-dcc.el erc-notify.el
erc-button.el erc-goodies.el erc-nets.el erc-ring.el Makefile
erc-pcomplete.el erc-backend.el erc-ibuffer.el erc-match.el
erc-nickserv.el erc-page.el erc-speedbar.el keymaps.texi message.el
os.texi saveplace.el xterm.c xterm.h
os.texi saveplace.el w32term.c and 3 other files
Francois Felix Ingrand: changed gnus-salt.el
@ -795,7 +806,7 @@ Glenn Morris: changed f90.el diary-lib.el calendar.el fortran.el
calendar.texi appt.el sh-script.el timeclock.el cal-menu.el
cal-hebrew.el cal-islam.el files.el holidays.el programs.texi
scroll-all.el startup.el cal-coptic.el cal-julian.el cal-move.el
cal-tex.el cal-x.el and 36 other files
cal-tex.el cal-x.el and 37 other files
Glynn Clements: wrote gamegrid.el snake.el tetris.el
@ -824,7 +835,7 @@ Guillermo J. Rozas: wrote fakemail.c
Gunnar Horrigmo: changed gnus-sum.el
Gustav H,Ae(Bllberg: changed compile.el
Gustav H,Ae(Bllberg: changed compile.el rect.el
Guy Geens: changed gnus-score.el
@ -959,9 +970,9 @@ and changed bytecode.c mail-extr.el subr.el
Jan Dj,Ad(Brv: wrote dnd.el x-dnd.el
and changed gtkutil.c xterm.c xfns.c xmenu.c xterm.h gtkutil.h
configure.in Makefile.in config.in configure frames.texi keyboard.c
emacs.c x-win.el xselect.c xlwmenu.c alloc.c startup.el xdisp.c
xresources.texi fileio.c and 168 other files
configure.in keyboard.c Makefile.in config.in frames.texi configure
x-win.el emacs.c xselect.c alloc.c xlwmenu.c startup.el xdisp.c
xresources.texi cus-start.el and 172 other files
Jan Nieuwenhuizen: changed info.el TUTORIAL.nl emacs.c emacsclient.c
gnus-start.el gud.el nnmh.el server.el startup.el
@ -983,13 +994,13 @@ Jason Rumney: wrote w32-vars.el
and changed w32fns.c w32term.c w32menu.c w32-win.el w32term.h
makefile.w32-in w32.c w32bdf.c w32-fns.el w32select.c w32console.c
w32gui.h w32proc.c keyboard.c mule-cmds.el emacs.c fileio.c w32bdf.h
w32inevt.c config.nt configure.bat and 77 other files
w32inevt.c config.nt configure.bat and 79 other files
Jay Belanger: changed calc.texi calc.el calc-ext.el calc-embed.el
calc-aent.el calc-prog.el calc-arith.el calc-help.el calc-lang.el
calcalg2.el calc-graph.el calc-store.el calc-units.el calc-misc.el
calc-yank.el calc-alg.el calc-poly.el calccomp.el calc-mode.el
calc-vec.el calc-forms.el and 26 other files
calcalg2.el COPYING calc-graph.el calc-store.el calc-units.el
calc-misc.el calc-yank.el calc-alg.el calc-poly.el calccomp.el
calc-mode.el calc-rewr.el and 34 other files
Jay K. Adams: wrote jka-cmpr-hook.el jka-compr.el
@ -999,6 +1010,8 @@ Jean-Philippe Theberge: wrote thumbs.el
Jeff Dwork: changed ehelp.el facemenu.el
Jeff Miller: changed appt.el
Jeff Morgenthaler: changed flow-ctrl.el vt200.el vt201.el vt220.el
vt240.el
@ -1056,6 +1069,8 @@ Jim Thompson: wrote ps-print.el
Jim Wilson: changed Makefile.in alloca.c
Jindrich Makovicka: changed eval.c fns.c
Jirka Kosek: changed mule.el
Joakim Hove: wrote html2text.el
@ -1092,10 +1107,10 @@ Joel Ray Holveck: changed gnus-sum.el info.el
Joev Dubach: changed nntp.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 align.el
calendar.el cl.texi custom.el dired-aux.el display.texi erc-bbdb.el
erc-button.el erc-compat.el erc-dcc.el erc-list.el erc-log.el
erc-nicklist.el and 9 other files
erc-nickserv.el erc-ring.el erc-speak.el erc-track.el simple.el
align.el calendar.el cl.texi custom.el dired-aux.el display.texi
erc-bbdb.el erc-button.el erc-compat.el erc-dcc.el erc-list.el
erc-log.el and 10 other files
Johan Vromans: wrote forms-d2.el forms.el iso-acc.el
and changed complete.el
@ -1110,7 +1125,7 @@ John Grabowski: changed xfaces.c xfns.c
John H. Palmieri: changed gnus-fun.el
John Heidemann: wrote mouse-copy.el mouse-drag.el zone-mode.el
John Heidemann: wrote mouse-copy.el mouse-drag.el
John Hughes: changed term.c
@ -1118,8 +1133,8 @@ John Mongan: changed f90.el
John Paul Wallington: changed ibuffer.el ibuf-ext.el subr.el files.el
help-fns.el thumbs.el fns.c rmail.el bindings.el bytecomp.el
cus-theme.el info.el re-builder.el startup.el xfns.c apropos.el
arc-mode.el browse-url.el comint.el cus-start.el display.texi
cus-theme.el info.el re-builder.el simple.el startup.el xfns.c
apropos.el arc-mode.el browse-url.el comint.el cus-start.el
and 115 other files
John Robinson: wrote bg-mouse.el
@ -1166,7 +1181,7 @@ and changed erc.el erc-track.el erc-backend.el erc-match.el erc-stamp.el
erc-button.el erc-fill.el erc-truncate.el erc-compat.el erc-members.el
Makefile erc-dcc.el erc-ibuffer.el erc-page.el erc-pcomplete.el
erc-sound.el erc-bbdb.el erc-imenu.el erc-lang.el erc-list.el
erc-macs.el and 8 other files
erc-macs.el and 9 other files
Jose E. Marchesi: changed smtpmail.el
@ -1194,7 +1209,7 @@ and changed files.el perl-mode.el
Juanma Barranquero: changed makefile.w32-in help-fns.el subr.el faces.el
files.el w32fns.c cperl-mode.el replace.el simple.el eval.c
sh-script.el vhdl-mode.el comint.el org.el xdisp.c allout.el bs.el
desktop.el idlwave.el keyboard.c process.c and 549 other files
desktop.el idlwave.el keyboard.c process.c and 550 other files
Juergen Hoetzel: changed url-handlers.el
@ -1208,8 +1223,8 @@ Jure Cuhalev: changed ispell.el
Juri Linkov: changed info.el simple.el isearch.el replace.el compile.el
faces.el display.texi grep.el descr-text.el cus-edit.el dired.el
dired-aux.el edebug.el files.el lisp-mode.el lisp.el mule.el
compare-w.el desktop.el files.texi font-lock.el and 218 other files
dired-aux.el edebug.el files.el lisp-mode.el lisp.el modes.texi mule.el
compare-w.el desktop.el files.texi and 220 other files
Justin Sheehy: changed gnus-sum.el nntp.el
@ -1236,10 +1251,10 @@ Kailash C. Chowksey: changed HELLO Makefile.in ind-util.el kannada.el
knd-util.el loadup.el makefile.w32-in
Karl Berry: changed info.texi emacs.texi elisp.texi emacs-xtra.texi
filelock.c building.texi cmdargs.texi copyright.el dired.c faq.texi
gnu.texi help.texi macos.texi msdog.texi mule.texi sending.texi
texinfo.el texinfo.tex abbrevs.texi ada-mode.texi anti.texi
and 54 other files
filelock.c anti.texi building.texi cmdargs.texi copyright.el
custom.texi customize.texi dired.c display.texi faq.texi frames.texi
gnu.texi help.texi macos.texi minibuf.texi msdog.texi mule.texi
and 65 other files
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
@ -1249,8 +1264,8 @@ Karl Eichwalder: changed Makefile.in add-log.el bookmark.el dired-aux.el
dired.el info.el menu-bar.el midnight.el po.el
Karl Fogel: wrote bookmark.el mail-hist.el saveplace.el
and changed isearch.el menu-bar.el autogen.sh editfns.c vc-svn.el
window.c
and changed isearch.el menu-bar.el autogen.sh editfns.c nnmail.el
vc-svn.el window.c
Karl Heuer: changed keyboard.c lisp.h xdisp.c buffer.c xfns.c xterm.c
alloc.c files.el frame.c configure.in window.c data.c minibuf.c
@ -1269,8 +1284,8 @@ Katsuhiro Hermit Endo: changed gnus-spec.el
Katsumi Yamaoka: wrote canlock.el
and changed gnus-art.el message.el gnus-sum.el gnus.texi mm-decode.el
mm-view.el gnus-util.el gnus-msg.el gnus.el mm-util.el lpath.el
gnus-start.el gnus-group.el mm-uu.el dgnushack.el gnus-agent.el nntp.el
mml.el nnrss.el rfc2047.el rfc2231.el and 69 other files
gnus-start.el rfc2047.el gnus-group.el mm-uu.el dgnushack.el
gnus-agent.el nntp.el mml.el nnrss.el nnheader.el and 71 other files
Kaveh R. Ghazi: changed delta88k.h xterm.c
@ -1307,9 +1322,9 @@ Ken Stevens: wrote ispell.el
Kenichi Handa: wrote cyrillic.el isearch-x.el py-punct.el pypunct-b5.el
quail.el thai-word.el
and changed coding.c mule-cmds.el mule.el charset.c fileio.c xterm.c
fns.c ccl.c mule-conf.el Makefile.in fontset.c charset.h coding.h
fns.c ccl.c Makefile.in mule-conf.el fontset.c charset.h coding.h
fontset.el mule-diag.el xdisp.c editfns.c process.c insdel.c
japanese.el characters.el and 276 other files
japanese.el characters.el and 277 other files
Kenneth Stailey: changed alpha.h configure.in ns32000.h openbsd.h pmax.h
sparc.h unexalpha.c unexelf.c
@ -1345,17 +1360,17 @@ Kevin Rodgers: changed compile.el mailabbrev.el dired-x.el simple.el
Kevin Ryde: wrote info-xref.el
and changed info-look.el info.el gnus-art.el gnus-sum.el mailcap.el
text.texi MORE.STUFF cc-align.el cmdargs.texi compile.texi display.texi
em-alias.el em-dirs.el em-hist.el em-unix.el emacs-lisp-intro.texi
ffap.el frames.texi glossary.texi gnus.texi makeinfo.el
os.texi text.texi MORE.STUFF cc-align.el cmdargs.texi compile.texi
display.texi em-alias.el em-dirs.el em-hist.el em-unix.el
emacs-lisp-intro.texi ffap.el frames.texi glossary.texi gnus.texi
and 12 other files
Kim F. Storm: wrote animage.el bindat.el cua-base.el cua-gmrk.el
cua-rect.el ido.el keypad.el kmacro.el
and changed xdisp.c dispextern.h simple.el xterm.c process.c window.c
keyboard.c w32term.c subr.el dispnew.c fringe.c lisp.h macterm.c
display.texi fns.c xfaces.c alloc.c xterm.h info.el xfns.c .gdbinit
and 226 other files
Kim F. Storm: wrote bindat.el cua-base.el cua-gmrk.el cua-rect.el
ido.el keypad.el kmacro.el
and changed xdisp.c dispextern.h simple.el window.c xterm.c keyboard.c
process.c w32term.c dispnew.c subr.el lisp.h fringe.c macterm.c
display.texi fns.c alloc.c xfaces.c xfns.c xterm.h keymap.c .gdbinit
and 238 other files
Kim-Minh Kaplan: changed gnus-picon.el gnus-sum.el gnus-start.el
gnus-win.el gnus-xmas.el gnus.texi message.el nndraft.el nnml.el
@ -1389,7 +1404,9 @@ and changed saveconf.el buffer.c mail-utils.el sendmail.el
Kyotaro Horiguchi: changed coding.c indent.c
K,Aa(Broly L$,1 q(Brentey: changed keyboard.c coding.c xfns.c xterm.c xterm.h
K,Aa(Broly L$,1 q(Brentey: changed xfns.c bindings.el keyboard.c HELLO authors.el
buff-menu.el buffer.c buffers.texi cmds.c coding.c editfns.c frame.el
menu-bar.el print.c simple.el xdisp.c xterm.c xterm.h
Larry Kolodney: wrote cvtmail.c
@ -1440,8 +1457,8 @@ and changed fortran.el ispell.el sendmail.el cmuscheme.el comint.el
Leigh Stoller: changed emacsclient.c emacsserver.c server.el
Lennart Borgman: changed mouse.el recentf.el texinfmt.el w32term.c
w32term.h window.el
Lennart Borgman: changed window.el mouse.el recentf.el texinfmt.el
w32term.c w32term.h
Lennart Staflin: changed dired.el diary-ins.el diary-lib.el tq.el xdisp.c
@ -1461,17 +1478,13 @@ Lucid, Inc.: changed byte-opt.el byte-run.el bytecode.c bytecomp.el
mailabbrev.el select.el xfaces.c xselect.c
Lute Kamstra: changed modes.texi generic.el debug.el generic-x.el
font-lock.el subr.el debugging.texi easy-mmode.el elisp.texi hl-line.el
simple.el Makefile.in battery.el bindings.el calc.el cmdargs.texi
edebug.texi emacs.texi info.el make-tarball.txt octave-inf.el
and 217 other files
font-lock.el subr.el Makefile.in debugging.texi easy-mmode.el
elisp.texi hl-line.el simple.el battery.el bindings.el calc.el
cmdargs.texi edebug.texi emacs.texi info.el make-tarball.txt
octave-inf.el and 217 other files
Lynn Slater: wrote help-macro.el
L$,1 q(Brentey K,Aa(Broly: changed bindings.el xfns.c buff-menu.el buffer.c
buffers.texi cmds.c editfns.c frame.el menu-bar.el print.c simple.el
xdisp.c
MCC: wrote xmenu.c
and changed emacsclient.c emacsserver.c etags.c lisp.h movemail.c
rmail.el rmailedit.el rmailkwd.el rmailmsc.el rmailout.el rmailsum.el
@ -1479,7 +1492,7 @@ and changed emacsclient.c emacsserver.c etags.c lisp.h movemail.c
Maciek Pasternacki: changed nnrss.el
Magnus Henoch: changed ispell.el
Magnus Henoch: changed ispell.el rcirc.el
Manuel Serrano: wrote flyspell.el
@ -1577,9 +1590,10 @@ Martin Lorentzon: changed vc.el vc-cvs.el vc-hooks.el vc-rcs.el
Martin Neitzel: changed sc.el
Martin Rudalics: changed cus-edit.el wid-edit.el font-lock.el syntax.c
custom.el fileio.c files.el find-func.el hideif.el info.el insdel.c
lisp-mode.el midnight.el mouse.el mwheel.el re-builder.el widget.el
Martin Rudalics: changed cus-edit.el wid-edit.el cus-start.el files.el
font-lock.el insdel.c syntax.c buffer.c buffer.h casefiddle.c custom.el
dispextern.h editfns.c eldoc.el fileio.c find-func.el hideif.el info.el
jit-lock.el lisp-mode.el lisp.h and 13 other files
Martin Stjernholm: wrote cc-bytecomp.el
and changed cc-engine.el cc-cmds.el cc-langs.el cc-defs.el cc-mode.el
@ -1596,9 +1610,9 @@ and changed gnuspost.el
Masatake Yamato: wrote cc-subword.el ld-script.el
and changed etags.el asm-mode.el xdisp.c bindings.el hexl.el man.el
simple.el wid-edit.el compile.el faces.el pcvs.el register.el
ruler-mode.el add-log.el buffer.c cus-face.el dired-x.el display.texi
font-lock.el gdb-ui.el gud.el and 56 other files
simple.el wid-edit.el add-log.el compile.el faces.el pcvs.el
register.el ruler-mode.el buffer.c cus-face.el dired-x.el display.texi
etags.c font-lock.el gdb-ui.el and 57 other files
Masayuki Ataka: changed texinfmt.el texinfo.el characters.el make-mode.el
@ -1679,18 +1693,18 @@ and changed ediff-merge.el ediff*.el viper*.el ediff-hooks.el menu-bar.el
viper-utils.el appt.el desktop.el ediff-meta.el ediff-nult.el
ediff.texi viper-mouse.el viper.texi
Michael Olson: changed erc.el erc-backend.el Makefile erc-stamp.el
erc-track.el erc-dcc.el erc-identd.el erc-match.el erc-notify.el
erc.texi erc-ibuffer.el erc-list.el erc-autoaway.el erc-bbdb.el
erc-compat.el erc-goodies.el erc-log.el erc-nicklist.el
erc-pcomplete.el erc-spelling.el erc-*.el and 39 other files
Michael Olson: changed erc.el erc-backend.el Makefile erc.texi
erc-stamp.el erc-log.el erc-autoaway.el erc-identd.el erc-track.el
erc-match.el erc-dcc.el erc-notify.el erc-goodies.el erc-ibuffer.el
erc-list.el erc-pcomplete.el erc-spelling.el erc-bbdb.el erc-compat.el
erc-nicklist.el and 42 other files
Michael Piotrowski: changed ps-print.el
Michael R. Cook: changed gnus-topic.el gnus-art.el gnus-sum.el
Michael R. Mauger: changed sql.el cua-base.el facemenu.el recentf.el
replace.el tramp.el w32fns.c
Michael R. Mauger: changed sql.el cua-base.el custom.el facemenu.el
recentf.el replace.el tramp.el w32fns.c
Michael R. Wolf: changed ange-ftp.el
@ -1705,14 +1719,17 @@ Michael Sperber [Mr. Preprocessor]: changed aix3-1.h aix4-2.h
Michael Staats: wrote pc-select.el
Michael Welsh Duggan: changed lisp.h w32term.c buffer.c gnus-spec.el
keyboard.c nnmail.el termhooks.h url-http.el w32-win.el w32fns.c
w32menu.c w32term.h xdisp.c xterm.c
Michael Welsh Duggan: changed lisp.h sh-script.el w32term.c buffer.c
gnus-spec.el keyboard.c nnmail.el termhooks.h url-http.el w32-win.el
w32fns.c w32menu.c w32term.h xdisp.c xterm.c
Michal Jankowski: changed insdel.c keyboard.c
Micha,Ak(Bl Cadilhac: changed ispell.el dispnew.c make-mode.el pong.el
print.c process.c
Michal Nazarewicz: changed ispell.el
Micha,Ak(Bl Cadilhac: changed ispell.el cus-edit.el dispnew.c ido.el info.el
life.el lpr.el make-mode.el pong.el print.c process.c startup.el
uni-input.el
Michelangelo Grigni: wrote ffap.el
and changed gnus-score.el
@ -1742,8 +1759,8 @@ Mikio Nakajima: changed ring.el viper-util.el
Milan Zamazal: wrote czech.el glasses.el tildify.el
and changed slovak.el abbrev.el compile.el filecache.el files.el
Miles Bader: wrote button.el image-file.el macroexp.el mb-depth.el
minibuf-eldef.el rfn-eshadow.el
Miles Bader: wrote button.el image-file.el macroexp.el minibuf-eldef.el
rfn-eshadow.el
and changed comint.el faces.el simple.el editfns.c xfaces.c info.el
xdisp.c minibuf.c wid-edit.el xterm.c subr.el window.el cus-edit.el
diff-mode.el dispextern.h xfns.c help.el lisp.h quick-install-emacs
@ -1752,7 +1769,7 @@ and changed comint.el faces.el simple.el editfns.c xfaces.c info.el
Miyashita Hisashi: changed ccl.c coding.c coding.h mule-cmds.el
mule-conf.el mule.el pop3.el
Miyoshi Masanori: changed mouse.el xdisp.c
Miyoshi Masanori: changed mouse.el smtpmail.el xdisp.c
Morioka Tomohiko: changed rmail.el rmailout.el rmailsum.el fns.c
message.el nnheader.el nnmail.el rmailkwd.el smiley.el
@ -1779,6 +1796,8 @@ Nachum Dershowitz: wrote cal-hebrew.el
Nagy Andras: wrote gnus-sieve.el
and changed imap.el
Nakaji Hiroyuki: changed mm-util.el
Nakamura Toshikazu: changed w32fns.c
NeXT, Inc.: wrote unexnext.c
@ -1799,10 +1818,10 @@ Nevin Kapur: changed nnmail.el gnus-group.el gnus-sum.el gnus.el
Niall Mansfield: changed etags.c
Nick Roberts: wrote gdb-ui.el
and changed gud.el building.texi tooltip.el speedbar.el thumbs.el
cc-mode.el DEBUG subr.el xt-mouse.el .gdbinit comint.el frames.texi
bindings.el descr-text.el display.texi gud-display.pbm help-mode.el
speedbar.texi tumme.el xdisp.c byte-run.el and 105 other files
and changed gud.el building.texi tooltip.el speedbar.el thumbs.el DEBUG
cc-mode.el frames.texi subr.el xt-mouse.el .gdbinit bindings.el
comint.el display.texi help-mode.el descr-text.el gud-display.pbm
speedbar.texi tumme.el xdisp.c byte-run.el and 112 other files
Nico Francois: changed w32fns.c w32inevt.c w32menu.c
@ -1848,6 +1867,8 @@ Olivier Lecarme: changed make-mode.el ange-ftp.el apropos.el bibtex.el
Olli Savia: changed etags.c syssignal.h
Osamu Yamane: changed smtpmail.el
Oscar Figueiredo: wrote eudc-bob.el eudc-export.el eudc-hotlist.el
eudc-vars.el eudc.el eudcb-bbdb.el eudcb-ldap.el eudcb-ph.el ldap.el
and changed ph.el
@ -1869,7 +1890,7 @@ Paul Eggert: wrote cal-dst.el rcs2log vcdiff
and changed editfns.c vc.el Makefile.in configure.in vc-hooks.el data.c
emacs.c gnus.el calendar.el config.in floatfns.c process.c sysdep.c
dired.el xterm.c callproc.c fileio.c filelock.c lread.c print.c
rmail.el and 287 other files
rmail.el and 290 other files
Paul Fisher: changed fns.c
@ -1976,6 +1997,8 @@ Pinku Surana: changed sql.el
Pmr-Sav: changed mail-utils.el rmail.el
Primoz Peterlin: changed TUTORIAL.sl
R. Bernstein: changed gud.el
Rafael Sep,Az(Blveda: changed TUTORIAL.es
@ -1993,8 +2016,9 @@ Rajesh Vaidheeswarran: wrote whitespace.el
and changed ffap.el
Ralf Angeli: wrote scroll-lock.el
and changed tex-mode.el comint.el flow-fill.el gnus-art.el killing.texi
mm-view.el pcl-cvs.texi smtpmail.el w32fns.c w32term.c window.c
and changed w32fns.c tex-mode.el comint.el flow-fill.el frame.el
gnus-art.el killing.texi mm-view.el pcl-cvs.texi smtpmail.el w32term.c
window.c
Ralf Fassel: changed dabbrev.el files.el fill.el iso-acc.el tar-mode.el
@ -2015,11 +2039,11 @@ Raymond Scholz: wrote deuglify.el
and changed gnus-art.el gnus-msg.el gnus.texi message.el nnmail.el
Reiner Steib: wrote gmm-utils.el
and changed message.el gnus-art.el gnus.texi gnus-sum.el gnus.el
and changed gnus-art.el message.el gnus.texi gnus-sum.el gnus.el
gnus-group.el mml.el gnus-faq.texi gnus-score.el gnus-start.el
gnus-util.el gnus-msg.el message.texi gnus-agent.el files.el mm-util.el
gnus-util.el gnus-msg.el message.texi gnus-agent.el mm-util.el files.el
spam-report.el nnweb.el spam.el deuglify.el mm-decode.el
and 155 other files
and 161 other files
Remek Trzaska: changed gnus-ems.el
@ -2029,6 +2053,8 @@ Ren,Ai(B Kyllingstad: changed pcomplete.el
Reto Zimmermann: changed vhdl-mode.el
Richard Bielawski: changed modes.texi
Richard Dawe: changed Makefile.in config.in
Richard G Bielawski: changed paren.el
@ -2045,8 +2071,8 @@ Richard M. Stallman: wrote [The original GNU emacs and numerous files]
easymenu.el font-lock.el image-mode.el menu-bar.el paren.el
and changed keyboard.c files.el simple.el xterm.c xdisp.c rmail.el
fileio.c process.c sysdep.c xfns.c buffer.c Makefile.in window.c
configure.in subr.el emacs.c sendmail.el startup.el editfns.c info.el
dispnew.c and 1322 other files
configure.in subr.el startup.el emacs.c editfns.c sendmail.el info.el
dispnew.c and 1334 other files
Richard Mlynarik: wrote cl-indent.el ebuff-menu.el ehelp.el env.c
rfc822.el terminal.el yow.el
@ -2075,11 +2101,12 @@ Robert Bihlmeyer: changed gnus-score.el gnus-util.el message.el
Robert Fenk: changed desktop.el
Robert J. Chassell: wrote makeinfo.el texinfo.el texnfo-upd.el
and changed texinfmt.el page-ext.el emacs.tex info.el loaddefs.el
texinfo-update.el INSTALL case-table.el cl.texinfo
emacs-lisp-intro.texi history.el informat.el latin-1.el latin-2.el
latin-3.el latin-4.el page.el tex-mode.el texinfo.tex texinfo.texinfo
vip.texinfo
and changed texinfmt.el page-ext.el emacs.tex emacs-lisp-intro.texi
info.el loaddefs.el texinfo-update.el texinfo.tex INSTALL case-table.el
cl.texinfo history.el informat.el latin-1.el latin-2.el latin-3.el
latin-4.el page.el tex-mode.el texinfo.texinfo vip.texinfo
Robert Thorpe: changed cus-start.el
Roderick Schertler: changed dgux.h dgux4.h gud.el sysdep.c
@ -2106,11 +2133,11 @@ Roland Winkler: changed bibtex.el appt.el artist.el conf-mode.el
Rolf Ebert: wrote ada-mode.el
and changed files.el find-file.el
Romain Francoise: changed faq.texi ibuf-ext.el compile.el dired-x.el
Romain Francoise: changed faq.texi dired-x.el ibuf-ext.el compile.el
message.el puresize.h replace.el files.texi gnus-fun.el gnus.texi
help-fns.el make-dist rcirc.el subr.el Makefile.in antlr-mode.el
bookmark.el buffer.c comint.el diary-lib.el dired.el
and 109 other files
and 121 other files
Roman Belenov: changed which-func.el
@ -2158,8 +2185,8 @@ Satyaki Das: wrote mh-acros.el mh-gnus.el mh-junk.el mh-search.el
and changed mh-e.el mh-utils.el mh-seq.el mh-index.el mh-comp.el
mh-mime.el mh-customize.el mh-loaddefs.el mh-funcs.el Makefile
mh-alias.el mh-pick.el mh-unit.el mh-init.el mh-identity.el mh-make.el
mh-xemacs-toolbar.el mh-xemacs-compat.el mh-inc.el highlight.xpm
mh-func.el and 7 other files
mh-xemacs-toolbar.el mh-xemacs-compat.el pgg-gpg.el mh-inc.el
highlight.xpm and 7 other files
Schlumberger Technology Corporation: changed gud.el
@ -2208,8 +2235,8 @@ Simon Josefsson: wrote dig.el dns-mode.el flow-fill.el fringe.el imap.el
mml-sec.el mml-smime.el nnfolder.el nnimap.el nnml.el rfc2104.el
sieve-manage.el sieve-mode.el sieve.el smime.el starttls.el tls.el
url-imap.el
and changed message.el gnus-sum.el gnus-art.el smtpmail.el pgg-gpg.el
pgg.el gnus-agent.el mml2015.el mml.el mm-decode.el mml1991.el
and changed message.el gnus-sum.el gnus-art.el smtpmail.el pgg.el
pgg-gpg.el gnus-agent.el mml2015.el mml.el mm-decode.el mml1991.el
gnus-group.el gnus-msg.el gnus.el pgg-pgp5.el gnus-cache.el
gnus-sieve.el browse-url.el gnus-int.el mail-source.el pgg-parse.el
and 91 other files
@ -2226,7 +2253,8 @@ and changed comint.el font-lock.el shell.el rmail.el fortran.el
Skip Collins: changed w32fns.c w32term.c w32term.h
Slawomir Nowaczyk: changed TUTORIAL.pl flyspell.el ls-lisp.el
Slawomir Nowaczyk: changed python.el TUTORIAL.pl emacs.py flyspell.el
ls-lisp.el
Spencer Thomas: changed dabbrev.el emacsclient.c emacsserver.c gnus.texi
server.el tcp.c unexec.c
@ -2237,15 +2265,17 @@ Stefan Monnier: wrote bibtex.el cvs-status.el diff-mode.el log-edit.el
log-view.el pcvs-defs.el pcvs-info.el pcvs-parse.el pcvs-util.el
reveal.el smerge-mode.el
and changed vc.el font-lock.el pcvs.el newcomment.el subr.el lisp.h
keyboard.c tex-mode.el fill.el keymap.c alloc.c compile.el
easy-mmode.el simple.el info.el regex.c syntax.c files.el vc-hooks.el
xdisp.c bytecomp.el and 505 other files
keyboard.c keymap.c tex-mode.el fill.el alloc.c compile.el files.el
regex.c easy-mmode.el simple.el info.el syntax.c xdisp.c vc-hooks.el
sh-script.el and 511 other files
Stephan Stahl: changed which-func.el buff-menu.el buffer.c dired-x.texi
ediff-mult.el
Stephen A. Wood: changed fortran.el
Stephen Berman: changed allout.el
Stephen Eglen: wrote iswitchb.el mspools.el
and changed diary-lib.el locate.el octave-inf.el replace.el hexl.el
info-look.el sendmail.el spell.el uce.el MORE.STUFF add-log.el
@ -2253,8 +2283,9 @@ and changed diary-lib.el locate.el octave-inf.el replace.el hexl.el
bib-mode.el bruce.el c-mode.el ccl.el and 71 other files
Stephen Gildea: wrote mh-funcs.el mh-pick.el refcard.tex
and changed time-stamp.el mh-e.el mh-utils.el mh-comp.el mh-customize.el
fileio.c files.el fortran.el mh-e.texi mh-mime.el mwheel.el tex-mode.el
and changed time-stamp.el mh-e.el mh-comp.el mh-utils.el mh-customize.el
fileio.c files.el fortran.el mh-e.texi mh-junk.el mh-mime.el mwheel.el
tex-mode.el
Stephen J. Turnbull: changed ediff-init.el strings.texi subr.el
@ -2286,6 +2317,8 @@ Steven Tamm: changed macterm.c make-package mac.c macfns.c configure.in
Stewart M. Clamen: wrote cal-mayan.el
Stuart D. Herring: changed minibuf.c
Stuart Herring: changed isearch.el align.el allout.el comint.el edebug.el
files.el
@ -2300,7 +2333,7 @@ Sun Yijiang: changed TUTORIAL.cn
Sundar Narasimhan: changed rnews.el rnewspost.el
Sven Joachim: changed arc-mode.el de-refcard.tex files.el files.texi
help.el sed3v2.inp sh-script.el
help.el mule.texi sed3v2.inp sh-script.el
Svend Tollak Munkejord: changed deuglify.el
@ -2342,9 +2375,9 @@ Theodore Jump: changed w32-win.el w32faces.c
Thien-Thi Nguyen: wrote hideshow.el make-mms-derivative.el
and changed ewoc.el info.el processes.texi zone.el Makefile.in vc.el
fileio.c lisp-mode.el scheme.el dcl-mode.el display.texi files.el
pcvs.el sysdep.c MORE.STUFF TUTORIAL.it TUTORIAL.ja bindat.el
diary-lib.el diff-mode.el dired.el and 121 other files
fileio.c lisp-mode.el scheme.el text.texi bindat.el dcl-mode.el
display.texi files.el pcvs.el sysdep.c MORE.STUFF TUTORIAL.it
TUTORIAL.ja diary-lib.el diff-mode.el and 125 other files
Thierry Emery: changed kinsoku.el timezone.el url-http.el wid-edit.el
@ -2378,7 +2411,7 @@ Tim Van Holder: changed Makefile.in compile.el configure.in which-func.el
Tobias C. Rittweiler: changed font-lock.el
Toby Allsopp: changed eudc.el
Toby Allsopp: changed ldap.el eudc.el
Toby Speight: changed window.el
@ -2476,7 +2509,7 @@ Wayne Mesard: wrote hscroll.el
Werner Benger: changed keyboard.c
Werner Lemberg: wrote sisheng.el vntelex.el
and changed Makefile.in TUTORIAL.de 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
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
@ -2509,7 +2542,7 @@ and changed latin-pre.el pl-refcard.ps pl-refcard.tex refcard-pl.ps
Wolfgang Glas: changed unexsgi.c
Wolfgang Jenkner: changed pcvs.el
Wolfgang Jenkner: changed conf-mode.el pcvs.el
Wolfgang Rupprecht: wrote float-sup.el floatfns.c sup-mouse.el
and changed process.c alloc.c callint.c config.h.in config.in
@ -2527,14 +2560,16 @@ Xavier Maillard: changed gnus-faq.texi gnus-score.el
Yagi Tatsuya: changed gnus-art.el gnus-start.el
Yamamoto Mitsuharu: changed macterm.c macfns.c mac-win.el mac.c macterm.h
macgui.h image.c macmenu.c macselect.c keyboard.c xdisp.c makefile.MPW
emacs.c macos.texi xfaces.c Makefile.in config.h darwin.h dispextern.h
w32term.c Info.plist and 58 other files
macgui.h image.c macmenu.c macselect.c keyboard.c makefile.MPW xdisp.c
emacs.c config.h macos.texi xfaces.c Makefile.in darwin.h dispextern.h
w32term.c INSTALL and 66 other files
Yann Dirson: changed imenu.el
Yoichi Nakayama: changed browse-url.el finder.el man.el rfc2368.el
Yoni Rabkin Katzenell: changed whitespace.el
Yoshiki Hayashi: changed texinfmt.el nnheader.el
Yoshinori Koseki: changed fontset.el

View file

@ -147,13 +147,13 @@ giving you write access to the CVS repository.
Discussion about Emacs development takes place on emacs-devel@gnu.org.
Bug reports for released versions are sent to emacs-bugs@gnu.org.
Bug reports for released versions are sent to bug-gnu-emacs@gnu.org.
Bug reports for development versions are sent to emacs-pretest-bug@gnu.org.
You can subscribe to the mailing lists at savannah.gnu.org/projects/emacs.
You can find the mailing lists archives at mail.gnu.org or gmane.org.
You can find the mailing lists archives at lists.gnu.org or gmane.org.
** Document your changes.
@ -189,7 +189,7 @@ need to check whether *that file* was changed in those years.
It's sufficient that *Emacs* was changed in those years (and it was!).
** For those files that have been added since then, we should add
the year it was added to Emacs, and all subsequent years."
the year it was added to Emacs, and all subsequent years.
** For the refcards under etc/, it's ok to simply use the latest year
(typically in a `\def\year{YEAR}' expression) for the rendered copyright

25
COPYING
View file

@ -1,8 +1,8 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@ -55,7 +55,7 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@ -278,7 +278,7 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
@ -303,10 +303,9 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
@ -336,5 +335,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View file

@ -1,3 +1,30 @@
2006-10-03 Kim F. Storm <storm@cua.dk>
* AUTHORS: Regenerate.
2006-09-30 Eli Zaretskii <eliz@gnu.org>
* configure: Regenerated.
2006-09-28 Kenichi Handa <handa@m17n.org>
* configure.in (locallisppath): Don't include leim dir.
(lisppath): Include leim dir.
2006-09-15 Jay Belanger <belanger@truman.edu>
* COPYING: Replace "Library Public License" by "Lesser Public
License" throughout.
2006-09-11 Paul Eggert <eggert@cs.ucla.edu>
* make-dist (EMACS): Exit and fail if the EMACS environment
variable is set to something other than an absolute file name.
2006-09-07 Kim F. Storm <storm@cua.dk>
* AUTHORS: Regenerate.
2006-08-16 Andreas Schwab <schwab@suse.de>
* configure.in (PKG_CHECK_MODULES): Use AS_MESSAGE_LOG_FD instead

View file

@ -60,8 +60,8 @@ Write access to the CVS repository requires using SSH v2.
If you execute cvs commands inside Emacs, specifically if you use
pcl-cvs, output from CVS may be lost due to a problem in the
interface between ssh, cvs, and libc. Corrupted checkins have
also been rumored to have happened.
interface between ssh, cvs, and libc. Corrupted checkins are
also known to have happened.
To fix the problem, save the following script into a file, make it
executable, and set CVS_RSH to the file name of the script:

View file

@ -1,3 +1,7 @@
2006-10-03 Kenichi Handa <handa@m17n.org>
* FOR-RELEASE (BUGS): "An iso-8859-6 cannot be saved" fixed.
2006-08-13 Chong Yidong <cyd@stupidchicken.com>
* FOR-RELEASE: Elisp manual checking completed.

View file

@ -2,12 +2,13 @@ Tasks needed before the next release.
* TO BE DONE SHORTLY BEFORE RELEASE
** Update release dates of manuals.
** Check for widow and orphan lines in manuals;
make sure all the pages really look ok in the manual as formatted.
** Check for text in manuals that assumes current version is 21.
** Update AUTHORS.
[Done 2006-10-03]
** Regenerate the postscript files of the reference cards in etc.
@ -33,38 +34,26 @@ and KDE projects, to use the new Emacs icons in etc/images/icons.
These don't need to be fixed to start pretest, but we call the
attention of Windows users to fixing them.
** Markus Gritsch's report about Emacs looping on Windoze with the following
.emacs file, and then reduce Emacs frame width to "something quite narrow":
(setq-default truncate-lines t)
(custom-set-variables
'(hscroll-margin 20)
'(hscroll-step 1)
)
** Drew Adams 12 Aug bug rpt: overlay display artifact: trace left behind
Windows only bug.
Windows only bug. Bug appears only when Cleartype enabled, probably related
to the hack introduced on 2005-07-01 to fix some other Cleartype problem.
** henman@it.to-be.co.jp 09 Aug 2006: ispell.el problem on Cygwin.
(Did we decide that is unreproducible?)
* BUGS
** Milan Zamazal's Aug 23 bug report about crashes with certain fonts.
** C-g fails to interrupt accept-process-output in Gnus.
** Implement buffer-chars-modified-tick.
** henman@it.to-be.co.jp 09 Aug 2006: ispell.el problem.
** Make key-binding use the maps specified by positions given in the events.
** hashiz@tomba.meridiani.jp, Oct 6: bootstrap failure on FreeBSD 6.2
Can't be reproduced on GNU/Linux.
* DOCUMENTATION
** Check the Emacs Tutorial.
The first line of every tutorial must begin with text ending in a period
(".", ASCII 0x2E) saying "Emacs Tutorial" in the respective language.
This should be followed by "See end for copying conditions", likewise
in the respective language.
The first line of every tutorial must begin with text ending in a
period (".", ASCII 0x2E) saying "Emacs Tutorial" in the respective
language. This should be followed by "See end for copying
conditions", likewise in the respective language.
After each file name, on the same line or the following line, come the
names of the people who have checked it.

View file

@ -62,8 +62,11 @@ For each step, check for possible errors.
echo directory: emacs/pretest > FILE.directive (for a pretest)
echo directory: emacs > FILE.directive (for a release)
gpg --clearsign FILE.directive
Upload by anonymous ftp to ftp://ftp-upload.gnu.org/incoming/ftp/
the files FILE, FILE.sig, FILE.directive.asc
Upload by anonymous ftp to ftp://ftp-upload.gnu.org/ the files FILE,
FILE.sig, FILE.directive.asc.
For a release, place the files in the /incoming/ftp directory.
For a pretest, place the files in /incoming/alpha instead, so that
they appear on ftp://alpha.gnu.org/.
13. After five minutes, verify that the files are visible at
ftp://alpha.gnu.org/gnu/emacs/pretest/ for a pretest, at

4
configure vendored
View file

@ -1354,8 +1354,8 @@ rm conftest.sed
lispdir='${datadir}/emacs/${version}/lisp'
locallisppath='${datadir}/emacs/${version}/site-lisp:'\
'${datadir}/emacs/site-lisp:${datadir}/emacs/${version}/leim'
lisppath='${locallisppath}:${lispdir}'
'${datadir}/emacs/site-lisp'
lisppath='${locallisppath}:${lispdir}:${datadir}/emacs/${version}/leim'
etcdir='${datadir}/emacs/${version}/etc'
archlibdir='${libexecdir}/emacs/${version}/${configuration}'
docdir='${datadir}/emacs/${version}/etc'

View file

@ -33,8 +33,8 @@ AC_ARG_PROGRAM
lispdir='${datadir}/emacs/${version}/lisp'
locallisppath='${datadir}/emacs/${version}/site-lisp:'\
'${datadir}/emacs/site-lisp:${datadir}/emacs/${version}/leim'
lisppath='${locallisppath}:${lispdir}'
'${datadir}/emacs/site-lisp'
lisppath='${locallisppath}:${lispdir}:${datadir}/emacs/${version}/leim'
etcdir='${datadir}/emacs/${version}/etc'
archlibdir='${libexecdir}/emacs/${version}/${configuration}'
docdir='${datadir}/emacs/${version}/etc'

View file

@ -1,8 +1,8 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@ -55,7 +55,7 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@ -278,7 +278,7 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
@ -303,10 +303,9 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
@ -336,5 +335,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View file

@ -1,3 +1,63 @@
2006-10-09 David Kastrup <dak@gnu.org>
* DEVEL.HUMOR: Add the topic line for last entry since that was
what the joke was about.
2006-10-07 Ognyan Kulev <ogi@fmi.uni-sofia.bg>
* TUTORIAL.bg: Synchronize with TUTORIAL.
2006-10-06 Juanma Barranquero <lekktu@gmail.com>
* DEVEL.HUMOR: New file.
2006-09-30 Chong Yidong <cyd@stupidchicken.com>
* PROBLEMS: Document Emacs/XIM/gnome-settings-terminal clash.
2006-09-26 Vinicius Jose Latorre <viniciusjl@ig.com.br>
* NEWS: ebnf2ps changes.
2006-09-26 Reiner Steib <Reiner.Steib@gmx.de>
* refcard.ps: Regenerate.
2006-09-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* NEWS: Rename x-use-old-gtk-file-dialog to x-gtk-use-old-file-dialog.
2006-09-15 Jay Belanger <belanger@truman.edu>
* COPYING: Replace "Library Public License" by "Lesser Public
License" throughout.
2006-09-15 Richard Stallman <rms@gnu.org>
* THE-GNU-PROJECT: Update with the latest footnotes
from www.gnu.org/gnu/the-gnu-project.html
2006-09-15 David Kastrup <dak@gnu.org>
* NEWS: Explain new behavior and arguments of `key-binding' and
`command-remapping'.
2006-09-11 Paul Eggert <eggert@cs.ucla.edu>
* NEWS: In terminal-oriented subshells, the EMACS environment
variable now defaults to Emacs's absolute file name, instead of
to "t".
* PROBLEMS: Adjust tcsh advice for this.
2006-09-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* PROBLEMS (are): Emacs compiled with Gtk+ crashes when closing a
display (x-close-connection).
2006-09-02 Juri Linkov <juri@jurta.org>
* HELLO: Regroup Europe Non-ASCII examples by similar scripts.
2006-08-25 Richard Stallman <rms@gnu.org>
* TUTORIAL: Give priority to graphical terminals over text terminals
@ -86,7 +146,7 @@
* PROBLEMS: Emacs now requires ws2_32.dll on Windows.
2006-07-14 K,Aa(Broly L,Bu(Brentey <lorentey@elte.hu>
2006-07-14 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
* HELLO: Update Hungarian sample.
@ -169,8 +229,7 @@
2006-06-19 Carsten Dominik <dominik@science.uva.nl>
* orgcard.tex (section{Clocking Time}): Add new clocking
commands.
* orgcard.tex (section{Clocking Time}): Add new clocking commands.
(section{Structure Editing}): Add global archiving command.
2006-06-14 Thien-Thi Nguyen <ttn@gnu.org>
@ -257,8 +316,7 @@
2006-05-24 Carsten Dominik <dominik@science.uva.nl>
* orgcard.tex: (section{Motion}): Added the item navigation
commands.
* orgcard.tex (section{Motion}): Added the item navigation commands.
(section{Publishing}): New section.
(section{Links}): Documented elisp and shell links.
@ -270,8 +328,7 @@
* pl-refcard.tex (Local variables): Add compile-command.
* ru-refcard.tex (Local variables): Add compile-command and
coding.
* ru-refcard.tex (Local variables): Add compile-command and coding.
* pt-br-refcard.tex: Don't \input psfig.
@ -366,7 +423,7 @@
2006-04-11 Carsten Dominik <dominik@science.uva.nl>
* orgcard.tex: (section{Tables}): Document column narrowing.
* orgcard.tex (section{Tables}): Document column narrowing.
(section{Links}): Document bracket links.
2006-04-11 Kenichi Handa <handa@m17n.org>
@ -481,7 +538,7 @@
2006-02-22 Carsten Dominik <dominik@science.uva.nl>
* orgcard.tex: (section{Links}): Rewritten to cover the modified
* orgcard.tex (section{Links}): Rewritten to cover the modified
link system.
2006-02-18 Bill Wohler <wohler@newt.com>
@ -555,7 +612,7 @@
2006-01-23 Michael Albinus <michael.albinus@gmx.de>
* NEWS: tramp can be removed by M-x tramp-unload-tramp.
* NEWS: Tramp can be removed by M-x tramp-unload-tramp.
2006-01-15 Dan Nicolaescu <dann@ics.uci.edu>
@ -1379,7 +1436,7 @@
2004-04-13 Marcelo Toledo <marcelo@gnu.org>
* TUTORIAL.pt_BR: initial check-in.
* TUTORIAL.pt_BR: Initial check-in.
2004-05-06 Dave Love <fx@gnu.org>
@ -1743,7 +1800,7 @@
2001-08-05 Pavel Jan,Am(Bk <Pavel@Janik.cz>
* TUTORIAL.cs, TUTORIAL.sk, cs-refcard.tex, sk-refcard.tex: e-mail
* TUTORIAL.cs, TUTORIAL.sk, cs-refcard.tex, sk-refcard.tex: E-mail
address of Milan Zamazal changed.
2001-08-04 Pavel Jan,Am(Bk <Pavel@Janik.cz>
@ -2182,7 +2239,7 @@
1995-06-28 Eric S. Raymond <esr@spiff.gnu.ai.mit.edu>
* termcap.dat, termcap.ucb: deleted and replaced.
* termcap.dat, termcap.ucb: Deleted and replaced.
* termcap: New termcap file from the ncurses project; bigger,
better, brighter, does away with waxy yellow buildup. Email
@ -2319,7 +2376,7 @@
out of date. This file referenced LNEWS when it should have
said news.texi; fixed.
news.texi: invocation-name now exists.
* news.texi: invocation-name now exists.
1993-03-27 Eric S. Raymond (eric@geech.gnu.ai.mit.edu)
@ -2361,7 +2418,7 @@
I nuked it. Let the file mod date serve. Merged in APOLLO and
SUNBUG files. Changed references to 18.* to past tense.
* emacs.names: merged into JOKES. I faked a mail header from the
* emacs.names: Merged into JOKES. I faked a mail header from the
Unknown User to delimit the first (unheaded) bit.
* Makefile (relock, unlock): New productions.
@ -2373,13 +2430,13 @@
the Emacs distribution, I have the following changes in the etc
directory:
* CHARACTERS: merged into TO-DO file under the heading "Long Range:"
* CHARACTERS: Merged into TO-DO file under the heading "Long Range:"
* DIFF, CCADIFF and GOSDIFF: merged into a new outline file titled
* DIFF, CCADIFF, GOSDIFF: Merged into a new outline file titled
OTHER.EMACSES. The present names don't really convey anything.
Various key bindings and feature descriptions have been updated.
* NICKLES.WORTH. Nuked. This is copyrighted material that could land
* NICKLES.WORTH: Nuked. This is copyrighted material that could land
FSF in hot water.
* INTERVAL.IDEAS: Nuked. RMS's thinking, and indeed the
@ -2387,16 +2444,16 @@
* RCP: Nuked. It no longer said anything but "Ooops, sorry!"
* ED.WORSHIP, GNU.JOKES: merged into a mailbox called JOKES.
* ED.WORSHIP, GNU.JOKES: Merged into a mailbox called JOKES.
Future jokes can accumulate there.
* DISTRIB: the actual domestic order form is now ORDERS.USA.
* DISTRIB: The actual domestic order form is now ORDERS.USA.
The DISTRIB text now mentions 19.
* ORDERS.USA: created. This is just the order form. DISTRIB
* ORDERS.USA: Created. This is just the order form. DISTRIB
has a pointer to it at the beginning.
* EUROPE: renamed to ORDERS.EUROPE. DISTRIB now has a pointer
* EUROPE: Renamed to ORDERS.EUROPE. DISTRIB now has a pointer
to it at the beginning.
* OOOONEWS, OOOONEWS: Nuked. It's version 19 --- nobody needs the
@ -2408,7 +2465,7 @@
1993-03-17 Eric S. Raymond (eric@mole.gnu.ai.mit.edu)
* XENIX: nuked (moved to =XENIX). The hackery it describes is
* XENIX: Nuked (moved to =XENIX). The hackery it describes is
no longer necessary in the presence of 19's function-key-map
feature; I've added an explanation to the beginning of the file.
@ -2844,13 +2901,13 @@
1989-04-18 Richard Stallman (rms@sugar-bombs.ai.mit.edu)
* loadst.c: on bsd4.3, use gettimeofday instead of CPUSTATES.
* loadst.c: On bsd4.3, use gettimeofday instead of CPUSTATES.
1989-03-15 Jeff Peck (rms@sugar-bombs.ai.mit.edu)
* emacstool.c: setenv IN_EMACSTOOL=t, TERM=sun, TERMCAP=.
* emacsstool.1: update to document environment variables.
* emacsstool.1: Update to document environment variables.
1989-02-21 Mosur Mohan (email@notavailable)
@ -2866,7 +2923,7 @@
1989-02-15 Richard Stallman (rms@sugar-bombs.ai.mit.edu)
* etags.c: Prolog support from Sunichirou Sugou
* etags.c: Prolog support from Sunichirou Sugou.
1989-02-03 Richard Stallman (rms@sugar-bombs.ai.mit.edu)
@ -2889,7 +2946,7 @@
1988-12-31 Richard Mlynarik (mly@rice-chex.ai.mit.edu)
* env.c: Add decl for my-index
* env.c: Add decl for my-index.
* etags.c (file-entries): .oak => scheme
1988-12-30 Richard Stallman (rms@sugar-bombs.ai.mit.edu)
@ -2953,7 +3010,7 @@
1988-09-24 Richard Stallman (rms@gluteus.ai.mit.edu)
* etags.c (main): default setting of eflag was backwards.
* etags.c (main): Default setting of eflag was backwards.
1988-09-23 Richard Stallman (rms@sugar-bombs.ai.mit.edu)
@ -3018,8 +3075,8 @@
1988-05-13 Chris Hanson (cph@kleph)
* emacsclient.c: Delete references to unused variable `out'. This
caused a bus error when used under hp-ux.
* emacsclient.c: Delete references to unused variable `out'.
This caused a bus error when used under hp-ux.
1988-05-06 Richard Stallman (rms@frosted-flakes.ai.mit.edu)
@ -3036,7 +3093,7 @@
1988-04-28 Richard Stallman (rms@frosted-flakes.ai.mit.edu)
* movemail.c: #undef close, since config can #define it on V.3.
* emacsclient.c, fakemail.c, loadst.c, server.c: likewise.
* emacsclient.c, fakemail.c, loadst.c, server.c: Likewise.
1988-04-26 Richard Stallman (rms@lucky-charms.ai.mit.edu)
@ -3047,9 +3104,9 @@
1988-03-20 Richard M. Stallman (rms@wilson)
* server.c [not BSD and not HAVE_SYSVIPC]: fix error message.
* server.c [not BSD and not HAVE_SYSVIPC]: Fix error message.
* loadst.c (main) [XENIX]: use /usr/spool/mail, not /usr/mail.
* loadst.c (main) [XENIX]: Use /usr/spool/mail, not /usr/mail.
;; Local Variables:
;; coding: iso-2022-7bit

138
etc/DEVEL.HUMOR Normal file
View file

@ -0,0 +1,138 @@
---------------- -*- mode: text; coding: utf-8; fill-column: 70 -*- --
-- --
-- Humor (sometimes unintended) on the Emacs developer's list --
-- --
----------------------------------------------------------------------
"Is it legal for a `struct interval' to have a total_length field of
zero?"
"We can't be arrested for it as far as I know, but it is definitely
invalid for an interval to have zero length."
-- Miles Bader and RMS
----------------------------------------------------------------------
Re: lost argument and doc string
I remember when I lost an argument. Boy did that hurt! ;-).
-- RMS
----------------------------------------------------------------------
"'Cowardly' is not an adverb, although it looks like one. It is an
adjective. It makes a statement about general temperament, rather
than a specific occasion. I don't think Emacs has a general
temperament."
"Mine does."
-- RMS and Eli Zaretskii
----------------------------------------------------------------------
"In order to bring the user's attention to the minibuffer when an
item such as 'Edit -> Search' is activated from the menu, I was just
thinking that we could draw a big rectangle around the minibuffer,
blinking (or zooming in-and-out) until some input is typed in."
"How about dancing elephants?"
"They don't fit in my office."
"Well once the elephants are done, your office will be much...
bigger."
-- Stefan Monnier, Miles Bader and Kai Grossjohann
----------------------------------------------------------------------
I remember these versions as yard-rocks (is that between inch-pebbles
and mile-stones?).
-- Kai Grossjohann
----------------------------------------------------------------------
"I think it depends on video drivers. I cannot reproduce it on my
home PC, but I can at work."
"Can you try to find a workaround at work? (I guess you don't need
a homearound at home. ;-)"
-- Jason Rumney and RMS
----------------------------------------------------------------------
By the way, I also really really hate this unibyte/multibyte problem.
Sometimes I think I should have opposed to the introduction of such a
concept more strongly.
imagine there's no unibyte
it's easy if you try
no bytes below us
above us only chars
imagine all the people living in multibyte
-- Kenichi Handa
----------------------------------------------------------------------
I try to uphold the ideals that I was taught to value as an American,
but every year I get less and less help from the United States.
-- RMS
----------------------------------------------------------------------
"If the terminfo entry is most likely wrong, and we know it, then it
doesn't make sense to follow it."
"Nevertheless, until now, we always did."
"So.... should we not fix old bugs?"
"Why fix an old bug if you can write three new ones in the same
time?"
-- Miles Bader, Eli Zaretskii and David Kastrup
----------------------------------------------------------------------
[...] As is well known, people who speak American English tend to
be more resource-conscious and try to avoid wasting precious bits
transferring those redundant "u"s.
Think of the number of occurrences of "color" and "behavior" in the
Emacs tarball, multiply that by the number of times it'll be
downloaded, stored on hard disks, archived, ...that's a substantial
saving.
-- Stefan Monnier
----------------------------------------------------------------------
Re: Parent of a derived mode's keymap.
"I can't decide whether the title of this thread is more fitting for
a blues song or a pulp fiction booklet. It certainly projects drama."
"Hey, it says derived, not deprived."
"Actually, for some keymaps 'depraved' would fit better."
"I knew it! You're one of them vi lovers! There is nothing wrong
with Emacs using escape, meta, alt, control, and shift!"
-- David Kastrup and Lute Kamstra
----------------------------------------------------------------------
"Aren't user-defined constants useful in other languages?"
"The only user-defined constant is ignorance. (With programmers,
this is a variable concept ;-)"
-- Juanma Barranquero and Thien-Thi Nguyen
----------------------------------------------------------------------
"Uh, 'archaic' and 'alive' is not a contradiction."
"Yes it is. 'Archaic' does not mean 'old' or 'early'. It means
'obsolete'."
"'He arche' in Greek means 'the beginning'. John 1 starts off with
'En arche en ho Logos': in the beginning, there was the word. Now of
course we all know that Emacs was there before Word, but this might
have escaped John's notice."
-- David Kastrup and RMS
----------------------------------------------------------------------
Re: patch for woman (woman-topic-at-point)
"Sorry for the long message. I wanted to make the problem clear
also for people not familiar with `woman'."
"Most hackers, I take?
For a moment there I thought you had a patch that you could put on
a woman, and it would make her come right to the topic at point
without attempting any course of action that requires an advance
course in divination.
There'd be quite a sensational market for that, you know."
-- Emilio Lopes and David Kastrup

View file

@ -1,8 +1,8 @@
This is a list of ways to say hello in various languages.
Non-ASCII examples:
Europe: ,A!(BHola!, Hyv,Add(B p,Ad(Biv,Add(B, Gr,A|_(B Gott, Bon,Cu(Bu, Dobr,B}(B den, Tere p,Ad(Bevast
Cze,B6f(B!, ,FCei\(B ,Fsar(B, ,L7T`PRabRcYbU(B!, $,1J2J0J;J0J@JOJ=J1J0(B
Europe: ,A!(BHola!, Gr,A|_(B Gott, Hyv,Add(B p,Ad(Biv,Add(B, Tere ,Au(Bhtust, Bon,Cu(Bu
Cze,B6f(B!, Dobr,B}(B den, ,L7T`PRabRcYbU(B!, ,FCei\(B ,Fsar(B, $,1J2J0J;J0J@JOJ=J1J0(B
Africa: $(3!A!,!>(B
Middle/Near East: ,Hylem(B, (38R(47d(3T!JSa(4W(3W(B
South Asia: 4$,4!8v#")0$,15h14$,4!hv#")0$,15n14$,4!zv#!)v#")v#"D0$,15x6-5d6'1(B, 4$,44Kv#4z0$,1?(14$,44hv#4zv#40$,1?.14$,44qv#4{v#3Q0$,1?8?M>u?>14$,44av#4z0$,1?01(B, 4$,46<0$,1@H14$,46A0$,1@N14$,46Kv#6Vv#6)v#6M0$,1@X@m@5@^14$,46Cv#6W0$,1@P@"1(B, 4$,4*U0$,1<U14$,4*M0$,1<C14$,4*Hv#)b0$,1<5<m14$,4*H0$,1<514$,4*Qv#)b0$,1<N<m1(B, 4$(7"70"714$P0"!#C"Q1!;4"Er'"S0"E"S14"G0"G1!;4"70"714"2r'"[0"2"[1!;4"Dr'"[0"D"[14"#0"#14"G0"G1!>(B

177
etc/NEWS
View file

@ -336,6 +336,10 @@ by whitespace. This means you can now use them as shell wildcards
too. If you want to use just plain `*' as a wildcard, type `*""'; the
doublequotes make no difference in the shell, but they prevent
special treatment in `dired-do-shell-command'.
** Adaptive filling misfeature removed.
It no longer treats `NNN.' or `(NNN)' as a prefix.
* Editing Changes in Emacs 22.1
@ -904,6 +908,12 @@ Such individual settings are now preserved when windows are split
horizontally or vertically, a saved window configuration is restored,
or when the frame is resized.
+++
*** The %c and %l constructs are now ignored in frame-title-format.
Due to technical limitations in how Emacs interacts with windowing
systems, these constructs often failed to render properly, and could
even cause Emacs to crash.
** Cursor display changes:
+++
@ -953,6 +963,19 @@ so package-specific faces can inherit from it.
+++
*** `vertical-border' face is used for the vertical divider between windows.
** ebnf2ps changes:
+++
*** New option `ebnf-arrow-extra-width' which specify extra width for arrow
shape drawing.
The extra width is used to avoid that the arrowhead and the terminal border
overlap. It depens on `ebnf-arrow-shape' and `ebnf-line-width'.
+++
*** New option `ebnf-arrow-scale' which specify the arrow scale.
Values lower than 1.0, shrink the arrow.
Values greater than 1.0, expand the arrow.
** Font-Lock changes:
+++
@ -969,11 +992,12 @@ fontification in Info, remove `turn-on-font-lock' from
`Info-mode-hook'.
+++
*** font-lock: in modes like C and Lisp where the fontification assumes that
an open-paren in column 0 is always outside of any string or comment,
font-lock now highlights any such open-paren-in-column-zero in bold-red
if it is inside a string or a comment, to indicate that it can cause
trouble with fontification and/or indentation.
*** Font-Lock mode: in major modes such as Lisp mode, where some Emacs
features assume that an open-paren in column 0 is always outside of
any string or comment, Font-Lock now highlights any such open-paren in
bold-red if it is inside a string or a comment, to indicate that it
can cause trouble. You should rewrite the string or comment so that
the open-paren is not in column 0.
+++
*** New standard font-lock face `font-lock-preprocessor-face'.
@ -1054,7 +1078,7 @@ ESC, like they do for Gtk+, Mac and W32.
+++
*** For the Gtk+ version, you can make Emacs use the old file dialog
by setting the variable `x-use-old-gtk-file-dialog' to t. Default is to use
by setting the variable `x-gtk-use-old-file-dialog' to t. Default is to use
the new dialog.
** Mouse changes:
@ -1429,6 +1453,10 @@ otherwise behaves quite similarly to the bash version.
`comint-use-prompt-regexp'. The old name has been kept as an alias,
but declared obsolete.
+++
*** The EMACS environment variable now defaults to Emacs's absolute
file name, instead of to "t".
** M-x Compile changes:
---
@ -1485,6 +1513,10 @@ it doesn't scroll the compilation output window. If there is no left fringe,
no arrow is displayed and a value of nil means display the message at the top
of the window.
+++
*** The EMACS environment variable now defaults to Emacs's absolute
file name, instead of to "t".
** Occur mode changes:
+++
@ -2003,6 +2035,34 @@ behavior in older versions of Emacs).
---
** Changes in Allout
*** Some previously rough topic-header format edge cases are reconciled.
Level 1 topics use the mode's comment format, and lines starting with the
asterisk - for instance, the comment close of some languages (eg, c's "*/"
or mathematica's "*)") - at the beginning of line are no longer are
interpreted as level 1 topics in those modes.
*** Many or most commonly occuring "accidental" topics are disqualified.
Text in item bodies that looks like a low-depth topic is no longer mistaken
for one unless its first offspring (or that of its next sibling with
offspring) is only one level deeper.
For example, pasting some text with a bunch of leading asterisks into a
topic that's followed by a level 3 or deeper topic will not cause the
pasted text to be mistaken for outline structure.
The same constraint is applied to any level 2 or 3 topics.
This settles an old issue where typed or pasted text needed to be carefully
reviewed, and sometimes doctored, to avoid accidentally disrupting the
outline structure. Now that should be generally unnecessary, as the most
prone-to-occur accidents are disqualified.
*** Allout now refuses to create "containment discontinuities", where a
topic is shifted deeper than the offspring-depth of its container. On the
other hand, allout now operates gracefully with existing containment
discontinuities, revealing excessively contained topics rather than either
leaving them hidden or raising an error.
*** Topic cryptography added, enabling easy gpg topic encryption and
decryption. Per-topic basis enables interspersing encrypted-text and
clear-text within a single file to your heart's content, using symmetric
@ -2012,56 +2072,52 @@ pending topics on save, and more, make it easy to use encryption in
powerful ways. Encryption behavior customization is collected in the
allout-encryption customization group.
*** `allout-view-change-hook' marked as being deprecated - use
`allout-exposure-change-hook' instead. Both are still invoked, but
`allout-view-change-hook' will eventually be ignored. The new
`allout-exposure-change-hook' is called with args that were passed to
`allout-flag-region', making it easier to use.
*** Navigation within an item is easier. Repeated beginning-of-line and
end-of-line key commands (usually, ^A and ^E) cycle through the
beginning/end-of-line and then beginning/end of topic, etc. See new
customization vars `allout-beginning-of-line-cycles' and
`allout-end-of-line-cycles'.
*** Other allout functions which change the outline structure also have
hooks, enabling cooperative allout enhancements. See
`allout-structure-added-hook', `allout-structure-deleted-hook', and
`allout-structure-shifted-hook'.
*** New or revised allout-mode activity hooks enable creation of
cooperative enhancements to allout mode without changes to the mode,
itself.
*** Default command prefix changed to "\C-c " (control-c space), to avoid
intruding on user's keybinding space. Customize the
See `allout-exposure-change-hook', `allout-structure-added-hook',
`allout-structure-deleted-hook', and `allout-structure-shifted-hook'.
`allout-exposure-change-hook' replaces the existing
`allout-view-change-hook', which is being deprecated. Both are still
invoked, but `allout-view-change-hook' will eventually be ignored.
`allout-exposure-change-hook' is called with explicit arguments detailing
the specifics of each change (as are the other new hooks), making it easier
to use than the old version.
There is a new mode deactivation hook, `allout-mode-deactivate-hook', for
coordinating with deactivation of allout-mode. Both that and the mode
activation hook, `allout-mode-hook' are now run after the `allout-mode'
variable is changed, rather than before.
*** Default command prefix was changed to "\C-c " (control-c space), to
avoid intruding on user's keybinding space. Customize the
`allout-command-prefix' variable to your preference.
*** Allout now uses text overlay's `invisible' property (and others) for
concealed text, instead of selective-display. This simplifies the code, in
particular avoiding the need for kludges for isearch dynamic-display,
discretionary handling of edits of concealed text, undo concerns, etc.
*** Allout now uses text overlay's `invisible' property for concealed text,
instead of selective-display. This simplifies the code, in particular
avoiding the need for kludges for isearch dynamic-display, discretionary
handling of edits of concealed text, undo concerns, etc.
*** Some previously rough topic-header format edge cases are reconciled.
Level 1 topics use the mode's comment format, and lines starting with the
asterisk - for instance, the comment close of some languages (eg, c's "*/"
or mathematica's "*)") - at the beginning of line are no longer are
interpreted as level 1 topics in those modes. (Yay!)
*** There are many other fixes and refinements, including:
*** Many substantial fixes and refinements, including:
- repaired regexp-quoting of custom header prefixes, so any literals
will now work (for instance, mathematica's "(*" is now properly
accepted).
- repaired inhibition of inadvertent edits to concealed text.
- refuse to create "containment discontinuities", where a
topic is shifted deeper than the offspring-depth of its' container
- repaired inhibition of inadvertent edits to concealed text, without
inhibiting undo; we now reveal undo changes within concealed text.
- auto-fill-mode is now left inactive when allout-mode starts, if it
already was inactive. also, `allout-inhibit-auto-fill' custom
configuration variable makes it easy to disable auto fill in allout
outlines in general or on a per-buffer basis.
- mode hook changes: new hook `allout-mode-deactivate-hook', for
coordinating with deactivation of allout-mode. `allout-mode-hook' is
now run after the `allout-mode' variable is changed, as is the new
`allout-mode-deactivate-hook'.
- allout now tolerates fielded text in outlines without disruption.
- hot-spot navigation now is modularized with a new function,
`allout-hotspot-key-handler', enabling easier articulation and
enhancement of the functionality by allout addons.
- topic body navigation is easier, where repeated beginning of line and
end of line key commands cycle through the actually beginning/end of
line and then beginning/end of topic, etc. see new customization vars
`allout-beginning-of-line-cycles' and `allout-end-of-line-cycles'.
`allout-hotspot-key-handler', enabling easier use and enhancement of
the functionality in allout addons.
- repaired retention of topic body hanging indent upon topic depth shifts
- bulleting variation is simpler and more accommodating, both in the
default behavior and in ability to vary when creating new topics
@ -2072,8 +2128,7 @@ interpreted as level 1 topics in those modes. (Yay!)
- included a few unit-tests for interior functionality. developers can
have them automatically run at the end of module load by customizing
the option `allout-run-unit-tests-on-load'.
- many, many minor tweaks and fixes. many internal fixes and
refinements of docstrings.
- many, many other, more minor tweaks, fixes, and refinements.
- version number incremented to 2.2
** The variable `woman-topic-at-point' was renamed
@ -3749,6 +3804,10 @@ negative, is now a float. For example: (expt 2 -2) => 0.25.
+++
*** The function `eql' is now available without requiring the CL package.
+++
*** The new function `memql' is like `memq', but uses `eql' for comparison,
that is, floats are compared by value and other elements with `eq'.
+++
*** `makehash' is now obsolete. Use `make-hash-table' instead.
@ -4075,6 +4134,11 @@ give up and return LIMIT.
and partial visibility state of the corresponding row, if the PARTIALLY
arg is non-nil.
+++
*** New function `window-line-height' is an efficient way to get
information about a specific text line in a window provided that the
window's display is up-to-date.
+++
*** New functions `posn-at-point' and `posn-at-x-y' return
click-event-style position information for a given visible buffer
@ -4082,6 +4146,13 @@ position or for a given window pixel coordinate.
** Text modification:
+++
*** The new function `buffer-chars-modified-tick' returns a buffer's
tick counter for changes to characters. Each time text in that buffer
is inserted or deleted, the character-change counter is updated to the
tick counter (`buffer-modified-tick'). Text property changes leave it
unchanged.
+++
*** The new function `insert-for-yank' normally works like `insert', but
removes the text properties in the `yank-excluded-properties' list
@ -4646,6 +4717,12 @@ over minor mode keymaps.
text properties, according to their stickiness. This also means that it
works with empty overlays. The same hold for the `local-map' property.
*** `key-binding' will now look up mouse-specific bindings. The
keymaps consulted by `key-binding' will get adapted if the key
sequence is started with a mouse event. Instead of letting the click
position be determined from the key sequence itself, it is also
possible to specify it with an optional argument explicitly.
*** Dense keymaps now handle inheritance correctly.
Previously a dense keymap would hide all of the simple-char key
@ -4899,9 +4976,6 @@ be used in different windows showing different buffers.
*** New function `define-fringe-bitmap' can now be used to create new
fringe bitmaps, as well as change the built-in fringe bitmaps.
To change a built-in bitmap, do (require 'fringe) and use the symbol
identifying the bitmap such as `left-truncation' or `continued-line'.
*** New function `destroy-fringe-bitmap' deletes a fringe bitmap
or restores a built-in one to its default value.
@ -5190,6 +5264,11 @@ external packages to save users from having to update
*** The new variable `max-image-size' defines the maximum size of
images that Emacs will load and display.
+++
*** The new variable `display-mm-dimensions-alist' can be used to
override incorrect graphical display dimensions returned by functions
`display-mm-height' and `display-mm-width'.
** Mouse pointer features:
+++ (lispref)

View file

@ -202,6 +202,11 @@ necessary but missing, please report it via M-x report-emacs-bug.
On platforms such as Solaris, you can also work around this problem by
configuring your compiler to use the native linker instead of GNU ld.
** Emacs compiled with Gtk+ crashes when closing a display (x-close-connection).
This happens because of bugs in Gtk+. Gtk+ 2.10 seems to be OK. See bug
http://bugzilla.gnome.org/show_bug.cgi?id=85715.
* General runtime problems
** Lisp problems
@ -535,7 +540,7 @@ on the flag to output ^M at the end of each line. You can fix the
problem by adding this to your .cshrc file:
if ($?EMACS) then
if ($EMACS == "t") then
if ("$EMACS" =~ /*) then
unset edit
stty -icrnl -onlcr -echo susp ^Z
endif
@ -828,6 +833,11 @@ feature (in the font part of the configuration window).
* Internationalization problems
** M-{ does not work on a Spanish PC keyboard.
Many Spanish keyboards seem to ignore that combination. Emacs can't
do anything about it.
** Characters from the mule-unicode charsets aren't displayed under X.
XFree86 4 contains many fonts in iso10646-1 encoding which have
@ -1081,6 +1091,15 @@ into Meta. This is because of the great importance of Meta in Emacs.
** Window-manager and toolkit-related problems
*** Gnome: Emacs receives input directly from the keyboard, bypassing XIM.
This seems to happen when gnome-settings-daemon version 2.12 or later
is running. If gnome-settings-daemon is not running, Emacs receives
input through XIM without any problem. Furthermore, this seems only
to happen in *.UTF-8 locales; zh_CN.GB2312 and zh_CN.GBK locales, for
example, work fine. A bug report has been filed in the Gnome
bugzilla: http://bugzilla.gnome.org/show_bug.cgi?id=357032
*** Gnome: Emacs' xterm-mouse-mode doesn't work on the Gnome terminal.
A symptom of this bug is that double-clicks insert a control sequence

View file

@ -7,24 +7,23 @@
The first software-sharing community
When I started working at the MIT Artificial Intelligence Lab in 1971,
I became part of a software-sharing community that had existed for
many years. Sharing of software was not limited to our particular
community; it is as old as computers, just as sharing of recipes is as
old as cooking. But we did it more than most.
I became part of a software-sharing community that had existed for many
years. Sharing of software was not limited to our particular community;
it is as old as computers, just as sharing of recipes is as old as
cooking. But we did it more than most.
The AI Lab used a timesharing operating system called ITS (the
Incompatible Timesharing System) that the lab's staff hackers (1) had
designed and written in assembler language for the Digital PDP-10, one
of the large computers of the era. As a member of this community, an
AI lab staff system hacker, my job was to improve this system.
of the large computers of the era. As a member of this community, an AI
lab staff system hacker, my job was to improve this system.
We did not call our software "free software", because that term did
not yet exist; but that is what it was. Whenever people from another
university or a company wanted to port and use a program, we gladly
let them. If you saw someone using an unfamiliar and interesting
program, you could always ask to see the source code, so that you
could read it, change it, or cannibalize parts of it to make a new
program.
We did not call our software "free software", because that term did not
yet exist; but that is what it was. Whenever people from another
university or a company wanted to port and use a program, we gladly let
them. If you saw someone using an unfamiliar and interesting program,
you could always ask to see the source code, so that you could read it,
change it, or cannibalize parts of it to make a new program.
(1) The use of "hacker" to mean "security breaker" is a confusion on
the part of the mass media. We hackers refuse to recognize that
@ -44,9 +43,8 @@
hackers from the AI lab, and the depopulated community was unable to
maintain itself. (The book Hackers, by Steve Levy, describes these
events, as well as giving a clear picture of this community in its
prime.) When the AI lab bought a new PDP-10 in 1982, its
administrators decided to use Digital's non-free timesharing system
instead of ITS.
prime.) When the AI lab bought a new PDP-10 in 1982, its administrators
decided to use Digital's non-free timesharing system instead of ITS.
The modern computers of the era, such as the VAX or the 68020, had
their own operating systems, but none of them were free software: you
@ -54,19 +52,19 @@
This meant that the first step in using a computer was to promise not
to help your neighbor. A cooperating community was forbidden. The rule
made by the owners of proprietary software was, "If you share with
your neighbor, you are a pirate. If you want any changes, beg us to
make them."
made by the owners of proprietary software was, "If you share with your
neighbor, you are a pirate. If you want any changes, beg us to make
them."
The idea that the proprietary software social system--the system that
The idea that the proprietary-software social system--the system that
says you are not allowed to share or change software--is antisocial,
that it is unethical, that it is simply wrong, may come as a surprise
to some readers. But what else could we say about a system based on
dividing the public and keeping users helpless? Readers who find the
idea surprising may have taken proprietary social system as given, or
judged it on the terms suggested by proprietary software businesses.
Software publishers have worked long and hard to convince people that
there is only one way to look at the issue.
idea surprising may have taken proprietary-software social system as
given, or judged it on the terms suggested by proprietary software
businesses. Software publishers have worked long and hard to convince
people that there is only one way to look at the issue.
When software publishers talk about "enforcing" their "rights" or
"stopping piracy", what they actually *say* is secondary. The real
@ -78,30 +76,30 @@
natural right to own software and thus have power over all its users.
(If this were a natural right, then no matter how much harm it does to
the public, we could not object.) Interestingly, the US Constitution
and legal tradition reject this view; copyright is not a natural
right, but an artificial government-imposed monopoly that limits the
users' natural right to copy.
and legal tradition reject this view; copyright is not a natural right,
but an artificial government-imposed monopoly that limits the users'
natural right to copy.
Another unstated assumption is that the only important thing about
software is what jobs it allows you to do--that we computer users
should not care what kind of society we are allowed to have.
A third assumption is that we would have no usable software (or, would
A third assumption is that we would have no usable software (or would
never have a program to do this or that particular job) if we did not
offer a company power over the users of the program. This assumption
may have seemed plausible, before the free software movement
demonstrated that we can make plenty of useful software without
putting chains on it.
demonstrated that we can make plenty of useful software without putting
chains on it.
If we decline to accept these assumptions, and judge these issues
based on ordinary common-sense morality while placing the users first,
we arrive at very different conclusions. Computer users should be free
to modify programs to fit their needs, and free to share software,
because helping other people is the basis of society.
If we decline to accept these assumptions, and judge these issues based
on ordinary common-sense morality while placing the users first, we
arrive at very different conclusions. Computer users should be free to
modify programs to fit their needs, and free to share software, because
helping other people is the basis of society.
There is no room here for an extensive statement of the reasoning
behind this conclusion, so I refer the reader to the web page,
<http://www.gnu.org/philosophy/why-free.html>.
http://www.gnu.org/philosophy/why-free.html.
A stark moral choice.
@ -110,28 +108,27 @@
The easy choice was to join the proprietary software world, signing
nondisclosure agreements and promising not to help my fellow hacker.
Most likely I would also be developing software that was released
under nondisclosure agreements, thus adding to the pressure on other
people to betray their fellows too.
Most likely I would also be developing software that was released under
nondisclosure agreements, thus adding to the pressure on other people
to betray their fellows too.
I could have made money this way, and perhaps amused myself writing
code. But I knew that at the end of my career, I would look back on
years of building walls to divide people, and feel I had spent my life
making the world a worse place.
I had already experienced being on the receiving end of a
nondisclosure agreement, when someone refused to give me and the MIT
AI lab the source code for the control program for our printer. (The
lack of certain features in this program made use of the printer
extremely frustrating.) So I could not tell myself that nondisclosure
agreements were innocent. I was very angry when he refused to share
with us; I could not turn around and do the same thing to everyone
else.
I had already experienced being on the receiving end of a nondisclosure
agreement, when someone refused to give me and the MIT AI lab the
source code for the control program for our printer. (The lack of
certain features in this program made use of the printer extremely
frustrating.) So I could not tell myself that nondisclosure agreements
were innocent. I was very angry when he refused to share with us; I
could not turn around and do the same thing to everyone else.
Another choice, straightforward but unpleasant, was to leave the
computer field. That way my skills would not be misused, but they
would still be wasted. I would not be culpable for dividing and
restricting computer users, but it would happen nonetheless.
computer field. That way my skills would not be misused, but they would
still be wasted. I would not be culpable for dividing and restricting
computer users, but it would happen nonetheless.
So I looked for a way that a programmer could do something for the
good. I asked myself, was there a program or programs that I could
@ -153,8 +150,8 @@
a recursive acronym for "GNU's Not Unix."
An operating system does not mean just a kernel, barely enough to run
other programs. In the 1970s, every operating system worthy of the
name included command processors, assemblers, compilers, interpreters,
other programs. In the 1970s, every operating system worthy of the name
included command processors, assemblers, compilers, interpreters,
debuggers, text editors, mailers, and much more. ITS had them, Multics
had them, VMS had them, and Unix had them. The GNU operating system
would include them too.
@ -176,31 +173,30 @@
do with price. It is about freedom. Here, therefore, is the definition
of free software: a program is free software, for you, a particular
user, if:
* You have the freedom to run the program, for any purpose.
* You have the freedom to modify the program to suit your needs. (To
make this freedom effective in practice, you must have access to
the source code, since making changes in a program without having
the source code is exceedingly difficult.)
* You have the freedom to redistribute copies, either gratis or for
a fee.
* You have the freedom to redistribute copies, either gratis or for a
fee.
* You have the freedom to distribute modified versions of the
program, so that the community can benefit from your improvements.
Since "free" refers to freedom, not to price, there is no
contradiction between selling copies and free software. In fact, the
freedom to sell copies is crucial: collections of free software sold
on CD-ROMs are important for the community, and selling them is an
important way to raise funds for free software development. Therefore,
a program which people are not free to include on these collections is
not free software.
Since "free" refers to freedom, not to price, there is no contradiction
between selling copies and free software. In fact, the freedom to sell
copies is crucial: collections of free software sold on CD-ROMs are
important for the community, and selling them is an important way to
raise funds for free software development. Therefore, a program which
people are not free to include on these collections is not free
software.
Because of the ambiguity of "free", people have long looked for
alternatives, but no one has found a suitable alternative. The English
Language has more words and nuances than any other, but it lacks a
simple, unambiguous, word that means "free," as in
freedom--"unfettered," being the word that comes closest in meaning.
Such alternatives as "liberated", "freedom" and "open" have either the
simple, unambiguous, word that means "free", as in
freedom--"unfettered" being the word that comes closest in meaning.
Such alternatives as "liberated", "freedom", and "open" have either the
wrong meaning or some other disadvantage.
GNU software and the GNU system
@ -209,8 +205,8 @@
reach, I decided to adapt and use existing pieces of free software
wherever that was possible. For example, I decided at the very
beginning to use TeX as the principal text formatter; a few years
later, I decided to use the X Window System rather than writing
another window system for GNU.
later, I decided to use the X Window System rather than writing another
window system for GNU.
Because of this decision, the GNU system is not the same as the
collection of all GNU software. The GNU system includes programs that
@ -222,12 +218,12 @@
In January 1984 I quit my job at MIT and began writing GNU software.
Leaving MIT was necessary so that MIT would not be able to interfere
with distributing GNU as free software. If I had remained on the
staff, MIT could have claimed to own the work, and could have imposed
their own distribution terms, or even turned the work into a
proprietary software package. I had no intention of doing a large
amount of work only to see it become useless for its intended purpose:
creating a new software-sharing community.
with distributing GNU as free software. If I had remained on the staff,
MIT could have claimed to own the work, and could have imposed their
own distribution terms, or even turned the work into a proprietary
software package. I had no intention of doing a large amount of work
only to see it become useless for its intended purpose: creating a new
software-sharing community.
However, Professor Winston, then the head of the MIT AI Lab, kindly
invited me to keep using the lab's facilities.
@ -235,23 +231,23 @@
The first steps
Shortly before beginning the GNU project, I heard about the Free
University Compiler Kit, also known as VUCK. (The Dutch word for
"free" is written with a V.) This was a compiler designed to handle
multiple languages, including C and Pascal, and to support multiple
target machines. I wrote to its author asking if GNU could use it.
University Compiler Kit, also known as VUCK. (The Dutch word for "free"
is written with a V.) This was a compiler designed to handle multiple
languages, including C and Pascal, and to support multiple target
machines. I wrote to its author asking if GNU could use it.
He responded derisively, stating that the university was free but the
compiler was not. I therefore decided that my first program for the
GNU project would be a multi-language, multi-platform compiler.
compiler was not. I therefore decided that my first program for the GNU
project would be a multi-language, multi-platform compiler.
Hoping to avoid the need to write the whole compiler myself, I
obtained the source code for the Pastel compiler, which was a
multi-platform compiler developed at Lawrence Livermore Lab. It
supported, and was written in, an extended version of Pascal, designed
to be a system-programming language. I added a C front end, and began
porting it to the Motorola 68000 computer. But I had to give that up
when I discovered that the compiler needed many megabytes of stack
space, and the available 68000 Unix system would only allow 64k.
Hoping to avoid the need to write the whole compiler myself, I obtained
the source code for the Pastel compiler, which was a multi-platform
compiler developed at Lawrence Livermore Lab. It supported, and was
written in, an extended version of Pascal, designed to be a
system-programming language. I added a C front end, and began porting
it to the Motorola 68000 computer. But I had to give that up when I
discovered that the compiler needed many megabytes of stack space, and
the available 68000 Unix system would only allow 64k.
I then realized that the Pastel compiler functioned by parsing the
entire input file into a syntax tree, converting the whole syntax tree
@ -274,18 +270,18 @@
ftp server on the MIT computer that I used. (This computer,
prep.ai.mit.edu, thus became the principal GNU ftp distribution site;
when it was decommissioned a few years later, we transferred the name
to our new ftp server.) But at that time, many of the interested
people were not on the Internet and could not get a copy by ftp. So
the question was, what would I say to them?
to our new ftp server.) But at that time, many of the interested people
were not on the Internet and could not get a copy by ftp. So the
question was, what would I say to them?
I could have said, "Find a friend who is on the net and who will make
a copy for you." Or I could have done what I did with the original
PDP-10 Emacs: tell them, "Mail me a tape and a SASE, and I will mail
it back with Emacs on it." But I had no job, and I was looking for
ways to make money from free software. So I announced that I would
mail a tape to whoever wanted one, for a fee of $150. In this way, I
started a free software distribution business, the precursor of the
companies that today distribute entire Linux-based GNU systems.
I could have said, "Find a friend who is on the net and who will make a
copy for you." Or I could have done what I did with the original PDP-10
Emacs: tell them, "Mail me a tape and a SASE, and I will mail it back
with Emacs on it." But I had no job, and I was looking for ways to make
money from free software. So I announced that I would mail a tape to
whoever wanted one, for a fee of $150. In this way, I started a free
software distribution business, the precursor of the companies that
today distribute entire Linux-based GNU systems.
Is a program free for every user?
@ -315,9 +311,9 @@
"Is this program free?" If you judged based on the freedom provided by
the distribution terms of the MIT release, you would say that X was
free software. But if you measured the freedom of the average user of
X, you would have to say it was proprietary software. Most X users
were running the proprietary versions that came with Unix systems, not
the free version.
X, you would have to say it was proprietary software. Most X users were
running the proprietary versions that came with Unix systems, not the
free version.
Copyleft and the GNU GPL
@ -326,15 +322,15 @@
from being turned into proprietary software. The method we use is
called "copyleft".(1)
Copyleft uses copyright law, but flips it over to serve the opposite
of its usual purpose: instead of a means of privatizing software, it
Copyleft uses copyright law, but flips it over to serve the opposite of
its usual purpose: instead of a means of privatizing software, it
becomes a means of keeping software free.
The central idea of copyleft is that we give everyone permission to
run the program, copy the program, modify the program, and distribute
modified versions--but not permission to add restrictions of their
own. Thus, the crucial freedoms that define "free software" are
guaranteed to everyone who has a copy; they become inalienable rights.
The central idea of copyleft is that we give everyone permission to run
the program, copy the program, modify the program, and distribute
modified versions--but not permission to add restrictions of their own.
Thus, the crucial freedoms that define "free software" are guaranteed
to everyone who has a copy; they become inalienable rights.
For an effective copyleft, modified versions must also be free. This
ensures that work based on ours becomes available to our community if
@ -347,15 +343,15 @@
ensure freedom for every user of the program. The companies that
privatized the X Window System usually made some changes to port it to
their systems and hardware. These changes were small compared with the
great extent of X, but they were not trivial. If making changes were
an excuse to deny the users freedom, it would be easy for anyone to
take advantage of the excuse.
great extent of X, but they were not trivial. If making changes were an
excuse to deny the users freedom, it would be easy for anyone to take
advantage of the excuse.
A related issue concerns combining a free program with non-free code.
Such a combination would inevitably be non-free; whichever freedoms
are lacking for the non-free part would be lacking for the whole as
well. To permit such combinations would open a hole big enough to sink
a ship. Therefore, a crucial requirement for copyleft is to plug this
Such a combination would inevitably be non-free; whichever freedoms are
lacking for the non-free part would be lacking for the whole as well.
To permit such combinations would open a hole big enough to sink a
ship. Therefore, a crucial requirement for copyleft is to plug this
hole: anything added to or combined with a copylefted program must be
such that the larger combined version is also free and copylefted.
@ -364,7 +360,7 @@
have other kinds of copyleft that are used in specific circumstances.
GNU manuals are copylefted also, but use a much simpler kind of
copyleft, because the complexity of the GNU GPL is not necessary for
manuals.
manuals.(2)
(1) In 1984 or 1985, Don Hopkins (a very imaginative fellow) mailed me
a letter. On the envelope he had written several amusing sayings,
@ -372,35 +368,36 @@
"copyleft" to name the distribution concept I was developing at the
time.
(2) We now use the GNU Free Documentation License for documentation.
The Free Software Foundation
As interest in using Emacs was growing, other people became involved
in the GNU project, and we decided that it was time to seek funding
once again. So in 1985 we created the Free Software Foundation, a
tax-exempt charity for free software development. The FSF also took
over the Emacs tape distribution business; later it extended this by
adding other free software (both GNU and non-GNU) to the tape, and by
selling free manuals as well.
As interest in using Emacs was growing, other people became involved in
the GNU project, and we decided that it was time to seek funding once
again. So in 1985 we created the Free Software Foundation, a tax-exempt
charity for free software development. The FSF also took over the Emacs
tape distribution business; later it extended this by adding other free
software (both GNU and non-GNU) to the tape, and by selling free
manuals as well.
The FSF accepts donations, but most of its income has always come from
sales--of copies of free software, and of other related services.
Today it sells CD-ROMs of source code, CD-ROMs with binaries, nicely
printed manuals (all with freedom to redistribute and modify), and
Deluxe Distributions (where we build the whole collection of software
for your choice of platform).
sales--of copies of free software, and of other related services. Today
it sells CD-ROMs of source code, CD-ROMs with binaries, nicely printed
manuals (all with freedom to redistribute and modify), and Deluxe
Distributions (where we build the whole collection of software for your
choice of platform).
Free Software Foundation employees have written and maintained a
number of GNU software packages. Two notable ones are the C library
and the shell. The GNU C library is what every program running on a
GNU/Linux system uses to communicate with Linux. It was developed by a
member of the Free Software Foundation staff, Roland McGrath. The
shell used on most GNU/Linux systems is BASH, the Bourne Again
Shell(1), which was developed by FSF employee Brian Fox.
Free Software Foundation employees have written and maintained a number
of GNU software packages. Two notable ones are the C library and the
shell. The GNU C library is what every program running on a GNU/Linux
system uses to communicate with Linux. It was developed by a member of
the Free Software Foundation staff, Roland McGrath. The shell used on
most GNU/Linux systems is BASH, the Bourne Again Shell(1), which was
developed by FSF employee Brian Fox.
We funded development of these programs because the GNU project was
not just about tools or a development environment. Our goal was a
complete operating system, and these programs were needed for that
goal.
We funded development of these programs because the GNU project was not
just about tools or a development environment. Our goal was a complete
operating system, and these programs were needed for that goal.
(1) "Bourne again Shell" is a joke on the name ``Bourne Shell'', which
was the usual shell on Unix.
@ -412,8 +409,8 @@
users' freedom, we wish them success.
Selling copies of Emacs demonstrates one kind of free software
business. When the FSF took over that business, I needed another way
to make a living. I found it in selling services relating to the free
business. When the FSF took over that business, I needed another way to
make a living. I found it in selling services relating to the free
software I had developed. This included teaching, for subjects such as
how to program GNU Emacs and how to customize GCC, and software
development, mostly porting GCC to new platforms.
@ -425,14 +422,14 @@
beginning to see free software companies based on launching new free
software products.
Watch out, though--a number of companies that associate themselves
with the term "open source" actually base their business on non-free
Watch out, though--a number of companies that associate themselves with
the term "open source" actually base their business on non-free
software that works with free software. These are not free software
companies, they are proprietary software companies whose products
tempt users away from freedom. They call these "value added", which
reflects the values they would like us to adopt: convenience above
freedom. If we value freedom more, we should call them "freedom
subtracted" products.
companies, they are proprietary software companies whose products tempt
users away from freedom. They call these "value added", which reflects
the values they would like us to adopt: convenience above freedom. If
we value freedom more, we should call them "freedom subtracted"
products.
Technical goals
@ -441,8 +438,8 @@
allowing users to cooperate, and an ethical advantage, respecting the
user's freedom.
But it was natural to apply the known standards of good practice to
the work--for example, dynamically allocating data structures to avoid
But it was natural to apply the known standards of good practice to the
work--for example, dynamically allocating data structures to avoid
arbitrary fixed size limits, and handling all the possible 8-bit codes
wherever that made sense.
@ -469,8 +466,8 @@
UNIX was (and is) proprietary software, and the GNU project's
philosophy said that we should not use proprietary software. But,
applying the same reasoning that leads to the conclusion that violence
in self defense is justified, I concluded that it was legitimate to
use a proprietary package when that was crucial for developing free
in self defense is justified, I concluded that it was legitimate to use
a proprietary package when that was crucial for developing a free
replacement that would help others stop using the proprietary package.
But, even if this was a justifiable evil, it was still an evil. Today
@ -481,41 +478,41 @@
The GNU Task List
As the GNU project proceeded, and increasing numbers of system
components were found or developed, eventually it became useful to
make a list of the remaining gaps. We used it to recruit developers to
write the missing pieces. This list became known as the GNU task list.
In addition to missing Unix components, we listed added various other
components were found or developed, eventually it became useful to make
a list of the remaining gaps. We used it to recruit developers to write
the missing pieces. This list became known as the GNU task list. In
addition to missing Unix components, we listed added various other
useful software and documentation projects that, we thought, a truly
complete system ought to have.
Today, hardly any Unix components are left in the GNU task list--those
jobs have been done, aside from a few inessential ones. But the list
is full of projects that some might call "applications". Any program
that appeals to more than a narrow class of users would be a useful
thing to add to an operating system.
jobs have been done, aside from a few inessential ones. But the list is
full of projects that some might call "applications". Any program that
appeals to more than a narrow class of users would be a useful thing to
add to an operating system.
Even games are included in the task list--and have been since the
beginning. Unix included games, so naturally GNU should too. But
compatibility was not an issue for games, so we did not follow the
list of games that Unix had. Instead, we listed a spectrum of
different kinds of games that users might like.
compatibility was not an issue for games, so we did not follow the list
of games that Unix had. Instead, we listed a spectrum of different
kinds of games that users might like.
The GNU Library GPL
The GNU C library uses a special kind of copyleft called the GNU
Library General Public License, which gives permission to link
Library General Public License(1), which gives permission to link
proprietary software with the library. Why make this exception?
It is not a matter of principle; there is no principle that says
proprietary software products are entitled to include our code. (Why
contribute to a project predicated on refusing to share with us?)
Using the LGPL for the C library, or for any library, is a matter of
contribute to a project predicated on refusing to share with us?) Using
the LGPL for the C library, or for any library, is a matter of
strategy.
The C library does a generic job; every proprietary system or compiler
comes with a C library. Therefore, to make our C library available
only to free software would not have given free software any
advantage--it would only have discouraged use of our library.
comes with a C library. Therefore, to make our C library available only
to free software would not have given free software any advantage--it
would only have discouraged use of our library.
One system is an exception to this: on the GNU system (and this
includes GNU/Linux), the GNU C library is the only C library. So the
@ -526,27 +523,31 @@
discourage use of the GNU system than to encourage development of free
applications.
That is why using the Library GPL is a good strategy for the C
library. For other libraries, the strategic decision needs to be
considered on a case-by-case basis. When a library does a special job
that can help write certain kinds of programs, then releasing it under
the GPL, limiting it to free programs only, is a way of helping other
free software developers, giving them an advantage against proprietary
That is why using the Library GPL is a good strategy for the C library.
For other libraries, the strategic decision needs to be considered on a
case-by-case basis. When a library does a special job that can help
write certain kinds of programs, then releasing it under the GPL,
limiting it to free programs only, is a way of helping other free
software developers, giving them an advantage against proprietary
software.
Consider GNU Readline, a library that was developed to provide
command-line editing for BASH. Readline is released under the ordinary
GNU GPL, not the Library GPL. This probably does reduce the amount
Readline is used, but that is no loss for us. Meanwhile, at least one
useful application has been made free software specifically so it
could use Readline, and that is a real gain for the community.
useful application has been made free software specifically so it could
use Readline, and that is a real gain for the community.
Proprietary software developers have the advantages money provides;
free software developers need to make advantages for each other. I
hope some day we will have a large collection of GPL-covered libraries
that have no parallel available to proprietary software, providing
useful modules to serve as building blocks in new free software, and
adding up to a major advantage for further free software development.
free software developers need to make advantages for each other. I hope
some day we will have a large collection of GPL-covered libraries that
have no parallel available to proprietary software, providing useful
modules to serve as building blocks in new free software, and adding up
to a major advantage for further free software development.
(1) This license is now called the GNU Lesser General Public License,
to avoid giving the idea that all libraries ought to use it.
See http://www.gnu.org/philosophy/why-not-lgpl.html.
Scratching an itch?
@ -563,18 +564,18 @@
GNU Emacs, GDB and GNU Make.
Some GNU programs were developed to cope with specific threats to our
freedom. Thus, we developed gzip to replace the Compress program,
which had been lost to the community because of the LZW patents. We
found people to develop LessTif, and more recently started GNOME and
Harmony, to address the problems caused by certain proprietary
libraries (see below). We are developing the GNU Privacy Guard to
replace popular non-free encryption software, because users should not
have to choose between privacy and freedom.
freedom. Thus, we developed gzip to replace the Compress program, which
had been lost to the community because of the LZW patents. We found
people to develop LessTif, and more recently started GNOME and Harmony,
to address the problems caused by certain proprietary libraries (see
below). We are developing the GNU Privacy Guard to replace popular
non-free encryption software, because users should not have to choose
between privacy and freedom.
Of course, the people writing these programs became interested in the
work, and many features were added to them by various people for the
sake of their own needs and interests. But that is not why the
programs exist.
sake of their own needs and interests. But that is not why the programs
exist.
Unexpected developments
@ -584,16 +585,16 @@
Since each component of the GNU system was implemented on a Unix
system, each component could run on Unix systems, long before a
complete GNU system existed. Some of these programs became popular,
and users began extending them and porting them---to the various
complete GNU system existed. Some of these programs became popular, and
users began extending them and porting them---to the various
incompatible versions of Unix, and sometimes to other systems as well.
The process made these programs much more powerful, and attracted both
funds and contributors to the GNU project. But it probably also
delayed completion of a minimal working system by several years, as
GNU developers' time was put into maintaining these ports and adding
features to the existing components, rather than moving on to write
one missing component after another.
funds and contributors to the GNU project. But it probably also delayed
completion of a minimal working system by several years, as GNU
developers' time was put into maintaining these ports and adding
features to the existing components, rather than moving on to write one
missing component after another.
The GNU Hurd
@ -602,18 +603,18 @@
collection of server processes running on top of Mach. Mach is a
microkernel developed at Carnegie Mellon University and then at the
University of Utah; the GNU HURD is a collection of servers (or ``herd
of gnus'') that run on top of Mach, and do the various jobs of the
Unix kernel. The start of development was delayed as we waited for
Mach to be released as free software, as had been promised.
of gnus'') that run on top of Mach, and do the various jobs of the Unix
kernel. The start of development was delayed as we waited for Mach to
be released as free software, as had been promised.
One reason for choosing this design was to avoid what seemed to be the
hardest part of the job: debugging a kernel program without a
source-level debugger to do it with. This part of the job had been
done already, in Mach, and we expected to debug the HURD servers as
user programs, with GDB. But it took a long time to make that
possible, and the multi-threaded servers that send messages to each
other have turned out to be very hard to debug. Making the HURD work
solidly has stretched on for many years.
source-level debugger to do it with. This part of the job had been done
already, in Mach, and we expected to debug the HURD servers as user
programs, with GDB. But it took a long time to make that possible, and
the multi-threaded servers that send messages to each other have turned
out to be very hard to debug. Making the HURD work solidly has
stretched on for many years.
Alix
@ -625,18 +626,18 @@
said nothing, but decided to surprise her with a kernel named Alix.
It did not stay that way. Michael Bushnell (now Thomas), the main
developer of the kernel, preferred the name HURD, and redefined Alix
to refer to a certain part of the kernel--the part that would trap
system calls and handle them by sending messages to HURD servers.
developer of the kernel, preferred the name HURD, and redefined Alix to
refer to a certain part of the kernel--the part that would trap system
calls and handle them by sending messages to HURD servers.
Ultimately, Alix and I broke up, and she changed her name;
independently, the HURD design was changed so that the C library would
send messages directly to servers, and this made the Alix component
disappear from the design.
But before these things happened, a friend of hers came across the
name Alix in the HURD source code, and mentioned the name to her. So
the name did its job.
But before these things happened, a friend of hers came across the name
Alix in the HURD source code, and mentioned the name to her. So the
name did its job.
Linux and GNU/Linux
@ -644,9 +645,9 @@
kernel is available. In 1991, Linus Torvalds developed a
Unix-compatible kernel and called it Linux. Around 1992, combining
Linux with the not-quite-complete GNU system resulted in a complete
free operating system. (Combining them was a substantial job in
itself, of course.) It is due to Linux that we can actually run a
version of the GNU system today.
free operating system. (Combining them was a substantial job in itself,
of course.) It is due to Linux that we can actually run a version of
the GNU system today.
We call this system version GNU/Linux, to express its composition as a
combination of the GNU system with Linux as the kernel.
@ -654,27 +655,26 @@
Challenges in our future
We have proved our ability to develop a broad spectrum of free
software. This does not mean we are invincible and unstoppable.
Several challenges make the future of free software uncertain; meeting
them will require steadfast effort and endurance, sometimes lasting
for years. It will require the kind of determination that people
display when they value their freedom and will not let anyone take it
away.
software. This does not mean we are invincible and unstoppable. Several
challenges make the future of free software uncertain; meeting them
will require steadfast effort and endurance, sometimes lasting for
years. It will require the kind of determination that people display
when they value their freedom and will not let anyone take it away.
The following four sections discuss these challenges.
Secret hardware
Hardware manufacturers increasingly tend to keep hardware
specifications secret. This makes it difficult to write free drivers
so that Linux and XFree86 can support new hardware. We have complete
free systems today, but we will not have them tomorrow if we cannot
support tomorrow's computers.
specifications secret. This makes it difficult to write free drivers so
that Linux and XFree86 can support new hardware. We have complete free
systems today, but we will not have them tomorrow if we cannot support
tomorrow's computers.
There are two ways to cope with this problem. Programmers can do
reverse engineering to figure out how to support the hardware. The
rest of us can choose the hardware that is supported by free software;
as our numbers increase, secrecy of specifications will become a
reverse engineering to figure out how to support the hardware. The rest
of us can choose the hardware that is supported by free software; as
our numbers increase, secrecy of specifications will become a
self-defeating policy.
Reverse engineering is a big job; will we have programmers with
@ -687,8 +687,8 @@
Non-free libraries
A non-free library that runs on free operating systems acts as a trap
for free software developers. The library's attractive features are
the bait; if you use the library, you fall into the trap, because your
for free software developers. The library's attractive features are the
bait; if you use the library, you fall into the trap, because your
program cannot usefully be part of a free operating system. (Strictly
speaking, we could include your program, but it won't run with the
library missing.) Even worse, if a program that uses the proprietary
@ -696,37 +696,35 @@
into the trap.
The first instance of this problem was the Motif toolkit, back in the
80s. Although there were as yet no free operating systems, it was
clear what problem Motif would cause for them later on. The GNU
Project responded in two ways: by asking individual free software
projects to support the free X toolkit widgets as well as Motif, and
by asking for someone to write a free replacement for Motif. The job
took many years; LessTif, developed by the Hungry Programmers, became
powerful enough to support most Motif applications only in 1997.
80s. Although there were as yet no free operating systems, it was clear
what problem Motif would cause for them later on. The GNU Project
responded in two ways: by asking individual free software projects to
support the free X toolkit widgets as well as Motif, and by asking for
someone to write a free replacement for Motif. The job took many years;
LessTif, developed by the Hungry Programmers, became powerful enough to
support most Motif applications only in 1997.
Between 1996 and 1998, another non-free GUI toolkit library, called
Qt, was used in a substantial collection of free software, the desktop
KDE.
Between 1996 and 1998, another non-free GUI toolkit library, called Qt,
was used in a substantial collection of free software, the desktop KDE.
Free GNU/Linux systems were unable to use KDE, because we could not
use the library. However, some commercial distributors of GNU/Linux
systems who were not strict about sticking with free software added
KDE to their systems--producing a system with more capabilities, but
less freedom. The KDE group was actively encouraging more programmers
to use Qt, and millions of new "Linux users" had never been exposed to
the idea that there was a problem in this. The situation appeared
grim.
Free GNU/Linux systems were unable to use KDE, because we could not use
the library. However, some commercial distributors of GNU/Linux systems
who were not strict about sticking with free software added KDE to
their systems--producing a system with more capabilities, but less
freedom. The KDE group was actively encouraging more programmers to use
Qt, and millions of new "Linux users" had never been exposed to the
idea that there was a problem in this. The situation appeared grim.
The free software community responded to the problem in two ways:
GNOME and Harmony.
The free software community responded to the problem in two ways: GNOME
and Harmony.
GNOME, the GNU Network Object Model Environment, is GNU's desktop
project. Started in 1997 by Miguel de Icaza, and developed with the
support of Red Hat Software, GNOME set out to provide similar desktop
facilities, but using free software exclusively. It has technical
advantages as well, such as supporting a variety of languages, not
just C++. But its main purpose was freedom: not to require the use of
any non-free software.
advantages as well, such as supporting a variety of languages, not just
C++. But its main purpose was freedom: not to require the use of any
non-free software.
Harmony is a compatible replacement library, designed to make it
possible to run KDE software without using Qt.
@ -735,8 +733,8 @@
which, when carried out, should make Qt free software. There is no way
to be sure, but I think that this was partly due to the community's
firm response to the problem that Qt posed when it was non-free. (The
new license is inconvenient and inequitable, so it remains desirable
to avoid using Qt.)
new license is inconvenient and inequitable, so it remains desirable to
avoid using Qt.)
[Subsequent note: in September 2000, Qt was rereleased under the GNU
GPL, which essentially solved this problem.]
@ -765,11 +763,14 @@
free software anyway. We will manage to get work done without the
patented features. But those who value free software because they
expect it to be techically superior are likely to call it a failure
when a patent holds it back. Thus, while it is useful to talk about
the practical effectiveness of the "cathedral" model of development,
when a patent holds it back. Thus, while it is useful to talk about the
practical effectiveness of the "cathedral" model of development (1),
and the reliability and power of some free software, we must not stop
there. We must talk about freedom and principle.
(1) It would have been clearer to write `of the "bazaar" model', since
that was the alternative that was new and initially controversial.
Free documentation
The biggest deficiency in our free operating systems is not in the
@ -799,26 +800,25 @@
which does not allow programmers to be conscientious and finish the
job, does not fill our community's needs.
Some kinds of limits on how modifications are done pose no problem.
For example, requirements to preserve the original author's copyright
Some kinds of limits on how modifications are done pose no problem. For
example, requirements to preserve the original author's copyright
notice, the distribution terms, or the list of authors, are ok. It is
also no problem to require modified versions to include notice that
they were modified, even to have entire sections that may not be
deleted or changed, as long as these sections deal with nontechnical
topics. These kinds of restrictions are not a problem because they
don't stop the conscientious programmer from adapting the manual to
fit the modified program. In other words, they don't block the free
don't stop the conscientious programmer from adapting the manual to fit
the modified program. In other words, they don't block the free
software community from making full use of the manual.
However, it must be possible to modify all the *technical* content of
the manual, and then distribute the result in all the usual media,
through all the usual channels; otherwise, the restrictions do
obstruct the community, the manual is not free, and we need another
manual.
through all the usual channels; otherwise, the restrictions do obstruct
the community, the manual is not free, and we need another manual.
Will free software developers have the awareness and determination to
produce a full spectrum of free manuals? Once again, our future
depends on philosophy.
produce a full spectrum of free manuals? Once again, our future depends
on philosophy.
We must talk about freedom
@ -855,20 +855,20 @@
of principle that had motivated the free software movement and the GNU
project, and to appeal instead to executives and business users, many
of whom hold an ideology that places profit above freedom, above
community, above principle. Thus, the rhetoric of "open source"
focuses on the potential to make high quality, powerful software, but
shuns the ideas of freedom, community, and principle.
community, above principle. Thus, the rhetoric of "open source" focuses
on the potential to make high quality, powerful software, but shuns the
ideas of freedom, community, and principle.
The "Linux" magazines are a clear example of this--they are filled
with advertisements for proprietary software that works with
GNU/Linux. When the next Motif or Qt appears, will these magazines
warn programmers to stay away from it, or will they run ads for it?
The "Linux" magazines are a clear example of this--they are filled with
advertisements for proprietary software that works with GNU/Linux. When
the next Motif or Qt appears, will these magazines warn programmers to
stay away from it, or will they run ads for it?
The support of business can contribute to the community in many ways;
all else being equal, it is useful. But winning their support by
speaking even less about freedom and principle can be disastrous; it
makes the previous imbalance between outreach and civics education
even worse.
makes the previous imbalance between outreach and civics education even
worse.
"Free software" and "open source" describe the same category of
software, more or less, but say different things about the software,
@ -885,10 +885,10 @@
between the enemy and my city. Surprising myself, I have sometimes
succeeded.
Sometimes I failed; some of my cities have fallen. Then I found
another threatened city, and got ready for another battle. Over time,
I've learned to look for threats and put myself between them and my
city, calling on other hackers to come and join me.
Sometimes I failed; some of my cities have fallen. Then I found another
threatened city, and got ready for another battle. Over time, I've
learned to look for threats and put myself between them and my city,
calling on other hackers to come and join me.
Nowadays, often I'm not the only one. It is a relief and a joy when I
see a regiment of hackers digging in to hold the line, and I realize,

View file

@ -48,6 +48,9 @@ current buffer.
It should not generate :require. Or :require in defcustom
should not be recorded in the user's custom-set-variables call.
** Feature to change cursor shape when Emacs is idle (for more than
a specified time).
** The buttons at the top of a custom buffer should not omit
variables whose values are currently hidden.

View file

@ -1,6 +1,6 @@
Въведение в Emacs. Условията за копиране са в края на текста.
Въведението на Емакс. Условията за копиране са в края на текста.
Командите на Emacs най-често включват клавишите CONTROL (понякога
Командите на Емакс най-често включват клавишите CONTROL (понякога
отбелязван с CTRL или CTL) и META (понякога отбелязван с EDIT или
ALT). Вместо да се изписват с пълно име всеки път, ние ще използваме
следните съкращения:
@ -14,7 +14,7 @@ ALT).
клавиша ESC и след това въведете <знак>. Ние
записваме <ESC>, за да отбележим клавиша ESC.
Важна бележка: в края на Emacs сесията въведете двата знака C-x C-c.
Важна бележка: в края на Емакс сесията въведете двата знака C-x C-c.
Знаците ">>" отляво ви дават указание да изпълните команда. Например:
<<Blank lines inserted here by startup of help-with-tutorial>>
>> Сега въведете C-v (Покажи следващия екран), за да се придвижите към
@ -92,7 +92,7 @@ Next (
Всеки ред от текст завършва със знак за нов ред, който служи за
отделянето на реда от следващия ред. Последният ред във вашия файл
трябва да има знак за нов ред в края (но Emacs не изисква такъв,
трябва да има знак за нов ред в края (но Емакс не изисква такъв,
когато прочита файла).
>> Опитайте C-b в началото на ред. Това трябва да ви придвижи в края
@ -108,7 +108,7 @@ C-f
Когато се придвижвате след горния или долния край на екрана, текстът
отвъд края се измества към екрана. Това се нарича "скролиране". То
позволява на Emacs да придвижва курсора към зададеното място в текста,
позволява на Емакс да придвижва курсора към зададеното място в текста,
без да го изкарва извън екрана.
>> Опитайте се да придвижите курсора след долния край на екрана с C-n
@ -191,7 +191,7 @@ Shift
Вие можете също да се придвижвате с клавишите-стрелки, ако вашият
терминал има такива. Ние препоръчваме да научите C-b, C-f, C-n и C-p
по три причини. Първо, те работят на всички видове терминали. Второ,
веднъж след като добиете практика в използването на Emacs, ще
веднъж след като добиете практика в използването на Емакс, ще
откриете, че въвеждането на тези Control-знаци е по-бързо от
въвеждането на клавишите стрелки, защото не трябва да премествате
ръката си далеч от областта на клавишите с букви. Трето, веднъж след
@ -199,7 +199,7 @@ Shift
можете също така лесно да научите по-напредналите команди за движение
на курсора.
Повечето Emacs команди приемат числов аргумент; за повечето от тях той
Повечето Емакс команди приемат числов аргумент; за повечето от тях той
служи като брояч на повторения. Начинът, по който давате числов
брояч, е с въвеждане на C-u, последвано от въвеждане на цифрите, и
всичко това преди въвеждане на самата команда. Ако имате клавиш META
@ -231,7 +231,7 @@ C-v
Ако използвате графичен интерфейс, като X11 или MS-Windows, би
трябвало да има тънка правоъгълна област, наречена плъзгач (scroll
bar), в лявата страна на прозореца на Emacs. Вие можете да скролирате
bar), в лявата страна на прозореца на Емакс. Вие можете да скролирате
текста, щракайки с мишката в плъзгача.
>> Опитайте да натиснете средния бутон на върха на осветената област
@ -243,10 +243,10 @@ bar),
нагоре и надолу, като движите мишката.
* КОГАТО EMACS Е БЛОКИРАЛ
* КОГАТО ЕМАКС Е БЛОКИРАЛ
-------------------------
Ако Emacs спре да отговаря на вашите команди, вие можете да го спрете
Ако Емакс спре да отговаря на вашите команди, вие можете да го спрете
безопасно, като въведете C-g. Може да използвате C-g, за да спрете
команда, която се изпълнява твърде дълго.
@ -263,15 +263,15 @@ bar),
* ЗАБРАНЕНИ КОМАНДИ
-------------------
Някои команди на Emacs са "забранени", така че начинаещите потребители
Някои команди на Емакс са "забранени", така че начинаещите потребители
да не могат да ги употребят по погрешка.
Ако въведете някоя от забранените команди, Emacs извежда съобщение,
Ако въведете някоя от забранените команди, Емакс извежда съобщение,
казвайки каква е била командата и питайки ви дали искате да продължите
напред и да изпълните командата.
Ако наистина искате да изпробвате командата, въведете <SPC> (клавиша
интервал) в отговор на въпроса. Обикновено ако не искате да изпълните
Ако наистина искате да изпробвате командата, въведете клавиша интервал
в отговор на въпроса. Обикновено ако не искате да изпълните
забранената команда, отговаряте на въпроса с "n".
>> Въведете C-x C-l (която е забранена команда), и след това въведете
@ -281,7 +281,7 @@ bar),
* ПРОЗОРЦИ
----------
Emacs може да управлява няколко прозореца, всеки извеждайки свой
Емакс може да управлява няколко прозореца, всеки извеждайки свой
собствен текст. Ние ще обясним по-късно как да използвате няколко
прозореца. Точно сега ние искаме да обясним как да се отървете от
допълнителни прозорци и да се върнете към основното редактиране с един
@ -311,13 +311,13 @@ Emacs
----------------------
Ако искате да вмъкнете текст, просто го въведете. Знаците, които
могат да се виждат, като А, 7, * и т.н., се възприемат от Emacs като
могат да се виждат, като А, 7, * и т.н., се възприемат от Емакс като
текст и се вмъкват веднага. Въведете <Return> (клавишът за връщане в
началото на реда), за да вмъкнете знак за нов ред.
Може да изтриете последния знак, който сте въвели, с въвеждане на
<Delback>. <Delback> е клавиш от клавиатурата -- същият, който
обикновено използвате извън Emacs, за да изтриете последния въведен от
обикновено използвате извън Емакс, за да изтриете последния въведен от
вас знак. Обикновено е голям клавиш, на няколко реда разстояние от
клавиша <Return>, и обикновено е отбелязан с "Delete", "Del" или
"Backspace".
@ -357,24 +357,24 @@ Emacs
>> Въведете <Return>, за да вмъкнете наново знака за нов ред, който
изтрихте.
Запомнете, че на повечето команди на Emacs може да бъде зададен брояч
Запомнете, че на повечето команди на Емакс може да бъде зададен брояч
на повторенията; това включва вмъкването на текстови знаци.
Повтарянето на текстов знак го вмъква няколко пъти.
>> Опитайте това сега -- въведете C-u 8 *, за да вмъкнете ********.
Сега вие сте научили най-основните начини за въвеждане на нещо в Emacs
Сега вие сте научили най-основните начини за въвеждане на нещо в Емакс
и поправяне на грешки. Можете също така да изтривате думи или редове.
Ето обобщение на изтриващите действия:
<Delback> Изтриване на знака точно преди курсора
C-d Изтриване на знака точно след курсора
<Delback> изтриване на знака точно преди курсора
C-d изтриване на знака точно след курсора
M-<Delback> Изтриване на думата непосредствено преди курсора
M-d Изтриване на думата след курсора
M-<Delback> изтриване на думата непосредствено преди курсора
M-d изтриване на думата след курсора
C-k Изтриване от мястото на курсора до края на реда
M-k Изтриване до края на текущото изречение
C-k изтриване от мястото на курсора до края на реда
M-k изтриване до края на текущото изречение
Забележете, че <Delback> и C-d, сравнени с M-<Delback> и M-d,
разширяват подобието, започнато от C-f и M-f (добре, <Delback> не е
@ -384,12 +384,12 @@ M-k
Можете също да премахнете всяка част от буфера с един универсален
начин. Придвижете се до единия край на частта и въведете C-@ или
C-<SPC> (което и да е от двете). (<SPC> е клавишът интервал.)
Придвижете се до другия край на частта и въведете C-w. Това ще изреже
целия текст между тези два края.
C-интервал (което и да е от двете). Придвижете се до другия край на
частта и въведете C-w. Това ще изреже целия текст между тези два
края.
>> Придвижете курсора до знака "М" в началото на предишния абзац.
>> Въведете C-<SPC>. Emacs трябва да изведе съобщение "Mark set" в
>> Въведете C-интервал. Емакс трябва да изведе съобщение "Mark set" в
долния край на екрана.
>> Придвижете курсора до буквата "р" в "край" на втория ред от абзаца.
>> Въведете C-w. Това ще изреже текста, започващ от "М" и завършващ
@ -419,9 +419,9 @@ C-k
Връщането обратно на текст се нарича "вмъкване". (Мислете за него
като за изваждане обратно, или дръпване обратно, на текст, който е бил
изрязан.) Можете да вмъквате изрязания текст или на същото място,
откъдето е бил премахнат, или на друго място в редактирания текст,
даже и в различен файл. Можете да вмъквате един и същ текст няколко
пъти; това прави няколко копия от него.
откъдето е бил премахнат, или на друго място в буфера, даже и в
различен файл. Можете да вмъквате един и същ текст няколко пъти; това
прави няколко копия от него.
Командата за вмъкване е C-y. Тя вмъква наново последния изрязан текст
в текущото място на курсора.
@ -500,25 +500,25 @@ C_-
---------
За да направите текста, който редактирате, постоянен, трябва да го
сложите във файл. В противен случай той ще изчезне, когато Emacs
сложите във файл. В противен случай той ще изчезне, когато Емакс
приключи. За да сложите вашия текст във файл, трябва да "намерите"
файла преди да въвеждате текст. (Това също се нарича "посещаване" на
файла.)
Намиране на файл означава, че виждате съдържанието му в Emacs. В
Намиране на файл означава, че виждате съдържанието му в Емакс. В
много случаи това е като да редактирате самия файл. Обаче промените,
които правите, използвайки Emacs, не остават постоянни, докато не
които правите, използвайки Емакс, не остават постоянни, докато не
"запишете" файла. Това е така, за да се предотврати оставянето на
полупроменен файл в системата, когато не искате това. Дори когато
записвате, Emacs оставя началния файл под променено име, в случай, че
записвате, Емакс оставя началния файл под променено име, в случай, че
по-късно решите, че вашите промени са били грешка.
Ако погледнете в дъното на екрана, ще видите ред, който започва и
завършва с тирета и започва с "-R:-- TUTORIAL.bg" или нещо подобно.
завършва с тирета и започва с "-b:-- TUTORIAL.bg" или нещо подобно.
Тази част от екрана показва името на файла, който сте посетили. Точно
сега вие сте посетили файл, наречен "TUTORIAL.bg", който е вашето
лично копие-чернова на Emacs въведението. Когато намерите файл в
Emacs, името на този файл ще се появи на същото място.
лично копие-чернова на Емакс въведението. Когато намерите файл в
Емакс, името на този файл ще се появи на същото място.
Особеност на командата за намиране на файл е, че трябва да кажете
името на файла, който искате. Ние го наричаме "четене на аргумент от
@ -527,10 +527,10 @@ Emacs,
C-x C-f Намиране на файл
Emacs ви подканя да въведете името на файла. Името на файла, което
Емакс ви подканя да въведете името на файла. Името на файла, което
напишете, се появява в дъното на екрана. Редът в дъното на екрана се
нарича минибуфер, когато се използва за този вид вход. Можете да
използвате обикновените команди за редактиране на Emacs, за да
използвате обикновените команди за редактиране на Емакс, за да
редактирате името на файла.
Когато въвеждате името на файла (или какъвто и да е вход в
@ -551,12 +551,12 @@ Emacs
C-x C-s Запазване на файла
Това копира текста от Emacs във файла. Първия път, когато това се
направи, Emacs преименува началния файл с ново име, така че той да не
Това копира текста от Емакс във файла. Първия път, когато това се
направи, Емакс преименува началния файл с ново име, така че той да не
се изгуби. Новото име се построява с добавяне на "~" в края на името
на началния файл.
Когато запазването е свършило, Emacs извежда името на файла, който е
Когато запазването е свършило, Емакс извежда името на файла, който е
бил записан. Трябва да записвате достатъчно често, така че да не
изгубите много работа, ако системата се срине по някаква причина.
@ -564,19 +564,19 @@ Emacs
Това трябва да изведе "Wrote ...TUTORIAL.bg" в дъното на екрана.
ЗАБЕЛЕЖКА: На някои системи въвеждането на C-x C-s ще замръзи екрана и
вие няма да виждате повече изход от Emacs. Това показва, че една
вие няма да виждате повече изход от Емакс. Това показва, че една
"способност" на операционната система, наричана "управление на потока"
(flow control), е прихванала C-s и не го пропуска към Emacs. За да
(flow control), е прихванала C-s и не го пропуска към Емакс. За да
размразите екрана, въведете C-q. Тогава вижте секцията "Спонтанно
включване на постъпково търсене" (Spontaneous Entry to Incremental
Search) в ръководството на Emacs за съвет как да се справите с тази
Search) в ръководството на Емакс за съвет как да се справите с тази
"способност".
Може да намерите съществуващ файл, да го разгледате и да го
редактирате. Можете също да намерите файл, който не съществува. Това
е начинът за създаване на нови файлове в Emacs: намирате файла, който
е начинът за създаване на нови файлове в Емакс: намирате файла, който
ще бъде в началото празен, и тогава започвате вмъкването на текста за
файла. Когато говорите за "записване" на файл, Emacs всъщност ще
файла. Когато говорите за "записване" на файл, Емакс всъщност ще
създаде файла с текста, който сте въвели. Оттам нататък може да
считате, че редактирате вече съществуващ файл.
@ -584,9 +584,9 @@ Search)
* БУФЕРИ
--------
Ако намерите втори файл с C-x C-f, първият файл остава в Emacs.
Ако намерите втори файл с C-x C-f, първият файл остава в Емакс.
Можете да превключите обратно към него, като го намерите пак с C-x
C-f. По този начин може да получите доста на брой файлове в Emacs.
C-f. По този начин може да получите доста на брой файлове в Емакс.
>> Създайте файл с име "foo", въвеждайки C-x C-f foo <Return>.
Вмъкнете малко текст, редактирайте го и запазете "foo" с въвеждане
@ -594,16 +594,16 @@ C-f.
Накрая въведете C-x C-f TUTORIAL.bg <Return>, за да се върнете
обратно във въведението.
Emacs запазва текста на всеки файл в обект, наричан "буфер".
Намирането на файл прави нов буфер в Emacs. За да видите списък на
буферите, които в момента съществуват във вашия Emacs, въведете
Емакс запазва текста на всеки файл в обект, наричан "буфер".
Намирането на файл прави нов буфер в Емакс. За да видите списък на
буферите, които в момента съществуват във вашия Емакс, въведете
C-x C-b Показване на буферите
>> Опитайте C-x C-b сега.
Вижте как всеки буфер има име, а понякога и име на файл за файла,
чието съдържание държи. ВСЕКИ текст, който виждате в Emacs прозорец,
чието съдържание държи. ВСЕКИ текст, който виждате в Емакс прозорец,
е винаги част от някакъв буфер.
>> Въведете C-x 1, за да махнете списъка с буферите.
@ -625,13 +625,13 @@ Emacs
Списъкът с буферите, който правите с C-x C-b, винаги ви показва името
на всеки буфер.
ВСЕКИ текст, който виждате в Emacs прозорец, е винаги част от някакъв
ВСЕКИ текст, който виждате в Емакс прозорец, е винаги част от някакъв
буфер. Някои буфери не съответстват на файлове. Например буферът,
именуван "*Buffer List*", не съответства на файл. Това е буферът,
който съдържа списъка с буферите, които сте направили с C-x C-b.
Буферът, именуван "*Messages*", също не съответства на файл; той
съдържа съобщенията, които се появяват в дъното на екрана по време на
Emacs сесията.
Емакс сесията.
>> Въведете C-x b *Messages* <Return>, за да видите буфера със
съобщенията. След това въведете C-x C-b TUTORIAL <Return>, за да
@ -639,7 +639,7 @@ Emacs
Ако направите промени в текста на един файл и тогава намерите друг
файл, това няма да запише първия файл. Неговите промени остават вътре
в Emacs, в буфера на файла. Създаването или редактирането на буфера
в Емакс, в буфера на файла. Създаването или редактирането на буфера
на втория файл няма ефект върху буфера на първия файл. Това е много
полезно, но също означава, че се нуждаете от удобен начин да запазите
буфера на първия файл. Ще е неудобно да превключите обратно с C-x
@ -658,8 +658,8 @@ C-x s
* РАЗШИРЯВАНЕ НА НАБОРА КОМАНДИ
-------------------------------
Има много, много повече команди на Emacs, отколкото могат да се сложат
на всички контролни и мета знаци. Emacs заобикаля това с X (eXtended)
Има много, много повече команди на Емакс, отколкото могат да се сложат
на всички контролни и мета знаци. Емакс заобикаля това с X (eXtended)
командата. Това става по два начина:
C-x Знаково разширяване. Последвано от един знак.
@ -667,49 +667,49 @@ C-x s
име.
Тези команди са общо взето полезни, но по-малко, отколкото командите,
които досега сте научили. Вече видяхте няколко от тях: например
командите върху файлове C-x C-f за намиране (Find) и C-x C-s за
запазване (Save). Друг пример е командата за край на Emacs сесията --
това е командата C-x C-c. (Не се безпокойте, че може да изгубите
всички промени, които сте направили; C-x C-c предлага да запази всеки
променен файл, преди да премахне Emacs.)
които досега сте научили. Вече видяхте две от тях: командите върху
файлове C-x C-f за намиране (Find) и C-x C-s за запазване (Save).
Друг пример е командата за край на Емакс сесията -- това е командата
C-x C-c. (Не се безпокойте, че може да изгубите всички промени, които
сте направили; C-x C-c предлага да запази всеки променен файл, преди
да премахне Емакс.)
C-z е командата за излизане от Emacs *временно* -- така че да можете
да се върнете към същата Emacs сесия по-късно.
C-z е командата за излизане от Емакс *временно* -- така че да можете
да се върнете към същата Емакс сесия по-късно.
На системи, които позволяват това, C-z "изоставя" (suspend) Emacs,
т.е. връща към обвивката, но не разрушава Emacs. В повечето обвивки
можете да продължите Emacs сесията с командата "fg" или с "%emacs".
На системи, които позволяват това, C-z "изоставя" (suspend) Емакс,
т.е. връща към обвивката, но не разрушава Емакс. В повечето обвивки
можете да продължите Емакс сесията с командата "fg" или с "%emacs".
На системи, които не позволяват изоставяне, C-z създава нова
подобвивка, която върви под Emacs, за да ви даде шанс да стартирате
други програми и да се върнете към Emacs след това; това не е истинско
"излизане" от Emacs. В този случай командата на обвивката "exit" е
обикновеният начин да се върнете обратно към Emacs от подобвивката.
подобвивка, която върви под Емакс, за да ви даде шанс да стартирате
други програми и да се върнете към Емакс след това; това не е истинско
"излизане" от Емакс. В този случай командата на обвивката "exit" е
обикновеният начин да се върнете обратно към Емакс от подобвивката.
Моментът да използвате C-x C-c е, когато искате да излезете от
системата. Това е и правилната команда за излизане, когато Emacs е
системата. Това е и правилната команда за излизане, когато Емакс е
извикан от пощенска програма или други странични програми, тъй като те
може и да не знаят как да се справят с изоставянето на Emacs. При
може и да не знаят как да се справят с изоставянето на Емакс. При
обикновени обстоятелства, обаче, ако не сте тръгнали да излизате от
системата, по-добре е да изоставите Emacs с C-z, вместо да излизате от
Emacs.
системата, по-добре е да изоставите Емакс с C-z, вместо да излизате от
Емакс.
Има много команди C-x. Ето списък на тези, които сте научили:
C-x C-f Намиране на файл
C-x C-s Запазване на файл
C-x C-b Списък на буферите
C-x C-c Излизане от Emacs
C-x 1 Изтриване на всички прозорци, освен един
C-x u Отмяна
C-x C-f Намиране на файл.
C-x C-s Запазване на файл.
C-x C-b Списък на буферите.
C-x C-c Излизане от Емакс.
C-x 1 Изтриване на всички прозорци освен един.
C-x u Отмяна.
Именуваните разширени команди са команди, които се използват даже още
по-рядко, или команди, които се използват само в определени режими.
Пример е командата replace-string, която заменя глобално един низ с
друг. Когато въведете M-x, Emacs ви подсказва в дъното на екрана с
друг. Когато въведете M-x, Емакс ви подсказва в дъното на екрана с
M-x и вие трябва да въведете името на командата, в този случай
"replace-string". Просто въведете "repl s<TAB>" и Emacs ще завърши
"replace-string". Просто въведете "repl s<TAB>" и Емакс ще завърши
името. (<TAB> е клавишът Tab, обикновено намиращ се над клавиша
CapsLock или клавиша Shift близо до левия край на клавиатурата.)
Завършете името на командата с <Return>.
@ -733,11 +733,11 @@ CapsLock
Когато сте направили промени във файл, но още не сте го запазили, те
могат да бъдат загубени, ако компютърът внезапно се изключи. За да ви
предпази от такива ситуации, Emacs периодично запазва "автоматично
предпази от такива ситуации, Емакс периодично запазва "автоматично
запазван" файл за всеки файл, който редактирате. Името на автоматично
запазвания файл има # в началото и в края; например, ако вашият файл е
с име "hello.c", името на неговия автоматично запазван файл ще бъде
"#hello.c#". Когато запазвате файл по обикновения начин, Emacs
"#hello.c#". Когато запазвате файл по обикновения начин, Емакс
изтрива неговия автоматично записван файл.
Ако компютърът зависне, може да възстановите вашата автоматично
@ -751,7 +751,7 @@ M-x recover file<Return>.
* ЕХО ОБЛАСТТА
--------------
Ако Emacs види, че въвеждате многознакови команди бавно, ще ви ги
Ако Емакс види, че въвеждате многознакови команди бавно, ще ви ги
покаже в дъното на екрана, в област, наричана "ехо област". Ехо
областта обхваща последния ред от екрана.
@ -762,18 +762,18 @@ M-x recover file<Return>.
Редът точно над ехо областта се нарича "ред на режима" (mode line).
Той показва нещо като:
-D:** TUTORIAL.bg 63% L749 (Fundamental)---------------------
-b:** TUTORIAL.bg (Fundamental)--L670--58%----------------
Този ред дава полезна информация за състоянието на Emacs и текста,
Този ред дава полезна информация за състоянието на Емакс и текста,
който редактирате.
Вече знаете какво означава името на файла -- това е файлът, който сте
намерили. NN% показва вашата текуща позиция в текста; това означава,
че NN процента от текста е над върха на екрана. Ако началото на файла
е на екрана, ще се показва --Top-- (връх) вместо --00%--. Ако краят
на файла е на екрана, ще се показва --Bot-- (дъно). Ако гледате
текст, който е толкова малък, че се показва изцяло на екрана, редът на
режима ще изведе --All--.
намерили. -NN%-- показва вашата текуща позиция в текста; това
означава, че NN процента от текста е над върха на екрана. Ако
началото на файла е на екрана, ще се показва --Top-- (връх) вместо
--00%--. Ако края на файла е на екрана, ще се показва --Bot-- (дъно).
Ако гледате текст, който е толкова малък, че се показва изцяло на
екрана, редът на режима ще изведе --All--.
Знакът L и цифрите показват мястото по друг начин: това е номерът на
текущия ред на точката.
@ -787,7 +787,7 @@ M-x recover file<Return>.
Fundamental (Основен), който използвате в момента. Това е пример за
"главен режим" (major mode).
Emacs има много главни режими. Някои от тях са предвидени за
Емакс има много главни режими. Някои от тях са предвидени за
редактиране на различни езици и/или видове текст, като например режим
Лисп, режим Текст и други. Във всеки един момент от време точно един
главен режим е активен и неговото име може винаги да бъде намерено в
@ -806,7 +806,7 @@ Emacs
>> Въведете M-x text mode<Return>.
Не се безпокойте, никоя от Emacs командите, които сте научили, няма да
Не се безпокойте, никоя от Емакс командите, които сте научили, няма да
се промени по някакъв съществен начин. Но може да забележите, че M-f
и M-b сега възприемат апострофите (') като част от думите. Преди
това, в основния режим (Fundamental), M-f и M-b се възприемаха като
@ -835,7 +835,7 @@ m.
Един главен режим, който е много полезен, особено за редактиране на
текст на естествен език, е режимът на автоматично запълване (Auto Fill
mode). Когато този режим е включен, Emacs автоматично разделя реда
mode). Когато този режим е включен, Емакс автоматично разделя реда
при мястото между думите, когато вмъквате текст и направите ред, който
е твърде дълъг.
@ -855,7 +855,7 @@ auto fill mode<Return>.
аргумент на командата.
>> Въведете C-x f с аргумент 20. (C-u 2 0 C-x f).
Сега въведете някакъв текст и вижте как Emacs запълва редовете с по
Сега въведете някакъв текст и вижте как Емакс запълва редовете с по
не повече от 20 знака. После върнете обратно границата на 70,
използвайки C-x f отново.
@ -870,12 +870,12 @@ auto fill mode<Return>.
* ТЪРСЕНЕ
---------
Emacs може да извършва търсения на низове (това са последователности
Емакс може да извършва търсения на низове (това са последователности
от знаци или думи) или напред в текста, или назад в него. Търсенето
на низ е придвижваща курсора команда; тя премества курсора на
следващото място, където се среща низът.
Командата за търсене на Emacs се различава от командата за търсене на
Командата за търсене на Емакс се различава от командата за търсене на
повечето редактори по това, че тя е "постъпкова". Това означава, че
търсенето се извършва още докато въвеждате текста, който търсите.
@ -883,7 +883,7 @@ Emacs
търсене назад. НО ПОЧАКАЙТЕ! Не ги пробвайте сега.
Когато въведете C-s, ще забележите, че низът "I-search" се появява
като подсказка в ехо областта. Това ви казва, че Emacs е в това,
като подсказка в ехо областта. Това ви казва, че Емакс е в това,
което се нарича постъпково търсене, чакайки ви да въвеждате текста,
който искате да търсите. <Return> приключва търсенето.
@ -895,19 +895,19 @@ Emacs
>> Сега въведете <Delback> три пъти и вижте как се придвижва курсора.
>> Въведете <Return>, за да прекратите търсенето.
Забелязахте ли какво стана? Emacs, когато търси постъпково, се опитва
Забелязахте ли какво стана? Емакс, когато търси постъпково, се опитва
да намери следващото съвпадение на низа, който се въвежда. За да
отидете на следващото съвпадение на "търсне", просто отново въведете
C-s. Ако няма такова съвпадение, Emacs бибипва и ви казва, че
C-s. Ако няма такова съвпадение, Емакс бибипва и ви казва, че
търсенето е "провалено" (failing). C-g също прекратява търсенето.
ЗАБЕЛЕЖКА: На някои системи въвеждането на C-s ще замрази екрана и вие
няма да може да видите повече реакция от Emacs. Това показва, че
няма да може да видите повече реакция от Емакс. Това показва, че
"способност" на операционната система, наречена "управление на потока"
(flow control), е прихванала C-s и не го пропуска до Emacs. За да
(flow control), е прихванала C-s и не го пропуска до Емакс. За да
размразите екрана, въведете C-q. Тогава вижте секцията "Спонтанно
включване на постъпковото търсене" (Spontaneous Entry to Incremental
Search) в ръководството на Emacs за съвет как да се справите с тази
Search) в ръководството на Емакс за съвет как да се справите с тази
"способност".
Ако сте в средата на постъпково търсене и въведете <Delback>, ще
@ -929,9 +929,9 @@ C-s
* МНОЖЕСТВО ПРОЗОРЦИ
--------------------
----------------
Една от привлекателните способности на Emacs е тази, че може да
Една от привлекателните способности на Емакс е тази, че може да
гледате повече от един прозорец на екрана в даден момент от време.
>> Придвижете курсора до този ред и въведете C-u 0 C-l (това е
@ -942,7 +942,7 @@ C-s
остава на по-горния прозорец.
>> Въведете C-M-v, за да скролирате долния прозорец. (Ако нямате
истински клавиш META, въведете <ESC> C-v.)
истински клавиш META, въведете ESC C-v.)
>> Въведете C-x o ("o" от "other" -- "друг"), за да придвижите
курсора в долния прозорец.
@ -971,10 +971,10 @@ C-M-v
първи", защото и двата клавиша действат, модифицирайки знака, който
сте въвели.
Ако нямате истински клавиш META и използвате <ESC> вместо това, редът
има значение: трябва да въвеждате <ESC>, последван от CONTROL-v,
защото CONTROL-<ESC> v няма да работи. Това е така, защото <ESC> е
собствен знак, а не модификатор.
Ако нямате истински клавиш META и използвате ESC вместо това, редът
има значение: трябва да въвеждате ESC, последван от CONTROL-v, защото
CONTROL-ESC v няма да работи. Това е така, защото ESC е собствен
знак, а не модификатор.
>> Въведете C-x 1 (в горния прозорец), за да махнете долния прозорец.
@ -1007,13 +1007,13 @@ C-M-v
на главния режим. Например, може да видите [(Fundamental)] вместо
(Fundamental).
За да се махнете от вложеното ниво на редактиране, въведете <ESC>
<ESC> <ESC>. Това е обща команда за "излизане". Може и да я
използвате за махане (скриване) на допълнителни прозорци, както и за
да се махнете от минибуфера.
За да се махнете от вложеното ниво на редактиране, въведете ESC ESC
ESC. Това е обща команда за "излизане". Може и да я използвате за
махане (скриване) на допълнителни прозорци, както и за да се махнете
от минибуфера.
>> Въведете M-x, за да влезете в минибуфер; тогава въведете <ESC> <ESC>
<ESC>, за да излезете.
>> Въведете M-x, за да влезете в минибуфер; тогава въведете ESC ESC
ESC, за да излезете.
Не можете да използвате C-g, за да излезете от вложено ниво на
редактиране. Това е така, защото C-g се използва за прекратяване на
@ -1024,16 +1024,16 @@ C-M-v
----------------------------------
В това въведение се опитахме да осигурим достатъчно информация, за да
започнете да използвате Emacs. Има толкова много още в Emacs, че не е
започнете да използвате Емакс. Има толкова много още в Емакс, че не е
възможно то да бъде обяснено всичкото тук. Обаче може да поискате да
научите повече за Emacs, тъй като той притежава още много полезни
способности. Emacs има команди за четене на документацията на Emacs
научите повече за Емакс, тъй като той притежава още много полезни
способности. Емакс има команди за четене на документацията на Емакс
командите. Тези "помощни" команди всички започват със знака
CONTROL-h, който се нарича "знакът за помощ".
За да използвате възможностите на тази помощ, въведете знака C-h и
след това знака, казващ какъв вид помощ искате. Ако НАИСТИНА сте се
изгубили, въведете C-h ? и Emacs ще ви каже с какво може да ви
изгубили, въведете C-h ? и Емакс ще ви каже с какво може да ви
помогне. Ако сте въвели C-h и решите, че не се нуждаете от помощ,
просто въведете C-g, за да я прекратите.
@ -1045,7 +1045,7 @@ CONTROL-h,
Най-основното помощно средство е C-h c. Въведете C-h, знака c и
команден знак или последователност от знаци, образуващи команда;
тогава Emacs ще изведе много кратко описание на командата.
тогава Емакс ще изведе много кратко описание на командата.
>> Type C-h c C-p.
@ -1055,7 +1055,7 @@ CONTROL-h,
(C-p изпълнява командата предишен-ред)
Това ви казва "името на функцията". Имената на функциите се използват
най-вече за настройване и разширяване на Emacs. Но тъй като имената
най-вече за настройване и разширяване на Емакс. Но тъй като имената
на функциите са избрани така, че да показват какво прави командата, те
могат да служат и за много кратка документация -- достатъчна, за да ви
припомни команди, които вече сте учили.
@ -1069,7 +1069,7 @@ c.
>> Въведете C-h k C-p.
Това извежда документацията на функцията, както и нейното име, в
отделен Emacs прозорец. Когато я прочетете, въведете C-x 1, за да
отделен Емакс прозорец. Когато я прочетете, въведете C-x 1, за да
махнете помощния текст. Не е нужно да правите това точно сега. Може
да редактирате, докато се обръщате към помощния текст за справка, и
след това да въведете C-x 1.
@ -1080,14 +1080,14 @@ c.
функцията.
>> Опитайте с въвеждане на C-h f previous-line<Return>.
Това извежда цялата информация, която Emacs знае за функцията,
Това извежда цялата информация, която Емакс знае за функцията,
която осъществява командата C-p.
Подобна команда, C-h v, извежда документацията на променливите, които
може да променяте, за да настройвате поведението на Emacs. Трябва да
въведете името на променливата, когато Emacs ви подскаже това.
може да променяте, за да настройвате поведението на Емакс. Трябва да
въведете името на променливата, когато Емакс ви подскаже това.
C-h a Команда Апропос. Въведете ключова дума и Emacs ще
C-h a Команда Апропос. Въведете ключова дума и Емакс ще
покаже списък на всички команди, чието име съдържа
тази ключова дума. Тези команди могат всички да бъдат
извикани чрез META-x. За някои команди командата
@ -1110,18 +1110,18 @@ C-f,
специален буфер, наричан "*info*", където може да
четете ръководствата на инсталираните във вашата
система пакети. Въведете m emacs <Return>, за да
четете ръководството на Emacs. Ако никога преди това
не сте използвали Info, въведете ? и Emacs ще включи
четете ръководството на Емакс. Ако никога преди това
не сте използвали Info, въведете ? и Емакс ще включи
въведение във възможностите на режима Инфо. Веднъж
след като сте преминали това въведение, трябва да се
консултирате с Emacs Инфо ръководството като ваша
консултирате с Емакс Инфо ръководството като ваша
основна документация.
* ОЩЕ ВЪЗМОЖНОСТИ
-----------------
Може да научите повече за Emacs с четене на неговото ръководство, или
Може да научите повече за Емакс с четене на неговото ръководство, или
като книга, или в Инфо (използвайте менюто помощ (Help) или въведете
F10 h r). Две възможности, които може да желаете в началото, са
довършване (completion), което спестява писане, и dired, който
@ -1129,26 +1129,26 @@ F10 h r).
Довършването е начин да избягвате ненужно писане. Например, ако
искате да превключите към буфера *Messages*, може да въведете C-x b
*M<Tab> и Emacs ще запълни останалата част от името на буфера,
*M<Tab> и Емакс ще запълни останалата част от името на буфера,
доколкото може да се определи от това, което сте въвели. Довършването
е описано в Инфо-ръководството на Emacs в страницата "Довършване"
е описано в Инфо-ръководството на Емакс в страницата "Довършване"
("Completion").
Dired ви позволява да гледате списъка от файлове в директория (и като
възможност: нейните поддиректории), да се придвижвате в този списък,
да посещавате, преименувате, изтривате и изобщо действате върху
файловете. Dired е описан в Инфо-ръководството на Emacs в страницата
файловете. Dired е описан в Инфо-ръководството на Емакс в страницата
"Dired".
Ръководството на Emacs описва още много други възможности на
Ръководството на Емакс описва още много други възможности на
редактора.
* ЗАКЛЮЧЕНИЕ
------------
Запомнете: за да излезете безвъзвратно от Emacs, използвайте C-x C-c.
За да излезете временно в обвивка, така че да се върнете в Emacs
Запомнете: за да излезете безвъзвратно от Емакс, използвайте C-x C-c.
За да излезете временно в обвивка, така че да се върнете в Емакс
по-късно, използвайте C-z.
Това въведение е предвидено да бъде разбираемо за всички нови
@ -1159,10 +1159,10 @@ Dired
* КОПИРАНЕ
----------
Това въведение произлиза от дълга поредица въведения в Emacs,
започвайки от едно, написано от Стюърт Кракрафт за началния Emacs.
Това въведение произлиза от дълга поредица въведения в Емакс,
започвайки от едно, написано от Стюърт Кракрафт за началния Емакс.
Тази версия на въведението, както и GNU Emacs, е защитена с авторски
Тази версия на въведението, както и ГНУ Емакс, е защитена с авторски
права и идва с разрешение да разпространявате копия при следните
условия:
@ -1183,8 +1183,8 @@ Copyright (C) 1985, 1996, 1998, 2001, 2002, 2003, 2004,
under the above conditions, provided also that they
carry prominent notices stating who last altered them.
Условията за копиране на самия Emacs са по-сложни, но в същия дух.
Моля, прочетете файла COPYING и тогава давайте копия на GNU Emacs на
Условията за копиране на самия Емакс са по-сложни, но в същия дух.
Моля, прочетете файла COPYING и тогава давайте копия на ГНУ Емакс на
свои приятели. Помогнете да спрем затвореността на програмите
("притежанието"), като използваме, пишем и споделяме свободен софтуер!

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,8 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@ -55,7 +55,7 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@ -278,7 +278,7 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
@ -303,10 +303,9 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
@ -336,5 +335,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View file

@ -1,3 +1,36 @@
2006-10-12 Kenichi Handa <handa@m17n.org>
* Makefile.in (install): Be sure to make ${INSTALLDIR} before `cd'
to it.
2006-10-05 Chong Yidong <cyd@stupidchicken.com>
* quail/latin-ltx.el: Fix typo in previous change.
2006-10-05 Stefan Monnier <monnier@iro.umontreal.ca>
* quail/latin-ltx.el: Remove rules that start with { since they are
redundant and hence impact the { key for no good reason.
2006-10-02 Kenichi Handa <handa@m17n.org>
* Makefile.in (install): Fix previous change.
2006-09-28 Kenichi Handa <handa@m17n.org>
* Makefile.in (install): Be sure to make ${INSTALLDIR}.
2006-09-15 Jay Belanger <belanger@truman.edu>
* COPYING: Replace "Library Public License" by "Lesser Public
License" throughout.
2006-09-06 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
* quail/uni-input.el (ucs-input-method): Don't make the action of
a key not in [0-9a-zA-Z] when it was expected to be. Let the Emacs
mechanism do it.
2006-07-12 David Kastrup <dak@gnu.org>
* quail/greek.el: Change iota subscriptum transliteration in

View file

@ -216,6 +216,9 @@ leim-list.el: ${SUBDIRS} ${NON-TIT-MISC} changed.tit changed.misc ${srcdir}/leim
sed -n '/^[^;]/ p' < ${srcdir}/leim-ext.el >> $@
install: all
if [ ! -d ${INSTALLDIR} ] ; then \
${srcdir}/${dot}${dot}/mkinstalldirs ${INSTALLDIR}; \
else true; fi
if [ x`(cd ${INSTALLDIR} && /bin/pwd)` != x`(/bin/pwd)` ] ; then \
rm -rf ${INSTALLDIR}/leim-list.el; \
rm -rf ${INSTALLDIR}/quail ${INSTALLDIR}/ja-dic ; \

View file

@ -45,17 +45,17 @@ system, including many technical ones. Examples:
(quail-define-rules
("!`" )
("{\\pounds}" ) ("\\pounds" )
("{\\S}" ) ("\\S" )
("\\pounds" ) ;; ("{\\pounds}" ?£)
("\\S" ) ;; ("{\\S}" ?§)
("\\\"{}" )
("{\\copyright}" ) ("\\copyright" )
("\\copyright" ) ;; ("{\\copyright}" ?©)
("$^a$" )
("\\={}" )
("$\\pm$" ) ("\\pm" )
("$^2$" )
("$^3$" )
("\\'{}" ?´)
("{\\P}" ) ("\\P" )
("\\P" ) ;; ("{\\P}" ?¶)
;; Fixme: Yudit has the equivalent of ("\\cdot" ?⋅), for U+22C5, DOT
;; OPERATOR, whereas · is MIDDLE DOT. JadeTeX translates both to
;; \cdot.
@ -71,8 +71,8 @@ system, including many technical ones. Examples:
("\\~{A}" ) ("\\~A" )
("\\\"{A}" ) ("\\\"A" )
("\\\k{A}" )
("{\\AA}" ) ("\\AA" )
("{\\AE}" ) ("\\AE" )
("\\AA" ) ;; ("{\\AA}" ?Å)
("\\AE" ) ;; ("{\\AE}" ?Æ)
("\\c{C}" ) ("\\cC" )
("\\`{E}" ) ("\\`E" )
("\\'{E}" ) ("\\'E" )
@ -93,14 +93,14 @@ system, including many technical ones. Examples:
("\\\"{O}" ) ("\\\"O" )
("\\\k{O}" )
("$\\times$" ?×) ("\\times" ?×)
("{\\O}" ) ("\\O" )
("\\O" ) ;; ("{\\O}" ?Ø)
("\\`{U}" ) ("\\`U" )
("\\'{U}" ) ("\\'U" )
("\\^{U}" ) ("\\^U" )
("\\\"{U}" ) ("\\\"U" )
("\\\k{U}" )
("\\'{Y}" ) ("\\'Y" )
("{\\ss}" ) ("\\ss" )
("\\ss" ) ;; ("{\\ss}" ?ß)
("\\`{a}" ) ("\\`a" )
("\\'{a}" ) ("\\'a" )
@ -108,8 +108,8 @@ system, including many technical ones. Examples:
("\\~{a}" ) ("\\~a" )
("\\\"{a}" ) ("\\\"a" )
("\\\k{a}" )
("{\\aa}" ) ("\\aa" )
("{\\ae}" ) ("\\ae" )
("\\aa" ) ;; ("{\\aa}" ?å)
("\\ae" ) ;; ("{\\ae}" ?æ)
("\\c{c}" ) ("\\cc" )
("\\`{e}" ) ("\\`e" )
("\\'{e}" ) ("\\'e" )
@ -130,7 +130,7 @@ system, including many technical ones. Examples:
("\\\"{o}" ) ("\\\"o" )
("\\\k{o}" )
("$\\div$" ) ("\\div" )
("{\\o}" ) ("\\o" )
("\\o" ) ;; ("{\\o}" ?ø)
("\\`{u}" ) ("\\`u" )
("\\'{u}" ) ("\\'u" )
("\\^{u}" ) ("\\^u" )
@ -181,7 +181,7 @@ system, including many technical ones. Examples:
("\\u{\\i}" ) ("\\ui" )
("\\.{I}" ) ("\\.I" )
("{\\i}" ?ı) ("\\i" ?ı)
("\\i" ?ı) ;; ("{\\i}" ?ı)
("\\^{J}" ) ("\\^J" )
("\\^{\\j}" ) ("\\^j" )
("\\c{K}" ) ("\\cK" )
@ -191,8 +191,8 @@ system, including many technical ones. Examples:
("\\c{L}" ) ("\\cL" )
("\\c{l}" ) ("\\cl" )
("{\\L}" ) ("\\L" )
("{\\l}" ) ("\\l" )
("\\L" ) ;; ("{\\L}" ?Ł)
("\\l" ) ;; ("{\\l}" ?ł)
("\\'{N}" ) ("\\'N" )
("\\'{n}" ) ("\\'n" )
("\\c{N}" ) ("\\cN" )
@ -206,8 +206,8 @@ system, including many technical ones. Examples:
("\\H{O}" ) ("\\HO" )
("\\U{o}" ) ("\\Uo" )
("{\\OE}" ) ("\\OE" )
("{\\oe}" ) ("\\oe" )
("\\OE" ) ;; ("{\\OE}" ?Œ)
("\\oe" ) ;; ("{\\oe}" ?œ)
("\\'{R}" ) ("\\'R" )
("\\'{r}" ) ("\\'r" )
("\\c{R}" ) ("\\cR" )

View file

@ -100,11 +100,6 @@
(progn
(push key events)
(ucs-input-insert-char key))
(let ((last-command-char key)
(current-prefix-arg))
(condition-case err
(call-interactively (key-binding seq))
(quail-error (message "%s" (cdr err)) (beep))))
(quail-delete-region)
(throw 'non-digit (append (reverse events)
(listify-key-sequence seq))))))

1
lib-src/.gitignore vendored
View file

@ -21,5 +21,6 @@ update-game-score
yow
Makefile
makefile
blessmail
*-spd
*.pdb

View file

@ -1,8 +1,8 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@ -55,7 +55,7 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@ -278,7 +278,7 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
@ -303,10 +303,9 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
@ -336,5 +335,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View file

@ -1,3 +1,16 @@
2006-10-09 Eli Zaretskii <eliz@gnu.org>
* makefile.w32-in (../src/config.h): Fix error message.
2006-09-30 Eli Zaretskii <eliz@gnu.org>
* .cvsignore: Add blessmail.
2006-09-15 Jay Belanger <belanger@truman.edu>
* COPYING: Replace "Library Public License" by "Lesser Public
License" throughout.
2006-08-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* etags.c (readline): expect sscanf returns >= 1.
@ -10,7 +23,7 @@
2006-08-07 Masatake YAMATO <jet@gyve.org>
* etags.c (TEX_mode): Check getc retruns EOF.
* etags.c (TEX_mode): Check getc returns EOF.
File ended without newline causes infinite loop.
2002-07-30 Adrian Aichner <adrian@xemacs.org> (tiny change)

View file

@ -318,7 +318,7 @@ cleanall: clean
# Headers we would preprocess if we could.
#
../src/config.h: ../nt/$(CONFIG_H)
echo config.h has changed. Re-run configure.bat.
echo $(CONFIG_H) has changed. Re-run configure.bat.
exit -1
getopt.h: getopt_.h

View file

@ -1,8 +1,8 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@ -55,7 +55,7 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@ -278,7 +278,7 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
@ -303,10 +303,9 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
@ -336,5 +335,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

File diff suppressed because it is too large Load diff

View file

@ -914,7 +914,7 @@ Has a preference of looking backwards."
;; Include certain keywords if they
;; precede the name.
(setq middle (point))
(forward-word -1)
(forward-sexp -1)
;; Is this C++ method?
(when (and (< 2 middle)
(string= (buffer-substring (- middle 2)

File diff suppressed because it is too large Load diff

View file

@ -142,7 +142,7 @@ If value is `verbose', the computed score is shown for each match."
"Apropos pattern as entered by user.")
(defvar apropos-pattern-quoted nil
"Apropos pattern passed through `regexp-quoute'.")
"Apropos pattern passed through `regexp-quote'.")
(defvar apropos-words ()
"Current list of apropos words extracted from `apropos-pattern'.")

View file

@ -215,7 +215,7 @@ If this contains a %s, that will be replaced by the matching rule."
;;; " (file-name-nondirectory (buffer-file-name)) " ends here\n"))
"A list specifying text to insert by default into a new file.
Elements look like (CONDITION . ACTION) or ((CONDITION . DESCRIPTION) . ACTION).
CONDITION maybe a regexp that must match the new file's name, or it may be
CONDITION may be a regexp that must match the new file's name, or it may be
a symbol that must match the major mode for this element to apply.
Only the first matching element is effective.
Optional DESCRIPTION is a string for filling `auto-insert-prompt'.

View file

@ -345,23 +345,20 @@ Keymap to display on minor modes.")
(put 'mode-line-position 'standard-value
(list `(quote ,standard-mode-line-position))))
(defvar mode-line-buffer-identification-keymap nil "\
Keymap for what is displayed by `mode-line-buffer-identification'.")
;; Add menu of buffer operations to the buffer identification part
;; of the mode line.or header line.
;
(let ((map (make-sparse-keymap)))
(defvar mode-line-buffer-identification-keymap
;; Add menu of buffer operations to the buffer identification part
;; of the mode line.or header line.
(let ((map (make-sparse-keymap)))
;; Bind down- events so that the global keymap won't ``shine
;; through''.
(define-key map [mode-line mouse-1] 'mode-line-previous-buffer)
(define-key map [header-line down-mouse-1] 'ignore)
(define-key map [header-line mouse-1] 'mode-line-previous-buffer)
(define-key map [header-line down-mouse-3] 'ignore)
(define-key map [mode-line mouse-3] 'mode-line-next-buffer)
(define-key map [header-line down-mouse-3] 'ignore)
(define-key map [header-line mouse-3] 'mode-line-next-buffer)
(setq mode-line-buffer-identification-keymap map))
map) "\
Keymap for what is displayed by `mode-line-buffer-identification'.")
(defun propertized-buffer-identification (fmt)
"Return a list suitable for `mode-line-buffer-identification'.
@ -615,7 +612,7 @@ language you are using."
(let ((l (generic-character-list))
(table (nth 1 global-map)))
(while l
(set-char-table-default table (car l) 'self-insert-command)
(aset table (car l) 'self-insert-command)
(setq l (cdr l))))
(setq help-event-list '(help f1))

View file

@ -409,11 +409,52 @@
( \\mu . calcFunc-moebius )))
(put 'tex 'math-variable-table
'( ( \\pi . var-pi )
'(
;; The Greek letters
( \\alpha . var-alpha )
( \\beta . var-beta )
( \\gamma . var-gamma )
( \\Gamma . var-Gamma )
( \\delta . var-delta )
( \\Delta . var-Delta )
( \\epsilon . var-epsilon )
( \\varepsilon . var-varepsilon)
( \\zeta . var-zeta )
( \\eta . var-eta )
( \\theta . var-theta )
( \\vartheta . var-vartheta )
( \\Theta . var-Theta )
( \\iota . var-iota )
( \\kappa . var-kappa )
( \\lambda . var-lambda )
( \\Lambda . var-Lambda )
( \\mu . var-mu )
( \\nu . var-nu )
( \\xi . var-xi )
( \\Xi . var-Xi )
( \\pi . var-pi )
( \\varpi . var-varpi )
( \\Pi . var-Pi )
( \\rho . var-rho )
( \\varrho . var-varrho )
( \\sigma . var-sigma )
( \\sigma . var-varsigma )
( \\Sigma . var-Sigma )
( \\tau . var-tau )
( \\upsilon . var-upsilon )
( \\Upsilon . var-Upsilon )
( \\phi . var-phi )
( \\varphi . var-varphi )
( \\Phi . var-Phi )
( \\chi . var-chi )
( \\psi . var-psi )
( \\Psi . var-Psi )
( \\omega . var-omega )
( \\Omega . var-Omega )
;; Others
( \\ell . var-ell )
( \\infty . var-inf )
( \\infty . var-uinf )
( \\phi . var-phi )
( \\gamma . var-gamma )
( \\sum . (math-parse-tex-sum calcFunc-sum) )
( \\prod . (math-parse-tex-sum calcFunc-prod) )))

View file

@ -1101,7 +1101,7 @@ If nil, selections displayed but ignored.")
(defun calc-dispatch (&optional arg)
"Invoke the GNU Emacs Calculator. See `calc-dispatch-help' for details."
(interactive "P")
(sit-for echo-keystrokes)
; (sit-for echo-keystrokes)
(condition-case err ; look for other keys bound to calc-dispatch
(let ((keys (this-command-keys)))
(unless (or (not (stringp keys))

View file

@ -394,8 +394,8 @@ displayed in a window:
(if (and (< appt-comp-time appt-message-warning-time)
(> (+ cur-comp-time appt-message-warning-time)
appt-max-time))
(setq min-to-app (+ (- (1+ appt-max-time) cur-comp-time))
appt-comp-time))
(setq min-to-app (+ (- (1+ appt-max-time) cur-comp-time)
appt-comp-time)))
;; issue warning if the appointment time is
;; within appt-message-warning time

View file

@ -568,11 +568,20 @@ are
Names can be capitalized or not, written in full (as specified by the
variable `calendar-day-name-array'), or abbreviated (as specified by
`calendar-day-abbrev-array') with or without a period. To take effect,
this variable should be set before the calendar package and its associates
are loaded. Otherwise, use one of the functions `european-calendar' or
`american-calendar' to force the appropriate update."
`calendar-day-abbrev-array') with or without a period.
Setting this variable directly does not take effect (if the
calendar package is already loaded). Rather, use either
\\[customize] or the functions `european-calendar' and
`american-calendar'."
:type 'boolean
;; Without :initialize (require 'calendar) throws an error because
;; american-calendar is undefined at this point.
:initialize 'custom-initialize-default
:set (lambda (symbol value)
(if value
(european-calendar)
(american-calendar)))
:group 'diary)
;;;###autoload
@ -1582,6 +1591,19 @@ See the documentation of that function for more information."
(calendar-only-one-frame-setup arg))
(t (calendar-basic-setup arg))))
(autoload 'diary-view-entries "diary-lib"
"Prepare and display a buffer with diary entries.
Searches your diary file for entries that match ARG days starting with
the date indicated by the cursor position in the displayed three-month
calendar."
t)
(autoload 'list-calendar-holidays "holidays"
"Create a buffer containing the holidays for the current calendar window.
The holidays are those in the list `calendar-notable-days'. Returns t if any
holidays are found, nil if not."
t)
(defun calendar-basic-setup (&optional arg)
"Display a three-month calendar in another window.
The three months appear side by side, with the current month in the middle
@ -1649,13 +1671,6 @@ to be replaced by asterisks to highlight it whenever it is in the window."
(list-calendar-holidays)))
(run-hooks 'initial-calendar-window-hook))
(autoload 'diary-view-entries "diary-lib"
"Prepare and display a buffer with diary entries.
Searches your diary file for entries that match ARG days starting with
the date indicated by the cursor position in the displayed three-month
calendar."
t)
(autoload 'view-other-diary-entries "diary-lib"
"Prepare and display buffer of diary entries from an alternative diary file.
Searches for entries that match ARG days, starting with the date indicated
@ -1930,12 +1945,6 @@ to the date indicated by point."
to the date indicated by point."
t)
(autoload 'list-calendar-holidays "holidays"
"Create a buffer containing the holidays for the current calendar window.
The holidays are those in the list `calendar-notable-days'. Returns t if any
holidays are found, nil if not."
t)
(autoload 'cal-tex-cursor-month "cal-tex"
"Make a buffer with LaTeX commands for the month cursor is on.
Optional prefix argument specifies number of months to be produced.

View file

@ -650,7 +650,10 @@ Entry to this mode runs the hooks on `comint-mode-hook'."
(make-local-variable 'comint-process-echoes)
(make-local-variable 'comint-file-name-chars)
(make-local-variable 'comint-file-name-quote-list)
(set (make-local-variable 'comint-accum-marker) (make-marker))
(make-local-variable 'comint-accum-marker)
(setq comint-accum-marker (make-marker))
(make-local-variable 'font-lock-defaults)
(setq font-lock-defaults '(nil))
(add-hook 'change-major-mode-hook 'font-lock-defontify nil t)
;; This behavior is not useful in comint buffers, and is annoying
(set (make-local-variable 'next-line-add-newlines) nil))
@ -765,7 +768,8 @@ buffer. The hook `comint-exec-hook' is run after each exec."
(format "COLUMNS=%d" (window-width)))
(list "TERM=emacs"
(format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width))))
(if (getenv "EMACS") nil (list "EMACS=t"))
(unless (getenv "EMACS")
(list (concat "EMACS=" invocation-directory invocation-name)))
process-environment))
(default-directory
(if (file-accessible-directory-p default-directory)

View file

@ -1895,8 +1895,7 @@ Prefix args ::
(cond
((= (preceding-char) ?#)
;; preprocessor macro, see if it's one we handle
(setq string (buffer-substring (point) (+ (point) 6)))
(cond ((member string '("define" "ifdef "))
(cond ((looking-at "\\(define\\|ifdef\\)\\>")
;; skip forward over definition symbol
;; and add it to database
(and (forward-word 2)
@ -1944,9 +1943,9 @@ Prefix args ::
(throw 'finish-add-completions t))
(error
;; Check for failure in scan-sexps
(if (or (string-equal (nth 1 e)
"Containing expression ends prematurely")
(string-equal (nth 1 e) "Unbalanced parentheses"))
(if (member (nth 1 e)
'("Containing expression ends prematurely"
"Unbalanced parentheses"))
;; unbalanced paren., keep going
;;(ding)
(forward-line 1)

View file

@ -389,7 +389,7 @@
:link '(custom-manual "(emacs)Undo")
:group 'editing)
(defgroup modeline nil
(defgroup mode-line nil
"Content of the modeline."
:group 'environment)
@ -1521,13 +1521,18 @@ Otherwise use brackets."
(widget-insert description))
(widget-insert (format ".
%s buttons; type RET or click mouse-1 to actuate one.
Editing a setting changes only the text in the buffer.
Use the setting's State button to set it or save changes in it.
Saving a change normally works by editing your Emacs init file.
See "
Editing a setting changes only the text in the buffer."
(if custom-raised-buttons
"`Raised' text indicates"
"Square brackets indicate")))
(if init-file-user
(widget-insert "
Use the setting's State button to set it or save changes in it.
Saving a change normally works by editing your Emacs init file.")
(widget-insert "
\nSince you started Emacs with `-q', which inhibits use of the
Emacs init file, you cannot save settings into the Emacs init file."))
(widget-insert "\nSee ")
(widget-create 'custom-manual
:tag "Custom file"
"(emacs)Saving Customizations")
@ -4152,6 +4157,8 @@ if only the first line of the docstring is shown."))
recentf-exclude)))
(old-buffer (find-buffer-visiting filename)))
(with-current-buffer (or old-buffer (find-file-noselect filename))
(unless (eq major-mode 'emacs-lisp-mode)
(emacs-lisp-mode))
(let ((inhibit-read-only t))
(custom-save-variables)
(custom-save-faces))
@ -4255,19 +4262,31 @@ This function does not save the buffer."
(let ((spec (car-safe (get symbol 'theme-value)))
(value (get symbol 'saved-value))
(requests (get symbol 'custom-requests))
(now (not (or (custom-variable-p symbol)
(and (not (boundp symbol))
(not (eq (get symbol 'force-value)
'rogue))))))
(now (and (not (custom-variable-p symbol))
(or (boundp symbol)
(eq (get symbol 'force-value)
'rogue))))
(comment (get symbol 'saved-variable-comment)))
;; Check `requests'.
;; Check REQUESTS for validity.
(dolist (request requests)
(when (and (symbolp request) (not (featurep request)))
(message "Unknown requested feature: %s" request)
(setq requests (delq request requests))))
;; Is there anything customized about this variable?
(when (or (and spec (eq (car spec) 'user))
comment
(and (null spec) (get symbol 'saved-value)))
;; Output an element for this variable.
;; It has the form (SYMBOL VALUE-FORM NOW REQUESTS COMMENT).
;; SYMBOL is the variable name.
;; VALUE-FORM is an expression to return the customized value.
;; NOW if non-nil means always set the variable immediately
;; when the customizations are reloaded. This is used
;; for rogue variables
;; REQUESTS is a list of packages to load before setting the
;; variable. Each element of it will be passed to `require'.
;; COMMENT is whatever comment the user has specified
;; with the customize facility.
(unless (bolp)
(princ "\n"))
(princ " '(")
@ -4383,14 +4402,15 @@ This function does not save the buffer."
"Ignoring WIDGET, create a menu entry for customization group SYMBOL."
`( ,(custom-unlispify-menu-entry symbol t)
:filter (lambda (&rest junk)
(let ((menu (custom-menu-create ',symbol)))
(let* ((menu (custom-menu-create ',symbol)))
(if (consp menu) (cdr menu) menu)))))
;;;###autoload
(defun custom-menu-create (symbol)
"Create menu for customization group SYMBOL.
The menu is in a format applicable to `easy-menu-define'."
(let* ((item (vector (custom-unlispify-menu-entry symbol)
(let* ((deactivate-mark nil)
(item (vector (custom-unlispify-menu-entry symbol)
`(customize-group ',symbol)
t)))
(if (and (or (not (boundp 'custom-menu-nesting))
@ -4435,8 +4455,8 @@ The format is suitable for use with `easy-menu-define'."
;; Actually, this misfeature of dense keymaps was fixed on 2001-11-26.
(let ((map (make-keymap)))
(set-keymap-parent map widget-keymap)
(define-key map [remap self-insert-command] 'custom-no-edit)
(define-key map "\^m" 'custom-newline)
(define-key map [remap self-insert-command] 'Custom-no-edit)
(define-key map "\^m" 'Custom-newline)
(define-key map " " 'scroll-up)
(define-key map "\177" 'scroll-down)
(define-key map "\C-c\C-c" 'Custom-set)
@ -4448,12 +4468,12 @@ The format is suitable for use with `easy-menu-define'."
map)
"Keymap for `custom-mode'.")
(defun custom-no-edit (pos &optional event)
(defun Custom-no-edit (pos &optional event)
"Invoke button at POS, or refuse to allow editing of Custom buffer."
(interactive "@d")
(error "You can't edit this part of the Custom buffer"))
(defun custom-newline (pos &optional event)
(defun Custom-newline (pos &optional event)
"Invoke button at POS, or refuse to allow editing of Custom buffer."
(interactive "@d")
(let ((button (get-char-property pos 'button)))
@ -4535,6 +4555,13 @@ if that value is non-nil."
(setq widget-documentation-face 'custom-documentation)
(make-local-variable 'widget-button-face)
(setq widget-button-face custom-button)
;; We need this because of the "More" button on docstrings.
;; Otherwise clicking on "More" can push point offscreen, which
;; causes the window to recenter on point, which pushes the
;; newly-revealed docstring offscreen; which is annoying. -- cyd.
(set (make-local-variable 'widget-button-click-moves-point) t)
(set (make-local-variable 'widget-button-pressed-face) custom-button-pressed)
(set (make-local-variable 'widget-mouse-face) custom-button-mouse)

View file

@ -344,11 +344,11 @@ since it could result in memory overflow and make Emacs crash."
(scroll-step windows integer)
(scroll-conservatively windows integer)
(scroll-margin windows integer)
(hscroll-margin windows integer "21.3")
(hscroll-step windows number "21.3")
(hscroll-margin windows integer "22.1")
(hscroll-step windows number "22.1")
(truncate-partial-width-windows display boolean)
(mode-line-inverse-video modeline boolean)
(mode-line-in-non-selected-windows modeline boolean "21.3")
(mode-line-in-non-selected-windows modeline boolean "22.1")
(line-number-display-limit display
(choice integer
(const :tag "No limit" nil)))
@ -361,17 +361,22 @@ since it could result in memory overflow and make Emacs crash."
(unibyte-display-via-language-environment mule boolean)
(blink-cursor-alist cursor alist "22.1")
(overline-margin display integer "22.1")
(mouse-autoselect-window
display (choice
(const :tag "Off (nil)" :value nil)
(const :tag "Immediate" :value t)
(number :tag "Delay by secs" :value 0.5)) "22.1")
;; xfaces.c
(scalable-fonts-allowed display boolean)
;; xfns.c
(x-bitmap-file-path installation
(repeat (directory :format "%v")))
(x-use-old-gtk-file-dialog menu boolean "22.1")
(x-gtk-use-old-file-dialog menu boolean "22.1")
(x-gtk-show-hidden-files menu boolean "22.1")
(x-gtk-file-dialog-help-text menu boolean "22.1")
(x-gtk-whole-detached-tool-bar x boolean "22.1")
;; xterm.c
(mouse-autoselect-window display boolean "21.3")
(x-use-underline-position-properties display boolean "21.3")
(x-use-underline-position-properties display boolean "22.1")
(x-underline-at-descent-line display boolean "22.1")
(x-stretch-cursor display boolean "21.1")))
this symbol group type standard version native-p

View file

@ -210,11 +210,11 @@ The following keywords are meaningful:
`custom-initialize-reset'.
:set VALUE should be a function to set the value of the symbol.
It takes two arguments, the symbol to set and the value to
give it. The default choice of function is `custom-set-default'.
give it. The default choice of function is `set-default'.
:get VALUE should be a function to extract the value of symbol.
The function takes one argument, a symbol, and should return
the current value for that symbol. The default choice of function
is `custom-default-value'.
is `default-value'.
:require
VALUE should be a feature symbol. If you save a value
for this option, then when your `.emacs' file loads the value,
@ -874,6 +874,18 @@ COMMENT is a comment string about SYMBOL.
EXP itself is saved unevaluated as SYMBOL property `saved-value' and
in SYMBOL's list property `theme-value' \(using `custom-push-theme')."
(custom-check-theme theme)
;; Process all the needed autoloads before anything else, so that the
;; subsequent code has all the info it needs (e.g. which var corresponds
;; to a minor mode), regardless of the ordering of the variables.
(dolist (entry args)
(let* ((symbol (indirect-variable (nth 0 entry))))
(unless (or (get symbol 'standard-value)
(memq (get symbol 'custom-autoload) '(nil noset)))
;; This symbol needs to be autoloaded, even just for a `set'.
(custom-load-symbol symbol))))
;; Move minor modes and variables with explicit requires to the end.
(setq args
(sort args
(lambda (a1 a2)
@ -904,10 +916,6 @@ in SYMBOL's list property `theme-value' \(using `custom-push-theme')."
(when requests
(put symbol 'custom-requests requests)
(mapc 'require requests))
(unless (or (get symbol 'standard-value)
(memq (get symbol 'custom-autoload) '(nil noset)))
;; This symbol needs to be autoloaded, even just for a `set'.
(custom-load-symbol symbol))
(setq set (or (get symbol 'custom-set) 'custom-set-default))
(put symbol 'saved-value (list value))
(put symbol 'saved-variable-comment comment)

View file

@ -5,10 +5,10 @@
;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Time-stamp: <2006-02-06 13:37:10 ttn>
;; Time-stamp: <2006/09/15 17:35:06 vinicius>
;; Version: 2.1
;; Keywords: internal
;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/
;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
;; This file is part of GNU Emacs.

View file

@ -862,8 +862,10 @@ It returns t if a desktop file was loaded, nil otherwise."
;; Desktop file found, process it.
(let ((desktop-first-buffer nil)
(desktop-buffer-ok-count 0)
(desktop-buffer-fail-count 0))
(setq desktop-lazy-timer nil)
(desktop-buffer-fail-count 0)
;; Avoid desktop saving during evaluation of desktop buffer.
(desktop-save nil))
(desktop-lazy-abort)
;; Evaluate desktop buffer.
(load (desktop-full-file-name) t t t)
;; `desktop-create-buffer' puts buffers at end of the buffer list.

View file

@ -1259,6 +1259,7 @@ SWITCHED is non-nil if the patch is already applied."
(t "Hunk %s at offset %d lines"))
msg line-offset)))
(defvar diff-apply-hunk-to-backup-file nil)
(defun diff-apply-hunk (&optional reverse)
"Apply the current hunk to the source file and go to the next.
@ -1275,6 +1276,17 @@ With a prefix argument, REVERSE the hunk."
(cond
((null line-offset)
(error "Can't find the text to patch"))
((with-current-buffer buf
(and buffer-file-name
(backup-file-name-p buffer-file-name)
(not diff-apply-hunk-to-backup-file)
(not (set (make-local-variable 'diff-apply-hunk-to-backup-file)
(yes-or-no-p (format "Really apply this hunk to %s? "
(file-name-nondirectory
buffer-file-name)))))))
(error (substitute-command-keys
(format "Use %s\\[diff-apply-hunk] to apply it to the other file"
(if (not reverse) "\\[universal-argument] ")))))
((and switched
;; A reversed patch was detected, perhaps apply it in reverse.
(not (save-window-excursion

View file

@ -39,6 +39,11 @@
;; We need macros in dired.el to compile properly.
(eval-when-compile (require 'dired))
(defvar dired-create-files-failures nil
"Variable where `dired-create-files' records failing file names.
Functions that operate recursively can store additional names
into this list; they also should call `dired-log' to log the errors.")
;;; 15K
;;;###begin dired-cmd.el
;; Diffing and compressing
@ -1145,37 +1150,59 @@ Special value `always' suppresses confirmation."
;;;###autoload
(defun dired-copy-file (from to ok-flag)
(dired-handle-overwrite to)
(condition-case ()
(dired-copy-file-recursive from to ok-flag dired-copy-preserve-time t
dired-recursive-copies)
(file-date-error (message "Can't set date")
(sit-for 1))))
dired-recursive-copies))
(defun dired-copy-file-recursive (from to ok-flag &optional
preserve-time top recursive)
(let ((attrs (file-attributes from)))
(let ((attrs (file-attributes from))
dirfailed)
(if (and recursive
(eq t (car attrs))
(or (eq recursive 'always)
(yes-or-no-p (format "Recursive copies of %s? " from))))
;; This is a directory.
(let ((files (directory-files from nil dired-re-no-dot)))
(let ((files
(condition-case err
(directory-files from nil dired-re-no-dot)
(file-error
(push (dired-make-relative from)
dired-create-files-failures)
(dired-log "Copying error for %s:\n%s\n" from err)
(setq dirfailed t)
nil))))
(if (eq recursive 'top) (setq recursive 'always)) ; Don't ask any more.
(unless dirfailed
(if (file-exists-p to)
(or top (dired-handle-overwrite to))
(make-directory to))
(condition-case err
(make-directory to)
(file-error
(push (dired-make-relative from)
dired-create-files-failures)
(setq files nil)
(dired-log "Copying error for %s:\n%s\n" from err)))))
(while files
(dired-copy-file-recursive
(expand-file-name (car files) from)
(expand-file-name (car files) to)
ok-flag preserve-time nil recursive)
(setq files (cdr files))))
(pop files)))
;; Not a directory.
(or top (dired-handle-overwrite to))
(condition-case err
(if (stringp (car attrs))
;; It is a symlink
(make-symbolic-link (car attrs) to ok-flag)
(copy-file from to ok-flag dired-copy-preserve-time)))))
(copy-file from to ok-flag dired-copy-preserve-time))
(file-date-error
(push (dired-make-relative from)
dired-create-files-failures)
(dired-log "Can't set date on %s:\n%s\n" from err))
(file-error
(push (dired-make-relative from)
dired-create-files-failures)
(dired-log "Copying error for %s:\n%s\n" from err))))))
;;;###autoload
(defun dired-rename-file (file newname ok-if-already-exists)
@ -1297,7 +1324,8 @@ Special value `always' suppresses confirmation."
;; newfile's entry, or t to use the current marker character if the
;; oldfile was marked.
(let (failures skipped (success-count 0) (total (length fn-list)))
(let (dired-create-files-failures failures
skipped (success-count 0) (total (length fn-list)))
(let (to overwrite-query
overwrite-backup-query) ; for dired-handle-overwrite
(mapcar
@ -1340,16 +1368,25 @@ ESC or `q' to not overwrite any of the remaining files,
(dired-add-file to actual-marker-char))
(file-error ; FILE-CREATOR aborted
(progn
(setq failures (cons (dired-make-relative from) failures))
(push (dired-make-relative from)
failures)
(dired-log "%s `%s' to `%s' failed:\n%s\n"
operation from to err))))))))
fn-list))
(cond
(dired-create-files-failures
(setq failures (nconc failures dired-create-files-failures))
(dired-log-summary
(format "%s failed for %d file%s in %d requests"
operation (length failures)
(dired-plural-s (length failures))
total)
failures))
(failures
(dired-log-summary
(format "%s failed for %d of %d file%s"
operation (length failures) total
(dired-plural-s total))
operation (length failures)
total (dired-plural-s total))
failures))
(skipped
(dired-log-summary

View file

@ -967,7 +967,11 @@ dired."
"; " dired-guess-shell-gnutar " -C "
(file-name-sans-extension file) " -xvf")
(concat "mkdir " (file-name-sans-extension file)
"; tar -C " (file-name-sans-extension file) " -xvf")))
"; tar -C " (file-name-sans-extension file) " -xvf"))
;; List archive contents.
'(if dired-guess-shell-gnutar
(concat dired-guess-shell-gnutar " tvf")
"tar tvf"))
;; REGEXPS for compressed archives must come before the .Z rule to
;; be recognized:
@ -994,7 +998,11 @@ dired."
"; gunzip -qc * | tar -C "
(file-name-sans-extension file) " -xvf -"))
;; Optional decompression.
'(concat "gunzip" (if dired-guess-shell-gzip-quiet " -q" "")))
'(concat "gunzip" (if dired-guess-shell-gzip-quiet " -q" ""))
;; List archive contents.
'(if dired-guess-shell-gnutar
(concat dired-guess-shell-gnutar " ztvf")
(concat "gunzip -qc * | tar tvf -")))
;; bzip2'ed archives
(list "\\.t\\(ar\\.bz2\\|bz\\)$"
@ -1049,7 +1057,8 @@ dired."
'("\\.dvi$" "xdvi" "dvips") ; preview and printing
'("\\.au$" "play") ; play Sun audiofiles
'("\\.mpg$" "mpeg_play")
'("\\.mpe?g$\\|\\.avi$" "xine -p")
'("\\.wav$" "play")
'("\\.uu$" "uudecode") ; for uudecoded files
'("\\.hqx$" "mcvert")
'("\\.sh$" "sh") ; execute shell scripts
@ -1064,10 +1073,14 @@ dired."
'("\\.out$" "xgraph") ; for plotting purposes.
'("\\.tex$" "latex" "tex")
'("\\.texi\\(nfo\\)?$" "makeinfo" "texi2dvi")
'("\\.pdf$" "xpdf") ; edit PDF files
'("\\.pdf$" "xpdf")
'("\\.doc$" "antiword" "strings")
'("\\.rpm$" "rpm -qilp" "rpm -ivh")
'("\\.dia$" "dia")
'("\\.mgp$" "mgp")
;; Some other popular archivers.
(list "\\.zip$" "unzip"
(list "\\.zip$" "unzip" "unzip -l"
;; Extract files into a separate subdirectory
'(concat "unzip" (if dired-guess-shell-gzip-quiet " -q")
" -d " (file-name-sans-extension file)))
@ -1084,7 +1097,8 @@ dired."
;; Optional conversion to gzip format.
'(concat "znew" (if dired-guess-shell-gzip-quiet " -q")
" " dired-guess-shell-znew-switches))
)
'("\\.sign?$" "gpg --verify"))
"Default alist used for shell command guessing.
See `dired-guess-shell-alist-user'.")

View file

@ -2204,14 +2204,14 @@ instead of `dired-actual-switches'."
(concat "\\`" (match-string 1 default-directory)))))
(goto-char (point-min))
(setq dired-subdir-alist nil)
(while (and (re-search-forward dired-subdir-regexp nil t)
(while (re-search-forward dired-subdir-regexp nil t)
;; Avoid taking a file name ending in a colon
;; as a subdir name.
(not (save-excursion
(unless (save-excursion
(goto-char (match-beginning 0))
(beginning-of-line)
(forward-char 2)
(save-match-data (looking-at dired-re-perms)))))
(save-match-data (looking-at dired-re-perms)))
(save-excursion
(goto-char (match-beginning 1))
(setq new-dir-name
@ -2232,12 +2232,12 @@ instead of `dired-actual-switches'."
(save-excursion
(goto-char (match-beginning 0))
(beginning-of-line)
(point-marker))))
(point-marker)))))
(if (and (> count 1) (interactive-p))
(message "Buffer includes %d directories" count))
(message "Buffer includes %d directories" count)))
;; We don't need to sort it because it is in buffer order per
;; constructionem. Return new alist:
dired-subdir-alist)))
dired-subdir-alist))
(defun dired-alist-add-1 (dir new-marker)
;; Add new DIR at NEW-MARKER. Don't sort.
@ -3043,6 +3043,10 @@ Thus, use \\[backward-page] to find the beginning of a group of errors."
(insert "\f\n")))))))
(defun dired-log-summary (string failures)
"State a summary of a command's failures, in echo area and log buffer.
STRING is an overall summary of the failures.
FAILURES is a list of file names that we failed to operate on,
or nil if file names are not applicable."
(if (= (length failures) 1)
(message "%s"
(with-current-buffer dired-log-buffer

View file

@ -37,10 +37,10 @@
;;;###autoload
(defcustom dnd-protocol-alist
'(
("^file:///" . dnd-open-local-file) ; XDND format.
'(("^file:///" . dnd-open-local-file) ; XDND format.
("^file://" . dnd-open-file) ; URL with host
("^file:" . dnd-open-local-file) ; Old KDE, Motif, Sun
("^\\(https?\\|ftp\\|file\\|nfs\\)://" . dnd-open-file)
)
"The functions to call for different protocols when a drop is made.
@ -59,6 +59,22 @@ if some action was made, or nil if the URL is ignored."
:group 'dnd)
(defcustom dnd-open-remote-file-function
(if (eq system-type 'windows-nt)
'dnd-open-local-file
'dnd-open-remote-url)
"The function to call when opening a file on a remote machine.
The function will be called with two arguments; URI and ACTION. See
`dnd-open-file' for details.
If nil, then dragging remote files into Emacs will result in an error.
Predefined functions are `dnd-open-local-file' and `dnd-open-remote-url'.
`dnd-open-local-file' attempts to open a remote file using its UNC name and
is the default on MS-Windows. `dnd-open-remote-url' uses `url-handler-mode'
and is the default except for MS-Windows."
:version "22.1"
:type 'function
:group 'dnd)
(defcustom dnd-open-file-other-window nil
"If non-nil, always use find-file-other-window to open dropped files."
@ -75,7 +91,7 @@ The handler is first located by looking at `dnd-protocol-alist'.
If no match is found here, and the value of `browse-url-browser-function'
is a pair of (REGEXP . FUNCTION), those regexps are tried for a match.
If no match is found, just call `dnd-insert-text'.
WINDOW is where the drop happend, ACTION is the action for the drop,
WINDOW is where the drop happened, ACTION is the action for the drop,
URL is what has been dropped.
Returns ACTION."
(require 'browse-url)
@ -147,7 +163,11 @@ Return nil if URI is not a local file."
The file is opened in the current window, or a new window if
`dnd-open-file-other-window' is set. URI is the url for the file,
and must have the format file:file-name or file:///file-name.
The last / in file:/// is part of the file name. ACTION is ignored."
The last / in file:/// is part of the file name. If the system
natively supports unc file names, then remote urls of the form
file://server-name/file-name will also be handled by this function.
An alternative for systems that do not support unc file names is
`dnd-open-remote-url'. ACTION is ignored."
(let* ((f (dnd-get-local-file-name uri t)))
(if (and f (file-readable-p f))
@ -158,6 +178,20 @@ The last / in file:/// is part of the file name. ACTION is ignored."
'private)
(error "Can not read %s" uri))))
(defun dnd-open-remote-url (uri action)
"Open a remote file with `find-file' and `url-handler-mode'.
Turns `url-handler-mode' on if not on before. The file is opened in the
current window, or a new window if `dnd-open-file-other-window' is set.
URI is the url for the file. ACTION is ignored."
(progn
(require 'url-handlers)
(or url-handler-mode (url-handler-mode))
(if dnd-open-file-other-window
(find-file-other-window uri)
(find-file uri))
'private))
(defun dnd-open-file (uri action)
"Open a local or remote file.
The file is opened in the current window, or a new window if
@ -169,7 +203,9 @@ The last / in file://hostname/ is part of the file name."
;; file. Otherwise return nil.
(let ((local-file (dnd-get-local-file-uri uri)))
(if local-file (dnd-open-local-file local-file action)
(error "Remote files not supported"))))
(if dnd-open-remote-file-function
(funcall dnd-open-remote-file-function uri action)
(error "Remote files not supported")))))
(defun dnd-insert-text (window action text)

View file

@ -4281,6 +4281,11 @@ Mail anyway? (y or n) ")
(setq lis1 (cdr lis1)))
(cdr result)))
(defun ediff-add-to-history (history-var newelt)
(if (fboundp 'add-to-history)
(add-to-history history-var newelt)
(set history-var (cons newelt (symbol-value history-var)))))
(if (fboundp 'copy-sequence)
(defalias 'ediff-copy-list 'copy-sequence)
(defun ediff-copy-list (list)

View file

@ -7,8 +7,8 @@
;; Created: February 2, 1994
;; Keywords: comparing, merging, patching, tools, unix
(defconst ediff-version "2.81" "The current version of Ediff")
(defconst ediff-date "February 18, 2006" "Date of last update")
(defconst ediff-version "2.81.1" "The current version of Ediff")
(defconst ediff-date "September 18, 2006" "Date of last update")
;; This file is part of GNU Emacs.
@ -210,7 +210,8 @@
ediff-last-dir-B
(file-name-directory f)))
(progn
(add-to-history 'file-name-history
(ediff-add-to-history
'file-name-history
(ediff-abbreviate-file-name
(expand-file-name
(file-name-nondirectory f)
@ -245,7 +246,8 @@
ediff-last-dir-B
(file-name-directory f)))
(progn
(add-to-history 'file-name-history
(ediff-add-to-history
'file-name-history
(ediff-abbreviate-file-name
(expand-file-name
(file-name-nondirectory f)
@ -256,7 +258,8 @@
ediff-last-dir-C
(file-name-directory ff)))
(progn
(add-to-history 'file-name-history
(ediff-add-to-history
'file-name-history
(ediff-abbreviate-file-name
(expand-file-name
(file-name-nondirectory ff)
@ -1103,7 +1106,8 @@ lines. For small regions, use `ediff-regions-wordwise'."
ediff-last-dir-B
(file-name-directory f)))
(progn
(add-to-history 'file-name-history
(ediff-add-to-history
'file-name-history
(ediff-abbreviate-file-name
(expand-file-name
(file-name-nondirectory f)
@ -1146,7 +1150,8 @@ lines. For small regions, use `ediff-regions-wordwise'."
ediff-last-dir-B
(file-name-directory f)))
(progn
(add-to-history 'file-name-history
(ediff-add-to-history
'file-name-history
(ediff-abbreviate-file-name
(expand-file-name
(file-name-nondirectory f)
@ -1158,7 +1163,8 @@ lines. For small regions, use `ediff-regions-wordwise'."
ediff-last-dir-ancestor
(file-name-directory ff)))
(progn
(add-to-history 'file-name-history
(ediff-add-to-history
'file-name-history
(ediff-abbreviate-file-name
(expand-file-name
(file-name-nondirectory ff)

View file

@ -2409,7 +2409,7 @@ If such an advice was found it will be removed from the list of advices
in that CLASS."
(interactive (ad-read-advice-specification "Remove advice of"))
(if (ad-is-advised function)
(let* ((advice-to-remove (ad-find-advice function class name)))
(let ((advice-to-remove (ad-find-advice function class name)))
(if advice-to-remove
(ad-set-advice-info-field
function class
@ -2747,7 +2747,7 @@ For that it has to be fbound with a non-autoload definition."
A three-element list is returned, where the 1st element is the list of
required arguments, the 2nd is the list of optional arguments, and the 3rd
is the name of an optional rest parameter (or nil)."
(let* (required optional rest)
(let (required optional rest)
(setq rest (car (cdr (memq '&rest arglist))))
(if rest (setq arglist (reverse (cdr (memq '&rest (reverse arglist))))))
(setq optional (cdr (memq '&optional arglist)))
@ -2958,7 +2958,7 @@ Example: `(ad-map-arglists '(a &rest args) '(w x y z))' will return
(defun ad-make-mapped-call (source-arglist target-arglist target-function)
"Make form to call TARGET-FUNCTION with args from SOURCE-ARGLIST."
(let* ((mapped-form (ad-map-arglists source-arglist target-arglist)))
(let ((mapped-form (ad-map-arglists source-arglist target-arglist)))
(if (eq (car mapped-form) 'funcall)
(cons target-function (cdr (cdr mapped-form)))
(prog1 mapped-form

View file

@ -66,13 +66,13 @@
;;
;; The corresponding Lisp bindat specification looks like this:
;;
;; (setq header-spec
;; (setq header-bindat-spec
;; '((dest-ip ip)
;; (src-ip ip)
;; (dest-port u16)
;; (src-port u16)))
;;
;; (setq data-spec
;; (setq data-bindat-spec
;; '((type u8)
;; (opcode u8)
;; (length u16r) ;; little endian order
@ -80,12 +80,12 @@
;; (data vec (length))
;; (align 4)))
;;
;; (setq packet-spec
;; '((header struct header-spec)
;; (setq packet-bindat-spec
;; '((header struct header-bindat-spec)
;; (items u8)
;; (fill 3)
;; (item repeat (items)
;; (struct data-spec))))
;; (struct data-bindat-spec))))
;;
;;
;; A binary data representation may look like
@ -121,6 +121,9 @@
;; Binary Data Structure Specification Format
;; ------------------------------------------
;; We recommend using names that end in `-bindat-spec'; such names
;; are recognized automatically as "risky" variables.
;; The data specification is formatted as follows:
;; SPEC ::= ( ITEM... )
@ -342,8 +345,8 @@
(defun bindat-unpack (spec bindat-raw &optional bindat-idx)
"Return structured data according to SPEC for binary data in BINDAT-RAW.
BINDAT-RAW is a unibyte string or vector. Optional third arg BINDAT-IDX specifies
the starting offset in BINDAT-RAW."
BINDAT-RAW is a unibyte string or vector.
Optional third arg BINDAT-IDX specifies the starting offset in BINDAT-RAW."
(when (multibyte-string-p bindat-raw)
(error "String is multibyte"))
(unless bindat-idx (setq bindat-idx 0))

View file

@ -2261,7 +2261,8 @@ Code:, and others referenced in the style guide."
(re-search-forward "^;;; Code" nil t)
(re-search-forward "^(require" nil t)
(re-search-forward "^(" nil t))
(beginning-of-line)))
(beginning-of-line))
(t (re-search-forward ";;; .* --- .*\n")))
(if (checkdoc-y-or-n-p
"You should have a \";;; Commentary:\", add one? ")
(insert "\n;;; Commentary:\n;; \n\n")

View file

@ -2578,21 +2578,7 @@ surrounded by (block NAME ...).
(cl-const-expr-val (nth 1 keys)))))
(cond ((eq test 'eq) (list 'memq a list))
((eq test 'equal) (list 'member a list))
((or (null keys) (eq test 'eql))
(if (eq (cl-const-expr-p a) t)
(list (if (floatp-safe (cl-const-expr-val a)) 'member 'memq)
a list)
(if (eq (cl-const-expr-p list) t)
(let ((p (cl-const-expr-val list)) (mb nil) (mq nil))
(if (not (cdr p))
(and p (list 'eql a (list 'quote (car p))))
(while p
(if (floatp-safe (car p)) (setq mb t)
(or (integerp (car p)) (symbolp (car p)) (setq mq t)))
(setq p (cdr p)))
(if (not mb) (list 'memq a list)
(if (not mq) (list 'member a list) form))))
form)))
((or (null keys) (eq test 'eql)) (list 'memql a list))
(t form))))
(define-compiler-macro assoc* (&whole form a list &rest keys)

View file

@ -155,7 +155,11 @@ Like (push X PLACE), except that the list is unmodified if X is `eql' to
an element already on the list.
\nKeywords supported: :test :test-not :key
\n(fn X PLACE [KEYWORD VALUE]...)"
(if (symbolp place) (list 'setq place (list* 'adjoin x place keys))
(if (symbolp place)
(if (null keys)
`(let ((x ,x))
(if (memql x ,place) ,place (setq ,place (cons x ,place))))
(list 'setq place (list* 'adjoin x place keys)))
(list* 'callf2 'adjoin x place keys)))
(defun cl-set-elt (seq n val)

View file

@ -200,7 +200,8 @@ Use the command `%s' to change this variable." pretty-name mode))
See the command `%s' for a description of this minor-mode."
(if body "
Setting this variable directly does not take effect;
use either \\[customize] or the function `%s'."))))
either customize it (see the info node `Easy Customization')
or call the function `%s'."))))
`(defcustom ,mode ,init-value
,(format base-doc-string pretty-name mode mode)
,@set

View file

@ -432,7 +432,7 @@ Emacs Lisp mode) that support Eldoc.")
;; Prime the command list.
(eldoc-add-command-completions
"backward-" "beginning-of-" "move-beginning-of-" "delete-other-windows"
"delete-window"
"delete-window" "handle-select-window"
"end-of-" "move-end-of-" "exchange-point-and-mark" "forward-"
"indent-for-tab-command" "goto-" "mark-page" "mark-paragraph"
"mouse-set-point" "move-" "pop-global-mark" "next-" "other-window"

View file

@ -64,7 +64,7 @@
(concat
"^\\s-*(\\(def\\(ine-skeleton\\|ine-generic-mode\\|ine-derived-mode\\|\
ine\\(?:-global\\)?-minor-mode\\|ine-compilation-mode\\|un-cvs-mode\\|\
foo\\|[^cfgv]\\(\\w\\|\\s_\\)+\\*?\\)\\|easy-mmode-define-[a-z-]+\\|easy-menu-define\\|\
foo\\|[^icfgv]\\(\\w\\|\\s_\\)+\\*?\\)\\|easy-mmode-define-[a-z-]+\\|easy-menu-define\\|\
menu-bar-make-toggle\\)"
find-function-space-re
"\\('\\|\(quote \\)?%s\\(\\s-\\|$\\|\(\\|\)\\)")

View file

@ -32,9 +32,11 @@
;; Layout of a timer vector:
;; [triggered-p high-seconds low-seconds usecs repeat-delay
;; function args idle-delay]
;; triggered-p is nil if the timer is active (waiting to be triggered),
;; t if it is inactive ("already triggered", in theory)
(defun timer-create ()
"Create a timer object."
"Create a timer object which can be passed to `timer-activate'."
(let ((timer (make-vector 8 nil)))
(aset timer 0 t)
timer))
@ -173,6 +175,10 @@ fire repeatedly that many seconds apart."
(defun timer-activate (timer &optional triggered-p reuse-cell)
"Put TIMER on the list of active timers.
If TRIGGERED-P is t, that means to make the timer inactive
\(put it on the list, but mark it as already triggered).
To remove from the list, use `cancel-timer'.
REUSE-CELL, if non-nil, is a cons cell to reuse instead
of allocating a new one."
(if (and (timerp timer)
@ -256,10 +262,10 @@ of allocating a new one."
(setq timer-idle-list (delq timer timer-idle-list))
nil)
;; Remove TIMER from the list of active timers or idle timers.
;; Only to be used in this file. It returns the cons cell
;; that was removed from the list.
(defun cancel-timer-internal (timer)
"Remove TIMER from the list of active timers or idle timers.
Only to be used in this file. It returns the cons cell
that was removed from the timer list."
(let ((cell1 (memq timer timer-list))
(cell2 (memq timer timer-idle-list)))
(if cell1
@ -270,7 +276,9 @@ of allocating a new one."
;;;###autoload
(defun cancel-function-timers (function)
"Cancel all timers scheduled by `run-at-time' which would run FUNCTION."
"Cancel all timers which would run FUNCTION.
This affects ordinary timers such as are scheduled by `run-at-time',
and idle timers such as are scheduled by `run-with-idle-timer'."
(interactive "aCancel timers of function: ")
(let ((tail timer-list))
(while tail
@ -284,12 +292,19 @@ of allocating a new one."
(setq tail (cdr tail)))))
;; Record the last few events, for debugging.
(defvar timer-event-last-2 nil)
(defvar timer-event-last-1 nil)
(defvar timer-event-last nil)
(defvar timer-event-last nil
"Last timer that was run.")
(defvar timer-event-last-1 nil
"Next-to-last timer that was run.")
(defvar timer-event-last-2 nil
"Third-to-last timer that was run.")
(defvar timer-max-repeats 10
"*Maximum number of times to repeat a timer, if real time jumps.")
"*Maximum number of times to repeat a timer, if many repeats are delayed.
Timer invocations can be delayed because Emacs is suspended or busy,
or because the system's time changes. If such an occurrence makes it
appear that many invocations are overdue, this variable controls
how many will really happen.")
(defun timer-until (timer time)
"Calculate number of seconds from when TIMER will run, until TIME.
@ -440,6 +455,7 @@ This function returns a timer object which you can use in `cancel-timer'."
timer))
(defun with-timeout-handler (tag)
"This is the timer function used for the timer made by `with-timeout'."
(throw tag 'timeout))
;;;###autoload (put 'with-timeout 'lisp-indent-function 1)

View file

@ -265,11 +265,14 @@ display oriented stuff, use `trace-function-background' instead."
;;;###autoload
(defun trace-function-background (function &optional buffer)
"Traces FUNCTION with trace output going quietly to BUFFER.
For every call of FUNCTION Lisp-style trace messages that display argument
and return values will be inserted into BUFFER. This function generates the
trace advice for FUNCTION and activates it together with any other advice
there might be!! Trace output will quietly go to BUFFER without changing
the window or buffer configuration at all."
When this tracing is enabled, every call to FUNCTION writes
a Lisp-style trace message (showing the arguments and return value)
into BUFFER. This function generates advice to trace FUNCTION
and activates it together with any other advice there might be.
The trace output goes to BUFFER quietly, without changing
the window or buffer configuration.
BUFFER defaults to `trace-buffer'."
(interactive
(list
(intern

View file

@ -1097,48 +1097,20 @@ If ARG is the atom `-', scroll upward by nearly full screen."
;;; Pre-command hook
(defun cua--pre-command-handler-1 ()
(let ((movement (eq (get this-command 'CUA) 'move)))
;; Cancel prefix key timeout if user enters another key.
(when cua--prefix-override-timer
(if (timerp cua--prefix-override-timer)
(cancel-timer cua--prefix-override-timer))
(setq cua--prefix-override-timer nil))
;; Handle shifted cursor keys and other movement commands.
;; If region is not active, region is activated if key is shifted.
;; If region is active, region is cancelled if key is unshifted (and region not started with C-SPC).
;; If rectangle is active, expand rectangle in specified direction and ignore the movement.
(if movement
(cond
((if window-system
(memq 'shift (event-modifiers
(aref (this-single-command-raw-keys) 0)))
(or
(memq 'shift (event-modifiers
(aref (this-single-command-keys) 0)))
;; See if raw escape sequence maps to a shifted event, e.g. S-up or C-S-home.
(and (boundp 'local-function-key-map)
local-function-key-map
(let ((ev (lookup-key local-function-key-map
(this-single-command-raw-keys))))
(and (vector ev)
(symbolp (setq ev (aref ev 0)))
(string-match "S-" (symbol-name ev)))))))
(unless mark-active
(push-mark-command nil t))
(setq cua--last-region-shifted t)
(setq cua--explicit-region-start nil))
((or cua--explicit-region-start cua--rectangle)
(unless mark-active
(push-mark-command nil nil)))
(t
;; If we set mark-active to nil here, the region highlight will not be
;; removed by the direct_output_ commands.
(setq deactivate-mark t)))
;; Only symbol commands can have necessary properties
((not (symbolp this-command))
nil)
;; Handle delete-selection property on other commands
(if (and mark-active (not deactivate-mark))
;; Handle delete-selection property on non-movement commands
((not (eq (get this-command 'CUA) 'move))
(when (and mark-active (not deactivate-mark))
(let* ((ds (or (get this-command 'delete-selection)
(get this-command 'pending-delete)))
(nc (cond
@ -1161,9 +1133,43 @@ If ARG is the atom `-', scroll upward by nearly full screen."
(setq this-original-command this-command
this-command nc)))))
;; Handle shifted cursor keys and other movement commands.
;; If region is not active, region is activated if key is shifted.
;; If region is active, region is cancelled if key is unshifted (and region not started with C-SPC).
;; If rectangle is active, expand rectangle in specified direction and ignore the movement.
((if window-system
(memq 'shift (event-modifiers
(aref (this-single-command-raw-keys) 0)))
(or
(memq 'shift (event-modifiers
(aref (this-single-command-keys) 0)))
;; See if raw escape sequence maps to a shifted event, e.g. S-up or C-S-home.
(and (boundp 'local-function-key-map)
local-function-key-map
(let ((ev (lookup-key local-function-key-map
(this-single-command-raw-keys))))
(and (vector ev)
(symbolp (setq ev (aref ev 0)))
(string-match "S-" (symbol-name ev)))))))
(unless mark-active
(push-mark-command nil t))
(setq cua--last-region-shifted t)
(setq cua--explicit-region-start nil))
;; Set mark if user explicitly said to do so
((or cua--explicit-region-start cua--rectangle)
(unless mark-active
(push-mark-command nil nil)))
;; Else clear mark after this command.
(t
;; If we set mark-active to nil here, the region highlight will not be
;; removed by the direct_output_ commands.
(setq deactivate-mark t)))
;; Detect extension of rectangles by mouse or other movement
(setq cua--buffer-and-point-before-command
(if cua--rectangle (cons (current-buffer) (point))))))
(if cua--rectangle (cons (current-buffer) (point)))))
(defun cua--pre-command-handler ()
(when cua-mode

View file

@ -892,12 +892,17 @@ Vi's prefix argument will be used. Otherwise, the prefix argument passed to
(t
;;(setq ch (read-char-exclusive))
(setq ch (aref (read-key-sequence nil) 0))
(if viper-xemacs-p
(setq ch (event-to-character ch)))
;; replace ^M with the newline
(if (eq ch ?\C-m) (setq ch ?\n))
;; Make sure ^V and ^Q work as quotation chars
(if (memq ch '(?\C-v ?\C-q))
(progn
;;(setq ch (read-char-exclusive))
(setq ch (aref (read-key-sequence nil) 0))
(if viper-xemacs-p
(setq ch (event-to-character ch))))
)
(insert ch))
)
@ -1750,7 +1755,7 @@ invokes the command before that, etc."
;; Hook used in viper-undo
(defun viper-after-change-undo-hook (beg end len)
(if undo-in-progress
(if (and (boundp 'undo-in-progress) undo-in-progress)
(setq undo-beg-posn beg
undo-end-posn (or end beg))
;; some other hooks may be changing various text properties in
@ -3093,7 +3098,7 @@ If point is on a widget or a button, simulate clicking on that widget/button."
(and (consp widget)
(get (widget-type widget) 'widget-type))))
(widget-button-press (point))
(if (button-at (point))
(if (and (fboundp 'button-at) (fboundp 'push-button) (button-at (point)))
(push-button)
;; not a widget or a button
(viper-leave-region-active)

View file

@ -9,7 +9,7 @@
;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
;; Keywords: emulations
(defconst viper-version "3.12 of February 18, 2006"
(defconst viper-version "3.13 of September 18, 2006"
"The current version of Viper")
;; This file is part of GNU Emacs.

View file

@ -27,7 +27,7 @@
;;
;; A few routines for placing an image over text that will work for any
;; Emacs implementation without error. When images are not supported, then
;; they are justnot displayed.
;; they are just not displayed.
;;
;; The idea is that gui buffers (trees, buttons, etc) will have text
;; representations of the GUI elements. These routines will replace the text

View file

@ -2089,7 +2089,7 @@ terminal type to a different value."
(defgroup mode-line-faces nil
"Faces used in the mode line."
:group 'modeline
:group 'mode-line
:group 'faces
:version "22.1")

View file

@ -954,7 +954,7 @@ If t, `ffap-tex-init' will initialize this when needed.")
(substring name 2))))
(defvar ffap-rfc-path
(concat (ffap-host-to-filename "ds.internic.net") "/rfc/rfc%s.txt"))
(concat (ffap-host-to-filename "ftp.rfc-editor.org") "/in-notes/rfc%s.txt"))
(defun ffap-rfc (name)
(format ffap-rfc-path

View file

@ -266,6 +266,7 @@ Defaults to nil on DOS and Windows, and t on other systems."
;; Functions to add files to the cache
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;###autoload
(defun file-cache-add-directory (directory &optional regexp)
"Add DIRECTORY to the file cache.
If the optional REGEXP argument is non-nil, only files which match it will
@ -291,6 +292,7 @@ be added to the cache."
dir-files)
(file-cache-add-file-list dir-files))))
;;;###autoload
(defun file-cache-add-directory-list (directory-list &optional regexp)
"Add DIRECTORY-LIST (a list of directory names) to the file cache.
If the optional REGEXP argument is non-nil, only files which match it
@ -307,6 +309,8 @@ in each directory, not to the directory list itself."
(mapcar 'file-cache-add-file file-list))
;; Workhorse function
;;;###autoload
(defun file-cache-add-file (file)
"Add FILE to the file cache."
(interactive "fAdd File: ")
@ -333,6 +337,7 @@ in each directory, not to the directory list itself."
file-cache-alist)))
)))
;;;###autoload
(defun file-cache-add-directory-using-find (directory)
"Use the `find' command to add files to the file cache.
Find is run in DIRECTORY."
@ -355,6 +360,7 @@ Find is run in DIRECTORY."
"-print")
(file-cache-add-from-file-cache-buffer)))
;;;###autoload
(defun file-cache-add-directory-using-locate (string)
"Use the `locate' command to add files to the file cache.
STRING is passed as an argument to the locate command."
@ -366,6 +372,7 @@ STRING is passed as an argument to the locate command."
string)
(file-cache-add-from-file-cache-buffer))
;;;###autoload
(defun file-cache-add-directory-recursively (dir &optional regexp)
"Adds DIR and any subdirectories to the file-cache.
This function does not use any external programs

View file

@ -514,6 +514,9 @@ using \\[toggle-read-only]."
:type 'boolean
:group 'view)
(defvar file-name-history nil
"History list of file names entered in the minibuffer.")
(put 'ange-ftp-completion-hook-function 'safe-magic t)
(defun ange-ftp-completion-hook-function (op &rest args)
"Provides support for ange-ftp host name completion.
@ -1117,13 +1120,15 @@ expand wildcards (if any) and visit multiple files."
(mapcar 'switch-to-buffer (cdr value))))
(switch-to-buffer-other-frame value))))
(defun find-file-existing (filename &optional wildcards)
(defun find-file-existing (filename)
"Edit the existing file FILENAME.
Like \\[find-file] but only allow a file that exists."
(interactive (find-file-read-args "Find existing file: " t))
(unless (file-exists-p filename) (error "%s does not exist" filename))
(find-file filename wildcards)
(current-buffer))
Like \\[find-file] but only allow a file that exists, and do not allow
file names with wildcards."
(interactive (nbutlast (find-file-read-args "Find existing file: " t)))
(if (and (not (interactive-p)) (not (file-exists-p filename)))
(error "%s does not exist" filename)
(find-file filename)
(current-buffer)))
(defun find-file-read-only (filename &optional wildcards)
"Edit file FILENAME but don't allow changes.
@ -1310,7 +1315,7 @@ removes automounter prefixes (see the variable `automount-dir-prefix')."
(setq abbreviated-home-dir
(let ((abbreviated-home-dir "$foo"))
(concat "^" (abbreviate-file-name (expand-file-name "~"))
"\\(/\\|$\\)"))))
"\\(/\\|\\'\\)"))))
;; If FILENAME starts with the abbreviated homedir,
;; make it start with `~' instead.
@ -1365,7 +1370,7 @@ If there is no such live buffer, return nil."
(number (nthcdr 10 attributes))
(list (buffer-list)) found)
(and buffer-file-numbers-unique
number
(car-safe number) ;Make sure the inode is not just nil.
(while (and (not found) list)
(with-current-buffer (car list)
(if (and buffer-file-name
@ -1904,7 +1909,7 @@ in that case, this function acts as if `enable-local-variables' were t."
("\\.[sS]\\'" . asm-mode)
("\\.asm\\'" . asm-mode)
("[cC]hange\\.?[lL]og?\\'" . change-log-mode)
("[cC]hange[lL]og\\.[0-9]+\\'" . change-log-mode)
("[cC]hange[lL]og[-.][0-9]+\\'" . change-log-mode)
("\\$CHANGE_LOG\\$\\.TXT" . change-log-mode)
("\\.scm\\.[0-9]*\\'" . scheme-mode)
("\\.[ck]?sh\\'\\|\\.shar\\'\\|/\\.z?profile\\'" . sh-mode)
@ -2396,10 +2401,10 @@ asking you for confirmation."
;;
;; For variables defined in the C source code the declaration should go here:
;; FIXME: Some variables should be moved according to the rules above.
(mapc (lambda (pair)
(put (car pair) 'safe-local-variable (cdr pair)))
'((fill-column . integerp) ;; C source code
'((buffer-read-only . booleanp) ;; C source code
(fill-column . integerp) ;; C source code
(indent-tabs-mode . booleanp) ;; C source code
(left-margin . integerp) ;; C source code
(no-update-autoloads . booleanp)
@ -2697,8 +2702,8 @@ It is dangerous if either of these conditions are met:
* Its name ends with \"hook(s)\", \"function(s)\", \"form(s)\", \"map\",
\"program\", \"command(s)\", \"predicate(s)\", \"frame-alist\",
\"mode-alist\", \"font-lock-(syntactic-)keyword*\", or
\"map-alist\"."
\"mode-alist\", \"font-lock-(syntactic-)keyword*\",
\"map-alist\", or \"bindat-spec\"."
;; If this is an alias, check the base name.
(condition-case nil
(setq sym (indirect-variable sym))
@ -2707,7 +2712,7 @@ It is dangerous if either of these conditions are met:
(string-match "-hooks?$\\|-functions?$\\|-forms?$\\|-program$\\|\
-commands?$\\|-predicates?$\\|font-lock-keywords$\\|font-lock-keywords\
-[0-9]+$\\|font-lock-syntactic-keywords$\\|-frame-alist$\\|-mode-alist$\\|\
-map$\\|-map-alist$" (symbol-name sym))))
-map$\\|-map-alist$\\|-bindat-spec$" (symbol-name sym))))
(defun hack-one-local-variable-quotep (exp)
(and (consp exp) (eq (car exp) 'quote) (consp (cdr exp))))
@ -3729,9 +3734,15 @@ This requires the external program `diff' to be in your `exec-path'."
(recursive-edit)
;; Return nil to ask about BUF again.
nil)
"view this file")
(?d diff-buffer-with-file
"view changes in file"))
"view this buffer")
(?d (lambda (buf)
(save-window-excursion
(diff-buffer-with-file buf))
(view-buffer (get-buffer-create "*Diff*")
(lambda (ignore) (exit-recursive-edit)))
(recursive-edit)
nil)
"view changes in this buffer"))
"ACTION-ALIST argument used in call to `map-y-or-n-p'.")
(defvar buffer-save-without-query nil

View file

@ -129,8 +129,17 @@ as the final argument."
args (concat find-dired-find-program " . "
(if (string= args "")
""
(concat "\\( " args " \\) "))
(car find-ls-option)))
(concat
(shell-quote-argument "(")
" " args " "
(shell-quote-argument ")")
" "))
(if (equal (car find-ls-option) "-exec ls -ld {} \\;")
(concat "-exec ls -ld "
(shell-quote-argument "{}")
" "
(shell-quote-argument ";"))
(car find-ls-option))))
;; Start the find process.
(shell-command (concat args "&") (current-buffer))
;; The next statement will bomb in classic dired (no optional arg allowed)
@ -215,7 +224,10 @@ Thus ARG can also contain additional grep options."
(find-dired dir
(concat "-type f -exec grep " find-grep-options " -e "
(shell-quote-argument regexp)
" {} \\\; ")))
" "
(shell-quote-argument "{}")
" "
(shell-quote-argument ";"))))
(defun find-dired-filter (proc string)
;; Filter for \\[find-dired] processes.

View file

@ -718,7 +718,7 @@ see the variables `c-font-lock-extra-types', `c++-font-lock-extra-types',
;; If the keywords were compiled before, compile them again.
(if was-compiled
(setq font-lock-keywords
(font-lock-compile-keywords font-lock-keywords t)))))))
(font-lock-compile-keywords font-lock-keywords)))))))
(defun font-lock-update-removed-keyword-alist (mode keywords how)
"Update `font-lock-removed-keywords-alist' when adding new KEYWORDS to MODE."
@ -825,7 +825,7 @@ happens, so the major mode can be corrected."
;; If the keywords were compiled before, compile them again.
(if was-compiled
(setq font-lock-keywords
(font-lock-compile-keywords font-lock-keywords t)))))))
(font-lock-compile-keywords font-lock-keywords)))))))
;;; Font Lock Support mode.
@ -1168,7 +1168,12 @@ what properties to clear before refontifying a region.")
;; number of lines.
;; (setq beg (progn (goto-char beg) (line-beginning-position))
;; end (progn (goto-char end) (line-beginning-position 2)))
)
(unless (eq end (point-max))
;; Rounding up to a whole number of lines should include the
;; line right after `end'. Typical case: the first char of
;; the line was deleted. Or a \n was inserted in the middle
;; of a line.
(setq end (1+ end))))
(font-lock-fontify-region beg end)))))
(defvar jit-lock-start) (defvar jit-lock-end)
@ -1205,9 +1210,17 @@ This function does 2 things:
(setq beg (or (previous-single-property-change
beg 'font-lock-multiline)
(point-min))))
(setq end (or (text-property-any end (point-max)
(when (< end (point-max))
(setq end
(if (get-text-property end 'font-lock-multiline)
(or (text-property-any end (point-max)
'font-lock-multiline nil)
(point-max)))
(point-max))
;; Rounding up to a whole number of lines should include the
;; line right after `end'. Typical case: the first char of
;; the line was deleted. Or a \n was inserted in the middle
;; of a line.
(1+ end))))
;; Finally, pre-enlarge the region to a whole number of lines, to try
;; and anticipate what font-lock-default-fontify-region will do, so as to
;; avoid double-redisplay.
@ -1217,11 +1230,11 @@ This function does 2 things:
(when (memq 'font-lock-extend-region-wholelines
font-lock-extend-region-functions)
(goto-char beg)
(forward-line 0)
(setq jit-lock-start (min jit-lock-start (point)))
(setq jit-lock-start (min jit-lock-start (line-beginning-position)))
(goto-char end)
(forward-line 1)
(setq jit-lock-end (max jit-lock-end (point)))))))
(setq jit-lock-end
(max jit-lock-end
(if (bolp) (point) (line-beginning-position 2))))))))
(defun font-lock-fontify-block (&optional arg)
"Fontify some lines the way `font-lock-fontify-buffer' would.
@ -1414,7 +1427,8 @@ START should be at the beginning of a line."
;; If `font-lock-syntactic-keywords' is not compiled, compile it.
(unless (eq (car font-lock-syntactic-keywords) t)
(setq font-lock-syntactic-keywords (font-lock-compile-keywords
font-lock-syntactic-keywords)))
font-lock-syntactic-keywords
t)))
;; Get down to business.
(let ((case-fold-search font-lock-keywords-case-fold-search)
(keywords (cddr font-lock-syntactic-keywords))
@ -1570,7 +1584,7 @@ START should be at the beginning of a line.
LOUDLY, if non-nil, allows progress-meter bar."
(unless (eq (car font-lock-keywords) t)
(setq font-lock-keywords
(font-lock-compile-keywords font-lock-keywords t)))
(font-lock-compile-keywords font-lock-keywords)))
(let ((case-fold-search font-lock-keywords-case-fold-search)
(keywords (cddr font-lock-keywords))
(bufname (buffer-name)) (count 0)
@ -1626,12 +1640,12 @@ LOUDLY, if non-nil, allows progress-meter bar."
;; Various functions.
(defun font-lock-compile-keywords (keywords &optional regexp)
(defun font-lock-compile-keywords (keywords &optional syntactic-keywords)
"Compile KEYWORDS into the form (t KEYWORDS COMPILED...)
Here each COMPILED is of the form (MATCHER HIGHLIGHT ...) as shown in the
`font-lock-keywords' doc string.
If REGEXP is non-nil, it means these keywords are used for
`font-lock-keywords' rather than for `font-lock-syntactic-keywords'."
If SYNTACTIC-KEYWORDS is non-nil, it means these keywords are used for
`font-lock-syntactic-keywords' rather than for `font-lock-keywords'."
(if (not font-lock-set-defaults)
;; This should never happen. But some external packages sometimes
;; call font-lock in unexpected and incorrect ways. It's important to
@ -1644,10 +1658,12 @@ If REGEXP is non-nil, it means these keywords are used for
(setq keywords
(cons t (cons keywords
(mapcar 'font-lock-compile-keyword keywords))))
(if (and regexp
(eq (or syntax-begin-function
font-lock-beginning-of-syntax-function)
'beginning-of-defun)
(if (and (not syntactic-keywords)
(let ((beg-function
(or font-lock-beginning-of-syntax-function
syntax-begin-function)))
(or (eq beg-function 'beginning-of-defun)
(get beg-function 'font-lock-syntax-paren-check)))
(not beginning-of-defun-function))
;; Try to detect when a string or comment contains something that
;; looks like a defun and would thus confuse font-lock.
@ -1774,7 +1790,7 @@ Sets various variables using `font-lock-defaults' (or, if nil, using
;; Now compile the keywords.
(unless (eq (car font-lock-keywords) t)
(setq font-lock-keywords
(font-lock-compile-keywords font-lock-keywords t))))))
(font-lock-compile-keywords font-lock-keywords))))))
;;; Colour etc. support.

View file

@ -771,7 +771,7 @@ the user during startup."
(nreverse frame-initial-geometry-arguments))
(cdr param-list))
(defcustom focus-follows-mouse t
(defcustom focus-follows-mouse (not (eq window-system 'mac))
"*Non-nil if window system changes focus when you move the mouse.
You should set this variable to tell Emacs how your window manager
handles focus, since there is no way in general for Emacs to find out
@ -1192,17 +1192,43 @@ For character terminals, each character counts as a single pixel."
(t
(frame-width (if (framep display) display (selected-frame)))))))
(defcustom display-mm-dimensions-alist nil
"Alist for specifying screen dimensions in millimeters.
The dimensions will be used for `display-mm-height' and
`display-mm-width' if defined for the respective display.
Each element of the alist has the form (display . (width . height)),
e.g. (\":0.0\" . (287 . 215)).
If `display' equals t, it specifies dimensions for all graphical
displays not explicitely specified."
:version "22.1"
:type '(alist :key-type (choice (string :tag "Display name")
(const :tag "Default" t))
:value-type (cons :tag "Dimensions"
(integer :tag "Width")
(integer :tag "Height")))
:group 'frames)
(defun display-mm-height (&optional display)
"Return the height of DISPLAY's screen in millimeters.
System values can be overriden by `display-mm-dimensions-alist'.
If the information is unavailable, value is nil."
(and (memq (framep-on-display display) '(x w32 mac))
(x-display-mm-height display)))
(or (cddr (assoc (or display (frame-parameter nil 'display))
display-mm-dimensions-alist))
(cddr (assoc t display-mm-dimensions-alist))
(x-display-mm-height display))))
(defun display-mm-width (&optional display)
"Return the width of DISPLAY's screen in millimeters.
System values can be overriden by `display-mm-dimensions-alist'.
If the information is unavailable, value is nil."
(and (memq (framep-on-display display) '(x w32 mac))
(x-display-mm-width display)))
(or (cadr (assoc (or display (frame-parameter nil 'display))
display-mm-dimensions-alist))
(cadr (assoc t display-mm-dimensions-alist))
(x-display-mm-width display))))
(defun display-backing-store (&optional display)
"Return the backing store capability of DISPLAY's screen.

View file

@ -1,3 +1,122 @@
2006-10-04 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-sum.el (gnus-summary-make-menu-bar): Clarify
gnus-summary-limit-to-articles.
2006-10-04 Romain Francoise <romain@orebokech.com>
* gnus-util.el (gnus-alist-to-hashtable, gnus-hashtable-to-alist):
Moved here (and renamed) from gnus-registry.el.
* gnus-registry.el: Require gnus-util.
Use `gnus-alist-to-hashtable' and `gnus-hashtable-to-alist'.
2006-10-04 Reiner Steib <Reiner.Steib@gmx.de>
* pop3.el (pop3-authentication-scheme): Clarify doc.
(pop3-movemail): Warn about pop3-leave-mail-on-server.
2006-10-04 Dave Love <fx@gnu.org>
* pop3.el (pop3-authentication-scheme): Add custom version.
2006-10-04 Jesper Harder <harder@ifa.au.dk>
* pop3.el (pop3-leave-mail-on-server): Don't quote nil in
doc string. Improve doc string.
2006-10-03 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-util.el (gnus-with-local-quit): New macro.
* gnus-demon.el (gnus-demon): Replace with-local-quit with it.
2006-09-28 Reiner Steib <Reiner.Steib@gmx.de>
* gmm-utils.el (gmm): Adjust custom version.
* mm-util.el (mm-charset-override-alist, mm-charset-eval-alist): Adjust
custom version.
* gnus-draft.el (gnus-draft-mode): Don't call `mml-mode'.
2006-09-25 Chong Yidong <cyd@stupidchicken.com>
* gnus-demon.el (gnus-demon): Use with-local-quit to avoid hangs.
2006-09-19 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
* nnslashdot.el (nnslashdot-request-article): Update end-of-article
regexp. Articles containing quotation were cut prematurely.
2006-09-16 Katsumi Yamaoka <yamaoka@jpl.org>
* message.el (message-cite-original-without-signature): Use nobody by
default for the value of From header.
(message-cite-original): Ditto.
(message-reply): Ditto.
2006-09-09 Reiner Steib <Reiner.Steib@gmx.de>
* pop3.el (pop3-leave-mail-on-server): Mention problem of duplicate
mails in the doc string. Add some URLs in comment.
2006-09-07 Katsumi Yamaoka <yamaoka@jpl.org>
* rfc2047.el (rfc2047-quote-special-characters-in-quoted-strings): Fix
backslashes handling and the way to find boundaries of quoted strings.
2006-09-06 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-art.el (gnus-button-regexp, gnus-button-marker-list)
(gnus-button-last): Move up. Convert comments into doc strings.
2006-09-04 Chong Yidong <cyd@stupidchicken.com>
* message.el (message-send-mail-with-sendmail): Look for sendmail in
several common directories.
2006-09-04 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (article-decode-encoded-words): Make it fast.
2006-09-04 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (article-decode-encoded-words): Don't infloop in XEmacs.
* rfc2047.el (rfc2047-strip-backslashes-in-quoted-strings): Decode `\\'
in quoted string into `\'.
2006-09-01 Katsumi Yamaoka <yamaoka@jpl.org>
* rfc2047.el (rfc2047-quote-special-characters-in-quoted-strings):
Use standard-syntax-table.
2006-09-01 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (gnus-decode-address-function): New variable.
(article-decode-encoded-words): Use it to decode headers which are
assumed to contain addresses.
(gnus-mime-delete-part): Remove useless `or'.
* gnus-sum.el (gnus-decode-encoded-address-function): New variable.
(gnus-summary-from-or-to-or-newsgroups): Use it to decode To header.
(gnus-nov-parse-line): Use it to decode From header.
(gnus-get-newsgroup-headers): Ditto.
(gnus-summary-enter-digest-group): Use it to decode `to-address'.
* mail-parse.el (mail-decode-encoded-address-region): New alias.
(mail-decode-encoded-address-string): New alias.
* rfc2047.el (rfc2047-quote-special-characters-in-quoted-strings):
New function.
(rfc2047-encode-message-header, rfc2047-encode-region): Use it.
(rfc2047-strip-backslashes-in-quoted-strings): New fnction.
(rfc2047-decode-region): Use it; add optional argument `address-mime'.
(rfc2047-decode-string): Ditto.
(rfc2047-decode-address-region): New function.
(rfc2047-decode-address-string): New function.
2006-08-23 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
[ Backported bug fix from No Gnus. ]
@ -389,10 +508,6 @@
* gnus-sum.el (gnus-get-newsgroup-headers-xover): Group is an
optional parameter.
2006-04-07 Reiner Steib <Reiner.Steib@gmx.de>
* pgg-gpg.el: Revert to revision 7.15 to allow the use of gpg-agent.
2006-04-06 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-fun.el (gnus): Require it for gnus-directory.
@ -2826,7 +2941,7 @@
* gnus.el (gnus-group-startup-message): Search for gnus images in
etc/images/gnus.
* mm-util.el (mm-find-charset-region): Likewise.
* mm-util.el (mm-image-load-path): Likewise.
* smiley.el (smiley-data-directory): Search for smilies in
etc/images/smilies.

File diff suppressed because it is too large Load diff

View file

@ -35,7 +35,7 @@
(defgroup gmm nil
"Utility functions for Gnus, Message and MML"
:prefix "gmm-"
:version "23.0" ;; No Gnus
:version "22.1" ;; Gnus 5.10.9
:group 'lisp)
;; Helper functions from `gnus-utils.el': gmm-verbose, gmm-message, gmm-error

View file

@ -853,6 +853,9 @@ be displayed by the first non-nil matching CONTENT face."
(defvar gnus-decode-header-function 'mail-decode-encoded-word-region
"Function used to decode headers.")
(defvar gnus-decode-address-function 'mail-decode-encoded-address-region
"Function used to decode addresses.")
(defvar gnus-article-dumbquotes-map
'(("\200" "EUR")
("\202" ",")
@ -2377,10 +2380,24 @@ If PROMPT (the prefix), prompt for a coding system to use."
(set-buffer gnus-summary-buffer)
(error))
gnus-newsgroup-ignored-charsets))
(inhibit-read-only t))
(save-restriction
(article-narrow-to-head)
(funcall gnus-decode-header-function (point-min) (point-max)))))
(inhibit-read-only t)
end start)
(goto-char (point-min))
(when (search-forward "\n\n" nil 'move)
(forward-line -1))
(setq end (point))
(while (not (bobp))
(while (progn
(forward-line -1)
(and (not (bobp))
(memq (char-after) '(?\t ? )))))
(setq start (point))
(if (looking-at "\
\\(?:Resent-\\)?\\(?:From\\|Cc\\|To\\|Bcc\\|\\(?:In-\\)?Reply-To\\|Sender\
\\|Mail-Followup-To\\|Mail-Copies-To\\|Approved\\):")
(funcall gnus-decode-address-function start end)
(funcall gnus-decode-header-function start end))
(goto-char (setq end start)))))
(defun article-decode-group-name ()
"Decode group names in `Newsgroups:'."
@ -3923,6 +3940,14 @@ commands:
(mm-enable-multibyte)
(gnus-run-mode-hooks 'gnus-article-mode-hook))
;; Internal variables. Are `gnus-button-regexp' and `gnus-button-last' used
;; at all?
(defvar gnus-button-regexp nil)
(defvar gnus-button-marker-list nil
"Regexp matching any of the regexps from `gnus-button-alist'.")
(defvar gnus-button-last nil
"The value of `gnus-button-alist' when `gnus-button-regexp' was build.")
(defun gnus-article-setup-buffer ()
"Initialize the article buffer."
(let* ((name (if gnus-single-article-buffer "*Article*"
@ -4324,9 +4349,8 @@ Deleting parts may malfunction or destroy the article; continue? ")
(handles gnus-article-mime-handles)
(none "(none)")
(description
(or
(mail-decode-encoded-word-string (or (mm-handle-description data)
none))))
none)))
(filename
(or (mail-content-type-get (mm-handle-disposition data) 'filename)
none))
@ -6695,13 +6719,6 @@ HEADER is a regexp to match a header. For a fuller explanation, see
:inline t
(integer :tag "Regexp group")))))
(defvar gnus-button-regexp nil)
(defvar gnus-button-marker-list nil)
;; Regexp matching any of the regexps from `gnus-button-alist'.
(defvar gnus-button-last nil)
;; The value of `gnus-button-alist' when `gnus-button-regexp' was build.
;;; Commands:
(defun gnus-article-push-button (event)

View file

@ -218,7 +218,7 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
(< idle gnus-demon-idle-time)) ; Idle timed out.
(t (< 0 gnus-demon-idle-time)))) ; Or just need to be idle.
;; So we call the handler.
(progn
(gnus-with-local-quit
(ignore-errors (funcall (car handler)))
;; And reset the timer.
(setcar (nthcdr 1 handler)
@ -232,14 +232,15 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
(gnus-demon-is-idle-p))
;; We want to call this handler each and every time that
;; Emacs is idle.
(ignore-errors (funcall (car handler))))
(gnus-with-local-quit
(ignore-errors (funcall (car handler)))))
(t
;; We want to call this handler only if Emacs has been idle
;; for a specified number of timesteps.
(and (not (memq (car handler) gnus-demon-idle-has-been-called))
(< idle gnus-demon-idle-time)
(gnus-demon-is-idle-p)
(progn
(gnus-with-local-quit
(ignore-errors (funcall (car handler)))
;; Make sure the handler won't be called once more in
;; this idle-cycle.

View file

@ -76,7 +76,6 @@
(when (gnus-visual-p 'draft-menu 'menu)
(gnus-draft-make-menu-bar))
(gnus-add-minor-mode 'gnus-draft-mode " Draft" gnus-draft-mode-map)
(mml-mode)
(gnus-run-hooks 'gnus-draft-mode-hook))))
;;; Commands

View file

@ -60,6 +60,7 @@
(require 'gnus)
(require 'gnus-int)
(require 'gnus-sum)
(require 'gnus-util)
(require 'nnmail)
(defvar gnus-registry-dirty t
@ -243,7 +244,8 @@ way."
(gnus-registry-clean-empty-function))
;; now trim the registry appropriately
(setq gnus-registry-alist (gnus-registry-trim
(hashtable-to-alist gnus-registry-hashtb)))
(gnus-hashtable-to-alist
gnus-registry-hashtb)))
;; really save
(gnus-registry-cache-save)
(setq gnus-registry-entry-caching caching)
@ -262,7 +264,7 @@ way."
(defun gnus-registry-read ()
(gnus-registry-cache-read)
(setq gnus-registry-hashtb (alist-to-hashtable gnus-registry-alist))
(setq gnus-registry-hashtb (gnus-alist-to-hashtable gnus-registry-alist))
(setq gnus-registry-dirty nil))
(defun gnus-registry-trim (alist)
@ -290,26 +292,6 @@ way."
(cdr (gethash (car a) timehash))
(cdr (gethash (car b) timehash))))))))))
(defun alist-to-hashtable (alist)
"Build a hashtable from the values in ALIST."
(let ((ht (make-hash-table
:size 4096
:test 'equal)))
(mapc
(lambda (kv-pair)
(puthash (car kv-pair) (cdr kv-pair) ht))
alist)
ht))
(defun hashtable-to-alist (hash)
"Build an alist from the values in HASH."
(let ((list nil))
(maphash
(lambda (key value)
(setq list (cons (cons key value) list)))
hash)
list))
(defun gnus-registry-action (action data-header from &optional to method)
(let* ((id (mail-header-id data-header))
(subject (gnus-registry-simplify-subject
@ -660,7 +642,7 @@ Returns the first place where the trail finds a group name."
"Clear the Gnus registry."
(interactive)
(setq gnus-registry-alist nil)
(setq gnus-registry-hashtb (alist-to-hashtable gnus-registry-alist))
(setq gnus-registry-hashtb (gnus-alist-to-hashtable gnus-registry-alist))
(setq gnus-registry-dirty t))
;;;###autoload

View file

@ -992,7 +992,11 @@ which it may alter in any way."
:group 'gnus-summary)
(defvar gnus-decode-encoded-word-function 'mail-decode-encoded-word-string
"Variable that says which function should be used to decode a string with encoded words.")
"Function used to decode a string with encoded words.")
(defvar gnus-decode-encoded-address-function
'mail-decode-encoded-address-string
"Function used to decode addresses with encoded words.")
(defcustom gnus-extra-headers '(To Newsgroups)
"*Extra headers to parse."
@ -2434,7 +2438,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
["Unread" gnus-summary-limit-to-unread t]
["Unseen" gnus-summary-limit-to-unseen t]
["Non-dormant" gnus-summary-limit-exclude-dormant t]
["Next articles" gnus-summary-limit-to-articles t]
["Next or process marked articles" gnus-summary-limit-to-articles t]
["Pop limit" gnus-summary-pop-limit t]
["Show dormant" gnus-summary-limit-include-dormant t]
["Hide childless dormant"
@ -3436,7 +3440,7 @@ buffer that was in action when the last article was fetched."
(concat "-> "
(inline
(gnus-summary-extract-address-component
(funcall gnus-decode-encoded-word-function to)))))
(funcall gnus-decode-encoded-address-function to)))))
((setq newsgroups (cdr (assq 'Newsgroups extra-headers)))
(concat "=> " newsgroups)))))
(inline (gnus-summary-extract-address-component gnus-tmp-from)))))
@ -4182,7 +4186,7 @@ Returns HEADER if it was entered in the DEPENDENCIES. Returns nil otherwise."
(error x))
(condition-case () ; from
(gnus-remove-odd-characters
(funcall gnus-decode-encoded-word-function
(funcall gnus-decode-encoded-address-function
(setq x (nnheader-nov-field))))
(error x))
(nnheader-nov-field) ; date
@ -5956,7 +5960,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
(progn
(goto-char p)
(if (search-forward "\nfrom:" nil t)
(funcall gnus-decode-encoded-word-function
(funcall gnus-decode-encoded-address-function
(nnheader-header-value))
"(nobody)"))
;; Date.
@ -8449,9 +8453,10 @@ to guess what the document format is."
;; the parent article.
(when (setq to-address (or (gnus-fetch-field "reply-to")
(gnus-fetch-field "from")))
(setq params (append
(setq params
(append
(list (cons 'to-address
(funcall gnus-decode-encoded-word-function
(funcall gnus-decode-encoded-address-function
to-address))))))
(setq dig (nnheader-set-temp-buffer " *gnus digest buffer*"))
(insert-buffer-substring gnus-original-article-buffer)

View file

@ -746,6 +746,28 @@ If there's no subdirectory, delete DIRECTORY as well."
(unless dir
(delete-directory directory)))))
;; The following two functions are used in gnus-registry.
;; They were contributed by Andreas Fuchs <asf@void.at>.
(defun gnus-alist-to-hashtable (alist)
"Build a hashtable from the values in ALIST."
(let ((ht (make-hash-table
:size 4096
:test 'equal)))
(mapc
(lambda (kv-pair)
(puthash (car kv-pair) (cdr kv-pair) ht))
alist)
ht))
(defun gnus-hashtable-to-alist (hash)
"Build an alist from the values in HASH."
(let ((list nil))
(maphash
(lambda (key value)
(setq list (cons (cons key value) list)))
hash)
list))
(defun gnus-strip-whitespace (string)
"Return STRING stripped of all whitespace."
(while (string-match "[\r\n\t ]+" string)
@ -1616,6 +1638,25 @@ empty directories from OLD-PATH."
(defalias 'gnus-set-process-query-on-exit-flag
'process-kill-without-query))
(if (fboundp 'with-local-quit)
(defalias 'gnus-with-local-quit 'with-local-quit)
(defmacro gnus-with-local-quit (&rest body)
"Execute BODY, allowing quits to terminate BODY but not escape further.
When a quit terminates BODY, `gnus-with-local-quit' returns nil but
requests another quit. That quit will be processed as soon as quitting
is allowed once again. (Immediately, if `inhibit-quit' is nil.)"
;;(declare (debug t) (indent 0))
`(condition-case nil
(let ((inhibit-quit nil))
,@body)
(quit (setq quit-flag t)
;; This call is to give a chance to handle quit-flag
;; in case inhibit-quit is nil.
;; Without this, it will not be handled until the next function
;; call, and that might allow it to exit thru a condition-case
;; that intends to handle the quit signal next time.
(eval '(ignore nil))))))
(provide 'gnus-util)
;;; arch-tag: f94991af-d32b-4c97-8c26-ca12a934de49

View file

@ -70,6 +70,8 @@
(defalias 'mail-encode-encoded-word-string 'rfc2047-encode-string)
(defalias 'mail-decode-encoded-word-region 'rfc2047-decode-region)
(defalias 'mail-decode-encoded-word-string 'rfc2047-decode-string)
(defalias 'mail-decode-encoded-address-region 'rfc2047-decode-address-region)
(defalias 'mail-decode-encoded-address-string 'rfc2047-decode-address-string)
(provide 'mail-parse)

View file

@ -3280,7 +3280,7 @@ prefix, and don't delete any headers."
(message-narrow-to-head-1)
(vector 0
(or (message-fetch-field "subject") "none")
(message-fetch-field "from")
(or (message-fetch-field "from") "nobody")
(message-fetch-field "date")
(message-fetch-field "message-id" t)
(message-fetch-field "references")
@ -3329,7 +3329,7 @@ prefix, and don't delete any headers."
(message-narrow-to-head-1)
(vector 0
(or (message-fetch-field "subject") "none")
(message-fetch-field "from")
(or (message-fetch-field "from") "nobody")
(message-fetch-field "date")
(message-fetch-field "message-id" t)
(message-fetch-field "references")
@ -3897,9 +3897,15 @@ If you always want Gnus to send messages in one piece, set
'call-process-region
(append
(list (point-min) (point-max)
(if (boundp 'sendmail-program)
sendmail-program
(cond ((boundp 'sendmail-program)
sendmail-program)
((file-exists-p "/usr/sbin/sendmail")
"/usr/sbin/sendmail")
((file-exists-p "/usr/lib/sendmail")
"/usr/lib/sendmail")
((file-exists-p "/usr/ucblib/sendmail")
"/usr/ucblib/sendmail")
(t "fakemail"))
nil errbuf nil "-oi")
;; Always specify who from,
;; since some systems have broken sendmails.
@ -5837,7 +5843,7 @@ want to get rid of this query permanently.")))
(setq message-id (message-fetch-field "message-id" t)
references (message-fetch-field "references")
date (message-fetch-field "date")
from (message-fetch-field "from")
from (or (message-fetch-field "from") "nobody")
subject (or (message-fetch-field "subject") "none"))
(when gnus-list-identifiers
(setq subject (message-strip-list-identifiers subject)))

View file

@ -253,7 +253,7 @@ superset of iso-8859-1."
:tag "Other options"
(cons (symbol :tag "From charset")
(symbol :tag "To charset"))))
:version "23.0" ;; No Gnus
:version "22.1" ;; Gnus 5.10.9
:group 'mime)
(defcustom mm-charset-eval-alist
@ -270,7 +270,7 @@ If an article is encoded in an unknown CHARSET, FORM is
evaluated. This allows to load additional libraries providing
charsets on demand. If supported by your Emacs version, you
could use `autoload-coding-system' here."
:version "23.0" ;; No Gnus
:version "22.1" ;; Gnus 5.10.9
:type '(list (set :inline t
(const (windows-1250 . (mm-codepage-setup 1250 t)))
(const (windows-1251 . (mm-codepage-setup 1251 t)))

View file

@ -258,7 +258,9 @@
(setq contents
(buffer-substring
(search-forward "<div class=\"commentBody\">")
(search-forward "</div>")))))))
(progn
(search-forward "<div class=\"commentSub\">")
(match-beginning 0))))))))
(search-failed (nnslashdot-lose why)))
(when contents

View file

@ -75,22 +75,26 @@
(defcustom pop3-authentication-scheme 'pass
"*POP3 authentication scheme.
Defaults to 'pass, for the standard USER/PASS authentication. Other valid
values are 'apop."
:version "22.1" ;; Oort Gnus
:type '(choice (const :tag "USER/PASS" pass)
Defaults to `pass', for the standard USER/PASS authentication. The other
valid value is 'apop'."
:type '(choice (const :tag "Normal user/password" pass)
(const :tag "APOP" apop))
:version "22.1" ;; Oort Gnus
:group 'pop3)
(defcustom pop3-leave-mail-on-server nil
"*Non-nil if the mail is to be left on the POP server after fetching.
If the `pop3-leave-mail-on-server' is non-`nil' the mail is to be
left on the POP server after fetching. Note that POP servers
maintain no state information between sessions, so what the
client believes is there and what is actually there may not match
up. If they do not, then the whole thing can fall apart and
leave you with a corrupt mailbox."
If `pop3-leave-mail-on-server' is non-nil the mail is to be left
on the POP server after fetching. Note that POP servers maintain
no state information between sessions, so what the client
believes is there and what is actually there may not match up.
If they do not, then you may get duplicate mails or the whole
thing can fall apart and leave you with a corrupt mailbox."
;; We can't use the UILD support from XEmacs mail-lib or cvs.m17n.org:
;; http://thread.gmane.org/v9lld8fml4.fsf@marauder.physik.uni-ulm.de
;; http://thread.gmane.org/b9yy8hzy9ej.fsf@jpl.org
;; Any volunteer to re-implement this?
:version "22.1" ;; Oort Gnus
:type 'boolean
:group 'pop3)
@ -166,11 +170,14 @@ Shorter values mean quicker response, but are more CPU intensive.")
(unless pop3-leave-mail-on-server
(pop3-dele process n))
(setq n (+ 1 n))
(if pop3-debug (sit-for 1) (sit-for 0.1))
)
(if pop3-debug (sit-for 1) (sit-for 0.1))) ; why?
(when (and pop3-leave-mail-on-server
(> n 1))
(message "pop3.el doesn't support UIDL. Setting `pop3-leave-mail-on-server'
to %s might not give the result you'd expect." pop3-leave-mail-on-server)
(sit-for 1))
(pop3-quit process))
(kill-buffer crashbuf)
)
(kill-buffer crashbuf))
t)
(defun pop3-get-message-count ()
@ -312,6 +319,8 @@ If NOW, use that time instead."
;; Date: 08 Jul 1996 23:22:24 -0400
;; should be
;; Tue Jul 9 09:04:21 1996
;; Fixme: This should use timezone on the date field contents.
(setq date
(cond ((not date)
"Tue Jan 1 00:00:0 1900")

View file

@ -171,6 +171,42 @@ This is either `base64' or `quoted-printable'."
(re-search-forward ":[ \t\n]*" nil t)
(buffer-substring-no-properties (point) (point-max)))))
(defun rfc2047-quote-special-characters-in-quoted-strings (&optional
encodable-regexp)
"Quote special characters with `\\'s in quoted strings.
Quoting will not be done in a quoted string if it contains characters
matching ENCODABLE-REGEXP."
(goto-char (point-min))
(let ((tspecials (concat "[" ietf-drums-tspecials "]"))
beg end)
(with-syntax-table (standard-syntax-table)
(while (search-forward "\"" nil t)
(setq beg (match-beginning 0))
(unless (eq (char-before beg) ?\\)
(goto-char beg)
(setq beg (1+ beg))
(condition-case nil
(progn
(forward-sexp)
(setq end (1- (point)))
(goto-char beg)
(if (and encodable-regexp
(re-search-forward encodable-regexp end t))
(goto-char (1+ end))
(save-restriction
(narrow-to-region beg end)
(while (re-search-forward tspecials nil 'move)
(if (eq (char-before) ?\\)
(if (looking-at tspecials) ;; Already quoted.
(forward-char)
(insert "\\"))
(goto-char (match-beginning 0))
(insert "\\")
(forward-char))))
(forward-char)))
(error
(goto-char beg))))))))
(defvar rfc2047-encoding-type 'address-mime
"The type of encoding done by `rfc2047-encode-region'.
This should be dynamically bound around calls to
@ -187,8 +223,18 @@ Should be called narrowed to the head of the message."
(while (not (eobp))
(save-restriction
(rfc2047-narrow-to-field)
(setq method nil
alist rfc2047-header-encoding-alist)
(while (setq elem (pop alist))
(when (or (and (stringp (car elem))
(looking-at (car elem)))
(eq (car elem) t))
(setq alist nil
method (cdr elem))))
(if (not (rfc2047-encodable-p))
(prog1
(prog2
(when (eq method 'address-mime)
(rfc2047-quote-special-characters-in-quoted-strings))
(if (and (eq (mm-body-7-or-8) '8bit)
(mm-multibyte-p)
(mm-coding-system-p
@ -209,14 +255,6 @@ Should be called narrowed to the head of the message."
(point))
(point-max))))
;; We found something that may perhaps be encoded.
(setq method nil
alist rfc2047-header-encoding-alist)
(while (setq elem (pop alist))
(when (or (and (stringp (car elem))
(looking-at (car elem)))
(eq (car elem) t))
(setq alist nil
method (cdr elem))))
(re-search-forward "^[^:]+: *" nil t)
(cond
((eq method 'address-mime)
@ -347,6 +385,7 @@ Dynamically bind `rfc2047-encoding-type' to change that."
(rfc2047-encode start (point))
(goto-char end))))
;; `address-mime' case -- take care of quoted words, comments.
(rfc2047-quote-special-characters-in-quoted-strings encodable-regexp)
(with-syntax-table rfc2047-syntax-table
(goto-char (point-min))
(condition-case err ; in case of unbalanced quotes
@ -821,6 +860,29 @@ encoded-word, concatenate them, and decode it by charset. Otherwise,
the decoder will fully decode each encoded-word before concatenating
them.")
(defun rfc2047-strip-backslashes-in-quoted-strings ()
"Strip backslashes in quoted strings. `\\\"' remains."
(goto-char (point-min))
(let (beg)
(with-syntax-table (standard-syntax-table)
(while (search-forward "\"" nil t)
(unless (eq (char-before) ?\\)
(setq beg (match-end 0))
(goto-char (match-beginning 0))
(condition-case nil
(progn
(forward-sexp)
(save-restriction
(narrow-to-region beg (1- (point)))
(goto-char beg)
(while (search-forward "\\" nil 'move)
(unless (memq (char-after) '(?\"))
(delete-backward-char 1))
(forward-char)))
(forward-char))
(error
(goto-char beg))))))))
(defun rfc2047-charset-to-coding-system (charset)
"Return coding-system corresponding to MIME CHARSET.
If your Emacs implementation can't decode CHARSET, return nil."
@ -898,8 +960,10 @@ ENCODED-WORD)."
;; and worthwhile (is it more correct or not?), e.g. something like
;; `=?iso-8859-1?q?foo?=@'.
(defun rfc2047-decode-region (start end)
"Decode MIME-encoded words in region between START and END."
(defun rfc2047-decode-region (start end &optional address-mime)
"Decode MIME-encoded words in region between START and END.
If ADDRESS-MIME is non-nil, strip backslashes which precede characters
other than `\"' and `\\' in quoted strings."
(interactive "r")
(let ((case-fold-search t)
(eword-regexp (eval-when-compile
@ -910,6 +974,8 @@ ENCODED-WORD)."
(save-excursion
(save-restriction
(narrow-to-region start end)
(when address-mime
(rfc2047-strip-backslashes-in-quoted-strings))
(goto-char (setq b start))
;; Look for the encoded-words.
(while (setq match (re-search-forward eword-regexp nil t))
@ -995,8 +1061,16 @@ ENCODED-WORD)."
(not (eq mail-parse-charset 'gnus-decoded)))
(mm-decode-coding-region b (point-max) mail-parse-charset))))))
(defun rfc2047-decode-string (string)
"Decode the quoted-printable-encoded STRING and return the results."
(defun rfc2047-decode-address-region (start end)
"Decode MIME-encoded words in region between START and END.
Backslashes which precede characters other than `\"' and `\\' in quoted
strings are stripped."
(rfc2047-decode-region start end t))
(defun rfc2047-decode-string (string &optional address-mime)
"Decode MIME-encoded STRING and return the result.
If ADDRESS-MIME is non-nil, strip backslashes which precede characters
other than `\"' and `\\' in quoted strings."
(let ((m (mm-multibyte-p)))
(if (string-match "=\\?" string)
(with-temp-buffer
@ -1010,8 +1084,16 @@ ENCODED-WORD)."
(mm-enable-multibyte))
(insert string)
(inline
(rfc2047-decode-region (point-min) (point-max)))
(rfc2047-decode-region (point-min) (point-max) address-mime))
(buffer-string))
(when address-mime
(setq string
(with-temp-buffer
(when (mm-multibyte-string-p string)
(mm-enable-multibyte))
(insert string)
(rfc2047-strip-backslashes-in-quoted-strings)
(buffer-string))))
;; Fixme: As above, `m' here is inappropriate.
(if (and m
mail-parse-charset
@ -1033,6 +1115,12 @@ ENCODED-WORD)."
(mm-decode-coding-string string mail-parse-charset))
(mm-string-as-multibyte string)))))
(defun rfc2047-decode-address-string (string)
"Decode MIME-encoded STRING and return the result.
Backslashes which precede characters other than `\"' and `\\' in quoted
strings are stripped."
(rfc2047-decode-string string t))
(defun rfc2047-pad-base64 (string)
"Pad STRING to quartets."
;; Be more liberal to accept buggy base64 strings. If

View file

@ -246,7 +246,7 @@ properties, to enable buffer local values."
(defun scan-buf-move-to-region (prop &optional arg hook)
"Go to the start of the next region with non-nil PROP property.
Then run HOOK, which should be a quoted symbol that is a normal
hook.variable, or an expression evaluating to such a symbol.
hook variable, or an expression evaluating to such a symbol.
Adjacent areas with different non-nil PROP properties are
considered different regions.

View file

@ -309,7 +309,7 @@ If that doesn't give a function, return nil."
The prefix described consists of all but the last event
of the key sequence that ran this command."
(interactive)
(let* ((key (this-command-keys)))
(let ((key (this-command-keys)))
(describe-bindings
(if (stringp key)
(substring key 0 (1- (length key)))
@ -535,28 +535,6 @@ If INSERT (the prefix arg) is non-nil, insert the message in the buffer."
(princ string)))))
nil)
(defun string-key-binding (key)
"Value is the binding of KEY in a string.
If KEY is an event on a string, and that string has a `local-map'
or `keymap' property, return the binding of KEY in the string's keymap."
(let* ((defn nil)
(start (when (vectorp key)
(if (memq (aref key 0)
'(mode-line header-line left-margin right-margin))
(event-start (aref key 1))
(and (consp (aref key 0))
(event-start (aref key 0))))))
(string-info (and (consp start) (nth 4 start))))
(when string-info
(let* ((string (car string-info))
(pos (cdr string-info))
(local-map (and (>= pos 0)
(< pos (length string))
(or (get-text-property pos 'local-map string)
(get-text-property pos 'keymap string)))))
(setq defn (and local-map (lookup-key local-map key)))))
defn))
(defun help-key-description (key untranslated)
(let ((string (key-description key)))
(if (or (not untranslated)
@ -589,10 +567,13 @@ temporarily enables it to allow getting help on disabled items and buttons."
(menu-bar-update-yank-menu "(any string)" nil))
(setq key (read-key-sequence "Describe key (or click or menu item): "))
;; If KEY is a down-event, read and discard the
;; corresponding up-event.
(if (and (vectorp key)
(eventp (elt key 0))
(memq 'down (event-modifiers (elt key 0))))
;; corresponding up-event. Note that there are also
;; down-events on scroll bars and mode lines: the actual
;; event then is in the second element of the vector.
(and (vectorp key)
(let ((last-idx (1- (length key))))
(and (eventp (aref key last-idx))
(memq 'down (event-modifiers (aref key last-idx)))))
(read-event))
(list
key
@ -604,24 +585,16 @@ temporarily enables it to allow getting help on disabled items and buttons."
(fset 'yank-menu (cons 'keymap yank-menu))))))
(if (numberp untranslated)
(setq untranslated (this-single-command-raw-keys)))
(save-excursion
(let ((modifiers (event-modifiers (aref key 0)))
(let* ((event (if (and (symbolp (aref key 0))
(> (length key) 1)
(consp (aref key 1)))
(aref key 1)
(aref key 0)))
(modifiers (event-modifiers event))
(standard-output (if insert (current-buffer) t))
window position)
;; For a mouse button event, go to the button it applies to
;; to get the right key bindings. And go to the right place
;; in case the keymap depends on where you clicked.
(if (or (memq 'click modifiers) (memq 'down modifiers)
(memq 'drag modifiers))
(setq window (posn-window (event-start (aref key 0)))
position (posn-point (event-start (aref key 0)))))
(if (windowp window)
(progn
(set-buffer (window-buffer window))
(goto-char position)))
;; Ok, now look up the key and name the command.
(let ((defn (or (string-key-binding key)
(key-binding key t)))
(mouse-msg (if (or (memq 'click modifiers) (memq 'down modifiers)
(memq 'drag modifiers)) " at that spot" ""))
(defn (key-binding key t))
key-desc)
;; Handle the case where we faked an entry in "Select and Paste" menu.
(if (and (eq defn nil)
@ -633,17 +606,12 @@ temporarily enables it to allow getting help on disabled items and buttons."
(aset key (1- (length key)) "(any string)"))
(if (and (> (length untranslated) 0)
(stringp (aref untranslated (1- (length untranslated)))))
(aset untranslated (1- (length untranslated))
"(any string)"))
(aset untranslated (1- (length untranslated)) "(any string)"))
;; Now describe the key, perhaps as changed.
(setq key-desc (help-key-description key untranslated))
(if (or (null defn) (integerp defn) (equal defn 'undefined))
(princ (format "%s is undefined" key-desc))
(princ (format (if (windowp window)
"%s at that spot runs the command %s"
"%s runs the command %s")
key-desc
(if (symbolp defn) defn (prin1-to-string defn)))))))))
(princ (format "%s%s is undefined" key-desc mouse-msg))
(princ (format "%s%s runs the command %S" key-desc mouse-msg defn)))))
(defun describe-key (&optional key untranslated up-event)
"Display documentation of the function invoked by KEY.
@ -673,11 +641,24 @@ temporarily enables it to allow getting help on disabled items and buttons."
(list
key
(prefix-numeric-value current-prefix-arg)
;; If KEY is a down-event, read the corresponding up-event
;; and use it as the third argument.
(if (and (vectorp key)
(eventp (elt key 0))
(memq 'down (event-modifiers (elt key 0))))
;; If KEY is a down-event, read and discard the
;; corresponding up-event. Note that there are also
;; down-events on scroll bars and mode lines: the actual
;; event then is in the second element of the vector.
(and (vectorp key)
(let ((last-idx (1- (length key))))
(and (eventp (aref key last-idx))
(memq 'down (event-modifiers (aref key last-idx)))))
(or (and (eventp (aref key 0))
(memq 'down (event-modifiers (aref key 0)))
;; However, for the C-down-mouse-2 popup
;; menu, there is no subsequent up-event. In
;; this case, the up-event is the next
;; element in the supplied vector.
(= (length key) 1))
(and (> (length key) 1)
(eventp (aref key 1))
(memq 'down (event-modifiers (aref key 1)))))
(read-event))))
;; Put yank-menu back as it was, if we changed it.
(when saved-yank-menu
@ -685,57 +666,44 @@ temporarily enables it to allow getting help on disabled items and buttons."
(fset 'yank-menu (cons 'keymap yank-menu))))))
(if (numberp untranslated)
(setq untranslated (this-single-command-raw-keys)))
(save-excursion
(let ((modifiers (event-modifiers (aref key 0)))
window position)
;; For a mouse button event, go to the button it applies to
;; to get the right key bindings. And go to the right place
;; in case the keymap depends on where you clicked.
(if (or (memq 'click modifiers) (memq 'down modifiers)
(memq 'drag modifiers))
(setq window (posn-window (event-start (aref key 0)))
position (posn-point (event-start (aref key 0)))))
(when (windowp window)
(set-buffer (window-buffer window))
(goto-char position))
(let ((defn (or (string-key-binding key) (key-binding key t))))
(let* ((event (aref key (if (and (symbolp (aref key 0))
(> (length key) 1)
(consp (aref key 1)))
1
0)))
(modifiers (event-modifiers event))
(mouse-msg (if (or (memq 'click modifiers) (memq 'down modifiers)
(memq 'drag modifiers)) " at that spot" ""))
(defn (key-binding key t))
defn-up defn-up-tricky ev-type
mouse-1-remapped mouse-1-tricky)
;; Handle the case where we faked an entry in "Select and Paste" menu.
(if (and (eq defn nil)
(when (and (eq defn nil)
(stringp (aref key (1- (length key))))
(eq (key-binding (substring key 0 -1)) 'yank-menu))
(setq defn 'menu-bar-select-yank))
(if (or (null defn) (integerp defn) (equal defn 'undefined))
(message "%s is undefined" (help-key-description key untranslated))
(message "%s%s is undefined"
(help-key-description key untranslated) mouse-msg)
(help-setup-xref (list #'describe-function defn) (interactive-p))
;; Don't bother user with strings from (e.g.) the select-paste menu.
(if (stringp (aref key (1- (length key))))
(when (stringp (aref key (1- (length key))))
(aset key (1- (length key)) "(any string)"))
(if (and untranslated
(when (and untranslated
(stringp (aref untranslated (1- (length untranslated)))))
(aset untranslated (1- (length untranslated))
"(any string)"))
(with-output-to-temp-buffer (help-buffer)
(princ (help-key-description key untranslated))
(if (windowp window)
(princ " at that spot"))
(princ " runs the command ")
(prin1 defn)
(princ "\n which is ")
(describe-function-1 defn)
;; Need to do this before erasing *Help* buffer in case event
;; is a mouse click in an existing *Help* buffer.
(when up-event
(let ((type (event-basic-type up-event))
(hdr "\n\n-------------- up event ---------------\n\n")
defn sequence
mouse-1-tricky mouse-1-remapped)
(setq sequence (vector up-event))
(when (and (eq type 'mouse-1)
(windowp window)
(setq ev-type (event-basic-type up-event))
(let ((sequence (vector up-event)))
(when (and (eq ev-type 'mouse-1)
mouse-1-click-follows-link
(not (eq mouse-1-click-follows-link 'double))
(setq mouse-1-remapped
(with-current-buffer (window-buffer window)
(mouse-on-link-p (posn-point
(event-start up-event))))))
(mouse-on-link-p (event-start up-event))))
(setq mouse-1-tricky (and (integerp mouse-1-click-follows-link)
(> mouse-1-click-follows-link 0)))
(cond ((stringp mouse-1-remapped)
@ -743,39 +711,49 @@ temporarily enables it to allow getting help on disabled items and buttons."
((vectorp mouse-1-remapped)
(setcar up-event (elt mouse-1-remapped 0)))
(t (setcar up-event 'mouse-2))))
(setq defn (or (string-key-binding sequence)
(key-binding sequence)))
(unless (or (null defn) (integerp defn) (equal defn 'undefined))
(princ (if mouse-1-tricky
"\n\n----------------- up-event (short click) ----------------\n\n"
hdr))
(setq hdr nil)
(princ (symbol-name type))
(if (windowp window)
(princ " at that spot"))
(if mouse-1-remapped
(princ " is remapped to <mouse-2>\n which" ))
(princ " runs the command ")
(prin1 defn)
(princ "\n which is ")
(describe-function-1 defn))
(setq defn-up (key-binding sequence nil nil (event-start up-event)))
(when mouse-1-tricky
(setcar up-event 'mouse-1)
(setq defn (or (string-key-binding (vector up-event))
(key-binding (vector up-event))))
(unless (or (null defn) (integerp defn) (eq defn 'undefined))
(princ (or hdr
"\n\n----------------- up-event (long click) ----------------\n\n"))
(princ "Pressing mouse-1")
(if (windowp window)
(princ " at that spot"))
(princ (format " for longer than %d milli-seconds\n"
mouse-1-click-follows-link))
(princ " runs the command ")
(prin1 defn)
(princ "\n which is ")
(describe-function-1 defn)))))
(print-help-return-message)))))))
(setq sequence (vector up-event))
(aset sequence 0 'mouse-1)
(setq defn-up-tricky (key-binding sequence nil nil (event-start up-event))))))
(with-output-to-temp-buffer (help-buffer)
(princ (help-key-description key untranslated))
(princ (format "\
%s runs the command %S
which is "
mouse-msg defn))
(describe-function-1 defn)
(when up-event
(unless (or (null defn-up)
(integerp defn-up)
(equal defn-up 'undefined))
(princ (format "
----------------- up-event %s----------------
<%S>%s%s runs the command %S
which is "
(if mouse-1-tricky "(short click) " "")
ev-type mouse-msg
(if mouse-1-remapped
" is remapped to <mouse-2>\nwhich" "")
defn-up))
(describe-function-1 defn-up))
(unless (or (null defn-up-tricky)
(integerp defn-up-tricky)
(eq defn-up-tricky 'undefined))
(princ (format "
----------------- up-event (long click) ----------------
Pressing <%S>%s for longer than %d milli-seconds
runs the command %S
which is "
ev-type mouse-msg
mouse-1-click-follows-link
defn-up-tricky))
(describe-function-1 defn-up-tricky)))
(print-help-return-message)))))
(defun describe-mode (&optional buffer)
"Display documentation of current major mode and minor modes.
@ -786,7 +764,7 @@ descriptions of the minor modes, each on a separate page.
For this to work correctly for a minor mode, the mode's indicator
variable \(listed in `minor-mode-alist') must also be a function
whose documentation describes the minor mode."
(interactive)
(interactive "@")
(unless buffer (setq buffer (current-buffer)))
(help-setup-xref (list #'describe-mode buffer)
(interactive-p))

View file

@ -64,16 +64,37 @@
;;; Code:
(defvar hl-line-overlay nil
"Overlay used by Hl-Line mode to highlight the current line.")
(make-variable-buffer-local 'hl-line-overlay)
(defvar global-hl-line-overlay nil
"Overlay used by Global-Hl-Line mode to highlight the current line.")
(defgroup hl-line nil
"Highlight the current line."
:version "21.1"
:group 'editing)
(defcustom hl-line-face 'highlight
"Face with which to highlight the current line."
:type 'face
(defface hl-line
'((t :inherit highlight))
"Default face for highlighting the current line in Hl-Line mode."
:version "22.1"
:group 'hl-line)
(defcustom hl-line-face 'hl-line
"Face with which to highlight the current line in Hl-Line mode."
:type 'face
:group 'hl-line
:set (lambda (symbol value)
(set symbol value)
(dolist (buffer (buffer-list))
(with-current-buffer buffer
(when hl-line-overlay
(overlay-put hl-line-overlay 'face hl-line-face))))
(when global-hl-line-overlay
(overlay-put global-hl-line-overlay 'face hl-line-face))))
(defcustom hl-line-sticky-flag t
"*Non-nil means highlight the current line in all windows.
Otherwise Hl-Line mode will highlight only in the selected
@ -92,13 +113,6 @@ It should return nil if there's no region to be highlighted.
This variable is expected to be made buffer-local by modes.")
(defvar hl-line-overlay nil
"Overlay used by Hl-Line mode to highlight the current line.")
(make-variable-buffer-local 'hl-line-overlay)
(defvar global-hl-line-overlay nil
"Overlay used by Global-Hl-Line mode to highlight the current line.")
;;;###autoload
(define-minor-mode hl-line-mode
"Buffer-local minor mode to highlight the line about point.

View file

@ -370,7 +370,11 @@ With numeric ARG, enable auto-update if and only if ARG is positive."
"Evaluate FORM in each of the buffers.
Does not display the buffer during evaluation. See
`ibuffer-do-view-and-eval' for that."
(:interactive "xEval in buffers (form): "
(:interactive
(list
(read-from-minibuffer
"Eval in buffers (form): "
nil read-expression-map t 'read-expression-history))
:opstring "evaluated in"
:modifier-p :maybe)
(eval form))
@ -379,7 +383,11 @@ Does not display the buffer during evaluation. See
(define-ibuffer-op view-and-eval (form)
"Evaluate FORM while displaying each of the marked buffers.
To evaluate a form without viewing the buffer, see `ibuffer-do-eval'."
(:interactive "xEval viewing buffers (form): "
(:interactive
(list
(read-from-minibuffer
"Eval viewing in buffers (form): "
nil read-expression-map t 'read-expression-history))
:opstring "evaluated in"
:complex t
:modifier-p :maybe)

View file

@ -1972,12 +1972,12 @@ the value of point at the beginning of the line for that buffer."
(not (eq ibuffer-buf buf))))))
;; This function is a special case; it's not defined by
;; `ibuffer-define-sorter'.
;; `define-ibuffer-sorter'.
(defun ibuffer-do-sort-by-recency ()
"Sort the buffers by last view time."
(interactive)
(setq ibuffer-sorting-mode 'recency)
(ibuffer-redisplay t))
(ibuffer-update nil t))
(defun ibuffer-update-format ()
(when (null ibuffer-current-format)

View file

@ -157,6 +157,12 @@ is minibuffer."
(< (length x) (length y))))
", ")
">"))))))
;;;_ = icomplete-with-completion-tables
(defvar icomplete-with-completion-tables '(internal-complete-buffer)
"Specialized completion tables with which icomplete should operate.
Icomplete does not operate with any specialized completion tables
except those on this list.")
;;;_ > icomplete-mode (&optional prefix)
;;;###autoload
@ -184,8 +190,9 @@ Conditions are:
(and (window-minibuffer-p (selected-window))
(not executing-kbd-macro)
minibuffer-completion-table
;; (or minibuffer-completing-file-name
(not (functionp minibuffer-completion-table)))) ;; )
(or (not (functionp minibuffer-completion-table))
(member minibuffer-completion-table
icomplete-with-completion-tables))))
;;;_ > icomplete-minibuffer-setup ()
(defun icomplete-minibuffer-setup ()

View file

@ -2112,7 +2112,7 @@ If INITIAL is non-nil, it specifies the initial input string."
(defun ido-edit-input ()
"Edit absolute file name entered so far with ido; terminate by RET."
(interactive)
(setq ido-text-init (if ido-matches (car ido-matches) ido-text))
(setq ido-text-init (if ido-matches (ido-name (car ido-matches)) ido-text))
(setq ido-exit 'edit)
(exit-minibuffer))
@ -2224,7 +2224,6 @@ If INITIAL is non-nil, it specifies the initial input string."
(let ((ido-current-directory (ido-expand-directory default))
(ido-context-switch-command switch-cmd)
ido-directory-nonreadable ido-directory-too-big
(minibuffer-completing-file-name t)
filename)
(if (or (not ido-mode) (ido-is-slow-ftp-host))
@ -2268,9 +2267,10 @@ If INITIAL is non-nil, it specifies the initial input string."
(unless filename
(setq ido-saved-vc-hb vc-handled-backends)
(let ((minibuffer-completing-file-name t))
(setq filename (ido-read-internal item
(or prompt "Find file: ")
'ido-file-history nil nil initial)))
'ido-file-history nil nil initial))))
;; Choose the file name: either the text typed in, or the head
;; of the list of matches
@ -2426,13 +2426,13 @@ If INITIAL is non-nil, it specifies the initial input string."
((and (= 1 (length ido-matches))
(not (and ido-enable-tramp-completion
(string-equal ido-current-directory "/")
(string-match "..[@:]\\'" (car ido-matches)))))
(string-match "..[@:]\\'" (ido-name (car ido-matches))))))
;; only one choice, so select it.
(if (not ido-confirm-unique-completion)
(exit-minibuffer)
(setq ido-rescan (not ido-enable-prefix))
(delete-region (minibuffer-prompt-end) (point))
(insert (car ido-matches))))
(insert (ido-name (car ido-matches)))))
(t ;; else there could be some completions
(setq res ido-common-match-string)
@ -2814,7 +2814,7 @@ If input stack is non-empty, delete current directory component."
"Use first matching item as input text."
(interactive)
(when ido-matches
(setq ido-text-init (car ido-matches))
(setq ido-text-init (ido-name (car ido-matches)))
(setq ido-exit 'refresh)
(exit-minibuffer)))
@ -2828,7 +2828,7 @@ If input stack is non-empty, delete current directory component."
"Move to previous directory in file name, push first match on stack."
(interactive)
(if ido-matches
(setq ido-text (car ido-matches)))
(setq ido-text (ido-name (car ido-matches))))
(setq ido-exit 'push)
(exit-minibuffer))
@ -3083,13 +3083,15 @@ for first matching file."
(defun ido-file-extension-aux (a b n lessp)
(let ((oa (ido-file-extension-order a n))
(ob (ido-file-extension-order b n)))
(cond
((and oa ob)
(cond
((= oa ob)
lessp)
((and oa ob)
(if lessp
(> oa ob)
(< oa ob)))
(lessp
(> oa ob))
(t
(< oa ob))))
(oa
(not lessp))
(ob
@ -3136,7 +3138,12 @@ for first matching file."
(let ((filenames
(split-string
(shell-command-to-string
(concat "find " dir " -name \"" (if prefix "" "*") file "*\" -type " (if finddir "d" "f") " -print"))))
(concat "find "
(shell-quote-argument dir)
" -name "
(shell-quote-argument
(concat (if prefix "" "*") file "*"))
" -type " (if finddir "d" "f") " -print"))))
filename d f
res)
(while filenames
@ -3618,7 +3625,7 @@ for first matching file."
((stringp nextstr)
(and (>= flen (setq slen (length nextstr)))
(string-equal (substring name (- flen slen)) nextstr)))
((fboundp nextstr) (funcall nextstr name))
((functionp nextstr) (funcall nextstr name))
(t nil))
(setq ignorep t
ext-list nil
@ -3628,7 +3635,7 @@ for first matching file."
(setq nextstr (car re-list))
(if (cond
((stringp nextstr) (string-match nextstr name))
((fboundp nextstr) (funcall nextstr name))
((functionp nextstr) (funcall nextstr name))
(t nil))
(setq ignorep t
re-list nil)
@ -3745,7 +3752,7 @@ for first matching file."
"Kill the buffer at the head of `ido-matches'."
(interactive)
(let ((enable-recursive-minibuffers t)
(buf (car ido-matches)))
(buf (ido-name (car ido-matches))))
(when buf
(kill-buffer buf)
;; Check if buffer still exists.
@ -3760,7 +3767,7 @@ for first matching file."
"Delete the file at the head of `ido-matches'."
(interactive)
(let ((enable-recursive-minibuffers t)
(file (car ido-matches)))
(file (ido-name (car ido-matches))))
(if file
(setq file (concat ido-current-directory file)))
(when (and file
@ -3781,7 +3788,8 @@ for first matching file."
(defun ido-visit-buffer (buffer method &optional record)
"Switch to BUFFER according to METHOD.
Record command in `command-history' if optional RECORD is non-nil."
(if (bufferp buffer)
(setq buffer (buffer-name buffer)))
(let (win newframe)
(cond
((eq method 'kill)
@ -4201,7 +4209,7 @@ For details of keybindings, do `\\[describe-function] ido-find-file'."
((= (length contents) 2)
"/")
(ido-matches
(concat ido-current-directory (car ido-matches)))
(concat ido-current-directory (ido-name (car ido-matches))))
(t
(concat ido-current-directory (substring contents 0 -1)))))
(setq ido-text-init (substring contents -1))
@ -4237,12 +4245,12 @@ For details of keybindings, do `\\[describe-function] ido-find-file'."
ido-matches
(or (eq ido-enter-matching-directory 'first)
(null (cdr ido-matches)))
(ido-final-slash (car ido-matches))
(ido-final-slash (ido-name (car ido-matches)))
(or try-single-dir-match
(eq ido-enter-matching-directory t)))
(ido-trace "single match" (car ido-matches))
(ido-set-current-directory
(concat ido-current-directory (car ido-matches)))
(concat ido-current-directory (ido-name (car ido-matches))))
(setq ido-exit 'refresh)
(exit-minibuffer))

View file

@ -60,16 +60,19 @@ to toggle between display as an image and display as text."
(setq major-mode 'image-mode)
(use-local-map image-mode-map)
(add-hook 'change-major-mode-hook 'image-toggle-display-text nil t)
(if (not (get-text-property (point-min) 'display))
(if (and (display-images-p)
(not (get-text-property (point-min) 'display)))
(image-toggle-display)
;; Set next vars when image is already displayed but local
;; variables were cleared by kill-all-local-variables
(setq cursor-type nil truncate-lines t))
(run-mode-hooks 'image-mode-hook)
(message "%s" (concat (substitute-command-keys
(if (display-images-p)
(message "%s" (concat
(substitute-command-keys
"Type \\[image-toggle-display] to view the image as ")
(if (get-text-property (point-min) 'display)
"text" "an image") ".")))
"text" "an image") "."))))
;;;###autoload
(define-minor-mode image-minor-mode

View file

@ -967,15 +967,15 @@ A trivial interface to `imenu-add-to-menubar' suitable for use in a hook."
(defvar imenu-buffer-menubar nil)
(defvar imenu-menubar-modified-tick 0
"The value of (buffer-modified-tick) as of last call to `imenu-update-menubar'.")
"The value of (buffer-chars-modified-tick) as of the last call
to `imenu-update-menubar'.")
(make-variable-buffer-local 'imenu-menubar-modified-tick)
(defun imenu-update-menubar ()
(when (and (current-local-map)
(keymapp (lookup-key (current-local-map) [menu-bar index]))
(not (eq (buffer-modified-tick)
imenu-menubar-modified-tick)))
(setq imenu-menubar-modified-tick (buffer-modified-tick))
(/= (buffer-chars-modified-tick) imenu-menubar-modified-tick))
(setq imenu-menubar-modified-tick (buffer-chars-modified-tick))
(let ((index-alist (imenu--make-index-alist t)))
;; Don't bother updating if the index-alist has not changed
;; since the last time we did it.

View file

@ -843,12 +843,13 @@ Return nil if there is nothing appropriate in the buffer near point."
(info-lookup-maybe-add-help
:mode 'maxima-mode
:ignore-case t
:regexp "[a-zA-Z_%]+"
:regexp "[a-zA-Z0-9_%]+"
:doc-spec '( ("(maxima)Function and Variable Index" nil
"^ -+ [^:]+:[ ]+\\(\\[[^=]*=[ ]+\\)?" nil)))
(info-lookup-maybe-add-help
:mode 'inferior-maxima-mode
:regexp "[a-zA-Z0-9_%]+"
:other-modes '(maxima-mode))
;; coreutils and bash builtins overlap in places, eg. printf, so there's a

Some files were not shown because too many files have changed in this diff Show more