Ecode adalah editor kode multi-platform ringan yang dirancang untuk perangkat keras modern dengan fokus pada responsif dan kinerja. Ini telah dikembangkan dengan Eepp GUI yang diperkuat perangkat keras, yang menyediakan teknologi inti untuk editor. Proyek ini datang sebagai proyek serius pertama menggunakan Eepp GUI, dan saat ini sedang dikembangkan untuk meningkatkan Perpustakaan Eepp GUI sebagai bagian dari salah satu tujuan utamanya.
Untuk checkout screenshot lainnya yang berjalan di macOS, berjalan di Windows, berjalan di haiku, DPI rendah, penyelesaian kode, terminal, locator file, format file, Global Find, Global Replace, Linter.
.gitignore * Ecode memperlakukan folder sebagai proyek, seperti banyak editor lainnya. Perbedaan utama adalah bahwa ia juga mencoba untuk secara otomatis membersihkan file proyek dengan memfilter file apa pun yang difilter dalam file .gitignore repositori. Idenya adalah menggunakan file .gitignore sebagai pengaturan proyek. File proyek akan menjadi yang digunakan untuk menemukan file dalam proyek dan melakukan pencarian global. Biasanya, ini diterjemahkan menjadi hasil yang jauh lebih baik untuk pencarian terkait proyek. Ada juga mekanisme yang sangat sederhana untuk memungkinkan visibilitas file yang difilter oleh .gitignore , dengan menambahkan file dengan pola yang diizinkan di subfolder di atas folder yang dimuat, membuat file di .ecode/.prjallowed dengan pola Glob yang diperlukan yang memungkinkan pola yang difilter menjadi "tidak terungkap". Ecode hanya akan menambahkan file yang didukung oleh editor, editor tidak akan mencoba melakukan apa pun dengan file yang tidak secara resmi didukung.
Beberapa poin untuk mengilustrasikan filosofi proyek:
Ecode dapat dikompilasi ke Wasme dan dijalankan di browser modern apa pun. Tidak ada rencana untuk memfokuskan pengembangan pada versi web (setidaknya untuk saat ini) karena ada banyak solusi bagus di luar sana. Tapi Anda bisa mencobanya:
Demo di sini
Saat ini, kode sumber terletak di repositori proyek EEPP. Sumber Editor Ecode terletak di SRC/Tools/Ecode. Ecode digunakan untuk secara aktif meningkatkan dan mengulangi Perpustakaan Eepp GUI. Pada titik tertentu, itu akan dimigrasi ke repositori ini. Repositori Ecode harus digunakan untuk masalah dan dokumentasi. PRS untuk ECODE akan diterima di repositori EEPP.
Ada skrip untuk setiap platform yang didukung yang siap membangun aplikasi. Untuk Linux dan MacOS , sepele untuk membangun proyek, Anda hanya perlu menginstal GCC/Clang dan juga perpustakaan pengembangan dari LIBSDL2. Script Windows Build saat ini merupakan skrip kompilasi silang dan menggunakan Mingw64. Tetapi juga dapat dengan mudah dibangun dengan Visual Studio dan LibsDL2 Development Libraries yang diinstal. Untuk informasi lebih lanjut tentang cara membangun proyek secara manual, silakan ikuti instruksi Eepp Build. Nama proyek selalu ECODE (jadi jika Anda membangun dengan Make, Anda harus menjalankan make ecode ).
build.app.sh akan mencoba membangun paket AppImage dan tar.gz dengan aplikasi terkompresi. Folder ecode akan berisi aplikasi yang tidak terkompresi.build.app.sh akan membuat ecode.app . Jalankan create.dmg.sh untuk membuat file dmg . Folder ecode.app akan berisi aplikasi yang tidak terkompresi.build.app.sh akan membuat file zip dengan paket aplikasi zip. Folder ecode akan berisi aplikasi yang tidak terkompresi. Untuk membangun dari Windows ikuti instruksi di sini.build.app.sh akan mencoba membangun tar.gz dengan aplikasi terkompresi. Folder ecode.app akan berisi aplikasi yang tidak terkompresi.build.app.sh akan mencoba membangun tar.gz dengan aplikasi terkompresi. Folder ecode.app akan berisi aplikasi yang tidak terkompresi. Bangunan malam sedang didistribusikan di sini untuk pengguna yang lebih tidak sabar. Ecode sedang dikembangkan secara aktif, build malam mungkin tidak stabil untuk penggunaan sehari -hari kecuali ada perbaikan yang tidak dirilis yang tidak dirilis yang diperlukan untuk pengguna.
ECODE terus -menerus menambahkan lebih banyak dukungan bahasa dan juga mendukung memperluas dukungan bahasa melalui file konfigurasi (untuk setiap fitur: Sintaks Sorot, LSP, Linter dan Formatter).
| Bahasa | Menyorot | LSP | Linter | Formatter |
|---|---|---|---|---|
| .htaccess | ✓ | Tidak ada | Tidak ada | Tidak ada |
| .Ignore file | ✓ | Tidak ada | Tidak ada | Tidak ada |
| [x] itu! | ✓ | Tidak ada | Tidak ada | Tidak ada |
| mahir | ✓ | Adeptlsp | Tidak ada | Tidak ada |
| AngelScript | ✓ | Tidak ada | Tidak ada | Tidak ada |
| skrip awk | ✓ | Tidak ada | Tidak ada | Tidak ada |
| kelelawar | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Bazel | ✓ | Tidak ada | Tidak ada | Tidak ada |
| membengkokkan | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Cetak biru | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Brainfuck | ✓ | Tidak ada | Tidak ada | Tidak ada |
| berdengung | ✓ | Tidak ada | Tidak ada | Tidak ada |
| C | ✓ | klangd | CPPCHECK | Format dentang |
| karbon | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Clojure | ✓ | clojure-lsp | Tidak ada | Tidak ada |
| cmake | ✓ | CMake-Language-Server | Tidak ada | Tidak ada |
| CPP | ✓ | klangd | CPPCHECK | Format dentang |
| kristal | ✓ | kristal | Tidak ada | Tidak ada |
| csharp | ✓ | Omnisharp | Tidak ada | Tidak ada |
| CSS | ✓ | Emmet-Language-Server | Tidak ada | warga asli |
| D | ✓ | sajikan-d | Tidak ada | Tidak ada |
| anak panah | ✓ | Dart-server bahasa | Tidak ada | Tidak ada |
| diff | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Dockerfile | ✓ | Docker-Langser | Tidak ada | Tidak ada |
| eliksir | ✓ | elixir-ls | Tidak ada | Tidak ada |
| Elm | ✓ | Elm-Language-Server | Tidak ada | Tidak ada |
| file lingkungan | ✓ | Tidak ada | Tidak ada | Tidak ada |
| fantom | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Fortran | ✓ | Fortls | Tidak ada | Tidak ada |
| fstab | ✓ | Tidak ada | Tidak ada | Tidak ada |
| gdscript | ✓ | Tidak ada | Tidak ada | Tidak ada |
| GLSL | ✓ | GLSL_Analyzer | Tidak ada | Tidak ada |
| pergi | ✓ | gopls | Tidak ada | gopls |
| graphql | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Groovy | ✓ | Tidak ada | Tidak ada | Tidak ada |
| kelinci | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Haskell | ✓ | Haskell-Language-Server | hlint | Ormolu |
| haxe | ✓ | Tidak ada | Tidak ada | Tidak ada |
| argumen kompiler haxe | ✓ | Tidak ada | Tidak ada | Tidak ada |
| hlsl | ✓ | Tidak ada | Tidak ada | Tidak ada |
| html | ✓ | Emmet-Language-Server | Tidak ada | lebih cantik |
| ini | ✓ | Tidak ada | Tidak ada | Tidak ada |
| jai | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Jawa | ✓ | jdtls | Tidak ada | Format dentang |
| Javascript | ✓ | TypeScript-Language-Server | Eslint | lebih cantik |
| javascriptreact | ✓ | TypeScript-Language-Server | Tidak ada | Tidak ada |
| json | ✓ | Tidak ada | jq | warga asli |
| Julia | ✓ | Languageserver.jl | Tidak ada | Tidak ada |
| Kotlin | ✓ | Kotlin-Language-Server | ktlint | ktlint |
| getah | ✓ | Texlab | Tidak ada | Tidak ada |
| lobster | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Lua | ✓ | Lua-Language-Server | Luacheck | Tidak ada |
| Makefile | ✓ | Tidak ada | Tidak ada | Tidak ada |
| penurunan harga | ✓ | Tidak ada | Tidak ada | Tidak ada |
| meson | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Moonscript | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Nelua | ✓ | Tidak ada | Nelua | Tidak ada |
| nim | ✓ | NIMLSP | nim | Tidak ada |
| Objeck | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Objektif-C | ✓ | klangd | Tidak ada | Format dentang |
| ocaml | ✓ | Ocaml-lsp | Tidak ada | Tidak ada |
| Odin | ✓ | OLS | Tidak ada | Tidak ada |
| OpenScad | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Pascal | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Perl | ✓ | Perlnavigator | Tidak ada | Tidak ada |
| php | ✓ | phpactor | php | Tidak ada |
| PICO-8 | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Plaintext | ✓ | Tidak ada | Tidak ada | Tidak ada |
| PO | ✓ | Tidak ada | Tidak ada | Tidak ada |
| kuda poni | ✓ | Tidak ada | Tidak ada | Tidak ada |
| PostgreSQL | ✓ | Tidak ada | Tidak ada | Tidak ada |
| PowerShell | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Python | ✓ | pylsp | Ruff | hitam |
| R | ✓ | R LanguageServer | Tidak ada | Tidak ada |
| cincin | ✓ | Tidak ada | Tidak ada | Tidak ada |
| rubi | ✓ | SolarGraph | Tidak ada | Tidak ada |
| karat | ✓ | analyzer karat | Tidak ada | Rustfmt |
| kelancangan | ✓ | Emmet-Language-Server | Tidak ada | Tidak ada |
| Scala | ✓ | logam | Tidak ada | Tidak ada |
| Shellscript | ✓ | Bash-Language-Server | Tidak ada | Tidak ada |
| Smallbasic | ✓ | Tidak ada | Tidak ada | Tidak ada |
| kepadatan | ✓ | solc | solhint | Tidak ada |
| SQL | ✓ | Tidak ada | Tidak ada | Tidak ada |
| cepat | ✓ | sourceKit-lsp | Tidak ada | Tidak ada |
| tcl | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Teal | ✓ | Tidak ada | tl | Tidak ada |
| Toml | ✓ | Tidak ada | Tidak ada | Tidak ada |
| naskah | ✓ | TypeScript-Language-Server | Eslint | lebih cantik |
| TypeScriptreact | ✓ | TypeScript-Language-Server | Tidak ada | Tidak ada |
| v | ✓ | v-analyzer | Tidak ada | v |
| Vala | ✓ | VALA-LANGGER-Server | Tidak ada | Tidak ada |
| Verilog | ✓ | Tidak ada | Tidak ada | Tidak ada |
| Dasar Visual | ✓ | Tidak ada | Tidak ada | Tidak ada |
| vue | ✓ | VLS | Tidak ada | Tidak ada |
| Wren | ✓ | Tidak ada | Tidak ada | Tidak ada |
| x86 perakitan | ✓ | Tidak ada | Tidak ada | Tidak ada |
| xml | ✓ | Emmet-Language-Server | warga asli | warga asli |
| xtend | ✓ | Tidak ada | Tidak ada | Tidak ada |
| yaml | ✓ | Server-bahasa Yaml | Tidak ada | Tidak ada |
| Zig | ✓ | ZLS | Zig | Zig |
Tag asli berarti bahwa fitur ini didukung secara asli oleh Ecode dan tidak memerlukan alat eksternal untuk berfungsi.
Ecode membawa alat untuk menampilkan kesehatan dukungan bahasa saat ini. Dari ECODE Anda dapat memeriksa status kesehatannya dari Settings -> Tools -> Check Language Health , dan dari CLI Anda dapat menggunakan bendera --health : ecode --health . Gunakan bendera periksa kesehatan untuk memecahkan masalah server bahasa yang hilang, linter, dan formatter.
Periksa kesehatan semua bahasa dengan ecode --health atau mintalah detail tentang bahasa tertentu dengan ecode --health-lang=<lang> .
Plugin memperluas fungsionalitas editor kode dasar. Saat ini semua plugin diaktifkan secara default, tetapi mereka opsional dan dapat dinonaktifkan kapan saja. Ecode mengimplementasikan protokol internal yang memungkinkan plugin untuk berkomunikasi satu sama lain. Protokol LSP akan digunakan sebagai basis untuk mengimplementasikan komunikasi plugin. Dan, misalnya, plugin linter akan mengkonsumsi LSP untuk meningkatkan diagnostiknya. Juga modul lengkap otomatis akan meminta bantuan dari LSP, jika tersedia, untuk meningkatkan penyelesaian dan untuk memberikan bantuan tanda tangan.
Dukungan linter disediakan dengan mengeksekusi linter yang sudah stabil dari setiap bahasa. Ecode memberikan dukungan untuk beberapa bahasa secara default dan dapat diperluas dengan mudah dengan memperluas konfigurasi linters.json . Konfigurasi default linters.json dapat diperoleh dari sini. Untuk mengonfigurasi linter baru, Anda dapat membuat file linters.json baru di jalur konfigurasi default Ecode .
linters.jsonFormatnya adalah objek JSON yang sangat sederhana dengan objek konfigurasi dan array objek yang berisi format file yang didukung, pola LUA untuk menemukan kesalahan yang dicetak oleh linter ke stdout, posisi masing -masing kelompok pola, dan perintah untuk dieksekusi. Ini juga mendukung beberapa kunci objek tambahan opsional.
JavaScript Linter Contoh (Menggunakan Eslint)
{
"config" : {
"delay_time" : " 0.5s "
},
"linters" : [
{
"file_patterns" : [ " %.js$ " , " %.ts$ " ],
"warning_pattern" : " [^:]:(%d+):(%d+): ([^%[]+)%[([^ n ]+) " ,
"warning_pattern_order" : { "line" : 1 , "col" : 2 , "message" : 3 , "type" : 4 },
"command" : " eslint --no-ignore --format unix $FILENAME "
}
]
} Hanya itu yang kita butuhkan untuk memiliki linter kerja di Ecode . Linters Executable harus diinstal secara manual oleh pengguna, Linters tidak akan datang dengan editor, dan mereka juga harus terlihat oleh yang dapat dieksekusi. Ini berarti bahwa ia harus berada di variabel lingkungan PATH atau jalur ke biner harus mutlak.
Silakan periksa tabel dukungan bahasa
"disable_lsp_languages": ["lua", "python"] , menonaktifkan Lua dan Python."disable_languages": ["lua", "python"] , masing -masing menonaktifkan Luacheck dan Ruff. Plugin Formatter berfungsi persis seperti plugin Linter, tetapi akan menjalankan alat yang memformat kode otomatis. Ecode memberikan dukungan untuk beberapa bahasa secara default dengan dapat diperluas dengan mudah dengan memperluas konfigurasi formatters.json . Konfigurasi default formatters.json dapat diperoleh dari sini. Ini juga mendukung beberapa formatter secara asli, ini berarti bahwa formatter hadir dengan Ecode tanpa memerlukan ketergantungan eksternal. Dan juga mendukung pemformatan dokumen teks LSP, yang berarti bahwa jika Anda menjalankan LSP yang mendukung dokumen pemformatan, pemformatan akan tersedia juga. Untuk mengonfigurasi format baru, Anda dapat membuat file formatters.json baru di jalur konfigurasi default Ecode .
formatters.json {
"config" : {
"auto_format_on_save" : false
},
"keybindings" : {
"format-doc" : " alt+f "
},
"formatters" : [
{
"file_patterns" : [ " %.js$ " , " %.ts$ " ],
"command" : " prettier $FILENAME "
}
]
}Silakan periksa tabel dukungan bahasa
Dukungan LSP disediakan dengan mengeksekusi LSP yang sudah stabil dari setiap bahasa. Ecode memberikan dukungan untuk beberapa bahasa secara default dan dapat diperluas dengan mudah dengan memperluas konfigurasi lspclient.json . konfigurasi default lspclient.json dapat diperoleh dari sini. Untuk mengonfigurasi LSP baru, Anda dapat membuat file lspclient.json baru di jalur konfigurasi default Ecode .
Catatan penting: Server LSP bisa sangat intensif sumber daya dan mungkin tidak selalu menjadi pilihan terbaik untuk proyek sederhana.
Detail Implementasi: Server LSP hanya dimuat saat diperlukan, tidak ada proses yang akan dibuka sampai file yang didukung dibuka dalam proyek.
lspclient.json Formatnya mengikuti pola yang sama dengan semua file konfigurasi sebelumnya. Konfigurasi diwakili dalam file JSON dengan tiga tombol utama: config , keybindings , servers .
Contoh server LSP C dan C ++ (menggunakan clangd)
{
"config" : {
"hover_delay" : " 0.5s "
},
"servers" : [
{
"language" : " c " ,
"name" : " clangd " ,
"url" : " https://clangd.llvm.org/ " ,
"command" : " clangd -log=error --background-index --limit-results=500 --completion-style=bundled " ,
"file_patterns" : [ " %.c$ " , " %.h$ " , " %.C$ " , " %.H$ " , " %.objc$ " ]
},
{
"language" : " cpp " ,
"use" : " clangd " ,
"file_patterns" : [ " %.inl$ " , " %.cpp$ " , " %.hpp$ " , " %.cc$ " , " %.cxx$ " , " %.c++$ " , " %.hh$ " , " %.hxx$ " , " %.h++$ " , " %.objcpp$ " ]
}
]
} Hanya itu yang kita butuhkan untuk memiliki LSP yang berfungsi di Ecode . Eksekusi LSPS harus diinstal secara manual oleh pengguna, LSP tidak akan datang dengan editor, dan mereka juga harus terlihat oleh yang dapat dieksekusi. Ini berarti bahwa ia harus berada di variabel lingkungan PATH atau jalur ke biner harus mutlak.
Silakan periksa tabel dukungan bahasa
lspclient.json . Dimungkinkan juga untuk menentukan perintah yang berbeda untuk setiap platform, mengingat bahwa itu mungkin berubah dalam beberapa ocasion per platform. Dalam hal ini objek harus digunakan, dengan masing -masing kunci menjadi platform, dan ada juga platform wildcard "lain" untuk menentukan platform lain yang tidak cocok dengan definisi platform. Misalnya, sourcekit-lsp menggunakan: "command": {"macos": "xcrun sourcekit-lsp","other": "sourcekit-lsp"}{"name": "clangd","command_parameters": "--background-index-priority=background --malloc-trim"} ECODE menyediakan beberapa integrasi git dasar (lebih banyak fitur akan datang di masa depan). Tujuan utamanya adalah untuk membantu pengguna melakukan operasi paling dasar dengan GIT. Beberapa fitur saat ini didukung: Status Git dan Visualisasi Statistik (Status File), Komit, Push, Checkout, Tarik, Mengambil, Gabungan Maju Cepat, Membuat+Renaming+Menghapus Cabang, Mengelola Stash. Semua statistik akan diperbarui secara otomatis/disegarkan secara real time. Ada juga beberapa konfigurasi dasar yang tersedia. Plugin mengharuskan pengguna untuk memasang biner git dan tersedia di variabel lingkungan PATH .
git.json Formatnya mengikuti pola yang sama dengan semua file konfigurasi sebelumnya. Konfigurasi diwakili dalam file JSON dengan tiga tombol utama: config , keybindings , servers .
Contoh server LSP C dan C ++ (menggunakan clangd)
{
"config" : {
"silent" : false ,
"status_recurse_submodules" : true ,
"statusbar_display_branch" : true ,
"statusbar_display_modifications" : true ,
"ui_refresh_frequency" : " 5s "
},
"keybindings" : {
"git-blame" : " alt+shift+b "
}
}.git ).Plugin Auto-Complete bertugas memberikan saran untuk pelengkapan kode dan bantuan tanda tangan.
Plugin XML Tools (dinonaktifkan secara default) memberikan beberapa perbaikan yang bagus saat mengedit konten XML.
Ecode menghormati jalur konfigurasi standar pada setiap OS:
XDG_CONFIG_HOME , biasanya diterjemahkan menjadi ~/.config/ecode/pluginsApplication Support di HOME , biasanya diterjemahkan ke ~/Library/Application Support/ecode/pluginsAPPDATA , biasanya diterjemahkan ke C:Users{username}AppDataRoamingecodepluginsSemua konfigurasi plugin dirancang untuk ditimpa oleh pengguna. Ini berarti bahwa konfigurasi default dapat diganti dengan konfigurasi khusus dari pengguna. Misalnya, jika pengguna ingin menggunakan linter yang berbeda, ia hanya perlu mendeklarasikan definisi linter baru dalam file konfigurasi linternya sendiri. Hal yang sama berlaku untuk server format dan LSPS. Plugin akan selalu mengimplementasikan "konfigurasi" untuk kustomisasi plugin, dan akan selalu mengimplementasikan tombol "keybindings" untuk mengonfigurasi inbinding keybinding kustom.
Skema warna editor khusus dapat ditambahkan di direktori skema warna pengguna yang ditemukan di:
XDG_CONFIG_HOME , biasanya diterjemahkan menjadi ~/.config/ecode/editor/colorschemesApplication Support di HOME , biasanya diterjemahkan ke ~/Library/Application Support/ecode/editor/colorschemesAPPDATA , biasanya diterjemahkan ke C:Users{username}AppDataRoamingecodeeditorcolorschemesFile apa pun yang ditulis dalam direktori akan diperlakukan sebagai file skema warna editor. Setiap file dapat berisi sejumlah skema warna.
Format skema warna dapat dibaca dari sini.
Skema warna terminal khusus dapat ditambahkan dalam direktori skema warna terminal pengguna yang ditemukan di:
XDG_CONFIG_HOME , biasanya diterjemahkan menjadi ~/.config/ecode/terminal/colorschemesApplication Support di HOME , biasanya diterjemahkan ke ~/Library/Application Support/ecode/terminal/colorschemesAPPDATA , biasanya diterjemahkan ke C:Users{username}AppDataRoamingecodeterminalcolorschemesFile apa pun yang ditulis dalam direktori akan diperlakukan sebagai file skema warna terminal. Setiap file dapat berisi sejumlah skema warna.
Format skema warna dapat dibaca dari sini.
Skema UI khusus dapat ditambahkan di direktori tema UI pengguna yang ditemukan di:
XDG_CONFIG_HOME , biasanya diterjemahkan menjadi ~/.config/ecode/themesApplication Support di HOME , biasanya diterjemahkan ke ~/Library/Application Support/ecode/themesAPPDATA , biasanya diterjemahkan ke C:Users{username}AppDataRoamingecodethemes File tema UI khusus harus memiliki ekstensi .css , ecode akan mencari semua file dengan ekstensi .css di direktori, nama tema UI adalah nama file tanpa ekstensi. Tema baru akan muncul di Settings -> Window -> UI Theme .
Tema UI khusus memungkinkan penyesuaian editor atas kehendak pengguna. Karena Ecode menggunakan CSS untuk menata semua elemen UI, menciptakan tema baru cukup mudah. Dimungkinkan untuk hanya menyesuaikan palet warna tetapi juga dimungkinkan untuk menyesuaikan semua elemen UI jika diinginkan. Menyesuaikan seluruh tema UI bisa luas, tetapi menyesuaikan warna sesederhana mengubah nilai -nilai variabel CSS yang digunakan untuk mewarnai UI. Untuk referensi, tema basis UI lengkap yang digunakan oleh Ecode dapat dilihat di sini. Pemilih yang paling penting adalah :root , di mana semua variabel didefinisikan. Variabel warna dapat dengan mudah diekstraksi dari file itu.
Contoh sederhana dari tema UI khusus yang hanya mengubah warna warna, sebut saja Breeze Light Red.css :
: root {
--inherit-base-theme : true;
--primary : # e93d66 ;
--scrollbar-button : # a94074 ;
--item-hover : # 502834 ;
--tab-hover : # 5e3347 ;
} Itu secara efektif akan membuat/menambahkan tema UI baru dengan warna merah muda. Detail yang sangat penting adalah bahwa jika tema UI harus mewarisi definisi lengkap dari tema default, kita harus menambahkan --inherit-base-theme: true dengan :root , jika tidak tema UI harus didefinisikan sepenuhnya, yang berarti, setiap widget harus ditata dari awal (tidak direkomendasikan dengan kompleksitasnya). Dimungkinkan juga untuk mengesampingkan gaya berbagai widget mendefinisikan kembali properti mereka dengan aturan biasa yang berlaku untuk spesifikasi CSS yang terkenal (alias menggunakan spesifisitas yang memadai dan mungkin menyalahgunakan! Bendera penting).
Dukungan bahasa khusus dapat ditambahkan dalam direktori bahasa yang ditemukan di:
XDG_CONFIG_HOME , biasanya diterjemahkan menjadi ~/.config/ecode/languagesApplication Support di HOME , biasanya diterjemahkan ke ~/Library/Application Support/ecode/languagesAPPDATA , biasanya diterjemahkan ke C:Users{username}AppDataRoamingecodelanguages Ecode akan membaca setiap file yang terletak di direktori itu dengan ekstensi json . Setiap file dapat berisi satu atau beberapa bahasa. Untuk mengatur beberapa bahasa, elemen root dari file JSON harus berupa array, berisi satu objek untuk setiap bahasa, jika tidak jika elemen root adalah objek, itu harus berisi definisi bahasa. Definisi bahasa dapat mengganti definisi yang saat ini didukung. ECODE akan memprioritaskan definisi yang ditentukan pengguna.
{
"name" : " language_name " ,
"files" : [ " Array of file extensions supported " ],
"comment" : " Sets the comment string used for auto-comment functionality. " ,
"patterns" : [
{ "pattern" : " lua_pattern " , "type" : " type_name " },
{ "pattern" : " no_capture(pattern_capture_1)(pattern_capture_2) " , "type" : { " no_capture_type_name " , " capture_1_type_name " , " capture_2_type_name " } },
{ "pattern" : [ " lua_pattern_start " , " lua_pattern_end " , " escape_character " ], "type" : " type_name " }
],
"symbols" : [
{ "symbol_name" : " type_name " }
],
"visible" : true , /* sets if the language is visible as a main language in the editor, optional parameter, true by default */
"auto_close_xml_tag" : false , /* sets if the language defined supports auto close XML tags, optional parameter, false by default */
"lsp_name" : " sets the LSP name assigned for the language, optional parameter, it will use the _name_ in lowercase if not set "
}Ecode menggunakan format yang sama untuk definisi bahasa seperti editor Lite dan Lite-XL. Ini membuat lebih mudah untuk menambahkan bahasa baru ke Ecode. Ada juga alat penolong yang dapat diunduh dari repositori Ecode yang terletak di sini yang memungkinkan untuk secara langsung mengekspor definisi bahasa Lite ke format file JSON yang digunakan dalam Ecode.
Dimungkinkan untuk dengan mudah memperluas definisi bahasa apa pun dengan mengekspornya menggunakan argumen CLI yang disediakan: --export-lang dan --export-lang-path . Pengguna yang ingin memperluas atau meningkatkan definisi bahasa dapat mengekspornya, memodifikasinya dan menginstal definisi dengan ekstensi .json di jalur bahasa khusus. Misalnya, untuk memperluas bahasa vue Anda perlu menjalankan: ecode --export-lang=vue --export-lang-path=./vue.json , Keluar dari file yang diekspor dan pindahkan ke jalur bahasa khusus.
{
"name" : " Elixir " ,
"files" : [ " %.ex$ " , " %.exs$ " ],
"comment" : " # " ,
"patterns" : [
{ "pattern" : " #.* n " , "type" : " comment " },
{ "pattern" : [ " : " " , " " " , " \ " ], "type" : " number " },
{ "pattern" : [ " """ " , " """ " , " \ " ], "type" : " string " },
{ "pattern" : [ " " " , " " " , " \ " ], "type" : " string " },
{ "pattern" : [ " ' " , " ' " , " \ " ], "type" : " string " },
{ "pattern" : [ " ~%a[/ " |'%(%[%{<] " , " [/ " |'%)%]%}>] " , " \ " ], "type" : " string " },
{ "pattern" : " -?0x%x+ " , "type" : " number " },
{ "pattern" : " -?%d+[%d%.eE]*f? " , "type" : " number " },
{ "pattern" : " -?%.?%d+f? " , "type" : " number " },
{ "pattern" : " : " ?[%a_][%w_]* " ? " , "type" : " number " },
{ "pattern" : " [%a][%w_!?]*%f[(] " , "type" : " function " },
{ "pattern" : " %u%w+ " , "type" : " normal " },
{ "pattern" : " @[%a_][%w_]* " , "type" : " keyword2 " },
{ "pattern" : " _%a[%w_]* " , "type" : " keyword2 " },
{ "pattern" : " [%+%-=/%*<>!|&] " , "type" : " operator " },
{ "pattern" : " [%a_][%w_]* " , "type" : " symbol " }
],
"symbols" : [
{ "def" : " keyword " },
{ "defp" : " keyword " },
{ "defguard" : " keyword " },
{ "defguardp" : " keyword " },
{ "defmodule" : " keyword " },
{ "defprotocol" : " keyword " },
{ "defimpl" : " keyword " },
{ "defrecord" : " keyword " },
{ "defrecordp" : " keyword " },
{ "defmacro" : " keyword " },
{ "defmacrop" : " keyword " },
{ "defdelegate" : " keyword " },
{ "defoverridable" : " keyword " },
{ "defexception" : " keyword " },
{ "defcallback" : " keyword " },
{ "defstruct" : " keyword " },
{ "for" : " keyword " },
{ "case" : " keyword " },
{ "when" : " keyword " },
{ "with" : " keyword " },
{ "cond" : " keyword " },
{ "if" : " keyword " },
{ "unless" : " keyword " },
{ "try" : " keyword " },
{ "receive" : " keyword " },
{ "after" : " keyword " },
{ "raise" : " keyword " },
{ "rescue" : " keyword " },
{ "catch" : " keyword " },
{ "else" : " keyword " },
{ "quote" : " keyword " },
{ "unquote" : " keyword " },
{ "super" : " keyword " },
{ "unquote_splicing" : " keyword " },
{ "do" : " keyword " },
{ "end" : " keyword " },
{ "fn" : " keyword " },
{ "import" : " keyword2 " },
{ "alias" : " keyword2 " },
{ "use" : " keyword2 " },
{ "require" : " keyword2 " },
{ "and" : " operator " },
{ "or" : " operator " },
{ "true" : " literal " },
{ "false" : " literal " },
{ "nil" : " literal " }
]
}Untuk definisi sintaksis yang lebih kompleks, silakan lihat definisi semua bahasa asli yang didukung oleh Ecode di sini.
Terdaftar tanpa urutan tertentu:
Penulis lebih dari terbuka untuk kolaborasi. Setiap orang yang tertarik dengan proyek diundang untuk berpartisipasi. Banyak fitur masih tertunda, dan proyek ini akan tumbuh lebih dari waktu ke waktu. Tolong, berkolaborasi. =)
Beberapa karakter Unicode tidak akan diterjemahkan di editor di luar kotak. Anda harus mengubah font monospace default yang mendukung font yang mendukung karakter yang ingin Anda lihat yang tidak diterjemahkan. Anda juga dapat mengubah font fallback default jika Anda ingin menggunakan font monospaced tradisional. Font Fallback default harus mencakup berbagai bahasa tetapi Anda bisa memerlukan beberapa font khusus (saat ini mencakup bahasa CJK).
*1 Keterbatasan Fitur EEPP Saat Ini.
*2 Saya bukan penggemar mengisyaratkan sub-pixel. Tapi saya lebih dari bersedia untuk mengimplementasikannya, saya tidak terlalu berpengalaman dalam masalah ini, jadi bantuan apa pun akan dihargai.
*3 Saya tidak terlalu suka ligatur. Saya terbuka untuk PR yang menerapkannya.
*4 Saya bukan pengguna VIM, dan saya tidak memenuhi syarat untuk mengimplementasikan mode VIM atau pengeditan modal apa pun. PRS dipersilakan untuk mendukung ini.
*5 Dukungan pembentukan teks yang lebih baik akan datang seiring waktu, tetapi tanpa terburu-buru untuk saat ini. Arsitektur Eepp siap menambahkan dukungan HarfBuzz.
Editor ini memiliki inspirasi yang sangat berakar dari editor teks Lite, Lite-XL, QTCreator, dan Sublime. Beberapa fitur dikembangkan berdasarkan implementasi Lite/Lite-XL. Beberapa fitur dapat diangkut langsung dari LITE: SCHEMES COLOR dan POLA SINTAX-HIGHLIGNING (Implementasi EEPP memperluas implementasi LITE asli untuk menambahkan lebih banyak fitur).
Ecode sebagian besar digunakan di Linux dan MacOS, itu tidak diuji dengan baik di Windows. Jika Anda menemukan masalah dengan editor, silakan laporkan di sini.
Ini adalah pekerjaan yang sedang berlangsung, stabilitas tidak dijamin. Tolong jangan menggunakannya untuk tugas -tugas penting. Saya menggunakan editor setiap hari dan cukup stabil untuk saya, tetapi menggunakannya dengan risiko Anda sendiri.
Niels Lohmann untuk JSON untuk C ++ modern
Neil Henning untuk Subprocess.H
Semua penulis emulator terminal yang tidak menyusu
Fredrik Aleksander untuk terminal hexe
RXI untuk Lite
Franko dan semua kolaborator untuk Lite-XL
Andreas Kling untuk Serenityos
Dan lebih banyak orang!
Lisensi MIT