123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543 |
- GNU Emacs NEWS -- history of user-visible changes. 1992.
- Copyright (C) 1993-1995, 2001, 2006-2012 Free Software Foundation, Inc.
- See the end of the file for license conditions.
- This file is about changes in emacs versions 19.
- * Emacs 19.34 is a bug-fix release with no user-visible changes.
- * Changes in Emacs 19.33.
- ** Bibtex mode no longer turns on Auto Fill automatically. (No major
- mode should do that--it is the user's choice.)
- ** The variable normal-auto-fill-function specifies the function to
- use for auto-fill-function, if and when Auto Fill is turned on.
- Major modes can set this locally to alter how Auto Fill works.
- * Editing Changes in Emacs 19.32
- ** C-x f with no argument now signals an error.
- To set the fill column at the current column, use C-u C-x f.
- ** Expanding dynamic abbrevs with M-/ is now smarter about case
- conversion. If you type the abbreviation with mixed case, and it
- matches the beginning of the expansion including case, then the
- expansion is copied verbatim. Using SPC M-/ to copy an additional
- word always copies it verbatim except when the previous copied word is
- all caps.
- ** On a non-windowing terminal, which can display only one Emacs frame
- at a time, creating a new frame with C-x 5 2 also selects that frame.
- When using a display that can show multiple frames at once, C-x 5 2
- does make the frame visible, but does not select it. This is the same
- as in previous Emacs versions.
- ** You can use C-x 5 2 to create multiple frames on MSDOS, just as on a
- non-X terminal on Unix. Of course, only one frame is visible at any
- time, since your terminal doesn't have the ability to display multiple
- frames.
- ** On Windows, set win32-pass-alt-to-system to a non-nil value
- if you would like tapping the Alt key to invoke the Windows menu.
- This feature is not enabled by default; since the Alt key is also the
- Meta key, it is too easy and painful to activate this feature by
- accident.
- ** The command apply-macro-to-region-lines repeats the last defined
- keyboard macro once for each complete line within the current region.
- It does this line by line, by moving point to the beginning of that
- line and then executing the macro.
- This command is not new, but was never documented before.
- ** You can now use Mouse-1 to place the region around a string constant
- (something surrounded by doublequote characters or other delimiter
- characters of like syntax) by double-clicking on one of the delimiting
- characters.
- ** Font Lock mode
- *** Font Lock support modes
- Font Lock can be configured to use Fast Lock mode and Lazy Lock mode (see
- below) in a flexible way. Rather than adding the appropriate function to the
- hook font-lock-mode-hook, you can use the new variable font-lock-support-mode
- to control which modes have Fast Lock mode or Lazy Lock mode turned on when
- Font Lock mode is enabled.
- For example, to use Fast Lock mode when Font Lock mode is turned on, put:
- (setq font-lock-support-mode 'fast-lock-mode)
- in your ~/.emacs.
- *** lazy-lock
- The lazy-lock package speeds up Font Lock mode by making fontification occur
- only when necessary, such as when a previously unfontified part of the buffer
- becomes visible in a window. When you create a buffer with Font Lock mode and
- Lazy Lock mode turned on, the buffer is not fontified. When certain events
- occur (such as scrolling), Lazy Lock makes sure that the visible parts of the
- buffer are fontified. Lazy Lock also defers on-the-fly fontification until
- Emacs has been idle for a given amount of time.
- To use this package, put in your ~/.emacs:
- (setq font-lock-support-mode 'lazy-lock-mode)
- To control the package behavior, see the documentation for `lazy-lock-mode'.
- ** Changes in BibTeX mode.
- *** For all entries allow spaces and tabs between opening brace or
- paren and key.
- *** Non-escaped double-quoted characters (as in `Sch"of') are now
- supported.
- ** Gnus changes.
- Gnus, the Emacs news reader, has undergone further rewriting. Many new
- commands and variables have been added. There should be no
- significant incompatibilities between this Gnus version and the
- previously released version, except in the message composition area.
- Below is a list of the more user-visible changes. Coding changes
- between Gnus 5.1 and 5.2 are more extensive.
- *** A new message composition mode is used. All old customization
- variables for mail-mode, rnews-reply-mode and gnus-msg are now
- obsolete.
- *** Gnus is now able to generate "sparse" threads -- threads where
- missing articles are represented by empty nodes.
- (setq gnus-build-sparse-threads 'some)
- *** Outgoing articles are stored on a special archive server.
- To disable this: (setq gnus-message-archive-group nil)
- *** Partial thread regeneration now happens when articles are
- referred.
- *** Gnus can make use of GroupLens predictions:
- (setq gnus-use-grouplens t)
- *** A trn-line tree buffer can be displayed.
- (setq gnus-use-trees t)
- *** An nn-like pick-and-read minor mode is available for the summary
- buffers.
- (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
- *** In binary groups you can use a special binary minor mode:
- `M-x gnus-binary-mode'
- *** Groups can be grouped in a folding topic hierarchy.
- (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
- *** Gnus can re-send and bounce mail.
- Use the `S D r' and `S D b'.
- *** Groups can now have a score, and bubbling based on entry frequency
- is possible.
- (add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group)
- *** Groups can be process-marked, and commands can be performed on
- groups of groups.
- *** Caching is possible in virtual groups.
- *** nndoc now understands all kinds of digests, mail boxes, rnews news
- batches, ClariNet briefs collections, and just about everything else.
- *** Gnus has a new backend (nnsoup) to create/read SOUP packets.
- *** The Gnus cache is much faster.
- *** Groups can be sorted according to many criteria.
- For instance: (setq gnus-group-sort-function 'gnus-group-sort-by-rank)
- *** New group parameters have been introduced to set list-address and
- expiration times.
- *** All formatting specs allow specifying faces to be used.
- *** There are several more commands for setting/removing/acting on
- process marked articles on the `M P' submap.
- *** The summary buffer can be limited to show parts of the available
- articles based on a wide range of criteria. These commands have been
- bound to keys on the `/' submap.
- *** Articles can be made persistent -- as an alternative to saving
- articles with the `*' command.
- *** All functions for hiding article elements are now toggles.
- *** Article headers can be buttonized.
- (add-hook 'gnus-article-display-hook 'gnus-article-add-buttons-to-head)
- *** All mail backends support fetching articles by Message-ID.
- *** Duplicate mail can now be treated properly. See the
- `nnmail-treat-duplicates' variable.
- *** All summary mode commands are available directly from the article
- buffer.
- *** Frames can be part of `gnus-buffer-configuration'.
- *** Mail can be re-scanned by a daemonic process.
- *** Gnus can make use of NoCeM files to filter spam.
- (setq gnus-use-nocem t)
- *** Groups can be made permanently visible.
- (setq gnus-permanently-visible-groups "^nnml:")
- *** Many new hooks have been introduced to make customizing easier.
- *** Gnus respects the Mail-Copies-To header.
- *** Threads can be gathered by looking at the References header.
- (setq gnus-summary-thread-gathering-function
- 'gnus-gather-threads-by-references)
- *** Read articles can be stored in a special backlog buffer to avoid
- refetching.
- (setq gnus-keep-backlog 50)
- *** A clean copy of the current article is always stored in a separate
- buffer to allow easier treatment.
- *** Gnus can suggest where to save articles. See `gnus-split-methods'.
- *** Gnus doesn't have to do as much prompting when saving.
- (setq gnus-prompt-before-saving t)
- *** gnus-uu can view decoded files asynchronously while fetching
- articles.
- (setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view)
- *** Filling in the article buffer now works properly on cited text.
- *** Hiding cited text adds buttons to toggle hiding, and how much
- cited text to hide is now customizable.
- (setq gnus-cited-lines-visible 2)
- *** Boring headers can be hidden.
- (add-hook 'gnus-article-display-hook 'gnus-article-hide-boring-headers)
- *** Default scoring values can now be set from the menu bar.
- *** Further syntax checking of outgoing articles have been added.
- The Gnus manual has been expanded. It explains all these new features
- in greater detail.
- * Lisp Changes in Emacs 19.32
- ** The function set-visited-file-name now accepts an optional
- second argument NO-QUERY. If it is non-nil, then the user is not
- asked for confirmation in the case where the specified file already
- exists.
- ** The variable print-length applies to printing vectors and bitvectors,
- as well as lists.
- ** The new function keymap-parent returns the parent keymap
- of a given keymap.
- ** The new function set-keymap-parent specifies a new parent for a
- given keymap. The arguments are KEYMAP and PARENT. PARENT must be a
- keymap or nil.
- ** Sometimes menu keymaps use a command name, a symbol, which is really
- an automatically generated alias for some other command, the "real"
- name. In such a case, you should give that alias symbol a non-nil
- menu-alias property. That property tells the menu system to look for
- equivalent keys for the real name instead of equivalent keys for the
- alias.
- * Editing Changes in Emacs 19.31
- ** Freedom of the press restricted in the United States.
- Emacs has been censored in accord with the Communications Decency Act.
- This includes removing some features of the doctor program. That law
- was described by its supporters as a ban on pornography, but it bans
- far more than that. The Emacs distribution has never contained any
- pornography, but parts of it were nonetheless prohibited.
- For information on US government censorship of the Internet, and what
- you can do to bring back freedom of the press, see the web site
- `http://www.vtw.org/'.
- ** A note about C mode indentation customization.
- The old (Emacs 19.29) ways of specifying a C indentation style
- do not normally work in the new implementation of C mode.
- It has its own methods of customizing indentation, which are
- much more powerful than the old C mode. See the Editing Programs
- chapter of the manual for details.
- However, you can load the library cc-compat to make the old
- customization variables take effect.
- ** Marking with the mouse.
- When you mark a region with the mouse, the region now remains
- highlighted until the next input event, regardless of whether you are
- using M-x transient-mark-mode.
- ** Improved Windows NT/95 support.
- *** Emacs now supports scroll bars on Windows NT and Windows 95.
- *** Emacs now supports subprocesses on Windows 95. (Subprocesses used
- to work on NT only and not on 95.)
- *** There are difficulties with subprocesses, though, due to problems
- in Windows, beyond the control of Emacs. They work fine as long as
- you run Windows applications. The problems arise when you run a DOS
- application in a subprocesses. Since current shells run as DOS
- applications, these problems are significant.
- If you run a DOS application in a subprocess, then the application is
- likely to busy-wait, which means that your machine will be 100% busy.
- However, if you don't mind the temporary heavy load, the subprocess
- will work OK as long as you tell it to terminate before you start any
- other DOS application as a subprocess.
- Emacs is unable to terminate or interrupt a DOS subprocess.
- You have to do this by providing input directly to the subprocess.
- If you run two DOS applications at the same time in two separate
- subprocesses, even if one of them is asynchronous, you will probably
- have to reboot your machine--until then, it will remain 100% busy.
- Windows simply does not cope when one Windows process tries to run two
- separate DOS subprocesses. Typing CTL-ALT-DEL and then choosing
- Shutdown seems to work although it may take a few minutes.
- ** M-x resize-minibuffer-mode.
- This command, not previously mentioned in NEWS, toggles a mode in
- which the minibuffer window expands to show as many lines as the
- minibuffer contains.
- ** `title' frame parameter and resource.
- The `title' X resource now specifies just the frame title, nothing else.
- It does not affect the name used for looking up other X resources.
- It works by setting the new `title' frame parameter, which likewise
- affects just the displayed title of the frame.
- The `name' parameter continues to do what it used to do:
- it specifies the frame name for looking up X resources,
- and also serves as the default for the displayed title
- when the `title' parameter is unspecified or nil.
- ** Emacs now uses the X toolkit by default, if you have a new
- enough version of X installed (X11R5 or newer).
- ** When you compile Emacs with the Motif widget set, Motif handles the
- F10 key by activating the menu bar. To avoid confusion, the usual
- Emacs binding of F10 is replaced with a no-op when using Motif.
- If you want to be able to use F10 in Emacs, you can rebind the Motif
- menubar to some other key which you don't use. To do so, add
- something like this to your X resources file. This example rebinds
- the Motif menu bar activation key to S-F12:
- Emacs*defaultVirtualBindings: osfMenuBar : Shift<Key>F12
- ** In overwrite mode, DEL now inserts spaces in most cases
- to replace the characters it "deletes".
- ** The Rmail summary now shows the number of lines in each message.
- ** Rmail has a new command M-x unforward-rmail-message, which extracts
- a forwarded message from the message that forwarded it. To use it,
- select a message which contains a forwarded message and then type the command.
- It inserts the forwarded message as a separate Rmail message
- immediately after the selected one.
- This command also undoes the textual modifications that are standardly
- made, as part of forwarding, by Rmail and other mail reader programs.
- ** Turning off saving of .saves-... files in your home directory.
- Each Emacs session writes a file named .saves-... in your home
- directory to record which files M-x recover-session should recover.
- If you exit Emacs normally with C-x C-c, it deletes that file. If
- Emacs or the operating system crashes, the file remains for M-x
- recover-session.
- You can turn off the writing of these files by setting
- auto-save-list-file-name to nil. If you do this, M-x recover-session
- will not work.
- Some previous Emacs versions failed to delete these files even on
- normal exit. This is fixed now. If you are thinking of turning off
- this feature because of past experiences with versions that had this
- bug, it would make sense to check whether you still want to do so
- now that the bug is fixed.
- ** Changes to Version Control (VC)
- There is a new variable, vc-follow-symlinks. It indicates what to do
- when you visit a link to a file that is under version control.
- Editing the file through the link bypasses the version control system,
- which is dangerous and probably not what you want.
- If this variable is t, VC follows the link and visits the real file,
- telling you about it in the echo area. If it is `ask' (the default),
- VC asks for confirmation whether it should follow the link. If nil,
- the link is visited and a warning displayed.
- ** iso-acc.el now lets you specify a choice of language.
- Languages include "latin-1" (the default) and "latin-2" (which
- is designed for entering ISO Latin-2 characters).
- There are also choices for specific human languages such as French and
- Portuguese. These are subsets of Latin-1, which differ in that they
- enable only the accent characters needed for particular language.
- The other accent characters, not needed for the chosen language,
- remain normal.
- ** Posting articles and sending mail now has M-TAB completion on various
- header fields (Newsgroups, To, CC, ...).
- Completion in the Newsgroups header depends on the list of groups
- known to your news reader. Completion in the Followup-To header
- offers those groups which are in the Newsgroups header, since
- Followup-To usually just holds one of those.
- Completion in fields that hold mail addresses works based on the list
- of local users plus your aliases. Additionally, if your site provides
- a mail directory or a specific host to use for any unrecognized user
- name, you can arrange to query that host for completion also. (See the
- documentation of variables `mail-directory-process' and
- `mail-directory-stream'.)
- ** A greatly extended sgml-mode offers new features such as (to be configured)
- skeletons with completing read for tags and attributes, typing named
- characters including optionally all 8bit characters, making tags invisible
- with optional alternate display text, skipping and deleting tag(pair)s.
- Note: since Emacs' syntax feature cannot limit the special meaning of ', " and
- - to inside <>, for some texts the result, especially of font locking, may be
- wrong (see `sgml-specials' if you get wrong results).
- The derived html-mode configures this with tags and attributes more or
- less HTML3ish. It also offers optional quick keys like C-c 1 for
- headline or C-c u for unordered list (see `html-quick-keys'). Edit /
- Text Properties / Face or M-g combinations create tags as applicable.
- Outline minor mode is supported and level 1 font-locking tries to
- fontify tag contents (which only works when they fit on one line, due
- to a limitation in font-lock).
- External viewing via browse-url can occur automatically upon saving.
- ** M-x imenu-add-to-menubar now adds to the menu bar for the current
- buffer only. If you want to put an Imenu item in the menu bar for all
- buffers that use a particular major mode, use the mode hook, as in
- this example:
- (add-hook 'emacs-lisp-mode-hook
- '(lambda () (imenu-add-to-menubar "Index")))
- ** Changes in BibTeX mode.
- *** Field names may now contain digits, hyphens, and underscores.
- *** Font Lock mode is now supported.
- *** bibtex-make-optional-field is no longer interactive.
- *** If bibtex-maintain-sorted-entries is non-nil, inserting new
- entries is now done with a faster algorithm. However, inserting
- will fail in this case if the buffer contains invalid entries or
- isn't in sorted order, so you should finish each entry with C-c C-c
- (bibtex-close-entry) after you have inserted or modified it.
- The default value of bibtex-maintain-sorted-entries is nil.
- *** Function `show-all' is no longer bound to a key, since C-u C-c C-q
- does the same job.
- *** Entries with quotes inside quote-delimited fields (as `author =
- "Stefan Sch{\"o}f"') are now supported.
- *** Case in field names doesn't matter anymore when searching for help
- text.
- ** Font Lock mode
- *** Global Font Lock mode
- Font Lock mode can be turned on globally, in buffers that support it, by the
- new command global-font-lock-mode. You can use the new variable
- font-lock-global-modes to control which modes have Font Lock mode automagically
- turned on. By default, this variable is set so that Font Lock mode is turned
- on globally where the buffer mode supports it.
- For example, to automagically turn on Font Lock mode where supported, put:
- (global-font-lock-mode t)
- in your ~/.emacs.
- *** Local Refontification
- In Font Lock mode, editing a line automatically refontifies that line only.
- However, if your change alters the syntactic context for following lines,
- those lines remain incorrectly fontified. To refontify them, use the new
- command M-g M-g (font-lock-fontify-block).
- In certain major modes, M-g M-g refontifies the entire current function.
- (The variable font-lock-mark-block-function controls how to find the
- current function.) In other major modes, M-g M-g refontifies 16 lines
- above and below point.
- With a prefix argument N, M-g M-g refontifies N lines above and below point.
- ** Follow mode
- Follow mode is a new minor mode combining windows showing the same
- buffer into one tall "virtual window". The windows are typically two
- side-by-side windows. Follow mode makes them scroll together as if
- they were a unit. To use it, go to a frame with just one window,
- split it into two side-by-side windows using C-x 3, and then type M-x
- follow-mode.
- M-x follow-mode turns off Follow mode if it is already enabled.
- To display two side-by-side windows and activate Follow mode, use the
- command M-x follow-delete-other-windows-and-split.
- ** hide-show changes.
- The hooks hs-hide-hooks and hs-show-hooks have been renamed
- to hs-hide-hook and hs-show-hook, to follow the convention for
- normal hooks.
- ** Simula mode now has a menu containing the most important commands.
- The new command simula-indent-exp is bound to C-M-q.
- ** etags can now handle programs written in Erlang. Files are
- recognized by the extensions .erl and .hrl. The tagged lines are
- those that begin a function, record, or macro.
- ** MSDOS Changes
- *** It is now possible to compile Emacs with the version 2 of DJGPP.
- Compilation with DJGPP version 1 also still works.
- *** The documentation of DOS-specific aspects of Emacs was rewritten
- and expanded; see the ``MS-DOS'' node in the on-line docs.
- *** Emacs now uses ~ for backup file names, not .bak.
- *** You can simulate mouse-3 on two-button mice by simultaneously
- pressing both mouse buttons.
- *** A number of packages and commands which previously failed or had
- restricted functionality on MS-DOS, now work. The most important ones
- are:
- **** Printing (both with `M-x lpr-buffer' and with `ps-print' package)
- now works.
- **** `Ediff' works (in a single-frame mode).
- **** `M-x display-time' can be used on MS-DOS (due to the new
- implementation of Emacs timers, see below).
- **** `Dired' supports Unix-style shell wildcards.
- **** The `c-macro-expand' command now works as on other platforms.
- **** `M-x recover-session' works.
- **** `M-x list-colors-display' displays all the available colors.
- **** The `TPU-EDT' package works.
- * Lisp changes in Emacs 19.31.
- ** The function using-unix-filesystems on Windows NT and Windows 95
- tells Emacs to read and write files assuming that they reside on a
- remote Unix filesystem. No CR/LF translation is done on any files in
- this case. Invoking using-unix-filesystems with t activates this
- behavior, and invoking it with any other value deactivates it.
- ** Change in system-type and system-configuration values.
- The value of system-type on a Linux-based GNU system is now `lignux',
- not `linux'. This means that some programs which use `system-type'
- need to be changed. The value of `system-configuration' will also
- be different.
- It is generally recommended to use `system-configuration' rather
- than `system-type'.
- See the file LINUX-GNU in this directory for more about this.
- ** The functions shell-command and dired-call-process
- now run file name handlers for default-directory, if it has them.
- ** Undoing the deletion of text now restores the positions of markers
- that pointed into or next to the deleted text.
- ** Timers created with run-at-time now work internally to Emacs, and
- no longer use a separate process. Therefore, they now work more
- reliably and can be used for shorter time delays.
- The new function run-with-timer is a convenient way to set up a timer
- to run a specified amount of time after the present. A call looks
- like this:
- (run-with-timer SECS REPEAT FUNCTION ARGS...)
- SECS says how many seconds should elapse before the timer happens.
- It may be an integer or a floating point number. When the timer
- becomes ripe, the action is to call FUNCTION with arguments ARGS.
- REPEAT gives the interval for repeating the timer (measured in
- seconds). It may be an integer or a floating point number. nil or 0
- means don't repeat at all--call FUNCTION just once.
- *** with-timeout provides an easy way to do something but give
- up if too much time passes.
- (with-timeout (SECONDS TIMEOUT-FORMS...) BODY...)
- This executes BODY, but gives up after SECONDS seconds.
- If it gives up, it runs the TIMEOUT-FORMS and returns the value
- of the last one of them. Normally it returns the value of the last
- form in BODY.
- *** You can now arrange to call a function whenever Emacs is idle for
- a certain length of time. To do this, call run-with-idle-timer. A
- call looks like this:
- (run-with-idle-timer SECS REPEAT FUNCTION ARGS...)
- SECS says how many seconds of idleness should elapse before the timer
- runs. It may be an integer or a floating point number. When the
- timer becomes ripe, the action is to call FUNCTION with arguments
- ARGS.
- Emacs becomes idle whenever it finishes executing a keyboard or mouse
- command. It remains idle until it receives another keyboard or mouse
- command.
- REPEAT, if non-nil, means this timer should be activated again each
- time Emacs becomes idle and remains idle for SECS seconds The timer
- does not repeat if Emacs *remains* idle; it runs at most once after
- each time Emacs becomes idle.
- If REPEAT is nil, the timer runs just once, the first time Emacs is
- idle for SECS seconds.
- *** post-command-idle-hook is now obsolete; you shouldn't use it at
- all, because it interferes with the idle timer mechanism. If your
- programs use post-command-idle-hook, convert them to use idle timers
- instead.
- *** y-or-n-p-with-timeout lets you ask a question but give up if
- there is no answer within a certain time.
- (y-or-n-p-with-timeout PROMPT SECONDS DEFAULT-VALUE)
- asks the question PROMPT (just like y-or-n-p). If the user answers
- within SECONDS seconds, it returns the answer that the user gave.
- Otherwise it gives up after SECONDS seconds, and returns DEFAULT-VALUE.
- ** Minor change to `encode-time': you can now pass more than seven
- arguments. If you do that, the first six arguments have the usual
- meaning, the last argument is interpreted as the time zone, and the
- arguments in between are ignored.
- This means that it works to use the list returned by `decode-time' as
- the list of arguments for `encode-time'.
- ** The default value of load-path now includes the directory
- /usr/local/share/emacs/VERSION/site-lisp In addition to
- /usr/local/share/emacs/site-lisp. You can use this new directory for
- site-specific Lisp packages that belong with a particular Emacs
- version.
- It is not unusual for a Lisp package that works well in one Emacs
- version to cause trouble in another. Sometimes packages need updating
- for incompatible changes; sometimes they look at internal data that
- has changed; sometimes the package has been installed in Emacs itself
- and the installed version should be used. Whatever the reason for the
- problem, this new feature makes it easier to solve.
- ** When your program contains a fixed file name (like .completions or
- .abbrev.defs), the file name usually needs to be different on operating
- systems with limited file name syntax.
- Now you can avoid ad-hoc conditionals by using the function
- convert-standard-filename to convert the file name to a proper form
- for each operating system. Here is an example of use, from the file
- completions.el:
- (defvar save-completions-file-name
- (convert-standard-filename "~/.completions")
- "*The filename to save completions to.")
- This sets the variable save-completions-file-name to a value that
- depends on the operating system, because the definition of
- convert-standard-filename depends on the operating system. On
- Unix-like systems, it returns the specified file name unchanged. On
- MS-DOS, it adapts the name to fit the limitations of that system.
- ** The interactive spec N now returns the numeric prefix argument
- rather than the raw prefix argument. (It still reads a number using the
- minibuffer if there is no prefix argument at all.)
- ** When a process is deleted, this no longer disconnects the process
- marker from its buffer position.
- ** The variable garbage-collection-messages now controls whether
- Emacs displays a message at the beginning and end of garbage collection.
- The default is nil, meaning there are no messages.
- ** The variable debug-ignored-errors specifies certain kinds of errors
- that should not enter the debugger. Its value is a list of error
- condition symbols and/or regular expressions. If the error has any
- of the condition symbols listed, or if any of the regular expressions
- matches the error message, then that error does not enter the debugger,
- regardless of the value of debug-on-error.
- This variable is initialized to match certain common but uninteresting
- errors that happen often during editing.
- ** The new function error-message-string converts an error datum
- into its error message. The error datum is what condition-case
- puts into the variable, to describe the error that happened.
- ** Anything that changes which buffer appears in a given window
- now runs the window-scroll-functions for that window.
- ** The new function get-buffer-window-list returns a list of windows displaying
- a buffer. The function is called with the buffer (a buffer object or a buffer
- name) and two optional arguments specifying the minibuffer windows and frames
- to search. Therefore this function takes optional args like next-window etc.,
- and not get-buffer-window.
- ** buffer-substring now runs the hook buffer-access-fontify-functions,
- calling each function with two arguments--the range of the buffer
- being accessed. buffer-substring-no-properties does not call them.
- If you use this feature, you should set the variable
- buffer-access-fontified-property to a non-nil symbol, which is a
- property name. Then, if all the characters in the buffer range have a
- non-nil value for that property, the buffer-access-fontify-functions
- are not called. When called, these functions should put a non-nil
- property on the text that they fontify, so that they won't get called
- over and over for the same text.
- ** Changes in lisp-mnt.el
- *** The lisp-mnt package can now recognize file headers that are written
- in the formats used by the `what' command and the RCS `ident' command:
- ;; @(#) HEADER: text
- ;; $HEADER: text $
- in addition to the normal
- ;; HEADER: text
- *** The commands lm-verify and lm-synopsis are now interactive. lm-verify
- checks that the library file has proper sections and headers, and
- lm-synopsis extracts first line "synopsis'"information.
- * Editing Changes in Emacs 19.30.
- ** Be sure to recompile your byte-compiled Emacs Lisp files
- if you last compiled them with Emacs 19.28 or earlier.
- You can use M-x byte-force-recompile to recompile all the .elc files
- in a specified directory.
- ** Emacs now provides multiple-frame support on Windows NT
- and Windows 95.
- ** M-x column-number-mode toggles a minor mode which displays
- the current column number in the mode line.
- ** Line Number mode is now enabled by default.
- ** M-x what-line now displays the line number in the accessible
- portion of the buffer as well as the line number in the full buffer,
- when narrowing is in effect.
- ** If you type a M-x command that has an equivalent key binding,
- the equivalent is shown in the minibuffer before the command executes.
- This feature is enabled by default for the sake of beginning users.
- You can turn the feature off by setting suggest-key-bindings to nil.
- ** The menu bar is now visible on text-only terminals. To choose a
- command from the menu bar when you have no mouse, type M-`
- (Meta-Backquote) or F10. To turn off menu bar display,
- do (menu-bar-mode -1).
- ** Whenever you invoke a minibuffer, it appears in the minibuffer
- window that the current frame uses.
- Emacs can only use one minibuffer window at a time. If you activate
- the minibuffer while a minibuffer window is active in some other
- frame, the outer minibuffer window disappears while the inner one is
- active.
- ** Echo area messages always appear in the minibuffer window that the
- current frame uses. If a minibuffer is active in some other frame,
- the echo area message does not hide it even temporarily.
- ** The minibuffer now has a menu-bar menu. You can use it to exit or
- abort the minibuffer, or to ask for completion.
- ** Dead-key and composite character processing is done in the standard
- X11R6 manner (through the default "input method" using the
- /usr/lib/X11/locale/*/Compose databases of key combinations). I.e. if
- it works in xterm, it should also work in emacs now.
- ** Mouse changes
- *** You can now use the mouse when running Emacs in an xterm.
- Use M-x xterm-mouse-mode to let emacs take control over the mouse.
- *** C-mouse-1 now once again provides a menu of buffers to select.
- S-mouse-1 is now the way to select a default font for the frame.
- *** There is a new mouse-scroll-min-lines variable to control the
- minimum number of lines scrolled by dragging the mouse outside a
- window's edge.
- *** Dragging mouse-1 on a vertical line that separates windows
- now moves the line, thus changing the widths of the two windows.
- (This feature is available only if you don't have vertical scroll bars.
- If you do use them, a scroll bar separates two side-by-side windows.)
- *** Double-click mouse-1 on a character with "symbol" syntax (such as
- underscore, in C mode) selects the entire symbol surrounding that
- character. (Double-click mouse-1 on a letter selects a whole word.)
- ** When incremental search wraps around to the beginning (or end) of
- the buffer, if you keep on searching until you go past the original
- starting point of the search, the echo area changes from "Wrapped" to
- "Overwrapped". That tells you that you are revisiting matches that
- you have already seen.
- ** Filling changes.
- *** If the variable colon-double-space is non-nil, the explicit fill
- commands put two spaces after a colon.
- *** Auto-Fill mode now supports Adaptive Fill mode just as the
- explicit fill commands do. The variable adaptive-fill-regexp
- specifies a regular expression to match text at the beginning of
- a line that should be the fill prefix.
- *** Adaptive Fill mode can take a fill prefix from the first line of a
- paragraph, *provided* that line is not a paragraph-starter line.
- Paragraph-starter lines are indented lines that start a new
- paragraph because they are indented. This indentation shouldn't
- be copied to additional lines.
- Whether indented lines are paragraph lines depends on the value of the
- variable paragraph-start. Some major modes set this; you can set it
- by hand or in mode hooks as well. For editing text in which paragraph
- first lines are not indented, and which contains paragraphs in which
- all lines are indented, you should use Indented Text mode or arrange
- for paragraph-start not to match these lines.
- *** You can specify more complex ways of choosing a fill prefix
- automatically by setting `adaptive-fill-function'. This function
- is called with point after the left margin of a line, and it should
- return the appropriate fill prefix based on that line.
- If it returns nil, that means it sees no fill prefix in that line.
- ** Gnus changes.
- Gnus, the Emacs news reader, has been rewritten and expanded. Most
- things that worked with the old version should still work with the new
- version. Code that relies heavily on Gnus internals is likely to
- fail, though.
- *** Incompatibilities with the old GNUS.
- **** All interactive commands have kept their names, but many internal
- functions have changed names.
- **** The summary mode gnus-uu commands have been moved from the `C-c
- C-v' keymap to the `X' keymap.
- **** There can now be several summary buffers active at once.
- Variables that are relevant to each summary buffer are buffer-local to
- that buffer.
- **** Old hilit code doesn't work at all. Gnus performs its own
- highlighting based not only on what's visible in the buffer, but on
- other data structures.
- **** Old packages like `expire-kill' will no longer work.
- **** `C-c C-l' in the group buffer no longer switches to a different
- buffer, but instead lists killed groups in the group buffer.
- *** New features.
- **** The look of all buffers can be changed by setting format-like
- variables.
- **** Local spool and several NNTP servers can be used at once.
- **** Groups can be combined into virtual groups.
- **** Different mail formats can be read much the same way as one would
- read newsgroups. All the mail backends implement mail expiry schemes.
- **** Gnus can use various strategies for gathering threads that have
- lost their roots (thereby gathering loose sub-threads into one thread)
- or it can go back and retrieve enough headers to build a complete
- thread.
- **** Killed groups can be read.
- **** Gnus can do partial group updates - you do not have to retrieve
- the entire active file just to check for new articles in a few groups.
- **** Gnus implements a sliding scale of subscribedness to groups.
- **** You can score articles according to any number of criteria. You
- can get Gnus to score articles for you using adaptive scoring.
- **** Gnus maintains a dribble buffer that is auto-saved the normal
- Emacs manner, so it should be difficult to lose much data on what you
- have read if your machine should go down.
- **** Gnus now has its own startup file (`.gnus.el') to avoid
- cluttering up the `.emacs' file.
- **** You can set the process mark on both groups and articles and
- perform operations on all the marked items.
- **** You can grep through a subset of groups and create a group from
- the results.
- **** You can list subsets of groups using matches on group names or
- group descriptions.
- **** You can browse foreign servers and subscribe to groups from those
- servers.
- **** Gnus can pre-fetch articles asynchronously on a second connection
- to the servers.
- **** You can cache articles locally.
- **** Gnus can fetch FAQs to and descriptions of groups.
- **** Digests (and other files) can be used as the basis for groups.
- **** Articles can be highlighted and customized.
- ** Changes to Version Control (VC)
- *** General changes (all backends).
- VC directory listings (C-x v d) are now kept up to date when you do a
- vc-next-action (C-x v v) on the marked files. The `g' command updates
- the buffer properly. `=' in a VC dired buffer produces a version
- control diff, not an ordinary diff.
- *** CVS changes.
- Under CVS, you no longer need to type C-x C-q before you can edit a
- file. VC doesn't write-protect unmodified buffers anymore; you can
- freely change them at any time. The mode line keeps track of the
- file status.
- If you do want unmodified files to be write-protected, set your
- CVSREAD environment variable. VC sees this and behaves accordingly;
- that will give you the behavior of Emacs 19.29, similar to that under
- RCS and SCCS. In this mode, if the variable vc-mistrust-permissions
- is nil, VC learns the modification state from the file permissions.
- When setting CVSREAD for the first time, you should check out the
- whole module anew, so that the file permissions are set correctly.
- VC also works with remote repositories now. When you visit a file, it
- doesn't run "cvs status" anymore, so there shouldn't be any long delays.
- Directory listings under VC/CVS have been enhanced. Type C-x v d, and
- you get a list of all files in or below the current directory that are
- not up-to-date. The actual status (modified, merge, conflict, ...) is
- displayed for each file. If you give a prefix argument (C-u C-x v d),
- up-to-date files are also listed. You can mark any number of files,
- and execute the next logical version control command on them (C-x v v).
- *** Starting a new branch.
- If you try to lock a version that is not the latest on its branch,
- VC asks for confirmation in the minibuffer. If you say no, it offers
- to lock the latest version instead.
- *** RCS non-strict locking.
- VC can now handle RCS non-strict locking, too. In this mode, working
- files are always writable and you needn't lock the file before making
- changes, similar to the default mode under CVS. To enable non-strict
- locking for a file, use the "rcs -U" command.
- *** Sharing RCS master files.
- If you share RCS subdirs with other users (through symbolic links),
- and you always want to work on the latest version, set
- vc-consult-headers to nil and vc-mistrust-permissions to `t'.
- Then you see the state of the *latest* version on the mode line, not
- that of your working file. When you do a check out, VC overwrites
- your working file with the latest version from the master.
- *** RCS customization.
- There is a new variable vc-consult-headers. If it is t (the default),
- VC searches for RCS headers in working files (like `$Id$') and
- determines the state of the file from them, not from the master file.
- This is fast and more reliable when you use branches. (The variable
- was already present in Emacs 19.29, but didn't get mentioned in the
- NEWS.)
- ** Calendar changes.
- *** New calendars supported: Chinese, Coptic, Ethiopic
- Here are the commands for converting to and from these calendars:
- gC: calendar-goto-chinese-date
- gk: calendar-goto-coptic-date
- ge: calendar-goto-ethiopic-date
- pC: calendar-print-chinese-date
- pk: calendar-print-coptic-date
- pe: calendar-print-ethiopic-date
- *** Printed calendars
- Calendar mode now has commands to produce fancy printed calendars via
- LaTeX. You can ask for a calendar for one or more days, weeks, months
- or years. The commands all start with `t'; see the manual for a list
- of them.
- *** New sexp diary entry type
- Reminders that apply in the days leading up to an event.
- ** The CC-mode package now provides the default C and C++ modes.
- See the manual for documentation of its features.
- ** The uniquify package chooses buffer names differently when you
- visit multiple files with the same name (in different directories).
- ** RMAIL now always uses the movemail program when it renames an
- inbox file, so that it can interlock properly with the mailer
- no matter where it is delivering mail.
- ** tex-start-of-header and tex-end-of-header are now regular expressions,
- not strings.
- ** To enable automatic uncompression of compressed files,
- type M-x auto-compression-mode. (This command used to be called
- toggle-auto-compression, but was not documented before.) In Lisp,
- you can do
- (auto-compression-mode 1)
- to turn the mode on.
- ** The new pc-select package emulates the key bindings for cutting and
- pasting, and selection of regions, found in Windows, Motif, and the
- Macintosh.
- ** Help buffers now use a special major mode, Help mode. This mode
- normally turns on View mode; it also provides a hook, help-mode-hook,
- which you can use for other customization.
- ** Apropos now uses faces for enhanced legibility. It now describes
- symbol properties as well as their function definitions and variable
- values. You can use Mouse-2 or RET to get more information about a
- function definition, variable, or property.
- ** Font Lock mode
- *** Supports Scheme, TCL and Help modes
- For example, to automatically turn on Font Lock mode in the *Help*
- buffer, put:
- (add-hook 'help-mode-hook 'turn-on-font-lock)
- in your ~/.emacs.
- *** Enhanced fontification
- The structure of font-lock-keywords is extended to allow "anchored" keywords.
- Typically, a keyword item of font-lock-keywords comprises a regexp to search
- for and information to specify how the regexp should be highlighted. However,
- the highlighting information is extended so that it can be another keyword
- item. This keyword item, its regexp and highlighting information, is processed
- before resuming with the keyword item of which it is part.
- For example, a typical keyword item might be:
- ("\\<anchor\\>" (0 anchor-face))
- which fontifies each occurrence of the discrete word "anchor" in the value of
- the variable anchor-face. However, the highlighting information can be used to
- fontify text that is anchored to the word "anchor". For example:
- ("\\<anchor\\>" (0 anchor-face) ("\\=[ ,]*\\(item\\)" nil nil (1 item-face)))
- which fontifies each occurrence of "anchor" as above, but for each occurrence
- of "anchor", each occurrence of "item", in any following comma separated list,
- is fontified in the value of the variable item-face. Thus the "item" text is
- anchored to the "anchor" text. See the variable documentation for further
- information.
- This feature is used to extend the level and quality of fontification in a
- number of modes. For example, C/C++ modes now have level 3 decoration that
- includes the fontification of variable and function names in declaration lists.
- In this instance, the "anchor" described in the above example is a type or
- class name, and an "item" is a variable or function name.
- *** Fontification levels
- The variables font-lock-maximum-decoration and font-lock-maximum-size are
- extended to specify levels and sizes for specific modes. The variable
- font-lock-maximum-decoration specifies the preferred level of fontification for
- modes that provide multiple levels (typically from "subdued" to "gaudy"). The
- variable font-lock-maximum-size specifies the buffer size for which buffer
- fontification is suppressed when Font Lock mode is turned on (typically because
- it would take too long).
- These variables can now specify values for individual modes, by supplying
- lists of mode names and values. For example, to use the above mentioned level
- 3 decoration for buffers in C/C++ modes, and default decoration otherwise, put:
- (setq font-lock-maximum-decoration '((c-mode . 3) (c++-mode . 3)))
- in your ~/.emacs. Maximum buffer size values for individual modes are
- specified in the same way with the variable font-lock-maximum-size.
- *** Font Lock configuration
- The mechanism to provide default settings for Font Lock mode are the variables
- font-lock-defaults and font-lock-maximum-decoration. Typically, you should
- only need to change the value of font-lock-maximum-decoration. However, to
- support Font Lock mode for buffers in modes that currently do not support Font
- Lock mode, you should set a buffer local value of font-lock-defaults for that
- mode, typically via its mode hook.
- These variables are used by Font Lock mode to set the values of the variables
- font-lock-keywords, font-lock-keywords-only, font-lock-syntax-table,
- font-lock-beginning-of-syntax-function and font-lock-keywords-case-fold-search.
- You need not set these variables directly, and should not set them yourself
- since the underlining mechanism may change in future.
- ** Archive mode is now the default mode for various sorts of
- archive files (files whose names end with .arc, .lzh, .zip, and .zoo).
- ** You can automatically update the years in copyright notice by
- means of (add-hook 'write-file-hooks 'copyright-update).
- Optionally it can update the GPL version as well.
- ** Scripts of various languages (Shell, AWK, Perl, makefiles ...) can
- be automatically provided with a magic number and be made executable
- by their respective modes under control of various user variables.
- The mode must call (executable-set-magic "perl") or
- (executable-set-magic "make" "-f"). The latter for example has no
- effect on [Mm]akefile.
- ** Shell script mode now supports over 15 different shells. The new
- command C-c ! executes the region, and optionally beginning of script
- as well, by passing them to the shell.
- Cases such as `sh' being a `bash' are now accounted for.
- Fontification now also does variables, the magic number and all
- builtin commands. Shell script mode no longer mingles `tab-width' and
- indentation style. The variable `sh-tab-width' has been renamed to
- `sh-indentation'. Empty lines are now indented like previous
- non-empty line, rather than just previous line.
- The annoying $ variable prompting has been eliminated. Instead, shell
- script mode uses `comint-dynamic-completion' for commands, variables
- and filenames.
- ** Two-column mode now automatically scrolls both buffers together,
- which makes it possible to eliminate the special scrolling commands
- that used to do so.
- The commands that operate in two-column mode are no longer bound to
- keys outside that mode. f2 o will now position at the same point in
- associated buffer.
- the new command f2 RET inserts a newline in both buffers, at point and
- at the corresponding position in the associated buffer.
- ** Skeleton commands now work smoothly as abbrev definitions. The
- element < no longer exists, ' is a new element.
- ** The autoinsert insert facility for prefilling empty files as soon
- as they are found has been extended to accommodate skeletons or calling
- functions. See the function auto-insert.
- ** TPU-edt Changes
- Loading tpu-edt no longer turns on tpu-edt mode. In fact, it is no
- longer necessary to explicitly load tpu-edt. All you need to do to
- turn on tpu-edt is run the tpu-edt function. Here's how to run
- tpu-edt instead of loading the file:
- Running Emacs: Type emacs -f tpu-edt
- not emacs -l tpu-edt
- Within Emacs: Type M-x tpu-edt <ret>
- not M-x load-library <ret> tpu-edt <ret>
- In .emacs: Use (tpu-edt)
- not (load "tpu-edt")
- The default name of the tpu-edt X key definition file has changed from
- ~/.tpu-gnu-keys to ~/.tpu-keys. If you don't rename the file yourself,
- tpu-edt will offer to rename it the first time you invoke it under
- x-windows.
- ** MS-DOS Enhancements:
- *** Better mouse control by adding the following functions [in dosfns.c]
- msdos-mouse-enable, msdos-mouse-disable, msdos-mouse-init.
- *** If another foreground/background color than the default is setup in
- your ~/_emacs, then the screen briefly flickers with the default
- colors before changing to the colors you have specified. To avoid
- this, the EMACSCOLORS environment variable exists. It shall be
- defined as a string with the following elements:
- set EMACSCOLORS=fb;fb
- The first set of "fb" defines the initial foreground and background
- colors using standard dos color numbers (0=black,.., 7=white).
- If specified, the second set of "fb" defines the colors which are
- restored when you leave emacs.
- *** The new SUSPEND environment variable can now be set as the shell to
- use when suspending emacs. This can be used to override the stupid
- limitation on the environment of sub-shells in MS-DOS (they are just
- large enough to hold the currently defined variables, not leaving
- room for more); to overcome this limitation, add this to autoexec.bat:
- set SUSPEND=%COMSPEC% /E:2000
- ** The escape character can now be displayed on X frames. Try
- this:
- (aset standard-display-table 27 (vector 27))
- after first creating a display table (you can do that by loading
- the disp-table library).
- ** The new command-line option --eval specifies an expression to evaluate
- from the command line.
- ** etags has now the ability to tag Perl files. They are recognized
- either by the .pm and .pl suffixes or by a first line which starts
- with `#!' and specifies a Perl interpreter. The tagged lines are
- those beginning with the `sub' keyword.
- New suffixes recognized are .hpp for C++; .f90 for Fortran; .bib,
- .ltx, .TeX for TeX (.bbl, .dtx removed); .ml for Lisp; .prolog for
- prolog (.pl is now Perl).
- ** The files etc/termcap.dat and etc/termcap.ucb have been replaced
- with a new, merged, and much more comprehensive termcap file. The
- new file should include all the special entries from the old one.
- This new file is under active development as part of the ncurses
- project. If you have any questions about this file, or problems with
- an entry in it, email terminfo@ccil.org.
- * Lisp changes in Emacs 19.30.
- ** New Data Types
- *** There is a new data type called a char-table which is an array
- indexed by a character. Currently this is mostly equivalent to a
- vector of length 256, but in the future, when a wider character set is
- in use, it will be different. To create one, call
- (make-char-table SUBTYPE INITIAL-VALUE)
- SUBTYPE is a symbol that identifies the specific use of this
- character table. It can be any of these values:
- syntax-table
- display-table
- keyboard-translate-table
- case-table
- The function `char-table-subtype' returns the subtype of a char-table.
- You cannot alter the subtype of an existing char-table.
- A char-table has an element for each character code. It also has some
- "extra slots". The number of extra slots depends on the subtype and
- their use depends on the subtype. (Each subtype symbol has a
- `char-table-extra-slots' property that says how many extra slots to
- make.) Use (char-table-extra-slot TABLE N) to access extra slot N and
- (set-char-table-extra-slot TABLE N VALUE) to store VALUE in slot N.
- A char-table T can have a parent, which should be another char-table
- P. If you look for the value in T for character C, and the table T
- actually holds nil, P's element for character C is used instead.
- The functions `char-table-parent' and `set-char-table-parent'
- let you read or set the parent of a char-table.
- To scan all the values in a char-table, do not try to loop through all
- possible character codes. That would work for now, but will not work
- in the future. Instead, call map-char-table. (map-char-table
- FUNCTION TABLE) calls FUNCTION once for each character or character
- set that has a distinct value in TABLE. FUNCTION gets two arguments,
- RANGE and VALUE. RANGE specifies a range of TABLE that has one
- uniform value, and VALUE is the value in TABLE for that range.
- Currently, RANGE is always a vector containing a single character
- and it refers to that character alone. In the future, other kinds
- of ranges will occur. You can set the value for a given range
- with (set-char-table-range TABLE RANGE VALUE) and examine the value
- for a range with (char-table-range TABLE RANGE).
- *** Syntax tables are now represented as char-tables.
- All syntax tables other than the standard syntax table
- normally have the standard syntax table as their parent.
- Their subtype is `syntax-table'.
- *** Display tables are now represented as char-tables.
- Their subtype is `display-table'.
- *** Case tables are now represented as char-tables.
- Their subtype is `case-table'.
- *** The value of keyboard-translate-table may now be a char-table
- instead of a string. Normally the char-tables used for this purpose
- have the subtype `keyboard-translate-table', but that is not required.
- *** A new data type called a bool-vector is a vector of values
- that are either t or nil. To create one, do
- (make-bool-vector LENGTH INITIAL-VALUE)
- ** You can now specify, for each marker, how it should relocate when
- text is inserted at the place where the marker points. This is called
- the "insertion type" of the marker.
- To set the insertion type, do (set-marker-insertion-type MARKER TYPE).
- If TYPE is t, it means the marker advances when text is inserted. If
- TYPE is nil, it means the marker does not advance. (In Emacs 19.29,
- markers did not advance.)
- The function marker-insertion-type reports the insertion type of a
- given marker. The function copy-marker takes a second argument TYPE
- which specifies the insertion type of the new copied marker.
- ** When you create an overlay, you can specify the insertion type of
- the beginning and of the end. To do this, you can use two new
- arguments to make-overlay: front-advance and rear-advance.
- ** The new function overlays-in returns a list of the overlays that
- overlap a specified range of the buffer. The returned list includes
- empty overlays at the beginning of this range, as well as within the
- range.
- ** The new hook window-scroll-functions is run when a window has been
- scrolled. The functions in this list are called just before
- redisplay, after the new window-start has been computed. Each function
- is called with two arguments--the window that has been scrolled, and its
- new window-start position.
- This hook is useful for on-the-fly fontification and other features
- that affect how the redisplayed text will look when it is displayed.
- The window-end value of the window is not valid when these functions
- are called. The computation of window-end is byproduct of actual
- redisplay of the window contents, which means it has not yet happened
- when the hook is run. Computing window-end specially in advance for
- the sake of these functions would cause a slowdown.
- The hook functions can determine where the text on the window will end
- by calling vertical-motion starting with the window-start position.
- ** The new hook redisplay-end-trigger-functions is run whenever
- redisplay in window uses text that extends past a specified end
- trigger position. You set the end trigger position with the function
- set-window-redisplay-end-trigger. The functions are called with two
- arguments: the window, and the end trigger position. Storing nil for
- the end trigger position turns off the feature, and the trigger value
- is automatically reset to nil just after the hook is run.
- You can use the function window-redisplay-end-trigger to read a
- window's current end trigger value.
- ** The new function insert-file-contents-literally inserts the
- contents of a file without any character set translation or decoding.
- ** The new function safe-length computes the length of a list.
- It never gets an error--it treats any non-list like nil.
- If given a circular list, it returns an upper bound for the number
- of elements before the circularity.
- ** replace-match now takes a fifth argument, SUBEXP. If SUBEXP is
- non-nil, that says to replace just subexpression number SUBEXP of the
- regexp that was matched, not the entire match. For example, after
- matching `foo \(ba*r\)' calling replace-match with 1 as SUBEXP means
- to replace just the text that matched `\(ba*r\)'.
- ** The new keymap special-event-map defines bindings for certain
- events that should be handled at a very low level--as soon as they
- are read. The read-event function processes these events itself,
- and never returns them.
- Events that are handled in this way do not echo, they are never
- grouped into key sequences, and they never appear in the value of
- last-command-event or (this-command-keys). They do not discard a
- numeric argument, they cannot be unread with unread-command-events,
- they may not appear in a keyboard macro, and they are not recorded
- in a keyboard macro while you are defining one.
- These events do, however, appear in last-input-event immediately after
- they are read, and this is the way for the event's definition to find
- the actual event.
- The events types iconify-frame, make-frame-visible and delete-frame
- are normally handled in this way.
- ** encode-time now supports simple date arithmetic by means of
- out-of-range values for its SEC, MINUTE, HOUR, DAY, and MONTH
- arguments; for example, day 0 means the day preceding the given month.
- Also, the ZONE argument can now be a TZ-style string.
- ** command-execute and call-interactively now accept an optional third
- argument KEYS. If specified and non-nil, this specifies the key
- sequence containing the events that were used to invoke the command.
- ** The environment variable NAME, if set, now specifies the value of
- (user-full-name), when Emacs starts up.
- * User Editing Changes in Emacs 19.29
- ** If you run out of memory.
- If you get the error message "Virtual memory exhausted", type C-x s.
- That way of saving files has the least additional memory needs. Emacs
- 19.29 keeps a reserve of memory which it makes available when this
- error happens; that is to ensure that C-x s can complete its work.
- Once you have saved your data, you can exit and restart Emacs, or use
- M-x kill-some-buffers to free up space. If you kill buffers
- containing a substantial amount of text, you can go on editing.
- Do not use M-x buffer-menu to save or kill buffers when you are out of
- memory, because that needs a fair amount memory itself and you may not
- have enough to get it started.
- ** The format of compiled files has changed incompatibly.
- Byte-compiled files made with Emacs 19.29 normally use a new format
- that will not work in older Emacs versions. You can compile files
- in the old format if you wish; see "Changes in compilation," below.
- ** Emacs 19.29 supports the DEC Alpha.
- ** Emacs runs on Windows NT.
- This port does not yet support windowing features. It works like a
- text-only terminal, but it does support a mouse.
- In general, support for non-GNU-like operating systems is not a high
- priority for the GNU project. We merged in the support for Windows NT
- because that system is expected to be very widely used.
- ** Emacs supports Motif widgets.
- You can build Emacs with Motif widgets by specifying --with-x-toolkit=motif
- when you run configure.
- Motif defines collections of windows called "tab groups", and uses the
- tab key and the cursor keys to move between windows in a tab group.
- Emacs naturally does not support this--it has other uses for the tab
- key and cursor keys. Emacs does not support Motif accelerators either,
- because it uses its normal keymap event binding features.
- We give higher priority to operation with a free widget set than to
- operation with a proprietary one.
- ** If Emacs or the computer crashes, you can recover all the files you
- were editing from their auto save files by typing M-x recover-session.
- This first shows you a list of recorded interrupted sessions. Move
- point to the one you choose, and type C-c C-c.
- Then recover-session asks about each of the files that were being
- edited during that session, asking whether to recover that file. If
- you answer y, it calls recover-file, which works in its normal
- fashion. It shows the dates of the original file and its auto-save
- file and asks once again whether to recover that file.
- When recover-session is done, the files you've chosen to recover
- are present in Emacs buffers. You should then save them.
- Only this--saving them--updates the files themselves.
- ** Menu bar menus now stay up if you click on the menu bar item and
- release the mouse button within a certain amount of time. This is in
- the X Toolkit version.
- ** The menu bar menus have been rearranged and split up to make for a
- better organization. Two new menu bar menus, Tools and Search,
- contain items that were formerly in the Files and Edit menus, as well
- as some that did not exist in the menu bar menus before.
- ** Emacs can now display on more than one X display at the same time.
- Use the command make-frame-on-display to create a frame, specifying
- which display to use.
- ** M-x talk-connect sets up a multi-user talk connection
- via Emacs. Specify the X display of the person you want to talk to.
- You can talk to any number of people (within reason) by using
- this command repeatedly to specify different people.
- Emacs does not make a fuss about security; the people who you talk to
- can use all Emacs features, including visiting and editing files. If
- this frightens you, don't use M-x talk-connect.
- ** The range of integer values is now at least 2**28 on all machines.
- This means the maximum size of a buffer is at least 2**27-1,
- or 134,217,727.
- ** When you start Emacs, you can now specify option names in
- long GNU form (starting with `--') and you can abbreviate the names.
- You can now specify the options in any order.
- The previous requirements about the order of options
- have been eliminated.
- The -L or --directory option lets you specify an additional
- directory to search for Lisp libraries (including libraries
- that you specify with the -l or --load options).
- ** Incremental search in Transient Mark mode, if the mark is already
- active, now leaves the mark active and does not change its position.
- You can make incremental search deactivate the mark once again with
- this expression.
- (add-hook 'isearch-mode-hook 'deactivate-mark)
- ** C-delete now deletes a word backwards. This is for compatibility
- with some editors in the PC world. (This key is not available on
- ordinary ASCII terminals, because C-delete is not a distinct character
- on those terminals.)
- ** ESC ESC ESC is now a command to escape from various temporary modes
- and states.
- ** M-x pc-bindings-mode sets up bindings compatible with many PC editors.
- In particular, Delete and its variants delete forward instead of backward.
- Use Backspace to delete backward.
- C-Backspace kills backward a word (as C-Delete normally would).
- M-Backspace does undo.
- Home and End move to beginning and end of line
- C-Home and C-End move to beginning and end of buffer.
- ** The key sequence for evaluating a Lisp expression using the minibuffer
- is now ESC :. It used to be ESC ESC, but we moved it to make way for
- the ESC ESC ESC feature, on the grounds that people who evaluate Lisp
- expressions are experienced users and can cope with a change.
- If you prefer the old ESC ESC binding, put in your `~/.emacs':
- (global-set-key "\e\e" 'eval-expression)
- ** The f1 function key is now equivalent to the help key. This is
- done with key-translation-map; delete the binding for f1 in that map
- if you want to use f1 for something else.
- ** Mouse-3, in the simplest case, still sets the region. But now, it
- places the mark where point was, and sets point where you click.
- (It used to set the mark where you click and leave point alone.)
- If you position point with Mouse-1, then scroll with the scroll bar
- and use Mouse-3, Mouse-3 uses the position you specified with Mouse-1
- even if it has scrolled off the screen (and point is no longer there).
- This makes it easier to select a region with the mouse which is bigger
- than a screenful.
- Any editing of the buffer, and any cursor motion or scrolling for any
- reason other than the scroll bar, cancels the special state set up by
- Mouse-1--so that a subsequent Mouse-3 click will use the actual value
- of point.
- ** C-mouse-3 now pops up a mode-specific menu of commands--normally
- the same ones available in the mode's own menu bar menus.
- ** C-mouse-2 now pops up a menu of faces, indentation, justification,
- and certain other text properties. This menu is also available
- through the menu-bar Edit menu. It is meant for use with Enriched
- mode.
- *** You can use this menu to change the face of the region.
- You can also set the face of the region with the new M-g command.
- *** The menu also includes commands for indenting the region,
- which locally changes the values of left-margin and fill-column that
- are used.
- *** All fill functions now indent every line to the left-margin. If
- there is also a fill-prefix, that goes after the margin indentation.
- *** Open-line and newline also make sure that the lines they create
- are indented to the left margin.
- *** It also allows you to set the "justification" of the region:
- whether it should be centered, flush right, and so forth. The fill
- functions (including auto-fill-mode) will maintain the justification
- and indentation that you request.
- *** The new function `list-colors-display' shows you what colors are
- available. This is also accessible from the C-mouse-2 menu.
- ** You can now save and load files including their faces and other
- text-properties by using Enriched-mode. Files are saved in an
- extended version of the MIME text/enriched format. You can use the
- menus described above, or M-g and other keyboard commands, to
- alter the formatting information.
- ** C-mouse-1 now pops up the menu for changing the frame's default font.
- ** You can input Hyper, Super, Meta, and Alt characters, as well as
- non-ASCII control characters, on an ASCII-only terminal.
- To do this, use
- C-x @ h -- hyper
- C-x @ s -- super
- C-x @ m -- meta
- C-x @ a -- alt
- C-x @ S -- shift
- C-x @ c -- control
- These are not ordinary key sequences; they operate through
- function-key-map, which means they can be used even in the
- middle of an ordinary key sequence.
- ** Outline minor mode and Hideif mode now use C-c @ as their prefix
- character.
- ** Echo area messages are now logged in the "*Messages*" buffer. The
- size of this buffer is limited to message-log-max lines.
- ** RET in various special modes for read-only buffers that contain
- lists of items now selects the item point is on. These modes include
- Dired, Compilation buffers, Buffer-menu, Tar mode, and Occur mode.
- (In Info, RET follows the reference near point; in completion list
- buffers, RET chooses the completion around point.)
- ** set-background-color now updates the modeline face in a special
- way. If that face was previously set up to be reverse video, the
- reverse of the default face, then set-background-color updates it so
- that it remains the reverse of the default face.
- ** The functions raise-frame and lower-frame are now commands.
- When used interactively, they apply to the selected frame.
- ** M-x buffer-menu now displays the buffer list in the selected window.
- Use M-x buffer-menu-other-window to display it in another window.
- ** M-w followed by a kill command now *does not* append the text in
- the kill ring. In consequence, M-w followed by C-w works as you would
- expect: it leaves the top of the kill ring matching the region that
- you killed.
- ** In Lisp mode, the C-M-x command now executes defvar forms in a
- special way: it unconditionally sets the variable to the specified
- default value, if there is one. Normal execution of defvar does not
- alter the variable if it already has a non-void value.
- ** In completion list buffers, the left and right arrow keys run the
- new commands previous-completion and next-completion. They move one
- completion at a time.
- ** While doing completion in the minibuffer, the `prior' or `pageup'
- key switches to the completion list window.
- ** When you exit the minibuffer with empty contents, the empty string
- is not put in the minibuffer history.
- ** The default buffer for insert-buffer is now the "first" buffer
- other than the current one. If you have more than one window, this
- is a buffer visible in another window. (Usually it is the buffer
- that C-M-v would scroll.)
- ** The etags program is now capable of recording tags based on regular
- expressions provided on the command line.
- This new feature allows easy support for constructs not normally
- handled by etags, such as the macros frequently used in big C/C++
- projects to define project-specific structures. It also enables the
- use of etags and TAGS files for languages not supported by etags.
- The Emacs manual section on Tags contains explanations and examples
- for Emacs's DEFVAR, VHDL, Cobol, PostScript and TCL.
- ** Various mode-specific commands that used to be bound to C-c LETTER
- have been moved.
- *** In gnus-uu mode, gnus-uu-interactive-scan-directory is now on C-c C-d,
- and gnus-uu-interactive-save-current-file is on C-c C-z.
- *** In Scribe mode, scribe-insert-environment is now on C-c C-v,
- scribe-chapter is on C-c C-c, scribe-subsection is on C-c C-s,
- scribe-section is on C-c C-t, scribe-bracket-region-be is on C-c C-e,
- scribe-italicize-word is on C-c C-i, scribe-bold-word is on C-c C-b,
- and scribe-underline-word is on C-c C-u.
- *** In Gomoku mode, gomoku-human-takes-back is now on C-c C-b,
- gomoku-human-plays is on C-c C-p, gomoku-human-resigns is on C-c C-r,
- and gomoku-emacs-plays is on C-c C-e.
- *** In the Outline mode defined in allout.el,
- outline-rebullet-current-heading is now on C-c *.
- ** M-s in Info now searches through the nodes of the Info file,
- just like s. The alias M-s was added so that you can use the same
- command for searches in both Info and Rmail.
- ** iso-acc.el now lets you enter inverted-! and inverted-?
- with the sequences ~! and ~?.
- ** M-x compare-windows now pushes mark in both windows before
- it starts moving point.
- ** There are two new commands in Dired, A (dired-do-search)
- and Q (dired-do-query-replace). These are similar to tags-search and
- tags-query-replace, but instead of searching the list of files that
- appears in a tags table, they search all the files marked in Dired.
- ** Changes to dabbrev.
- A new function, `dabbrev-completion' (bound to M-C-/), expands the
- unique part of an abbreviation.
- Dabbrev now looks for expansions in other buffers, looks for symbols
- instead of words and it works in the minibuffer.
- Dabbrev can be customized to work for shell scripts, with variables
- that sometimes have and sometimes haven't a leading "$". See the
- variable 'dabbrev-abbrev-skip-leading-regexp'.
- ** In Rmail, the command rmail-input-menu has been eliminated. The
- feature of selecting an Rmail file from a menu is now implemented in
- another way.
- ** Bookmarks changes.
- *** It now works to set bookmarks in Info nodes.
- *** Bookmarks can have annotations; type "C-h m" after doing
- "M-x list-bookmarks", for more information on annotations.
- *** The bookmark-jump popup menu function is now `bookmark-menu-jump', for
- those who bind it to a mouse click.
- *** The default bookmarks file name is now "~/.emacs.bmk". If you
- already have a bookmarks file, it will be renamed automagically when
- you next load it.
- ** New package, ps-print.
- The ps-print package generates PostScript printouts of buffers or
- regions, and includes face attributes such as color, underlining,
- boldface and italics in the printed output.
- ** New package, msb.
- The msb package provides a buffer-menu in the menubar with separate
- menus for different types of buffers.
- ** `cpp.el' is a new library that can highlight or hide parts of a C
- file according to C preprocessor conditionals. To try it, run the
- command M-x cpp-highlight-buffer.
- ** Changes in CC mode.
- *** c-set-offset and related functions and variables can now accept
- variable symbols. Also ++ and -- which mean 2* positive and negative
- c-basic-offset respectively.
- *** New variable, c-recognize-knr-p, which controls whether K&R C
- constructs will be recognized. Trying to recognize K&R constructs is a
- time hog so if you're programming strictly in ANSI C, set this
- variable to nil (it should already be nil in c++-mode).
- *** New variable, c-hanging-comment-ender-p for controlling
- c-fill-paragraph's behavior.
- *** New syntactic symbol: statement-case-open. This is assigned to lines
- containing an open brace just after a case/default label.
- *** New variable, c-progress-interval, which controls minibuffer update
- message displays during long re-indentation. This is a new feature
- which prints percentage complete messages at specified intervals.
- ** Makefile mode changes.
- *** The electric keys are not enabled by default.
- *** There is now a mode-specific menu bar menu.
- *** The mode supports font-lock, add-log, and imenu.
- *** The command M-TAB does completion of target names and variable names.
- ** icomplete.el now works more like a minor mode. Use M-x icomplete-mode
- to turn it on and off.
- Icomplete now supports an `icomplete-minibuffer-setup-hook', which is
- run on minibuffer setup whenever icompletion will be occurring. This
- hook can be used to customize interoperation of icomplete with other
- minibuffer-specific packages, eg rsz-mini. See the doc string for
- more info.
- ** Ediff change.
- Use ediff-revision instead of vc-ediff. It also replaces rcs-ediff,
- for those who use that; if you want to use a version control package
- other than vc.el, you must set the variable
- ediff-version-control-package to specify which package.
- ** VC now supports branches with RCS.
- You can use C-u C-x C-q to select any branch or version by number.
- It reads the version number or branch number with the minibuffer,
- then checks out the file unlocked.
- Type C-x C-q again to lock the selected branch or version.
- When you check in changes to that branch or version, there are two
- possibilities:
- -- If you've selected a branch, or a version at the tip of a branch,
- then the new version adds to that branch. If you wish to create a
- new branch, use C-u C-x C-q to specify a version number when you check
- in the new version.
- -- If you've selected an inner version which is not the latest in its
- branch, then the new version automatically creates a new branch.
- ** VC now supports CVS as well as RCS and SCCS.
- Since there are no locks in CVS, some things behave slightly
- different when the backend is CVS. When vc-next-action is invoked
- in a directory handled by CVS, it does the following:
- If the file is not already registered, this registers it for version
- control. This does a "cvs add", but no "cvs commit".
- If the file is added but not committed, it is committed.
- If the file has not been changed, neither in your working area or
- in the repository, a message is printed and nothing is done.
- If your working file is changed, but the repository file is
- unchanged, this pops up a buffer for entry of a log message; when you
- finish the log message with C-c C-c, that checks in the resulting
- changes along with the log message as change commentary. A writable
- file remains in existence.
- If vc-next-action changes the repository file, it asks you
- whether to merge in the changes into your working copy.
- vc-directory, when started in a CVS file hierarchy, reports
- all files that are modified (and thus need to be committed).
- (When the backend is RCS or SCCS vc-directory reports all
- locked files).
- VC has no support for running the initial "cvs checkout" to get a
- working copy of a module. You can only use VC in a working copy of
- a module.
- You can disable the CVS support as follows:
- (setq vc-master-templates (delq 'vc-find-cvs-master vc-master-templates))
- or by setting vc-handle-cvs to nil.
- This may be desirable if you run a non-standard version of CVS, or
- if CVS was compiled with FORCE_USE_EDITOR or (possibly)
- RELATIVE_REPOS.
- ** Comint and shell mode changes:
- *** Completion works with file names containing quoted characters.
- File names containing special characters (such as " ", "!", etc.) that are
- quoted with a "\" character are recognized during completion. Special
- characters are quoted when they are inserted during completion.
- *** You can use M-x comint-truncate-buffer to truncate the buffer.
- When this command is run, the buffer is truncated to a maximum number
- of lines, specified by the variable comint-buffer-maximum-size. Just
- like the command comint-strip-ctrl-m, this can be run automatically
- during process output by doing this:
- (add-hook 'comint-output-filter-functions
- 'comint-truncate-buffer)
- ** Telnet mode buffer name changed.
- The buffer name for a Telnet buffer is now *telnet-HOST*, not
- *HOST-telnet*. This is for consistency with other Emacs packages.
- ** M-x man (man) is now faster and more robust. On systems where the
- entire man page is indented, the indentation is removed.
- The user option names that used to end in -p now end in -flag. The
- new names are: Man-reuse-okay-flag, Man-downcase-section-letters-flag,
- Man-circular-pages-flag. The Man-notify user option has been renamed to
- Man-notify-method and accepts one more value, `pushy', that just
- switches the current buffer to the manpage buffer, without switching
- frames nor changing your windows configuration.
- A new user option Man-fontify-manpage-flag disables fontification
- (thus speeding up man) when set to nil. Default is to fontify if a
- window system is used. Two new user options Man-overstrike-face
- (default 'bold) and Man-underline-face (default 'underline) can be set
- to the preferred faces to be used for the words that man overstrikes
- and underlines. Useful for those who like colored man pages.
- Two new interactive functions are provided: Man-cleanup-manpage and
- Man-fontify-manpage. Both can be used on a buffer that contains the
- output of a `rsh host man manpage' command, or the output of an
- `nroff -man -Tman manpage' command to make them readable.
- Man-cleanup-manpage is faster, but does not fontify.
- ** The new function modify-face makes it easy to specify
- all the attributes of a face, all at once.
- ** Faces now support background stippling.
- Use the command set-face-stipple to specify the stipple-pattern for a
- face. Use face-stipple to access the specified stipple pattern. The
- existing face functions now handle the stipple pattern when
- appropriate.
- If you specify one of the standard gray colors as a face background
- color, and your display doesn't handle gray, Emacs automatically uses
- stipple instead to get the same effect.
- ** Changes in Font Lock mode.
- *** Fontification
- Two new default faces are provided; `font-lock-variable-name-face' and
- `font-lock-reference-face'. The face `font-lock-doc-string-face' has
- been removed since it is the same as the existing
- `font-lock-string-face'. Where appropriate, fontification
- automatically uses these new faces.
- Fontification via commands `font-lock-mode' and
- `font-lock-fontify-buffer' is now cleanly interruptible (i.e., with
- C-g). If you interrupt during the fontification process, the buffer
- remains in its previous modified state and all highlighting is removed
- from the buffer.
- For C/C++ modes, Font Lock mode is much faster but highlights much
- more. Other modes are faster/more extensive/more discriminatory, or a
- combination of these.
- To enable Font Lock mode, add the new function `turn-on-font-lock' in
- one of the following ways:
- (add-hook 'c-mode-hook 'turn-on-font-lock)
- Or for any visited file with:
- (add-hook 'find-file-hooks 'turn-on-font-lock)
- *** Supports color and grayscale displays
- Font Lock mode supports different ways of highlighting, depending on
- the type of display and background shade. Attributes (face color,
- bold, italic and underline, and display type and background mode) can
- be controlled either from Emacs Lisp or X resources.
- See the new variables `font-lock-display-type' and
- `font-lock-face-attributes'.
- *** Supports more modes
- The following modes are directly supported:
- ada-mode, asm-mode, bibtex-mode, c++-c-mode, c++-mode, c-mode,
- change-log-mode, compilation-mode, dired-mode, emacs-lisp-mode,
- fortran-mode, latex-mode, lisp-mode, mail-mode, makefile-mode,
- outline-mode, pascal-mode, perl-mode, plain-tex-mode, rmail-mode,
- rmail-summary-mode, scheme-mode, shell-mode, slitex-mode, tex-mode,
- texinfo-mode.
- See the new variables `font-lock-defaults-alist' and
- `font-lock-defaults'.
- Some modes support different levels of fontification. You can choose
- to use the minimum or maximum available decoration by changing the
- value of the new variable `font-lock-maximum-decoration'.
- Programmers are urged to make available to the community their own
- keywords for modes not yet supported. See font-lock.el for
- information about efficiency.
- *** fast-lock
- The fast-lock package speeds up Font Lock mode by saving font choices
- in associated cache files. When you visit a file with Font Lock mode
- and Fast Lock mode turned on for the first time, the file's buffer is
- fontified as normal. When certain events occur (such as exiting
- Emacs), Fast Lock saves the highlighting in a cache file. When you
- subsequently visit this file, its cache is used to restore the
- highlighting.
- To use this package, put in your `~/.emacs':
- (add-hook 'font-lock-mode-hook 'turn-on-fast-lock)
- To control the use of caches, see the documentation for `fast-lock-mode'.
- ** You can tell pop-to-buffer to display certain buffers in the selected
- window rather than finding some other window to display them in.
- There are two variables you can use to specify these buffers.
- same-window-buffer-names holds a list of buffer names; if a buffer's
- name appears in this list, pop-to-buffer puts it in the selected window.
- same-window-regexps holds a list of regexps--if any one of them
- matches a buffer's name, then pop-to-buffer puts that buffer in the
- selected window.
- The default values of these variables are not nil: they list various
- buffers that normally appear, when you as for them, in the selected
- window. These include shell buffers, mail buffers, telnet buffers,
- and others. By removing elements from these variables, you can ask
- Emacs to display those buffers in separate windows.
- ** The special-display-buffer-names and special-display-regexps lists
- have been generalized. An element may now be a list. The car of the list
- is the buffer name or regular expression for matching buffer names.
- The cdr of the list can be an alist specifying additional frame
- parameters for use in constructing the special display frame.
- Alternatively, the cdr can have this form:
- (FUNCTION ARGS...)
- where FUNCTION is a symbol. Then the frame is constructed by calling
- FUNCTION; its first argument is the buffer, and its remaining
- arguments are ARGS.
- ** If the environment variable REPLYTO is set, its value is the default
- for mail-default-reply-to.
- ** When you send a message in Emacs, if you specify an Rmail file with
- the FCC: header field, Emacs converts the message to Rmail format
- before writing it. Thus, the file never contains anything but Rmail
- format messages.
- ** The new variable mail-from-style controls whether the From: header
- should include the sender's full name, and if so, which format to use.
- ** The new variable mail-personal-alias-file specifies the name of the
- user's personal aliases. This defaults to the file ~/.mailrc.
- mailabbrev.el used to have its own variable for this purpose
- (mail-abbrev-mailrc-file). That variable is no longer used.
- ** In Buffer-Menu mode, the d and C-d commands (which mark buffers for
- deletion) now accept a prefix argument which serves as a repeat count.
- ** Changes in BibTeX mode.
- *** Reference keys can now be entered with TAB completion. All
- reference keys defined in that buffer and all labels that appear in
- crossreference entries are object to completion.
- *** Braces are supported as field delimiters in addition to quotes.
- BibTeX entries may have brace-delimited and quote-delimited fields
- intermixed. The delimiters generated for new entries are specified by
- the variables bibtex-field-left-delimiter and
- bibtex-field-right-delimiter on a buffer-local basis. Those variables
- default to braces, since it is easier to put quote accented characters
- (as the german umlauts) into a brace-delimited entry.
- *** The function bibtex-clean-entry can now be invoked with a prefix
- argument. In this case, a label is automatically generated from
- various fields in the record. If bibtex-clean-entry is invoked on a
- record without label, a label is also generated automatically.
- Various variables (all beginning with `bibtex-autokey-') control the
- creation of that key. The variable bibtex-autokey-edit-before-use
- determines, if the user is allowed to edit auto-generated reference
- keys before they are used.
- *** A New function bibtex-complete-string completes strings with
- respect to the strings defined in this buffer and a set of predefined
- strings (initialized to the string macros defined in the standard
- BibTeX style files) in the same way in which ispell-complete-word
- works with respect to words in a dictionary. Candidates for
- bibtex-complete-string are initialized from variable
- bibtex-predefined-strings and by parsing the files found in
- bibtex-string-files for @String definitions.
- *** Every reference/field pair has now attached a comment which
- appears in the echo area when this field is edited. These comments
- should provide useful hints for BibTeX usage, especially for BibTeX
- beginners. New variable bibtex-help-message determines if these help
- messages are to appear in the minibuffer when moving to a text entry.
- *** Inscriptions of menu bar changed from "Entry Types" to
- "Entry-Types" and "Bibtex Edit" to "BibTeX-Edit".
- *** The variable bibtex-include-OPTcrossref is now not longer a binary
- switch but a list of reference names which should contain a crossref
- field. E.g., you can tell bibtex-mode you want a crossref field for
- @InProceedings and @InBook entries but for no other.
- *** The function validate-bibtex-buffer was completely rewritten to
- validate if a buffer is syntactically correct. find-bibtex-duplicates
- is no longer a function itself but was moved into
- validate-bibtex-buffer.
- *** Cleaning a BibTeX entry tests, if necessary fields are there.
- E.g., if you tell bibtex-mode to include a crossref entry, some fields
- are optional which would be required without the crossref entry. If
- you now leave the crossref entry empty and do a bibtex-clean-entry
- with some now required fields left empty, version 2.0 of bibtex.el
- complains about the absence of these fields, whereas version 1.3
- didn't.
- *** Default value for variables bibtex-maintain-sorted-entries and
- bibtex-sort-ignore-string-entries is now t.
- *** All interactive functions are renamed to begin with `bibtex-'.
- *** Keybindings with \C-c\C-e entry changed for unification. Often
- used reference types are now on control-modified keys, mediocre used
- types are on unmodified keys, seldom used types are on shift-modified
- keys and almost never used types on meta-modified keys.
- * Configuration Changes in Emacs 19.29
- ** Emacs now uses directory /usr/local/share for most of its installed
- files. This follows a GNU convention for directory usage.
- ** The option --with-x11 is no longer supported.
- X11 is the only version of X that Emacs 19.29 supports;
- use --with-x if you need to request X support explicitly.
- (Normally this should not be necessary, since configure should
- automatically enable X support if X is installed on your machine.)
- ** If you use the site-init.el file to set the variable
- mail-host-address to a string in the dumped Emacs, that string becomes
- the default host address for initializing user-mail-address.
- It is used instead of the value of (system-name).
- * Lisp-Level Changes in Emacs 19.29
- ** Basic Lisp
- *** The range of integer values is now at least 2**28 on all machines.
- This means the maximum size of a buffer is at least 2**27-1,
- or 134,217,727.
- *** You can now use Common Lisp syntax for the backquote and comma
- macros. Thus, you can now write `(x ,y z) instead of (` (x (, y) z)).
- The old syntax is still accepted.
- *** The new function rassoc is like assoc, except that it compares the
- key against the cdr of each alist element, where assoc would compare
- it against the car of each alist element.
- *** The new function unintern deletes a symbol from an obarray. The
- first argument can be the symbol to delete, or a string giving its
- name. The second argument specifies the obarray (nil means the
- current default obarray).
- If the specified symbol is not in the obarray, or if there's no symbol
- in the obarray matching the specified string, unintern does nothing
- and returns nil. If it does delete a symbol, it returns t.
- *** You can specify an alternative read function for use by load and
- eval-region by binding the variable load-read-function to some other
- function. This function should accept one argument just like read.
- If load-read-function is nil, load and eval-region use ordinary read.
- *** The new function `type-of' takes any object as argument, and
- returns a symbol identifying the type of that object--one of `symbol',
- `integer', `float', `string', `cons', `vector', `marker', `overlay',
- `window', `buffer', `subr', `compiled-function',
- `window-configuration', `process'.
- *** When you use eval-after-load for a file that is already loaded, it
- executes the FORM right away. As before, if the file is not yet
- loaded, it arranges to execute FORM if and when the file is loaded
- later. The result is: if you have called eval-after-load for a file,
- and if that file has been loaded, then regardless of the order of
- these two events, the specified form has been evaluated.
- *** The Lisp construct #@NUMBER now skips the next NUMBER characters,
- treating them as a comment.
- You would not want to use this in a file you edit by hand, but it is
- useful for commenting out parts of machine-generated files.
- *** Two new functions, `plist-get' and `plist-put',
- allow you to modify and retrieve values from lists formatted as property-lists.
- They work like `get' and `put', but operate on any list.
- `plist-put' returns the modified property-list; you must store it
- back where you got it.
- *** The new function add-to-list is called with two elements,
- a variable that holds a list and a new element.
- It adds the element to the list unless it is already present.
- It compares elements using `equal'. Here is an example:
- (setq foo '(a b)) => (a b)
- (add-to-list 'foo 'c) => (c a b)
- (add-to-list 'foo 'b) => (c a b)
- foo => (c a b)
- ** Changes in compilation.
- Functions and variables loaded from a byte-compiled file
- now refer to the file for their doc strings.
- This has a few consequences:
- -- Loading the file is faster and uses less memory.
- -- Reference to doc strings is a little slower (the same speed
- as reference to the doc strings of primitive and preloaded functions).
- -- The compiled files will not work in old versions of Emacs.
- -- If you move the compiled file after loading it, Emacs can no longer
- find these doc strings.
- -- If you alter the compiled file (such as by compiling a new
- version), then further access to documentation strings will get
- nonsense results.
- The byte compiler now optionally supports lazy loading of compiled
- functions' definitions. If you enable this feature when you compile,
- loading the compiled file does not actually bring the function
- definitions into core. Instead it creates references to the compiled
- file, and brings each function's definition into core the first time
- you call that function, or when you force it with the new function
- `fetch-bytecode'.
- Using the lazy loading feature has a few consequences:
- -- Loading the file is faster and uses less memory.
- -- Calling any function in the file for the first time is slower.
- -- If you move the compiled file after loading it, Emacs can no longer
- find the function definitions.
- -- If you alter the compiled file (such as by compiling a new
- version), then further access to functions not already loaded
- will get nonsense results.
- To enable the lazy loading feature, set up a non-nil file local
- variable binding for the variable `byte-compile-dynamic' in the Lisp
- source file. For example, put this on the first line:
- -*-byte-compile-dynamic: t;-*-
- It's a good idea to use the lazy loading feature for a file that
- contains many functions, most of which are not actually used by a
- given user in a given session.
- To turn off the basic feature of referring to the file for doc
- strings, set byte-compile-dynamic-docstrings to nil. You can do this
- globally, or for one source file by adding this to the first line:
- -*-byte-compile-dynamic-docstrings: nil;-*-
- ** Strings
- *** Do not pass integer arguments to `concat' (or `vconcat' or
- `append'). We are phasing out the old unrecommended support for
- integers as arguments to these functions, in preparation for treating
- numbers as single characters in a future release. To concatenate
- numbers in string form, use `number-to-string' first, or rewrite the
- call to use `format' instead of `concat'.
- *** The new function match-string returns the string of text matched at
- the given parenthesized expression by the last regexp search, or nil
- if there was no match. If the last match was by `string-match' on a
- string, the string must be given. Therefore, this function can be
- used in place of `buffer-substring' and `substring', when using
- `match-beginning' and `match-end' to find match positions.
- (match-string N) or (match-string N STRING)
- *** The function replace-match now accepts an optional fourth argument,
- STRING. Use this after performing string-match on STRING, to replace
- the portion of STRING that was matched. When used in this way,
- replace-match returns a newly created string which is the same as
- STRING except for the matched portion.
- *** The new function buffer-substring-no-properties
- is like buffer-substring except that the string it returns
- has no text properties.
- *** The function `equal' now considers two strings to be different
- if they don't have the same text properties.
- ** Completion
- *** all-completions now takes an optional fourth argument.
- If that argument is non-nil, completions that start with a space
- are ignored unless the initial string also starts with a space.
- (This used to happen unconditionally.)
- ** Local Variables
- *** Local hook variables.
- There is now a clean way to give a hook variable a buffer-local value.
- Call the function `make-local-hook' to do this.
- Once a hook variable is buffer-local, you can add hooks to it either
- globally or locally. run-hooks runs the local hook functions
- of the current buffer, then all the global hook functions.
- The functions add-hook and remove-hook take an additional optional
- argument LOCAL which says whether to add (or remove) a local hook
- function or a global one.
- Local hooks use t as an element of the (local) value of the hook
- variable as a flag meaning to use the global value also.
- *** The new function local-variable-p tells you whether a particular
- variable is buffer-local in the current buffer or a specified buffer.
- ** Editing Facilities
- *** The function copy-region-as-kill no longer sets this-command;
- as a result, a following kill command will not normally append
- to the text saved by copy-region-as-kill.
- *** Regular expression searching and matching no longer performs full
- Posix backtracking by default. They now stop with the first match found
- instead of looking for the longest match--just as they did in Emacs 18.
- The reason for this change is to get higher speed.
- There are new functions you can use if you really want to search or
- match with Posix behavior: posix-search-forward,
- posix-search-backward, posix-looking-at, and posix-string-match. Call
- these just like re-search-forward, re-search-backward, looking-at, and
- string-match.
- ** Files
- *** The new variable `format-alist' defines file formats,
- which are ways of translating between the data in a file and things
- (text, text-properties, and possibly other information) in a buffer.
- `format-alist' has one element for each format. Each element is a
- list like this:
- (NAME DOC-STRING REGEXP FROM-FN TO-FN MODIFY MODE-FN)
- containing the name of the format, a documentation string, a regular
- expression which is used to recognize files in that format, a decoding
- function, an encoding function, a flag that indicates whether the
- encoding function modifies the buffer, and a mode function.
- FROM-FN is called to decode files in that format; it gets two args, BEGIN
- and END, and can make any modifications it likes, returning the new
- end position. It must make sure that the beginning of the file no
- longer matches REGEXP, or else it will get called again.
- TO-FN is called to encode a region into that format; it is also passed BEGIN
- and END, and either returns a list of annotations as in
- `write-region-annotate-functions', or modifies the region and returns
- the new end position.
- MODIFY, if non-nil, means the TO-FN modifies the region. If nil, TO-FN may
- not make any changes and should return a list of annotations.
- `insert-file-contents' checks the beginning of the file that it is
- inserting to see if it matches one of the regexps. If so, then it
- calls the decoding function, and then looks for another match. When
- visiting a file, it also calls the mode function, and sets the
- variable `buffer-file-format' to the list of formats that the file
- used.
- `write-region' calls the encoding functions for each format in
- `buffer-file-format' before it writes the file. To save a file in a
- different format, either set `buffer-file-format' to a different
- value, or call the new function `format-write-file'.
- Since some encoding functions may be slow, you can request that
- auto-save use a format different from the buffer's default by setting
- the variable `auto-save-file-format' to the desired format. This will
- determine the format of all auto-save files.
- *** The new function file-ownership-preserved-p tells you whether
- deleting a file and recreating it would keep the file's owner
- unchanged.
- *** The new function file-regular-p returns t if a file
- is a "regular" file (not a directory, symlink, named pipe,
- terminal, or other I/O device).
- *** The new function file-name-sans-extension discards the extension
- of a file name. You call it with a file name, and returns a string
- lacking the extension.
- *** The variable path-separator is a string which says which
- character separates directories in a search path. It is ":"
- for Unix and GNU systems, ";" for MSDOG and Windows NT.
- ** Commands and Key Sequences
- *** Key sequences consisting of C-c followed by {, }, <, >, : or ; are
- now reserved for major modes. Sequences consisting of C-c followed by
- any other punctuation character are now meant for minor modes. We don't
- plan to convert all existing major modes to stop using those sequences,
- but we hope to keep them to a minimum.
- *** When the post-command-hook or the pre-command-hook gets an error, the error
- is silently ignored. Emacs no longer sets the hook variable to nil when this
- happens. Meanwhile, the hook functions can now alter the hook variable in
- a normal fashion; there is no need to do anything special.
- *** define-key, lookup-key, and various other functions for changing or
- looking up key bindings now let you write an event type with a list
- like (ctrl meta newline) or (meta ?d), as in XEmacs. (ctrl meta newline)
- is equivalent to the event type symbol C-M-newline, and (meta ?d)
- is equivalent to the character ?\M-d.
- *** The function event-convert-list converts a list such as
- (meta ?d) into the corresponding event type (a symbol or integer).
- *** In an interactive spec, `k' means to read a key sequence. In this
- key sequence, upper case characters and shifted function keys which
- have no bindings are converted to lower case if that makes them
- defined.
- The new interactive code `K' reads a key sequence similarly, but does
- not convert the last event. `K' is useful for reading a key sequence
- to be given a binding.
- *** The variable overriding-local-map now has no effect on the menu bar
- display unless overriding-local-map-menu-flag is non-nil. This is why
- incremental search no longer temporarily changes the menu bars.
- Note that overriding-local-map does still affect the execution of key
- sequences entered using the menu bar. So if you use
- overriding-local-map, and a menu bar key sequence comes in, you should
- make sure to clear overriding-local-map before that key sequence gets
- looked up and executed. But this is what you'd normally do anyway:
- programs that use overriding-local-map normally exit and "put back"
- any event such as menu-bar that they do not handle specially.
- *** The new variable `overriding-terminal-local-map' is like
- overriding-local-map, but is specific to a single terminal.
- *** delete-frame events.
- When you use the X window manager's "delete window" command, this now
- generates a delete-frame event. The standard definition of this event
- is a command that deletes the frame that received the event, and kills
- Emacs when the last visible or iconified frame is deleted. You can
- rebind the event to some other command if you wish.
- *** Two new types of events, iconify-frame and make-frame-visible,
- indicate that the user iconified or deiconified a frame with the
- window manager. Since the window manager has already done the work,
- the default definition for both event types in Emacs is to do nothing.
- ** Frames and X
- *** Certain Lisp variables are now local to an X terminal (in other
- words, all the screens of a single X server). The value in effect, at
- any given time, is the one that belongs to the terminal of the
- selected frame. The terminal-local variables are
- default-minibuffer-frame, system-key-alist, defining-kbd-macro, and
- last-kbd-macro. There is no way for Lisp programs to create others.
- The terminal-local variables cannot be buffer-local.
- *** When you create an X frame, for the `top' and `left' frame
- parameters, you can now use values of the form (+ N) or (- N), where N
- is an integer. (+ N) means N pixels to the right of the left edge of
- the screen and (- N) means N pixels to the left of the right edge. In
- both cases, N may be zero (exactly at the edge) or negative (putting
- the window partly off the screen).
- The function x-parse-geometry can return values of these forms
- for certain inputs.
- *** The variable menu-bar-file-menu has been renamed to
- menu-bar-files-menu to match the actual item that appears in the menu.
- (All the other such variable names do match.)
- *** The new function active-minibuffer-window returns the minibuffer window
- currently active, or nil if none is now active.
- *** In the functions next-window, previous-window, next-frame,
- previous-frame, get-buffer-window, get-lru-window, get-largest-window
- and delete-windows-on, if you specify 0 for the last argument,
- it means to consider all visible and iconified frames.
- *** When you set a frame's cursor type with modify-frame-parameters,
- you can now specify (bar . INTEGER) as the cursor type. This stands
- for a bar cursor of width INTEGER.
- *** The new function facep returns t if its argument is a face name
- (or if it is a vector such as is used internally by the Lisp code
- to represent a face).
- *** Each frame can now have a buffer-predicate function,
- which is the `buffer-predicate' frame parameter.
- When `other-buffer' looks for an alternative buffer, it considers
- only the buffers that fit the selected frame's buffer predicate (if it
- has one). This is useful for applications that make their own frames.
- *** When you create an X frame, you can now specify the frame parameter
- `display'. This says which display to put the frame on. The value
- should be a display name--a string of the form
- "HOST:DPYNUMBER.SCREENNUMBER".
- The functions x-server-... and x-display-... now take an optional
- argument which specifies the display to ask about. You can use either
- a display name string or a frame. A value of nil stands for the
- selected frame.
- To close the connection to an X display, use the function
- x-close-connection. Specify which display with a display name. You
- cannot close the connection if Emacs still has frames open on that
- display.
- x-display-list returns a list indicating which displays Emacs has
- connections to. Its elements are display names (strings).
- *** The icon-type frame parameter may now be a file name.
- Then the contents of that file specify the icon bitmap to use
- for that frame.
- *** The title of an Emacs frame, displayed by most window managers, is
- set from frame-title-format or icon-title-format. These have the same
- structure as mode-line-format.
- *** x-display-grayscale-p is a new function that returns non-nil if
- your X server can display shades of gray. Currently it returns
- non-nil for color displays (because they can display shades of gray);
- we may change it in the next version to return nil for color displays.
- *** The frame parameter scroll-bar-width specifies the width of the
- scrollbar in pixels.
- ** Buffers
- *** Creating a buffer with get-buffer-create does not obey
- default-major-mode. That variable is now handled in a separate
- function, set-buffer-major-mode. get-buffer-create and generate-new-buffer
- always leave the newly created buffer in Fundamental mode.
- Creating a new buffer by visiting a file or with switch-to-buffer,
- pop-to-buffer, and similar functions does call set-buffer-major-mode
- to select the default major mode specified with default-major-mode.
- *** You can now create an "indirect buffer". An indirect buffer shares
- its text, including text properties, with another buffer (the "base
- buffer"), but has its own major mode, local variables, overlays, and
- narrowing. An indirect buffer has a name of its own, distinct from
- those of the base buffer and all other buffers. An indirect buffer
- cannot itself be visiting a file (though its base buffer can be).
- The base buffer cannot itself be indirect.
- Use (make-indirect-buffer BASE-BUFFER NAME) to make an indirect buffer
- named NAME whose base is BASE-BUFFER. If BASE-BUFFER is an indirect
- buffer, its base buffer is used as the base for the new buffer.
- You can make an indirect buffer current, or switch to it in a window,
- just as you would a non-indirect buffer.
- The function buffer-base-buffer, given an indirect buffer, returns its
- base buffer. It returns nil when given an ordinary buffer (not
- indirect).
- The library `noutline' has versions of Outline mode and Outline minor
- mode which let you display different parts of the outline in different
- indirect buffers.
- ** Subprocesses
- *** The functions call-process and call-process-region now allow
- you to direct error message output from the subprocess into a
- separate destination, instead of mixing it with ordinary output.
- To do this, specify for the third argument, BUFFER, a list of the form
- (BUFFER-OR-NAME ERROR-DESTINATION)
- BUFFER-OR-NAME specifies where to put ordinary output; it should
- be a buffer or buffer name, or t, nil or 0. This is what would
- have been the BUFFER argument, ordinarily.
- ERROR-DESTINATION specifies where to put the error output.
- nil means discard it, t means mix it with the ordinary output,
- and a string specifies a file name to write this output into.
- You can't specify a buffer to put the error output in; that is not
- easy to implement directly. You can put the error output into a
- buffer by sending it to a temporary file and then inserting the file
- into a buffer.
- *** Comint mode changes:
- **** The variable comint-completion-addsuffix can also be a cons pair
- of the form (DIRSUFFIX . FILESUFFIX), where DIRSUFFIX and FILESUFFIX are
- strings added on unambiguous or exact completion of directories and file
- names, respectively.
- ** Text properties
- *** You can now specify which values of the `invisible' property
- make text invisible in a given buffer. The variable
- `buffer-invisibility-spec', which is always local in all buffers,
- controls this.
- If its value is t, then any non-nil `invisible' property makes
- a character invisible.
- If its value is a list, then a character is invisible if its
- `invisible' property value appears as a member of the list, or if it
- appears as the car of a member of the list.
- When the `invisible' property value appears as the car of a member of
- the `buffer-invisibility-spec' list, then the cdr of that member has
- an effect. If it is non-nil, then an ellipsis appears in place of the
- character. (This happens only for the *last* invisible character in a
- series of consecutive invisible characters, and only at the end of a
- line.)
- If a character's `invisible' property is a list, then Emacs checks each
- element of the list against `buffer-invisibility-spec'. If any element
- matches, the character is invisible.
- *** The command `list-text-properties-at' shows what text properties
- are in effect at point.
- *** Frame objects now exist in Emacs even on systems that don't support
- X Windows. You can create multiple frames, and switch between them
- using select-frame. The selected frame is actually displayed on your
- terminal; other frames are not displayed at all. The selected frame
- number appears in the mode line after `Emacs', except for frame 1.
- Switching frames on ASCII terminals is therefore more or less
- equivalent to switching between different window configurations.
- *** The new variable window-size-change-functions holds a list of
- functions to be called if window sizes change (or if windows are
- created or deleted). The functions are called once for each frame on
- which changes have occurred, with the frame as the sole argument.
- This takes place shortly before redisplay.
- *** The modification hook functions of overlays now work differently.
- They are called both before and after each change. This makes it
- possible for the functions to determine exactly what the change was.
- This change affects three overlay properties: the modification-hooks
- property, a list of functions called for deletions overlapping the
- overlay's range and for insertions inside it; the
- insert-in-front-hooks, a list of functions called for insertions at
- the beginning of the overlay; and the insert-behind-hooks, a list of
- functions called for insertions at the end of the overlay.
- Each function is called both before and after each change that it
- applies to. Before the change, it is called with four arguments:
- (funcall FUNCTION OVERLAY nil START END)
- START and END are the same arguments that the before-change-functions
- receive.
- After the change, each function is called with five arguments:
- (funcall FUNCTION OVERLAY t START END OLDSIZE)
- The last arguments, START and END and OLDSIZE,
- are the same arguments that the after-change-functions receive.
- This means the function must accept either four or five arguments.
- *** You can set defaults for text-properties with the new variable
- `default-text-properties'. Its value is a property list; the values
- specified there are used whenever a character (or its category) does
- not specify a value.
- *** The `face' property of a character or an overlay can now be a list
- of face names. Formerly it had to be just one face name.
- *** Changes in handling the `intangible' text property.
- **** If inhibit-point-motion-hooks is non-nil, then `intangible' properties
- are ignored.
- **** Moving to just before a stretch of intangible text
- is no longer special in any way. Point stays at that place.
- **** When you move point backwards into the midst of intangible text,
- point moves back to the beginning of that text. (It used to move
- forward to the end of that text, which was not very useful.)
- **** When moving across intangible text, Emacs stops wherever the
- property value changes. So if you have two stretches of intangible
- text, with different non-nil intangible properties, it is possible to
- place point between them.
- ** Overlays
- *** Overlay changes.
- **** The new function previous-overlay-change returns the position of
- the previous overlay start or end, before a specified position. This
- is the backwards-moving counterpart of next-overlay-change.
- **** overlay-get now supports category properties on an overlay
- the same way get-text-property supports them as text properties.
- Specifically, if an overlay does not have the property PROP that you
- ask for, but it does have a `category' property which is a symbol,
- then that symbol's PROP property is used.
- **** If an overlay has a non-nil `evaporate' property, it will be
- deleted if it ever becomes empty (i.e., when it spans no characters).
- **** If an overlay has a `before-string' and/or `after-string' property,
- these strings are displayed at the overlay's endpoints.
- ** Filling
- *** The new variable fill-paragraph-function provides a way for major
- modes to override the filling of paragraphs. If this is non-nil,
- fill-paragraph calls it as a function, passing along its sole
- argument. If the function returns non-nil, fill-paragraph assumes it
- has done the job and simply passes on whatever value it returned.
- The usual use of this feature is to fill comments in programming
- language modes.
- *** Text filling and justification changes:
- **** The new variable use-hard-newlines can be used to make a
- distinction between "hard" and "soft" newlines; the fill functions
- will then never remove a newline that was manually inserted. Hard
- newlines are marked with a non-nil `hard' text-property.
- **** The fill-column and left-margin can now be modified by text-properties.
- Most lisp programs should use the new functions (current-fill-column) and
- (current-left-margin), which return the proper values to use for the
- current line.
- **** There are new functions for dealing with margins:
- ***** Set-left-margin and set-right-margin (set the value for a region
- and re-fill). These functions take three arguments: two to specify
- a region, and the desired margin value.
- ***** Increase-left-margin, decrease-left-margin, increase-right-margin, and
- decrease-right-margin (change settings relative to current values, and
- re-fill).
- ***** move-to-left-margin moves point there, optionally adding
- indentation or changing tabs to spaces in order to make that possible.
- beginning-of-line-text also moves past the fill-prefix and any
- indentation added to center or right-justify a line, to the beginning
- of the text that the user actually typed.
- ***** delete-to-left-margin removes any left-margin indentation, but
- does not change the property.
- **** The paragraph-movement functions look for the paragraph-start and
- paragraph-separate regexps at the current left margin, not at the
- beginning of the line. This means that those regexps should NOT use ^
- to anchor the search. However, for backwards compatibility, a ^ at
- the beginning of the regexp will be ignored, so most packages won't break.
- **** justify-current-line is now capable of doing left, center, or
- right justification as well as full justification.
- **** The fill functions can do any kind of justification based on the new
- `justification' text-property and `default-justification' variable,
- or arguments to the functions. They also have a new option which
- defeats the normal removal of extra whitespace.
- **** The new function `current-justification' returns the kind of
- justification used for the current line. The new function
- `set-justification' can be used to change it, including re-justifying
- the text of the region according to the new value.
- **** Filling and auto-fill are disabled if justification is `none'.
- **** The auto-fill-function is now called regardless of whether
- the fill-column has been exceeded; the function can determine on its
- own whether filling (or justification) is necessary.
- ** Processes
- *** process-tty-name is a new function that returns the name of the
- terminal that the process itself reads and writes on (not the name of
- the pty that Emacs uses to talk with that terminal).
- *** Errors in process filters and sentinels are now normally caught
- automatically, so that they don't abort other Lisp programs.
- Setting debug-on-error non-nil turns off this feature; then errors in
- filters and sentinels are not caught. As a result, they can invoke
- the debugger, under the control of debug-on-error.
- *** Emacs now preserves the match data around the execution of process
- filters and sentinels. You can use search and match functions freely
- in filters and sentinels without explicitly bothering to save the
- match data.
- ** Display
- *** The variable message-log-max controls how messages are logged in the
- "*Messages*" buffer. An integer value means to keep that many lines;
- t means to log with no limit; nil means disable message logging. Lisp
- code that calls `message' excessively (e.g. isearch.el) should probably
- bind this variable to nil.
- *** Display tables now have a new element, at index 261, specifying the
- glyph to use for the separator between two side-by-side windows. By
- default, this is the vertical bar character `|'. Probably the only
- other useful character to store for this element is a space, to make
- less visual separation between two side-by-side windows displaying
- related information.
- *** The new mode-line-format spec %c displays the current column number.
- *** The new variable blink-matching-delay specifies how long to keep
- the cursor at the matching open-paren, after you insert a close-paren.
- This is useful mainly on systems which can wait for a fraction of a
- second--you can then specify fractional values such as 0.5.
- *** Faster processing of buffers with long lines
- The new variable cache-long-line-scans determines whether Emacs
- should use caches to handle long lines more quickly. This variable is
- buffer-local, in all buffers.
- Normally, the line-motion functions work by scanning the buffer for
- newlines. Columnar operations (like `move-to-column' and
- `compute-motion') also work by scanning the buffer, summing character
- widths as they go. This works well for ordinary text, but if the
- buffer's lines are very long (say, more than 500 characters), these
- motion functions will take longer to execute. Emacs may also take
- longer to update the display.
- If cache-long-line-scans is non-nil, these motion functions cache
- the results of their scans, and consult the cache to avoid rescanning
- regions of the buffer until the text is modified. The caches are most
- beneficial when they prevent the most searching---that is, when the
- buffer contains long lines and large regions of characters with the
- same, fixed screen width.
- When cache-long-line-scans is non-nil, processing short lines will
- become slightly slower (because of the overhead of consulting the
- cache), and the caches will use memory roughly proportional to the
- number of newlines and characters whose screen width varies.
- The caches require no explicit maintenance; their accuracy is
- maintained internally by the Emacs primitives. Enabling or disabling
- the cache should not affect the behavior of any of the motion functions;
- it should only affect their performance.
- ** System Interface
- *** The function user-login-name now accepts an optional
- argument uid. If the argument is non-nil, user-login-name
- returns the login name for that user id.
- *** system-name, user-name, user-full-name and user-real-name are now
- variables as well as functions. The variables hold the same values
- that the functions would return. The new variable multiple-frames
- is non-nil if at least two non-minibuffer frames are visible. These
- variables may be useful in constructing the value of frame-title-format
- or icon-title-format.
- *** Changes in time-conversion functions.
- **** The new function format-time-string takes a format string and a
- time value. It converts the time to a string, according to the format
- specified. You can specify what kind of conversion to use with
- %-specifications.
- **** The new function decode-time converts a time value into a list of
- specific items of information: the year, month, day of week, day of
- month, hour, minute and second. (A time value is a list of two or
- three integers.)
- **** The new function encode-time converts specific items of time
- information--the second, minute, hour, day, month, year, and time
- zone--into a time value.
- * Changes in Emacs 19.27
- There are no changes; however, here is one bug fix made in 19.26 that users
- think should be documented here.
- ** SPC and DEL in Info now handle menus consistently.
- SPC and DEL scroll through an entire subtree an Info manual. Once you
- scroll through a node far enough to reach a menu, SPC begins moving
- into the subnodes of the menu, starting with the first one. When you
- reach the end of a subnode, SPC moves into the next subnode, and so
- on.
- DEL more or less scrolls through the same text in reverse order.
- * User Editing Changes in Emacs 19.26
- ** In the X toolkit version, if you click on a menu bar item and
- release the button quickly outside the menu, the menu remains visible
- until you click or type something else. If you click on the menu, you
- select from the menu. Any other mouse click makes the menu disappear.
- Keyboard input gets rid of the menu and then is processed normally.
- "Quickly" means within double-click-time milliseconds.
- ** The C-x 5 commands to select a buffer in "another frame" now use an
- existing iconified frame, if any, deiconifying it. They also raise
- the frame.
- ** Region highlighting on a black-and-white-only display now uses
- underlining. Inverse-video had the problem that you couldn't see
- the cursor.
- ** You can now change the height of a window by pressing mouse-1 on
- the mode line and dragging it up and down.
- ** If you set the environment variable LC_CTYPE to iso_8859_1 or
- iso-8859-1, Emacs automatically sets up for display and syntactic
- handling of the ISO Latin-1 character set.
- This does not automatically load any of the packages for input of
- these characters, because it's not yet clear what is right to do.
- You must still explicitly load either iso-transl or iso-acc.
- ** For a read-only buffer that is also modified, the mode line now displays
- %* instead of %%.
- ** M-prior (scroll-other-window-down) is a new command that works like
- M-next (and C-M-v) but scrolls in the opposite direction.
- M-home moves to the beginning of the buffer, in the other window.
- M-end moves to the end of the buffer, in the other window. These two
- commands, along with M-next and M-prior, form a series of commands for
- moving around in the other window.
- ** In change logs, the mail address is now delimited with <...> instead
- of (...).
- This makes it a little more convenient to extract the mail address for
- use in mailing a message.
- ** In Shell mode and other comint modes, C-a has now returned to
- its ordinary meaning: move to the beginning of the line.
- Use C-c C-a to move to the end of the prompt.
- ** If you set mail-signature to t to cause automatic insertion of
- your .signature file, you now get a -- before the signature.
- ** Setting rmail-highlighted-headers to nil entirely turns off
- highlighting in Rmail. However, if your motivation for doing this is
- that the highlighted text doesn't look good on your display, it might
- be better to change the appearance of the `highlight' face. Once
- you've done that, you may find Rmail highlighting is useful.
- ** In the calendar, mouse-2 is now used only for commands that apply to a date.
- If you click it when not on a date, it gives an immediate error.
- Mouse-3 in the calendar now gives a menu of commands that do not apply
- to a particular date.
- The D command displays diary entries from a specified diary file (not
- your standard diary file).
- ** In the gnus-uu package, the binding for gnus-uu-threaded-decode-and-view
- is now C-c C-v C-d, not C-c C-v C-h. Thus, C-c C-v C-h is now available
- for asking for a list of the subcommands of C-c C-v.
- ** You can now specify "who you are" for various Emacs packages by
- setting just one variable, user-mail-address. This currently applies
- to posting news with GNUS and to making change log entries. It may
- apply to additional Emacs features in the future.
- * Lisp-Level Changes in Emacs 19.26:
- ** The function insert-char now takes an optional third argument
- which, if non-nil, says the inserted characters should inherit sticky
- text properties from the surrounding text.
- ** The `diary' library has been renamed to `diary-lib'. If you refer
- to this library in your Lisp code, you must update the references.
- ** Sending text to a subprocess can read input from subprocesses if it
- has to wait because the destination subprocess's terminal input buffer
- is full.
- It was already possible in unusual occasions for this operation to
- read subprocess input, but it did not happen very often. It is now
- more likely to happen.
- ** last-nonmenu-event is now bound to t around filter functions and sentinels.
- This is to ensure that y-or-n-p and yes-or-no-p use the keyboard by default.
- ** In mode lines, %+ now displays as % for unmodified read-only
- buffers. It is now the same as %* except in the case of a modified
- read-only buffer; in that case, %+ displays as *.
- The old meaning of %+ is now available on %&.
- It displays * for a modified buffer and - for an unmodified buffer,
- regardless of read-only status.
- ** You can now use `underline' in the color list of a face.
- It serves as a last resort, and says to underline the face
- (if previous color list elements can't be used).
- ** The new function x-color-values returns the list of color values
- for a given color name (a string). The list contains three integers
- which give the amounts of red, green and blue in the color: (R G B).
- ** In run-at-time, 0 as the repeat interval means "don't repeat".
- ** The variable trim-versions-without-asking has been renamed to
- delete-old-versions.
- ** The new function other-window-for-scrolling returns the choice of
- other window for C-M-v to scroll.
- ** Note that the function fceiling was mistakenly documented as fceil before.
- * Changes in cc-mode.el in Emacs 19.26:
- ** A new syntactic symbol has been added: substatement-open. It
- defines the open brace of a substatement block. These used to get:
- ((block-open ...) (substatement . ...)).
- Non-block substatement lines still get just ((substatement . ...))
- Note that the custom indent function c-adaptive-block-open has been
- removed as obsolete.
- ** You can now specify the `hanginess' of closing braces. See
- c-hanging-braces-alist.
- ** Recognizes try and catch blocks in C++. They are given the
- substatement syntactic symbol.
- ** should be generally more forgiving about non-GNU standard top-level
- construct definition styles (i.e. where the function/class/struct
- opening brace does not start in column zero).
- If you hang the braces that open a top-level construct on the right
- edge, and you find you still need to define defun-open-prompt (Emacs
- 19) please let me know. Note that there may still be performance
- issues related to non-column zero opening braces.
- ** c-macro-expand is put on C-c C-e
- ** New style: "Default". Resets indentation to those shipped with
- cc-mode.el.
- ** internal defun c-indent-via-language-element has been renamed
- c-indent-line for compatibility with c-mode.el and awk-mode.
- ** new buffer-local variable c-comment-start-regexp for (potential)
- flexibility in adding new modes based on cc-mode.el
- * Changes in Emacs 19.25
- The variable x-cross-pointer-shape (which didn't really exist) has
- been renamed to x-sensitive-text-pointer-shape, and now does exist.
- * Changes in Emacs 19.24
- Here is a list of new Lisp packages introduced since 19.22.
- derived.el Define new major modes based on old ones.
- dired-x.el Extra Dired features.
- double.el New mode for conveniently inputting non-beyond chars.
- easymenu.el Create menus easily.
- ediff.el Snazzy diff interface.
- foldout.el A kind of outline mode designed for editing programs.
- gnus-uu.el UUdecode in GNUS buffers.
- ielm.el Interactively evaluate Lisp.
- This is a replacement for Lisp Interaction Mode.
- iso-cvt.el Conversion of beyond-ASCII characters between
- various different representations.
- jka-compr.el Automatic compression/decompression.
- mldrag.el Drag modeline to change heights of windows.
- mail-hist.el Provides history for headers of outgoing mail.
- rsz-mini.el Automatically resizing minibuffers.
- s-region.el Set region by holding shift.
- skeleton.el Templates for statement insertion.
- soundex.el Classifying words by how they sound.
- tempo.el Template insertion with hotspots.
- * User Editing Changes in 19.23.
- ** Emacs 19.23 uses Ispell version 3.
- Previous Emacs 19 versions used Ispell version 4. That version had
- improvements in storing the dictionary compactly, but these are not
- very important nowadays. Meanwhile, in parallel to the work on Ispell
- 4, many useful features were added to Ispell 3. Until a few months
- ago, the terms on Ispell 3 did not let us use it; but they have now
- been changed, so now we are using it. We are dropping Ispell 4.
- ** Emacs 19.23 can run on MS-DOG. See the file MSDOS in the same
- directory as this file.
- ** Emacs 19.23 can work with an X toolkit. You must specify toolkit
- operation when you configure Emacs: use the option
- --with-x-toolkit=yes. (This option uses code developed by Lucid;
- thanks to Frederic Pierresteguy for helping to adapt it.)
- ** Emacs now has dialog boxes; yes/no and y/n questions automatically
- use them in commands invoked with the mouse. For more information,
- see below under "Lisp programming changes".
- ** Menus now display the keyboard equivalents (if any) of the menu
- commands in parentheses after the menu item.
- ** Kill commands, used in a read-only buffer, now move point across
- the text they would otherwise have killed. This way, you can use
- repeated kill commands to transfer text into the kill ring.
- ** There is now a global mark ring in addition to the mark ring that is local
- to each buffer. The global mark ring stores positions in any buffer. Any
- time the mark is set and the current buffer is different from the last time
- the mark was set, the new mark is pushed on the global mark ring as well.
- The new command C-x C-SPC (pop-global-mark) pops the global mark ring and
- jumps to the last mark pushed, first switching to that buffer.
- ** Query Replace is now available in the Edit menu.
- ** ESC no longer simply exits a Query Replace. It now exits the Query
- Replace and remains pending. Thus, ESC A and M-A are now equivalent
- in Query Replace.
- To simply exit a Query Replace, type RET or Period.
- ** M-mouse-2 now puts point at the end of the yanked secondary selection.
- ** Mouse-1 in the mode line now simply selects the window above that
- mode line. Mouse-2 in the mode line selects that window and expands
- it to fill the frame it is in.
- ** You can now use mouse-2 in a Dired buffer or Tar mode buffer to find
- a file you click on, in a compilation buffer to go to a particular
- error message, and in a *Occur* buffer to go to a particular
- occurrence.
- (It was already possible to do likewise in Info and in completion list
- buffers.)
- What's more, the sensitive areas of the buffer now highlight when you
- move the mouse over them.
- ** In a completion list buffer, the command RET now chooses the completion
- that is around or next to point.
- ** If you specify the foreground color for the `mode-line' face, and
- mode-line-inverse-video is non-nil, then the default background color
- is the usual foreground color.
- ** revert-buffer now preserves markers pointing within the unchanged
- text (if any) at the beginning and end of the file.
- ** Version control checkin and checkout preserve all markers if the
- file does not contain any of the magic version header sequences that
- are updated automatically by RCS and SCCS. If such version headers
- are present, checkin and checkout preserve a marker unless it comes
- between two such sequences. (So it's a good idea to put all the
- header sequences close together.)
- ** When a large deletion shuts off auto save temporarily in a buffer,
- you can now turn it on again by saving the buffer with C-x C-s (as was
- possible in Emacs 18). You can also turn it on again with M-1 M-x
- auto-save (as has been possible in Emacs 19).
- ** C-x r d now runs the command delete-rectangle.
- ** The new command imenu shows you a menu of interesting places in the
- current buffer and lets you select one; then it moves point there.
- The definition of interesting places depends on the major mode, but
- typically this includes function definitions and such. Normally,
- imenu displays the menu in a buffer; but if you bind it to a mouse
- event, it shows a mouse popup menu.
- ** You can make certain chosen buffers, that normally appear in a
- separate window, appear in special frames of their own. To do this,
- set special-display-buffer-names to a list of buffer names; any buffer
- whose name is in that list automatically gets a special frame when it
- is to be displayed in another window.
- A good value to try is ("*compilation*" "*grep*" "*TeX Shell*").
- More generally, you can set special-display-regexps to a list of regular
- expressions; then each buffer whose name matches any of those regular
- expressions gets its own frame.
- The variable special-display-frame-alist specifies the frame
- parameters for these frames. It has a default value, so you don't
- need to set it.
- ** If you set sentence-end-double-space to nil, the fill commands
- expect just one space at the end of a sentence. (If you want the
- sentence commands to accept single spaces, you must modify the regexp
- sentence-end also.)
- ** You can suppress the startup echo area message by adding text like
- this to your .emacs file:
- (setq inhibit-startup-echo-area-message "YOUR-LOGIN-NAME")
- Simply setting inhibit-startup-echo-area-message to your login name is
- not sufficient to inhibit the message; Emacs explicitly checks whether
- .emacs contains an expression as shown above. Your login name must
- appear in the expression as a Lisp string constant.
- This way, you can easily inhibit the message for yourself if you wish,
- but thoughtless copying of your .emacs file will not inhibit the
- message for someone else.
- ** Outline minor mode now uses C-c C-o as a prefix instead of just C-c.
- ** In Outline mode, hide-subtree is now C-c C-d. (It was C-c C-h; but
- that is now a conventional way to ask for help about C-c commands.)
- ** There are two additional commands in Outline mode.
- M-x hide-sublevels
- hides all headers except the topmost N levels.
- M-x hide-other
- hides everything about the body that point is in
- plus the headers leading up from there to the top of the tree.
- ** In iso-transl and iso-insert, the sequences for entering A-ring and
- the AE ligature are now just A and E (plus the initial C-x 8 or Alt).
- You used to have to enter AA or AE, after the C-x 8 prefix of course.
- Likewise for lower case a-ring and ae.
- ** iso-transl now defines convenient Alt keys as well as the C-x 8 prefix.
- Instead of prefixing a sequence with C-x 8, you can add Alt to the
- first character of the sequence. For example, Alt-" a is now a way
- to enter an a-umlaut.
- ** CC mode is a greatly improved mode for C and C++.
- See the following page.
- ** tcl mode is a new major mode. It provides features for
- editing, indenting and running tcl programs.
- ** Compilation minor mode lets you parse error messages in any buffer,
- not just a normal compilation output buffer. Type M-x
- compilation-minor-mode to enable the minor mode; then C-c C-c jumps to
- the source location for the error at point, as in the `*compilation*'
- buffer. If you use compilation-minor-mode in an Rlogin buffer, it
- automatically accesses remote source files by ftp.
- ** Comint and shell mode changes:
- *** Comint modes (including Shell mode, GUD modes, etc.) now bind
- C-M-l to the command comint-show-output. This command scrolls the
- buffer to show the last batch of output from the subprogram.
- *** Completion in Comint modes now truly operates on the string before
- point, rather than the word that point is within.
- *** Comint mode file name completion ignores those files that end with a
- string in the new variable comint-completion-fignore. This variable's
- default value is nil.
- *** Shell mode uses the variable shell-completion-fignore to set
- comint-completion-fignore. The default value is nil, but some
- people prefer ("~" "#" "%").
- *** The function `comint-watch-for-password-prompt' can be used to
- suppress echoing when a subprocess asks for a password. To use it,
- do this:
- (add-hook 'comint-output-filter-functions
- 'comint-watch-for-password-prompt)
- *** You can use M-x shell-strip-ctrl-m to strip ^M characters from
- process output.
- *** In Shell mode, TAB now completes environment variables, if possible,
- and expands directory references.
- *** You can use M-x comint-run to execute any program of your choice in
- a comint mode. Some programs such as shells, rlogin, and debuggers
- have their own specialized modes; this command is one way to use
- comint to run programs for which no such specialized mode exits. (You
- can also run a shell with M-x shell and run the program of your choice
- under the shell--but that gives you the specializations of Shell
- mode.)
- ** When you run GUD (M-x gdb, M-x dbx, and so on), you can use TAB
- to do file name completion in the minibuffer.
- The "Complete" menu includes an item for directory expansion.
- ** GUD working with future versions of GDB will permit TAB for
- GDB-style symbol completion. This will work with GDB 4.13.
- ** Rmail no longer gets new mail automatically when you visit an Rmail
- file specified by name--not even if it is your primary Rmail file. To
- get new mail, type `g'. This feature is an advantage because you now
- have a choice of whether to get new mail. (This change actually
- occurred in an earlier version, but wasn't listed here then, since it
- made the code do what the documentation already said.)
- ** Rmail now highlights certain fields automatically, when you use X
- windows. The variable rmail-highlighted-headers controls which
- fields.
- ** If you set rmail-summary-window-size to an integer, Rmail uses
- a window that many lines high for the summary buffer.
- ** rmail-input-menu is a new command that visits an Rmail file letting
- you choose which file with a mouse menu. rmail-output-menu is
- similar; it outputs the current message, using a mouse menu to choose
- which Rmail file. These commands use the variables
- rmail-secondary-file-directory and rmail-secondary-file-regexp.
- ** The mh-e package has been changed substantially.
- See the file ./MH-E-NEWS for details.
- ** The calendar and diary have new features.
- The menu bar for the calendar contains most of the calendar commands,
- arranged into logical categories.
- Mouse-2 now performs specific-date-related commands when clicked on a
- date in the calendar window and common three-month-related commands
- when clicked elsewhere in the calendar window.
- You can set up colored/shaded highlighting of holidays, diary entry
- dates, and today's date, by setting calendar-holiday-marker,
- diary-entry-marker, and calendar-today-marker to a face instead of a
- character. Using a special face is now the default if you are using a
- window system.
- ** The appt package for displaying appointment reminders has new
- features.
- *** The appt alarm window stays for the full duration of
- appt-display-duration. It no longer disappears when you start typing
- text.
- *** You can change the way the appointment window is created/deleted by
- setting the variables appt-disp-window-function and
- appt-delete-window-function.
- For instance, these variables can be set to functions that display
- appointments in pop-up frames, which are lowered or iconified after
- appt-display-duration seconds.
- ** desktop.el can now save a list of buffer-local variables,
- and saves more global ones.
- ** Pascal mode has been completely rewritten. It now features
- completing of function names, variables and type definitions around
- current point (like M-TAB does with lisp-symbols). There's also an
- outline mode (M-x pascal-outline) that hides the bodies of all
- functions you're not working with.
- ** Edebug has a number of changes:
- *** Edebug syntax error reporting is improved.
- *** Top-level forms and defining forms other than defun and defmacro may
- now be debugged with Edebug.
- *** Edebug specifications may now contain body, &define, name, arg or
- arglist, def-body, and def-form, to support definitions.
- *** edebug-all-defuns is renamed to edebug-all-defs.
- def-edebug-form-spec is replaced by def-edebug-form whose arguments
- are unevaluated. The old names are still available for now.
- *** Frequency counts and coverage data may be displayed for functions being
- debugged.
- *** A global break condition is now checked at every stop point.
- *** The previous condition at a breakpoint may now be edited.
- *** A new "next" mode stops only after expression evaluation.
- *** A new command, top-level-nonstop, does not even stop for unwind-protect,
- as top-level would.
- * Changes in CC mode in Emacs 19.23.
- `cc-mode' provides ANSI C, K&R C, and ARM C++ language editing. It
- represents the merge of c++-mode.el and c-mode.el. cc-mode provides a
- new, more flexible indentation engine so that indentation
- customization is more intuitive. There are two steps to calculating
- indentation: first, CC mode analyzes the line for syntactic content,
- then based on this content it applies user defined offsets and adds
- this offset to the indentation of some previous line.
- The syntactic analysis determines if the line describes a `statement',
- `substatement', `class-open', `member-init-intro', etc. These are
- described in detail with C-h v c-offsets-alist. You can change the
- offsets interactively with C-c C-o (c-set-offsets), or
- programmatically in your c-mode-common-hook, which is run both by
- c-mode and c++-mode. You can also set up "styles" in the same way
- that you could with c-mode.el. The variable c-basic-offset controls
- the basic offset given to a level of indentation.
- If, for example, you wanted to change this style:
- int foo (int i)
- {
- switch (i) {
- case 1:
- printf ("its a foo\n");
- break;
- default:
- printf ("don't know what it is\n");
- break;
- }
- }
- into this:
- int foo (int i)
- {
- switch (i) {
- case 1:
- printf ("its a foo\n");
- break;
- default:
- printf ("don't know what it is\n");
- break;
- }
- }
- you could add the following to your .emacs file:
- (defun my-c-mode-common-hook ()
- (c-set-offset 'case-label 2)
- (c-set-offset 'statement-case-intro 2))
- (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
- ** New variables:
- c-offsets-alist contains an association list of syntactic symbols and
- their relative offsets. Do a "C-h v c-offsets-alist" to get a list of
- all syntactic symbols currently defined, and their meanings. You
- should not change this variable directly; use the supplied interface
- commands c-set-offset and c-set-style.
- c-mode-common-hook is run by both c-mode and c++-mode during their
- common initializations. You should put any customizations that are
- the same for both C and C++ into this hook.
- The variable c-strict-semantics-p is used mainly for debugging. When
- non-nil, CC mode signals an error if it returns a syntactic symbol
- that can't be found in c-offsets-alist.
- If you want CC mode to echo the syntactic analysis for a particular
- line when you hit the TAB key, set c-echo-semantic-information-p to
- non-nil.
- c-basic-offset controls the standard amount of offset for a level of
- indentation. You can set a syntactic symbol's offset to + or - as a
- short-hand for positive or negative c-basic-offset.
- c-comment-only-line-offset lets you control indentation given to lines
- which contain only a comment, in the case of C++ line style comments,
- or the introduction to a C block comment. Comment-only lines at
- column zero can be anchored there independent of the indentation given
- to other comment-only lines.
- c-block-comments-indent-p controls the style of C block comment
- re-indentation. If you put leading stars in front of comment
- continuation lines, you should set this variable to nil.
- c-cleanup-list is a list describing certain C and C++ constructs to be
- "cleaned up" as they are typed, but only when the auto-newline feature
- is turned on. In C++, make sure this variable contains at least
- 'scope-operator so that double colons will not be separated by a
- newline.
- Colons (`:') and braces (`{` and `}') are special in C and C++. For
- certain constructs, you may like them to hang on the right edge of the
- code, or you may like them to start a new line of code. You can use
- the two variables c-hanging-braces-alist and c-hanging-colons-alist
- to control whether newlines are placed before and/or after colons and
- braces when certain C and C++ constructs are entered. For example,
- you can control whether the colon that introduces a C++ member
- initialization list hangs on the right edge, starts a new line, or has
- no newlines either before or after it.
- c-special-indent-hook is run after a line is indented by CC mode. You
- can perform any custom indentations here.
- c-delete-function is the function that is called when a single
- character is deleted with the c-electric-delete command (DEL).
- c-electric-pound-behavior describes what happens when you enter the
- `#' that introduces a cpp macro.
- If c-tab-always-indent is neither t nor nil, then TAB inserts a tab
- when within strings, comments, and cpp directives, but it reindents
- the line unconditionally.
- c-inhibit-startup-warnings-p inhibits warnings about any old
- version of Emacs you might be running, which could be incompatible
- with cc-mode.
- ** There are two new minor-mode features in CC mode: auto-newline and
- hungry-delete. Auto-newline inserts newlines automatically as you
- type certain constructs. Hungry-delete consumes all preceding
- whitespace (spaces, tabs, and newlines) when the delete key is hit.
- You can toggle auto-newline on and off on a per-buffer basis by
- hitting C-c C-a. You can toggle hungry-delete on and off by hitting
- C-c C-d. You can toggle them both on and off together with C-c C-t.
- ** Slash (`/') and star (`*') are now both electric characters.
- ** New commands:
- The new C-c C-o (c-set-offset) command can be used to interactively change
- the offset for a particular syntactic symbol.
- The new command C-c : (c-scope-operator) inserts the C++ scope operator in
- c++-mode only.
- The new command C-c C-q (c-indent-defun) indents the entire enclosing
- top-level function or class.
- The new command C-c C-s (c-show-semantic-information) echos the current
- syntactic analysis without re-indenting the current line.
- The new commands M-x c-forward-into-nomenclature and M-x
- c-backward-into-nomenclature (currently otherwise unbound to a key
- sequence), make movement easier when using the C++ variable naming
- convention of VariableNamesWithoutUnderscoresButEachWordCapitalized.
- ** Command from c-mode.el that have been renamed in cc-mode.el:
- electric-c-brace => c-electric-brace
- electric-c-semi => c-electric-semi&comma
- electric-c-sharp-sign => c-electric-pound
- mark-c-function => c-mark-function
- electric-c-terminator => c-electric-colon
- indent-c-exp => c-indent-exp
- set-c-style => c-set-style
- ** Variables from c-mode.el that are obsolete with cc-mode.el:
- c-indent-level
- c-brace-imaginary-offset
- c-brace-offset
- c-argdecl-indent
- c-label-offset
- c-continued-statement-offset
- c-continued-brace-offset
- * Lisp programming changes in Emacs 19.23.
- ** To pop up a dialog box, call x-popup-dialog.
- It takes two arguments, POSITION and CONTENTS.
- POSITION specifies which frame to place the dialog box over;
- the dialog box always goes on the center of the frame.
- POSITION may be a mouse event, a window, a frame,
- or t meaning use the frame that the mouse is in.
- CONTENTS specifies the contents of the dialog box.
- It looks like a single pane of a popup menu:
- (TITLE ITEM1 ITEM2 ...), where each ITEM has the form (STRING . VALUE).
- The return value is VALUE from the chosen item.
- An ITEM may also be just a string--that makes a nonselectable item.
- An ITEM may also be nil--that means to put all preceding items
- on the left of the dialog box and all following items on the right.
- (By default, approximately half appear on each side.)
- If your Emacs is not using an X toolkit, then it cannot display a
- real dialog box; so instead it displays a pop-up menu in the center
- of the frame.
- ** y-or-n-p, yes-or-no-p and map-y-or-n-p now use menus or dialog boxes
- to ask their question(s) if the command that is running was reached by
- a mouse event.
- If you want to control which way these functions work, bind the
- variable last-nonmenu-event around the call. These functions use the
- keyboard if that variable holds a keyboard event (actually, any
- non-list); they use the mouse if that variable holds a mouse event
- (actually, any list).
- ** The mouse-face property is now implemented, both in overlays and as
- a text property. It specifies a face to use when the mouse is in the
- range of text for which the property is specified.
- ** When text has a non-nil `intangible' property, you cannot move point
- within it or right before it. If you try, point actually moves to the
- end of the intangible text. Note that this means that backward-char
- is a no-op when there is an intangible character to the left of point.
- ** minibuffer-exit-hook is a new normal hook that is run when you
- exit the minibuffer.
- ** The variable x-cross-pointer-shape specifies the cursor shape to use
- when the mouse is over text that has a mouse-face property.
- ** The new variable interpreter-mode-alist specifies major modes to use
- for shell scripts that specify a command interpreter. Its elements
- look like (INTERPRETER . MODE); for example, ("perl" . perl-mode) is
- one element present by default. This feature applies only when the
- file name doesn't indicate which mode to use.
- ** If you use a minibuffer-only frame, set the variable
- minibuffer-auto-raise to t, and entering the minibuffer will then
- raise the minibuffer frame.
- ** If pop-up-frames is t, display-buffer now looks for an existing
- window in any visible frame, showing the specified buffer, and uses
- such a window in preference to making a new frame.
- ** In the functions next-window, previous-window, next-frame,
- previous-frame, get-buffer-window, get-lru-window, get-largest-window
- and delete-windows-on, if you specify `visible' for the last argument,
- it means to consider all visible frames.
- ** Mouse events now give the X and Y coordinates in pixels, rather than
- in characters. You can convert these values to characters by dividing by
- the values of (frame-char-width) and (frame-char-height).
- ** The new functions mouse-pixel-position and set-mouse-pixel-position
- read and set the mouse position in units of pixels. The existing
- functions mouse-position and set-mouse-position continue to work with
- units of characters.
- ** The new function compute-motion is useful for computing the width
- of certain text when it is displayed.
- ** The function vertical-motion now takes an option second argument WINDOW
- which says which window to use for the display calculations.
- vertical-motion always operates on the current buffer.
- It is ok to specify a window displaying some other buffer.
- Then vertical-motion uses the width, hscroll and display-table of
- the specified window, but still scans the current buffer.
- ** An error no longer sets last-command to t; the value of last-command
- does reflect the previous command (the one that got an error).
- If you do not want a particular command to be recognized as the
- previous command in the case where it got an error, you must code that
- command to prevent this. Set this-command to t at the beginning of
- the command, and set this-command back to its proper value at the end,
- like this:
- (defun foo (args...)
- (interactive ...)
- (setq this-command t)
- ...do the work...
- (setq this-command 'foo))
- or like this:
- (defun foo (args...)
- (interactive ...)
- (let ((old-this-command this-command))
- (setq this-command t)
- ...do the work...
- (setq this-command old-this-command)))
- The undo and yank commands do this.
- ** If you specify an explicit title for a new frame when you create it,
- the title is used as the resource name when looking up X resources to
- control the shape of that frame. If you don't specify the frame title,
- the value of x-resource-name is used, as before.
- ** The frame parameter user-position, if non-nil, says that the user
- has specified the frame position. Emacs reports this to the window
- manager, to tell it not to override the position that the user
- specified.
- ** Major modes can now set change-major-mode-hook to arrange for state
- to be cleaned up when the user switches to a new major mode. The function
- kill-all-local-variables runs this hook. For best results, make the hook a
- buffer-local variable so that it will disappear after doing its job and will
- not interfere with the subsequent major mode.
- ** The new variable overriding-local-map, if non-nil, specifies a keymap
- that overrides the current local map, all minor mode keymaps, and all
- text property keymaps. Incremental search uses this feature to override
- all other keymaps temporarily.
- ** A key definition in a menu keymap can now have additional structure:
- in addition to (ITEMNAME [HELPSTRING] . COMMAND) which was allowed
- before, the form (ITEMNAME [HELPSTRING] (...) . COMMAND) is
- allowed. (HELPSTRING is optional, and is not currently used.)
- Here (...) represents a sublist containing information about keyboard
- key sequences that run the same command COMMAND. Displaying the menu
- automatically creates and updates the sublist when appropriate; you
- need never set these up yourself.
- lookup-key, key-binding, and similar functions return just COMMAND,
- not the whole binding.
- To precompute this information for a given keymap, you can do
- (x-popup-menu nil KEYMAP).
- ** When you specify coordinates for x-popup-menu as a list ((XOFFSET
- YOFFSET) WINDOW), the coordinates are now measured in pixels.
- ** where-is-internal now takes just four arguments:
- DEFINITION KEYMAP FIRSTONLY NOINDIRECT.
- The single argument KEYMAP replaces two arguments KEYMAP and KEYMAP1.
- If KEYMAP is non-nil, where-is-internal searches only KEYMAP and the
- global keymap.
- If KEYMAP is nil, where-is-internal searches all the currently active
- keymaps, but finds the active keymaps as if overriding-local-map were
- nil.
- If you pass a list of the form (keymap) as KEYMAP, where-is-internal
- searches only the global map. (This is not a special case--it follows
- from the specifications above.)
- If you pass the value of overriding-local-map as KEYMAP, where-is-internal
- searches in exactly the same was as command execution does.
- ** Use the macro define-derived-mode to define a new major mode that
- inherits the definition of another major mode. Here's how to define a
- command named hypertext-mode that inherits from the command text-mode:
- (define-derived-mode hypertext-mode text-mode "Hypertext"
- "Major mode for hypertext.\n\n\\{hypertext-mode-map}"
- (setq case-fold-search nil))
- (define-key hypertext-mode-map [down-mouse-3] 'do-hyper-link)
- The new mode has its own keymap, which inherits from that of the
- original mode. It also has its own syntax and abbrev tables, which
- are initialized by copying those of the original mode. It also has
- its own mode hook. All are given names made by appending a suffix
- to the name of the new mode.
- ** A syntax table can now inherit the data for some characters from
- standard-syntax-table, while specifying other characters itself.
- Syntax code 13 means "inherit this character from the standard syntax
- table." In modify-syntax-entry, the character `@' represents this code.
- The function `make-syntax-table' now creates a syntax table which
- inherits all letters and control characters (0 to 31 and 128 to 255)
- from the standard syntax table, while copying the other characters
- from the standard syntax table. Most syntax tables in Emacs are set
- up this way.
- This sort of inheritance is useful for people who set up character
- sets with additional alphabetic characters in the range 128 to 255.
- Just changing the standard syntax for these characters affects all
- major modes.
- ** The new function transpose-regions swaps two regions of the buffer.
- It preserves the markers in those two regions, so that they stay with
- the surrounding text as it is swapped.
- ** revert-buffer now runs before-revert-hook at the beginning and
- after-revert-hook at the end. These can be used by minor modes
- that need to clean up state variables.
- ** The new function get-char-property is like get-text-property, but
- checks for overlays with properties as well as for text properties.
- It checks for overlays first, in order of descending priority, and
- text properties last.
- get-char-property allows windows as the OBJECT argument, as well
- as buffers and strings. If you specify a window, then only overlays
- active on that window are considered.
- ** Overlays can have the `invisible' property.
- ** The function insert-file-contents now takes an optional fifth
- argument called REPLACE. If this is t, it means to replace the
- contents of the buffer (actually, just the accessible portion)
- with the contents of the file.
- This is better than simply deleting and inserting the whole thing
- because (1) it preserves some marker positions and (2) it puts less
- data in the undo list.
- ** The variable inhibit-first-line-modes-regexps specifies classes of
- file names for which -*- on the first line should not be looked for.
- ** The variables before-change-functions and after-change-functions
- hold lists of functions to call before and after a change in the
- buffer's text. They work much like before-change-function and
- after-change-function, except that they hold a list of functions
- instead of just one.
- These variables will eventually make before-change-function and
- after-change-function obsolete.
- ** The variable kill-buffer-query-functions holds a list of functions
- to be called with no arguments when a buffer is about to be killed.
- (That buffer is the current buffer when the function is called.)
- If any of the functions returns nil, the buffer is not killed
- (and the remaining functions in the list are not called).
- ** The variable kill-emacs-query-functions holds a list of functions
- to be called with no arguments when you ask to exit Emacs.
- If any of the functions returns nil, the exit is canceled
- (and the remaining functions in the list are not called).
- ** The argument for buffer-disable-undo is now optional,
- like the argument for buffer-enable-undo.
- ** The new variable system-configuration holds the canonical three-part
- GNU configuration name for which Emacs was built.
- ** The function system-name now tries harder to return a fully qualified
- domain name.
- ** The variable emacs-major-version holds the major version number
- of Emacs. (Currently 19.)
- ** The variable emacs-minor-version holds the minor version number
- of Emacs. (Currently 23.)
- ** The default value of comint-input-autoexpand is now nil.
- However, Shell mode sets it from the value of shell-input-autoexpand,
- whose default value is `history'.
- ** The new function set-process-window-size specifies the terminal window
- size for a subprocess. On some systems it sends the subprocess a signal
- to let it know that the size has changed.
- ** %P is a new way to display a percentage in the mode line. It
- displays the percentage of the buffer text that is above the *bottom*
- of the window (which includes the text visible, in the window as well
- as the text above the top). It displays `Top' as well as the
- percentage if the top of the buffer is visible on screen.
- ** %+ in the mode line specs displays `*' if the buffer is modified,
- and otherwise `-'. It never displays `%', as `%*' would do; whether the
- buffer is read-only has no effect on %+.
- ** The new functions ffloor, fceiling, fround and ftruncate take a
- floating point argument and return a floating point result whose value
- is a nearby integer. ffloor returns the nearest integer below; fceiling,
- the nearest integer above; ftruncate, the nearest integer in the
- direction towards zero; fround, the nearest integer.
- ** Setting `print-escape-newlines' to a non-nil value now also makes
- formfeeds print as ``\f''.
- ** auto-mode-alist now has a new feature. If an element has the form
- (REGEXP FUNCTION t), and REGEXP matches the file name, then after calling
- FUNCTION, Emacs deletes the part of the file name that matched REGEXP
- and then searches auto-mode-alist again for a new match.
- This is useful for uncompression packages. An entry of this sort for
- .gz can uncompress the file and then put the uncompressed file in the
- proper mode according to the name sans .gz.
- ** The new function emacs-pid returns the process ID number of Emacs.
- ** user-login-name now consistently checks the LOGNAME environment
- variable before USER. user-original-login-name is obsolete, since it
- provides the same functionality. To ignore the environment variables,
- use user-real-login-name.
- ** There is a more general way of handling the system-specific X
- keysyms. Set the variable system-key-alist to an alist containing
- elements of the form (CODE . SYMBOL), where CODE is the numeric keysym
- code minus the "vendor specific" bit, and symbol is the name for the
- function key.
- ** You can use the variable command-line-functions to set up functions
- to process unrecognized command line arguments. The variable's value
- should be a list of functions of no arguments. The functions are
- called successively until one of them returns non-nil.
- Each function should access the free variables argi (the current
- argument) and command-line-args-left (the remaining arguments). The
- function should return non-nil only if it recognizes and processes the
- argument in argi. If it does so, it may consume following arguments
- as well by removing them from command-line-args-left.
- ** There's a new way for a magic file name handler to run a primitive
- and inhibit handling of the file name. Here is how to do it:
- (let ((inhibit-file-name-handlers
- (cons 'ange-ftp-file-handler
- (and (eq inhibit-file-name-operation operation)
- inhibit-file-name-handlers)))
- (inhibit-file-name-operation operation))
- (apply this-operation args))
- The function find-file-name-handler now takes two arguments. The
- second argument is OPERATION, the operation for which the handler is
- being sought.
- People have suggested that the second argument should be optional, for
- backward compatibility. It would be nice if that were possible, but
- it is not. There is simply no way for find-file-name-handler to do
- the right thing without receiving the proper value for its second
- argument.
- ** The variable completion-regexp-list affects the completion
- primitives try-completion and all-completions. They consider
- only the possible completions that match each regexp in the list.
- ** Case conversion in the function replace-match has been changed.
- The old behavior was this: if any word in the old text was
- capitalized, replace-match capitalized each word of the replacement
- text.
- The new behavior is this: if the first word in the old text is capitalized,
- replace-match capitalizes the first word of the replacement text.
- ** You can now specify a case table with CANON non-nil and EQV nil.
- Then the EQV part of the case table is deduced from CANON.
- ** The new function minibuffer-prompt takes no arguments and returns
- the current minibuffer prompt string.
- The new function minibuffer-prompt-width takes no arguments and
- returns the display width of the minibuffer prompt string.
- ** The new function frame-first-window returns the window at the
- upper left corner of a given frame.
- ** wholenump is a new alias for natnump.
- ** The variable installation-directory, if non-@code{nil}, names a
- directory within which to look for the `lib-src' and `etc'
- subdirectories. This is non-nil when Emacs can't find those
- directories in their standard installed locations, but can find them
- near where the Emacs executable was found.
- ** invocation-name and invocation-directory are now variables as well
- as functions. The variable values are the same values that the
- functions return: the Emacs program name sans directories, and the
- directory it was found in. (invocation-directory may be nil, if Emacs
- can't determine which directory it should be.)
- ** Installation change regarding version number counting.
- The version number of an Emacs executable contains three numbers.
- The first two describe the Emacs release and the third increments
- each time you build Emacs.
- Now the file version.el contains only the first two version numbers.
- The third component is now determined on the basis of the names of the
- existing executable files. This means that version.el is not altered
- by building Emacs.
- * Changes in 19.22.
- ** The mouse click M-mouse-2 now inserts the current secondary
- selection (from Emacs or any other X client) where you click.
- It does not move point.
- This command is called mouse-yank-secondary.
- mouse-kill-secondary no longer has a key binding by default.
- Clicking M-mouse-3 (mouse-secondary-save-then-kill) twice
- may be a convenient enough way of killing the secondary selection.
- Or perhaps there should be a keyboard binding for killing the
- secondary selection. Any suggestions?
- ** New packages:
- *** `icomplete' provides character-by-character information
- about what you could complete if you type TAB.
- *** `avoid' moves the mouse away from point so that it doesn't hide
- your typing.
- *** `shadowfile' helps you update files that are supposed to be stored
- identically in different places (perhaps on different machines).
- ** C-h p now knows about four additional keywords: data, faces, mouse,
- and matching.
- ** The key for starting an inferior Lisp process, in Lisp mode,
- is now C-c C-z instead of C-c C-l.
- ** When the VC commands ask whether to save the buffer, if you say no,
- they signal an error. This is so that you won't operate on the wrong
- data.
- ** ISO Accents mode now supports `"s' as a way of typing German sharp s.
- ** By default, comint buffers (including Shell mode and debuggers)
- no longer try to scroll to keep the cursor on the bottom line.
- This feature was added in 19.21 but did not work smoothly enough.
- ** Emacs now handles the window manager "delete window" operation.
- ** Display of buffers with text properties is much faster now.
- ** The feature previously announced whereby `insert' does not inherit
- text properties from surrounding text was not fully implemented
- before; but now it is. use `insert-and-inherit' if you wish to
- inherit sticky properties from the surrounding text.
- ** The functions next-property-change, previous-property-change,
- next-single-property-change, and previous-single-property-change
- now take one additional optional argument LIMIT that is a position at
- which to stop scanning. If scan ends without finding the property
- change sought, these functions return the specified limit.
- The value returned by previous-single-property-change and
- previous-property-change, when they do find a change, is now one
- greater than what it used to be. It is the position between the two
- characters whose properties differ, which is one greater than the
- position of the first character found (while scanning back) with
- different properties.
- * User editing changes in version 19.21.
- ** ISO Accents mode supports four additional characters:
- A-with-ring (entered as /A), AE ligature (entered as /E),
- and their lower-case equivalents.
- * User editing changes in version 19.20.
- (See following page for Lisp programming changes.)
- Note that some of these changes were made subsequent to the Emacs 19.20
- editions of the Emacs manual and Emacs Lisp manual; therefore, if you
- have those editions, do read this page.
- ** Dragging with mouse button 1 now puts the selected region
- in the kill ring so you can paste it into other X applications.
- ** Double and triple clicks with button 1 now behave as in xterm,
- selecting the word or line surrounding where you click. If you drag
- after the last click, you can select a range of words or lines.
- ** You can use button 3 to extend a mouse-selected region, as in xterm.
- This works for regions selected either by dragging Mouse-1 or by
- multiple-clicking Mouse-1. Clicking Mouse-3 moves the end of the
- region that is (initially) nearer to where you click.
- If the selection was first made by multiple-clicking Mouse-1, and thus
- consists of entire words or lines, Mouse-3 preserves that state.
- As before, clicking Mouse-3 again in the same place kills the region
- thus selected.
- ** The secondary selection commands, M-Mouse-1 and M-Mouse-3, have been
- likewise modified.
- ** You can now search for strings and regexps using the Edit menu bar menu.
- ** You can now access bookmarks using the Bookmark submenu in the File
- menu in the menu bar.
- ** ISO Accents mode, a buffer-local minor mode, provides a convenient
- way to type certain non-ASCII characters. It makes the characters `,
- ', ", ^, ~ and / serve as modifiers for the following letter. ` and '
- add accents, " adds an umlaut or dieresis, ^ adds a circumflex, ~
- adds a tilde, and / adds a slash to the following letter.
- If the following character is not a letter, or cannot be modified as
- requested, then both characters stand for themselves. If you
- duplicate the modifier accent character, that enters the corresponding
- ISO non-spacing accent character (thus, '' enters the ISO acute-accent
- character). To enter a modifier character itself, type it followed by
- a space.
- This feature can be used whenever a key sequence is expected: for
- ordinary insertion, for searching, and for certain command arguments.
- A few special combinations:
- ~c => c with cedilla
- ~d => d with stroke
- ~< => left guillemot
- ~> => right guillemot
- ** iso-transl.el is a new library that replaces iso-insert.el.
- It defines C-x 8 as an insertion prefix for the ISO characters
- between 128 and 255, much like iso-insert, except that iso-transl
- works even in searches and help commands--wherever a key sequence
- is expected.
- To define case-conversion for these characters for ISO 8859/1,
- load the library iso-syntax. (This is not new.)
- ** M-TAB in Text mode now runs the command ispell-complete-word
- which performs completion using the spelling dictionary.
- The spelling correction submenu now includes this command
- and another command which completes a word fragment (that is,
- it doesn't assume that the text to be completed starts at the
- beginning of a word.
- ** In incremental search, you can use M-y to yank the most recent kill
- into the search string.
- ** The new function ispell-message checks the spelling of a message
- you are about to send or post. It ignores text cited from other
- messages.
- To automatically check all your outgoing messages, include the
- following line in your .emacs file:
- (setq news-inews-hook (setq mail-send-hook 'ispell-message))
- ** There is now a separate minibuffer history list for the names of
- extended commands. This history list is used by M-x when reading
- the command name. The motivation for this is to prevent command
- names from appearing in the history used for other minibuffer
- arguments.
- Note that the history list for entire commands that use the minibuffer
- is a separate feature. That history list records a command with all
- its arguments, and you must use C-x ESC ESC to access it.
- ** You can use the new command C-x v ~ VERSION RET to examine a
- specified version of a file that is maintained with version control.
- ** In Indented Text mode, only blank lines now separate paragraphs.
- Indented lines continue the paragraph that is in progress. This makes
- the user option variable adaptive-fill-mode have its intended effect.
- ** Local variable specifications in files for variables whose names end
- in `-hook' and `-function' are now controlled by the variable
- `enable-local-eval', just like the `eval' variable.
- ** C-x r j (jump-to-register) when restoring a frame configuration now
- makes all unwanted frames (existing frames not mentioned in the
- configuration) invisible.
- If you want to delete these unwanted frames, use a prefix argument for
- C-x r j.
- ** You can customize the calendar to display weeks beginning on
- Monday: set the variable `calendar-week-start-day' to 1.
- ** Rmail changes.
- If you save messages to a file in Unix format while viewing a message
- with its whole header, this now copies to the file the entire header
- of each message copied.
- ** Comint mode changes.
- C-c C-e shows as much output as possible in the window.
- C-c RET copies an old input (the one at point)
- and places the copy after the latest prompt.
- C-c C-p and C-c C-n move through the buffer, stopping at places
- where the subshell prompted for input.
- C-c C-h lists the input history in a `*Help*' buffer.
- There are new menu bar items for completion/input/output/signal commands.
- Input behavior is configurable. Variables control whether some windows
- showing the buffer scroll to the bottom before insertion. These are
- `comint-scroll-to-bottom-on-input' and `before-change-function'. By default,
- insertion causes the selected window to scroll to the bottom before insertion
- occurs.
- Subprocess output now keeps point at the end of the buffer in each
- window individually if point was already at the end of the buffer in
- that window.
- If `comint-scroll-show-maximum-output' is non-nil (which is the
- default), then scrolling due to arrival of output tries to place the
- last line of text at the bottom line of the window, so as to show as
- much useful text as possible. (This mimics the scrolling behavior of
- many terminals.)
- By setting `comint-scroll-to-bottom-on-output', you can opt for having
- point jump to the end of the buffer whenever output arrives--no matter
- where in the buffer point was before. If the value is `this', point
- jumps in the selected window. If the value is `all', point jumps in
- each window that shows the comint buffer. If the value is `other',
- point jumps in all nonselected windows that show the current buffer.
- The default value is nil, which means point does not jump to the end.
- Input history insertion is configurable. A variable controls whether only the
- first instance of successive identical inputs is stored in the input history.
- This is `comint-input-ignoredups'.
- Completion (bound to TAB) is now more general. Depending on context,
- completion now operates on the input history, on command names, or (as
- before) on filenames.
- Filename completion is configurable. Variables control whether
- file/directory suffix characters are added (`comint-completion-addsuffix'),
- whether shortest completion is acceptable when no further unambiguous
- completion is possible (`comint-completion-recexact'), and the timing of
- completion candidate listing (`comint-completion-autolist').
- Comint mode now provides history expansion. Insert input using `!'
- and `^', in the same syntax that typical shells use; then type TAB.
- This searches the comint input history for a matching element,
- performs substitution if necessary, and places the result in the
- comint buffer in place of the original input.
- History references in the input may be expanded before insertion into
- the input ring, or on input to the interpreter (and therefore
- visibly). The variable `comint-input-autoexpand' specifies which.
- You can make the SPC key perform history expansion by binding
- SPC to the command `comint-magic-space'.
- The command `comint-dynamic-complete-variable' does variable name
- completion using the environment variables as set within Emacs. The
- variables controlling filename completion apply to variable name
- completion too. This command is normally available through the menu
- bar.
- ** Shell mode
- Paragraph motion and marking commands (default bindings M-{, M-}, M-h) operate
- on output groups (i.e., shell prompt plus associated shell output).
- TAB now completes commands, as well as file names and expand history.
- Commands are searched for along the path that Emacs has on startup.
- C-c C-f now moves forward a command (`shell-forward-command') and
- C-c C-b now moves backward a command (`shell-backward-command').
- Command completion is configurable. The variables controlling
- filename completion in comint mode apply, together with a variable
- controlling whether to restrict possible completions to only files
- that are executable (`shell-command-execonly').
- The input history is initialized from the file name given in the
- variable `shell-input-ring-file-name'--normally `.history' in your
- home directory.
- Directory tracking is more robust. It can cope with command sequences
- and forked commands, and can detect the failure of directory changing
- commands in most circumstances. It's still not infallible, of course.
- You can now configure the behavior of `pushd'. Variables control
- whether `pushd' behaves like `cd' if no argument is given
- (`shell-pushd-tohome'), pop rather than rotate with a numeric argument
- (`shell-pushd-dextract'), and only add directories to the directory
- stack if they are not already on it (`shell-pushd-dunique'). The
- configuration you choose should match the underlying shell, of course.
- * Emacs Lisp programming changes in Emacs 19.20.
- ** A new function `remove-hook' is now used to remove a hook that you might
- have added with `add-hook'.
- ** There is now a Lisp pretty-printer in the library `pp'.
- ** The partial Common Lisp support has been entirely reimplemented.
- ** When you insert text using `insert', `insert-before-markers' or
- `insert-buffer-substring', text properties are no longer inherited
- from the surrounding text.
- When you want to inherit text properties, use the new functions
- `insert-and-inherit' or `insert-before-markers-and-inherit'.
- The self-inserting character command does do inheritance.
- ** Frame creation hooks.
- The function make-frame now runs the normal hooks
- before-make-frame-hook and after-make-frame-hook.
- ** You can now use function-key-map to make a key an alias for other
- key sequences that can vary depending on circumstances. To do this,
- give the key a definition in function-key-map which is a function
- rather than a specific expansion key sequence.
- If the function reads input itself, it can have the effect of altering
- the event that follows. For example, here's how to define C-c h to
- turn the character that follows into a hyper character:
- (define-key function-key-map "\C-ch" 'hyperify)
- (defun hyperify (prompt)
- (let ((e (read-event)))
- (vector (if (numberp e)
- (logior (lsh 1 20) e)
- (if (memq 'hyper (event-modifiers e))
- e
- (add-event-modifier "H-" e))))))
- (defun add-event-modifier (string e)
- (let ((symbol (if (symbolp e) e (car e))))
- (setq symbol (intern (concat string (symbol-name symbol))))
- (if (symbolp e)
- symbol
- (cons symbol (cdr e)))))
- The character translation function gets one argument, which is the
- prompt that was specified in read-key-sequence--or nil if the key
- sequence is being read by the editor command loop. In most cases
- you can just ignore the prompt value.
- ** Changes for reading and writing text properties.
- New low-level Lisp features make it possible to write Lisp programs to
- save text properties in files, and read text properties from files.
- You can program any file format you like.
- The variable `write-region-annotation-functions' should contain a list
- of functions to be run by `write-region' to encode text properties in
- some fashion as annotations to the text that is written.
- Each function in the list is called with two arguments: the start and
- end of the region to be written. These functions should not alter the
- contents of the buffer. Instead, they should return lists indicating
- annotations to write in the file in addition to the text in the
- buffer.
- Each function should return a list of elements of the form (POSITION
- . STRING), where POSITION is an integer specifying the relative
- position in the text to be written, and STRING is the annotation to
- add there.
- Each list returned by one of these functions must be already sorted in
- increasing order by POSITION. If there is more than one function,
- `write-region' merges the lists destructively into one sorted list.
- When `write-region' actually writes the text from the buffer to the
- file, it intermixes the specified annotations at the corresponding
- positions. All this takes place without modifying the buffer.
- The variable `after-insert-file-functions' should contain a list of
- functions to be run each time a file's contents have been inserted into
- a buffer. Each function receives one argument, the length of the
- inserted text; point indicates the start of that text. The function
- should make whatever changes it wants to make, then return the updated
- length of the inserted text, as it stands after those changes. The
- value returned by one function is used as the argument to the next.
- These functions should always return with point at the beginning of
- the inserted text.
- The intended use of `after-insert-file-functions' is for converting
- some sort of textual annotations into actual text properties. But many
- other uses may be possible.
- We now invite users to begin implementing Lisp programs to store and
- retrieve text properties in files, using these new primitive features,
- and thus to experiment with various data formats and find good ones.
- We suggest not trying to handle arbitrary Lisp objects as property
- names or property values--because a program that general is probably
- difficult to write, and slow. Instead, choose a set of possible data
- types that are reasonably flexible, and not too hard to encode.
- ** Comint completion.
- Currently comint-dynamic-complete-command (and associated variable
- comint-after-partial-pathname-command) are set by default to complete a
- filename. Other comint-mode users should have their own functions to achieve
- this. For example, gud-mode could complete debugger commands. A completion
- function is provided solely for this reason (comint-dynamic-simple-complete).
- Other comint-mode users should bind comint-dynamic-complete (shell-mode does
- already).
- ** Comint history reference expansion
- Currently comint-input-autoexpand is 'history, which means only expand
- history on insertion to comint-input-ring. For non-shell modes, this is
- a strange default, since non-shells will not understand history references.
- Perhaps it would be better for the variable to be 'input, which means expand
- on RET.
- The value 'history might possibly be wrong even for shells, since the
- expansion will be done both by comint and the underlying shell (except sh, of
- course). It would be better for expansion to be done by one or the other,
- not both since they may (ahem) disagree. Since it is silly to put a literal
- history reference into comint-input-ring, perhaps it would be better for the
- variable to be 'input too.
- The reason the variable is not 'input by default is that I was attempting to
- adhere to The Principle of Least Astonishment. I didn't want to shock users
- by having their input change in front of their eyes.
- ** Argument delimiters and Comint mode.
- Currently comint-delimiter-argument-list is '(), which means no strings are
- to be treated as delimiters and arguments. In shell-mode, this variable is
- set to shell-delimiter-argument-list, '("|" "&" "<" ">" "(" ")" ";"). Other
- comint-mode users should set this variable too. For example, a lisp-type
- mode might want to set this to '("." "(" ")") or some such.
- ** Comint output hook.
- There is now a hook, comint-output-filter-hook, that is run-hooks'ed by the
- output filter, comint-output-filter. This is useful for scrolling (see
- below), but also things like processing output for specific text, output
- highlighting, etc.
- So that such output processing may be done efficiently, there is a new
- variable, comint-last-output-start, that records the position of the start of
- the last output inserted into the buffer (effectively the previous value
- of process-mark). Output processing functions should process the text
- between comint-last-output-start (or perhaps the beginning of the line that
- the position lies on) and process-mark.
- ** Comint scrolling.
- There is now automatic scrolling of process windows.
- Currently comint-scroll-show-maximum-output is t, which means when scrolling
- output put process-mark at the bottom of the window. There is a good case
- for it to be t, since the user is likely to want to see as much output as
- possible. But, then again, there is a comint-show-maximum-output command.
- ** Comint history retrieval.
- The input following point is not deleted when moving around the input history
- (with M-p etc.). Emacs maintainers may not like this. However, I feel this
- is a useful feature. The simple remedy is to put end-of-line in before
- delete-region in comint-previous-matching-input.
- The input history retrieval commands still wrap-around the input ring, unlike
- Emacs command history.
- * Changes in version 19.19.
- ** The new package bookmark.el records named bookmarks: positions that
- you can jump to. Bookmarks are saved automatically between Emacs
- sessions.
- ** Another simpler package saveplace.el records your position in each
- file when you kill its buffer (or kill Emacs), and jumps to the same
- position when you visit the file again (even in another Emacs
- session). Use `toggle-save-place' to turn on place-saving in a given file;
- use (setq-default save-place t) to turn it on for all files.
- ** In Outline mode, you can now customize how to compute the level of a
- heading line. Set `outline-level' to a function of no arguments which
- returns the level, assuming point is at the beginning of a heading
- line.
- ** You can now specify the prefix key to use for Outline minor mode.
- (The default is C-c.) Set the variable outline-minor-mode-prefix to
- the key sequence you want to use (as a string or vector).
- ** In Bibtex mode, C-c e has been changed to C-c C-b. This is because
- C-c followed by a letter is reserved for users.
- ** The `mod' function is no longer an alias for `%', but is a separate function
- that yields a result with the same sign as the divisor. `floor' now takes an
- optional second argument, which divides the first argument before the floor is
- taken.
- ** `%' no longer allows floating point arguments, since the results were often
- inconsistent with integer `%'.
- * Changes in version 19.18.
- ** Typing C-z in an iconified Emacs frame now deiconifies it.
- ** hilit19 is a new library for automatic highlighting of parts of the
- text in the buffer, based on its meaning and context.
- ** Killing no longer sends the killed text to the X clipboard.
- And large strings are not put in the cut buffer either.
- The variable x-cut-buffer-max specifies the maximum number of characters
- to put in the cut buffer.
- ** The new command C-x 5 o (other-frame) selects different frames,
- successively, in cyclic order. It does for frames what C-x o
- does for windows.
- ** The command M-ESC (eval-expression) has its own command history.
- ** The commands M-! and M-| for running shell commands have their own
- command history.
- ** If the directory containing the Emacs executable has a sibling named
- `lisp', that `lisp' directory is added to the end of `load-path'
- (provided you don't override the normal value with the EMACSLOADPATH
- environment variable). This feature may make it easier to move
- an installed Emacs from place to place.
- ** M-x validate-tex-buffer now records the locations of mismatches
- found in the `*Occur*' buffer. You can go to that buffer and type C-c
- C-c to visit a particular mismatch.
- ** There are new commands in Shell mode.
- C-c C-n and C-c C-p move point to the next or previous shell input line.
- C-c C-d is now another way to send an end-of-file to the subshell.
- ** Changes to calendar/diary.
- Time zone data is now determined automatically, including the
- start/stop days and times of daylight saving time. The code now
- works correctly almost anywhere in the world.
- The format of the holiday specifications has changed and IS NO LONGER
- COMPATIBLE with the old (version 18) format. See the documentation of
- the variable calendar-holidays for details of the new, improved
- format.
- The hook `diary-display-hook' has been split into two:
- diary-display-hook which should be used ONLY for the display and
- `diary-hook' which should be used for appointment notification. If
- diary-display-hook is nil (the default), simple-diary-display is
- used. This allows the diary hooks to be correctly set with add-hook.
- The forms used for dates in diary entries and general display are no
- longer autoloaded, but set at load time; this means they will be set
- correctly based on values you assign to various variables.
- ** The functions x-rebind-key and x-rebind-keys have been deleted,
- because you can accomplish the same job by binding keys to keyboard
- macros.
- ** Emacs now distinguishes double and triple drag events and double and
- triple button-down events. These work analogously to double and
- triple click events.
- Double drag events, if not defined, convert to ordinary click events.
- Double down events, if not defined, convert first to ordinary down
- events, which are then discarded if not defined. Triple events that
- are not defined convert to the corresponding double event; if that is
- also not defined, it may convert further.
- ** The new function event-click-count returns the number of clicks,
- from an event which is a list. It is 1 for an ordinary click, drag,
- or button-down event, 2 for a double event, and 3 or more for a triple
- event.
- ** The new function previous-frame is like next-frame, but moves
- around through the set of existing frames in the opposite order.
- ** The post-command-hook now runs even after commands that get an error
- and return to top level. As a consequence of the same change, this
- hook also runs before Emacs reads the first command. That might sound
- paradoxical, as if this hook were the same as the pre-command-hook.
- Actually, they are not similar; the latter runs before *execution* of
- a command, but after it has been read.
- ** You can turn off the text property hooks that run when point moves
- to certain places in the buffer, by binding inhibit-point-motion-hooks
- to a non-nil value.
- ** Inserting a string with no text properties into the buffer normally
- inherits the properties of the preceding character. You can now
- control this inheritance by setting the front-sticky and
- rear-nonsticky properties of a character.
- If you make a character's front-sticky property t, then insertion
- before the character inherits its properties. If you make the
- rear-nonsticky property t, then insertion after the character does not
- inherit its properties. You can regard characters as normally being
- rear-sticky and not front-sticky, and this is why insertion normally
- inherits from the previous character.
- If neither side of an insertion is suitably sticky, then the inserted
- text gets no properties. If both sides are sticky, then the inserted
- text gets the properties of both sides, with the previous character's
- properties taking precedence when both sides have a property in
- common.
- You can also specify stickiness for individual properties. To do so,
- use a list of property names as the value of the front-sticky property
- or the rear-nonsticky property. For example, if a character has a
- rear-nonsticky property whose value is (face read-only), then
- insertion after the character will not inherit its face property or
- read-only property (if any), but will inherit any other properties.
- The merging of properties when both sides of the insertion are sticky
- takes place one property at a time. If the preceding character is
- rear-sticky for the property, and the property is non-nil, it
- dominates. Otherwise, the following character's property value is
- used if it is front-sticky for that property.
- ** If you give a character a non-nil `invisible' text property, the
- character does not appear on the screen. This works much like
- selective display.
- The details of this feature are likely to change in future Emacs
- versions.
- ** In Info, when you go to a node, it runs the normal hook
- Info-selection-hook.
- ** You can use the new function `invocation-directory' to get the name
- of the directory containing the Emacs executable that was run.
- ** Entry to the minibuffer runs the normal hook minibuffer-setup-hook.
- ** The new function minibuffer-window-active-p takes one argument, a
- minibuffer window, and returns t if the window is currently active.
- * Changes in version 19.17.
- ** When Emacs displays a list of completions in a buffer,
- you can select a completion by clicking mouse button 2
- on that completion.
- ** Use the command `list-faces-display' to display a list of
- all the currently defined faces, showing what they look like.
- ** Menu bar items from local maps now come after the usual items.
- ** The Help menu bar item always comes last in the menu bar.
- ** If you enable Font-Lock mode on a buffer containing a program
- (certain languages such as C and Lisp are supported), everything you
- type is automatically given a face property appropriate to its
- syntactic role. For example, there are faces for comments, string
- constants, names of functions being defined, and so on.
- ** Dunnet, an adventure game, is now available.
- ** Several major modes now have their own menu bar items,
- including Dired, Rmail, and Sendmail. We would like to add
- suitable menu bar items to other major modes.
- ** The key binding C-x a C-h has been eliminated.
- This is because it got in the way of the general feature of typing
- C-h after a prefix character. If you want to run
- inverse-add-global-abbrev, you can use C-x a - or C-x a i g instead.
- ** If you set the variable `rmail-mail-new-frame' to a non-nil value,
- all the Rmail commands to send mail make a new frame to do it in.
- When you send the message, or use the menu bar command not to send it,
- that frame is deleted.
- ** In Rmail, the o and C-o commands are now almost interchangeable.
- Both commands check the format of the file you specify, and append
- the message to it in Rmail format if it is an Rmail file, and in
- inbox file format otherwise. C-o and o are different only when you
- specify a new file.
- ** The function `copy-face' now takes an optional fourth argument
- NEW-FRAME. If you specify this, it copies the definition of face
- OLD-FACE on frame FRAME to face NEW-NAME on frame NEW-FRAME.
- ** A local map can now cancel out one of the global map's menu items.
- Just define that subcommand of the menu item with `undefined'
- as the definition. For example, this cancels out the `Buffers' item
- for the current major mode:
- (local-set-key [menu-bar buffer] 'undefined)
- ** To put global items at the end of the menu bar, use the new variable
- `menu-bar-final-items'. It should be a list of symbols--event types
- bound in the menu bar. The menu bar items for these symbols are
- moved to the end.
- ** The list returned by `buffer-local-variables' now contains cons-cell
- elements of the form (SYMBOL . VALUE) only for buffer-local variables
- that have values. For unbound buffer-local variables, the variable
- name (symbol) appears directly as an element of the list.
- ** The `modification-hooks' property of a character no longer affects
- insertion; it runs only for deletion and modification of the character.
- To detect insertion, use `insert-in-front-hooks' and
- `insert-behind-hooks' properties. The former runs when text is
- inserted immediately preceding the character that has the property;
- the latter runs when text is inserted immediately following the
- character.
- ** Buffer modification now runs hooks belonging to overlays as well as
- hooks belonging to characters. If an overlay has a
- `modification-hooks' property, it applies to any change to text in the
- overlay, and any insertion within the overlay. If the overlay has a
- `insert-in-front-hooks' property, it runs for insertion at the
- beginning boundary of the overlay. If the overlay has an
- `insert-behind-hooks' property, it runs for insertion at the end
- boundary of the overlay.
- The values of these properties should be lists of functions. Each
- function is called, receiving as arguments the overlay in question,
- followed by the bounds of the range being modified.
- ** The new `-name NAME' option directs Emacs to search for its X
- resources using the name `NAME', and sets the title of the initial
- frame. This argument was added for consistency with other X clients.
- ** The new `-xrm DATABASE' option tells Emacs to treat the string
- DATABASE as the text of an X resource database. Emacs searches
- DATABASE for resource values, in addition to the usual places. This
- argument was added for consistency with other X clients.
- ** Emacs now searches for X resources in the files specified by the
- XFILESEARCHPATH, XUSERFILESEARCHPATH, and XAPPLRESDIR environment
- variables, emulating the functionality provided by programs written
- using Xt. Because of this change, Emacs will now notice system-wide
- application defaults files, as other X clients do.
- XFILESEARCHPATH and XUSERFILESEARCHPATH should be a list of file names
- separated by colons; XAPPLRESDIR should be a list of directory names
- separated by colons.
- Emacs searches for X resources
- + specified on the command line, with the `-xrm RESOURCESTRING'
- option,
- + then in the value of the XENVIRONMENT environment variable,
- - or if that is unset, in the file named ~/.Xdefaults-HOSTNAME if it exists
- (where HOSTNAME is the hostname of the machine Emacs is running on),
- + then in the screen-specific and server-wide resource properties
- provided by the server,
- - or if those properties are unset, in the file named ~/.Xdefaults
- if it exists,
- + then in the files listed in XUSERFILESEARCHPATH,
- - or in files named LANG/Emacs in directories listed in XAPPLRESDIR
- (where LANG is the value of the LANG environment variable), if
- the LANG environment variable is set,
- - or in files named Emacs in the directories listed in XAPPLRESDIR
- - or in ~/LANG/Emacs (if the LANG environment variable is set),
- - or in ~/Emacs,
- + then in the files listed in XFILESEARCHPATH.
- The paths in the variables XFILESEARCHPATH, XUSERFILESEARCHPATH, and
- XAPPLRESDIR may contain %-escapes (like the control strings passed to
- the Emacs lisp `format' function or C printf function), which Emacs expands.
- %N is replaced by the string "Emacs" wherever it occurs.
- %T is replaced by "app-defaults" wherever it occurs.
- %S is replaced by the empty string wherever it occurs.
- %L and %l are replaced by the value of the LANG environment variable; if LANG
- is not set, Emacs does not use that directory or file name at all.
- %C is replaced by the value of the resource named "customization"
- (class "Customization"), as retrieved from the server's resource
- properties or the user's ~/.Xdefaults file, or the empty string if
- that resource doesn't exist.
- So, for example,
- if XFILESEARCHPATH is set to the value
- "/usr/lib/X11/%L/%T/%N%C:/usr/lib/X11/%T/%N%C:/usr/lib/X11/%T/%N",
- and the LANG environment variable is set to
- "english",
- and the customization resource is the string
- "-color",
- then, in the last step of the process described above, Emacs checks
- for resources in the first of the following files that is present and
- readable:
- /usr/lib/X11/english/app-defaults/Emacs-color
- /usr/lib/X11/app-defaults/Emacs-color
- /usr/lib/X11/app-defaults/Emacs
- If the LANG environment variable is not set, then Emacs never uses the
- first element of the path, "/usr/lib/X11/%L/%T/%N%C", because it
- contains the %L escape.
- If XFILESEARCHPATH is unset, Emacs uses the default value
- "/usr/lib/X11/%L/app-defaults/Emacs%C:\
- /usr/lib/X11/app-defaults/Emacs%C:\
- /usr/lib/X11/%L/app-defaults/Emacs:\
- /usr/lib/X11/app-defaults/Emacs"
- This feature was added for consistency with other X applications.
- ** The new function `text-property-any' scans the region of text from
- START to END to see if any character's property PROP is `eq' to
- VALUE. If so, it returns the position of the first such character.
- Otherwise, it returns nil.
- The optional fifth argument, OBJECT, specifies the string or buffer to
- be examined.
- ** The new function `text-property-not-all' scans the region of text from
- START to END to see if any character's property PROP is not `eq' to
- VALUE. If so, it returns the position of the first such character.
- Otherwise, it returns nil.
- The optional fifth argument, OBJECT, specifies the string or buffer to
- be examined.
- ** The function `delete-windows-on' now takes an optional second
- argument FRAME, which specifies which frames it should affect.
- + If FRAME is nil or omitted, then `delete-windows-on' deletes windows
- showing BUFFER (its first argument) on all frames.
- + If FRAME is t, then `delete-windows-on' only deletes windows on the
- selected frame; other frames are unaffected.
- + If FRAME is a frame, then `delete-windows-on' only deletes windows on
- the given frame; other frames are unaffected.
- * Changes in version 19.16.
- ** When dragging the mouse to select a region, Emacs now highlights the
- region as you drag (if Transient Mark mode is enabled). If you
- continue the drag beyond the boundaries of the window, Emacs scrolls
- the window at a steady rate until you either move the mouse back into
- the window or release the button.
- ** RET now exits `query-replace' and `query-replace-regexp'; this makes it
- more consistent with the incremental search facility, which uses RET
- to end the search.
- ** In C mode, C-c C-u now runs c-up-conditional.
- C-c C-n and C-c C-p now run new commands that move forward
- and back over balanced sets of C conditionals (c-forward-conditional
- and c-backward-conditional).
- ** The Edit entry in the menu bar has a new alternative:
- "Choose Next Paste". It gives you a menu showing the various
- strings in the kill ring; click on one to select it as the text
- to be yanked ("pasted") the next time you yank.
- ** If you enable Transient Mark mode and set `mark-even-if-inactive' to
- non-nil, then the region is highlighted in a transient fashion just as
- normally in Transient Mark mode, but the mark really remains active
- all the time; commands that use the region can be used even if the
- region highlighting turns off.
- ** If you type C-h after a prefix key, it displays the bindings
- that start with that prefix.
- ** The VC package now searches for version control commands in the
- directories named by the variable `vc-path'; its value should be a
- list of strings.
- ** If you are visiting a file that has locks registered under RCS,
- VC now displays each lock's owner and version number in the mode line
- after the string `RCS'. If there are no locks, VC displays the head
- version number.
- ** When using X, if you load the `paren' library, Emacs automatically
- underlines or highlights the matching paren whenever point is
- next to the outside of a paren. When point is before an open-paren,
- this shows the matching close; when point is after a close-paren,
- this shows the matching open.
- ** The new function `define-key-after' is like `define-key',
- but takes an extra argument AFTER. It places the newly defined
- binding after the binding for the event AFTER.
- ** `accessible-keymaps' now takes an optional second argument, PREFIX.
- If PREFIX is non-nil, it means the value should include only maps for
- keys that start with PREFIX.
- `describe-bindings' also accepts an optional argument PREFIX which
- means to describe only the keys that start with PREFIX.
- ** The variable `prefix-help-command' hold a command to run to display help
- whenever the character `help-char' follows a prefix key and does not have
- a key binding in that context.
- ** Emacs now detects double- and triple-mouse clicks. A single mouse
- click produces a pair events of the form:
- (down-mouse-N POSITION)
- (mouse-N POSITION)
- Clicking the same mouse button again, soon thereafter and at the same
- location, produces another pair of events of the form:
- (down-mouse-N POSITION)
- (double-mouse-N POSITION 2)
- Another click will produce an event pair of the form:
- (down-mouse-N POSITION)
- (triple-mouse-N POSITION 3)
- All the POSITIONs in such a sequence would be identical, except for
- their timestamps.
- To count as double- and triple-clicks, mouse clicks must be at the
- same location as the first click, and the number of milliseconds
- between the first release and the second must be less than the value
- of the lisp variable `double-click-time'. Setting `double-click-time'
- to nil disables multi-click detection. Setting it to t removes the
- time limit; Emacs then detects multi-clicks by position only.
- If `read-key-sequence' finds no binding for a double-click event, but
- the corresponding single-click event would be bound,
- `read-key-sequence' demotes it to a single-click. Similarly, it
- demotes unbound triple-clicks to double- or single-clicks. This means
- you don't have to distinguish between single- and multi-clicks if you
- don't want to.
- Emacs reports all clicks after the third as `triple-mouse-N' clicks,
- but increments the click count after POSITION. For example, a fourth
- click, soon after the third and at the same location, produces a pair
- of events of the form:
- (down-mouse-N POSITION)
- (triple-mouse-N POSITION 4)
- ** The way Emacs reports positions of mouse events has changed
- slightly. If a mouse event includes a position list of the form:
- (WINDOW (PLACE-SYMBOL) (COLUMN . ROW) TIMESTAMP)
- this denotes exactly the same position as the list:
- (WINDOW PLACE-SYMBOL (COLUMN . ROW) TIMESTAMP)
- That is, the event occurred over a non-textual area of the frame,
- specified by PLACE-SYMBOL, a symbol like `mode-line' or
- `vertical-scroll-bar'.
- Enclosing PLACE-SYMBOL in a singleton list does not change the
- position denoted, but the `read-key-sequence' function uses the
- presence or absence of the singleton list to tell whether or not it
- should prefix the event with its place symbol.
- Normally, `read-key-sequence' prefixes mouse events occurring over
- non-textual areas with their PLACE-SYMBOLs, to select the sub-keymap
- appropriate for the event; for example, clicking on the mode line
- produces a sequence like
- [mode-line (mouse-1 POSN)]
- However, if lisp code elects to unread the resulting key sequence by
- placing it in the `unread-command-events' variable, it is important
- that `read-key-sequence' not insert the prefix symbol again; that
- would produce a malformed key sequence like
- [mode-line mode-line (mouse-1 POSN)]
- For this reason, `read-key-sequence' encloses the event's PLACE-SYMBOL
- in a singleton list when it first inserts the prefix, but doesn't
- insert the prefix when processing events whose PLACE-SYMBOLs are
- already thus enclosed.
- * Changes in version 19.15.
- ** `make-frame-visible', which uniconified frames, is now a command,
- and thus may be bound to a key. This makes sense because frames
- respond to user input while iconified.
- ** You can now use Meta mouse clicks to set and use the "secondary
- selection". You can drag M-Mouse-1 across the region you want to
- select. Or you can press M-Mouse-1 at one end and M-Mouse-3 at the
- other (this also copies the text to the kill ring). Repeating M-Mouse-3
- again at the same place kills that text.
- M-Mouse-2 kills the secondary selection.
- Setting the secondary selection does not move point or the mark. It
- is possible to make a secondary selection that does not all fit on the
- screen, by using M-Mouse-1 at one end, scrolling, then using M-Mouse-3
- at the other end.
- Emacs has only one secondary selection at any time. Starting to set
- a new one cancels any previous one. The secondary selection displays
- using a face named `secondary-selection'.
- ** There's a new way to request use of Supercite (sc.el). Do this:
- (add-hook 'mail-citation-hook 'sc-cite-original)
- Currently this works with Rmail. In the future, other Emacs based
- mail-readers should be modified to understand this hook also.
- In the mean time, you should keep doing what you have done in the past
- for those other mail readers.
- ** When a regular expression contains `\(...\)' inside a repetition
- operator such as `*' or `+', and you ask about the range that was matched
- using `match-beginning' and `match-end', the range you get corresponds
- to the *last* repetition *only*. In Emacs 18, you would get a range
- corresponding to all the repetitions.
- If you want to get a range corresponding to all the repetitions,
- put a `\(...\)' grouping *outside* the repetition operator. This
- is the syntax that corresponds logically to the desired result, and
- it works the same in Emacs 18 and Emacs 19.
- (This change actually took place earlier, but we didn't know about it
- and thus didn't document it.)
- * Changes in version 19.14.
- ** To modify read-only text, bind the variable `inhibit-read-only'
- to a non-nil value. If the value is t, then all reasons that might
- make text read-only are inhibited (including `read-only' text properties).
- If the value is a list, then a `read-only' property is inhibited
- if it is `memq' in the list.
- ** If you call `get-buffer-window' passing t as its second argument, it
- will only search for windows on visible frames. Previously, passing t
- as the second argument caused `get-buffer-window' to search all
- frames, visible or not.
- ** If you call `other-buffer' with a nil or omitted second argument, it
- will ignore buffers displayed windows on any visible frame, not just
- the selected frame.
- ** You can specify a window or a frame for C-x # to use when
- selects a server buffer. Set the variable server-window
- to the window or frame that you want.
- ** The command M-( now inserts spaces outside the open-parentheses in
- some cases--depending on the syntax classes of the surrounding
- characters. If the variable `parens-dont-require-spaces' is non-nil,
- it inhibits insertion of these spaces.
- ** The GUD package now supports the debugger known as xdb on HP/UX
- systems. Use M-x xdb. The variable `gud-xdb-directories' lets you
- specify a list of directories to search for source code.
- ** If you are using the mailabbrev package, you should note that its
- function for defining an alias is now called `define-mail-abbrev'.
- This package no longer contains a definition for `define-mail-alias';
- that name is used only in mailaliases.
- ** Inserted characters now inherit the properties of the text before
- them, by default, rather than those of the following text.
- ** The function `insert-file-contents' now takes optional arguments BEG
- and END that specify which part of the file to insert. BEG defaults to
- 0 (the beginning of the file), and END defaults to the end of the file.
- If you specify BEG or END, then the argument VISIT must be nil.
- * Changes in version 19.13.
- ** Magic file names can now handle the `load' operation.
- ** Bibtex mode now sets up special entries in the menu bar.
- ** The incremental search commands C-w and C-y, which copy text from
- the buffer into the search string, now convert it to lower case
- if you are in a case-insensitive search. This is to avoid making
- the search a case-sensitive one.
- ** GNUS now knows your time zone automatically if Emacs does.
- ** Hide-ifdef mode no longer defines keys of the form
- C-c LETTER, since those keys are reserved for users.
- Those commands have been moved to C-c M-LETTER.
- We may move them again for greater consistency with other modes.
- * Changes in version 19.12.
- ** You can now make many of the sort commands ignore case by setting
- `sort-fold-case' to a non-nil value.
- * Changes in version 19.11.
- ** Supercite is installed.
- ** `write-file-hooks' functions that return non-nil are responsible
- for making a backup file if you want that to be done.
- To do so, execute the following code:
- (or buffer-backed-up (backup-buffer))
- You might wish to save the file modes value returned by
- `backup-buffer' and use that to set the mode bits of the file
- that you write. This is what `basic-save-buffer' does when
- it writes a file in the usual way.
- (This is not actually new, but wasn't documented before.)
- * Changes in version 19.10.
- ** The command `repeat-complex-command' is now on C-x ESC ESC.
- It used to be bound to C-x ESC.
- The reason for this change is to make function keys work after C-x.
- ** The variable `highlight-nonselected-windows' now controls whether
- the region is highlighted in windows other than the selected window
- (in Transient Mark mode only, of course, and currently only when
- using X).
- * Changes in version 19.8.
- ** It is now simpler to tell Emacs to display accented characters under
- X windows. M-x standard-display-european toggles the display of
- buffer text according to the ISO Latin-1 standard. With a prefix
- argument, this command enables European character display if and only
- if the argument is positive.
- ** The `-i' command-line argument tells Emacs to use a picture of the
- GNU gnu as its icon, instead of letting the window manager choose an
- icon for it. This option used to insert a file into the current
- buffer; use `-insert' to do that now.
- ** The `configure' script now supports `--prefix' and `--exec-prefix'
- options.
- The `--prefix=PREFIXDIR' option specifies where the installation process
- should put emacs and its data files. This defaults to `/usr/local'.
- - Emacs (and the other utilities users run) go in PREFIXDIR/bin
- (unless the `--exec-prefix' option says otherwise).
- - The architecture-independent files go in PREFIXDIR/lib/emacs/VERSION
- (where VERSION is the version number of Emacs, like `19.7').
- - The architecture-dependent files go in
- PREFIXDIR/lib/emacs/VERSION/CONFIGURATION
- (where CONFIGURATION is the configuration name, like mips-dec-ultrix4.2),
- unless the `--exec-prefix' option says otherwise.
- The `--exec-prefix=EXECDIR' option allows you to specify a separate
- portion of the directory tree for installing architecture-specific
- files, like executables and utility programs. If specified,
- - Emacs (and the other utilities users run) go in EXECDIR/bin, and
- - The architecture-dependent files go in
- EXECDIR/lib/emacs/VERSION/CONFIGURATION.
- EXECDIR/bin should be a directory that is normally in users' PATHs.
- ** When running under X, the new lisp function `x-list-fonts'
- allows code to find out which fonts are available from the X server.
- The first argument PATTERN is a string, perhaps with wildcard characters;
- the * character matches any substring, and
- the ? character matches any single character.
- PATTERN is case-insensitive.
- If the optional arguments FACE and FRAME are specified, then
- `x-list-fonts' returns only fonts the same size as FACE on FRAME.
- * Changes in version 19.
- ** When you kill buffers, Emacs now returns memory to the operating system,
- thus reducing the size of the Emacs process. All the space that you free
- up by killing buffers can now be reused for other buffers no matter what
- their sizes, or reused by other processes if Emacs doesn't need it.
- ** Emacs now does garbage collection and auto saving while it is waiting
- for input, which often avoids the need to do these things while you
- are typing.
- The variable `auto-save-timeout' says how many seconds Emacs should
- wait, after you stop typing, before it does an auto save and a garbage
- collection.
- ** If auto saving detects that a buffer has shrunk greatly, it refrains
- from auto saving that buffer and displays a warning. Now it also turns
- off Auto Save mode in that buffer, so that you won't get the same
- warning again.
- If you reenable Auto Save mode in that buffer, Emacs will start saving
- it again with no further warnings.
- ** A new minor mode called Line Number mode displays the current line
- number in the mode line, updating it as necessary when you move
- point.
- However, if the buffer is very large (larger than the value of
- `line-number-display-limit'), then the line number doesn't appear.
- This is because computing the line number can be painfully slow if the
- buffer is very large.
- ** You can quit while Emacs is waiting to read or write files.
- ** The arrow keys now have default bindings to move in the appropriate
- directions.
- ** You can suppress next-line's habit of inserting a newline when
- called at the end of a buffer by setting next-line-add-newlines to nil
- (it defaults to t).
- ** You can now get back recent minibuffer inputs conveniently. While
- in the minibuffer, type M-p to fetch the next earlier minibuffer
- input, and use M-n to fetch the next later input.
- There are also commands to search forward or backward through the
- history for history elements that match a regular expression. M-r
- searches older elements in the history, while M-s searches newer
- elements. By special dispensation, these commands can always use the
- minibuffer to read their arguments even though you are already in the
- minibuffer when you issue them.
- The history feature is available for all uses of the minibuffer, but
- there are separate history lists for different kinds of input. For
- example, there is a list for file names, used by all the commands that
- read file names. There is a list for arguments of commands like
- `query-replace'. There are also very specific history lists, such
- as the one that `compile' uses for compilation commands.
- ** You can now display text in a mixture of fonts and colors, using the
- "face" feature, together with the overlay and text property features.
- See the Emacs Lisp manual for details. The Emacs Users Manual describes
- how to change the colors and font of standard predefined faces.
- ** You can refer to files on other machines using special file name syntax:
- /HOST:FILENAME
- /USER@HOST:FILENAME
- When you do this, Emacs uses the FTP program to read and write files on
- the specified host. It logs in through FTP using your user name or the
- name USER. It may ask you for a password from time to time; this
- is used for logging in on HOST.
- ** Some C-x key bindings have been moved onto new prefix keys.
- C-x r is a prefix for registers and rectangles.
- C-x n is a prefix for narrowing.
- C-x a is a prefix for abbrev commands.
- C-x r C-SPC
- C-x r SPC point-to-register (Was C-x /)
- C-x r j jump-to-register (Was C-x j)
- C-x r s copy-to-register (Was C-x x)
- C-x r i insert-register (Was C-x g)
- C-x r r copy-rectangle-to-register (Was C-x r)
- C-x r k kill-rectangle
- C-x r y yank-rectangle
- C-x r o open-rectangle
- C-x r f frame-configuration-to-register
- (This saves the state of all windows in all frames.)
- C-x r w window-configuration-to-register
- (This saves the state of all windows in the selected frame.)
- (Use C-x r j to restore a configuration saved with C-x r f or C-x r w.)
- C-x n n narrow-to-region (Was C-x n)
- C-x n p narrow-to-page (Was C-x p)
- C-x n w widen (Was C-x w)
- C-x a l add-mode-abbrev (Was C-x C-a)
- C-x a g add-global-abbrev (Was C-x +)
- C-x a i l inverse-add-mode-abbrev (Was C-x C-h)
- C-x a i g inverse-add-global-abbrev (Was C-x -)
- C-x a e expand-abbrev (Was C-x ')
- (The old key bindings C-x /, C-x j, C-x x and C-x g
- have not yet been removed.)
- ** You can put a file name in a register to be able to visit the file
- quickly. Do this:
- (set-register ?CHAR '(file . NAME))
- where NAME is the file name as a string. Then C-x r j CHAR finds that
- file.
- This is useful for files that you need to visit frequently,
- but that you don't want to keep in buffers all the time.
- ** The keys M-g (fill-region) and C-x a (append-to-buffer)
- have been eliminated.
- ** The new command `string-rectangle' inserts a specified string on
- each line of the region-rectangle.
- ** C-x 4 r is now `find-file-read-only-other-window'.
- ** C-x 4 C-o is now `display-buffer', which displays a specified buffer
- in another window without selecting it.
- ** Picture mode has been substantially improved. The picture editing commands
- now arrange for automatic horizontal scrolling to keep point visible
- when editing a wide buffer with truncate-lines on. Picture-mode
- initialization now does a better job of rebinding standard commands;
- it finds not just their normal keybindings, but any function keys
- attached to them.
- ** If you enable Transient Mark mode, then the mark becomes "inactive"
- after every command that modifies the buffer. While the mark is
- active, the region is highlighted (under X, at least). Most commands
- that use the mark give an error if the mark is inactive, but you can
- use C-x C-x to make it active again. This feature is also sometimes
- known as "Zmacs mode".
- ** Outline mode is now available as a minor mode. This minor mode can
- combine with any major mode; it substitutes the C-c commands of
- Outline mode for those of the major mode. Use M-x outline-minor-mode
- to enable and disable the new mode.
- M-x outline-mode is unchanged; it still switches to Outline mode as a
- major mode.
- ** The default setting of `version-control' comes from the environment
- variable VERSION_CONTROL.
- ** The user option for controlling whether files can set local
- variables is now called `enable-local-variables'. A value of t means
- local-variables lists are obeyed; nil means they are ignored; anything
- else means query the user.
- The user option for controlling use of the `eval' local variable is
- now called is `enable-local-eval'; its values are interpreted like
- those of `enable-local-variables'.
- ** X Window System changes:
- C-x 5 C-f and C-x 5 b switch to a specified file or buffer in a new
- frame. Likewise, C-x 5 m starts outgoing mail in another frame, and
- C-x 5 . finds a tag in another frame.
- When you are using X, C-z now iconifies the selected frame.
- Emacs can now exchange text with other X applications. Killing or
- copying text in Emacs now makes that text available for pasting into
- other X applications. The Emacs yanking commands now insert the
- latest selection set by other applications, and add the text to the
- kill ring. The Emacs commands for selecting and inserting text with
- the mouse now use the kill ring in the same way the keyboard killing
- and yanking commands do.
- The option to specify the title for the initial frame is now `-name NAME'.
- There is currently no way to specify an icon title; perhaps we will add
- one in the future.
- ** Undoing a deletion now puts point back where it was before the
- deletion.
- ** The variables that control how much undo information to save have
- been renamed to `undo-limit' and `undo-strong-limit'. They used to be
- called `undo-threshold' and `undo-high-threshold'.
- ** You can now use kill commands in read-only buffers. They don't
- actually change the buffer, and Emacs will beep and warn you that the
- buffer is read-only, but they do copy the text you tried to kill into
- the kill ring, so you can yank it into other buffers.
- ** C-o inserts the fill-prefix on the newly created line. The command
- M-^ deletes the prefix (if it occurs) after the newline that it
- deletes.
- ** C-M-l now runs the command `reposition-window'. It scrolls the
- window heuristically in a way designed to get useful information onto
- the screen.
- ** C-M-r is now reverse incremental regexp search.
- ** M-z now kills through the target character. In version 18, it
- killed up to but not including the target character.
- ** M-! now runs the specified shell command asynchronously if it
- ends in `&' (just as the shell does).
- ** C-h C-f and C-h C-k are new help commands that display the Info
- node for a given Emacs function name or key sequence, respectively.
- ** The C-h p command system lets you find Emacs Lisp packages by
- topic keywords. Here is a partial list of package categories:
- abbrev abbreviation handling, typing shortcuts, macros
- bib code related to the bib bibliography processor
- c C and C++ language support
- calendar calendar and time management support
- comm communications, networking, remote access to files
- docs support for Emacs documentation
- emulations emulations of other editors
- extensions Emacs Lisp language extensions
- games games, jokes and amusements
- hardware support for interfacing with exotic hardware
- help support for on-line help systems
- i14n internationalization and alternate character-set support
- internal code for Emacs internals, build process, defaults
- languages specialized modes for editing programming languages
- lisp Lisp support, including Emacs Lisp
- local code local to your site
- maint maintenance aids for the Emacs development group
- mail modes for electronic-mail handling
- news support for netnews reading and posting
- processes process, subshell, compilation, and job control support
- terminals support for terminal types
- tex code related to the TeX formatter
- tools programming tools
- unix front-ends/assistants for, or emulators of, UNIX features
- vms support code for vms
- wp word processing
- More will be added soon.
- ** The command to split a window into two side-by-side windows is now
- C-x 3. It was C-x 5.
- ** M-. (find-tag) no longer has any effect on what M-, will do
- subsequently. You can no longer use M-, to find the next similar tag;
- you must use M-. with a prefix argument, instead.
- The motive for this change is so that you can more reliably use
- M-, to resume a suspended `tags-search' or `tags-query-replace'.
- ** C-x s (`save-some-buffers') now gives you more options when it asks
- whether to save a particular buffer. In addition to `y' or `n', you
- can answer `!' to save all the remaining buffers, `.' to save this
- buffer but not save any others, ESC to stop saving and exit the
- command, and C-h to get help. These options are analogous to those
- of `query-replace'.
- ** M-x make-symbolic-link does not expand its first argument.
- This lets you make a link with a target that is a relative file name.
- ** M-x add-change-log-entry and C-x 4 a now automatically insert the
- name of the file and often the name of the function that you changed.
- They also handle grouping of entries.
- There is now a special major mode for editing ChangeLog files. It
- makes filling work conveniently. Each bunch of grouped entries is one
- paragraph, and each collection of entries from one person on one day
- is considered a page.
- ** The `comment-region' command adds comment delimiters to the lines that
- start in the region, thus commenting them out. With a negative argument,
- it deletes comment delimiters from the lines in the region--this cancels
- the effect of `comment-region' without an argument.
- With a positive argument, `comment-region' adds comment delimiters
- but duplicates the last character of the comment start sequence as many
- times as the argument specifies. This is a way of calling attention to
- the comment. In Lisp, you should use an argument at least two, because
- the indentation convention for single semicolon comments does not leave
- them at the beginning of a line.
- ** If `split-window-keep-point' is non-nil, C-x 2 tries to avoid
- shifting any text on the screen by putting point in whichever window
- happens to contain the screen line the cursor is already on.
- The default is that `split-window-keep-point' is non-nil on slow
- terminals.
- ** M-x super-apropos is like M-x apropos except that it searches both
- Lisp symbol names and documentation strings for matches. It describes
- every symbol that has a match in either the symbol's name or its
- documentation.
- Both M-x apropos and M-x super-apropos take an optional second
- argument DO-ALL which controls the more expensive part of the job.
- This includes looking up and printing the key bindings of all
- commands. It also includes checking documentation strings in
- super-apropos. DO-ALL is nil by default; use a prefix arg to make it
- non-nil.
- ** M-x revert-buffer no longer offers to revert from a recent auto-save
- file unless you give it a prefix argument. Otherwise it always
- reverts from the real file regardless of whether there has been an
- auto-save since then. (Reverting from the auto-save file is no longer
- very useful now that the undo capacity is larger.)
- ** M-x recover-file no longer turns off Auto Save mode when it reads
- the last Auto Save file.
- ** M-x rename-buffer, if you give it a prefix argument,
- avoids errors by modifying the new name to make it unique.
- ** M-x rename-uniquely renames the current buffer to a similar name
- with a numeric suffix added to make it both different and unique.
- One use of this command is for creating multiple shell buffers.
- If you rename your shell buffer, and then do M-x shell again, it
- makes a new shell buffer. This method is also good for mail buffers,
- compilation buffers, and any Emacs feature which creates a special
- buffer with a particular name.
- ** M-x compare-windows with a prefix argument ignores changes in whitespace.
- If `compare-ignore-case' is non-nil, then differences in case are also
- ignored.
- ** `backward-paragraph' is now bound to M-{ by default, and `forward-paragraph'
- to M-}. Originally, these commands were bound to M-[ and M-], but they were
- running into conflicts with the use of function keys. On many terminals,
- function keys send a sequence beginning ESC-[, so many users have defined this
- as a prefix key.
- ** C-x C-u (upcase-region) and C-x C-l (downcase-region) are now disabled by
- default; these commands seem to be often hit by accident, and can be
- quite destructive if their effects are not noticed immediately.
- ** The function `erase-buffer' is now interactive, but disabled by default.
- ** When visiting a new file, Emacs attempts to abbreviate the file's
- path using the symlinks listed in `directory-abbrev-alist'.
- ** When you visit the same file in under two names that translate into
- the same name once symbolic links are handled, Emacs warns you that
- you have two buffers for the same file.
- ** If you wish to avoid visiting the same file in two buffers under
- different names, set the variable `find-file-existing-other-name'
- non-nil. Then `find-file' uses the existing buffer visiting the file,
- no matter which of the file's names you specify.
- ** If you set `find-file-visit-truename' non-nil, then the file name
- recorded for a buffer is the file's truename (in which all symbolic
- links have been removed), rather than the name you specify. Setting
- `find-file-visit-truename' also implies the effect of
- `find-file-existing-other-name'.
- ** C-x C-v now inserts the entire current file name in the minibuffer.
- This is convenient if you made a small mistake in typing it. Point
- goes after the last slash, before the last file name component, so if
- you want to replace it entirely, you can use C-k right away to delete
- it.
- ** Commands such as C-M-f in Lisp mode now ignore parentheses within comments.
- ** C-x q now uses ESC to terminate all iterations of the keyboard
- macro, rather than C-d as before.
- ** Use the command `setenv' to set an individual environment variable
- for Emacs subprocesses. Specify a variable name and a value, both as
- strings. This command applies only to subprocesses yet to be
- started.
- ** Use `rot13-other-window' to examine a buffer with rot13.
- This command does not change the text in the buffer. Instead, it
- creates a window with a funny display table that applies the code when
- displaying the text.
- ** The command `M-x version' now prints the current Emacs version; The
- `version' command is an alias for the `emacs-version' command.
- ** More complex changes in existing packages.
- *** `fill-nonuniform-paragraphs' is a new command, much like
- `fill-individual-paragraphs' except that only separator lines separate
- paragraphs. Since this means that the lines of one paragraph may have
- different amounts of indentation, the fill prefix used is the smallest
- amount of indentation of any of the lines of the paragraph.
- *** Filling is now partially controlled by a new minor mode, Adaptive
- Fill mode. When this mode is enabled (and it is enabled by default),
- if you use M-x fill-region-as-paragraph on an indented paragraph and
- you don't have a fill prefix, it uses the indentation of the second
- line of the paragraph as the fill prefix.
- Adaptive Fill mode doesn't have much effect on M-q in most major
- modes, because an indented line will probably count as a paragraph
- starter and thus each line of an indented paragraph will be considered
- a paragraph of its own.
- *** M-q in C mode now runs `c-fill-paragraph', which is designed
- for filling C comments. (We assume you don't want to fill
- the code in a C program.)
- *** M-$ now runs the Ispell program instead of the Unix spell program.
- M-$ starts an Ispell process the first time you use it. But the process
- stays alive, so that subsequent uses of M-$ run very fast.
- If you want to get rid of the process, use M-x kill-ispell.
- To check the entire current buffer, use M-x ispell-buffer.
- Use M-x ispell-region to check just the current region.
- Ispell commands often involve interactive replacement of words.
- You can interrupt the interactive replacement with C-g.
- You can restart it again afterward with C-u M-$.
- During interactive replacement, you can type the following characters:
- a Accept this word this time.
- DIGIT Replace the word (this time) with one of the displayed near-misses.
- The digit you use says which near-miss to use.
- i Insert this word in your private dictionary
- so that Ispell will consider it correct it from now on.
- r Replace the word this time with a string typed by you.
- When the Ispell process starts, it reads your private dictionary which
- is the file `~/ispell.words'. If you "insert" words with the `i' command,
- these words are added to that file, but not right away--only at the end
- of the interactive replacement process.
- Use M-x reload-ispell to reload your private dictionary from
- `~/ispell.words' if you edit it outside of Ispell.
- ** Changes in existing modes.
- *** gdb-mode has been replaced by gud-mode.
- The package gud.el (Grand Unified Debugger) replaces gdb.el in Emacs
- 19. It provides a gdb.el-like interface to any of three debuggers;
- gdb itself, the sdb debugger supported on some Unix systems, or the
- dbx debugger on Berkeley systems.
- You start it up with one of the commands M-x gdb, M-x sdb, or
- M-x dbx. Each entry point finishes by executing a hook; gdb-mode-hook,
- sdb-mode-hook or dbx-mode-hook respectively.
- These bindings have changed:
- C-x C-a > gud-down (was M-d)
- C-x C-a < gud-up (was M-u)
- C-x C-a C-r gud-cont (was M-c)
- C-x C-a C-n gud-next (was M-n)
- C-x C-a C-s gud-step (was M-s)
- C-x C-a C-i gud-stepi (was M-i)
- C-x C-a C-l gud-recenter (was C-l)
- C-d comint-delchar-or-maybe-eof (was C-c C-d)
- These bindings have been removed:
- C-c C-r (was comint-show-output; now gud-cont)
- Since GUD mode uses comint, it uses comint's input history commands,
- superseding C-c C-y (copy-last-shell-input):
- M-p comint-next-input
- M-n comint-previous-input
- M-r comint-previous-similar-input
- M-s comint-next-similar-input
- M-C-r comint-previous-input-matching
- The C-x C-a bindings are also active in source files.
- *** The old TeX mode bindings of M-{ and M-} have been moved to C-c {
- and C-c }. (These commands are `up-list' and `tex-insert-braces';
- they are the TeX equivalents of M-( and M-).) This is because M-{
- and M-} are now globally defined commands.
- *** Changes in Mail mode.
- `%' is now a word-separator character in Mail mode.
- `mail-signature', if non-nil, tells M-x mail to insert your
- `.signature' file automatically. If you don't want your signature in
- a particular message, just delete it before you send the message.
- You can specify the text to insert at the beginning of each line when
- you use C-c C-y to yank the message you are replying to. Set
- `mail-yank-prefix' to the desired string. A value of `nil' (the
- default) means to use indentation, as in Emacs 18. If you use just
- C-u as the prefix argument to C-c C-y, then it does not insert
- anything at the beginning of the lines, regardless of the value of
- `mail-yank-prefix'.
- If you like, you can expand mail aliases as abbrevs, as soon as you
- type them in. To enable this feature, execute the following:
- (add-hook 'mail-setup-hook 'mail-abbrevs-setup)
- This can go in your .emacs file.
- Word abbrevs don't expand unless you insert a word-separator character
- afterward. Any mail aliases that you didn't expand at insertion time
- are expanded subsequently when you send the message.
- *** Changes in Rmail.
- Rmail by default gets new mail only from the system inbox file,
- not from `~/mbox'.
- In Rmail, you can retry sending a message that failed
- by typing `M-m' on the failure message.
- By contrast, another new command M-x rmail-resend is used for
- forwarding a message and marking it as "resent from" you
- with header fields "Resent-From:" and "Resent-To:".
- `e' is now the command to edit a message.
- To expunge, type `x'. We know this will surprise people
- some of the time, but the surprise will not be disastrous--if
- you type `e' meaning to expunge, just turn off editing with C-c C-c
- and then type `x'.
- Another new Rmail command is `<', which moves to the first message.
- This is for symmetry with `>'.
- Use the `b' command to bury the Rmail buffer and its summary buffer,
- if any, removing both of them from display on the screen.
- The variable `rmail-output-file-alist' now controls the default
- for the file to output a message to.
- In the Rmail summary buffer, all cursor motion commands select
- the message you move to. It's really neat when you use
- incremental search.
- You can now issue most Rmail commands from an Rmail summary buffer.
- The commands do the same thing in that buffer that they do in the
- Rmail buffer. They apply to the message that is selected in the Rmail
- buffer, which is always the one described by the current summary
- line.
- Conversely, motion and deletion commands in the Rmail buffer also
- update the summary buffer. If you set the variable
- `rmail-redisplay-summary' to a non-nil value, then they bring the
- summary buffer (if one exists) back onto the screen.
- C-M-t is a new command to make a summary by topic. It uses regexp
- matching against just the subjects of the messages to decide which
- messages to show in the summary.
- You can easily convert an Rmail file to system mailbox format with the
- command `unrmail'. This command reads two arguments, the name of
- the Rmail file to convert, and the name of the new mailbox file.
- (This command does not change the Rmail file itself.)
- Rmail now handles Content Length fields in messages.
- *** `mail-extract-address-components' unpacks mail addresses.
- It takes an address as a string (the contents of the From field, for
- example) and returns a list of the form (FULL-NAME
- CANONICAL-ADDRESS).
- *** Changes in C mode and C-related commands.
- **** M-x c-up-conditional
- In C mode, `c-up-conditional' moves back to the containing
- preprocessor conditional, setting the mark where point was
- previously.
- A prefix argument acts as a repeat count. With a negative argument,
- this command moves forward to the end of the containing preprocessor
- conditional. When going backwards, `#elif' acts like `#else' followed
- by `#if'. When going forwards, `#elif' is ignored.
- **** In C mode, M-a and M-e are now defined as
- `c-beginning-of-statement' and `c-end-of-statement'.
- **** In C mode, M-x c-backslash-region is a new command to insert or
- align `\' characters at the ends of the lines of the region, except
- for the last such line. This is useful after writing or editing a C
- macro definition.
- If a line already ends in `\', this command adjusts the amount of
- whitespace before it. Otherwise, it inserts a new `\'.
- *** New features in info.
- When Info looks for an Info file, it searches the directories
- in `Info-directory-list'. This makes it easy to install the Info files
- that come with various packages. You can specify the path with
- the environment variable INFOPATH.
- There are new commands in Info mode.
- `]' now moves forward a node, going up and down levels as needed.
- `[' is similar but moves backward. These two commands try to traverse
- the entire Info tree, node by node. They are the equivalent of reading
- a printed manual sequentially.
- `<' moves to the top node of the current Info file.
- `>' moves to the last node of the file.
- SPC scrolls through the current node; at the end, it advances to the
- next node in depth-first order (like `]').
- DEL scrolls backwards in the current node; at the end, it moves to the
- previous node in depth-first order (like `[').
- After a menu select, the info `up' command now restores point in the
- menu. The combination of this and the previous two changes means that
- repeated SPC keystrokes do the right (depth-first traverse forward) thing.
- `i STRING RET' moves to the node associated with STRING in the index
- or indices of this manual. If there is more than one match for
- STRING, the `i' command finds the first match.
- `,' finds the next match for the string in the previous `i' command
- If you click the middle mouse button near a cross-reference,
- menu item or node pointer while in Info, you will go to the node
- which is referenced.
- *** Changes in M-x compile.
- You can repeat any previous compilation command conveniently using the
- minibuffer history commands, while in the minibuffer entering the
- compilation command.
- While a compilation is going on, the string `Compiling' appears in
- the mode line. When this string disappears, that tells you the
- compilation is finished.
- The buffer of compiler messages is in Compilation mode. This mode
- provides the keys SPC and DEL to scroll by screenfuls, and M-n and M-p
- to move to the next or previous error message. You can also use C-c
- C-c on any error message to find the corresponding source code.
- Emacs 19 has a more general parser for compiler messages. For example, it
- can understand messages from lint, and from certain C compilers whose error
- message format is unusual. Also, it only parses until it sees the error
- message you want; you never have to wait a long time to see the first
- error, no matter how big the buffer is.
- *** M-x diff and M-x diff-backup.
- This new command compares two files, displaying the differences in an
- Emacs buffer. The options for the `diff' program come from the
- variable `diff-switches', whose value should be a string.
- The buffer of differences has Compilation mode as its major mode, so you
- can use C-x ` to visit successive changed locations in the two
- source files, or you can move to a particular hunk of changes and type
- C-c C-c to move to the corresponding source. You can also use the
- other special commands of Compilation mode: SPC and DEL for
- scrolling, and M-n and M-p for cursor motion.
- M-x diff-backup compares a file with its most recent backup.
- If you specify the name of a backup file, `diff-backup' compares it
- with the source file that it is a backup of.
- *** The View commands (such as M-x view-buffer and M-x view-file) no
- longer use recursive edits; instead, they switch temporarily to a
- different major mode (View mode) specifically designed for moving
- around through a buffer without editing it.
- *** Changes in incremental search.
- **** The character to terminate an incremental search is now RET.
- This is for compatibility with the way most other arguments are read.
- To search for a newline in an incremental search, type LFD (also known
- as C-j).
- **** Incremental search now maintains a ring of previous search
- strings. Use M-p and M-n to move through the ring to pick a search
- string to reuse. These commands leave the selected search ring
- element in the minibuffer, where you can edit it. Type C-s or C-r to
- finish editing and search for the chosen string.
- **** If you type an upper case letter in incremental search, that turns
- off case-folding, so that you get a case-sensitive search.
- **** If you type a space during regexp incremental search, it matches
- any sequence of whitespace characters. If you want to match just a space,
- type C-q SPC.
- **** Incremental search is now implemented as a major mode. When you
- type C-s, it switches temporarily to a different keymap which defines
- each key to do what it ought to do for incremental search. This has
- next to no effect on the user-visible behavior of searching, but makes
- it easier to customize that behavior.
- Emacs 19 eliminates the old variables `search-...-char' that used to
- be the way to specify the characters to use for various special
- purposes in incremental search. Instead, you can define the meaning
- of a character in incremental search by modifying `isearch-mode-map'.
- *** New commands in Buffer Menu mode.
- The command C-o now displays the current line's buffer in another
- window but does not select it. This is like the existing command `o'
- which selects the current line's buffer in another window.
- The command % toggles the read-only flag of the current line's buffer.
- The way to switch to a set of several buffers, including those marked
- with m, is now v. The q command simply quits, replacing the buffer
- menu buffer with the buffer that was displayed previously.
- ** New major modes and packages.
- *** The news reader GNUS is now installed.
- *** There is a new interface for version control systems, called VC.
- It works with both RCS and SCCS; in fact, you don't really have to
- know which one of them is being used, because it automatically deals
- with either one.
- Most of the time, the only command you have to know about is C-x C-q.
- This command normally toggles the read-only flag of the current
- buffer. If the buffer is visiting a file that is maintained with a
- version control system, the command still toggles read-only, but does
- so by checking the file in or checking it out.
- When you check a file in, VC asks you for a log entry by popping up a
- buffer. Edit the entry there, then type C-c C-c when it is ready.
- That's when the actual checkin happens. If you change your mind about
- the checkin, simply switch buffers and don't ever go back to the log
- buffer.
- To start using version control for a file, use the command C-x v v.
- This works like C-x C-q (performing the next logical version-control
- operation needed to change the file's writability) but it will also
- perform initial checkin on an unregistered file.
- By default, VC uses RCS if RCS is installed on your machine;
- otherwise, SCCS. If you want to make the choice explicitly, you can do
- it by setting `vc-default-back-end' to the symbol `RCS' or the symbol
- `SCCS'.
- You can tell when a file you visit is maintained with version control
- because either `RCS' or `SCCS' appears in the mode line.
- *** A new Calendar mode has been added, the work of Edward M. Reingold.
- The mode can display the Gregorian calendar and a variety of other
- calendars at any date, and interacts with a diary facility similar to
- the UNIX `calendar' utility.
- *** There is a new major mode for editing binary files: Hexl mode.
- To use it, use M-x hexl-find-file instead of C-x C-f to visit the file.
- This command converts the file's contents to hexadecimal and lets you
- edit the translation. When you save the file, it is converted
- automatically back to binary.
- You can also use M-x hexl-mode to translate an existing buffer into hex.
- Do this if you have already visited a binary file.
- Hexl mode has a few other commands:
- C-M-d insert a byte with a code typed in decimal.
- C-M-o insert a byte with a code typed in octal.
- C-M-x insert a byte with a code typed in hex.
- C-x [ move to the beginning of a 1k-byte "page".
- C-x ] move to the end of a 1k-byte "page".
- M-g go to an address specified in hex.
- M-j go to an address specified in decimal.
- C-c C-c leave hexl mode and go back to the previous major mode.
- *** Miscellaneous new major modes include Awk mode, Icon mode, Makefile
- mode, Perl mode and SGML mode.
- *** Edebug, a new source-level debugger for Emacs Lisp functions.
- To use Edebug, use the command M-x edebug-defun to "evaluate" a
- function definition in an Emacs Lisp file. We put "evaluate" in
- quotation marks because it doesn't just evaluate the function, it also
- inserts additional information to support source-level debugging.
- You must also do
- (setq debugger 'edebug-debug)
- to cause errors and single-stepping to use Edebug instead of the usual
- Emacs Lisp debugger.
- For more information, see the Edebug manual, which should be included
- in the Emacs distribution.
- *** C++ mode is like C mode, except that it understands C++ comment syntax
- and certain other differences between C and C++. It also has a command
- `fill-c++-comment' which fills a paragraph made of comment lines.
- The command `comment-region' is useful in C++ mode for commenting out
- several consecutive lines, or removing the commenting out of such lines.
- *** A new package for merging two variants of the same text.
- It's not unusual for programmers to get their signals crossed and
- modify the same program in two different directions. Then somebody
- has to merge the two versions. The command `emerge-files' makes this
- easier.
- `emerge-files' reads two file names and compares them. Then it
- displays three buffers: one for each file, and one for the
- differences.
- If the original version of the file is available, you can make things
- even easier using `emerge-files-with-ancestor'. It reads three file
- names--variant 1, variant 2, and the common ancestor--and uses diff3
- to compare them.
- You control the merging interactively. The main loop of Emerge
- consists of showing you one set of differences, asking you what to do
- about them, and doing it. You have a choice of two modes for giving
- directions to Emerge: "fast" mode and "edit" mode.
- In Fast mode, Emerge commands are single characters, and ordinary
- Emacs commands are disabled. This makes Emerge operations fast, but
- prevents you from doing more than selecting the A or the B version of
- differences. In Edit mode, all emerge commands use the C-c prefix,
- and the usual Emacs commands are available. This allows editing the
- merge buffer, but slows down Emerge operations. Edit and fast modes
- are indicated by `F' and `E' in the minor modes in the mode line.
- The Emerge commands are:
- p go to the previous difference
- n go to the next difference
- a select the A version of this difference
- b select the B version of this difference
- j go to a particular difference (prefix argument
- specifies which difference) (0j suppresses display of
- the flags)
- q quit - finish the merge*
- f go into fast mode
- e go into edit mode
- l recenter (C-l) all three windows*
- - and 0 through 9
- prefix numeric arguments
- d a select the A version as the default from here down in
- the merge buffer*
- d b select the B version as the default from here down in
- the merge buffer*
- c a copy the A version of the difference into the kill
- ring
- c b copy the B version of the difference into the kill
- ring
- i a insert the A version of the difference at the point
- i b insert the B version of the difference at the point
- m put the point and mark around the difference region
- ^ scroll-down (like M-v) the three windows*
- v scroll-up (like C-v) the three windows*
- < scroll-left (like C-x <) the three windows*
- > scroll-right (like C-x >) the three windows*
- | reset horizontal scroll on the three windows*
- x 1 shrink the merge window to one line (use C-u l to restore it
- to full size)
- x a find the difference containing a location in the A buffer*
- x b find the difference containing a location in the B buffer*
- x c combine the two versions of this difference*
- x C combine the two versions of this difference, using a
- register's value as the template*
- x d find the difference containing a location in the merge buffer*
- x f show the files/buffers Emerge is operating on in Help window
- (use C-u l to restore windows)
- x j join this difference with the following one
- (C-u x j joins this difference with the previous one)
- x l show line numbers of points in A, B, and merge buffers
- x m change major mode of merge buffer*
- x s split this difference into two differences
- (first position the point in all three buffers to the places
- to split the difference)
- x t trim identical lines off top and bottom of difference
- (such lines occur when the A and B versions are
- identical but differ from the ancestor version)
- x x set the template for the x c command*
- Normally, the merged output goes back in the first file specified.
- If you use a prefix argument, Emerge reads another file name to use
- for the output file.
- Once Emerge has prepared the buffer of differences, it runs the hooks
- in `emerge-startup-hooks'.
- *** Asm mode is a new major mode for editing files of assembler code.
- It defines these commands:
- TAB tab-to-tab-stop.
- LFD Insert a newline and then indent using tab-to-tab-stop.
- : Insert a colon and then remove the indentation
- from before the label preceding colon. Then tab-to-tab-stop.
- ; Insert or align a comment.
- *** Two-column mode lets you conveniently edit two side-by-side columns
- of text. It works using two side-by-side windows, each showing its
- own buffer.
- Here are three ways to enter two-column mode:
- C-x 6 2 makes the current buffer into the left-hand buffer. In the
- right-hand window it puts a buffer whose name is based on the current
- buffer's name.
- C-x 6 b BUFFER RET makes the current buffer into the left-hand buffer,
- and uses buffer BUFFER as the right-hand buffer.
- C-x 6 s splits the current buffer, which contains two-column text,
- into two side-by-side buffers. The old current buffer becomes the
- left-hand buffer, but the text in the right column is moved into the
- right-hand buffer. The current column specifies the split point.
- Splitting starts with the current line and continues to the end of the
- buffer.
- C-x 6 s takes a prefix argument which specifies how many characters
- before point constitute the column separator. (The default argument
- is 1, as usual, so by default the column separator is the character
- before point.) Lines that don't have the column separator at the
- proper place remain unsplit; they stay in the left-hand buffer, and
- the right-hand buffer gets an empty line to correspond.
- You can scroll both buffers together using C-x 6 SPC (scroll up), C-x
- 6 DEL (scroll down), and C-x 6 RET (scroll up one line). C-x 6 C-l
- recenters both buffers together.
- If you want to make a line which will span both columns, put it in
- the left-hand buffer, with an empty line in the corresponding place in
- the right-hand buffer.
- When you have edited both buffers as you wish, merge them with C-x 6
- 1. This copies the text from the right-hand buffer as a second column
- in the other buffer. To go back to two-column editing, use C-x 6 s.
- Use C-x 6 d to dissociate the two buffers, leaving each as it
- stands. (If the other buffer, the one that was not current when you
- type C-x 6 d, is empty, C-x 6 d kills it.)
- *** You can supply command arguments such as files to visit to an Emacs
- that is already running. To do this, you must do this in your .emacs
- file:
- (add-hook 'suspend-hook 'resume-suspend-hook)
- Also you must use the shellscript emacs.csh or emacs.sh, found in the
- etc subdirectory.
- *** Shell mode has been completely replaced.
- The basic idea is the same, but there are new commands available in
- this mode.
- TAB now completes the file name before point in the shell buffer.
- To get a list of all possible completions, type M-?.
- There is a new convenient history mechanism for repeating previous
- commands. Use the command M-p to recall the last command; it copies
- the text of that command to the place where you are editing. If you
- repeat M-p, it replaces the copied command with the previous command.
- M-n is similar but goes in the opposite direction towards the present.
- When you find the command you wanted, you can edit it, or just
- resubmit it by typing RET.
- You can also use M-r and M-s to search for (respectively) earlier or
- later inputs starting with a given string. First type the string,
- then type M-r to yank a previous input from the history which starts
- with that string. You can repeat M-r to find successively earlier
- inputs starting with the same string. You can start moving in the
- opposite direction (toward more recent inputs) by typing M-s instead
- of M-r. As long as you don't use any commands except M-r and M-s,
- they keep using the same string that you had entered initially.
- C-c C-o kills the last batch of output from a shell command. This is
- useful if a shell command spews out lots of output that just gets in
- the way.
- C-c C-r scrolls to display the beginning of the last batch of output
- at the top of the window; it also moves the cursor there.
- C-a on a line that starts with a shell prompt moves to the end of the
- prompt, not to the very beginning of the line.
- C-d typed at the end of the shell buffer sends EOF to the subshell.
- At any other position in the buffer, it deletes a character as usual.
- If Emacs gets confused while trying to track changes in the shell's
- current directory, type M-x dirs to re-synchronize.
- M-x send-invisible reads a line of text without echoing it, and
- sends it to the shell.
- If you accidentally suspend your process, use M-x comint-continue-subjob
- to continue it.
- *** There is now a convenient way to enable flow control on terminals
- where you can't win without it. Suppose you want to do this on
- VT-100 and H19 terminals; put the following in your `.emacs' file:
- (enable-flow-control-on "vt100" "h19")
- When flow control is enabled, you must type C-\ to get the effect of a
- C-s, and type C-^ to get the effect of a C-q.
- The function `enable-flow-control' enables flow control unconditionally.
- ** Changes in Dired
- Dired has many new features which allow you to do these things:
- - Rename, copy, or make links to many files at once.
- - Make distinguishable types of marks for different operations.
- - Display contents of subdirectories in the same Dired buffer as the
- parent directory.
- *** Setting and Clearing Marks
- There are now two kinds of marker that you can put on a file in Dired:
- `D' for deletion, and `*' for any other kind of operation.
- The `x' command deletes only files marked with `D', and most
- other Dired commands operate only on the files marked with `*'.
- To mark files with `D' (also called "flagging" the files), you
- can use `d' as usual. Here are some commands for marking with
- `*' (and also for unmarking):
- **** `m' marks the current file with `*', for an operation other than
- deletion.
- **** `*' marks all executable files. With a prefix argument, it
- unmarks all those files.
- **** `@' marks all symbolic links. With a prefix argument, it unmarks
- all those files.
- **** `/' marks all directory files except `.' and `..'. With a prefix
- argument, it unmarks all those files.
- **** M-DEL removes a specific or all marks from every file. With an
- argument, queries for each marked file. Type your help character,
- usually C-h, at that time for help.
- **** `c' replaces all marks that use the character OLD with marks that
- use the character NEW. You can use almost any character as a mark
- character by means of this command, to distinguish various classes of
- files. If OLD is ` ', then the command operates on all unmarked
- files; if NEW is ` ', then the command unmarks the files it acts on.
- *** Operating on Multiple Files
- The Dired commands to operate directly on files (rename them, copy
- them, and so on) have been generalized to work on multiple files.
- There are also some additional commands in this series.
- All of these commands use the same convention to decide which files to
- manipulate:
- - If you give the command a numeric prefix argument @var{n}, it operates
- on the next @var{n} files, starting with the current file.
- - Otherwise, if there are marked files, the commands operate on all the
- marked files.
- - Otherwise, the command operates on the current file only.
- These are the commands:
- **** `C' copies the specified files. You must specify a directory to
- copy into, or (if copying a single file) a new name.
- If `dired-copy-preserve-time' is non-`nil', then copying sets
- the modification time of the new file to be the same as that of the old
- file.
- **** `R' renames the specified files. You must specify a directory to
- rename into, or (if renaming a single file) a new name.
- Dired automatically changes the visited file name of buffers associated
- with renamed files so that they refer to the new names.
- **** `H' makes hard links to the specified files. You must specify a
- directory to make the links in, or (if making just one link) the name
- to give the link.
- **** `S' makes symbolic links to the specified files. You must specify
- a directory to make the links in, or (if making just one link) the
- name to give the link.
- **** `M' changes the mode of the specified files. This calls the
- `chmod' program, so you can describe the desired mode change with any
- argument that `chmod' would handle.
- **** `G' changes the group of the specified files.
- **** `O' changes the owner of the specified files. (On normal systems,
- only the superuser can do this.)
- The variable `dired-chown-program' specifies the name of the
- program to use to do the work (different systems put `chown' in
- different places.
- **** `Z' compresses or uncompresses the specified files.
- **** `L' loads the specified Emacs Lisp files.
- **** `B' byte compiles the specified Emacs Lisp files.
- **** `P' prints the specified files. It uses the variables
- `lpr-command' and `lpr-switches' just as `lpr-file' does.
- *** Shell Commands in Dired
- `!' reads a shell command string in the minibuffer and runs the shell
- command on all the specified files. There are two ways of applying a
- shell command to multiple files:
- - If you use `*' in the command, then the shell command runs just
- once, with the list of file names substituted for the `*'.
- Thus, `! tar cf foo.tar * RET' runs `tar' on the entire list of file
- names, putting them into one tar file `foo.tar'. The file names are
- inserted in the order that they appear in the Dired buffer.
- - If the command string doesn't contain `*', then it runs once for
- each file, with the file name attached at the end. For example, `!
- uudecode RET' runs `uudecode' on each file.
- To run the shell command once for each file but without being limited
- to putting the file name inserted in the middle, use a shell loop.
- For example, this shell command would run `uuencode' on each of the
- specified files, writing the output into a corresponding `.uu' file:
- for file in *; uuencode $file $file >$file.uu; done
- The working directory for the shell command is the top level directory
- of the Dired buffer.
- *** Regular Expression File Name Substitution
- **** `% m REGEXP RET' marks all files whose names match the regular
- expression REGEXP.
- Only the non-directory part of the file name is used in matching. Use
- `^' and `$' to anchor matches. Exclude subdirs by hiding them.
- **** `% d REGEXP RET' flags for deletion all files whose names match
- the regular expression REGEXP.
- **** `% R', `% C', `% H', `% S'
- These four commands rename, copy, make hard links and make soft links,
- in each case computing the new name by regular expression substitution
- from the name of the old file. They effectively perform
- `query-replace-regexp' on the selected file names in the Dired buffer.
- The commands read two arguments: a regular expression, and a
- substitution pattern. Each selected file name is matched against the
- regular expression, and then the part which matched is replaced with
- the substitution pattern. You can use `\&' and `\DIGIT' in the
- substitution pattern to refer to all or part of the old file name.
- If the regular expression matches more than once in a file name,
- only the first match is replaced.
- Normally, the replacement process does not consider the directory names;
- it operates on the file name within the directory. If you specify a
- prefix argument of zero, then replacement affects entire file name.
- To apply the command to all files matching the same regexp that you
- use in the command, mark those files with `% m REGEXP RET', then use
- the same regular expression in `% R'. To make this easier, `% R' uses
- as a default the last regular expression specified in a `%' command.
- *** Dired Case Conversion
- **** `% u' renames each of the selected files to an upper case name.
- **** `% l' renames each of the selected files to a lower case name.
- *** File Comparison with Dired
- **** `=' compares the current file with another file (the file at the
- mark), by running the `diff' program. The file at the mark is given
- to `diff' first.
- **** `M-=' compares the current file with its backup file. If there
- are several numerical backups, it uses the most recent one. If this
- file is a backup, it is compared with its original.
- The backup file is the first file given to `diff'.
- *** Subdirectories in Dired
- You can display more than one directory in one Dired buffer.
- The simplest way to do this is to specify the options `-lR' for
- running `ls'. That produces a recursive directory listing showing
- all subdirectories, all within the same Dired buffer.
- You can also insert the contents of a particular subdirectory with the
- `i' command. Use this command on the line that describes a file which
- is a directory. Inserted subdirectory contents follow the top-level
- directory of the Dired buffer, just as they do in `ls -lR' output.
- If the subdirectory's contents are already present in the buffer, the
- `i' command just moves to it (type `l' to refresh it). It sets the
- Emacs mark before moving, so C-x C-x takes you back to the old
- position in the buffer.
- When you have subdirectories in the Dired buffer, you can use the page
- motion commands C-x [ and C-x ] to move by entire directories.
- The following commands move up and down in the tree of directories
- in one Dired buffer:
- **** C-M-u Go up to the parent directory's headerline.
- **** C-M-d Go down in the tree, to the first subdirectory's
- headerline.
- **** C-M-n Go to next subdirectory headerline, regardless of level.
- **** C-M-p Go to previous subdirectory headerline, regardless of
- level.
- *** Hiding Subdirectories
- "Hiding" a subdirectory means to make it invisible, except for its
- headerline. Files inside a hidden subdirectory are never considered
- by Dired. For example, the commands to operate on marked files ignore
- files in hidden directories even if they are marked.
- **** `$' hides or unhides the current subdirectory and move to next
- subdirectory. A prefix argument serves as a repeat count.
- **** `M-$' hides all subdirectories, leaving only their header lines.
- Or, if at least one subdirectory is currently hidden, it makes
- everything visible again. You can use this command to get an overview
- in very deep directory trees or to move quickly to subdirectories far
- away.
- *** Editing the Dired Buffer
- **** `l' updates the specified files in a Dired buffer. This means
- reading their current status from the file system and changing the
- buffer to reflect it properly.
- If you use this command on a subdirectory header line, it updates the
- contents of the subdirectory.
- **** `g' updates the entire contents of the Dired buffer. It preserves
- all marks except for those on files that have vanished. Hidden
- subdirectories are updated but remain hidden.
- **** `k' kills all marked lines (not the files). With a prefix
- argument, it kills that many lines starting with the current line.
- This command does not delete files; it just deletes text from the Dired
- buffer.
- If you kill the line for a file that is a directory, then its contents
- are also deleted from the buffer. Typing `C-u k' on the header line
- for a subdirectory is another way to delete a subdirectory from the
- Dired buffer.
- *** `find' and Dired.
- To search for files with names matching a wildcard pattern use
- `find-name-dired'. Its arguments are DIRECTORY and
- PATTERN. It selects all the files in DIRECTORY or its
- subdirectories whose own names match PATTERN.
- The files thus selected are displayed in a Dired buffer in which the
- ordinary Dired commands are available.
- If you want to test the contents of files, rather than their names, use
- `find-grep-dired'. This command takes two minibuffer arguments,
- DIRECTORY and REGEXP; it selects all the files in
- DIRECTORY or its subdirectories that contain a match for
- REGEXP. It works by running `find' and `grep'.
- The most general command in this series is `find-dired', which lets
- you specify any condition that `find' can test. It takes two
- minibuffer arguments, DIRECTORY and FIND-ARGS; it runs `find' in
- DIRECTORY with using FIND-ARGS as the arguments to `find' specifying
- which files to accept. To use this command, you need to know how to
- use `find'.
- ** New amusements and novelties.
- *** `M-x mpuz' displays a multiplication puzzle, in which each letter
- stands for a digit, and you must determine which digit. The puzzles
- are determined randomly, so they are always different.
- *** `M-x gomoku' plays the game Gomoku with you. It needs more work.
- *** `M-x spook' adds a line of randomly chosen keywords to an outgoing
- mail message. The keywords are chosen from a list of words that
- suggest you are discussing something subversive.
- The idea is that the NSA reads all messages that contain keywords
- suggesting they might be interested, and that adding these lines could
- help to overload them. I would guess that they have modified their
- program by now to ignore these lines of keywords; perhaps the program
- can be updated if some clever hacker can determine what criterion they
- actually use now.
- ** Installation changes
- *** The configure script has been provided to help with the
- installation process. It takes the place of editing the Makefiles and
- src/config.h, and can often guess the appropriate operating system to
- use for a particular machine type. See INSTALL for a more detailed
- description of the steps required for installation.
- *** If you create a Lisp file named `site-start.el', Emacs loads the file
- whenever it starts up.
- *** A new Lisp variable, `data-directory', indicates the directory
- containing the DOC file, tutorial, copying agreement, and other
- familiar `etc' files. The value of `data-directory' is a simple string.
- The default should be set at build time, and the person installing
- Emacs should place all the data files in this directory. The `help.el'
- functions that look for docstrings and information files check this
- variable. All Emacs Lisp packages should also be coded so that they
- refer to `data-directory' to find data files.
- *** The PURESIZE definition has been moved from config.h to its own
- file, puresize.h. Since almost every file of C source in the
- distribution depends on config.h, but only alloc.c and data.c depend
- on puresize.h, this means that changing the value of PURESIZE causes
- only those two files to be recompiled.
- *** The makefile at the top of the Emacs source tree now supports a
- `dist' target, which creates a compressed tar file suitable for
- distribution, using the contents of the source tree. Object files,
- old file versions, executables, DOC files, and other
- architecture-specific or easy-to-recreate files are not included in
- the tar file.
- ----------------------------------------------------------------------
- This file is part of GNU Emacs.
- GNU Emacs is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- GNU Emacs is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- 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 GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
- Local variables:
- mode: outline
- paragraph-separate: "[ ]*$"
- end:
|