Commit Graph

193 Commits

Author SHA1 Message Date
Jonatan Heyman
e1287d795e Remove AltGr from global hotkey setting on Windows
Did not work. On windows pressing Ctrl+Alt is the same as AltGr, so setting the hotkey to Ctrl+Alt+H will make the hotkey AltGr+H work.
2024-01-09 00:45:53 +01:00
Jonatan Heyman
f0927add74 Fix broken Settings dialog in browsers that doesn't support queryLocalFonts() 2024-01-09 00:35:33 +01:00
Jonatan Heyman
780a949a73 Fix so that Settings dialog work when browser doesn't support queryLocalFonts() 2024-01-09 00:35:33 +01:00
Jonatan Heyman
09539f9cd8 Remove invalid code (copy & paste error) 2024-01-09 00:35:33 +01:00
Jonatan Heyman
a56a267e06 Add support for changing font family and font size 2024-01-09 00:35:33 +01:00
Jonatan Heyman
2a2703d6d3 Check showInMenu checkbox when showInDock is deselected 2024-01-06 03:11:15 +01:00
Jonatan Heyman
46b2ee0522 Use correct OS terminology for Tray in settings label 2024-01-06 03:11:15 +01:00
Jonatan Heyman
554e04ea67 Fix test on linux/windows
Change Playwright reporter when running in Github action

Change default emacs meta key to Alt on non Linux and Windows

Always set emacsMetaKey to "alt" if not on Mac, since the option is only available on Mac
2024-01-06 01:51:07 +01:00
Jonatan Heyman
957b22c70e Refactor the way we handle copy/cut/paste in Emacs mode
Previously we listened for the key bindings for copy, cut and paste in the Electron main process, and triggered the event using copy(), paste() and cut() methods on win.webContent. Now this is fully handled within the renderer process using the window.navigator.clipboard API.

This will make it simpler to implement fully customizable key bindings.
2024-01-06 01:51:07 +01:00
Jonatan Heyman
1b0b2d55b1 Support setting preventDefault to false in keymapFromSpec spec 2024-01-06 01:51:07 +01:00
Jonatan Heyman
b9fd161551
Add functionality for selecting a custom path for the buffer file. (#130)
Automatically reload the buffer file (if one exists) when buffer path is changed.
Move code buffer related code from main/index.ts into buffer.js
2024-01-05 00:41:46 +01:00
Florian Labarre
d0d8f872a6
Add key bindings for inserting new blocks at the end/top of the buffer, as well as before the current block (#85)
* Add functionality to insert new block after the last block

- Update key bindings in `initial-content.ts` to include `Alt + Enter` for adding a new block after the last block.
- Implement `getLastNoteBlock` function in `block.js` to retrieve the last block in the note.
- Add `addNewBlockAfterLast` command in `commands.js` to handle the insertion of a new block after the last one.
- Integrate `addNewBlockAfterLast` command into the keymap in `keymap.js`.

* Add block insertion before/after current, before first and after last. Also, tests.

- Added `getFirstNoteBlock` in `block.js` for accessing the first text block.
- Implemented new functions in `commands.js` like `addNewBlockBeforeCurrent` and `addNewBlockBeforeFirst`.
- Updated `keymap.js` with new key bindings to facilitate block creation.
- Introduced `block-creation.spec.js` for testing the new block manipulation features.

* Fix visual bug when inserting new block at the top

* Update help text and Readme

* Fix wrong cursor position after inserting new blocks at the top of the buffer, when the previous first block's delimiter is long (e.g. Markdown)

* Make RegEx more generic

* Fix import

* Auto-generate the README.md and initial-content documentation

- Add a documentation generator
- Add an option to force the initial content to be erased with an env variable

* Add more specific tests

* Fix Mod key on Mac in test

---------

Co-authored-by: Jonatan Heyman <jonatan@heyman.info>
2024-01-04 16:11:26 +01:00
Hojun Lee
b80230454d
Add Groovy language support (#111) 2024-01-04 15:18:28 +01:00
Florian Labarre
0f3c714d56
CloseBrackets setting toggle (#102)
* Add a setting to toggle the auto bracket-closing of CodeMirror

* Move Auto-close brackets setting into new settings tab Editing

* Add tests for Auto-close bracket setting

---------

Co-authored-by: Jonatan Heyman <jonatan@heyman.info>
2024-01-04 14:52:41 +01:00
Jonatan Heyman
acb7ddf189
Add Settings to web app (#125)
* Add support for opening settings dialog in the webapp

* Add tests for settings dialog

* Hide stand-alone app specific settings in web app

* Remove debug log
2024-01-04 14:27:04 +01:00
Tanuj Pancholi
0ba5820cf4
Added Show in Dock Toggle and System Tray Feature (#90)
* Issue #62 Added Show in Dock, System Tray Toggle

* show dock toggle for mac only

* Add Open Heynote and Quit Heynote to Tray context menu

* Add Template Image as menu bar icon on MacOS

https://www.electronjs.org/docs/latest/api/native-image#template-image

* Use isMac, isWindows and isLinux for platform checks

* Add new tray/favicon

* Use favicon.ico as windows tray icon

* Show window on Tray double-click

* Open window when Tray is single clicked on non Mac platforms

* Fix indentation

* Remove unused import

---------

Co-authored-by: Jonatan Heyman <jonatan@heyman.info>
2024-01-01 20:02:30 +01:00
Jonatan Heyman
4274e6237b
Watch buffer file for changes, and automatically reload it if changed (#76)
* Implement Buffer class in main process that watches for changes to the file, and notifies the editor in the renderer process so that it can update the buffer.

* Add Editor.setReadOnly() method

* Add dummy onChangeCallback function

* Remove debug logging
2024-01-01 19:04:40 +01:00
Jonatan Heyman
0b6a1a49e8
Add support for specifying a custom format function within a math block (#99) 2023-12-31 10:43:42 +01:00
Laeyoung
b0f3bdd19e
Add Swift and Kotlin language support #10 (#96)
* Add Swift language support

* Add Kotlin language support
2023-12-31 10:07:21 +01:00
Jonatan Heyman
a1cad5b335
Don't display string quotes for math results that are strings. (#92)
Fix bug that could cause the cursor to be positioned immediately to the left of the widget (within its margin) making it look like there was a space character in the buffer when there was not.
Add tests for math blocks.

Fixes #21.
2023-12-29 10:47:02 +01:00
Jonatan Heyman
6022356478
Settings improvements (#88)
* Organize Settings in different tabs

* Add setting for turning off/on auto updates.

* Remove debug log

* Use a better variable name (systemTheme -> themeSetting)

* Store theme setting for Heynote webapp in local storage
2023-12-28 16:48:56 +01:00
Jonatan Heyman
77ed45cfa2 Remove old, unused file 2023-12-28 14:40:01 +01:00
Jonatan Heyman
eda4981e59
Fix issue with large buffers where block delimiters wouldn't be "atomic" when first starting Heynote, before the first edit (#81)
* Increase timeout for parsing the syntax tree when it's done for the first time

* Return the already parsed blocks in the blockState facet from Editor.getBlocks() instead of parsing the syntax tree again.
Make the block extension's getBlocks() method private.
2023-12-27 12:55:24 +01:00
Jonatan Heyman
d02075f343 Rename function 2023-12-27 01:03:54 +01:00
Jonatan Heyman
cb7b071517 Add box-shadow to Settings dialog 2023-12-27 00:15:57 +01:00
Jonatan Heyman
60caac45ab Add TOML support 2023-12-26 01:31:36 +01:00
Espen Jacobsson
475f3465fe
Add TypeScript, JSX and TSX language support (#64)
* Add language support for TypeScript

* Add formatter for TypeScript

* Add language autodetection for TypeScript

* Add TypeScript to list of featured languages

* Add language support for JSX and TSX

* Add JSX and TSX to list of featured languages

* Remove guesslang token from JSX and TSX

* Fix syntax error

---------

Co-authored-by: Jonatan Heyman <jonatan@heyman.info>
2023-12-26 00:47:28 +01:00
Jonatan Heyman
bb511b868b
Add support for more languages (#69)
* Contain language selection dialog in an element that can be scrolled, and automatically scroll it if needed when navigating the list with arrow keys

* Add support for more languages:

Clojure, Erlang, Golang, Lezer, Ruby, Shell, YAML

* Move prettier auto format settings for languages into Language() class

* Remove invalid import

* Fix bug that could cause auto formatting to fail for the last block.
Add tests for language auto detection and formatting.

* Fix broken tests

* Fix language auto detection on Safari Webkit which was broken

* Remove unnecessary wait time
2023-12-26 00:27:43 +01:00
Jonatan Heyman
1006fd4580
Implement tests using Playwright (#68)
* Set up Playwright and add first test

* Add npm run commands for running tests
Run tests in github actions

* Fix tests on non Mac environments

* Add method to HeynoteEditor class to set the buffer content

* Add more tests

* Set Github action job name
2023-12-25 17:41:15 +01:00
Jonatan Heyman
079fa666d6
Implement web version of Heynote (#63)
* Move windows.darkMode -> window.heynote.themeMode

* Only add UpdateStatusItem if window.heynote.autoUpdate is set

* Update Vite

* Implement web version of Heynote.

Add a child vite project in ./webapp/ that is Heynote running within a browser. Imports almost all code from ../src/ and only adds a thin bridge that corresponds to the API between the Electron main process and the app code.

* Remove commented out tag

* Specify publicDir in vite config, instead of using a symlink

* Add webapp_dev npm command to package.json

* Add npm run command: webapp:build

* Add resolve alias '@' that points to project root.
Move assets file from public to assets in order to let Vite/Rollup handle bundling.
2023-12-25 14:18:44 +01:00
Jonatan Heyman
bbb6387581 Make sure saveFunction() is called when the page is unloaded 2023-12-24 22:21:41 +01:00
Ahmed M. Atia
96440b28ba
Add syntax highlighting support for C# (#55)
* feat: add syntax highlighting support for C#

* update README - add C# sysntac highlighting support

* restore original indentation / formatting

* Fix syntax error in Lezer grammar

* Fix language auto detection of C#

---------

Co-authored-by: Jonatan Heyman <jonatan@heyman.info>
2023-12-24 10:59:24 +01:00
Jonatan Heyman
5d7af5031d Improve settings dialog
* Fix issue where it would overflow the viewport if using high enough zoom
* Some minor design improvements
2023-12-24 00:23:07 +01:00
Jonatan Heyman
bb9a39fe6e Fix bug where language auto detection will not trigger in some cases
E.g. if you pasted a piece of javascript, selected the whole block and deleted the text (which will change back the default language to Plaintext (auto)) and then paste the same javascript code again.
2023-12-24 00:13:17 +01:00
Jonatan Heyman
9ee25ab758 Tweak body background in light mode 2023-12-22 20:09:39 +01:00
Jonatan Heyman
1b4b22eb62 Set dark body background in dark mode to prevent white flicker when resizing 2023-12-22 20:07:42 +01:00
Jonatan Heyman
f8db397e0c Show keyboard shortcuts in status bar tooltips 2023-12-21 19:26:02 +01:00
Jonatan Heyman
6086976dc4 Update prettier version and fix formatting bug.
Prettier currently has a bug that causes it's formatWithCursor() to be extremely slow in some cases. In Heynote, whenever you pasted a large JSON chunk and auto formatted it, with the cursor at the beginning or the start of the block, this would trigger that bug. This commit introduces a work around by using format() if the cursor is at the beginning or the end of the block.

Update to latest version of Prettier.
2023-12-21 03:09:53 +01:00
Jonatan Heyman
198ce3066b Add global hotkey functionality 2023-12-10 22:59:42 +01:00
Jonatan Heyman
13afe62e11 Add global SASS include for all Vue components 2023-12-10 22:58:33 +01:00
Jonatan Heyman
a88f9cc49b Update dependency versions
Explicitly add "@codemirror/*" packages instead of relying on the "codemirror" sample package.
Update to newer versions for implicit dependencies in in package-lock.json.

This should fix errors in development mode on Windows.
2023-12-10 12:18:43 +01:00
Jonatan Heyman
cfb95540df Add selection size to status bar when there are selections 2023-12-08 00:28:26 +01:00
Jonatan Heyman
a5068c0913 Fix bug when pressing C-a in an empty block and then pasting text
Before this fix it would cause part of the block separator to be overwritten causing the block separation to break.
2023-12-07 19:07:35 +01:00
Jonatan Heyman
08a28d037e Remove unused imports 2023-12-07 18:55:41 +01:00
Jonatan Heyman
6e9195c835 Fix auto updating beta versions by setting autoUpdater.allowPrerelease instead of autoUpdater.channel 2023-12-07 00:42:53 +01:00
Jonatan Heyman
0c55dcecb0 Add release channels (Stable and Beta) 2023-12-06 13:31:47 +01:00
Jonatan Heyman
146937a78a Upgrade to latest versions of Codemirror and Lezer packages 2023-12-06 11:33:55 +01:00
Jonatan Heyman
6f53b61bb0 Use guesslang-js for language auto detection instead of Highlight.js
Should (hopefully) reduce false positives.
2023-12-06 02:52:51 +01:00
Jonatan Heyman
c049fc5f2a Fix cursor movement using Ctrl-left/right with Emacs key bindings in "mark mode" 2023-12-05 17:45:51 +01:00
Jonatan Heyman
6480d214ed Turn off auto completion 2023-07-12 00:26:28 +02:00
Jonatan Heyman
a415247e48 Support currency conversions with lower case currency codes
(except for the currency CUP since it clashes with the measurement unit "cup")
2023-07-04 14:12:17 +02:00
Jonatan Heyman
0c567384ee Refresh Math blocks when new exchange rates are loaded 2023-07-04 14:01:59 +02:00
Jonatan Heyman
a4e9ce6893 Add currency conversion support to Math blocks 2023-03-20 11:09:56 +01:00
Jonatan Heyman
4a042ca5da Fix so that links are clickable in Markdown mode.
Do not include closing parentheses in link regex.
2023-03-14 13:46:34 +01:00
Jonatan Heyman
1c78aca88a Add functionality for creating new cursors using Cmd/Ctrl + Alt + Up/Down 2023-03-13 17:22:27 +01:00
Jonatan Heyman
0bbdb262e6 Add Emacs set mark mode (C-Space) 2023-03-12 18:22:16 +01:00
Jonatan Heyman
1292c6ced3 Fix typo causing update icon to spin indefinitely in case of a network error 2023-03-12 11:25:02 +01:00
Jonatan Heyman
95e1a76eca Fix Ctrl + click on links in Windows 2023-03-08 13:56:24 +01:00
Jonatan Heyman
c3e0539601 Underline https:// and http:// links, and make C+Click open them 2023-03-08 13:07:58 +01:00
Jonatan Heyman
87a54443b9 Auto update fixes:
Fix rotated download icon bug
Fix bug where update icon could keep spinning forever if there was a network error when checking for updates.
2023-03-08 10:51:30 +01:00
Jonatan Heyman
6bc3e09826 Improve Markdown mode.
Replace [ ] and [x] with checkboxes in Markdown todo lists.
Add Markdown LanguageSupport extension in order to automatically add/remove new list items when pressing enter/backspace in a list in Markdown mode.
2023-03-07 22:32:50 +01:00
Jonatan Heyman
b26381164a Improve language auto detection
If content starts and ends with { & } or [ & ], we first try to parse is as JSON. If that succeeds, we'll assume it's JSON.

Increase the highlightjs relevance threshold. 

Hopefully this will result in fewer false positives that have been observed (e.g. for CSS and JSON).
2023-03-07 15:01:41 +01:00
Jonatan Heyman
ef5955feeb Fix seamless start/stop of update icon's spinning animation.
Bump version.
2023-03-07 02:24:08 +01:00
Jonatan Heyman
93bf1e9036 Improve auto update
Add titles to status bar buttons
Bump version to 1.0.7
2023-03-07 01:45:23 +01:00
Jonatan Heyman
1df255032c Check for updates once every 24 hours.
Bump version.
2023-03-06 10:24:23 +01:00
Jonatan Heyman
7ce91016d6 Add auto update support 2023-03-06 01:30:37 +01:00
Jonatan Heyman
4c44f32542 Use fixed notation for math result values when they are copied to clipboard 2023-03-04 15:46:08 +01:00
Jonatan Heyman
51b2be3740 Add copy to clipboard when clicking on a math result 2023-03-04 00:41:39 +01:00
Jonatan Heyman
facd782984 Set default font for input and button elements 2023-03-03 16:14:33 +01:00
Jonatan Heyman
84812e892c Pixel push: dim down search panel's close button 2023-03-03 16:02:01 +01:00
Jonatan Heyman
37d1984f1f Style search panel 2023-03-03 15:56:48 +01:00
Jonatan Heyman
e6a6561395 Prevent search and replace from changing block deklimiters 2023-03-03 15:55:50 +01:00
Jonatan Heyman
d59d8fd7e7 Pixel push: Increase box shadow for language selector in dark mode 2023-03-03 15:54:55 +01:00
Jonatan Heyman
17a52683e9 Fix so that C-a (select all) in empty blocks doesn't select the whole buffer on first press 2023-03-03 13:31:15 +01:00
Jonatan Heyman
4d98d9c861 Change so that Alt+Click adds new cursor (instead of C+Click) 2023-03-03 13:29:50 +01:00
Jonatan Heyman
85a5bc95a7 Change key binding for format code 2023-03-03 13:28:51 +01:00
Jonatan Heyman
03d0195eb3 Catch syntax errors when trying to format code 2023-03-03 13:28:18 +01:00
Jonatan Heyman
2c1e23c9f4 Use selection.head when instead of to/from when determining active block, and formatting code 2023-03-03 01:49:50 +01:00
Jonatan Heyman
e1fe26b881 Add format block button to status bar, when a supported block is active 2023-03-03 01:40:24 +01:00
Jonatan Heyman
f3c5a49fbf Add ability to format code for JSON, JS, CSS, HTML and Markdown blocks 2023-03-03 00:57:33 +01:00
Jonatan Heyman
3aa9e5d512 Override default highlighting style to remove ugly underline on heading tags 2023-03-03 00:56:06 +01:00
Jonatan Heyman
0d7c04991f Use slightly lighter text for math expression results 2023-03-02 23:20:14 +01:00
Jonatan Heyman
686dc77e78 Increase number of digits needed before shortening numbers such as 3.7e+9 2023-03-02 21:00:00 +01:00
Jonatan Heyman
4d12404d77 Add support for Math blocks 2023-03-02 18:40:44 +01:00
Jonatan Heyman
bd28472175 Fix so that status bar blocks have the full height of the status bar (visible when hovered) 2023-02-12 13:11:50 +01:00
Jonatan Heyman
5f98323586 Add setting for turning on/off line number gutters and fold gutters 2023-01-27 17:18:31 +01:00
Jonatan Heyman
1fe63860a8 Add more bindings to Emacs style keybindings 2023-01-27 14:36:24 +01:00
Jonatan Heyman
97d4f6294a Add ability to change Emacs meta key on Mac 2023-01-25 10:11:51 +01:00
Jonatan Heyman
83356275dd Simplify keymap definitions.
Bind Ctrl-Left/Right keys for Emacs keybinding.
2023-01-24 18:55:06 +01:00
Jonatan Heyman
b44b47991b Change getActiveNoteBlock and getNoteBlockFromPos so that they return a block even if the cursor is hidden within a separator. Shouldn't happen, but this should make it more robust. 2023-01-24 18:04:07 +01:00
Jonatan Heyman
428a3172ab When moving all lines from the last block upwards, make sure we don't create a block with empty block content (which will create an invalid syntax tree)
#windows-build
2023-01-24 16:34:31 +01:00
Jonatan Heyman
a5d47d81f6 Add commands for selecting next/previous block/paragraph 2023-01-24 16:16:54 +01:00
Jonatan Heyman
ed13baf4e4 Make the insertNewBlockAtCursor use the same block language/auto setting as the block that is being split 2023-01-23 17:38:36 +01:00
Jonatan Heyman
9987c01207 Fix issue where it was possible to create an invalid block syntax by moving lines 2023-01-22 14:28:28 +01:00
Jonatan Heyman
35f4bed7c1 Don't emit cursorChange if we have a valid line 2023-01-22 14:27:09 +01:00
Jonatan Heyman
305ec124ac Continuously render the debug syntax tree 2023-01-21 16:01:59 +01:00
Jonatan Heyman
99a6d0fcc7 Copy moveLineUp/moveLineDown command from Codemirror source into move-lines.js. Plan is to modify them to fix issue when moving the only line from a a single line block. When that happens it results in the following text data in the buffer:
∞∞∞text
∞∞∞text

And the separator needs a newline on both sides to be valid
2023-01-21 16:01:27 +01:00
Jonatan Heyman
4b4e113aa5 Att next/previous paragraph commands 2023-01-20 17:55:02 +01:00
Jonatan Heyman
924fd4b226 Replace block separators with "\n\n" when copying text.
Add Settings dialog.
Started implementing Emacs-like keymap.
2023-01-20 15:33:26 +01:00
Jonatan Heyman
6c1e89c5b0 Don't emit event if we did not get an active block (can happen with extremely large blocks, most likely because of slow syntax tree parsing) 2023-01-19 23:41:39 +01:00