aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock69
-rw-r--r--Cargo.toml4
-rw-r--r--src/desktop.rs23
-rw-r--r--src/dotwm.rs9
-rw-r--r--src/event.rs30
-rw-r--r--src/main.rs9
-rw-r--r--src/safe_x11/mod.rs5
-rw-r--r--src/safe_x11/window.rs12
-rw-r--r--src/socket/mod.rs13
-rw-r--r--src/socket/parser.rs8
10 files changed, 129 insertions, 53 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 092fc2a..8548148 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2,6 +2,7 @@
name = "dotwm"
version = "0.1.0"
dependencies = [
+ "clippy 0.0.71 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"unix_socket 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -14,6 +15,33 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "clippy"
+version = "0.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "clippy_lints 0.0.71 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quine-mc_cluskey 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "toml 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "clippy_lints"
+version = "0.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "quine-mc_cluskey 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "semver 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "toml 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "lazy_static"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -24,11 +52,52 @@ version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "nom"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "pkg-config"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "quine-mc_cluskey"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rustc-serialize"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "semver"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "nom 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "toml"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "unix_socket"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index 5889c87..9f510e8 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -7,7 +7,11 @@ authors = ["Matias Linares <matiaslina@openmailbox.org>"]
libc = "0.2.*"
unix_socket = "*"
lazy_static = "0.1.15"
+clippy = { version ="*", optional = true }
[dependencies.x11]
version = "*"
features = ["xlib"]
+
+[features]
+default = []
diff --git a/src/desktop.rs b/src/desktop.rs
index afe6a28..aac472f 100644
--- a/src/desktop.rs
+++ b/src/desktop.rs
@@ -69,18 +69,15 @@ impl Desktop {
pub fn remove_window(&mut self, w: xlib::Window) {
let pos = self.window_list.iter().position(|xw| xw.inner == w);
- match pos {
- Some(idx) => {
- let new_idx = if idx == 0 {
- if self.window_list.len() == 1 { usize::max_value() } else { 0 }
- } else {
- idx - 1
- };
- self.window_list.remove(idx);
- self.cw_idx = new_idx;
- self.focus_current_window();
- },
- None => (),
+ if let Some(idx) = pos {
+ let new_idx = if idx == 0 {
+ if self.window_list.len() == 1 { usize::max_value() } else { 0 }
+ } else {
+ idx - 1
+ };
+ self.window_list.remove(idx);
+ self.cw_idx = new_idx;
+ self.focus_current_window();
}
}
@@ -160,7 +157,7 @@ impl Desktop {
(screen_width as i32, screen_height as i32),
];
- for w in self.window_list.iter() {
+ for w in &self.window_list {
let attrs = w.attributes();
result.push((attrs.x, attrs.y));
result.push((attrs.x + attrs.width, attrs.y + attrs.height));
diff --git a/src/dotwm.rs b/src/dotwm.rs
index 666deff..fd28765 100644
--- a/src/dotwm.rs
+++ b/src/dotwm.rs
@@ -51,6 +51,7 @@ pub enum WmAtom {
}
#[derive(Hash,Eq,PartialEq)]
+#[allow(enum_variant_names)]
pub enum NetAtom {
NetSupported,
NetFullscreen,
@@ -74,7 +75,7 @@ pub struct DotWM {
pub desktops: Vec<Desktop>,
}
-/// DotWM state.
+/// `DotWM` state.
impl DotWM {
/// Create a state of the Dot Window Manager
pub fn new() -> DotWM {
@@ -218,6 +219,12 @@ impl DotWM {
}
}
+impl Default for DotWM {
+ fn default() -> Self {
+ DotWM::new()
+ }
+}
+
impl Drop for DotWM {
fn drop(&mut self) {
close_display(self.display);
diff --git a/src/event.rs b/src/event.rs
index b97686f..768e37a 100644
--- a/src/event.rs
+++ b/src/event.rs
@@ -56,21 +56,21 @@ pub enum Event {
impl fmt::Debug for Event {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- let s = match self {
- &Event::Key(ev, pressed) => format!("Key({}, {})", XEvent::from(ev).get_type(), pressed),
- &Event::Button(ev, pressed) => format!("Button({}, {})", XEvent::from(ev).get_type(), pressed),
- &Event::Drag(ev) => format!("Drag({})", XEvent::from(ev).get_type()),
- &Event::Generic(ev) => format!("Generic({})", XEvent::from(ev).get_type()),
- &Event::Enter(ev) => format!("Enter({})", XEvent::from(ev).get_type()),
- &Event::Leave(ev) => format!("Enter({})", XEvent::from(ev).get_type()),
- &Event::Create(ev) => format!("Create({})", XEvent::from(ev).get_type()),
- &Event::Destroy(ev) => format!("Destroy({})", XEvent::from(ev).get_type()),
- &Event::Unmap(ev) => format!("Unmap({})", XEvent::from(ev).get_type()),
- &Event::Map(ev) => format!("Map({})", XEvent::from(ev).get_type()),
- &Event::Configure(ev) => format!("Configure({})", XEvent::from(ev).get_type()),
- &Event::Expose(ev) => format!("Expose({})", XEvent::from(ev).get_type()),
- &Event::Socket(_) => format!("Socket()"),
- &Event::NoEvent => format!("NoEvent"),
+ let s = match *self {
+ Event::Key(ev, pressed) => format!("Key({}, {})", XEvent::from(ev).get_type(), pressed),
+ Event::Button(ev, pressed) => format!("Button({}, {})", XEvent::from(ev).get_type(), pressed),
+ Event::Drag(ev) => format!("Drag({})", XEvent::from(ev).get_type()),
+ Event::Generic(ev) => format!("Generic({})", XEvent::from(ev).get_type()),
+ Event::Enter(ev) => format!("Enter({})", XEvent::from(ev).get_type()),
+ Event::Leave(ev) => format!("Enter({})", XEvent::from(ev).get_type()),
+ Event::Create(ev) => format!("Create({})", XEvent::from(ev).get_type()),
+ Event::Destroy(ev) => format!("Destroy({})", XEvent::from(ev).get_type()),
+ Event::Unmap(ev) => format!("Unmap({})", XEvent::from(ev).get_type()),
+ Event::Map(ev) => format!("Map({})", XEvent::from(ev).get_type()),
+ Event::Configure(ev) => format!("Configure({})", XEvent::from(ev).get_type()),
+ Event::Expose(ev) => format!("Expose({})", XEvent::from(ev).get_type()),
+ Event::Socket(_) => String::from("Socket()"),
+ Event::NoEvent => String::from("NoEvent"),
};
write!(f, "{}", s)
diff --git a/src/main.rs b/src/main.rs
index 4f292b6..b1873f3 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,5 +1,7 @@
// See LICENSE file for copyright and license details.
+#![cfg_attr(feature="clippy", feature(plugin))]
+#![cfg_attr(feature="clippy", plugin(clippy))]
extern crate libc;
extern crate x11;
extern crate unix_socket;
@@ -32,9 +34,8 @@ const SOCKET_PATH: &'static str = "./dotwm.sock";
fn run_autostart() {
let paths = &["./autostart", "/home/matias/.config/dotwm/autostart"];
for path in paths {
- match exec_cmd(path, &[]) {
- Ok(_) => break,
- Err(_) => (),
+ if exec_cmd(path, &[]).is_ok() {
+ break;
}
}
}
@@ -86,7 +87,7 @@ fn main() {
s.read_to_string(&mut buf).unwrap();
for line in buf.lines() {
- let res = parser::parse(&line);
+ let res = parser::parse(line);
match res {
Ok(pcmd) => {
pcmd.handle(&mut dotwm, &mut bindings);
diff --git a/src/safe_x11/mod.rs b/src/safe_x11/mod.rs
index 3d08a4e..613424a 100644
--- a/src/safe_x11/mod.rs
+++ b/src/safe_x11/mod.rs
@@ -74,13 +74,13 @@ pub fn close_display(display: *mut Display) {
unsafe { xlib::XCloseDisplay(display); }
}
-/// Get the file descriptor for the XServer
+/// Get the file descriptor for the `XServer`
pub fn x11_fd(display: *mut Display) -> c_int {
unsafe { XConnectionNumber(display) }
}
/// Get the next event from the xserver. This call will not block forever
-/// (like XNextEvent), instead it will wait for a certain time (1 second
+/// (like `XNextEvent`), instead it will wait for a certain time (1 second
/// for now, but it can change) so we're not blocking the socket interface
/// on the main thread.
pub fn next_xevent(display: *mut Display) -> XEvent {
@@ -124,6 +124,7 @@ pub fn root_window(display: *mut Display) -> Window {
/// 0, 0
/// );
/// ```
+#[allow(too_many_arguments)]
pub fn grab_button(display: *mut Display, button: u32, modifiers: u32,
owner_events: bool, event_mask: i64, pointer_mode: i32,
keyboard_mode: i32, confine_to: Window,
diff --git a/src/safe_x11/window.rs b/src/safe_x11/window.rs
index 6d1e54e..eac4dbd 100644
--- a/src/safe_x11/window.rs
+++ b/src/safe_x11/window.rs
@@ -260,7 +260,7 @@ impl XWindow {
.next() {
let diff = attrs.width - (*v - attrs.x);
if *v - attrs.x > 0 {
- let _ = self.resize_to(attrs.width - diff, attrs.height);
+ self.resize_to(attrs.width - diff, attrs.height);
}
}
}
@@ -273,7 +273,7 @@ impl XWindow {
.skip_while(|&a| *a <= win_bound)
.next() {
let new_width = *v - attrs.x;
- let _ = self.resize_to(new_width, attrs.height);
+ self.resize_to(new_width, attrs.height);
}
}
@@ -285,7 +285,7 @@ impl XWindow {
.next() {
let diff = attrs.height - (*v - attrs.y);
if *v - attrs.y > 0 {
- let _ = self.resize_to(attrs.width, attrs.height - diff);
+ self.resize_to(attrs.width, attrs.height - diff);
}
}
}
@@ -298,7 +298,7 @@ impl XWindow {
.skip_while(|&a| *a <= win_bound)
.next() {
let new_height = *v - attrs.y;
- let _ = self.resize_to(attrs.width, new_height);
+ self.resize_to(attrs.width, new_height);
}
}
@@ -363,8 +363,8 @@ impl XWindow {
let gc = xlib::XCreateGC(self.display, self.inner, 0, ptr::null_mut());
xlib::XSetForeground(self.display, gc, XWhitePixel(self.display, 0));
xlib::XSetBackground(self.display, gc, XBlackPixel(self.display, 0));
- println!("Loading fixed");
- let font: xlib::XFontStruct = ptr::read(xlib::XLoadQueryFont(self.display, CString::new("fixed").unwrap().as_ptr()));
+ let cstring = CString::new("fixed").unwrap();
+ let font: xlib::XFontStruct = ptr::read(xlib::XLoadQueryFont(self.display, cstring.as_ptr()));
xlib::XSetFont(self.display, gc, font.fid);
xlib::XClearWindow(self.display, self.inner);
XDrawString(self.display, self.inner, gc,
diff --git a/src/socket/mod.rs b/src/socket/mod.rs
index 66dae16..c29db2b 100644
--- a/src/socket/mod.rs
+++ b/src/socket/mod.rs
@@ -25,14 +25,11 @@ pub struct ParsedCmd<'a> {
impl<'a> ParsedCmd<'a> {
pub fn handle(self, wm: &mut DotWM, bindings: &mut BindingHash) {
- match self.f {
- FnType::Bind => {
- let modifier: u32 = self.modifiers.iter()
- .fold(0, |acc, x| acc | x );
- add_binding(wm, bindings,
- self.key, modifier, self.func, &self.args);
- },
- _ => (),
+ if self.f == FnType::Bind {
+ let modifier: u32 = self.modifiers.iter()
+ .fold(0, |acc, x| acc | x );
+ add_binding(wm, bindings,
+ self.key, modifier, self.func, &self.args);
}
}
}
diff --git a/src/socket/parser.rs b/src/socket/parser.rs
index 30487d8..e475962 100644
--- a/src/socket/parser.rs
+++ b/src/socket/parser.rs
@@ -36,7 +36,7 @@ fn modifier_from<'a>(s: &'a str) -> Result<u32, &'static str> {
fn modifiers<'a>(s: &'a str) -> Result<Vec<u32>, &'static str> {
let mut result = vec![];
- for smod in s.split("-") {
+ for smod in s.split('-') {
let modifier = simple_try!(modifier_from(smod));
result.push(modifier);
}
@@ -128,8 +128,8 @@ pub fn parse<'a>(input: &'a str) -> Result<ParsedCmd<'a>, &'static str> {
match args.first() {
Some(cmd) => {
- match cmd {
- &"bind" => {
+ match *cmd {
+ "bind" => {
if args.len() > 2 {
let modifiers = simple_try!(modifiers(args[1]));
let key = simple_try!(key(args[2]));
@@ -147,7 +147,7 @@ pub fn parse<'a>(input: &'a str) -> Result<ParsedCmd<'a>, &'static str> {
Err("missing arguments")
}
},
- &"exec" => {
+ "exec" => {
Ok(ParsedCmd {
f: FnType::Exec,
modifiers: vec![],