1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608 |
- GNU Emacs NEWS -- history of user-visible changes.
- Copyright (C) 2001-2012 Free Software Foundation, Inc.
- See the end of the file for license conditions.
- Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
- If possible, use M-x report-emacs-bug.
- This file is about changes in Emacs version 22.
- See files NEWS.21, NEWS.20, NEWS.19, NEWS.18, and NEWS.1-17 for changes
- in older Emacs versions.
- You can narrow news to a specific version by calling `view-emacs-news'
- with a prefix argument or by typing C-u C-h C-n.
- * About external Lisp packages
- When you upgrade to Emacs 22 from a previous version, some older
- versions of external Lisp packages are known to behave badly.
- So in general, it is recommended that you upgrade to the latest
- versions of any external Lisp packages that you are using.
- You should also be aware that many Lisp packages have been included
- with Emacs 22 (see the extensive list below), and you should remove
- any older versions of these packages to ensure that the Emacs 22
- version is used. You can use M-x list-load-path-shadows to find such
- older packages.
- Some specific packages that are known to cause problems are given
- below. Emacs tries to warn you about these through `bad-packages-alist'.
- ** Semantic (used by CEDET, ECB, JDEE): upgrade to latest version.
- ** cua.el, cua-mode.el: remove old versions.
- * Changes in Emacs 22.3
- ** Support for several obsolete platforms will be removed in the next
- major version of Emacs: Apollo, Acorn, Alliant, Amdahl, Altos 3068,
- Bull DPX/2, Bull SPS-7, AT&T UNIX 7300, AT&T 3b, Aviion Berkeley 4.1
- to 4.3, Celerity, Clipper, Convergent S series, Convex, Cydra, DG/UX,
- Dual, Elxsi, ESIX, Fujitsu F301, GEC 63, Gould, Honeywell XPS100,
- i860, IBM ps/2 aix386, Harris CXUX, Harris Night Hawk 1200/3000,
- Harris Power PC, HP 9000 series 200 or 300, HLH Orion, Hitachi
- SR2001/SR2201, IBM PS/2, Integrated Solutions 386, Integrated
- Solutions Optimum V, Iris, Irix < v6, ISC Unix, ISI 68000, Masscomp
- 5000, Megatest 68000, Motorola System V/88, ns16000, National
- Semiconductor 32000, osf1 (s/osf*) Paragon i860, PFU A-series, Plexus,
- Pyramid, RTU 3.0, RISCiX SCO 3.2, sh3el, Sinix, Stride, Sun 1-3, Sun
- RoadRunner, Sequent Symmetry, Sony News, SunOS 4, System V rel 0 to 3,
- Tadpole 68k machines, tahoe, Tandem Integrity S2, targon31, Tektronix,
- TI Nu, NCR Tower 32, U-station, Ultrix, UMAX, UniPlus 5.2, Whitechapel
- Computer Works MG1, Wicat, and Xenix.
- *** Support for systems without alloca will be removed.
- *** Support for Sun windows will be removed.
- *** Support for VMS will be removed.
- * Incompatible Editing Changes in Emacs 22.3
- ** The following input methods were removed in Emacs 22.2, but this was
- not advertised: danish-alt-postfix, esperanto-alt-postfix,
- finnish-alt-postfix, german-alt-postfix, icelandic-alt-postfix,
- norwegian-alt-postfix, scandinavian-alt-postfix, spanish-alt-postfix,
- and swedish-alt-postfix. Use the versions without "alt-", which are
- identical.
- * Installation Changes in Emacs 22.2
- ** Emacs is now licensed under the GNU GPL version 3 (or later).
- ** Support for GNU/kFreeBSD (GNU userland and FreeBSD kernel) was added.
- ** Deprecated machine types and operating systems
- Certain machine types and operating systems have been deprecated. On
- these systems, configure will print a warning and exit, and you must
- edit the configure script for compilation to proceed. The deprecated
- systems will not be supported at all in Emacs 23. We are not aware of
- anyone running Emacs on these systems; if you are, please email
- emacs-devel@gnu.org to take it off the list of deprecated systems.
- *** Deprecated machine types
- pmax, hp9000s300, ibm370aix, ncr386, ews4800, mips-siemens, powerpcle,
- and tandem-s2
- *** Deprecated operating systems
- bsd386, bsdos2-1, bsdos2, bsdos3, bsdos4, bsd4-1, bsd4-2, bsd4-3,
- usg5-0, usg5-2-2, usg5-2, usg5-3, ultrix4-3, 386bsd, hpux, hpux8,
- hpux9, hpux9shr, hpux10, hpux10-20, aix3-1, aix3-2-5, aix3-2, aix4-1,
- nextstep, ux4800, uxpds, and uxpv
- * Changes in Emacs 22.2
- ** `describe-project' is renamed to `describe-gnu-project'.
- ** `view-todo' is renamed to `view-emacs-todo'.
- ** `find-name-dired' now uses -iname rather than -name
- for case-insensitive filesystems. The default behavior is determined
- by the value of `read-file-name-completion-ignore-case'; if you don't
- like that, customize the value of the new option `find-name-arg'.
- ** In Image mode, whenever the displayed image is wider and/or higher
- than the window, the usual keys for moving the cursor cause the image
- to be scrolled horizontally or vertically instead.
- ** Emacs can use stock icons in the tool bar when compiled with Gtk+.
- However, this feature is disabled by default. To enable it, put
- (setq icon-map-list '(x-gtk-stock-map))
- in your .emacs or some other startup file. For more information, see
- the documentation for the two variables icon-map-list and x-gtk-stock-map.
- ** Scrollbars follow the system theme on Windows XP and later.
- Windows XP introduced themed scrollbars, but applications have to take
- special steps to use them. Emacs now has the appropriate resources linked
- in to make it use the scrollbars from the system theme.
- ** focus-follows-mouse defaults to nil on MS Windows.
- Previously this variable was incorrectly documented as having no effect
- on MS Windows, and the default was inappropriate for the majority of
- Windows installations. Users of software which modifies the behavior of
- Windows to cause focus to follow the mouse will now need to explicitly set
- this variable.
- ** `bad-packages-alist' will warn about external packages that are known
- to cause problems in this version of Emacs.
- ** The values of `dired-recursive-deletes' and `dired-recursive-copies'
- have been changed to `top'. This means that the user is asked once,
- before deleting/copying the indicated directory recursively.
- ** `browse-url-emacs' loads a URL into an Emacs buffer. Handy for *.el URLs.
- ** The command gdba has been removed as gdb works now for those cases where it
- was needed. In text command mode, if you have problems before execution has
- started, use M-x gud-gdb.
- ** desktop.el now detects conflicting uses of the desktop file.
- When loading the desktop, desktop.el can now detect that the file is already
- in use. The default behavior is to ask the user what to do, but you can
- customize it with the new option `desktop-load-locked-desktop'. When saving,
- desktop.el warns about attempts to overwrite a desktop file if it determines
- that the desktop being saved is not an update of the one on disk.
- ** Compilation mode now correctly respects the value of
- `compilation-scroll-output' between invocations. Previously, output
- was mistakenly scrolled on compiles after the first. Customize
- `compilation-scroll-output' if you want to retain the scrolling.
- ** `font-lock-comment-face' no longer differs from the default on
- displays with fewer than 16 colors and dark background (e.g. older
- xterms and the Linux console). On such displays, only the comment
- delimiters will appear to be fontified (in the new face
- `font-lock-comment-delimiter-face'). To restore the old appearance,
- customize `font-lock-comment-face'. Another alternative is to use a
- newer terminal emulator that supports more colors (256 is now common).
- For example, for xterm compatible emulators that support 256 colors,
- you can run emacs like this:
- env TERM=xterm-256color emacs -nw
- (This was new in Emacs 22.1, but was not described. In Emacs 22.1
- this also happened for terminals with a light background, that is not
- the case anymore).
- * New Modes and Packages in Emacs 22.2
- ** bibtex-style-mode helps you write BibTeX's *.bst files.
- ** The new package css-mode.el provides a major mode for editing CSS files.
- ** The new package vera-mode.el provides a major mode for editing Vera files.
- ** The new package verilog-mode.el provides a major mode for editing Verilog files.
- ** The new package socks.el implements the SOCKS v5 protocol.
- ** VC
- *** VC backends can provide completion of revision names.
- *** VC backends can provide extra menu entries to the "Version Control" menu.
- This can be used to add menu entries for backend specific functions.
- *** VC has some support for Mercurial (Hg).
- *** VC has some support for Monotone (Mtn).
- *** VC has some support for Bazaar (Bzr).
- *** VC has some support for Git.
- * Incompatible Lisp Changes in Emacs 22.2
- ** shell.el no longer defines the aliases `dirtrack-toggle' and
- `dirtrack-mode' for `shell-dirtrack-mode'. These names were removed
- because they clash with commands provided by dirtrack.el. Use
- `shell-dirtrack-mode' instead.
- * Lisp Changes in Emacs 22.2.
- ** Frame-local variables are deprecated and are slated for removal.
- They can easily be emulated. Rather than calling `make-variable-frame-local'
- and accessing the variable value directly, explicitly check for a
- frame-parameter, and if there is one, use its value in preference to
- that of the variable. Note that buffer-local values should take
- precedence over frame-local ones, so you may wish to check `local-variable-p'
- first.
- ** The function invisible-p returns non-nil if the character
- after a specified position is invisible.
- ** inhibit-modification-hooks is bound to t while running modification hooks.
- As a happy consequence, after-change-functions and before-change-functions
- are not bound to nil any more while running an (after|before)-change-function.
- ** New function `window-full-width-p' returns t if a window is as wide
- as its frame.
- ** The new function `image-refresh' refreshes all images associated
- with a given image specification.
- ** The new function `combine-and-quote-strings' concatenates a list of strings
- using a specified separator. If a string contains double quotes, they
- are escaped in the output.
- ** The new function `split-string-and-unquote' performs the inverse operation to
- `combine-and-quote-strings', i.e. splits a single string into a list
- of strings, undoing any quoting added by `combine-and-quote-strings'.
- (For some separator/string combinations, the original strings cannot
- be recovered.)
- * Installation Changes in Emacs 22.1
- ** You can build Emacs with Gtk+ widgets by specifying `--with-x-toolkit=gtk'
- when you run configure. This requires Gtk+ 2.4 or newer. This port
- provides a way to display multilingual text in menus (with some caveats).
- ** The Emacs Lisp Reference Manual is now part of the distribution.
- The Emacs Lisp Reference Manual in Info format is built as part of the
- Emacs build procedure and installed together with the Emacs User
- Manual. A menu item was added to the menu bar to make it easily
- accessible (Help->More Manuals->Emacs Lisp Reference).
- ** The Introduction to Programming in Emacs Lisp manual is now part of
- the distribution.
- This manual is now part of the standard distribution and is installed,
- together with the Emacs User Manual, into the Info directory. A menu
- item was added to the menu bar to make it easily accessible
- (Help->More Manuals->Introduction to Emacs Lisp).
- ** Leim is now part of the Emacs distribution.
- You no longer need to download a separate tarball in order to build
- Emacs with Leim.
- ** Support for MacOS X was added.
- See the files mac/README and mac/INSTALL for build instructions.
- ** Mac OS 9 port now uses the Carbon API by default. You can also
- create a non-Carbon build by specifying `NonCarbon' as a target. See
- the files mac/README and mac/INSTALL for build instructions.
- ** Support for a Cygwin build of Emacs was added.
- ** Support for GNU/Linux systems on X86-64 machines was added.
- ** Support for GNU/Linux systems on S390 machines was added.
- ** Support for GNU/Linux systems on Tensilica Xtensa machines was added.
- ** Support for FreeBSD/Alpha has been added.
- ** New translations of the Emacs Tutorial are available in the
- following languages: Brazilian Portuguese, Bulgarian, Chinese (both
- with simplified and traditional characters), French, Russian, and
- Italian. Type `C-u C-h t' to choose one of them in case your language
- setup doesn't automatically select the right one.
- ** New translations of the Emacs reference card are available in the
- Brazilian Portuguese and Russian. The corresponding PostScript files
- are also included.
- ** A French translation of the `Emacs Survival Guide' is available.
- ** Emacs now supports new configure options `--program-prefix',
- `--program-suffix' and `--program-transform-name' that affect the names of
- installed programs.
- ** By default, Emacs now uses a setgid helper program to update game
- scores. The directory ${localstatedir}/games/emacs is the normal
- place for game scores to be stored. You can control this with the
- configure option `--with-game-dir'. The specific user that Emacs uses
- to own the game scores is controlled by `--with-game-user'. If access
- to a game user is not available, then scores will be stored separately
- in each user's home directory.
- ** Emacs now includes support for loading image libraries on demand.
- (Currently this feature is only used on MS Windows.) You can configure
- the supported image types and their associated dynamic libraries by
- setting the variable `image-library-alist'.
- ** Emacs can now be built without sound support.
- ** Emacs Lisp source files are compressed by default if `gzip' is available.
- ** All images used in Emacs have been consolidated in etc/images and subdirs.
- See also the changes to `find-image', documented below.
- ** Emacs comes with a new set of icons.
- These icons are displayed on the taskbar and/or titlebar when Emacs
- runs in a graphical environment. Source files for these icons can be
- found in etc/images/icons. (You can't change the icons displayed by
- Emacs by changing these files directly. On X, the icon is compiled
- into the Emacs executable; see gnu.h in the source tree. On MS
- Windows, see nt/icons/emacs.ico.)
- ** The `emacsserver' program has been removed, replaced with Lisp code.
- ** The `yow' program has been removed.
- Use the corresponding Emacs feature instead.
- ** The Emacs terminal emulation in term.el uses a different terminfo name.
- The Emacs terminal emulation in term.el now uses "eterm-color" as its
- terminfo name, since term.el now supports color.
- ** The script etc/emacs-buffer.gdb can be used with gdb to retrieve the
- contents of buffers from a core dump and save them to files easily, should
- Emacs crash.
- ** Building with -DENABLE_CHECKING does not automatically build with union
- types any more. Add -DUSE_LISP_UNION_TYPE if you want union types.
- ** When pure storage overflows while dumping, Emacs now prints how
- much pure storage it will approximately need.
- * Startup Changes in Emacs 22.1
- ** Init file changes
- If the init file ~/.emacs does not exist, Emacs will try
- ~/.emacs.d/init.el or ~/.emacs.d/init.elc. Likewise, if the shell init file
- ~/.emacs_SHELL is not found, Emacs will try ~/.emacs.d/init_SHELL.sh.
- ** Emacs can now be invoked in full-screen mode on a windowed display.
- When Emacs is invoked on a window system, the new command-line options
- `--fullwidth', `--fullheight', and `--fullscreen' produce a frame
- whose width, height, or both width and height take up the entire
- screen size. (For now, this does not work with some window managers.)
- ** Emacs now displays a splash screen by default even if command-line
- arguments were given. The new command-line option --no-splash
- disables the splash screen; see also the variable
- `inhibit-splash-screen' (which is also aliased as
- `inhibit-startup-message').
- ** New user option `inhibit-startup-buffer-menu'.
- When loading many files, for instance with `emacs *', Emacs normally
- displays a buffer menu. This option turns the buffer menu off.
- ** New command line option -nbc or --no-blinking-cursor disables
- the blinking cursor on graphical terminals.
- ** The option --script FILE runs Emacs in batch mode and loads FILE.
- It is useful for writing Emacs Lisp shell script files, because they
- can start with this line:
- #!/usr/bin/emacs --script
- ** The -f option, used from the command line to call a function,
- now reads arguments for the function interactively if it is
- an interactively callable function.
- ** The option --directory DIR now modifies `load-path' immediately.
- Directories are added to the front of `load-path' in the order they
- appear on the command line. For example, with this command line:
- emacs -batch -L .. -L /tmp --eval "(require 'foo)"
- Emacs looks for library `foo' in the parent directory, then in /tmp, then
- in the other directories in `load-path'. (-L is short for --directory.)
- ** When you specify a frame size with --geometry, the size applies to
- all frames you create. A position specified with --geometry only
- affects the initial frame.
- ** Emacs built for MS-Windows now behaves like Emacs on X does,
- with respect to its frame position: if you don't specify a position
- (in your .emacs init file, in the Registry, or with the --geometry
- command-line option), Emacs leaves the frame position to the Windows'
- window manager.
- ** The command line option --no-windows has been changed to
- --no-window-system. The old one still works, but is deprecated.
- ** If the environment variable DISPLAY specifies an unreachable X display,
- Emacs will now startup as if invoked with the --no-window-system option.
- ** Emacs now reads the standard abbrevs file ~/.abbrev_defs
- automatically at startup, if it exists. When Emacs offers to save
- modified buffers, it saves the abbrevs too if they have changed. It
- can do this either silently or asking for confirmation first,
- according to the value of `save-abbrevs'.
- ** New command line option -Q or --quick.
- This is like using -q --no-site-file, but in addition it also disables
- the fancy startup screen.
- ** New command line option -D or --basic-display.
- Disables the menu-bar, the tool-bar, the scroll-bars, tool tips, and
- the blinking cursor.
- ** The default is now to use a bitmap as the icon.
- The command-line options --icon-type, -i have been replaced with
- options --no-bitmap-icon, -nbi to turn the bitmap icon off.
- ** If the environment variable EMAIL is defined, Emacs now uses its value
- to compute the default value of `user-mail-address', in preference to
- concatenation of `user-login-name' with the name of your host machine.
- * Incompatible Editing Changes in Emacs 22.1
- ** You can now follow links by clicking Mouse-1 on the link.
- See below for more details.
- ** When the undo information of the current command gets really large
- (beyond the value of `undo-outer-limit'), Emacs discards it and warns
- you about it.
- ** When Emacs prompts for file names, SPC no longer completes the file name.
- This is so filenames with embedded spaces could be input without the
- need to quote the space with a C-q. The underlying changes in the
- keymaps that are active in the minibuffer are described below under
- "New keymaps for typing file names".
- If you want the old behavior back, add these two key bindings to your
- ~/.emacs init file:
- (define-key minibuffer-local-filename-completion-map
- " " 'minibuffer-complete-word)
- (define-key minibuffer-local-must-match-filename-map
- " " 'minibuffer-complete-word)
- ** The completion commands TAB, SPC and ? in the minibuffer apply only
- to the text before point. If there is text in the buffer after point,
- it remains unchanged.
- ** In incremental search, C-w is changed. M-%, C-M-w and C-M-y are special.
- See below under "incremental search changes".
- ** M-g is now a prefix key.
- M-g g and M-g M-g run goto-line.
- M-g n and M-g M-n run next-error (like C-x `).
- M-g p and M-g M-p run previous-error.
- ** C-u M-g M-g switches to the most recent previous buffer,
- and goes to the specified line in that buffer.
- When goto-line starts to execute, if there's a number in the buffer at
- point then it acts as the default argument for the minibuffer.
- ** M-o now is the prefix key for setting text properties;
- M-o M-o requests refontification.
- ** C-x C-f RET (find-file), typing nothing in the minibuffer, is no longer
- a special case.
- Since the default input is the current directory, this has the effect
- of specifying the current directory. Normally that means to visit the
- directory with Dired.
- You can get the old behavior by typing C-x C-f M-n RET, which fetches
- the actual file name into the minibuffer.
- ** In Dired's ! command (dired-do-shell-command), `*' and `?' now
- control substitution of the file names only when they are surrounded
- by whitespace. This means you can now use them as shell wildcards
- too. If you want to use just plain `*' as a wildcard, type `*""'; the
- doublequotes make no difference in the shell, but they prevent
- special treatment in `dired-do-shell-command'.
- ** The info-search bindings on C-h C-f, C-h C-k and C-h C-i
- have been moved to C-h F, C-h K and C-h S.
- ** `apply-macro-to-region-lines' now operates on all lines that begin
- in the region, rather than on all complete lines in the region.
- ** line-move-ignore-invisible now defaults to t.
- ** Adaptive filling misfeature removed.
- It no longer treats `NNN.' or `(NNN)' as a prefix.
- ** The old bindings C-M-delete and C-M-backspace have been deleted,
- since there are situations where one or the other will shut down
- the operating system or your X server.
- ** The register compatibility key bindings (deprecated since Emacs 19)
- have been removed:
- C-x / point-to-register (Use: C-x r SPC)
- C-x j jump-to-register (Use: C-x r j)
- C-x x copy-to-register (Use: C-x r s)
- C-x g insert-register (Use: C-x r i)
- * Editing Changes in Emacs 22.1
- ** The max size of buffers and integers has been doubled.
- On 32bit machines, it is now 256M (i.e. 268435455).
- ** !MEM FULL! at the start of the mode line indicates that Emacs
- cannot get any more memory for Lisp data. This often means it could
- crash soon if you do things that use more memory. On most systems,
- killing buffers will get out of this state. If killing buffers does
- not make !MEM FULL! disappear, you should save your work and start
- a new Emacs.
- ** `undo-only' does an undo which does not redo any previous undo.
- ** Yanking text now discards certain text properties that can
- be inconvenient when you did not expect them. The variable
- `yank-excluded-properties' specifies which ones. Insertion
- of register contents and rectangles also discards these properties.
- ** New command `kill-whole-line' kills an entire line at once.
- By default, it is bound to C-S-<backspace>.
- ** M-SPC (just-one-space) when given a numeric argument N
- converts whitespace around point to N spaces.
- ** You can now switch buffers in a cyclic order with C-x C-left
- (previous-buffer) and C-x C-right (next-buffer). C-x left and
- C-x right can be used as well. The functions keep a different buffer
- cycle for each frame, using the frame-local buffer list.
- ** C-x 5 C-o displays a specified buffer in another frame
- but does not switch to that frame. It's the multi-frame
- analogue of C-x 4 C-o.
- ** `special-display-buffer-names' and `special-display-regexps' now
- understand two new boolean pseudo-frame-parameters `same-frame' and
- `same-window'.
- ** New commands to operate on pairs of open and close characters:
- `insert-pair', `delete-pair', `raise-sexp'.
- ** M-x setenv now expands environment variable references.
- Substrings of the form `$foo' and `${foo}' in the specified new value
- now refer to the value of environment variable foo. To include a `$'
- in the value, use `$$'.
- ** The default values of paragraph-start and indent-line-function have
- been changed to reflect those used in Text mode rather than those used
- in Paragraph-Indent Text mode.
- ** The default for the paper size (variable ps-paper-type) is taken
- from the locale.
- ** Help command changes:
- *** Changes in C-h bindings:
- C-h e displays the *Messages* buffer.
- C-h d runs apropos-documentation.
- C-h r visits the Emacs Manual in Info.
- C-h followed by a control character is used for displaying files
- that do not change:
- C-h C-f displays the FAQ.
- C-h C-e displays the PROBLEMS file.
- The info-search bindings on C-h C-f, C-h C-k and C-h C-i
- have been moved to C-h F, C-h K and C-h S.
- C-h c, C-h k, C-h w, and C-h f now handle remapped interactive commands.
- - C-h c and C-h k report the actual command (after possible remapping)
- run by the key sequence.
- - C-h w and C-h f on a command which has been remapped now report the
- command it is remapped to, and the keys which can be used to run
- that command.
- For example, if C-k is bound to kill-line, and kill-line is remapped
- to new-kill-line, these commands now report:
- - C-h c and C-h k C-k reports:
- C-k runs the command new-kill-line
- - C-h w and C-h f kill-line reports:
- kill-line is remapped to new-kill-line which is on C-k, <deleteline>
- - C-h w and C-h f new-kill-line reports:
- new-kill-line is on C-k
- *** The apropos commands now accept a list of words to match.
- When more than one word is specified, at least two of those words must
- be present for an item to match. Regular expression matching is still
- available.
- *** The new option `apropos-sort-by-scores' causes the matching items
- to be sorted according to their score. The score for an item is a
- number calculated to indicate how well the item matches the words or
- regular expression that you entered to the apropos command. The best
- match is listed first, and the calculated score is shown for each
- matching item.
- *** Help commands `describe-function' and `describe-key' now show function
- arguments in lowercase italics on displays that support it. To change the
- default, customize face `help-argument-name' or redefine the function
- `help-default-arg-highlight'.
- *** C-h v and C-h f commands now include a hyperlink to the C source for
- variables and functions defined in C (if the C source is available).
- *** Help mode now only makes hyperlinks for faces when the face name is
- preceded or followed by the word `face'. It no longer makes
- hyperlinks for variables without variable documentation, unless
- preceded by one of the words `variable' or `option'. It now makes
- hyperlinks to Info anchors (or nodes) if the anchor (or node) name is
- enclosed in single quotes and preceded by `info anchor' or `Info
- anchor' (in addition to earlier `info node' and `Info node'). In
- addition, it now makes hyperlinks to URLs as well if the URL is
- enclosed in single quotes and preceded by `URL'.
- *** The new command `describe-char' (C-u C-x =) pops up a buffer with
- description various information about a character, including its
- encodings and syntax, its text properties, how to input, overlays, and
- widgets at point. You can get more information about some of them, by
- clicking on mouse-sensitive areas or moving there and pressing RET.
- *** The command `list-text-properties-at' has been deleted because
- C-u C-x = gives the same information and more.
- *** New command `display-local-help' displays any local help at point
- in the echo area. It is bound to `C-h .'. It normally displays the
- same string that would be displayed on mouse-over using the
- `help-echo' property, but, in certain cases, it can display a more
- keyboard oriented alternative.
- *** New user option `help-at-pt-display-when-idle' allows you to
- automatically show the help provided by `display-local-help' on
- point-over, after suitable idle time. The amount of idle time is
- determined by the user option `help-at-pt-timer-delay' and defaults
- to one second. This feature is turned off by default.
- ** Mark command changes:
- *** A prefix argument is no longer required to repeat a jump to a
- previous mark if you set `set-mark-command-repeat-pop' to t. I.e. C-u
- C-SPC C-SPC C-SPC ... cycles through the mark ring. Use C-u C-u C-SPC
- to set the mark immediately after a jump.
- *** Marking commands extend the region when invoked multiple times.
- If you type C-M-SPC (mark-sexp), M-@ (mark-word), M-h
- (mark-paragraph), or C-M-h (mark-defun) repeatedly, the marked region
- extends each time, so you can mark the next two sexps with M-C-SPC
- M-C-SPC, for example. This feature also works for
- mark-end-of-sentence, if you bind that to a key. It also extends the
- region when the mark is active in Transient Mark mode, regardless of
- the last command. To start a new region with one of marking commands
- in Transient Mark mode, you can deactivate the active region with C-g,
- or set the new mark with C-SPC.
- *** Some commands do something special in Transient Mark mode when the
- mark is active--for instance, they limit their operation to the
- region. Even if you don't normally use Transient Mark mode, you might
- want to get this behavior from a particular command. There are two
- ways you can enable Transient Mark mode and activate the mark, for one
- command only.
- One method is to type C-SPC C-SPC; this enables Transient Mark mode
- and sets the mark at point. The other method is to type C-u C-x C-x.
- This enables Transient Mark mode temporarily but does not alter the
- mark or the region.
- After these commands, Transient Mark mode remains enabled until you
- deactivate the mark. That typically happens when you type a command
- that alters the buffer, but you can also deactivate the mark by typing
- C-g.
- *** Movement commands `beginning-of-buffer', `end-of-buffer',
- `beginning-of-defun', `end-of-defun' do not set the mark if the mark
- is already active in Transient Mark mode.
- *** M-h (mark-paragraph) now accepts a prefix arg.
- With positive arg, M-h marks the current and the following paragraphs;
- if the arg is negative, it marks the current and the preceding
- paragraphs.
- ** Incremental Search changes:
- *** M-% typed in isearch mode invokes `query-replace' or
- `query-replace-regexp' (depending on search mode) with the current
- search string used as the string to replace.
- *** C-w in incremental search now grabs either a character or a word,
- making the decision in a heuristic way. This new job is done by the
- command `isearch-yank-word-or-char'. To restore the old behavior,
- bind C-w to `isearch-yank-word' in `isearch-mode-map'.
- *** C-y in incremental search now grabs the next line if point is already
- at the end of a line.
- *** C-M-w deletes and C-M-y grabs a character in isearch mode.
- Another method to grab a character is to enter the minibuffer by `M-e'
- and to type `C-f' at the end of the search string in the minibuffer.
- *** Vertical scrolling is now possible within incremental search.
- To enable this feature, customize the new user option
- `isearch-allow-scroll'. User written commands which satisfy stringent
- constraints can be marked as "scrolling commands". See the Emacs manual
- for details.
- *** Isearch no longer adds `isearch-resume' commands to the command
- history by default. To enable this feature, customize the new
- user option `isearch-resume-in-command-history'.
- ** Replace command changes:
- *** When used interactively, the commands `query-replace-regexp' and
- `replace-regexp' allow \,expr to be used in a replacement string,
- where expr is an arbitrary Lisp expression evaluated at replacement
- time. `\#' in a replacement string now refers to the count of
- replacements already made by the replacement command. All regular
- expression replacement commands now allow `\?' in the replacement
- string to specify a position where the replacement string can be
- edited for each replacement. `query-replace-regexp-eval' is now
- deprecated since it offers no additional functionality.
- *** query-replace uses isearch lazy highlighting when the new user option
- `query-replace-lazy-highlight' is non-nil.
- *** The current match in query-replace is highlighted in new face
- `query-replace' which by default inherits from isearch face.
- *** New user option `query-replace-skip-read-only': when non-nil,
- `query-replace' and related functions simply ignore
- a match if part of it has a read-only property.
- ** Local variables lists:
- *** If the local variables list contains any variable-value pairs that
- are not known to be safe, Emacs shows a prompt asking whether to apply
- the local variables list as a whole. In earlier versions, a prompt
- was only issued for variables explicitly marked as risky (for the
- definition of risky variables, see `risky-local-variable-p').
- At the prompt, you can choose to save the contents of this local
- variables list to `safe-local-variable-values'. This new customizable
- option is a list of variable-value pairs that are known to be safe.
- Variables can also be marked as safe with the existing
- `safe-local-variable' property (see `safe-local-variable-p').
- However, risky variables will not be added to
- `safe-local-variable-values' in this way.
- *** The variable `enable-local-variables' controls how local variable
- lists are handled. t, the default, specifies the standard querying
- behavior. :safe means use only safe values, and ignore the rest.
- :all means set all variables, whether or not they are safe.
- nil means ignore them all. Anything else means always query.
- *** The variable `safe-local-eval-forms' specifies a list of forms that
- are ok to evaluate when they appear in an `eval' local variables
- specification. Normally Emacs asks for confirmation before evaluating
- such a form, but if the form appears in this list, no confirmation is
- needed.
- *** If a function has a non-nil `safe-local-eval-function' property,
- that means it is ok to evaluate some calls to that function when it
- appears in an `eval' local variables specification. If the property
- is t, then any form calling that function with constant arguments is
- ok. If the property is a function or list of functions, they are called
- with the form as argument, and if any returns t, the form is ok to call.
- If the form is not "ok to call", that means Emacs asks for
- confirmation as before.
- *** In processing a local variables list, Emacs strips the prefix and
- suffix from every line before processing all the lines.
- *** Text properties in local variables.
- A file local variables list cannot specify a string with text
- properties--any specified text properties are discarded.
- ** File operation changes:
- *** Unquoted `$' in file names do not signal an error any more when
- the corresponding environment variable does not exist.
- Instead, the `$ENVVAR' text is left as is, so that `$$' quoting
- is only rarely needed.
- *** C-x C-f RET, typing nothing in the minibuffer, is no longer a special case.
- Since the default input is the current directory, this has the effect
- of specifying the current directory. Normally that means to visit the
- directory with Dired.
- *** C-x s (save-some-buffers) now offers an option `d' to diff a buffer
- against its file, so you can see what changes you would be saving.
- *** Auto Compression mode is now enabled by default.
- *** If the user visits a file larger than `large-file-warning-threshold',
- Emacs asks for confirmation.
- *** The commands copy-file, rename-file, make-symbolic-link and
- add-name-to-file, when given a directory as the "new name" argument,
- convert it to a file name by merging in the within-directory part of
- the existing file's name. (This is the same convention that shell
- commands cp, mv, and ln follow.) Thus, M-x copy-file RET ~/foo RET
- /tmp RET copies ~/foo to /tmp/foo.
- *** require-final-newline now has two new possible values:
- `visit' means add a newline (as an undoable change) if it's needed
- when visiting the file.
- `visit-save' means add a newline (as an undoable change) if it's
- needed when visiting the file, and also add a newline if it's needed
- when saving the file.
- *** The new option mode-require-final-newline controls how certain
- major modes enable require-final-newline. Any major mode that's
- designed for a kind of file that should normally end in a newline
- sets require-final-newline based on mode-require-final-newline.
- So you can customize mode-require-final-newline to control what these
- modes do.
- *** When you are root, and you visit a file whose modes specify
- read-only, the Emacs buffer is now read-only too. Type C-x C-q if you
- want to make the buffer writable. (As root, you can in fact alter the
- file.)
- *** find-file-read-only visits multiple files in read-only mode,
- when the file name contains wildcard characters.
- *** find-alternate-file replaces the current file with multiple files,
- when the file name contains wildcard characters. It now asks if you
- wish save your changes and not just offer to kill the buffer.
- *** When used interactively, `format-write-file' now asks for confirmation
- before overwriting an existing file, unless a prefix argument is
- supplied. This behavior is analogous to `write-file'.
- *** The variable `auto-save-file-name-transforms' now has a third element that
- controls whether or not the function `make-auto-save-file-name' will
- attempt to construct a unique auto-save name (e.g. for remote files).
- *** The new option `write-region-inhibit-fsync' disables calls to fsync
- in `write-region'. This can be useful on laptops to avoid spinning up
- the hard drive upon each file save. Enabling this variable may result
- in data loss, use with care.
- ** Minibuffer changes:
- *** The completion commands TAB, SPC and ? in the minibuffer apply only
- to the text before point. If there is text in the buffer after point,
- it remains unchanged.
- *** The new file-name-shadow-mode is turned ON by default, so that when
- entering a file name, any prefix which Emacs will ignore is dimmed.
- *** There's a new face `minibuffer-prompt'.
- Emacs adds this face to the list of text properties stored in the
- variable `minibuffer-prompt-properties', which is used to display the
- prompt string.
- *** Enhanced visual feedback in `*Completions*' buffer.
- Completions lists use faces to highlight what all completions
- have in common and where they begin to differ.
- The common prefix shared by all possible completions uses the face
- `completions-common-part', while the first character that isn't the
- same uses the face `completions-first-difference'. By default,
- `completions-common-part' inherits from `default', and
- `completions-first-difference' inherits from `bold'. The idea of
- `completions-common-part' is that you can use it to make the common
- parts less visible than normal, so that the rest of the differing
- parts is, by contrast, slightly highlighted.
- Above fontification is always done when listing completions is
- triggered at minibuffer. If you want to fontify completions whose
- listing is triggered at the other normal buffer, you have to pass
- the common prefix of completions to `display-completion-list' as
- its second argument.
- *** File-name completion can now ignore specified directories.
- If an element of the list in `completion-ignored-extensions' ends in a
- slash `/', it indicates a subdirectory that should be ignored when
- completing file names. Elements of `completion-ignored-extensions'
- which do not end in a slash are never considered when a completion
- candidate is a directory.
- *** New user option `history-delete-duplicates'.
- If set to t when adding a new history element, all previous identical
- elements are deleted from the history list.
- ** Redisplay changes:
- *** The new face `mode-line-inactive' is used to display the mode line
- of non-selected windows. The `mode-line' face is now used to display
- the mode line of the currently selected window.
- The new variable `mode-line-in-non-selected-windows' controls whether
- the `mode-line-inactive' face is used.
- *** The mode line position information now comes before the major mode.
- When the file is maintained under version control, that information
- appears between the position information and the major mode.
- *** You can now customize the use of window fringes. To control this
- for all frames, use M-x fringe-mode or the Show/Hide submenu of the
- top-level Options menu, or customize the `fringe-mode' variable. To
- control this for a specific frame, use the command M-x
- set-fringe-style.
- *** Angle icons in the fringes can indicate the buffer boundaries. In
- addition, up and down arrow bitmaps in the fringe indicate which ways
- the window can be scrolled.
- This behavior is activated by setting the buffer-local variable
- `indicate-buffer-boundaries' to a non-nil value. The default value of
- this variable is found in `default-indicate-buffer-boundaries'.
- If value is `left' or `right', both angle and arrow bitmaps are
- displayed in the left or right fringe, resp.
- The value can also be an alist which specifies the presence and
- position of each bitmap individually.
- For example, ((top . left) (t . right)) places the top angle bitmap
- in left fringe, the bottom angle bitmap in right fringe, and both
- arrow bitmaps in right fringe. To show just the angle bitmaps in the
- left fringe, but no arrow bitmaps, use ((top . left) (bottom . left)).
- *** On window systems, lines which are exactly as wide as the window
- (not counting the final newline character) are no longer broken into
- two lines on the display (with just the newline on the second line).
- Instead, the newline now "overflows" into the right fringe, and the
- cursor will be displayed in the fringe when positioned on that newline.
- The new user option 'overflow-newline-into-fringe' can be set to nil to
- revert to the old behavior of continuing such lines.
- *** A window can now have individual fringe and scroll-bar settings,
- in addition to the individual display margin settings.
- Such individual settings are now preserved when windows are split
- horizontally or vertically, a saved window configuration is restored,
- or when the frame is resized.
- *** When a window has display margin areas, the fringes are now
- displayed between the margins and the buffer's text area, rather than
- outside those margins.
- *** New face `escape-glyph' highlights control characters and escape glyphs.
- *** Non-breaking space and hyphens are now displayed with a special
- face, either nobreak-space or escape-glyph. You can turn this off or
- specify a different mode by setting the variable `nobreak-char-display'.
- *** The parameters of automatic hscrolling can now be customized.
- The variable `hscroll-margin' determines how many columns away from
- the window edge point is allowed to get before automatic hscrolling
- will horizontally scroll the window. The default value is 5.
- The variable `hscroll-step' determines how many columns automatic
- hscrolling scrolls the window when point gets too close to the
- window edge. If its value is zero, the default, Emacs scrolls the
- window so as to center point. If its value is an integer, it says how
- many columns to scroll. If the value is a floating-point number, it
- gives the fraction of the window's width to scroll the window.
- The variable `automatic-hscrolling' was renamed to
- `auto-hscroll-mode'. The old name is still available as an alias.
- *** Moving or scrolling through images (and other lines) taller than
- the window now works sensibly, by automatically adjusting the window's
- vscroll property.
- *** Preemptive redisplay now adapts to current load and bandwidth.
- To avoid preempting redisplay on fast computers, networks, and displays,
- the arrival of new input is now performed at regular intervals during
- redisplay. The new variable `redisplay-preemption-period' specifies
- the period; the default is to check for input every 0.1 seconds.
- *** The %c and %l constructs are now ignored in frame-title-format.
- Due to technical limitations in how Emacs interacts with windowing
- systems, these constructs often failed to render properly, and could
- even cause Emacs to crash.
- *** If value of `auto-resize-tool-bars' is `grow-only', the tool bar
- will expand as needed, but not contract automatically. To contract
- the tool bar, you must type C-l.
- *** New customize option `overline-margin' controls the space between
- overline and text.
- *** New variable `x-underline-at-descent-line' controls the relative
- position of the underline. When set, it overrides the
- `x-use-underline-position-properties' variables.
- ** New faces:
- *** `mode-line-highlight' is the standard face indicating mouse sensitive
- elements on mode-line (and header-line) like `highlight' face on text
- areas.
- *** `mode-line-buffer-id' is the standard face for buffer identification
- parts of the mode line.
- *** `shadow' face defines the appearance of the "shadowed" text, i.e.
- the text which should be less noticeable than the surrounding text.
- This can be achieved by using shades of gray in contrast with either
- black or white default foreground color. This generic shadow face
- allows customization of the appearance of shadowed text in one place,
- so package-specific faces can inherit from it.
- *** `vertical-border' face is used for the vertical divider between windows.
- ** Font-Lock (syntax highlighting) changes:
- *** All modes now support using M-x font-lock-mode to toggle
- fontification, even those such as Occur, Info, and comint-derived
- modes that do their own fontification in a special way.
- The variable `Info-fontify' is no longer applicable; to disable
- fontification in Info, remove `turn-on-font-lock' from
- `Info-mode-hook'.
- *** New standard font-lock face `font-lock-comment-delimiter-face'.
- This is used for the characters that indicate the start of a comment,
- e.g. `;' in Lisp mode.
- *** New standard font-lock face `font-lock-preprocessor-face'.
- *** Easy to overlook single character negation can now be font-locked.
- You can use the new variable `font-lock-negation-char-face' and the face of
- the same name to customize this. Currently the cc-modes, sh-script-mode,
- cperl-mode and make-mode support this.
- *** Font-Lock mode: in major modes such as Lisp mode, where some Emacs
- features assume that an open-paren in column 0 is always outside of
- any string or comment, Font-Lock now highlights any such open-paren in
- bold-red if it is inside a string or a comment, to indicate that it
- can cause trouble. You should rewrite the string or comment so that
- the open-paren is not in column 0.
- *** M-o now is the prefix key for setting text properties;
- M-o M-o requests refontification.
- *** The default settings for JIT stealth lock parameters are changed.
- The default value for the user option jit-lock-stealth-time is now nil
- instead of 3. This setting of jit-lock-stealth-time disables stealth
- fontification: on today's machines, it may be a bug in font lock
- patterns if fontification otherwise noticeably degrades interactivity.
- If you find movement in infrequently visited buffers sluggish (and the
- major mode maintainer has no better idea), customizing
- jit-lock-stealth-time to a non-nil value will let Emacs fontify
- buffers in the background when it considers the system to be idle.
- jit-lock-stealth-nice is now 0.5 instead of 0.125 which is supposed to
- cause less load than the old defaults.
- *** jit-lock can now be delayed with `jit-lock-defer-time'.
- If this variable is non-nil, its value should be the amount of Emacs
- idle time in seconds to wait before starting fontification. For
- example, if you set `jit-lock-defer-time' to 0.25, fontification will
- only happen after 0.25s of idle time.
- *** contextual refontification is now separate from stealth fontification.
- jit-lock-defer-contextually is renamed jit-lock-contextually and
- jit-lock-context-time determines the delay after which contextual
- refontification takes place.
- *** lazy-lock is considered obsolete.
- The `lazy-lock' package is superseded by `jit-lock' and is considered
- obsolete. `jit-lock' is activated by default; if you wish to continue
- using `lazy-lock', activate it in your ~/.emacs like this:
- (setq font-lock-support-mode 'lazy-lock-mode)
- If you invoke `lazy-lock-mode' directly rather than through
- `font-lock-support-mode', it now issues a warning:
- "Use font-lock-support-mode rather than calling lazy-lock-mode"
- ** Menu support:
- *** A menu item "Show/Hide" was added to the top-level menu "Options".
- This menu allows you to turn various display features on and off (such
- as the fringes, the tool bar, the speedbar, and the menu bar itself).
- You can also move the vertical scroll bar to either side here or turn
- it off completely. There is also a menu-item to toggle displaying of
- current date and time, current line and column number in the mode-line.
- *** Speedbar has moved from the "Tools" top level menu to "Show/Hide".
- *** The menu item "Open File..." has been split into two items, "New File..."
- and "Open File...". "Open File..." now opens only existing files. This is
- to support existing GUI file selection dialogs better.
- *** The file selection dialog for Gtk+, Mac, W32 and Motif/LessTif can be
- disabled by customizing the variable `use-file-dialog'.
- *** The pop up menus for Lucid now stay up if you do a fast click and can
- be navigated with the arrow keys (like Gtk+, Mac and W32).
- *** The menu bar for Motif/LessTif/Lucid/Gtk+ can be navigated with keys.
- Pressing F10 shows the first menu in the menu bar. Navigation is done with
- the arrow keys, select with the return key and cancel with the escape keys.
- *** The Lucid menus can display multilingual text in your locale. You have
- to explicitly specify a fontSet resource for this to work, for example
- `-xrm "Emacs*fontSet: -*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*"'.
- *** Dialogs for Lucid/Athena and LessTif/Motif now pop down on pressing
- ESC, like they do for Gtk+, Mac and W32.
- *** For the Gtk+ version, you can make Emacs use the old file dialog
- by setting the variable `x-gtk-use-old-file-dialog' to t. Default is to use
- the new dialog.
- *** You can exit dialog windows and menus by typing C-g.
- ** Buffer Menu changes:
- *** The new options `buffers-menu-show-directories' and
- `buffers-menu-show-status' let you control how buffers are displayed
- in the menu dropped down when you click "Buffers" from the menu bar.
- `buffers-menu-show-directories' controls whether the menu displays
- leading directories as part of the file name visited by the buffer.
- If its value is `unless-uniquify', the default, directories are
- shown unless uniquify-buffer-name-style' is non-nil. The value of nil
- and t turn the display of directories off and on, respectively.
- `buffers-menu-show-status' controls whether the Buffers menu includes
- the modified and read-only status of the buffers. By default it is
- t, and the status is shown.
- Setting these variables directly does not take effect until next time
- the Buffers menu is regenerated.
- *** New command `Buffer-menu-toggle-files-only' toggles display of file
- buffers only in the Buffer Menu. It is bound to T in Buffer Menu
- mode.
- *** `buffer-menu' and `list-buffers' now list buffers whose names begin
- with a space, when those buffers are visiting files. Normally buffers
- whose names begin with space are omitted.
- ** Mouse changes:
- *** You can now follow links by clicking Mouse-1 on the link.
- Traditionally, Emacs uses a Mouse-1 click to set point and a Mouse-2
- click to follow a link, whereas most other applications use a Mouse-1
- click for both purposes, depending on whether you click outside or
- inside a link. Now the behavior of a Mouse-1 click has been changed
- to match this context-sensitive dual behavior. (If you prefer the old
- behavior, set the user option `mouse-1-click-follows-link' to nil.)
- Depending on the current mode, a Mouse-2 click in Emacs can do much
- more than just follow a link, so the new Mouse-1 behavior is only
- activated for modes which explicitly mark a clickable text as a "link"
- (see the new function `mouse-on-link-p' for details). The Lisp
- packages that are included in release 22.1 have been adapted to do
- this, but external packages may not yet support this. However, there
- is no risk in using such packages, as the worst thing that could
- happen is that you get the original Mouse-1 behavior when you click
- on a link, which typically means that you set point where you click.
- If you want to get the original Mouse-1 action also inside a link, you
- just need to press the Mouse-1 button a little longer than a normal
- click (i.e. press and hold the Mouse-1 button for half a second before
- you release it).
- Dragging the Mouse-1 inside a link still performs the original
- drag-mouse-1 action, typically copy the text.
- You can customize the new Mouse-1 behavior via the new user options
- `mouse-1-click-follows-link' and `mouse-1-click-in-non-selected-windows'.
- *** If you set the new variable `mouse-autoselect-window' to a non-nil
- value, windows are automatically selected as you move the mouse from
- one Emacs window to another, even within a frame. A minibuffer window
- can be selected only when it is active.
- *** On X, when the window manager requires that you click on a frame to
- select it (give it focus), the selected window and cursor position
- normally changes according to the mouse click position. If you set
- the variable x-mouse-click-focus-ignore-position to t, the selected
- window and cursor position do not change when you click on a frame
- to give it focus.
- *** Emacs normally highlights mouse sensitive text whenever the mouse
- is over the text. By setting the new variable `mouse-highlight', you
- can optionally enable mouse highlighting only after you move the
- mouse, so that highlighting disappears when you press a key. You can
- also disable mouse highlighting.
- *** You can now customize if selecting a region by dragging the mouse
- shall not copy the selected text to the kill-ring by setting the new
- variable mouse-drag-copy-region to nil.
- *** Under X, mouse-wheel-mode is turned on by default.
- *** Emacs ignores mouse-2 clicks while the mouse wheel is being moved.
- People tend to push the mouse wheel (which counts as a mouse-2 click)
- unintentionally while turning the wheel, so these clicks are now
- ignored. You can customize this with the mouse-wheel-click-event and
- mouse-wheel-inhibit-click-time variables.
- *** mouse-wheels can now scroll a specific fraction of the window
- (rather than a fixed number of lines) and the scrolling is `progressive'.
- ** Multilingual Environment (Mule) changes:
- *** You can disable character translation for a file using the -*-
- construct. Include `enable-character-translation: nil' inside the
- -*-...-*- to disable any character translation that may happen by
- various global and per-coding-system translation tables. You can also
- specify it in a local variable list at the end of the file. For
- shortcut, instead of using this long variable name, you can append the
- character "!" at the end of coding-system name specified in -*-
- construct or in a local variable list. For example, if a file has the
- following header, it is decoded by the coding system `iso-latin-1'
- without any character translation:
- ;; -*- coding: iso-latin-1!; -*-
- *** Language environment and various default coding systems are setup
- more correctly according to the current locale name. If the locale
- name doesn't specify a charset, the default is what glibc defines.
- This change can result in using the different coding systems as
- default in some locale (e.g. vi_VN).
- *** The keyboard-coding-system is now automatically set based on your
- current locale settings if you are not using a window system. This
- can mean that the META key doesn't work but generates non-ASCII
- characters instead, depending on how the terminal (or terminal
- emulator) works. Use `set-keyboard-coding-system' (or customize
- keyboard-coding-system) if you prefer META to work (the old default)
- or if the locale doesn't describe the character set actually generated
- by the keyboard. See Info node `Unibyte Mode'.
- *** The new command `set-file-name-coding-system' (C-x RET F) sets
- coding system for encoding and decoding file names. A new menu item
- (Options->Mule->Set Coding Systems->For File Name) invokes this
- command.
- *** The new command `revert-buffer-with-coding-system' (C-x RET r)
- revisits the current file using a coding system that you specify.
- *** New command `recode-region' decodes the region again by a specified
- coding system.
- *** The new command `recode-file-name' changes the encoding of the name
- of a file.
- *** New command `ucs-insert' inserts a character specified by its
- Unicode code point or character name.
- *** New command quail-show-key shows what key (or key sequence) to type
- in the current input method to input a character at point.
- *** Limited support for character `unification' has been added.
- Emacs now knows how to translate between different representations of
- the same characters in various Emacs charsets according to standard
- Unicode mappings. This applies mainly to characters in the ISO 8859
- sets plus some other 8-bit sets, but can be extended. For instance,
- translation works amongst the Emacs ...-iso8859-... charsets and the
- mule-unicode-... ones.
- By default this translation happens automatically on encoding.
- Self-inserting characters are translated to make the input conformant
- with the encoding of the buffer in which it's being used, where
- possible.
- You can force a more complete unification with the user option
- unify-8859-on-decoding-mode. That maps all the Latin-N character sets
- into Unicode characters (from the latin-iso8859-1 and
- mule-unicode-0100-24ff charsets) on decoding. Note that this mode
- will often effectively clobber data with an iso-2022 encoding.
- *** New language environments (set up automatically according to the
- locale): Belarusian, Bulgarian, Chinese-EUC-TW, Croatian, Esperanto,
- French, Georgian, Italian, Latin-7, Latvian, Lithuanian, Malayalam,
- Russian, Russian, Slovenian, Swedish, Tajik, Tamil, UTF-8,Ukrainian,
- Welsh,Latin-6, Windows-1255.
- *** New input methods: latin-alt-postfix, latin-postfix, latin-prefix,
- belarusian, bulgarian-bds, bulgarian-phonetic, chinese-sisheng (for
- Chinese Pinyin characters), croatian, dutch, georgian, latvian-keyboard,
- lithuanian-numeric, lithuanian-keyboard, malayalam-inscript, rfc1345,
- russian-computer, sgml, slovenian, tamil-inscript, ukrainian-computer,
- ucs, vietnamese-telex, welsh.
- *** There is support for decoding Greek and Cyrillic characters into
- either Unicode (the mule-unicode charsets) or the iso-8859 charsets,
- when possible. The latter are more space-efficient.
- This is controlled by user option utf-fragment-on-decoding.
- *** Improved Thai support. A new minor mode `thai-word-mode' (which is
- automatically activated if you select Thai as a language
- environment) changes key bindings of most word-oriented commands to
- versions which recognize Thai words. Affected commands are
- M-f (forward-word)
- M-b (backward-word)
- M-d (kill-word)
- M-DEL (backward-kill-word)
- M-t (transpose-words)
- M-q (fill-paragraph)
- *** Indian support has been updated.
- The in-is13194 coding system is now Unicode-based. CDAC fonts are
- assumed. There is a framework for supporting various Indian scripts,
- but currently only Devanagari, Malayalam and Tamil are supported.
- *** The utf-8/16 coding systems have been enhanced.
- By default, untranslatable utf-8 sequences are simply composed into
- single quasi-characters. User option `utf-translate-cjk-mode' (it is
- turned on by default) arranges to translate many utf-8 CJK character
- sequences into real Emacs characters in a similar way to the Mule-UCS
- system. As this loads a fairly big data on demand, people who are not
- interested in CJK characters may want to customize it to nil.
- You can augment/amend the CJK translation via hash tables
- `ucs-mule-cjk-to-unicode' and `ucs-unicode-to-mule-cjk'. The utf-8
- coding system now also encodes characters from most of Emacs's
- one-dimensional internal charsets, specifically the ISO-8859 ones.
- The utf-16 coding system is affected similarly.
- *** A UTF-7 coding system is available in the library `utf-7'.
- *** A new coding system `euc-tw' has been added for traditional Chinese
- in CNS encoding; it accepts both Big 5 and CNS as input; on saving,
- Big 5 is then converted to CNS.
- *** Many new coding systems are available in the `code-pages' library.
- These include complete versions of most of those in codepage.el, based
- on Unicode mappings. `codepage-setup' is now obsolete and is used
- only in the MS-DOS port of Emacs. All coding systems defined in
- `code-pages' are auto-loaded.
- *** New variable `utf-translate-cjk-unicode-range' controls which
- Unicode characters to translate in `utf-translate-cjk-mode'.
- *** iso-10646-1 (`Unicode') fonts can be used to display any range of
- characters encodable by the utf-8 coding system. Just specify the
- fontset appropriately.
- ** Customize changes:
- *** Custom themes are collections of customize options. Create a
- custom theme with M-x customize-create-theme. Use M-x load-theme to
- load and enable a theme, and M-x disable-theme to disable it. Use M-x
- enable-theme to enable a disabled theme.
- *** The commands M-x customize-face and M-x customize-face-other-window
- now look at the character after point. If a face or faces are
- specified for that character, the commands by default customize those
- faces.
- *** The face-customization widget has been reworked to be less confusing.
- In particular, when you enable a face attribute using the corresponding
- check-box, there's no longer a redundant `*' option in value selection
- for that attribute; the values you can choose are only those which make
- sense for the attribute. When an attribute is de-selected by unchecking
- its check-box, then the (now ignored, but still present temporarily in
- case you re-select the attribute) value is hidden.
- *** When you set or reset a variable's value in a Customize buffer,
- the previous value becomes the "backup value" of the variable.
- You can go back to that backup value by selecting "Use Backup Value"
- under the "[State]" button.
- ** Dired mode:
- *** In Dired's ! command (dired-do-shell-command), `*' and `?' now
- control substitution of the file names only when they are surrounded
- by whitespace. This means you can now use them as shell wildcards
- too. If you want to use just plain `*' as a wildcard, type `*""'; the
- double quotes make no difference in the shell, but they prevent
- special treatment in `dired-do-shell-command'.
- *** The Dired command `dired-goto-file' is now bound to j, not M-g.
- This is to avoid hiding the global key binding of M-g.
- *** New faces dired-header, dired-mark, dired-marked, dired-flagged,
- dired-ignored, dired-directory, dired-symlink, dired-warning
- introduced for Dired mode instead of font-lock faces.
- *** New Dired command `dired-compare-directories' marks files
- with different file attributes in two dired buffers.
- *** New Dired command `dired-do-touch' (bound to T) changes timestamps
- of marked files with the value entered in the minibuffer.
- *** In Dired, the w command now stores the current line's file name
- into the kill ring. With a zero prefix arg, it stores the absolute file name.
- *** In Dired-x, Omitting files is now a minor mode, dired-omit-mode.
- The mode toggling command is bound to M-o. A new command
- dired-mark-omitted, bound to * O, marks omitted files. The variable
- dired-omit-files-p is obsoleted, use the mode toggling function
- instead.
- *** The variables dired-free-space-program and dired-free-space-args
- have been renamed to directory-free-space-program and
- directory-free-space-args, and they now apply whenever Emacs puts a
- directory listing into a buffer.
- ** Comint changes:
- *** The new INSIDE_EMACS environment variable is set to "t" in subshells
- running inside Emacs. This supersedes the EMACS environment variable,
- which will be removed in a future Emacs release. Programs that need
- to know whether they are started inside Emacs should check INSIDE_EMACS
- instead of EMACS.
- *** The comint prompt can now be made read-only, using the new user
- option `comint-prompt-read-only'. This is not enabled by default,
- except in IELM buffers. The read-only status of IELM prompts can be
- controlled with the new user option `ielm-prompt-read-only', which
- overrides `comint-prompt-read-only'.
- The new commands `comint-kill-whole-line' and `comint-kill-region'
- support editing comint buffers with read-only prompts.
- `comint-kill-whole-line' is like `kill-whole-line', but ignores both
- read-only and field properties. Hence, it always kill entire
- lines, including any prompts.
- `comint-kill-region' is like `kill-region', except that it ignores
- read-only properties, if it is safe to do so. This means that if any
- part of a prompt is deleted, then the entire prompt must be deleted
- and that all prompts must stay at the beginning of a line. If this is
- not the case, then `comint-kill-region' behaves just like
- `kill-region' if read-only properties are involved: it copies the text
- to the kill-ring, but does not delete it.
- *** The new command `comint-insert-previous-argument' in comint-derived
- modes (shell-mode, etc.) inserts arguments from previous command lines,
- like bash's `ESC .' binding. It is bound by default to `C-c .', but
- otherwise behaves quite similarly to the bash version.
- *** `comint-use-prompt-regexp-instead-of-fields' has been renamed
- `comint-use-prompt-regexp'. The old name has been kept as an alias,
- but declared obsolete.
- ** M-x Compile changes:
- *** M-x compile has become more robust and reliable
- Quite a few more kinds of messages are recognized. Messages that are
- recognized as warnings or informational come in orange or green, instead of
- red. Informational messages are by default skipped with `next-error'
- (controlled by `compilation-skip-threshold').
- Location data is collected on the fly as the *compilation* buffer changes.
- This means you could modify messages to make them point to different files.
- This also means you can not go to locations of messages you may have deleted.
- The variable `compilation-error-regexp-alist' has now become customizable. If
- you had added your own regexps to this, you'll probably need to include a
- leading `^', otherwise they'll match anywhere on a line. There is now also a
- `compilation-mode-font-lock-keywords' and it nicely handles all the checks
- that configure outputs and -o options so you see at a glance where you are.
- The new file etc/compilation.txt gives examples of each type of message.
- *** New user option `compilation-environment'.
- This option allows you to specify environment variables for inferior
- compilation processes without affecting the environment that all
- subprocesses inherit.
- *** New user option `compilation-disable-input'.
- If this is non-nil, send end-of-file as compilation process input.
- *** New options `next-error-highlight' and `next-error-highlight-no-select'
- specify the method of highlighting of the corresponding source line
- in new face `next-error'.
- *** A new minor mode `next-error-follow-minor-mode' can be used in
- compilation-mode, grep-mode, occur-mode, and diff-mode (i.e. all the
- modes that can use `next-error'). In this mode, cursor motion in the
- buffer causes automatic display in another window of the corresponding
- matches, compilation errors, etc. This minor mode can be toggled with
- C-c C-f.
- *** When the left fringe is displayed, an arrow points to current message in
- the compilation buffer.
- *** The new variable `compilation-context-lines' controls lines of leading
- context before the current message. If nil and the left fringe is displayed,
- it doesn't scroll the compilation output window. If there is no left fringe,
- no arrow is displayed and a value of nil means display the message at the top
- of the window.
- ** Occur mode changes:
- *** The new command `multi-occur' is just like `occur', except it can
- search multiple buffers. There is also a new command
- `multi-occur-in-matching-buffers' which allows you to specify the
- buffers to search by their filenames or buffer names. Internally,
- Occur mode has been rewritten, and now uses font-lock, among other
- changes.
- *** You can now use next-error (C-x `) and previous-error to advance to
- the next/previous matching line found by M-x occur.
- *** In the *Occur* buffer, `o' switches to it in another window, and
- C-o displays the current line's occurrence in another window without
- switching to it.
- ** Grep changes:
- *** Grep has been decoupled from compilation mode setup.
- There's a new separate package grep.el, with its own submenu and
- customization group.
- *** `grep-find' is now also available under the name `find-grep' where
- people knowing `find-grep-dired' would probably expect it.
- *** New commands `lgrep' (local grep) and `rgrep' (recursive grep) are
- more user-friendly versions of `grep' and `grep-find', which prompt
- separately for the regular expression to match, the files to search,
- and the base directory for the search. Case sensitivity of the
- search is controlled by the current value of `case-fold-search'.
- These commands build the shell commands based on the new variables
- `grep-template' (lgrep) and `grep-find-template' (rgrep).
- The files to search can use aliases defined in `grep-files-aliases'.
- Subdirectories listed in `grep-find-ignored-directories' such as those
- typically used by various version control systems, like CVS and arch,
- are automatically skipped by `rgrep'.
- *** The grep commands provide highlighting support.
- Hits are fontified in green, and hits in binary files in orange. Grep buffers
- can be saved and automatically revisited.
- *** New option `grep-highlight-matches' highlights matches in *grep*
- buffer. It uses a special feature of some grep programs which accept
- --color option to output markers around matches. When going to the next
- match with `next-error' the exact match is highlighted in the source
- buffer. Otherwise, if `grep-highlight-matches' is nil, the whole
- source line is highlighted.
- *** New key bindings in grep output window:
- SPC and DEL scrolls window up and down. C-n and C-p moves to next and
- previous match in the grep window. RET jumps to the source line of
- the current match. `n' and `p' shows next and previous match in
- other window, but does not switch buffer. `{' and `}' jumps to the
- previous or next file in the grep output. TAB also jumps to the next
- file.
- *** M-x grep now tries to avoid appending `/dev/null' to the command line
- by using GNU grep `-H' option instead. M-x grep automatically
- detects whether this is possible or not the first time it is invoked.
- When `-H' is used, the grep command line supplied by the user is passed
- unchanged to the system to execute, which allows more complicated
- command lines to be used than was possible before.
- *** The new variables `grep-window-height' and `grep-scroll-output' override
- the corresponding compilation mode settings, for grep commands only.
- ** Cursor display changes:
- *** Emacs can produce an underscore-like (horizontal bar) cursor.
- The underscore cursor is set by putting `(cursor-type . hbar)' in
- default-frame-alist. It supports variable heights, like the `bar'
- cursor does.
- *** The variable `cursor-in-non-selected-windows' can now be set to any
- of the recognized cursor types.
- *** Display of hollow cursors now obeys the buffer-local value (if any)
- of `cursor-in-non-selected-windows' in the buffer that the cursor
- appears in.
- *** On text terminals, the variable `visible-cursor' controls whether Emacs
- uses the "very visible" cursor (the default) or the normal cursor.
- *** The X resource cursorBlink can be used to turn off cursor blinking.
- *** On X, MS Windows, and Mac OS, the blinking cursor's "off" state is
- now controlled by the variable `blink-cursor-alist'.
- ** X Windows Support:
- *** Emacs now supports drag and drop for X. Dropping a file on a window
- opens it, dropping text inserts the text. Dropping a file on a dired
- buffer copies or moves the file to that directory.
- *** Under X11, it is possible to swap Alt and Meta (and Super and Hyper).
- The new variables `x-alt-keysym', `x-hyper-keysym', `x-meta-keysym',
- and `x-super-keysym' can be used to choose which keysyms Emacs should
- use for the modifiers. For example, the following two lines swap
- Meta and Alt:
- (setq x-alt-keysym 'meta)
- (setq x-meta-keysym 'alt)
- *** The X resource useXIM can be used to turn off use of XIM, which can
- speed up Emacs with slow networking to the X server.
- If the configure option `--without-xim' was used to turn off use of
- XIM by default, the X resource useXIM can be used to turn it on.
- *** The new variable `x-select-request-type' controls how Emacs
- requests X selection. The default value is nil, which means that
- Emacs requests X selection with types COMPOUND_TEXT and UTF8_STRING,
- and use the more appropriately result.
- *** The scrollbar under LessTif or Motif has a smoother drag-scrolling.
- On the other hand, the size of the thumb does not represent the actual
- amount of text shown any more (only a crude approximation of it).
- ** Xterm support:
- *** If you enable Xterm Mouse mode, Emacs will respond to mouse clicks
- on the mode line, header line and display margin, when run in an xterm.
- *** Improved key bindings support when running in an xterm.
- When Emacs is running in an xterm more key bindings are available.
- The following should work:
- {C,S,C-S,A}-{right,left,up,down,prior,next,delete,insert,F1-12}.
- These key bindings work on xterm from X.org 6.8 (and later versions),
- they might not work on some older versions of xterm, or on some
- proprietary versions.
- The various keys generated by xterm when the "modifyOtherKeys"
- resource is set are also supported.
- ** Character terminal color support changes:
- *** The new command-line option --color=MODE lets you specify a standard
- mode for a tty color support. It is meant to be used on character
- terminals whose capabilities are not set correctly in the terminal
- database, or with terminal emulators which support colors, but don't
- set the TERM environment variable to a name of a color-capable
- terminal. "emacs --color" uses the same color commands as GNU `ls'
- when invoked with "ls --color", so if your terminal can support colors
- in "ls --color", it will support "emacs --color" as well. See the
- user manual for the possible values of the MODE parameter.
- *** Emacs now supports several character terminals which provide more
- than 8 colors. For example, for `xterm', 16-color, 88-color, and
- 256-color modes are supported. Emacs automatically notes at startup
- the extended number of colors, and defines the appropriate entries for
- all of these colors.
- *** Emacs now uses the full range of available colors for the default
- faces when running on a color terminal, including 16-, 88-, and
- 256-color xterms. This means that when you run "emacs -nw" on an
- 88-color or 256-color xterm, you will see essentially the same face
- colors as on X.
- *** There's a new support for colors on `rxvt' terminal emulator.
- ** ebnf2ps changes:
- *** New option `ebnf-arrow-extra-width' which specify extra width for arrow
- shape drawing.
- The extra width is used to avoid that the arrowhead and the terminal border
- overlap. It depends on `ebnf-arrow-shape' and `ebnf-line-width'.
- *** New option `ebnf-arrow-scale' which specify the arrow scale.
- Values lower than 1.0, shrink the arrow.
- Values greater than 1.0, expand the arrow.
- * New Modes and Packages in Emacs 22.1
- ** CUA mode is now part of the Emacs distribution.
- The new cua package provides CUA-like keybindings using C-x for
- cut (kill), C-c for copy, C-v for paste (yank), and C-z for undo.
- With cua, the region can be set and extended using shifted movement
- keys (like pc-selection-mode) and typed text replaces the active
- region (like delete-selection-mode). Do not enable these modes with
- cua-mode. Customize the variable `cua-mode' to enable cua.
- The cua-selection-mode enables the CUA keybindings for the region but
- does not change the bindings for C-z/C-x/C-c/C-v. It can be used as a
- replacement for pc-selection-mode.
- In addition, cua provides unified rectangle support with visible
- rectangle highlighting: Use C-return to start a rectangle, extend it
- using the movement commands (or mouse-3), and cut or copy it using C-x
- or C-c (using C-w and M-w also works).
- Use M-o and M-c to `open' or `close' the rectangle, use M-b or M-f, to
- fill it with blanks or another character, use M-u or M-l to upcase or
- downcase the rectangle, use M-i to increment the numbers in the
- rectangle, use M-n to fill the rectangle with a numeric sequence (such
- as 10 20 30...), use M-r to replace a regexp in the rectangle, and use
- M-' or M-/ to restrict command on the rectangle to a subset of the
- rows. See the commentary in cua-base.el for more rectangle commands.
- Cua also provides unified support for registers: Use a numeric
- prefix argument between 0 and 9, i.e. M-0 .. M-9, for C-x, C-c, and
- C-v to cut or copy into register 0-9, or paste from register 0-9.
- The last text deleted (not killed) is automatically stored in
- register 0. This includes text deleted by typing text.
- Finally, cua provides a global mark which is set using S-C-space.
- When the global mark is active, any text which is cut or copied is
- automatically inserted at the global mark position. See the
- commentary in cua-base.el for more global mark related commands.
- The features of cua also works with the standard Emacs bindings for
- kill, copy, yank, and undo. If you want to use cua mode, but don't
- want the C-x, C-c, C-v, and C-z bindings, you can customize the
- `cua-enable-cua-keys' variable.
- Note: This version of cua mode is not backwards compatible with older
- versions of cua.el and cua-mode.el. To ensure proper operation, you
- must remove older versions of cua.el or cua-mode.el as well as the
- loading and customization of those packages from the .emacs file.
- ** Tramp is now part of the distribution.
- This package is similar to Ange-FTP: it allows you to edit remote
- files. But whereas Ange-FTP uses FTP to access the remote host,
- Tramp uses a shell connection. The shell connection is always used
- for filename completion and directory listings and suchlike, but for
- the actual file transfer, you can choose between the so-called
- `inline' methods (which transfer the files through the shell
- connection using base64 or uu encoding) and the `out-of-band' methods
- (which invoke an external copying program such as `rcp' or `scp' or
- `rsync' to do the copying).
- Shell connections can be acquired via `rsh', `ssh', `telnet' and also
- `su' and `sudo'. Ange-FTP is still supported via the `ftp' method.
- If you want to disable Tramp you should set
- (setq tramp-default-method "ftp")
- Removing Tramp, and re-enabling Ange-FTP, can be achieved by M-x
- tramp-unload-tramp.
- ** The image-dired.el package allows you to easily view, tag and in
- other ways manipulate image files and their thumbnails, using dired as
- the main interface. Image-Dired provides functionality to generate
- simple image galleries.
- ** Image files are normally visited in Image mode, which lets you toggle
- between viewing the image and viewing the text using C-c C-c.
- ** The new python.el package is used to edit Python and Jython programs.
- ** The URL package (which had been part of W3) is now part of Emacs.
- ** Calc is now part of the Emacs distribution.
- Calc is an advanced desk calculator and mathematical tool written in
- Emacs Lisp. The prefix for Calc has been changed to `C-x *' and Calc
- can be started with `C-x * *'. The Calc manual is separate from the
- Emacs manual; within Emacs, type "C-h i m calc RET" to read the
- manual. A reference card is available in `etc/calccard.tex' and
- `etc/calccard.ps'.
- ** Org mode is now part of the Emacs distribution
- Org mode is a mode for keeping notes, maintaining ToDo lists, and
- doing project planning with a fast and effective plain-text system.
- It also contains a plain-text table editor with spreadsheet-like
- capabilities.
- The Org mode table editor can be integrated into any major mode by
- activating the minor mode, Orgtbl mode.
- The documentation for org-mode is in a separate manual; within Emacs,
- type "C-h i m org RET" to read that manual. A reference card is
- available in `etc/orgcard.tex' and `etc/orgcard.ps'.
- ** ERC is now part of the Emacs distribution.
- ERC is a powerful, modular, and extensible IRC client for Emacs.
- To see what modules are available, type
- M-x customize-option erc-modules RET.
- To start an IRC session with ERC, type M-x erc, and follow the prompts
- for server, port, and nick.
- ** Rcirc is now part of the Emacs distribution.
- Rcirc is an Internet relay chat (IRC) client. It supports
- simultaneous connections to multiple IRC servers. Each discussion
- takes place in its own buffer. For each connection you can join
- several channels (many-to-many) and participate in private
- (one-to-one) chats. Both channel and private chats are contained in
- separate buffers.
- To start an IRC session using the default parameters, type M-x irc.
- If you type C-u M-x irc, it prompts you for the server, nick, port and
- startup channel parameters before connecting.
- ** The new package ibuffer provides a powerful, completely
- customizable replacement for buff-menu.el.
- ** Newsticker is now part of the Emacs distribution.
- Newsticker asynchronously retrieves headlines (RSS) from a list of news
- sites, prepares these headlines for reading, and allows for loading the
- corresponding articles in a web browser. Its documentation is in a
- separate manual.
- ** The wdired.el package allows you to use normal editing commands on Dired
- buffers to change filenames, permissions, etc...
- ** Ido mode is now part of the Emacs distribution.
- The ido (interactively do) package is an extension of the iswitchb
- package to do interactive opening of files and directories in addition
- to interactive buffer switching. Ido is a superset of iswitchb (with
- a few exceptions), so don't enable both packages.
- ** The new global minor mode `file-name-shadow-mode' modifies the way
- filenames being entered by the user in the minibuffer are displayed, so
- that it's clear when part of the entered filename will be ignored due to
- Emacs' filename parsing rules. The ignored portion can be made dim,
- invisible, or otherwise less visually noticeable. The display method can
- be displayed by customizing the variable `file-name-shadow-properties'.
- ** Emacs' keyboard macro facilities have been enhanced by the new
- kmacro package.
- Keyboard macros are now defined and executed via the F3 and F4 keys:
- F3 starts a macro, F4 ends the macro, and pressing F4 again executes
- the last macro. While defining the macro, F3 inserts a counter value
- which automatically increments every time the macro is executed.
- There is now a keyboard macro ring which stores the most recently
- defined macros.
- The C-x C-k sequence is now a prefix for the kmacro keymap which
- defines bindings for moving through the keyboard macro ring,
- C-x C-k C-p and C-x C-k C-n, editing the last macro C-x C-k C-e,
- manipulating the macro counter and format via C-x C-k C-c,
- C-x C-k C-a, and C-x C-k C-f. See the commentary in kmacro.el
- for more commands.
- The original macro bindings C-x (, C-x ), and C-x e are still
- available, but they now interface to the keyboard macro ring too.
- The C-x e command now automatically terminates the current macro
- before calling it, if used while defining a macro.
- In addition, when ending or calling a macro with C-x e, the macro can
- be repeated immediately by typing just the `e'. You can customize
- this behavior via the variables kmacro-call-repeat-key and
- kmacro-call-repeat-with-arg.
- Keyboard macros can now be debugged and edited interactively.
- C-x C-k SPC steps through the last keyboard macro one key sequence
- at a time, prompting for the actions to take.
- ** The new keypad setup package provides several common bindings for
- the numeric keypad which is available on most keyboards. The numeric
- keypad typically has the digits 0 to 9, a decimal point, keys marked
- +, -, /, and *, an Enter key, and a NumLock toggle key. The keypad
- package only controls the use of the digit and decimal keys.
- By customizing the variables `keypad-setup', `keypad-shifted-setup',
- `keypad-numlock-setup', and `keypad-numlock-shifted-setup', or by
- using the function `keypad-setup', you can rebind all digit keys and
- the decimal key of the keypad in one step for each of the four
- possible combinations of the Shift key state (not pressed/pressed) and
- the NumLock toggle state (off/on).
- The choices for the keypad keys in each of the above states are:
- `Plain numeric keypad' where the keys generates plain digits,
- `Numeric keypad with decimal key' where the character produced by the
- decimal key can be customized individually (for internationalization),
- `Numeric Prefix Arg' where the keypad keys produce numeric prefix args
- for Emacs editing commands, `Cursor keys' and `Shifted Cursor keys'
- where the keys work like (shifted) arrow keys, home/end, etc., and
- `Unspecified/User-defined' where the keypad keys (kp-0, kp-1, etc.)
- are left unspecified and can be bound individually through the global
- or local keymaps.
- ** The printing package is now part of the Emacs distribution.
- If you enable the printing package by including (require 'printing) in
- the .emacs file, the normal Print item on the File menu is replaced
- with a Print sub-menu which allows you to preview output through
- ghostview, use ghostscript to print (if you don't have a PostScript
- printer) or send directly to printer a PostScript code generated by
- `ps-print' package. Use M-x pr-help for more information.
- ** The new package longlines.el provides a minor mode for editing text
- files composed of long lines, based on the `use-hard-newlines'
- mechanism. The long lines are broken up by inserting soft newlines,
- which are automatically removed when saving the file to disk or
- copying into the kill ring, clipboard, etc. By default, Longlines
- mode inserts soft newlines automatically during editing, a behavior
- referred to as "soft word wrap" in other text editors. This is
- similar to Refill mode, but more reliable. To turn the word wrap
- feature off, set `longlines-auto-wrap' to nil.
- ** SES mode (ses-mode) is a new major mode for creating and editing
- spreadsheet files. Besides the usual Emacs features (intuitive command
- letters, undo, cell formulas in Lisp, plaintext files, etc.) it also offers
- viral immunity and import/export of tab-separated values.
- ** The new package table.el implements editable, WYSIWYG, embedded
- `text tables' in Emacs buffers. It simulates the effect of putting
- these tables in a special major mode. The package emulates WYSIWYG
- table editing available in modern word processors. The package also
- can generate a table source in typesetting and markup languages such
- as latex and html from the visually laid out text table.
- ** Filesets are collections of files. You can define a fileset in
- various ways, such as based on a directory tree or based on
- program files that include other program files.
- Once you have defined a fileset, you can perform various operations on
- all the files in it, such as visiting them or searching and replacing
- in them.
- ** The minor mode Reveal mode makes text visible on the fly as you
- move your cursor into hidden regions of the buffer.
- It should work with any package that uses overlays to hide parts
- of a buffer, such as outline-minor-mode, hs-minor-mode, hide-ifdef-mode, ...
- There is also Global Reveal mode which affects all buffers.
- ** New minor mode, Visible mode, toggles invisibility in the current buffer.
- When enabled, it makes all invisible text visible. When disabled, it
- restores the previous value of `buffer-invisibility-spec'.
- ** The new package flymake.el does on-the-fly syntax checking of program
- source files. See the Flymake's Info manual for more details.
- ** savehist saves minibuffer histories between sessions.
- To use this feature, turn on savehist-mode in your `.emacs' file.
- ** The ruler-mode.el library provides a minor mode for displaying an
- "active" ruler in the header line. You can use the mouse to visually
- change the `fill-column', `window-margins' and `tab-stop-list'
- settings.
- ** The file t-mouse.el is now part of Emacs and provides access to mouse
- events from the console. It still requires gpm to work but has been updated
- for Emacs 22. In particular, the mode-line is now position sensitive.
- ** The new package scroll-lock.el provides the Scroll Lock minor mode
- for pager-like scrolling. Keys which normally move point by line or
- paragraph will scroll the buffer by the respective amount of lines
- instead and point will be kept vertically fixed relative to window
- boundaries during scrolling.
- ** The new global minor mode `size-indication-mode' (off by default)
- shows the size of accessible part of the buffer on the mode line.
- ** The new package conf-mode.el handles thousands of configuration files, with
- varying syntaxes for comments (;, #, //, /* */ or !), assignment (var = value,
- var : value, var value or keyword var value) and sections ([section] or
- section { }). Many files under /etc/, or with suffixes like .cf through
- .config, .properties (Java), .desktop (KDE/Gnome), .ini and many others are
- recognized.
- ** GDB-Script-mode is used for files like .gdbinit.
- ** The new package dns-mode.el adds syntax highlighting of DNS master files.
- It is a modern replacement for zone-mode.el, which is now obsolete.
- ** `cfengine-mode' is a major mode for editing GNU Cfengine
- configuration files.
- ** The TCL package tcl-mode.el was replaced by tcl.el.
- This was actually done in Emacs-21.1, and was not documented.
- * Changes in Specialized Modes and Packages in Emacs 22.1:
- ** Changes in Dired
- *** Bindings for Image-Dired added.
- Several new keybindings, all starting with the C-t prefix, have been
- added to Dired. They are all bound to commands in Image-Dired. As a
- starting point, mark some image files in a dired buffer and do C-t d
- to display thumbnails of them in a separate buffer.
- ** Info mode changes
- *** Images in Info pages are supported.
- Info pages show embedded images, in Emacs frames with image support.
- Info documentation that includes images, processed with makeinfo
- version 4.7 or newer, compiles to Info pages with embedded images.
- *** `Info-index' offers completion.
- *** http and ftp links in Info are now operational: they look like cross
- references and following them calls `browse-url'.
- *** isearch in Info uses Info-search and searches through multiple nodes.
- Before leaving the initial Info node isearch fails once with the error
- message [initial node], and with subsequent C-s/C-r continues through
- other nodes. When isearch fails for the rest of the manual, it wraps
- around the whole manual to the top/final node. The user option
- `Info-isearch-search' controls whether to use Info-search for isearch,
- or the default isearch search function that wraps around the current
- Info node.
- *** New search commands: `Info-search-case-sensitively' (bound to S),
- `Info-search-backward', and `Info-search-next' which repeats the last
- search without prompting for a new search string.
- *** New command `info-apropos' searches the indices of the known
- Info files on your system for a string, and builds a menu of the
- possible matches.
- *** New command `Info-history-forward' (bound to r and new toolbar icon)
- moves forward in history to the node you returned from after using
- `Info-history-back' (renamed from `Info-last').
- *** New command `Info-history' (bound to L) displays a menu of visited nodes.
- *** New command `Info-toc' (bound to T) creates a node with table of contents
- from the tree structure of menus of the current Info file.
- *** New command `Info-copy-current-node-name' (bound to w) copies
- the current Info node name into the kill ring. With a zero prefix
- arg, puts the node name inside the `info' function call.
- *** New face `info-xref-visited' distinguishes visited nodes from unvisited
- and a new option `Info-fontify-visited-nodes' to control this.
- *** A numeric prefix argument of `info' selects an Info buffer
- with the number appended to the `*info*' buffer name (e.g. "*info*<2>").
- *** Info now hides node names in menus and cross references by default.
- If you prefer the old behavior, you can set the new user option
- `Info-hide-note-references' to nil.
- *** The default value for `Info-scroll-prefer-subnodes' is now nil.
- ** Emacs server changes
- *** You can have several Emacs servers on the same machine.
- % emacs --eval '(setq server-name "foo")' -f server-start &
- % emacs --eval '(setq server-name "bar")' -f server-start &
- % emacsclient -s foo file1
- % emacsclient -s bar file2
- *** The `emacsclient' command understands the options `--eval' and
- `--display' which tell Emacs respectively to evaluate the given Lisp
- expression and to use the given display when visiting files.
- *** User option `server-mode' can be used to start a server process.
- ** Locate changes
- *** By default, reverting the *Locate* buffer now just runs the last
- `locate' command back over again without offering to update the locate
- database (which normally only works if you have root privileges). If
- you prefer the old behavior, set the new customizable option
- `locate-update-when-revert' to t.
- ** Desktop package
- *** Desktop saving is now a minor mode, `desktop-save-mode'.
- *** The variable `desktop-enable' is obsolete.
- Customize `desktop-save-mode' to enable desktop saving.
- *** Buffers are saved in the desktop file in the same order as that in the
- buffer list.
- *** The desktop package can be customized to restore only some buffers
- immediately, remaining buffers are restored lazily (when Emacs is
- idle).
- *** New command line option --no-desktop
- *** New commands:
- - desktop-revert reverts to the last loaded desktop.
- - desktop-change-dir kills current desktop and loads a new.
- - desktop-save-in-desktop-dir saves desktop in the directory from which
- it was loaded.
- - desktop-lazy-complete runs the desktop load to completion.
- - desktop-lazy-abort aborts lazy loading of the desktop.
- *** New customizable variables:
- - desktop-save. Determines whether the desktop should be saved when it is
- killed.
- - desktop-file-name-format. Format in which desktop file names should be saved.
- - desktop-path. List of directories in which to lookup the desktop file.
- - desktop-locals-to-save. List of local variables to save.
- - desktop-globals-to-clear. List of global variables that `desktop-clear' will clear.
- - desktop-clear-preserve-buffers-regexp. Regexp identifying buffers that `desktop-clear'
- should not delete.
- - desktop-restore-eager. Number of buffers to restore immediately. Remaining buffers are
- restored lazily (when Emacs is idle).
- - desktop-lazy-verbose. Verbose reporting of lazily created buffers.
- - desktop-lazy-idle-delay. Idle delay before starting to create buffers.
- *** New hooks:
- - desktop-after-read-hook run after a desktop is loaded.
- - desktop-no-desktop-file-hook run when no desktop file is found.
- ** Recentf changes
- The recent file list is now automatically cleaned up when recentf mode is
- enabled. The new option `recentf-auto-cleanup' controls when to do
- automatic cleanup.
- The ten most recent files can be quickly opened by using the shortcut
- keys 1 to 9, and 0, when the recent list is displayed in a buffer via
- the `recentf-open-files', or `recentf-open-more-files' commands.
- The `recentf-keep' option replaces `recentf-keep-non-readable-files-p'
- and provides a more general mechanism to customize which file names to
- keep in the recent list.
- With the more advanced option `recentf-filename-handlers', you can
- specify functions that successively transform recent file names. For
- example, if set to `file-truename' plus `abbreviate-file-name', the
- same file will not be in the recent list with different symbolic
- links, and the file name will be abbreviated.
- To follow naming convention, `recentf-menu-append-commands-flag'
- replaces the misnamed option `recentf-menu-append-commands-p'. The
- old name remains available as alias, but has been marked obsolete.
- ** Auto-Revert changes
- *** You can now use Auto Revert mode to `tail' a file.
- If point is at the end of a file buffer before reverting, Auto Revert
- mode keeps it at the end after reverting. Similarly if point is
- displayed at the end of a file buffer in any window, it stays at the end
- of the buffer in that window. This allows you to "tail" a file: just
- put point at the end of the buffer and it stays there. This rule
- applies to file buffers. For non-file buffers, the behavior can be mode
- dependent.
- If you are sure that the file will only change by growing at the end,
- then you can tail the file more efficiently by using the new minor
- mode Auto Revert Tail mode. The function `auto-revert-tail-mode'
- toggles this mode.
- *** Auto Revert mode is now more careful to avoid excessive reverts and
- other potential problems when deciding which non-file buffers to
- revert. This matters especially if Global Auto Revert mode is enabled
- and `global-auto-revert-non-file-buffers' is non-nil. Auto Revert
- mode only reverts a non-file buffer if the buffer has a non-nil
- `revert-buffer-function' and a non-nil `buffer-stale-function', which
- decides whether the buffer should be reverted. Currently, this means
- that auto reverting works for Dired buffers (although this may not
- work properly on all operating systems) and for the Buffer Menu.
- *** If the new user option `auto-revert-check-vc-info' is non-nil, Auto
- Revert mode reliably updates version control info (such as the version
- control number in the mode line), in all version controlled buffers in
- which it is active. If the option is nil, the default, then this info
- only gets updated whenever the buffer gets reverted.
- ** Changes in Shell Mode
- *** Shell output normally scrolls so that the input line is at the
- bottom of the window -- thus showing the maximum possible text. (This
- is similar to the way sequential output to a terminal works.)
- ** Changes in Hi Lock
- *** hi-lock-mode now only affects a single buffer, and a new function
- `global-hi-lock-mode' enables Hi Lock in all buffers. By default, if
- hi-lock-mode is used in what appears to be the initialization file, a
- warning message suggests to use global-hi-lock-mode instead. However,
- if the new variable `hi-lock-archaic-interface-deduce' is non-nil,
- using hi-lock-mode in an initialization file will turn on Hi Lock in all
- buffers and no warning will be issued (for compatibility with the
- behavior in older versions of Emacs).
- ** Changes in Allout
- *** Topic cryptography added, enabling easy gpg topic encryption and
- decryption. Per-topic basis enables interspersing encrypted-text and
- clear-text within a single file to your heart's content, using symmetric
- and/or public key modes. Time-limited key caching, user-provided
- symmetric key hinting and consistency verification, auto-encryption of
- pending topics on save, and more, make it easy to use encryption in
- powerful ways. Encryption behavior customization is collected in the
- allout-encryption customization group.
- *** Default command prefix was changed to "\C-c " (control-c space), to
- avoid intruding on user's keybinding space. Customize the
- `allout-command-prefix' variable to your preference.
- *** Some previously rough topic-header format edge cases are reconciled.
- Level 1 topics use the mode's comment format, and lines starting with the
- asterisk - for instance, the comment close of some languages (eg, c's "*/"
- or mathematica's "*)") - at the beginning of line are no longer are
- interpreted as level 1 topics in those modes.
- *** Many or most commonly occurring "accidental" topics are disqualified.
- Text in item bodies that looks like a low-depth topic is no longer mistaken
- for one unless its first offspring (or that of its next sibling with
- offspring) is only one level deeper.
- For example, pasting some text with a bunch of leading asterisks into a
- topic that's followed by a level 3 or deeper topic will not cause the
- pasted text to be mistaken for outline structure.
- The same constraint is applied to any level 2 or 3 topics.
- This settles an old issue where typed or pasted text needed to be carefully
- reviewed, and sometimes doctored, to avoid accidentally disrupting the
- outline structure. Now that should be generally unnecessary, as the most
- prone-to-occur accidents are disqualified.
- *** Allout now refuses to create "containment discontinuities", where a
- topic is shifted deeper than the offspring-depth of its container. On the
- other hand, allout now operates gracefully with existing containment
- discontinuities, revealing excessively contained topics rather than either
- leaving them hidden or raising an error.
- *** Navigation within an item is easier. Repeated beginning-of-line and
- end-of-line key commands (usually, ^A and ^E) cycle through the
- beginning/end-of-line and then beginning/end of topic, etc. See new
- customization vars `allout-beginning-of-line-cycles' and
- `allout-end-of-line-cycles'.
- *** New or revised allout-mode activity hooks enable creation of
- cooperative enhancements to allout mode without changes to the mode,
- itself.
- See `allout-exposure-change-hook', `allout-structure-added-hook',
- `allout-structure-deleted-hook', and `allout-structure-shifted-hook'.
- `allout-exposure-change-hook' replaces the existing
- `allout-view-change-hook', which is being deprecated. Both are still
- invoked, but `allout-view-change-hook' will eventually be ignored.
- `allout-exposure-change-hook' is called with explicit arguments detailing
- the specifics of each change (as are the other new hooks), making it easier
- to use than the old version.
- There is a new mode deactivation hook, `allout-mode-deactivate-hook', for
- coordinating with deactivation of allout-mode. Both that and the mode
- activation hook, `allout-mode-hook' are now run after the `allout-mode'
- variable is changed, rather than before.
- *** Allout now uses text overlay's `invisible' property for concealed text,
- instead of selective-display. This simplifies the code, in particular
- avoiding the need for kludges for isearch dynamic-display, discretionary
- handling of edits of concealed text, undo concerns, etc.
- *** There are many other fixes and refinements, including:
- - repaired inhibition of inadvertent edits to concealed text, without
- inhibiting undo; we now reveal undo changes within concealed text.
- - auto-fill-mode is now left inactive when allout-mode starts, if it
- already was inactive. also, `allout-inhibit-auto-fill' custom
- configuration variable makes it easy to disable auto fill in allout
- outlines in general or on a per-buffer basis.
- - allout now tolerates fielded text in outlines without disruption.
- - hot-spot navigation now is modularized with a new function,
- `allout-hotspot-key-handler', enabling easier use and enhancement of
- the functionality in allout addons.
- - repaired retention of topic body hanging indent upon topic depth shifts
- - bulleting variation is simpler and more accommodating, both in the
- default behavior and in ability to vary when creating new topics
- - mode deactivation now does cleans up effectively, more properly
- restoring affected variables and hooks to former state, removing
- overlays, etc. see `allout-add-resumptions' and
- `allout-do-resumptions', which replace the old `allout-resumptions'.
- - included a few unit-tests for interior functionality. developers can
- have them automatically run at the end of module load by customizing
- the option `allout-run-unit-tests-on-load'.
- - many, many other, more minor tweaks, fixes, and refinements.
- - version number incremented to 2.2
- ** Hideshow mode changes
- *** New variable `hs-set-up-overlay' allows customization of the overlay
- used to effect hiding for hideshow minor mode. Integration with isearch
- handles the overlay property `display' specially, preserving it during
- temporary overlay showing in the course of an isearch operation.
- *** New variable `hs-allow-nesting' non-nil means that hiding a block does
- not discard the hidden state of any "internal" blocks; when the parent
- block is later shown, the internal blocks remain hidden. Default is nil.
- ** FFAP changes
- *** New ffap commands and keybindings:
- C-x C-r (`ffap-read-only'),
- C-x C-v (`ffap-alternate-file'), C-x C-d (`ffap-list-directory'),
- C-x 4 r (`ffap-read-only-other-window'), C-x 4 d (`ffap-dired-other-window'),
- C-x 5 r (`ffap-read-only-other-frame'), C-x 5 d (`ffap-dired-other-frame').
- *** FFAP accepts wildcards in a file name by default.
- C-x C-f passes the file name to `find-file' with non-nil WILDCARDS
- argument, which visits multiple files, and C-x d passes it to `dired'.
- ** Changes in Skeleton
- *** In skeleton.el, `-' marks the `skeleton-point' without interregion interaction.
- `@' has reverted to only setting `skeleton-positions' and no longer
- sets `skeleton-point'. Skeletons which used @ to mark
- `skeleton-point' independent of `_' should now use `-' instead. The
- updated `skeleton-insert' docstring explains these new features along
- with other details of skeleton construction.
- *** The variables `skeleton-transformation', `skeleton-filter', and
- `skeleton-pair-filter' have been renamed to
- `skeleton-transformation-function', `skeleton-filter-function', and
- `skeleton-pair-filter-function'. The old names are still available
- as aliases.
- ** HTML/SGML changes
- *** Emacs now tries to set up buffer coding systems for HTML/XML files
- automatically.
- *** SGML mode has indentation and supports XML syntax.
- The new variable `sgml-xml-mode' tells SGML mode to use XML syntax.
- When this option is enabled, SGML tags are inserted in XML style,
- i.e., there is always a closing tag.
- By default, its setting is inferred on a buffer-by-buffer basis
- from the file name or buffer contents.
- *** The variable `sgml-transformation' has been renamed to
- `sgml-transformation-function'. The old name is still available as
- alias.
- *** `xml-mode' is now an alias for `sgml-mode', which has XML support.
- ** TeX modes
- *** New major mode Doctex mode, for *.dtx files.
- *** C-c C-c prompts for a command to run, and tries to offer a good default.
- *** The user option `tex-start-options-string' has been replaced
- by two new user options: `tex-start-options', which should hold
- command-line options to feed to TeX, and `tex-start-commands' which should hold
- TeX commands to use at startup.
- *** verbatim environments are now highlighted in courier by font-lock
- and super/sub-scripts are made into super/sub-scripts.
- ** RefTeX mode changes
- *** Changes to RefTeX's table of contents
- The new command keys "<" and ">" in the TOC buffer promote/demote the
- section at point or all sections in the current region, with full
- support for multifile documents.
- The new command `reftex-toc-recenter' (`C-c -') shows the current
- section in the TOC buffer without selecting the TOC window.
- Recentering can happen automatically in idle time when the option
- `reftex-auto-recenter-toc' is turned on. The highlight in the TOC
- buffer stays when the focus moves to a different window. A dedicated
- frame can show the TOC with the current section always automatically
- highlighted. The frame is created and deleted from the toc buffer
- with the `d' key.
- The toc window can be split off horizontally instead of vertically.
- See new option `reftex-toc-split-windows-horizontally'.
- Labels can be renamed globally from the table of contents using the
- key `M-%'.
- The new command `reftex-goto-label' jumps directly to a label
- location.
- *** Changes related to citations and BibTeX database files
- Commands that insert a citation now prompt for optional arguments when
- called with a prefix argument. Related new options are
- `reftex-cite-prompt-optional-args' and `reftex-cite-cleanup-optional-args'.
- The new command `reftex-create-bibtex-file' creates a BibTeX database
- with all entries referenced in the current document. The keys "e" and
- "E" allow to produce a BibTeX database file from entries marked in a
- citation selection buffer.
- The command `reftex-citation' uses the word in the buffer before the
- cursor as a default search string.
- The support for chapterbib has been improved. Different chapters can
- now use BibTeX or an explicit `thebibliography' environment.
- The macros which specify the bibliography file (like \bibliography)
- can be configured with the new option `reftex-bibliography-commands'.
- Support for jurabib has been added.
- *** Global index matched may be verified with a user function.
- During global indexing, a user function can verify an index match.
- See new option `reftex-index-verify-function'.
- *** Parsing documents with many labels can be sped up.
- Operating in a document with thousands of labels can be sped up
- considerably by allowing RefTeX to derive the type of a label directly
- from the label prefix like `eq:' or `fig:'. The option
- `reftex-trust-label-prefix' needs to be configured in order to enable
- this feature. While the speed-up is significant, this may reduce the
- quality of the context offered by RefTeX to describe a label.
- *** Miscellaneous changes
- The macros which input a file in LaTeX (like \input, \include) can be
- configured in the new option `reftex-include-file-commands'.
- RefTeX supports global incremental search.
- ** BibTeX mode
- *** The new command `bibtex-url' browses a URL for the BibTeX entry at
- point (bound to C-c C-l and mouse-2, RET on clickable fields).
- *** The new command `bibtex-entry-update' (bound to C-c C-u) updates
- an existing BibTeX entry by inserting fields that may occur but are not
- present.
- *** New `bibtex-entry-format' option `required-fields', enabled by default.
- *** `bibtex-maintain-sorted-entries' can take values `plain',
- `crossref', and `entry-class' which control the sorting scheme used
- for BibTeX entries. `bibtex-sort-entry-class' controls the sorting
- scheme `entry-class'. TAB completion for reference keys and
- automatic detection of duplicates does not require anymore that
- `bibtex-maintain-sorted-entries' is non-nil.
- *** The new command `bibtex-complete' completes word fragment before
- point according to context (bound to M-tab).
- *** In BibTeX mode the command `fill-paragraph' (M-q) fills
- individual fields of a BibTeX entry.
- *** The new variable `bibtex-autofill-types' contains a list of entry
- types for which fields are filled automatically (if possible).
- *** The new commands `bibtex-find-entry' and `bibtex-find-crossref'
- locate entries and crossref'd entries (bound to C-c C-s and C-c C-x).
- Crossref fields are clickable (bound to mouse-2, RET).
- *** The new variables `bibtex-files' and `bibtex-file-path' define a set
- of BibTeX files that are searched for entry keys.
- *** The new command `bibtex-validate-globally' checks for duplicate keys
- in multiple BibTeX files.
- *** If the new variable `bibtex-autoadd-commas' is non-nil,
- automatically add missing commas at end of BibTeX fields.
- *** The new command `bibtex-copy-summary-as-kill' pushes summary
- of BibTeX entry to kill ring (bound to C-c C-t).
- *** If the new variable `bibtex-parse-keys-fast' is non-nil,
- use fast but simplified algorithm for parsing BibTeX keys.
- *** The new variables bibtex-expand-strings and
- bibtex-autokey-expand-strings control the expansion of strings when
- extracting the content of a BibTeX field.
- *** The variables `bibtex-autokey-name-case-convert' and
- `bibtex-autokey-titleword-case-convert' have been renamed to
- `bibtex-autokey-name-case-convert-function' and
- `bibtex-autokey-titleword-case-convert-function'. The old names are
- still available as aliases.
- ** GUD changes
- *** The new package gdb-ui.el provides an enhanced graphical interface to
- GDB. You can interact with GDB through the GUD buffer in the usual way, but
- there are also further buffers which control the execution and describe the
- state of your program. It can separate the input/output of your program from
- that of GDB and watches expressions in the speedbar. It also uses features of
- Emacs 21/22 such as the toolbar, and bitmaps in the fringe to indicate
- breakpoints.
- To use this package just type M-x gdb. See the Emacs manual if you want the
- old behavior.
- *** GUD mode has its own tool bar for controlling execution of the inferior
- and other common debugger commands.
- *** In GUD mode, when talking to GDB, C-x C-a C-j "jumps" the program
- counter to the specified source line (the one where point is).
- *** The variable tooltip-gud-tips-p has been removed. GUD tooltips can now be
- toggled independently of normal tooltips with the minor mode
- `gud-tooltip-mode'.
- *** In graphical mode, with a C program, GUD Tooltips have been extended to
- display the #define directive associated with an identifier when program is
- not executing.
- *** GUD mode improvements for jdb:
- **** Search for source files using jdb classpath and class information.
- Fast startup since there is no need to scan all source files up front.
- There is also no need to create and maintain lists of source
- directories to scan. Look at `gud-jdb-use-classpath' and
- `gud-jdb-classpath' customization variables documentation.
- **** The previous method of searching for source files has been
- preserved in case someone still wants/needs to use it.
- Set `gud-jdb-use-classpath' to nil.
- **** Supports the standard breakpoint (gud-break, gud-clear)
- set/clear operations from Java source files under the classpath, stack
- traversal (gud-up, gud-down), and run until current stack finish
- (gud-finish).
- **** Supports new jdb (Java 1.2 and later) in addition to oldjdb
- (Java 1.1 jdb).
- *** Added jdb Customization Variables
- **** `gud-jdb-command-name'. What command line to use to invoke jdb.
- **** `gud-jdb-use-classpath'. Allows selection of java source file searching
- method: set to t for new method, nil to scan `gud-jdb-directories' for
- java sources (previous method).
- **** `gud-jdb-directories'. List of directories to scan and search for Java
- classes using the original gud-jdb method (if `gud-jdb-use-classpath'
- is nil).
- *** Minor Improvements
- **** The STARTTLS wrapper (starttls.el) can now use GnuTLS
- instead of the OpenSSL based `starttls' tool. For backwards
- compatibility, it prefers `starttls', but you can toggle
- `starttls-use-gnutls' to switch to GnuTLS (or simply remove the
- `starttls' tool).
- **** Do not allow debugger output history variable to grow without bounds.
- ** Lisp mode changes
- *** Lisp mode now uses `font-lock-doc-face' for doc strings.
- *** C-u C-M-q in Emacs Lisp mode pretty-prints the list after point.
- *** New features in evaluation commands
- **** The function `eval-defun' (C-M-x) called on defface reinitializes
- the face to the value specified in the defface expression.
- **** Typing C-x C-e twice prints the value of the integer result
- in additional formats (octal, hexadecimal, character) specified
- by the new function `eval-expression-print-format'. The same
- function also defines the result format for `eval-expression' (M-:),
- `eval-print-last-sexp' (C-j) and some edebug evaluation functions.
- ** Changes to cmuscheme
- *** Emacs now offers to start Scheme if the user tries to
- evaluate a Scheme expression but no Scheme subprocess is running.
- *** If the file ~/.emacs_NAME or ~/.emacs.d/init_NAME.scm (where NAME
- is the name of the Scheme interpreter) exists, its contents are sent
- to the Scheme subprocess upon startup.
- *** There are new commands to instruct the Scheme interpreter to trace
- procedure calls (`scheme-trace-procedure') and to expand syntactic forms
- (`scheme-expand-current-form'). The commands actually sent to the Scheme
- subprocess are controlled by the user options `scheme-trace-command',
- `scheme-untrace-command' and `scheme-expand-current-form'.
- ** Ewoc changes
- *** The new function `ewoc-delete' deletes specified nodes.
- *** `ewoc-create' now takes optional arg NOSEP, which inhibits insertion of
- a newline after each pretty-printed entry and after the header and footer.
- This allows you to create multiple-entry ewocs on a single line and to
- effect "invisible" nodes by arranging for the pretty-printer to not print
- anything for those nodes.
- For example, these two sequences of expressions behave identically:
- ;; NOSEP nil
- (defun PP (data) (insert (format "%S" data)))
- (ewoc-create 'PP "start\n")
- ;; NOSEP t
- (defun PP (data) (insert (format "%S\n" data)))
- (ewoc-create 'PP "start\n\n" "\n" t)
- ** CC mode changes
- *** The CC Mode manual has been extensively revised.
- The information about using CC Mode has been separated from the larger
- and more difficult chapters about configuration.
- *** New Minor Modes
- **** Electric Minor Mode toggles the electric action of non-alphabetic keys.
- The new command c-toggle-electric-mode is bound to C-c C-l. Turning the
- mode off can be helpful for editing chaotically indented code and for
- users new to CC Mode, who sometimes find electric indentation
- disconcerting. Its current state is displayed in the mode line with an
- 'l', e.g. "C/al".
- **** Subword Minor Mode makes Emacs recognize word boundaries at upper case
- letters in StudlyCapsIdentifiers. You enable this feature by C-c C-w. It can
- also be used in non-CC Mode buffers. :-) Contributed by Masatake YAMATO.
- *** Support for the AWK language.
- Support for the AWK language has been introduced. The implementation is
- based around GNU AWK version 3.1, but it should work pretty well with
- any AWK. As yet, not all features of CC Mode have been adapted for AWK.
- Here is a summary:
- **** Indentation Engine
- The CC Mode indentation engine fully supports AWK mode.
- AWK mode handles code formatted in the conventional AWK fashion: `{'s
- which start actions, user-defined functions, or compound statements are
- placed on the same line as the associated construct; the matching `}'s
- are normally placed under the start of the respective pattern, function
- definition, or structured statement.
- The predefined line-up functions haven't yet been adapted for AWK
- mode, though some of them may work serendipitously. There shouldn't
- be any problems writing custom indentation functions for AWK mode.
- **** Font Locking
- There is a single level of font locking in AWK mode, rather than the
- three distinct levels the other modes have. There are several
- idiosyncrasies in AWK mode's font-locking due to the peculiarities of
- the AWK language itself.
- **** Comment and Movement Commands
- These commands all work for AWK buffers. The notion of "defun" has
- been augmented to include AWK pattern-action pairs - the standard
- "defun" commands on key sequences C-M-a, C-M-e, and C-M-h use this
- extended definition.
- **** "awk" style, Auto-newline Insertion and Clean-ups
- A new style, "awk" has been introduced, and this is now the default
- style for AWK code. With auto-newline enabled, the clean-up
- c-one-liner-defun (see above) is useful.
- *** Font lock support.
- CC Mode now provides font lock support for all its languages. This
- supersedes the font lock patterns that have been in the core font lock
- package for C, C++, Java and Objective-C. Like indentation, font
- locking is done in a uniform way across all languages (except the new
- AWK mode - see below). That means that the new font locking will be
- different from the old patterns in various details for most languages.
- The main goal of the font locking in CC Mode is accuracy, to provide a
- dependable aid in recognizing the various constructs. Some, like
- strings and comments, are easy to recognize while others like
- declarations and types can be very tricky. CC Mode can go to great
- lengths to recognize declarations and casts correctly, especially when
- the types aren't recognized by standard patterns. This is a fairly
- demanding analysis which can be slow on older hardware, and it can
- therefore be disabled by choosing a lower decoration level with the
- variable font-lock-maximum-decoration.
- Note that the most demanding font lock level has been tuned with lazy
- fontification in mind; Just-In-Time-Lock mode should be enabled for
- the highest font lock level (by default, it is). Fontifying a file
- with several thousand lines in one go can take the better part of a
- minute.
- **** The (c|c++|objc|java|idl|pike)-font-lock-extra-types variables
- are now used by CC Mode to recognize identifiers that are certain to
- be types. (They are also used in cases that aren't related to font
- locking.) At the maximum decoration level, types are often recognized
- properly anyway, so these variables should be fairly restrictive and
- not contain patterns for uncertain types.
- **** Support for documentation comments.
- There is a "plugin" system to fontify documentation comments like
- Javadoc and the markup within them. It's independent of the host
- language, so it's possible to e.g. turn on Javadoc font locking in C
- buffers. See the variable c-doc-comment-style for details.
- Currently three kinds of doc comment styles are recognized: Sun's
- Javadoc, Autodoc (which is used in Pike) and GtkDoc (used in C). (The
- last was contributed by Masatake YAMATO). This is by no means a
- complete list of the most common tools; if your doc comment extractor
- of choice is missing then please drop a note to bug-cc-mode@gnu.org.
- **** Better handling of C++ templates.
- As a side effect of the more accurate font locking, C++ templates are
- now handled much better. The angle brackets that delimit them are
- given parenthesis syntax so that they can be navigated like other
- parens.
- This also improves indentation of templates, although there still is
- work to be done in that area. E.g. it's required that multiline
- template clauses are written in full and then refontified to be
- recognized, and the indentation of nested templates is a bit odd and
- not as configurable as it ought to be.
- **** Improved handling of Objective-C and CORBA IDL.
- Especially the support for Objective-C and IDL has gotten an overhaul.
- The special "@" declarations in Objective-C are handled correctly.
- All the keywords used in CORBA IDL, PSDL, and CIDL are recognized and
- handled correctly, also wrt indentation.
- *** Changes in Key Sequences
- **** c-toggle-auto-hungry-state is no longer bound to C-c C-t.
- **** c-toggle-hungry-state is no longer bound to C-c C-d.
- This binding has been taken over by c-hungry-delete-forwards.
- **** c-toggle-auto-state (C-c C-t) has been renamed to c-toggle-auto-newline.
- c-toggle-auto-state remains as an alias.
- **** The new commands c-hungry-backspace and c-hungry-delete-forwards
- have key bindings C-c C-DEL (or C-c DEL, for the benefit of TTYs) and
- C-c C-d (or C-c C-<delete> or C-c <delete>) respectively. These
- commands delete entire blocks of whitespace with a single
- key-sequence. [N.B. "DEL" is the <backspace> key.]
- **** The new command c-toggle-electric-mode is bound to C-c C-l.
- **** The new command c-subword-mode is bound to C-c C-w.
- *** C-c C-s (`c-show-syntactic-information') now highlights the anchor
- position(s).
- *** New syntactic symbols in IDL mode.
- The top level constructs "module" and "composition" (from CIDL) are
- now handled like "namespace" in C++: They are given syntactic symbols
- module-open, module-close, inmodule, composition-open,
- composition-close, and incomposition.
- *** New functions to do hungry delete without enabling hungry delete mode.
- The new functions `c-hungry-backspace' and `c-hungry-delete-forward'
- provide hungry deletion without having to toggle a mode. They are
- bound to C-c C-DEL and C-c C-d (and several variants, for the benefit
- of different keyboard setups. See "Changes in key sequences" above).
- *** Better control over `require-final-newline'.
- The variable `c-require-final-newline' specifies which of the modes
- implemented by CC mode should insert final newlines. Its value is a
- list of modes, and only those modes should do it. By default the list
- includes C, C++ and Objective-C modes.
- Whichever modes are in this list will set `require-final-newline'
- based on `mode-require-final-newline'.
- *** Format change for syntactic context elements.
- The elements in the syntactic context returned by `c-guess-basic-syntax'
- and stored in `c-syntactic-context' has been changed somewhat to allow
- attaching more information. They are now lists instead of single cons
- cells. E.g. a line that previously had the syntactic analysis
- ((inclass . 11) (topmost-intro . 13))
- is now analyzed as
- ((inclass 11) (topmost-intro 13))
- In some cases there are more than one position given for a syntactic
- symbol.
- This change might affect code that calls `c-guess-basic-syntax'
- directly, and custom lineup functions if they use
- `c-syntactic-context'. However, the argument given to lineup
- functions is still a single cons cell with nil or an integer in the
- cdr.
- *** API changes for derived modes.
- There have been extensive changes "under the hood" which can affect
- derived mode writers. Some of these changes are likely to cause
- incompatibilities with existing derived modes, but on the other hand
- care has now been taken to make it possible to extend and modify CC
- Mode with less risk of such problems in the future.
- **** New language variable system.
- These are variables whose values vary between CC Mode's different
- languages. See the comment blurb near the top of cc-langs.el.
- **** New initialization functions.
- The initialization procedure has been split up into more functions to
- give better control: `c-basic-common-init', `c-font-lock-init', and
- `c-init-language-vars'.
- *** Changes in analysis of nested syntactic constructs.
- The syntactic analysis engine has better handling of cases where
- several syntactic constructs appear nested on the same line. They are
- now handled as if each construct started on a line of its own.
- This means that CC Mode now indents some cases differently, and
- although it's more consistent there might be cases where the old way
- gave results that's more to one's liking. So if you find a situation
- where you think that the indentation has become worse, please report
- it to bug-cc-mode@gnu.org.
- **** New syntactic symbol substatement-label.
- This symbol is used when a label is inserted between a statement and
- its substatement. E.g:
- if (x)
- x_is_true:
- do_stuff();
- *** Better handling of multiline macros.
- **** Syntactic indentation inside macros.
- The contents of multiline #define's are now analyzed and indented
- syntactically just like other code. This can be disabled by the new
- variable `c-syntactic-indentation-in-macros'. A new syntactic symbol
- `cpp-define-intro' has been added to control the initial indentation
- inside `#define's.
- **** New lineup function `c-lineup-cpp-define'.
- Now used by default to line up macro continuation lines. The behavior
- of this function closely mimics the indentation one gets if the macro
- is indented while the line continuation backslashes are temporarily
- removed. If syntactic indentation in macros is turned off, it works
- much line `c-lineup-dont-change', which was used earlier, but handles
- empty lines within the macro better.
- **** Automatically inserted newlines continues the macro if used within one.
- This applies to the newlines inserted by the auto-newline mode, and to
- `c-context-line-break' and `c-context-open-line'.
- **** Better alignment of line continuation backslashes.
- `c-backslash-region' tries to adapt to surrounding backslashes. New
- variable `c-backslash-max-column' puts a limit on how far out
- backslashes can be moved.
- **** Automatic alignment of line continuation backslashes.
- This is controlled by the new variable `c-auto-align-backslashes'. It
- affects `c-context-line-break', `c-context-open-line' and newlines
- inserted in Auto-Newline mode.
- **** Line indentation works better inside macros.
- Regardless whether syntactic indentation and syntactic indentation
- inside macros are enabled or not, line indentation now ignores the
- line continuation backslashes. This is most noticeable when syntactic
- indentation is turned off and there are empty lines (save for the
- backslash) in the macro.
- *** indent-for-comment is more customizable.
- The behavior of M-; (indent-for-comment) is now configurable through
- the variable `c-indent-comment-alist'. The indentation behavior is
- based on the preceding code on the line, e.g. to get two spaces after
- #else and #endif but indentation to `comment-column' in most other
- cases (something which was hardcoded earlier).
- *** New function `c-context-open-line'.
- It's the open-line equivalent of `c-context-line-break'.
- *** New clean-ups
- **** `comment-close-slash'.
- With this clean-up, a block (i.e. c-style) comment can be terminated by
- typing a slash at the start of a line.
- **** `c-one-liner-defun'
- This clean-up compresses a short enough defun (for example, an AWK
- pattern/action pair) onto a single line. "Short enough" is configurable.
- *** New lineup functions
- **** `c-lineup-string-cont'
- This lineup function lines up a continued string under the one it
- continues. E.g:
- result = prefix + "A message "
- "string."; <- c-lineup-string-cont
- **** `c-lineup-cascaded-calls'
- Lines up series of calls separated by "->" or ".".
- **** `c-lineup-knr-region-comment'
- Gives (what most people think is) better indentation of comments in
- the "K&R region" between the function header and its body.
- **** `c-lineup-gcc-asm-reg'
- Provides better indentation inside asm blocks.
- **** `c-lineup-argcont'
- Lines up continued function arguments after the preceding comma.
- *** Added toggle for syntactic indentation.
- The function `c-toggle-syntactic-indentation' can be used to toggle
- syntactic indentation.
- *** Better caching of the syntactic context.
- CC Mode caches the positions of the opening parentheses (of any kind)
- of the lists surrounding the point. Those positions are used in many
- places as anchor points for various searches. The cache is now
- improved so that it can be reused to a large extent when the point is
- moved. The less it moves, the less needs to be recalculated.
- The effect is that CC Mode should be fast most of the time even when
- opening parens are hung (i.e. aren't in column zero). It's typically
- only the first time after the point is moved far down in a complex
- file that it'll take noticeable time to find out the syntactic
- context.
- *** Statements are recognized in a more robust way.
- Statements are recognized most of the time even when they occur in an
- "invalid" context, e.g. in a function argument. In practice that can
- happen when macros are involved.
- *** Improved the way `c-indent-exp' chooses the block to indent.
- It now indents the block for the closest sexp following the point
- whose closing paren ends on a different line. This means that the
- point doesn't have to be immediately before the block to indent.
- Also, only the block and the closing line is indented; the current
- line is left untouched.
- ** Changes in Makefile mode
- *** Makefile mode has submodes for automake, gmake, makepp, BSD make and imake.
- The former two couldn't be differentiated before, and the latter three
- are new. Font-locking is robust now and offers new customizable
- faces.
- *** The variable `makefile-query-one-target-method' has been renamed
- to `makefile-query-one-target-method-function'. The old name is still
- available as alias.
- ** Sql changes
- *** The variable `sql-product' controls the highlighting of different
- SQL dialects. This variable can be set globally via Customize, on a
- buffer-specific basis via local variable settings, or for the current
- session using the new SQL->Product submenu. (This menu replaces the
- SQL->Highlighting submenu.)
- The following values are supported:
- ansi ANSI Standard (default)
- db2 DB2
- informix Informix
- ingres Ingres
- interbase Interbase
- linter Linter
- ms Microsoft
- mysql MySQL
- oracle Oracle
- postgres Postgres
- solid Solid
- sqlite SQLite
- sybase Sybase
- The current product name will be shown on the mode line following the
- SQL mode indicator.
- The technique of setting `sql-mode-font-lock-defaults' directly in
- your `.emacs' will no longer establish the default highlighting -- Use
- `sql-product' to accomplish this.
- ANSI keywords are always highlighted.
- *** The function `sql-add-product-keywords' can be used to add
- font-lock rules to the product specific rules. For example, to have
- all identifiers ending in `_t' under MS SQLServer treated as a type,
- you would use the following line in your .emacs file:
- (sql-add-product-keywords 'ms
- '(("\\<\\w+_t\\>" . font-lock-type-face)))
- *** Oracle support includes keyword highlighting for Oracle 9i.
- Most SQL and PL/SQL keywords are implemented. SQL*Plus commands are
- highlighted in `font-lock-doc-face'.
- *** Microsoft SQLServer support has been significantly improved.
- Keyword highlighting for SqlServer 2000 is implemented.
- sql-interactive-mode defaults to use osql, rather than isql, because
- osql flushes its error stream more frequently. Thus error messages
- are displayed when they occur rather than when the session is
- terminated.
- If the username and password are not provided to `sql-ms', osql is
- called with the `-E' command line argument to use the operating system
- credentials to authenticate the user.
- *** Postgres support is enhanced.
- Keyword highlighting of Postgres 7.3 is implemented. Prompting for
- the username and the pgsql `-U' option is added.
- *** MySQL support is enhanced.
- Keyword highlighting of MySql 4.0 is implemented.
- *** Imenu support has been enhanced to locate tables, views, indexes,
- packages, procedures, functions, triggers, sequences, rules, and
- defaults.
- *** Added SQL->Start SQLi Session menu entry which calls the
- appropriate `sql-interactive-mode' wrapper for the current setting of
- `sql-product'.
- *** sql.el supports the SQLite interpreter--call 'sql-sqlite'.
- ** Fortran mode changes
- *** F90 mode and Fortran mode have support for `hs-minor-mode' (hideshow).
- It cannot deal with every code format, but ought to handle a sizable
- majority.
- *** F90 mode and Fortran mode have new navigation commands
- `f90-end-of-block', `f90-beginning-of-block', `f90-next-block',
- `f90-previous-block', `fortran-end-of-block',
- `fortran-beginning-of-block'.
- *** Fortran mode does more font-locking by default. Use level 3
- highlighting for the old default.
- *** Fortran mode has a new variable `fortran-directive-re'.
- Adapt this to match the format of any compiler directives you use.
- Lines that match are never indented, and are given distinctive font-locking.
- *** The new function `f90-backslash-not-special' can be used to change
- the syntax of backslashes in F90 buffers.
- ** Miscellaneous programming mode changes
- *** In sh-script, a continuation line is only indented if the backslash was
- preceded by a SPC or a TAB.
- *** Perl mode has a new variable `perl-indent-continued-arguments'.
- *** The old Octave mode bindings C-c f and C-c i have been changed
- to C-c C-f and C-c C-i. The C-c C-i subcommands now have duplicate
- bindings on control characters--thus, C-c C-i C-b is the same as
- C-c C-i b, and so on.
- *** Prolog mode has a new variable `prolog-font-lock-keywords'
- to support use of font-lock.
- ** VC Changes
- *** New backends for Subversion and Meta-CVS.
- *** The new variable `vc-cvs-global-switches' specifies switches that
- are passed to any CVS command invoked by VC.
- These switches are used as "global options" for CVS, which means they
- are inserted before the command name. For example, this allows you to
- specify a compression level using the `-z#' option for CVS.
- *** The key C-x C-q only changes the read-only state of the buffer
- (toggle-read-only). It no longer checks files in or out.
- We made this change because we held a poll and found that many users
- were unhappy with the previous behavior. If you do prefer this
- behavior, you can bind `vc-toggle-read-only' to C-x C-q in your
- `.emacs' file:
- (global-set-key "\C-x\C-q" 'vc-toggle-read-only)
- The function `vc-toggle-read-only' will continue to exist.
- *** VC-Annotate mode enhancements
- In VC-Annotate mode, you can now use the following key bindings for
- enhanced functionality to browse the annotations of past revisions, or
- to view diffs or log entries directly from vc-annotate-mode:
- P: annotates the previous revision
- N: annotates the next revision
- J: annotates the revision at line
- A: annotates the revision previous to line
- D: shows the diff of the revision at line with its previous revision
- L: shows the log of the revision at line
- W: annotates the workfile (most up to date) version
- ** pcl-cvs changes
- *** In pcl-cvs mode, there is a new `d y' command to view the diffs
- between the local version of the file and yesterday's head revision
- in the repository.
- *** In pcl-cvs mode, there is a new `d r' command to view the changes
- anyone has committed to the repository since you last executed
- `checkout', `update' or `commit'. That means using cvs diff options
- -rBASE -rHEAD.
- ** Diff changes
- *** M-x diff uses Diff mode instead of Compilation mode.
- *** Diff mode key bindings changed.
- These are the new bindings:
- C-c C-e diff-ediff-patch (old M-A)
- C-c C-n diff-restrict-view (old M-r)
- C-c C-r diff-reverse-direction (old M-R)
- C-c C-u diff-context->unified (old M-U)
- C-c C-w diff-refine-hunk (old C-c C-r)
- To convert unified to context format, use C-u C-c C-u.
- In addition, C-c C-u now operates on the region
- in Transient Mark mode when the mark is active.
- ** EDiff changes.
- *** When comparing directories.
- Typing D brings up a buffer that lists the differences between the contents of
- directories. Now it is possible to use this buffer to copy the missing files
- from one directory to another.
- *** When comparing files or buffers.
- Typing the = key now offers to perform the word-by-word comparison of the
- currently highlighted regions in an inferior Ediff session. If you answer 'n'
- then it reverts to the old behavior and asks the user to select regions for
- comparison.
- *** The new command `ediff-backup' compares a file with its most recent
- backup using `ediff'. If you specify the name of a backup file,
- `ediff-backup' compares it with the file of which it is a backup.
- ** Etags changes.
- *** New regular expressions features
- **** New syntax for regular expressions, multi-line regular expressions.
- The syntax --ignore-case-regexp=/regex/ is now undocumented and retained
- only for backward compatibility. The new equivalent syntax is
- --regex=/regex/i. More generally, it is --regex=/TAGREGEX/TAGNAME/MODS,
- where `/TAGNAME' is optional, as usual, and MODS is a string of 0 or
- more characters among `i' (ignore case), `m' (multi-line) and `s'
- (single-line). The `m' and `s' modifiers behave as in Perl regular
- expressions: `m' allows regexps to match more than one line, while `s'
- (which implies `m') means that `.' matches newlines. The ability to
- span newlines allows writing of much more powerful regular expressions
- and rapid prototyping for tagging new languages.
- **** Regular expressions can use char escape sequences as in GCC.
- The escaped character sequence \a, \b, \d, \e, \f, \n, \r, \t, \v,
- respectively, stand for the ASCII characters BEL, BS, DEL, ESC, FF, NL,
- CR, TAB, VT.
- **** Regular expressions can be bound to a given language.
- The syntax --regex={LANGUAGE}REGEX means that REGEX is used to make tags
- only for files of language LANGUAGE, and ignored otherwise. This is
- particularly useful when storing regexps in a file.
- **** Regular expressions can be read from a file.
- The --regex=@regexfile option means read the regexps from a file, one
- per line. Lines beginning with space or tab are ignored.
- *** New language parsing features
- **** New language HTML.
- Tags are generated for `title' as well as `h1', `h2', and `h3'. Also,
- when `name=' is used inside an anchor and whenever `id=' is used.
- **** New language PHP.
- Functions, classes and defines are tags. If the --members option is
- specified to etags, variables are tags also.
- **** New language Lua.
- All functions are tagged.
- **** The `::' qualifier triggers C++ parsing in C file.
- Previously, only the `template' and `class' keywords had this effect.
- **** The GCC __attribute__ keyword is now recognized and ignored.
- **** In C and derived languages, etags creates tags for #undef
- **** In Makefiles, constants are tagged.
- If you want the old behavior instead, thus avoiding to increase the
- size of the tags file, use the --no-globals option.
- **** In Perl, packages are tags.
- Subroutine tags are named from their package. You can jump to sub tags
- as you did before, by the sub name, or additionally by looking for
- package::sub.
- **** In Prolog, etags creates tags for rules in addition to predicates.
- **** New default keywords for TeX.
- The new keywords are def, newcommand, renewcommand, newenvironment and
- renewenvironment.
- *** Honor #line directives.
- When Etags parses an input file that contains C preprocessor's #line
- directives, it creates tags using the file name and line number
- specified in those directives. This is useful when dealing with code
- created from Cweb source files. When Etags tags the generated file, it
- writes tags pointing to the source file.
- *** New option --parse-stdin=FILE.
- This option is mostly useful when calling etags from programs. It can
- be used (only once) in place of a file name on the command line. Etags
- reads from standard input and marks the produced tags as belonging to
- the file FILE.
- ** Ctags changes.
- *** Ctags now allows duplicate tags
- ** Rmail changes
- *** Support for `movemail' from GNU mailutils was added to Rmail.
- This version of `movemail' allows you to read mail from a wide range of
- mailbox formats, including remote POP3 and IMAP4 mailboxes with or
- without TLS encryption. If GNU mailutils is installed on the system
- and its version of `movemail' can be found in exec-path, it will be
- used instead of the native one.
- *** The new commands rmail-end-of-message and rmail-summary end-of-message,
- by default bound to `/', go to the end of the current mail message in
- Rmail and Rmail summary buffers.
- *** Rmail now displays 5-digit message ids in its summary buffer.
- ** Gnus package
- *** Gnus now includes Sieve and PGG
- Sieve is a library for managing Sieve scripts. PGG is a library to handle
- PGP/MIME.
- *** There are many news features, bug fixes and improvements.
- See the file GNUS-NEWS or the node "Oort Gnus" in the Gnus manual for details.
- ** MH-E changes.
- Upgraded to MH-E version 8.0.3. There have been major changes since
- version 5.0.2; see MH-E-NEWS for details.
- ** Miscellaneous mail changes
- *** The new variable `mail-default-directory' specifies
- `default-directory' for mail buffers. This directory is used for
- auto-save files of mail buffers. It defaults to "~/".
- *** The mode line can indicate new mail in a directory or file.
- See the documentation of the user option `display-time-mail-directory'.
- ** Calendar changes
- *** There is a new calendar package, icalendar.el, that can be used to
- convert Emacs diary entries to/from the iCalendar format.
- *** The new package cal-html.el writes HTML files with calendar and
- diary entries.
- *** The new functions `diary-from-outlook', `diary-from-outlook-gnus',
- and `diary-from-outlook-rmail' can be used to import diary entries
- from Outlook-format appointments in mail messages. The variable
- `diary-outlook-formats' can be customized to recognize additional
- formats.
- *** The procedure for activating appointment reminders has changed:
- use the new function `appt-activate'. The new variable
- `appt-display-format' controls how reminders are displayed, replacing
- `appt-issue-message', `appt-visible', and `appt-msg-window'.
- *** The function `simple-diary-display' now by default sets a header line.
- This can be controlled through the variables `diary-header-line-flag'
- and `diary-header-line-format'.
- *** Diary sexp entries can have custom marking in the calendar.
- Diary sexp functions which only apply to certain days (such as
- `diary-block' or `diary-cyclic') now take an optional parameter MARK,
- which is the name of a face or a single-character string indicating
- how to highlight the day in the calendar display. Specifying a
- single-character string as @var{mark} places the character next to the
- day in the calendar. Specifying a face highlights the day with that
- face. This lets you have different colors or markings for vacations,
- appointments, paydays or anything else using a sexp.
- *** The meanings of C-x < and C-x > have been interchanged.
- < means to scroll backward in time, and > means to scroll forward.
- *** You can now use < and >, instead of C-x < and C-x >, to scroll
- the calendar left or right.
- *** The new function `calendar-goto-day-of-year' (g D) prompts for a
- year and day number, and moves to that date. Negative day numbers
- count backward from the end of the year.
- *** The new Calendar function `calendar-goto-iso-week' (g w)
- prompts for a year and a week number, and moves to the first
- day of that ISO week.
- *** The functions `holiday-easter-etc' and `holiday-advent' now take
- optional arguments, in order to only report on the specified holiday
- rather than all. This makes customization of variables such as
- `christian-holidays' simpler.
- *** The new variable `calendar-minimum-window-height' affects the
- window generated by the function `generate-calendar-window'.
- ** Speedbar changes
- *** Speedbar items can now be selected by clicking mouse-1, based on
- the `mouse-1-click-follows-link' mechanism.
- *** The new command `speedbar-toggle-line-expansion', bound to SPC,
- contracts or expands the line under the cursor.
- *** New command `speedbar-create-directory', bound to `M'.
- *** The new commands `speedbar-expand-line-descendants' and
- `speedbar-contract-line-descendants', bound to `[' and `]'
- respectively, expand and contract the line under cursor with all of
- its descendants.
- *** The new user option `speedbar-use-tool-tips-flag', if non-nil,
- means to display tool-tips for speedbar items.
- *** The new user option `speedbar-query-confirmation-method' controls
- how querying is performed for file operations. A value of 'always
- means to always query before file operations; 'none-but-delete means
- to not query before any file operations, except before a file
- deletion.
- *** The new user option `speedbar-select-frame-method' specifies how
- to select a frame for displaying a file opened with the speedbar. A
- value of 'attached means to use the attached frame (the frame that
- speedbar was started from.) A number such as 1 or -1 means to pass
- that number to `other-frame'.
- *** SPC and DEL are no longer bound to scroll up/down in the speedbar
- keymap.
- *** The frame management code in speedbar.el has been split into a new
- `dframe' library. Emacs Lisp code that makes use of the speedbar
- should use `dframe-attached-frame' instead of
- `speedbar-attached-frame', `dframe-timer' instead of `speedbar-timer',
- `dframe-close-frame' instead of `speedbar-close-frame', and
- `dframe-activity-change-focus-flag' instead of
- `speedbar-activity-change-focus-flag'. The variables
- `speedbar-update-speed' and `speedbar-navigating-speed' are also
- obsolete; use `dframe-update-speed' instead.
- ** battery.el changes
- *** display-battery-mode replaces display-battery.
- *** battery.el now works on recent versions of OS X.
- ** Games
- *** The game `mpuz' is enhanced.
- `mpuz' now allows the 2nd factor not to have two identical digits. By
- default, all trivial operations involving whole lines are performed
- automatically. The game uses faces for better visual feedback.
- ** Obsolete and deleted packages
- *** fast-lock.el and lazy-lock.el are obsolete. Use jit-lock.el instead.
- *** iso-acc.el is now obsolete. Use one of the latin input methods instead.
- *** zone-mode.el is now obsolete. Use dns-mode.el instead.
- *** cplus-md.el has been deleted.
- ** Miscellaneous
- *** The variable `woman-topic-at-point' is renamed
- to `woman-use-topic-at-point' and behaves differently: if this
- variable is non-nil, the `woman' command uses the word at point
- automatically, without asking for a confirmation. Otherwise, the word
- at point is suggested as default, but not inserted at the prompt.
- *** You can now customize `fill-nobreak-predicate' to control where
- filling can break lines. The value is now normally a list of
- functions, but it can also be a single function, for compatibility.
- Emacs provide two predicates, `fill-single-word-nobreak-p' and
- `fill-french-nobreak-p', for use as the value of
- `fill-nobreak-predicate'.
- *** M-x view-file and commands that use it now avoid interfering
- with special modes such as Tar mode.
- *** `global-whitespace-mode' is a new alias for `whitespace-global-mode'.
- *** The saveplace.el package now filters out unreadable files.
- When you exit Emacs, the saved positions in visited files no longer
- include files that aren't readable, e.g. files that don't exist.
- Customize the new option `save-place-forget-unreadable-files' to nil
- to get the old behavior. The new options `save-place-save-skipped'
- and `save-place-skip-check-regexp' allow further fine-tuning of this
- feature.
- *** Commands `winner-redo' and `winner-undo', from winner.el, are now
- bound to C-c <left> and C-c <right>, respectively. This is an
- incompatible change.
- *** The type-break package now allows `type-break-file-name' to be nil
- and if so, doesn't store any data across sessions. This is handy if
- you don't want the `.type-break' file in your home directory or are
- annoyed by the need for interaction when you kill Emacs.
- *** `ps-print' can now print characters from the mule-unicode charsets.
- Printing text with characters from the mule-unicode-* sets works with
- `ps-print', provided that you have installed the appropriate BDF
- fonts. See the file INSTALL for URLs where you can find these fonts.
- *** New command `strokes-global-set-stroke-string'.
- This is like `strokes-global-set-stroke', but it allows you to bind
- the stroke directly to a string to insert. This is convenient for
- using strokes as an input method.
- *** In Outline mode, `hide-body' no longer hides lines at the top
- of the file that precede the first header line.
- *** `hide-ifdef-mode' now uses overlays rather than selective-display
- to hide its text. This should be mostly transparent but slightly
- changes the behavior of motion commands like C-e and C-p.
- *** In Artist mode the variable `artist-text-renderer' has been
- renamed to `artist-text-renderer-function'. The old name is still
- available as alias.
- *** In Enriched mode, `set-left-margin' and `set-right-margin' are now
- by default bound to `C-c [' and `C-c ]' instead of the former `C-c C-l'
- and `C-c C-r'.
- *** `partial-completion-mode' now handles partial completion on directory names.
- *** You can now disable pc-selection-mode after enabling it.
- M-x pc-selection-mode behaves like a proper minor mode, and with no
- argument it toggles the mode. Turning off PC-Selection mode restores
- the global key bindings that were replaced by turning on the mode.
- *** `uniquify-strip-common-suffix' tells uniquify to prefer
- `file|dir1' and `file|dir2' to `file|dir1/subdir' and `file|dir2/subdir'.
- *** New user option `add-log-always-start-new-record'.
- When this option is enabled, M-x add-change-log-entry always
- starts a new record regardless of when the last record is.
- *** M-x compare-windows now can automatically skip non-matching text to
- resync points in both windows.
- *** PO translation files are decoded according to their MIME headers
- when Emacs visits them.
- *** Telnet now prompts you for a port number with C-u M-x telnet.
- *** calculator.el now has radix grouping mode.
- To enable this, set `calculator-output-radix' non-nil. In this mode a
- separator character is used every few digits, making it easier to see
- byte boundaries etc. For more info, see the documentation of the
- variable `calculator-radix-grouping-mode'.
- *** LDAP support now defaults to ldapsearch from OpenLDAP version 2.
- *** The terminal emulation code in term.el has been improved; it can
- run most curses applications now.
- *** Support for `magic cookie' standout modes has been removed.
- Emacs still works on terminals that require magic cookies in order to
- use standout mode, but they can no longer display mode-lines in
- inverse-video.
- * Changes in Emacs 22.1 on non-free operating systems
- ** The HOME directory defaults to Application Data under the user profile.
- If you used a previous version of Emacs without setting the HOME
- environment variable and a `.emacs' was saved, then Emacs will continue
- using C:/ as the default HOME. But if you are installing Emacs afresh,
- the default location will be the "Application Data" (or similar
- localized name) subdirectory of your user profile. A typical location
- of this directory is "C:\Documents and Settings\USERNAME\Application Data",
- where USERNAME is your user name.
- This change means that users can now have their own `.emacs' files on
- shared computers, and the default HOME directory is less likely to be
- read-only on computers that are administered by someone else.
- ** Images are now supported on MS Windows.
- PBM and XBM images are supported out of the box. Other image formats
- depend on external libraries. All of these libraries have been ported
- to Windows, and can be found in both source and binary form at
- http://gnuwin32.sourceforge.net/. Note that libpng also depends on
- zlib, and tiff depends on the version of jpeg that it was compiled
- against. For additional information, see nt/INSTALL.
- ** Sound is now supported on MS Windows.
- WAV format is supported on all versions of Windows, other formats such
- as AU, AIFF and MP3 may be supported in the more recent versions of
- Windows, or when other software provides hooks into the system level
- sound support for those formats.
- ** Tooltips now work on MS Windows.
- See the Emacs 21.1 NEWS entry for tooltips for details.
- ** Pointing devices with more than 3 buttons are now supported on MS Windows.
- The new variable `w32-pass-extra-mouse-buttons-to-system' controls
- whether Emacs should handle the extra buttons itself (the default), or
- pass them to Windows to be handled with system-wide functions.
- ** Passing resources on the command line now works on MS Windows.
- You can use --xrm to pass resource settings to Emacs, overriding any
- existing values. For example:
- emacs --xrm "Emacs.Background:red" --xrm "Emacs.Geometry:100x20"
- will start up Emacs on an initial frame of 100x20 with red background,
- irrespective of geometry or background setting on the Windows registry.
- ** Emacs takes note of colors defined in Control Panel on MS-Windows.
- The Control Panel defines some default colors for applications in much
- the same way as wildcard X Resources do on X. Emacs now adds these
- colors to the colormap prefixed by System (eg SystemMenu for the
- default Menu background, SystemMenuText for the foreground), and uses
- some of them to initialize some of the default faces.
- `list-colors-display' shows the list of System color names, in case
- you wish to use them in other faces.
- ** Running in a console window in Windows now uses the console size.
- Previous versions of Emacs erred on the side of having a usable Emacs
- through telnet, even though that was inconvenient if you use Emacs in
- a local console window with a scrollback buffer. The default value of
- w32-use-full-screen-buffer is now nil, which favors local console
- windows. Recent versions of Windows telnet also work well with this
- setting. If you are using an older telnet server then Emacs detects
- that the console window dimensions that are reported are not sane, and
- defaults to 80x25. If you use such a telnet server regularly at a size
- other than 80x25, you can still manually set
- w32-use-full-screen-buffer to t.
- ** Different shaped mouse pointers are supported on MS Windows.
- The mouse pointer changes shape depending on what is under the pointer.
- ** On MS Windows, the "system caret" now follows the cursor.
- This enables Emacs to work better with programs that need to track the
- cursor, for example screen magnifiers and text to speech programs.
- When such a program is in use, the system caret is made visible
- instead of Emacs drawing its own cursor. This seems to be required by
- some programs. The new variable w32-use-visible-system-caret allows
- the caret visibility to be manually toggled.
- ** On MS Windows NT/W2K/XP, Emacs uses Unicode for clipboard operations.
- Those systems use Unicode internally, so this allows Emacs to share
- multilingual text with other applications. On other versions of
- MS Windows, Emacs now uses the appropriate locale coding-system, so
- the clipboard should work correctly for your local language without
- any customizations.
- ** On Mac OS, `keyboard-coding-system' changes based on the keyboard script.
- ** The variable `mac-keyboard-text-encoding' and the constants
- `kTextEncodingMacRoman', `kTextEncodingISOLatin1', and
- `kTextEncodingISOLatin2' are obsolete.
- ** The variable `mac-command-key-is-meta' is obsolete. Use
- `mac-command-modifier' and `mac-option-modifier' instead.
- * Incompatible Lisp Changes in Emacs 22.1
- ** Mode line display ignores text properties as well as the
- :propertize and :eval forms in the value of a variable whose
- `risky-local-variable' property is nil.
- The function `comint-send-input' now accepts 3 optional arguments:
- (comint-send-input &optional no-newline artificial)
- Callers sending input not from the user should use bind the 3rd
- argument `artificial' to a non-nil value, to prevent Emacs from
- deleting the part of subprocess output that matches the input.
- ** The `read-file-name' function now returns a null string if the
- user just types RET.
- ** The variables post-command-idle-hook and post-command-idle-delay have
- been removed. Use run-with-idle-timer instead.
- ** A hex or octal escape in a string constant forces the string to
- be multibyte or unibyte, respectively.
- ** The explicit method of creating a display table element by
- combining a face number and a character code into a numeric
- glyph code is deprecated.
- Instead, the new functions `make-glyph-code', `glyph-char', and
- `glyph-face' must be used to create and decode glyph codes in
- display tables.
- ** `suppress-keymap' now works by remapping `self-insert-command' to
- the command `undefined'. (In earlier Emacs versions, it used
- `substitute-key-definition' to rebind self inserting characters to
- `undefined'.)
- ** The third argument of `accept-process-output' is now milliseconds.
- It used to be microseconds.
- ** The function find-operation-coding-system may be called with a cons
- (FILENAME . BUFFER) in the second argument if the first argument
- OPERATION is `insert-file-contents', and thus a function registered in
- `file-coding-system-alist' is also called with such an argument.
- ** When Emacs receives a USR1 or USR2 signal, this generates
- input events: sigusr1 or sigusr2. Use special-event-map to
- handle these events.
- ** The variable `memory-full' now remains t until
- there is no longer a shortage of memory.
- ** Support for Mocklisp has been removed.
- * Lisp Changes in Emacs 22.1
- ** General Lisp changes:
- *** New syntax: \s now stands for the SPACE character.
- `?\s' is a new way to write the space character. You must make sure
- it is not followed by a dash, since `?\s-...' indicates the "super"
- modifier. However, it would be strange to write a character constant
- and a following symbol (beginning with `-') with no space between
- them.
- `\s' stands for space in strings, too, but it is not really meant for
- strings; it is easier and nicer just to write a space.
- *** New syntax: \uXXXX and \UXXXXXXXX specify Unicode code points in hex.
- For instance, you can use "\u0428" to specify a string consisting of
- CYRILLIC CAPITAL LETTER SHA, or `"U0001D6E2" to specify one consisting
- of MATHEMATICAL ITALIC CAPITAL ALPHA (the latter is greater than
- #xFFFF and thus needs the longer syntax).
- This syntax works for both character constants and strings.
- *** New function `unsafep' determines whether a Lisp form is safe.
- It returns nil if the given Lisp form can't possibly do anything
- dangerous; otherwise it returns a reason why the form might be unsafe
- (calls unknown function, alters global variable, etc.).
- *** The function `eql' is now available without requiring the CL package.
- *** The new function `memql' is like `memq', but uses `eql' for comparison,
- that is, floats are compared by value and other elements with `eq'.
- *** New functions `string-or-null-p' and `booleanp'.
- `string-or-null-p' returns non-nil if OBJECT is a string or nil.
- `booleanp' returns non-nil if OBJECT is t or nil.
- *** `makehash' is now obsolete. Use `make-hash-table' instead.
- *** Minor change in the function `format'.
- Some flags that were accepted but not implemented (such as "*") are no
- longer accepted.
- *** `add-to-list' takes an optional third argument, APPEND.
- If APPEND is non-nil, the new element gets added at the end of the
- list instead of at the beginning. This change actually occurred in
- Emacs 21.1, but was not documented then.
- *** New function `add-to-ordered-list' is like `add-to-list' but
- associates a numeric ordering of each element added to the list.
- *** New function `add-to-history' adds an element to a history list.
- Lisp packages should use this function to add elements to their
- history lists.
- If `history-delete-duplicates' is non-nil, it removes duplicates of
- the new element from the history list it updates.
- *** New function `copy-tree' makes a copy of a tree.
- It recursively copies through both CARs and CDRs.
- *** New function `delete-dups' deletes `equal' duplicate elements from a list.
- It modifies the list destructively, like `delete'. Of several `equal'
- occurrences of an element in the list, the one that's kept is the
- first one.
- *** New function `rassq-delete-all'.
- (rassq-delete-all VALUE ALIST) deletes, from ALIST, each element whose
- CDR is `eq' to the specified value.
- *** Functions `get' and `plist-get' no longer give errors for bad plists.
- They return nil for a malformed property list or if the list is
- cyclic.
- *** New functions `lax-plist-get' and `lax-plist-put'.
- They are like `plist-get' and `plist-put', except that they compare
- the property name using `equal' rather than `eq'.
- *** The function `number-sequence' makes a list of equally-separated numbers.
- For instance, (number-sequence 4 9) returns (4 5 6 7 8 9). By
- default, the separation is 1, but you can specify a different
- separation as the third argument. (number-sequence 1.5 6 2) returns
- (1.5 3.5 5.5).
- *** New variables `most-positive-fixnum' and `most-negative-fixnum'.
- They hold the largest and smallest possible integer values.
- *** The function `expt' handles negative exponents differently.
- The value for `(expt A B)', if both A and B are integers and B is
- negative, is now a float. For example: (expt 2 -2) => 0.25.
- *** The function `atan' now accepts an optional second argument.
- When called with 2 arguments, as in `(atan Y X)', `atan' returns the
- angle in radians between the vector [X, Y] and the X axis. (This is
- equivalent to the standard C library function `atan2'.)
- *** New macro `with-case-table'
- This executes the body with the case table temporarily set to a given
- case table.
- *** New macro `with-local-quit' temporarily allows quitting.
- A quit inside the body of `with-local-quit' is caught by the
- `with-local-quit' form itself, but another quit will happen later once
- the code that has inhibited quitting exits.
- This is for use around potentially blocking or long-running code
- inside timer functions and `post-command-hook' functions.
- *** New macro `define-obsolete-function-alias'.
- This combines `defalias' and `make-obsolete'.
- *** New macro `eval-at-startup' specifies expressions to
- evaluate when Emacs starts up. If this is done after startup,
- it evaluates those expressions immediately.
- This is useful in packages that can be preloaded.
- *** New function `macroexpand-all' expands all macros in a form.
- It is similar to the Common-Lisp function of the same name.
- One difference is that it guarantees to return the original argument
- if no expansion is done, which can be tested using `eq'.
- *** A function or macro's doc string can now specify the calling pattern.
- You put this info in the doc string's last line. It should be
- formatted so as to match the regexp "\n\n(fn .*)\\'". If you don't
- specify this explicitly, Emacs determines it from the actual argument
- names. Usually that default is right, but not always.
- *** New variable `print-continuous-numbering'.
- When this is non-nil, successive calls to print functions use a single
- numbering scheme for circular structure references. This is only
- relevant when `print-circle' is non-nil.
- When you bind `print-continuous-numbering' to t, you should
- also bind `print-number-table' to nil.
- *** `list-faces-display' takes an optional argument, REGEXP.
- If it is non-nil, the function lists only faces matching this regexp.
- *** New hook `command-error-function'.
- By setting this variable to a function, you can control
- how the editor command loop shows the user an error message.
- *** `debug-on-entry' accepts primitive functions that are not special forms.
- ** Lisp code indentation features:
- *** The `defmacro' form can contain indentation and edebug declarations.
- These declarations specify how to indent the macro calls in Lisp mode
- and how to debug them with Edebug. You write them like this:
- (defmacro NAME LAMBDA-LIST [DOC-STRING] [DECLARATION ...] ...)
- DECLARATION is a list `(declare DECLARATION-SPECIFIER ...)'. The
- possible declaration specifiers are:
- (indent INDENT)
- Set NAME's `lisp-indent-function' property to INDENT.
- (edebug DEBUG)
- Set NAME's `edebug-form-spec' property to DEBUG. (This is
- equivalent to writing a `def-edebug-spec' for the macro,
- but this is cleaner.)
- *** cl-indent now allows customization of Indentation of backquoted forms.
- See the new user option `lisp-backquote-indentation'.
- *** cl-indent now handles indentation of simple and extended `loop' forms.
- The new user options `lisp-loop-keyword-indentation',
- `lisp-loop-forms-indentation', and `lisp-simple-loop-indentation' can
- be used to customize the indentation of keywords and forms in loop
- forms.
- ** Variable aliases:
- *** New function: defvaralias ALIAS-VAR BASE-VAR [DOCSTRING]
- This function defines the symbol ALIAS-VAR as a variable alias for
- symbol BASE-VAR. This means that retrieving the value of ALIAS-VAR
- returns the value of BASE-VAR, and changing the value of ALIAS-VAR
- changes the value of BASE-VAR.
- DOCSTRING, if present, is the documentation for ALIAS-VAR; else it has
- the same documentation as BASE-VAR.
- *** The macro `define-obsolete-variable-alias' combines `defvaralias' and
- `make-obsolete-variable'.
- *** New function: indirect-variable VARIABLE
- This function returns the variable at the end of the chain of aliases
- of VARIABLE. If VARIABLE is not a symbol, or if VARIABLE is not
- defined as an alias, the function returns VARIABLE.
- It might be noteworthy that variables aliases work for all kinds of
- variables, including buffer-local and frame-local variables.
- ** defcustom changes:
- *** The package-version keyword has been added to provide
- `customize-changed-options' functionality to packages in the future.
- Developers who make use of this keyword must also update the new
- variable `customize-package-emacs-version-alist'.
- *** The new customization type `float' requires a floating point number.
- ** String changes:
- *** A hex escape in a string constant forces the string to be multibyte.
- *** An octal escape in a string constant forces the string to be unibyte.
- *** New function `string-to-multibyte' converts a unibyte string to a
- multibyte string with the same individual character codes.
- *** `split-string' now includes null substrings in the returned list if
- the optional argument SEPARATORS is non-nil and there are matches for
- SEPARATORS at the beginning or end of the string. If SEPARATORS is
- nil, or if the new optional third argument OMIT-NULLS is non-nil, all
- empty matches are omitted from the returned list.
- *** The new function `assoc-string' replaces `assoc-ignore-case' and
- `assoc-ignore-representation', which are still available, but have
- been declared obsolete.
- *** New function `substring-no-properties' returns a substring without
- text properties.
- ** Displaying warnings to the user.
- See the functions `warn' and `display-warning', or the Lisp Manual.
- If you want to be sure the warning will not be overlooked, this
- facility is much better than using `message', since it displays
- warnings in a separate window.
- ** Progress reporters.
- These provide a simple and uniform way for commands to present
- progress messages for the user.
- See the new functions `make-progress-reporter',
- `progress-reporter-update', `progress-reporter-force-update',
- `progress-reporter-done', and `dotimes-with-progress-reporter'.
- ** Buffer positions:
- *** Function `compute-motion' now calculates the usable window
- width if the WIDTH argument is nil. If the TOPOS argument is nil,
- the usable window height and width is used.
- *** The `line-move', `scroll-up', and `scroll-down' functions will now
- modify the window vscroll to scroll through display rows that are
- taller that the height of the window, for example in the presence of
- large images. To disable this feature, bind the new variable
- `auto-window-vscroll' to nil.
- *** The argument to `forward-word', `backward-word' is optional.
- It defaults to 1.
- *** Argument to `forward-to-indentation' and `backward-to-indentation' is optional.
- It defaults to 1.
- *** `field-beginning' and `field-end' take new optional argument, LIMIT.
- This argument tells them not to search beyond LIMIT. Instead they
- give up and return LIMIT.
- *** New function `window-line-height' is an efficient way to get
- information about a specific text line in a window provided that the
- window's display is up-to-date.
- *** New function `line-number-at-pos' returns the line number of a position.
- It an optional buffer position argument that defaults to point.
- *** Function `pos-visible-in-window-p' now returns the pixel coordinates
- and partial visibility state of the corresponding row, if the PARTIALLY
- arg is non-nil.
- *** New functions `posn-at-point' and `posn-at-x-y' return
- click-event-style position information for a given visible buffer
- position or for a given window pixel coordinate.
- *** New function `mouse-on-link-p' tests if a position is in a clickable link.
- This is the function used by the new `mouse-1-click-follows-link'
- functionality.
- ** Text modification:
- *** The new function `buffer-chars-modified-tick' returns a buffer's
- tick counter for changes to characters. Each time text in that buffer
- is inserted or deleted, the character-change counter is updated to the
- tick counter (`buffer-modified-tick'). Text property changes leave it
- unchanged.
- *** The new function `insert-for-yank' normally works like `insert', but
- removes the text properties in the `yank-excluded-properties' list
- and handles the `yank-handler' text property.
- *** The new function `insert-buffer-substring-as-yank' is like
- `insert-for-yank' except that it gets the text from another buffer as
- in `insert-buffer-substring'.
- *** The new function `insert-buffer-substring-no-properties' is like
- `insert-buffer-substring', but removes all text properties from the
- inserted substring.
- *** The new function `filter-buffer-substring' extracts a buffer
- substring, passes it through a set of filter functions, and returns
- the filtered substring. Use it instead of `buffer-substring' or
- `delete-and-extract-region' when copying text into a user-accessible
- data structure, such as the kill-ring, X clipboard, or a register.
- The list of filter function is specified by the new variable
- `buffer-substring-filters'. For example, Longlines mode adds to
- `buffer-substring-filters' to remove soft newlines from the copied
- text.
- *** Function `translate-region' accepts also a char-table as TABLE
- argument.
- *** The new translation table `translation-table-for-input'
- is used for customizing self-insertion. The character to
- be inserted is translated through it.
- *** Text clones.
- The new function `text-clone-create'. Text clones are chunks of text
- that are kept identical by transparently propagating changes from one
- clone to the other.
- *** The function `insert-string' is now obsolete.
- ** Filling changes.
- *** In determining an adaptive fill prefix, Emacs now tries the function in
- `adaptive-fill-function' _before_ matching the buffer line against
- `adaptive-fill-regexp' rather than _after_ it.
- ** Atomic change groups.
- To perform some changes in the current buffer "atomically" so that
- they either all succeed or are all undone, use `atomic-change-group'
- around the code that makes changes. For instance:
- (atomic-change-group
- (insert foo)
- (delete-region x y))
- If an error (or other nonlocal exit) occurs inside the body of
- `atomic-change-group', it unmakes all the changes in that buffer that
- were during the execution of the body. The change group has no effect
- on any other buffers--any such changes remain.
- If you need something more sophisticated, you can directly call the
- lower-level functions that `atomic-change-group' uses. Here is how.
- To set up a change group for one buffer, call `prepare-change-group'.
- Specify the buffer as argument; it defaults to the current buffer.
- This function returns a "handle" for the change group. You must save
- the handle to activate the change group and then finish it.
- Before you change the buffer again, you must activate the change
- group. Pass the handle to `activate-change-group' afterward to
- do this.
- After you make the changes, you must finish the change group. You can
- either accept the changes or cancel them all. Call
- `accept-change-group' to accept the changes in the group as final;
- call `cancel-change-group' to undo them all.
- You should use `unwind-protect' to make sure the group is always
- finished. The call to `activate-change-group' should be inside the
- `unwind-protect', in case the user types C-g just after it runs.
- (This is one reason why `prepare-change-group' and
- `activate-change-group' are separate functions.) Once you finish the
- group, don't use the handle again--don't try to finish the same group
- twice.
- To make a multibuffer change group, call `prepare-change-group' once
- for each buffer you want to cover, then use `nconc' to combine the
- returned values, like this:
- (nconc (prepare-change-group buffer-1)
- (prepare-change-group buffer-2))
- You can then activate the multibuffer change group with a single call
- to `activate-change-group', and finish it with a single call to
- `accept-change-group' or `cancel-change-group'.
- Nested use of several change groups for the same buffer works as you
- would expect. Non-nested use of change groups for the same buffer
- will lead to undesirable results, so don't let it happen; the first
- change group you start for any given buffer should be the last one
- finished.
- ** Buffer-related changes:
- *** The new function `buffer-local-value' returns the buffer-local
- binding of VARIABLE (a symbol) in buffer BUFFER. If VARIABLE does not
- have a buffer-local binding in buffer BUFFER, it returns the default
- value of VARIABLE instead.
- *** `list-buffers-noselect' now takes an additional argument, BUFFER-LIST.
- If it is non-nil, it specifies which buffers to list.
- *** `kill-buffer-hook' is now a permanent local.
- *** The function `frame-or-buffer-changed-p' now lets you maintain
- various status records in parallel.
- It takes a variable (a symbol) as argument. If the variable is non-nil,
- then its value should be a vector installed previously by
- `frame-or-buffer-changed-p'. If the frame names, buffer names, buffer
- order, or their read-only or modified flags have changed, since the
- time the vector's contents were recorded by a previous call to
- `frame-or-buffer-changed-p', then the function returns t. Otherwise
- it returns nil.
- On the first call to `frame-or-buffer-changed-p', the variable's
- value should be nil. `frame-or-buffer-changed-p' stores a suitable
- vector into the variable and returns t.
- If the variable is itself nil, then `frame-or-buffer-changed-p' uses,
- for compatibility, an internal variable which exists only for this
- purpose.
- *** The function `read-buffer' follows the convention for reading from
- the minibuffer with a default value: if DEF is non-nil, the minibuffer
- prompt provided in PROMPT is edited to show the default value provided
- in DEF before the terminal colon and space.
- ** Searching and matching changes:
- *** New function `looking-back' checks whether a regular expression matches
- the text before point. Specifying the LIMIT argument bounds how far
- back the match can start; this is a way to keep it from taking too long.
- *** The new variable `search-spaces-regexp' controls how to search
- for spaces in a regular expression. If it is non-nil, it should be a
- regular expression, and any series of spaces stands for that regular
- expression. If it is nil, spaces stand for themselves.
- Spaces inside of constructs such as `[..]' and inside loops such as
- `*', `+', and `?' are never replaced with `search-spaces-regexp'.
- *** New regular expression operators, `\_<' and `\_>'.
- These match the beginning and end of a symbol. A symbol is a
- non-empty sequence of either word or symbol constituent characters, as
- specified by the syntax table.
- *** `skip-chars-forward' and `skip-chars-backward' now handle
- character classes such as `[:alpha:]', along with individual
- characters and ranges.
- *** In `replace-match', the replacement text no longer inherits
- properties from surrounding text.
- *** The list returned by `(match-data t)' now has the buffer as a final
- element, if the last match was on a buffer. `set-match-data'
- accepts such a list for restoring the match state.
- *** Functions `match-data' and `set-match-data' now have an optional
- argument `reseat'. When non-nil, all markers in the match data list
- passed to these functions will be reseated to point to nowhere.
- *** rx.el has new corresponding `symbol-start' and `symbol-end' elements.
- *** The default value of `sentence-end' is now defined using the new
- variable `sentence-end-without-space', which contains such characters
- that end a sentence without following spaces.
- The function `sentence-end' should be used to obtain the value of the
- variable `sentence-end'. If the variable `sentence-end' is nil, then
- this function returns the regexp constructed from the variables
- `sentence-end-without-period', `sentence-end-double-space' and
- `sentence-end-without-space'.
- ** Undo changes:
- *** `buffer-undo-list' allows programmable elements.
- These elements have the form (apply FUNNAME . ARGS), where FUNNAME is
- a symbol other than t or nil. That stands for a high-level change
- that should be undone by evaluating (apply FUNNAME ARGS).
- These entries can also have the form (apply DELTA BEG END FUNNAME . ARGS)
- which indicates that the change which took place was limited to the
- range BEG...END and increased the buffer size by DELTA.
- *** If the buffer's undo list for the current command gets longer than
- `undo-outer-limit', garbage collection empties it. This is to prevent
- it from using up the available memory and choking Emacs.
- ** Killing and yanking changes:
- *** New `yank-handler' text property can be used to control how
- previously killed text on the kill ring is reinserted.
- The value of the `yank-handler' property must be a list with one to four
- elements with the following format:
- (FUNCTION PARAM NOEXCLUDE UNDO).
- The `insert-for-yank' function looks for a yank-handler property on
- the first character on its string argument (typically the first
- element on the kill-ring). If a `yank-handler' property is found,
- the normal behavior of `insert-for-yank' is modified in various ways:
- When FUNCTION is present and non-nil, it is called instead of `insert'
- to insert the string. FUNCTION takes one argument--the object to insert.
- If PARAM is present and non-nil, it replaces STRING as the object
- passed to FUNCTION (or `insert'); for example, if FUNCTION is
- `yank-rectangle', PARAM should be a list of strings to insert as a
- rectangle.
- If NOEXCLUDE is present and non-nil, the normal removal of the
- `yank-excluded-properties' is not performed; instead FUNCTION is
- responsible for removing those properties. This may be necessary
- if FUNCTION adjusts point before or after inserting the object.
- If UNDO is present and non-nil, it is a function that will be called
- by `yank-pop' to undo the insertion of the current object. It is
- called with two arguments, the start and end of the current region.
- FUNCTION can set `yank-undo-function' to override the UNDO value.
- *** The functions `kill-new', `kill-append', and `kill-region' now have an
- optional argument to specify the `yank-handler' text property to put on
- the killed text.
- *** The function `yank-pop' will now use a non-nil value of the variable
- `yank-undo-function' (instead of `delete-region') to undo the previous
- `yank' or `yank-pop' command (or a call to `insert-for-yank'). The function
- `insert-for-yank' automatically sets that variable according to the UNDO
- element of the string argument's `yank-handler' text property if present.
- *** The function `insert-for-yank' now supports strings where the
- `yank-handler' property does not span the first character of the
- string. The old behavior is available if you call
- `insert-for-yank-1' instead.
- ** Syntax table changes:
- *** The new function `syntax-ppss' provides an efficient way to find the
- current syntactic context at point.
- *** The new function `syntax-after' returns the syntax code
- of the character after a specified buffer position, taking account
- of text properties as well as the character code.
- *** `syntax-class' extracts the class of a syntax code (as returned
- by `syntax-after').
- *** The macro `with-syntax-table' no longer copies the syntax table.
- ** File operation changes:
- *** New vars `exec-suffixes' and `load-suffixes' used when
- searching for an executable or an Emacs Lisp file.
- *** New function `locate-file' searches for a file in a list of directories.
- `locate-file' accepts a name of a file to search (a string), and two
- lists: a list of directories to search in and a list of suffixes to
- try; typical usage might use `exec-path' and `load-path' for the list
- of directories, and `exec-suffixes' and `load-suffixes' for the list
- of suffixes. The function also accepts a predicate argument to
- further filter candidate files.
- One advantage of using this function is that the list of suffixes in
- `exec-suffixes' is OS-dependent, so this function will find
- executables without polluting Lisp code with OS dependencies.
- *** The new function `file-remote-p' tests a file name and returns
- non-nil if it specifies a remote file (one that Emacs accesses using
- its own special methods and not directly through the file system).
- The value in that case is an identifier for the remote file system.
- *** The new hook `before-save-hook' is invoked by `basic-save-buffer'
- before saving buffers. This allows packages to perform various final
- tasks. For example, it can be used by the copyright package to make
- sure saved files have the current year in any copyright headers.
- *** `file-chase-links' now takes an optional second argument LIMIT which
- specifies the maximum number of links to chase through. If after that
- many iterations the file name obtained is still a symbolic link,
- `file-chase-links' returns it anyway.
- *** Functions `file-name-sans-extension' and `file-name-extension' now
- ignore the leading dots in file names, so that file names such as
- `.emacs' are treated as extensionless.
- *** If `buffer-save-without-query' is non-nil in some buffer,
- `save-some-buffers' will always save that buffer without asking (if
- it's modified).
- *** `buffer-auto-save-file-format' is the new name for what was
- formerly called `auto-save-file-format'. It is now a permanent local.
- *** `visited-file-modtime' and `calendar-time-from-absolute' now return
- a list of two integers, instead of a cons.
- *** The precedence of file name handlers has been changed.
- Instead of choosing the first handler that matches,
- `find-file-name-handler' now gives precedence to a file name handler
- that matches nearest the end of the file name. More precisely, the
- handler whose (match-beginning 0) is the largest is chosen. In case
- of ties, the old "first matched" rule applies.
- *** A file name handler can declare which operations it handles.
- You do this by putting an `operation' property on the handler name
- symbol. The property value should be a list of the operations that
- the handler really handles. It won't be called for any other
- operations.
- This is useful for autoloaded handlers, to prevent them from being
- autoloaded when not really necessary.
- *** The function `make-auto-save-file-name' is now handled by file
- name handlers. This will be exploited for remote files mainly.
- *** The function `file-name-completion' accepts an optional argument
- PREDICATE, and rejects completion candidates that don't satisfy PREDICATE.
- *** The new primitive `set-file-times' sets a file's access and
- modification times. Magic file name handlers can handle this
- operation.
- ** Input changes:
- *** Functions `y-or-n-p', `read-char', `read-key-sequence' and the like, that
- display a prompt but don't use the minibuffer, now display the prompt
- using the text properties (esp. the face) of the prompt string.
- *** The functions `read-event', `read-char', and `read-char-exclusive'
- have a new optional argument SECONDS. If non-nil, this specifies a
- maximum time to wait for input, in seconds. If no input arrives after
- this time elapses, the functions stop waiting and return nil.
- *** An interactive specification can now use the code letter `U' to get
- the up-event that was discarded in case the last key sequence read for a
- previous `k' or `K' argument was a down-event; otherwise nil is used.
- *** The new interactive-specification `G' reads a file name
- much like `F', but if the input is a directory name (even defaulted),
- it returns just the directory name.
- *** (while-no-input BODY...) runs BODY, but only so long as no input
- arrives. If the user types or clicks anything, BODY stops as if a
- quit had occurred. `while-no-input' returns the value of BODY, if BODY
- finishes. It returns nil if BODY was aborted by a quit, and t if
- BODY was aborted by arrival of input.
- *** `recent-keys' now returns the last 300 keys.
- ** Minibuffer changes:
- *** The new function `minibufferp' returns non-nil if its optional
- buffer argument is a minibuffer. If the argument is omitted, it
- defaults to the current buffer.
- *** New function `minibuffer-selected-window' returns the window which
- was selected when entering the minibuffer.
- *** The `read-file-name' function now takes an additional argument which
- specifies a predicate which the file name read must satisfy. The
- new variable `read-file-name-predicate' contains the predicate argument
- while reading the file name from the minibuffer; the predicate in this
- variable is used by read-file-name-internal to filter the completion list.
- *** The new variable `read-file-name-function' can be used by Lisp code
- to override the built-in `read-file-name' function.
- *** The new variable `read-file-name-completion-ignore-case' specifies
- whether completion ignores case when reading a file name with the
- `read-file-name' function.
- *** The new function `read-directory-name' is for reading a directory name.
- It is like `read-file-name' except that the defaulting works better
- for directories, and completion inside it shows only directories.
- *** The new variable `history-add-new-input' specifies whether to add new
- elements in history. If set to nil, minibuffer reading functions don't
- add new elements to the history list, so it is possible to do this
- afterwards by calling `add-to-history' explicitly.
- ** Completion changes:
- *** The new function `minibuffer-completion-contents' returns the contents
- of the minibuffer just before point. That is what completion commands
- operate on.
- *** The functions `all-completions' and `try-completion' now accept lists
- of strings as well as hash-tables additionally to alists, obarrays
- and functions. Furthermore, the function `test-completion' is now
- exported to Lisp. The keys in alists and hash tables can be either
- strings or symbols, which are automatically converted with to strings.
- *** The new macro `dynamic-completion-table' supports using functions
- as a dynamic completion table.
- (dynamic-completion-table FUN)
- FUN is called with one argument, the string for which completion is required,
- and it should return an alist containing all the intended possible
- completions. This alist can be a full list of possible completions so that FUN
- can ignore the value of its argument. If completion is performed in the
- minibuffer, FUN will be called in the buffer from which the minibuffer was
- entered. `dynamic-completion-table' then computes the completion.
- *** The new macro `lazy-completion-table' initializes a variable
- as a lazy completion table.
- (lazy-completion-table VAR FUN)
- If the completion table VAR is used for the first time (e.g., by passing VAR
- as an argument to `try-completion'), the function FUN is called with no
- arguments. FUN must return the completion table that will be stored in VAR.
- If completion is requested in the minibuffer, FUN will be called in the buffer
- from which the minibuffer was entered. The return value of
- `lazy-completion-table' must be used to initialize the value of VAR.
- ** Abbrev changes:
- *** `define-abbrev' now accepts an optional argument SYSTEM-FLAG.
- If non-nil, this marks the abbrev as a "system" abbrev, which means
- that it won't be stored in the user's abbrevs file if he saves the
- abbrevs. Major modes that predefine some abbrevs should always
- specify this flag.
- *** The new function `copy-abbrev-table' copies an abbrev table.
- It returns a new abbrev table that is a copy of a given abbrev table.
- ** Enhancements to keymaps.
- *** Cleaner way to enter key sequences.
- You can enter a constant key sequence in a more natural format, the
- same one used for saving keyboard macros, using the macro `kbd'. For
- example,
- (kbd "C-x C-f") => "\^x\^f"
- Actually, this format has existed since Emacs 20.1.
- *** Interactive commands can be remapped through keymaps.
- This is an alternative to using `defadvice' or `substitute-key-definition'
- to modify the behavior of a key binding using the normal keymap
- binding and lookup functionality.
- When a key sequence is bound to a command, and that command is
- remapped to another command, that command is run instead of the
- original command.
- Example:
- Suppose that minor mode `my-mode' has defined the commands
- `my-kill-line' and `my-kill-word', and it wants C-k (and any other key
- bound to `kill-line') to run the command `my-kill-line' instead of
- `kill-line', and likewise it wants to run `my-kill-word' instead of
- `kill-word'.
- Instead of rebinding C-k and the other keys in the minor mode map,
- command remapping allows you to directly map `kill-line' into
- `my-kill-line' and `kill-word' into `my-kill-word' using `define-key':
- (define-key my-mode-map [remap kill-line] 'my-kill-line)
- (define-key my-mode-map [remap kill-word] 'my-kill-word)
- When `my-mode' is enabled, its minor mode keymap is enabled too. So
- when the user types C-k, that runs the command `my-kill-line'.
- Only one level of remapping is supported. In the above example, this
- means that if `my-kill-line' is remapped to `other-kill', then C-k still
- runs `my-kill-line'.
- The following changes have been made to provide command remapping:
- - Command remappings are defined using `define-key' with a prefix-key
- `remap', i.e. `(define-key MAP [remap CMD] DEF)' remaps command CMD
- to definition DEF in keymap MAP. The definition is not limited to
- another command; it can be anything accepted for a normal binding.
- - The new function `command-remapping' returns the binding for a
- remapped command in the current keymaps, or nil if not remapped.
- - `key-binding' now remaps interactive commands unless the optional
- third argument NO-REMAP is non-nil.
- - `where-is-internal' now returns nil for a remapped command (e.g.
- `kill-line', when `my-mode' is enabled), and the actual key binding for
- the command it is remapped to (e.g. C-k for my-kill-line).
- It also has a new optional fifth argument, NO-REMAP, which inhibits
- remapping if non-nil (e.g. it returns "C-k" for `kill-line', and
- "<kill-line>" for `my-kill-line').
- - The new variable `this-original-command' contains the original
- command before remapping. It is equal to `this-command' when the
- command was not remapped.
- *** The definition of a key-binding passed to define-key can use XEmacs-style
- key-sequences, such as [(control a)].
- *** New keymaps for typing file names
- Two new keymaps, `minibuffer-local-filename-completion-map' and
- `minibuffer-local-must-match-filename-map', apply whenever
- Emacs reads a file name in the minibuffer. These key maps override
- the usual binding of SPC to `minibuffer-complete-word' (so that file
- names with embedded spaces could be typed without the need to quote
- the spaces).
- *** New function `current-active-maps' returns a list of currently
- active keymaps.
- *** New function `describe-buffer-bindings' inserts the list of all
- defined keys and their definitions.
- *** New function `keymap-prompt' returns the prompt string of a keymap.
- *** If text has a `keymap' property, that keymap takes precedence
- over minor mode keymaps.
- *** The `keymap' property now also works at the ends of overlays and
- text properties, according to their stickiness. This also means that it
- works with empty overlays. The same hold for the `local-map' property.
- *** `key-binding' will now look up mouse-specific bindings. The
- keymaps consulted by `key-binding' will get adapted if the key
- sequence is started with a mouse event. Instead of letting the click
- position be determined from the key sequence itself, it is also
- possible to specify it with an optional argument explicitly.
- *** `define-key-after' now accepts keys longer than 1.
- *** (map-keymap FUNCTION KEYMAP) applies the function to each binding
- in the keymap.
- *** New variable `emulation-mode-map-alists'.
- Lisp packages using many minor mode keymaps can now maintain their own
- keymap alist separate from `minor-mode-map-alist' by adding their
- keymap alist to this list.
- *** Dense keymaps now handle inheritance correctly.
- Previously a dense keymap would hide all of the simple-char key
- bindings of the parent keymap.
- ** Enhancements to process support
- *** Adaptive read buffering of subprocess output.
- On some systems, when Emacs reads the output from a subprocess, the
- output data is read in very small blocks, potentially resulting in
- very poor performance. This behavior can be remedied to some extent
- by setting the new variable `process-adaptive-read-buffering' to a
- non-nil value (the default), as it will automatically delay reading
- from such processes, allowing them to produce more output before
- Emacs tries to read it.
- *** Processes now have an associated property list where programs can
- maintain process state and other per-process related information.
- Use the new functions `process-get' and `process-put' to access, add,
- and modify elements on this property list. Use the new functions
- `process-plist' and `set-process-plist' to access and replace the
- entire property list of a process.
- *** Function `list-processes' now has an optional argument; if non-nil,
- it lists only the processes whose query-on-exit flag is set.
- *** New fns `set-process-query-on-exit-flag' and `process-query-on-exit-flag'.
- These replace the old function `process-kill-without-query'. That
- function is still supported, but new code should use the new
- functions.
- *** The new function `call-process-shell-command'.
- This executes a shell command synchronously in a separate process.
- *** The new function `process-file' is similar to `call-process', but
- obeys file handlers. The file handler is chosen based on
- `default-directory'.
- *** Function `signal-process' now accepts a process object or process
- name in addition to a process id to identify the signaled process.
- *** Function `accept-process-output' has a new optional fourth arg
- JUST-THIS-ONE. If non-nil, only output from the specified process
- is handled, suspending output from other processes. If value is an
- integer, also inhibit running timers. This feature is generally not
- recommended, but may be necessary for specific applications, such as
- speech synthesis.
- *** A process filter function gets the output as multibyte string
- if the process specifies t for its filter's multibyteness.
- That multibyteness is decided by the value of
- `default-enable-multibyte-characters' when the process is created, and
- you can change it later with `set-process-filter-multibyte'.
- *** The new function `set-process-filter-multibyte' sets the
- multibyteness of the strings passed to the process's filter.
- *** The new function `process-filter-multibyte-p' returns the
- multibyteness of the strings passed to the process's filter.
- *** If a process's coding system is `raw-text' or `no-conversion' and its
- buffer is multibyte, the output of the process is at first converted
- to multibyte by `string-to-multibyte' then inserted in the buffer.
- Previously, it was converted to multibyte by `string-as-multibyte',
- which was not compatible with the behavior of file reading.
- ** Enhanced networking support.
- *** The new `make-network-process' function makes network connections.
- It allows opening of stream and datagram connections to a server, as well as
- create a stream or datagram server inside Emacs.
- - A server is started using :server t arg.
- - Datagram connection is selected using :type 'datagram arg.
- - A server can open on a random port using :service t arg.
- - Local sockets are supported using :family 'local arg.
- - IPv6 is supported (when available). You may explicitly select IPv6
- using :family 'ipv6 arg.
- - Non-blocking connect is supported using :nowait t arg.
- - The process' property list can be initialized using :plist PLIST arg;
- a copy of the server process' property list is automatically inherited
- by new client processes created to handle incoming connections.
- To test for the availability of a given feature, use featurep like this:
- (featurep 'make-network-process '(:type datagram))
- (featurep 'make-network-process '(:family ipv6))
- *** The old `open-network-stream' now uses `make-network-process'.
- *** `process-contact' has an optional KEY argument.
- Depending on this argument, you can get the complete list of network
- process properties or a specific property. Using :local or :remote as
- the KEY, you get the address of the local or remote end-point.
- An Inet address is represented as a 5 element vector, where the first
- 4 elements contain the IP address and the fifth is the port number.
- *** New functions `stop-process' and `continue-process'.
- These functions stop and restart communication through a network
- connection. For a server process, no connections are accepted in the
- stopped state. For a client process, no input is received in the
- stopped state.
- *** New function `format-network-address'.
- This function reformats the Lisp representation of a network address
- to a printable string. For example, an IP address A.B.C.D and port
- number P is represented as a five element vector [A B C D P], and the
- printable string returned for this vector is "A.B.C.D:P". See the doc
- string for other formatting options.
- *** New function `network-interface-list'.
- This function returns a list of network interface names and their
- current network addresses.
- *** New function `network-interface-info'.
- This function returns the network address, hardware address, current
- status, and other information about a specific network interface.
- *** New functions `process-datagram-address', `set-process-datagram-address'.
- These functions are used with datagram-based network processes to get
- and set the current address of the remote partner.
- *** Deleting a network process with `delete-process' calls the sentinel.
- The status message passed to the sentinel for a deleted network
- process is "deleted". The message passed to the sentinel when the
- connection is closed by the remote peer has been changed to
- "connection broken by remote peer".
- ** Using window objects:
- *** You can now make a window as short as one line.
- A window that is just one line tall does not display either a mode
- line or a header line, even if the variables `mode-line-format' and
- `header-line-format' call for them. A window that is two lines tall
- cannot display both a mode line and a header line at once; if the
- variables call for both, only the mode line actually appears.
- *** The new function `window-inside-edges' returns the edges of the
- actual text portion of the window, not including the scroll bar or
- divider line, the fringes, the display margins, the header line and
- the mode line.
- *** The new functions `window-pixel-edges' and `window-inside-pixel-edges'
- return window edges in units of pixels, rather than columns and lines.
- *** New function `window-body-height'.
- This is like `window-height' but does not count the mode line or the
- header line.
- *** The new function `adjust-window-trailing-edge' moves the right
- or bottom edge of a window. It does not move other window edges.
- *** The new macro `with-selected-window' temporarily switches the
- selected window without impacting the order of `buffer-list'.
- It saves and restores the current buffer, too.
- *** `select-window' takes an optional second argument NORECORD.
- This is like `switch-to-buffer'.
- *** `save-selected-window' now saves and restores the selected window
- of every frame. This way, it restores everything that can be changed
- by calling `select-window'. It also saves and restores the current
- buffer.
- *** `set-window-buffer' has an optional argument KEEP-MARGINS.
- If non-nil, that says to preserve the window's current margin, fringe,
- and scroll-bar settings.
- *** The new function `window-tree' returns a frame's window tree.
- *** The functions `get-lru-window' and `get-largest-window' take an optional
- argument `dedicated'. If non-nil, those functions do not ignore
- dedicated windows.
- ** Customizable fringe bitmaps
- *** There are new display properties, `left-fringe' and `right-fringe',
- that can be used to show a specific bitmap in the left or right fringe
- bitmap of the display line.
- Format is `display (left-fringe BITMAP [FACE])', where BITMAP is a
- symbol identifying a fringe bitmap, either built-in or defined with
- `define-fringe-bitmap', and FACE is an optional face name to be used
- for displaying the bitmap instead of the default `fringe' face.
- When specified, FACE is automatically merged with the `fringe' face.
- *** New buffer-local variables `fringe-indicator-alist' and
- `fringe-cursor-alist' maps between logical (internal) fringe indicator
- and cursor symbols and the actual fringe bitmaps to be displayed.
- This decouples the logical meaning of the fringe indicators from the
- physical appearance, as well as allowing different fringe bitmaps to
- be used in different windows showing different buffers.
- *** New function `define-fringe-bitmap' can now be used to create new
- fringe bitmaps, as well as change the built-in fringe bitmaps.
- *** New function `destroy-fringe-bitmap' deletes a fringe bitmap
- or restores a built-in one to its default value.
- *** New function `set-fringe-bitmap-face' specifies the face to be
- used for a specific fringe bitmap. The face is automatically merged
- with the `fringe' face, so normally, the face should only specify the
- foreground color of the bitmap.
- *** New function `fringe-bitmaps-at-pos' returns the current fringe
- bitmaps in the display line at a given buffer position.
- ** Other window fringe features:
- *** Controlling the default left and right fringe widths.
- The default left and right fringe widths for all windows of a frame
- can now be controlled by setting the `left-fringe' and `right-fringe'
- frame parameters to an integer value specifying the width in pixels.
- Setting the width to 0 effectively removes the corresponding fringe.
- The actual default fringe widths for the frame may deviate from the
- specified widths, since the combined fringe widths must match an
- integral number of columns. The extra width is distributed evenly
- between the left and right fringe. To force a specific fringe width,
- specify the width as a negative integer (if both widths are negative,
- only the left fringe gets the specified width).
- Setting the width to nil (the default), restores the default fringe
- width which is the minimum number of pixels necessary to display any
- of the currently defined fringe bitmaps. The width of the built-in
- fringe bitmaps is 8 pixels.
- *** Per-window fringe and scrollbar settings
- **** Windows can now have their own individual fringe widths and
- position settings.
- To control the fringe widths of a window, either set the buffer-local
- variables `left-fringe-width', `right-fringe-width', or call
- `set-window-fringes'.
- To control the fringe position in a window, that is, whether fringes
- are positioned between the display margins and the window's text area,
- or at the edges of the window, either set the buffer-local variable
- `fringes-outside-margins' or call `set-window-fringes'.
- The function `window-fringes' can be used to obtain the current
- settings. To make `left-fringe-width', `right-fringe-width', and
- `fringes-outside-margins' take effect, you must set them before
- displaying the buffer in a window, or use `set-window-buffer' to force
- an update of the display margins.
- **** Windows can now have their own individual scroll-bar settings
- controlling the width and position of scroll-bars.
- To control the scroll-bar of a window, either set the buffer-local
- variables `scroll-bar-mode' and `scroll-bar-width', or call
- `set-window-scroll-bars'. The function `window-scroll-bars' can be
- used to obtain the current settings. To make `scroll-bar-mode' and
- `scroll-bar-width' take effect, you must set them before displaying
- the buffer in a window, or use `set-window-buffer' to force an update
- of the display margins.
- ** Redisplay features:
- *** `sit-for' can now be called with args (SECONDS &optional NODISP).
- *** Iconifying or deiconifying a frame no longer makes sit-for return.
- *** New function `redisplay' causes an immediate redisplay if no input is
- available, equivalent to (sit-for 0). The call (redisplay t) forces
- an immediate redisplay even if input is pending.
- *** New function `force-window-update' can initiate a full redisplay of
- one or all windows. Normally, this is not needed as changes in window
- contents are detected automatically. However, certain implicit
- changes to mode lines, header lines, or display properties may require
- forcing an explicit window update.
- *** (char-displayable-p CHAR) returns non-nil if Emacs ought to be able
- to display CHAR. More precisely, if the selected frame's fontset has
- a font to display the character set that CHAR belongs to.
- Fontsets can specify a font on a per-character basis; when the fontset
- does that, this value cannot be accurate.
- *** You can define multiple overlay arrows via the new
- variable `overlay-arrow-variable-list'.
- It contains a list of variables which contain overlay arrow position
- markers, including the original `overlay-arrow-position' variable.
- Each variable on this list can have individual `overlay-arrow-string'
- and `overlay-arrow-bitmap' properties that specify an overlay arrow
- string (for non-window terminals) or fringe bitmap (for window
- systems) to display at the corresponding overlay arrow position.
- If either property is not set, the default `overlay-arrow-string' or
- 'overlay-arrow-fringe-bitmap' will be used.
- *** New `line-height' and `line-spacing' properties for newline characters
- A newline can now have `line-height' and `line-spacing' text or overlay
- properties that control the height of the corresponding display row.
- If the `line-height' property value is t, the newline does not
- contribute to the height of the display row; instead the height of the
- newline glyph is reduced. Also, a `line-spacing' property on this
- newline is ignored. This can be used to tile small images or image
- slices without adding blank areas between the images.
- If the `line-height' property value is a positive integer, the value
- specifies the minimum line height in pixels. If necessary, the line
- height it increased by increasing the line's ascent.
- If the `line-height' property value is a float, the minimum line
- height is calculated by multiplying the default frame line height by
- the given value.
- If the `line-height' property value is a cons (FACE . RATIO), the
- minimum line height is calculated as RATIO * height of named FACE.
- RATIO is int or float. If FACE is t, it specifies the current face.
- If the `line-height' property value is a cons (nil . RATIO), the line
- height is calculated as RATIO * actual height of the line's contents.
- If the `line-height' value is a cons (HEIGHT . TOTAL), HEIGHT specifies
- the line height as described above, while TOTAL is any of the forms
- described above and specifies the total height of the line, causing a
- varying number of pixels to be inserted after the line to make it line
- exactly that many pixels high.
- If the `line-spacing' property value is an positive integer, the value
- is used as additional pixels to insert after the display line; this
- overrides the default frame `line-spacing' and any buffer local value of
- the `line-spacing' variable.
- If the `line-spacing' property is a float or cons, the line spacing
- is calculated as specified above for the `line-height' property.
- *** The buffer local `line-spacing' variable can now have a float value,
- which is used as a height relative to the default frame line height.
- *** Enhancements to stretch display properties
- The display property stretch specification form `(space PROPS)', where
- PROPS is a property list, now allows pixel based width and height
- specifications, as well as enhanced horizontal text alignment.
- The value of these properties can now be a (primitive) expression
- which is evaluated during redisplay. The following expressions
- are supported:
- EXPR ::= NUM | (NUM) | UNIT | ELEM | POS | IMAGE | FORM
- NUM ::= INTEGER | FLOAT | SYMBOL
- UNIT ::= in | mm | cm | width | height
- ELEM ::= left-fringe | right-fringe | left-margin | right-margin
- | scroll-bar | text
- POS ::= left | center | right
- FORM ::= (NUM . EXPR) | (OP EXPR ...)
- OP ::= + | -
- The form `NUM' specifies a fractional width or height of the default
- frame font size. The form `(NUM)' specifies an absolute number of
- pixels. If a symbol is specified, its buffer-local variable binding
- is used. The `in', `mm', and `cm' units specifies the number of
- pixels per inch, milli-meter, and centi-meter, resp. The `width' and
- `height' units correspond to the width and height of the current face
- font. An image specification corresponds to the width or height of
- the image.
- The `left-fringe', `right-fringe', `left-margin', `right-margin',
- `scroll-bar', and `text' elements specify to the width of the
- corresponding area of the window.
- The `left', `center', and `right' positions can be used with :align-to
- to specify a position relative to the left edge, center, or right edge
- of the text area. One of the above window elements (except `text')
- can also be used with :align-to to specify that the position is
- relative to the left edge of the given area. Once the base offset for
- a relative position has been set (by the first occurrence of one of
- these symbols), further occurrences of these symbols are interpreted as
- the width of the area.
- For example, to align to the center of the left-margin, use
- :align-to (+ left-margin (0.5 . left-margin))
- If no specific base offset is set for alignment, it is always relative
- to the left edge of the text area. For example, :align-to 0 in a
- header line aligns with the first text column in the text area.
- The value of the form `(NUM . EXPR)' is the value of NUM multiplied by
- the value of the expression EXPR. For example, (2 . in) specifies a
- width of 2 inches, while (0.5 . IMAGE) specifies half the width (or
- height) of the specified image.
- The form `(+ EXPR ...)' adds up the value of the expressions.
- The form `(- EXPR ...)' negates or subtracts the value of the expressions.
- *** Normally, the cursor is displayed at the end of any overlay and
- text property string that may be present at the current window
- position. The cursor can now be placed on any character of such
- strings by giving that character a non-nil `cursor' text property.
- *** The display space :width and :align-to text properties are now
- supported on text terminals.
- *** Support for displaying image slices
- **** New display property (slice X Y WIDTH HEIGHT) can be used with
- an image property to display only a specific slice of the image.
- **** Function `insert-image' has new optional fourth arg to
- specify image slice (X Y WIDTH HEIGHT).
- **** New function `insert-sliced-image' inserts a given image as a
- specified number of evenly sized slices (rows x columns).
- *** Images can now have an associated image map via the :map property.
- An image map is an alist where each element has the format (AREA ID PLIST).
- An AREA is specified as either a rectangle, a circle, or a polygon:
- A rectangle is a cons (rect . ((X0 . Y0) . (X1 . Y1))) specifying the
- pixel coordinates of the upper left and bottom right corners.
- A circle is a cons (circle . ((X0 . Y0) . R)) specifying the center
- and the radius of the circle; R can be a float or integer.
- A polygon is a cons (poly . [X0 Y0 X1 Y1 ...]) where each pair in the
- vector describes one corner in the polygon.
- When the mouse pointer is above a hot-spot area of an image, the
- PLIST of that hot-spot is consulted; if it contains a `help-echo'
- property it defines a tool-tip for the hot-spot, and if it contains
- a `pointer' property, it defines the shape of the mouse cursor when
- it is over the hot-spot. See the variable `void-area-text-pointer'
- for possible pointer shapes.
- When you click the mouse when the mouse pointer is over a hot-spot,
- an event is composed by combining the ID of the hot-spot with the
- mouse event, e.g. [area4 mouse-1] if the hot-spot's ID is `area4'.
- *** The function `find-image' now searches in etc/images/ and etc/.
- The new variable `image-load-path' is a list of locations in which to
- search for image files. The default is to search in etc/images, then
- in etc/, and finally in the directories specified by `load-path'.
- Subdirectories of etc/ and etc/images are not recursively searched; if
- you put an image file in a subdirectory, you have to specify it
- explicitly; for example, if an image is put in etc/images/foo/bar.xpm:
- (defimage foo-image '((:type xpm :file "foo/bar.xpm")))
- Note that all images formerly located in the lisp directory have been
- moved to etc/images.
- *** New function `image-load-path-for-library' returns a suitable
- search path for images relative to library. This function is useful in
- external packages to save users from having to update
- `image-load-path'.
- *** The new variable `max-image-size' defines the maximum size of
- images that Emacs will load and display.
- *** The new variable `display-mm-dimensions-alist' can be used to
- override incorrect graphical display dimensions returned by functions
- `display-mm-height' and `display-mm-width'.
- ** Mouse pointer features:
- *** The mouse pointer shape in void text areas (i.e. after the end of a
- line or below the last line in the buffer) of the text window is now
- controlled by the new variable `void-text-area-pointer'. The default
- is to use the `arrow' (non-text) pointer. Other choices are `text'
- (or nil), `hand', `vdrag', `hdrag', `modeline', and `hourglass'.
- *** The mouse pointer shape over an image can now be controlled by the
- :pointer image property.
- *** The mouse pointer shape over ordinary text or images can now be
- controlled/overridden via the `pointer' text property.
- ** Mouse event enhancements:
- *** All mouse events now include a buffer position regardless of where
- you clicked. For mouse clicks in window margins and fringes, this is
- a sensible buffer position corresponding to the surrounding text.
- *** Mouse events for clicks on window fringes now specify `left-fringe'
- or `right-fringe' as the area.
- *** Mouse events include actual glyph column and row for all event types
- and all areas.
- *** Mouse events can now indicate an image object clicked on.
- *** Mouse events include relative X and Y pixel coordinates relative to
- the top left corner of the object (image or character) clicked on.
- *** Mouse events include the pixel width and height of the object
- (image or character) clicked on.
- *** Function `mouse-set-point' now works for events outside text area.
- *** `posn-point' now returns buffer position for non-text area events.
- *** New function `posn-area' returns window area clicked on (nil means
- text area).
- *** New function `posn-actual-col-row' returns the actual glyph coordinates
- of the mouse event position.
- *** New functions 'posn-object', 'posn-object-x-y', 'posn-object-width-height'.
- These return the image or string object of a mouse click, the X and Y
- pixel coordinates relative to the top left corner of that object, and
- the total width and height of that object.
- ** Text property and overlay changes:
- *** Arguments for `remove-overlays' are now optional, so that you can
- remove all overlays in the buffer with just (remove-overlays).
- *** New variable `char-property-alias-alist'.
- This variable allows you to create alternative names for text
- properties. It works at the same level as `default-text-properties',
- although it applies to overlays as well. This variable was introduced
- to implement the `font-lock-face' property.
- *** New function `get-char-property-and-overlay' accepts the same
- arguments as `get-char-property' and returns a cons whose car is the
- return value of `get-char-property' called with those arguments and
- whose cdr is the overlay in which the property was found, or nil if
- it was found as a text property or not found at all.
- *** The new function `remove-list-of-text-properties'.
- It is like `remove-text-properties' except that it takes a list of
- property names as argument rather than a property list.
- ** Face changes
- *** The variable `facemenu-unlisted-faces' has been removed.
- Emacs has a lot more faces than in the past, and nearly all of them
- needed to be excluded. The new variable `facemenu-listed-faces' lists
- the faces to include in the face menu.
- *** The new face attribute condition `min-colors' can be used to tailor
- the face color to the number of colors supported by a display, and
- define the foreground and background colors accordingly so that they
- look best on a terminal that supports at least this many colors. This
- is now the preferred method for defining default faces in a way that
- makes a good use of the capabilities of the display.
- *** New function `display-supports-face-attributes-p' can be used to test
- whether a given set of face attributes is actually displayable.
- A new predicate `supports' has also been added to the `defface' face
- specification language, which can be used to do this test for faces
- defined with `defface'.
- *** The special treatment of faces whose names are of the form `fg:COLOR'
- or `bg:COLOR' has been removed. Lisp programs should use the
- `defface' facility for defining faces with specific colors, or use
- the feature of specifying the face attributes :foreground and :background
- directly in the `face' property instead of using a named face.
- *** The first face specification element in a defface can specify
- `default' instead of frame classification. Then its attributes act as
- defaults that apply to all the subsequent cases (and can be overridden
- by them).
- *** The function `face-differs-from-default-p' now truly checks
- whether the given face displays differently from the default face or
- not (previously it did only a very cursory check).
- *** `face-attribute', `face-foreground', `face-background', `face-stipple'.
- These now accept a new optional argument, INHERIT, which controls how
- face inheritance is used when determining the value of a face
- attribute.
- *** New functions `face-attribute-relative-p' and `merge-face-attribute'
- help with handling relative face attributes.
- *** The priority of faces in an :inherit attribute face list is reversed.
- If a face contains an :inherit attribute with a list of faces, earlier
- faces in the list override later faces in the list; in previous
- releases of Emacs, the order was the opposite. This change was made
- so that :inherit face lists operate identically to face lists in text
- `face' properties.
- *** The variable `face-font-rescale-alist' specifies how much larger
- (or smaller) font we should use. For instance, if the value is
- '((SOME-FONTNAME-PATTERN . 1.3)) and a face requests a font of 10
- point, we actually use a font of 13 point if the font matches
- SOME-FONTNAME-PATTERN.
- *** On terminals, faces with the :inverse-video attribute are displayed
- with swapped foreground and background colors even when one of them is
- not specified. In previous releases of Emacs, if either foreground
- or background color was unspecified, colors were not swapped. This
- was inconsistent with the face behavior under X.
- *** `set-fontset-font', `fontset-info', `fontset-font' now operate on
- the default fontset if the argument NAME is nil..
- ** Font-Lock changes:
- *** New special text property `font-lock-face'.
- This property acts like the `face' property, but it is controlled by
- M-x font-lock-mode. It is not, strictly speaking, a builtin text
- property. Instead, it is implemented inside font-core.el, using the
- new variable `char-property-alias-alist'.
- *** font-lock can manage arbitrary text-properties beside `face'.
- **** the FACENAME returned in `font-lock-keywords' can be a list of the
- form (face FACE PROP1 VAL1 PROP2 VAL2 ...) so you can set other
- properties than `face'.
- **** `font-lock-extra-managed-props' can be set to make sure those
- extra properties are automatically cleaned up by font-lock.
- *** jit-lock obeys a new text-property `jit-lock-defer-multiline'.
- If a piece of text with that property gets contextually refontified
- (see `jit-lock-defer-contextually'), then all of that text will
- be refontified. This is useful when the syntax of a textual element
- depends on text several lines further down (and when `font-lock-multiline'
- is not appropriate to solve that problem). For example in Perl:
- s{
- foo
- }{
- bar
- }e
- Adding/removing the last `e' changes the `bar' from being a piece of
- text to being a piece of code, so you'd put a `jit-lock-defer-multiline'
- property over the second half of the command to force (deferred)
- refontification of `bar' whenever the `e' is added/removed.
- *** `font-lock-extend-region-functions' makes it possible to alter the way
- the fontification region is chosen. This can be used to prevent rounding
- up to whole lines, or to extend the region to include all related lines
- of multiline constructs so that such constructs get properly recognized.
- ** Major mode mechanism changes:
- *** New variable `magic-mode-alist' determines major mode for a file by
- looking at the file contents. It takes precedence over `auto-mode-alist'.
- *** New variable `magic-fallback-mode-alist' determines major mode for a file by
- looking at the file contents. It is handled after `auto-mode-alist',
- only if `auto-mode-alist' (and `magic-mode-alist') says nothing about the file.
- *** XML or SGML major mode is selected when file starts with an `<?xml'
- or `<!DOCTYPE' declaration.
- *** An interpreter magic line (if present) takes precedence over the
- file name when setting the major mode.
- *** If new variable `auto-mode-case-fold' is set to a non-nil value,
- Emacs will perform a second case-insensitive search through
- `auto-mode-alist' if the first case-sensitive search fails. This
- means that a file FILE.TXT is opened in text-mode, and a file
- PROG.HTML is opened in html-mode. Note however, that independent of
- this setting, *.C files are usually recognized as C++ files. It also
- has no effect on systems with case-insensitive file names.
- *** All major mode functions should now run the new normal hook
- `after-change-major-mode-hook', at their very end, after the mode
- hooks. `run-mode-hooks' does this automatically.
- *** Major modes can define `eldoc-documentation-function'
- locally to provide Eldoc functionality by some method appropriate to
- the language.
- *** Use the new function `run-mode-hooks' to run the major mode's mode hook.
- *** The new function `run-mode-hooks' and the new macro `delay-mode-hooks'
- are used by `define-derived-mode' to make sure the mode hook for the
- parent mode is run at the end of the child mode.
- *** `define-derived-mode' by default creates a new empty abbrev table.
- It does not copy abbrevs from the parent mode's abbrev table.
- *** If a major mode function has a non-nil `no-clone-indirect'
- property, `clone-indirect-buffer' signals an error if you use
- it in that buffer.
- ** Minor mode changes:
- *** `define-minor-mode' now accepts arbitrary additional keyword arguments
- and simply passes them to `defcustom', if applicable.
- *** `define-globalized-minor-mode'.
- This is a new name for what was formerly called
- `easy-mmode-define-global-mode'. The old name remains as an alias.
- *** `minor-mode-list' now holds a list of minor mode commands.
- ** Command loop changes:
- *** The new function `called-interactively-p' does what many people
- have mistakenly believed `interactive-p' to do: it returns t if the
- calling function was called through `call-interactively'.
- Only use this when you cannot solve the problem by adding a new
- INTERACTIVE argument to the command.
- *** The function `commandp' takes an additional optional argument.
- If it is non-nil, then `commandp' checks for a function that could be
- called with `call-interactively', and does not return t for keyboard
- macros.
- *** When a command returns, the command loop moves point out from
- within invisible text, in the same way it moves out from within text
- covered by an image or composition property.
- This makes it generally unnecessary to mark invisible text as intangible.
- This is particularly good because the intangible property often has
- unexpected side-effects since the property applies to everything
- (including `goto-char', ...) whereas this new code is only run after
- `post-command-hook' and thus does not care about intermediate states.
- *** If a command sets `transient-mark-mode' to `only', that
- enables Transient Mark mode for the following command only.
- During that following command, the value of `transient-mark-mode'
- is `identity'. If it is still `identity' at the end of the command,
- the next return to the command loop changes to nil.
- *** Both the variable and the function `disabled-command-hook' have
- been renamed to `disabled-command-function'. The variable
- `disabled-command-hook' has been kept as an obsolete alias.
- *** `emacsserver' now runs `pre-command-hook' and `post-command-hook'
- when it receives a request from emacsclient.
- *** `current-idle-time' reports how long Emacs has been idle.
- ** Lisp file loading changes:
- *** `load-history' can now have elements of the form (t . FUNNAME),
- which means FUNNAME was previously defined as an autoload (before the
- current file redefined it).
- *** `load-history' now records (defun . FUNNAME) when a function is
- defined. For a variable, it records just the variable name.
- *** The function `symbol-file' can now search specifically for function,
- variable or face definitions.
- *** `provide' and `featurep' now accept an optional second argument
- to test/provide subfeatures. Also `provide' now checks `after-load-alist'
- and runs any code associated with the provided feature.
- *** The variable `recursive-load-depth-limit' has been deleted.
- Emacs now signals an error if the same file is loaded with more
- than 3 levels of nesting.
- ** Byte compiler changes:
- *** The byte compiler now displays the actual line and character
- position of errors, where possible. Additionally, the form of its
- warning and error messages have been brought into line with GNU standards
- for these. As a result, you can use next-error and friends on the
- compilation output buffer.
- *** The new macro `with-no-warnings' suppresses all compiler warnings
- inside its body. In terms of execution, it is equivalent to `progn'.
- *** You can avoid warnings for possibly-undefined symbols with a
- simple convention that the compiler understands. (This is mostly
- useful in code meant to be portable to different Emacs versions.)
- Write forms like the following, or code that macroexpands into such
- forms:
- (if (fboundp 'foo) <then> <else>)
- (if (boundp 'foo) <then> <else)
- In the first case, using `foo' as a function inside the <then> form
- won't produce a warning if it's not defined as a function, and in the
- second case, using `foo' as a variable won't produce a warning if it's
- unbound. The test must be in exactly one of the above forms (after
- macro expansion), but such tests can be nested. Note that `when' and
- `unless' expand to `if', but `cond' doesn't.
- *** `(featurep 'xemacs)' is treated by the compiler as nil. This
- helps to avoid noisy compiler warnings in code meant to run under both
- Emacs and XEmacs and can sometimes make the result significantly more
- efficient. Since byte code from recent versions of XEmacs won't
- generally run in Emacs and vice versa, this optimization doesn't lose
- you anything.
- *** The local variable `no-byte-compile' in Lisp files is now obeyed.
- *** When a Lisp file uses CL functions at run-time, compiling the file
- now issues warnings about these calls, unless the file performs
- (require 'cl) when loaded.
- ** Frame operations:
- *** New functions `frame-current-scroll-bars' and `window-current-scroll-bars'.
- These functions return the current locations of the vertical and
- horizontal scroll bars in a frame or window.
- *** The new function `modify-all-frames-parameters' modifies parameters
- for all (existing and future) frames.
- *** The new frame parameter `tty-color-mode' specifies the mode to use
- for color support on character terminal frames. Its value can be a
- number of colors to support, or a symbol. See the Emacs Lisp
- Reference manual for more detailed documentation.
- *** When using non-toolkit scroll bars with the default width,
- the `scroll-bar-width' frame parameter value is nil.
- ** Mode line changes:
- *** New function `format-mode-line'.
- This returns the mode line or header line of the selected (or a
- specified) window as a string with or without text properties.
- *** The new mode-line construct `(:propertize ELT PROPS...)' can be
- used to add text properties to mode-line elements.
- *** The new `%i' and `%I' constructs for `mode-line-format' can be used
- to display the size of the accessible part of the buffer on the mode
- line.
- *** Mouse-face on mode-line (and header-line) is now supported.
- ** Menu manipulation changes:
- *** To manipulate the File menu using easy-menu, you must specify the
- proper name "file". In previous Emacs versions, you had to specify
- "files", even though the menu item itself was changed to say "File"
- several versions ago.
- *** The dummy function keys made by easy-menu are now always lower case.
- If you specify the menu item name "Ada", for instance, it uses `ada'
- as the "key" bound by that key binding.
- This is relevant only if Lisp code looks for the bindings that were
- made with easy-menu.
- *** `easy-menu-define' now allows you to use nil for the symbol name
- if you don't need to give the menu a name. If you install the menu
- into other keymaps right away (MAPS is non-nil), it usually doesn't
- need to have a name.
- ** Mule changes:
- *** Already true in Emacs 21.1, but not emphasized clearly enough:
- Multibyte buffers can now faithfully record all 256 character codes
- from 0 to 255. As a result, most of the past reasons to use unibyte
- buffers no longer exist. We only know of three reasons to use them
- now:
- 1. If you prefer to use unibyte text all of the time.
- 2. For reading files into temporary buffers, when you want to avoid
- the time it takes to convert the format.
- 3. For binary files where format conversion would be pointless and
- wasteful.
- *** The new variable `auto-coding-functions' lets you specify functions
- to examine a file being visited and deduce the proper coding system
- for it. (If the coding system is detected incorrectly for a specific
- file, you can put a `coding:' tags to override it.)
- *** The new variable `ascii-case-table' stores the case table for the
- ascii character set. Language environments (such as Turkish) may
- alter the case correspondences of ASCII characters. This variable
- saves the original ASCII case table before any such changes.
- *** The new function `merge-coding-systems' fills in unspecified aspects
- of one coding system from another coding system.
- *** New coding system property `mime-text-unsuitable' indicates that
- the coding system's `mime-charset' is not suitable for MIME text
- parts, e.g. utf-16.
- *** New function `decode-coding-inserted-region' decodes a region as if
- it is read from a file without decoding.
- *** New CCL functions `lookup-character' and `lookup-integer' access
- hash tables defined by the Lisp function `define-translation-hash-table'.
- *** New function `quail-find-key' returns a list of keys to type in the
- current input method to input a character.
- *** `set-buffer-file-coding-system' now takes an additional argument,
- NOMODIFY. If it is non-nil, it means don't mark the buffer modified.
- ** Operating system access:
- *** The new primitive `get-internal-run-time' returns the processor
- run time used by Emacs since start-up.
- *** Functions `user-uid' and `user-real-uid' now return floats if the
- user UID doesn't fit in a Lisp integer. Function `user-full-name'
- accepts a float as UID parameter.
- *** New function `locale-info' accesses locale information.
- *** On MS Windows, locale-coding-system is used to interact with the OS.
- The Windows specific variable w32-system-coding-system, which was
- formerly used for that purpose is now an alias for locale-coding-system.
- *** New function `redirect-debugging-output' can be used to redirect
- debugging output on the stderr file handle to a file.
- ** GC changes:
- *** New variable `gc-cons-percentage' automatically grows the GC cons threshold
- as the heap size increases.
- *** New variables `gc-elapsed' and `gcs-done' provide extra information
- on garbage collection.
- *** The normal hook `post-gc-hook' is run at the end of garbage collection.
- The hook is run with GC inhibited, so use it with care.
- ** Miscellaneous:
- *** A number of hooks have been renamed to better follow the conventions:
- `find-file-hooks' to `find-file-hook',
- `find-file-not-found-hooks' to `find-file-not-found-functions',
- `write-file-hooks' to `write-file-functions',
- `write-contents-hooks' to `write-contents-functions',
- `x-lost-selection-hooks' to `x-lost-selection-functions',
- `x-sent-selection-hooks' to `x-sent-selection-functions',
- `delete-frame-hook' to `delete-frame-functions'.
- In each case the old name remains as an alias for the moment.
- *** Variable `local-write-file-hooks' is marked obsolete.
- Use the LOCAL arg of `add-hook'.
- *** New function `x-send-client-message' sends a client message when
- running under X.
- * New Packages for Lisp Programming in Emacs 22.1
- ** The new library button.el implements simple and fast `clickable
- buttons' in Emacs buffers. Buttons are much lighter-weight than the
- `widgets' implemented by widget.el, and can be used by lisp code that
- doesn't require the full power of widgets. Emacs uses buttons for
- such things as help and apropos buffers.
- ** The new library tree-widget.el provides a widget to display a set
- of hierarchical data as an outline. For example, the tree-widget is
- well suited to display a hierarchy of directories and files.
- ** The new library bindat.el provides functions to unpack and pack
- binary data structures, such as network packets, to and from Lisp
- data structures.
- ** master-mode.el implements a minor mode for scrolling a slave
- buffer without leaving your current buffer, the master buffer.
- It can be used by sql.el, for example: the SQL buffer is the master
- and its SQLi buffer is the slave. This allows you to scroll the SQLi
- buffer containing the output from the SQL buffer containing the
- commands.
- This is how to use sql.el and master.el together: the variable
- sql-buffer contains the slave buffer. It is a local variable in the
- SQL buffer.
- (add-hook 'sql-mode-hook
- (function (lambda ()
- (master-mode t)
- (master-set-slave sql-buffer))))
- (add-hook 'sql-set-sqli-hook
- (function (lambda ()
- (master-set-slave sql-buffer))))
- ** The new library benchmark.el does timing measurements on Lisp code.
- This includes measuring garbage collection time.
- ** The new library testcover.el does test coverage checking.
- This is so you can tell whether you've tested all paths in your Lisp
- code. It works with edebug.
- The function `testcover-start' instruments all functions in a given
- file. Then test your code. The function `testcover-mark-all' adds
- overlay "splotches" to the Lisp file's buffer to show where coverage
- is lacking. The command `testcover-next-mark' (bind it to a key!)
- will move point forward to the next spot that has a splotch.
- Normally, a red splotch indicates the form was never completely
- evaluated; a brown splotch means it always evaluated to the same
- value. The red splotches are skipped for forms that can't possibly
- complete their evaluation, such as `error'. The brown splotches are
- skipped for forms that are expected to always evaluate to the same
- value, such as (setq x 14).
- For difficult cases, you can add do-nothing macros to your code to
- help out the test coverage tool. The macro `noreturn' suppresses a
- red splotch. It is an error if the argument to `noreturn' does
- return. The macro `1value' suppresses a brown splotch for its argument.
- This macro is a no-op except during test-coverage -- then it signals
- an error if the argument actually returns differing values.
- ----------------------------------------------------------------------
- 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:
|