Automaatikad

Faili .clinkplugin valikuline automation-objekt deklareerib sündmused, oleku, sätted, käsud, valmisreeglid ja otseteekohad. Igal lisandusel on püsiv ID, täpne skeemiversioon ja tõlgitud pealkirjad. Host loob nimed kujul plugin/<plugin-id>/<kind>/<id>. Pistikprogramm ei saa kasutada süsteemi ega teise pistikprogrammi nimeruumi.

Automaatikad ›

Kuidas pistikprogrammid töötavad

Paneel asendab klahvid ja toiming käivitub üks kord tekstilõigu peal. Pistikprogrammil pole klaviatuuril oma ekraani. Clink kutsub selle funktsioone kindlatel hetkedel, näiteks kui klaviatuur avaneb või kui sa sõna lõpetad, ja pistikprogramm saab uuendada tühikuklahvi või oma salvestatud olekut. Selle seaded joonistatakse rakenduses samade ehitajatega, mida kasutavad paneelid. Allpool olev WPM Spacebar on terviklik pistikprogramm.

def initial():
    return {"on": False}

def settings(state):
    return section("keys.spacebar", [
        toggle("Show typing speed", state["on"], action="toggle"),
    ], title="WPM Spacebar")

def on_action(action, value, state):
    state["on"] = value
    if value:
        claim("spacebar.text")
    else:
        release("spacebar.text")
        space_text(None)
    return state

def on_word(word, state):
    if state["on"]:
        space_text(f"{stats()['wpm']} wpm")
    return state
WPM Spacebar lisab lüliti jaotisesse Klahvid > Tühikuklahv. Kui see on sees, näitab tühikuklahv sinu praegust tippimiskiirust.

Pistikprogrammide kasutamiseks on vaja Clink Pro liikmesust. Enne hoidlast pistikprogrammi paigaldamist küsib Clink, kas lubad selle hoidla koodi, täpselt nagu paneelide ja toimingute puhul.

on_key ja on_word saavad teksti, mida sa tipid, sest nii sõnaloendur töötab. PyMini-l pole ligipääsu võrgule ega failidele, seega ei saa pistikprogramm sinu tipitud teksti interneti kaudu saata, ja mida see salvestab, jääb Clinki juurde sinu seadmesse.

Sinu esimene pistikprogramm

Kõige kiirem algus on alustusskript, mille rakendus sinu eest kirjutab. See paneb lüliti jaotisse Klahvid > Tühikuklahv ja loeb lüliti sees olles tühikuklahvil sõnu. Viis sammu, midagi pole vaja alla laadida.

  1. Ava vahekaart Pistikprogrammid, lülita pistikprogrammid üleval sisse ja puuduta uue loomiseks +.
  2. Redaktor avaneb alustusskriptiga. Loe see korra läbi: initial(), settings(), on_action(), on_open() ja on_word() ongi kõik.
  3. Lülitu eelvaatele. Lülita lüliti sisse, puuduta seejärel paar korda on_open ja on_word ning jälgi tühikuklahvi makettiat ja konsooli.
  4. Salvesta. Pistikprogramm on loendis sees ja selle lüliti asub nüüd ka jaotises Klahvid > Tühikuklahv.
  5. Ava klaviatuur ükskõik kus ja tipi. Tühikuklahv loeb kaasa.
def initial():
    return {"on": False, "words": 0}

def settings(state):
    return section("keys.spacebar", [
        toggle("Count words on the space bar", state["on"], action="toggle"),
    ], title="Word count")

def on_action(action, value, state):
    if action == "toggle":
        state["on"] = value
        if value:
            claim("spacebar.text")
        else:
            release("spacebar.text")
            space_text(None)
    return state

def on_open(state):
    state["words"] = 0
    if state["on"]:
        space_text("0 words")
    return state

def on_word(word, state):
    state["words"] += 1
    if state["on"]:
        space_text(f"{state['words']} words")
    return state
Alustusskript, nagu rakendus selle kirjutab.

Haagid

Määratle ükskõik millised neist 33 funktsioonist ja jäta välja need, mida sul vaja pole. Igaüks saab viimase argumendina väärtuse state. Need, mis millelegi reageerivad, tagastavad state'i, muudetult või muutmata. Need, mis vastavad küsimusele (elements, draw, effects, välimuse haagid, haptics, hitboxes, suggestions ja correct), tagastavad oma vastuse ja võivad sealjuures state'i kohapeal muuta.

HaakMillal see käivitub
on_automation(command, args, state)on_automation(command, args, state) käivitab lubatud kohaliku käsu olemasolevas liivakastis. See võib uuendada tühikuklahvi teksti, avaldada deklareeritud olekut või väljastada deklareeritud sündmuse. See haak ei tohi sisestada teksti, kasutada lõikelauda, muuta püsisätteid ega teha välispäringuid.
initial()Üks kord, enne kui salvestatud olekut üldse on. Tagasta sõnastik mis tahes andmetega, mida JSON suudab salvestada.
settings(state)Kui pistikprogrammi seadeid rakenduses näidatakse. Tagasta selle juhtelemendid sõlmepuuna. Klaviatuuris see kunagi ei käivitu.
on_action(action, value, state)Kui mõnda pistikprogrammi juhtelementi kasutatakse. Töötab ka on_action(action, state), ilma argumendita value.
on_open(state)Kui klaviatuur ilmub. Hea koht, et lugeda stats() või seada tühikuklahv.
on_close(state)Kui klaviatuur suletakse. Olek salvestatakse kohe pärast seda.
on_key(key, state)Iga kord, kui klahv midagi sisestab. See käivitub iga klahvivajutuse peale, nii et hoia see kiire.
on_word(word, state)Kui sõna saab valmis, olgu tühiku, soovituse või pühkimisega.
on_backspace(state)Kui vajutatakse tagasilükkeklahvi. Ei saa teksti, ainult oleku.
on_suggestion(word, state)Kui soovitust puudutatakse. word on see, mida puudutati.
on_language(code, state)Kui tippimiskeel muutub. code on uus keel, näiteks en või de.
on_field(kind, state)Kui klaviatuur ühendub väljaga. kind on default, email, url, number, phone, password või search.
on_tick(state)Kord sekundis, kuni klaviatuur on ekraanil, olenemata sellest, kas tipitakse. Haak kõige jaoks, mis peab ise muutuma: kell, taimer või kiirus, mis peaks peatumisel nulli langema.
on_swipe(direction, state)Libistus, mis algab tähe klahvilt: "left", "right", "up", "up_left" või "up_right". Libistusi loetakse ainult siis, kui libistusega tippimine on välja lülitatud. Kui haak midagi ei küsi, jääb libistus tavaliseks klahvivajutuseks; kui küsib, võetakse enne tagasi täht, millelt see algas.
elements(state)Mida see pistikprogramm kohandatud paigutusele pakub. Tagasta element(id, name, icon=, width=) kirjed või jäta haak ära.
draw(id, state)Ühe elemendi nägu sõlmepuuna. Töötab umbes kord sekundis, kuni klaviatuur on ekraanil.
effects(state)Valgusefektid, mida see pistikprogramm lehele Efektid pakub. Tagasta light_effect(...) kirjed või jäta haak ära.
key_styles(state)Klahvistiilid teemaredaktori jaoks. Tagasta key_style(...) kirjed; vaata allpool jaotist Välimused.
themes(state)Terviklikud teemad teemaredaktori vahekaardile Pistikprogrammid. Tagasta theme(...) kirjed.
popups(state)Klahvi hüpiku stiilid. Tagasta popup_style(...) kirjed.
animations(state)Animatsioonid: entrance(...), press_animation(...), letter_animation(...) ja transition(...) mis tahes segus.
backgrounds(state)Animeeritud taustad. Tagasta particles(...) kihtidest koosnevad background(...) kirjed.
layouts(state)Klaviatuuripaigutused. Tagasta layout(...) kirjed.
trails(state)Pühkimisjäljed, mida see pistikprogramm jäljevalikule pakub. Tagasta trail(...) kirjed; vaata allpool jaotist Välimused.
haptics(state)Iga klahvi haptika, sõnastikuna klahvinimedest tunnetesse. Loetakse klaviatuuri avamisel ja umbes kord sekundis.
hitboxes(state)Iga klahvi tabamusala, sõnastikuna klahvinimedest hitbox(...) väärtustesse. Loetakse samas rütmis kui haptics.
on_touch(key, x, y, state)Pärast iga puudutust: klahv, millele see läks, ja koht sellel klahvil, kuhu sõrm maandus. x ja y ulatuvad -0.5 kuni 0.5, keskel 0.
suggestions(word, state)Sõnad soovitusribale, kuni word on trükkimisel. Käivitub iga kord, kui riba rahuneb, mitte iga klahvi peale.
correct(word, fix, state)Tühik lõpetas just sõna word. Tagasta sõna, mis läheb selle asemel, False, et jätta see trükitud kujule, või None, et kehtiks klaviatuuri enda parandus.
bar_items(state)Nupud ja kettad, mida see pistikprogramm ülemisele ribale pakub. Tagasta bar_button(...) ja bar_knob(...) kirjed või jäta konks välja.
key_art(state)Graafika klahvidele, sõnastikuna klahvinimedest kujunditesse. Loetakse uuesti pärast iga sündmust, mida pistikprogramm kuuleb, nii et konksus muudetud olek jõuab klahvidele.
events(state)Sündmuste nimed, mida on_event kuulda tahab, loetakse korra pistikprogrammi laadimisel. Ilma selleta kuuleb pistikprogramm kõike peale sagedaste sündmuste.
on_event(name, info, state)Üks konks kõige jaoks, mis juhtub: open, close, word, backspace, suggestion, language, field, shift ja plane ning sagedased key, key_down, key_up, predictions ja tick, mida tuleb events(state)-is nimepidi küsida.
def on_key(key, state):
    if key == " " and setting("language") == "en":
        state["spaces"] = state.get("spaces", 0) + 1
    return state

def on_close(state):
    haptic("light")
    return state
Kaks haaki, üks lugemine ja üks paneelikäsk.

Rakendusel ja klaviatuuril on olekust üks ühine koopia. Lülita rakenduses lüliti sisse ja see on sees, kui klaviatuur järgmine kord avaneb. Kõik, mida klaviatuur loendab, on olemas, kui avad järgmine kord pistikprogrammi seaded. Klaviatuur salvestab oleku sulgemisel, mitte iga klahvi järel.

Praegune soovitus tühikuklahvil

Peamise kuvatava soovituse saad lugeda avaldisega context()["suggestion"]. Telli sündmus predictions, et saada muudatused väljal info["suggestion"]. Mõlemad vajavad ligipääsu sisestusandmetele. on_suggestion käivitub soovituse valimisel, mitte soovituste muutumisel. Kutsu space_text(value or None), et määrata klahvi tekst või taastada see, kui soovitusi pole. Tühikuklahvi vajutamise toiming ei muutu.

def initial():
    return {}

def events(state):
    return ["predictions"]

def on_open(state):
    space_text(context()["suggestion"] or None)
    return state

def on_event(name, info, state):
    if name == "predictions":
        space_text(info["suggestion"] or None)
    return state

def on_close(state):
    space_text(None)
    return state

Olek

Olek on üks sõnastik. initial() ehitab selle esimesel korral; edaspidi saab iga haak sama sõnastiku, muudab seda ja annab tagasi. See mahutab kõike, mida JSON mahutab: arve, sõnu, loendeid, pesastatud sõnastikke. Rakendus salvestab selle pärast iga kasutatud juhtelementi, klaviatuur sulgemisel, ja mõlemad loevad sama faili, nii et nad ei ole kaua eriarvamusel.

def initial():
    return {"session": 0, "total": 0, "longest": ""}

def on_open(state):
    state["session"] = 0        # starts over each time the keyboard opens
    return state

def on_word(word, state):
    state["session"] += 1
    state["total"] += 1         # survives, it is saved when the keyboard closes
    if len(word) > len(state["longest"]):
        state["longest"] = word
    return state

def settings(state):
    return vstack([
        text(f"{state['total']:,} words so far"),
        text(f"Longest: {state['longest'] or '...'}", size=13, color="gray"),
        button("Start over", "reset", style="destructive"),
    ])

def on_action(action, value, state):
    if action == "reset":
        return initial()
    return state
Seansipõhine loendur, mille on_open nullib, ja kogusumma, mis püsib.

Oleku tagastamine on harjumus, mida tasub hoida, kuid see pole rangelt nõutav: sõnastik on viide, seega töötab ka kohapeal muutmine. Tagasta teine sõnastik, nagu ülal initial(), ja sellest saab olek.

Seaded ja jaotised

settings(state) tagastab paneeliehitajatega tehtud sõlmepuu: text, toggle, slider, stepper, segmented, button, row, field ja paigutused. See ilmub pistikprogrammi lehel vahekaardil Pistikprogrammid. Kui mähid osa sellest section(anchor, children, title) sisse, ilmub see osa ka ühel Clinki enda seadete ekraanil, selle seade kõrval, millega see seotud on.

def settings(state):
    return vstack([
        text("Counts words as you type.", size=13),
        section("keys.spacebar", [
            toggle("Count on the space bar", state["on"], action="toggle"),
            stepper(state["goal"], min=10, max=500, step=10, label="Goal", key="goal"),
        ], title="Word count"),
    ])
Lüliti ja samm-muutur ilmuvad jaotises Klahvid > Tühikuklahv. Kirjeldus on näha ainult pistikprogrammi enda lehel.

Juhtelemendid, mida pistikprogramm kõige sagedamini vajab. Igaüks kirjutab oma uue väärtuse olekusse key alla või nimetab action-i on_action jaoks, või mõlemat. Täielik ehitajate loend koos paigutustega on paneelide lehel.

EhitajaMida see joonistab
toggle(label, on=False, key="", action="")Lüliti. key kirjutab sellesse olekuvõtmesse True või False.
slider(value, min=0, max=100, step=1, label="", key="", action="")Liugur min ja max vahel. key kirjutab asendi sellesse olekuvõtmesse.
stepper(value, min=0, max=100, step=1, label="", key="", action="")Väärtus, mille kõrval on − ja +, vahemikus min kuni max.
segmented(options, value=None, key="", action="")Üks valik loendist. key kirjutab valitud variandi sellesse olekuvõtmesse.
field(key, placeholder="", action="", submit="")Tekstikast, mis on seotud state[key]-ga. Puudutus suunab klahvid sellesse võtmesse; submit nimetab käsitleja, mille käivitab Enter.
button(label, action="", value=None, insert="", set=None, style="plain", icon="", enabled=True)Nupp. insert kirjutab oma teksti sinna, kuhu parajasti kirjutad, set liidab võtmed olekusse ja action nimetab käsitleja on_action jaoks. style võtab plain, primary, tinted, quiet või destructive.
row(title, subtitle="", detail="", icon="", action="", value=None, insert="")Puudutatav rida: pealkiri, teine rida, ikoon ja detail paremal.
text(s, size=17, weight="regular", color="", align="leading", lines=0, mono=False)Tekstirida. weight võtab regular, medium, semibold, bold, heavy, light või thin; align võtab leading, center või trailing; lines piirab ridade arvu; color võtab värvinime või #RRGGBB.
Paneelid ›

Kuhu jaotised lähevad

Ankur on Clinki enda seadeteekraani kaardi ID. Nimeta see section()-is ja pistikprogrammi juhtelemendid joonistatakse otse selle kaardi alla, pistikprogrammi nimi nende kohal. Lihtsaim viis ankru leidmiseks: ava rakenduses Rohkem > Arendaja ja lülita sisse Näita ID-sid. Iga kaart saab väikese infomärgi, mis nimetab tema ID ja kopeerib selle puudutusel; lehed näitavad enda oma tiitliribal.

Kõik ankrud, mida jaotis võib nimetada

  • analytics.heatmap
  • analytics.privacy
  • analytics.trends
  • analytics.typing-test
  • automations.rules
  • gestures.accents
  • gestures.cursor
  • gestures.delete
  • gestures.general
  • gestures.suggestions
  • gestures.swipe
  • haptics.feel
  • keys.adaptive
  • keys.faces
  • keys.hitboxes
  • keys.hitmap
  • keys.long-press
  • keys.numberrow
  • keys.onehanded
  • keys.roundness
  • keys.size
  • keys.spacebar
  • keys.spacing
  • keys.split
  • languages.app
  • languages.custom
  • languages.manage
  • languages.packs
  • languages.switch
  • languages.typing
  • layout.arrange
  • layout.arrangement
  • layout.build
  • layout.longpress
  • layout.presets
  • layout.topbar
  • motion.delete
  • motion.entrance
  • motion.glow
  • motion.key-press
  • motion.key-response
  • motion.letters
  • motion.space-response
  • motion.transition
  • popups.style
  • sound.keysounds
  • text.automation
  • text.content
  • text.corrections
  • text.history
  • text.punctuation
  • text.speed
  • text.suggestions
  • text.symbols
  • themes.background
  • themes.canvas
  • themes.theme

keys.spacebar on oma koht tühikuklahvi ekraanil endal. Jaotis ankruga, mida selles loendis pole, kuvatakse ikkagi pistikprogrammi lehel, seega maksab kirjaviga sulle ühe kaardi, mitte pistikprogrammi.

Ülevõtmised

Kui pistikprogramm juhib mõnda Clinki enda seadet, peaks inimene seda nägema ja need kaks ei tohiks vaielda. claim(control) ütleb, et pistikprogramm omab seda: rakendus nimetab pistikprogrammi selle seade kaardil ja tühikuklahvi teksti väli on lukus, kuni see on hõivatud. release(control) annab selle tagasi. Võta üle selles on_action-is, mis su funktsiooni sisse lülitab, vabasta selles, mis välja lülitab, ja sea väärtus samal ajal tagasi None-iks või endiseks. Loendis välja lülitatud pistikprogramm vabastab kõik, mida see hoidis.

def on_action(action, value, state):
    if action == "toggle":
        state["on"] = value
        if value:
            claim("spacebar.text")
            space_text("...")
        else:
            release("spacebar.text")
            space_text(None)      # hand the person's own text back
    return state
Paar, mis on igal ülevõtval pistikprogrammil: võta sisse lülitades, anna tagasi välja lülitades.

Kaks pistikprogrammi võivad sama juhtelemendi üle võtta; rakendus nimetab selle, kes tegi seda viimasena. Ülevõtmised salvestab rakendus, seega võta üle on_action-is, mis seal töötab. Klaviatuuri sees tehtud ülevõtmist ei jäeta meelde.

Käsud ja lugemised

Pistikprogrammid saavad kasutada kõiki paneelikäske ning lisaks kuut oma käsku ja kahte lugemist. Käsud pannakse järjekorda ja rakendatakse pärast seda, kui sinu funktsioon on naasnud, nii et klaviatuuril ei muutu midagi poole kutse pealt. Lugemised tagastavad väärtused sellistena, nagu need olid vahetult enne kutset.

KutseMida see teeb
space_text(text)Näitab tühikuklahvil kirja, kuni 32 märki. Anna None, et minna tagasi kasutaja enda tühikuklahvi teksti juurde.
space_language_text(text)Kirjutab üle keelemärgi tühikuklahvi nurgas, omaette ja ka siis, kui algne märk on välja lülitatud. Üks rida, kuni 12 märki; "" peidab selle ja None annab algse teksti tagasi.
space_language_flag(language)Paneb sellele märgile lipu keele id järgi, näiteks en_GB, kaasapandud lipugraafikast. None annab tavapärase käitumise tagasi.
space_language_emoji(language)Sama märk piirkonna lipuemotikonina. Kolm märgikäsku jagavad üht kohta, nii et ühe märgipistikprogrammi sisselülitamine lülitab teised välja.
set_setting(name, value)Muudab ühte Clinki seadet nime järgi õiget tüüpi väärtuseks: tõeväärtus, lubatud vahemikus arv, üks selle valikutest või tekst. Tundmatu nimi tõstab KeyError'i. Vale tüüpi või vahemikust väljas väärtust ei rakendata ning redaktori konsool ütleb, mida seade ootab.
claim(control)Võtab üle ühe Clinki enda seadetest. Selle kaart rakenduses nimetab pistikprogrammi, kellel see on.
release(control)Annab seade tagasi. Kui pistikprogramm välja lülitada, vabastatakse kõik, mis see üle võttis.
suggest(words)Paneb soovitusriba algusesse kuni kümme sinu enda sõna. Need jäävad, kuni ühte puudutatakse, vajutatakse kustutamist või väli vahetub, ning suggest([]) eemaldab need varem. Puudutus kirjutab sõna.
banner(text)Näitab klaviatuuril hetkeks lühikest teadet. Vihjeks, mitte vestluseks.
press(key)Käivitab ühe klaviatuuri enda klahvidest, nagu seda oleks puudutatud: "space" või "delete". Iga muu nimi tõstab ValueError'i.
pick_suggestion(slot)Valib soovituse riba osast "left", "center" või "right", täpselt nagu selle puudutamine. Keritud riba puhul loeb see, mis on ekraanil näha. on_swipe sees valitakse ribalt sellisena, nagu see oli sõrme maandumise hetkel.
stats()Tagastab sõnastiku väljadega wpm, peak_wpm, keystrokes, words ja streak. wpm uueneb reaalajas, kuni pistikprogrammid on sees. Kogusummad tulevad Statistikast ja lakkavad uuenemast, kui Statistika on välja lülitatud.
setting(name)Loeb nime järgi ühe allpool loetletud seadetest. Iga muu nimi tõstatab KeyError-i.
context()Sama hetktõmmis, mida loeb paneel, pistikprogrammi jaoks lisaks suggestion, shift (off, on või locked) ja plane. Dokumendi võtmed täidab tippimisandmete õigus; shift on loetav ka ilma selleta.
VõtiMida see sisaldab
stats()["wpm"]Sõnu minutis viimaste sekundite jooksul, loetuna märkidest, mis väljale jõuavad. Number ilmub sekund või kaks pärast alustamist, langeb pausi ajal ja jõuab nulli, kui lõpetad. Kustutamine ei lisa sellele kunagi.
stats()["peak_wpm"]Parim kiirus, mille Analüütika on kunagi salvestanud.
stats()["keystrokes"]Vajutatud klahvid kokku, nagu Analüütika neid loeb.
stats()["words"]Kinnitatud sõnad kokku.
stats()["streak"]Järjestikused tippimispäevad, mis lõpevad tänasega.

setting(name) ja set_setting(name, value) jagavad üht nimede loendit ja claim(control) võtab samuti ükskõik millise neist. Tõeväärtusi loetakse kui True või False, arve kui arve, valikuid kui nende id. Loend on meelega pikk: pistikprogramm võib reageerida peaaegu kõigele, mida inimene rakenduses seada saab, või seda juhtida.

Nimed, mida setting() aktsepteerib

  • analytics
  • emoji.skin_tone
  • emoji.trailing_space
  • gestures.cursor
  • gestures.cursor_style
  • gestures.highlight_shift
  • gestures.plane_slide
  • gestures.predictive_flick
  • gestures.quick_accent
  • gestures.swipe
  • gestures.swipe_delete
  • gestures.swipe_multi_word
  • gestures.swipe_space_commit
  • gestures.swipe_two_thumb
  • gestures.trail
  • gestures.trail_style
  • gestures.trail_width
  • haptics.enabled
  • haptics.intensity
  • haptics.sharpness
  • keys.accents
  • keys.glyph_scale
  • keys.height
  • keys.long_press_hint
  • keys.popup_style
  • keys.popups
  • keys.radius
  • keys.row_spacing
  • keys.spacing
  • keys.uppercase
  • keys.width
  • language
  • language.bar_key
  • language.bar_key_style
  • language.mode
  • layout
  • layout.dismiss_shortcut
  • layout.number_row
  • layout.number_row_scale
  • layout.one_handed
  • layout.one_handed_shortcut
  • layout.one_handed_side
  • layout.one_handed_width
  • layout.split
  • layout.split_gap
  • layout.split_number_row
  • layout.split_shortcut
  • layout.split_space_bar
  • pet.corner
  • pet.enabled
  • pet.species
  • settings.accentHoldDelay
  • settings.accentMoveCancel
  • settings.activateWithIcon
  • settings.adaptiveGrow
  • settings.adaptiveHitboxes
  • settings.adaptivePredictAtWordStart
  • settings.adaptivePredictionWeight
  • settings.adaptiveShrink
  • settings.adaptiveSpace
  • settings.aiAutocorrect
  • settings.aiCompletions
  • settings.aiExtensionEnabled
  • settings.aiSearch
  • settings.aiToolsColorOverrides
  • settings.aiToolsDiffStyle
  • settings.aiToolsDisabled
  • settings.aiToolsLayoutStyle
  • settings.aiToolsOrder
  • settings.aiToolsPromptOverrides
  • settings.aiTranslate
  • settings.alternatingSplit
  • settings.arabicIndicNumerals
  • settings.backgroundEffectOverride
  • settings.clipboardCloseOnPaste
  • settings.clipboardDeleteOnPaste
  • settings.clipboardIgnoreImages
  • settings.clipboardIgnorePinsOnDelete
  • settings.clipboardStyle
  • settings.cursorActivationHaptic
  • settings.cursorLineStride
  • settings.cursorStepHaptic
  • settings.customPanelsStandalone
  • settings.customPetID
  • settings.deleteWordSwipeEngage
  • settings.deleteWordSwipeStride
  • settings.dictationAssist
  • settings.dictationAssistCustom
  • settings.dictationAssistLevel
  • settings.dictationColorScheme
  • settings.dictationGlassCapsule
  • settings.dictationSmartActions
  • settings.dictationStyle
  • settings.dictationVisualStyle
  • settings.dragUpThreshold
  • settings.emojiCategoryOrder
  • settings.emojiCellSpacing
  • settings.emojiColumnCount
  • settings.emojiCrossAxisSwitchesTab
  • settings.emojiCustomSets
  • settings.emojiGlyphScale
  • settings.emojiHiddenCategories
  • settings.emojiHiddenFromPanels
  • settings.emojiRecentsCap
  • settings.emojiRecentsSort
  • settings.emojiRememberCategory
  • settings.emojiRowCount
  • settings.emojiScrollDirection
  • settings.emojiSearchSlot
  • settings.emojiShowABCKey
  • settings.emojiShowBackspaceKey
  • settings.emojiStartCategoryID
  • settings.emojiTabBarSlot
  • settings.emojiTabIconStyle
  • settings.emojiToneHoldDelay
  • settings.extensionOrder
  • settings.extraTopBars
  • settings.formFreeCorners
  • settings.formLayoutEnabled
  • settings.gifShareAsLink
  • settings.glassPerRowMerge
  • settings.glassReleaseResponse
  • settings.gridSwitchAnimation
  • settings.gridSwitchDuration
  • settings.handwritingInkColor
  • settings.handwritingInkGlow
  • settings.handwritingInkStyle
  • settings.handwritingInkWidth
  • settings.hitboxScale
  • settings.iconPickerStyle
  • settings.keyBloomScale
  • settings.keyLighting
  • settings.keyPressGlow
  • settings.keyPressInstant
  • settings.keyPressLinger
  • settings.keySpringDamping
  • settings.keySpringResponse
  • settings.keyboardBottomPadding
  • settings.keyboardLanguages
  • settings.keyboardTopPadding
  • settings.longPressGlyphScale
  • settings.minPressVisible
  • settings.notepadBrowseStyle
  • settings.notepadMode
  • settings.numberRowFontSize
  • settings.numberRowLeadingKeys
  • settings.numberRowTrailingKeys
  • settings.oneHandedCustomKeys
  • settings.oneHandedExtraKeys
  • settings.panelButtonHitboxScale
  • settings.persistentLeadingKeys
  • settings.persistentTrailingKeys
  • settings.petIdleMotion
  • settings.petScale
  • settings.pinyinFuzzyEnabled
  • settings.pluginLooks
  • settings.popupSpringDamping
  • settings.popupSpringResponse
  • settings.predictiveFlickSuggestionPosition
  • settings.predictiveFlickSuggestionsSeparate
  • settings.reduceEffectsOnLowPower
  • settings.repeatAccelStep
  • settings.repeatHoldDelay
  • settings.repeatInitialInterval
  • settings.repeatMinInterval
  • settings.replacementsLayout
  • settings.rowInsets
  • settings.secondaryNeuralModelsEnabled
  • settings.separateActivation
  • settings.separateLanguageLayouts
  • settings.showCaptureOverlay
  • settings.showCorrectionField
  • settings.showHitboxOverlay
  • settings.showIconsBeforeTyping
  • settings.showRecentEmoji
  • settings.showTouchHeatmap
  • settings.showTouchSurfaceBounds
  • settings.showTouchTelemetryOverlay
  • settings.slideUpPickerStyle
  • settings.solidPopupOpacity
  • settings.soundVoice
  • settings.spaceBloomScale
  • settings.spaceCursorActivationDelay
  • settings.spaceCursorDragScale
  • settings.spaceCursorStride
  • settings.spaceLeanMultiplier
  • settings.spaceSpringDamping
  • settings.spaceSpringResponse
  • settings.spatialBiasEnabled
  • settings.spatialBiasGain
  • settings.splitIndices
  • settings.splitOtherPlanes
  • settings.stickerGridSnap
  • settings.stickerPlacements
  • settings.suggestionDebounceDelay
  • settings.suggestionHitboxScale
  • settings.suggestionSegmentLiquidGlass
  • settings.suggestionSegmentStyle
  • settings.suggestionSegmentsFollowTheme
  • settings.suggestionSeparatorColor
  • settings.suggestionSeparatorStyle
  • settings.suggestionTopPadding
  • settings.swipeKeyMorph
  • settings.swipeMorphRadius
  • settings.swipeMorphStrength
  • settings.swipeTrailEndWidth
  • settings.swipeTrailMaxLength
  • settings.swipeTrailStartWidth
  • settings.swipeTrailTrim
  • settings.toolsButtonStyle
  • settings.toolsHiddenFromPanels
  • settings.topBarItems
  • settings.topBarOrder
  • settings.translateLanguageOrder
  • settings.translateLanguagesDisabled
  • settings.translateStyle
  • settings.translateTone
  • settings.vietnameseInputMethod
  • sound.enabled
  • sound.pack
  • sound.volume
  • spacebar.corner
  • spacebar.language_code
  • spacebar.size
  • spacebar.text
  • stickers.enabled
  • text.arithmetic
  • text.auto_capitalize
  • text.auto_punctuation
  • text.autocorrect
  • text.autocorrect_everywhere
  • text.contacts
  • text.conversions
  • text.double_space_period
  • text.learning
  • text.punctuation_spacing
  • text.return_to_letters
  • text.revert_on_delete
  • text.smart_quotes
  • text.suggestions
  • text.suggestions_animation
  • text.suggestions_height
  • text.suggestions_scroll
  • text.suggestions_style
  • theme
  • theme.background
  • theme.dark
  • theme.delete_glyph
  • theme.entrance
  • theme.glyph_press
  • theme.light
  • theme.match_system
  • theme.press_style
  • theme.reactive_background
  • tools.calculator
  • tools.cling
  • tools.clipboard
  • tools.conversion
  • tools.dictation
  • tools.dictionary
  • tools.emoji
  • tools.gif
  • tools.handwriting
  • tools.layout_switcher
  • tools.notepad
  • tools.plugin_switcher
  • tools.profiles
  • tools.replacements
  • tools.textfx
  • tools.theme_switcher
  • tools.translate

Käsud

  • insert()
  • backspace()
  • delete_word()
  • replace()
  • move_cursor()
  • copy()
  • close()
  • haptic()
  • toast()

Nagu paneeli view(), peaks ka settings() ainult juhtelemente kirjeldama. Sealt kutsutud käske eiratakse ja need logitakse konsooli.

Näited

Viis väikest pistikprogrammi, igaüks täielik. Kleebi üks uude pistikprogrammi, salvesta ja see töötab.

def initial():
    return {"on": True}

def settings(state):
    return section("keys.spacebar", [
        toggle("Language on the space bar", state["on"], action="toggle"),
    ], title="Language badge")

def on_action(action, value, state):
    if action != "toggle":
        return state
    state["on"] = value
    if value:
        claim("spacebar.text")
        space_text(setting("language").upper())
    else:
        release("spacebar.text")
        space_text(None)
    return state

def on_open(state):
    if state["on"]:
        space_text(setting("language").upper())
    return state

def on_language(code, state):
    if state["on"]:
        space_text(code.upper())
    return state
Keelemärk: tippimiskeel tühikuklahvil, uuendatakse kohe, kui see muutub.
SHORTCUTS = {"omw": "on my way", "brb": "be right back", "ty": "thank you"}

def on_key(key, state):
    if key != " ":
        return state
    words = context()["before"].split()
    if words and words[-1] in SHORTCUTS:
        # the space is already in the text, so it goes too and comes back after
        replace(len(words[-1]) + 1, SHORTCUTS[words[-1]] + " ")
    return state
Otseteed: tipi omw ja tühik, saad on my way. on_key näeb tühikut pärast selle tippimist, seega astub asendus sellest üle.
def initial():
    return {"goal": 200, "count": 0}

def settings(state):
    return vstack([
        stepper(state["goal"], min=50, max=2000, step=50, label="Words per session", key="goal"),
        progress(state["count"], total=state["goal"], label=f"{state['count']} of {state['goal']}"),
    ])

def on_open(state):
    state["count"] = 0
    return state

def on_word(word, state):
    state["count"] += 1
    if state["count"] == state["goal"]:
        haptic("medium")
        banner("Goal reached")
    return state
Sõnade eesmärk: samm-muutur pistikprogrammi lehel, edenemisriba ning vibratsioon ja bänner, kui seanss selleni jõuab.
def initial():
    return {"muted": False, "was_on": True}

def on_field(kind, state):
    # a password or a number field is not a place for key sounds
    quiet = kind in ("password", "number", "phone")
    if quiet and not state["muted"]:
        state["was_on"] = setting("sound.enabled")
        state["muted"] = True
        set_setting("sound.enabled", False)
    elif not quiet and state["muted"]:
        state["muted"] = False
        if state["was_on"]:
            set_setting("sound.enabled", True)
    return state
Vaiksed väljad: klahvihelid lülituvad parooli- või numbriväljas välja ja tulevad pärast tagasi, kasutades on_field, setting() ja set_setting().
NAMES = ["sam", "ana", "team"]

def on_key(key, state):
    typing = context()["before"].split(" ")[-1]
    if typing.startswith("@"):
        start = typing[1:].lower()
        suggest([n for n in NAMES if n.startswith(start)])
        state["showing"] = True
    elif state.get("showing"):
        suggest([])                 # the mention is over, give the bar back
        state["showing"] = False
    return state
Mainimised: @ tippimine paneb su enda nimed soovitusribale.
def on_swipe(direction, state):
    if direction == "left":
        delete_word()
    elif direction == "right":
        press("space")              # the space bar's own path, so it autocorrects
    elif direction == "up":
        pick_suggestion("center")
    elif direction == "up_left":
        pick_suggestion("left")
    elif direction == "up_right":
        pick_suggestion("right")
    return state
Fleksy stiilis libistused, pistikprogrammi Flick Gestures tuum: vasakule kustutab sõna, paremale lisab tühiku, üles valib soovituse. Libistused jõuavad kohale ainult siis, kui libistusega tippimine on välja lülitatud.

Elemendid paigutuses

Kohandatud paigutus koosneb klahvidest ja elementidest: hiljutiste emojide riba, numbririda, kursoripadi. Pistikprogramm võib lisada omi. elements(state) ütleb, mida ta pakub, ja draw(id, state) joonistab ühe, nii et klahv võib näidata kõike, mida pistikprogramm oskab arvutada: kirjutamiskiiruse graafikut, kella, taimerit või oma aku näitu.

Kaks haaki ehitavad ühe. elements(state) loetleb, mida sa pakud, ühe kirje elemendi kohta, ja rakendus loeb seda paigutuse redaktori paleti jaoks. draw(id, state) saab ühe neist ID-dest ja tagastab, mida joonistada. Pistikprogramm võib pakkuda mitut; draw'lt küsitakse iga kohta eraldi.

KutseMida see teeb
element(id, name, icon="", width=2)Üks pakutav element. width on klahvilaiustes, nagu paigutus neid loeb, ja icon on SF Symbol, mida redaktor oma paletil näitab.
sparkline(values, min=None, max=None, fill=False)Joon läbi arvude jada, mis täidab talle antud ruumi. Jäta min ja max ära ning see sobitub oma väärtustega. Seda saab joonistada ainult pistikprogramm ja see on tehtud klahvi jaoks.
POINTS = 30

def initial():
    return {"history": []}

def elements(state):
    return [element("sparkline", "WPM sparkline", icon="waveform.path.ecg", width=3)]

def on_tick(state):
    history = state["history"]
    history.append(stats()["wpm"])
    state["history"] = history[-POINTS:]
    return state

def draw(id, state):
    rate = state["history"][-1] if state["history"] else 0
    return hstack([
        sparkline(state["history"], min=0, max=max(60, max(state["history"] or [0])), fill=True),
        text(f"{rate}", size=12, weight="semibold"),
    ], spacing=5, align="center")
Pistikprogramm WPM Sparkline tervikuna: see pakub üht elementi ja joonistab sellele su kiiruse viimased kolmkümmend sekundit.

Nägu on sõlmepuu nagu seadete lehtki, aga klahv pole seadete leht: kasutatakse ainult joonistavaid sõlmi ja kõik puudutatav jäetakse vahele. Klahv kuulub juba paigutusele, nii et sinna sisse nuppu ei mahu.

MIDA NÄGU SAAB JOONISTADA

  • sparkline
  • text
  • badge
  • icon
  • progress
  • hstack
  • vstack
  • spacer
  • divider

Mõõda see klahvi järgi. width on klahvilaiustes: 1 on täht ja 3 umbes kolmandik reast, ning inimene saab seda hiljem muuta. Tekst saab ühe rea ja kahaneb, et mahtuda; värvid järgivad vaikimisi klahvi enda teksti värvi, nii et element sobib ümbritsevate klahvidega, kui sa teist ei palu. Sparkline hoiab viimased 120 punkti, rohkem kui klahv näidata jõuab.

import time

def elements(state):
    return [element("clock", "Clock", icon="clock", width=2)]

def draw(id, state):
    return text(time.format("HH:mm"), size=15, weight="semibold")
Kell klahvil: ei mingit olekut ega haake, lihtsalt kellaaeg iga küsimise peale. Elemendid joonistuvad ise umbes kord sekundis uuesti.
GOAL = 200

def initial():
    return {"words": 0}

def elements(state):
    return [element("goal", "Word goal", icon="target", width=2)]

def on_open(state):
    state["words"] = 0
    return state

def on_word(word, state):
    state["words"] += 1
    return state

def draw(id, state):
    return vstack([
        text(f"{state['words']}/{GOAL}", size=11),
        progress(state["words"], total=GOAL),
    ], spacing=2)
Sessiooni sõnaeesmärk, mida loeb on_word ja mis joonistatakse ribana. Haagid hoiavad olekut, draw ainult loeb seda.

Elemendid elavad kohandatud paigutustes, nii et esmalt tuleb paigutus teha. Eelseaded neid hoida ei saa: eelseade haarutamine omaenda paigutuseks on esimene asi, mida redaktor pakub.

  1. Paigalda pistikprogramm ja lülita see sisse. Selle elemendid ilmuvad kohe.
  2. Ava Paigutus, loo või haaruta kohandatud paigutus ja mine jaotisse Korralda.
  3. Puuduta Element, vali ribalt pistikprogrammi element ja määra selle laius.

Redaktori eelvaade joonistab kõik elemendid, mida skript pakub, umbes selle klahvi suuruses, kuhu need lähevad, tühikuklahvi makett selle kohal. Salvesta ja paiguta kord ning klaviatuur joonistab sedasama.

Element näitab ainult seda, mida pistikprogramm joonistab: puudutus ei tee midagi, sest klahv kuulub juba paigutusele. Paigutus hoiab elemendi alles ka siis, kui pistikprogramm on väljas või eemaldatud, ja klahv täitub uuesti, kui see naaseb.

Nupud ja kettad ülemisel ribal

Klahvide kohal olevat riba pannakse kokku jaotises Paigutus > Ülemine riba ja pistikprogramm võib sellele oma juhtelemendid pakkuda. bar_items(state) tagastab need: bar_button(...) on puudutamiseks, bar_knob(...) keeramiseks. Loend loetakse klaviatuuri avamisel ja uuesti pärast iga puudutust, nii et element võib pistikprogrammi olekuga tulla ja minna.

KutseMida see teeb
bar_items(state)Kõik, mida see pistikprogramm ribale pakub, loendina. id peab olema kordumatu ainult pistikprogrammi sees; riba hoiab seda pistikprogrammi enda id kõrval. Korduva id puhul jääb esimene ja element, mida konks enam ei tagasta, jääb joonistamata.
bar_button(id, name, icon="", title="")Nupp. name on see, mida redaktor loetleb ja mida VoiceOver ette loeb. icon on SF Symbol ja title kuni 12 tähemärki silti selle kõrval: ikooniga ja tühja title'iga jääb ikoon üksi, ikoonita jääb tekst üksi. Nupul pole väärtust ega vahemikku. Puudutus kutsub välja on_action(id, None, state) ja kõik, mida nupp teeb, sünnib seal.
bar_knob(id, name, icon="", min=0, max=1, step=0, value=0, setting=None, art=None, rotor=None)Ketas. min ja max on selle vahemik, step paneb selle astmetesse, kui on nullist suurem, ja value ütleb, kust alustatakse. setting= seob selle hoopis rakenduse enda arvjuhtelemendiga, mis annab siis nii vahemiku kui ka asendi. art= ja rotor= joonistavad selle Pythonis.
def initial():
    return {"width": 2.0}

def bar_items(state):
    return [
        bar_button("sig", "Sign off", icon="signature", title="Sign off"),
        bar_knob("volume", "Key volume", icon="speaker.wave.2", setting="sound.volume"),
        bar_knob("width", "Trail width", icon="scribble", min=1, max=6, step=0.5, value=state["width"]),
    ]

def on_action(action, value, state):
    if action == "sig":
        insert(" sent from Clink")
    elif action == "width":
        state["width"] = value
    return state
Nupp ja kaks ketast, üks neist klahvide helitugevuse küljes

Mõlemad tulevad tagasi konksu on_action(action, value, state) kaudu, elemendi id järgi, nii et pistikprogrammi ribaelemendid ja selle sätted jagavad üht konksu. Puudutus saadab None. Ketas saadab oma väärtuse igal astmel, kuni sõrm on all, ja veel korra lahtilaskmisel, nii et pistikprogramm võib liikumist jälgida või oodata viimast väärtust.

setting=-iga ketas keerab sätet, mis rakendusel juba olemas on; nimi tuleb ülalt jaotise Käsud ja lugemised loendist, näiteks sound.volume või haptics.intensity. Nimi, mida rakendus ei tunne, annab konsoolis KeyError-i. Vahemik ja algasend tulevad sellest juhtelemendist, klaviatuuri enda koopia muutub juba lohistades, nii et järgmine klahvivajutus on juba uuel tasemel, ja väärtus salvestatakse lahtilaskmisel. Helitugevuse või haptika ketas, mis keeratakse nullist üles, lülitab heli või haptika lohistamise ajaks tagasi sisse, et astmeid oleks üles liikudes kuulda ja tunda; selle lüliti salvestab pistikprogramm ise, kutsudes on_action-is välja set_setting.

Ketast saab joonistada Pythonis. art= on osa, mis paigal püsib, raam või korpus, ja rotor= on pöörlev esikülg, miinimumis -135 kraadi ja maksimumis +135 kraadi. Mõlemad võtavad samu kujundeid, värve, üleminekuid ja varje nagu klahvigraafika, kuni kuusteist kujundit kummaski, ja unit="key" skaleerib koordinaadid ruudukujulisele numbrilauale, kus negatiivse y-ga osuti näitab üles. Joonistus saab riba tekstivärvi nimega "text" ja teema rõhuvärvi nimega "accent". Kui jätad mõlemad välja, on ketas rõngas ja ikoon selle sees; redaktoris saab ribal olevale kettale valida ka mis tahes sisseehitatud viimistluse.

Ribale ei jõua miski iseenesest. Element pannakse sinna käsitsi, täpselt nagu menüü ja soovitused.

  1. Paigalda pistikprogramm ja lülita see sisse. Selle ribaelemendid ilmuvad kohe.
  2. Ava Paigutus > Ülemine riba.
  3. Lisa pistikprogrammi nupp või ketas ja lohista see oma kohale. Kettale saab lisaks valida viimistluse.

Ehitajad jätavad võtmesõna, mida nad ei tunne, vahele ilma veateateta. setting=, min=, max=, step=, value=, art= ja rotor= kuuluvad ainult bar_knob-ile, nii et bar_button, millele mõni neist antakse, ehitatakse ikka lihtsaks nupuks ja midagi ei öelda: nupu töö käib on_action-is. Teistpidi kuulub title= nupule ja ketas jätab selle vahele.

Valgusefektid

Pistikprogramm saab lisada oma klahvivalgustuse. effects(state) tagastab light_effect(...) kirjed ja igaüks neist ilmub rakenduses jaotisse Efektid > Pistikprogrammidest, sisseehitatud stiilide ja inimeste enda ehitatud efektide kõrvale. Efekt on andmed, mitte joonistus: kihtide virn, mida klaviatuur ise animeerib. Skriptis ei jookse seega midagi iga kaadri kohta, ja klahvipinnad, tähed, kuma, vajutuse sähvatus ja jõudeolekus uinumine töötavad nagu sisseehitatud stiilidel.

KutseMida see teeb
light_effect(id, name, layers=[...], colors=[], icon="")Üks efekt. id peab olema unikaalne ainult pistikprogrammi sees. layers on light_layer(...) loend, rakendatakse ülevalt alla. colors on kuni kaheksa "#rrggbb" stringi, mida värv ringiratast läbib; ilma selleta järgib efekt inimese värvi seadet.
light_layer(pattern, ...)Üks kiht: muster allolevast loendist. Kõik märksõnad on valikulised.
COLORS = ["#00e5ff", "#7c4dff", "#ff4081"]

def effects(state):
    return [
        light_effect("tide", "Tide", colors=COLORS, layers=[
            light_layer("solid", low=0.2, high=0.2),
            light_layer("wave", moves="both", speed=0.8, size=1.5,
                        direction="up"),
        ]),
    ]
Ühtlane alus, mille peal liigub aeglane laine läbi kolme värvi. Laine liidab oma valguse alusele ja liigutab minnes värvi.

Mustrid

  • solid
  • pulse
  • wave
  • gradient
  • twinkle
  • sweep
  • rain
  • flicker
  • checker
VõtiMida see teeb
moves="light"Mida muster muudab: "light" heleduse jaoks, "color" või "both".
mix="add"Kuidas selle heledus ülemiste kihtidega kokku saab: "add", "max" jätab heledama või "multiply" tumendab neid nagu mask.
shape="smooth"pulse, wave ja gradient tõus ja langus: "smooth", "ramp", "step" või "spike".
direction="right"Mis suunas wave, gradient, sweep ja rain liiguvad: "right", "left", "down", "up" või "out" keskelt väljapoole.
speed=10 kuni 4. Väärtusega 0 seisab muster paigal.
size=10,25 kuni 4: mitu korda muster üle klaviatuuri kordub. twinkle puhul määrab see, mitu klahvi põleb, sweep puhul saba pikkuse.
low=0, high=1Heledus, mille vahel muster liigub, kumbki 0 kuni 1. Kui low on kõrgem kui high, pöördub muster ümber.
color_span=1, color_offset=0Kui kaugele muster värvides liigub ja kust see algab, kumbki 0 kuni 1.
def effects(state):
    return [
        light_effect("scanner", "Scanner", layers=[
            light_layer("wave", moves="color", speed=0.3),
            light_layer("sweep", mix="multiply", speed=1.2, size=1.5),
        ]),
    ]
sweep maskina. Esimene kiht liigutab ainult värvi ja sweep otsustab, millised klahvid põlevad. Ilma colors-ita järgib see värvi seadet, nii et Spekter teeb sellest vikerkaare.

Efekti valimine kopeerib selle inimese seadetesse, nii et see töötab edasi ka välja lülitatud pistikprogrammiga. Kui pistikprogramm on sees ja mõni selle efekt töötab, loeb klaviatuur effects(state) avamisel ja seejärel umbes kord sekundis uuesti ning võtab üle, mis muutus. Nii järgib efekt olekut, kellaaega või stats() väärtusi.

def effects(state):
    # Rounded, so the effect only changes when the pace really does.
    tempo = round(0.3 + min(stats()["wpm"], 120) / 40, 1)
    return [
        light_effect("tempo", "Tempo", colors=["#ff3d7f", "#ffb000"], layers=[
            light_layer("wave", moves="both", speed=tempo, low=0.15),
        ]),
    ]
Tempo pistikprogrammist Light Show: laine, mis kiireneb, mida kiiremini sa trükid. Kiht saab kiirust muuta, ilma et muster hüppaks.

Redaktori nupp effects näitab, mida skript pakub. Et efekti liikumas näha, salvesta pistikprogramm, vali efekt jaotises Efektid > Pistikprogrammidest ja vaata selle ekraani ülaosas olevat klaviatuuri.

Ümarda kõik, mis rabeleb, näiteks trükkimiskiirus. Efekt, mis tuleb igal sekundil erinevana tagasi, vahetatakse igal sekundil asjata välja. Tundmatu muster või märksõna on redaktori konsoolis ValueError ja kihtideta efekt jäetakse välja.

Välimused

Seitse haaki pakuvad äpile valikuid: key_styles, themes, popups, animations, backgrounds, trails ja layouts. Igaüks tagastab allolevate väljakutsetega ehitatud kirjeid ning need ilmuvad jaotisse Pistikprogrammidest sisseehitatud valikute kõrvale. Erand on teemad: need saavad teemaredaktoris oma vahekaardi Pistikprogrammid. Välimus koosneb arvudest ja sõnadest, mitte joonistuskoodist, nii et skriptis ei käivitu midagi iga kaadri kohta. Valimine kopeerib selle inimese seadetesse, nii et see töötab ka välja lülitatud pistikprogrammiga, ja hiljem sisseehitatud valiku tegemine paneb selle kõrvale.

KutseMida see teeb
key_style(id, name, material=, variant=, shape=, shadow=, cap=cap(...))Klahvistiil, mida rakendatakse teemaredaktoris avatud teemale selle kaardilt Stiil. Muutuvad ainult nimetatud väljad: material, variant, shape, glass, fan, mehaanilised inner_radius, face_inset, edges, raised ja light_angle, shadow (0 on lame) ja outline. Värvid jäävad teema omaks.
cap(outline="round", corner=None, travel=2, layers=[cap_layer(...)])Maalitud klahvikübar klahvistiili jaoks, laotud cap_layer(...) kirjetest. outline on round või rect, corner muudab raadiust ja travel ütleb, kui sügavale kübar vajutamisel vajub.
cap_layer(kind, paint, inset=0, x=0, y=0, blur=0, fade=None, when=[...])Maalitud kübara üks kiht. kind on fill, stroke või inner, paint võtab kübaravärvi grammatika, color(...) või gradient(...) ning when piirab kihi olekutele pale, dark, pressed, resting ja highlighted. moves=False hoiab kihi paigal, kui kübar vajub.
theme(id, name, background=, keys=, key_text=, style=key_style(...), ...)Terviklik teema teemaredaktori vahekaardil Pistikprogrammid. background, keys ja key_text on kohustuslikud "#rrggbb" värvid; special, special_text, accent, background_bottom (üleminek allapoole), dark, font ja weight on valikulised. style=key_style(...) määrab viimistluse. Valimine paigaldab selle kohandatud teemana.
popup_style(id, name, shape="tile", width=48, height=56, lift=30, ...)Mull vajutatud klahvi kohal, jaotises Välimus > Hüpikud. shape on "tile", "round" või "balloon"; width, height, lift ja font_size on punktides ning response ja damping määravad vedru.
entrance(id, name, opacity=0, x=0, y=0, scale=1, tilt=0, spin=0, ...)Kuidas klaviatuur saabub, jaotises Välimus > Saabumine. opacity, x, y, scale, tilt ja spin on algseis; puhkeasendisse jõuab see vedruga, mille määravad response ja damping.
press_animation(id, name, scale=, x=0, y=0, rotation=0, ...)All hoitud klahvi kuju, jaotises Reaktsioonid > Geomeetria: scale (või scale_x ja scale_y), x, y ja rotation täisvajutusel.
letter_animation(id, name, scale=, x=0, y=0, rotation=0, anchor="center")Lühike liigutus, mille täht igal puudutusel teeb, jaotises Reaktsioonid > Tähed: samad arvud tipus, lisaks anchor.
transition(id, name, x=0, y=0, scale=1, tilt=0, fade=True, duration=None)Vahetus tähtede, 123 ja #+= vahel, jaotises Välimus > Üleminek. x ja y näitavad, kui kaugele vanad klahvid liiguvad, osana klaviatuurist, ja uued saabuvad peegelpildis. Võtab ka scale, tilt, fade ja duration.
background(id, name, layers=[...], colors=[])Animeeritud taust, jaotises Välimus > Taust: kuni neli particles(...) kihti ja kuni kaheksa "#rrggbb" värvi.
particles(shape="glow", count=40, size=4, speed=20, direction="none", ...)Tausta üks kiht. shape on "dot", "glow", "streak", "ring" või "square"; count, size, speed, direction, spread, gravity, wobble, life, twinkle ja opacity kujundavad liikumise ning burst paiskab osakesi igast vajutatud klahvist.
layout(id, name, rows=[...], left=[], right=[])Paigutus, jaotises Paigutus > Paigutus. Iga rida on klahvide loend: string on täht, kõik muu on layout_key(...). left ja right panevad kuni kolm klahvi tühikuklahvi kõrvale. Valimine paigaldab tavalise kohandatud paigutuse.
layout_key(glyph, action="insert", width=1)Klahv, mis pole lihtne täht. action on üks järgmistest: insert, spacer, shift, delete, space, return, numbers, emoji, globe, tab, left, right, undo, redo või dismiss, ja width on klahvides.
trail(id, name, layers=[...], colors=[])Pühkimisjälg. layers on trail_line, trail_stamps ja trail_head kirjed, joonistatud järjekorras, ja colors on palett, millele need viitavad.
trail_line(width=1, tail_width=1, color=-1, glow=0, dash=0, gap=0, band=0, flow=0)Tõmme mööda pühkimist. tail_width peenendab vana otsa, color=-1 sulatab kogu paleti mööda joont laiali ning dash, gap, band ja flow murravad selle või panevad liikuma.
trail_stamps(shape="dot", size=1, spacing=14, scatter=0, spin=0, twinkle=0, color=-1)Kujundid, mis langevad mööda pühkimist: dot, ring, square, diamond, star, spark või heart. spacing on nende vahe punktides, scatter viskab need joonelt kõrvale, spin keerab neid ja twinkle laseb neil tuhmuda ja särada.
trail_head(shape="dot", size=1.5, pulse=0, opacity=1, color=-1, glow=0)Märk sõrmeotsa juures. pulse paneb selle hingama ja glow laotab valgust selle ümber.
def animations(state):
    return [
        entrance("swoop", "Swoop", y=90, scale=0.94, tilt=-20,
                 response=0.5, damping=0.72),
        press_animation("dip", "Dip", scale=0.93, y=2),
        letter_animation("bounce", "Bounce", y=-7, scale=1.12,
                         anchor="bottom"),
        transition("glide", "Glide", x=0.3, scale=0.96),
    ]
Igat liiki animatsioonist üks. Igaüks ilmub jaotisse Pistikprogrammidest oma kaardil jaotises Välimus.
def backgrounds(state):
    return [
        background("snowfall", "Snowfall", colors=["#ffffff", "#cfe8ff"], layers=[
            particles(shape="dot", count=70, size=2.2, speed=28,
                      direction="down", spread=12, wobble=10, life=9),
            particles(shape="glow", count=0, size=3, life=1,
                      burst=8, burst_speed=90),
        ]),
    ]
Snowfall: õõtsudes langevad helbed ja väike valgussähvatus igast vajutatud klahvist.

Tagasta funktsioonist trails(state) trail-sõlmed. Igal jäljel on colors-värvipalett ja kihid, näiteks trail_line. Väärtusega color=-1 lähevad paleti värvid piki libistusjälge sujuvalt üksteiseks üle. Lülita pistikprogramm sisse ja vali selle jälg jäljevalija jaotisest Pistikprogrammidest. Joonistusandmete salvestamine olekusse ei joonista jälge.

def trails(state):
    return [trail("rainbow", "Rainbow", colors=["#ff0000", "#ff8800", "#ffff00", "#00cc44", "#0066ff", "#9900ff"],
        layers=[trail_line(width=1.3, tail_width=0.2, color=-1)])]
Vikerkaarevärviline libistusjälg

Välimus kopeeritakse valimise hetkel, nii et skripti hilisem muutmine ei muuda välimust, mida keegi juba kasutab; see tuleb uuesti valida. Valesti kirjutatud märksõna, loendist väljas olev sõna või tekst arvu kohal on viga redaktori konsoolis ning arvud hoitakse äpi enda juhtelementide vahemikes.

Graafika klahvidel

key_art(state) tagastab sõnastiku klahvinimedest graafikasse ja klaviatuur maalib selle klahvikübara sisse. Klahvinimed on samad, mida kasutab haptics, koos letters ja keys tagavaradega. Graafika on kas shape(...) loend, üksik kujund, kiht art([...]) või kihtide loend, ja iga kiht sulandub järgmisse joonistusse oma kella järgi, nii et üks klahv võib kanda kaht eri kiirusel liikuvat asja.

KutseMida see teeb
art(shapes, animate=0, curve="ease_out")Üks animeeruv kiht. Anna uus joonistus ja kiht sulandub sellesse animate sekundi jooksul mööda kõverat curve: ease_out, linear, ease_in, ease_in_out või spring. Mitu kihti ühel klahvil animeeruvad igaüks omaette.
shape(kind, anchor="center", unit="pt", x=0, y=0, size=, width=, height=, fill=, stroke=, ...)Üks joonistatud asi: circle, rect, capsule, line, path, text või icon. See asub x ja y kaugusel klahvi ankrust anchor, punktides või unit="key" korral klahvi osades. fill ja stroke võtavad hex-värvi, väärtuse "text" või "accent", color(...) või gradient(...) ning lisaks on line_width, corner, trim_from, trim_to, rotation, opacity, blur ja kuni kolm varju.
graph(values, min=None, max=None, width=0.8, height=0.25, stroke=, fill=)Arvurida, mis laotatakse tavalisteks kujunditeks, et seda kujundiloendiga ühendada või omaette kasutada. Alles jääb 60 viimast lõplikku väärtust, piirid tulevad muidu reast endast ja fill lisab joone alla suletud põhijoone tee.
color(value, opacity=1)Värv: hex-väärtus või "text" või "accent", mis lahendatakse selle klahvi järgi, kuhu see satub, koos läbipaistmatusega opacity.
gradient(kind, colors, stops=[], start=, end=, center=, radius=0.5)Lineaarne või radiaalne üleminek läbi värviloendi. stops paigutab värvid, start ja end suunavad lineaarse, center ja radius paigutavad radiaalse.
shadow(color, radius=4, x=0, y=0)Vari kujundi all, neid võib olla kuni kolm. Klahvi täitev udu järgib kübara nurki, selle asemel et need nurgeliseks lõigata; kuma pääseb kübarast välja.

Graafika loetakse uuesti pärast iga sündmust, mida pistikprogramm kuuleb, ja kogu ring ongi see: muuda olekut konksus on_event(name, info, state) ja joonista sellest konksus key_art(state). events(state) nimetab soovitud sündmused ja loetakse korra pistikprogrammi laadimisel. Ilma selleta kuuleb pistikprogramm kõike peale sündmuste key, key_down, key_up, predictions ja tick, mis käivitavad skripti iga vajutuse või iga sekundi järel ja mida tuleb eraldi küsida. Suurtähe- ja tasandimuutused joonistavad graafika uuesti sõltumata sellest, kas keegi kuulab, ja jõuavad ka context()-isse.

def initial():
    return {"shift": "off"}

def events(state):
    return ["shift"]

def on_event(name, info, state):
    state["shift"] = info["state"]
    return state

def key_art(state):
    if state["shift"] != "locked":
        return {}
    lamp = shape("circle", anchor="top_right", x=-7, y=7, size=5,
                 fill="accent", shadow=shadow("accent", radius=4))
    return {"shift": art([lamp], animate=0.12)}
Suurtähelukustuse lamp, mille joonistab pistikprogramm, mitte klaviatuur ise

Kujundid

  • circle
  • rect
  • capsule
  • line
  • path
  • text
  • icon

Kuusteist kujundit klahvi kohta, kokku üle kõigi selle kihtide, ja 64 punkti tee kohta; ülejäänu jäetakse välja. Kujund joonistatakse kasti sisse, mille määravad tema enda width ja height, ja ilma paksuseta kast ei maali midagi, nii et rõhtjoon vajab oma väikest height-i, mille keskelt punktid läbi lähevad (height=0.03, points=[[0, 0.5], [1, 0.5]]), muidu jääb see vaikselt ilmumata.

Haptika, tabamustsoonid ja parandused

haptics(state) ja hitboxes(state) tagastavad sõnastikud, mille võtmed on klahvinimed: täht ise, "space", "delete", "return", "shift" või "globe", seejärel "letters" iga nimetamata tähe jaoks ja "keys" kõige muu jaoks. Klahvid, mille pistikprogramm välja jätab, säilitavad inimese enda seaded. Mõlemat tabelit loetakse klaviatuuri avamisel ja umbes kord sekundis, nii et nende pärast ei käivitu midagi iga klahvivajutuse peale.

KutseMida see teeb
feel(style=None, intensity=None, sharpness=None)Haptika: style on "soft", "light", "medium", "heavy", "rigid" või "off", ning intensity ja sharpness (0 kuni 1) seda kohandavad. Sobib ka ainult stiilisõna.
hitbox(scale=1, x=0, y=0)Tabamusala: x ja y nihutavad klahvi sihtmärki sellise osa võrra selle suurusest, kõige rohkem pool klahvi, ja scale suurendab või vähendab seda. Pelgalt arv on scale.
def haptics(state):
    return {
        "space": "heavy",
        "return": "rigid",
        "delete": feel(intensity=0.45, sharpness=0.9),
    }
Heavy Space: raskem tühikuklahv, krõbe sisestusklahv ja kerge kustutamine.

on_touch(key, x, y, state) käivitub pärast iga puudutust, kui see on juba käsitletud, koos kohaga klahvil, kuhu sõrm maandus. Asukohta mõõdetakse joonistatud klahvi, mitte selle nihutatud sihtmärgi suhtes, nii et pistikprogramm saab nihutada iga klahvi sinna, kuhu seda tegelikult vajutatakse, ilma et ajaks taga iseenda nihet.

def initial():
    return {"keys": {}}

def on_touch(key, x, y, state):
    if len(key) != 1:
        return state
    n, ax, ay = state["keys"].get(key, [0, 0.0, 0.0])
    n = min(n + 1, 50)
    ax += (x - ax) / n
    ay += (y - ay) / n
    state["keys"][key] = [n, ax, ay]
    return state

def hitboxes(state):
    boxes = {}
    for key in state["keys"]:
        n, x, y = state["keys"][key]
        if n >= 12:
            boxes[key] = hitbox(x=round(x * 0.6, 2), y=round(y * 0.6, 2))
    return boxes
Adaptive Hitbox: õpib, kuhu iga klahvi tegelikult vajutatakse, ja nihutab selle sihtmärki osa teest sinnapoole.

suggestions(word, state) paneb sõnad riba algusesse, kuni sõna trükitakse. correct(word, fix, state) käivitub iga sõna kohta korra, kui tühik selle lõpetab, koos klaviatuuri enda paranduse või None'iga, ka siis, kui automaatparandus on väljas. Tagasta sõna, et see sisestada, False, et jätta sõna trükitud kujule, või None, et jätta otsus klaviatuurile. Võidab esimene vastanud pistikprogramm ja kohe järgnev kustutamine võtab selle tagasi nagu iga automaatparanduse.

SHORT = {"brb": "be right back", "omw": "on my way", "idk": "I don't know"}

def suggestions(word, state):
    long = SHORT.get(word.lower())
    return [long] if long else []

def correct(word, fix, state):
    if len(word) > 1 and word.isupper():
        return False
    return None
Shorthand: pakub brb trükkimise ajal „be right back” ja hoiab automaatparanduse suurtähtedes sõnadest eemal.

Kumbki haak ei käivitu paroolväljadel. Riba paranduskiip näitab klaviatuuri enda parandust, mitte seda, mida correct tagastaks, ja on_touch'is muudetud tabel jõuab klaviatuurini järgmisel taktil.

Testimine redaktoris

Redaktori eelvaade on asendusklaviatuur. See joonistab settings(state) reaalajas, käivitab puudutusega iga haagi näidissõna, klahvi või väljatüübiga, näitab tühikuklahvi nii, nagu pistikprogramm selle jättis, ja loetleb kõik, mida pistikprogramm klaviatuurilt palus. stats() tagastab seal väljamõeldud arve, nii et kiirus ilmub ilma tippimata.

  1. Kasuta eelvaate juhtelemente. Igaüks käivitab on_action ja joonistab uuesti.
  2. Puuduta haakide nuppe samas järjekorras, nagu klaviatuur seda teeks: on_open, siis paar korda on_word või on_key, siis on_close.
  3. Loe konsooli. Käsud ilmuvad nii, nagu sa need kirjutasid, print()-read nende all, ja viga nimetab oma rea.
  4. Lae uuesti, et olek nullida. Skripti muutmine ei nulli seda iseenesest.

Eelvaates pole dokumenti, seega insert() ja replace() ainult logivad. Nende proovimiseks salvesta ja tipi avatud klaviatuuriga mis tahes väljale.

Piirid

Kui pistikprogramm tuleb failina või hoidlast, kontrollib Clink seda enne salvestamist. See peab olema alla 64 000 baidi ja 1600 rea, määratlema vähemalt ühe haagi, importima ainult lubatud mooduleid ega tohi sisaldada ühtegi järgmistest:

Jagatud pistikprogrammides keelatud

  • __
  • exec(
  • eval(
  • open(
  • compile(

Moodulid, mida jagatud pistikprogramm saab importida

  • json
  • math
  • random
  • re
  • sys
  • time

Iga haagikutse saab 2 000 000 interpretaatorisammu, sama palju kui paneeli joonistamine. on_key käivitub aga iga klahvivajutuse peale, nii et raske töö seal aeglustab tippimist ammu enne, kui see piir kätte jõuab.

Fail

Pistikprogramm on üks JSON-dokument. id püsib uuenduste vahel sama, version on vaba tekst, mida loendis näidatakse, icon on SF Symboli nimi ja source on skript, milles reavahetused on varjestatud. Jaga seda redaktori inspektorist või impordi üks vahekaardi Pistikprogrammid noolenupuga.

{
  "id": "word-count",
  "name": "Word count",
  "icon": "text.word.spacing",
  "summary": "Counts words on the space bar",
  "version": "1.0",
  "author": "You",
  "enabled": true,
  "source": "def initial():\n    return {\"on\": False}\n..."
}
Üks .clinkplugin, lühendatult.

Pistikprogramme jagatakse .clinkplugin-failidena, mis on JSON-dokumendid, mille sees on skript. Need avaldatakse hoidla kaudu samamoodi nagu paneelid: failide kaust, manifest ja väljalase. Ametlik hoidla on anti-ltd/clink-plugins.

Hoidlad ›

Kui midagi ei juhtu

Enamasti on see üks neist.

SümptomMida kontrollida
Midagi ei juhtuPistikprogrammid on vahekaardi Pistikprogrammid ülaosas välja lülitatud, pistikprogramm on loendis välja lülitatud või puudub Clink Pro liikmesus. Kõigi kolme korral ei tööta klaviatuuris ükski pistikprogramm.
Tühikuklahvi tekst on hallPistikprogramm on selle üle võtnud. Välja all olev rida nimetab, milline; lülita selle pistikprogrammi lüliti või pistikprogramm ise välja, et väli tagasi saada.
Jaotis puudubAnkur on valesti kirjutatud. Võrdle seda rakenduse Näita ID-sid valikuga ja pea meeles, et jaotis kuvatakse ikkagi pistikprogrammi enda lehel, kust tasub kõigepealt vaadata.
Elemendiklahv on tühiSelle taga olev pistikprogramm on välja lülitatud, eemaldatud või tema draw(id, state) andis vea. Paigutus hoiab klahvi alles niikuinii, nii et see täitub uuesti, kui pistikprogramm on jälle sees. Viga leiad redaktori konsoolist.
Element ei muutu kunagidraw'lt küsitakse edasi, seega ei liigu selle taga olev olek. See, mis nägu toidab, tuleb uuendada haagist: on_tick millegi jaoks, mis muutub ise, on_word või on_key millegi jaoks, mis järgib tippimist.
set_setting() ei teinud midagiNimi, mida ülal loendis pole, tõstab KeyError'i. Vale tüüpi või vahemikust väljas väärtus jäetakse vahele ning redaktori konsool ütleb, mida seade ootab. Piiratud seade läheb ilma liikmesuseta ka tagasi.
Loendur läks nulliKlaviatuur salvestab oleku sulgemisel, mitte iga klahvi järel. Klaviatuur, mille süsteem seansi keskel tapab, kaotab selle, mida pistikprogrammid pärast avamist lugesid. Hoia kogusummasid rakendusepoolsetes haakides, kui see on tähtis.
Tippimine tundub aeglaneOn_key sees jookseb midagi rasket. Vii see on_word alla, tee seda vähem või puhverda arvutatu olekus.
Efekt puudub jaotisest PistikprogrammidestPistikprogrammid peavad olema sees ja pistikprogramm lubatud ning effects(state) peab tagastama vähemalt ühe kihiga light_effect. Puuduta redaktoris nuppu effects, et näha, mis tagasi tuli, ja otsi konsoolist ValueError.
Ülemise riba element ei tee kasutamisel midagiNii puudutus kui ka lahti lastud ketas jõuavad konksu on_action(action, value, state), kokku viiduna elemendi id, mitte nime järgi. Ketas kirjutab sätte ainult siis, kui bar_knob nimetab selle setting=-is; muidu jääb väärtus pistikprogrammi hooleks ja nupp ei kirjuta sätet kunagi.
PyMini ›
Laadi alla App Store’ist