From fc83a80e2723669a4c0de0522ae0b554a254fb70 Mon Sep 17 00:00:00 2001 From: Jonathan Hodgson Date: Sat, 26 Sep 2020 14:32:30 +0100 Subject: [PATCH] Adds rplugin to git --- .../__pycache__/contacts.cpython-38.pyc | Bin 0 -> 2325 bytes rplugin/python3/deoplete/sources/contacts.py | 68 ++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 rplugin/python3/deoplete/sources/__pycache__/contacts.cpython-38.pyc create mode 100644 rplugin/python3/deoplete/sources/contacts.py diff --git a/rplugin/python3/deoplete/sources/__pycache__/contacts.cpython-38.pyc b/rplugin/python3/deoplete/sources/__pycache__/contacts.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e96a177539b414a814cbae70b627430ed8de007 GIT binary patch literal 2325 zcmZuzPjk~o6yMc9%Z}rO03A9_OPX{_Tp)(_&`yS-K%nh(ieW-}5d~Gzu5BfQlFKJsmP-fO1^K0!0W6YXqKu{{Hh}r%K3Q z$jm+#FxTLf-vD8R(U^FXk$Q&aP0wToGh?f7dp0HC6J{~{1z|R~pPQb;=snVOUV}Di zzotN&R9QCy$wL&)K4!_tU6^p#V^RV4QzREaEl5s72-6O9vw4Lu>OF`R&lzIDY}ha}U>V zgkiB27T<}qUu^R%KDfA(7CUKka~(DmlYPz5n6Vz`=m5TQ6G%>;lMyYzbV|CUAilw9 zm%<2W0kxRPtS-)MW&?GY1GK^j7*=U}RzHa1VdZ|Xo2L5@yhcCB!yXrY%#&{3^OmN3 zXAsAJXD}Qd2*lR2wL;TXwj5+!DA)I+B+7kXHT;RQz8?ngDOK%6G0zV&E)^Um_LWvwYl=xYY=UgP^iONcXK5rVzl05Dx^KsOFMO76(76(%L{wwnDwN@|f^VVLP1bHt= zS{tyZC9-(XjgnS&koVH$s}|#F2FLQ2)X2+Lm?n7;=5ixD5Ds|o0piyHLTKG^43|2z z2JdiTV*SR{pJU*o@)jyz15!{%KO`fjRkpt2o6vE*4ogbR=}9xQewo0Yxk#m7bhWHX{Rf4 z5cXD3X>;Y-rNdgYs?09Wm61XS0Pdcu@uyjkuz`fgoj8iu^eE*-614@wqpDm8|A~ll zuAELPAb76~F^?-1#FRhH#R=dhWJ$}@L?^?iz(`&70B!A!V>IZnQNmkpIfgE#w??-P zlLC+(lM*S~hJrqMWNbg!=aUQ*%dqub8(cVmKjuk(4vo+S^ftEBwPUAa6Vj(&(5LU| z!omoTp-1dj#X3aKkgH&qiFP4(ZxTnNt?Vet26@v`jUR4Zzj86c^1k0EI!eN$Uxr61`1fUDjI1$93}_vumfS3$FHR)S!PlnQ78usoZ{TU#YJTg^ zPj}i=PsJK6q3rhU>rGooF*O&eP{~rB+zNdRv%V$1^Zbl zqdZEJ%b-`L(;{62NS59Vm#2WdPa(ukHGQybk4pD`n6E zR{)9b*#HX!o*93bhh_=Law!LRwA=!K90o-WTI+{)VQJX*m_4c#R$-3~kdZxiRE554 zN4iTt+J3ZL_FrXlY`~D&ZYPN2-5}f-nEC(G3&XipDBjhTE6*+;URBnURIp}E)uHA( zQ8$B@!G%}f(%fCmDNFExi8G+?xp3_vW>TC27MgSxN4fY2<~j?N6J!~N#L*$~=4M)o zS1EPj{zKcOHb`Jayb~v{?)z`c@N3v0@ianRT8G~vjEl5^oH0CE25MHLxq#OO_ItQC zYOs>BL5y?w?xR5vmn(+g*lPM2wxrL|46JFfiUcDnK0&gAGFd$hp|3Xw9h4xsGeP71z=0&5F1Lt6n9A+XISJoCZ#yzslN$KN!M9 e9=|kmgidMQ4&5sg$F9QPo=H8sfQf6=t^WYrRYti0 literal 0 HcmV?d00001 diff --git a/rplugin/python3/deoplete/sources/contacts.py b/rplugin/python3/deoplete/sources/contacts.py new file mode 100644 index 0000000..0d76e6e --- /dev/null +++ b/rplugin/python3/deoplete/sources/contacts.py @@ -0,0 +1,68 @@ +# Modified by Jonathan Hodgson + +# Originally from https://github.com/michaeladler/deoplete-abook/blob/master/rplugin/python3/deoplete/sources/abook.py +# Original Copyright: +# Copyright (c) 2017 Filip SzymaƄski. All rights reserved. +# Use of this source code is governed by an MIT license that can be +# found in the LICENSE file. + +import configparser +import os.path +import re + +from .base import Base # pylint: disable=E0401 + + +# pylint: disable=W0201,W0613 +class Source(Base): + COLON_PATTERN = re.compile(r':\s?') + COMMA_PATTERN = re.compile(r'.+,\s?') + HEADER_PATTERN = re.compile(r'^(Bcc|Cc|From|Reply-To|To):(\s?|.+,\s?)') + + def __init__(self, vim): + super().__init__(vim) + + self.__cache = [] + + self.filetypes = ['mail'] + self.mark = '[abook]' + self.matchers = ['matcher_length', 'matcher_full_fuzzy'] + self.min_pattern_length = 0 + self.name = 'abook' + + def on_init(self, context): + self.__datafile = context['vars'].get('deoplete#sources#abook#datafile', + os.path.expanduser('~/.abook/addressbook')) + if not os.path.isfile(self.__datafile): + self.vim.err_write('[deoplete-abook] No such file: {0}\n'.format(self.__datafile)) + + def on_event(self, context): + self.__make_cache() + + def gather_candidates(self, context): + if self.HEADER_PATTERN.search(context['input']) is not None: + if not self.__cache: + self.__make_cache() + + return self.__cache + + def get_complete_position(self, context): + colon = self.COLON_PATTERN.search(context['input']) + comma = self.COMMA_PATTERN.search(context['input']) + return max(colon.end() if colon is not None else -1, + comma.end() if comma is not None else -1) + + def __make_cache(self): + addressbook = configparser.ConfigParser() + addressbook.read(self.__datafile) + for section in addressbook.sections(): + emails = addressbook.get(section, 'email', fallback=None) + if emails is not None: + name = addressbook.get(section, 'name', fallback=None) + for email in emails.split(','): + if name is not None: + email = '"{0}" <{1}>'.format(name, email) + + self.__cache.append({'word': email}) + +# vim: ts=4 et sw=4