8 Commits

Author SHA1 Message Date
dd2c888766 update man page
Some checks failed
Release / Bump Homebrew formula (push) Has been cancelled
2025-11-22 01:48:31 -08:00
2967998893 Update README
Some checks failed
Release / Bump Homebrew formula (push) Has been cancelled
2025-11-22 01:45:59 -08:00
a400cdf5ad update README.
Some checks failed
Release / Bump Homebrew formula (push) Has been cancelled
2025-11-22 01:44:41 -08:00
c8a43fb328 typo in release 2025-11-22 01:41:14 -08:00
3ea7c31cba update workflow 2025-11-22 01:39:45 -08:00
115091e517 add deployment workflow
Some checks failed
Release / GoReleaser (push) Has been cancelled
Release / Bump Homebrew formula (push) Has been cancelled
2025-11-22 01:32:58 -08:00
1b9b618e3a backout 2025-11-22 01:27:44 -08:00
527759de09 broke it 2025-11-22 01:18:04 -08:00
6 changed files with 113 additions and 15 deletions

37
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,37 @@
name: Release
on:
push:
tags:
- 'v*'
workflow_dispatch: {}
permissions:
contents: write
jobs:
homebrew:
name: Bump Homebrew formula
# Skip this job in case of git pushes to prerelease tags
if: ${{ github.event_name != 'push' || !contains(github.ref, '-') }}
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Extract version
id: extract-version
run: |
echo "tag-name=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
- uses: mislav/bump-homebrew-formula-action@v3
with:
formula-name: ke
formula-path: Formula/ke.rb
homebrew-tap: kisom/homebrew-tap
base-branch: master
commit-message: |
{{formulaName}} {{version}}
Created by https://github.com/mislav/bump-homebrew-formula-action
env:
COMMITTER_TOKEN: ${{ secrets.GH_CPAT }}

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*.log
build

View File

@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.15)
project(ke C) # Specify C language explicitly
set(CMAKE_C_STANDARD 99)
set(KE_VERSION "1.0.0")
set(KE_VERSION "1.0.4")
set(CMAKE_C_FLAGS "-Wall -Wextra -pedantic -Wshadow -Werror -std=c99 -g")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_DEFAULT_SOURCE -D_XOPEN_SOURCE")

View File

@@ -6,4 +6,9 @@ used fairly often.
See the man page for more info.
It should be available via homebrew, even:
brew tap kisom/homebrew-tap
brew install ke
Released under an ISC license.

2
ke.1
View File

@@ -24,8 +24,6 @@ saving a file can be done with either C-k s or C-k C-s.
.Bl -tag -width xxxxxxxxxxxx -offset indent
.It C-k BACKSPACE
Delete from the cursor to the beginning of the line.
.It C-k C-d
Delete the current row.
.It C-k d
Delete from the cursor to the end of the line.
.It C-k e

80
main.c
View File

@@ -44,6 +44,39 @@
#define TAB_STOP 8
#define INITIAL_BUFSIZE 64
int
next_power_of_2(int n)
{
n--;
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return n+1;
}
/*
* cap_growth is a generalized strategy to growing buffers.
*/
int
cap_growth(int cap, int sz)
{
if (cap == 0) {
return INITIAL_BUFSIZE;
}
while (sz < cap) {
cap = next_power_of_2(cap);
}
return cap;
}
/*
* Function and struct declarations.
*/
@@ -67,6 +100,8 @@ struct erow {
int size;
int rsize;
int cap;
};
char nibble_to_hex(char c);
@@ -181,7 +216,7 @@ init_editor(void)
editor.rows = 0;
if (get_winsz(&editor.rows, &editor.cols) == -1) {
die("can't get window size - is this an interactive terminal?");
// die("can't get window size - is this an interactive terminal?");
}
editor.rows--; /* status bar */
editor.rows--; /* message line */
@@ -232,14 +267,14 @@ ab_append(struct abuf *buf, const char *s, int len)
assert((delta >= 0 && buf->len < INT_MAX - delta));
sz = buf->len + delta;
if (sz >= buf->cap) {
if (sz > buf->cap) {
if (buf->cap == 0) {
buf->cap = 1;
buf->cap = 64;
}
while (sz > buf->cap) {
if (buf->cap < INT_MAX/2) {
buf->cap *= INT_MAX;
while (sz < buf->cap) {
if (buf->cap > INT_MAX/2) {
buf->cap = INT_MAX;
break;
}
buf->cap *= 2;
@@ -373,8 +408,9 @@ erow_init(struct erow *row, int len)
row->rsize = 0;
row->render = NULL;
row->line = NULL;
row->cap = cap_growth(0, len);
row->line = malloc(len+1);
row->line = malloc(row->cap);
assert(row->line != NULL);
if (row->line == NULL) {
return -1;
@@ -513,6 +549,9 @@ row_append_row(struct erow *row, char *s, int len)
void
row_insert_ch(struct erow *row, int at, int16_t c)
{
int ncap = 0;
char *nline = NULL;
/*
* row_insert_ch just concerns itself with how to update a row.
*/
@@ -521,6 +560,19 @@ row_insert_ch(struct erow *row, int at, int16_t c)
}
assert(c > 0);
if (row->size == row->cap) {
ncap = cap_growth(row->cap, row->size+1);
nline = realloc(row->line, ncap);
assert(nline != NULL);
if (nline == NULL) {
return;
}
row->cap = ncap;
row->line = nline;
}
row->line = realloc(row->line, row->size+2);
assert(row->line != NULL);
memmove(&row->line[at+1], &row->line[at], row->size - at + 1);
@@ -1368,7 +1420,6 @@ draw_rows(struct abuf *ab)
ab_append(ab, "|", 1);
}
} else {
erow_update(&editor.row[filerow]);
buflen = editor.row[filerow].rsize - editor.coloffs;
if (buflen < 0) {
buflen = 0;
@@ -1377,6 +1428,7 @@ draw_rows(struct abuf *ab)
if (buflen > editor.cols) {
buflen = editor.cols;
}
ab_append(ab, editor.row[filerow].render+editor.coloffs,
buflen);
}
@@ -1519,10 +1571,10 @@ editor_set_status(const char *fmt, ...)
void
loop(void)
{
int up = 1; /* update on the first runthrough */
display_refresh();
while (1) {
if (up) display_refresh();
int update = 0;
/*
* ke should only refresh the display if it has received keyboard
@@ -1530,8 +1582,12 @@ loop(void)
* handling pastes without massive screen flicker.
*
*/
if ((up = process_keypress()) != 0) {
while (process_keypress()) ;
while (process_keypress()) {
update = 1;
}
if (update) {
display_refresh();
}
}
}