Stretchly Intercepting Ctrl + X on Windows 10 on v0.21.0

Prerequisites

[✓] I'm using latest version: v0.21.0
[✓] I've checked Known issues

Description
For some time I've had an intermittent issue where the ctrl + x hotkey (commonly "cut to clipboard") stopped working in random applications.  Finally I got tools installed to track the problem when next it happens.  Today I once again ran into the issue, started up Spy++, and used its message monitoring capabilities to track the WM_HOTKEY message all the way to Stretchly:

Sure enough, when I closed Stretchly the hotkey interception went away.
Now, while typing all this up I was going through the issue checklist and saw that version 0.21.0 was supposed to have Fixed: Ctrl+X global shortcut not being released after Reset breaks and Skip to, but I think a logic branch was missed.
After playing with it a bit, it seems that if "Reset breaks" is used while a (regular) break is currently on the screen, it causes the issue.  Skipping during a microbreak seems to do nothing.
When manually skipping to the next full-sized break and hitting Reset Breaks, I sometimes get the following error message as soon as I next hit ctrl + x:

In which case ctrl + x is not bound, but if the error message doesn't show, ctrl + x is bound until Stretchly is restarted.  I suspect the behavior is slightly different when a break happens naturally rather than manually invoked, but did not confirm.
Operating system: Windows 10 Pro 1809
Steps to Reproduce

Skip to the next break (not microbreak)
Reset breaks using the taskbar icon context menu while the window is on-screen
Use the ctrl + x hotkey.  If an error message does not show, ctrl + x is now bound permanently by Stretchly until restart.

Expected behavior: ctrl + x is never bound except when the break screen is showing
Actual behavior: ctrl + x is intercepted and unusable by other applications
Reproduces how often: possibly every time a (full-sized) break is skipped, modulo whatever controls that error message showing up

There's something about this that makes break/microbreak timing go haywire as well; I have my micro/breaks set to come up every 20 minutes, and I keep getting them at random single-digit-minute intervals, probably a side-effect of that null reference exception.

Thanks for the report! I will look into it. I might have missed something as you say.

Testing on mac and linux and can't reproduce. Will have to get my hands on some Windows machine.

@ketura I am trying in Windows 10 1909 and can't reproduce ;[ Can you try updating the windows if possible? Also maybe the update of stretchly didn't go that well and you might have old code still there?

@hovancik I see this issue on the latest Win10 as well. The app is not unregistering the endBreakShortcut shortcut in some cases.
I would suggest to not use a global shortcut at all, but rather create a window keydown listener in the renderer process:
document.addEventListener('keydown', handleKeydown);

function handleKeydown (event) {
  if (isEndBreakShortcut(event)) {
    postpone()
  }
}

It will only work when the app window is focused, which is perfect for this case.
Or if you want to keep using a global shortcut for this, set a timer for the unregistering function when the break window is opened, so the shortcut always gets unregistered as soon as the postpone button disappears:
let timers = {
  endBreakShortcut: null
}

function functionThatDisplaysTheBreakWindow () {
  timers.endBreakShortcut = setTimeout(() => {
    globalShortcut.unregister(settings.get('endBreakShortcut'))
  }, breakPostponeTimeout)
}

@aleksey-hoffman I had it like that before but it didn't work reliably. There are also cases when window is not focused.

@hovancik could you add an option to disable global shortcut from being registered entirely? I like the app but this bug is very annoying

@aleksey-hoffman what kind of error are you getting?

could you paste the log from around the time the issue happens? Now that we have it, I would like to take a look.

@hovancik I don't have logs, but it's most likely the same thing described by the OP. It happens a few times a week. Some event causes Ctrl + X shortcut to stop working system wide until you terminate all the Stretchly's app processes.
If you could add an option to disable the shortcut from being registered entirely, that would be great.
BTW, what are the complications with the "local window shortcuts" method you mentioned above? Could it not be fixed by programmatically focusing the window with mainWindow.focus()?

There's a option which tells Stretchly to have breaks as regular windows, not on top, etc.
By logs I mean Stretchly's logs. If you go to the Preferences -> About and hit Ctrl/Cmd+D you'll see the location of logs file.
Esiest would be to add new option to disable shortcuts, or maybe to change the code so that empty string is interpreted as "do not set shortcut".

Adding option to set shortcut to "" and thus disable it in #929

@hovancik thank you


The "https://repo.magento.com/packages.json" file could not be downloaded: Failed to enable crypto failed to open stream: operation failed

When running composer install with auth.json

Fixed here:
http://devdocs.magento.com/guides/v2.1/release-notes/tech_bull_tls-repo.html
Locally I was running 5.6.x so I updated OS X liip package for PHP 5.6


Is it possible to use multiple keys as a modifier?

right now I have
keymap:
#...
    remap:
      Super-a:
        remap:
          j: [KEY_5, KEY_J]
          k: [KEY_5, KEY_k]

But I have to release super-a before pressing j or k for it to register.
Is there a way to treat super-a as a modifier, so super-a-j and super-a-k can be done in one motion?

Doesn't the following config work for you?
keymap:
#...
    remap:
      Super-a:
        remap:
          Super-j: [KEY_5, KEY_J]
          Super-k: [KEY_5, KEY_k]

That works a lot better, thank you.
Ideally, I wouldn't have to release "a" before pressing the keymap a second time, but this works well enough for now.


Sticky header in table example generates an horizontal scroll bar

Duplicates

[X] I have searched the existing issues

Latest version

[X] I have tested the latest version

Current behavior 😯
As you can see in the docs example https://mui.com/components/tables/#sticky-header when the sticky header is added and a maxHeight is defined, the vertical scrollbar overlaps with the right content, resulting in the need to generate also an horizontal scroll bar to compensate.
Expected behavior 🤔
I would expect the table width to be reduced in order that:
(the width of the table when there is no vertical scrollbar) == (the width of the table when there is the vertical scrollbar) + (the width of the scrollbar)
So that only the vertical scrollbar is generated if needed by content height, but horizontally there is no scrolling at all.
Steps to reproduce 🕹
Steps:

Context 🔦
No response
Your environment 🌎
See https://mui.com/components/tables/#sticky-header
Tested on Chrome v96 on Windows

If the screen is wide enough, there is no scroll. You can adjust the widths of the columns (for example if they are smaller, or there is a bigger container there would be no scroll). I am not sure what can be improved here.

I tested it better and you're right, sorry about that. I thought that the horizontal scrollbar would appear even if there were sufficient space to accomodate the "shrinked" table but it is not true, it appears only when the "shrinked" table becomes small enough not being able to contain the content.


Merging changes from capitalone repo to fork

Merging changes from CapitalOne repo to fork

Merging changes from CapitalOne repo to fork


Alluxio fuse mount failed but report successfully

Alluxio Version:
master branch
Describe the bug
./bin/alluxio-fuse mount / abc
Starting AlluxioFuse process: mounting alluxio path "abc" to local mount point "/" with options="big_writes"
usage: sleep seconds
Successfully mounted Alluxio path "abc" to /.
See /Users/mbl/projects/github/alluxio-2/logs/fuse.log for logging messages

To Reproduce
As above command line tools
Expected behavior
report error.
Urgency
Normal
Are you planning to fix it
Not sure
Additional context

check following code in integration/fuse/bin/alluxio-fuse, line 71 sleep 2s. Need to check your docker image and linux distribution, some of them supports sleep 2s with the suffix s, others are only support sleep 2, and sleep 2s will report usage: sleep seconds error.
 66   if [[ ${NO_DAEMON} -eq "1" ]]; then
 67     exec ${cmd}
 68   else
 69     (nohup ${cmd} > ${ALLUXIO_LOGS_DIR}/fuse.out 2>&1) &
 70     # sleep: workaround to let the bg java process exit on errors, if any
 71     sleep 2s
 72     if kill -0 $! > /dev/null 2>&1 ; then
 73       echo "Successfully mounted Alluxio path \"${alluxio_root}\" to ${mount_point}."
 74       echo "See ${ALLUXIO_LOGS_DIR}/fuse.log for logging messages"
 75       return 0
 76     else
 77       echo "Failed to mount Alluxio path \"${alluxio_root}\" to ${mount_point}."
 78       echo "See ${ALLUXIO_LOGS_DIR}/fuse.out for more details"
 79       return 1
 80     fi
 81   fi


Implement the suggestion algorithm for restocking

If a product has less than 3 units, it needs to be put in the restocking list of the seller
Seller can see the products to restock
Seller can choose the restock a product and add the desired quantities to it

TODO:

Company can only see products related to their name
Company can click on a button to quick view stock in need
Company can restock the quantity


Cant resolve RX gradle dependency

Error:(26, 13) Failed to resolve: io.reactivex.rxjava2:rxandroid:2.0.0 Show in File
Show in Project Structure dialog

Did not get the issue correctly, but I have updated the libraries version. you can check it again.


cannot import name 'NPROC' from 'scalabel.common.parallel'

Hey there!
While running the script to convert the annotation from bdd100k format to COCO the following exception is being raised. cannot import name 'NPROC' from 'scalabel.common.parallel'. What is the possible solution for the problem?

It may be solved with installing the scalabel package with pip install -U git+https://github.com/scalabel/scalabel.git

Thanks for your suggestion. The problem has been solved. Maybe there is a problem with the scalabel installation package on the pypi platform.


[Mono] Update about/warning text

I've removed the section about being unable to export games using C# - as you are now able to do this, as long as the export templates are installed. Also, I've made a minor grammar tweak.

Could you also TTR it? That would close #17228.

Thanks!

@hpvb Should be cherry-picked with s/3.1/3.0.x/.

Cherry picked into 3.0.6


KITTI Dataset

Could you provide a KITTI formatted version? I want to train on my own KITTI dataset.

My data only has forward radar scan data, similiar with kitti dataset,so there is a big difference between point range and waymo, especially in the dimension of the x-axis, how should this be modified?

My data is also close to KITTI's data format.

Hi, have you got any solutions with KITTI?

Sorry, I do not have enough time to support KITTI. Feel free to post your config and training log if you met some problems on KITTI and I will help take a look.


allow different gutter per breakpoint

You can add a gutter property in each breackpoint to set different gutters.
Note that the gutter will affect the screen widths biggest than the selected cut

Closing due to #21. 💀


Setting title of plot_joint

Removing the Sensor_type, X channels part of the title of a plot_joint fig is surprisingly hard. I also never find it useful ...
E.g., if you do evoked.plot_joint(ts_args={"titles":"nothing"}), it will still append Sensor_type, X channels. If you access the axis and set its title directly (fig.axes[0].set_title("x")), the initial title is unaffected and a new one created! This is specific to plot_joint; if you set the title of evoked.plot, you set the title.
I'd like to make it easier to remove, or outright remove it.
@jaeilepp

It's this:
evoked.plot_joint().axes[2].texts[0].set_text('custom_title')
which is IMO not straight-forward. There can be a lot of axes in the plot.
One thing I could imagine is attaching the individual plots to the figure with predictable names:
fig.ts_plot
fig.topo_plots (list of topoplot axes)
WDYT? That would avoid adding a keyword.
Another option is to simply set up plot_joint so it behaves like evoked.plot wrt. the title, although I don't actually know why it doesn't.

@jona-sassenhagen I agree, I was using the texts[0].set_text() way, but I wasn't happy with it :)

I think we could treat it as a bug fix and just overwrite the title from now on when title is not None.


Azure indexer tests that don't pass

CanGetColoredTransaction
CanImportMainChain

Both fail with:
Message: NBitcoin.Protocol.ProtocolException : An header which does not pass proof of work verification has been received

Following recent PR's these errors are no longer being observed, so perhaps the issue can be closed?

I will give them a quick test again and close this if they pass. Thanks!

Yes tests all pass now - Thanks!


Add Release Workflow

Each build will get one or more image tags, depending on whether it's a build of the master branch, a PR branch, or a release branch.  Computation of the image tags is handled by the metadata-action workflow.

Add git-version-gen script to compute a VERSION value from the git repo.
Remove the .version file; this is now computed by the git-version-gen script.
Add rules to Makefile to generate the .version file and use its value.
Use "v" prefix in release tag filter.
Add workflow to verify that tags are annotated.
Use metadata-action to generate all of the appropriate tags for the build
Use build-push-action to execute all of the tags for the build.

Tagging:

Builds of the master branch get an image tag of "master".
Builds of a PR branch get an image tag similar to "pr-3".
Builds of a PR or merge event get an image tag similar to "<IP_ADDRESS>-9e04", which is the value generated by git-version-gen.
Builds of a PR or merge event will get an image tag that is the long SHA of the top commit, which is the image tag expected by nnf-deploy.
Builds of a push to a tag will get an image tag that matches the git tag.
Builds of a push to a tag will get an image tag of "latest".

This is copied from DWS.

Do we need to hold on off merging this until I get #8 merged?

Do we need to hold on off merging this until I get #8 merged?

I don't see any technical reason to order them in any particular way, unless you have something in mind.

I was thinking this would cut a 0.0.1 version, but that's not the case, right?

I have a few more steps to get there, after this merges.


Use consistent, specific imports

This updates the entire package with consistent imports.  Updating the imports to be file-specific instead of using the folder shorthand ensures compatibility with all module loaders.

Initially, I'm not in favor of such a change.  Although, I'd be curious to hear the motivation for this.

FWIW, there are also some errors in the updates, such as TextArea/index.js:
export default from './TextArea/TextArea'

./TextArea is a JS file, so there is no extra directory here.

It would also appear we have neither linting nor tests around the index files :)

The motivation behind this is to allow the package to load in browser-based module loaders like StealJS, which is based on SystemJS.  I figured making a PR is the best solution to making it work everywhere. And while the loaders do allow you to create a configuration map of the files, I was hoping to avoid doing that.  I'm also hoping to avoid having to switch back to Webpack to use the package.
If I change the imports to go through the index.js files and audit/clean up the mistakes, are you open to allowing the change?  Thank you!

I've cleaned up those mistakes and switched to using the index.js files.  Please let me know if there's anything I can do that would help you feel more comfortable merging this.

Current coverage is 95.89% (diff: 100%)

Merging #1221 into master will not change coverage

@@             master      #1221   diff @@
==========================================
  Files           880        880
  Lines          4901       4901
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
  Hits           4700       4700
  Misses          201        201
  Partials          0          0

Powered by Codecov. Last update 935fd95...9622e4c

I certainly want maximum interop for the lib.    I'll take a look at those and review this PR in light of that.  Thanks for the work and extra explanation here.

Note for the future.  PRs opened from a branch on your fork will allow myself and the collaborators here to push updates to it.  Though, this is not possible against your master branch.  This is handy for fixing conflicts, lint issues, and tests, if needed.
No need to reopen a new PR, just a note for the future 👍 Thanks again!

This is the issue I'm trying to resolve.  When I try to use the CommonJS format of the module, I get the errors in this screenshot.  I'll file an issue with StealJS, too.

Hi, I'm the maintainer of StealJS.  As I understand from this discussion, the package.json main of dist/commonjs/index.js is not meant to be loaded in a browser. Given that, you could fix this by including a browser configuration that points to the umd build: "browser": "dist/umd/semantic-ui-react.min.js" should do it.

I've previously implemented the browser field, https://github.com/Semantic-Org/Semantic-UI-React/pull/702, however, this immediately broke several users' webpack builds, #703.  When creating a bundle with Webpack, requiring semantic-ui-react results in the UMD build being bundled, which is of course not what you want when creating a bundle on the server.  Hence, it was quickly reverted, #704.
I'd like to get this going, though, as it stands it seems there is either not full community agreement on the browser field spec, or, I am misunderstanding some part of it.

Ah, I follow, webpack gives preference to the browser field. So we need a field that webpack will ignore.  We actually have one for steal: "steal": { "main": "path/to/browser/main.js" } but I can understand if you don't want to implement a loader-specific configuration. I wish there was an accepted field that webpack left alone.

Indeed, I'll take a look around and see if anyone has solved this yet.  As far as webpack's implementation is concerned, the browser field is for isomorphic versions of your modules that are bundler agnostic.
Without a clear spec nor solution at hand, I'm going to close this for now.  It is not pretty, but as a workaround @marshallswain, you can import the full file path:
import Container from 'semantic-ui-react/dist/commonjs/elements/Container'

I'd also suggest discussing ES module support with @matthewp.  We provide an es build which can take advantage of tree shaking (i.e. Rollup, Webpack 2, etc).

Thanks @levithomason.  I'll submit a PR for the mixed module syntax in the debug.js file.  That's preventing me from being able to use it as you suggested above.


Support to prevent/cancel onWillXYZ file operations

Does this issue occur when all extensions are disabled?: Yes/No
Yes

VS Code Version: 1.65.2
OS Version: OSX

Steps to Reproduce:
I work on an VS Code extension for my company, and I'd like to intercept the folder and file rename operation.
I've added the following code in the extension's activate() method:
vscode.workspace.onWillRenameFiles((fileWillRenameEvent) => {
    fileWillRenameEvent.token.cancel();
});

I've verified that this code executes, and that fileWillRenameEvent.token.isCancellationRequested changes to true, yet, the rename takes place.  Is it possible to intercept when a folder or file is being renamed?  If so, could you provide sample code to do this?
PS. I also explored using fileWillRenameEvent.waitUntil(thenable) (and thenable is Promise<WorkspaceEdit>) but this doesn't prevent the file from being renamed either.

The willRename-event doesn't allow you to cancel the operation. Please also note that token.cancel() doesn't exist, only from the cancellation source you can set a token to be cancelled.

/cc @bpasero

Isn't that operation cancellable by the user from the progress notification:
https://github.com/microsoft/vscode/blob/19034bc492734fa2c1d34a2051d456e59d3a3951/src/vs/workbench/api/browser/mainThreadFileSystemEventService.ts#L65-L76

The user can only cancel the participation of an extension not the operation itself

Thanks @jrieken and @bpasero .  If this is implemented, what we'd like to do is subscribe to a rename (or pre-rename) event, evaluate the file path, and if it's directory or file we're looking for, display a message to the user, letting them continue or cancel.  (and if not a path we're looking for, automatically continue with the rename)
So what we would need, is:

an event to subscribe to
the ability to continue with the rename
the ability to cancel the rename

Thanks!
Jeff

:slightly_frowning_face: In the last 60 days, this feature request has received less than 20 community upvotes and we closed it. Still a big Thank You to you for taking the time to create this issue! To learn more about how we handle feature requests, please see our documentation.
Happy Coding!


Reference Error: $ is not defined -while loading the DZI xml file -OpenSeaDragon

Below is the code snippet that iam using to load and display DZI xml files. I am getting reference error:$ is not defined.
`  var dziFilesUrl = '//DZI//dzc_output_files//';
// Change this to the contents of the .dzi file from your server.
var dziData = '<?xml version="1.0" encoding="utf-8"?><Collection MaxLevel="8" TileSize="256" Format="jpg" NextItemId="1" xmlns="http://schemas.microsoft.com/deepzoom/2008"><Items><I Id="0" N="0" Source="dzc_output_images/worldmap.xml"><Size Width="5000" Height="3752" /><Viewport Width="1" X="-0" Y="-0" /></I></Items></Collection>';

// This converts the XML into a DZI tile source specification object that OpenSeadragon understands.
var tileSourceFromData = function (data, filesUrl) {
    var $xml = $($.parseXML(data));
    var $image = $xml.find('Image');
    var $size = $xml.find('Size');

    var dzi = {
        Image: {
            xmlns: $image.attr('xmlns'),
            Url: filesUrl,
            Format: $image.attr('Format'),
            Overlap: $image.attr('Overlap'),
            TileSize: $image.attr('TileSize'),
            Size: {
                Height: $size.attr('Height'),
                Width: $size.attr('Width')
            }
        }
    };

    console.log(dzi);
    return dzi;
};

// This creates the actual viewer.
var viewer = OpenSeadragon({
    id: 'openseadragon1',
    prefixUrl: '//DZI/',
    tileSources: tileSourceFromData(dziData, dziFilesUrl)
});`

Please let me know what I need to correct.
Iam using latest OpenSeaDragon Version 2.3.0 and Asp.NET MVC5 to fetch the DZI xml file.

Below is the DZI xml file data
`<?xml version="1.0" encoding="utf-8"?>
<Collection MaxLevel="8" TileSize="256" Format="jpg" NextItemId="1" xmlns="http://schemas.microsoft.com/deepzoom/2008">
<Items>
<I Id="0" N="0" Source="dzc_output_images/worldmap.xml">
<Size Width="5000" Height="3752" />
<Viewport Width="1" X="-0" Y="-0" />
</I>
</Items>
</Collection>`

I resolved the issue as I added the script link shown below:

However I have new issue - "Unable to open [Object Object]:Unable to load TileSource" when I load the same xml as mentioned in the issue.

Yes, I suppose I should mention that that example requires jQuery. Glad you got that sorted.
Looks like the DZI file you're using is actually a DZC file (Deep Zoom Collection). OpenSeadragon does not support DZC files (See https://github.com/openseadragon/openseadragon/issues/67). You'll need to export a single DZI instead and use that.


Persistent unused panels (always keep alive)

Is your feature request related to a problem? Please describe.
Hello 👋
I'm working on a project that changes the layout using dockviewApi.fromJSON to load different layouts but from a fixed list of panels. So, in one layout I could have only one panel visible and in another, I have 2 columns of 3 and 2 panels side by side.
These panels show iframes which is important to be kept alive on changing the layout.
The current state of DockView to my understanding is that using fromJSON will cause removing all the extra panels. Is there any way around it?
Describe the solution you'd like
I'm not sure what's the best solution here. I saw #397 but it seems it's not available anymore.
Describe alternatives you've considered
I'm trying to see if using portals and mirroring (somehow) could work here. Or maybe move the extra ones to a floating group and hide that.

You can render a panel as always visible which will prevent the element being unmounted and instead this element will be absolutly positions and hidden as required (which prevents things like iframe unload issues). Some docs on that are here
That state is persisted when calling toJSON() however fromJSON() will entirely replace the layout, is that the point you are trying to make? That you are interested in keeping state alive when calling fromJSON() if those panels already exist?

Hi @mathuo ,
My exact problem is that I need to re-call the fromJSON but it'll kill everything.
I tried implementing a manual algo to first make everything floating (and hide using CSS) and then use moveTo instead of addPanel and it works. Just not the prettiest thing. Maybe a helper like rearrangeFromJSON that does the same thing in a better way.

@mathuo we have the similar issue. We have the set of panels, some of them are iframes to the terminal (xtermjs) or some stuff inside a sandbox (like a web application), and we want to add a 'Reset layout' button so when user messed up with it they can return back to the initial state (we don't allow to remove panels btw). With the current implementation of the dockview all panels are destroyed and then re-created (fromJSON call), so the state of iframes is lost.

@mathuo any thoughts on this?

just in case, i've ended up with this copy of fromJSON implementation that just moves panels around without re-creating them. But we're not shipping it cause it relies on too much dockview's internal api and will break frequently on lib's updates
export const setDockviewLayout = (dockviewApi: DockviewApi, layout: SerializedDockview) => {
  const { width, height } = dockviewApi;

  // move all current panels to a float group
  const [firstPanel, ...restPanels] = dockviewApi.panels;
  dockviewApi.addFloatingGroup(firstPanel);
  const floatingGroup = firstPanel.group;
  restPanels.forEach(panel => panel.api.moveTo({ group: floatingGroup }));

  (dockviewApi['component']['gridview'] as Gridview).deserialize(layout.grid, {
    fromJSON: (node: ISerializedLeafNode<GroupPanelViewState>) => {
      const { id, views, activeView } = node.data;

      if (typeof id !== 'string') {
        throw new Error('group id must be of type string');
      }

      const group = dockviewApi['component'].createGroup({ id });

      dockviewApi['component']._onDidAddGroup.fire(group);

      let activePanel: IDockviewPanel | undefined;

      for (const child of views) {
        const panel = dockviewApi.getPanel(child);

        if (!panel) {
          return;
        }

        panel.api.moveTo({ group });

        if (activeView === panel.id) {
          activePanel = panel;
        }
      }

      activePanel?.api.setActive();

      if (!group.activePanel && group.panels.length > 0) {
        const panel = group.panels[group.panels.length - 1];
        panel.api.setActive();
      }

      return group;
    },
  });

  dockviewApi.layout(width, height, true);

  dockviewApi['component']._onDidLayoutFromJSON.fire();
};

Let me try a couple of approaches, I think we can intergrate such behaviours into the deserialization methods.

@mathuo really appreciate it