Structure shortcuts help
This commit is contained in:
parent
f59e9e3cb0
commit
74ab0a4df8
1 changed files with 163 additions and 90 deletions
253
app/src/cli.c
253
app/src/cli.c
|
@ -4,6 +4,7 @@
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
@ -25,6 +26,12 @@ struct sc_option {
|
||||||
const char *text;
|
const char *text;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define MAX_EQUIVALENT_SHORTCUTS 3
|
||||||
|
struct sc_shortcut {
|
||||||
|
const char *shortcuts[MAX_EQUIVALENT_SHORTCUTS + 1];
|
||||||
|
const char *text;
|
||||||
|
};
|
||||||
|
|
||||||
static const struct sc_option options[] = {
|
static const struct sc_option options[] = {
|
||||||
{
|
{
|
||||||
.longopt = "always-on-top",
|
.longopt = "always-on-top",
|
||||||
|
@ -334,6 +341,118 @@ static const struct sc_option options[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct sc_shortcut shortcuts[] = {
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+f" },
|
||||||
|
.text = "Switch fullscreen mode",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+Left" },
|
||||||
|
.text = "Rotate display left",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+Right" },
|
||||||
|
.text = "Rotate display right",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+g" },
|
||||||
|
.text = "Resize window to 1:1 (pixel-perfect)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+w", "Double-click on black borders" },
|
||||||
|
.text = "Resize window to remove black borders",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+h", "Middle-click" },
|
||||||
|
.text = "Click on HOME",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = {
|
||||||
|
"MOD+b",
|
||||||
|
"MOD+Backspace",
|
||||||
|
"Right-click (when screen is on)",
|
||||||
|
},
|
||||||
|
.text = "Click on BACK",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+s" },
|
||||||
|
.text = "Click on APP_SWITCH",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+m" },
|
||||||
|
.text = "Click on MENU",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+Up" },
|
||||||
|
.text = "Click on VOLUME_UP",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+Down" },
|
||||||
|
.text = "Click on VOLUME_DOWN",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+p" },
|
||||||
|
.text = "Click on POWER (turn screen on/off)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "Right-click (when screen is off)" },
|
||||||
|
.text = "Power on",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+o" },
|
||||||
|
.text = "Turn device screen off (keep mirroring)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+Shift+o" },
|
||||||
|
.text = "Turn device screen on",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+r" },
|
||||||
|
.text = "Rotate device screen",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+n" },
|
||||||
|
.text = "Expand notification panel",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+Shift+n" },
|
||||||
|
.text = "Collapse notification panel",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+c" },
|
||||||
|
.text = "Copy to clipboard (inject COPY keycode, Android >= 7 only)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+x" },
|
||||||
|
.text = "Cut to clipboard (inject CUT keycode, Android >= 7 only)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+v" },
|
||||||
|
.text = "Copy computer clipboard to device, then paste (inject PASTE "
|
||||||
|
"keycode, Android >= 7 only)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+Shift+v" },
|
||||||
|
.text = "Inject computer clipboard text as a sequence of key events",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "MOD+i" },
|
||||||
|
.text = "Enable/disable FPS counter (print frames/second in logs)",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "Ctrl+click-and-move" },
|
||||||
|
.text = "Pinch-to-zoom from the center of the screen",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "Drag & drop APK file" },
|
||||||
|
.text = "Install APK from computer",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.shortcuts = { "Drag & drop non-APK file" },
|
||||||
|
.text = "Push file to device (see --push-target)",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_option_usage_header(const struct sc_option *opt) {
|
print_option_usage_header(const struct sc_option *opt) {
|
||||||
struct sc_strbuf buf;
|
struct sc_strbuf buf;
|
||||||
|
@ -409,6 +528,45 @@ print_option_usage(const struct sc_option *opt, unsigned cols) {
|
||||||
free(text);
|
free(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_shortcuts_intro(unsigned cols) {
|
||||||
|
char *intro = sc_str_wrap_lines(
|
||||||
|
"In the following list, MOD is the shortcut modifier. By default, it's "
|
||||||
|
"(left) Alt or (left) Super, but it can be configured by "
|
||||||
|
"--shortcut-mod (see above).", cols, 4);
|
||||||
|
if (!intro) {
|
||||||
|
fprintf(stderr, "<ERROR>\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "%s\n", intro);
|
||||||
|
free(intro);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_shortcut(const struct sc_shortcut *shortcut, unsigned cols) {
|
||||||
|
assert(cols > 8); // sc_str_wrap_lines() requires indent < columns
|
||||||
|
assert(shortcut->shortcuts[0]); // At least one shortcut
|
||||||
|
assert(shortcut->text);
|
||||||
|
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
|
||||||
|
unsigned i = 0;
|
||||||
|
while (shortcut->shortcuts[i]) {
|
||||||
|
fprintf(stderr, " %s\n", shortcut->shortcuts[i]);
|
||||||
|
++i;
|
||||||
|
};
|
||||||
|
|
||||||
|
char *text = sc_str_wrap_lines(shortcut->text, cols, 8);
|
||||||
|
if (!text) {
|
||||||
|
fprintf(stderr, "<ERROR>\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "%s\n", text);
|
||||||
|
free(text);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
scrcpy_print_usage(const char *arg0) {
|
scrcpy_print_usage(const char *arg0) {
|
||||||
const unsigned cols = 80; // For now, use a hardcoded value
|
const unsigned cols = 80; // For now, use a hardcoded value
|
||||||
|
@ -420,96 +578,11 @@ scrcpy_print_usage(const char *arg0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print shortcuts section
|
// Print shortcuts section
|
||||||
fprintf(stderr, "\n"
|
fprintf(stderr, "\nShortcuts:\n\n");
|
||||||
"Shortcuts:\n"
|
print_shortcuts_intro(cols);
|
||||||
"\n"
|
for (size_t i = 0; i < ARRAY_LEN(shortcuts); ++i) {
|
||||||
" In the following list, MOD is the shortcut modifier. By default,\n"
|
print_shortcut(&shortcuts[i], cols);
|
||||||
" it's (left) Alt or (left) Super, but it can be configured by\n"
|
}
|
||||||
" --shortcut-mod (see above).\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+f\n"
|
|
||||||
" Switch fullscreen mode\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+Left\n"
|
|
||||||
" Rotate display left\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+Right\n"
|
|
||||||
" Rotate display right\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+g\n"
|
|
||||||
" Resize window to 1:1 (pixel-perfect)\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+w\n"
|
|
||||||
" Double-click on black borders\n"
|
|
||||||
" Resize window to remove black borders\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+h\n"
|
|
||||||
" Middle-click\n"
|
|
||||||
" Click on HOME\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+b\n"
|
|
||||||
" MOD+Backspace\n"
|
|
||||||
" Right-click (when screen is on)\n"
|
|
||||||
" Click on BACK\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+s\n"
|
|
||||||
" Click on APP_SWITCH\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+m\n"
|
|
||||||
" Click on MENU\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+Up\n"
|
|
||||||
" Click on VOLUME_UP\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+Down\n"
|
|
||||||
" Click on VOLUME_DOWN\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+p\n"
|
|
||||||
" Click on POWER (turn screen on/off)\n"
|
|
||||||
"\n"
|
|
||||||
" Right-click (when screen is off)\n"
|
|
||||||
" Power on\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+o\n"
|
|
||||||
" Turn device screen off (keep mirroring)\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+Shift+o\n"
|
|
||||||
" Turn device screen on\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+r\n"
|
|
||||||
" Rotate device screen\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+n\n"
|
|
||||||
" Expand notification panel\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+Shift+n\n"
|
|
||||||
" Collapse notification panel\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+c\n"
|
|
||||||
" Copy to clipboard (inject COPY keycode, Android >= 7 only)\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+x\n"
|
|
||||||
" Cut to clipboard (inject CUT keycode, Android >= 7 only)\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+v\n"
|
|
||||||
" Copy computer clipboard to device, then paste (inject PASTE\n"
|
|
||||||
" keycode, Android >= 7 only)\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+Shift+v\n"
|
|
||||||
" Inject computer clipboard text as a sequence of key events\n"
|
|
||||||
"\n"
|
|
||||||
" MOD+i\n"
|
|
||||||
" Enable/disable FPS counter (print frames/second in logs)\n"
|
|
||||||
"\n"
|
|
||||||
" Ctrl+click-and-move\n"
|
|
||||||
" Pinch-to-zoom from the center of the screen\n"
|
|
||||||
"\n"
|
|
||||||
" Drag & drop APK file\n"
|
|
||||||
" Install APK from computer\n"
|
|
||||||
"\n"
|
|
||||||
" Drag & drop non-APK file\n"
|
|
||||||
" Push file to device (see --push-target)\n"
|
|
||||||
"\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
|
|
Loading…
Reference in a new issue