- Asennus
- Projektin tavoitteet
- Laajennukset
- Keymaps
- Oletusnäppäinkartat:
- Konfiguraatio
- Konfiguraation sijainti
- Laajennusten API
- Moduulien lataaminen
- Huomautus
- Pluginien sijainti
- Komponenttien koristelu
- Toiminnot ja efektit
- Alustana oleva terminaali
- Lisäiset API:t
- Esimerkkiteema: Hyperyellow
- Esimerkki laajennuksesta: Hyperpower
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: };
Hyper
nä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:
|
||||||
onWindow |
Electron |
Kutsutaan, kun jokainen ikkuna luodaan. Jos lisäosa ladataan uudelleen, se kutsutaan uudelleen olemassa olevilla ikkunoilla. Parametrit:
|
||||||
onUnload |
Elektroni |
Kutsutaan, kun käyttäjä poistaa lisäosan. Parametrit:
|
||||||
decorateConfig |
Electron / Renderer |
v0.5.0+. Mahdollistaa käyttäjän konfiguraation koristelun. Parametrit:
|
||||||
decorateEnv |
Elektroni |
v0.7.0+. Mahdollistaa käyttäjän ympäristön koristelun palauttamalla muokatun ympäristöobjektin. Parametrit:
|
||||||
decorateMenu |
Electron |
Kutsutaan Electronin Parametrit:
|
||||||
decorateBrowserOptions |
Electron |
Mahdollistaa Electron Parametrit:
|
||||||
onRendererWindow |
Renderer |
Kutsutaan, kun liitännäinen ladataan ensimmäisen kerran tai sen jälkeen uudelleen jokaisessa ikkunassa. Parametrit:
|
||||||
middleware |
Renderer |
Räätälöity Redux-väliohjelmisto, joka voi siepata minkä tahansa toiminnan. Tämän jälkeen kutsumme |
||||||
reduceUI reduceSessions reduceTermGroups |
Renderer |
Kustomoidun reduktio-ohjelmiston
|
||||||
getTabsProps |
Renderer |
Passes down props from
|
||||||
getTabProps |
Renderer |
Passii alaspäin propsit
|
||||||
getTermGroupProps |
Renderer |
Välittää alaspäin rekvisiittaa
|
||||||
getTermProps |
Renderer |
Välittää alaspäin rekvisiittaa
|
||||||
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 Pitäisi palauttaa välitetyn mapin laajennettu objekti.
|
||||||
mapHyperDispatch mapTermsDispatch mapHeaderDispatch mapNotificationsDispatch |
Renderer |
Muokattu kartoittaja lähetysominaisuuksia varten. Täytyy palauttaa välitetyn kartan laajennettu objekti.
|
||||||
decorateHyper decorateNotifications decorateNotification decorateHeader decorateTabs decorateTab decorateTerms decorateTermGroup decorateSplitPane decorateTerm
|
Renderer |
Kutsutaan Parametrit:
|
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
tailocalPlugins
) - Kun käyttäjä klikkaa Plugins > Update all now
Latausprosessi käsittää
- Käynnistyksen
npm prune
janpm 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 |
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 onDecorated
ominaisuuden koristellulle komponentille saadakseen viittauksen sen instanssiin.
Term ylemmän asteen komponenttisi voi toimittaa onCursorMove
handler-ominaisuuden, jota kutsutaan, kun kursori on siirtynyt objektin parametrilla, joka edustaa sen suhteellista sijaintia Term-alkuperään nähden:
x |
Vaakasijainti pikseleinä | ||||||||||||||||
y |
Vertikaalisijainti pikseleinä | ||||||||||||||||
width |
Kursorin leveys pikseleinä | ||||||||||||||||
height |
height |
config |
A Object lohkon config kanssa .hyper.js . |
plugins |
An Object with helpers for plugins. |
getWindows |
A Function A Function , joka palauttaa Set :n kaikista avoinna olevista ikkunoista. |
createWindow |
A Function A Function A 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 Session objektien Map joukko, 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 uiReducer
ja 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 onDecorated
ominaisuuden 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 }));}
.