Asennus

uusin versio: 3.0.2

64-bittinen
macOS (.app) 3.0.2
Windows (.exe) 3.0.2
Debian (.deb) 3.0.2
Fedora (.rpm) 3.0.2
Muut Linux-distrot (.AppImage) 3.0.2

Projektin tavoitteet

Projektin tavoitteena on luoda komentorivin käyttöliittymäkäyttäjiä varten avointen web-standardien varaan rakentuva kaunis ja laajennettavissa oleva käyttökokemus. Alussa keskitymme ensisijaisesti nopeuteen, vakauteen ja oikean API:n kehittämiseen laajennusten tekijöille.

Tulevaisuudessa odotamme yhteisön keksivän innovatiivisia lisäyksiä, jotka parantavat sitä, mikä voisi olla yksinkertaisin, tehokkain ja testatuin tuottavuuden käyttöliittymä.

Laajennukset

Laajennukset ovat saatavilla npm:ssä. Kannustamme kaikkia sisällyttämään hyper keywords-kenttään package.json.

$ npm search hyper

Muokkaa sitten .hyper.js ja lisää se plugins

module.exports = { config: { /*... */ }, plugins: };

Hypernäyttää ilmoituksen, kun moduulisi asennetaan .hyper_plugins.

Keymaps

Kaikki komentoavainten avaimet voidaan muuttaa. Jos haluat muuttaa niitä, muokkaa .hyper.js ja lisää haluamasi muutos kohtaan keymaps.

Sitten Hyper muuttaa oletusarvon mukautetulla muutoksellasi.

Esimerkki: 'window:devtools': 'Cmd+Alt+O'

module.exports = { config: { /*... */ }, keymaps: { 'window:devtools': 'cmd+alt+o' }};

Oletusnäppäinkartat:

Konfiguraatio

Konfiguraation sijainti

macOS ~/Library/Application Support/Hyper/.hyper.js
Windows $Env:AppData/Hyper/.hyper.js
Linux ~/.config/Hyper/.hyper.js

Huom: config osoitteessa ~/.hyper.js tuetaan edelleen, mutta se jätetään huomiotta, jos config on sovellushakemistossa. Muussa tapauksessa se siirretään sovellushakemistoon ensimmäisellä ajokerralla.

Yllä .hyper.js nähty config-objekti myöntää seuraavaa

.

.

.

Property Default Description
updateChannel ”stable” Päivityskanava, josta päivitykset vastaanotetaan
fontSize 12 Päätteen oletuskoko pikseleinä
fontFamily ”Menlo, DejaVu Sans Mono, Lucida Console, monospace” Käytettävä fonttiperhe valinnaisten fallbackien kanssa
uiFontFamily ”-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, …” Käytettävä fonttiperhe käyttöliittymässä valinnaisilla varajärjestelyillä
fontWeight ”normaali” Vakioperusteinen fonttipaino: ”normaali” tai ”lihavoitu”
fontWeightBold ”lihavoitu” Fonttipaino lihavoiduille merkeille: ”normaali” tai ”lihavoitu”
cursorColor ”rgba(248,28,229,0.8)” Karetin väri päätelaitteessa
cursorAccentColor ”#000” Tekstin väri BLOCK-kursorin alla
cursorShape ”BLOCK” Karetin muoto päätteessä. Käytettävissä olevat vaihtoehdot ovat:
cursorBlink ”false” Jos true, kursori vilkkuu
foregroundColor ”#fff” Päätteen päätekstin väri
backgroundColor ”#000” Ikkunan ja päätelaitteen taustan väri ja peittävyys
selectionColor ”rgba(248,28,229,0.3)” Tekstivalinnan taustaväri/peiteväri päätelaitteessa
borderColor ”#333” Pääikkunan reunan ja välilehtipalkin väri
css ”” Pääikkunaan sisällytettävä mukautettu CSS
padding ”12px 14px” CSS:n pehmusteiden arvot kunkin termin ympärillä olevaan tilaan
colors { black: ”#000000”, red: ”#ff0000”, … } Luettelo väripaletin ohituksista. Näppäinten nimet edustavat ”ANSI 16”, jotka kaikki näkyvät oletuskonfiguraatiossa.
shell ”” Polku mukautettuun komentotulkkiin, joka suoritetaan, kun Hyper aloittaa uuden istunnon
shellArgs ”” Matriisi komentotulkin argumentteja
env {} Objekti ympäristömuuttujista, jotka asetetaan ennen kuin shellin käynnistämistä
windowSize Uuden ikkunan oletusleveys/korkeus pikseleinä
scrollback 1000 Päätepuskuriin vieritystä varten säilytettävien rivien määrä
copyOnSelect false Jos true, valittu teksti kopioidaan automaattisesti leikepöydälle
quickEdit false Jos true, hiiren oikealla napsautuksella valittu teksti kopioidaan tai liitetään, jos valintaa ei ole (true oletusarvoisesti Windowsissa)
defaultSSHApp true Jos true, Hyper asetetaan oletusprotokolla-asiakkaaksi SSH:lle
modifierKeys {altIsMeta: false} Muuttaa modifier-näppäinten käyttäytymistä siten, että ne toimivat metanäppäiminä
showHamburgerMenu true Linuxissa/Windowsissa, false macOS:ssä Muuttaa hampurilaisvalikon näkyvyyttä. Käytettävissä olevat vaihtoehdot ovat: true, false
showWindowControls ”” Muuttaa ikkunan ohjainten sijaintia/näkyvyyttä. Käytettävissä olevat vaihtoehdot ovat: true, false, ”left”

Laajennusten API

Laajennukset ovat universaaleja Node.js-moduuleja, joita sekä Electron että renderöintiprosessi lataavat.

Laajennusten järjestelmä perustuu päätelaitteen rakentamiseen käyttämiemme API-rajapintojen koostamiseen: React-komponentit ja Redux-toiminnot.

Sen sijaan, että paljastaisimme mukautetun API-metodin tai -parametrin jokaiselle mahdolliselle muokkauskohdalle, annamme sinulle mahdollisuuden siepata ja koota jokaisen toiminnallisuuden palan!

Ainut tietämys, jota siis vaaditaan menestyksekkäästi laajentaaksesi Hyper:tä, on sen perustana olevien avoimeen lähdekoodiin perustuvien kirjastojen tuntemus.

Lisätietoja laajennuskehityksestä löydät Hyper-tietovarastosta.

Moduulisi on paljastettava ainakin yksi näistä metodeista:

Method Invoked from Description
onApp Elektroni

Kutsutaan, kun sovellus latautuu ensimmäisen kerran. Jos lisäosa ladataan uudelleen, se kutsutaan uudelleen olemassa olevalla sovelluksella.

Parametrit:

app Elektron-sovellus.
onWindow Electron

Kutsutaan, kun jokainen ikkuna luodaan. Jos lisäosa ladataan uudelleen, se kutsutaan uudelleen olemassa olevilla ikkunoilla.

Parametrit:

window Elektroni BrowserWindow.
onUnload Elektroni

Kutsutaan, kun käyttäjä poistaa lisäosan.

Parametrit:

app Electron-sovellus.
decorateConfig Electron / Renderer

v0.5.0+. Mahdollistaa käyttäjän konfiguraation koristelun.
Hyödyllinen teemoitteluun tai pluginin mukautettuihin parametreihin.

Parametrit:

config Objekti config
decorateEnv Elektroni

v0.7.0+. Mahdollistaa käyttäjän ympäristön koristelun palauttamalla muokatun ympäristöobjektin.

Parametrit:

environment Objekti environment
decorateMenu Electron

Kutsutaan Electronin Menu mallin Menu kanssa. Jos lisäosa ladataan uudelleen, sitä kutsutaan uudelleen ja valikko päivitetään.

Parametrit:

menu Valikkomallin objekti
decorateBrowserOptions Electron

Mahdollistaa Electron BrowserWindow:n BrowserWindow vaihtoehtojen koristelun, kun uusi ikkuna luodaan.

Parametrit:

options Objekti BrowserWindow options.
onRendererWindow Renderer

Kutsutaan, kun liitännäinen ladataan ensimmäisen kerran tai sen jälkeen uudelleen jokaisessa ikkunassa.

Parametrit:

window Ikkunan objekti
middleware Renderer

Räätälöity Redux-väliohjelmisto, joka voi siepata minkä tahansa toiminnan. Tämän jälkeen kutsumme thunkmiddlewarea, mikä tarkoittaa, että middleware voinext thunks.

reduceUI
reduceSessions
reduceTermGroups
Renderer

Kustomoidun reduktio-ohjelmiston ui-, sessions– tai termgroups-tilamuodolle.

.

state Reduxin tilaobjekti
action Toimintaobjekti
getTabsProps Renderer

Passes down props from <Tabs>to the <Header> component. Täytyy palauttaa koostettu props-olio.

parentProps Propsit muodostavat emokomponentin.
props Olemassa olevat ominaisuudet, jotka siirretään komponentille.
getTabProps Renderer

Passii alaspäin propsit <Tab>komponentista <Tabs>. Täytyy palauttaa koostettu props-objekti.

uid Tab / Term uid
parentProps Propsit vanhemmasta komponentista.
props Olemassa olevat ominaisuudet, jotka välitetään komponentille.
getTermGroupProps Renderer

Välittää alaspäin rekvisiittaa <Terms>:stä <TermGroup>-komponenttiin. Täytyy palauttaa koostettu props-olio.

uid TermGroup uid
parentProps Propsit vanhemmasta komponentista.
props Olemassa olevat ominaisuudet, jotka välitetään komponentille.
getTermProps Renderer

Välittää alaspäin rekvisiittaa <TermGroup>:lta <Term>-komponentille. Täytyy palauttaa koostettu props-olio.

uid Term uid
parentProps Propsit emokomponentista.
props Olemassaolevat attribuutit, jotka siirretään komponentille.
mapHyperState
mapTermsState
mapHeaderState
mapNotificationsState
Renderer

Muokattu kartoittaja säiliökomponenttien vastaanottamille tilaominaisuuksille. Huomaa, että jotta lapsikomponentit saavat nämä ominaisuudet, ne on välitettävä alaspäin vastaavilla metodeilla (kuten getTermProps).

Pitäisi palauttaa välitetyn mapin laajennettu objekti.

state Globaalinen tila Redux
map Ominaisuuksien olemassa oleva kartta, joka välitetään komponentille.
mapHyperDispatch
mapTermsDispatch
mapHeaderDispatch
mapNotificationsDispatch
Renderer

Muokattu kartoittaja lähetysominaisuuksia varten. Täytyy palauttaa välitetyn kartan laajennettu objekti.

dispatch Reduxin dispatch-funktio
map Olemassa oleva kartta ominaisuuksista, jotka välitetään komponentille.
decorateHyper
decorateNotifications
decorateNotificationdecorateHeader
decorateTabs
decorateTabdecorateTerms
decorateTermGroup
decorateSplitPane
decorateTerm
Renderer

Kutsutaan React Componentkoristeella. Täytyy palauttaa Higher Order Component.

Parametrit:

Hyper The React Componentconstructor.
env Kokoelma käyttökelpoisia moduulireferenssejä, joiden avulla voidaan rakentaa osia. Katso alla

Moduulien lataaminen

Käyttäjä voi hot-loadata ja hot-reloadata liitännäisiä painamalla komento + R (refresh). Pyydämme sinua pyrkimään tekemään liitännäisiä, jotka eivät vaadi sovelluksen täydellistä uudelleenkäynnistystä toimiakseen.

Huomautus

Liitännäiset, jotka vaikuttavat `BrowserWindow` -ikkunaan, vaikuttavat uusiin ikkunoihin hot-reloadin jälkeen.

Tulevaisuudessa saatamme tehdä tämän automaattisesti.

Kehittäessäsi liitännäisesi voit lisätä liitännäisesi .hyper_plugins/local:een ja määritellä sen sitten localPlugins-massan alle .hyper.js:ssa. Latailemme uusia lisäosia:

  • Jaksoittain (muutaman tunnin välein)
  • Kun konfiguraatiotiedostoon tehdään muutoksia (plugins tai localPlugins)
  • Kun käyttäjä klikkaa Plugins > Update all now

Latausprosessi käsittää

  • Käynnistyksen npm prune ja npm install kohdassa .hyper_plugins.
  • Ajetaan require.cache sekä elektronissa että renderöintiprosessissa
  • Kutsutaan on*-metodeja olemassa oleviin instansseihin ja renderöidään komponentit uudelleen tuoreilla koristeilla paikoilleen.

Pluginien sijainti

macOS ~/Library/Application Support/Hyper/.hyper_plugins
Windows $Env:AppData/Hyper/.hyper_plugins
Linux ~/.config/Hyper/.hyper_plugins

Huom: ~/.hyper_plugins liitännäisiä tuetaan edelleen, mutta ne jätetään huomiotta, jos liitännäisiä on sovellushakemistossa. Muussa tapauksessa ne siirretään sovellushakemistoon ensimmäisellä ajokerralla.

Huomautus: pääprosessissa liitännäiset rekisteröidään mahdollisimman pian (laukaisemme onLoad). Selaimessa käyttäjän tehtävänä on käynnistää niiden lataus painamalla komento+R. Laitamme käyttäjän hallitsemaan latausta tällä tavalla, jotta hän ei menetä kriittistä työtä laajennuksilla, jotka nollaavat tilan tai eivät säilytä sitä oikein.

Komponenttien koristelu

Tarjoamme sinulle mahdollisuuden tarjota korkeamman asteen komponentti jokaiselle Hyper käyttöliittymän osalle.
Sen rakenne on seuraava:

<Hyper> <Header> <Tabs> <Tab /> ... </Tabs> </Header> <Terms> <TermGroup> <SplitPane> <TermGroup> <Term /> ... </TermGroup> <TermGroup> <Term /> ... </TermGroup> </SplitPane> </TermGroup> </Terms> <Notifications> <Notification /> ... </Notifications></Hyper>

Kaikki decorate*metodit saavat toisena parametrina välitettävässä objektissa seuraavat viittaukset:

React Koko React-nimiavaruus.
notify

Työpöytäilmoituksen näyttävä apufunktio. Ensimmäinen parametri on otsikko, toinen on ilmoituksen valinnainen runko ja kolmas on toinen valinnainen parametri, jota voidaan käyttää yksityiskohtien kirjaamiseen kehityskonsoliin.

Tietojen välittämiseksi riittää, että annat ja objektin, jolla on error-ominaisuus, joka sisältää lokitettavat tiedot.

Notification Komponentti Notification, jos haluat käyttää sitä uudelleen.

Kaikki komponentit hyväksyvät seuraavat kaksi ominaisuutta, joilla niiden merkintää voidaan laajentaa:

customChildren Matriisi Element tai yksittäinenElement, joka lisätään komponentin alaosaan.
customChildrenBefore Sama kuin edellä mainittu ominaisuus, mutta se lisätään komponentin ensimmäiseksi lapsielementiksi tai -elementeiksi.

Ylemmän asteinen komponentti voi toimittaa onDecoratedominaisuuden koristellulle komponentille saadakseen viittauksen sen instanssiin.

Term ylemmän asteen komponenttisi voi toimittaa onCursorMovehandler-ominaisuuden, jota kutsutaan, kun kursori on siirtynyt objektin parametrilla, joka edustaa sen suhteellista sijaintia Term-alkuperään nähden:

. Koska monia voidaan asettaa, älä oleta, että omasi on ainoa.

Jos esimerkiksi välität lapsia, sommittele mahdollisia olemassa olevia arvoja:

render () { const customChildren = Array.from(this.props.customChildren) .concat(<p>My new child</p>); return <Tab {...this.props} customChildren={customChildren} />}

Vai jos käytät onDecorated-ominaisuutta

onDecorated (term) { this.term = term; if (this.props.onDecorated) { this.props.onDecorated(term); }}

Toiminnot ja efektit

Kaikki Reduxin toiminnot ovat käytettävissäsi, jotta voit käsitellä niitä välikäyttövälineistössäsi ja reduktoreissasi. Katso esimerkki Hyperpowerin referenssilaajennuksesta.

Sivuvaikutuksia esiintyy kahdessa perusmuodossa:

  • Jotkut toiminnot lähettävät muita toimintoja tilan perusteella.
  • Jotkut toiminnot tekevät asynkronista työtä kommunikoimalla RPC-kanavan kautta pääprosessiin

Kaikkiin tapauksiin sivuvaikutus välitetään toiminnon effect-avaimena, ja välitysohjelmistomme käsittelee sen myöhemmin.

Tämä tarkoittaa sitä, että voit ylikorjata, sommitella tai eliminoida efektit kokonaan! Toisin sanoen näin voit muuttaa sovelluksen oletustoiminnallisuutta tai -käyttäytymistä.

Katsokaa esimerkkinä toimintoa, jota käytämme fontin koon suurentamiseen, kun painat Command+=:

export function increaseFontSize () { return (dispatch, getState) => { dispatch({ type: UI_FONT_SIZE_INCR, effect () { const state = getState(); const old = state.ui.fontSizeOverride || state.ui.fontSize; const value = old + 1; dispatch({ type: UI_FONT_SIZE_SET, value }); } }); };}

Alustana oleva terminaali

Hyper saavuttaa suuren osan nopeudestaan ja toiminnallisuudestaan xterm:n tehon ansiosta.js

Lisäiset API:t

Elektronin app objekteja on laajennettu seuraavilla ominaisuuksilla:

x Vaakasijainti pikseleinä
y Vertikaalisijainti pikseleinä
width Kursorin leveys pikseleinä
height height
config A Objectlohkon config kanssa .hyper.js.
plugins An Object with helpers for plugins.
getWindows A FunctionA Function, joka palauttaa Set:n kaikista avoinna olevista ikkunoista.
createWindow A FunctionA FunctionA Function, joka luo uuden ikkunan. Hyväksyy valinnaisen callback, joka välitetään uuden ikkunan init takaisinkutsuna.

Electron BrowserWindow -objekteja laajennetaan seuraavilla parametreilla:

rpc Ensimmäinen parametri, joka sallii yhteydenpidon ikkunaprosessin kanssa.
sessions A Map:n Sessionobjektien Mapjoukko, joka pitää yllä kommunikaatiota kunkin termin pty. kanssa.

Renderöinti-ikkunoita laajennetaan vastaavalla tavalla:

rpc Yksikön EventEmitter, joka mahdollistaa kommunikoinnin ikkunaprosessin kanssa.
store Reduxin Store-objekti. Tämä mahdollistaa pääsyn dispatch-toimintoihin tai globaalin tilan lukemisen getState:llä.

Objekti rpc on symmetrinen selaimen ja renderöintiprosessin välillä. API on sama kuin Node.js:ssä, sillä erotuksella, että se sallii vain yhden objektin vain parametreina:

window.rpc.emit('hi there', { some: 'payload', any: });

Esimerkkiteema: Hyperyellow

Seuraava laajennus yksinkertaisesti muuttaa konfiguraatiota lisäämällä CSS:n ja keltaiset värit! Tässä on koodi.

Teemat ovat yksinkertaisesti lisäosia! Tarvitaan vain yksi koukku, decorateConfig:

exports.decorateConfig = (config) => { return Object.assign({}, config, { borderColor: 'yellow', cursorColor: 'yellow', css: ` ${config.css || ''} .tabs_nav .tabs_list .tab_text { color: yellow; } .tabs_nav .tabs_title { color: yellow; } ` });}

Nappasin luokkien nimet tarkastelemalla termiä Devtoolsilla, jonka voit käynnistää View -> Toggle Developer Tools. Kun teet niin, huomaa, että jotkut luokat luodaan automaattisesti ja niitä seuraa satunnainen nonce (esim.: term_13hv8io). Jätä ne huomiotta: ne muuttuvat jokaisen uuden ikkunan myötä!

Huomaa, että korostetaan mukavuutta muiden laajennusten kanssa. Tarkemmin sanottuna luomme uuden objektin, laajennamme vain ne avaimet, joista olemme kiinnostuneita, ja koostamme CSS:n niin, että käyttäjän ja muiden tekijöiden asetukset säilyvät:

return Object.assign({}, config, { css: ` ${config.css || ''} /* your css here */ `});

Esimerkki laajennuksesta: Hyperpower

Seuraava laajennus renderöi hiukkasia, kun caret liikkuu:

Kävellään sen koodi läpi.
Aluksi sieppaamme Redux-toiminnon SESSION_ADD_DATA. Löydät koko listan actioneista arkistosta.

exports.middleware = (store) => (next) => (action) => { if ('SESSION_ADD_DATA' === action.type) { const { data } = action; if (/bash: wow: command not found/.test(data)) { store.dispatch({ type: 'WOW_MODE_TOGGLE' }); } else { next(action); } } else { next(action); }};

Huomaa, että emme lähetä actionia uudelleen, mikä tarkoittaa, ettemme koskaan renderöi komennon tulosta terminaaliin. Sen sijaan lähetämme oman actionin, jonka nappaamme uiReducerja myöhemmin kartoitamme:

exports.reduceUI = (state, action) => { switch (action.type) { case 'WOW_MODE_TOGGLE': return state.set('wowMode', !state.wowMode); } return state;};exports.mapTermsState = (state, map) => { return Object.assign(map, { wowMode: state.ui.wowMode });};

Tahdomme sitten koristella <Term>-komponentin niin, että pääsemme käsiksi taustalla olevaan caretiin.

Mutta <Term> ei ole kontti, johon voimme kartoittaa propsit. Niinpä käytämme getTermProps:tä siirtääksemme ominaisuuden edelleen:

exports.getTermProps = (uid, parentProps, props) => { return Object.assign(props, { wowMode: parentProps.wowMode });}

Laajennus palauttaa sitten korkeamman asteen komponentin, joka kietoo <Term>. Huomaa, että välitämme onDecoratedominaisuuden päästäksemme käsiksi Term-peruskomponenttiin ja sen DOM-referenssiin sekä onCursorMove-ominaisuuden käyttääksemme Hyper cursor API:

render () { return React.createElement(Term, Object.assign({}, this.props, { onDecorated: this._onDecorated, onCursorMove: this._onCursorMove }));}

.

admin

Vastaa

Sähköpostiosoitettasi ei julkaista.

lg