Search for text within a certain scope in a file? (Sublime) - search

I know that sublime text categorizes the source code into different scopes. Especially used for syntax highlighting.
(You can display the current scope with Ctrl+Alt+Shift P or diverse plugins)
But can you also search for/within one scope ?

Unfortunately there is no functionality built in to ST2 or ST3 that allows searches to be confined to a particular scope. If you know Python, a plugin shouldn't be too hard to write using the functions sublime.View.find() and sublime.View.find_all(), filtering the results through sublime.View.scope_name(), although you'd need to collapse the Region returned by find() to a single point for passing to scope_name().
If you're not the plugin-writing type, you might want to check out the ScopeHunter and/or ScopeAlways plugins, available through Package Control. I bind the ScopeHunter functionality to a key combination that pops up a panel with the current scope:
[
// ScopeHunter
{ "keys": ["ctrl+alt+shift+s"], "command": "get_selection_scope" }
]
A slightly less keyboard-intensive method would be to use ScopeAlways, which displays the current scope in the status bar:
This way you can move through your Find results and immediately see what scope(s) they belong to. To set it up, once you've installed the plugin from Package Control, open Preferences -> Package Settings -> ScopeAlways -> Settings - User and add the following to have it start when Sublime starts:
{
"start_on": true
}
Save the file, restart Sublime, and enjoy all the scope goodness.

Related

Using variables from other scenes (Godot)

I have two scenes (Profile and Login) and I want to use the variable new_profile from Profile and use it in Login but when I autoload Profile and mark it as a singleton it doesn't let me run the program and gives me an index error and says that the nodes referenced in my variables do not exist even though before I autoloaded it, it worked perfectly fine
You would use a singleton to achieve this task. Godot calls it, autoload. Goto Project -> Project Settings -> Autoload. Click on the folder icon. Add your gdscript file with the variables needed. That will auto populate the field directly to the right. You can edit this name as you wish. Then click on add. When you play your program, those variables will be accessible by any script by way of this code. Godot official explanation and code available here.
PlayerVariables (added to Autoload)
var player_vars = get_node("/root/PlayerVariables")
player_vars.health -= 10
Or
PlayerVariables.health -= 10

How can I edit the WorldMenu in Pharo

How can I remove or add an entry to the WorldMenu in Pharo at run time?
For example I have a menu option that loads extra tools for working with web tools. Running the code setting up these tools would include adding items to the menu to stop and start the web service. I don't want these stop and start items in normal use but the code setting up the items would be in the image.
I have seen and used the method in this question However this adds the item when the code is loaded.
Let me clarify what #Peter and I mean
Choose any class, and in the class side add your #menuCommandOn: method on the lines of
menuCommandOn: aBuilder
<worldMenu>
self showsItem ifTrue: [
(aBuilder item: self itemToken)
order: 0.1;
action: [self performItemAction]]
This way, even though the method would be invoked every time the world menu is about to pop up, it will add the menu item only if the logic behind #showsItem enables it. Notice that the dynamic nature of the menu doesn't require you to remove menu items, instead you simply do not add them. In your case such a logic should reflect the availability of the web service.
The #itemToken message send is a placeholder for the Symbol you want to use to identify the item. In other words, you would probably want to inline it as a literal rather than sending the #itemToken message. This Symbol will be used as the item label.
For further optional configuration features take a look at other implementors of #menuCommandOn:.

A couple questions -- in regard to beginning Pharo

Using 2.0
Getting starting, confortable with Smalltalk, so tool questions I have not found readily in image or 'by Example' book (outdated).
Looking for entry field (not ready-to-use dialog box).
Like:
(TextMorph new) contents: '(enter name here)'; openInWorld.
"but this just opens text, would like to be editable"
Would like to construct [simple] canvas with say four fields e.g. entry, radio, dropdown, etc. examples available?
Anyone know where 'PreferencesBrowser' has been moved to (e.g. keyboard etc.).
Is there a 'Local senders of...' in regard to class browser selected method?
In order to construct a UI you could either use Polymorph or Spec.
For Polymorph examples try in a workspace:
UITheme exampleDialogs.
UITheme exampleBasicControls
For a Spec tutorial have a look at:
Bahman Movaqar, Spec - Part I: The Basics.
The Preferences Browser is replaced by the much nicer Settings Browser which can be found in WorldMenu > System > Settings.
And you can display a method’s senders in Nautilus (the new standard system browser) when you right click on a method name in the method list via the context menu.
You may want to read a Spec tutorial: http://www.bahmanm.com/blogs/spec-part-1-basics

Determining which Visual Studio context menu was selected?

I'm writing a VS2012 add-in, adding a command to Build Explorer context menu (see related question). The command gets added to 2 different context menus:
Build Explorer
Team Explorer, Builds page, My Builds section
When my one callback is called, how do I know which of these it is?
I tried get the focused control (using P/Invoke as this question suggests). However, it gets me a Tabs container for (1), and null for (2). I could try to cast the control to the tabbed container, but that sounds pretty bad...
Any better alternative?
My new/other idea - it is similar to yours:
You should try to monitor which window was activated lastly.
If you create an eventhandler for your command, then you may be able to check which window is active when your command fired. A simple evenent handler for a command:
void cmdEvents_BeforeExecute( string guid, int ID, object customIn, object customOut, ref bool cancelDefault )
{
Window2 teamExplorer = _applicationObject.Windows.Item("Team Explorer") as Window2;
if (_applicationObject.ActiveWindow.Caption == teamExplorer.Caption)
{
//You are called from Team Explorer
}
else
{
//Somewhere else
}
}
And the way you can subscribe:
static _dispCommandEvents_BeforeExecuteEventHandler _myHandler;
static CommandEvents _cmdEvents;
public void OnConnection(...)
{
Command command = ...; // Init your command
int ID = command.ID;
string GUID = command.Guid;
CommandEvents _cmdEvents = _applicationObject.Events.get_CommandEvents(GUID, ID);
_myHandler = new _dispCommandEvents_BeforeExecuteEventHandler(cmdEvents_BeforeExecute);
_cmdEvents.BeforeExecute += _myHandler;
}
You may find a better way to identify the window(s) by GUID. You should keep at least _cmdEvents as static because when it will be desroyed, your event handler could vanish (least for internal commands).
In OnDisconnection you should unsubscribe.
Reworked by the comment, and founded links:
As the menu item is shown every place it seems there is no way to distinct between them from an Add-In, you should add two command and distinct them by their context.
The way instead of converting the Add-In to a VS-Package MZ-Tools HOWTO: Controlling the state of command in a Visual Studio add-in, try MZ-Tools HOWTO: Use the IVsMonitorSelection ... you can also get it from an Add-In.
But:
Neither the AddNamedCommand nor the QueryStatus methods honor the
invisible state: the button that must be invisible ...
remains disabled rather than invisible.
I think this makes it impossible to do it from an Add-In on a suitable way, but maybe you can check the contexts.
Other way you could get further, if you try to migrate your command/menu into a VSPackage and create a custom UIContext for the menu items or find a suitable predefined one. I have no access to a Studio enhanced with Build Explorer so I can't try it.
The following discussion is about custom contexts for vs-packages:
http://davedewinter.com/2008/04/05/dynamic-menu-commands-in-visual-studio-packages-part-3/
Sadly the links are broken from the post, and I can't reach Part 1. and Part 2. which is about the discussion of the problem from the beginning.
But there is no guarantee you can create a context which suits you.
Only context ID I found for Team Explorer is the guidTeamProjectCmdUIContext.
It is placed at vsshilds.h in Visual Studio 2010 SDK, vsshell*.h are also contain several others.
MSDN: Vsct files to define command, menus, ect. from packages.
Condition attribute for items:
http://msdn.microsoft.com/en-us/library/bb491718.aspx
http://msdn.microsoft.com/en-us/library/bb166515.aspx
MSDN: VisibilityItem element for commands and toolbars.
VisibilityItem element determines the static visibility of commands and toolbars.
... After the VSPackage is loaded, Visual Studio expects command visibility to be determined by the VSPackage rather than the VisibilityItem.
And finally about predefined Context Guids:
http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.uicontextguids80.aspx
http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.uicontextguids.aspx

Adding item to all view menus

In Eclipse, it is possible to extend to any pop-up menu using the following special location URI:
popup:org.eclipse.ui.popup.any
Is it possible to do the same for the view menus (the little triangle in each view)? (I am developing an Eclipse RCP application, not extending the IDE. The purpose for this item is to help debugging and testing of the application.).
The short answer: no, that is not possible, unless you add the items by hand for all views.
The slightly longer answer: yes, if you
manually go through the view registry
create a new AbstractContributionFactory with the location URI "menu:<view-id>" and whatever createContributionItems(...) you want for each. (Alternatively you can create AbstractMenuAdditionCacheEntry or even better MenuAdditionCacheEntry - though these are internal and requires a little extra work... The last allows you to have a centrally defined menus extension point that is used for all these additions.)
add these to the workbench using IMenuService.addContributionFactory(AbstractContributionFactory factory) (use IWorkbenchWindow.getService(IMenuService.class) to acquire the menu service).
I haven't tested the above recipe, but I have used something very similar in an application...

Resources