Commit Graph

291 Commits

Author SHA1 Message Date
jgmdev 1a51dad23c Added Doc:on_close() for plugins 2021-06-20 00:13:07 -04:00
Francesco Abbate 1ad4289e76 Do not try to update topdir folder in treeview
If the directory expanded is a project's top directory
do not attempt to update its content.

Fix again issue #275
2021-06-17 19:07:32 +02:00
Francesco 98164f6d4f
Integrate mkdirp function in common module (#265)
Move the function mkdirp into common to be generally available.

Use the new common.mkdirp from create_user_directory() from
core/init.lua replacing previous parent directory creation code
within the function.

The previous mkdirp function did not work on Windows where
absolute paths starts with a drive letter. The code from
create_user_directory() did not have this problem but was wrong
in the way it was creating the nested directories.

The new implementation in common.mkdirp fix both problems.
2021-06-13 19:50:42 +02:00
Francesco Abbate 752ecd5ece Group mouse move events from C API function
Groups together consecutive mouse move events like done in core.step()
lua function but on the C side.

It does not introduce any meaningful speedup but it theory is more efficient and
simplifies the Lua code.

The simplification of the Lua code alone is enough to justify this change?
2021-06-11 15:00:18 +02:00
Francesco b046afccf9
Scale fonts context menu (#246)
* Retrieve scale plugin from lite-plugins

* New implementation of scale plugin and font C API

Introduce two new C API functions, renderer.font.get_size and set_size
respectively to get the font size and to set the size to a new value.

Using these functions we don't need to know the name of the font but
we can just change their size.

Adapt the scale plugin to use the new C API function with minor adaptations
in the logic.

Use smaller step to scale fonts.

Rename font_desc_free function, previous name was misleading as only the cached
resources are freed.

* Add contextmenu plugin from takase

From https://github.com/takase1121/lite-contextmenu

Adapted to show font scaling commands and find/replace commands.

i#	testing.lua

* Fix the cursor flickering with contextmenu

To avoid flickering of the cursor when using the context menu
we add a new function `core.request_cursor` that just take note
of the cursor requested.

The cursor will be actually changed only in root_view:draw() method
only when all the drawing operations are done. This means the cursor
will be changed only once per frame and only the most recent cursor
change request will take effect.

* Remove unneeded scale plugin return functions
2021-06-03 22:49:37 +02:00
Adam 248d70a8ca
Add PCRE to support regular expressions
Use regular expressions instead of Lua patterns for find and replace editor commands.

Syntax files can now use regex or Lua patterns as before keeping backward compatibility for plugins.
2021-06-02 21:27:00 +02:00
lqdev ea5e9b0ce5 fixed broken Doc:save monkeypatch 2021-06-02 19:11:59 +02:00
Francesco Abbate 4e93eabbac Deprecate core.add_save_hook to override Doc:save
In order to stay simple and closer to the lite's design principles we
deprecate the core.add_save_hook function and the related mechanism.
Instead we now directly override the Doc:save() method.

The method is already overrided from core.init to add the automatic
reloading of style when user's module is saved.

The cleanup is related to the discussion in issue #229.
2021-05-31 09:41:37 +02:00
Francesco Abbate 6d044224c1 Starts maximized only if it was in previous session 2021-05-28 16:35:25 +02:00
redtide 818a7abb0a Avoid to restore window size when maximized (#226) 2021-05-28 08:51:39 +02:00
Francesco Abbate ad7d17caca Use FiraSans regular for UI 2021-05-27 13:49:33 +02:00
Janis-Leuenberger 1394c53dbc
Improve user feedback for big directories (#223) 2021-05-27 08:28:58 +02:00
Francesco Abbate 10fde6e264 Implement lazy loading of directories
When the number of files in a project directory is above the max
limit switch back to a mechanism to read directory content only
when the corresponding folder is expanded in the treeview.

When the command core:find-file is invoked the command core:open-file
is executed instead because the complete list of the project's
files is not available.

When a project search is done we search through all the files within
the project dir without indexing them.

Address issues #217 #203 #183.
2021-05-26 14:22:10 +02:00
Francesco Abbate 739763675e Check the real absolute path of user module
Close issue #212
2021-05-22 23:32:45 +02:00
Francesco Abbate 217360ed31 Switch to FiraSans and JetBrainsMono fonts 2021-05-22 15:09:54 +02:00
Francesco Abbate 5cef643e02 Introduce new plugin versioning tag mod-version
New plugins should use the version tag:

-- mod-version: 1

The old version tag "-- lite-xl 1.16" will be considerer equivalent
to mod-version 1.
2021-05-05 22:38:29 +02:00
Adam 135dfa6f03
Add a more explicit message in log and config.max_project_files
* Added a line to avoid people going down the rabbit hole that I did.

* Further explanatory text.
2021-05-05 16:00:17 +02:00
Francesco Abbate 1a05e00fdd Fix detection of user file module
Close #54
2021-05-01 19:27:29 +02:00
Francesco Abbate e6d88909a8 Fix log message about project dir 2021-05-01 19:27:29 +02:00
Francesco Abbate 5766329313 Fix filename problem
Close #163
2021-05-01 19:27:29 +02:00
lqdev c859498d68 check version in init.lua within directory plugins 2021-04-25 19:14:36 +02:00
lqdev 34e94bb8aa fixed versioning, again 2021-04-25 12:35:00 +02:00
lqdev 5e8e2f54b5 directories should not be loaded 2021-04-25 11:45:08 +02:00
Francesco Abbate 8bcace1d59 Merge remote-tracking branch 'origin/border-less-window' 2021-04-21 08:42:57 +02:00
Francesco Abbate 032018ec48 More aggressive wait_event timeout when window has focus
Adopt a time based logic for cursor blinking and wait for event

when idle with a timeout equal to blink remaining time.
2021-04-17 14:57:28 -07:00
Francesco Abbate f7375924ab Make non-borderless mode work 2021-04-12 19:05:30 +02:00
Francesco Abbate 4de97d51fb Avoid always calling system.get_window_mode 2021-04-12 13:31:32 +02:00
Francesco Abbate 8ad87d77da Add correct hit-test information and menu icon 2021-04-11 15:08:25 +02:00
Francesco Abbate 7531a0ddc8 Preliminary implementation of border-less mode
Not yet functional but most ingredients are there
2021-04-10 19:35:57 +02:00
Francesco Abbate f250adcda1 Implement multi-lines for NagView
Related to issue #147
2021-04-07 23:46:45 +02:00
Francesco Abbate 119f406d3c Add NagView message for refused plugins 2021-04-07 09:42:19 +02:00
Francesco Abbate d7cc1f9f9d Add plugin verification by version tag 2021-04-06 17:50:46 +02:00
Takase 63b9cf223e
NagView improvements (#136)
Implement keyboard commands for the NagView.
2021-04-04 16:11:47 +02:00
Francesco Abbate 3b040aabc7 Implement unicode character replacements
Useful to draw whitespaces with alternate characters and colors
without slowing down the text rendering.

A new API is implemented. A renderer.replacements object can be created
to list the replacements.

In turns the function renderer.draw_text and draw_text_subpixel now accept
two optional arguments for replacements.
2021-04-01 18:05:59 +02:00
Francesco Abbate 7f50df6a2f Ensure plugin within a directory are loaded
Close #118
2021-03-20 16:34:00 +01:00
Takase c0ad86de8c
integrate NagView 2021-03-13 12:57:52 +01:00
Francesco Abbate 23a053e1ee Ensure error and stack trace are written to stdout
To address https://github.com/franko/lite-xl/issues/87
2021-03-07 09:48:44 +01:00
Francesco Abbate 09332fe242 Fix problem with fatal error message
Previous implementation was broken.

Ensure the error file is always written and write its location in the error message
2021-03-05 23:46:41 +01:00
Francesco Abbate a4bc8986ff Implement fatal error message box
Used when lite-xl fails at startup
2021-03-05 10:33:50 +01:00
Francesco Abbate 3506ff47fc Fix problem with plugin loading
Introduced with PR https://github.com/franko/lite-xl/pull/73
2021-03-05 07:22:56 +01:00
liquidev 2e1a6ad5d1
Fix #30 – user plugins take priority over built-in plugins (#73)
user plugins should take priority over stock plugins
2021-03-03 12:20:22 +01:00
Francesco Abbate 8883685eea Fix font size in initial user's config 2021-03-01 09:48:12 +01:00
Francesco Abbate a35ef764a0 Show Lite XL instead of lite in window's title 2021-02-28 18:55:05 +01:00
Francesco Abbate 0dc18de6bc Add information about icon_big_font in initial user's configuration 2021-02-27 12:13:51 +01:00
Francesco Abbate 4f2e38d41f Make code and ui font smaller at 12 2021-02-19 16:23:19 +01:00
Francesco Abbate 688dc1a7b8 Do not log every plugin load
Since we now load the user's module before the plugins\nwe avoid to log a line for each loaded plugin to not hide\nan eventual error in the user module
2021-02-19 16:12:56 +01:00
Francesco Abbate 68d9794926 Adjust default code font size
The previous value looks too big in hidpi screens
2021-02-19 16:10:57 +01:00
Francesco Abbate 76b463bd11 Create empty fonts directory in USERDIR 2021-02-19 16:10:02 +01:00
Francesco Abbate 6353fde609 Move user module loading before plugins
Otherwise the configuration to disable a plugin does not take effect.
2021-02-19 10:08:03 +01:00
Francesco Abbate 114f6b2481 Do not print error on standard output
Delayed error when passing invalid directory argument.
2021-02-19 09:29:46 +01:00
Francesco Abbate ba68d6db24 Improve error handling for directory arguments 2021-02-19 00:15:55 +01:00
Francesco Abbate a2c4fdf649 Normalize global PATH from core.init 2021-02-18 09:02:57 +01:00
Francesco Abbate de1afb3391 Add full filename path in window's title
Optimal implementation to limite computations in core.step.
2021-02-18 00:26:19 +01:00
Francesco Abbate 59fbf9cfc0 Merge branch 'master' into dev 2021-02-17 23:57:02 +01:00
Francesco Abbate 9b27180267 Use doc on_save hooks to reload user module 2021-02-17 20:10:39 +01:00
bud 3693556958 FIX: get DocView in init instead of step, remove option for window title format' 2021-02-16 19:12:56 +01:00
bud dd30725d84 FIX: before setting full path to window title, make sure activeView is DocView 2021-02-15 22:38:29 +01:00
bud 436446dd9a ADD: in core.step() show full path if view is a document and config.full_path_in_window_title is true 2021-02-15 21:05:06 +01:00
Francesco Abbate b836c2e1e6 Implement proper layout of toolbar 2021-02-15 00:36:39 +01:00
Francesco Abbate 2765cbd92b Show a dummy toolbar
Does not do anything for the moment
2021-02-12 15:54:11 +01:00
Francesco Abbate f482ea318a Makes resizable attribute explicit in Node:split() 2021-02-11 16:12:21 +01:00
Francesco Abbate a8c810d801 Merge remote-tracking branch 'origin/master' into dev 2021-02-09 18:39:39 +01:00
Francesco Abbate 3d8cf22933 Fix error with previous commit 2021-02-05 15:36:48 +01:00
Francesco Abbate 03818d13fd Fix error when using relative dir argument 2021-02-03 07:39:35 +01:00
B14CK313 65c7f666aa
Fixed path returned by temp_filename not writeable
The path returned by temp_filename was not writeable on UNIX (and possibly other OS). This lead to the gitstatus plugin not working.
The proposed change fixes this by using the USERDIR variable instead of EXEDIR
2021-01-22 02:10:24 +01:00
Francesco Abbate ef5e431a8b New feature to disable plugins from config
Disable trimwhitespace by default
2021-01-13 14:50:24 +01:00
Francesco Abbate fcf763fe9c Fix problem when project directory has a trailing slash 2021-01-10 12:56:15 +01:00
Francesco Abbate 7f9e4e4984 Do not error out when project directory is invalid 2021-01-10 11:50:15 +01:00
Francesco Abbate e548a6adb9 Fix directories management to always keep the project's directory 2021-01-03 12:02:07 +01:00
Francesco Abbate 850fcbf710 Add required normalize_path call 2020-12-31 12:32:41 +01:00
Francesco Abbate 2cdf674b97 Keep memory of window's size and position and restore them on start
Fix also a problem with directory path on windows.
2020-12-31 11:25:12 +01:00
Francesco Abbate c3f5d2c144 Fix problems with project files and project directories
Now treat coherently the case when the project directory is removed from
the project directories.
2020-12-30 14:53:50 +01:00
Francesco Abbate b91a84eb56 Fix project change and quit versus workspace plugin 2020-12-30 14:31:36 +01:00
Francesco Abbate 0e263af3c6 Create common.serialize function 2020-12-30 13:32:25 +01:00
Francesco Abbate ddd56ec615 Add command to remove a directory from the project
In addition directories can be removed with a mouse middle-click in the
tree view pane.
2020-12-28 15:51:16 +01:00
Francesco Abbate c042bfc907 Change project files output to not include a prefix '/' in filename
It make sense to not put the initial '/' in the filename as the name
is relative to the top directory it belongs to.

By removing the the initial '/' in the filename we can re-introduce the
variable

core.project_files

to stay compatible with standard Lite. The project_files variable will
always point to the files table of the first entry of
core.project_directories.
2020-12-28 10:26:27 +01:00
Francesco Abbate df74781da8 Fix project search and status view for new add directory feature 2020-12-27 18:28:21 +01:00
Francesco Abbate e4fa196b33 Finalize add project directory feature 2020-12-27 11:32:52 +01:00
Francesco Abbate 39181a56fd Use relative path for filenames in project directories 2020-12-27 09:47:58 +01:00
Francesco Abbate 5449781353 Minor cleanup to project directory stuff 2020-12-26 23:39:27 +01:00
Francesco Abbate 54518c438d Cosmetic changes to names from previous commit 2020-12-26 23:29:18 +01:00
Francesco Abbate ec730e9520 Test configuration with project_files stored separately for each directory 2020-12-26 21:22:57 +01:00
Francesco Abbate 2f50f21f57 Preliminary version of projects with multiple directories 2020-12-26 16:48:08 +01:00
Francesco Abbate 9e8e8f7543 Remove priority run mechanism 2020-12-26 11:30:20 +01:00
Francesco Abbate 499f085045 Use get_primary_node instead of Rootview:get_primary_view 2020-12-15 12:51:36 +01:00
Francesco Abbate eadbe41064 Add core.on_quit function for plugins
To be used for plugins like workspace from exi/lite-plugins
2020-12-14 13:57:24 +01:00
Francesco Abbate 3a38ded396 Use core.reload_module instead of style.load 2020-12-13 13:04:06 +01:00
Francesco Abbate 1fc0409163 Merge branch 'project-manager' 2020-12-12 20:27:07 +01:00
Francesco Abbate 40ac899360 Restore core.quit and core.temp_filename to be compatible with Lite 2020-12-12 00:05:11 +01:00
Francesco Abbate 2373c63a0b Complete the initial user configuration file 2020-12-11 14:49:03 +01:00
Francesco Abbate 9114148b45 Automatically reload style when saving the project user module 2020-12-10 17:56:53 +01:00
Francesco Abbate 6409b67ea2 Add core:restart function to restart the editor 2020-12-10 12:44:01 +01:00
Francesco Abbate 33109e6110 Fix responsiveness problem of open-folder command 2020-12-09 15:45:16 +01:00
Francesco Abbate ba898b50fc Force a clear of treeview on switch project 2020-12-08 23:35:49 +01:00
Francesco Abbate 8448eee79f More accurate list of recent projects 2020-12-08 18:49:58 +01:00
Francesco Abbate f882957ebc Experimentally add priority run when scanning project files
Avoid yielding when a first scan is required but seems quite
ineffective.
2020-12-08 16:59:05 +01:00
Francesco Abbate e88adc0567 Move project manager into core init file 2020-12-08 16:57:57 +01:00
Francesco Abbate ebaa2b4f26 Fix bug related to creation of user's init file 2020-12-07 17:38:36 +01:00
Francesco Abbate ca9bf21819 Reword name for identifying primary view 2020-12-06 13:24:55 +01:00
Francesco Abbate 23575b309e Fix syntax error with previous commit 2020-12-06 11:37:05 +01:00
Francesco Abbate 1c4b8cf315 Fix documentation and behavior for 1.13 release 2020-12-06 11:23:33 +01:00
Francesco Abbate 926e004c41 Preliminary version of project manager
Adapted from contribute rxi/lite-plugins but changed to avoid restarting
the application when switching project.

Current problem:
- the reload of the treeview take some time without any feedback for the
  user
2020-12-06 00:57:27 +01:00
Francesco Abbate a337f893d9 Implement user's config as init file and add directory into package.path
Create the user's config init file if lite user's config directory does
not exists.

No longer use the awkward package.searchers but instead add user's
config dir at the end of package path.
2020-12-02 16:03:31 +01:00
Francesco Abbate 3589d7d3c0 First implementation of unix-like data directory
It basically works by setting the data directory to

$prefix/share/lite-xl

where $prefix is determined so that $prefix/bin corresponds to EXEDIR.

The packages 'user' and 'user.*' are loaded from the directory
'$HOME/.config/lite-xl'.
2020-12-02 00:23:15 +01:00
Francesco Abbate 70412b520b Fix cursor blinking problem
The problem was that when the editor had no events the cursor was not
blinking because the event loop was blocking on wait_event.

Now we no longer calls wait_event without a timeout if the windows has
the focus. When the window has the focus the timeout is set to 1 / fps
so that the cursor can blinks.

In addition we react to the "focus lost" event to ensure the documents
are redrawn without the cursor.
2020-11-21 16:36:32 +01:00
Francesco Abbate 82dc76dd00 Add recently visited files in the list when using find file command 2020-11-16 23:52:51 +01:00
Francesco Abbate 16e6a6db9d Stop scanning project file when a maximum limit is reached
To avoid excessive memory usage when opening in a directory with too many files.

Introduce the config variable config.max_project_files to choose the limit.

The mechanism introduced avoid using excessive memory but it fails to
let user access all the files in the directory. A better implementation
should not impose any limits but read each subdirectory on-demand, only
as they are expanded in the tree-view.
2020-11-16 18:12:55 +01:00
Francesco Abbate edaa8fb42b Add a mechanism to avoid blank window at startup 2020-11-16 14:49:41 +01:00
Francesco Abbate fe0dda8309 Merge remote-tracking branch 'rxi/master' into agg-font-renderer 2020-06-16 15:00:47 +02:00
Francesco Abbate 2c6bd874fa Avoid running when there are no events and threads do not need to run 2020-06-16 14:54:08 +02:00
rxi 7517d0ef55 Changed EXEDIR to be used as default project dir 2020-06-13 08:56:13 +01:00
rxi 7fbefe40d5 Made `system.set_window_title` only be called on title change 2020-05-30 08:53:48 +01:00
rxi 74755f5b4a Simplified implementation of `core.temp_filename()` 2020-05-27 11:38:42 +01:00
rxi 064b6d0b95 Fixed changing of cwd and loading of commandline files
the current-working-directory is now set at the start of `core.init` after the
absolute path for all filename arguments have been resolved
2020-05-26 10:26:20 +01:00
rxi 257b9ab753 Added `core.temp_filename()` 2020-05-25 08:58:12 +01:00
rxi c2d27ab3f7 Removed `core.project_dir` 2020-05-24 13:50:32 +01:00
rxi 82e33dd2de Moved event-waiting when not focused to after run_threads() 2020-05-24 13:43:34 +01:00
rxi 946c125fd4 Changed `core.redraw` to be set to `true` by default
As the window isn't created until the first frame is drawn this is required to
assure the window is ever shown without relying on the assumption that some
other part of the program would have set this to true
2020-05-24 08:04:47 +01:00
rxi 28b1844a8b Added support for dropping a folder onto the window 2020-05-23 11:31:08 +01:00
rxi 7aabfebfa0 Fixed mouse-position resolution when dropping a file 2020-05-20 10:33:08 +01:00
rxi 08ce7e2563 Fixed stuck mouse-drag-selection on dropped-file
Resolves #109
2020-05-20 09:52:01 +01:00
rxi bc4bf3d384 Added core.set_active_view(); removed `focusable` boolean from View 2020-05-19 14:55:46 +01:00
rxi 8ec717f240 Added temporary backwards compatibility for `core.project_dir` 2020-05-18 10:28:01 +01:00
rxi 4ae0d477c0 Made lite set project dir to CWD; removed core.project_dir
Fixes #100
2020-05-17 17:05:56 +01:00
rxi 4644154e5b Added `config.ignore_files`
Filenames that match either the single pattern provided by
`config.ignore_files`, or any pattern in a table of patterns, will be ignored
when lite is filling the `core.project_files` table

Resolves #77
Resolves #102
2020-05-17 13:38:45 +01:00
rxi c215eff6d8 Improved idle CPU utilisation when not-focused, added system.wait_event() 2020-05-11 00:21:07 +01:00
rxi a651d48e84 Wrapped `core.on_event` calls in `core.try` 2020-05-09 08:38:51 +01:00
rxi 22171fa802 Simplified core.step() 2020-05-08 20:44:53 +01:00
rxi de94c8a13c Removed unused variables in core.init 2020-05-07 22:25:52 +01:00
rxi 5acc391288 Added logging when project module is loaded 2020-05-07 13:41:39 +01:00
rxi 73996e3dc9 Changed core to store `modified` and `size` in project_files table 2020-05-06 17:03:10 +01:00
rxi 5361bfaf9c Added open-[project|user]-module commands, renamed command/file finder commands 2020-05-06 14:48:04 +01:00
rxi 271e5434d0 Added support for a `.lite_project.lua` file in project directory 2020-05-06 13:29:35 +01:00
rxi 7610e1064f Added multiline support for LogView's messages 2020-05-06 00:06:27 +01:00
rxi 439537d63e Fixed format string passed to core.error() in core.try() 2020-04-26 21:40:25 +01:00
rxi accf09c4f9 Changed printed filenames to use format-specifier "%s" instead of %q
Fixes #22
2020-04-25 13:26:55 +01:00
rxi c658b6f1ca Removed underscore from start of globals, added VERSION
eg. `_SCALE` => `SCALE`
prevents conflict with lua's own _NAME globals
2020-04-25 09:58:01 +01:00
rxi 9a32a00c73 Made core.log/error store call location instead of view 2020-04-22 00:02:35 +01:00
rxi 73e96c2641 Made project_scan_thread() ignore directories it can't open
Should fix #30 and #7
2020-04-21 23:43:35 +01:00
rxi 4191cf2c08 Added `core.try` wrapping of function passed to `core.add_thread` 2020-04-21 23:23:34 +01:00
rxi d8c4bfa6ba Initial commit 2019-12-28 11:17:56 +00:00