Skip to content

Releases: forfudan/yumete

yumete 0.16.0

Choose a tag to compare

@forfudan forfudan released this 02 Nov 14:48

What is new in this release:

  • Every key is a command you can bind, in helix's config shape. Normal
    mode's keys, those inside its groups too (about 340), Insert mode, select
    mode, the command line, the pickers, the sidebars, a table's grid and the
    search panel each take bindings by helix's names ([keys.normal],
    [keys.insert], [keys.prompt], [keys.picker], [keys.sidebar],
    [keys.table]): a group as a table, a list of commands run in order,
    no_op to unbind. Space ? is the command palette, and the site lists
    every bindable command with its keys under each keymap. With
    [keys] inherit (on by default) your own keys follow you into the
    sidebars, the command line and the pickers.

  • The vim keymap is vim's, and yumete's additions are a flavour
    ([keys] flavor = "off" | "basic" | "full", basic by default): 28 items,
    each one feature, listed on the Key remapping page and switched one by one
    under [keys.flavor_items] or on a page of the settings panel. Under helix,
    helix's keys are helix's unless an item says otherwise; flavor = "off"
    leaves either keymap exactly as upstream has it.

  • Windows: split beside and below as many times as fit (C-w v,
    C-w s, :vsplit, :hsplit, C-w n), walk them with C-w h j k l,
    and ye -r brings the layout back.

  • Links between files: [[name]] resolved across the project, a links
    panel (:links) and a graph that opens in the browser (:links-export).

  • :hard-wrap re-fills text to a width without changing what it means:
    Markdown structure, Typst, code comments and docstrings, and Chinese with
    kinsoku.

  • ye --export html|typst|csv|tsv|pdf FILE writes a file out from the
    command line.

  • helix's pickers: changed files (Space g), symbols and diagnostics
    (Space s S d D), and Space R to replace with the clipboard.

  • The input method's annotation modes are back, as in yume: / while
    typing steps through the modes (multi, double, or your own under
    [ime.annotation_modes]); the annotations line up in a column, and a
    narrow window leaves out whole fields rather than cutting one.

  • The g group's jumps moved to keys free in vim and helix alike: gz
    jumps to a word by its first letters, gZ to a Chinese character by its
    pinyin, gx opens the web address under the cursor as vim's does, and
    gL follows any link.

Breaking:

  • :yume-chaifen is :yume-annotation, and [editor] show_chaifen is
    [ime] annotation = "double".
  • [keys] flavor = true is flavor = "full".
  • move_line_up and move_line_down now mean a whole line of the file, as in
    helix; j and k are move_visual_line_down and _up.
  • g?, Space t ? and gD's other window are gone; gD is the declaration.
  • Under helix, $ is left to helix (the line's end is gl).

The full list is in CHANGELOG.md.

yumete 0.15.0

Choose a tag to compare

@forfudan forfudan released this 30 Oct 16:15

What is new in this release:

  • The manual is now a website, https://yumete.shurufa.app/, rewritten shorter
    on helix's plan, with a book view at /book/. Its key, command and settings
    tables are generated by the editor itself. Release archives no longer carry
    docs/manual.md.

  • The interface follows the system language ([editor] language = "auto"):
    Traditional Chinese on zh_TW/zh_HK, Simplified on other zh, English
    elsewhere, with an English :tutor. Set language = "zh" to keep Traditional
    on an English system. Config errors are reported in that language too.

  • A live count on the status line and beside each heading in the outline,
    counting a Chinese character as one and a Latin word as one. :count and the
    daily target follow the same rule.

  • Export keeps the document's structure: lists, block quotes, footnotes, pipe
    tables and rules come out as HTML and Typst elements, and an English file is set
    as English.

  • For code: rename, references and code actions from the language server
    (gr, Space r, Space a); TypeScript, C++, Bash and Lua grammars; citation
    keys completed from the bibliography beside the file; an optional prose language
    server (harper-ls) for spelling; :earlier / :later; :git-show opens the
    committed draft beside the one you are writing; the change bar works outside git.

  • Invisible characters are marked: zero-width spaces, soft hyphens, bidi
    controls and odd spaces get an amber ground and are named on the status line.

  • Tables: a table file is described by a datapackage.json beside it (a
    Frictionless Data Package: fields, primaryKey, dialect), written only on
    :table-schema write. What you choose while reading — delimiter, header,
    hidden columns — is remembered for the file in yumete's own data directory.
    A GFM table without outer pipes is a table. Space t p/P put a copied
    column in; Space t v writes it over. Breaking: the old
    .yumete/tables/*.toml is no longer read; opening such a table says so,
    and :table-schema write makes the replacement. A plain .txt is no
    longer guessed to be a space-separated table.

  • Keys measured against helix and vim: vim's numbered registers, gi, 3.,
    2R, counted r and ~, d%, Visual endings, v…Esc; helix's A-d, A-J,
    2R, s/S/K always reading a regex. gq keeps paragraphs that open with the
    two-square indent apart.

  • Closing the terminal window no longer loses what was typed, and the session
    is written as files open and close, so -r after a crash brings them back.

The full list is in CHANGELOG.md.

yumete 0.14.0

Choose a tag to compare

@forfudan forfudan released this 29 Oct 13:39

What is new in this release:

  • Words you have already written are offered as you write. After four Latin
    letters a list of the words in every open file floats under the caret, those that
    start with what you typed first, in the case you typed, then fuzzy matches.
    Chinese words come up after two characters, and a simplified character finds the
    traditional words and the other way round. C-n asks at any length, and also
    offers the Chinese words that letters in full pinyin spell. In code they fill in
    where the language server has nothing. [editor] word_completion,
    [editor] completion_page_size (6 by default).

  • Brackets and quotes close themselves, as in helix: :auto-pairs off|basic|full,
    [editor] auto_pairs. basic, the default, pairs helix's six ASCII pairs; full
    also pairs the Chinese brackets and quotes, through the input method too.

  • Code completion narrows as you type without asking the server again, appears as
    soon as the server answers, and the signature stays up while you type the
    arguments.

  • The m group, as helix's: each step lists what it takes; it acts on every
    selection; counts step out pair by pair; any character is a pair (ms*, md$);
    mr shows the pair it found first; ms then Enter puts the selection on lines of
    its own; mi u is the clause, mi T/e/x the test, the entry and the HTML
    element, mi g the change. Warning: m after mi/ma/md is the nearest pair
    only; Markdown marks moved to k.

  • Several selections behave as in helix throughout: every key acts at every
    cursor, every cursor is drawn, and undo and redo bring the selections back.

  • Pages side by side: :view-pages-horizontal 1–4, the text running on from one
    page to the next. Warning: :view-bands is now :view-pages-vertical, and
    takes 1 to 4.

  • C-v under the vim keymap: blockwise visual mode, measured against vim.

  • The input method's candidate bar follows the theme. [panel] ink and
    [panel] paper are no longer used; a config that still has them keeps working.

  • The shell line has its own label, ghost and history; Tab completes programs and
    file names. :read <file>, as in helix and vim. -r and :resume bring back
    the look
    of the page as well as the files. [editor] remember = false keeps
    no memory of where you have been.

  • Smaller things: C-a and C-x follow helix under the helix keymap, dates and
    times included; path completion after a / or in a Markdown link; more look-alike
    pairs for the bracket keys; and a number of fixes.

# macOS / Linux
brew install forfudan/tap/yumete

# Windows
scoop bucket add forfudan https://github.com/forfudan/scoop-bucket
scoop install yumete

Or an archive below.

yumete 0.13.0

Choose a tag to compare

@forfudan forfudan released this 26 Oct 22:16

What is new in this release:

  • Warning: seven themes are gone: amber, kiln, firefly, mogao, cyanotype,
    complement and meridian, to keep the set at ten. A config that names one keeps
    the default theme, and the config check says so; :theme and Tab lists the ten.

  • Seven themes from the editors you already use: one-dark, github, monokai,
    dracula, tokyo-night, catppuccin and gruvbox. Each draws code and Markdown in
    its own colours, value for value. github, tokyo-night, catppuccin and gruvbox
    have a light and a dark half (:theme-mode); the other three are dark only. Their MIT
    notices are in licenses/.

  • Light moods space their greys by contrast. Every step between the text and the
    paper is the same ratio darker than the one before, so the selection, a table's
    cursor row and its column bands stand as far apart on a light page as on a dark one.
    Dark moods are unchanged.

  • :write-quit-all (:wqa, :xa), as in vim and helix: save every file that
    changed, then leave. A file that cannot be saved keeps the editor open. :wqa! writes
    over files changed outside and leaves anyway, keeping the recovery copy of a file it
    could not save.

  • :sb :sw :sp and :rb :rw :rp: search, or search and replace, in the
    open buffers, the working directory or the project.

  • The command menu lists commands only. A shortcut is shown in brackets beside its
    command, and typing it brings that command up.

  • Warning: :word-show is :word-mark, and takes off, color, ink, tint or
    line; on is gone. In the config, show_segmentation becomes word_mark = "off".

  • Smaller things: the line number of every line a selection touches is lit; a .jj
    or .svn checkout is a project; :w keeps a hard link; *.{md,txt} works in the
    search panel's fields; a footnote wrapped over several lines is drawn as one; a
    window too narrow for a sidebar draws none.

# macOS / Linux
brew install forfudan/tap/yumete

# Windows
scoop bucket add forfudan https://github.com/forfudan/scoop-bucket
scoop install yumete

Or an archive below.

yumete 0.12.0

Choose a tag to compare

@forfudan forfudan released this 24 Oct 13:09

What is new in this release:

  • ⚠️ Space t y and Space t p take a column one record at a time. In 0.11.0 a
    field holding a line break was taken as two halves, and Space t p then wrote every
    cell below it two rows down — with the row and column counts unchanged, so nothing
    said the table had gone wrong. A value with a line break now travels whole. If you
    pasted a column in 0.11.0, look at the rows under any two-line value.

  • t at the cell layer is Space t. The message a delimited file opens with tells you
    to press t o to go back to the source; in 0.11.0, t o searched the cell for an
    o instead. At the cell
    layer t now opens the table's group; inside a cell it is till, as before.

  • A double click goes into a cell, with the caret on the character clicked. A
    single click still selects the cell.

  • The grid scrolls by screen lines. A record whose cells wrap or hold line breaks
    counts for the lines it takes, so j into a tall record no longer throws it to the
    middle of the screen, and the caret's cell stays on screen whole. A column is as wide
    as the rows on screen need, not as a long value further down asks.

  • Under the helix keymap, f t F T run on over line breaks, as helix's own
    do. The vim keymap keeps vim's line-bound f.

  • Space y at the cell layer copies the cell, as y does, rather than its first
    character. The record panel shows a cell's value — no quotes, its line breaks kept.

# macOS / Linux
brew install forfudan/tap/yumete

# Windows
scoop bucket add forfudan https://github.com/forfudan/scoop-bucket
scoop install yumete

Or an archive below.

yumete 0.11.0

Choose a tag to compare

@forfudan forfudan released this 23 Oct 12:35

What is new in this release:

  • A table is a grid, and the cell is the unit. Open a .csv, a .tsv, a code
    table or a markdown table and hjkl walk cells rather than characters; Tab
    and S-Tab step on; the status line names the column you are in, 「列 3 [碼]」.
    c replaces this cell, d empties it and leaves the delimiter, y yanks it, x
    selects the whole record — every line of it, where a quoted field runs over several —
    and % selects the whole table rather than the chapter it sits in. A-d and A-c
    do the same without touching the register. v then h/l grows the selection by
    whole cells.

  • p puts in, R writes over. A row's cell count belongs to the table, so the
    only thing a grid can take in without changing shape is a whole record: p below,
    P above. A cell, a run of cells, a block copied out of a spreadsheet can only be
    written over what is there, and that key is R.

  • Two layers. The whole cell is the unit at the top; Enter goes down into the
    cell, where this is an ordinary editor over one field — j/k walk the cell's own
    rows, o and O open a line of the cell — and Esc comes back up. Esc never
    leaves the grid.

  • Three surfaces. 空格 t o the source, 空格 t b table keys over the file as
    it is written, 空格 t t the whole window with the delimiters drawn as rules
    (空格 t q hands it back). 空格 t w cycles how a cell too wide for its column is
    drawn. A stretch inside a chapter can be a table too, read where it lies and never
    rewritten.

  • 空格 t is the table's command group. Rows: t r t R t d, moved with
    t j t k. Columns: t y t p. t i the record panel, t H whether the first
    row is a heading, t e this table's schema in the other half. t / and t ?
    search column by column — t1/ column 1 only, t2-10? columns 2 to 10 — and
    :table-jump 木 goes to the row this table calls 木.

  • 空格 e and 空格 E browse one directory at a time, the way helix does it:
    the picker with a directory in it, ../ first, typing filters, Enter goes in.
    空格 e at the project root, 空格 E beside the file you are in.

  • 空格 空格 turns the page, 空格 退格 turns it back. A whole page, the same
    step as C-f/C-b; J/K are still the half-page pair.

  • The 拆分表 opens five times faster. A " is the only thing that can join two
    lines into one record, and the real 123,380-line table holds none — so the file is
    asked for a quote before every line is walked. Opening falls from 250 ms to 49 ms,
    and an Esc out of a cell from 50 ms to 1 ms.

  • A search no longer reads the file it is writing. ye --grep word . > out.txt
    found out.txt and read back what it had just written: one such command reached
    315 GB, silently. The walk asks fstat(1) for the identity behind stdout and says
    on stderr which file it did not look at.

  • ⚠️ :yank-on-delete is gone — that behaviour is now the single item in
    :keymap-yumete-flavor on|off ([keys] flavor), a short list of changes laid over
    helix or vim rather than a third keymap.

  • ⚠️ The sidebar is one command, :sidebar [off|explorer|buffers|outline|search|info].
    Each kind of panel has a fixed side. The [sidebar] config table is gone, and a
    config file that still holds one does not load at all — take it out before
    upgrading. files is now explorer.

  • ⚠️ 碼表 are no longer looked for in ~/.local/share/yumete. That layer sat
    first in the search order, so a table copied there silently covered 宇浩's own —
    which updates with the install. Name your own directory in [ime] data_dirs. The
    directory itself stays: word lists, the line each file was last left on, and
    sessions are still read there.

  • vim's sentences cross lines, its paragraphs break on blank lines, and a motion
    that cannot move fails — measured against vim rather than reasoned about.

  • One rule for twenty-three switches: bare reports, on/off sets, toggle
    flips. And --help, the 「did nothing」 notice and eleven retired command names now
    point at spellings the editor really has.

# macOS / Linux
brew install forfudan/tap/yumete

# Windows
scoop bucket add forfudan https://github.com/forfudan/scoop-bucket
scoop install yumete

Or an archive below.

yumete 0.10.0

Choose a tag to compare

@forfudan forfudan released this 18 Oct 11:36

What is new in this release:

  • The input method's keys are one group, 空格 z. ⚠️ 空格 空格 is gone — it
    is 空格 z z now. The letter under z is the letter Yume gives the same thing on
    its own ⌃⇧ chord, so a hand that knows one knows the other: m when a word
    commits, y prediction, i pick a scheme, n the next scheme, / the 拆分
    beside a candidate, 3–9 candidates on a page. The three settings with more
    than two values go one level down: z p the candidate bar, z e the preedit,
    z m the commit method.

  • 空格 o opens something you had open before. o f the files you have opened
    under this project, newest first; o g the same list with every project in it;
    o p the projects you have worked in — choosing one goes there and starts again
    with that project's files already open; o r takes up this directory's last
    session and adds it, closing nothing. As commands: :recent-files,
    :recent-files-global, :recent-projects, :resume.

  • ⚠️ --continue is now --resume, and -r is its short name. One word for one
    thing, and it is the word that still reads correctly inside a running editor.

  • :yume-where can be read. It no longer folds the list after four names: every
    file it found is on its own line, shown as the path it was found at, with the
    format stamp it carries (YTB20260828, YFL20260913). An install whose tables are
    a generation behind used to say only 「bad magic」; now the page says which
    generation, so a report about an editor that types no 拼音 can be one screenshot.

  • --shot waits for the file picker. --files PAT --open --shot photographed an
    empty list and a turning spinner on a tree the pipe walks in eleven milliseconds.

brew install forfudan/tap/yumete, or a tarball below.

yumete 0.9.0

Choose a tag to compare

@forfudan forfudan released this 17 Oct 20:55

What is new in this release:

  • Table mode is settled. A table is read at four levels, and every key now has
    one meaning at each of them. In the three drawn in the document (空格 t o,
    t b, t f) the separators are text: the caret stands on the wall between two
    cells and on the | --- | row. In the full window (t t) they do not exist —
    nothing lands on one, word motions stay inside their cell, g h/g l,
    Home/End are the cell's two ends, and 1G/2G count the rows the gutter
    draws.

  • Whole rows can be cut and pasted. x d takes a record, 3x d takes three,
    p puts them back. mi c takes the cell the cursor is in, so mi c c replaces
    a value outright. One rule decides all of it — an edit goes through if the table
    is still a table afterwards — and it shut five ways a single keystroke used to
    leave a file that no longer parsed as the table it was.

  • The candidate bar has three places. ⚠️ :yume-panel now takes box,
    bottom or inline, and :yume-preedit is renamed :yume-inline-preedit. The
    list is always on screen: a box beside the caret, a row at the foot of the
    window, or the line under the caret. So Tab opens the 字典 on the first press,
    the arrow keys walk the list, PageUp/PageDown page it — and none of the three
    asks for a 碼表 to be loaded first.

  • :git-diff shows both drafts. The paragraph before and the paragraph after,
    with the changed words brighter, instead of one line carrying both. An afternoon
    of rewriting no longer defeats it. 空格 x, 空格 X and :git-diff are the same
    diff drawn three ways.

  • A generated report is a clean read-only page. :git-diff, :diff,
    :check-punct and :count-progress no longer pop an info panel or open up the
    raw markup under the cursor, and a report about one file names it once.

  • The editor draws its own block cursor, so it is as wide as the character it
    stands on and shows up in a screenshot; a 字根 in a Private Use Area is two cells
    wide.

  • Smaller things. Typing a bare count opens a small panel of the keys where the
    number is not a repeat. Any word in a command's name finds it. C-p/C-n walk
    the history on the : and / prompts. gK is gone — joining upwards is k
    then J. A bare G does nothing under the helix keymap, as helix does.

yumete 0.8.0

Choose a tag to compare

@forfudan forfudan released this 13 Oct 14:06

本次更新加入了優化的豎排頁面方向鍵邏輯、Vim 預設、超大文件優化,以及全新的設置面板。

功能更新

  • 豎排頁面的 h j k l,現在默認按照視覺方向移動。 在豎排頁面中,j 和 k 分别向下、向上移動,h 則向左切換到下一縱。如果你更習慣按照文本的閲讀順序操作,也可以使用 :vertical-keys logical 切換到邏輯方向模式,或者在配置文件中設置 [editor] vertical_keys = "logical"。在這種模式下,h 和 l 分别向前、向後移動一個字符,j 和 k 則分别向下、向上移動一行。無論選擇哪種模式,gh、gj、gk、gl 的含義都保持不變:段落及其兩端没有固定的空間方向,不需要跟着一起變。

  • Vim 預設鍵位更符合 Vim 習慣。 在這個預設下,j 用於沿段落移動,gj 才用於沿列移動,恰好與 Helix 相反。h 和 l 默認會停止在段落的兩端,除非在 [editor] which_wrap 中另有設置。gh 和 gl 没有綁定動作:Vim 本來就用 0、^、$ 來定位行首和行尾,而 gh 在 Vim 中另有用途,用於進入選擇模式。此外,s 現在和 cw 一樣,只執行一次修改操作,因此按一次 u 就能完整撤銷。

  • 保存文件時,保留原有的換行風格,並添加換行符。 原文件使用 \r\n,保存時就繼續使用 \r\n;原文件使用 \n,保存時也不會擅自改變。空文件仍然是空文件。這與 Vim 和 Helix 的行爲一致。如果需要精確保留文件的原始字節,包括末尾没有換行符的情况,可以設置 [editor] insert_final_newline = false。

  • 搜索面板中的全部替換,現在總是在中央窗口中進行確認。 無論當前處理的是單個文件還是整本書,都不例外。替換完一個文件後,高亮位置也會自動跳到下一個文件的首個匹配項,而不是退回列表頂部。

  • 設置面板中的 q 不再直接關閉面板。 現在需要使用 :q 才能退出。考慮到 q 與 jk 一樣,都是容易誤觸的按鍵,而且設置面板本身並不需要輸入文本,過去誤按一次 q 就可能丢失尚未保存的修改。這個改動避免了不必要的數據損失。

問題修復與性能優化

  • 超大文件的打開内存佔用大幅降低。 以一個 3.91 GB 的 JSON 文件爲例,打開時的内存佔用從約 40 GB 降至 4.3 GB,耗時也從 19 秒縮短至 6.8 秒。這次優化主要來自四個方面:

    1. 對超過 16 MB 的代碼文件,不再構建語法樹。此前,語法解析會額外複製整份文本三次,造成巨大的内存開銷。
    2. 打開文件時,不再把整個文件複製進一個可能根本不會被讀取的請求中。
    3. 文件内容現在直接流式讀入 Rope,而不是先將整個文件一次性讀入内存。
    4. 判斷文件編碼時,只讀取開頭的幾行,不再複製整份文件進行猜測。
  • 修復了空行上的删除和粘貼行爲。 在空行上執行 dd 或 dw,現在也能正常處理,不再毫無反應。在空行上執行 p,内容會粘貼到該行之後,而不是意外地插入到下一行之後。此外,即使最後一行没有換行符,yy 也會正確地複製整行,隨後執行 p 時會另起一行粘貼。

  • 搜索面板中的單項替換,現在會跟隨高亮位置更新。 替換完成後,頁面會自動跳轉到新的高亮位置,同時保持文件列表原有的排序不變。

全新的設置面板

設置面板經過重新設計,現在會圍繞當前選中的配置項展示相關信息。

  • 配置值不再受右側欄寬度限制。 以前用於顯示配置來源的欄位最多隻有 18 個字符,導致配置值的顯示空間受到擠壓。現在,配置項列表下方新增了一個信息區域,集中展示該配置項的用途,以及三個配置層級:默認值、全局配置和項目配置。當前生效的層級會以金色標出;未設置的層級則顯示 unset。這樣,配置項的作用和它當前的實際設置就能一目瞭然。

  • 兩列寬度現在會根據實際内容動態調整。 對於較長的配置項名稱,例如「NORMAL模式下屏蔽系統版宇夢輸入法」,只要空間足够,就會完整顯示;空間不足時則以省略號提示,而不再像以前那樣直接截斷,讓人無從判斷後面還隱藏了什麽。

  • 設置面板的標題現在會明確指出修改目標。 編輯全局配置時,標題顯示爲 設置 [全局];編輯項目配置時,則顯示爲 設置 [本項目],旁邊還會標明對應的配置文件名。如果該文件尚不存在、保存時纔會創建,標題中還會顯示 +。這樣可以清楚地區分當前修改的是哪一份配置,避免誤改。

yumete 0.7.0

Choose a tag to compare

@forfudan forfudan released this 12 Oct 21:55

新

  1. Yumete 現在開始支持 Windows。Windows 不支持「單獨按 Shift」,所以中英切換請使用替身鍵 <C-^>。

  2. 空格 n 可以在任何時候顯示漢字信息。宇浩全息拆分表嵌入了軟件中,從而不需要系統安裝宇夢輸入法。一般情況下它會顯示宇浩全息拆分、讀音、字集與碼位。加載方案時,會再在上面額外顯示方案拆分、編碼、分節編碼。

  3. 發布的包自帶星陳精華版碼表,包括單字和簡詞。

  4. 竪排的 hjkl 將跟着行文方向移動。h/l 是本行的上一個字/下一個字,j/k 是上一行/下一行。它不再是螢幕上的左下上右,而是行文的邏輯。如果你想要使用視覺方向,可以用命令 :vertical-keys visual。注意,「上下左右」四個方向鍵永遠是視覺方向,不受此開關影響。

  5. 命令 :layout vertical 現寫作 :vertical,:layout horizontal 現寫作 :horizontal。

  6. 在 / 搜索時,可以使用 <A-j> 以匹配繁簡與拼音。/書 可以匹配「书」,/shuzhai 可以匹配「書齋」。

修

  1. 竪排時,一頁有多大,從前是按「剩下多少文字」來算,於是光標會自己往左漂移三四格。因此 zb 落在正中而不是左邊。現已修復。

  2. 「縦中横」的光標現在只標它位於的字母,不再將整組反白。

  3. 浮動窗口會自動避讓詞語,而不是只避讓光標所在格。一個漢字佔兩格,而百科詞條有好幾個字,先前會被浮動窗口遮蓋大半,現在不再發生。