InCommand - versatile, adaptable command execution

Because you can simply open the plugin folder on your PC and yoink the settings.json file, that button would essentially just be that.

2 Likes

I’m surprised that I’ve used this quite a bit…

Hi, I just bought InCommand several minutes ago, there are 2 suggestions I would like to make. Apologies if they were already said on the replies above but I’m too lazy to read them (unfortunately)

  • There could be a little gap atleast between the buttons at the top right corner and the text editor when maximum horizontal scrolling was reached:
    image
    The reason for this is when I look at them it sort of makes my eye hurt or think something is wrong, so this is a QoL suggestion
  • Automatic scrolling on both horizontal and vertical scrolling bars on the script editor.

That’s all I have to say, thanks!

Can u send your color settings?

I don’t know why I haven’t installed this almost a year ago but I really wish that I did! Ty for the huge time saver!!! :0

The plugin is extremely small for me:

image

I use Studio on a HiDPI display, it would be super helpful if there was an option to scale the UI up by 2x (my scaling factor is exactly 200%), at least until UI elements are incorrectly displayed & misaligned is fixed.

EDIT: Another issue:

00:00:00.000  Requiring asset 6738245247.
Callstack:
cloud_4987562465.InCommand.PluginUpdates, line 36
cloud_4987562465.InCommand.PluginUpdates, line 35 - getLatestVersion
cloud_4987562465.InCommand.Main, line 22
  -  Server
00:00:00.768  InCommand couldn't connect to the game server. Accurate Play Solo support has therefore been disabled. (are you in Team Create?)  -  Client

Hey! I’ve been using this plugin for quite a bit, but I seem to be running into one issue consistantly.

The script environment for the scripts ran through InCommand is not the same for normal LocalScripts! This means if I require a module script, it initiates a new instance and returns that to me. I think it has to do with the script’s identity level being the same as Plugin when ran.

I have been using this as a bypass for quite a bit now:

function run(code)
    local ls = Instance.new("LocalScript")
    ls.Parent = game.Players.LocalPlayer.Character
    ls.Source = code.."\nscript:Destroy()"
end
run([[
-- code
]])

Is there any way you could add a option to run as a LocalScript instead of a ModuleScript? Thanks for reading!

1 Like

Thanks for the feedback - first time I’ve heard this feature request, so we’ll definitely take this into consideration. Thanks :slight_smile:

Implementation theory: it’s possible to execute a normal LocalScript/Script, and have it set up a BindableFunction (or similar) to execute modules provided by InCommand. You’d set a ModuleScript’s Source, then signal the script to require it in order to execute whatever code is inside. Similar to how script builders work.

1 Like

Thanks for the suggestion, but it’s fine - I already have infrastructure in place that I can extend to make this work.

Would it be possible to include a feature to treat the 4 spaces that replace tabs as tabs? Sounds confusing written like that, but what I mean is when you press backspace it checks the last 3 characters (4 spaces is a tab, but one has just been deleted) and if they are all spaces then it deletes them all as a single character. I already have a system in place for my own in-game IDE (your lexer is incredible, massive thanks to you and the other contributors). It does however cause the cursor to pause for a frame or 2 in between positions, but that is unavoidable and is better than the alternative in my opinion. This would improve my experience with the plugin because I would be able to use tabs as spaces seamlessly. Perhaps it could be a toggle, to allow users who choose spaces (why?) over tabs to have their preferred method too.

local UserInputService: UserInputService = game:GetService("UserInputService")

UserInputService.InputBegan:Connect(function(Input: InputObject, GameProcessed: boolean?)
	if not GameProcessed then return end

	local TextBox: TextBox = UserInputService:GetFocusedTextBox()
	
	-- Delete tabs as one character (they are replaced by 4 spaces, since Roblox treats them as a space)
	if Input.KeyCode == Enum.KeyCode.Backspace then
		local Text: string = TextBox.Text
		local CursorPosition: number = TextBox.CursorPosition
		if string.sub(Text, CursorPosition - 3, CursorPosition) == "   " then -- 4 spaces is a tab, but they've just deleted one
			TextBox.Text = string.sub(Text, 1, CursorPosition - 4)..string.sub(Text, CursorPosition) -- For some reason we need to delete 4?
		end
	end
end)

Edit: Thanks for posting your version, mine is not the most rigorously tested (I implemented it only a few days ago).

1 Like

You’re asking for Atomic Soft Tabs.

Thanks for sharing your code. However, it fails in a lot of cases and offsets your cursor. Here’s how I handle it:

UserInputService.InputBegan:Connect(function(Input: InputObject, GameProcessed: boolean?)
	if not GameProcessed then return end
	if Input.KeyCode ~= Enum.KeyCode.Backspace then return end

	local TextBox = UIS:GetFocusedTextBox()
	if TextBox then
		local Text: string = TextBox.Text
		local CursorPosition: number = TextBox.CursorPosition

		local whitespace = string.match(string.sub(Text, 1, CursorPosition-1), " +$")
		if not whitespace then return end

		if #whitespace % 4 == 3 then
			TextBox.Text = string.sub(Text, 1, CursorPosition - 4) .. string.sub(Text, CursorPosition)
			TextBox.CursorPosition = CursorPosition - 3
		end
	end
end)

I will add this to InCommand when @Elttob and I redo it.

3 Likes

During the rewrite, can you please fix the bug where parenthesis are highlighted using my operator color? It’s really distracting - it should use the “Script Bracket Color” instead.

Yeah, this was written before that setting existed.

1 Like

Would it be possible to use HistoryService to add ‘undo’ support? Many times I have wished to undo a change but it doesn’t work at all, and will also undo the last non-plugin change I did

1 Like

The service is actually called ChangeHistoryService, and it is very possible. I’ll take a look at the source code and see if I have time to get it started, possibly finished.
Not sure about the memory/processing requirements of this service, if possible a custom “save state” undo would work better than the “generate state” undo.
For more reading on the differences between the two, check here.

When highlighting, you should also take into account the Studio.Function Name Color & Studio.Local Method Color properties. An example is provided below (my current theme is One Dark Pro so that’s why my default text color is red):

Function Name Color

Studio Editor

image

InCommand

image

Local Method Color

Studio Editor

image

InCommand

image

Why do i need to buy InCommand for 125 R $? Well base on the Comments and Thumbnail, I really like it, And i watched @Alvin_Blox made a video about this, I was really impress @boatbomber

One thing that would be great if you could add would be being able to highlight the code (to copy and paste) as you scroll down because it undoes the highlight!