12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372193731937419375193761937719378193791938019381193821938319384193851938619387193881938919390193911939219393193941939519396193971939819399194001940119402194031940419405194061940719408194091941019411194121941319414194151941619417194181941919420194211942219423194241942519426194271942819429194301943119432194331943419435194361943719438194391944019441194421944319444194451944619447194481944919450194511945219453194541945519456194571945819459194601946119462194631946419465194661946719468194691947019471194721947319474194751947619477194781947919480194811948219483194841948519486194871948819489194901949119492194931949419495194961949719498194991950019501195021950319504195051950619507195081950919510195111951219513195141951519516195171951819519195201952119522195231952419525195261952719528195291953019531195321953319534195351953619537195381953919540195411954219543195441954519546195471954819549195501955119552195531955419555195561955719558195591956019561195621956319564195651956619567195681956919570195711957219573195741957519576195771957819579195801958119582195831958419585195861958719588195891959019591195921959319594195951959619597195981959919600196011960219603196041960519606196071960819609196101961119612196131961419615196161961719618196191962019621196221962319624196251962619627196281962919630196311963219633196341963519636196371963819639196401964119642196431964419645196461964719648196491965019651196521965319654196551965619657196581965919660196611966219663196641966519666196671966819669196701967119672196731967419675196761967719678196791968019681196821968319684196851968619687196881968919690196911969219693196941969519696196971969819699197001970119702197031970419705197061970719708197091971019711197121971319714197151971619717197181971919720197211972219723197241972519726197271972819729197301973119732197331973419735197361973719738197391974019741197421974319744197451974619747197481974919750197511975219753197541975519756197571975819759197601976119762197631976419765197661976719768197691977019771197721977319774197751977619777197781977919780197811978219783197841978519786197871978819789197901979119792197931979419795197961979719798197991980019801198021980319804198051980619807198081980919810198111981219813198141981519816198171981819819198201982119822198231982419825198261982719828198291983019831198321983319834198351983619837198381983919840198411984219843198441984519846198471984819849198501985119852198531985419855198561985719858198591986019861198621986319864198651986619867198681986919870198711987219873198741987519876198771987819879198801988119882198831988419885198861988719888198891989019891198921989319894198951989619897198981989919900199011990219903199041990519906199071990819909199101991119912199131991419915199161991719918199191992019921199221992319924199251992619927199281992919930199311993219933199341993519936199371993819939199401994119942199431994419945199461994719948199491995019951199521995319954199551995619957199581995919960199611996219963199641996519966199671996819969199701997119972199731997419975199761997719978199791998019981199821998319984199851998619987199881998919990199911999219993199941999519996199971999819999200002000120002200032000420005200062000720008200092001020011200122001320014200152001620017200182001920020200212002220023200242002520026200272002820029200302003120032200332003420035200362003720038200392004020041200422004320044200452004620047200482004920050200512005220053200542005520056200572005820059200602006120062200632006420065200662006720068200692007020071200722007320074200752007620077200782007920080200812008220083200842008520086200872008820089200902009120092200932009420095200962009720098200992010020101201022010320104201052010620107201082010920110201112011220113201142011520116201172011820119201202012120122201232012420125201262012720128201292013020131201322013320134201352013620137201382013920140201412014220143201442014520146201472014820149201502015120152201532015420155201562015720158201592016020161201622016320164201652016620167201682016920170201712017220173201742017520176201772017820179201802018120182201832018420185201862018720188201892019020191201922019320194201952019620197201982019920200202012020220203202042020520206202072020820209202102021120212202132021420215202162021720218202192022020221202222022320224202252022620227202282022920230202312023220233202342023520236202372023820239202402024120242202432024420245202462024720248202492025020251202522025320254202552025620257202582025920260202612026220263202642026520266202672026820269202702027120272202732027420275202762027720278202792028020281202822028320284202852028620287202882028920290202912029220293202942029520296202972029820299203002030120302203032030420305203062030720308203092031020311203122031320314203152031620317203182031920320203212032220323203242032520326203272032820329203302033120332203332033420335203362033720338203392034020341203422034320344203452034620347203482034920350203512035220353203542035520356203572035820359203602036120362203632036420365203662036720368203692037020371203722037320374203752037620377203782037920380203812038220383203842038520386203872038820389203902039120392203932039420395203962039720398203992040020401 |
- ;;; org.el --- Outline-based notes management and organizer
- ;; Carstens outline-mode for keeping track of everything.
- ;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
- ;; Free Software Foundation, Inc.
- ;;
- ;; Author: Carsten Dominik <carsten at orgmode dot org>
- ;; Keywords: outlines, hypermedia, calendar, wp
- ;; Homepage: http://orgmode.org
- ;; Version: 7.6
- ;;
- ;; 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/>.
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;
- ;;; Commentary:
- ;;
- ;; Org-mode is a mode for keeping notes, maintaining ToDo lists, and doing
- ;; project planning with a fast and effective plain-text system.
- ;;
- ;; Org-mode develops organizational tasks around NOTES files that contain
- ;; information about projects as plain text. Org-mode is implemented on
- ;; top of outline-mode, which makes it possible to keep the content of
- ;; large files well structured. Visibility cycling and structure editing
- ;; help to work with the tree. Tables are easily created with a built-in
- ;; table editor. Org-mode supports ToDo items, deadlines, time stamps,
- ;; and scheduling. It dynamically compiles entries into an agenda that
- ;; utilizes and smoothly integrates much of the Emacs calendar and diary.
- ;; Plain text URL-like links connect to websites, emails, Usenet
- ;; messages, BBDB entries, and any files related to the projects. For
- ;; printing and sharing of notes, an Org-mode file can be exported as a
- ;; structured ASCII file, as HTML, or (todo and agenda items only) as an
- ;; iCalendar file. It can also serve as a publishing tool for a set of
- ;; linked webpages.
- ;;
- ;; Installation and Activation
- ;; ---------------------------
- ;; See the corresponding sections in the manual at
- ;;
- ;; http://orgmode.org/org.html#Installation
- ;;
- ;; Documentation
- ;; -------------
- ;; The documentation of Org-mode can be found in the TeXInfo file. The
- ;; distribution also contains a PDF version of it. At the homepage of
- ;; Org-mode, you can read the same text online as HTML. There is also an
- ;; excellent reference card made by Philip Rooke. This card can be found
- ;; in the etc/ directory of Emacs 22.
- ;;
- ;; A list of recent changes can be found at
- ;; http://orgmode.org/Changes.html
- ;;
- ;;; Code:
- (defvar org-inhibit-highlight-removal nil) ; dynamically scoped param
- (defvar org-table-formula-constants-local nil
- "Local version of `org-table-formula-constants'.")
- (make-variable-buffer-local 'org-table-formula-constants-local)
- ;;;; Require other packages
- (eval-when-compile
- (require 'cl)
- (require 'gnus-sum))
- (require 'calendar)
- ;; Emacs 22 calendar compatibility: Make sure the new variables are available
- (when (fboundp 'defvaralias)
- (unless (boundp 'calendar-view-holidays-initially-flag)
- (defvaralias 'calendar-view-holidays-initially-flag
- 'view-calendar-holidays-initially))
- (unless (boundp 'calendar-view-diary-initially-flag)
- (defvaralias 'calendar-view-diary-initially-flag
- 'view-diary-entries-initially))
- (unless (boundp 'diary-fancy-buffer)
- (defvaralias 'diary-fancy-buffer 'fancy-diary-buffer)))
- (require 'outline) (require 'noutline)
- ;; Other stuff we need.
- (require 'time-date)
- (unless (fboundp 'time-subtract) (defalias 'time-subtract 'subtract-time))
- (require 'easymenu)
- (require 'overlay)
- (require 'org-macs)
- (require 'org-entities)
- (require 'org-compat)
- (require 'org-faces)
- (require 'org-list)
- (require 'org-pcomplete)
- (require 'org-src)
- (require 'org-footnote)
- (declare-function org-inlinetask-at-task-p "org-inlinetask" ())
- (declare-function org-inlinetask-outline-regexp "org-inlinetask" ())
- (declare-function org-inlinetask-toggle-visibility "org-inlinetask" ())
- ;; babel
- (require 'ob)
- (require 'ob-table)
- (require 'ob-lob)
- (require 'ob-ref)
- (require 'ob-tangle)
- (require 'ob-comint)
- (require 'ob-keys)
- ;; load languages based on value of `org-babel-load-languages'
- (defvar org-babel-load-languages)
- ;;;###autoload
- (defun org-babel-do-load-languages (sym value)
- "Load the languages defined in `org-babel-load-languages'."
- (set-default sym value)
- (mapc (lambda (pair)
- (let ((active (cdr pair)) (lang (symbol-name (car pair))))
- (if active
- (progn
- (require (intern (concat "ob-" lang))))
- (progn
- (funcall 'fmakunbound
- (intern (concat "org-babel-execute:" lang)))
- (funcall 'fmakunbound
- (intern (concat "org-babel-expand-body:" lang)))))))
- org-babel-load-languages))
- (defcustom org-babel-load-languages '((emacs-lisp . t))
- "Languages which can be evaluated in Org-mode buffers.
- This list can be used to load support for any of the languages
- below, note that each language will depend on a different set of
- system executables and/or Emacs modes. When a language is
- \"loaded\", then code blocks in that language can be evaluated
- with `org-babel-execute-src-block' bound by default to C-c
- C-c (note the `org-babel-no-eval-on-ctrl-c-ctrl-c' variable can
- be set to remove code block evaluation from the C-c C-c
- keybinding. By default only Emacs Lisp (which has no
- requirements) is loaded."
- :group 'org-babel
- :set 'org-babel-do-load-languages
- :type '(alist :tag "Babel Languages"
- :key-type
- (choice
- (const :tag "Awk" awk)
- (const :tag "C" C)
- (const :tag "R" R)
- (const :tag "Asymptote" asymptote)
- (const :tag "Calc" calc)
- (const :tag "Clojure" clojure)
- (const :tag "CSS" css)
- (const :tag "Ditaa" ditaa)
- (const :tag "Dot" dot)
- (const :tag "Emacs Lisp" emacs-lisp)
- (const :tag "Gnuplot" gnuplot)
- (const :tag "Haskell" haskell)
- (const :tag "Javascript" js)
- (const :tag "Latex" latex)
- (const :tag "Ledger" ledger)
- (const :tag "Lilypond" lilypond)
- (const :tag "Maxima" maxima)
- (const :tag "Matlab" matlab)
- (const :tag "Mscgen" mscgen)
- (const :tag "Ocaml" ocaml)
- (const :tag "Octave" octave)
- (const :tag "Org" org)
- (const :tag "Perl" perl)
- (const :tag "PlantUML" plantuml)
- (const :tag "Python" python)
- (const :tag "Ruby" ruby)
- (const :tag "Sass" sass)
- (const :tag "Scheme" scheme)
- (const :tag "Screen" screen)
- (const :tag "Shell Script" sh)
- (const :tag "Sql" sql)
- (const :tag "Sqlite" sqlite))
- :value-type (boolean :tag "Activate" :value t)))
- ;;;; Customization variables
- (defcustom org-clone-delete-id nil
- "Remove ID property of clones of a subtree.
- When non-nil, clones of a subtree don't inherit the ID property.
- Otherwise they inherit the ID property with a new unique
- identifier."
- :type 'boolean
- :group 'org-id)
- ;;; Version
- (defconst org-version "7.6"
- "The version number of the file org.el.")
- (defun org-version (&optional here)
- "Show the org-mode version in the echo area.
- With prefix arg HERE, insert it at point."
- (interactive "P")
- (let* ((origin default-directory)
- (version org-version)
- (git-version)
- (dir (concat (file-name-directory (locate-library "org")) "../" )))
- (when (and (file-exists-p (expand-file-name ".git" dir))
- (executable-find "git"))
- (unwind-protect
- (progn
- (cd dir)
- (when (eql 0 (shell-command "git describe --abbrev=4 HEAD"))
- (with-current-buffer "*Shell Command Output*"
- (goto-char (point-min))
- (setq git-version (buffer-substring (point) (point-at-eol))))
- (subst-char-in-string ?- ?. git-version t)
- (when (string-match "\\S-"
- (shell-command-to-string
- "git diff-index --name-only HEAD --"))
- (setq git-version (concat git-version ".dirty")))
- (setq version (concat version " (" git-version ")"))))
- (cd origin)))
- (setq version (format "Org-mode version %s" version))
- (if here (insert version))
- (message version)))
- ;;; Compatibility constants
- ;;; The custom variables
- (defgroup org nil
- "Outline-based notes management and organizer."
- :tag "Org"
- :group 'outlines
- :group 'calendar)
- (defcustom org-mode-hook nil
- "Mode hook for Org-mode, run after the mode was turned on."
- :group 'org
- :type 'hook)
- (defcustom org-load-hook nil
- "Hook that is run after org.el has been loaded."
- :group 'org
- :type 'hook)
- (defvar org-modules) ; defined below
- (defvar org-modules-loaded nil
- "Have the modules been loaded already?")
- (defun org-load-modules-maybe (&optional force)
- "Load all extensions listed in `org-modules'."
- (when (or force (not org-modules-loaded))
- (mapc (lambda (ext)
- (condition-case nil (require ext)
- (error (message "Problems while trying to load feature `%s'" ext))))
- org-modules)
- (setq org-modules-loaded t)))
- (defun org-set-modules (var value)
- "Set VAR to VALUE and call `org-load-modules-maybe' with the force flag."
- (set var value)
- (when (featurep 'org)
- (org-load-modules-maybe 'force)))
- (when (org-bound-and-true-p org-modules)
- (let ((a (member 'org-infojs org-modules)))
- (and a (setcar a 'org-jsinfo))))
- (defcustom org-modules '(org-bbdb org-bibtex org-docview org-gnus org-info org-jsinfo org-irc org-mew org-mhe org-rmail org-vm org-w3m org-wl)
- "Modules that should always be loaded together with org.el.
- If a description starts with <C>, the file is not part of Emacs
- and loading it will require that you have downloaded and properly installed
- the org-mode distribution.
- You can also use this system to load external packages (i.e. neither Org
- core modules, nor modules from the CONTRIB directory). Just add symbols
- to the end of the list. If the package is called org-xyz.el, then you need
- to add the symbol `xyz', and the package must have a call to
- (provide 'org-xyz)"
- :group 'org
- :set 'org-set-modules
- :type
- '(set :greedy t
- (const :tag " bbdb: Links to BBDB entries" org-bbdb)
- (const :tag " bibtex: Links to BibTeX entries" org-bibtex)
- (const :tag " crypt: Encryption of subtrees" org-crypt)
- (const :tag " ctags: Access to Emacs tags with links" org-ctags)
- (const :tag " docview: Links to doc-view buffers" org-docview)
- (const :tag " gnus: Links to GNUS folders/messages" org-gnus)
- (const :tag " id: Global IDs for identifying entries" org-id)
- (const :tag " info: Links to Info nodes" org-info)
- (const :tag " jsinfo: Set up Sebastian Rose's JavaScript org-info.js" org-jsinfo)
- (const :tag " habit: Track your consistency with habits" org-habit)
- (const :tag " inlinetask: Tasks independent of outline hierarchy" org-inlinetask)
- (const :tag " irc: Links to IRC/ERC chat sessions" org-irc)
- (const :tag " mac-message: Links to messages in Apple Mail" org-mac-message)
- (const :tag " mew Links to Mew folders/messages" org-mew)
- (const :tag " mhe: Links to MHE folders/messages" org-mhe)
- (const :tag " protocol: Intercept calls from emacsclient" org-protocol)
- (const :tag " rmail: Links to RMAIL folders/messages" org-rmail)
- (const :tag " special-blocks: Turn blocks into LaTeX envs and HTML divs" org-special-blocks)
- (const :tag " vm: Links to VM folders/messages" org-vm)
- (const :tag " wl: Links to Wanderlust folders/messages" org-wl)
- (const :tag " w3m: Special cut/paste from w3m to Org-mode." org-w3m)
- (const :tag " mouse: Additional mouse support" org-mouse)
- (const :tag " TaskJuggler: Export tasks to a TaskJuggler project" org-taskjuggler)
- (const :tag "C annotate-file: Annotate a file with org syntax" org-annotate-file)
- (const :tag "C bookmark: Org-mode links to bookmarks" org-bookmark)
- (const :tag "C checklist: Extra functions for checklists in repeated tasks" org-checklist)
- (const :tag "C choose: Use TODO keywords to mark decisions states" org-choose)
- (const :tag "C collector: Collect properties into tables" org-collector)
- (const :tag "C depend: TODO dependencies for Org-mode\n\t\t\t(PARTIALLY OBSOLETE, see built-in dependency support))" org-depend)
- (const :tag "C drill: Flashcards and spaced repetition for Org-mode" org-drill)
- (const :tag "C elisp-symbol: Org-mode links to emacs-lisp symbols" org-elisp-symbol)
- (const :tag "C eshell Support for links to working directories in eshell" org-eshell)
- (const :tag "C eval: Include command output as text" org-eval)
- (const :tag "C eval-light: Evaluate inbuffer-code on demand" org-eval-light)
- (const :tag "C expiry: Expiry mechanism for Org-mode entries" org-expiry)
- (const :tag "C exp-bibtex: Export citations using BibTeX" org-exp-bibtex)
- (const :tag "C git-link: Provide org links to specific file version" org-git-link)
- (const :tag "C interactive-query: Interactive modification of tags query\n\t\t\t(PARTIALLY OBSOLETE, see secondary filtering)" org-interactive-query)
- (const :tag "C invoice: Help manage client invoices in Org-mode" org-invoice)
- (const :tag "C jira: Add a jira:ticket protocol to Org-mode" org-jira)
- (const :tag "C learn: SuperMemo's incremental learning algorithm" org-learn)
- (const :tag "C mairix: Hook mairix search into Org-mode for different MUAs" org-mairix)
- (const :tag "C notmuch: Provide org links to notmuch searches or messages" org-notmuch)
- (const :tag "C mac-iCal Imports events from iCal.app to the Emacs diary" org-mac-iCal)
- (const :tag "C mac-link-grabber Grab links and URLs from various Mac applications" org-mac-link-grabber)
- (const :tag "C man: Support for links to manpages in Org-mode" org-man)
- (const :tag "C mtags: Support for muse-like tags" org-mtags)
- (const :tag "C odt: OpenDocumentText exporter for Org-mode" org-odt)
- (const :tag "C panel: Simple routines for us with bad memory" org-panel)
- (const :tag "C registry: A registry for Org-mode links" org-registry)
- (const :tag "C org2rem: Convert org appointments into reminders" org2rem)
- (const :tag "C screen: Visit screen sessions through Org-mode links" org-screen)
- (const :tag "C secretary: Team management with org-mode" org-secretary)
- (const :tag "C sqlinsert: Convert Org-mode tables to SQL insertions" orgtbl-sqlinsert)
- (const :tag "C toc: Table of contents for Org-mode buffer" org-toc)
- (const :tag "C track: Keep up with Org-mode development" org-track)
- (const :tag "C velocity Something like Notational Velocity for Org" org-velocity)
- (const :tag "C wikinodes: CamelCase wiki-like links" org-wikinodes)
- (repeat :tag "External packages" :inline t (symbol :tag "Package"))))
- (defcustom org-support-shift-select nil
- "Non-nil means make shift-cursor commands select text when possible.
- In Emacs 23, when `shift-select-mode' is on, shifted cursor keys start
- selecting a region, or enlarge regions started in this way.
- In Org-mode, in special contexts, these same keys are used for other
- purposes, important enough to compete with shift selection. Org tries
- to balance these needs by supporting `shift-select-mode' outside these
- special contexts, under control of this variable.
- The default of this variable is nil, to avoid confusing behavior. Shifted
- cursor keys will then execute Org commands in the following contexts:
- - on a headline, changing TODO state (left/right) and priority (up/down)
- - on a time stamp, changing the time
- - in a plain list item, changing the bullet type
- - in a property definition line, switching between allowed values
- - in the BEGIN line of a clock table (changing the time block).
- Outside these contexts, the commands will throw an error.
- When this variable is t and the cursor is not in a special context,
- Org-mode will support shift-selection for making and enlarging regions.
- To make this more effective, the bullet cycling will no longer happen
- anywhere in an item line, but only if the cursor is exactly on the bullet.
- If you set this variable to the symbol `always', then the keys
- will not be special in headlines, property lines, and item lines, to make
- shift selection work there as well. If this is what you want, you can
- use the following alternative commands: `C-c C-t' and `C-c ,' to
- change TODO state and priority, `C-u C-u C-c C-t' can be used to switch
- TODO sets, `C-c -' to cycle item bullet types, and properties can be
- edited by hand or in column view.
- However, when the cursor is on a timestamp, shift-cursor commands
- will still edit the time stamp - this is just too good to give up.
- XEmacs user should have this variable set to nil, because shift-select-mode
- is Emacs 23 only."
- :group 'org
- :type '(choice
- (const :tag "Never" nil)
- (const :tag "When outside special context" t)
- (const :tag "Everywhere except timestamps" always)))
- (defgroup org-startup nil
- "Options concerning startup of Org-mode."
- :tag "Org Startup"
- :group 'org)
- (defcustom org-startup-folded t
- "Non-nil means entering Org-mode will switch to OVERVIEW.
- This can also be configured on a per-file basis by adding one of
- the following lines anywhere in the buffer:
- #+STARTUP: fold (or `overview', this is equivalent)
- #+STARTUP: nofold (or `showall', this is equivalent)
- #+STARTUP: content
- #+STARTUP: showeverything"
- :group 'org-startup
- :type '(choice
- (const :tag "nofold: show all" nil)
- (const :tag "fold: overview" t)
- (const :tag "content: all headlines" content)
- (const :tag "show everything, even drawers" showeverything)))
- (defcustom org-startup-truncated t
- "Non-nil means entering Org-mode will set `truncate-lines'.
- This is useful since some lines containing links can be very long and
- uninteresting. Also tables look terrible when wrapped."
- :group 'org-startup
- :type 'boolean)
- (defcustom org-startup-indented nil
- "Non-nil means turn on `org-indent-mode' on startup.
- This can also be configured on a per-file basis by adding one of
- the following lines anywhere in the buffer:
- #+STARTUP: indent
- #+STARTUP: noindent"
- :group 'org-structure
- :type '(choice
- (const :tag "Not" nil)
- (const :tag "Globally (slow on startup in large files)" t)))
- (defcustom org-use-sub-superscripts t
- "Non-nil means interpret \"_\" and \"^\" for export.
- When this option is turned on, you can use TeX-like syntax for sub- and
- superscripts. Several characters after \"_\" or \"^\" will be
- considered as a single item - so grouping with {} is normally not
- needed. For example, the following things will be parsed as single
- sub- or superscripts.
- 10^24 or 10^tau several digits will be considered 1 item.
- 10^-12 or 10^-tau a leading sign with digits or a word
- x^2-y^3 will be read as x^2 - y^3, because items are
- terminated by almost any nonword/nondigit char.
- x_{i^2} or x^(2-i) braces or parenthesis do grouping.
- Still, ambiguity is possible - so when in doubt use {} to enclose the
- sub/superscript. If you set this variable to the symbol `{}',
- the braces are *required* in order to trigger interpretations as
- sub/superscript. This can be helpful in documents that need \"_\"
- frequently in plain text.
- Not all export backends support this, but HTML does.
- This option can also be set with the +OPTIONS line, e.g. \"^:nil\"."
- :group 'org-startup
- :group 'org-export-translation
- :type '(choice
- (const :tag "Always interpret" t)
- (const :tag "Only with braces" {})
- (const :tag "Never interpret" nil)))
- (if (fboundp 'defvaralias)
- (defvaralias 'org-export-with-sub-superscripts 'org-use-sub-superscripts))
- (defcustom org-startup-with-beamer-mode nil
- "Non-nil means turn on `org-beamer-mode' on startup.
- This can also be configured on a per-file basis by adding one of
- the following lines anywhere in the buffer:
- #+STARTUP: beamer"
- :group 'org-startup
- :type 'boolean)
- (defcustom org-startup-align-all-tables nil
- "Non-nil means align all tables when visiting a file.
- This is useful when the column width in tables is forced with <N> cookies
- in table fields. Such tables will look correct only after the first re-align.
- This can also be configured on a per-file basis by adding one of
- the following lines anywhere in the buffer:
- #+STARTUP: align
- #+STARTUP: noalign"
- :group 'org-startup
- :type 'boolean)
- (defcustom org-startup-with-inline-images nil
- "Non-nil means show inline images when loading a new Org file.
- This can also be configured on a per-file basis by adding one of
- the following lines anywhere in the buffer:
- #+STARTUP: inlineimages
- #+STARTUP: noinlineimages"
- :group 'org-startup
- :type 'boolean)
- (defcustom org-insert-mode-line-in-empty-file nil
- "Non-nil means insert the first line setting Org-mode in empty files.
- When the function `org-mode' is called interactively in an empty file, this
- normally means that the file name does not automatically trigger Org-mode.
- To ensure that the file will always be in Org-mode in the future, a
- line enforcing Org-mode will be inserted into the buffer, if this option
- has been set."
- :group 'org-startup
- :type 'boolean)
- (defcustom org-replace-disputed-keys nil
- "Non-nil means use alternative key bindings for some keys.
- Org-mode uses S-<cursor> keys for changing timestamps and priorities.
- These keys are also used by other packages like shift-selection-mode'
- \(built into Emacs 23), `CUA-mode' or `windmove.el'.
- If you want to use Org-mode together with one of these other modes,
- or more generally if you would like to move some Org-mode commands to
- other keys, set this variable and configure the keys with the variable
- `org-disputed-keys'.
- This option is only relevant at load-time of Org-mode, and must be set
- *before* org.el is loaded. Changing it requires a restart of Emacs to
- become effective."
- :group 'org-startup
- :type 'boolean)
- (defcustom org-use-extra-keys nil
- "Non-nil means use extra key sequence definitions for certain commands.
- This happens automatically if you run XEmacs or if `window-system'
- is nil. This variable lets you do the same manually. You must
- set it before loading org.
- Example: on Carbon Emacs 22 running graphically, with an external
- keyboard on a Powerbook, the default way of setting M-left might
- not work for either Alt or ESC. Setting this variable will make
- it work for ESC."
- :group 'org-startup
- :type 'boolean)
- (if (fboundp 'defvaralias)
- (defvaralias 'org-CUA-compatible 'org-replace-disputed-keys))
- (defcustom org-disputed-keys
- '(([(shift up)] . [(meta p)])
- ([(shift down)] . [(meta n)])
- ([(shift left)] . [(meta -)])
- ([(shift right)] . [(meta +)])
- ([(control shift right)] . [(meta shift +)])
- ([(control shift left)] . [(meta shift -)]))
- "Keys for which Org-mode and other modes compete.
- This is an alist, cars are the default keys, second element specifies
- the alternative to use when `org-replace-disputed-keys' is t.
- Keys can be specified in any syntax supported by `define-key'.
- The value of this option takes effect only at Org-mode's startup,
- therefore you'll have to restart Emacs to apply it after changing."
- :group 'org-startup
- :type 'alist)
- (defun org-key (key)
- "Select key according to `org-replace-disputed-keys' and `org-disputed-keys'.
- Or return the original if not disputed.
- Also apply the translations defined in `org-xemacs-key-equivalents'."
- (when org-replace-disputed-keys
- (let* ((nkey (key-description key))
- (x (org-find-if (lambda (x)
- (equal (key-description (car x)) nkey))
- org-disputed-keys)))
- (setq key (if x (cdr x) key))))
- (when (featurep 'xemacs)
- (setq key (or (cdr (assoc key org-xemacs-key-equivalents)) key)))
- key)
- (defun org-find-if (predicate seq)
- (catch 'exit
- (while seq
- (if (funcall predicate (car seq))
- (throw 'exit (car seq))
- (pop seq)))))
- (defun org-defkey (keymap key def)
- "Define a key, possibly translated, as returned by `org-key'."
- (define-key keymap (org-key key) def))
- (defcustom org-ellipsis nil
- "The ellipsis to use in the Org-mode outline.
- When nil, just use the standard three dots. When a string, use that instead,
- When a face, use the standard 3 dots, but with the specified face.
- The change affects only Org-mode (which will then use its own display table).
- Changing this requires executing `M-x org-mode' in a buffer to become
- effective."
- :group 'org-startup
- :type '(choice (const :tag "Default" nil)
- (face :tag "Face" :value org-warning)
- (string :tag "String" :value "...#")))
- (defvar org-display-table nil
- "The display table for org-mode, in case `org-ellipsis' is non-nil.")
- (defgroup org-keywords nil
- "Keywords in Org-mode."
- :tag "Org Keywords"
- :group 'org)
- (defcustom org-deadline-string "DEADLINE:"
- "String to mark deadline entries.
- A deadline is this string, followed by a time stamp. Should be a word,
- terminated by a colon. You can insert a schedule keyword and
- a timestamp with \\[org-deadline].
- Changes become only effective after restarting Emacs."
- :group 'org-keywords
- :type 'string)
- (defcustom org-scheduled-string "SCHEDULED:"
- "String to mark scheduled TODO entries.
- A schedule is this string, followed by a time stamp. Should be a word,
- terminated by a colon. You can insert a schedule keyword and
- a timestamp with \\[org-schedule].
- Changes become only effective after restarting Emacs."
- :group 'org-keywords
- :type 'string)
- (defcustom org-closed-string "CLOSED:"
- "String used as the prefix for timestamps logging closing a TODO entry."
- :group 'org-keywords
- :type 'string)
- (defcustom org-clock-string "CLOCK:"
- "String used as prefix for timestamps clocking work hours on an item."
- :group 'org-keywords
- :type 'string)
- (defcustom org-comment-string "COMMENT"
- "Entries starting with this keyword will never be exported.
- An entry can be toggled between COMMENT and normal with
- \\[org-toggle-comment].
- Changes become only effective after restarting Emacs."
- :group 'org-keywords
- :type 'string)
- (defcustom org-quote-string "QUOTE"
- "Entries starting with this keyword will be exported in fixed-width font.
- Quoting applies only to the text in the entry following the headline, and does
- not extend beyond the next headline, even if that is lower level.
- An entry can be toggled between QUOTE and normal with
- \\[org-toggle-fixed-width-section]."
- :group 'org-keywords
- :type 'string)
- (defconst org-repeat-re
- "<[0-9]\\{4\\}-[0-9][0-9]-[0-9][0-9] [^>\n]*?\\([.+]?\\+[0-9]+[dwmy]\\(/[0-9]+[dwmy]\\)?\\)"
- "Regular expression for specifying repeated events.
- After a match, group 1 contains the repeat expression.")
- (defgroup org-structure nil
- "Options concerning the general structure of Org-mode files."
- :tag "Org Structure"
- :group 'org)
- (defgroup org-reveal-location nil
- "Options about how to make context of a location visible."
- :tag "Org Reveal Location"
- :group 'org-structure)
- (defconst org-context-choice
- '(choice
- (const :tag "Always" t)
- (const :tag "Never" nil)
- (repeat :greedy t :tag "Individual contexts"
- (cons
- (choice :tag "Context"
- (const agenda)
- (const org-goto)
- (const occur-tree)
- (const tags-tree)
- (const link-search)
- (const mark-goto)
- (const bookmark-jump)
- (const isearch)
- (const default))
- (boolean))))
- "Contexts for the reveal options.")
- (defcustom org-show-hierarchy-above '((default . t))
- "Non-nil means show full hierarchy when revealing a location.
- Org-mode often shows locations in an org-mode file which might have
- been invisible before. When this is set, the hierarchy of headings
- above the exposed location is shown.
- Turning this off for example for sparse trees makes them very compact.
- Instead of t, this can also be an alist specifying this option for different
- contexts. Valid contexts are
- agenda when exposing an entry from the agenda
- org-goto when using the command `org-goto' on key C-c C-j
- occur-tree when using the command `org-occur' on key C-c /
- tags-tree when constructing a sparse tree based on tags matches
- link-search when exposing search matches associated with a link
- mark-goto when exposing the jump goal of a mark
- bookmark-jump when exposing a bookmark location
- isearch when exiting from an incremental search
- default default for all contexts not set explicitly"
- :group 'org-reveal-location
- :type org-context-choice)
- (defcustom org-show-following-heading '((default . nil))
- "Non-nil means show following heading when revealing a location.
- Org-mode often shows locations in an org-mode file which might have
- been invisible before. When this is set, the heading following the
- match is shown.
- Turning this off for example for sparse trees makes them very compact,
- but makes it harder to edit the location of the match. In such a case,
- use the command \\[org-reveal] to show more context.
- Instead of t, this can also be an alist specifying this option for different
- contexts. See `org-show-hierarchy-above' for valid contexts."
- :group 'org-reveal-location
- :type org-context-choice)
- (defcustom org-show-siblings '((default . nil) (isearch t))
- "Non-nil means show all sibling heading when revealing a location.
- Org-mode often shows locations in an org-mode file which might have
- been invisible before. When this is set, the sibling of the current entry
- heading are all made visible. If `org-show-hierarchy-above' is t,
- the same happens on each level of the hierarchy above the current entry.
- By default this is on for the isearch context, off for all other contexts.
- Turning this off for example for sparse trees makes them very compact,
- but makes it harder to edit the location of the match. In such a case,
- use the command \\[org-reveal] to show more context.
- Instead of t, this can also be an alist specifying this option for different
- contexts. See `org-show-hierarchy-above' for valid contexts."
- :group 'org-reveal-location
- :type org-context-choice)
- (defcustom org-show-entry-below '((default . nil))
- "Non-nil means show the entry below a headline when revealing a location.
- Org-mode often shows locations in an org-mode file which might have
- been invisible before. When this is set, the text below the headline that is
- exposed is also shown.
- By default this is off for all contexts.
- Instead of t, this can also be an alist specifying this option for different
- contexts. See `org-show-hierarchy-above' for valid contexts."
- :group 'org-reveal-location
- :type org-context-choice)
- (defcustom org-indirect-buffer-display 'other-window
- "How should indirect tree buffers be displayed?
- This applies to indirect buffers created with the commands
- \\[org-tree-to-indirect-buffer] and \\[org-agenda-tree-to-indirect-buffer].
- Valid values are:
- current-window Display in the current window
- other-window Just display in another window.
- dedicated-frame Create one new frame, and re-use it each time.
- new-frame Make a new frame each time. Note that in this case
- previously-made indirect buffers are kept, and you need to
- kill these buffers yourself."
- :group 'org-structure
- :group 'org-agenda-windows
- :type '(choice
- (const :tag "In current window" current-window)
- (const :tag "In current frame, other window" other-window)
- (const :tag "Each time a new frame" new-frame)
- (const :tag "One dedicated frame" dedicated-frame)))
- (defcustom org-use-speed-commands nil
- "Non-nil means activate single letter commands at beginning of a headline.
- This may also be a function to test for appropriate locations where speed
- commands should be active."
- :group 'org-structure
- :type '(choice
- (const :tag "Never" nil)
- (const :tag "At beginning of headline stars" t)
- (function)))
- (defcustom org-speed-commands-user nil
- "Alist of additional speed commands.
- This list will be checked before `org-speed-commands-default'
- when the variable `org-use-speed-commands' is non-nil
- and when the cursor is at the beginning of a headline.
- The car if each entry is a string with a single letter, which must
- be assigned to `self-insert-command' in the global map.
- The cdr is either a command to be called interactively, a function
- to be called, or a form to be evaluated.
- An entry that is just a list with a single string will be interpreted
- as a descriptive headline that will be added when listing the speed
- commands in the Help buffer using the `?' speed command."
- :group 'org-structure
- :type '(repeat :value ("k" . ignore)
- (choice :value ("k" . ignore)
- (list :tag "Descriptive Headline" (string :tag "Headline"))
- (cons :tag "Letter and Command"
- (string :tag "Command letter")
- (choice
- (function)
- (sexp))))))
- (defgroup org-cycle nil
- "Options concerning visibility cycling in Org-mode."
- :tag "Org Cycle"
- :group 'org-structure)
- (defcustom org-cycle-skip-children-state-if-no-children t
- "Non-nil means skip CHILDREN state in entries that don't have any."
- :group 'org-cycle
- :type 'boolean)
- (defcustom org-cycle-max-level nil
- "Maximum level which should still be subject to visibility cycling.
- Levels higher than this will, for cycling, be treated as text, not a headline.
- When `org-odd-levels-only' is set, a value of N in this variable actually
- means 2N-1 stars as the limiting headline.
- When nil, cycle all levels.
- Note that the limiting level of cycling is also influenced by
- `org-inlinetask-min-level'. When `org-cycle-max-level' is not set but
- `org-inlinetask-min-level' is, cycling will be limited to levels one less
- than its value."
- :group 'org-cycle
- :type '(choice
- (const :tag "No limit" nil)
- (integer :tag "Maximum level")))
- (defcustom org-drawers '("PROPERTIES" "CLOCK" "LOGBOOK")
- "Names of drawers. Drawers are not opened by cycling on the headline above.
- Drawers only open with a TAB on the drawer line itself. A drawer looks like
- this:
- :DRAWERNAME:
- .....
- :END:
- The drawer \"PROPERTIES\" is special for capturing properties through
- the property API.
- Drawers can be defined on the per-file basis with a line like:
- #+DRAWERS: HIDDEN STATE PROPERTIES"
- :group 'org-structure
- :group 'org-cycle
- :type '(repeat (string :tag "Drawer Name")))
- (defcustom org-hide-block-startup nil
- "Non-nil means entering Org-mode will fold all blocks.
- This can also be set in on a per-file basis with
- #+STARTUP: hideblocks
- #+STARTUP: showblocks"
- :group 'org-startup
- :group 'org-cycle
- :type 'boolean)
- (defcustom org-cycle-global-at-bob nil
- "Cycle globally if cursor is at beginning of buffer and not at a headline.
- This makes it possible to do global cycling without having to use S-TAB or
- \\[universal-argument] TAB. For this special case to work, the first line \
- of the buffer
- must not be a headline - it may be empty or some other text. When used in
- this way, `org-cycle-hook' is disables temporarily, to make sure the
- cursor stays at the beginning of the buffer.
- When this option is nil, don't do anything special at the beginning
- of the buffer."
- :group 'org-cycle
- :type 'boolean)
- (defcustom org-cycle-level-after-item/entry-creation t
- "Non-nil means cycle entry level or item indentation in new empty entries.
- When the cursor is at the end of an empty headline, i.e with only stars
- and maybe a TODO keyword, TAB will then switch the entry to become a child,
- and then all possible ancestor states, before returning to the original state.
- This makes data entry extremely fast: M-RET to create a new headline,
- on TAB to make it a child, two or more tabs to make it a (grand-)uncle.
- When the cursor is at the end of an empty plain list item, one TAB will
- make it a subitem, two or more tabs will back up to make this an item
- higher up in the item hierarchy."
- :group 'org-cycle
- :type 'boolean)
- (defcustom org-cycle-emulate-tab t
- "Where should `org-cycle' emulate TAB.
- nil Never
- white Only in completely white lines
- whitestart Only at the beginning of lines, before the first non-white char
- t Everywhere except in headlines
- exc-hl-bol Everywhere except at the start of a headline
- If TAB is used in a place where it does not emulate TAB, the current subtree
- visibility is cycled."
- :group 'org-cycle
- :type '(choice (const :tag "Never" nil)
- (const :tag "Only in completely white lines" white)
- (const :tag "Before first char in a line" whitestart)
- (const :tag "Everywhere except in headlines" t)
- (const :tag "Everywhere except at bol in headlines" exc-hl-bol)
- ))
- (defcustom org-cycle-separator-lines 2
- "Number of empty lines needed to keep an empty line between collapsed trees.
- If you leave an empty line between the end of a subtree and the following
- headline, this empty line is hidden when the subtree is folded.
- Org-mode will leave (exactly) one empty line visible if the number of
- empty lines is equal or larger to the number given in this variable.
- So the default 2 means at least 2 empty lines after the end of a subtree
- are needed to produce free space between a collapsed subtree and the
- following headline.
- If the number is negative, and the number of empty lines is at least -N,
- all empty lines are shown.
- Special case: when 0, never leave empty lines in collapsed view."
- :group 'org-cycle
- :type 'integer)
- (put 'org-cycle-separator-lines 'safe-local-variable 'integerp)
- (defcustom org-pre-cycle-hook nil
- "Hook that is run before visibility cycling is happening.
- The function(s) in this hook must accept a single argument which indicates
- the new state that will be set right after running this hook. The
- argument is a symbol. Before a global state change, it can have the values
- `overview', `content', or `all'. Before a local state change, it can have
- the values `folded', `children', or `subtree'."
- :group 'org-cycle
- :type 'hook)
- (defcustom org-cycle-hook '(org-cycle-hide-archived-subtrees
- org-cycle-hide-drawers
- org-cycle-show-empty-lines
- org-optimize-window-after-visibility-change)
- "Hook that is run after `org-cycle' has changed the buffer visibility.
- The function(s) in this hook must accept a single argument which indicates
- the new state that was set by the most recent `org-cycle' command. The
- argument is a symbol. After a global state change, it can have the values
- `overview', `content', or `all'. After a local state change, it can have
- the values `folded', `children', or `subtree'."
- :group 'org-cycle
- :type 'hook)
- (defgroup org-edit-structure nil
- "Options concerning structure editing in Org-mode."
- :tag "Org Edit Structure"
- :group 'org-structure)
- (defcustom org-odd-levels-only nil
- "Non-nil means skip even levels and only use odd levels for the outline.
- This has the effect that two stars are being added/taken away in
- promotion/demotion commands. It also influences how levels are
- handled by the exporters.
- Changing it requires restart of `font-lock-mode' to become effective
- for fontification also in regions already fontified.
- You may also set this on a per-file basis by adding one of the following
- lines to the buffer:
- #+STARTUP: odd
- #+STARTUP: oddeven"
- :group 'org-edit-structure
- :group 'org-appearance
- :type 'boolean)
- (defcustom org-adapt-indentation t
- "Non-nil means adapt indentation to outline node level.
- When this variable is set, Org assumes that you write outlines by
- indenting text in each node to align with the headline (after the stars).
- The following issues are influenced by this variable:
- - When this is set and the *entire* text in an entry is indented, the
- indentation is increased by one space in a demotion command, and
- decreased by one in a promotion command. If any line in the entry
- body starts with text at column 0, indentation is not changed at all.
- - Property drawers and planning information is inserted indented when
- this variable s set. When nil, they will not be indented.
- - TAB indents a line relative to context. The lines below a headline
- will be indented when this variable is set.
- Note that this is all about true indentation, by adding and removing
- space characters. See also `org-indent.el' which does level-dependent
- indentation in a virtual way, i.e. at display time in Emacs."
- :group 'org-edit-structure
- :type 'boolean)
- (defcustom org-special-ctrl-a/e nil
- "Non-nil means `C-a' and `C-e' behave specially in headlines and items.
- When t, `C-a' will bring back the cursor to the beginning of the
- headline text, i.e. after the stars and after a possible TODO keyword.
- In an item, this will be the position after the bullet.
- When the cursor is already at that position, another `C-a' will bring
- it to the beginning of the line.
- `C-e' will jump to the end of the headline, ignoring the presence of tags
- in the headline. A second `C-e' will then jump to the true end of the
- line, after any tags. This also means that, when this variable is
- non-nil, `C-e' also will never jump beyond the end of the heading of a
- folded section, i.e. not after the ellipses.
- When set to the symbol `reversed', the first `C-a' or `C-e' works normally,
- going to the true line boundary first. Only a directly following, identical
- keypress will bring the cursor to the special positions.
- This may also be a cons cell where the behavior for `C-a' and `C-e' is
- set separately."
- :group 'org-edit-structure
- :type '(choice
- (const :tag "off" nil)
- (const :tag "on: after stars/bullet and before tags first" t)
- (const :tag "reversed: true line boundary first" reversed)
- (cons :tag "Set C-a and C-e separately"
- (choice :tag "Special C-a"
- (const :tag "off" nil)
- (const :tag "on: after stars/bullet first" t)
- (const :tag "reversed: before stars/bullet first" reversed))
- (choice :tag "Special C-e"
- (const :tag "off" nil)
- (const :tag "on: before tags first" t)
- (const :tag "reversed: after tags first" reversed)))))
- (if (fboundp 'defvaralias)
- (defvaralias 'org-special-ctrl-a 'org-special-ctrl-a/e))
- (defcustom org-special-ctrl-k nil
- "Non-nil means `C-k' will behave specially in headlines.
- When nil, `C-k' will call the default `kill-line' command.
- When t, the following will happen while the cursor is in the headline:
- - When the cursor is at the beginning of a headline, kill the entire
- line and possible the folded subtree below the line.
- - When in the middle of the headline text, kill the headline up to the tags.
- - When after the headline text, kill the tags."
- :group 'org-edit-structure
- :type 'boolean)
- (defcustom org-ctrl-k-protect-subtree nil
- "Non-nil means, do not delete a hidden subtree with C-k.
- When set to the symbol `error', simply throw an error when C-k is
- used to kill (part-of) a headline that has hidden text behind it.
- Any other non-nil value will result in a query to the user, if it is
- OK to kill that hidden subtree. When nil, kill without remorse."
- :group 'org-edit-structure
- :type '(choice
- (const :tag "Do not protect hidden subtrees" nil)
- (const :tag "Protect hidden subtrees with a security query" t)
- (const :tag "Never kill a hidden subtree with C-k" error)))
- (defcustom org-yank-folded-subtrees t
- "Non-nil means when yanking subtrees, fold them.
- If the kill is a single subtree, or a sequence of subtrees, i.e. if
- it starts with a heading and all other headings in it are either children
- or siblings, then fold all the subtrees. However, do this only if no
- text after the yank would be swallowed into a folded tree by this action."
- :group 'org-edit-structure
- :type 'boolean)
- (defcustom org-yank-adjusted-subtrees nil
- "Non-nil means when yanking subtrees, adjust the level.
- With this setting, `org-paste-subtree' is used to insert the subtree, see
- this function for details."
- :group 'org-edit-structure
- :type 'boolean)
- (defcustom org-M-RET-may-split-line '((default . t))
- "Non-nil means M-RET will split the line at the cursor position.
- When nil, it will go to the end of the line before making a
- new line.
- You may also set this option in a different way for different
- contexts. Valid contexts are:
- headline when creating a new headline
- item when creating a new item
- table in a table field
- default the value to be used for all contexts not explicitly
- customized"
- :group 'org-structure
- :group 'org-table
- :type '(choice
- (const :tag "Always" t)
- (const :tag "Never" nil)
- (repeat :greedy t :tag "Individual contexts"
- (cons
- (choice :tag "Context"
- (const headline)
- (const item)
- (const table)
- (const default))
- (boolean)))))
- (defcustom org-insert-heading-respect-content nil
- "Non-nil means insert new headings after the current subtree.
- When nil, the new heading is created directly after the current line.
- The commands \\[org-insert-heading-respect-content] and
- \\[org-insert-todo-heading-respect-content] turn this variable on
- for the duration of the command."
- :group 'org-structure
- :type 'boolean)
- (defcustom org-blank-before-new-entry '((heading . auto)
- (plain-list-item . auto))
- "Should `org-insert-heading' leave a blank line before new heading/item?
- The value is an alist, with `heading' and `plain-list-item' as CAR,
- and a boolean flag as CDR. The cdr may also be the symbol `auto', in
- which case Org will look at the surrounding headings/items and try to
- make an intelligent decision whether to insert a blank line or not.
- For plain lists, if the variable `org-empty-line-terminates-plain-lists' is
- set, the setting here is ignored and no empty line is inserted, to avoid
- breaking the list structure."
- :group 'org-edit-structure
- :type '(list
- (cons (const heading)
- (choice (const :tag "Never" nil)
- (const :tag "Always" t)
- (const :tag "Auto" auto)))
- (cons (const plain-list-item)
- (choice (const :tag "Never" nil)
- (const :tag "Always" t)
- (const :tag "Auto" auto)))))
- (defcustom org-insert-heading-hook nil
- "Hook being run after inserting a new heading."
- :group 'org-edit-structure
- :type 'hook)
- (defcustom org-enable-fixed-width-editor t
- "Non-nil means lines starting with \":\" are treated as fixed-width.
- This currently only means they are never auto-wrapped.
- When nil, such lines will be treated like ordinary lines.
- See also the QUOTE keyword."
- :group 'org-edit-structure
- :type 'boolean)
- (defcustom org-goto-auto-isearch t
- "Non-nil means typing characters in `org-goto' starts incremental search."
- :group 'org-edit-structure
- :type 'boolean)
- (defgroup org-sparse-trees nil
- "Options concerning sparse trees in Org-mode."
- :tag "Org Sparse Trees"
- :group 'org-structure)
- (defcustom org-highlight-sparse-tree-matches t
- "Non-nil means highlight all matches that define a sparse tree.
- The highlights will automatically disappear the next time the buffer is
- changed by an edit command."
- :group 'org-sparse-trees
- :type 'boolean)
- (defcustom org-remove-highlights-with-change t
- "Non-nil means any change to the buffer will remove temporary highlights.
- Such highlights are created by `org-occur' and `org-clock-display'.
- When nil, `C-c C-c needs to be used to get rid of the highlights.
- The highlights created by `org-preview-latex-fragment' always need
- `C-c C-c' to be removed."
- :group 'org-sparse-trees
- :group 'org-time
- :type 'boolean)
- (defcustom org-occur-hook '(org-first-headline-recenter)
- "Hook that is run after `org-occur' has constructed a sparse tree.
- This can be used to recenter the window to show as much of the structure
- as possible."
- :group 'org-sparse-trees
- :type 'hook)
- (defgroup org-imenu-and-speedbar nil
- "Options concerning imenu and speedbar in Org-mode."
- :tag "Org Imenu and Speedbar"
- :group 'org-structure)
- (defcustom org-imenu-depth 2
- "The maximum level for Imenu access to Org-mode headlines.
- This also applied for speedbar access."
- :group 'org-imenu-and-speedbar
- :type 'integer)
- (defgroup org-table nil
- "Options concerning tables in Org-mode."
- :tag "Org Table"
- :group 'org)
- (defcustom org-enable-table-editor 'optimized
- "Non-nil means lines starting with \"|\" are handled by the table editor.
- When nil, such lines will be treated like ordinary lines.
- When equal to the symbol `optimized', the table editor will be optimized to
- do the following:
- - Automatic overwrite mode in front of whitespace in table fields.
- This makes the structure of the table stay in tact as long as the edited
- field does not exceed the column width.
- - Minimize the number of realigns. Normally, the table is aligned each time
- TAB or RET are pressed to move to another field. With optimization this
- happens only if changes to a field might have changed the column width.
- Optimization requires replacing the functions `self-insert-command',
- `delete-char', and `backward-delete-char' in Org-mode buffers, with a
- slight (in fact: unnoticeable) speed impact for normal typing. Org-mode is
- very good at guessing when a re-align will be necessary, but you can always
- force one with \\[org-ctrl-c-ctrl-c].
- If you would like to use the optimized version in Org-mode, but the
- un-optimized version in OrgTbl-mode, see the variable `orgtbl-optimized'.
- This variable can be used to turn on and off the table editor during a session,
- but in order to toggle optimization, a restart is required.
- See also the variable `org-table-auto-blank-field'."
- :group 'org-table
- :type '(choice
- (const :tag "off" nil)
- (const :tag "on" t)
- (const :tag "on, optimized" optimized)))
- (defcustom org-self-insert-cluster-for-undo t
- "Non-nil means cluster self-insert commands for undo when possible.
- If this is set, then, like in the Emacs command loop, 20 consecutive
- characters will be undone together.
- This is configurable, because there is some impact on typing performance."
- :group 'org-table
- :type 'boolean)
- (defcustom org-table-tab-recognizes-table.el t
- "Non-nil means TAB will automatically notice a table.el table.
- When it sees such a table, it moves point into it and - if necessary -
- calls `table-recognize-table'."
- :group 'org-table-editing
- :type 'boolean)
- (defgroup org-link nil
- "Options concerning links in Org-mode."
- :tag "Org Link"
- :group 'org)
- (defvar org-link-abbrev-alist-local nil
- "Buffer-local version of `org-link-abbrev-alist', which see.
- The value of this is taken from the #+LINK lines.")
- (make-variable-buffer-local 'org-link-abbrev-alist-local)
- (defcustom org-link-abbrev-alist nil
- "Alist of link abbreviations.
- The car of each element is a string, to be replaced at the start of a link.
- The cdrs are replacement values, like (\"linkkey\" . REPLACE). Abbreviated
- links in Org-mode buffers can have an optional tag after a double colon, e.g.
- [[linkkey:tag][description]]
- The 'linkkey' must be a word word, starting with a letter, followed
- by letters, numbers, '-' or '_'.
- If REPLACE is a string, the tag will simply be appended to create the link.
- If the string contains \"%s\", the tag will be inserted there. Alternatively,
- the placeholder \"%h\" will cause a url-encoded version of the tag to
- be inserted at that point (see the function `url-hexify-string').
- REPLACE may also be a function that will be called with the tag as the
- only argument to create the link, which should be returned as a string.
- See the manual for examples."
- :group 'org-link
- :type '(repeat
- (cons
- (string :tag "Protocol")
- (choice
- (string :tag "Format")
- (function)))))
- (defcustom org-descriptive-links t
- "Non-nil means hide link part and only show description of bracket links.
- Bracket links are like [[link][description]]. This variable sets the initial
- state in new org-mode buffers. The setting can then be toggled on a
- per-buffer basis from the Org->Hyperlinks menu."
- :group 'org-link
- :type 'boolean)
- (defcustom org-link-file-path-type 'adaptive
- "How the path name in file links should be stored.
- Valid values are:
- relative Relative to the current directory, i.e. the directory of the file
- into which the link is being inserted.
- absolute Absolute path, if possible with ~ for home directory.
- noabbrev Absolute path, no abbreviation of home directory.
- adaptive Use relative path for files in the current directory and sub-
- directories of it. For other files, use an absolute path."
- :group 'org-link
- :type '(choice
- (const relative)
- (const absolute)
- (const noabbrev)
- (const adaptive)))
- (defcustom org-activate-links '(bracket angle plain radio tag date footnote)
- "Types of links that should be activated in Org-mode files.
- This is a list of symbols, each leading to the activation of a certain link
- type. In principle, it does not hurt to turn on most link types - there may
- be a small gain when turning off unused link types. The types are:
- bracket The recommended [[link][description]] or [[link]] links with hiding.
- angle Links in angular brackets that may contain whitespace like
- <bbdb:Carsten Dominik>.
- plain Plain links in normal text, no whitespace, like http://google.com.
- radio Text that is matched by a radio target, see manual for details.
- tag Tag settings in a headline (link to tag search).
- date Time stamps (link to calendar).
- footnote Footnote labels.
- Changing this variable requires a restart of Emacs to become effective."
- :group 'org-link
- :type '(set :greedy t
- (const :tag "Double bracket links" bracket)
- (const :tag "Angular bracket links" angle)
- (const :tag "Plain text links" plain)
- (const :tag "Radio target matches" radio)
- (const :tag "Tags" tag)
- (const :tag "Timestamps" date)
- (const :tag "Footnotes" footnote)))
- (defcustom org-make-link-description-function nil
- "Function to use to generate link descriptions from links.
- If nil the link location will be used. This function must take
- two parameters; the first is the link and the second the
- description `org-insert-link' has generated, and should return the
- description to use."
- :group 'org-link
- :type 'function)
- (defgroup org-link-store nil
- "Options concerning storing links in Org-mode."
- :tag "Org Store Link"
- :group 'org-link)
- (defcustom org-email-link-description-format "Email %c: %.30s"
- "Format of the description part of a link to an email or usenet message.
- The following %-escapes will be replaced by corresponding information:
- %F full \"From\" field
- %f name, taken from \"From\" field, address if no name
- %T full \"To\" field
- %t first name in \"To\" field, address if no name
- %c correspondent. Usually \"from NAME\", but if you sent it yourself, it
- will be \"to NAME\". See also the variable `org-from-is-user-regexp'.
- %s subject
- %d date
- %m message-id.
- You may use normal field width specification between the % and the letter.
- This is for example useful to limit the length of the subject.
- Examples: \"%f on: %.30s\", \"Email from %f\", \"Email %c\""
- :group 'org-link-store
- :type 'string)
- (defcustom org-from-is-user-regexp
- (let (r1 r2)
- (when (and user-mail-address (not (string= user-mail-address "")))
- (setq r1 (concat "\\<" (regexp-quote user-mail-address) "\\>")))
- (when (and user-full-name (not (string= user-full-name "")))
- (setq r2 (concat "\\<" (regexp-quote user-full-name) "\\>")))
- (if (and r1 r2) (concat r1 "\\|" r2) (or r1 r2)))
- "Regexp matched against the \"From:\" header of an email or usenet message.
- It should match if the message is from the user him/herself."
- :group 'org-link-store
- :type 'regexp)
- (defcustom org-link-to-org-use-id 'create-if-interactive-and-no-custom-id
- "Non-nil means storing a link to an Org file will use entry IDs.
- Note that before this variable is even considered, org-id must be loaded,
- so please customize `org-modules' and turn it on.
- The variable can have the following values:
- t Create an ID if needed to make a link to the current entry.
- create-if-interactive
- If `org-store-link' is called directly (interactively, as a user
- command), do create an ID to support the link. But when doing the
- job for remember, only use the ID if it already exists. The
- purpose of this setting is to avoid proliferation of unwanted
- IDs, just because you happen to be in an Org file when you
- call `org-remember' that automatically and preemptively
- creates a link. If you do want to get an ID link in a remember
- template to an entry not having an ID, create it first by
- explicitly creating a link to it, using `C-c C-l' first.
- create-if-interactive-and-no-custom-id
- Like create-if-interactive, but do not create an ID if there is
- a CUSTOM_ID property defined in the entry. This is the default.
- use-existing
- Use existing ID, do not create one.
- nil Never use an ID to make a link, instead link using a text search for
- the headline text."
- :group 'org-link-store
- :type '(choice
- (const :tag "Create ID to make link" t)
- (const :tag "Create if storing link interactively"
- create-if-interactive)
- (const :tag "Create if storing link interactively and no CUSTOM_ID is present"
- create-if-interactive-and-no-custom-id)
- (const :tag "Only use existing" use-existing)
- (const :tag "Do not use ID to create link" nil)))
- (defcustom org-context-in-file-links t
- "Non-nil means file links from `org-store-link' contain context.
- A search string will be added to the file name with :: as separator and
- used to find the context when the link is activated by the command
- `org-open-at-point'. When this option is t, the entire active region
- will be placed in the search string of the file link. If set to a
- positive integer, only the first n lines of context will be stored.
- Using a prefix arg to the command \\[org-store-link] (`org-store-link')
- negates this setting for the duration of the command."
- :group 'org-link-store
- :type '(choice boolean integer))
- (defcustom org-keep-stored-link-after-insertion nil
- "Non-nil means keep link in list for entire session.
- The command `org-store-link' adds a link pointing to the current
- location to an internal list. These links accumulate during a session.
- The command `org-insert-link' can be used to insert links into any
- Org-mode file (offering completion for all stored links). When this
- option is nil, every link which has been inserted once using \\[org-insert-link]
- will be removed from the list, to make completing the unused links
- more efficient."
- :group 'org-link-store
- :type 'boolean)
- (defgroup org-link-follow nil
- "Options concerning following links in Org-mode."
- :tag "Org Follow Link"
- :group 'org-link)
- (defcustom org-link-translation-function nil
- "Function to translate links with different syntax to Org syntax.
- This can be used to translate links created for example by the Planner
- or emacs-wiki packages to Org syntax.
- The function must accept two parameters, a TYPE containing the link
- protocol name like \"rmail\" or \"gnus\" as a string, and the linked path,
- which is everything after the link protocol. It should return a cons
- with possibly modified values of type and path.
- Org contains a function for this, so if you set this variable to
- `org-translate-link-from-planner', you should be able follow many
- links created by planner."
- :group 'org-link-follow
- :type 'function)
- (defcustom org-follow-link-hook nil
- "Hook that is run after a link has been followed."
- :group 'org-link-follow
- :type 'hook)
- (defcustom org-tab-follows-link nil
- "Non-nil means on links TAB will follow the link.
- Needs to be set before org.el is loaded.
- This really should not be used, it does not make sense, and the
- implementation is bad."
- :group 'org-link-follow
- :type 'boolean)
- (defcustom org-return-follows-link nil
- "Non-nil means on links RET will follow the link."
- :group 'org-link-follow
- :type 'boolean)
- (defcustom org-mouse-1-follows-link
- (if (boundp 'mouse-1-click-follows-link) mouse-1-click-follows-link t)
- "Non-nil means mouse-1 on a link will follow the link.
- A longer mouse click will still set point. Does not work on XEmacs.
- Needs to be set before org.el is loaded."
- :group 'org-link-follow
- :type 'boolean)
- (defcustom org-mark-ring-length 4
- "Number of different positions to be recorded in the ring.
- Changing this requires a restart of Emacs to work correctly."
- :group 'org-link-follow
- :type 'integer)
- (defcustom org-link-search-must-match-exact-headline 'query-to-create
- "Non-nil means internal links in Org files must exactly match a headline.
- When nil, the link search tries to match a phrase with all words
- in the search text."
- :group 'org-link-follow
- :type '(choice
- (const :tag "Use fuzy text search" nil)
- (const :tag "Match only exact headline" t)
- (const :tag "Match extact headline or query to create it"
- query-to-create)))
- (defcustom org-link-frame-setup
- '((vm . vm-visit-folder-other-frame)
- (gnus . org-gnus-no-new-news)
- (file . find-file-other-window)
- (wl . wl-other-frame))
- "Setup the frame configuration for following links.
- When following a link with Emacs, it may often be useful to display
- this link in another window or frame. This variable can be used to
- set this up for the different types of links.
- For VM, use any of
- `vm-visit-folder'
- `vm-visit-folder-other-window'
- `vm-visit-folder-other-frame'
- For Gnus, use any of
- `gnus'
- `gnus-other-frame'
- `org-gnus-no-new-news'
- For FILE, use any of
- `find-file'
- `find-file-other-window'
- `find-file-other-frame'
- For Wanderlust use any of
- `wl'
- `wl-other-frame'
- For the calendar, use the variable `calendar-setup'.
- For BBDB, it is currently only possible to display the matches in
- another window."
- :group 'org-link-follow
- :type '(list
- (cons (const vm)
- (choice
- (const vm-visit-folder)
- (const vm-visit-folder-other-window)
- (const vm-visit-folder-other-frame)))
- (cons (const gnus)
- (choice
- (const gnus)
- (const gnus-other-frame)
- (const org-gnus-no-new-news)))
- (cons (const file)
- (choice
- (const find-file)
- (const find-file-other-window)
- (const find-file-other-frame)))
- (cons (const wl)
- (choice
- (const wl)
- (const wl-other-frame)))))
- (defcustom org-display-internal-link-with-indirect-buffer nil
- "Non-nil means use indirect buffer to display infile links.
- Activating internal links (from one location in a file to another location
- in the same file) normally just jumps to the location. When the link is
- activated with a \\[universal-argument] prefix (or with mouse-3), the link \
- is displayed in
- another window. When this option is set, the other window actually displays
- an indirect buffer clone of the current buffer, to avoid any visibility
- changes to the current buffer."
- :group 'org-link-follow
- :type 'boolean)
- (defcustom org-open-non-existing-files nil
- "Non-nil means `org-open-file' will open non-existing files.
- When nil, an error will be generated.
- This variable applies only to external applications because they
- might choke on non-existing files. If the link is to a file that
- will be opened in Emacs, the variable is ignored."
- :group 'org-link-follow
- :type 'boolean)
- (defcustom org-open-directory-means-index-dot-org nil
- "Non-nil means a link to a directory really means to index.org.
- When nil, following a directory link will run dired or open a finder/explorer
- window on that directory."
- :group 'org-link-follow
- :type 'boolean)
- (defcustom org-link-mailto-program '(browse-url "mailto:%a?subject=%s")
- "Function and arguments to call for following mailto links.
- This is a list with the first element being a Lisp function, and the
- remaining elements being arguments to the function. In string arguments,
- %a will be replaced by the address, and %s will be replaced by the subject
- if one was given like in <mailto:arthur@galaxy.org::this subject>."
- :group 'org-link-follow
- :type '(choice
- (const :tag "browse-url" (browse-url-mail "mailto:%a?subject=%s"))
- (const :tag "compose-mail" (compose-mail "%a" "%s"))
- (const :tag "message-mail" (message-mail "%a" "%s"))
- (cons :tag "other" (function) (repeat :tag "argument" sexp))))
- (defcustom org-confirm-shell-link-function 'yes-or-no-p
- "Non-nil means ask for confirmation before executing shell links.
- Shell links can be dangerous: just think about a link
- [[shell:rm -rf ~/*][Google Search]]
- This link would show up in your Org-mode document as \"Google Search\",
- but really it would remove your entire home directory.
- Therefore we advise against setting this variable to nil.
- Just change it to `y-or-n-p' if you want to confirm with a
- single keystroke rather than having to type \"yes\"."
- :group 'org-link-follow
- :type '(choice
- (const :tag "with yes-or-no (safer)" yes-or-no-p)
- (const :tag "with y-or-n (faster)" y-or-n-p)
- (const :tag "no confirmation (dangerous)" nil)))
- (put 'org-confirm-shell-link-function
- 'safe-local-variable
- #'(lambda (x) (member x '(yes-or-no-p y-or-n-p))))
- (defcustom org-confirm-shell-link-not-regexp ""
- "A regexp to skip confirmation for shell links."
- :group 'org-link-follow
- :type 'regexp)
- (defcustom org-confirm-elisp-link-function 'yes-or-no-p
- "Non-nil means ask for confirmation before executing Emacs Lisp links.
- Elisp links can be dangerous: just think about a link
- [[elisp:(shell-command \"rm -rf ~/*\")][Google Search]]
- This link would show up in your Org-mode document as \"Google Search\",
- but really it would remove your entire home directory.
- Therefore we advise against setting this variable to nil.
- Just change it to `y-or-n-p' if you want to confirm with a
- single keystroke rather than having to type \"yes\"."
- :group 'org-link-follow
- :type '(choice
- (const :tag "with yes-or-no (safer)" yes-or-no-p)
- (const :tag "with y-or-n (faster)" y-or-n-p)
- (const :tag "no confirmation (dangerous)" nil)))
- (put 'org-confirm-shell-link-function
- 'safe-local-variable
- #'(lambda (x) (member x '(yes-or-no-p y-or-n-p))))
- (defcustom org-confirm-elisp-link-not-regexp ""
- "A regexp to skip confirmation for Elisp links."
- :group 'org-link-follow
- :type 'regexp)
- (defconst org-file-apps-defaults-gnu
- '((remote . emacs)
- (system . mailcap)
- (t . mailcap))
- "Default file applications on a UNIX or GNU/Linux system.
- See `org-file-apps'.")
- (defconst org-file-apps-defaults-macosx
- '((remote . emacs)
- (t . "open %s")
- (system . "open %s")
- ("ps.gz" . "gv %s")
- ("eps.gz" . "gv %s")
- ("dvi" . "xdvi %s")
- ("fig" . "xfig %s"))
- "Default file applications on a MacOS X system.
- The system \"open\" is known as a default, but we use X11 applications
- for some files for which the OS does not have a good default.
- See `org-file-apps'.")
- (defconst org-file-apps-defaults-windowsnt
- (list
- '(remote . emacs)
- (cons t
- (list (if (featurep 'xemacs)
- 'mswindows-shell-execute
- 'w32-shell-execute)
- "open" 'file))
- (cons 'system
- (list (if (featurep 'xemacs)
- 'mswindows-shell-execute
- 'w32-shell-execute)
- "open" 'file)))
- "Default file applications on a Windows NT system.
- The system \"open\" is used for most files.
- See `org-file-apps'.")
- (defcustom org-file-apps
- '(
- (auto-mode . emacs)
- ("\\.mm\\'" . default)
- ("\\.x?html?\\'" . default)
- ("\\.pdf\\'" . default)
- )
- "External applications for opening `file:path' items in a document.
- Org-mode uses system defaults for different file types, but
- you can use this variable to set the application for a given file
- extension. The entries in this list are cons cells where the car identifies
- files and the cdr the corresponding command. Possible values for the
- file identifier are
- \"string\" A string as a file identifier can be interpreted in different
- ways, depending on its contents:
- - Alphanumeric characters only:
- Match links with this file extension.
- Example: (\"pdf\" . \"evince %s\")
- to open PDFs with evince.
- - Regular expression: Match links where the
- filename matches the regexp. If you want to
- use groups here, use shy groups.
- Example: (\"\\.x?html\\'\" . \"firefox %s\")
- (\"\\(?:xhtml\\|html\\)\" . \"firefox %s\")
- to open *.html and *.xhtml with firefox.
- - Regular expression which contains (non-shy) groups:
- Match links where the whole link, including \"::\", and
- anything after that, matches the regexp.
- In a custom command string, %1, %2, etc. are replaced with
- the parts of the link that were matched by the groups.
- For backwards compatibility, if a command string is given
- that does not use any of the group matches, this case is
- handled identically to the second one (i.e. match against
- file name only).
- In a custom lisp form, you can access the group matches with
- (match-string n link).
- Example: (\"\\.pdf::\\(\\d+\\)\\'\" . \"evince -p %1 %s\")
- to open [[file:document.pdf::5]] with evince at page 5.
- `directory' Matches a directory
- `remote' Matches a remote file, accessible through tramp or efs.
- Remote files most likely should be visited through Emacs
- because external applications cannot handle such paths.
- `auto-mode' Matches files that are matched by any entry in `auto-mode-alist',
- so all files Emacs knows how to handle. Using this with
- command `emacs' will open most files in Emacs. Beware that this
- will also open html files inside Emacs, unless you add
- (\"html\" . default) to the list as well.
- t Default for files not matched by any of the other options.
- `system' The system command to open files, like `open' on Windows
- and Mac OS X, and mailcap under GNU/Linux. This is the command
- that will be selected if you call `C-c C-o' with a double
- \\[universal-argument] \\[universal-argument] prefix.
- Possible values for the command are:
- `emacs' The file will be visited by the current Emacs process.
- `default' Use the default application for this file type, which is the
- association for t in the list, most likely in the system-specific
- part.
- This can be used to overrule an unwanted setting in the
- system-specific variable.
- `system' Use the system command for opening files, like \"open\".
- This command is specified by the entry whose car is `system'.
- Most likely, the system-specific version of this variable
- does define this command, but you can overrule/replace it
- here.
- string A command to be executed by a shell; %s will be replaced
- by the path to the file.
- sexp A Lisp form which will be evaluated. The file path will
- be available in the Lisp variable `file'.
- For more examples, see the system specific constants
- `org-file-apps-defaults-macosx'
- `org-file-apps-defaults-windowsnt'
- `org-file-apps-defaults-gnu'."
- :group 'org-link-follow
- :type '(repeat
- (cons (choice :value ""
- (string :tag "Extension")
- (const :tag "System command to open files" system)
- (const :tag "Default for unrecognized files" t)
- (const :tag "Remote file" remote)
- (const :tag "Links to a directory" directory)
- (const :tag "Any files that have Emacs modes"
- auto-mode))
- (choice :value ""
- (const :tag "Visit with Emacs" emacs)
- (const :tag "Use default" default)
- (const :tag "Use the system command" system)
- (string :tag "Command")
- (sexp :tag "Lisp form")))))
- (defgroup org-refile nil
- "Options concerning refiling entries in Org-mode."
- :tag "Org Refile"
- :group 'org)
- (defcustom org-directory "~/org"
- "Directory with org files.
- This is just a default location to look for Org files. There is no need
- at all to put your files into this directory. It is only used in the
- following situations:
- 1. When a remember template specifies a target file that is not an
- absolute path. The path will then be interpreted relative to
- `org-directory'
- 2. When a remember note is filed away in an interactive way (when exiting the
- note buffer with `C-1 C-c C-c'. The user is prompted for an org file,
- with `org-directory' as the default path."
- :group 'org-refile
- :group 'org-remember
- :type 'directory)
- (defcustom org-default-notes-file (convert-standard-filename "~/.notes")
- "Default target for storing notes.
- Used as a fall back file for org-remember.el and org-capture.el, for
- templates that do not specify a target file."
- :group 'org-refile
- :group 'org-remember
- :type '(choice
- (const :tag "Default from remember-data-file" nil)
- file))
- (defcustom org-goto-interface 'outline
- "The default interface to be used for `org-goto'.
- Allowed values are:
- outline The interface shows an outline of the relevant file
- and the correct heading is found by moving through
- the outline or by searching with incremental search.
- outline-path-completion Headlines in the current buffer are offered via
- completion. This is the interface also used by
- the refile command."
- :group 'org-refile
- :type '(choice
- (const :tag "Outline" outline)
- (const :tag "Outline-path-completion" outline-path-completion)))
- (defcustom org-goto-max-level 5
- "Maximum target level when running `org-goto' with refile interface."
- :group 'org-refile
- :type 'integer)
- (defcustom org-reverse-note-order nil
- "Non-nil means store new notes at the beginning of a file or entry.
- When nil, new notes will be filed to the end of a file or entry.
- This can also be a list with cons cells of regular expressions that
- are matched against file names, and values."
- :group 'org-remember
- :group 'org-refile
- :type '(choice
- (const :tag "Reverse always" t)
- (const :tag "Reverse never" nil)
- (repeat :tag "By file name regexp"
- (cons regexp boolean))))
- (defcustom org-log-refile nil
- "Information to record when a task is refiled.
- Possible values are:
- nil Don't add anything
- time Add a time stamp to the task
- note Prompt for a note and add it with template `org-log-note-headings'
- This option can also be set with on a per-file-basis with
- #+STARTUP: nologrefile
- #+STARTUP: logrefile
- #+STARTUP: lognoterefile
- You can have local logging settings for a subtree by setting the LOGGING
- property to one or more of these keywords.
- When bulk-refiling from the agenda, the value `note' is forbidden and
- will temporarily be changed to `time'."
- :group 'org-refile
- :group 'org-progress
- :type '(choice
- (const :tag "No logging" nil)
- (const :tag "Record timestamp" time)
- (const :tag "Record timestamp with note." note)))
- (defcustom org-refile-targets nil
- "Targets for refiling entries with \\[org-refile].
- This is list of cons cells. Each cell contains:
- - a specification of the files to be considered, either a list of files,
- or a symbol whose function or variable value will be used to retrieve
- a file name or a list of file names. If you use `org-agenda-files' for
- that, all agenda files will be scanned for targets. Nil means consider
- headings in the current buffer.
- - A specification of how to find candidate refile targets. This may be
- any of:
- - a cons cell (:tag . \"TAG\") to identify refile targets by a tag.
- This tag has to be present in all target headlines, inheritance will
- not be considered.
- - a cons cell (:todo . \"KEYWORD\") to identify refile targets by
- todo keyword.
- - a cons cell (:regexp . \"REGEXP\") with a regular expression matching
- headlines that are refiling targets.
- - a cons cell (:level . N). Any headline of level N is considered a target.
- Note that, when `org-odd-levels-only' is set, level corresponds to
- order in hierarchy, not to the number of stars.
- - a cons cell (:maxlevel . N). Any headline with level <= N is a target.
- Note that, when `org-odd-levels-only' is set, level corresponds to
- order in hierarchy, not to the number of stars.
- You can set the variable `org-refile-target-verify-function' to a function
- to verify each headline found by the simple criteria above.
- When this variable is nil, all top-level headlines in the current buffer
- are used, equivalent to the value `((nil . (:level . 1))'."
- :group 'org-refile
- :type '(repeat
- (cons
- (choice :value org-agenda-files
- (const :tag "All agenda files" org-agenda-files)
- (const :tag "Current buffer" nil)
- (function) (variable) (file))
- (choice :tag "Identify target headline by"
- (cons :tag "Specific tag" (const :value :tag) (string))
- (cons :tag "TODO keyword" (const :value :todo) (string))
- (cons :tag "Regular expression" (const :value :regexp) (regexp))
- (cons :tag "Level number" (const :value :level) (integer))
- (cons :tag "Max Level number" (const :value :maxlevel) (integer))))))
- (defcustom org-refile-target-verify-function nil
- "Function to verify if the headline at point should be a refile target.
- The function will be called without arguments, with point at the
- beginning of the headline. It should return t and leave point
- where it is if the headline is a valid target for refiling.
- If the target should not be selected, the function must return nil.
- In addition to this, it may move point to a place from where the search
- should be continued. For example, the function may decide that the entire
- subtree of the current entry should be excluded and move point to the end
- of the subtree."
- :group 'org-refile
- :type 'function)
- (defcustom org-refile-use-cache nil
- "Non-nil means cache refile targets to speed up the process.
- The cache for a particular file will be updated automatically when
- the buffer has been killed, or when any of the marker used for flagging
- refile targets no longer points at a live buffer.
- If you have added new entries to a buffer that might themselves be targets,
- you need to clear the cache manually by pressing `C-0 C-c C-w' or, if you
- find that easier, `C-u C-u C-u C-c C-w'."
- :group 'org-refile
- :type 'boolean)
- (defcustom org-refile-use-outline-path nil
- "Non-nil means provide refile targets as paths.
- So a level 3 headline will be available as level1/level2/level3.
- When the value is `file', also include the file name (without directory)
- into the path. In this case, you can also stop the completion after
- the file name, to get entries inserted as top level in the file.
- When `full-file-path', include the full file path."
- :group 'org-refile
- :type '(choice
- (const :tag "Not" nil)
- (const :tag "Yes" t)
- (const :tag "Start with file name" file)
- (const :tag "Start with full file path" full-file-path)))
- (defcustom org-outline-path-complete-in-steps t
- "Non-nil means complete the outline path in hierarchical steps.
- When Org-mode uses the refile interface to select an outline path
- \(see variable `org-refile-use-outline-path'), the completion of
- the path can be done is a single go, or if can be done in steps down
- the headline hierarchy. Going in steps is probably the best if you
- do not use a special completion package like `ido' or `icicles'.
- However, when using these packages, going in one step can be very
- fast, while still showing the whole path to the entry."
- :group 'org-refile
- :type 'boolean)
- (defcustom org-refile-allow-creating-parent-nodes nil
- "Non-nil means allow to create new nodes as refile targets.
- New nodes are then created by adding \"/new node name\" to the completion
- of an existing node. When the value of this variable is `confirm',
- new node creation must be confirmed by the user (recommended)
- When nil, the completion must match an existing entry.
- Note that, if the new heading is not seen by the criteria
- listed in `org-refile-targets', multiple instances of the same
- heading would be created by trying again to file under the new
- heading."
- :group 'org-refile
- :type '(choice
- (const :tag "Never" nil)
- (const :tag "Always" t)
- (const :tag "Prompt for confirmation" confirm)))
- (defgroup org-todo nil
- "Options concerning TODO items in Org-mode."
- :tag "Org TODO"
- :group 'org)
- (defgroup org-progress nil
- "Options concerning Progress logging in Org-mode."
- :tag "Org Progress"
- :group 'org-time)
- (defvar org-todo-interpretation-widgets
- '(
- (:tag "Sequence (cycling hits every state)" sequence)
- (:tag "Type (cycling directly to DONE)" type))
- "The available interpretation symbols for customizing `org-todo-keywords'.
- Interested libraries should add to this list.")
- (defcustom org-todo-keywords '((sequence "TODO" "DONE"))
- "List of TODO entry keyword sequences and their interpretation.
- \\<org-mode-map>This is a list of sequences.
- Each sequence starts with a symbol, either `sequence' or `type',
- indicating if the keywords should be interpreted as a sequence of
- action steps, or as different types of TODO items. The first
- keywords are states requiring action - these states will select a headline
- for inclusion into the global TODO list Org-mode produces. If one of
- the \"keywords\" is the vertical bar, \"|\", the remaining keywords
- signify that no further action is necessary. If \"|\" is not found,
- the last keyword is treated as the only DONE state of the sequence.
- The command \\[org-todo] cycles an entry through these states, and one
- additional state where no keyword is present. For details about this
- cycling, see the manual.
- TODO keywords and interpretation can also be set on a per-file basis with
- the special #+SEQ_TODO and #+TYP_TODO lines.
- Each keyword can optionally specify a character for fast state selection
- \(in combination with the variable `org-use-fast-todo-selection')
- and specifiers for state change logging, using the same syntax
- that is used in the \"#+TODO:\" lines. For example, \"WAIT(w)\" says
- that the WAIT state can be selected with the \"w\" key. \"WAIT(w!)\"
- indicates to record a time stamp each time this state is selected.
- Each keyword may also specify if a timestamp or a note should be
- recorded when entering or leaving the state, by adding additional
- characters in the parenthesis after the keyword. This looks like this:
- \"WAIT(w@/!)\". \"@\" means to add a note (with time), \"!\" means to
- record only the time of the state change. With X and Y being either
- \"@\" or \"!\", \"X/Y\" means use X when entering the state, and use
- Y when leaving the state if and only if the *target* state does not
- define X. You may omit any of the fast-selection key or X or /Y,
- so WAIT(w@), WAIT(w/@) and WAIT(@/@) are all valid.
- For backward compatibility, this variable may also be just a list
- of keywords - in this case the interpretation (sequence or type) will be
- taken from the (otherwise obsolete) variable `org-todo-interpretation'."
- :group 'org-todo
- :group 'org-keywords
- :type '(choice
- (repeat :tag "Old syntax, just keywords"
- (string :tag "Keyword"))
- (repeat :tag "New syntax"
- (cons
- (choice
- :tag "Interpretation"
- ;;Quick and dirty way to see
- ;;`org-todo-interpretations'. This takes the
- ;;place of item arguments
- :convert-widget
- (lambda (widget)
- (widget-put widget
- :args (mapcar
- #'(lambda (x)
- (widget-convert
- (cons 'const x)))
- org-todo-interpretation-widgets))
- widget))
- (repeat
- (string :tag "Keyword"))))))
- (defvar org-todo-keywords-1 nil
- "All TODO and DONE keywords active in a buffer.")
- (make-variable-buffer-local 'org-todo-keywords-1)
- (defvar org-todo-keywords-for-agenda nil)
- (defvar org-done-keywords-for-agenda nil)
- (defvar org-drawers-for-agenda nil)
- (defvar org-todo-keyword-alist-for-agenda nil)
- (defvar org-tag-alist-for-agenda nil)
- (defvar org-agenda-contributing-files nil)
- (defvar org-not-done-keywords nil)
- (make-variable-buffer-local 'org-not-done-keywords)
- (defvar org-done-keywords nil)
- (make-variable-buffer-local 'org-done-keywords)
- (defvar org-todo-heads nil)
- (make-variable-buffer-local 'org-todo-heads)
- (defvar org-todo-sets nil)
- (make-variable-buffer-local 'org-todo-sets)
- (defvar org-todo-log-states nil)
- (make-variable-buffer-local 'org-todo-log-states)
- (defvar org-todo-kwd-alist nil)
- (make-variable-buffer-local 'org-todo-kwd-alist)
- (defvar org-todo-key-alist nil)
- (make-variable-buffer-local 'org-todo-key-alist)
- (defvar org-todo-key-trigger nil)
- (make-variable-buffer-local 'org-todo-key-trigger)
- (defcustom org-todo-interpretation 'sequence
- "Controls how TODO keywords are interpreted.
- This variable is in principle obsolete and is only used for
- backward compatibility, if the interpretation of todo keywords is
- not given already in `org-todo-keywords'. See that variable for
- more information."
- :group 'org-todo
- :group 'org-keywords
- :type '(choice (const sequence)
- (const type)))
- (defcustom org-use-fast-todo-selection t
- "Non-nil means use the fast todo selection scheme with C-c C-t.
- This variable describes if and under what circumstances the cycling
- mechanism for TODO keywords will be replaced by a single-key, direct
- selection scheme.
- When nil, fast selection is never used.
- When the symbol `prefix', it will be used when `org-todo' is called with
- a prefix argument, i.e. `C-u C-c C-t' in an Org-mode buffer, and `C-u t'
- in an agenda buffer.
- When t, fast selection is used by default. In this case, the prefix
- argument forces cycling instead.
- In all cases, the special interface is only used if access keys have actually
- been assigned by the user, i.e. if keywords in the configuration are followed
- by a letter in parenthesis, like TODO(t)."
- :group 'org-todo
- :type '(choice
- (const :tag "Never" nil)
- (const :tag "By default" t)
- (const :tag "Only with C-u C-c C-t" prefix)))
- (defcustom org-provide-todo-statistics t
- "Non-nil means update todo statistics after insert and toggle.
- ALL-HEADLINES means update todo statistics by including headlines
- with no TODO keyword as well, counting them as not done.
- A list of TODO keywords means the same, but skip keywords that are
- not in this list.
- When this is set, todo statistics is updated in the parent of the
- current entry each time a todo state is changed."
- :group 'org-todo
- :type '(choice
- (const :tag "Yes, only for TODO entries" t)
- (const :tag "Yes, including all entries" 'all-headlines)
- (repeat :tag "Yes, for TODOs in this list"
- (string :tag "TODO keyword"))
- (other :tag "No TODO statistics" nil)))
- (defcustom org-hierarchical-todo-statistics t
- "Non-nil means TODO statistics covers just direct children.
- When nil, all entries in the subtree are considered.
- This has only an effect if `org-provide-todo-statistics' is set.
- To set this to nil for only a single subtree, use a COOKIE_DATA
- property and include the word \"recursive\" into the value."
- :group 'org-todo
- :type 'boolean)
- (defcustom org-after-todo-state-change-hook nil
- "Hook which is run after the state of a TODO item was changed.
- The new state (a string with a TODO keyword, or nil) is available in the
- Lisp variable `state'."
- :group 'org-todo
- :type 'hook)
- (defvar org-blocker-hook nil
- "Hook for functions that are allowed to block a state change.
- Each function gets as its single argument a property list, see
- `org-trigger-hook' for more information about this list.
- If any of the functions in this hook returns nil, the state change
- is blocked.")
- (defvar org-trigger-hook nil
- "Hook for functions that are triggered by a state change.
- Each function gets as its single argument a property list with at least
- the following elements:
- (:type type-of-change :position pos-at-entry-start
- :from old-state :to new-state)
- Depending on the type, more properties may be present.
- This mechanism is currently implemented for:
- TODO state changes
- ------------------
- :type todo-state-change
- :from previous state (keyword as a string), or nil, or a symbol
- 'todo' or 'done', to indicate the general type of state.
- :to new state, like in :from")
- (defcustom org-enforce-todo-dependencies nil
- "Non-nil means undone TODO entries will block switching the parent to DONE.
- Also, if a parent has an :ORDERED: property, switching an entry to DONE will
- be blocked if any prior sibling is not yet done.
- Finally, if the parent is blocked because of ordered siblings of its own,
- the child will also be blocked.
- This variable needs to be set before org.el is loaded, and you need to
- restart Emacs after a change to make the change effective. The only way
- to change is while Emacs is running is through the customize interface."
- :set (lambda (var val)
- (set var val)
- (if val
- (add-hook 'org-blocker-hook
- 'org-block-todo-from-children-or-siblings-or-parent)
- (remove-hook 'org-blocker-hook
- 'org-block-todo-from-children-or-siblings-or-parent)))
- :group 'org-todo
- :type 'boolean)
- (defcustom org-enforce-todo-checkbox-dependencies nil
- "Non-nil means unchecked boxes will block switching the parent to DONE.
- When this is nil, checkboxes have no influence on switching TODO states.
- When non-nil, you first need to check off all check boxes before the TODO
- entry can be switched to DONE.
- This variable needs to be set before org.el is loaded, and you need to
- restart Emacs after a change to make the change effective. The only way
- to change is while Emacs is running is through the customize interface."
- :set (lambda (var val)
- (set var val)
- (if val
- (add-hook 'org-blocker-hook
- 'org-block-todo-from-checkboxes)
- (remove-hook 'org-blocker-hook
- 'org-block-todo-from-checkboxes)))
- :group 'org-todo
- :type 'boolean)
- (defcustom org-treat-insert-todo-heading-as-state-change nil
- "Non-nil means inserting a TODO heading is treated as state change.
- So when the command \\[org-insert-todo-heading] is used, state change
- logging will apply if appropriate. When nil, the new TODO item will
- be inserted directly, and no logging will take place."
- :group 'org-todo
- :type 'boolean)
- (defcustom org-treat-S-cursor-todo-selection-as-state-change t
- "Non-nil means switching TODO states with S-cursor counts as state change.
- This is the default behavior. However, setting this to nil allows a
- convenient way to select a TODO state and bypass any logging associated
- with that."
- :group 'org-todo
- :type 'boolean)
- (defcustom org-todo-state-tags-triggers nil
- "Tag changes that should be triggered by TODO state changes.
- This is a list. Each entry is
- (state-change (tag . flag) .......)
- State-change can be a string with a state, and empty string to indicate the
- state that has no TODO keyword, or it can be one of the symbols `todo'
- or `done', meaning any not-done or done state, respectively."
- :group 'org-todo
- :group 'org-tags
- :type '(repeat
- (cons (choice :tag "When changing to"
- (const :tag "Not-done state" todo)
- (const :tag "Done state" done)
- (string :tag "State"))
- (repeat
- (cons :tag "Tag action"
- (string :tag "Tag")
- (choice (const :tag "Add" t) (const :tag "Remove" nil)))))))
- (defcustom org-log-done nil
- "Information to record when a task moves to the DONE state.
- Possible values are:
- nil Don't add anything, just change the keyword
- time Add a time stamp to the task
- note Prompt for a note and add it with template `org-log-note-headings'
- This option can also be set with on a per-file-basis with
- #+STARTUP: nologdone
- #+STARTUP: logdone
- #+STARTUP: lognotedone
- You can have local logging settings for a subtree by setting the LOGGING
- property to one or more of these keywords."
- :group 'org-todo
- :group 'org-progress
- :type '(choice
- (const :tag "No logging" nil)
- (const :tag "Record CLOSED timestamp" time)
- (const :tag "Record CLOSED timestamp with note." note)))
- ;; Normalize old uses of org-log-done.
- (cond
- ((eq org-log-done t) (setq org-log-done 'time))
- ((and (listp org-log-done) (memq 'done org-log-done))
- (setq org-log-done 'note)))
- (defcustom org-log-reschedule nil
- "Information to record when the scheduling date of a tasks is modified.
- Possible values are:
- nil Don't add anything, just change the date
- time Add a time stamp to the task
- note Prompt for a note and add it with template `org-log-note-headings'
- This option can also be set with on a per-file-basis with
- #+STARTUP: nologreschedule
- #+STARTUP: logreschedule
- #+STARTUP: lognotereschedule"
- :group 'org-todo
- :group 'org-progress
- :type '(choice
- (const :tag "No logging" nil)
- (const :tag "Record timestamp" time)
- (const :tag "Record timestamp with note." note)))
- (defcustom org-log-redeadline nil
- "Information to record when the deadline date of a tasks is modified.
- Possible values are:
- nil Don't add anything, just change the date
- time Add a time stamp to the task
- note Prompt for a note and add it with template `org-log-note-headings'
- This option can also be set with on a per-file-basis with
- #+STARTUP: nologredeadline
- #+STARTUP: logredeadline
- #+STARTUP: lognoteredeadline
- You can have local logging settings for a subtree by setting the LOGGING
- property to one or more of these keywords."
- :group 'org-todo
- :group 'org-progress
- :type '(choice
- (const :tag "No logging" nil)
- (const :tag "Record timestamp" time)
- (const :tag "Record timestamp with note." note)))
- (defcustom org-log-note-clock-out nil
- "Non-nil means record a note when clocking out of an item.
- This can also be configured on a per-file basis by adding one of
- the following lines anywhere in the buffer:
- #+STARTUP: lognoteclock-out
- #+STARTUP: nolognoteclock-out"
- :group 'org-todo
- :group 'org-progress
- :type 'boolean)
- (defcustom org-log-done-with-time t
- "Non-nil means the CLOSED time stamp will contain date and time.
- When nil, only the date will be recorded."
- :group 'org-progress
- :type 'boolean)
- (defcustom org-log-note-headings
- '((done . "CLOSING NOTE %t")
- (state . "State %-12s from %-12S %t")
- (note . "Note taken on %t")
- (reschedule . "Rescheduled from %S on %t")
- (delschedule . "Not scheduled, was %S on %t")
- (redeadline . "New deadline from %S on %t")
- (deldeadline . "Removed deadline, was %S on %t")
- (refile . "Refiled on %t")
- (clock-out . ""))
- "Headings for notes added to entries.
- The value is an alist, with the car being a symbol indicating the note
- context, and the cdr is the heading to be used. The heading may also be the
- empty string.
- %t in the heading will be replaced by a time stamp.
- %T will be an active time stamp instead the default inactive one
- %s will be replaced by the new TODO state, in double quotes.
- %S will be replaced by the old TODO state, in double quotes.
- %u will be replaced by the user name.
- %U will be replaced by the full user name.
- In fact, it is not a good idea to change the `state' entry, because
- agenda log mode depends on the format of these entries."
- :group 'org-todo
- :group 'org-progress
- :type '(list :greedy t
- (cons (const :tag "Heading when closing an item" done) string)
- (cons (const :tag
- "Heading when changing todo state (todo sequence only)"
- state) string)
- (cons (const :tag "Heading when just taking a note" note) string)
- (cons (const :tag "Heading when clocking out" clock-out) string)
- (cons (const :tag "Heading when an item is no longer scheduled" delschedule) string)
- (cons (const :tag "Heading when rescheduling" reschedule) string)
- (cons (const :tag "Heading when changing deadline" redeadline) string)
- (cons (const :tag "Heading when deleting a deadline" deldeadline) string)
- (cons (const :tag "Heading when refiling" refile) string)))
- (unless (assq 'note org-log-note-headings)
- (push '(note . "%t") org-log-note-headings))
- (defcustom org-log-into-drawer nil
- "Non-nil means insert state change notes and time stamps into a drawer.
- When nil, state changes notes will be inserted after the headline and
- any scheduling and clock lines, but not inside a drawer.
- The value of this variable should be the name of the drawer to use.
- LOGBOOK is proposed as the default drawer for this purpose, you can
- also set this to a string to define the drawer of your choice.
- A value of t is also allowed, representing \"LOGBOOK\".
- If this variable is set, `org-log-state-notes-insert-after-drawers'
- will be ignored.
- You can set the property LOG_INTO_DRAWER to overrule this setting for
- a subtree."
- :group 'org-todo
- :group 'org-progress
- :type '(choice
- (const :tag "Not into a drawer" nil)
- (const :tag "LOGBOOK" t)
- (string :tag "Other")))
- (if (fboundp 'defvaralias)
- (defvaralias 'org-log-state-notes-into-drawer 'org-log-into-drawer))
- (defun org-log-into-drawer ()
- "Return the value of `org-log-into-drawer', but let properties overrule.
- If the current entry has or inherits a LOG_INTO_DRAWER property, it will be
- used instead of the default value."
- (let ((p (org-entry-get nil "LOG_INTO_DRAWER" 'inherit)))
- (cond
- ((or (not p) (equal p "nil")) org-log-into-drawer)
- ((equal p "t") "LOGBOOK")
- (t p))))
- (defcustom org-log-state-notes-insert-after-drawers nil
- "Non-nil means insert state change notes after any drawers in entry.
- Only the drawers that *immediately* follow the headline and the
- deadline/scheduled line are skipped.
- When nil, insert notes right after the heading and perhaps the line
- with deadline/scheduling if present.
- This variable will have no effect if `org-log-into-drawer' is
- set."
- :group 'org-todo
- :group 'org-progress
- :type 'boolean)
- (defcustom org-log-states-order-reversed t
- "Non-nil means the latest state note will be directly after heading.
- When nil, the state change notes will be ordered according to time."
- :group 'org-todo
- :group 'org-progress
- :type 'boolean)
- (defcustom org-todo-repeat-to-state nil
- "The TODO state to which a repeater should return the repeating task.
- By default this is the first task in a TODO sequence, or the previous state
- in a TODO_TYP set. But you can specify another task here.
- alternatively, set the :REPEAT_TO_STATE: property of the entry."
- :group 'org-todo
- :type '(choice (const :tag "Head of sequence" nil)
- (string :tag "Specific state")))
- (defcustom org-log-repeat 'time
- "Non-nil means record moving through the DONE state when triggering repeat.
- An auto-repeating task is immediately switched back to TODO when
- marked DONE. If you are not logging state changes (by adding \"@\"
- or \"!\" to the TODO keyword definition), or set `org-log-done' to
- record a closing note, there will be no record of the task moving
- through DONE. This variable forces taking a note anyway.
- nil Don't force a record
- time Record a time stamp
- note Record a note
- This option can also be set with on a per-file-basis with
- #+STARTUP: logrepeat
- #+STARTUP: lognoterepeat
- #+STARTUP: nologrepeat
- You can have local logging settings for a subtree by setting the LOGGING
- property to one or more of these keywords."
- :group 'org-todo
- :group 'org-progress
- :type '(choice
- (const :tag "Don't force a record" nil)
- (const :tag "Force recording the DONE state" time)
- (const :tag "Force recording a note with the DONE state" note)))
- (defgroup org-priorities nil
- "Priorities in Org-mode."
- :tag "Org Priorities"
- :group 'org-todo)
- (defcustom org-enable-priority-commands t
- "Non-nil means priority commands are active.
- When nil, these commands will be disabled, so that you never accidentally
- set a priority."
- :group 'org-priorities
- :type 'boolean)
- (defcustom org-highest-priority ?A
- "The highest priority of TODO items. A character like ?A, ?B etc.
- Must have a smaller ASCII number than `org-lowest-priority'."
- :group 'org-priorities
- :type 'character)
- (defcustom org-lowest-priority ?C
- "The lowest priority of TODO items. A character like ?A, ?B etc.
- Must have a larger ASCII number than `org-highest-priority'."
- :group 'org-priorities
- :type 'character)
- (defcustom org-default-priority ?B
- "The default priority of TODO items.
- This is the priority an item gets if no explicit priority is given.
- When starting to cycle on an empty priority the first step in the cycle
- depends on `org-priority-start-cycle-with-default'. The resulting first
- step priority must not exceed the range from `org-highest-priority' to
- `org-lowest-priority' which means that `org-default-priority' has to be
- in this range exclusive or inclusive the range boundaries. Else the
- first step refuses to set the default and the second will fall back
- to (depending on the command used) the highest or lowest priority."
- :group 'org-priorities
- :type 'character)
- (defcustom org-priority-start-cycle-with-default t
- "Non-nil means start with default priority when starting to cycle.
- When this is nil, the first step in the cycle will be (depending on the
- command used) one higher or lower than the default priority.
- See also `org-default-priority'."
- :group 'org-priorities
- :type 'boolean)
- (defcustom org-get-priority-function nil
- "Function to extract the priority from a string.
- The string is normally the headline. If this is nil Org computes the
- priority from the priority cookie like [#A] in the headline. It returns
- an integer, increasing by 1000 for each priority level.
- The user can set a different function here, which should take a string
- as an argument and return the numeric priority."
- :group 'org-priorities
- :type 'function)
- (defgroup org-time nil
- "Options concerning time stamps and deadlines in Org-mode."
- :tag "Org Time"
- :group 'org)
- (defcustom org-insert-labeled-timestamps-at-point nil
- "Non-nil means SCHEDULED and DEADLINE timestamps are inserted at point.
- When nil, these labeled time stamps are forces into the second line of an
- entry, just after the headline. When scheduling from the global TODO list,
- the time stamp will always be forced into the second line."
- :group 'org-time
- :type 'boolean)
- (defconst org-time-stamp-formats '("<%Y-%m-%d %a>" . "<%Y-%m-%d %a %H:%M>")
- "Formats for `format-time-string' which are used for time stamps.
- It is not recommended to change this constant.")
- (defcustom org-time-stamp-rounding-minutes '(0 5)
- "Number of minutes to round time stamps to.
- These are two values, the first applies when first creating a time stamp.
- The second applies when changing it with the commands `S-up' and `S-down'.
- When changing the time stamp, this means that it will change in steps
- of N minutes, as given by the second value.
- When a setting is 0 or 1, insert the time unmodified. Useful rounding
- numbers should be factors of 60, so for example 5, 10, 15.
- When this is larger than 1, you can still force an exact time stamp by using
- a double prefix argument to a time stamp command like `C-c .' or `C-c !',
- and by using a prefix arg to `S-up/down' to specify the exact number
- of minutes to shift."
- :group 'org-time
- :get #'(lambda (var) ; Make sure both elements are there
- (if (integerp (default-value var))
- (list (default-value var) 5)
- (default-value var)))
- :type '(list
- (integer :tag "when inserting times")
- (integer :tag "when modifying times")))
- ;; Normalize old customizations of this variable.
- (when (integerp org-time-stamp-rounding-minutes)
- (setq org-time-stamp-rounding-minutes
- (list org-time-stamp-rounding-minutes
- org-time-stamp-rounding-minutes)))
- (defcustom org-display-custom-times nil
- "Non-nil means overlay custom formats over all time stamps.
- The formats are defined through the variable `org-time-stamp-custom-formats'.
- To turn this on on a per-file basis, insert anywhere in the file:
- #+STARTUP: customtime"
- :group 'org-time
- :set 'set-default
- :type 'sexp)
- (make-variable-buffer-local 'org-display-custom-times)
- (defcustom org-time-stamp-custom-formats
- '("<%m/%d/%y %a>" . "<%m/%d/%y %a %H:%M>") ; american
- "Custom formats for time stamps. See `format-time-string' for the syntax.
- These are overlayed over the default ISO format if the variable
- `org-display-custom-times' is set. Time like %H:%M should be at the
- end of the second format. The custom formats are also honored by export
- commands, if custom time display is turned on at the time of export."
- :group 'org-time
- :type 'sexp)
- (defun org-time-stamp-format (&optional long inactive)
- "Get the right format for a time string."
- (let ((f (if long (cdr org-time-stamp-formats)
- (car org-time-stamp-formats))))
- (if inactive
- (concat "[" (substring f 1 -1) "]")
- f)))
- (defcustom org-time-clocksum-format "%d:%02d"
- "The format string used when creating CLOCKSUM lines.
- This is also used when org-mode generates a time duration."
- :group 'org-time
- :type 'string)
- (defcustom org-time-clocksum-use-fractional nil
- "If non-nil, \\[org-clock-display] uses fractional times.
- org-mode generates a time duration."
- :group 'org-time
- :type 'boolean)
- (defcustom org-time-clocksum-fractional-format "%.2f"
- "The format string used when creating CLOCKSUM lines, or when
- org-mode generates a time duration."
- :group 'org-time
- :type 'string)
- (defcustom org-deadline-warning-days 14
- "No. of days before expiration during which a deadline becomes active.
- This variable governs the display in sparse trees and in the agenda.
- When 0 or negative, it means use this number (the absolute value of it)
- even if a deadline has a different individual lead time specified.
- Custom commands can set this variable in the options section."
- :group 'org-time
- :group 'org-agenda-daily/weekly
- :type 'integer)
- (defcustom org-read-date-prefer-future t
- "Non-nil means assume future for incomplete date input from user.
- This affects the following situations:
- 1. The user gives a month but not a year.
- For example, if it is April and you enter \"feb 2\", this will be read
- as Feb 2, *next* year. \"May 5\", however, will be this year.
- 2. The user gives a day, but no month.
- For example, if today is the 15th, and you enter \"3\", Org-mode will
- read this as the third of *next* month. However, if you enter \"17\",
- it will be considered as *this* month.
- If you set this variable to the symbol `time', then also the following
- will work:
- 3. If the user gives a time, but no day. If the time is before now,
- to will be interpreted as tomorrow.
- Currently none of this works for ISO week specifications.
- When this option is nil, the current day, month and year will always be
- used as defaults.
- See also `org-agenda-jump-prefer-future'."
- :group 'org-time
- :type '(choice
- (const :tag "Never" nil)
- (const :tag "Check month and day" t)
- (const :tag "Check month, day, and time" time)))
- (defcustom org-agenda-jump-prefer-future 'org-read-date-prefer-future
- "Should the agenda jump command prefer the future for incomplete dates?
- The default is to do the same as configured in `org-read-date-prefer-future'.
- But you can also set a deviating value here.
- This may t or nil, or the symbol `org-read-date-prefer-future'."
- :group 'org-agenda
- :group 'org-time
- :type '(choice
- (const :tag "Use org-read-date-prefer-future"
- org-read-date-prefer-future)
- (const :tag "Never" nil)
- (const :tag "Always" t)))
- (defcustom org-read-date-force-compatible-dates t
- "Should date/time prompt force dates that are guaranteed to work in Emacs?
- Depending on the system Emacs is running on, certain dates cannot
- be represented with the type used internally to represent time.
- Dates between 1970-1-1 and 2038-1-1 can always be represented
- correctly. Some systems allow for earlier dates, some for later,
- some for both. One way to find out it to insert any date into an
- Org buffer, putting the cursor on the year and hitting S-up and
- S-down to test the range.
- When this variable is set to t, the date/time prompt will not let
- you specify dates outside the 1970-2037 range, so it is certain that
- these dates will work in whatever version of Emacs you are
- running, and also that you can move a file from one Emacs implementation
- to another. WHenever Org is forcing the year for you, it will display
- a message and beep.
- When this variable is nil, Org will check if the date is
- representable in the specific Emacs implementation you are using.
- If not, it will force a year, usually the current year, and beep
- to remind you. Currently this setting is not recommended because
- the likelihood that you will open your Org files in an Emacs that
- has limited date range is not negligible.
- A workaround for this problem is to use diary sexp dates for time
- stamps outside of this range."
- :group 'org-time
- :type 'boolean)
- (defcustom org-read-date-display-live t
- "Non-nil means display current interpretation of date prompt live.
- This display will be in an overlay, in the minibuffer."
- :group 'org-time
- :type 'boolean)
- (defcustom org-read-date-popup-calendar t
- "Non-nil means pop up a calendar when prompting for a date.
- In the calendar, the date can be selected with mouse-1. However, the
- minibuffer will also be active, and you can simply enter the date as well.
- When nil, only the minibuffer will be available."
- :group 'org-time
- :type 'boolean)
- (if (fboundp 'defvaralias)
- (defvaralias 'org-popup-calendar-for-date-prompt
- 'org-read-date-popup-calendar))
- (defcustom org-read-date-minibuffer-setup-hook nil
- "Hook to be used to set up keys for the date/time interface.
- Add key definitions to `minibuffer-local-map', which will be a temporary
- copy."
- :group 'org-time
- :type 'hook)
- (defcustom org-extend-today-until 0
- "The hour when your day really ends. Must be an integer.
- This has influence for the following applications:
- - When switching the agenda to \"today\". It it is still earlier than
- the time given here, the day recognized as TODAY is actually yesterday.
- - When a date is read from the user and it is still before the time given
- here, the current date and time will be assumed to be yesterday, 23:59.
- Also, timestamps inserted in remember templates follow this rule.
- IMPORTANT: This is a feature whose implementation is and likely will
- remain incomplete. Really, it is only here because past midnight seems to
- be the favorite working time of John Wiegley :-)"
- :group 'org-time
- :type 'integer)
- (defcustom org-edit-timestamp-down-means-later nil
- "Non-nil means S-down will increase the time in a time stamp.
- When nil, S-up will increase."
- :group 'org-time
- :type 'boolean)
- (defcustom org-calendar-follow-timestamp-change t
- "Non-nil means make the calendar window follow timestamp changes.
- When a timestamp is modified and the calendar window is visible, it will be
- moved to the new date."
- :group 'org-time
- :type 'boolean)
- (defgroup org-tags nil
- "Options concerning tags in Org-mode."
- :tag "Org Tags"
- :group 'org)
- (defcustom org-tag-alist nil
- "List of tags allowed in Org-mode files.
- When this list is nil, Org-mode will base TAG input on what is already in the
- buffer.
- The value of this variable is an alist, the car of each entry must be a
- keyword as a string, the cdr may be a character that is used to select
- that tag through the fast-tag-selection interface.
- See the manual for details."
- :group 'org-tags
- :type '(repeat
- (choice
- (cons (string :tag "Tag name")
- (character :tag "Access char"))
- (list :tag "Start radio group"
- (const :startgroup)
- (option (string :tag "Group description")))
- (list :tag "End radio group"
- (const :endgroup)
- (option (string :tag "Group description")))
- (const :tag "New line" (:newline)))))
- (defcustom org-tag-persistent-alist nil
- "List of tags that will always appear in all Org-mode files.
- This is in addition to any in buffer settings or customizations
- of `org-tag-alist'.
- When this list is nil, Org-mode will base TAG input on `org-tag-alist'.
- The value of this variable is an alist, the car of each entry must be a
- keyword as a string, the cdr may be a character that is used to select
- that tag through the fast-tag-selection interface.
- See the manual for details.
- To disable these tags on a per-file basis, insert anywhere in the file:
- #+STARTUP: noptag"
- :group 'org-tags
- :type '(repeat
- (choice
- (cons (string :tag "Tag name")
- (character :tag "Access char"))
- (const :tag "Start radio group" (:startgroup))
- (const :tag "End radio group" (:endgroup))
- (const :tag "New line" (:newline)))))
- (defcustom org-complete-tags-always-offer-all-agenda-tags nil
- "If non-nil, always offer completion for all tags of all agenda files.
- Instead of customizing this variable directly, you might want to
- set it locally for capture buffers, because there no list of
- tags in that file can be created dynamically (there are none).
- (add-hook 'org-capture-mode-hook
- (lambda ()
- (set (make-local-variable
- 'org-complete-tags-always-offer-all-agenda-tags)
- t)))"
- :group 'org-tags
- :type 'boolean)
- (defvar org-file-tags nil
- "List of tags that can be inherited by all entries in the file.
- The tags will be inherited if the variable `org-use-tag-inheritance'
- says they should be.
- This variable is populated from #+FILETAGS lines.")
- (defcustom org-use-fast-tag-selection 'auto
- "Non-nil means use fast tag selection scheme.
- This is a special interface to select and deselect tags with single keys.
- When nil, fast selection is never used.
- When the symbol `auto', fast selection is used if and only if selection
- characters for tags have been configured, either through the variable
- `org-tag-alist' or through a #+TAGS line in the buffer.
- When t, fast selection is always used and selection keys are assigned
- automatically if necessary."
- :group 'org-tags
- :type '(choice
- (const :tag "Always" t)
- (const :tag "Never" nil)
- (const :tag "When selection characters are configured" 'auto)))
- (defcustom org-fast-tag-selection-single-key nil
- "Non-nil means fast tag selection exits after first change.
- When nil, you have to press RET to exit it.
- During fast tag selection, you can toggle this flag with `C-c'.
- This variable can also have the value `expert'. In this case, the window
- displaying the tags menu is not even shown, until you press C-c again."
- :group 'org-tags
- :type '(choice
- (const :tag "No" nil)
- (const :tag "Yes" t)
- (const :tag "Expert" expert)))
- (defvar org-fast-tag-selection-include-todo nil
- "Non-nil means fast tags selection interface will also offer TODO states.
- This is an undocumented feature, you should not rely on it.")
- (defcustom org-tags-column (if (featurep 'xemacs) -76 -77)
- "The column to which tags should be indented in a headline.
- If this number is positive, it specifies the column. If it is negative,
- it means that the tags should be flushright to that column. For example,
- -80 works well for a normal 80 character screen."
- :group 'org-tags
- :type 'integer)
- (defcustom org-auto-align-tags t
- "Non-nil keeps tags aligned when modifying headlines.
- Some operations (i.e. demoting) change the length of a headline and
- therefore shift the tags around. With this option turned on, after
- each such operation the tags are again aligned to `org-tags-column'."
- :group 'org-tags
- :type 'boolean)
- (defcustom org-use-tag-inheritance t
- "Non-nil means tags in levels apply also for sublevels.
- When nil, only the tags directly given in a specific line apply there.
- This may also be a list of tags that should be inherited, or a regexp that
- matches tags that should be inherited. Additional control is possible
- with the variable `org-tags-exclude-from-inheritance' which gives an
- explicit list of tags to be excluded from inheritance., even if the value of
- `org-use-tag-inheritance' would select it for inheritance.
- If this option is t, a match early-on in a tree can lead to a large
- number of matches in the subtree when constructing the agenda or creating
- a sparse tree. If you only want to see the first match in a tree during
- a search, check out the variable `org-tags-match-list-sublevels'."
- :group 'org-tags
- :type '(choice
- (const :tag "Not" nil)
- (const :tag "Always" t)
- (repeat :tag "Specific tags" (string :tag "Tag"))
- (regexp :tag "Tags matched by regexp")))
- (defcustom org-tags-exclude-from-inheritance nil
- "List of tags that should never be inherited.
- This is a way to exclude a few tags from inheritance. For way to do
- the opposite, to actively allow inheritance for selected tags,
- see the variable `org-use-tag-inheritance'."
- :group 'org-tags
- :type '(repeat (string :tag "Tag")))
- (defun org-tag-inherit-p (tag)
- "Check if TAG is one that should be inherited."
- (cond
- ((member tag org-tags-exclude-from-inheritance) nil)
- ((eq org-use-tag-inheritance t) t)
- ((not org-use-tag-inheritance) nil)
- ((stringp org-use-tag-inheritance)
- (string-match org-use-tag-inheritance tag))
- ((listp org-use-tag-inheritance)
- (member tag org-use-tag-inheritance))
- (t (error "Invalid setting of `org-use-tag-inheritance'"))))
- (defcustom org-tags-match-list-sublevels t
- "Non-nil means list also sublevels of headlines matching a search.
- This variable applies to tags/property searches, and also to stuck
- projects because this search is based on a tags match as well.
- When set to the symbol `indented', sublevels are indented with
- leading dots.
- Because of tag inheritance (see variable `org-use-tag-inheritance'),
- the sublevels of a headline matching a tag search often also match
- the same search. Listing all of them can create very long lists.
- Setting this variable to nil causes subtrees of a match to be skipped.
- This variable is semi-obsolete and probably should always be true. It
- is better to limit inheritance to certain tags using the variables
- `org-use-tag-inheritance' and `org-tags-exclude-from-inheritance'."
- :group 'org-tags
- :type '(choice
- (const :tag "No, don't list them" nil)
- (const :tag "Yes, do list them" t)
- (const :tag "List them, indented with leading dots" indented)))
- (defcustom org-tags-sort-function nil
- "When set, tags are sorted using this function as a comparator."
- :group 'org-tags
- :type '(choice
- (const :tag "No sorting" nil)
- (const :tag "Alphabetical" string<)
- (const :tag "Reverse alphabetical" string>)
- (function :tag "Custom function" nil)))
- (defvar org-tags-history nil
- "History of minibuffer reads for tags.")
- (defvar org-last-tags-completion-table nil
- "The last used completion table for tags.")
- (defvar org-after-tags-change-hook nil
- "Hook that is run after the tags in a line have changed.")
- (defgroup org-properties nil
- "Options concerning properties in Org-mode."
- :tag "Org Properties"
- :group 'org)
- (defcustom org-property-format "%-10s %s"
- "How property key/value pairs should be formatted by `indent-line'.
- When `indent-line' hits a property definition, it will format the line
- according to this format, mainly to make sure that the values are
- lined-up with respect to each other."
- :group 'org-properties
- :type 'string)
- (defcustom org-use-property-inheritance nil
- "Non-nil means properties apply also for sublevels.
- This setting is chiefly used during property searches. Turning it on can
- cause significant overhead when doing a search, which is why it is not
- on by default.
- When nil, only the properties directly given in the current entry count.
- When t, every property is inherited. The value may also be a list of
- properties that should have inheritance, or a regular expression matching
- properties that should be inherited.
- However, note that some special properties use inheritance under special
- circumstances (not in searches). Examples are CATEGORY, ARCHIVE, COLUMNS,
- and the properties ending in \"_ALL\" when they are used as descriptor
- for valid values of a property.
- Note for programmers:
- When querying an entry with `org-entry-get', you can control if inheritance
- should be used. By default, `org-entry-get' looks only at the local
- properties. You can request inheritance by setting the inherit argument
- to t (to force inheritance) or to `selective' (to respect the setting
- in this variable)."
- :group 'org-properties
- :type '(choice
- (const :tag "Not" nil)
- (const :tag "Always" t)
- (repeat :tag "Specific properties" (string :tag "Property"))
- (regexp :tag "Properties matched by regexp")))
- (defun org-property-inherit-p (property)
- "Check if PROPERTY is one that should be inherited."
- (cond
- ((eq org-use-property-inheritance t) t)
- ((not org-use-property-inheritance) nil)
- ((stringp org-use-property-inheritance)
- (string-match org-use-property-inheritance property))
- ((listp org-use-property-inheritance)
- (member property org-use-property-inheritance))
- (t (error "Invalid setting of `org-use-property-inheritance'"))))
- (defcustom org-columns-default-format "%25ITEM %TODO %3PRIORITY %TAGS"
- "The default column format, if no other format has been defined.
- This variable can be set on the per-file basis by inserting a line
- #+COLUMNS: %25ITEM ....."
- :group 'org-properties
- :type 'string)
- (defcustom org-columns-ellipses ".."
- "The ellipses to be used when a field in column view is truncated.
- When this is the empty string, as many characters as possible are shown,
- but then there will be no visual indication that the field has been truncated.
- When this is a string of length N, the last N characters of a truncated
- field are replaced by this string. If the column is narrower than the
- ellipses string, only part of the ellipses string will be shown."
- :group 'org-properties
- :type 'string)
- (defcustom org-columns-modify-value-for-display-function nil
- "Function that modifies values for display in column view.
- For example, it can be used to cut out a certain part from a time stamp.
- The function must take 2 arguments:
- column-title The title of the column (*not* the property name)
- value The value that should be modified.
- The function should return the value that should be displayed,
- or nil if the normal value should be used."
- :group 'org-properties
- :type 'function)
- (defcustom org-effort-property "Effort"
- "The property that is being used to keep track of effort estimates.
- Effort estimates given in this property need to have the format H:MM."
- :group 'org-properties
- :group 'org-progress
- :type '(string :tag "Property"))
- (defconst org-global-properties-fixed
- '(("VISIBILITY_ALL" . "folded children content all")
- ("CLOCK_MODELINE_TOTAL_ALL" . "current today repeat all auto"))
- "List of property/value pairs that can be inherited by any entry.
- These are fixed values, for the preset properties. The user variable
- that can be used to add to this list is `org-global-properties'.
- The entries in this list are cons cells where the car is a property
- name and cdr is a string with the value. If the value represents
- multiple items like an \"_ALL\" property, separate the items by
- spaces.")
- (defcustom org-global-properties nil
- "List of property/value pairs that can be inherited by any entry.
- This list will be combined with the constant `org-global-properties-fixed'.
- The entries in this list are cons cells where the car is a property
- name and cdr is a string with the value.
- You can set buffer-local values for the same purpose in the variable
- `org-file-properties' this by adding lines like
- #+PROPERTY: NAME VALUE"
- :group 'org-properties
- :type '(repeat
- (cons (string :tag "Property")
- (string :tag "Value"))))
- (defvar org-file-properties nil
- "List of property/value pairs that can be inherited by any entry.
- Valid for the current buffer.
- This variable is populated from #+PROPERTY lines.")
- (make-variable-buffer-local 'org-file-properties)
- (defgroup org-agenda nil
- "Options concerning agenda views in Org-mode."
- :tag "Org Agenda"
- :group 'org)
- (defvar org-category nil
- "Variable used by org files to set a category for agenda display.
- Such files should use a file variable to set it, for example
- # -*- mode: org; org-category: \"ELisp\"
- or contain a special line
- #+CATEGORY: ELisp
- If the file does not specify a category, then file's base name
- is used instead.")
- (make-variable-buffer-local 'org-category)
- (put 'org-category 'safe-local-variable #'(lambda (x) (or (symbolp x) (stringp x))))
- (defcustom org-agenda-files nil
- "The files to be used for agenda display.
- Entries may be added to this list with \\[org-agenda-file-to-front] and removed with
- \\[org-remove-file]. You can also use customize to edit the list.
- If an entry is a directory, all files in that directory that are matched by
- `org-agenda-file-regexp' will be part of the file list.
- If the value of the variable is not a list but a single file name, then
- the list of agenda files is actually stored and maintained in that file, one
- agenda file per line. In this file paths can be given relative to
- `org-directory'. Tilde expansion and environment variable substitution
- are also made."
- :group 'org-agenda
- :type '(choice
- (repeat :tag "List of files and directories" file)
- (file :tag "Store list in a file\n" :value "~/.agenda_files")))
- (defcustom org-agenda-file-regexp "\\`[^.].*\\.org\\'"
- "Regular expression to match files for `org-agenda-files'.
- If any element in the list in that variable contains a directory instead
- of a normal file, all files in that directory that are matched by this
- regular expression will be included."
- :group 'org-agenda
- :type 'regexp)
- (defcustom org-agenda-text-search-extra-files nil
- "List of extra files to be searched by text search commands.
- These files will be search in addition to the agenda files by the
- commands `org-search-view' (`C-c a s') and `org-occur-in-agenda-files'.
- Note that these files will only be searched for text search commands,
- not for the other agenda views like todo lists, tag searches or the weekly
- agenda. This variable is intended to list notes and possibly archive files
- that should also be searched by these two commands.
- In fact, if the first element in the list is the symbol `agenda-archives',
- than all archive files of all agenda files will be added to the search
- scope."
- :group 'org-agenda
- :type '(set :greedy t
- (const :tag "Agenda Archives" agenda-archives)
- (repeat :inline t (file))))
- (if (fboundp 'defvaralias)
- (defvaralias 'org-agenda-multi-occur-extra-files
- 'org-agenda-text-search-extra-files))
- (defcustom org-agenda-skip-unavailable-files nil
- "Non-nil means to just skip non-reachable files in `org-agenda-files'.
- A nil value means to remove them, after a query, from the list."
- :group 'org-agenda
- :type 'boolean)
- (defcustom org-calendar-to-agenda-key [?c]
- "The key to be installed in `calendar-mode-map' for switching to the agenda.
- The command `org-calendar-goto-agenda' will be bound to this key. The
- default is the character `c' because then `c' can be used to switch back and
- forth between agenda and calendar."
- :group 'org-agenda
- :type 'sexp)
- (defcustom org-calendar-agenda-action-key [?k]
- "The key to be installed in `calendar-mode-map' for agenda-action.
- The command `org-agenda-action' will be bound to this key. The
- default is the character `k' because we use the same key in the agenda."
- :group 'org-agenda
- :type 'sexp)
- (defcustom org-calendar-insert-diary-entry-key [?i]
- "The key to be installed in `calendar-mode-map' for adding diary entries.
- This option is irrelevant until `org-agenda-diary-file' has been configured
- to point to an Org-mode file. When that is the case, the command
- `org-agenda-diary-entry' will be bound to the key given here, by default
- `i'. In the calendar, `i' normally adds entries to `diary-file'. So
- if you want to continue doing this, you need to change this to a different
- key."
- :group 'org-agenda
- :type 'sexp)
- (defcustom org-agenda-diary-file 'diary-file
- "File to which to add new entries with the `i' key in agenda and calendar.
- When this is the symbol `diary-file', the functionality in the Emacs
- calendar will be used to add entries to the `diary-file'. But when this
- points to a file, `org-agenda-diary-entry' will be used instead."
- :group 'org-agenda
- :type '(choice
- (const :tag "The standard Emacs diary file" diary-file)
- (file :tag "Special Org file diary entries")))
- (eval-after-load "calendar"
- '(progn
- (org-defkey calendar-mode-map org-calendar-to-agenda-key
- 'org-calendar-goto-agenda)
- (org-defkey calendar-mode-map org-calendar-agenda-action-key
- 'org-agenda-action)
- (add-hook 'calendar-mode-hook
- (lambda ()
- (unless (eq org-agenda-diary-file 'diary-file)
- (define-key calendar-mode-map
- org-calendar-insert-diary-entry-key
- 'org-agenda-diary-entry))))))
- (defgroup org-latex nil
- "Options for embedding LaTeX code into Org-mode."
- :tag "Org LaTeX"
- :group 'org)
- (defcustom org-format-latex-options
- '(:foreground default :background default :scale 1.0
- :html-foreground "Black" :html-background "Transparent"
- :html-scale 1.0 :matchers ("begin" "$1" "$" "$$" "\\(" "\\["))
- "Options for creating images from LaTeX fragments.
- This is a property list with the following properties:
- :foreground the foreground color for images embedded in Emacs, e.g. \"Black\".
- `default' means use the foreground of the default face.
- :background the background color, or \"Transparent\".
- `default' means use the background of the default face.
- :scale a scaling factor for the size of the images, to get more pixels
- :html-foreground, :html-background, :html-scale
- the same numbers for HTML export.
- :matchers a list indicating which matchers should be used to
- find LaTeX fragments. Valid members of this list are:
- \"begin\" find environments
- \"$1\" find single characters surrounded by $.$
- \"$\" find math expressions surrounded by $...$
- \"$$\" find math expressions surrounded by $$....$$
- \"\\(\" find math expressions surrounded by \\(...\\)
- \"\\ [\" find math expressions surrounded by \\ [...\\]"
- :group 'org-latex
- :type 'plist)
- (defcustom org-format-latex-signal-error t
- "Non-nil means signal an error when image creation of LaTeX snippets fails.
- When nil, just push out a message."
- :group 'org-latex
- :type 'boolean)
- (defcustom org-format-latex-header "\\documentclass{article}
- \\usepackage[usenames]{color}
- \\usepackage{amsmath}
- \\usepackage[mathscr]{eucal}
- \\pagestyle{empty} % do not remove
- \[PACKAGES]
- \[DEFAULT-PACKAGES]
- % The settings below are copied from fullpage.sty
- \\setlength{\\textwidth}{\\paperwidth}
- \\addtolength{\\textwidth}{-3cm}
- \\setlength{\\oddsidemargin}{1.5cm}
- \\addtolength{\\oddsidemargin}{-2.54cm}
- \\setlength{\\evensidemargin}{\\oddsidemargin}
- \\setlength{\\textheight}{\\paperheight}
- \\addtolength{\\textheight}{-\\headheight}
- \\addtolength{\\textheight}{-\\headsep}
- \\addtolength{\\textheight}{-\\footskip}
- \\addtolength{\\textheight}{-3cm}
- \\setlength{\\topmargin}{1.5cm}
- \\addtolength{\\topmargin}{-2.54cm}"
- "The document header used for processing LaTeX fragments.
- It is imperative that this header make sure that no page number
- appears on the page. The package defined in the variables
- `org-export-latex-default-packages-alist' and `org-export-latex-packages-alist'
- will either replace the placeholder \"[PACKAGES]\" in this header, or they
- will be appended."
- :group 'org-latex
- :type 'string)
- (defvar org-format-latex-header-extra nil)
- (defun org-set-packages-alist (var val)
- "Set the packages alist and make sure it has 3 elements per entry."
- (set var (mapcar (lambda (x)
- (if (and (consp x) (= (length x) 2))
- (list (car x) (nth 1 x) t)
- x))
- val)))
- (defun org-get-packages-alist (var)
- "Get the packages alist and make sure it has 3 elements per entry."
- (mapcar (lambda (x)
- (if (and (consp x) (= (length x) 2))
- (list (car x) (nth 1 x) t)
- x))
- (default-value var)))
- ;; The following variables are defined here because is it also used
- ;; when formatting latex fragments. Originally it was part of the
- ;; LaTeX exporter, which is why the name includes "export".
- (defcustom org-export-latex-default-packages-alist
- '(("AUTO" "inputenc" t)
- ("T1" "fontenc" t)
- ("" "fixltx2e" nil)
- ("" "graphicx" t)
- ("" "longtable" nil)
- ("" "float" nil)
- ("" "wrapfig" nil)
- ("" "soul" t)
- ("" "textcomp" t)
- ("" "marvosym" t)
- ("" "wasysym" t)
- ("" "latexsym" t)
- ("" "amssymb" t)
- ("" "hyperref" nil)
- "\\tolerance=1000"
- )
- "Alist of default packages to be inserted in the header.
- Change this only if one of the packages here causes an incompatibility
- with another package you are using.
- The packages in this list are needed by one part or another of Org-mode
- to function properly.
- - inputenc, fontenc: for basic font and character selection
- - textcomp, marvosymb, wasysym, latexsym, amssym: for various symbols used
- for interpreting the entities in `org-entities'. You can skip some of these
- packages if you don't use any of the symbols in it.
- - graphicx: for including images
- - float, wrapfig: for figure placement
- - longtable: for long tables
- - hyperref: for cross references
- Therefore you should not modify this variable unless you know what you
- are doing. The one reason to change it anyway is that you might be loading
- some other package that conflicts with one of the default packages.
- Each cell is of the format \( \"options\" \"package\" snippet-flag\).
- If SNIPPET-FLAG is t, the package also needs to be included when
- compiling LaTeX snippets into images for inclusion into HTML."
- :group 'org-export-latex
- :set 'org-set-packages-alist
- :get 'org-get-packages-alist
- :type '(repeat
- (choice
- (list :tag "options/package pair"
- (string :tag "options")
- (string :tag "package")
- (boolean :tag "Snippet"))
- (string :tag "A line of LaTeX"))))
- (defcustom org-export-latex-packages-alist nil
- "Alist of packages to be inserted in every LaTeX header.
- These will be inserted after `org-export-latex-default-packages-alist'.
- Each cell is of the format \( \"options\" \"package\" snippet-flag \).
- SNIPPET-FLAG, when t, indicates that this package is also needed when
- turning LaTeX snippets into images for inclusion into HTML.
- Make sure that you only list packages here which:
- - you want in every file
- - do not conflict with the default packages in
- `org-export-latex-default-packages-alist'
- - do not conflict with the setup in `org-format-latex-header'."
- :group 'org-export-latex
- :set 'org-set-packages-alist
- :get 'org-get-packages-alist
- :type '(repeat
- (choice
- (list :tag "options/package pair"
- (string :tag "options")
- (string :tag "package")
- (boolean :tag "Snippet"))
- (string :tag "A line of LaTeX"))))
- (defgroup org-appearance nil
- "Settings for Org-mode appearance."
- :tag "Org Appearance"
- :group 'org)
- (defcustom org-level-color-stars-only nil
- "Non-nil means fontify only the stars in each headline.
- When nil, the entire headline is fontified.
- Changing it requires restart of `font-lock-mode' to become effective
- also in regions already fontified."
- :group 'org-appearance
- :type 'boolean)
- (defcustom org-hide-leading-stars nil
- "Non-nil means hide the first N-1 stars in a headline.
- This works by using the face `org-hide' for these stars. This
- face is white for a light background, and black for a dark
- background. You may have to customize the face `org-hide' to
- make this work.
- Changing it requires restart of `font-lock-mode' to become effective
- also in regions already fontified.
- You may also set this on a per-file basis by adding one of the following
- lines to the buffer:
- #+STARTUP: hidestars
- #+STARTUP: showstars"
- :group 'org-appearance
- :type 'boolean)
- (defcustom org-hidden-keywords nil
- "List of symbols corresponding to keywords to be hidden the org buffer.
- For example, a value '(title) for this list will make the document's title
- appear in the buffer without the initial #+TITLE: keyword."
- :group 'org-appearance
- :type '(set (const :tag "#+AUTHOR" author)
- (const :tag "#+DATE" date)
- (const :tag "#+EMAIL" email)
- (const :tag "#+TITLE" title)))
- (defcustom org-fontify-done-headline nil
- "Non-nil means change the face of a headline if it is marked DONE.
- Normally, only the TODO/DONE keyword indicates the state of a headline.
- When this is non-nil, the headline after the keyword is set to the
- `org-headline-done' as an additional indication."
- :group 'org-appearance
- :type 'boolean)
- (defcustom org-fontify-emphasized-text t
- "Non-nil means fontify *bold*, /italic/ and _underlined_ text.
- Changing this variable requires a restart of Emacs to take effect."
- :group 'org-appearance
- :type 'boolean)
- (defcustom org-fontify-whole-heading-line nil
- "Non-nil means fontify the whole line for headings.
- This is useful when setting a background color for the
- org-level-* faces."
- :group 'org-appearance
- :type 'boolean)
- (defcustom org-highlight-latex-fragments-and-specials nil
- "Non-nil means fontify what is treated specially by the exporters."
- :group 'org-appearance
- :type 'boolean)
- (defcustom org-hide-emphasis-markers nil
- "Non-nil mean font-lock should hide the emphasis marker characters."
- :group 'org-appearance
- :type 'boolean)
- (defcustom org-pretty-entities nil
- "Non-nil means show entities as UTF8 characters.
- When nil, the \\name form remains in the buffer."
- :group 'org-appearance
- :type 'boolean)
- (defcustom org-pretty-entities-include-sub-superscripts t
- "Non-nil means, pretty entity display includes formatting sub/superscripts."
- :group 'org-appearance
- :type 'boolean)
- (defvar org-emph-re nil
- "Regular expression for matching emphasis.
- After a match, the match groups contain these elements:
- 0 The match of the full regular expression, including the characters
- before and after the proper match
- 1 The character before the proper match, or empty at beginning of line
- 2 The proper match, including the leading and trailing markers
- 3 The leading marker like * or /, indicating the type of highlighting
- 4 The text between the emphasis markers, not including the markers
- 5 The character after the match, empty at the end of a line")
- (defvar org-verbatim-re nil
- "Regular expression for matching verbatim text.")
- (defvar org-emphasis-regexp-components) ; defined just below
- (defvar org-emphasis-alist) ; defined just below
- (defun org-set-emph-re (var val)
- "Set variable and compute the emphasis regular expression."
- (set var val)
- (when (and (boundp 'org-emphasis-alist)
- (boundp 'org-emphasis-regexp-components)
- org-emphasis-alist org-emphasis-regexp-components)
- (let* ((e org-emphasis-regexp-components)
- (pre (car e))
- (post (nth 1 e))
- (border (nth 2 e))
- (body (nth 3 e))
- (nl (nth 4 e))
- (body1 (concat body "*?"))
- (markers (mapconcat 'car org-emphasis-alist ""))
- (vmarkers (mapconcat
- (lambda (x) (if (eq (nth 4 x) 'verbatim) (car x) ""))
- org-emphasis-alist "")))
- ;; make sure special characters appear at the right position in the class
- (if (string-match "\\^" markers)
- (setq markers (concat (replace-match "" t t markers) "^")))
- (if (string-match "-" markers)
- (setq markers (concat (replace-match "" t t markers) "-")))
- (if (string-match "\\^" vmarkers)
- (setq vmarkers (concat (replace-match "" t t vmarkers) "^")))
- (if (string-match "-" vmarkers)
- (setq vmarkers (concat (replace-match "" t t vmarkers) "-")))
- (if (> nl 0)
- (setq body1 (concat body1 "\\(?:\n" body "*?\\)\\{0,"
- (int-to-string nl) "\\}")))
- ;; Make the regexp
- (setq org-emph-re
- (concat "\\([" pre "]\\|^\\)"
- "\\("
- "\\([" markers "]\\)"
- "\\("
- "[^" border "]\\|"
- "[^" border "]"
- body1
- "[^" border "]"
- "\\)"
- "\\3\\)"
- "\\([" post "]\\|$\\)"))
- (setq org-verbatim-re
- (concat "\\([" pre "]\\|^\\)"
- "\\("
- "\\([" vmarkers "]\\)"
- "\\("
- "[^" border "]\\|"
- "[^" border "]"
- body1
- "[^" border "]"
- "\\)"
- "\\3\\)"
- "\\([" post "]\\|$\\)")))))
- (defcustom org-emphasis-regexp-components
- '(" \t('\"{" "- \t.,:!?;'\")}\\" " \t\r\n,\"'" "." 1)
- "Components used to build the regular expression for emphasis.
- This is a list with five entries. Terminology: In an emphasis string
- like \" *strong word* \", we call the initial space PREMATCH, the final
- space POSTMATCH, the stars MARKERS, \"s\" and \"d\" are BORDER characters
- and \"trong wor\" is the body. The different components in this variable
- specify what is allowed/forbidden in each part:
- pre Chars allowed as prematch. Beginning of line will be allowed too.
- post Chars allowed as postmatch. End of line will be allowed too.
- border The chars *forbidden* as border characters.
- body-regexp A regexp like \".\" to match a body character. Don't use
- non-shy groups here, and don't allow newline here.
- newline The maximum number of newlines allowed in an emphasis exp.
- Use customize to modify this, or restart Emacs after changing it."
- :group 'org-appearance
- :set 'org-set-emph-re
- :type '(list
- (sexp :tag "Allowed chars in pre ")
- (sexp :tag "Allowed chars in post ")
- (sexp :tag "Forbidden chars in border ")
- (sexp :tag "Regexp for body ")
- (integer :tag "number of newlines allowed")
- (option (boolean :tag "Please ignore this button"))))
- (defcustom org-emphasis-alist
- `(("*" bold "<b>" "</b>")
- ("/" italic "<i>" "</i>")
- ("_" underline "<span style=\"text-decoration:underline;\">" "</span>")
- ("=" org-code "<code>" "</code>" verbatim)
- ("~" org-verbatim "<code>" "</code>" verbatim)
- ("+" ,(if (featurep 'xemacs) 'org-table '(:strike-through t))
- "<del>" "</del>")
- )
- "Special syntax for emphasized text.
- Text starting and ending with a special character will be emphasized, for
- example *bold*, _underlined_ and /italic/. This variable sets the marker
- characters, the face to be used by font-lock for highlighting in Org-mode
- Emacs buffers, and the HTML tags to be used for this.
- For LaTeX export, see the variable `org-export-latex-emphasis-alist'.
- For DocBook export, see the variable `org-export-docbook-emphasis-alist'.
- Use customize to modify this, or restart Emacs after changing it."
- :group 'org-appearance
- :set 'org-set-emph-re
- :type '(repeat
- (list
- (string :tag "Marker character")
- (choice
- (face :tag "Font-lock-face")
- (plist :tag "Face property list"))
- (string :tag "HTML start tag")
- (string :tag "HTML end tag")
- (option (const verbatim)))))
- (defvar org-protecting-blocks
- '("src" "example" "latex" "ascii" "html" "docbook" "ditaa" "dot" "r" "R")
- "Blocks that contain text that is quoted, i.e. not processed as Org syntax.
- This is needed for font-lock setup.")
- ;;; Miscellaneous options
- (defgroup org-completion nil
- "Completion in Org-mode."
- :tag "Org Completion"
- :group 'org)
- (defcustom org-completion-use-ido nil
- "Non-nil means use ido completion wherever possible.
- Note that `ido-mode' must be active for this variable to be relevant.
- If you decide to turn this variable on, you might well want to turn off
- `org-outline-path-complete-in-steps'.
- See also `org-completion-use-iswitchb'."
- :group 'org-completion
- :type 'boolean)
- (defcustom org-completion-use-iswitchb nil
- "Non-nil means use iswitchb completion wherever possible.
- Note that `iswitchb-mode' must be active for this variable to be relevant.
- If you decide to turn this variable on, you might well want to turn off
- `org-outline-path-complete-in-steps'.
- Note that this variable has only an effect if `org-completion-use-ido' is nil."
- :group 'org-completion
- :type 'boolean)
- (defcustom org-completion-fallback-command 'hippie-expand
- "The expansion command called by \\[pcomplete] in normal context.
- Normal means, no org-mode-specific context."
- :group 'org-completion
- :type 'function)
- ;;; Functions and variables from their packages
- ;; Declared here to avoid compiler warnings
- ;; XEmacs only
- (defvar outline-mode-menu-heading)
- (defvar outline-mode-menu-show)
- (defvar outline-mode-menu-hide)
- (defvar zmacs-regions) ; XEmacs regions
- ;; Emacs only
- (defvar mark-active)
- ;; Various packages
- (declare-function calendar-absolute-from-iso "cal-iso" (date))
- (declare-function calendar-forward-day "cal-move" (arg))
- (declare-function calendar-goto-date "cal-move" (date))
- (declare-function calendar-goto-today "cal-move" ())
- (declare-function calendar-iso-from-absolute "cal-iso" (date))
- (defvar calc-embedded-close-formula)
- (defvar calc-embedded-open-formula)
- (declare-function cdlatex-tab "ext:cdlatex" ())
- (declare-function dired-get-filename "dired" (&optional localp no-error-if-not-filep))
- (defvar font-lock-unfontify-region-function)
- (declare-function iswitchb-read-buffer "iswitchb"
- (prompt &optional default require-match start matches-set))
- (defvar iswitchb-temp-buflist)
- (declare-function org-gnus-follow-link "org-gnus" (&optional group article))
- (defvar org-agenda-tags-todo-honor-ignore-options)
- (declare-function org-agenda-skip "org-agenda" ())
- (declare-function
- org-format-agenda-item "org-agenda"
- (extra txt &optional category tags dotime noprefix remove-re habitp))
- (declare-function org-agenda-new-marker "org-agenda" (&optional pos))
- (declare-function org-agenda-change-all-lines "org-agenda"
- (newhead hdmarker &optional fixface just-this))
- (declare-function org-agenda-set-restriction-lock "org-agenda" (&optional type))
- (declare-function org-agenda-maybe-redo "org-agenda" ())
- (declare-function org-agenda-save-markers-for-cut-and-paste "org-agenda"
- (beg end))
- (declare-function org-agenda-copy-local-variable "org-agenda" (var))
- (declare-function org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item
- "org-agenda" (&optional end))
- (declare-function org-inlinetask-remove-END-maybe "org-inlinetask" ())
- (declare-function org-inlinetask-in-task-p "org-inlinetask" ())
- (declare-function org-inlinetask-goto-beginning "org-inlinetask" ())
- (declare-function org-inlinetask-goto-end "org-inlinetask" ())
- (declare-function org-indent-mode "org-indent" (&optional arg))
- (declare-function parse-time-string "parse-time" (string))
- (declare-function org-attach-reveal "org-attach" (&optional if-exists))
- (declare-function org-export-latex-fix-inputenc "org-latex" ())
- (declare-function orgtbl-send-table "org-table" (&optional maybe))
- (defvar remember-data-file)
- (defvar texmathp-why)
- (declare-function speedbar-line-directory "speedbar" (&optional depth))
- (declare-function table--at-cell-p "table" (position &optional object at-column))
- (defvar w3m-current-url)
- (defvar w3m-current-title)
- (defvar org-latex-regexps)
- ;;; Autoload and prepare some org modules
- ;; Some table stuff that needs to be defined here, because it is used
- ;; by the functions setting up org-mode or checking for table context.
- (defconst org-table-any-line-regexp "^[ \t]*\\(|\\|\\+-[-+]\\)"
- "Detect an org-type or table-type table.")
- (defconst org-table-line-regexp "^[ \t]*|"
- "Detect an org-type table line.")
- (defconst org-table-dataline-regexp "^[ \t]*|[^-]"
- "Detect an org-type table line.")
- (defconst org-table-hline-regexp "^[ \t]*|-"
- "Detect an org-type table hline.")
- (defconst org-table1-hline-regexp "^[ \t]*\\+-[-+]"
- "Detect a table-type table hline.")
- (defconst org-table-any-border-regexp "^[ \t]*[^|+ \t]"
- "Detect the first line outside a table when searching from within it.
- This works for both table types.")
- ;; Autoload the functions in org-table.el that are needed by functions here.
- (eval-and-compile
- (org-autoload "org-table"
- '(org-table-align org-table-begin org-table-blank-field
- org-table-convert org-table-convert-region org-table-copy-down
- org-table-copy-region org-table-create
- org-table-create-or-convert-from-region
- org-table-create-with-table.el org-table-current-dline
- org-table-cut-region org-table-delete-column org-table-edit-field
- org-table-edit-formulas org-table-end org-table-eval-formula
- org-table-export org-table-field-info
- org-table-get-stored-formulas org-table-goto-column
- org-table-hline-and-move org-table-import org-table-insert-column
- org-table-insert-hline org-table-insert-row org-table-iterate
- org-table-justify-field-maybe org-table-kill-row
- org-table-maybe-eval-formula org-table-maybe-recalculate-line
- org-table-move-column org-table-move-column-left
- org-table-move-column-right org-table-move-row
- org-table-move-row-down org-table-move-row-up
- org-table-next-field org-table-next-row org-table-paste-rectangle
- org-table-previous-field org-table-recalculate
- org-table-rotate-recalc-marks org-table-sort-lines org-table-sum
- org-table-toggle-coordinate-overlays
- org-table-toggle-formula-debugger org-table-wrap-region
- orgtbl-mode turn-on-orgtbl org-table-to-lisp
- orgtbl-to-generic orgtbl-to-tsv orgtbl-to-csv orgtbl-to-latex
- orgtbl-to-orgtbl orgtbl-to-html orgtbl-to-texinfo)))
- (defun org-at-table-p (&optional table-type)
- "Return t if the cursor is inside an org-type table.
- If TABLE-TYPE is non-nil, also check for table.el-type tables."
- (if org-enable-table-editor
- (save-excursion
- (beginning-of-line 1)
- (looking-at (if table-type org-table-any-line-regexp
- org-table-line-regexp)))
- nil))
- (defsubst org-table-p () (org-at-table-p))
- (defun org-at-table.el-p ()
- "Return t if and only if we are at a table.el table."
- (and (org-at-table-p 'any)
- (save-excursion
- (goto-char (org-table-begin 'any))
- (looking-at org-table1-hline-regexp))))
- (defun org-table-recognize-table.el ()
- "If there is a table.el table nearby, recognize it and move into it."
- (if org-table-tab-recognizes-table.el
- (if (org-at-table.el-p)
- (progn
- (beginning-of-line 1)
- (if (looking-at org-table-dataline-regexp)
- nil
- (if (looking-at org-table1-hline-regexp)
- (progn
- (beginning-of-line 2)
- (if (looking-at org-table-any-border-regexp)
- (beginning-of-line -1)))))
- (if (re-search-forward "|" (org-table-end t) t)
- (progn
- (require 'table)
- (if (table--at-cell-p (point))
- t
- (message "recognizing table.el table...")
- (table-recognize-table)
- (message "recognizing table.el table...done")))
- (error "This should not happen"))
- t)
- nil)
- nil))
- (defun org-at-table-hline-p ()
- "Return t if the cursor is inside a hline in a table."
- (if org-enable-table-editor
- (save-excursion
- (beginning-of-line 1)
- (looking-at org-table-hline-regexp))
- nil))
- (defvar org-table-clean-did-remove-column nil)
- (defun org-table-map-tables (function &optional quietly)
- "Apply FUNCTION to the start of all tables in the buffer."
- (save-excursion
- (save-restriction
- (widen)
- (goto-char (point-min))
- (while (re-search-forward org-table-any-line-regexp nil t)
- (unless quietly
- (message "Mapping tables: %d%%" (/ (* 100.0 (point)) (buffer-size))))
- (beginning-of-line 1)
- (when (looking-at org-table-line-regexp)
- (save-excursion (funcall function))
- (or (looking-at org-table-line-regexp)
- (forward-char 1)))
- (re-search-forward org-table-any-border-regexp nil 1))))
- (unless quietly (message "Mapping tables: done")))
- ;; Declare and autoload functions from org-exp.el & Co
- (declare-function org-default-export-plist "org-exp")
- (declare-function org-infile-export-plist "org-exp")
- (declare-function org-get-current-options "org-exp")
- (eval-and-compile
- (org-autoload "org-exp"
- '(org-export org-export-visible
- org-insert-export-options-template
- org-table-clean-before-export))
- (org-autoload "org-ascii"
- '(org-export-as-ascii org-export-ascii-preprocess
- org-export-as-ascii-to-buffer org-replace-region-by-ascii
- org-export-region-as-ascii))
- (org-autoload "org-latex"
- '(org-export-as-latex-batch org-export-as-latex-to-buffer
- org-replace-region-by-latex org-export-region-as-latex
- org-export-as-latex org-export-as-pdf
- org-export-as-pdf-and-open))
- (org-autoload "org-html"
- '(org-export-as-html-and-open
- org-export-as-html-batch org-export-as-html-to-buffer
- org-replace-region-by-html org-export-region-as-html
- org-export-as-html))
- (org-autoload "org-docbook"
- '(org-export-as-docbook-batch org-export-as-docbook-to-buffer
- org-replace-region-by-docbook org-export-region-as-docbook
- org-export-as-docbook-pdf org-export-as-docbook-pdf-and-open
- org-export-as-docbook))
- (org-autoload "org-icalendar"
- '(org-export-icalendar-this-file
- org-export-icalendar-all-agenda-files
- org-export-icalendar-combine-agenda-files))
- (org-autoload "org-xoxo" '(org-export-as-xoxo))
- (org-autoload "org-beamer" '(org-beamer-mode org-beamer-sectioning)))
- ;; Declare and autoload functions from org-agenda.el
- (eval-and-compile
- (org-autoload "org-agenda"
- '(org-agenda org-agenda-list org-search-view
- org-todo-list org-tags-view org-agenda-list-stuck-projects
- org-diary org-agenda-to-appt
- org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item)))
- ;; Autoload org-remember
- (eval-and-compile
- (org-autoload "org-remember"
- '(org-remember-insinuate org-remember-annotation
- org-remember-apply-template org-remember org-remember-handler)))
- (eval-and-compile
- (org-autoload "org-capture"
- '(org-capture org-capture-insert-template-here
- org-capture-import-remember-templates)))
- ;; Autoload org-clock.el
- (declare-function org-clock-save-markers-for-cut-and-paste "org-clock"
- (beg end))
- (declare-function org-clock-update-mode-line "org-clock" ())
- (declare-function org-resolve-clocks "org-clock"
- (&optional also-non-dangling-p prompt last-valid))
- (defvar org-clock-start-time)
- (defvar org-clock-marker (make-marker)
- "Marker recording the last clock-in.")
- (defvar org-clock-hd-marker (make-marker)
- "Marker recording the last clock-in, but the headline position.")
- (defvar org-clock-heading ""
- "The heading of the current clock entry.")
- (defun org-clock-is-active ()
- "Return non-nil if clock is currently running.
- The return value is actually the clock marker."
- (marker-buffer org-clock-marker))
- (eval-and-compile
- (org-autoload
- "org-clock"
- '(org-clock-in org-clock-out org-clock-cancel
- org-clock-goto org-clock-sum org-clock-display
- org-clock-remove-overlays org-clock-report
- org-clocktable-shift org-dblock-write:clocktable
- org-get-clocktable org-resolve-clocks)))
- (defun org-clock-update-time-maybe ()
- "If this is a CLOCK line, update it and return t.
- Otherwise, return nil."
- (interactive)
- (save-excursion
- (beginning-of-line 1)
- (skip-chars-forward " \t")
- (when (looking-at org-clock-string)
- (let ((re (concat "[ \t]*" org-clock-string
- " *[[<]\\([^]>]+\\)[]>]\\(-+[[<]\\([^]>]+\\)[]>]"
- "\\([ \t]*=>.*\\)?\\)?"))
- ts te h m s neg)
- (cond
- ((not (looking-at re))
- nil)
- ((not (match-end 2))
- (when (and (equal (marker-buffer org-clock-marker) (current-buffer))
- (> org-clock-marker (point))
- (<= org-clock-marker (point-at-eol)))
- ;; The clock is running here
- (setq org-clock-start-time
- (apply 'encode-time
- (org-parse-time-string (match-string 1))))
- (org-clock-update-mode-line)))
- (t
- (and (match-end 4) (delete-region (match-beginning 4) (match-end 4)))
- (end-of-line 1)
- (setq ts (match-string 1)
- te (match-string 3))
- (setq s (- (org-float-time
- (apply 'encode-time (org-parse-time-string te)))
- (org-float-time
- (apply 'encode-time (org-parse-time-string ts))))
- neg (< s 0)
- s (abs s)
- h (floor (/ s 3600))
- s (- s (* 3600 h))
- m (floor (/ s 60))
- s (- s (* 60 s)))
- (insert " => " (format (if neg "-%d:%02d" "%2d:%02d") h m))
- t))))))
- (defun org-check-running-clock ()
- "Check if the current buffer contains the running clock.
- If yes, offer to stop it and to save the buffer with the changes."
- (when (and (equal (marker-buffer org-clock-marker) (current-buffer))
- (y-or-n-p (format "Clock-out in buffer %s before killing it? "
- (buffer-name))))
- (org-clock-out)
- (when (y-or-n-p "Save changed buffer?")
- (save-buffer))))
- (defun org-clocktable-try-shift (dir n)
- "Check if this line starts a clock table, if yes, shift the time block."
- (when (org-match-line "^[ \t]*#\\+BEGIN:[ \t]+clocktable\\>")
- (org-clocktable-shift dir n)))
- ;; Autoload org-timer.el
- (eval-and-compile
- (org-autoload
- "org-timer"
- '(org-timer-start org-timer org-timer-item
- org-timer-change-times-in-region
- org-timer-set-timer
- org-timer-reset-timers
- org-timer-show-remaining-time)))
- ;; Autoload org-feed.el
- (eval-and-compile
- (org-autoload
- "org-feed"
- '(org-feed-update org-feed-update-all org-feed-goto-inbox)))
- ;; Autoload org-indent.el
- ;; Define the variable already here, to make sure we have it.
- (defvar org-indent-mode nil
- "Non-nil if Org-Indent mode is enabled.
- Use the command `org-indent-mode' to change this variable.")
- (eval-and-compile
- (org-autoload
- "org-indent"
- '(org-indent-mode)))
- ;; Autoload org-mobile.el
- (eval-and-compile
- (org-autoload
- "org-mobile"
- '(org-mobile-push org-mobile-pull org-mobile-create-sumo-agenda)))
- ;; Autoload archiving code
- ;; The stuff that is needed for cycling and tags has to be defined here.
- (defgroup org-archive nil
- "Options concerning archiving in Org-mode."
- :tag "Org Archive"
- :group 'org-structure)
- (defcustom org-archive-location "%s_archive::"
- "The location where subtrees should be archived.
- The value of this variable is a string, consisting of two parts,
- separated by a double-colon. The first part is a filename and
- the second part is a headline.
- When the filename is omitted, archiving happens in the same file.
- %s in the filename will be replaced by the current file
- name (without the directory part). Archiving to a different file
- is useful to keep archived entries from contributing to the
- Org-mode Agenda.
- The archived entries will be filed as subtrees of the specified
- headline. When the headline is omitted, the subtrees are simply
- filed away at the end of the file, as top-level entries. Also in
- the heading you can use %s to represent the file name, this can be
- useful when using the same archive for a number of different files.
- Here are a few examples:
- \"%s_archive::\"
- If the current file is Projects.org, archive in file
- Projects.org_archive, as top-level trees. This is the default.
- \"::* Archived Tasks\"
- Archive in the current file, under the top-level headline
- \"* Archived Tasks\".
- \"~/org/archive.org::\"
- Archive in file ~/org/archive.org (absolute path), as top-level trees.
- \"~/org/archive.org::From %s\"
- Archive in file ~/org/archive.org (absolute path), under headlines
- \"From FILENAME\" where file name is the current file name.
- \"basement::** Finished Tasks\"
- Archive in file ./basement (relative path), as level 3 trees
- below the level 2 heading \"** Finished Tasks\".
- You may set this option on a per-file basis by adding to the buffer a
- line like
- #+ARCHIVE: basement::** Finished Tasks
- You may also define it locally for a subtree by setting an ARCHIVE property
- in the entry. If such a property is found in an entry, or anywhere up
- the hierarchy, it will be used."
- :group 'org-archive
- :type 'string)
- (defcustom org-archive-tag "ARCHIVE"
- "The tag that marks a subtree as archived.
- An archived subtree does not open during visibility cycling, and does
- not contribute to the agenda listings.
- After changing this, font-lock must be restarted in the relevant buffers to
- get the proper fontification."
- :group 'org-archive
- :group 'org-keywords
- :type 'string)
- (defcustom org-agenda-skip-archived-trees t
- "Non-nil means the agenda will skip any items located in archived trees.
- An archived tree is a tree marked with the tag ARCHIVE. The use of this
- variable is no longer recommended, you should leave it at the value t.
- Instead, use the key `v' to cycle the archives-mode in the agenda."
- :group 'org-archive
- :group 'org-agenda-skip
- :type 'boolean)
- (defcustom org-columns-skip-archived-trees t
- "Non-nil means ignore archived trees when creating column view."
- :group 'org-archive
- :group 'org-properties
- :type 'boolean)
- (defcustom org-cycle-open-archived-trees nil
- "Non-nil means `org-cycle' will open archived trees.
- An archived tree is a tree marked with the tag ARCHIVE.
- When nil, archived trees will stay folded. You can still open them with
- normal outline commands like `show-all', but not with the cycling commands."
- :group 'org-archive
- :group 'org-cycle
- :type 'boolean)
- (defcustom org-sparse-tree-open-archived-trees nil
- "Non-nil means sparse tree construction shows matches in archived trees.
- When nil, matches in these trees are highlighted, but the trees are kept in
- collapsed state."
- :group 'org-archive
- :group 'org-sparse-trees
- :type 'boolean)
- (defun org-cycle-hide-archived-subtrees (state)
- "Re-hide all archived subtrees after a visibility state change."
- (when (and (not org-cycle-open-archived-trees)
- (not (memq state '(overview folded))))
- (save-excursion
- (let* ((globalp (memq state '(contents all)))
- (beg (if globalp (point-min) (point)))
- (end (if globalp (point-max) (org-end-of-subtree t))))
- (org-hide-archived-subtrees beg end)
- (goto-char beg)
- (if (looking-at (concat ".*:" org-archive-tag ":"))
- (message "%s" (substitute-command-keys
- "Subtree is archived and stays closed. Use \\[org-force-cycle-archived] to cycle it anyway.")))))))
- (defun org-force-cycle-archived ()
- "Cycle subtree even if it is archived."
- (interactive)
- (setq this-command 'org-cycle)
- (let ((org-cycle-open-archived-trees t))
- (call-interactively 'org-cycle)))
- (defun org-hide-archived-subtrees (beg end)
- "Re-hide all archived subtrees after a visibility state change."
- (save-excursion
- (let* ((re (concat ":" org-archive-tag ":")))
- (goto-char beg)
- (while (re-search-forward re end t)
- (when (org-on-heading-p)
- (org-flag-subtree t)
- (org-end-of-subtree t))))))
- (defun org-flag-subtree (flag)
- (save-excursion
- (org-back-to-heading t)
- (outline-end-of-heading)
- (outline-flag-region (point)
- (progn (org-end-of-subtree t) (point))
- flag)))
- (defalias 'org-advertized-archive-subtree 'org-archive-subtree)
- (eval-and-compile
- (org-autoload "org-archive"
- '(org-add-archive-files org-archive-subtree
- org-archive-to-archive-sibling org-toggle-archive-tag
- org-archive-subtree-default
- org-archive-subtree-default-with-confirmation)))
- ;; Autoload Column View Code
- (declare-function org-columns-number-to-string "org-colview")
- (declare-function org-columns-get-format-and-top-level "org-colview")
- (declare-function org-columns-compute "org-colview")
- (org-autoload (if (featurep 'xemacs) "org-colview-xemacs" "org-colview")
- '(org-columns-number-to-string org-columns-get-format-and-top-level
- org-columns-compute org-agenda-columns org-columns-remove-overlays
- org-columns org-insert-columns-dblock org-dblock-write:columnview))
- ;; Autoload ID code
- (declare-function org-id-store-link "org-id")
- (declare-function org-id-locations-load "org-id")
- (declare-function org-id-locations-save "org-id")
- (defvar org-id-track-globally)
- (org-autoload "org-id"
- '(org-id-get-create org-id-new org-id-copy org-id-get
- org-id-get-with-outline-path-completion
- org-id-get-with-outline-drilling org-id-store-link
- org-id-goto org-id-find org-id-store-link))
- ;; Autoload Plotting Code
- (org-autoload "org-plot"
- '(org-plot/gnuplot))
- ;;; Variables for pre-computed regular expressions, all buffer local
- (defvar org-drawer-regexp nil
- "Matches first line of a hidden block.")
- (make-variable-buffer-local 'org-drawer-regexp)
- (defvar org-todo-regexp nil
- "Matches any of the TODO state keywords.")
- (make-variable-buffer-local 'org-todo-regexp)
- (defvar org-not-done-regexp nil
- "Matches any of the TODO state keywords except the last one.")
- (make-variable-buffer-local 'org-not-done-regexp)
- (defvar org-not-done-heading-regexp nil
- "Matches a TODO headline that is not done.")
- (make-variable-buffer-local 'org-not-done-regexp)
- (defvar org-todo-line-regexp nil
- "Matches a headline and puts TODO state into group 2 if present.")
- (make-variable-buffer-local 'org-todo-line-regexp)
- (defvar org-complex-heading-regexp nil
- "Matches a headline and puts everything into groups:
- group 1: the stars
- group 2: The todo keyword, maybe
- group 3: Priority cookie
- group 4: True headline
- group 5: Tags")
- (make-variable-buffer-local 'org-complex-heading-regexp)
- (defvar org-complex-heading-regexp-format nil
- "Printf format to make regexp to match an exact headline.
- This regexp will match the headline of any node which hase the exact
- headline text that is put into the format, but may have any TODO state,
- priority and tags.")
- (make-variable-buffer-local 'org-complex-heading-regexp-format)
- (defvar org-todo-line-tags-regexp nil
- "Matches a headline and puts TODO state into group 2 if present.
- Also put tags into group 4 if tags are present.")
- (make-variable-buffer-local 'org-todo-line-tags-regexp)
- (defvar org-nl-done-regexp nil
- "Matches newline followed by a headline with the DONE keyword.")
- (make-variable-buffer-local 'org-nl-done-regexp)
- (defvar org-looking-at-done-regexp nil
- "Matches the DONE keyword a point.")
- (make-variable-buffer-local 'org-looking-at-done-regexp)
- (defvar org-ds-keyword-length 12
- "Maximum length of the Deadline and SCHEDULED keywords.")
- (make-variable-buffer-local 'org-ds-keyword-length)
- (defvar org-deadline-regexp nil
- "Matches the DEADLINE keyword.")
- (make-variable-buffer-local 'org-deadline-regexp)
- (defvar org-deadline-time-regexp nil
- "Matches the DEADLINE keyword together with a time stamp.")
- (make-variable-buffer-local 'org-deadline-time-regexp)
- (defvar org-deadline-line-regexp nil
- "Matches the DEADLINE keyword and the rest of the line.")
- (make-variable-buffer-local 'org-deadline-line-regexp)
- (defvar org-scheduled-regexp nil
- "Matches the SCHEDULED keyword.")
- (make-variable-buffer-local 'org-scheduled-regexp)
- (defvar org-scheduled-time-regexp nil
- "Matches the SCHEDULED keyword together with a time stamp.")
- (make-variable-buffer-local 'org-scheduled-time-regexp)
- (defvar org-closed-time-regexp nil
- "Matches the CLOSED keyword together with a time stamp.")
- (make-variable-buffer-local 'org-closed-time-regexp)
- (defvar org-keyword-time-regexp nil
- "Matches any of the 4 keywords, together with the time stamp.")
- (make-variable-buffer-local 'org-keyword-time-regexp)
- (defvar org-keyword-time-not-clock-regexp nil
- "Matches any of the 3 keywords, together with the time stamp.")
- (make-variable-buffer-local 'org-keyword-time-not-clock-regexp)
- (defvar org-maybe-keyword-time-regexp nil
- "Matches a timestamp, possibly preceded by a keyword.")
- (make-variable-buffer-local 'org-maybe-keyword-time-regexp)
- (defvar org-planning-or-clock-line-re nil
- "Matches a line with planning or clock info.")
- (make-variable-buffer-local 'org-planning-or-clock-line-re)
- (defvar org-all-time-keywords nil
- "List of time keywords.")
- (make-variable-buffer-local 'org-all-time-keywords)
- (defconst org-plain-time-of-day-regexp
- (concat
- "\\(\\<[012]?[0-9]"
- "\\(\\(:\\([0-5][0-9]\\([AaPp][Mm]\\)?\\)\\)\\|\\([AaPp][Mm]\\)\\)\\>\\)"
- "\\(--?"
- "\\(\\<[012]?[0-9]"
- "\\(\\(:\\([0-5][0-9]\\([AaPp][Mm]\\)?\\)\\)\\|\\([AaPp][Mm]\\)\\)\\>\\)"
- "\\)?")
- "Regular expression to match a plain time or time range.
- Examples: 11:45 or 8am-13:15 or 2:45-2:45pm. After a match, the following
- groups carry important information:
- 0 the full match
- 1 the first time, range or not
- 8 the second time, if it is a range.")
- (defconst org-plain-time-extension-regexp
- (concat
- "\\(\\<[012]?[0-9]"
- "\\(\\(:\\([0-5][0-9]\\([AaPp][Mm]\\)?\\)\\)\\|\\([AaPp][Mm]\\)\\)\\>\\)"
- "\\+\\([0-9]+\\)\\(:\\([0-5][0-9]\\)\\)?")
- "Regular expression to match a time range like 13:30+2:10 = 13:30-15:40.
- Examples: 11:45 or 8am-13:15 or 2:45-2:45pm. After a match, the following
- groups carry important information:
- 0 the full match
- 7 hours of duration
- 9 minutes of duration")
- (defconst org-stamp-time-of-day-regexp
- (concat
- "<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} +\\sw+ +\\)"
- "\\([012][0-9]:[0-5][0-9]\\(-\\([012][0-9]:[0-5][0-9]\\)\\)?[^\n\r>]*?\\)>"
- "\\(--?"
- "<\\1\\([012][0-9]:[0-5][0-9]\\)>\\)?")
- "Regular expression to match a timestamp time or time range.
- After a match, the following groups carry important information:
- 0 the full match
- 1 date plus weekday, for back referencing to make sure both times are on the same day
- 2 the first time, range or not
- 4 the second time, if it is a range.")
- (defconst org-startup-options
- '(("fold" org-startup-folded t)
- ("overview" org-startup-folded t)
- ("nofold" org-startup-folded nil)
- ("showall" org-startup-folded nil)
- ("showeverything" org-startup-folded showeverything)
- ("content" org-startup-folded content)
- ("indent" org-startup-indented t)
- ("noindent" org-startup-indented nil)
- ("hidestars" org-hide-leading-stars t)
- ("showstars" org-hide-leading-stars nil)
- ("odd" org-odd-levels-only t)
- ("oddeven" org-odd-levels-only nil)
- ("align" org-startup-align-all-tables t)
- ("noalign" org-startup-align-all-tables nil)
- ("inlineimages" org-startup-with-inline-images t)
- ("noinlineimages" org-startup-with-inline-images nil)
- ("customtime" org-display-custom-times t)
- ("logdone" org-log-done time)
- ("lognotedone" org-log-done note)
- ("nologdone" org-log-done nil)
- ("lognoteclock-out" org-log-note-clock-out t)
- ("nolognoteclock-out" org-log-note-clock-out nil)
- ("logrepeat" org-log-repeat state)
- ("lognoterepeat" org-log-repeat note)
- ("nologrepeat" org-log-repeat nil)
- ("logreschedule" org-log-reschedule time)
- ("lognotereschedule" org-log-reschedule note)
- ("nologreschedule" org-log-reschedule nil)
- ("logredeadline" org-log-redeadline time)
- ("lognoteredeadline" org-log-redeadline note)
- ("nologredeadline" org-log-redeadline nil)
- ("logrefile" org-log-refile time)
- ("lognoterefile" org-log-refile note)
- ("nologrefile" org-log-refile nil)
- ("fninline" org-footnote-define-inline t)
- ("nofninline" org-footnote-define-inline nil)
- ("fnlocal" org-footnote-section nil)
- ("fnauto" org-footnote-auto-label t)
- ("fnprompt" org-footnote-auto-label nil)
- ("fnconfirm" org-footnote-auto-label confirm)
- ("fnplain" org-footnote-auto-label plain)
- ("fnadjust" org-footnote-auto-adjust t)
- ("nofnadjust" org-footnote-auto-adjust nil)
- ("constcgs" constants-unit-system cgs)
- ("constSI" constants-unit-system SI)
- ("noptag" org-tag-persistent-alist nil)
- ("hideblocks" org-hide-block-startup t)
- ("nohideblocks" org-hide-block-startup nil)
- ("beamer" org-startup-with-beamer-mode t)
- ("entitiespretty" org-pretty-entities t)
- ("entitiesplain" org-pretty-entities nil))
- "Variable associated with STARTUP options for org-mode.
- Each element is a list of three items: The startup options as written
- in the #+STARTUP line, the corresponding variable, and the value to
- set this variable to if the option is found. An optional forth element PUSH
- means to push this value onto the list in the variable.")
- (defun org-set-regexps-and-options ()
- "Precompute regular expressions for current buffer."
- (when (org-mode-p)
- (org-set-local 'org-todo-kwd-alist nil)
- (org-set-local 'org-todo-key-alist nil)
- (org-set-local 'org-todo-key-trigger nil)
- (org-set-local 'org-todo-keywords-1 nil)
- (org-set-local 'org-done-keywords nil)
- (org-set-local 'org-todo-heads nil)
- (org-set-local 'org-todo-sets nil)
- (org-set-local 'org-todo-log-states nil)
- (org-set-local 'org-file-properties nil)
- (org-set-local 'org-file-tags nil)
- (let ((re (org-make-options-regexp
- '("CATEGORY" "TODO" "COLUMNS"
- "STARTUP" "ARCHIVE" "FILETAGS" "TAGS" "LINK" "PRIORITIES"
- "CONSTANTS" "PROPERTY" "DRAWERS" "SETUPFILE" "LATEX_CLASS"
- "OPTIONS")
- "\\(?:[a-zA-Z][0-9a-zA-Z_]*_TODO\\)"))
- (splitre "[ \t]+")
- (scripts org-use-sub-superscripts)
- kwds kws0 kwsa key log value cat arch tags const links hw dws
- tail sep kws1 prio props ftags drawers beamer-p
- ext-setup-or-nil setup-contents (start 0))
- (save-excursion
- (save-restriction
- (widen)
- (goto-char (point-min))
- (while (or (and ext-setup-or-nil
- (string-match re ext-setup-or-nil start)
- (setq start (match-end 0)))
- (and (setq ext-setup-or-nil nil start 0)
- (re-search-forward re nil t)))
- (setq key (upcase (match-string 1 ext-setup-or-nil))
- value (org-match-string-no-properties 2 ext-setup-or-nil))
- (if (stringp value) (setq value (org-trim value)))
- (cond
- ((equal key "CATEGORY")
- (setq cat value))
- ((member key '("SEQ_TODO" "TODO"))
- (push (cons 'sequence (org-split-string value splitre)) kwds))
- ((equal key "TYP_TODO")
- (push (cons 'type (org-split-string value splitre)) kwds))
- ((string-match "\\`\\([a-zA-Z][0-9a-zA-Z_]*\\)_TODO\\'" key)
- ;; general TODO-like setup
- (push (cons (intern (downcase (match-string 1 key)))
- (org-split-string value splitre)) kwds))
- ((equal key "TAGS")
- (setq tags (append tags (if tags '("\\n") nil)
- (org-split-string value splitre))))
- ((equal key "COLUMNS")
- (org-set-local 'org-columns-default-format value))
- ((equal key "LINK")
- (when (string-match "^\\(\\S-+\\)[ \t]+\\(.+\\)" value)
- (push (cons (match-string 1 value)
- (org-trim (match-string 2 value)))
- links)))
- ((equal key "PRIORITIES")
- (setq prio (org-split-string value " +")))
- ((equal key "PROPERTY")
- (when (string-match "\\(\\S-+\\)\\s-+\\(.*\\)" value)
- (push (cons (match-string 1 value) (match-string 2 value))
- props)))
- ((equal key "FILETAGS")
- (when (string-match "\\S-" value)
- (setq ftags
- (append
- ftags
- (apply 'append
- (mapcar (lambda (x) (org-split-string x ":"))
- (org-split-string value)))))))
- ((equal key "DRAWERS")
- (setq drawers (org-split-string value splitre)))
- ((equal key "CONSTANTS")
- (setq const (append const (org-split-string value splitre))))
- ((equal key "STARTUP")
- (let ((opts (org-split-string value splitre))
- l var val)
- (while (setq l (pop opts))
- (when (setq l (assoc l org-startup-options))
- (setq var (nth 1 l) val (nth 2 l))
- (if (not (nth 3 l))
- (set (make-local-variable var) val)
- (if (not (listp (symbol-value var)))
- (set (make-local-variable var) nil))
- (set (make-local-variable var) (symbol-value var))
- (add-to-list var val))))))
- ((equal key "ARCHIVE")
- (setq arch value)
- (remove-text-properties 0 (length arch)
- '(face t fontified t) arch))
- ((equal key "LATEX_CLASS")
- (setq beamer-p (equal value "beamer")))
- ((equal key "OPTIONS")
- (if (string-match "\\([ \t]\\|\\`\\)\\^:\\(t\\|nil\\|{}\\)" value)
- (setq scripts (read (match-string 2 value)))))
- ((equal key "SETUPFILE")
- (setq setup-contents (org-file-contents
- (expand-file-name
- (org-remove-double-quotes value))
- 'noerror))
- (if (not ext-setup-or-nil)
- (setq ext-setup-or-nil setup-contents start 0)
- (setq ext-setup-or-nil
- (concat (substring ext-setup-or-nil 0 start)
- "\n" setup-contents "\n"
- (substring ext-setup-or-nil start)))))
- ))))
- (org-set-local 'org-use-sub-superscripts scripts)
- (when cat
- (org-set-local 'org-category (intern cat))
- (push (cons "CATEGORY" cat) props))
- (when prio
- (if (< (length prio) 3) (setq prio '("A" "C" "B")))
- (setq prio (mapcar 'string-to-char prio))
- (org-set-local 'org-highest-priority (nth 0 prio))
- (org-set-local 'org-lowest-priority (nth 1 prio))
- (org-set-local 'org-default-priority (nth 2 prio)))
- (and props (org-set-local 'org-file-properties (nreverse props)))
- (and ftags (org-set-local 'org-file-tags
- (mapcar 'org-add-prop-inherited ftags)))
- (and drawers (org-set-local 'org-drawers drawers))
- (and arch (org-set-local 'org-archive-location arch))
- (and links (setq org-link-abbrev-alist-local (nreverse links)))
- ;; Process the TODO keywords
- (unless kwds
- ;; Use the global values as if they had been given locally.
- (setq kwds (default-value 'org-todo-keywords))
- (if (stringp (car kwds))
- (setq kwds (list (cons org-todo-interpretation
- (default-value 'org-todo-keywords)))))
- (setq kwds (reverse kwds)))
- (setq kwds (nreverse kwds))
- (let (inter kws kw)
- (while (setq kws (pop kwds))
- (let ((kws (or
- (run-hook-with-args-until-success
- 'org-todo-setup-filter-hook kws)
- kws)))
- (setq inter (pop kws) sep (member "|" kws)
- kws0 (delete "|" (copy-sequence kws))
- kwsa nil
- kws1 (mapcar
- (lambda (x)
- ;; 1 2
- (if (string-match "^\\(.*?\\)\\(?:(\\([^!@/]\\)?.*?)\\)?$" x)
- (progn
- (setq kw (match-string 1 x)
- key (and (match-end 2) (match-string 2 x))
- log (org-extract-log-state-settings x))
- (push (cons kw (and key (string-to-char key))) kwsa)
- (and log (push log org-todo-log-states))
- kw)
- (error "Invalid TODO keyword %s" x)))
- kws0)
- kwsa (if kwsa (append '((:startgroup))
- (nreverse kwsa)
- '((:endgroup))))
- hw (car kws1)
- dws (if sep (org-remove-keyword-keys (cdr sep)) (last kws1))
- tail (list inter hw (car dws) (org-last dws))))
- (add-to-list 'org-todo-heads hw 'append)
- (push kws1 org-todo-sets)
- (setq org-done-keywords (append org-done-keywords dws nil))
- (setq org-todo-key-alist (append org-todo-key-alist kwsa))
- (mapc (lambda (x) (push (cons x tail) org-todo-kwd-alist)) kws1)
- (setq org-todo-keywords-1 (append org-todo-keywords-1 kws1 nil)))
- (setq org-todo-sets (nreverse org-todo-sets)
- org-todo-kwd-alist (nreverse org-todo-kwd-alist)
- org-todo-key-trigger (delq nil (mapcar 'cdr org-todo-key-alist))
- org-todo-key-alist (org-assign-fast-keys org-todo-key-alist)))
- ;; Process the constants
- (when const
- (let (e cst)
- (while (setq e (pop const))
- (if (string-match "^\\([a-zA-Z0][_a-zA-Z0-9]*\\)=\\(.*\\)" e)
- (push (cons (match-string 1 e) (match-string 2 e)) cst)))
- (setq org-table-formula-constants-local cst)))
- ;; Process the tags.
- (when tags
- (let (e tgs)
- (while (setq e (pop tags))
- (cond
- ((equal e "{") (push '(:startgroup) tgs))
- ((equal e "}") (push '(:endgroup) tgs))
- ((equal e "\\n") (push '(:newline) tgs))
- ((string-match (org-re "^\\([[:alnum:]_@#%]+\\)(\\(.\\))$") e)
- (push (cons (match-string 1 e)
- (string-to-char (match-string 2 e)))
- tgs))
- (t (push (list e) tgs))))
- (org-set-local 'org-tag-alist nil)
- (while (setq e (pop tgs))
- (or (and (stringp (car e))
- (assoc (car e) org-tag-alist))
- (push e org-tag-alist)))))
- ;; Compute the regular expressions and other local variables
- (if (not org-done-keywords)
- (setq org-done-keywords (and org-todo-keywords-1
- (list (org-last org-todo-keywords-1)))))
- (setq org-ds-keyword-length (+ 2 (max (length org-deadline-string)
- (length org-scheduled-string)
- (length org-clock-string)
- (length org-closed-string)))
- org-drawer-regexp
- (concat "^[ \t]*:\\("
- (mapconcat 'regexp-quote org-drawers "\\|")
- "\\):[ \t]*$")
- org-not-done-keywords
- (org-delete-all org-done-keywords (copy-sequence org-todo-keywords-1))
- org-todo-regexp
- (concat "\\<\\(" (mapconcat 'regexp-quote org-todo-keywords-1
- "\\|") "\\)\\>")
- org-not-done-regexp
- (concat "\\<\\("
- (mapconcat 'regexp-quote org-not-done-keywords "\\|")
- "\\)\\>")
- org-not-done-heading-regexp
- (concat "^\\(\\*+\\)[ \t]+\\("
- (mapconcat 'regexp-quote org-not-done-keywords "\\|")
- "\\)\\>")
- org-todo-line-regexp
- (concat "^\\(\\*+\\)[ \t]+\\(?:\\("
- (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
- "\\)\\>\\)?[ \t]*\\(.*\\)")
- org-complex-heading-regexp
- (concat "^\\(\\*+\\)[ \t]+\\(?:\\("
- (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
- "\\)\\>\\)?\\(?:[ \t]*\\(\\[#.\\]\\)\\)?[ \t]*\\(.*?\\)"
- "\\(?:[ \t]+\\(:[[:alnum:]_@#%:]+:\\)\\)?[ \t]*$")
- org-complex-heading-regexp-format
- (concat "^\\(\\*+\\)[ \t]+\\(?:\\("
- (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
- "\\)\\>\\)?"
- "\\(?:[ \t]*\\(\\[#.\\]\\)\\)?"
- "\\(?:[ \t]*\\(?:\\[[0-9%%/]+\\]\\)\\)?" ;; stats cookie
- "[ \t]*\\(%s\\)"
- "\\(?:[ \t]*\\(?:\\[[0-9%%/]+\\]\\)\\)?" ;; stats cookie
- "\\(?:[ \t]+\\(:[[:alnum:]_@#%%:]+:\\)\\)?[ \t]*$")
- org-nl-done-regexp
- (concat "\n\\*+[ \t]+"
- "\\(?:" (mapconcat 'regexp-quote org-done-keywords "\\|")
- "\\)" "\\>")
- org-todo-line-tags-regexp
- (concat "^\\(\\*+\\)[ \t]+\\(?:\\("
- (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
- (org-re
- "\\)\\>\\)? *\\(.*?\\([ \t]:[[:alnum:]:_@#%]+:[ \t]*\\)?$\\)"))
- org-looking-at-done-regexp
- (concat "^" "\\(?:"
- (mapconcat 'regexp-quote org-done-keywords "\\|") "\\)"
- "\\>")
- org-deadline-regexp (concat "\\<" org-deadline-string)
- org-deadline-time-regexp
- (concat "\\<" org-deadline-string " *<\\([^>]+\\)>")
- org-deadline-line-regexp
- (concat "\\<\\(" org-deadline-string "\\).*")
- org-scheduled-regexp
- (concat "\\<" org-scheduled-string)
- org-scheduled-time-regexp
- (concat "\\<" org-scheduled-string " *<\\([^>]+\\)>")
- org-closed-time-regexp
- (concat "\\<" org-closed-string " *\\[\\([^]]+\\)\\]")
- org-keyword-time-regexp
- (concat "\\<\\(" org-scheduled-string
- "\\|" org-deadline-string
- "\\|" org-closed-string
- "\\|" org-clock-string "\\)"
- " *[[<]\\([^]>]+\\)[]>]")
- org-keyword-time-not-clock-regexp
- (concat "\\<\\(" org-scheduled-string
- "\\|" org-deadline-string
- "\\|" org-closed-string
- "\\)"
- " *[[<]\\([^]>]+\\)[]>]")
- org-maybe-keyword-time-regexp
- (concat "\\(\\<\\(" org-scheduled-string
- "\\|" org-deadline-string
- "\\|" org-closed-string
- "\\|" org-clock-string "\\)\\)?"
- " *\\([[<][0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} [^]\r\n>]*?[]>]\\|<%%([^\r\n>]*>\\)")
- org-planning-or-clock-line-re
- (concat "\\(?:^[ \t]*\\(" org-scheduled-string
- "\\|" org-deadline-string
- "\\|" org-closed-string "\\|" org-clock-string
- "\\)\\>\\)")
- org-all-time-keywords
- (mapcar (lambda (w) (substring w 0 -1))
- (list org-scheduled-string org-deadline-string
- org-clock-string org-closed-string))
- )
- (org-compute-latex-and-specials-regexp)
- (org-set-font-lock-defaults))))
- (defun org-file-contents (file &optional noerror)
- "Return the contents of FILE, as a string."
- (if (or (not file)
- (not (file-readable-p file)))
- (if noerror
- (progn
- (message "Cannot read file \"%s\"" file)
- (ding) (sit-for 2)
- "")
- (error "Cannot read file \"%s\"" file))
- (with-temp-buffer
- (insert-file-contents file)
- (buffer-string))))
- (defun org-extract-log-state-settings (x)
- "Extract the log state setting from a TODO keyword string.
- This will extract info from a string like \"WAIT(w@/!)\"."
- (let (kw key log1 log2)
- (when (string-match "^\\(.*?\\)\\(?:(\\([^!@/]\\)?\\([!@]\\)?\\(?:/\\([!@]\\)\\)?)\\)?$" x)
- (setq kw (match-string 1 x)
- key (and (match-end 2) (match-string 2 x))
- log1 (and (match-end 3) (match-string 3 x))
- log2 (and (match-end 4) (match-string 4 x)))
- (and (or log1 log2)
- (list kw
- (and log1 (if (equal log1 "!") 'time 'note))
- (and log2 (if (equal log2 "!") 'time 'note)))))))
- (defun org-remove-keyword-keys (list)
- "Remove a pair of parenthesis at the end of each string in LIST."
- (mapcar (lambda (x)
- (if (string-match "(.*)$" x)
- (substring x 0 (match-beginning 0))
- x))
- list))
- (defun org-assign-fast-keys (alist)
- "Assign fast keys to a keyword-key alist.
- Respect keys that are already there."
- (let (new e (alt ?0))
- (while (setq e (pop alist))
- (if (or (memq (car e) '(:newline :endgroup :startgroup))
- (cdr e)) ;; Key already assigned.
- (push e new)
- (let ((clist (string-to-list (downcase (car e))))
- (used (append new alist)))
- (when (= (car clist) ?@)
- (pop clist))
- (while (and clist (rassoc (car clist) used))
- (pop clist))
- (unless clist
- (while (rassoc alt used)
- (incf alt)))
- (push (cons (car e) (or (car clist) alt)) new))))
- (nreverse new)))
- ;;; Some variables used in various places
- (defvar org-window-configuration nil
- "Used in various places to store a window configuration.")
- (defvar org-selected-window nil
- "Used in various places to store a window configuration.")
- (defvar org-finish-function nil
- "Function to be called when `C-c C-c' is used.
- This is for getting out of special buffers like remember.")
- ;; FIXME: Occasionally check by commenting these, to make sure
- ;; no other functions uses these, forgetting to let-bind them.
- (defvar entry)
- (defvar last-state)
- (defvar date)
- ;; Defined somewhere in this file, but used before definition.
- (defvar org-entities) ;; defined in org-entities.el
- (defvar org-struct-menu)
- (defvar org-org-menu)
- (defvar org-tbl-menu)
- ;;;; Define the Org-mode
- (if (and (not (keymapp outline-mode-map)) (featurep 'allout))
- (error "Conflict with outdated version of allout.el. Load org.el before allout.el, or upgrade to newer allout, for example by switching to Emacs 22"))
- ;; We use a before-change function to check if a table might need
- ;; an update.
- (defvar org-table-may-need-update t
- "Indicates that a table might need an update.
- This variable is set by `org-before-change-function'.
- `org-table-align' sets it back to nil.")
- (defun org-before-change-function (beg end)
- "Every change indicates that a table might need an update."
- (setq org-table-may-need-update t))
- (defvar org-mode-map)
- (defvar org-inhibit-startup nil) ; Dynamically-scoped param.
- (defvar org-inhibit-startup-visibility-stuff nil) ; Dynamically-scoped param.
- (defvar org-agenda-keep-modes nil) ; Dynamically-scoped param.
- (defvar org-inhibit-logging nil) ; Dynamically-scoped param.
- (defvar org-inhibit-blocking nil) ; Dynamically-scoped param.
- (defvar org-table-buffer-is-an nil)
- (defconst org-outline-regexp "\\*+ ")
- (defconst org-outline-regexp-bol "^\\*+ ")
- ;;;###autoload
- (define-derived-mode org-mode outline-mode "Org"
- "Outline-based notes management and organizer, alias
- \"Carsten's outline-mode for keeping track of everything.\"
- Org-mode develops organizational tasks around a NOTES file which
- contains information about projects as plain text. Org-mode is
- implemented on top of outline-mode, which is ideal to keep the content
- of large files well structured. It supports ToDo items, deadlines and
- time stamps, which magically appear in the diary listing of the Emacs
- calendar. Tables are easily created with a built-in table editor.
- Plain text URL-like links connect to websites, emails (VM), Usenet
- messages (Gnus), BBDB entries, and any files related to the project.
- For printing and sharing of notes, an Org-mode file (or a part of it)
- can be exported as a structured ASCII or HTML file.
- The following commands are available:
- \\{org-mode-map}"
- ;; Get rid of Outline menus, they are not needed
- ;; Need to do this here because define-derived-mode sets up
- ;; the keymap so late. Still, it is a waste to call this each time
- ;; we switch another buffer into org-mode.
- (if (featurep 'xemacs)
- (when (boundp 'outline-mode-menu-heading)
- ;; Assume this is Greg's port, it uses easymenu
- (easy-menu-remove outline-mode-menu-heading)
- (easy-menu-remove outline-mode-menu-show)
- (easy-menu-remove outline-mode-menu-hide))
- (define-key org-mode-map [menu-bar headings] 'undefined)
- (define-key org-mode-map [menu-bar hide] 'undefined)
- (define-key org-mode-map [menu-bar show] 'undefined))
- (org-load-modules-maybe)
- (easy-menu-add org-org-menu)
- (easy-menu-add org-tbl-menu)
- (org-install-agenda-files-menu)
- (if org-descriptive-links (add-to-invisibility-spec '(org-link)))
- (add-to-invisibility-spec '(org-cwidth))
- (add-to-invisibility-spec '(org-hide-block . t))
- (when (featurep 'xemacs)
- (org-set-local 'line-move-ignore-invisible t))
- (org-set-local 'outline-regexp org-outline-regexp)
- (org-set-local 'outline-level 'org-outline-level)
- (when (and org-ellipsis
- (fboundp 'set-display-table-slot) (boundp 'buffer-display-table)
- (fboundp 'make-glyph-code))
- (unless org-display-table
- (setq org-display-table (make-display-table)))
- (set-display-table-slot
- org-display-table 4
- (vconcat (mapcar
- (lambda (c) (make-glyph-code c (and (not (stringp org-ellipsis))
- org-ellipsis)))
- (if (stringp org-ellipsis) org-ellipsis "..."))))
- (setq buffer-display-table org-display-table))
- (org-set-regexps-and-options)
- (when (and org-tag-faces (not org-tags-special-faces-re))
- ;; tag faces set outside customize.... force initialization.
- (org-set-tag-faces 'org-tag-faces org-tag-faces))
- ;; Calc embedded
- (org-set-local 'calc-embedded-open-mode "# ")
- (modify-syntax-entry ?@ "w")
- (if org-startup-truncated (setq truncate-lines t))
- (org-set-local 'font-lock-unfontify-region-function
- 'org-unfontify-region)
- ;; Activate before-change-function
- (org-set-local 'org-table-may-need-update t)
- (org-add-hook 'before-change-functions 'org-before-change-function nil
- 'local)
- ;; Check for running clock before killing a buffer
- (org-add-hook 'kill-buffer-hook 'org-check-running-clock nil 'local)
- ;; Paragraphs and auto-filling
- (org-set-autofill-regexps)
- (setq indent-line-function 'org-indent-line-function)
- (org-update-radio-target-regexp)
- ;; Beginning/end of defun
- (org-set-local 'beginning-of-defun-function 'org-beginning-of-defun)
- (org-set-local 'end-of-defun-function 'org-end-of-defun)
- ;; Next error for sparse trees
- (org-set-local 'next-error-function 'org-occur-next-match)
- ;; Make sure dependence stuff works reliably, even for users who set it
- ;; too late :-(
- (if org-enforce-todo-dependencies
- (add-hook 'org-blocker-hook
- 'org-block-todo-from-children-or-siblings-or-parent)
- (remove-hook 'org-blocker-hook
- 'org-block-todo-from-children-or-siblings-or-parent))
- (if org-enforce-todo-checkbox-dependencies
- (add-hook 'org-blocker-hook
- 'org-block-todo-from-checkboxes)
- (remove-hook 'org-blocker-hook
- 'org-block-todo-from-checkboxes))
- ;; Comment characters
- (org-set-local 'comment-start "#")
- (org-set-local 'comment-padding " ")
- ;; Align options lines
- (org-set-local
- 'align-mode-rules-list
- '((org-in-buffer-settings
- (regexp . "^#\\+[A-Z_]+:\\(\\s-*\\)\\S-+")
- (modes . '(org-mode)))))
- ;; Imenu
- (org-set-local 'imenu-create-index-function
- 'org-imenu-get-tree)
- ;; Make isearch reveal context
- (if (or (featurep 'xemacs)
- (not (boundp 'outline-isearch-open-invisible-function)))
- ;; Emacs 21 and XEmacs make use of the hook
- (org-add-hook 'isearch-mode-end-hook 'org-isearch-end 'append 'local)
- ;; Emacs 22 deals with this through a special variable
- (org-set-local 'outline-isearch-open-invisible-function
- (lambda (&rest ignore) (org-show-context 'isearch))))
- ;; Turn on org-beamer-mode?
- (and org-startup-with-beamer-mode (org-beamer-mode 1))
- ;; Setup the pcomplete hooks
- (set (make-local-variable 'pcomplete-command-completion-function)
- 'org-pcomplete-initial)
- (set (make-local-variable 'pcomplete-command-name-function)
- 'org-command-at-point)
- (set (make-local-variable 'pcomplete-default-completion-function)
- 'ignore)
- (set (make-local-variable 'pcomplete-parse-arguments-function)
- 'org-parse-arguments)
- (set (make-local-variable 'pcomplete-termination-string) "")
- (set (make-local-variable 'face-remapping-alist)
- '((default org-default)))
- ;; If empty file that did not turn on org-mode automatically, make it to.
- (if (and org-insert-mode-line-in-empty-file
- (org-called-interactively-p 'any)
- (= (point-min) (point-max)))
- (insert "# -*- mode: org -*-\n\n"))
- (unless org-inhibit-startup
- (when org-startup-align-all-tables
- (let ((bmp (buffer-modified-p)))
- (org-table-map-tables 'org-table-align 'quietly)
- (set-buffer-modified-p bmp)))
- (when org-startup-with-inline-images
- (org-display-inline-images))
- (when org-startup-indented
- (require 'org-indent)
- (org-indent-mode 1))
- (unless org-inhibit-startup-visibility-stuff
- (org-set-startup-visibility))))
- (when (fboundp 'abbrev-table-put)
- (abbrev-table-put org-mode-abbrev-table
- :parents (list text-mode-abbrev-table)))
- (put 'org-mode 'flyspell-mode-predicate 'org-mode-flyspell-verify)
- (defun org-current-time ()
- "Current time, possibly rounded to `org-time-stamp-rounding-minutes'."
- (if (> (car org-time-stamp-rounding-minutes) 1)
- (let ((r (car org-time-stamp-rounding-minutes))
- (time (decode-time)))
- (apply 'encode-time
- (append (list 0 (* r (floor (+ .5 (/ (float (nth 1 time)) r)))))
- (nthcdr 2 time))))
- (current-time)))
- (defun org-today ()
- "Return today date, considering `org-extend-today-until'."
- (time-to-days
- (time-subtract (current-time)
- (list 0 (* 3600 org-extend-today-until) 0))))
- ;;;; Font-Lock stuff, including the activators
- (defvar org-mouse-map (make-sparse-keymap))
- (org-defkey org-mouse-map [mouse-2] 'org-open-at-mouse)
- (org-defkey org-mouse-map [mouse-3] 'org-find-file-at-mouse)
- (when org-mouse-1-follows-link
- (org-defkey org-mouse-map [follow-link] 'mouse-face))
- (when org-tab-follows-link
- (org-defkey org-mouse-map [(tab)] 'org-open-at-point)
- (org-defkey org-mouse-map "\C-i" 'org-open-at-point))
- (require 'font-lock)
- (defconst org-non-link-chars "]\t\n\r<>")
- (defvar org-link-types '("http" "https" "ftp" "mailto" "file" "news"
- "shell" "elisp" "doi" "message"))
- (defvar org-link-types-re nil
- "Matches a link that has a url-like prefix like \"http:\"")
- (defvar org-link-re-with-space nil
- "Matches a link with spaces, optional angular brackets around it.")
- (defvar org-link-re-with-space2 nil
- "Matches a link with spaces, optional angular brackets around it.")
- (defvar org-link-re-with-space3 nil
- "Matches a link with spaces, only for internal part in bracket links.")
- (defvar org-angle-link-re nil
- "Matches link with angular brackets, spaces are allowed.")
- (defvar org-plain-link-re nil
- "Matches plain link, without spaces.")
- (defvar org-bracket-link-regexp nil
- "Matches a link in double brackets.")
- (defvar org-bracket-link-analytic-regexp nil
- "Regular expression used to analyze links.
- Here is what the match groups contain after a match:
- 1: http:
- 2: http
- 3: path
- 4: [desc]
- 5: desc")
- (defvar org-bracket-link-analytic-regexp++ nil
- "Like `org-bracket-link-analytic-regexp', but include coderef internal type.")
- (defvar org-any-link-re nil
- "Regular expression matching any link.")
- (defcustom org-match-sexp-depth 3
- "Number of stacked braces for sub/superscript matching.
- This has to be set before loading org.el to be effective."
- :group 'org-export-translation ; ??????????????????????????/
- :type 'integer)
- (defun org-create-multibrace-regexp (left right n)
- "Create a regular expression which will match a balanced sexp.
- Opening delimiter is LEFT, and closing delimiter is RIGHT, both given
- as single character strings.
- The regexp returned will match the entire expression including the
- delimiters. It will also define a single group which contains the
- match except for the outermost delimiters. The maximum depth of
- stacked delimiters is N. Escaping delimiters is not possible."
- (let* ((nothing (concat "[^" left right "]*?"))
- (or "\\|")
- (re nothing)
- (next (concat "\\(?:" nothing left nothing right "\\)+" nothing)))
- (while (> n 1)
- (setq n (1- n)
- re (concat re or next)
- next (concat "\\(?:" nothing left next right "\\)+" nothing)))
- (concat left "\\(" re "\\)" right)))
- (defvar org-match-substring-regexp
- (concat
- "\\([^\\]\\)\\([_^]\\)\\("
- "\\(" (org-create-multibrace-regexp "{" "}" org-match-sexp-depth) "\\)"
- "\\|"
- "\\(" (org-create-multibrace-regexp "(" ")" org-match-sexp-depth) "\\)"
- "\\|"
- "\\(\\(?:\\*\\|[-+]?[^-+*!@#$%^_ \t\r\n,:\"?<>~;./{}=()]+\\)\\)\\)")
- "The regular expression matching a sub- or superscript.")
- (defvar org-match-substring-with-braces-regexp
- (concat
- "\\([^\\]\\)\\([_^]\\)\\("
- "\\(" (org-create-multibrace-regexp "{" "}" org-match-sexp-depth) "\\)"
- "\\)")
- "The regular expression matching a sub- or superscript, forcing braces.")
- (defun org-make-link-regexps ()
- "Update the link regular expressions.
- This should be called after the variable `org-link-types' has changed."
- (setq org-link-types-re
- (concat
- "\\`\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):")
- org-link-re-with-space
- (concat
- "<?\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):"
- "\\([^" org-non-link-chars " ]"
- "[^" org-non-link-chars "]*"
- "[^" org-non-link-chars " ]\\)>?")
- org-link-re-with-space2
- (concat
- "<?\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):"
- "\\([^" org-non-link-chars " ]"
- "[^\t\n\r]*"
- "[^" org-non-link-chars " ]\\)>?")
- org-link-re-with-space3
- (concat
- "<?\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):"
- "\\([^" org-non-link-chars " ]"
- "[^\t\n\r]*\\)")
- org-angle-link-re
- (concat
- "<\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):"
- "\\([^" org-non-link-chars " ]"
- "[^" org-non-link-chars "]*"
- "\\)>")
- org-plain-link-re
- (concat
- "\\<\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):"
- (org-re "\\([^ \t\n()<>]+\\(?:([[:word:]0-9_]+)\\|\\([^[:punct:] \t\n]\\|/\\)\\)\\)"))
- ;; "\\([^]\t\n\r<>() ]+[^]\t\n\r<>,.;() ]\\)")
- org-bracket-link-regexp
- "\\[\\[\\([^][]+\\)\\]\\(\\[\\([^][]+\\)\\]\\)?\\]"
- org-bracket-link-analytic-regexp
- (concat
- "\\[\\["
- "\\(\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):\\)?"
- "\\([^]]+\\)"
- "\\]"
- "\\(\\[" "\\([^]]+\\)" "\\]\\)?"
- "\\]")
- org-bracket-link-analytic-regexp++
- (concat
- "\\[\\["
- "\\(\\(" (mapconcat 'regexp-quote (cons "coderef" org-link-types) "\\|") "\\):\\)?"
- "\\([^]]+\\)"
- "\\]"
- "\\(\\[" "\\([^]]+\\)" "\\]\\)?"
- "\\]")
- org-any-link-re
- (concat "\\(" org-bracket-link-regexp "\\)\\|\\("
- org-angle-link-re "\\)\\|\\("
- org-plain-link-re "\\)")))
- (org-make-link-regexps)
- (defconst org-ts-regexp "<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} [^\r\n>]*?\\)>"
- "Regular expression for fast time stamp matching.")
- (defconst org-ts-regexp-both "[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} [^]\r\n>]*?\\)[]>]"
- "Regular expression for fast time stamp matching.")
- (defconst org-ts-regexp0 "\\(\\([0-9]\\{4\\}\\)-\\([0-9]\\{2\\}\\)-\\([0-9]\\{2\\}\\) *\\([^]+0-9>\r\n -]*\\)\\( \\([0-9]\\{2\\}\\):\\([0-9]\\{2\\}\\)\\)?\\)"
- "Regular expression matching time strings for analysis.
- This one does not require the space after the date, so it can be used
- on a string that terminates immediately after the date.")
- (defconst org-ts-regexp1 "\\(\\([0-9]\\{4\\}\\)-\\([0-9]\\{2\\}\\)-\\([0-9]\\{2\\}\\) +\\([^]+0-9>\r\n -]*\\)\\( \\([0-9]\\{2\\}\\):\\([0-9]\\{2\\}\\)\\)?\\)"
- "Regular expression matching time strings for analysis.")
- (defconst org-ts-regexp2 (concat "<" org-ts-regexp1 "[^>\n]\\{0,16\\}>")
- "Regular expression matching time stamps, with groups.")
- (defconst org-ts-regexp3 (concat "[[<]" org-ts-regexp1 "[^]>\n]\\{0,16\\}[]>]")
- "Regular expression matching time stamps (also [..]), with groups.")
- (defconst org-tr-regexp (concat org-ts-regexp "--?-?" org-ts-regexp)
- "Regular expression matching a time stamp range.")
- (defconst org-tr-regexp-both
- (concat org-ts-regexp-both "--?-?" org-ts-regexp-both)
- "Regular expression matching a time stamp range.")
- (defconst org-tsr-regexp (concat org-ts-regexp "\\(--?-?"
- org-ts-regexp "\\)?")
- "Regular expression matching a time stamp or time stamp range.")
- (defconst org-tsr-regexp-both (concat org-ts-regexp-both "\\(--?-?"
- org-ts-regexp-both "\\)?")
- "Regular expression matching a time stamp or time stamp range.
- The time stamps may be either active or inactive.")
- (defvar org-emph-face nil)
- (defun org-do-emphasis-faces (limit)
- "Run through the buffer and add overlays to links."
- (let (rtn a)
- (while (and (not rtn) (re-search-forward org-emph-re limit t))
- (if (not (= (char-after (match-beginning 3))
- (char-after (match-beginning 4))))
- (progn
- (setq rtn t)
- (setq a (assoc (match-string 3) org-emphasis-alist))
- (font-lock-prepend-text-property (match-beginning 2) (match-end 2)
- 'face
- (nth 1 a))
- (and (nth 4 a)
- (org-remove-flyspell-overlays-in
- (match-beginning 0) (match-end 0)))
- (add-text-properties (match-beginning 2) (match-end 2)
- '(font-lock-multiline t org-emphasis t))
- (when org-hide-emphasis-markers
- (add-text-properties (match-end 4) (match-beginning 5)
- '(invisible org-link))
- (add-text-properties (match-beginning 3) (match-end 3)
- '(invisible org-link)))))
- (backward-char 1))
- rtn))
- (defun org-emphasize (&optional char)
- "Insert or change an emphasis, i.e. a font like bold or italic.
- If there is an active region, change that region to a new emphasis.
- If there is no region, just insert the marker characters and position
- the cursor between them.
- CHAR should be either the marker character, or the first character of the
- HTML tag associated with that emphasis. If CHAR is a space, the means
- to remove the emphasis of the selected region.
- If char is not given (for example in an interactive call) it
- will be prompted for."
- (interactive)
- (let ((eal org-emphasis-alist) e det
- (erc org-emphasis-regexp-components)
- (prompt "")
- (string "") beg end move tag c s)
- (if (org-region-active-p)
- (setq beg (region-beginning) end (region-end)
- string (buffer-substring beg end))
- (setq move t))
- (while (setq e (pop eal))
- (setq tag (car (org-split-string (nth 2 e) "[ <>/]+"))
- c (aref tag 0))
- (push (cons c (string-to-char (car e))) det)
- (setq prompt (concat prompt (format " [%s%c]%s" (car e) c
- (substring tag 1)))))
- (setq det (nreverse det))
- (unless char
- (message "%s" (concat "Emphasis marker or tag:" prompt))
- (setq char (read-char-exclusive)))
- (setq char (or (cdr (assoc char det)) char))
- (if (equal char ?\ )
- (setq s "" move nil)
- (unless (assoc (char-to-string char) org-emphasis-alist)
- (error "No such emphasis marker: \"%c\"" char))
- (setq s (char-to-string char)))
- (while (and (> (length string) 1)
- (equal (substring string 0 1) (substring string -1))
- (assoc (substring string 0 1) org-emphasis-alist))
- (setq string (substring string 1 -1)))
- (setq string (concat s string s))
- (if beg (delete-region beg end))
- (unless (or (bolp)
- (string-match (concat "[" (nth 0 erc) "\n]")
- (char-to-string (char-before (point)))))
- (insert " "))
- (unless (or (eobp)
- (string-match (concat "[" (nth 1 erc) "\n]")
- (char-to-string (char-after (point)))))
- (insert " ") (backward-char 1))
- (insert string)
- (and move (backward-char 1))))
- (defconst org-nonsticky-props
- '(mouse-face highlight keymap invisible intangible help-echo org-linked-text))
- (defsubst org-rear-nonsticky-at (pos)
- (add-text-properties (1- pos) pos (list 'rear-nonsticky org-nonsticky-props)))
- (defun org-activate-plain-links (limit)
- "Run through the buffer and add overlays to links."
- (catch 'exit
- (let (f)
- (if (re-search-forward org-plain-link-re limit t)
- (progn
- (org-remove-flyspell-overlays-in (match-beginning 0) (match-end 0))
- (setq f (get-text-property (match-beginning 0) 'face))
- (if (or (eq f 'org-tag)
- (and (listp f) (memq 'org-tag f)))
- nil
- (add-text-properties (match-beginning 0) (match-end 0)
- (list 'mouse-face 'highlight
- 'face 'org-link
- 'keymap org-mouse-map))
- (org-rear-nonsticky-at (match-end 0)))
- t)))))
- (defun org-activate-code (limit)
- (if (re-search-forward "^[ \t]*\\(: .*\n?\\)" limit t)
- (progn
- (org-remove-flyspell-overlays-in (match-beginning 0) (match-end 0))
- (remove-text-properties (match-beginning 0) (match-end 0)
- '(display t invisible t intangible t))
- t)))
- (defcustom org-src-fontify-natively nil
- "When non-nil, fontify code in code blocks."
- :type 'boolean
- :group 'org-appearance
- :group 'org-babel)
- (defun org-fontify-meta-lines-and-blocks (limit)
- (condition-case nil
- (org-fontify-meta-lines-and-blocks-1 limit)
- (error (message "org-mode fontification error"))))
- (defun org-fontify-meta-lines-and-blocks-1 (limit)
- "Fontify #+ lines and blocks, in the correct ways."
- (let ((case-fold-search t))
- (if (re-search-forward
- "^\\([ \t]*#\\+\\(\\([a-zA-Z]+:?\\| \\|$\\)\\(_\\([a-zA-Z]+\\)\\)?\\)[ \t]*\\(\\([^ \t\n]*\\)[ \t]*\\(.*\\)\\)\\)"
- limit t)
- (let ((beg (match-beginning 0))
- (block-start (match-end 0))
- (block-end nil)
- (lang (match-string 7))
- (beg1 (line-beginning-position 2))
- (dc1 (downcase (match-string 2)))
- (dc3 (downcase (match-string 3)))
- end end1 quoting block-type ovl)
- (cond
- ((member dc1 '("html:" "ascii:" "latex:" "docbook:"))
- ;; a single line of backend-specific content
- (org-remove-flyspell-overlays-in (match-beginning 0) (match-end 0))
- (remove-text-properties (match-beginning 0) (match-end 0)
- '(display t invisible t intangible t))
- (add-text-properties (match-beginning 1) (match-end 3)
- '(font-lock-fontified t face org-meta-line))
- (add-text-properties (match-beginning 6) (+ (match-end 6) 1)
- '(font-lock-fontified t face org-block))
- ; for backend-specific code
- t)
- ((and (match-end 4) (equal dc3 "begin"))
- ;; Truly a block
- (setq block-type (downcase (match-string 5))
- quoting (member block-type org-protecting-blocks))
- (when (re-search-forward
- (concat "^[ \t]*#\\+end" (match-string 4) "\\>.*")
- nil t) ;; on purpose, we look further than LIMIT
- (setq end (match-end 0) end1 (1- (match-beginning 0)))
- (setq block-end (match-beginning 0))
- (when quoting
- (remove-text-properties beg end
- '(display t invisible t intangible t)))
- (add-text-properties
- beg end
- '(font-lock-fontified t font-lock-multiline t))
- (add-text-properties beg beg1 '(face org-meta-line))
- (add-text-properties end1 (min (point-max) (1+ end))
- '(face org-meta-line)) ; for end_src
- (cond
- ((and lang (not (string= lang "")) org-src-fontify-natively)
- (org-src-font-lock-fontify-block lang block-start block-end)
- ;; remove old background overlays
- (mapc (lambda (ov)
- (if (eq (overlay-get ov 'face) 'org-block-background)
- (delete-overlay ov)))
- (overlays-at (/ (+ beg1 block-end) 2)))
- ;; add a background overlay
- (setq ovl (make-overlay beg1 block-end))
- (overlay-put ovl 'face 'org-block-background)
- (overlay-put ovl 'evaporate t)) ;; make it go away when empty
- (quoting
- (add-text-properties beg1 (min (point-max) (1+ end1))
- '(face org-block))) ; end of source block
- ((not org-fontify-quote-and-verse-blocks))
- ((string= block-type "quote")
- (add-text-properties beg1 (1+ end1) '(face org-quote)))
- ((string= block-type "verse")
- (add-text-properties beg1 (1+ end1) '(face org-verse))))
- (add-text-properties beg beg1 '(face org-block-begin-line))
- (add-text-properties (1+ end) (1+ end1) '(face org-block-end-line))
- t))
- ((member dc1 '("title:" "author:" "email:" "date:"))
- (add-text-properties
- beg (match-end 3)
- (if (member (intern (substring dc1 0 -1)) org-hidden-keywords)
- '(font-lock-fontified t invisible t)
- '(font-lock-fontified t face org-document-info-keyword)))
- (add-text-properties
- (match-beginning 6) (match-end 6)
- (if (string-equal dc1 "title:")
- '(font-lock-fontified t face org-document-title)
- '(font-lock-fontified t face org-document-info))))
- ((not (member (char-after beg) '(?\ ?\t)))
- ;; just any other in-buffer setting, but not indented
- (add-text-properties
- beg (1+ (match-end 0))
- '(font-lock-fontified t face org-meta-line))
- t)
- ((or (member dc1 '("begin:" "end:" "caption:" "label:"
- "orgtbl:" "tblfm:" "tblname:" "result:"
- "results:" "source:" "srcname:" "call:"
- "data:" "header:" "headers:"))
- (and (match-end 4) (equal dc3 "attr")))
- (add-text-properties
- beg (match-end 0)
- '(font-lock-fontified t face org-meta-line))
- t)
- ((member dc3 '(" " ""))
- (add-text-properties
- beg (match-end 0)
- '(font-lock-fontified t face font-lock-comment-face)))
- (t nil))))))
- (defun org-activate-angle-links (limit)
- "Run through the buffer and add overlays to links."
- (if (re-search-forward org-angle-link-re limit t)
- (progn
- (org-remove-flyspell-overlays-in (match-beginning 0) (match-end 0))
- (add-text-properties (match-beginning 0) (match-end 0)
- (list 'mouse-face 'highlight
- 'keymap org-mouse-map))
- (org-rear-nonsticky-at (match-end 0))
- t)))
- (defun org-activate-footnote-links (limit)
- "Run through the buffer and add overlays to footnotes."
- (let ((fn (org-footnote-next-reference-or-definition limit)))
- (when fn
- (let ((beg (nth 1 fn)) (end (nth 2 fn)))
- (org-remove-flyspell-overlays-in beg end)
- (add-text-properties beg end
- (list 'mouse-face 'highlight
- 'keymap org-mouse-map
- 'help-echo
- (if (= (point-at-bol) beg)
|