; TeX output 1994.08.03:14283ڍ&gUNj cmbx12UGNUƧReadlineLibrary 0G i2K`y 3 cmr10Editionf2.0,for3converting zthemtoameta-pre xedk!eysequence.LThedefaultsvdDaluefison.9output-metasIf?settoon,'Readlinewilldispla!ycharacterswiththeeighthbitsetdirectlysratherfthanasameta-pre xedescapMesequence.Thedefaultisoff.,6bGNUfReadlineLibrary3ڍЍ9completion-query-itemssThen!umbMerofpossiblecompletionsthatdetermineswhentheuserisask!edswhetherdhew!antsdtoseethelistofpMossibilities.pIfthen!umberdofpossiblescompletionsCisgreaterthanthisvdDalue,:Readlinewillasktheuserwhethersor nothewishestoviewthem;_otherwise,ftheyaresimplylisted. Thesdefaultflimitis100.9keymapsSetsReadline'sideaofthecurren!tkeymapforkeybindingcommands.Ac-sceptablekeymapnamesareemacs,emacs-standard,emacs-meta,emacs-sctlx,+Dvi,vi-move,vi-command,andvi-insert.viisequivdDalen!ttovi-scommand;emacs.isequivdDalen!ttoemacs-standard.6Thedefaultvalueissemacs.RtTheCvdDalueoftheediting-modevariablealsoa ectsthedefaultsk!eymap.R9show-all-if-ambiguoussThis$altersthedefaultbMeha!viorofthecompletionfunctions.Ifsettoon,sw!ordsCwhichhavemorethanonepMossiblecompletioncausethematchestosbMegslistedimmediatelyinsteadofringingthebell.ThedefaultvdDalueisoff.9expand-tildesIf7settoon,ktildeexpansionispMerformedwhenReadlineattemptsw!ordscompletion.Thefdefaultisoff.KeyfBindings9Thesyn!taxforcontrollingkeybindingsintheinit leissimple.tFirstyouhaveto9kno!wO}thenameofthecommandthatyouwanttochange.Thefollowingpagescontain9tables9ofthecommandname,.thedefaultk!eybinding,andashortdescriptionofwhat9thefcommanddoMes.9Oncemy!ouknowthenameofthecommand,ksimplyplacethenameofthekeyyouwish9tobindthecommandto,acolon,andthenthenameofthecommandonalineinthe9init le.6"Thenameofthek!eycanbMeexpressedindi erentways,-depMendingonwhich9isfmostcomfortablefory!ou.9k!eyname:function-nameCmorfmacrosk!eynameCmisfthenameofakeyspMelledoutinEnglish.Feorexample:R;Control-u:universal-argument ;Meta-Rubout:backward-kill-word;Control-o:">&output"sIntheabMo!veexample,`C-u'isboundtothefunctionuniversal-argument,sand;`C-o'isbMoundtorunthemacroexpressedontherigh!thandside(thatsis,ftoinsertthetext`>&output'in!totheline).9"k!eyseq@":function-nameCmorfmacrosk!eyseqRdi ersfromkeynameabMoveinthatstringsdenotinganentirekeyssequenceVwcanbMespeci ed,{b!yplacingthekeysequenceindoublequotes.7$Chapterf1:CommandLineEditing'o73ڍЍsSomeLGNUL|Emacsst!ylekeyescapMescanbeused,v6asinthefollo!wingex-sample,fbutthespMecialc!haracternamesarenotrecognized.};"\C-u":universal-argument ;"\C-x\C-r":re-read-init-file;"\e[11~":"FunctionKey1"}sIntheabMo!veexample,.`C-u'isboundtothefunctionuniversal-arguments(just*|asitw!asinthe rstexample),CE`C-xfC-r'isbMoundtothefunctionre-sread-init-file,and`ESCf[11~'isbMoundtoinsertthetext`FunctionsKeyf1'.,Thefollo!wingescapMesequencesareavdDailablewhenspMecifyingkeyssequences:s\C-rcon!trolfpre xs\M-rmetafpre xs\eranfescapMec!haracters\\rbac!kslashs\"r"s\'r'sWhenX'en!teringthetextofamacro,gsingleordoublequotesshouldbMeusedstoYindicateamacrode nition.ڃUnquotedtextisassumedtobMeafunctionsname.jBac!kslash4@willquoteanycharacterinthemacrotext,Wincluding"sand'.{Feorexample,)9Mo!veftotheendoftheinputhistorye,i.e.,theliney!ouareentering.reverse-search-historyf(C-r)9Searc!h<@backwardstartingatthecurrentlineandmoving`up'throughthehistoryas9necessarye.Thisfisanincremen!talsearch.forward-search-historyf(C-s)9Searc!h}-forwardstartingatthecurrentlineandmoving`down'throughthethehistory9asfnecessarye.Thisisanincremen!talsearch.non-incremental-reverse-search-historyf(M-p)9Searc!h<@backwardstartingatthecurrentlineandmoving`up'throughthehistoryas9necessaryfusinganon-incremen!talsearchforastringsuppliedbytheuser.non-incremental-forward-search-historyf(M-n)9Searc!h}-forwardstartingatthecurrentlineandmoving`down'throughthethehistory9asfnecessaryusinganon-incremen!talsearchforastringsuppliedbytheuser.history-search-forwardf()9Searc!h)[forwardthroughthehistoryforthestringofcharactersbMetweenthestartofthe9curren!tlineandthecurrentpMoint.Thisisanon-incrementalsearch.Bydefault,this9commandfisun!bMound. T10]*GNUfReadlineLibrary3ڍЍhistory-search-backwardf()9Searc!hbackwardthroughthehistoryforthestringofcharactersbMetweenthestartof9the kcurren!tlineandthecurrentpMoint.Thisisanon-incrementalsearch.Bydefault,9thisfcommandisun!bMound.D+yank-nth-argf(M-C-y)9Insert|the rstargumen!ttothepreviouscommand(usuallythesecondwordonthe9previousline).iWithanargumen!tn,insertthenthwordfromthepreviouscommand9(thezRw!ordsinthepreviouscommandbMeginwithword0).,AzGnegativeargumentinserts9thefnthw!ordfromtheendofthepreviouscommand.yank-last-argf(M-.,M-_)9Insertlastargumen!ttothepreviouscommand(thelastwordonthepreviousline).9Withfanargumen!t,bMehaveexactlylikeyank-nth-arg.=eM1.4.3d(CommandsMFģorChangingText"D+delete-charf(C-d)9Deletethec!haracterunderthecursor.hIfthecursorisatthebMeginningoftheline, there9arejjnoc!haractersintheline,jandthelastcharactertypMedwasnotC-d,jthenreturn9EOF.backward-delete-charf(Rubout)9Deletethec!haracterbMehindthecursor.NAwnumericargsaystokillthecharactersinstead9offdeletingthem.quoted-insertf(C-q,C-v)9AddQthenextc!haracterthatyoutypMetothelineverbatim.Thisishowtoinsertkey9sequencesflik!eC-Q,forexample.tab-insertf(M-TAB)9Insertfatabc!haracter.self-insertf(a,b,A,1,!,...)9Insertfy!ourself.transpose-charsf(C-t)9Dragthec!haracterbMeforethecursorforwardoverthecharacteratthecursor,Dmoving9thekcursorforw!ardaswell..GIftheinsertionpMointisattheendoftheline,thisdigittotheargumen!talreadyaccumulating,torstartanewargument.eM{9startsfanegativ!eargument.uwuniversal-argumentf()9Eac!h*timethisisexecuted,Ktheargumentcountismultipliedbyfour.jTheargument9coun!t0isinitiallyone,Bsoexecutingthisfunctionthe rsttimemakestheargument9coun!tffour.Bydefault,thisisnotbMoundtoakeye.?!2M1.4.6d(LettingMReadlineTypieFģorYoucompletef(TAB)9A!ttempt'todocompletiononthetextbMeforethecursor.aEThisisapplication-speci c.9Generallye,`if;Hy!ouaretypinga lenameargument,`youcando lenamecompletion;if9y!ouVaretypingacommand,youcandocommandcompletion,ifyouaretypingina9sym!bMoltoGDB,youcandosymbMolnamecompletion,EifyouaretypinginavdDariable9tofBash,y!oucandovdDariablenamecompletion,andsoon.uwpossible-completionsf(M-?)9ListfthepMossiblecompletionsofthetextbeforethecursor.insert-completionsf()9InsertGeallcompletionsofthetextbMeforepoin!tthatwouldhavebMeengeneratedby9possible-completions.Byfdefault,thisisnotbMoundtoak!eye.?!2M1.4.7d(KeybioardMMacros"uwstart-kbd-macrof(C-x()9Beginfsa!vingthecharacterstypMedintothecurrentkeybMoardmacro.end-kbd-macrof(C-x))9Stop+sa!vingthecharacterstypMedintothecurrentkeybMoardmacroandsavethede ni-9tion.call-last-kbd-macrof(C-xe)9Re-executeqIthelastk!eybMoardmacrode ned,bymakingthecharactersinthemacro9appMearfasift!ypedatthek!eyboard. o!Chapterf1:CommandLineEditing!=133ڍЍM1.4.8d(SomeMMiscellaneousCommands!\re-read-init-filef(C-xC-r)9Readinthecon!tentsofy!ourinit le,9andincorpMorateanybindingsorvdDariableassign-9men!tsffoundthere.\abortf(C-g)9AbMort;thecurren!teditingcommandandringtheterminal'sbell(subjecttothesetting9offbell-style).do-uppercase-versionf(M-a,M-b,...)9RunfthecommandthatisbMoundtothecorresopondinguppercasec!haracter.prefix-metaf(ESC)9Mak!e~KthenextcharacterthatyoutypMebemeta ed.Thisisforpeoplewithoutameta9k!eye.Typingf`ESCf'isequivdDalen!ttotyping`M-f'.undof(C-_,C-xC-u)9Incremen!talfundo,separatelyremembMeredforeachline.revert-linef(M-r)9Undoallc!hangesmadetothisline.HThisisliketypingtheundocommandenough9timesftogetbac!ktothebMeginning.tilde-expandf(M-~)9P!erformftildeexpansiononthecurrentword.dump-functionsf()9Prin!ta\allofthefunctionsandtheirkeybindingstothereadlineoutputstream.Ifa9n!umericxargumentissupplied,ytheoutputisformattedinsuchawaythatitcanbMe9madefpartofaninputrcPj le.=thistoavdDaluemak!esitthenextkeystrokeread.zThisisawaytostu asingleUc!haracterfintotheinputstream.(vڍ.Veariablechar*rl#؎promptUThenpromptReadlineuses.NThisissetfromtheargumen!ttoreadlinef(),yandshouldUnotfbMeassignedtodirectlye..Veariablechar*rl#؎terminal#؎nameUThefterminalt!ypMe,usedforinitialization..Veariablechar*rl#؎readline#؎nameUThis3'vdDariableissettoauniquenameb!yeachapplicationusingReadline.ThevdDalueUallo!wsconditionalparsingoftheinputrc le(seeSection1.3.2[ConditionalInitCon-Ustructs],fpage7)..VeariableFILE*rl#؎instreamUThefstdiostreamfromwhic!hReadlinereadsinput..VeariableFILE*rl#؎outstreamUThefstdiostreamtowhic!hReadlinepMerformsoutput..VeariableFunction*rl#؎startup#؎hob"okUIf"pnon-zero,pfewfunctionstothedefaultfunctionsthatReadlinehasbuiltin.Ify!ouneedtodosomethingotherthanaddingafunctiontoReadline,Yy!oumayneedtousetheunderlyingfunctionsdescribMedbMelo!w.4ϿM2.3.2d(SelectingMaKeymap!OKeypQbindingstak!eplaceonakeymap.;ThekeymapistheassoMciationbet!weenpQthek!eysthattheusert!ypMesandthefunctionsthatgetrun.xYeoucanmakeyourownkeymaps,Bcopyexistingk!eymaps,fandtellReadlinewhichkeymaptouse.FeunctionKeymaprl#؎make#؎bare#؎keymapy()UReturns1anew,Iempt!ykeymap.ThespaceforthekeymapisalloMcatedwithmallocf();Uy!oufshouldfree()itwhenyouaredone.FeunctionKeymaprl#؎copy#؎keymapy(Keymapfmap)UReturnfanewk!eymapwhichisacopyofmap.FeunctionKeymaprl#؎make#؎keymapy()UReturnoanewk!eymapwiththeprintingcharactersbMoundtorl/xH'insert,,thelowercaseUMetaFjc!haractersbMoundtoruntheirequivdDalents,YandtheMetadigitsbMoundtoproduceUn!umericfarguments.Feunctionvoidrl#؎discard#؎keymapy(Keymapfkeymap)UFereefthestorageassoMciatedwithk!eymap.Chapterf2:ProgrammingwithGNUReadline213ڍЍReadline.Rhassev!eralinternalkeymaps.uThesefunctionsallowyoutochangewhichkeymapisactiv!e.'mFeunctionKeymaprl#؎get#؎keymapy()UReturnsfthecurren!tlyactivekeymap.Feunctionvoidrl#؎set#؎keymapy(Keymapfkeymap)UMak!esfkeymapgthecurrentlyactivekeymap.FeunctionKeymaprl#؎get#؎keymap#؎by#؎namey(charf*name)UReturnpthek!eymapmatchingname.=Oname isonewhichwouldbMesuppliedinasetUkeymapfinputrcline(seeSection1.3[ReadlineInitFile],page4).2FM2.3.3d(BindingMKeys!zYeouassoMciatek!eyswithfunctionsthroughthekeymap.NReadlinehasseveralinternalkeymaps:emacs_standard_keymap,emacs_meta_keymap,emacs_ctlx_keymap,vi_movement_keymap,andvi_insertion_keymap._emacs_standard_keymapѫisthedefault,}andtheexamplesinthisman!ualassumefthat.Theseffunctionsmanagek!eybindings.'mFeunctionintrl#؎bind#؎keyy(intfkey,Function*function)UBindsk!ey4tofunctioninthecurrentlyactivekeymap.oReturnsnon-zerointhecaseofUanfin!vdDalidkey.Feunctionint^drl#؎bind#؎key#؎in#؎mapy(intfkey,Function*function,Keymapmap)UBindfk!ey~tofunctioninmap.Returnsnon-zerointhecaseofaninvdDalidkey.Feunctionintrl#؎unbind#؎keyy(intfkey)UBind?k!ey/tothenullfunctioninthecurrentlyactivekeymap.Returnsnon-zeroincaseUofferror.Feunctionintrl#؎unbind#؎key#؎in#؎mapy(intfkey,Keymapmap)UBindfk!ey~tothenullfunctioninmap.Returnsnon-zeroincaseoferror.T22]*GNUfReadlineLibrary3ڍЍFeunctionintrl#؎generic#؎bindy(intftype,char*keyseq,char*data,Keymap2map)UBindCthek!eysequencerepresentedbythestringkeyseq)tothearbitrarypMointerdata.Ut!ypMet&sayswhatkindofdataispoin!tedtobydata;{thiscanbMeafunction(ISFUNC),MaUmacroZ(ISMACR),Worak!eymap(ISKMAP).Thismakesnewkeymapsasnecessarye.TheUinitialfk!eymapinwhichtodobindingsismap.,"Feunctionintrl#؎parse#؎and#؎bindy(charf*line)UP!arseline#asifithadbMeenreadfromtheinputrc leandperforman!ykeybindingsUandfvdDariableassignmen!tsfound(seeSection1.3[ReadlineInitFile],page4).CgM2.3.4d(AssoiciatingMFģunctionNamesandBindings" These!functionsallo!wyouto ndoutwhatkeysinvokenamedfunctionsandthefunctionsin!vokedfbyaparticularkeysequence.FeunctionFunction*rl#؎named#؎functiony(charf*name)UReturnfthefunctionwithnamename.FeunctionFunction*rl#؎function#؎of#؎keyseqy(charf*keyseq,Keymapmap,int2*type)UReturn}thefunctionin!voked}bykeyseq,cinkeymapmap."Ifmap@~isNULL,thecurrentUk!eymapisused.IftypMeisnotNULL,thetypMeoftheobjectisreturnedinit(oneofUISFUNC,fISKMAP,orISMACR).Feunctionchar**rl#؎invoking#؎keyseqsy(Functionf*function)UReturnN>anarra!yofstringsrepresentingthekeysequencesusedtoinvokefunctioninUthefcurren!tkeymap.Feunctionchar**rl#؎invoking#؎keyseqs#؎in#؎mapy(Functionf*function,Keymap2map)UReturnN>anarra!yofstringsrepresentingthekeysequencesusedtoinvokefunctioninUthefk!eymapmap.Chapterf2:ProgrammingwithGNUReadline233ڍЍM2.3.5d(AllowingMUndoing!rSuppMortingOitheundocommandisapainlessthing,`andmak!esyourfunctionsmuchmoreuseful.It{Miscertainlyeasytotrysomethingify!ouknowyoucanundoit.I{BcoulduseanundofunctionforthefstoMc!kmarket.Ify!ourfunctionsimplyinsertstextonce,Ȍordeletestextonce,andusesrl_insert_textf()orrl_delete_textf()todoit,thenundoingisalreadydonefory!ouautomaticallye.Ify!oudomultipleinsertionsormultipledeletions,oranycombinationoftheseopMerations,youshouldgroupthemtogetherin!tooneopMeration.чThisisdonewithrl_begin_undo_groupf()andrl_end_undo_groupf().Theft!ypMesofeventsthatcanbMeundoneare:rUenumundo_code{UNDO_DELETE,UNDO_INSERT,UNDO_BEGIN,UNDO_END};NoticeLthatUNDO_DELETEmeanstoinsertsometext,uwandUNDO_INSERTmeanstodeletesometext. 2Thatis,t+theundocoMdetellsundowhattoundo,notho!wtoundoit. 2UNDO_BEGINandUNDO_ENDfaretagsaddedb!yrl_begin_undo_group()andrl_end_undo_group().(WݍFeunctionintrl#؎bb"egin#؎undo#؎groupy()UBeginsEsa!vingundoinformationinagroupconstruct.;TheundoinformationusuallyUcomesyfromcallstorl_insert_textf()andrl_delete_text(),QbutcouldbMetheUresultfofcallstorl_add_undo().Feunctionintrl#؎end#؎undo#؎groupy()UCloses-thecurren!tundogroupstartedwithrl_begin_undo_groupf().t ThereshouldUbMefonecalltorl_end_undo_group()foreac!hcalltorl_begin_undo_group().Feunctionvoidrl#؎add#؎undoy(enumfundo_codewhat,intstart,intend,char2*text)URemem!bMerFhowtoundoanevent(accordingtowhat=).}Thea ectedtextrunsfromUstartftofend,andencompassestext.Feunctionvoidfree#؎undo#؎listy()UFereeftheexistingundolist.퍟24]*GNUfReadlineLibrary3ڍЍFeunctionintrl#؎do#؎undoy()UUndo8the rstthingontheundolist.^Returns0iftherew!asnothingtoundo,Nnon-zeroUiffsomethingw!asundone.)Finallye,ify!ouneitherinsertnordeletetext,butdirectlymoMdifytheexistingtext(e.g.,c!hangeits?case),Scallrl_modifyingf()once,justbMeforey!oumodifythetext.gYeoum!ustsupplytheindicesoffthetextrangethaty!ouaregoingtomoMdifye.Feunctionintrl#؎mob"difyingy(intfstart,intend)UTeellReadlinetosa!vethetextbMet!weenstartandend"*asasingleundounit.ItisassumedUthatfy!ouwillsubsequentlymoMdifythattext.8Q[M2.3.6d(RedisplayFeunctionintrl#؎redisplayy()UChange$what'sdispla!yed$onthescreentore ectthecurren!tcontentsofrl_line_Ubuffer.Feunctionintrl#؎forced#؎upb"date#؎displayy()UFeorce܅thelinetobMeupdatedandredispla!yed,whether܅ornotReadlinethinksthescreenUdispla!yfiscorrect.Feunctionintrl#؎on#؎new#؎liney()UTeellttheupMdateroutinesthatw!ehavemovedontoanew(empty)line, usuallyafterUouputtingfanewline.Feunctionintrl#؎reset#؎line#؎statey()UReset-thedispla!ystatetoacleanstateandredisplaythecurrentlinestartingonanewUline.Feunctionintrl#؎messagey(va_alist)UThei.argumen!tsareastringaswouldbMesuppliedtoprintf.&4TheresultingstringisUdispla!yed7 intheec!hoarea.TheechoareaisalsousedtodisplaynumericargumentsUandfsearc!hstrings.|Chapterf2:ProgrammingwithGNUReadline253ڍЍFeunctionintrl#؎clear#؎messagey()UClearfthemessageintheec!hoarea.03M2.3.7d(MoidifyingMTģext&VFeunctionintrl#؎insert#؎texty(charf*text)UInsertftextfin!tothelineatthecurrentcursorpMosition.Feunctionintrl#؎delete#؎texty(intfstart,intend)UDeletefthetextbMet!weenfstartfandendinthecurren!tline.Feunctionchar*rl#؎copy#؎texty(intfstart,intend)UReturnfacop!yofthetextbMetweenstartfandendinthecurrentline.Feunctionintrl#؎kill#؎texty(intfstart,intend)UCop!ythetextbMetweenstartandendBinthecurrentlinetothekillring,RappMendingUor{prepMendingtothelastkillifthelastcommandw!asakillcommand.]ThetextisUdeleted.vIf*1startg1islessthanend,C thetextisappMended,otherwiseprepMended.vIfthelastUcommandfw!asnotakill,anewkillringslotisused.03M2.3.8d(UtilityMFģunctionsFeunctionintrl#؎reset#؎terminaly(charf*terminal_name)UReinitializeReadline'sideaoftheterminalsettingsusingterminal/xH'name6astheterminalUt!ypMef(e.g.,vt100).Feunctionintalphabb"eticy(intfc)UReturnf1ifcPjisanalphabMeticc!haracter.Feunctionintnumericy(intfc)UReturnf1ifcPjisan!umericcharacter.Feunctionintdingy()URingftheterminalbMell,obeyingthesettingofbell-style..26]*GNUfReadlineLibrary3ڍЍTheffollo!wingareimplementedasmacros,de nedinchartypes.h.&捍Feunctionintuppb"ercase#؎py(intfc)UReturnf1ifcPjisanuppMercasealphabeticc!haracter.Feunctionintlowercase#؎py(intfc)UReturnf1ifcPjisalo!wercasefalphabMeticc!haracter.Feunctionintdigit#؎py(intfc)UReturnf1ifcPjisan!umericcharacter.Feunctionintto#؎uppb"ery(intfc)UIfc.isalo!wercasealphabMeticc!haracter,returnthecorrespondinguppercasec!haracter.Feunctionintto#؎lowery(intfc)UIfcisanuppMercasealphabeticc!haracter,'returnthecorrespondinglo!wercasecharacter.Feunctionintdigit#؎v;aluey(intfc)UIffcPjisan!umbMer,freturnthevdDalueitrepresen!ts.1C̍M2.3.9d(AnMExample!Hereisafunctionwhic!hchangeslowercasecharacterstotheiruppMercaseequivdDalents,)anduppMer-caseEc!haracterstolowercase.zIfthisfunctionwasbMoundto`M-c',thentyping`M-c'wouldchangethecaseofthec!haracterunderpMoint.ڵTyping`M-1f0M-c'wouldchangethecaseofthefollowing10fc!haracters,leavingthecursoronthelastcharacterchanged.U/*InvertthecaseoftheCOUNTfollowingcharacters.*/ UintUinvert_case_line(count,key)9intcount,key;U{(gregisterintstart,end,i;(gstart=rl_point;(gif(rl_point>=rl_end) 3return(0);jChapterf2:ProgrammingwithGNUReadline273ڍЍ(gif(count<0) 3{?fQdirection=-1;?fQcount=-count;3}(gelse3direction=1;(g/*Findtheendoftherangetomodify.*/(gend=start+(count*direction);(g/*Forceittobewithinrange.*/(gif(end>rl_end)3end=rl_end;(gelseif(end<0)3end=0;(gif(start==end)3return(0);(gif(start>end)3{?fQinttemp=start;?fQstart=end;?fQend=temp;3}(g/*Tellreadlinethatwearemodifyingtheline,soitwillsave9theundoinformation.*/(grl_modifying(start,end);(gfor(i=start;i!=end;i++)3{?fQif(uppercase_p(rl_line_buffer[i]))Jrl_line_buffer[i]=to_lower(rl_line_buffer[i]);?fQelseif(lowercase_p(rl_line_buffer[i]))Jrl_line_buffer[i]=to_upper(rl_line_buffer[i]);3}(g/*Movepointtoontopofthelastcharacterchanged.*/(grl_point=(direction==1)?end-1:start;(greturn(0);U}!28]*GNUfReadlineLibrary3ڍЍE2.4CustomMCompleters#zT!ypicallye,aprogramthatreadscommandsfromtheuserhasawayofdisambiguatingcommandsanddata.3Ify!ourprogramisoneofthese,thenitcanprovidecompletionforcommands,data,orbMoth.gTheIfollo!wingsectionsdescribeho!wyourprogramandReadlinecoMoperateItoprovidethisservice.HMM2.4.1d(HowMCompletingWģorksInvordertocompletesometext,thefulllistofpMossiblecompletionsm!ustbea!vdDailable. Thatis,ithisnotpMossibletoaccuratelyexpandapartialw!ordwithoutknowingallofthepMossiblewordswhic!hPmakesenseinthatcontext.TheReadlinelibraryprovidestheuserinterfacetocompletion,andBt!woofthemostcommoncompletionfunctions: lenameandusername.qFeorcompletingothert!ypMesoftext,youmustwriteyourowncompletionfunction.ThissectiondescribMesexactlywhatsuc!hffunctionsmustdo,andprovidesanexample.TherefarethreemajorfunctionsusedtopMerformcompletion:1.dTheruser-in!terfacefunctionrl_completef().̖Thisfunctioniscalledwiththesameargumentsdas:otherReadlinefunctionsin!tendedforinteractiveuse:countwandinvoking/xH'key.Itisolatesdthew!ordtobMecompletedandcallscompletion_matchesf()togeneratealistofpossibledcompletions.8^ItđtheneitherliststhepMossiblecompletions,insertsthepossiblecompletions,ordactuallyfpMerformsthecompletion,dependingonwhic!hbeha!viorisdesired.z2.dTheVin!ternalfunctioncompletion_matchesf()usesyourgeneratorfunctiontogeneratethedlistRwofpMossiblematc!hes,}{andthenreturnsthearrayofthesematches.Yeoushouldplacethedaddressfofy!ourgeneratorfunctioninrl_completion_entry_function.3.dTheWgeneratorfunctioniscalledrepMeatedlyfromcompletion_matchesf(),returningastringdeac!httime.oTheargumentstothegeneratorfunctionaretexttandstate.otextisthepartialdw!ordHtobMecompleted.stateiszerothe rsttimethefunctioniscalled,[}allowingthegeneratordto=pMerforman!ynecessaryinitialization,randapositiv!enon-zerointegerforeachsubsequentdcall.VWhenwthegeneratorfunctionreturns(charf*)NULLthissignalscompletion_matchesd()thattherearenomorepMossibilitiesleft.UsuallythegeneratorfunctioncomputesthelistdofpMossiblecompletionswhenstate{iszero,-andreturnsthemoneatatimeonsubsequen!tdcalls.Eac!hSee͆descriptionofrl_completef().Thiscallsrl_complete_internalf()withUanfargumen!tof`*'.K30]*GNUfReadlineLibrary3ڍЍFeunctionchar**completion#؎matchesy(charf*text,CPFunction2*entry_func)UReturns5uanarra!yof(charf*)whichisalistofcompletionsfortext. IfthereareUno_completions,returns(charf**)NULL. The rsten!tryinthereturnedarrayistheUsubstitution_fortext.PTheremainingen!triesarethepMossiblecompletions.Thearra!yisUterminatedfwithaNULLpMoin!ter."썑Uen!try/xH'funcis֕afunctionoftwoargs,%andreturnsa(charf*).The rstargumentistext.UTheqsecondisastateargumen!t;;itiszeroonthe rstcall,|2andnon-zeroonsubsequentUcalls.Τen!try/xH'func"returnsxaNULLpMointertothecallerwhentherearenomorematches.+čFeunctionchar* lename#؎completion#؎functiony(charf*text,intstate)UA 2generator Xfunctionfor lenamecompletioninthegeneralcase.NotethatcompletionUinZBashisalittledi eren!tbMecauseofallthepathnamesthatmustbMefollowedwhenUloMoking7upcompletionsforacommand. TheBashsourceisausefulreferenceforUwritingfcustomcompletionfunctions.Feunctionchar*username#؎completion#؎functiony(charf*text,intstate)UA`completionxgeneratorforusernames.textCxcon!tainsapartialusernameprecededbyUa%randomc!haracter(usually`~').YAswithallcompletiongenerators,DstateiszeroonUthef rstcallandnon-zeroforsubsequen!tcalls.?LM2.4.3d(CompletionMVģariables.VeariableFunction*rl#؎completion#؎entry#؎functionUA#pMoin!ter#tothegeneratorfunctionforcompletion_matchesf().UNULLmeanstouseUfilename_entry_functionf(),thedefault lenamecompleter..VeariableCPPFunction*rl#؎attempted#؎completion#؎functionUApMoin!tertoanalternativefunctiontocreatematches.ThefunctioniscalledwithUtext,4start,andend.startѥandendareindicesinrl_line_buffersa!yingwhattheUbMoundaries9oftextvare.fIfthisfunctionexistsandreturnsNULL,NorifthisvdDariableissetUtoNULL,thenrl_completef()willcallthevdDalueofrl_completion_entry_functionUtofgeneratematc!hes,otherwisethearrayofstringsreturnedwillbMeused.<Chapterf2:ProgrammingwithGNUReadline313ڍЍ.Veariableintrl#؎completion#؎query#؎itemsUUptothisman!yitemswillbMedisplayedinrespMonsetoapossible-completionscall.UAfterRthat,Lw!easktheuserifsheissureshewantstoseethemall.aThedefaultvdDalueUisf100.+ .Veariablechar*rl#؎basic#؎word#؎break#؎charactersUTheabasiclistofc!haractersthatsignalabreakbMetweenwordsforthecompleterroutine.UThedefaultvdDalueofthisvariableisthec!haracterswhichbreakwordsforcompletionUinfBash,i.e.,"\t\n\"\\'`@$><=;|&{("..Veariablechar*rl#؎completer#؎word#؎break#؎charactersUTheIflistofc!haractersthatsignalabreakbMetweenwordsforrl_complete_internalU().ThefdefaultlististhevdDalueofrl_basic_word_break_characters..Veariablechar*rl#؎spb"ecial#؎pre xesUTheqlistofc!haractersthatarewordbreakcharacters,ٴbutshouldbMeleftintext qwhenUiteispassedtothecompletionfunction.ProgramscanusethistohelpdeterminewhatUkindofcompletingtodo.OFeorinstance,@BashsetsthisvdDariableto"$@"sothatitcanUcompletefshellvdDariablesandhostnames..Veariableintrl#؎ignore#؎completion#؎duplicatesUIffnon-zero,thendisallo!wduplicatesinthematches.Defaultis1..Veariableintrl#؎ lename#؎completion#؎desiredUNon-zeroDmeansthattheresultsofthematc!hesaretobMetreatedas lenames.ThisUistalw!ays)zeroonentrye,xandcanonlybMechangedwithinacompletionentrygeneratorUfunction.>@Ifitissettoanon-zerovdDalue,9:directorynamesha!veaslashappMendedandUReadline`attemptstoquotecompleted lenamesiftheycon!tainanyembMeddedwordUbreakfc!haracters..Veariableintrl#؎ lename#؎quoting#؎desiredUNon-zeromeansthattheresultsofthematc!hesaretobMequotedusingdoublequotesU(oranapplication-spMeci cquotingmec!hanism)ifthecompleted lenamecontainsanyUc!haractersinrl_completer_word_break_chars.Thisisalways9Znon-zeroonentrye,andUcanfonlybMec!hangedwithinacompletionentrygeneratorfunction. 32]*GNUfReadlineLibrary3ڍЍ.VeariableFunction*rl#؎ignore#؎some#؎completions#؎functionUThis.function,Oifde ned,iscalledb!ythecompleterwhenreal lenamecompletionisUdone,after]allthematc!hingnameshavebMeengenerated.ItispassedaNULLterminatedUarra!y)ofmatches.gThe rstelement(matches[0])isthemaximalsubstringcommonUtoallmatc!hes./Thisfunctioncanre-arrangethelistofmatchesasrequired,3buteachUelemen!tfdeletedfromthearraymustbMefreed.'.Veariablechar*rl#؎completer#؎quote#؎charactersUListWofc!haracterswhichcanbMeusedtoquoteasubstringoftheline. CompletionUoMccursontheen!tiresubstring,andwithinthesubstringrl_completer_word_break_Ucharactersfaretreatedasan!yothercharacter,unlesstheyalsoappMearwithinthisUlist.2M2.4.4d(AMShortCompletionExample!HereisasmallapplicationdemonstratingtheuseoftheGNUReadlinelibrarye.0Itiscalledfileman,andthesourcecoMderesidesin`examples/fileman.c'.Thissampleapplicationpro!videscompletionfofcommandnames,lineeditingfeatures,andaccesstothehistorylist.!Chapterf2:ProgrammingwithGNUReadline333ڍЍU/*fileman.c--Atinyapplicationwhichdemonstrateshowtousethe .'SGNUReadlinelibrary. TThisapplicationinteractivelyallowsusers.'Stomanipulatefilesandtheirmodes.*/U#includeU#includeU#includeU#includeU#includeU#includeU#includeUexternchar*getwd();Uexternchar*xmalloc();U/*Thenamesoffunctionsthatactuallydothemanipulation.*/Uintcom_list(),com_view(),com_rename(),com_stat(),com_pwd();Uintcom_delete(),com_help(),com_cd(),com_quit();U/*Astructurewhichcontainsinformationonthecommandsthisprogram.'Scanunderstand.*/Utypedefstruct{(gchar*name;/*Userprintablenameofthefunction.*/(gFunction*func;/*Functiontocalltodothejob.*/(gchar*doc;/*Documentationforthisfunction. T*/U}COMMAND;UCOMMANDcommands[]={(g{"cd",com_cd,"ChangetodirectoryDIR"},(g{"delete",com_delete,"DeleteFILE"},(g{"help",com_help,"Displaythistext"},(g{"?",com_help,"Synonymfor`help'"},(g{"list",com_list,"ListfilesinDIR"},(g{"ls",com_list,"Synonymfor`list'"},(g{"pwd",com_pwd,"Printthecurrentworkingdirectory"},(g{"quit",com_quit,"QuitusingFileman"},(g{"rename",com_rename,"RenameFILEtoNEWNAME"},(g{"stat",com_stat,"PrintoutstatisticsonFILE"},(g{"view",com_view,"ViewthecontentsofFILE"},(g{(char*)NULL,(Function*)NULL,(char*)NULL}U};U/*Forwarddeclarations.*/Uchar*stripwhite();UCOMMAND*find_command();U/*Thenameofthisprogram,astakenfromargv[0].*/Uchar*progname;"34]*GNUfReadlineLibrary3ڍЍU/*Whennon-zero,thisglobalmeanstheuserisdoneusingthisprogram.*/ Uintdone;Uchar*Udupstr(s)9ints;U{(gchar*r;(gr=xmalloc(strlen(s)+1);(gstrcpy(r,s);(greturn(r);U}Umain(argc,argv)9intargc;9char**argv;U{(gchar*line,*s;(gprogname=argv[0];(ginitialize_readline();/*Bindourcompleter.*/(g/*Loopreadingandexecutinglinesuntiltheuserquits.*/(gfor(;done==0;)3{?fQline=readline("FileMan:");?fQif(!line)Jbreak;?fQ/*Removeleadingandtrailingwhitespacefromtheline.POThen,ifthereisanythingleft,addittothehistorylistPOandexecuteit.*/?fQs=stripwhite(line);?fQif(*s)J{Vdadd_history(s);Vdexecute_line(s);J}?fQfree(line);3}(gexit(0);U}U/*Executeacommandline.*/#(2Chapterf2:ProgrammingwithGNUReadline353ڍЍUint Uexecute_line(line)9char*line;U{(gregisterinti;(gCOMMAND*command;(gchar*word;(g/*Isolatethecommandword.*/(gi=0;(gwhile(line[i]&&whitespace(line[i]))3i++;(gword=line+i;(gwhile(line[i]&&!whitespace(line[i]))3i++;(gif(line[i])3line[i++]='\0';(gcommand=find_command(word);(gif(!command)3{?fQfprintf(stderr,"%s:NosuchcommandforFileMan.\n",word);?fQreturn(-1);3}(g/*Getargumenttocommand,ifany.*/(gwhile(whitespace(line[i]))3i++;(gword=line+i;(g/*Callthefunction.*/(greturn((*(command->func))(word));U}U/*LookupNAMEasthenameofacommand,andreturnapointertothat.'Scommand. TReturnaNULLpointerifNAMEisn'tacommandname.*/UCOMMAND*Ufind_command(name)9char*name;U{(gregisterinti;(gfor(i=0;commands[i].name;i++)3if(strcmp(name,commands[i].name)==0)?fQreturn(&commands[i]);$,36]*GNUfReadlineLibrary3ڍЍ(greturn((COMMAND*)NULL); U}U/*StripwhitespacefromthestartandendofSTRING. TReturnapointer.'SintoSTRING.*/Uchar*Ustripwhite(string)9char*string;U{(gregisterchar*s,*t;(gfor(s=string;whitespace(*s);s++)3;(gif(*s==0)3return(s);(gt=s+strlen(s)-1;(gwhile(t>s&&whitespace(*t))3t--;(g*++t='\0';(greturns;U}U/******************************************************************/U/*{i*/U/*gyInterfacetoReadlineCompletion[*/U/*{i*/U/******************************************************************/Uchar*command_generator();Uchar**fileman_completion();U/*TelltheGNUReadlinelibraryhowtocomplete. TWewanttotrytocomplete.'Soncommandnamesifthisisthefirstwordintheline,oronfilenames.'Sifnot.*/Uinitialize_readline()U{(g/*Allowconditionalparsingofthe~/.inputrcfile.*/(grl_readline_name="FileMan";(g/*Tellthecompleterthatwewantacrackfirst.*/(grl_attempted_completion_function=(CPPFunction*)fileman_completion;U}%1Chapterf2:ProgrammingwithGNUReadline373ڍЍU/*AttempttocompleteonthecontentsofTEXT. TSTARTandENDshowthe .'SregionofTEXTthatcontainsthewordtocomplete. TWecanusethe.'Sentirelineincasewewanttodosomesimpleparsing. TReturnthe.'Sarrayofmatches,orNULLiftherearen'tany.*/Uchar**Ufileman_completion(text,start,end)9char*text;9intstart,end;U{(gchar**matches;(gmatches=(char**)NULL;(g/*Ifthiswordisatthestartoftheline,thenitisacommand 9tocomplete. TOtherwiseitisthenameofafileinthecurrent9directory.*/(gif(start==0)3matches=completion_matches(text,command_generator);(greturn(matches);U}U/*Generatorfunctionforcommandcompletion. TSTATEletsusknowwhether.'Stostartfromscratch;withoutanystate(i.e.STATE==0),thenwe.'Sstartatthetopofthelist.*/Uchar*Ucommand_generator(text,state)9char*text;9intstate;U{(gstaticintlist_index,len;(gchar*name;(g/*Ifthisisanewwordtocomplete,initializenow. TThisincludes9savingthelengthofTEXTforefficiency,andinitializingtheindex9variableto0.*/(gif(!state)3{?fQlist_index=0;?fQlen=strlen(text);3}(g/*Returnthenextnamewhichpartiallymatchesfromthecommandlist.*/(gwhile(name=commands[list_index].name)3{?fQlist_index++;?fQif(strncmp(name,text,len)==0)Jreturn(dupstr(name));3}&7'38]*GNUfReadlineLibrary3ڍЍ(g/*Ifnonamesmatched,thenreturnNULL.*/ (greturn((char*)NULL);U}U/******************************************************************/U/*{i*/U/*8FFileManCommands6*/U/*{i*/U/******************************************************************/U/*Stringtopasstosystem(). TThisisfortheLIST,VIEWandRENAME.'Scommands.*/Ustaticcharsyscom[1024];U/*Listthefile(s)namedinarg.*/Ucom_list(arg)9char*arg;U{(gif(!arg)3arg="";(gsprintf(syscom,"ls-FClg%s",arg);(greturn(system(syscom));U}Ucom_view(arg)9char*arg;U{(gif(!valid_argument("view",arg))3return1;(gsprintf(syscom,"more%s",arg);(greturn(system(syscom));U}Ucom_rename(arg)9char*arg;U{(gtoo_dangerous("rename");(greturn(1);U}Ucom_stat(arg)9char*arg;U{(gstructstatfinfo;(gif(!valid_argument("stat",arg))3return(1);'>1Chapterf2:ProgrammingwithGNUReadline393ڍЍ(gif(stat(arg,&finfo)==-1) 3{?fQperror(arg);?fQreturn(1);3}(gprintf("Statisticsfor`%s':\n",arg);(gprintf("%shas%dlink%s,andis%dbyte%sinlength.\n",arg, Vdfinfo.st_nlink,Vd(finfo.st_nlink==1)?"":"s",Vdfinfo.st_size,Vd(finfo.st_size==1)?"":"s");(gprintf("InodeLastChangeat:%s",ctime(&finfo.st_ctime));(gprintf(""}Lastaccessat:%s",ctime(&finfo.st_atime));(gprintf("Lastmodifiedat:%s",ctime(&finfo.st_mtime));(greturn(0);U}Ucom_delete(arg)9char*arg;U{(gtoo_dangerous("delete");(greturn(1);U}U/*PrintouthelpforARG,orforallofthecommandsifARGis.'Snotpresent.*/Ucom_help(arg)9char*arg;U{(gregisterinti;(gintprinted=0;(gfor(i=0;commands[i].name;i++)3{?fQif(!*arg||(strcmp(arg,commands[i].name)==0))J{Vdprintf("%s\t\t%s.\n",commands[i].name,commands[i].doc);Vdprinted++;J}3}(gif(!printed)3{?fQprintf("Nocommandsmatch`%s'. TPossibiltiesare:\n",arg);(C!40]*GNUfReadlineLibrary3ڍЍ?fQfor(i=0;commands[i].name;i++) J{Vd/*Printinsixcolumns.*/Vdif(printed==6)aM{mcprinted=0;mcprintf("\n");aM}Vdprintf("%s\t",commands[i].name);Vdprinted++;J}?fQif(printed)Jprintf("\n");3}(greturn(0);U}U/*ChangetothedirectoryARG.*/Ucom_cd(arg)9char*arg;U{(gif(chdir(arg)==-1)3{?fQperror(arg);?fQreturn1;3}(gcom_pwd("");(greturn(0);U}U/*Printoutthecurrentworkingdirectory.*/Ucom_pwd(ignore)9char*ignore;U{(gchardir[1024],*s;(gs=getwd(dir);(gif(s==0)3{?fQprintf("Errorgettingpwd:%s\n",dir);?fQreturn1;3}(gprintf("Currentdirectoryis%s\n",dir);(greturn0;U})H~Chapterf2:ProgrammingwithGNUReadline413ڍЍU/*Theuserwishestoquitusingthisprogram. TJustsetDONEnon-zero.*/ Ucom_quit(arg)9char*arg;U{(gdone=1;(greturn(0);U}U/*Functionwhichtellsyouthatyoucan'tdothis.*/Utoo_dangerous(caller)9char*caller;U{(gfprintf(stderr,\$"%s:Toodangerousformetodistribute. TWriteityourself.\n",\$caller);U}U/*Returnnon-zeroifARGisavalidargumentforCALLER,elseprint.'Sanerrormessageandreturnzero.*/UintUvalid_argument(caller,arg)9char*caller,*arg;U{(gif(!arg||!*arg)3{?fQfprintf(stderr,"%s:Argumentrequired.\n",caller);?fQreturn(0);3}(greturn(1);U}*L42]*GNUfReadlineLibrary3ڟ+P*ConceptfIndexظ433ڍЍConceptMIndex\(EIo cmr9in9teraction,Treadlinea)U5" cmmi9:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:1EKKillTringKU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:}I3KillingTtext,䍑U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:^3 ER readline,Tfunction)U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:[U15( EY Y:ankingTtextFU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:xf3,P44]*GNUfReadlineLibrary3ڟ-X%FeunctionfandVariableIndexAR453ڍЍFaGunctionMandVariableIndex V,$E$ߤN cmtt9$elseHU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:zu8$endif_U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: :8$ifU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:7C̍EAabortT(C-g)ڍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:A13accept-lineT(Newline,Return)܍U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:뗬9alphabeticLU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:25C̍EBbackward-charT(C-b)AU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:8backward-delete-charT(Rubout),U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:10backward-kill-lineT(C-xRubout)'U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 11backward-kill-wordT(M-DEL)U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:h11backward-wordT(M-b)AU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:8beginning-of-historyT(M-<)tU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:/9beginning-of-lineT(C-a)-U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:8bAell-st9yleU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:PO5C̍ECcall-last-kbd-macroT(C-xe);U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:F12capitalize-wordT(M-c) TU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:>11clear-screenT(C-l)9ԍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:k9commen9t-bAeginжU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: q5completeT(TAB)$!U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Uܬ12completion-query-itemsU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:6completion$c4ŽfmatchesDU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:29con9vert-meta"~U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:T95C̍EDdelete-charT(C-d)FU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:x[10delete-horizontal-spaceT()U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:h11digit-argumentT(M-0,M-1,...M--)xU:pU:U:U:U:U:U:U:U:U:U:U:U:U:312digit$c4Žfp%U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:D26digit$c4ŽfvalueU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:̬26dingUU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:A25do-uppercase-versionT(M-a,M-b,...)2iU:pU:U:U:U:U:U:U:U:U:U:d$13downcase-wordT(M-l)zU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:511,$ dump-functionsT()FU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:x[13a捒 EE editing-moAde%)U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:V5 end-kbd-macroT(C-x))uU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:012 end-of-historyT(M->)U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:i9 end-of-lineT(C-e)gU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:"8 expand-tilden U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Ƭ6 EF filename$c4Žfcompletion$c4ŽfunctionuU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Ѭ30 forward-charT(C-f)9ԍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:k8 forward-search-historyT(C-s)6NU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:h 9 forward-wordT(M-f)9ԍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:k8 free$c4Žfundo$c4ŽlistU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:k23 EH history-search-backwardT()tU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:/9 history-search-forwardT()"U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:S¬9 horizon9tal-scroll-moAde:U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:lO5 EI insert-completionsT() TU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:>12 EK k9eymap(U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:6 kill-lineT(C-k)ƍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 11 kill-whole-lineT() U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:)Ȭ11 kill-wordT(M-d)ƍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 11 EL lowercase$c4ŽfpU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:̬26 EM mark-moAdi ed-lines#U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:3ݬ5 meta- agaU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:5 EN next-historyT(C-n)9ԍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:k9.X46]*GNUfReadlineLibrary3ڍ|&,$non-incremental-forward-search-historyT(M-n)wƍU:pU:9non-incremental-reverse-search-historyT(M-p)wƍU:pU:9numericxU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:25̍EOoutput-metaMU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:T5EPpossible-completionsT(M-?)U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:h12prefix-metaT(ESC)FU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:x[13previous-historyT(C-p) U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: ?{9̍EQquoted-insertT(C-q,C-v)U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 210ERre-read-init-fileT(C-xC-r);U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:F13readline)rU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:[-15redraw-current-lineT() U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: ?{9reverse-search-historyT(C-r)6NU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:h 9revert-lineT(M-r)FU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:x[13rl$c4Žfadd$c4ŽdefunA֍U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:s20rl$c4Žfadd$c4ŽundoiU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:$23rl$c4Žfattempted$c4Žcompletion$c4Žfunction}U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:k30rl$c4Žfbasic$c4Žword$c4Žbreak$c4ŽcharactersÂU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:31rl$c4Žfbegin$c4Žundo$c4ŽgroupaU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 23rl$c4Žfbind$c4ŽkeyiU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:$21rl$c4Žfbind$c4Žkey$c4Žin$c4ŽmapU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Ϭ21rl$c4Žfclear$c4ŽmessageU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:9E25rl$c4ŽfcompletefU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:!28,T29rl$c4Žfcomplete$c4ŽinternalvU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 129rl$c4Žfcompleter$c4Žquote$c4ŽcharactershU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:$32rl$c4Žfcompleter$c4Žword$c4Žbreak$c4Žcharacters6U:pU:U:U:U:U:U:U:U:U:U:U:U:31rl$c4Žfcompletion$c4Žentry$c4ŽfunctionnmU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Ԭ29,T30rl$c4Žfcompletion$c4Žquery$c4ŽitemsэU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:830rl$c4Žfcopy$c4ŽkeymapU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:k20rl$c4Žfcopy$c4ŽtextA֍U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:s25rl$c4Žfdelete$c4ŽtextU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:k25rl$c4Žfdiscard$c4Žkeymap/U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:20rl$c4Žfdo$c4ŽundoU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 24rl$c4ŽfdoneU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:n18rl$c4ŽfendU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:18rl$c4Žfend$c4Žundo$c4ŽgroupbOU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 23,$ rl$c4Žffilename$c4Žcompletion$c4Ždesired*U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:631 rl$c4Žffilename$c4Žquoting$c4Ždesired㍑U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: "J31 rl$c4Žfforced$c4Župdate$c4ŽdisplayJU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:|=24 rl$c4Žffunction$c4Žof$c4Žkeyseq6;U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:g22 rl$c4Žfgeneric$c4ŽbindVU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:ج22 rl$c4Žfget$c4ŽkeymapCU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:$21 rl$c4Žfget$c4Žkeymap$c4Žby$c4ŽnameߓU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: N21 rl$c4Žfignore$c4Žcompletion$c4Žduplicates˗U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:31 rl$c4Žfignore$c4Žsome$c4Žcompletions$c4Žfunction:U:pU:U:U:U:U:U:U:U:U:U:U:W 31 rl$c4Žfinsert$c4Žcompletions㍑U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:29 rl$c4Žfinsert$c4ŽtextU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:k25 rl$c4ŽfinstreamU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Z19 rl$c4Žfinvoking$c4Žkeyseqs* U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:[Ĭ22 rl$c4Žfinvoking$c4Žkeyseqs$c4Žin$c4ŽmapVU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:o22 rl$c4Žfkill$c4ŽtextA֍U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:s25 rl$c4Žfline$c4Žbuffer=U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Y18 rl$c4Žfmake$c4Žbare$c4ŽkeymapaU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 20 rl$c4Žfmake$c4ŽkeymapU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:k20 rl$c4ŽfmarkU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:n18 rl$c4Žfmessage5U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:g_24 rl$c4Žfmodifying~U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:924 rl$c4Žfnamed$c4Žfunction/U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:22 rl$c4Žfon$c4Žnew$c4ŽlineNU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:ì24 rl$c4Žfoutstream1`U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:MǬ19 rl$c4Žfparse$c4Žand$c4ŽbindbOU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 22 rl$c4Žfpending$c4ŽinputlU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Ӭ19 rl$c4Žfpoint]tU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:y۬18 rl$c4Žfpossible$c4ŽcompletionsU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: /29 rl$c4ŽfpromptU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 919 rl$c4Žfreadline$c4ŽnamelU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Ӭ19 rl$c4Žfredisplay~U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:924 rl$c4Žfreset$c4Žline$c4ŽstateaU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 24 rl$c4Žfreset$c4Žterminal/U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:25 rl$c4Žfset$c4ŽkeymapCU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:$21 rl$c4Žfspecial$c4Žprefixes덑U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:R31 rl$c4Žfstartup$c4ŽhookU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: f19 rl$c4Žfterminal$c4ŽnamelU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Ӭ19 rl$c4Žfunbind$c4ŽkeyCU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:$21 rl$c4Žfunbind$c4Žkey$c4Žin$c4ŽmapU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Q21%0 ES self-insertT(a,b,A,1,!,...)ƨU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:c10 sho9w-all-if-ambiguousaǍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:6/RFeunctionfandVariableIndexAR473ڍBЍfstart-kbd-macroT(C-x()AOU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:s 12ETtab-insertT(M-TAB) U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:)Ȭ10tilde-expandT(M-~) U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:)Ȭ13to$c4ŽflowerʍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 26to$c4ŽfupperʍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 26transpose-charsT(C-t) TU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:>10transpose-wordsT(M-t) TU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:>10EUundoT(C-$c4Žf,C-xC-u)܍U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:13f universal-argumentT() TU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:>12 unix-line-discardT(C-u)}fU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:!11 unix-word-ruboutT(C-w)U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:11 upcase-wordT(M-u)FU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:x[10 uppercase$c4ŽfpU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:̬26 username$c4Žfcompletion$c4ŽfunctionuU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Ѭ30 EY yankT(C-y)^mU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:(11 yank-last-argT(M-.,M-$c4Žf)U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Ϭ10 yank-nth-argT(M-C-y)Z獑U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:10 yank-popT(M-y)$!U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Uܬ110Ս48]*GNUfReadlineLibrary3ڟ TҶi3ڍЍTaGableMofConutents*E132CommandffLineEditing32Kgff cmmi12K:Q 32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32: nE1$1.1 5In!troMductionftoLineEditing[w9 b> 3 cmmi10:ۍ::::::::::::::::::::::::::::::::::::::߮1$1.2 5ReadlinefIn!teraction덑:ۍ:::::::::::::::::::::::::::::::::::::::::::::: "1H1.2.1 5ReadlinefBareEssen!tials:ۍ:::::::::::::::::::::::::::::::: 2H1.2.2 5ReadlinefMo!vementCommands0L:ۍ::::::::::::::::::::::::: 2H1.2.3 5ReadlinefKillingCommandsɍ:ۍ::::::::::::::::::::::::::::: 3H1.2.4 5ReadlinefArgumen!ts2X:ۍ:::::::::::::::::::::::::::::::::::::4$1.3 5ReadlinefInitFileY:ۍ:::::::::::::::::::::::::::::::::::::::::::::::: 4H1.3.1 5ReadlinefInitSyn!taxY:ۍ:::::::::::::::::::::::::::::::::::: G4H1.3.2 5ConditionalfInitConstructs8:ۍ::::::::::::::::::::::::::::: R7$1.4 5BindablefReadlineCommandsA(:ۍ:::::::::::::::::::::::::::::::::::: `8H1.4.1 5CommandsfFeorMo!ving d:ۍ::::::::::::::::::::::::::::::::::8H1.4.2 5CommandsfFeorManipulatingTheHistory7:ۍ::::::::::::::: F9H1.4.3 5CommandsfFeorChangingTexti:ۍ::::::::::::::::::::::::: 10H1.4.4 5KillingfAndYeanking:ۍ::::::::::::::::::::::::::::::::::: )11H1.4.5 5SpMecifyingfNumericArgumen!tsݓ:ۍ::::::::::::::::::::::::: a12H1.4.6 5LettingfReadlineT!ypMeFeorYou::ۍ:::::::::::::::::::::::::G12H1.4.7 5KeybMoardfMacrosRt:ۍ:::::::::::::::::::::::::::::::::::::: ֫12H1.4.8 5SomefMiscellaneousCommandsQ:ۍ:::::::::::::::::::::::: j13$1.5 5ReadlinefviMoMde7:ۍ::::::::::::::::::::::::::::::::::::::::::::::: |n13E232ProgrammingffwithGNUReadline v32K:Q 32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:E15$2.1 5BasicfBeha!viork:ۍ:::::::::::::::::::::::::::::::::::::::::::::::::: 15$2.2 5CustomfFeunctions>:ۍ::::::::::::::::::::::::::::::::::::::::::::::: u17H2.2.1 5ThefFeunctionT!ypMe8':ۍ:::::::::::::::::::::::::::::::::::: _17H2.2.2 5WeritingfaNewFunctiona :ۍ::::::::::::::::::::::::::::::::A18$2.3 5ReadlinefCon!venienceFeunctionsG:ۍ::::::::::::::::::::::::::::::::: w19H2.3.1 5NamingfaFeunction:ۍ:::::::::::::::::::::::::::::::::::::O19H2.3.2 5SelectingfaKeymap&:ۍ:::::::::::::::::::::::::::::::::::: ]20H2.3.3 5BindingfKeys:ۍ:::::::::::::::::::::::::::::::::::::::::: ?21H2.3.4 5AssoMciatingfFeunctionNamesandBindings:ۍ:::::::::::::: +722H2.3.5 5Allo!wingfUndoingL:ۍ:::::::::::::::::::::::::::::::::::::: J23H2.3.6 5Redispla!y卑:ۍ:::::::::::::::::::::::::::::::::::::::::::::: 24H2.3.7 5MoMdifyingfTeext׍:ۍ:::::::::::::::::::::::::::::::::::::::: [25H2.3.8 5Utilit!yfFeunctions :ۍ::::::::::::::::::::::::::::::::::::::: /D25H2.3.9 5AnfExamplee:ۍ::::::::::::::::::::::::::::::::::::::::::: G26$2.4 5CustomfCompletersg:ۍ::::::::::::::::::::::::::::::::::::::::::::: 28 iibGNUfReadlineLibrary3ڍ&H2.4.1 5Ho!wfCompletingWeorksVQ:ۍ:::::::::::::::::::::::::::::::: ڈ28H2.4.2 5CompletionfFeunctions:ۍ:::::::::::::::::::::::::::::::::: V+29H2.4.3 5CompletionfVeariables:ۍ:::::::::::::::::::::::::::::::::: 630H2.4.4 5AfShortCompletionExampled:ۍ:::::::::::::::::::::::::: C32EConceptffIndex\32K:Q 32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32: E43!FfunctionffandVariableIndex[B32K:Q 32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32: E45;_;3G4UNj cmbx12MN # cmbx12Kgff cmmi12ENff cmbx12=NG cmbx12< 3 cmmi107m#R 3 cmss106p0J 3 cmsl103