Coder Social home page Coder Social logo

hpi-swa-teaching / algernon-launcher Goto Github PK

View Code? Open in Web Editor NEW
28.0 7.0 5.0 1.72 MB

Algernon is a productivity tool for Squeak programmers; your personal assistant for Squeak. Algernon aims to make programming in Squeak faster and more keyboard centric. It provides lightning quick access to the core functionalities (classes, methods, morphs, tests, repositories, ...) and even gives you a quick way to evaluate Smalltalk expressions. (SWT22-10)

License: MIT License

Smalltalk 100.00%
squeak smalltalk productivity launcher

algernon-launcher's Introduction

Algernon Launcher

GitHub release Github All Releases smalltalkCI Master: Coverage Master Development: Coverage Development

Algernon

Algernon is a productivity tool for Squeak programmers; your personal assistant for Squeak. Algernon aims to make programming in Squeak faster and more keyboard centric. It provides lightning quick access to the core functionalities (classes, methods, morphs, tests, repositories ...) and even gives you a quick way to evaluate Smalltalk expressions.

Installation

Follow our setup guide to install Algernon.

The latest versions (above 3.0.0) only support squeak versions 5.3+.

Usage

Algernon allows for keyboard only interaction - no need to use your mouse!

Control Action
Doubleclick ctrl Show Algernon
Esc Hide Algernon
Arrow up Navigate up
Arrow down Navigate down
Tab Navigate in
Shift + Tab Navigate out
Enter Run selected item
Ctrl + Delete Clear search bar

Important Notice: Please be aware that using Algernon for the first time might be slow. The first query triggers the indexing that is used for searching objects. After a few seconds delay in the first query, Algernon should run fast as expected.

Features

  • Search using fuzzy matching
  • Search and open categories, classes and methods
  • Explore and inspect classes and methods
  • Run tests
  • Open and save repositories
  • Search preferences
  • Search morphs
  • Search global variables
  • Print and evaluate Smalltalk expressions
  • Action verbs for filtering and quick access (e.g. run SomeTest will only search for tests and set a default action)
  • Full text search in classes
  • Search the web
  • Push/pull/commit with git
  • Change branches of your repository

For explanations regarding the usage of the features check out the wiki.

CI Pipeline

GitHub Actions are executed on all pushed code to the repository. Smalltalk CI checks run for different OS and displays the the test results as badges to each branch.

Test Coverage

Use the Test Runner Tool in your Squeak Image and select all AlgernonTests. Now you can run the test coverage for all Algernon methods and check what methods might not be tested yet.

Credits

Credits to Erik Hinterbichler and Joey Hagedorn, the original creators of Algernon.

algernon-launcher's People

Contributors

annkatrinkuessner avatar benbals avatar bewee avatar codezeilen avatar danijar avatar dencrash avatar fawind avatar fniephaus avatar franzsw avatar fsadrieh avatar gittihab avatar gwauge avatar janukobytsch avatar jonaschn avatar kej-jay avatar leonardhorns avatar linqlover avatar louiskirsch avatar marceltaeumel avatar matveysiva avatar niklasmohrin avatar numberpi avatar olliwehr avatar phlprcks avatar robertkirsten avatar sinnaj-r avatar thegraystone avatar tobiasduerschmid avatar yannik-dittmar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

algernon-launcher's Issues

Hide top results from full list

As a user I want top results to be hidden from the full result list because I'm confused by seeing the same result twice and want to better utilize the screen real estate.

Acceptance Criteria

Team Client Description
✔️ ✔️ any result that is displayed in the top results is not displayed again in the full list

Actually implement a Fuzzy-Matching Algorithm

Algernon currently does not do fuzzy matching. It does regular substring matching and uses levenshtein distance to sort only after the filtering.

Try to enter ALGKore, it should return the ALGCore class, but it doesn't.

This might require significant reengineering of internal infrastructure.

Acceptance Criteria

Client Team Description
✔️ Typing the initials of a query makes the result show up
✔️ Fuzzy matching works with hotword queries
✔️ Search does not feel slow

Old Version

As a user I want search results that are closer to my search term.
E.g. when typing "ALG" I want result for the classes "ALG..." and not "ABC".

So we have to replace the Levenshtein distance with a more suitable algorithm.

Morph type is not displayed in result list

As a user I want to search for Morphs (aka. Subclasses of Morph) and directly open them. This way I can straightaway open examples and games in the Image, which aren't tools.

Acceptance Criteria

  • All Subclasses of Morphs should be shown as search results
  • These results should at least have the action 'open' (or similar) to create a new Instance of this morph in the current world

Old Description

ALG Morph Type is never displayed in the Algernon result list maybe because isTermRelevantFor: is not overriden in ALGMorphType?

Setup GitHub Actions

As a contributor I want to see whether may changes make the tests fail in order to keep up the code quality.

To be compliant with the software development process outlined in the introductory lecture, we will use GitHub Actions for CI/CD.

This needs to be set up.

improve explore instances action

As a user when I explore instances I want one window with all instances not one window per instance in order to make the result not clutter up the screen.

This issue is based on a request by Marcel Taeumel. The original text is reproduced here:

Könntet ihr bei der Aktion "Explore Instances" einen einzigen ObjectExplorer öffnen? Morph allInstances explore. Morph allSubInstances explore. Das würde die Auswirkungen der Aktion vorhersehbar machen. Die Aktion "Inspect Instances" könnte entfallen.
Viele Grüße, Marcel

Acceptance Criteria

  • make algernon always open one window with all instances instead of one window per instance

Better keybindings

As a user I want to be able to edit the text I entered into Algernon using my arrow keys.

Currently it is not possible to use the arrow keys in algernon as those are reserved for navigating the children.

We should consider changing that behavior.

This issue was raised in working on #17, see the discussion at #72.

Review Flags in Algernon Source

At the moment the Algernon source contains multiple "flags" (self flag: ...) which indicate bugs or open todos. We need to check which of these are real issues, for which GitHub issues exist and whether some of them are already resolved.

keep breadcrumbs as a part of the last input

The last input in Algernon is currently saved.
But when navigating with a right arrow key hit in a class and typing new words only this last input is kept. So when reopening Algernon this last input is displayed, but on top level and not in the correct navigation hierarchy Algernon jumps back to the first layer results, discarding the last hierarchical navigation.

Acceptance Criteria

  • When closing Algernon while in a layer > 1 and then reopening it, restore the last hierachical navigation
  • Also restore last query string in this layer
  • Make this behavior optional via an entry in the preferences

Refactor ALGAction invocation

There is some black magic going on here.

MenuItemMorph>>invokeWithEvent: evt
	"Perform the action associated with the given menu item."

	| w |
	self isEnabled ifFalse: [^ self].
	target class == HandMorph ifTrue: [(self notObsolete) ifFalse: [^ self]].
	owner ifNotNil:[self isStayUpItem ifFalse:[
		self flag: #workAround. "The tile system invokes menus straightforwardly so the menu might not be in the world."
		(w := self world) ifNotNil:[
			owner deleteIfPopUp: evt.
			"Repair damage before invoking the action for better feedback"
			w displayWorldSafely]]].
	selector ifNil:[^self].
	Cursor normal showWhile: [ | selArgCount |  "show cursor in case item opens a new MVC window"
		(selArgCount := selector numArgs) = 0
			ifTrue:
				[target perform: selector]
			ifFalse:
				[selArgCount = arguments size
					ifTrue: [target perform: selector withArguments: arguments]
					ifFalse: [target perform: selector withArguments: (arguments copyWith: evt)]]].

directly search for methods

As a developer I want to find methods without specifying the class first in order to reduce the time it takes to find something in Algernon.

Acceptance Criteria

  • algernon finds methods without needing a specified class

Old Description

Allow for a direct search for methods on top level navigation.
Currently search for methods is only possible within classes (class view when right arrow key was hit).

class comment results open class comment view

As a developer when I search for a class comment I want to see the resulting class comment in the browser, not the associated code, in order to directly explore the result of my query.

Acceptance Criteria

  • When searching for class comments (e.g. "? Quicksilver", hit right arrow key on ALGCore, use browse action), the browse action shows the class comment view , not the normal instace class view in the system browser.

display a cursor in search field

As a user I want a curser in Algernon to make editing my request easier.

Acceptance Criteria

  • have a curser in the algernon search field

Extend the plugin system

As a power user I want to implement my own capabilities using a well defined API in order to customize and extend algernon to fit my (special) needs.

Acceptance Criteria

  • The plugin system should provide enough capabilities to allow for a tool help system.

Save image

As a user I want to save (and or quit) the image from Algernon in order to have a uniform interface to the runtime.

Unify use of `Hotword` and `ActionVerb`

As a user I want to have a clear understanding of what the words are called that trigger results/actions within Algernon in order to use the tool properly and understand the documentation

tooltip for class comments

As a user I want to see the complente class comment I found right in Algernon in order to avoid switching to another program.

Original Description

so that the user can identify class comments in search results easier . Idea was to show a tooltip on the right side of the result list

Acceptance Criteria

  • A class comment in the search results can be expanded to be fully read in Algernon.

mark class comment results in result list

As user I'm confused by results that only match class comments therefore I want to be shown a visual indication of why the match was made in order to make Algernon's behavior more transparent.

Acceptance Criteria

  • show the matching that algernon determined in order to show the retrieved option

Old description

When a class comment search result is displayed in the result list mark this result in an appropriate manner.
This would enable the user to know why this result is displayed (as the class name mostly don't match the search term and the user therefore might be confused).

Implement unfinished ALGTypes

  • ALGRepositoryType (make sure it does the right thing and register in ALGItemProvider)
  • ALGMorphType and subclasses (make sure it does the right thing and returns items in algertemList)

Acceptance Criteria

  • unclear

customize Algernon position

As a user I want to set the default position for Algernon by drag and drop in order to avoid collisions with other windows.

Acceptance Criteria

  • make Algernon draggable
  • open algernon always on the position it was last opened

Help inside Algernon

As a user new to Algernon I want to have keyword that displays all commands available to me I order to interactively discover Algernon.

Acceptance Criteria

Client Team Text
✔️ ✔️ entering help gives a list of hotwords
✔️ ✔️ entering help [keyword]will display an explanation of a keyword
✔️ ✔️ the keyword is documented in the Wiki

new caching strategy

The Algernon cache is only build once at first initialisation, but never refreshed. Therefore some anomalies may occur as new packages or classes might not be found.

Use Tab to execute result

As an Algernon power-user, I want to be able to use the Tab-key to execute the result when no further detail actions are available, so I don't have to mentally switch the key I have to press.

Acceptance criteria:

  • If no further actions for an item are available and I hit the Tab-key, the item is executed.
  • Add a preference to toggle this behavior

Update Readme

  • Update Authors
  • Upadate CI and Coverage Badges
  • Add GitHub description

Open tools from results, not only their class

As a user when I search for the name of a tool I want to be able to open that tool and not only its claas definition in order to use Algernon as a general purpose launcher.

Acceptance Criteria

  • the open hotword can directly open a tool (rather than its class) additionally to it's existing functionality of opening Apps
    • A tool is any program listed in the Tools dropdown

Old description

Algernon should also allow developers to open tools directly from the launcher (Browser, Workspace, Transcript, ...)

Algernon doesn't grey out the screen correctly when hovering a listview

Steps to reproduce

Hover over a listview (e.g. in a open Browser) and open Algernon via it's assigned shortcut.
Do not type anything into Algernon yet.

Unexpected behavior

The listview receives a grey overlay, but the rest of the window is not greyed out.

Expected behavior

The entire window is greyed out immediately

Note: When characters are entered into Algernon, the entire image is greyed out successfully.

Suggest Tooling to Beginners

As a newcomer to squeak I want algernon to suggest useful tools and provide simple explanations in order to get started using squeak.

Acceptance Criteria

  • provide explanations to users
  • show helping tools to users

Old Description

Some tools are hard to discover in the image. You should leverage existing help texts for tools to suggest matching tools for tasks entered into Algernon. Basic information retrieval techniques will have to be applied to determine whether a tool matches the specified task.

In order to archive that keywords should be matched against help texts.

doIt does not work

As a user I want to call the do hotword to run smalltalk code.

Acceptance criteria

  • The do hotword runs the given code.
  • In comparison to =, it does not print the result.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.