Merge branch 'master' into assign-command

This commit is contained in:
Zandr Martin 2016-06-11 09:33:24 -05:00 committed by GitHub
commit 66caee645c
7 changed files with 113 additions and 64 deletions

View file

@ -5,17 +5,24 @@
char *read_line(FILE *file) { char *read_line(FILE *file) {
size_t length = 0, size = 128; size_t length = 0, size = 128;
char *string = malloc(size); char *string = malloc(size);
char lastChar = '\0';
if (!string) { if (!string) {
return NULL; return NULL;
} }
while (1) { while (1) {
int c = getc(file); int c = getc(file);
if (c == '\n' && lastChar == '\\'){
--length; // Ignore last character.
lastChar = '\0';
continue;
}
if (c == EOF || c == '\n' || c == '\0') { if (c == EOF || c == '\n' || c == '\0') {
break; break;
} }
if (c == '\r') { if (c == '\r') {
continue; continue;
} }
lastChar = c;
if (length == size) { if (length == size) {
char *new_string = realloc(string, size *= 2); char *new_string = realloc(string, size *= 2);
if (!new_string) { if (!new_string) {

View file

@ -1639,7 +1639,7 @@ static struct cmd_results *cmd_output(int argc, char **argv) {
} }
char *src = join_args(argv + i, argc - i - 1); char *src = join_args(argv + i, argc - i - 1);
char *mode = argv[argc - 1]; char *mode = argv[argc - 1];
if (wordexp(src, &p, 0) != 0) { if (wordexp(src, &p, 0) != 0 || p.we_wordv[0] == NULL) {
return cmd_results_new(CMD_INVALID, "output", "Invalid syntax (%s)", src); return cmd_results_new(CMD_INVALID, "output", "Invalid syntax (%s)", src);
} }
free(src); free(src);
@ -1699,12 +1699,16 @@ static struct cmd_results *cmd_output(int argc, char **argv) {
swayc_t *cont = NULL; swayc_t *cont = NULL;
for (int i = 0; i < root_container.children->length; ++i) { for (int i = 0; i < root_container.children->length; ++i) {
cont = root_container.children->items[i]; cont = root_container.children->items[i];
if (cont->name && strcmp(cont->name, output->name) == 0) { if (cont->name && ((strcmp(cont->name, output->name) == 0) || (strcmp(output->name, "*") == 0))) {
apply_output_config(output, cont); apply_output_config(output, cont);
if (strcmp(output->name, "*") != 0) {
// stop looking if the output config isn't applicable to all outputs
break; break;
} }
} }
} }
}
return cmd_results_new(CMD_SUCCESS, NULL, NULL); return cmd_results_new(CMD_SUCCESS, NULL, NULL);
} }
@ -2153,12 +2157,26 @@ static int compare_set_qsort(const void *_l, const void *_r) {
} }
static struct cmd_results *cmd_set(int argc, char **argv) { static struct cmd_results *cmd_set(int argc, char **argv) {
char *tmp;
int size;
struct cmd_results *error = NULL; struct cmd_results *error = NULL;
if (!config->reading) return cmd_results_new(CMD_FAILURE, "set", "Can only be used in config file."); if (!config->reading) return cmd_results_new(CMD_FAILURE, "set", "Can only be used in config file.");
if ((error = checkarg(argc, "set", EXPECTED_AT_LEAST, 2))) { if ((error = checkarg(argc, "set", EXPECTED_AT_LEAST, 2))) {
return error; return error;
} }
if (argv[0][0] != '$') {
sway_log(L_INFO, "Warning: variable '%s' doesn't start with $", argv[0]);
size = asprintf(&tmp, "%s%s", "$", argv[0]);
if (size == -1) {
return cmd_results_new(CMD_FAILURE, "set", "Not possible to create variable $'%s'", argv[0]);
}
argv[0] = strdup(tmp);
free(tmp);
}
struct sway_variable *var = NULL; struct sway_variable *var = NULL;
// Find old variable if it exists // Find old variable if it exists
int i; int i;
@ -3040,7 +3058,7 @@ static struct cmd_results *bar_cmd_swaybar_command(int argc, char **argv) {
} }
static struct cmd_results *bar_cmd_tray_output(int argc, char **argv) { static struct cmd_results *bar_cmd_tray_output(int argc, char **argv) {
sway_log(L_ERROR, "warning: tray_output is not supported on wayland"); sway_log(L_ERROR, "Warning: tray_output is not supported on wayland");
return cmd_results_new(CMD_SUCCESS, NULL, NULL); return cmd_results_new(CMD_SUCCESS, NULL, NULL);
} }

View file

@ -403,6 +403,11 @@ static bool load_include_config(const char *path, const char *parent_dir, struct
char *real_path = realpath(full_path, NULL); char *real_path = realpath(full_path, NULL);
free(full_path); free(full_path);
if (real_path == NULL) {
sway_log(L_DEBUG, "%s not found.", path);
return false;
}
// check if config has already been included // check if config has already been included
int j; int j;
for (j = 0; j < config->config_chain->length; ++j) { for (j = 0; j < config->config_chain->length; ++j) {

View file

@ -19,10 +19,15 @@ Commands
-------- --------
**status_command** <status command>:: **status_command** <status command>::
Executes the bar _status command_ with _sh -c_. Executes the bar _status command_ with _sh -c_. Each line of text printed to
stdout from this command will be displayed in the status area of the bar. You
can also use the i3bar JSON protocol:
+
https://i3wm.org/docs/i3bar-protocol.html
**pango_markup** <enabled|disabled>:: **pango_markup** <enabled|disabled>::
Enables or disables pango markup for plaintext statuslines. Enables or disables pango markup for status lines. This has no effect on
status lines using the i3bar JSON protocol.
**id** <bar_id>:: **id** <bar_id>::
Sets the ID of the bar. Sets the ID of the bar.
@ -112,4 +117,4 @@ channel.
See Also See Also
-------- --------
**sway**(5) **sway-input**(5) **sway**(5)

View file

@ -37,7 +37,8 @@ Commands
Enables or disables middle click emulation. Enables or disables middle click emulation.
**input** <identifier> natural_scroll <enabled|disabled>:: **input** <identifier> natural_scroll <enabled|disabled>::
Enables or disables natural scrolling for the specified input device. Enables or disables natural (inverted) scrolling for the specified input
device.
**input** <identifier> pointer_accel <[-1,1]>:: **input** <identifier> pointer_accel <[-1,1]>::
Changes the pointer acceleration for the specified input device. Changes the pointer acceleration for the specified input device.
@ -51,4 +52,4 @@ Commands
See Also See Also
-------- --------
**sway**(5) **sway-bar**(5) **sway**(5)

View file

@ -52,7 +52,7 @@ You may run sway from an ongoing x11 session to run it within x. Otherwise, you
can run sway on a tty and it will use your outputs directly. can run sway on a tty and it will use your outputs directly.
*Important note for nvidia users*: The proprietary nvidia driver does _not_ have *Important note for nvidia users*: The proprietary nvidia driver does _not_ have
support for Wayland as of 2016-03-27. Use nouveau. support for Wayland as of 2016-06-10. Use nouveau.
Commands Commands
-------- --------
@ -60,7 +60,7 @@ Commands
If sway is currently running, you may run _sway [command]_ to send _command_ to If sway is currently running, you may run _sway [command]_ to send _command_ to
the running instance of sway. The same commands you would use in the config file the running instance of sway. The same commands you would use in the config file
are valid here (see **sway**(5)). For compatibility reasons, you may also issue are valid here (see **sway**(5)). For compatibility reasons, you may also issue
commands with **sway-msg**(1) or **i3-msg**(1) (or even with **i3**(1), probably). commands with **swaymsg**(1) or **i3-msg**(1) (or even with **i3**(1), probably).
Configuration Configuration
------------- -------------
@ -69,11 +69,14 @@ If _-c_ is not specified, sway will look in several locations for your config
file. The suggested location for your config file is ~/.config/sway/config. file. The suggested location for your config file is ~/.config/sway/config.
~/.sway/config will also work, and the rest of the usual XDG config locations ~/.sway/config will also work, and the rest of the usual XDG config locations
are supported. If no sway config is found, sway will attempt to load an i3 are supported. If no sway config is found, sway will attempt to load an i3
config from all the config locations i3 supports. At last, sway looks for a config from all the config locations i3 supports. Sway looks for a config file in
config file in a fallback directory, which is /etc/sway/ by default. A standard a fallback directory as a last resort, which is /etc/sway/ by default. A standard
configuration file is installed at this location. If still nothing is found, configuration file is installed at this location. If still nothing is found,
you will receive an error. you will receive an error.
To write your own config, it's suggested that you copy the default config file to
the location of your choosing and start there.
For information on the config file format, see **sway**(5). For information on the config file format, see **sway**(5).
Authors Authors
@ -86,4 +89,4 @@ source contributors. For more information about sway development, see
See Also See Also
-------- --------
**sway**(5) **swaymsg**(1) **swaygrab**(1) **sway-input** (5) **sway-bar** (5) **sway**(5) **swaymsg**(1) **swaygrab**(1) **sway-input**(5) **sway-bar**(5)

View file

@ -16,7 +16,13 @@ on startup. These commands usually consist of setting your preferences and
setting key bindings. An example config is likely present in /etc/sway/config setting key bindings. An example config is likely present in /etc/sway/config
for you to check out. for you to check out.
These commands can be executed in your config file, via **sway-msg**(1), or via Lines in the configuration file might be extended through multiple lines by
adding a '\' character at the end of line. e.g.:
bindsym Shift+XF86AudioRaiseVolume exec pactl set-sink-volume \
$(pactl list sinks | grep -B 1 RUNNING | sed '1q;d' | sed 's/[^0-9]\+//g') +5%
These commands can be executed in your config file, via **swaymsg**(1), or via
the bindsym command. the bindsym command.
Commands Commands
@ -30,53 +36,28 @@ The following commands may only be used in the configuration file.
+ +
See **sway-bar**(5) for details. See **sway-bar**(5) for details.
**input** <input device> <block of commands>::
Append _{_ to this command, the following lines will be commands to configure
the named input device, and _}_ on its own line will close the block.
+
See **sway-input**(5) for details.
**set** <name> <value>:: **set** <name> <value>::
Creates a substitution for _value_ that can be used with $_name_ in other Sets variable $name to _value_. You can use the new variable in the arguments
commands. of future commands.
The following commands cannot be used directly in the configuration file. The following commands cannot be used directly in the configuration file.
They are expected to be used with **bindsym** or at runtime through **swaymsg**(1). They are expected to be used with **bindsym** or at runtime through **swaymsg**(1).
**border** <normal|pixel> [<n>]:: **border** <normal|pixel> [<n>]::
Set border style for focused window. _normal_ includes a border of thickness Set border style for focused window. _normal_ includes a border of thickness
_n_ and a title bar. _pixel_ is just the border without title bar. Default is _n_ and a title bar. _pixel_ is a border without title bar _n_ pixels thick.
_normal_ with border thickness 2. Default is _normal_ with border thickness 2.
**border** <none|toggle>:: **border** <none|toggle>::
Set border style for focused window to _none_ or _toggle_ between the Set border style for focused window to _none_ or _toggle_ between the
available border styles: _normal_, _pixel_, _none_. available border styles: _normal_, _pixel_, _none_.
**new_window** <normal|none|pixel> [<n>]::
Set default border style for new windows.
**new_float** <normal|none|pixel> [<n>]::
Set default border style for new floating windows. This does only apply to
windows that are spawned in floating mode.
**exit**:: **exit**::
Exit sway and end your Wayland session. Exit sway and end your Wayland session.
**floating** <enable|disable|toggle>:: **floating** <enable|disable|toggle>::
Make focused view floating, non-floating, or the opposite of what it is now. Make focused view floating, non-floating, or the opposite of what it is now.
**floating_maximum_size** <width> x <height>::
Specifies the maximum dimensions of floating windows.
Uses the container dimensions as default.
-1 x -1 will remove any restriction on dimentions.
0 x 0 has the same behavior as not setting any value.
If in conflict this option has precedence over floating_minimum_size.
**floating_minimum_size** <width> x <height>::
Specifies the minimum dimensions of floating windows.
Default parameters are 75 x 50.
-1 and 0 are invalid parameters, default will be used instead.
**focus** <direction>:: **focus** <direction>::
Direction may be one of _up_, _down_, _left_, _right_, or _parent_. The Direction may be one of _up_, _down_, _left_, _right_, or _parent_. The
directional focus commands will move the focus in that direction. The parent directional focus commands will move the focus in that direction. The parent
@ -95,9 +76,6 @@ They are expected to be used with **bindsym** or at runtime through **swaymsg**(
**fullscreen**:: **fullscreen**::
Toggles fullscreen status for the focused view. Toggles fullscreen status for the focused view.
**hide_edge_borders** <none|vertical|horizontal|both>::
Hide window borders adjacent to the screen edges. Default is _none_.
**layout** <mode>:: **layout** <mode>::
Sets the layout mode of the focused container. _mode_ can be one of _splith_, Sets the layout mode of the focused container. _mode_ can be one of _splith_,
_splitv_, _toggle split_, _stacking_ or _tabbed_. _splitv_, _toggle split_, _stacking_ or _tabbed_.
@ -134,8 +112,8 @@ They are expected to be used with **bindsym** or at runtime through **swaymsg**(
Equivalent to **split toggle**. Equivalent to **split toggle**.
**sticky** <enable|disable|toggle>:: **sticky** <enable|disable|toggle>::
If enabled and the windows is floating it will always be present on the active "Sticks" a floating window to the current output so that it shows up on all
workspace on that output. workspaces.
The following commands may be used either in the configuration file The following commands may be used either in the configuration file
or triggered at runtime. or triggered at runtime.
@ -149,7 +127,7 @@ or triggered at runtime.
**bindsym** <key combo> <command>:: **bindsym** <key combo> <command>::
Binds _key combo_ to execute _command_ when pressed. You may use XKB key Binds _key combo_ to execute _command_ when pressed. You may use XKB key
names here (**xev**(1) is a good tool for discovering them). An example names here (**xev**(1) is a good tool for discovering them). An example
bindsym command would be _bindsym Mod1+Shift+f exec firefox_, which would bindsym command would be **bindsym Mod1+Shift+f exec firefox**, which would
execute Firefox if the alt, shift, and F keys are pressed together. Any execute Firefox if the alt, shift, and F keys are pressed together. Any
valid sway command is eligible to be bound to a key combo. valid sway command is eligible to be bound to a key combo.
+ +
@ -195,18 +173,18 @@ The default colors are:
[options="header"] [options="header"]
|=========================================================================== |===========================================================================
|color_class |border |background |text |indicator |child_border |color_class |border |background |text |indicator |child_border
|background |n/a |#ffffffff |n/a |n/a |n/a |background |n/a |#ffffff |n/a |n/a |n/a
|focused |#4c7899ff |#285577ff |#ffffffff |#2e9ef4ff |#285577ff |focused |#4c7899 |#285577 |#ffffff |#2e9ef4 |#285577
|focused_inactive |#333333ff |#5f676aff |#ffffffff |#484e50ff |#5f676aff |focused_inactive |#333333 |#5f676a |#ffffff |#484e50 |#5f676a
|unfocused |#333333ff |#222222ff |#888888ff |#292d2eff |#222222ff |unfocused |#333333 |#222222 |#888888 |#292d2e |#222222
|urgent |#2f343aff |#900000ff |#ffffffff |#900000ff |#900000ff |urgent |#2f343a |#900000 |#ffffff |#900000 |#900000
|placeholder |#000000ff |#0c0c0cff |#ffffffff |#000000ff |#0c0c0cff |placeholder |#000000 |#0c0c0c |#ffffff |#000000 |#0c0c0c
|=========================================================================== |===========================================================================
-- --
**debuglog** <on|off|toggle>:: **debuglog** <on|off|toggle>::
Enables, disables or toggles logging for debug. The toggle argument cannot Enables, disables or toggles debug logging. The toggle argument cannot be used
be used in the configuration file. in the configuration file.
**exec** <shell command>:: **exec** <shell command>::
Executes _shell command_ with sh. Executes _shell command_ with sh.
@ -215,21 +193,32 @@ The default colors are:
Like exec, but the shell command will be executed _again_ after *reload* or Like exec, but the shell command will be executed _again_ after *reload* or
*restart* is executed. *restart* is executed.
**floating_maximum_size** <width> x <height>::
Specifies the maximum dimensions of floating windows.
Uses the container dimensions as default.
-1 x -1 will remove any restriction on dimentions.
0 x 0 has the same behavior as not setting any value.
If in conflict this option has precedence over floating_minimum_size.
**floating_minimum_size** <width> x <height>::
Specifies the minimum dimensions of floating windows.
Default parameters are 75 x 50.
-1 and 0 are invalid parameters, default will be used instead.
**floating_modifier** <modifier> [normal|inverse]:: **floating_modifier** <modifier> [normal|inverse]::
When the _modifier_ key is held down, you may use left click to drag floating When the _modifier_ key is held down, you may hold left click to move floating
windows, and right click to resize them. Unlike i3, this modifier may also be windows, and right click to resize them. Unlike i3, this modifier may also be
used to resize and move windows that are tiled. With the _inverse_ mode used to resize and move windows that are tiled. With the _inverse_ mode
enabled, left click is used for resizing and right click for dragging. The enabled, left click is used for resizing and right click for dragging. The
mode paramenter is optional and defaults to _normal_ if it isn't defined. mode paramenter is optional and defaults to _normal_ if it isn't defined.
**floating_scroll** <up|down|left|right> [command]:: **floating_scroll** <up|down|left|right> [command]::
Sets the command to be executed on scrolling in the specified Sets a command to be executed when the mouse wheel is scrolled in the
direction while holding the floating modifier. Resets the specified direction while holding the floating modifier. Resets the command,
command, when given no arguments. when given no arguments.
**focus_follows_mouse** <yes|no>:: **focus_follows_mouse** <yes|no>::
If set to _yes_, the currently focused view will change as you move your If set to _yes_, moving your mouse over a window will focus that window.
mouse around the screen to the view that ends up underneath your mouse.
**for_window** <criteria> <command>:: **for_window** <criteria> <command>::
Whenever a window that matches _criteria_ appears, run list of commands. See Whenever a window that matches _criteria_ appears, run list of commands. See
@ -256,6 +245,15 @@ The default colors are:
workspace (or current workspace), and _current_ changes gaps for the current workspace (or current workspace), and _current_ changes gaps for the current
view or workspace. view or workspace.
**hide_edge_borders** <none|vertical|horizontal|both>::
Hide window borders adjacent to the screen edges. Default is _none_.
**input** <input device> <block of commands>::
Append _{_ to this command, the following lines will be commands to configure
the named input device, and _}_ on its own line will close the block.
+
See **sway-input**(5) for details.
**smart_gaps** <on|off>:: **smart_gaps** <on|off>::
If smart_gaps are _on_ then gaps will only be enabled if a workspace has more If smart_gaps are _on_ then gaps will only be enabled if a workspace has more
than one child container. than one child container.
@ -269,8 +267,20 @@ The default colors are:
When _output_: place mouse at center of newly focused window when changing When _output_: place mouse at center of newly focused window when changing
output. When _none_: don't move mouse. output. When _none_: don't move mouse.
**new_window** <normal|none|pixel> [<n>]::
Set default border style for new windows.
**new_float** <normal|none|pixel> [<n>]::
Set default border style for new floating windows. This only applies to
windows that are spawned in floating mode, not windows that become floating
after the fact.
**output** <name> <resolution|res> <WIDTHxHEIGHT>:: **output** <name> <resolution|res> <WIDTHxHEIGHT>::
Configures the specified output to use the given resolution. Configures the specified output to use the given resolution.
+
_Note_: sway does not currently support modesetting. Your output's native
resolution will be used and the screen will be scaled from the resolution
specified to your native resolution.
**output** <name> <position|pos> <X,Y>:: **output** <name> <position|pos> <X,Y>::
Configures the specified output to be arranged at the given position. Configures the specified output to be arranged at the given position.