summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Cervin <albert@acervin.com>2024-02-01 00:08:06 +0100
committerAlbert Cervin <albert@acervin.com>2024-02-01 00:09:06 +0100
commit1653dfaef03d48a8a3aacfdea33ec6d82cab2a06 (patch)
treea122314f47da3c3904b506f830932e576b45092d
parent0e40d7a21bc0b139086e61e52bac6dc1115703bc (diff)
downloaddged-1653dfaef03d48a8a3aacfdea33ec6d82cab2a06.tar.gz
dged-1653dfaef03d48a8a3aacfdea33ec6d82cab2a06.tar.xz
dged-1653dfaef03d48a8a3aacfdea33ec6d82cab2a06.zip
Add git commit syntax
-rw-r--r--dged.nix11
-rw-r--r--src/dged/lang.c3
-rw-r--r--src/dged/syntax.c21
-rw-r--r--src/main/main.c4
4 files changed, 34 insertions, 5 deletions
diff --git a/dged.nix b/dged.nix
index 84eb6ae..87a0a00 100644
--- a/dged.nix
+++ b/dged.nix
@@ -9,6 +9,7 @@
, doxygen
, valgrind
, linkFarm
+, fetchFromGitHub
}:
stdenv.mkDerivation {
name = "dged";
@@ -38,6 +39,16 @@ stdenv.mkDerivation {
"nix" = tree-sitter-nix;
"python" = tree-sitter-python;
"make" = tree-sitter-make;
+ "gitcommit" = tree-sitter.buildGrammar {
+ language = "gitcommit";
+ version = "0.3.3";
+ src = fetchFromGitHub {
+ owner = "gbprod";
+ repo = "tree-sitter-gitcommit";
+ rev = "v0.3.3";
+ hash = "sha256-L3v+dQZhwC+kBOHf3YVbZjuCU+idbUDByEdUBmeGAlo=";
+ };
+ };
};
installPhase = ''
diff --git a/src/dged/lang.c b/src/dged/lang.c
index e392136..562f162 100644
--- a/src/dged/lang.c
+++ b/src/dged/lang.c
@@ -57,6 +57,7 @@ void languages_init(bool register_default) {
define_lang("Nix", "nix", ".*\\.nix", 4, "rnix-lsp");
define_lang("Make", "make", ".*(Makefile|\\.mk)", 4, NULL);
define_lang("Python", "python", ".*\\.py", 4, NULL);
+ define_lang("Git Commit Message", "gitcommit", "COMMIT_EDITMSG", 4, NULL);
}
}
@@ -215,6 +216,6 @@ struct language lang_from_id(const char *id) {
return lang_from_settings(id);
} else {
minibuffer_echo_timeout(4, "failed to find language \"%s\"", id);
- return lang_from_settings("languages.fnd");
+ return g_fundamental;
}
}
diff --git a/src/dged/syntax.c b/src/dged/syntax.c
index 0935080..1091123 100644
--- a/src/dged/syntax.c
+++ b/src/dged/syntax.c
@@ -17,6 +17,7 @@
#include "hash.h"
#include "minibuffer.h"
#include "path.h"
+#include "settings.h"
#include "text.h"
#include "vec.h"
@@ -110,8 +111,17 @@ static const char *read_text(void *payload, uint32_t byte_offset,
return NULL;
}
+static const char *grammar_name_from_buffer(struct buffer *buffer) {
+ struct setting *s = lang_setting(&buffer->lang, "grammar");
+ if (s != NULL && s->value.type == Setting_String) {
+ return s->value.string_value;
+ }
+
+ return buffer->lang.name;
+}
+
static const char *lang_folder(struct buffer *buffer) {
- const char *langname = buffer->lang.name;
+ const char *langname = grammar_name_from_buffer(buffer);
size_t tspath_len = strlen(treesitter_path);
size_t lang_len = strlen(langname);
@@ -328,6 +338,7 @@ static void update_parser(struct buffer *buffer, void *userdata,
} else if (s8eq(cname, s8("string")) ||
s8eq(cname, s8("string.special")) ||
s8eq(cname, s8("string.special.path")) ||
+ s8eq(cname, s8("text.title")) || s8eq(cname, s8("text.uri")) ||
s8eq(cname, s8("string.special.uri"))) {
highlight = true;
color = Color_Green;
@@ -472,7 +483,7 @@ static void create_parser(struct buffer *buffer, void *userdata) {
return;
}
- const char *langname = buffer->lang.name;
+ const char *langname = grammar_name_from_buffer(buffer);
size_t lang_len = strlen(langname);
const char *prefix = "tree_sitter_";
@@ -547,7 +558,13 @@ void syntax_init() {
return;
}
+ // TODO: check that it exists
+ struct language l = lang_from_id("gitcommit");
+ lang_setting_set_default(&l, "grammar",
+ (struct setting_value){.type = Setting_String,
+ .string_value = "gitcommit"});
buffer_add_create_hook(create_parser, NULL);
+ lang_destroy(&l);
}
void syntax_teardown() {
diff --git a/src/main/main.c b/src/main/main.c
index c40f438..348ac1e 100644
--- a/src/main/main.c
+++ b/src/main/main.c
@@ -285,8 +285,8 @@ int main(int argc, char *argv[]) {
struct window *active_window = windows_get_active();
- /* Update the screen by flushing command lists collected from updating the
- * buffers.
+ /* Update the screen by flushing command lists collected
+ * from updating the buffers.
*/
TIMED_SCOPE_BEGIN(display);
display_begin_render(display);