diff --git a/README.md b/README.md index 7de5857..a676789 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,7 @@ Simple helper for turning on/off connected/disconnected monitors with `xrandr`. ## Usage - -`swm [monitor-1...montior-n]` e.g. `swm LVDS1 HDMI1` +`swm [monitor-1...montior-n] [--postCmd="cmd"]` e.g. `swm LVDS1 HDMI1` If `monitor-1` to `monitor-n` is specified `swm` will turn on these monitors and place them from left to right in the order given. If a provided monitor is @@ -13,6 +12,23 @@ not connected it will be skipped. If no monitors are specified all connected monitors will be turned on and placed from left to right in alphabetical order of their name. +If `--postCmd` is given, this command is executed after switching the monitors. +This is usefull to tell your window manager to re-detect monitors, e.g. for +herbstluftwm `herbstclient reload`. + +`swm -l` or `swm --list` + +List all devices with the connectivity status. + +The configuration can be placed in `$XDG_CONFIG_HOME/switchmon/config.json` in +the form of + +``` +{ + "postCmd": "some command" +} +``` + ## Requirements Node.js > 4.x on your PATH. diff --git a/cli.js b/cli.js index b59218c..ac732f1 100755 --- a/cli.js +++ b/cli.js @@ -3,6 +3,8 @@ const argv = require('minimist')(process.argv.slice(2)); const swm = require('./swm.js'); +const config = require('./config.js'); +const postCmd = argv.postCmd || config.postCmd; if (argv.help || argv.h) { console.log( @@ -10,7 +12,7 @@ if (argv.help || argv.h) { Usage: -'swm [monitor-1...montior-n]' e.g. 'swm LVDS1 HDMI1' +'swm [monitor-1...montior-n] [--postCmd="cmd"]' e.g. 'swm LVDS1 HDMI1' If 'monitor-1' to 'monitor-n' is specified 'swm' will turn on these monitors and place them from left to right in the order given. If a provided monitor is @@ -19,9 +21,21 @@ not connected it will be skipped. If no monitors are specified all connected monitors will be turned on and placed from left to right in alphabetical order of their name. +If "--postCmd" is given, this command is executed after switching the monitors. +This is usefull to tell your window manager to re-detect monitors, e.g. for +herbstluftwm "herbstclient reload". + 'swm -l' or 'swm --list' -List all devices with the connectivity status.` +List all devices with the connectivity status. + +The configuration can be placed in "$XDG_CONFIG_HOME/switchmon/config.json" in +the form of + +{ + "postCmd": "some command" +}` + ); process.exit(2); @@ -40,7 +54,7 @@ if (argv.list || argv.l) { swm.getDevices() .then(swm.generateXrandrOptions.bind(null, argv._)) .then(swm.switchDevices) - .then(swm.executePostCmd.bind(null, argv.postCmd)) + .then(swm.executePostCmd.bind(null, postCmd)) .catch(err => { console.error(err); }); diff --git a/config.js b/config.js new file mode 100644 index 0000000..c402929 --- /dev/null +++ b/config.js @@ -0,0 +1,17 @@ +'use strict'; + +const configPath = require('xdg').basedir.configPath('switchmon/config.json'); + +const defaults = { + postCmd: undefined, +}; + +let config = Object.assign({}, defaults); + +try { + config = Object.assign(config, require(configPath)); +} catch(err) { + // No config found in "${configPath}". Using defaults... +} + +module.exports = config; diff --git a/package.json b/package.json index c89bb82..ab3aecb 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, - "bin" : { "swm" : "./cli.js" }, + "bin": { + "swm": "./cli.js" + }, "repository": { "type": "git", "url": "git+https://github.com/tomru/switchmon.git" @@ -23,6 +25,7 @@ "homepage": "https://github.com/tomru/switchmon#readme", "dependencies": { "minimist": "^1.2.0", + "xdg": "^0.1.1", "xrandr-parse": "^0.1.1" } }