174 Commits

Author SHA1 Message Date
Mahmoud Ben Hassine
8f4e1b78fa Update test dependencies for the latest Spring Boot 3.5 snapshots
Spring Boot 3.5 updated JUnit Jupiter from v5.11 to v5.12.
With this new version, the junit-platform-launcher dependency
must be declared explicitly.
2025-04-22 20:04:09 +02:00
Janne Valkealahti
bad75882e1 Initial ffm support
- Starter for jline ffm terminal provider
- Build changes for compiling with gradle toolchains
  defaulting to jdk22
- spring-shell-sample-ffm which compiles with jdk22
- ci workflow setups jdk 17/22
- Relates #1131
2024-08-30 07:05:03 +01:00
Janne Valkealahti
b954211d01 Add state to e2e availability tests 2024-05-23 08:48:09 +01:00
Janne Valkealahti
2b18de0ffb Fix fg and bg styling
- In ListView and MenuView fix how styling for
  background and foreground are used.
- In Catalog app fix same issue in ScenarioListCell
- Fixes #1063
2024-05-07 08:05:45 +01:00
Janne Valkealahti
e159cfcc52 Change properties for interactive and script to false on default
- Change defaults for `spring.shell.interactive.enabled` and
  `spring.shell.script.enabled` to false.
- Change samples to use interactive/script where applicable.
- Fixes #1051
2024-04-20 08:13:12 +01:00
Janne Valkealahti
831f2cf54b Provide pty info
- Enhance ShellContext for pty info
- Enhance CommandContext to include ShellContext
- Fixes #985
2024-03-10 17:51:38 +00:00
Janne Valkealahti
cdbbf1d96d Only NonInteractiveShellRunner is active on default
- Disable InteractiveShellRunner and ScriptShellRunner on default
- Enable those in commands and e2e sample apps
- Document changes
- Fixes #1017
2024-03-10 13:48:54 +00:00
Janne Valkealahti
192eb5e506 Add ProgressView initial scenario
- Relates #995
2024-02-16 17:53:21 +00:00
Janne Valkealahti
7c91dbff8a Scenario lifecycle methods
- Add ScenarioContext which knows about View and start/stop
  runnable methods.
- Change Catalog to rely on ScenarioContext and call
  start/stop on an appropriate moment.
- Still keep Scenario.build() around so that we have time
  to refactor in favour of ScenarioContext.buildContext()
  or whatever build() method in it should be.
- Fixes #1004
2024-02-16 17:53:03 +00:00
Janne Valkealahti
afb8bc7104 Revisit ProgressView
- Polish a lot of things
- Do updates/redraw internally with eventloop as it'd be super
  inconvenient asking user to handle this externally
- Rewrite sample to be more unified for various cases
- Set eventloop from ViewComponent
- Relates #995
2024-02-15 09:26:23 +00:00
Janne Valkealahti
7fa953f131 ViewComponent async execution
- Modifies ViewComponent with changed api's so that
  it can be executed with a thread allowing caller
  not to block.
- Add ViewComponentBuilder concept and create is as
  a bean similar to TerminalUIBuilder.
- Relates #997
2024-02-10 15:08:34 +00:00
Janne Valkealahti
abc4ffaaa3 ProgressView spinner theming
- New SpinnerSettings which integrates with ThemeSettings
- Support infra around spinner theming
- Relates #995
2024-02-04 14:57:23 +00:00
Janne Valkealahti
95aaa865c5 ProgressView spinner calculation in item function
- Move spinner frame calculation to item itself so that
- Remove spinnerFrame from state and add
  start/update times
- view don't have hard dependency to it, as we'd
  need its interval
- Change spinner to run only when view is running
- Relates #995
2024-02-04 09:43:56 +00:00
Janne Valkealahti
9446afecb7 Make ViewComponent api better for expected use
- Exposing eventloop if user need to interact with it
- Add api/feature to set used view rect expand to
  full terminal width
- Add plain ProgressView samples
- Relates #995
- Fixes #997
2024-02-02 09:32:07 +00:00
Janne Valkealahti
9830fafe1a Use CommandContext as method parameter
- With annotation(@Command) model it's now possible to just
  add CommandContext and it will get resolved and doesn't
  cause it to appear as an option.
- Fixes #779
2024-01-26 13:49:30 +00:00
Janne Valkealahti
a37bd6ad5a Fix alias handling with @Command annotation
- Revisit how alias commands are added using
  @Command annotation when using if/or on class
  and/or method level.
- With this change alias handling is more logical
  and there's better tests and docs.
- Fixes #945
2024-01-13 12:20:06 +00:00
Janne Valkealahti
bfde7c7fe3 Add e2e help option tests
- Relates #885
2023-12-10 13:34:25 +00:00
Janne Valkealahti
b1084a62ee Fix wrong parser message
- Parser error message gave wrong lower level arity value
  if option didn't have enough arguments
- Fixes #930
2023-11-27 14:29:29 +00:00
Janne Valkealahti
2d29050c34 Make Catalog browsers focusable with shortcuts
- Category and scenario list views can now be focused with
  ctrl+a/ctrl+s.
- Bind all keys with ctrl modifier
- Add "shortcut" concept to views which currently hooks to
  hot keys.
- In a catalog app by using a "shortcut" then takes the key
  event as a hot key, as it consumes resulting behaviour
  is to focus.
- Move view initInternal away from constructor call to
  require user to call init() which is not in a
  View interface
- Relates #826
2023-11-12 16:43:11 +00:00
Janne Valkealahti
ccf6d771d9 Add multiinput scenario
- InputView using viewcommands and has event for text change.
- Experimental way to handle tab navigation in a layout views.
- New viewcommands for tab navigation and moving cursor.
- Mouse click takes focus in AbstractView if no view command
  binding.
- MultiInputViewScenario now shows tab navigation.
- Fixes #917
2023-11-07 08:26:43 +00:00
Janne Valkealahti
bba7a82ab4 Make StatusBarView work with hotkeys
- StatusItem can now define a hotkey which is then
  bound to its action.
- In catalog app replace use of raw key event to
  item's hotkey for status bar visibility.
- Various doc updates.
- Relates #826
2023-10-30 09:31:03 +00:00
Janne Valkealahti
82df453cc0 Autoconfigure TerminalUI
- Add TerminalUIBuilder which can be used to build TerminalUI
- Add TerminalUICustomizer which can customize TerminalUI
- What is autoconfigured is TerminalUIBuilder.
- In TerminalUI add configure for views which now allows
  easier way to set needed stuff in views.
- Various changes in a catalog app
- Fixes #900
2023-10-25 09:10:42 +01:00
Janne Valkealahti
92eb7dd2b7 Relocate message package from view
- Relates #813
2023-10-20 08:48:36 +01:00
Janne Valkealahti
433c1f96f0 Relocate geom package from view
- Relates #813
2023-10-20 08:38:01 +01:00
Janne Valkealahti
8de0ef47df Better background handling in themes
- Modify view structures so that we're able to
  control background drawing better
- Remove transparent concept from box view
- Add background styles for dialog, menu/status bars
- Relates #824
2023-10-19 13:12:42 +01:00
Janne Valkealahti
52b242dcbf Polish scenario descriptions 2023-10-13 14:07:59 +01:00
Janne Valkealahti
da529fa277 Make samples native build fully optional
- Add springShellSampleNative project property
- Implement generic samples build logic in buildSrc
- Fixes #873
2023-09-24 08:37:32 +01:00
Janne Valkealahti
585125d2e3 TerminalUI can define rootView rect
- Add functions to calculate Rectangle for fullscreen/nonfullscreen modes.
- Fixes for rendering so that nonfullscreen works better with views.
- Add some basic samples
- isEmpty method for Rectangle
- Fixes #872
2023-09-22 09:00:22 +01:00
Janne Valkealahti
51c250608b Overhaul ListView to support checked states
- ListView can be defined to use nocheck, checked or radio
- List can now scroll through up/down
- Actual visual is handled in a DefaultListCell
- Modify/add scenarios and catalog app
- Relates #865
2023-09-09 08:59:37 +03:00
Janne Valkealahti
aa3c580220 Move interrupt message to ShellMessageBuilder
- Relates #761
2023-08-30 09:19:35 +03:00
Janne Valkealahti
a3ca69bc72 Non-fullscreen view
- ViewComponent can take view and drive it as non-fullscreen
- ViewDoneEvent which InputView now uses
- ComponentUiCommands is a sample where we add ideas for
  views in flow components
- Allow View to set eventloop
- Relates #850
2023-08-30 08:38:46 +03:00
Janne Valkealahti
ba5ab1a463 Dialog should float
- New WindowView which can be partially atop of background.
- DialogView now extends WindowView
- Change dialog in Catalog sample and Dialog scenario
- Relates #825
- Relates #855
2023-08-24 20:02:53 +03:00
Janne Valkealahti
88c1f56c71 Add about dialog to catalog app
- Relates #825
2023-08-24 08:46:09 +03:00
Janne Valkealahti
29417d495b Initial modal integration
- Integrate TerminalUI to ViewService and modals
- New Dialog scenario
- Relates #825
2023-08-21 09:37:05 +03:00
Janne Valkealahti
7391d0d24f Initial hotkey infra
- Duplicate keyhandler into hotkeyhandler
- Define some view to handle hot keys, like AppView and MenuBarView
- Catalog app binds some menus to hot keys
- Bind all normal keys a-z with alt
- Relates #823
- Relates #826
2023-08-10 08:27:49 +01:00
Janne Valkealahti
ef713638b2 Base theming for views
- Control is now aware of active theme name and resolver.
- Theme some settings in BoxView, ListView and MenuView.
- Overhaul scenario system to make it work with themes.
- Add new "background" StyleSetting.
- Relates #824
2023-08-04 14:19:33 +01:00
Greg Cooper
c5145a2fe6 Do not include timestamp for buildInfo. 2023-08-02 08:51:35 +01:00
Janne Valkealahti
3a2d7d4817 Restore focus after returning from scenario
- Relates #811
2023-07-22 17:27:21 +01:00
Janne Valkealahti
4b927be807 Hide statusbar in a catalog app
- Can clear items from a GridView
- Full refactor for AppView now using GridView internally
  and can hide/show menu/status.
- Add function key bindings f1-f10
- Modify catalog app to use new features in an AppView, listen
  F10 key to toggle statusbar visibility.
- Relates #805
- Relates #807
- Relates #811
2023-07-22 14:21:10 +01:00
Janne Valkealahti
c074af314b Add focused color and style for BoxView title
- May define focused color and style for title
  which overrides normal color and style if set.
- Use these in a catalog app.
- Relates #804
2023-07-21 09:26:31 +01:00
Janne Valkealahti
748f41103d Fix removed deprecation
- Fix property values which doesn't exist in gradle zip task anymore.
- Relates #821
2023-07-21 08:09:24 +01:00
Janne Valkealahti
a0bdbfc033 Initial terminal ui implementation
- This commit adds proof of concept work for terminal ui as is.
- Some things work, some don't but we need to start from somewhere.
  Further development continues in a main.
- Essentially we are starting to have enough so that it merits to
  move all this work into a main repo.
- Everything new is kept under org.springframework.shell.component.view
  and will get revisiter later to find correct locations for some classes.
- Catalog sample has been modified to provide "showcase" app for
  terminal ui features. This is a start while it already contains
  some usefull scenarios.
- Relates #800
- Relates #801
- Relates #802
- Relates #803
- Relates #804
- Relates #805
- Relates #806
- Relates #807
- Relates #808
- Relates #809
- Relates #810
- Relates #811
2023-07-15 16:42:39 +01:00
Janne Valkealahti
625619fc92 Add primary command sample
- New spring-shell-sample-catalog which is a skeleton meant for
  future view overhaul work.
- Relates #755
2023-07-05 10:35:30 +01:00
Janne Valkealahti
cdd703efa4 Fix alias usage with Command annotation
- Fix alias command extraction from existing @Command
  annotations so that we actually get multiple aliases
  defined if more than one defined on a method level.
- Fix rendering issue in a help stg template when
  multiple aliases exists.
- Fixes #796
2023-06-22 16:00:00 +01:00
Janne Valkealahti
811f1f9a55 Fix parser handling of positional args
- Change to have better support for args like:

    "--arg1 a --arg2 b"
    "--arg1 a --arg2 b c"
    "--arg1 a c --arg2 b c"
    "c --arg1 a --arg2 b"

  where option can have default values and position of
  positional args doesn't matter that much.
- Make parser to be aware of if it's handling last option
  so that we can differentiate if error can be given i.e.
  with too many args, etc.
- Fixes #795
2023-06-22 09:46:01 +01:00
Janne Valkealahti
c27b85fb0e Split sample app
- spring-shell-sample-commands and spring-shell-sample-e2e
- Needed changes in e2e tests and workflow
- Fixes #754
2023-06-15 10:49:52 +01:00
Janne Valkealahti
042d56e7e3 Add HandlerMethodArgumentResolver for @Option
- New OptionMethodArgumentResolver which is similar
  than ShellOptionMethodArgumentResolver for @ShellOption.
- Add missing annotation commands for e2e test command.
- Fixes #767
2023-06-07 15:28:57 +01:00
Janne Valkealahti
8bed75ad77 Support plain boolean without option annotations
- Fix so that we can have `boolean arg` without using
  `@Option` or `@ShellOption` defaulting to false.
- Fixes #744
2023-05-20 14:49:21 +01:00
Janne Valkealahti
9d27466c6a Support explicit arity min max with @Option
- @Option now has arityMin/arityMax which if defined,
  non-negative, are used instead of arity.
- Fixes #731
2023-05-01 08:36:41 +01:00
Janne Valkealahti
5a4a241cb8 Refactor short option docs
- Add e2e samples
- Add short option snippets as tabs content(to get later
  converted to an actual tabs).
- Relates #637
2023-04-10 14:48:57 +01:00