pax_global_header00006660000000000000000000000064141730535420014516gustar00rootroot0000000000000052 comment=303fcc8d5d85a4ebff2798dab50b2ccc0255ea5f org-appear-0.3.0/000077500000000000000000000000001417305354200135535ustar00rootroot00000000000000org-appear-0.3.0/.github/000077500000000000000000000000001417305354200151135ustar00rootroot00000000000000org-appear-0.3.0/.github/workflows/000077500000000000000000000000001417305354200171505ustar00rootroot00000000000000org-appear-0.3.0/.github/workflows/check.yml000066400000000000000000000011011417305354200207410ustar00rootroot00000000000000name: check on: [push, pull_request] jobs: check: runs-on: ubuntu-latest strategy: matrix: emacs-version: - 27.1 - 27.2 - snapshot elisp-check: - melpa - load-file - byte-compile - checkdoc - package-lint steps: - uses: actions/checkout@v2 - uses: purcell/setup-emacs@master with: version: ${{ matrix.emacs-version }} - uses: leotaku/elisp-check@master with: check: ${{ matrix.elisp-check }} file: org-appear.el org-appear-0.3.0/.gitignore000066400000000000000000000000161417305354200155400ustar00rootroot00000000000000/testing *.elcorg-appear-0.3.0/LICENSE000066400000000000000000000020571417305354200145640ustar00rootroot00000000000000MIT License Copyright (c) 2021 Alice Istleyeva Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.org-appear-0.3.0/README.org000066400000000000000000000074511417305354200152300ustar00rootroot00000000000000[[https://melpa.org/#/org-appear][file:https://melpa.org/packages/org-appear-badge.svg]] [[https://github.com/awth13/org-appear/actions/workflows/check.yml][file:https://github.com/awth13/org-appear/actions/workflows/check.yml/badge.svg?branch=master]] * ~org-appear~ Make invisible parts of Org elements appear visible. ** About [[https://orgmode.org/][Org mode]] provides a way to toggle visibility of hidden elements such as emphasis markers, links, etc. by customising specific variables, e.g., ~org-hide-emphasis-markers~. However, it is currently not possible to do this interactively and on an element-by-element basis. This package, inspired by [[https://github.com/io12/org-fragtog][org-fragtog]], enables automatic visibility toggling depending on cursor position. Hidden element parts appear when the cursor enters an element and disappear when it leaves. [[file:demo.gif]] ** Installation The easiest way to install ~org-appear~ is from MELPA, using your favourite package manager or ~package-install~. For Guix users, ~org-appear~ is also available in the official GNU Guix channel. ** Manual installation With [[https://github.com/raxod502/straight.el][straight.el]], simply put the following line in ~init.el~: #+begin_src emacs-lisp (straight-use-package '(org-appear :type git :host github :repo "awth13/org-appear")) #+end_src Alternatively, git clone this repository and point Emacs to it using the ~:load-path~ keyword of ~use-package~ or ~require~. ** Usage The package can be enabled interactively or automatically on org-mode start-up: #+begin_src emacs-lisp (add-hook 'org-mode-hook 'org-appear-mode) #+end_src By default, toggling is instantaneous and only emphasis markers are toggled. The following custom variables can be changed to enable additional functionality. - org-appear-autolinks :: if non-nil, toggle links - org-appear-autosubmarkers :: if non-nil, toggle subscripts and superscripts - org-appear-autoentities :: if non-nil, toggle Org entitites - org-appear-autokeywords :: if non-nil, toggle keywords in ~org-hidden-keywords~ - org-appear-delay :: seconds of delay before toggling - org-appear-trigger :: when to toggle elements If Org mode custom variables that control visibility of elements are configured to show hidden parts, the respective ~org-appear~ settings do not have an effect. ~org-appear-trigger~ can be set to ~always~, ~on-change~, or ~manual~. With ~on-change~, elements will be toggled only when the buffer is modified or on mouse click. This option disables delayed toggling. With ~manual~, toggling must be enabled by calling ~org-appear-manual-start~. ~org-appear-manual-stop~ is used to disable toggling with this option. The ~manual~ option is useful for, e.g., integrating ~org-appear~ with ~evil-mode~. Below is an example configuration for toggling elements in Insert mode only. #+begin_src emacs-lisp (setq org-appear-trigger 'manual) (add-hook 'evil-insert-state-entry-hook #'org-appear-manual-start nil t) (add-hook 'evil-insert-state-exit-hook #'org-appear-manual-stop nil t) #+end_src ** Acknowledgements Special thanks to [[https://github.com/SPFabGerman][SPFabGerman]], who came up with the idea and extended ~org-appear~ beyond emphasis marker toggling, and [[https://github.com/daviwil][daviwil]], who proposed the ~org-appear~ name. ** Known Issues ~org-appear~ does not handle overlapping emphasis elements correctly, e.g., #+begin_example *Why would someone /nest emphasis* like that?/ #+end_example In the above example, ~org-appear~ can only detect and reveal the first (bold) element. This is due to the reliance on the ~org-element~ API -- ~org-element-context~ in particular -- which also fails to detect the second (italic) element. ~org-appear~ will fail to detect elements nested inside certain other elements, such as comments or document titles. org-appear-0.3.0/demo.gif000066400000000000000000002561421417305354200152000ustar00rootroot00000000000000GIF89a^1%+3%+4%,4%,6%,7%-5%-7%-8%.7%.8%.9%/8%/9%/:%/:%/;%/<%0;%0<%1<%1=%1>%2=&-6&-7&.6&.7&.8&/6&/7&/8&/9&/:&09&0:&0;&0;&0=&1<&1=&2=&2>'.6'.7'/7'/8'/9'07'08'09'18'19'1:'29'2:'2;'3>'4>'5>'6>(/7(/8(08(29(3;(3>(4=(4>(5=(5>(6>(7>(8>)08)2;)6>)6?)7>)7?)8>)9>):>);>*5?*;>*<>*=>+:>-4<-6?.;B1AC37A3;C6BH7%2=&-6&-7&.6&.7&.8&/6&/7&/8&/9&/:&09&0:&0;&0=&1<&1=&2=&2>'.6'.7'/7'/8'/9'07'08'09'18'19'1:'29'2:'2;'3>'4>'5>'6>(/7(/8(08(29(3;(3>(4=(4>(5=(5>(6>(7>(8>)08)2;)6>)6?)7>)7?)8>)9>):>);>*5?*;>*<>*=>+:>-4<-6?.;B1AC37A3;C6BH7@ѣH*]ʴӧPP@*UV u֮^r+hɞ]5ٶk߆ ܎vƶhz,ōÈ+^̸ǐ#KL9h̹ϠC}d#Dpมk֮c˞M۲)Rd7o޾M$x{+'} 3hp| U/X~*$X` 2 D! `nCv C -dbA&bE&*T\&I LV3~hLdׄ5򑐌$I.ɒ&7`5o~xp4\εJ \ .BP S9谆 lNu 'MLvHI'B91eK"8X2di^Ҵ<69Oc#j&ǎhj.OS _5D~)M-LSA'z(bJ|$ҲȎz46b+#yӿ̀Ig\ҥLg:@=y,Xu0?~J*ΨDRvk-l-q"sV׋(zh&)AI%̱4MͶ*I\oZwwNtf=˛Bg3aJ݅l*(>ƲIZDv3fFZA:5$G?D2rliJgKGV KIyzf@~ R!?n+S򺳜*U9]EZc<*kĖDhR3'ﭦ[盻w)u]'/qqdԲ;i)s-R&%sJ.jb VBZrT*%d":D02L9th眀 𝯞B9)Ȁ`ʈƐ\ShtY b1jC-ь(uhSъX{?oS^`o;>r 2{AC];9A..Ku7"h!Hnct6]Pф7g9@η7-}=1NZi3|=5N#/5' bwꌪZ&FUb~9Ռۆ KyBίRes7lak QlB*OۄX^a+B^HB}U5h3X!"uEbZ~_k כ9 EO,G4{pQze{soQK23s*;(xExsxxe2oxVpaBF<&'OFg'O!zq"z'#x$j{Vrb'r){j{H5|4*;ERA8cCkM||R(,vd8UddEul'e]D.e~`~cvn/p'wv#.L{w{ww7xMxwe&yxh3pp(X5FczQO!(qY;(Hs>(kG6JHŇk?k˷S\MGlV\S?}&BKJ rWKjhK!(BVՍ;4nV^GxHg5!|oB!E(XEȀE׀yY<7=XX ց X~AO4qÉzG+H)x(h5z؊j-r7ՃZfDsF8Bxw3V6Ȅ<|c({sS;UdK&TtuB%GTf.Wf /]9j!dUo8qU1ujgznw(Jm*)0A&J=J" (8KJ|!:1!1=ӧ<6=J<=4B,@=WyfNwKENݵWfAa+bּ2޺ iX u+dzʙ{| 6pQoEP=w]\Ё, 퓊Ol,D \)`JT"JOY%].)eҨm9h'4܆JH4N1LB,PMkť {voō_~9VN;ySeKXad\pnxmss]f+׵s؃ז** c͛ŪQA |ɯk~-e=ʾHv:3^ʹ xBA%;t̹jYW>U1 !.T Kҥ-]f!/OcÞ> ūA+tL.px^gxA({Ff}VA958谻B.j+.>LN&BoSVL.o0_̉_* |^hʌ뗘'[lM\P??Mbޮʯ˯ϯaq`_5hȶ`k-2_d*P]\1-AB@ Da@+T|80`}  &Ř76X n@}õ׮af-6ث}\pōG[͝?]t՝Cz…t.j"EG|z׳>}|%XÊW/?$p@ D0A:A0B 'B / 40C3 UC 2<1E Vd Zl1!Vn1G#Ra>" #M:$%[b%b)JJ+ĒZ .*1$S+2;όN3L>r eM8B 9N#ʧ68 tt2W -֓BbŀK`LPF#Btd<5G9cFG?)z&H2:Afo{8^"E:RoK]rҳHN}nzi4Iѩ~dNQO,+5 Q [(Zjlk e4ܠ UEռӫ_] fBsΜYzֳ:ќa y(Pv!QcծђϴÄz.uFӁrQ1tiWeW`OԩnPHF ,DMPObsXHGj,cQ|4Vy(3pSĄEnPy-O}$3I %Nӝ霰Sԧ߅׶j9-TnmՋؠ:Hu]u/&L+0`uqu2:M8lNă,!KqM^w+ k '9EsR ;GOySA2=9kO{哳 "#IՊw-Q<dF9*r %?Ϗ|ۋbtz%!\.#W9Iܝ}Mynt> ~ٝMOz2/M9 p -#ߡK&N=!V#L+t`hv:D;}`Qm}Z͹?l5rWgMnė|e& ^r?V<=g؟M;0nuhQƄj ʱ,#R(\IŕI/9mnJo]FwMLA-]8ljNsJpgPWsoEjl8y3gXQ }i* 7r=y(-sXyYw}.$ep/-N2_ Z#={MҖ˅ZmZ>!5}s?.uCMCة&i-uB]װ^:zN%0=[WNld/eٞ{]?s1שӶӶ~)2;c-q+9s)7t+Q-Ń7p Xsc; S3.;k!">=# [/Y/ ʥҐ+4B0PQk>/0909">:ay0>+:+c>C#J?w? SDS;?+Gt).±L1;Dɝ!@³sr=b<;Y(y*鷞˙:)4$)8=\fTS;B"lBm D#\8)d4X9Hvt(>T>.$C1<2t}>}|~45!3XKȃdV8H#;d#@bH c#I6 @dK}z--7 l! $<(3!IAE^J*ŜAAY ԮjdFz=&|@YSBi>k  R{Ǿ|B^y>3<DļGG6,::><\Ȣ+ȡ+H"ȈȊ͉:F46as"9GaD'kC@Q@1(d @Y2T'ãH +]L `c<(OA6îԤ*KLԣ KKR%B9r9rF ݫu|dPƔG/LL1$cdP&L̅վΤH-":H2?;QaTѯ#6 K/ʧKԱҪI*,ſ T(wxZLʥxxJtS8OyJRƬKAiA|$<> P:PmHmG PKL'(Ɍ URT4??H>@,MƒMՌ#EM6-_ұ["@DKhɽsA<"KE% J\Eģ@JN19 TW|S^ӛ2S4a1WͻW-dhğ>`HB-=shɥde\OR6TfaR]aYe]ڵZ#U(R!u!6Rc.%6^$iŧb-g&,gDt.ɳ;~+ky >gSl$@d麤>h$4XUGffǍKv/܍Fa`fS^>UάYeQ" #NIFU-6fdFlM̱i&-fkV!pD,%q^Y6uV_p籾; yz_|g<0_,fA$"X9`ťPkhlnB*xospFe-TYY^pحe^͏iN6RH^V$>^anGD@-(>j4ͺf[-V#/>۪VUӌ&twzW<{ n;=ʹ68g4d,Xv&l=כK2PfsX8lSl^esi mUEmUb b_Fc6f??%ؾKDMkf!V&ns2(6._ WzK澲";gg C~n=s8Kjlnr1slDdv5ok8v9?aU:<:5#]ҞFwDGWm~&hn6 d-bzgO?iFuvu#W봶\_)uJZ8+_'v‰O^y Nvlyxmzƞs˴Mn__%x *x`6`&4!HHA"dAv! =$@$:@9F-XQ !-QH3x#/ՔI;#J9! dONy$I*$TK5)TaI9%UZy%cCZhqɥZp9&r`Xav\t]Xc=Ydy^gz"&g Z)V(lFf)i[ny:*ljo ֹڝu:+u:wŷ+j|'/M :h!XV;jK"TC>b+xE1HH4.vMN SK/ $PQby0 +ZvpdJV ɉ着db|x1d+|֙L˪(ͩa ki3p177 +M;]+yQ+Ulͧi5~%ylGҪF{-b[rЇ 7ww(.DE".I&R»#- M0N+0 8;a90[5fƋug^,|נRMh6O ~@[U{@}(}YFВŤ۴EAjVv&\%+-q0%LcZ&8/sSS|#BF4hk|<1OV-D|fX%=,$[ыF7IoQ L$K)MKvɴmI.qiÝR;aO$q?-PiVBlQ+\(KLmK6g]RsdO gEŌg%jn>{JJ}yY7 hyX ~&2=D2֢ݨG`D#ufO4|F Qܺ8 MUyε=:ݮxe:Du6q1k:5\ru6#TI3E}>+ Z^fn@S?վM+CC*lcdI" 6ͅ a)Y`1+B̤I-8 (VRnֳ]hBѦ:SζLme[6Ʃ1U\IeqM!_u~55i7fE>OTc|W_>v˲U*id#, 8?5"=vc[ f D $habhD 2^ZHJduZou*an$NIJJIe<\&-$\MLEJkϤL@YP_=iISœ^Me6R>TB>)]gz@`yMba:b;f;Z<%uܨ%(<|JDP &&B4@,(OYmdrZafPy$u.($ԃ5|+dV @{H }C;),h 1B:|;C@c#;BHiXj>}H;`.C!P)Kj;jIB;ڒB_A/C=!OtAj M̉)rf#8@3>A>b·C;hC4\Fw *@yƣyz-J9p*3ڔ;,IBYB8U3| ?R^j} F܁;D+}7děJA;Dha"a)JeAoB=hܹJ(h>/UP/IF/NEjA =tBT/V:bZ=oY$,,L<#>tA>=PD݈C9|@JVK*M;J@$,|p1.X'LjG%);HE; Ce% $,*Ky;CKj$)":$ڋu#2dŅʂĘ/TB=B]B(,/, 4IoF/0(hNo oZ,./V$s-C`THS Lr9<(<&NL0C!_oAx<_&pVg]E 6ir!0 @8C~p "RHcw /gybKLY$H+C%<e 1"' nQG11(]$@ F$LDF;Lف;A +$XuI`1T,&I2AE+C% r] p' U,ab./aV `(oo=+kHr/Bv1(B6d_ZvdC r&~ffvikhi(gs4kBJ=8bo9$@6}_l%,9XGk'0_xAgqI1C!t AcA^<\q<(<(77@+ #3B z@ȃ8MB |ui6zU%ga%@)0D_=-9?$yB;$B H;r@ΛvfyP÷vʵB AHΘY{O6g xT# xRzm7mމx3'wbFwJD ʩQ[Rf 滒BI흣tIxֻH=tt.p~SV\+$k4i-Ԃ#]W+R`ɃŒ(P)΋CVZ4i3 Yrʯ{Y6j1*VVrp-ǭpہ^Ge^/ ©7aD4uCZ SL2J arDIsFUt3MC2@@x J>뙥(B /QpA Miңwtbрt6:`Wژ,fyx =V+*a/8:ƫIBܷ"i4@.:l JEî\y_".bx 4xk;TR"#a C vr)p4PȦ@̊ iU@Ў PKuƶMnh o!. qg)Wmnq* 9A| gxBp)h*^dKex*Y{Wb x0b%w8/“@|a< 'HIPLe+8)' c%ˈV䀓a@`;-k̠,~_C(Q8X@ l 2(Ǹ`#d:B E8r; / q2#n/,̪q#J8'Cn܎6͖PBDbUsY# Ѓg" HC 酥E>XhP'-jR儈P=Ą;aĄDAiI^:A&4U.!fNIxv!(PCʔnI PnGx{ xR(PEQ7媇 S( ߔ2{8QZU-0AKvw3HV60e^ BdeBV_[BY1KtWt\]E}j5լ5rMluزp}p[~#[Y& \ p#6DD&u ato$yX$э@dܡ(H #"D 8DVXA}2|"`|aւa"ށ"A{lnc0v2z P( zl,35,NJo4bp5`!4TC ʒO@t/Ra B)Q@.E[ `U1 TNJB1rŬ _a^_^`jW`za`eW_W _` jW.yAv!! A_ _%b@WT!Kg!^&6~Ʊ4`8&e(+i@LKijR `+_omj/njk,mv,FApoR q+R4,/UC/pkbځ("<!""@@&@%LL0s%y"O'@,\6K@pB0L, |LO+:"+ ޡb-@{Я*~ƴ0zl D 2 AL5R.eq>a5qto@ ԼT $ԁ>4AK a5 @R>U# +?RDߣZF#RmLEmF<$ٖ-*z @*0tG1$ =A4 vAv?m qքߠ@LLKMQ@vaMMDF✉ U`PN) e I ᢠu eQ0MNu z.!X\U\v a^_A\`[nW@2fX#`pU`&ve D Y ^bb!~fe^d\0 0oFUh8B *S/kR*Y k+)vd/mX\nocqn-{5F4r /Ec seW:&e3 lquT@` hG XBz vOhفhWB &a/ Tj߁ ((@%aAHS|väށȧ (*rB1Lo/ ء؁c Z1@$ W WesY,c5Z &tŀrtKw1NW5`Ra5RwuY S5̠,&CqbA0& @Ґ<dI`$j$0rF"!B a ^ dAjD W|syT}÷F=RJ-Kc!H̗DJIS@IUwT ±$LJI 4-R@.UxSXJMxQ NVX)iJTlE4C %\}j v!^jZ` _Z&#  U.A [` ^@d`L Ve^Ae.@ &F`A˳r*UyI 2+bekZbkh+n>oxDo..K /y30cg's`(4!@,`SZXs%B ,4ڏ%,n!x!&n)~b* 6S)+ds5L+ &@+aĤ*S* 9"ޡ.4/7.  f@ !rrePڡVHs#Y&O5$PeZe"zRfV5BE#Z4Ca{o@>n`et@ WDzРXjܠ#tԎsFZE4H1CBj "az MCzAHAR؆%\ $U 5R郉۠PBr@Nf;gLa4#u;QV%R8PTqpN\X!`"! 8;a!,. wZx!8\zuW`buW54!bb [\z`^%c6KE(1X&)v2`6:Ka6aO+aS+lf+&mdk>`kncw/d o5ܥo U4!>b$JAn]xSX <"ABa\Z،X#8_[njbv ze.oW.! ve[@YwmAE`&$E[$)UJ~n4!+!'2R|&<2hfֳVa2bYƕkZ`17vnV`~y|o+rp9pǸa .E##. f|!2ԉYSf C1 Bx0q aD9I1ƌ f8hJ Y޽K^9̥"D8r9#38)S}SHDd dp3իl:p No ح+vS_ jn ~[ɋSλqČ3f[RQ>hҩ,Sg`39ѥ(͊sjb:ڙnS=qnp( *sݻzh^@޿!=||qȩ7H{ٿJ=gJ=W9׊:xw y5H=h]7wnXS#Hb#9tQލs8n@QE$ܣHP@N3xc;v#Q@Q.BQs&G=Qe0őnc#:vydje9:̈%,Qfwå=.lGDDB< e͓JW3= tB,J| 8 R@V_uXu^s (2 LFv;Pڒm@}F;Mb17 ptP!bPJ3AI{@/BRFcd6J!U9t<`FLH㤎;SOQN:OAdSb^EP;LAÎ6d >=35ȗrb쨓_  - ;| v>4I6޷/m6 F;.49Ar(-l0yIc&rD #vЄ $cA * 3^.pɁkB`b{$QX׿MH@!Bv 88 n-&+Y dG00YD `8p h ڥm` <@6t iĶqЈ 鑣`]2w.nF qQvoxIAJ %% ڀ sc0;qHG: .|m!>1pv(.vp,.|@(`c"c,1&V&߰D4 -0ႍq 3H:IP2>9rcxȮq C#3  kЧ=ص9v57h@Q}Av;{3CaC{nO$@ QhEN sƨ! jdt;Z: IHx] kY* Q(.NQЂ)`4IˉNP )~)8B=1.K< ڄrfp>PӜm(H8's 3,4J *礸h¯:Q%T <2+pE <ሁjq%! OUD#WVBSox G-K bt2ؗ=XW >H=RS F$UB9q UMƎ=!Lf2ae'[Êwf,+Yͪ3 H+^y`9{ͦFWuZX o]}|z}Hʰ7yF>&XkҔ-ZNݘl < }}Kޭ<8}\}w?{NW 聞c+&Lx-օx wp].~.-oGjzץ-8w zY[P<Ś 1@Ɵ-SJ(:S+MwhH'ۛ5{xy+6|Ucz{ыz܊܊Cۉܕɛ\ݞ{a>ZW }/-\Dm bm'_k٬2_VΈS9&iS^nKJmS =2;i\ڪ[kl^;gi说V?; eC~ $-OnQn= 3Y6}ӭ9 O}|mmzc ~N,~oOoּmB ,@ ŬSĊM\F/G( u'ڠ-T*ݕ-MVc@Ǹ+bݖ<ѹ=l0 (Pf4Bԑ&͗  l`!bň ,ZtG E$ CI'UVt t *j.M 3d,]Sի MSjX5d-%[h ԞMV[hΥ;xU A~6 w/aĆfxo޼ 2oɗ5ogСEGԩUfkرeϦ]mFݻ 8ɍ+}9ʁ_8#Do}_/b_޽۫^F/dp_}{??tA#T0A +tP TP U?qDE$DA\U\acqY`amQG{G }`\q6H`J)RJTH!Ƌ60hD4"iH#6$Iqs$:QΖXK &vA  (DR ZR5A +B AG2-j.PU.1˯C0[ kV4͆4dUvYLYhvZjim(Ֆmm\r5\tU7]v׽.;%"Ƴ"<AoTac`^P#1Va!x5O 9̰30DWvyD[nE`_YƚiG r_!7:H#UI'j)Z LH-|,͐f@8?ΔJۤkۥ{pn'j9BJTC Gs1* fC_ ÄuTZv {2Ztus,2ݑgly/;癕~zdz׾Zƭ[9|>?;y.7/<8=`D#0ga @ L@ Df! fPb|bFP#t3L/t$4M2LZl$EIVմqKQ|11i#I`A&T$NSF"E'\ (3f#i5>OET, `-n" d"ib)@ba<#,~[.:@1-1 H$o{*2<'aL) E) OOA8V n, Ή*+Z*(D]a kbwV-xhkJi׻4\e_Wt7- -o!\Sa+.r)(?LPaƖIbe(0ɒl}L8b5#̬ѻ)t7Yp^A bkgf=N.]#cדJkGw=F!Zdӟ"°]6I#so#V9dDAȀ$ ~H@H QTdD=y8 40҃Y4?@A`Fc=PL O _ 4nXT]  1Sp8Y=*U|c`/0n%!>4ѭ24-iAY47A# (99(!Ri/0="?9X:+ S PbecA07 @/2Q7B*LCC!s[+GS1ׁ/J`j,~7E*`$K«KYshRT?T$?VljSYd9[ŘE]E9mŘ]?]9d D 8 &k:n-o-K.yR.q4j!t.-y"s.a<0=.†()S#)HB|(Z $b=ȳ/6<$zȃ/ ԉ:C5=j5x*y  A xıErJ M ˘ MD⑱Q0SdTJ2WJL ?? 3FyI| @eB6s3 kĠlts:LtB'!Ap4Ar<ȧ <~*uvD.JL6y(=Q#74 ( 8i8@x2S A/6-H9C0;<3 I  ѩ[:jXG4 I+OxPPL ÕTJN+P|8K9E+JdEra9 FMEadP_\[b4'KF 6Sˬ/kh3LQ nl2 ǯ3'uA!j<`"!J5Q G0:HIOSUH:JS$Q 1YOL\RtUXE[[ MM[Pal[ŷ[b9`aMF~:93F\gVVĭnuVp]x*s't]WvE캮yR(ڢ$e~DzH86R؄5*M횃7-hmB`݃MYK5ohS64ӐMfcF:(N,@q[)H1@BBvSB % ޅo[֩7eSDzK=SU >tJOpTY1e`U#[ &2[ò`^]` >``_܍\[yV@+V  ĭa֪V=l=?S'?ȥ;r,G"},L4W*~}d3)(Ǐ P(")JR@"㲋/4AR^@S/L> )HØU XI >AF\Eɰ8S EMZO5]ZYkU8`YPu\e^e5ۼK^\\ܳwGƤ\L'6XM.%R}%9m;/5S贰q :9;Ίh@C G\D=:@́"?5)?JɝIdODPf8P`vȈU?V5%RXe\PF`a[xQabVKffnf:aQo]oV;ŜѰkL˭te~fwbAΠ(B& ؄:Y mv,z4(;0 C藭S501*\Fu>EdVisPϥR1KM`ڋեnie_>nNnjjb>ng .!>f{#\~:;Npt6ވzooo/o4Hoooj_C2Z7Idjii GxQd$j &Yց q0(2 VP[9[ n۹vnj辬n!7koiuֶF̟IA"ݢ\˅V &m k&"îæ +\V6r*o0l<5Hm@;Tm$+탳>Pvp|pG'ұTIeQ qq ^nTOuU`qb !7ےnfLjb'<'R9]+j{vg8s)j_ < @;_@֛S-vSBg6tC$TgtMJɨm}>K ~ .՚&j|eS`Lt QFRO\q]_uT"puuּZQyǠp\%y3qkpuqBr$s8oQL*z37gs7lBA , FN:V)0Bwqz3|֋MԷKm+V.jOxgW 8u|WnjYϠ K[W\?!]_w4@f_gqy`?W̽ r^vhv4-AiSn6?rYs=AgnwG$N(K|HU[TȐX~P`A .x.(Ѡ9.b̨q#ǎ? )r$I:Jhdʔ(,_d2&͚6o̩s'ϜF *t(ѢF)d)ӦNB􇌪VƸu+׮^ +댱UWHmZj]+ܸ+jh{wݽ}w0,N"ŎC  <(9f?-ZpEԈU3Y6ϵ={gܺ;ﶽ8qF>t˟. &(`Ϟ}v&]Ϗ A,.P`A ԀRXF8!A bȡB ,XPB"*D'Fd"->3V7☣6tQJ=YG"SF $R@5)SJIYWb YUW^YyE[f]l%X_nVac9Bhitz is޹Bfƨp)JZ)VYs!\ft]~xyG|+𹇟 H 2,D @^haR rPC=mD1DJ)θ ;A XQ@IIC& DENKB)T;QE/eeX0XUV\%& bʀ2%`֐rXef]75au3\5ѓ9Ǜ ݨz蜌[Y5_vc? zڴҊoޯ [ 謳2Pmv #):XBVb/B9Ez>3ܺqPEOαSzL\Lr\m9|XmҜ^;s vjE+ђYFj&5֘ W\~qIv g8ja%"Tld_Y8sb6jGD71\0j؛%x1Qq/Qmg7ŖgY-u|]Y6x4XVj0֦VyCdTC\=+#1ȽLLtL3p,璜جeG&)a6"8,-PY~r_tP# WKS EM;35~_׫5Cl[%nX=e{T@MXLmkvC ܞZg?w[ymeҖYai)cjPWĊLGf"f!|99}QA,$P! f}$ U5~E0"65aAd8Yp^rL*$+btuRgt^'v vFbx"R'."TT[ֺIS1|r0"c%Z`[NYB\^YFh\r9G}ƾ]O0a7~ccfr㖩a^(ޫ^y٫`f?ڢ !_UiDi~P iKp_2i\kڽ|BF)6fI$IoIRKL$)r*`P)Of'OzuΩvj')RNy)SSbzgW>㢾YE Yj1~keCI 3W\[!%h]zsR.&vfGajcB&WweQ݊?M@TaA/)1JHN13uDk<n>HĦfHZYbrr,bYg%Qivv*,iĶb*bl>%hcH'QXUA*NWֺڬD.Faقb^: 4cz#JA]a^pY(Yc(<=~GخhيGڞW+hQ룭ܒ&!jPjאKmZ k2)PF˔UĚH_9"騤pZngZL~]N)N6lBd>,28yjlgi,rz0ަre٥~X Vjo.Bo_*I6nFZa> Lh f9'Qat2WԀWnyGڀ!P5+΍Pݨ@ (ޞ̝k fB] eμ&^kJT$b"$I0A+lO$ Kl c p-ʬzʬ>- ̘?% SWT.*YR~,htщ!hfg-i0&XO tZh$m9f>Ұvh(<2h֣M۰m>.W$H:ΩӦ [ D+?Y!z XYnn0Zfrf.Kp2XiPz4Sst0 *_,bnF YN~v|,9#零*1qb\,.Jڥ5v"r2t2t aJt^r"/cn4xtn\"&g&ʉr5ˋLsUrWPaF5iJKB1Ahߋ,.#+paa2[U's Ks5suW{5 O5sX{aV,fe'W z]u+o_l3 >bhHϺqfcO 1ph^ c6&t"rG 6r$smAvxڞmJ?RK|5֭V= شB|+i*X5ݲJ}P6]ip_TuKnnU$0V_f ӷ KVu~6uwYK/+ScUeCxsq7b]]Kx'Y*cEh&J4.62JA'dF74xxQtd1x4jyHWotQJGLkp'|2)ď&M4F5!$k5 uІyl/?▦ ki k%w#V w~+zT378Qx_<ڵ;{8Wu:^S%zI ucza3R\ 5&(ұ/ou=g&8~(ywk#$lP%&P'+(_fx9WWѻ%PZ),e$r_\+?w,rMxJ0K0z7K U˷}z/klؤGS|:Ǜ;Xol|T{x3Kɾz޼_=w;G/4@/\cTav8eSCs=&;g*/vG{گ#۳komh-=n;x6 4 "tbD *HqA4*q#H#I4 2cF*TಥƗ"-L#N8)D͖7xΔ j6ujASV:UլRkXa%{֬bɮUm\nֵ{":P2 6|qbŋHdɓ)W|sJ8w3JDl3դYvZ5hϖAcmנQc6߿g{Fٿ>niW~{̫|xY_;Y_}巷6lP @=\!< -Vx8dC EDM<#%PA Wp_u`L2H H"\I#'p J), r2%:#*'8H$<:Kbɧv()lbjO:'=4(Ar*ұj8],˫L=TOV]}VӌZmu\CKv5D#4a5d-옥Yh.Z쨽jnp[t@OAxT^w1D0M`>0L]E %Fmx{+"Ay=.eR.9)KRe)UY˚K/xL0*h!~s3~"5tΑFfQF:E}(TGbi[**IVRM3Ӫ{#ŒW1H'2JZ#7}e0%^qRJ3gD" G&@$\~"%Z,8d (b nS aͲMl*.v[8߂͜-T^N2<C`QX=,&;u9!ttM"ŹxGY$̎;ݕь (PD<>N ؍vG;:DS (z1v eb@$ ;'5Ӫ$V򕳔ϖhjSIzK&#Q զׯP$T1xWF$(lJT:ȖM-n&\ڀ4v H^=%$# 59DŽ4]`#{ 3XQԍc齤z5iΌe/|ߗ2"K/ZwROMYڛB>0+OjMP|TR'>Y͚`YXsS[ZVbUAv1nܹηT9.\f7c\rk?M]kgDPmE܂[(|2zwQT$z6ʺh=zT@b$$ Қ4夬 %IWUx% ;Bu%`26j-FUt.0ccU<3dbk<DJٶNl~#G<ފd5 6A}KGQ ~Ӌ"H9V$O`VEʤ{OJDY}W*@PK)h6+&1KmTKpkB̤mkļIxR$ҳ)^69Ƣؓug߲blW&H&rj=6~m}-'wm=0[!ջ@'ߝ]ARxxxfQGMzԱPbRtUAwVYaYoV6!@y00`O0|<&?[ 4[[}rIXWY>vgWdmA>w]Һ m /C^Ҩ?cAJ` (_`$+ NcDpG8+d ߋ4ie,e˾tp/DmiRnt*"hFmiJTPOv ,˜K KĉIT /.Ґƾ氞NM*p5oZoQʮ<2*/w> (̀X,Kky,6~zRQGZXGіDH\jb/} nvL*D:>bj ,PdmNR,'Nɛ.0 ѰP :eˢP ']Ȍ4wE1N=0PE:P IHPWPO$nSK竓:ne@ti4!8&'k Npmjf( oR&&RPnnꂭ 0+R QqN-㯠Xr#mpLwg x$xrra`)d622 m\ND/Mfʪg(ldM x$'r ,,j2)&%%o8S-R,-,˒:ܒ:vj' o'/w/(^"F<1CQ"0S .^")2qC2Q?'dԽ+LVrTF`5u \,2TD6*o 7)E)x7ұ\4/ΰ8e+ 2pG0,s9-:T-1Z:=t zJ;#;cUJDk"2F#u=S1.t?{*30NJMF3g1$tq%{5g"B%rbN_3R;J N@T7="[/*9KkL94H} I_IgRL*K ] ބJ$p)>0ǫQT$Ar4(N@T|5A+edAEngLοJ.OG!LBRtQgbRrDq6D=D)MaT FUGW(b0GoG/G.SUU U[uVGvdVOZlu".c;3/ R֭FaGBB!x3ZYyZt2O?NIOO- 3MIj~jJ, B#T5WVN֖Rۖ6 QIJfĄT,vcddLe:1?JW]ē|sU1siKYGhtFB Z1Z2i}|Vuuv[[Da$@Kim] U&&B \um(kNS+藬0ĮwVT]aOa3b5cH| 6>6p7p~C.AJJRWWfeKgKOxRgBZw>7t9M1;7iuCN)ii-jW$kHXlu'|kM5BYh''zwR k֞7+)v+}}W~Jm+w7r;K<ˋR8!Es#Rsm$(^.xu\T$Yd,s|>S͓zYQ.8m:ix;‚[Љb]92h,z]q]ޡ]ʲGڻ !OZeۓ"UY}+{[Gl^o#yۧ_<ӵsxPΑ y-7ӝbM CV2V`2ŭ>2~feɥt{~KZW-^5~iqI~)OIRy˼e`a_4a^}  4PÇ#JHŋiaGCrIrIELD*0cʜI͛8stHʟ@ JѢ>&EʤӧPJJիX`ÊKlW+Ҳ@b۷p㶍Kݷ/zаo {È+^̸ǏCLr!2?ϠC{V1ҒO{ cȕcre۱qo > OXPʓS81:LXߎy"8x};߿A4h*``| > hfv aAd@ eIdI8ިca+覫v[b)"kͨ$+tKEl02!$M6CV4 }ӻAzzjZGꀴgW59< L M;UA mp[zd%k=Ao9APmŐ⏅̕@Q "q$)D%(`Pl K(lt#f%uC.v06e,xp㘌GG⽠yS²:--f2cLff}gR}T"4~OV5yjlU 5䐒k`ƝVjgm vkn&̥}v٬ -ΰoj2 G!0ЌHd ZaD} '8IaJRvvquYjx7OyvF~3r @2:,r 2.}=uPT!(ՠ$$#95*7[$HGQaF3X%VVB`N%Fpla3A,_)Y)RȞԏ Dˆ~[UjyB;|4JV1 Ef6ֶJlv#PQ(Ģ^MusuؖF}֞V*#F,9vlAJYqC *frԤMSJT5%-E-Bjvʮ2:1J]UlE-z,cGY1}ˮꇫ:a1i̩*3za!φ2kWrqͫmNvb`Swgbӈ G6. d+KblsK^xzC,꽊F|řȷJ϶pB ̸6 8SLv6_A96%N .`O<1;Խ%ܚzݦP>+Ta1ðnE5 "jվn=bֈw"]8_rڋ^0:wHa[éfu?9S.ĸB^s厙#?jء dvSOoMu!*mdH:ܙb9! .*MracrfM7$̷̃Bg.z H@Ֆ98&ġIED4-B#G xNw'ɿa ?gݹڱ^m\cb],GJfm2E/%J)6lD/7jagͣĮI(K͑ZoLw+{]ֲNe9bt%`K|r$7 <97m5v6dVֈZV\f~whf҉4%oXlxxB7-Äp7yx8U/$8w핂V4zhh4D;#WiR2$>XHC8NrcHaNxjX̷ȅM!u1Ut}ut4@ZLJ:QSs*H)H3?REn6nZJF% Y7"7G(U- 'y'^0Y8΄4!,xqH">?i>wŌ&@Xx{X^{OO֍4gsV`7s;a(`&`LZhyli} aA5`IWtpYHL'upbo23=6v'f:f(mR S3J94JS;J"6$powɄ,6dy4py5y7M".؋q2? 0z:׌+؝r|Ux'kUhSXFUA}^ɖx}]!ezx=| 7lXC0%Rׇ`vږvHn7@n \9i怲yT#YpLBx%_ւ-dg"q=^&!""W(5_ NzBI(!X2EUjAiݩrVysS9sxQef*c?7lifv]`薽_Lb.6uQQ1vc">9<~*@*IR(mRUI@ewaaV+X,(Z:m-to/9`2g=p/ VT'8Ι%ɈQ0eO:g1H{ Ҹ\ʥsd)jX$ÙQd۲9J95$1+x4{4Q"fe<;G- R^˻!H;MWyq:TKNVkhjY[O`{[ھt RۦyʿbٿxrJuk,ܷ kY\p1kIl,4fuH[4d![Jw Iv?*[eZ[4le"e G% lxE̢8L7b.I[8[Vq"$ͩhI9KEzli1Z\cs|zn:w+vKw:*ёlrs2}{}<;Rb!@ç4(dAv J0LED*_sJ6BPxʬI7FL4-wX-MjR˴]w2,7̨w̚iT#Kmvس\g G/9_E8Ygb=LzAR97im]WUDaނ%;0'k)tGr]shI؀;=.ktd; }b=ʀYl ʦ}~uˡ:-d3]Ӟ\9˽\æ=}*<ۺ8ïrKMi&q,̢]e^؁7$ŗG&^V^! KW^g#f9kzXoa]=tߍ] >9cAɋ[pIDnQ7٣=Qڗjx%X`wN#S˶{㩚w䡫@,JT=RmIo0*xU6j><.}EPG/!'%QRmŸᩰ*=-4>ñ,+x+ֵf,dM"[Mel%N1=FFwlsX>ޙg=~t_ o &Qj]w%(B-L7B@  q`B J@ -`bD;Nx‚ L4AB,OlSf2kҌA͝sY󞽏>j}+[c?Ž\sEwB9qGW7q]}KwE}^l(H fDpJ-H( J2 cYBL@VDO?lJ,83e7S?dеҹgx.ѫ 1FhL.,4S<:7Esj;[{%ln8#k섅Б|w4]D}Kdy/2?RUL"Gc P!52Г T&a٭De*7=+3>9wB^2nA  9]C<\:f 7]i|_Z]9#jǰ'a'Ev '0^O(ƣ8y3:4:Ԡ KX)Eʡ }8ȉVߩ*}&j. @dr'URҥ/tӷVZ,7m?B EGL՘.f~T$y&|  $vI\͙(S Z]vrLcJO751,aUP;y{o_u4-B@>EZԜHQE[#)Ƥ'[JY:ѪʹYuvʘAzn KZ^{K˧/*jp-!zh75Lp4zĹVu'W]pc/Gҩ-$mkyKq•W=Ca?*{"sQ~F9ڪ\7DKZw6umE<,Ҧ8Eq-F…10Ǡ"Ӈ&f6TJfr5dQU7U&nx6U]gZ%vםC ߥKZf7{{@l|K 3$IkZ!CLj$%!EWr}g#} g6B fӶI[mB=$vp1Bĸ-&qi!]Ȱ[HW\=ԜyM!nS ej;DR:5rRf41zgu{9 ݳoFdE%oP =XiKә8A|jΪ%OmZSEqekc6⡲s亯B4 Nd"+ӪG~6knYyj\.vYJ'O5J={o7ɠ~ 2`*T4l4f?M: ^G8Dm^O<-+xl7X:*y#9γ49;y|~ _3[G9G mCڷqma]z']{2Yk\zg޼Om0SQУ?xfa[~3qW/_Śͳ1k‘$Ӌ"sփ=` Y'9"'˶#@>r' ';a98 vC3棾A#<® 7Ny;"BʚJ8j?z?Q(<.NC<1LԲ5K1˿j< 5SeS@$cpCD6*" ܱ?<1k'ὓ@$A,ڲ-"2`A03ٯӺ5:A:3>y7PQз~E?;:?KR?+,ܤ-g/$%6ÿ8F9áC;t!*"j[BTD 9{fZ$["AK:l3+-P #UħVXEZ8+ =;(1B$$$I^D$˒,۬[gdFzF04KC3;C;2TjzCj!6˃n @F!bl`@[CL3Ĭ䲪G9xd*ۛ{Ľ| /m++"nȶ*H 2JEC S̓YA!3@7S>z,BIC!RF hL D"HV+ʣ?,9FqsDHlqʪ9v.JًJ&:K4˱2LKOt.)o7|: }Z3Ksθl l5w%9<<ӉMT%LGQ~]=wT?$ڴM2O=xX~lXmT:˖XUI\5ӧH= A]%BR/9OBaOdc=FZ ȠYB2%,ZVnqp lɧb)9@] "=%*A$QDGYTFl6ءGrۄ=6}ۼGOL:[;HdUYEkR_Պ&Su#>BUϴ7t0~Y`dVT35ӭI$ iV3`Q+ֵ:]ߍ0^bfJªo=DU@R[|^}ݮ^+}4=߻5_=:,Ͳ\r˞{z;~߼߱7w_(_ V ]l;E fMV)<+BߨeBT 8ݥ]-DfHal$^hjaې GS#۪XԫDDFUT ! ,]! ,]! ,BHp \(0C~ >TD #P 4 .$( &a?s$pZ-/ |tˁozj=ADB(h%,=xɕ?~G%0;r-r&|95)z ([xVl vKPA`b0@ m[QA˗80J]#nY?0Kkщ>_V`՜a0-^L|a|9Jπ7ag W:JƆuuvÝ[&v׹_@! ,]! ,]! ,]! ,]! ,'BH *L!8Р&Rd0Á zlqc~#`Ɨ)Krfț 6$9fɅ!9bis $S͙5]$'ӫ bѐ_zUYذ>9G.9 ΢|3G{7-J:/$w4R͂ju=z(\CGŋ0}]ϪO?rPzW',w١E{޾w`9n! ,1B-H&׏?#$H1‹!>Ċ1<ȱaɏr9Rɍ/!~@`K%OYqM9u*IgFp,ʔQW\iŽK ~h qa4K0y,]MrЩ}"t kqz JM0zߎB8zX:i =v)alqbnhJᜢDGΐ]0`| ܩwFW'쨥DQO wxtd{o}f.s菫/2;r.?W_fx p<}A`ǕE]9}eqc}tރ ^A@n"`Ӆ! ,sB-H*T}8(HQ 3j{rn1 c~Slqc?̣pĉ (m:qux|z˻.eחq! ,B,'8*4Ç(aE368ŏ5f8II4 CY~tqu<\Hs@tmى'IXt $>[L,e)3֩IK,< $} #$ڮUP6t|N$[^0nU*ޥ ȡYH,ޠ5e̛QU>SMr$n;0sGu}¢mZ}5 _>t$y6?J*'Ѐ5[P=%BW HN] #X@`uVuS &`%Mh @!rgT@! ,B/L(A'XȰÇ IHA'cG ̨1#B S6 YŒUd9q˃eΤ)r#Iu)OB=rcBI!.hTcg4Ͼzl?rj! ,B9%ABA *\ȰC"J(QjؐLj0bHrG!Ef,ɉ)U"lIK2֤ySbL;[sfPCydҥ#r|ZTԈL")}DsZ5oA(̱#2F\Da"ZD Nj@e@`Q^tfQj硂zFO.'VŨݢV\J! ,%B/,@A,ÇH"cNJ $HPa…S6 idA ɒHsTYsŗܙH҈G#{&&P{n/F:$Իas.z%jU9s&Ċk^T@Ν sføC`y1ہ8н3Q&X%UR~[3_! 8+ɒPJrJVͮa!Pg qV`%_fdZPX X@BXfޅ.aQ! ,JB/H*4دÇ`E36Hqŏ5f8pAA EB$eJ;ztyfLibُ%E;mt!Ϟ8s K:gJ%jLۘ4*yl ,eDBʰ# j63~CO7Bqi`ɵ{qS@?S0]+cKӨ맙щ L_7egAr/rRڼ3W&2^*VSK7G*}w{{_@b5! ,kB2Hp *\xÇ(HQ Ë#jt8bA nѣ!GF,iRʔ*%<2cL3-ִyɝ[[@d;"5Eń0A* ҧOcIZ)@.rR%siy1 Zܬ7U?,GE_ΑL#3tEf^@ɔyFCwHFTNbwTדLJd@! ,BHp`"P@2tX0"ĉ ZL1=jٯcFE>Di"ʒ*?4t踭"@f?}YƔ Ȁs7v9M_8@hL # wd2Aa&<7;G,o`_OqCEa(d> {E?*  3V K۸W`G)NaGz]@"/GS M%tfǫ`_7OH^V|nwò7L_e $ 93L% >|B5r-9τZl$@"A6Rͤҋ1! ,]! ,]! ,]! ,]! ,]! ,]! ,BkH *\ÇHŋ3jȱǏ CIɓ(S\ɲG0FХ͛8sɳϟ@ &͙C*]ʴӧPF-hDXjʵׯ%. Y; L6gr櫔Rͻ 3Se)5(aà 4h0+lMĠ v鎽 L)߷[ŋ:+֮axQQ'ћfsgMuH"j^"MryH%ٮ\>HVʗJWwMqF{ECDF O"P Ç1`bN,?`d"#I-FQ9B.)\-]=T =4g)%iTb$|_s9|3ES=T=uQNy^7[m@F\䓏LAL>,[%nxɧc'VUEA{a4fLxE#(9 j*|)rpU4pB(+ +nd&EV=!/dfASm4|؅%bAɣErO/&YڜSȤ\E%o>\k/ђO/V:P |<[$bFKm AzK=A#XA-csHɁlC =@+LQ ݾr%jYt)^6FS`vՠ|jvFRtuW5€uG>m}x&gD8N=sXp<̑BГFe ܳY @EE%L%K(B`2 :p  (>ajg"3Jy 4ȃ(_@4#O;\R1M@=Oڵ3pv;'ߝ,gK А9P8hB8qV0 G)7/F!థ"E Fa4#O11ы^[jVFHk H -o .P=>-h!ZWtI ^q`0l}Pݤp6*NF>'@@F=z4If8QZ|2C1 fF1 p0 |q] G8c `D#ÜÂAz # Œk|,|Cy7I83E=!& 3X9AGȢqk#(ʰ`aF}V zNEf@]nv C2QfA y`ЀCBw,¥aLq xGJ6T Wha\}=:m j:$ֳ_ %l "o]('`5H53_Nی/H.#TbMO)2 SeD&*V i>A) 0*!+\eDaPlQ)AzH~'#$JP 6//O 5N4?bï DX@ j 9y @؀Оʣ0>Uh1qRkZ3' 8ZqIq ܑ S&Gp& pB2G0o PR4Vqz5)@ @ UBH`Dz`'!GV 0 FXx\^t(f^A QW 2Iw(za6S0 gItA7@@`~aaP*"J D".!Xi0"L"a0# yq t awPvP*~8!r1z*@ dw dvN6yidVȒae c4+P$Hh:=32͗Q ~i0ZU! @1` h1 "T\P6 QV5q(5B 90':97IlMА?(W5'x' GsŃEՕUTUyqF/a5S o!n[ho@  'wC 6xyɐ]Eg2$_}'_IE5V I7dPcWyL~v! = 8XdVsbdvDx|'8fPQHpb1NoM i^="rL@@"8? spcetv VV#`0 W-:{1 63Q &Y0 #P7 N ;*E 0p%F#FVd-91zkH U64a%9'= 1&4$x'kqW>;vB7*5TSAYYMÃHE?VD Pg'ppp?hsZEv =t(v2{o\lJp*(H`Fqly^Q5p[ql t]NiIKbTRpb$ T:`)Hp7"3̤P7IZ雮c %hRm0h׭ 3{h@aI )+f>+a9fP,@C*Tp; dg i^P&{e0 ﰑ6j>W"_VP!3JPCY?4(l ޡ.Mn-Tmp`4X0ѪbJt7z0g@L;q4N{Aw@#?Rs 0Ԧu@=Qm1VlK'd< #Fj nY<ʖp0 ѭx0v&LRg,% ~r^< U|AbM(H0N{Tx 22w1y-ڤ* Yc!22 "#vYP*P1̜8o )B*sx!܈ #[w35PgC^,{wv +$5sag 6V³ 5oۧ` 0S p% i(ت?o tUVu4R-bO6MSRtYK'ZqQomqkѪT,>aXT;`Y:1sZ bbRpq!FzބP q \!/w^1A5G pLJ(4'z |RR%p . W7fdʞ!.!YbS1"A6$K#!rb $ vP̫ V &Kg@030ݼX13 LP+ptJ$+R#P Z3 !̡ }1; Ð P_Pe0; Q (xX`k J[ep&@ Rm8-[]m 0.?-XjCaCH&x@Ѐ̀ɢXOm 0$]pZGfZ5_gmFvB F4r]vxa?@[Ck'`\M7Rpt}}fI_)l«Dfw5_*4t4*x_$2N d*@ 0"C2E5#bIzd2`1zV͈A=zJ Z# |[JA1#wl=A!W2lN={*4N^wEN^,6%WbNx%$r}[4FSy{t PzױwNvv<(:.m g$ROn}.+7]ƥ:(]y>z{H.6{? 8v$T HQ'{Ʉ [ ;w? bĐ(!RVz biy/`!a%&ȥLRzih vv\iz6A;&Q0b%v9L2zHQ!t6 wr$ =Wbp-tG7m艆haKR<&u8C+x b2^v =v_@yYJv A}Reǔ fGee~h`gejz6(i']^)e9ڧQqL-}'k:(kIF>͆lݕ7K؉{1m}=:jKɧ ;qg\h&Pr/GZͻ[?]@ Fd,1'c| CwߟzwG1ͯY:"^ν' |1zx'اŗ'E6C+`$b{H.#gXV? BID+Q0Oq.'Da UB}! ,]! ,]! ,BP@AIY}WuizW'V)E &xFB9ч @%hP > 3hпXD)C.DLPl0}rŨ#H]>:=,WQ{ mL~dޗ]'Йf]نh/AN@VbhAyÌT>J,0CcG 1pC1!jCJCOƂؖ҃)mp  ԏYT : SqrO+@9l@ӎ<، mqI3%No8ێ/=ޛ`'E_,B-@#[0LkϽ} 9@Sc`<ߴrW_}Au =Rpa3D>^^İ N @:pMr#@ u̯X`9^a4> ԙp'& lN*#P, zګ4v0Y(Pޖ6-ьh ؂@QRx"p D젋ssҐ%LHXtA ŀ]Af6^XT31 v[#"AY !2!VYQ0P1Ðgܗ619"b 3AX-EfAjEh@w,d;`/H/,x=*tFA" (9Q\!c?wP,p(AP!1{K"(a{H`*p= :.|ӂB PD zĐNzr|8C åpY<`!Ћ)I G>$#[Y1ы^ꠚAq\@Z*$|F-=$!J[->*GAk~X)LnZj4U IS npl> 3"pDr\Z-.fGj aЅ.QrL*2,MR` P0 A(Hõ806nP \,5i^XA@ cyc5,Fe4 *<Ѓ4"Hb$Up`V1%=tA#n$x90v iʰ6O8tPC&|l=Cx5꧁|#u2Ap/?- A‘Q`I)_iT1+[`(PàHnv(P bo3% v @ qI()10@B`#f#i`6r̔ɴ +*v+~ Kw3 r1s8+! 1 uǀuZGw, )`c[@; zd<,v3Awʢ_Ff"=dr'f|qq ѥA- Z&0hr9t3,t ss X6g `b\Sl5PUg@|**' [%uEؘlA@A4r `i5ԕm /0 ܀J1F7w@n1 uD6y@\ dPpr[;6y(5 ֞vr^qh4"3 4f2"H`pK~`#s-r'*,tPs̤L1I1Day`A-Spɐ !E`sdɃ>ӧi%j vhF^xO] qeIQ=@bfwwnf j[cQ ?.DrgZ&C.NKny&BxCZ% F {~V`1-caJh R ג%JZ01Zjm! bzm/[hpbX̐ t4V v 0 +")N1B=7~0b8_.E$bsIW6M1I7Zuqdv`FdS:@ O=~ wkIf,P2%GfPk $*43$S}Bޣҭ)R@ \@pG ſS@kMՇ \P FM &C ƵZ[0\ĨQB˜ @!ٲc&W̘r ͇F7nrT0X^8edﶀw_J 5 R YӐ_ @ !)5 :ʿj2ti4£7J"S5& BRMId  wLӌWh`,2M" /7@Q2ܿȂc:РQ>@h=d]2pUDtL@@Vb)S0$8#^@1rc"C49J̒x" "uQPjX!pH,> ~^xo=Ju{Ve@c`Z>aTd {}P RJX`fYzUTaƍ?@U-_f[/F\ apo^ [6s1(l޽ K[oΚ~![:bX[>= _^xeMi]CV%>sfZa.X;/_܎0p/A=0B 'B ! ,]! ,]! ,]! ,B Hp *@A…>h!E/Vx1~5hQKj,,)i>%} R:;ijY(:Pq8IT2‚(S>&3U&B^n ?pXBa秗|W%2U))T|)Y]:7'wD94M;G.)7I! ,]! ,]! ,B,8H*\ȰÇ#JH13bȱǏ CIɓ(S\ɲ˗0cʜř8sɳϟ@ J(M*]ʴӧPJJ!ҤUjʵׯ`ÞQY1jFD)p 8fr-ݹu M]Рq CLY'ٍWJE2ʇ|B{vPu$zzCd82q[^ίv%Kt.9 tIcy+<{KlӴK;R.+SO.-T=XAۂ &F>pQACN8D 1a;N,?4$"}B*H=Q 9B.![,9D =`*,0ƐdIܔ)-S_s:`3HC}P=l؇P:m@;lyEty=ׄI !U C OlO_ iatN=t1Cz@*PR((ЪHciA=v =`q)qQ)HV>=lhxyɣ rO/ߪyr"Gp P\WSv@(!2!CӋF_ hІ@NPƺʪ,~:.0Ì {"4 =yЏ1'C =0BPF)DTSsID.y`KB[4A @ws}NMMQlzAiC\\\e?I@èB[,2OZP ΐ3G8̡PГFB.+pFf1,clbeQ 3蠃L%K(*d,F.;e*08dA^pM;`3*%N3la/:g`s==p]}b޵ <(E{ȣ S+n=;*!h"^耓Hx[z nm [A l( ĉ|Bh=a+ 7{8)pAz/'pH. 0011وxa9^@a *4 R#>졠|†> .(.У D.R( ˁ- \D3fT" 3Q`Q$@QRx"p v 0P& ;bɡ4ԃKP1] .d(Ki!Ӡ$7@aT[@f>tz1U#@'WIڭ``.9"ԀhH` q2 k \ Q1#GV@L4!C{dI42a)'MJoX.2 |9f<&1ZAMqjfDKU僿1 Ye%{|0*>FZ3صZE@ (Q#LHю^kZ6ȅɘ@P`ҎVbc Ҭ`MTi+H -o\:,!D9oPnG2H[| bj=ԣ&CfFpQp08EKtr(c8.tzT]ɡMbT |( 8WcdC%%8c,aUy7X,ʏqd,Hd0`%Աop9 Jh>#ӣ`G$yD@]`IacXH#OC2 f("Đ, ytp%d5;fC:}05o~{Ё:- +[ȁ <)<\Pyڌ/ܦraaiJ`t T=@c:;kHo2C=8Fp+(D+6@?zh8hA vq 8/t1_ty 'ẗ́ @Ar(6WԻHyA.{0c1HES2)zCܨ,dT8 ?Dm!3# LC̡J#*.tCGҞaT;]~ \ 1XjQE ҩ}Qh7Ú$G.,Y87د>Dz%,a4 w@P@-AaJ߁ P@ 2h d&LcRz=.@[<;@h 0 Ssr"?t 5Zjb |-:Б' B&gB nF}gnAV'G@ lC])g([S(wgrU\UȄ!|[T4 %Є\FEEDB qYx(7Q61}#7f0 S`E`P!$3 fvNB2LZp%BaP"PKJPb3ayKN6f1v@*~ |gzI@ y F2 #1@ + 6"3"Ty(##CpO``| Oa0,i:,$!Qv:ۇhG4~~{ 0  ِp/@M&[[@Fpa>c(U1 8&tX-lh@O-6>&f2Wp"*)n\ЃG$V_pgt i [En _u/WEe gy(Y wEV U/s/7]s;r_"NgnD_*}H C 1~4ؐ}u3v ! '3Nw ,Vz10&9zybpJ"WN`c*a $O^d1`wg1z#? ̐speI0 42g,4 0,4h} 9-pR ٩Y0 K@ji z%w 2E K bY&QVt.mP^Uk JSYh5;@z.a bl5ɀUO A* SI;c@GHo.\@ P'HgupZV0pg bHEkʗ'tNT^_c \esi\ `_ )FRp0k iH7h(r#Vt~DluG*b`"2A1 e%r| 3RyTidxMF" Tbʔe؈es1A0~0yzOO`@} R|ɧ3s9p ,@{i9,,Ͳ}h>P; d 6kdp% p@& "Clo fS&MCQK ?8Bob{22 be/Vg`@cBNZ" ;OpۃTA\ \ڥattt(hT \qedqks˪x0շu rkkmt 2aftD0AGpI YHFot(DAXR10 ຯ zNƺ{K4Kٝ!z !ʌdPg1ùS scKC8НQ[p2!J :KYP`p3 oV}L#v2 p Qa~)6q$TꄚQuH˂S:.Di/tB Д{Y+CK[ZrW GJluIs Oj\[ hYo'UfaiED|yZ# P uVRVqVƅ\#0paq 0Ig " U zaSqƄ {j䝮2 2ጅ6 @@! !4 $8qg%"w1@ʇ Na02~BR1썻a`zxz!AK Ughw,1hgUgA k:Ʊ,:7Y`9!g Pi\[`,\0ZbPȧ]7sGMdjmtљ1fI5 kEA 4L2d9 դ!ƚ%2K )#wf1Z``Uzdؿ 4*`v"4b+$`$%1KM":O9+p 2MH P s0glg4RٸܰiRg d i #L&G y 0> gOi4B'-i2Z oAP&Z6@NLVGmG0pSn -+- > e{Ybi![]ApW0 [U[X~quXg.0[b ]PTp_kvMd,U(B,ɢ[yq>ع5 p f? d$흛PakNK%w%"v!X6zW)1 &HBJvw N%V {g"I4ЍвK=xwNPWg+$@+6f\ކF˰޸X*U㷛vP`0 ;^0PP پ~:m g$AUInRg"ذQ=TI @EB8}nb1.rS% 28;4V@]<]AFE wǼtF[w@ n(5/5/B,x%@DP[[C"!Gu}Kyׇ\iIZ@ rl_ 0dfjBV`NWZ"}DP2w׬ثfI`qcX#Z)hbDF*)2*N4K{`< B+̽ $+p,P9PIp )0,̰ p >QD-^ĘQF+z4 :f0X"/r EAF @$iA<լ \=4uS꛼t =١cQk Qw|X5{xL7.$r}4GS{tڎ~: ]R\݃uF1Evi rM>T.zaRJ=h,[7oRN"7{}P r`[S>TȥHA $bK =L!*iK J+z/6"*la$/`bp!;iةГ 9a~` vIUg,F!f  bȤR:pyɑ,0pQ¡P8ƅ'iphܜz3 2Õp9GA2g4`Ac $eiF.Ρ' p9FZ(RUXhA fV[o5WW]{8@׌RXe)Rî-hM)[|rZŖZz>]pvv:pv}H܈ڳ]Z#=#G߈~`"p:t 9Ae U@҉VXbG&d5z睈RNW_Y哑M-,T;O8/i-%R(JzأrsAhj;l&`{-;m[/K `ĮB4J4\{djp^'\q>p1]Wnl֊=ww}p3Z,`(\'3&b}H z #>|'߁*?}g}/'~~?G8@ЀD H6Ё`%o`5Arт`E8BP UBЅC e8CІ uC9a8D" EDbDOb5'NъWb7RE-vы_"8F2b4cոFocF9юwG>c 9H鑐Dd"KfHE6ґ! !9IJV2#d&5yHLnғc'A9JRQDe*xJUҕKd+e9! ,]! ,]! ,]! ,]! ,]! ,]! ,^)H*\ȰÇ#JD8A 3NȱǏ CIɓ(S\ɲ˗0cʜi͛8oɳ3J೨ѣH*]ʴӧPJUͩX 4ׯ`ÊKٳ`VuN8n1۸u,@ $Iw* ӡKSˣGw2u Y2˘3kNgpS3)gaO`gՊ w| ]G 7w b+ s(!jԸcO_яuدWv?|hhCSW^q4bYo7)Yr2T\GPVPadD"XT{IG#c<Ћ1& 5+Xf4oyfжf  uYОp (!a}*Da"bjFe5TD)HPAJJ"T^)[Edop.,!a:xH4W$$-.6؆--kaA|@HlaRKF,0cpCq(d#U;E1gAو "e`K\F  Be,~#4IX&ZD S+ 62 țޤ9Yf#ԶM${"Cf1!$P"N?D &bkp54ʱ P&YD$xC jpWJkEƃNAɂ2p:YCA3whú@2< Jk:P b07B1>tWAdD0jVLy_#Xml=@ lhB  2[B@$Nn6UdPc1P|[<zƠJ&(&N^3D6 Oh((0$ohCưM `hhB#-\B$u)$pb QTq2]V@+L!@Bԩ 1K.W*q񈓜Q,I#+)C %z2JiJc{Y\1lØK0]za @D)fR%u`´< $´ d ˂]H{Ƞ!XNڤg 4k^K$={H`1$| p;ଁ-Q MHoKֲ1>L˩CRG,@N i4k[c@BŰ sD,J(Hb9^FE+f$װF#  2![\-0X U3k<#p b,HRY!F[n*6<7]-R ""%>^ F{c@X=Q! a dH c{|"Xm~-q!NhC7qAd nBLޝe3pߴ̽ V<Z  $S?03Cvyt1POMB41V?hL\2|YYBN0A2ِ ]P5h;XZj2 P'ea"]5 uPOdY@Xb:wP2CE(P`W{@w@{[tDPiza|St ֠ rG{ p&F(}2ĹF*qq y}3F 0/0pa(& dZfG9&H 8'õ /u#7\P {T 6jf}a]6+tuFx2OER% " Dr-MPiᒃDO~fͳHw ѳ-GxPɕ I  ^KnJVӹVUs"݃s0g/2U8@ V0P-l2JQlWp E"@a݀]=Р^JJ-nW J2" n]ͽkbKn=j-"FJځc0CJ膎׊e PrzeH[jӊK$^,g4v"|02WR2  ;@LZ7Wqs< ҸVG 4 JMA-@يޝblBrwh(loSPR6\T(|y&q OCzRkȍ,Љ0PɅq z 7 E'z;(2K Q*tO9wEGnK9e]`b'Øui=KJͳ|:0⵬90]fJ^.Ad1-_pk}<].葂۷4 o / Qj𞒎HJ )=֛أ{xx ]m>[`ն.>1/϶d} 61 "o@e۶P;vp U-ĈQ CQRȊe3I-5!ܜTdbTZ˚"לlTIB3HD QP>s">F YL_rѿﲶk]0еkwW &h?C@k! !DBikeK$k loiEӤ"!!-&FE"8)h q!#u` #S&T.^fìaad(i)$X'BbٍGLUh6u!CC !BŁ[$A60"pjrD}٤VH& < %"fCHD S$nsci6\)Q M';Հ"'q}ߡv#IM”D6Ъհ ໵+" ԡZxkarǡ g 5hk[[e/(*7Ӆ0}Lx1VpLl90&s`XL1AAuI׽ˆOw>V,c){ x.>8z9Xi9I 0w-Wȼvtg? E)kD L !w0{ݣp>|Ytق"q gg K#b>%4ahHL-l$ď1#0;\$`l|`NEBe[DP-$j?p+%?j3+;IPY2k+:4ۆI؆T=kZ6@^Q3wyb AVXfyCAqW*\Zr(v(gA8o!ĈPHFqkpN3('y~aB*xB'6~"̈H(8o-%4Xi$D%Ą)P # Fl G )KȔ)+ ĢbPhPEP<9 :[Ppk k$Mqh޲UeCLd L0*Xh,ڰ晬̚a:e;G ك+M-̺U:eBЭzePih0."3Sx.eDȏyڮT*ѼZZ82 >IדC؃[/HiHB@FhFp<+J]0'9hH5hP1/xCGC`Cj8c  dLII`ŨC=x̂Њʤ.@HR@]Іbh7AHۆ 5khi(+8lUe=Ð82PeІMD#/8NKKmpYj2ʷH؉ H\*F[҈C;3LA+8l0CX̨9*TYht\lP8Y0iҶ؅ɖ+`TQ:F ;)EHB1pL,S;EPC::p?TL M͖ w(U 2H1ՐXҠɐH=֫e dVp* .%8"D 9yVϩ oN!1f4 $WfL[WCxWsWRבLsWx%4gzWWؗ'o  3\XXHP&BMP؊'ÈMЊX E$&wq8hX"lu'Xi5`: Ke8Z聴ZH Dup E=%Fg5;qg[SЂq\&tALڸھ[\93EE. >+"m#\#\K#5E] f }?mm=sUѱՕEj8i %5ETuU^}%5E_ҖXҡhe8e8 m `Ɓ+#m 8S-Sn\[-Re \-V:VnxeXG0``:0tUaϩF !ai "U%%&F 7G['VS8,Pu,* @U @U0&6*Qcհj;<=>cH?`H~PG=,p$Gh=&)8.c4Nc=6>kAfVLbHR6SFTVUf.Ȃ)cޡGne Kcd_`a&b6=F[YGuTɖ! ,]! ,]! ,]! ,]! ,]! ,]! ,]! ,*^]Hp LXp:@eQc#]ȱcF=\j'A"\2ʄ5?2t3凂1bda@0?r02i7W"_VkaћcQ}aحO!زk- 5.[U97 [u)5q$!D mj#GָTUܨ@QfsШS;org-appear-0.3.0/org-appear.el000066400000000000000000000346231417305354200161420ustar00rootroot00000000000000;;; org-appear.el --- Auto-toggle Org elements -*- lexical-binding: t; -*- ;; Portions of code in this file are taken from org-fragtog https://github.com/io12/org-fragtog ;; org-fragtog Copyright (C) 2020 Benjamin Levy - MIT/X11 License ;; org-appear Copyright (C) 2021 Alice Istleyeva - MIT License ;; Author: Alice Istleyeva ;; Version: 0.3.0 ;; Description: Toggle Org mode element visibility upon entering and leaving ;; Homepage: https://github.com/awth13/org-appear ;; Package-Requires: ((emacs "25.1") (org "9.3")) ;; Permission is hereby granted, free of charge, to any person obtaining a copy ;; of this software and associated documentation files (the "Software"), to deal ;; in the Software without restriction, including without limitation the rights ;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ;; copies of the Software, and to permit persons to whom the Software is ;; furnished to do so, subject to the following conditions: ;; ;; The above copyright notice and this permission notice shall be included in all ;; copies or substantial portions of the Software. ;; ;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ;; SOFTWARE. ;;; Commentary: ;; This package enables automatic visibility toggling of various Org elements depending on cursor position. ;; It supports automatic toggling of emphasis markers, links, subscripts and ;; superscripts, entities, and keywords. By default, toggling is instantaneous ;; and only affects emphasis markers. If Org mode custom variables that control ;; visibility of elements are configured to show hidden parts, the respective ;; `org-appear' settings do not have an effect. ;;; Code: (require 'org) (require 'org-element) (require 'subr-x) ; Compatibility (defgroup org-appear nil "Auto-toggle Org elements." :group 'org) (defcustom org-appear-trigger 'always "Method of triggering element toggling. `always' means that elements are toggled every time they are under the cursor. `on-change' means that elements are toggled only when the buffer is modified or when the element under the cursor is clicked with a mouse. `manual' means that toggling starts on call to `org-appear-manual-start' and stops on call to `org-appear-manual-stop'." :type '(choice (const :tag "Always" always) (const :tag "Only on change" on-change) (const :tag "Manual" manual)) :group 'org-appear) (defcustom org-appear-autoemphasis t "Non-nil enables automatic toggling of emphasised and verbatim markers. Does not have an effect if `org-hide-emphasis-markers' is nil." :type 'boolean :group 'org-appear) (defcustom org-appear-autosubmarkers nil "Non-nil enables automatic toggling of subscript and superscript markers. Does not have an effect if `org-pretty-entities' is nil." :type 'boolean :group 'org-appear) (defcustom org-appear-autoentities nil "Non-nil enables automatic toggling of org entities. Does not have an effect if `org-pretty-entities' is nil." :type 'boolean :group 'org-appear) (defcustom org-appear-autolinks nil "Non-nil enables automatic toggling of links. Does not have an effect if `org-link-descriptive' is nil." :type 'boolean :group 'org-appear) (defcustom org-appear-autokeywords nil "Non-nil enables automatic toggling of keywords. Does not have an effect if `org-hidden-keywords' is nil." :type 'boolean :group 'org-appear) (defcustom org-appear-delay 0.0 "Seconds of delay before toggling an element." :type 'number :group 'org-appear) (defvar-local org-appear--timer nil "Current active timer.") ;;;###autoload (define-minor-mode org-appear-mode "A minor mode that automatically toggles elements in Org mode." :init-value nil :lighter nil :keymap nil (cond (org-appear-mode (org-appear--set-elements) (add-hook 'post-command-hook #'org-appear--post-cmd nil t) (add-hook 'pre-command-hook #'org-appear--pre-cmd nil t) (when (eq org-appear-trigger 'on-change) (add-hook 'mouse-leave-buffer-hook #'org-appear--after-change nil t) (add-hook 'after-change-functions #'org-appear--after-change nil t))) (t ;; Clean up current element when disabling the mode (when-let ((current-elem (org-appear--current-elem))) (org-appear--hide-invisible current-elem) (when org-appear--timer (cancel-timer org-appear--timer) (setq org-appear--timer nil))) (remove-hook 'post-command-hook #'org-appear--post-cmd t) (remove-hook 'pre-command-hook #'org-appear--pre-cmd t) (when (eq org-appear-trigger 'on-change) (remove-hook 'mouse-leave-buffer-hook #'org-appear--after-change t) (remove-hook 'after-change-functions #'org-appear--after-change t))))) (defvar org-appear-elements nil "List of Org elements to toggle.") (defvar-local org-appear--prev-elem nil "Previous element that surrounded the cursor. nil if the cursor was not on an element.") (defvar-local org-appear--do-buffer nil "Non-nil when `org-appear-mode' is notified to start toggling.") (defvar-local org-appear--elem-toggled nil "Non-nil if the last encountered element has been toggled.") (defun org-appear--set-elements () "Add elements to toggle to `org-appear-elements'." (let ((emphasis-elements '(bold italic underline strike-through verbatim code)) (script-elements '(subscript superscript)) (entity-elements '(entity)) (link-elements '(link)) (keyword-elements '(keyword))) ;; HACK: is there a better way to do this? (setq-local org-appear--prev-elem nil) (setq org-appear-elements nil) ; reset (when (and org-hide-emphasis-markers org-appear-autoemphasis) (setq org-appear-elements (append org-appear-elements emphasis-elements))) (when (and org-pretty-entities org-appear-autosubmarkers) (setq org-appear-elements (append org-appear-elements script-elements))) (when (and org-pretty-entities org-appear-autoentities) (setq org-appear-elements (append org-appear-elements entity-elements))) (when (and org-link-descriptive org-appear-autolinks) (setq org-appear-elements (append org-appear-elements link-elements))) (when (and org-hidden-keywords org-appear-autokeywords) (setq org-appear-elements (append org-appear-elements keyword-elements))))) (defun org-appear--post-cmd () "This function is executed by `post-command-hook' in `org-appear-mode'. It handles toggling elements depending on whether the cursor entered or exited them." (let* ((prev-elem org-appear--prev-elem) (prev-elem-start (org-element-property :begin prev-elem)) (current-elem (org-appear--current-elem)) (current-elem-start (org-element-property :begin current-elem))) ;; After leaving an element (when (and prev-elem org-appear--elem-toggled (not (equal prev-elem-start current-elem-start))) ;; Forget element (setq org-appear--elem-toggled nil) ;; If timer for prev-elem fired and was expired (if (not org-appear--timer) (save-excursion (goto-char prev-elem-start) ;; Reevaluate `org-element-context' in case the bounds ;; of the previous element changed (org-appear--hide-invisible (org-element-context))) (cancel-timer org-appear--timer) (setq org-appear--timer nil))) ;; Inside an element (when (and current-elem (or (eq org-appear-trigger 'always) org-appear--do-buffer org-appear--elem-toggled)) ;; Mark element as toggled to continue toggling and ignore buffer state (setq org-appear--elem-toggled t) ;; New element, delay first unhiding (when (and (eq org-appear-trigger 'always) (> org-appear-delay 0) (not (eq prev-elem-start current-elem-start))) (setq org-appear--timer (run-with-idle-timer org-appear-delay nil #'org-appear--show-with-lock current-elem t))) ;; Not a new element (when (not org-appear--timer) (org-appear--show-with-lock current-elem))) (setq org-appear--prev-elem current-elem) (when (not (eq org-appear-trigger 'manual)) (setq org-appear--do-buffer nil)))) (defun org-appear--after-change (&rest _args) "This function is executed by `after-change-functions' in `org-appear-mode'. It signals that elements in the current buffer must be toggled." (setq org-appear--do-buffer 't)) (defun org-appear-manual-start () "Signal that elements in the current buffer must be toggled." (setq org-appear--do-buffer 't)) (defun org-appear-manual-stop () "Signal that elements in the current buffer must no longer be toggled. Cleanup current element, if any." (when-let ((current-elem (org-appear--current-elem))) (org-appear--hide-invisible current-elem)) (setq org-appear--do-buffer nil) (setq org-appear--elem-toggled nil)) (defun org-appear--pre-cmd () "This function is executed by `pre-command-hook' in `org-appear-mode'. It hides elements before commands that modify the buffer based on column width." (when (memq this-command '(org-fill-paragraph org-ctrl-c-ctrl-c)) (when-let ((current-elem (org-appear--current-elem))) (org-appear--hide-invisible current-elem)))) (defun org-appear--current-elem () "Return element at point. Return nil if element is not supported by `org-appear-mode'." (when-let ((elem (org-element-context))) (let* ((elem-type (car elem)) (elem-end (- (org-element-property :end elem) (1- (org-element-property :post-blank elem)))) (link-ignore-p (and (eq elem-type 'link) (or (string-match-p "[Cc]ite" (org-element-property :type elem)) (eq 'plain (org-element-property :format elem))))) (key-ignore-p (and (eq elem-type 'keyword) (not (memq (intern (downcase (org-element-property :key elem))) org-hidden-keywords)))) (script-ignore-p (and (or (eq elem-type 'subscript) (eq elem-type 'superscript)) (not (org-element-property :use-brackets-p elem)) (not (eq org-use-sub-superscripts t))))) (if (and (memq elem-type org-appear-elements) (< (point) elem-end) ; Ignore post-element whitespace (not link-ignore-p) ; Ignore plain and org-ref links (not key-ignore-p) ; Ignore unhidden keywords (not script-ignore-p)) ; Ignore sub/supercripts ignored by Org elem nil)))) (defun org-appear--parse-elem (elem) "Return bounds of element ELEM. Return nil if element cannot be parsed." (let* ((elem-type (car elem)) (elem-tag (cond ((memq elem-type '(bold italic underline strike-through verbatim code)) 'emph) ((memq elem-type '(subscript superscript)) 'script) ((eq elem-type 'entity) 'entity) ((eq elem-type 'link) 'link) ((eq elem-type 'keyword) 'keyword) (t nil))) (elem-start (org-element-property :begin elem)) (elem-end (org-element-property :end elem)) (elem-content-start (org-element-property :contents-begin elem)) (elem-content-end (org-element-property :contents-end elem)) ;; Some elements have extra spaces at the end ;; The number of spaces is stored in the post-blank property (post-elem-spaces (org-element-property :post-blank elem)) (elem-end-real (- elem-end post-elem-spaces))) ;; Only sub/superscript elements are guaranteed to have ;; contents-begin and contents-end properties (when elem-tag `(:start ,elem-start :end ,elem-end-real :visible-start ,(pcase elem-tag ('emph (1+ elem-start)) ('script elem-content-start) ('link (or elem-content-start (+ elem-start 2)))) :visible-end ,(pcase elem-tag ('emph (1- elem-end-real)) ('script elem-content-end) ('link (or elem-content-end (- elem-end-real 2)))))))) (defun org-appear--show-invisible (elem) "Silently remove invisible property from invisible parts of element ELEM." (let* ((elem-at-point (org-appear--parse-elem elem)) (elem-type (car elem)) (start (plist-get elem-at-point :start)) (end (plist-get elem-at-point :end)) (visible-start (plist-get elem-at-point :visible-start)) (visible-end (plist-get elem-at-point :visible-end))) (with-silent-modifications (cond ((eq elem-type 'entity) (decompose-region start end)) ((eq elem-type 'keyword) (remove-text-properties start end '(invisible org-link))) (t (remove-text-properties start visible-start '(invisible org-link)) (remove-text-properties visible-end end '(invisible org-link))))))) (defun org-appear--show-with-lock (elem &optional renew) "Show invisible parts of element ELEM. When RENEW is non-nil, obtain element at point instead." ;; When called with timer, element might be different upon arrival (when renew (setq elem (org-appear--current-elem)) (setq org-appear--prev-elem elem) (setq org-appear--timer nil)) (when-let ((elem-start (org-element-property :begin elem)) (elem-end (org-element-property :end elem))) ;; Call `font-lock-ensure' before unhiding to prevent `jit-lock-mode' ;; from refontifying the element region after changes in buffer (font-lock-ensure elem-start elem-end) (org-appear--show-invisible elem))) (defun org-appear--hide-invisible (elem) "Silently add invisible property to invisible parts of element ELEM." (let* ((elem-at-point (org-appear--parse-elem elem)) (elem-type (car elem)) (start (plist-get elem-at-point :start)) (end (plist-get elem-at-point :end)) (visible-start (plist-get elem-at-point :visible-start)) (visible-end (plist-get elem-at-point :visible-end))) (when elem-at-point (with-silent-modifications (cond ((eq elem-type 'entity) (compose-region start end (org-element-property :utf-8 elem)) (font-lock-flush start end)) ((eq elem-type 'keyword) (font-lock-flush start end)) (t (put-text-property start visible-start 'invisible 'org-link) (put-text-property visible-end end 'invisible 'org-link) (font-lock-flush start end)))) ;; Call `font-lock-ensure' after flushing to prevent `jit-lock-mode' ;; from refontifying the next element entered (font-lock-ensure start end)))) (provide 'org-appear) ;;; org-appear.el ends here