Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1d253e51ef | |||
| 42f82e2e0d | |||
| fa32f4b177 | |||
| 65f997e964 | |||
| 7eaf6913cb | |||
| 8f7dcf3534 | |||
| d8c6b9ace3 | |||
| d0173d7308 | |||
| 40fc234eeb |
@@ -6,7 +6,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: home-1
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
|
||||
@@ -1,26 +1,33 @@
|
||||
# Beluga
|
||||
|
||||
Beluga is a project of CLI text editor that will fit perfectly with your azerty keyboard.
|
||||
Beluga is a project of CLI text editor that uses lisp as configuration language.
|
||||
It's abviously only working for **Linux**.
|
||||
|
||||
## Requirements
|
||||
|
||||
You will only need **cmake** and **clang** to compile the editor.
|
||||
You will only need **meson** and a **C compiler** to compile the editor.
|
||||
|
||||
## Installation
|
||||
|
||||
### From source
|
||||
Here is the installation line for development version:
|
||||
|
||||
```git clone --recurse-submodules https://github.com/le-cocotier/beluga.git ~/.beluga && cd ~/.beluga && mkdir build && cd build && cmake ../ && make beluga```
|
||||
```git clone https://homelinuxserver.ddns.net/git/arthur/beluga.git ~/.beluga && cd ~/.beluga && meson setup build && meson compile -C build```
|
||||
|
||||
The executable file will be in `bin/beluga`. Feel free to add it to your path.
|
||||
The executable file will be `build/beluga`. Feel free to add it to your path.
|
||||
|
||||
You can either run `make all` or `make doc_doxygen` if you're interested by the doxygen documentation.
|
||||
### From installation script ( prefered )
|
||||
|
||||
Just clone the repo and execute the script `install.sh`. It will automatically add beluga to your path.
|
||||
|
||||
## Getting start
|
||||
|
||||
To open an existing file just type :
|
||||
```beluga path_to_my_file```
|
||||
```./build/beluga path_to_my_file```
|
||||
|
||||
The only keybinds that you will need will be :
|
||||
- Ctrl-Q : leave the editor
|
||||
- Ctrl-S : Save a file
|
||||
Here is some few command that you will need :
|
||||
|
||||
| keybind| command |
|
||||
|--------|------------------|
|
||||
| Ctrl-Q | leave the editor |
|
||||
| Ctrl-S | Save a file |
|
||||
| Ctrl-O | open file |
|
||||
|
||||
@@ -29,4 +29,6 @@ Lisp editorOpenFile(Lisp args, LispError *e, LispContext ctx);
|
||||
|
||||
Lisp editorPrintC(Lisp args, LispError *e, LispContext ctx);
|
||||
|
||||
Lisp addPackage(Lisp args, LispError *e, LispContext ctx);
|
||||
|
||||
#endif
|
||||
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
echo "--- Welcome to Beluga installer ---"
|
||||
read -p "Do you want to start the installation ? (Y/n)" confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1
|
||||
|
||||
# Check dependencies
|
||||
|
||||
if ! command -v "meson" &>/dev/null; then
|
||||
echo "❌ Error: meson not found. Please install it first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# Create config files
|
||||
|
||||
echo "Create config files ..."
|
||||
mkdir -pv ~/.beluga/
|
||||
cp -rv ./assets/ ~/.beluga/
|
||||
mkdir -pv ~/.beluga/packages/
|
||||
|
||||
read -p "Do you want to replace your config file or keep it (init.lisp.bak) / (init.lisp.new) ? (Y/n)" confirm
|
||||
if [[ "$confirm" =~ ^[Yy]$ ]]; then
|
||||
mv ~/.beluga/config/init.lisp ~/.beluga/config/init.lisp.bak
|
||||
cp -rv ./config/init.lisp ~/.beluga/config/
|
||||
else
|
||||
cp -rv ./config/init.lisp ~/.beluga/config/init.lisp.new
|
||||
fi
|
||||
|
||||
|
||||
# Compile the project
|
||||
|
||||
echo "Start compilation ..."
|
||||
meson setup build/
|
||||
meson compile -C build/
|
||||
|
||||
# Add to path
|
||||
echo "Adding beluga to the path"
|
||||
sudo cp -f ./build/beluga /usr/local/bin/
|
||||
|
||||
echo "Installation finish"
|
||||
echo "Check ~/.beluga/config/init.lisp for customization"
|
||||
@@ -5,6 +5,9 @@
|
||||
* interactions. \version 0.1 \date 21 septembre 2024
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define _DEFAULT_SOURCE
|
||||
@@ -22,14 +25,20 @@ struct editorConfig E;
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
char * splash_screen = (char *) calloc(256, sizeof(char));
|
||||
|
||||
enableRawMode();
|
||||
initEditor();
|
||||
if (argc >= 2) {
|
||||
E.state = READ_AND_WRITE;
|
||||
editorOpen(argv[1]);
|
||||
} else {
|
||||
editorOpen("assets/beluga.txt");
|
||||
strcat(splash_screen, getenv("HOME"));
|
||||
strcat(splash_screen, "/.beluga/assets/beluga.txt");
|
||||
fprintf(stderr, "%s\n", splash_screen);
|
||||
editorOpen(splash_screen);
|
||||
}
|
||||
free(splash_screen);
|
||||
|
||||
editorSetStatusMessage("HELP: Ctrl-S = save | Ctrl-Q = quit");
|
||||
|
||||
|
||||
+18
-2
@@ -27,7 +27,6 @@ Lisp mapKey(Lisp args, LispError *e, LispContext ctx) {
|
||||
}
|
||||
|
||||
Lisp moveCursor(Lisp args, LispError *e, LispContext ctx) {
|
||||
fprintf(stderr, "Cursor is moving\n");
|
||||
const char *direction = lisp_string(lisp_car(args));
|
||||
switch (direction[0]) {
|
||||
case 'u':
|
||||
@@ -134,8 +133,25 @@ Lisp editorOpenFile(Lisp args, LispError *e, LispContext ctx) {
|
||||
|
||||
|
||||
Lisp editorPrintC(Lisp args, LispError *e, LispContext ctx) {
|
||||
char c = lisp_char(lisp_car(args));
|
||||
char c = lisp_string(lisp_car(args))[0];
|
||||
editorInsertChar(c);
|
||||
return lisp_null();
|
||||
}
|
||||
|
||||
Lisp addPackage(Lisp args, LispError *e, LispContext ctx) {
|
||||
const char *package_name = lisp_string(lisp_car(args));
|
||||
char *package_dir = (char *) calloc(256, sizeof(char));
|
||||
FILE *fd_package = NULL;
|
||||
strcat(package_dir, getenv("HOME"));
|
||||
strcat(package_dir, "/.beluga/packages/");
|
||||
strcat(package_dir, package_name);
|
||||
strcat(package_dir, "/init.lisp");
|
||||
fd_package = fopen(package_dir, "r");
|
||||
lisp_eval(lisp_read_file(fd_package, &E.ctx_error, E.ctx), &E.ctx_error,
|
||||
E.ctx);
|
||||
fclose(fd_package);
|
||||
free(package_dir);
|
||||
|
||||
return lisp_null();
|
||||
|
||||
}
|
||||
|
||||
+7
-2
@@ -31,9 +31,11 @@ void initBuiltins() {
|
||||
registerBuiltin("MOVE-CURSOR-PAGE-DOWN", editorMoveCursorPageDown);
|
||||
registerBuiltin("EDITOR-OPEN-FILE", editorOpenFile);
|
||||
registerBuiltin("EDITOR-INSERT-CHAR", editorPrintC);
|
||||
registerBuiltin("ADD-PACKAGE", addPackage);
|
||||
}
|
||||
|
||||
void initEditor() {
|
||||
char * init_file_path = (char *) calloc(256, sizeof(char));
|
||||
E.cursor_x = 0;
|
||||
E.cursor_y = 0;
|
||||
E.rx = 0;
|
||||
@@ -53,8 +55,10 @@ void initEditor() {
|
||||
|
||||
E.number_of_keybinds = 0;
|
||||
|
||||
|
||||
E.fd_init_file = fopen("config/init.lisp", "r");
|
||||
strcat(init_file_path, getenv("HOME"));
|
||||
strcat(init_file_path, "/.beluga/config/init.lisp");
|
||||
printf("%s\n", init_file_path);
|
||||
E.fd_init_file = fopen(init_file_path, "r");
|
||||
E.ctx = lisp_init();
|
||||
E.env = lisp_env(E.ctx);
|
||||
lisp_lib_load(E.ctx);
|
||||
@@ -63,6 +67,7 @@ void initEditor() {
|
||||
|
||||
// Read config file
|
||||
E.ctx_data = lisp_read_file(E.fd_init_file, &E.ctx_error, E.ctx);
|
||||
free(init_file_path);
|
||||
if (E.ctx_error != LISP_ERROR_NONE) {
|
||||
die("init failed");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user