Skip to content

Commit e0f16fc

Browse files
committed
Working on syncing current state of Requester view with response view after saving (squash this commit)
1 parent 728b4e6 commit e0f16fc

File tree

6 files changed

+58
-37
lines changed

6 files changed

+58
-37
lines changed

Default (OSX).sublime-keymap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
},
4545

4646
{
47-
"keys": ["shift+super+s"],
47+
"keys": ["super+s"],
4848
"command": "requester_save_request",
4949
"context": [
5050
{ "key": "setting.requester.response_view", "operator": "equal", "operand": true }

Default.sublime-keymap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
},
6363

6464
{
65-
"keys": ["ctrl+super+s"],
65+
"keys": ["ctrl+s"],
6666
"command": "requester_save_request",
6767
"context": [
6868
{ "key": "setting.requester.response_view", "operator": "equal", "operand": true }

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -696,7 +696,7 @@ The following commands are only available in response tabs. The key bindings lis
696696
- __cmd+e__: explore URL
697697
- __cmd+o__: options
698698
- __ctrl+space__: GraphQL autocomplete
699-
- __shift+cmd+s__: save request back to Requester file
699+
- __cmd+s__: save request back to Requester file
700700

701701
If you try to execute one of these commands and nothing happens, you've already mapped the binding to another command. Run __Preferences: Key Bindings__ from the command palette, find the conflicting key combination, add the following `context` to the binding, and restart Sublime Text.
702702

commands/other.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@
44
import webbrowser
55

66

7+
class RequesterReplaceTextCommand(sublime_plugin.TextCommand):
8+
"""`TextCommand` to replace region from start index to end index with `text`.
9+
"""
10+
def run(self, edit, text, start_index, end_index):
11+
self.view.replace(edit, sublime.Region(start_index, end_index), text)
12+
13+
714
class RequesterReplaceViewTextCommand(sublime_plugin.TextCommand):
815
"""`TextCommand` to replace all text in view, without selecting text after.
916
Optionally leave cursor at `point`.

commands/request.py

Lines changed: 47 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from requests import options
55

6+
import os
67
import json
78
from sys import maxsize
89
from urllib import parse
@@ -259,7 +260,7 @@ def prepare_response_view(self, view, response):
259260
self.view.run_command('requester_reorder_response_tabs')
260261
set_response_view_name(view, res)
261262
set_graphql_schema_on_view(view, req)
262-
set_binding_info_on_view(self.view, view, req)
263+
set_binding_info_on_view(self.view, view, req.request)
263264

264265
def handle_responses(self, responses):
265266
"""Change focus after request returns? `handle_response` must be called
@@ -455,29 +456,6 @@ def run(self):
455456
set_response_view_name(view)
456457

457458

458-
class RequesterSaveRequestCommand(sublime_plugin.WindowCommand):
459-
"""
460-
"""
461-
def run(self):
462-
view = self.window.active_view()
463-
binding_info = view.settings().get('requester.binding_info', None)
464-
if binding_info is None:
465-
return
466-
try:
467-
request = parse_requests(view.substr(sublime.Region(0, view.size())), n=1)[0]
468-
except Exception as e:
469-
sublime.error_message('Save Error: there are no valid requests in your response view: {}'.format(e))
470-
if request.startswith('requests.'):
471-
request = request[len('requests.'):]
472-
file, old_content, start_index, end_index = binding_info
473-
474-
requester_view = self.window.open_file(file)
475-
content = requester_view.substr(sublime.Region(0, view.size()))
476-
if old_content != content:
477-
sublime.error_message("Save Error: Requester file content has changed since request was sent")
478-
return
479-
480-
481459
class RequesterReorderResponseTabsCommand(RequestsMixin, RequestCommandMixin, sublime_plugin.TextCommand):
482460
"""Reorders open response tabs to match order of requests in current view.
483461
"""
@@ -542,23 +520,51 @@ def make_requests(self, requests, env):
542520
window.set_view_index(v.view, group, index)
543521

544522

545-
def set_request_on_view(view, res):
546-
"""For reordering requests, showing pending activity for requests, and
547-
jumping to matching response tabs after requests return.
523+
class RequesterSaveRequestCommand(sublime_plugin.TextCommand):
548524
"""
549-
view.settings().set('requester.request_method', res.request.method)
550-
view.settings().set('requester.request_url', res.url.split('?')[0])
525+
"""
526+
def run(self, edit):
527+
view = self.view
528+
binding_info = view.settings().get('requester.binding_info', None)
529+
if binding_info is None:
530+
return
551531

532+
try:
533+
request = parse_requests(view.substr(sublime.Region(0, view.size())), n=1)[0]
534+
except Exception as e:
535+
sublime.error_message('Save Error: there are no valid requests in your response view: {}'.format(e))
536+
if request.startswith('requests.'):
537+
request = request[len('requests.'):]
538+
file, old_content, start_index, end_index = binding_info
552539

553-
def set_binding_info_on_view(requester_view, view, req):
540+
if not os.path.isfile(file):
541+
sublime.error_message('Save Error: Requester file <{}> no longer exists.'.format(file))
542+
return
543+
544+
requester_view = view.window().open_file(file)
545+
content = requester_view.substr(sublime.Region(0, requester_view.size()))
546+
if old_content != content:
547+
sublime.error_message('Save Error: Requester file content has changed since request was sent')
548+
return
549+
550+
# this is necessary for reasons due to undocumented behavior in ST API (probably a bug)
551+
# simply calling `requester_view.replace` corrupts `view`s settings
552+
requester_view.run_command(
553+
'requester_replace_text', {'text': request, 'start_index': start_index, 'end_index': end_index})
554+
requester_view.sel().clear()
555+
requester_view.sel().add(sublime.Region(start_index))
556+
requester_view.show_at_center(start_index)
557+
set_binding_info_on_view(requester_view, view, request)
558+
559+
560+
def set_binding_info_on_view(requester_view, view, request):
554561
"""Find start index and end index of request string in requester view, set
555562
these on view.
556563
"""
557-
file = requester_view.settings().get('requester.file', None)
564+
file = view.settings().get('requester.file', None)
558565
if file is None:
559566
return
560-
content = requester_view.substr(sublime.Region(0, view.size()))
561-
request = req.request
567+
content = requester_view.substr(sublime.Region(0, requester_view.size()))
562568
if request.startswith('requests.'):
563569
request = request[len('requests.'):]
564570
try:
@@ -568,3 +574,11 @@ def set_binding_info_on_view(requester_view, view, req):
568574
return
569575
end_index = start_index + len(request)
570576
view.settings().set('requester.binding_info', (file, content, start_index, end_index))
577+
578+
579+
def set_request_on_view(view, res):
580+
"""For reordering requests, showing pending activity for requests, and
581+
jumping to matching response tabs after requests return.
582+
"""
583+
view.settings().set('requester.request_method', res.request.method)
584+
view.settings().set('requester.request_url', res.url.split('?')[0])

docs/_content/body.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,7 @@ The following commands are only available in response tabs. The key bindings lis
610610
- __cmd+e__: explore URL
611611
- __cmd+o__: options
612612
- __ctrl+space__: GraphQL autocomplete
613-
- __shift+cmd+s__: save request back to Requester file
613+
- __cmd+s__: save request back to Requester file
614614

615615
If you try to execute one of these commands and nothing happens, you've already mapped the binding to another command. Run __Preferences: Key Bindings__ from the command palette, find the conflicting key combination, add the following `context` to the binding, and restart Sublime Text.
616616

0 commit comments

Comments
 (0)