diff --git a/Xresources b/Xresources index b81d016..3220993 100644 --- a/Xresources +++ b/Xresources @@ -42,7 +42,7 @@ URxvt.scrollBar: false ! Perl extensions URxvt.perl-ext-common: default,matcher,clipboard URxvt.matcher.button: 1 -URxvt.url-launcher: google-chrome +URxvt.url-launcher: firefox URxvt.keysym.M-c: perl:clipboard:copy URxvt.keysym.M-v: perl:clipboard:paste diff --git a/bin/monitors b/bin/monitors index 0b185e0..5dbf1f8 100755 --- a/bin/monitors +++ b/bin/monitors @@ -2,17 +2,17 @@ case $1 in "single") #xrandr --auto --output eDP1 --primary --output DP1 --off - ~/.screenlayout/gsi-single.sh - xrandr --output HDMI1 --off --output DVI-1 --off --output DP1 --off --output eDP1 --mode 1920x1080 --pos 0x0 --rotate normal --output VGA1 --off + ~/.screenlayout/gsi-single.sh + xrandr --output HDMI1 --off --output DVI-1 --off --output DP1 --off --output eDP1 --mode 1920x1080 --pos 0x0 --rotate normal --output VGA1 --off ;; "dual") case $2 in "home") - xrandr --output DP1 --off --output VIRTUAL1 --off --output eDP1 --mode 1920x1080 --pos 0x1080 --rotate normal --output HDMI1 --mode 1920x1080 --pos 0x0 --rotate normal --output VGA1 --off + xrandr --output DP1 --off --output VIRTUAL1 --off --output eDP1 --mode 1920x1080 --pos 0x1080 --rotate normal --output HDMI1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output VGA1 --off ;; *) #xrandr --auto --output eDP1 --primary --right-of DP1 - xrandr --output VIRTUAL1 --off --output DP1 --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI1 --off --output eDP1 --mode 1920x1080 --pos 0x1080 --rotate normal --output VGA1 --off + xrandr --output VIRTUAL1 --off --output DP1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI1 --off --output eDP1 --mode 1920x1080 --pos 1920x0 --rotate normal --output VGA1 --off xrandr --output "DVI-1-0" --off ;; esac diff --git a/bin/passmenu b/bin/passmenu index 88e3877..68b237c 100755 --- a/bin/passmenu +++ b/bin/passmenu @@ -8,4 +8,4 @@ password_files=( "${password_files[@]%.gpg}" ) password=$(printf '%s\n' "${password_files[@]}" | dmenu "$@") -pass -c "$password" +pass "$password" | xsel diff --git a/bin/spotify-remote.py b/bin/spotify-remote.py index a85d44f..b1c5ab2 100755 --- a/bin/spotify-remote.py +++ b/bin/spotify-remote.py @@ -1,5 +1,5 @@ #!/usr/bin/python -# -*- coding: utf-8 -*- +# -*- coding: utf-8 -*- ''' Spoify-remote @@ -33,32 +33,32 @@ SPOTIFY_PROCESS_NAME = 'spotify' SPOTIFY_CLOSED_CHECK = 20000 class SpotifyNotify(): - + spotifyPath = '' - + tryToReconnect = False - + tmpfile = False - + def __init__(self, debugger): self.debug = debugger self.spotifyservice = False - + self.prev = 0 self.new = False self.prevMeta = {} self.notifyid = 0 - + self.connect() - + def __del__(self): if SpotifyNotify and SpotifyNotify.tmpfile: SpotifyNotify.tmpfile.close() - + def connect(self): self.debug.out("Connecting to spotify.") self.bus = dbus.Bus(dbus.Bus.TYPE_SESSION) - + try: self.spotifyservice = self.bus.get_object( 'com.spotify.qt', @@ -69,16 +69,16 @@ class SpotifyNotify(): self.spotifyservice = False self.debug.out("Failed to connect.") self.debug.out(e) - + def executeCommand(self, key): if not key: return - + self.connect() self.debug.out("Running command: {0}".format(key)) self.cmd = self.spotifyservice.get_dbus_method(key, 'org.mpris.MediaPlayer2.Player') self.cmd() - + def pollChange(self): try: self.spotifyservice = self.bus.get_object('com.spotify.qt', '/') @@ -90,19 +90,19 @@ class SpotifyNotify(): except Exception, e: self.debug.out('Spotify service not connected.') SpotifyNotify.tryToReconnect = True - + if (self.prev != self.new): self.trackChange(self.new) self.prev = self.new - + return 1 - + def trackChange(self, *trackChange): if not trackChange[0]: return - + self.prev = trackChange[0] - + trackInfo = {} trackMap = { 'artist' : 'xesam:artist', @@ -122,10 +122,10 @@ class SpotifyNotify(): piece = str(piece[:4]) elif isinstance(piece, list): piece = ", ".join(piece) - + if not isinstance(piece, str): piece = str(piece) - + trackInfo[key] = piece.encode('utf-8') if not self.prevMeta\ @@ -133,7 +133,7 @@ class SpotifyNotify(): or 'iconfilename' not in self.prevMeta\ or self.prevMeta['artist'] != trackInfo['artist']\ or self.prevMeta['album'] != trackInfo['album']: - trackInfo['iconfilename'] = self.retrieveCoverImage(trackInfo) + trackInfo['iconfilename'] = self.retrieveCoverImage(trackInfo) cover_image = '' @@ -145,9 +145,9 @@ class SpotifyNotify(): if cover_image == '': cover_image = APPLICATION_DIR + 'icon_spotify.png' - + self.prevMeta = trackInfo - + # Connect to notification interface on DBUS. self.notifyservice = self.bus.get_object( 'org.freedesktop.Notifications', @@ -171,19 +171,19 @@ class SpotifyNotify(): trackInfo['album'], trackInfo['year'] ) - + # The second param is the replace id, so get the notify id back, # store it, and send it as the replacement on the next call. - self.notifyid = self.notifyservice.Notify( - "Spotify-notify", - self.notifyid, - cover_image, - trackInfo['artist'], - notifyText, - [], - {}, - 2000 - ) + #self.notifyid = self.notifyservice.Notify( + #"Spotify-notify", + #self.notifyid, + #cover_image, + #trackInfo['artist'], + #notifyText, + #[], + #{}, + #2000 + #) def retrieveCoverImage(self, trackInfo): if 'arturl' in trackInfo: @@ -201,13 +201,13 @@ class SpotifyNotify(): trackInfo['trackhash'] ) return iconfilename - + def fetchCoverImageSpotify(self, artist, album, trackhash): try: trackid = trackhash.split(":")[2] url = SPOTIFY_OPEN_URL + trackid tracksite = urllib2.urlopen(url).read() - + # Attempt to get the image url from the open graph image meta tag. imageurl = False metaMatch = re.search( @@ -221,16 +221,16 @@ class SpotifyNotify(): ) if contentMatch: imageurl = contentMatch.group(1) - + if not imageurl: self.debug.out("No cover available.") raise() - + return self.fetchCoverImage(imageurl) except Exception, e: self.debug.out("Couldn't fetch cover image.") self.debug.out(e) - + return '' def fetchCoverImage(self, url): @@ -238,12 +238,12 @@ class SpotifyNotify(): if SpotifyNotify.tmpfile: SpotifyNotify.tmpfile.close() SpotifyNotify.tmpfile = False - + try: SpotifyNotify.tmpfile = tempfile.NamedTemporaryFile() tmpfilename = SpotifyNotify.tmpfile.name self.debug.out("Album art tmp filepath: {0}".format(tmpfilename)) - + coverfile = urllib2.urlopen(url) SpotifyNotify.tmpfile.write(coverfile.read()) SpotifyNotify.tmpfile.flush() @@ -253,16 +253,16 @@ class SpotifyNotify(): self.debug.out(e) return '' - + @staticmethod def startSpotify(Debug): if not SpotifyNotify.spotifyPath: Debug.out("No spotify process identifier found.") return - + ident = SpotifyNotify.spotifyPath Debug.out("Looking for spotify as: {0}".format(ident)) - + procs = SpotifyNotify.checkForProcess( 'ps x | grep "{0}" | grep -v grep'.format(ident), Debug @@ -270,81 +270,81 @@ class SpotifyNotify(): if len(procs): Debug.out("Spotify process found as: {0}".format(" ".join(procs[0]))) return - + Debug.out("Starting new Spotify now.") - + FNULL = open('/dev/null', 'w') spid = Popen([ident], stdout=FNULL, stderr=FNULL).pid if spid: Debug.out("Spotify started, pid: {0}.".format(spid)) else: Debug.out("Spotify could not be started.") - + @staticmethod def checkForClosedSpotify(SN, Debug): if not SpotifyNotify.spotifyPath: Debug.out("No spotify process identifier found.") return False - + ident = SpotifyNotify.spotifyPath Debug.out("Looking for spotify as: {0}".format(ident)) - + procs = SpotifyNotify.checkForProcess( 'ps x | grep "{0}" | grep -v grep'.format(ident), Debug ) if len(procs): Debug.out("Spotify process found as: {0}".format(" ".join(procs[0]))) - + if (SpotifyNotify.tryToReconnect): SN.connect() - + return True - + if SpotifyNotify.tmpfile: SpotifyNotify.tmpfile.close() - + Debug.out("Spotify has been closed, therefore I die.") exit(0) - + @staticmethod def preventDuplicate(Debug): mypid = os.getpid() Debug.out("My pid: {0}".format(mypid)) - + proc = SpotifyNotify.checkForProcess('ps -p {0}'.format(mypid), Debug) if not proc[0][3]: return - + process = proc[0][3] search = 'ps -C {0}'.format(process) - + Debug.out("Looking for other processes named: {0}".format(process).strip()) - + if process == 'python': if not sys.argv[0]: Debug.out("Process started using python, cannot determine script name.") return - + search = 'ps ax | grep "python {0}" | grep -v grep'.format(sys.argv[0]) - + for line in SpotifyNotify.checkForProcess(search, Debug): if int(line[0]) != mypid: print("This program was already running.") Debug.out("I am a duplicate. I shall end myself. ({0})".format(" ".join(line))) exit(0) - + @staticmethod def checkForProcess(proc, Debug): output = [] - + for line in Popen(proc, shell=True, stdout=PIPE).stdout: fields = line.split() if not fields[0].isdigit(): continue - + output.append(fields) - + return output class DebugMe(): @@ -353,11 +353,11 @@ class DebugMe(): self.output = True else: self.output = False - + def out(self, msg): if not self.output: return - + print(">> {0}".format(msg)) if __name__ == "__main__": @@ -387,27 +387,27 @@ if __name__ == "__main__": default = False, help = 'Debug messages will be displayed.' ) - + (options, args) = parser.parse_args() - + Debug = DebugMe(options.debug) print("Spotify-notify v0.6") - + if SPOTIFY_PROCESS_NAME: SpotifyNotify.spotifyPath = SPOTIFY_PROCESS_NAME else: print "Spotify is not running" - sys.exit(0) - + sys.exit(0) + SN = SpotifyNotify(Debug) - + if options.action: action = options.action action = action[0:1].upper() + action[1:] SN.executeCommand(action) - + SpotifyNotify.preventDuplicate(Debug) - + try: indicateserver = indicate.indicate_server_ref_default() indicateserver.set_type("music.spotify") @@ -417,4 +417,4 @@ if __name__ == "__main__": pass SN.pollChange() print "Done" - + diff --git a/bin/zotero b/bin/zotero new file mode 100755 index 0000000..ef86541 --- /dev/null +++ b/bin/zotero @@ -0,0 +1,2 @@ +#!/bin/sh +~/Programs/Zotero_linux-x86_64/run-zotero.sh diff --git a/gitconfig b/gitconfig index 0bbcef2..d0959e6 100644 --- a/gitconfig +++ b/gitconfig @@ -14,3 +14,5 @@ lg1 = log --graph --all --format=format:'%C(yellow)%h%C(reset) - %C(green)(%ad)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative lg2 = log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(bold white)— %an%C(reset)' --abbrev-commit lg = !"git lg1" +[core] + excludesfile = /home/jfernando/.gitignore_global diff --git a/gitignore_global b/gitignore_global new file mode 100644 index 0000000..b136070 --- /dev/null +++ b/gitignore_global @@ -0,0 +1,52 @@ +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# IDEs +###### +.idea +.ropeproject + +# Python +###### +*.pyc + +# VIM +###### +*.swp +*.swo +*.swn diff --git a/i3/config b/i3/config index e5a9a63..adcf563 100644 --- a/i3/config +++ b/i3/config @@ -222,11 +222,18 @@ assign [class="Firefox" window_role="browser"] 2: Web for_window [class="Xfce4-notifyd"] floating enable; border none; focus mode_toggle for_window [class="^URxvt$"] border 1px for_window [title="^tmux$"] move to scratchpad; +#KDE +for_window [class="Plasma-desktop"] border none +for_window [class="krunner"] border none +for_window [class="Kmix"] floating enable; +for_window [class="Plasmoidviewer"] floating enable; +for_window [class="Klipper"] floating enable; border none #assign [class="^Gvim$"] 3: Edit #assign [class="^Evince$"] 4: Viewer assign [class="^Spotify$"] 6: Music assign [class="^Audacious$"] 6: Music assign [class="^Xchat$"] 7: Chat +#for_window [class="Pcmanfm"] floating enable workspace "1: Term" output DP1 workspace "2: Web" output DP1 @@ -263,3 +270,4 @@ exec urxvt -name tmux -e tmux attach #bindsym $mod+Pause mode "$mode_system" exec --no-startup-id nitrogen --restore & #exec --no-startup-id compton -b --config ~/.compton.conf +# diff --git a/vim/ftplugin/tex.vim b/vim/ftplugin/tex.vim index 26ae4cd..2b8229f 100644 --- a/vim/ftplugin/tex.vim +++ b/vim/ftplugin/tex.vim @@ -16,8 +16,9 @@ let g:LatexBox_latexmk_async=1 let g:LatexBox_latexmk_preview_continuously=1 "let g:Tex_CompileRule_pdf = 'pdflatex --synctex=1 -interaction=nonstopmode $*' let g:LatexBox_output_type="pdf" -let g:LatexBox_viewer="evince" +let g:LatexBox_viewer="xdg-open" let g:LatexBox_Folding=1 +let g:LatexBox_quickfix=2 let tlist_tex_settings = 'latex;l:labels;s:sections;t:subsections;u:subsubsections' diff --git a/vimperatorrc b/vimperatorrc new file mode 100644 index 0000000..4f8e673 --- /dev/null +++ b/vimperatorrc @@ -0,0 +1,19 @@ +set hintchars=hjklasdfgyuiopqwertnmzxcvb + +" Pass through all keys (like CTRL-Z) on Gmail and Google Reader: +"autocmd LocationChange .* :js modes.passAllKeys = /(docs|mail)\.google\.com|www\.google\.com\/reader\/view/.test(buffer.URL) +"autocmd LocationChange .* :js modes.passAllKeys = /(localhost|127.0.0.1)/.test(buffer.URL) + +autocmd LocationChange .* js modes.passAllKeys = false +autocmd LocationChange mail\\.google\\.com js modes.passAllKeys = true +autocmd LocationChange docs\\.google\\.com js modes.passAllKeys = true +autocmd LocationChange duckduckgo\\.com js modes.passAllKeys = true + +" Make Firefox run faster by using JIT +set! javascript.options.jit.chrome=true + +map +map d +map u +map U :undo +map x :tabclose diff --git a/vimrc b/vimrc index 64aea45..f924edd 100644 --- a/vimrc +++ b/vimrc @@ -298,3 +298,27 @@ set guioptions-=T "remove toolbar set guioptions-=r "remove right-hand scroll bar set guioptions-=L "remove left-hand scroll bar +let g:pymode_rope_project_root = "~/.ropeprojects" + +" backup to ~/.tmp +set backup +set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp +set backupskip=/tmp/*,/private/tmp/* +set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp +set writebackup + +" Easymotion +let g:EasyMotion_do_mapping = 0 " Disable default mappings + +" Bi-directional find motion +" Jump to anywhere you want with minimal keystrokes, with just one key binding. +" `s{char}{label}` +nmap s (easymotion-s) +nmap w (easymotion-bd-w) +" or +" `s{char}{char}{label}` +" Need one more keystroke, but on average, it may be more comfortable. +nmap s (easymotion-s2) + +" Turn on case sensitive feature +let g:EasyMotion_smartcase = 1