diff --git a/LS_COLORS b/LS_COLORS new file mode 100644 index 0000000..2300467 --- /dev/null +++ b/LS_COLORS @@ -0,0 +1,776 @@ +# LS_COLORS +# Maintainers: Magnus Woldrich , +# Ryan Delaney OpenGPG: 0D98863B4E1D07B6 +# URL: https://github.com/trapd00r/LS_COLORS +# Version: 0.254 +# Updated: Tue Mar 29 21:25:30 AEST 2016 +# +# This is a collection of extension:color mappings, suitable to use as your +# LS_COLORS environment variable. Most of them use the extended color map, +# described in the ECMA-48 document; in other words, you'll need a terminal +# with capabilities of displaying 256 colors. +# +# As of this writing, around 300 different filetypes/extensions is supported. +# That's indeed a lot of extensions, but there's a lot more! Therefore I need +# your help. +# +# Fork this project on github, add the extensions you are missing, and send me +# a pull request. +# +# For files that usually ends up next to each other, like html, css and js, +# try to pick colors that fit nicely together. Filetypes with multiple +# possible extensions, like htm and html, should have the same color. + +# This program is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the Perl Artistic License for more details. +# +# This program is free software: you can redistribute it and/or modify it under +# the terms of the Perl Artistic License as published by the Perl Foundation, +# either version 1.0 of the License, or (at your option) any later version. +# +# You should have received a copy of the Perl Artistic License along +# with this program. If not, see . + +# core {{{1 +BLK 38;5;68 +CAPABILITY 38;5;17 +CHR 38;5;113;1 +DIR 38;5;30 +DOOR 38;5;127 +EXEC 38;5;208;1 +FIFO 38;5;126 +FILE 0 +LINK target +MULTIHARDLINK 38;5;222;1 +# "NORMAL don't reset the bold attribute - +# https://github.com/trapd00r/LS_COLORS/issues/11 +#NORMAL 38;5;254 +NORMAL 0 +ORPHAN 48;5;196;38;5;232;1 +OTHER_WRITABLE 38;5;220;1 +SETGID 48;5;3;38;5;0 +SETUID 38;5;220;1;3;100;1 +SOCK 38;5;197 +STICKY 38;5;86;48;5;234 +STICKY_OTHER_WRITABLE 48;5;235;38;5;139;3 + +*LS_COLORS 48;5;89;38;5;197;1;3;4;7 # :-) +# }}} +# documents {{{1 +*README 38;5;220;1 +*README.rst 38;5;220;1 +*README.md 38;5;220;1 +*LICENSE 38;5;220;1 +*COPYING 38;5;220;1 +*INSTALL 38;5;220;1 +*COPYRIGHT 38;5;220;1 +*AUTHORS 38;5;220;1 +*HISTORY 38;5;220;1 +*CONTRIBUTORS 38;5;220;1 +*PATENTS 38;5;220;1 +*VERSION 38;5;220;1 +*NOTICE 38;5;220;1 +*CHANGES 38;5;220;1 +.log 38;5;190 +# plain-text {{{2 +.txt 38;5;253 +# markup {{{2 +.etx 38;5;184 +.info 38;5;184 +.markdown 38;5;184 +.md 38;5;184 +.mkd 38;5;184 +.nfo 38;5;184 +.pod 38;5;184 +.rst 38;5;184 +.tex 38;5;184 +.textile 38;5;184 +# key-value, non-relational data {{{2 +.bib 38;5;178 +.json 38;5;178 +.jsonl 38;5;178 +.msg 38;5;178 +.pgn 38;5;178 +.rss 38;5;178 +.xml 38;5;178 +.toml 38;5;178 +.yaml 38;5;178 +.yml 38;5;178 +.RData 38;5;178 +.rdata 38;5;178 +# }}} +# binary {{{2 +.cbr 38;5;141 +.cbz 38;5;141 +.chm 38;5;141 +.djvu 38;5;141 +.pdf 38;5;141 +.PDF 38;5;141 +.mobi 38;5;141 +.epub 38;5;141 +# words {{{3 +.docm 38;5;111;4 +.doc 38;5;111 +.docx 38;5;111 +.eps 38;5;111 +.ps 38;5;111 +.odb 38;5;111 +.odt 38;5;111 +.rtf 38;5;111 +# presentation {{{3 +.odp 38;5;166 +.pps 38;5;166 +.ppt 38;5;166 +.pptx 38;5;166 +# Powerpoint show +.ppts 38;5;166 +# Powerpoint with enabled macros +.pptxm 38;5;166;4 +# Powerpoint show with enabled macros +.pptsm 38;5;166;4 +# spreadsheet {{{3 +.csv 38;5;78 +.tsv 38;5;78 +# Open document spreadsheet +.ods 38;5;112 +.xla 38;5;76 +# Excel spreadsheet +.xls 38;5;112 +.xlsx 38;5;112 +# Excel spreadsheet with macros +.xlsxm 38;5;112;4 +# Excel module +.xltm 38;5;73;4 +.xltx 38;5;73 +# }}} +# }}} +# configs {{{2 +*config 1 +*cfg 1 +*conf 1 +*rc 1 +*authorized_keys 1 +*known_hosts 1 +.ini 1 +.plist 1 +# vim +.viminfo 1 +# cisco VPN client configuration +.pcf 1 +# adobe photoshop proof settings file +.psf 1 +# }}} +# }}} +# code {{{1 +# version control {{{2 +.git 38;5;197 +.gitignore 38;5;240 +.gitattributes 38;5;240 +.gitmodules 38;5;240 + +# shell {{{2 +.awk 38;5;172 +.bash 38;5;172 +.bat 38;5;172 +.BAT 38;5;172 +.sed 38;5;172 +.sh 38;5;172 +.zsh 38;5;172 +.vim 38;5;172 + +# interpreted {{{2 +.ahk 38;5;41 +# python +.py 38;5;41 +.ipynb 38;5;41 +# ruby +.rb 38;5;41 +.gemspec 38;5;41 +# perl +.pl 38;5;208 +.PL 38;5;160 +.t 38;5;114 +# sql +.msql 38;5;222 +.mysql 38;5;222 +.pgsql 38;5;222 +.sql 38;5;222 +# Tool Command Language +.tcl 38;5;64;1 +# R language +.r 38;5;49 +.R 38;5;49 +# GrADS script +.gs 38;5;81 +# Clojure +.clj 38;5;41 +.cljs 38;5;41 +.cljc 38;5;41 +# Clojure gorilla REPL worksheet +.cljw 38;5;41 +# Scala +.scala 38;5;41 +# Dart +.dart 38;5;51 + +# compiled {{{2 +# +# assembly language +.asm 38;5;81 +# LISP +.cl 38;5;81 +.lisp 38;5;81 +# lua +.lua 38;5;81 +# Moonscript +.moon 38;5;81 +# C +.c 38;5;81 +.C 38;5;81 +.h 38;5;110 +.H 38;5;110 +.tcc 38;5;110 +# C++ +.c++ 38;5;81 +.h++ 38;5;110 +.hpp 38;5;110 +.hxx 38;5;110 +.ii 38;5;110 +# method file for Objective C +.M 38;5;110 +.m 38;5;110 +# Csharp +.cc 38;5;81 +.cs 38;5;81 +.cp 38;5;81 +.cpp 38;5;81 +.cxx 38;5;81 +# Crystal +.cr 38;5;81 +# Google golang +.go 38;5;81 +# fortran +.f 38;5;81 +.F 38;5;81 +.for 38;5;81 +.ftn 38;5;81 +.f90 38;5;81 +.F90 38;5;81 +.f95 38;5;81 +.F95 38;5;81 +.f03 38;5;81 +.F03 38;5;81 +.f08 38;5;81 +.F08 38;5;81 +# Nim +.nim 38;5;81 +.nimble 38;5;81 +# pascal +.s 38;5;110 +.S 38;5;110 +# Rust +.rs 38;5;81 +# Swift +.swift 38;5;219 +# ? +.sx 38;5;81 +# Vala +.vala 38;5;81 +.vapi 38;5;81 +# interface file in GHC - https://github.com/trapd00r/LS_COLORS/pull/9 +.hi 38;5;110 +# haskell +.hs 38;5;81 +.lhs 38;5;81 +# agda +.agda 38;5;81 +.lagda 38;5;81 +.lagda.tex 38;5;81 +.lagda.rst 38;5;81 +.lagda.md 38;5;81 +.agdai 38;5;110 + +# binaries {{{2 +# compiled apps for interpreted languages +.pyc 38;5;240 +# }}} +# orchestration {{{2 +.tf 38;5;168 +.tfstate 38;5;168 +.tfvars 38;5;168 +# orchestration 2}}} +# html {{{2 +.css 38;5;125;1 +.less 38;5;125;1 +.sass 38;5;125;1 +.scss 38;5;125;1 +.htm 38;5;125;1 +.html 38;5;125;1 +.jhtm 38;5;125;1 +.mht 38;5;125;1 +.eml 38;5;125;1 +.mustache 38;5;125;1 +# }}} +# java {{{2 +.coffee 38;5;074;1 +.java 38;5;074;1 +.js 38;5;074;1 +.mjs 38;5;074;1 +.jsm 38;5;074;1 +.jsm 38;5;074;1 +.jsp 38;5;074;1 +# }}} +# php {{{2 +.php 38;5;81 +# CakePHP view scripts and helpers +.ctp 38;5;81 +# Twig template engine +.twig 38;5;81 +# }}} +# vb/a {{{2 +.vb 38;5;81 +.vba 38;5;81 +.vbs 38;5;81 +# 2}}} +# Build stuff {{{2 +*Dockerfile 38;5;155 +.dockerignore 38;5;240 +*Makefile 38;5;155 +*MANIFEST 38;5;243 +*pm_to_blib 38;5;240 +# Functional Configuration +.nix 38;5;155 +.dhall 38;5;178 +# ruby rake +.rake 38;5;155 +# automake +.am 38;5;242 +.in 38;5;242 +.hin 38;5;242 +.scan 38;5;242 +.m4 38;5;242 +.old 38;5;242 +.out 38;5;242 +.SKIP 38;5;244 +# }}} +# patch files {{{2 +.diff 48;5;197;38;5;232 +.patch 48;5;197;38;5;232;1 +#}}} +# graphics {{{1 +.bmp 38;5;97 +.dicom 38;5;97 +.tiff 38;5;97 +.tif 38;5;97 +.TIFF 38;5;97 +.cdr 38;5;97 +.flif 38;5;97 +.gif 38;5;97 +.ico 38;5;97 +.jpeg 38;5;97 +.JPG 38;5;97 +.jpg 38;5;97 +.nth 38;5;97 +.png 38;5;97 +.psd 38;5;97 +.xpm 38;5;97 +.webp 38;5;97 +# }}} +# vector {{{1 +.ai 38;5;99 +.eps 38;5;99 +.epsf 38;5;99 +.drw 38;5;99 +.ps 38;5;99 +.svg 38;5;99 +# }}} +# video {{{1 +.avi 38;5;114 +.divx 38;5;114 +.IFO 38;5;114 +.m2v 38;5;114 +.m4v 38;5;114 +.mkv 38;5;114 +.MOV 38;5;114 +.mov 38;5;114 +.mp4 38;5;114 +.mpeg 38;5;114 +.mpg 38;5;114 +.ogm 38;5;114 +.rmvb 38;5;114 +.sample 38;5;114 +.wmv 38;5;114 + # mobile/streaming {{{2 +.3g2 38;5;115 +.3gp 38;5;115 +.gp3 38;5;115 +.webm 38;5;115 +.gp4 38;5;115 +.asf 38;5;115 +.flv 38;5;115 +.ts 38;5;115 +.ogv 38;5;115 +.f4v 38;5;115 + # }}} + # lossless {{{2 +.VOB 38;5;115;1 +.vob 38;5;115;1 +# }}} +# audio {{{1 +.3ga 38;5;137;1 +.S3M 38;5;137;1 +.aac 38;5;137;1 +.au 38;5;137;1 +.dat 38;5;137;1 +.dts 38;5;137;1 +.fcm 38;5;137;1 +.m4a 38;5;137;1 +.mid 38;5;137;1 +.midi 38;5;137;1 +.mod 38;5;137;1 +.mp3 38;5;137;1 +.mp4a 38;5;137;1 +.oga 38;5;137;1 +.ogg 38;5;137;1 +.opus 38;5;137;1 +.s3m 38;5;137;1 +.sid 38;5;137;1 +.wma 38;5;137;1 +# lossless +.ape 38;5;136;1 +.aiff 38;5;136;1 +.cda 38;5;136;1 +.flac 38;5;136;1 +.alac 38;5;136;1 +.midi 38;5;136;1 +.pcm 38;5;136;1 +.wav 38;5;136;1 +.wv 38;5;136;1 +.wvc 38;5;136;1 + +# }}} +# fonts {{{1 +.afm 38;5;66 +.fon 38;5;66 +.fnt 38;5;66 +.pfb 38;5;66 +.pfm 38;5;66 +.ttf 38;5;66 +.otf 38;5;66 +# postscript fonts +.PFA 38;5;66 +.pfa 38;5;66 +# }}} +# archives {{{1 +.7z 38;5;40 +.a 38;5;40 +.arj 38;5;40 +.bz2 38;5;40 +.cpio 38;5;40 +.gz 38;5;40 +.lrz 38;5;40 +.lz 38;5;40 +.lzma 38;5;40 +.lzo 38;5;40 +.rar 38;5;40 +.s7z 38;5;40 +.sz 38;5;40 +.tar 38;5;40 +.tgz 38;5;40 +.xz 38;5;40 +.z 38;5;40 +.zip 38;5;40 +.zipx 38;5;40 +.zoo 38;5;40 +.zpaq 38;5;40 +.zst 38;5;40 +.zz 38;5;40 + # packaged apps {{{2 +.apk 38;5;215 +.deb 38;5;215 +.rpm 38;5;215 +.jad 38;5;215 +.jar 38;5;215 +.cab 38;5;215 +.pak 38;5;215 +.pk3 38;5;215 +.vdf 38;5;215 +.vpk 38;5;215 +.bsp 38;5;215 +.dmg 38;5;215 + # }}} + # segments from 0 to three digits after first extension letter {{{2 +.r[0-9]{0,2} 38;5;239 +.zx[0-9]{0,2} 38;5;239 +.z[0-9]{0,2} 38;5;239 +# partial files +.part 38;5;239 + # }}} +# partition images {{{2 +.dmg 38;5;124 +.iso 38;5;124 +.bin 38;5;124 +.nrg 38;5;124 +.qcow 38;5;124 +.sparseimage 38;5;124 +.toast 38;5;124 +.vcd 38;5;124 +.vmdk 38;5;124 +# }}} +# databases {{{2 +.accdb 38;5;60 +.accde 38;5;60 +.accdr 38;5;60 +.accdt 38;5;60 +.db 38;5;60 +.fmp12 38;5;60 +.fp7 38;5;60 +.localstorage 38;5;60 +.mdb 38;5;60 +.mde 38;5;60 +.sqlite 38;5;60 +.typelib 38;5;60 +# NetCDF database +.nc 38;5;60 +# }}} +# tempfiles {{{1 +# undo files +.pacnew 38;5;33 +.un~ 38;5;241 +.orig 38;5;241 +# backups +.BUP 38;5;241 +.bak 38;5;241 +.o 38;5;241 # *nix Object file (shared libraries, core dumps etc) +*core 38;5;241 # Linux user core dump file (from /proc/sys/kernel/core_pattern) +.rlib 38;5;241 # Static rust library +# temporary files +.swp 38;5;244 +.swo 38;5;244 +.tmp 38;5;244 +.sassc 38;5;244 +# state files +.pid 38;5;248 +.state 38;5;248 +*lockfile 38;5;248 +*lock 38;5;248 +# error logs +.err 38;5;160;1 +.error 38;5;160;1 +.stderr 38;5;160;1 +# state dumps +.aria2 38;5;241 +.dump 38;5;241 +.stackdump 38;5;241 +.zcompdump 38;5;241 +.zwc 38;5;241 +# tcpdump, network traffic capture +.pcap 38;5;29 +.cap 38;5;29 +.dmp 38;5;29 +# macOS +.DS_Store 38;5;239 +.localized 38;5;239 +.CFUserTextEncoding 38;5;239 +# }}} +# hosts {{{1 +# /etc/hosts.{deny,allow} +.allow 38;5;112 +.deny 38;5;196 +# }}} +# systemd {{{1 +# http://www.freedesktop.org/software/systemd/man/systemd.unit.html +.service 38;5;45 +*@.service 38;5;45 +.socket 38;5;45 +.swap 38;5;45 +.device 38;5;45 +.mount 38;5;45 +.automount 38;5;45 +.target 38;5;45 +.path 38;5;45 +.timer 38;5;45 +.snapshot 38;5;45 +# }}} +# metadata {{{1 +.application 38;5;116 +.cue 38;5;116 +.description 38;5;116 +.directory 38;5;116 +.m3u 38;5;116 +.m3u8 38;5;116 +.md5 38;5;116 +.properties 38;5;116 +.sfv 38;5;116 +.srt 38;5;116 +.sub 38;5;116 +.theme 38;5;116 +.torrent 38;5;116 +.urlview 38;5;116 +# }}} +# encrypted data {{{1 +.asc 38;5;192;3 +.bfe 38;5;192;3 +.enc 38;5;192;3 +.gpg 38;5;192;3 +.signature 38;5;192;3 +.sig 38;5;192;3 +.p12 38;5;192;3 +.pem 38;5;192;3 +.pgp 38;5;192;3 +.asc 38;5;192;3 +.enc 38;5;192;3 +.sig 38;5;192;3 +.p7s 38;5;192;3 +*id_dsa 38;5;192;3 +*id_rsa 38;5;192;3 +*id_ecdsa 38;5;192;3 +*id_ed25519 38;5;192;3 +# 1}}} +# emulators {{{1 +.32x 38;5;213 +.cdi 38;5;213 +.fm2 38;5;213 +.rom 38;5;213 +.sav 38;5;213 +.st 38;5;213 + # atari +.a00 38;5;213 +.a52 38;5;213 +.A64 38;5;213 +.a64 38;5;213 +.a78 38;5;213 +.adf 38;5;213 +.atr 38;5;213 + # nintendo +.gb 38;5;213 +.gba 38;5;213 +.gbc 38;5;213 +.gel 38;5;213 +.gg 38;5;213 +.ggl 38;5;213 +.ipk 38;5;213 # Nintendo (DS Packed Images) +.j64 38;5;213 +.nds 38;5;213 +.nes 38;5;213 + # Sega +.sms 38;5;213 +# }}} +# unsorted {{{1 +# +# Portable Object Translation for GNU Gettext +.pot 38;5;7 +# CAD files for printed circuit boards +.pcb 38;5;7 +# groff (rendering app for texinfo) +.mm 38;5;7 +# perldoc +.pod 38;5;7 +# GIMP files +.gbr 38;5;7 +.scm 38;5;7 +.xcf 38;5;7 +# printer spool file +.spl 38;5;7 +# RStudio project file +.Rproj 38;5;11 +# Nokia Symbian OS files +.sis 38;5;7 + +.1p 38;5;7 +.3p 38;5;7 +.cnc 38;5;7 +.def 38;5;7 +.ex 38;5;7 +.example 38;5;7 +.feature 38;5;7 +.ger 38;5;7 +.map 38;5;7 +.mf 38;5;7 +.mfasl 38;5;7 +.mi 38;5;7 +.mtx 38;5;7 +.pc 38;5;7 +.pi 38;5;7 +.plt 38;5;7 +.pm 38;5;7 +.rdf 38;5;7 +.ru 38;5;7 +.sch 38;5;7 +.sty 38;5;7 +.sug 38;5;7 +.t 38;5;7 +.tdy 38;5;7 +.tfm 38;5;7 +.tfnt 38;5;7 +.tg 38;5;7 +.vcard 38;5;7 +.vcf 38;5;7 +.xln 38;5;7 +# AppCode files +.iml 38;5;166 +# Xcode files +.xcconfig 1 +.entitlements 1 +.strings 1 +.storyboard 38;5;196 +.xcsettings 1 +.xib 38;5;208 +# }}} +# termcap {{{1 +TERM ansi +TERM color-xterm +TERM con132x25 +TERM con132x30 +TERM con132x43 +TERM con132x60 +TERM con80x25 +TERM con80x28 +TERM con80x30 +TERM con80x43 +TERM con80x50 +TERM con80x60 +TERM cons25 +TERM console +TERM cygwin +TERM dtterm +TERM Eterm +TERM eterm-color +TERM gnome +TERM gnome-256color +TERM jfbterm +TERM konsole +TERM kterm +TERM linux +TERM linux-c +TERM mach-color +TERM mlterm +TERM putty +TERM rxvt +TERM rxvt-256color +TERM rxvt-cygwin +TERM rxvt-cygwin-native +TERM rxvt-unicode +TERM rxvt-unicode-256color +TERM rxvt-unicode256 +TERM screen +TERM screen-256color +TERM screen-256color-bce +TERM screen-bce +TERM screen-w +TERM screen.linux +TERM screen.rxvt +TERM terminator +TERM vt100 +TERM xterm +TERM xterm-16color +TERM xterm-256color +TERM xterm-88color +TERM xterm-color +TERM xterm-debian +TERM xterm-kitty +# }}} + + +# vim: ft=dircolors:fdm=marker:et:sw=2: diff --git a/TODO b/TODO index 491af07..35a0d0c 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,5 @@ Todo: - Keyboard shortcuts for resolving differences. -- Colourise file name. - Search. - Search and replace. @@ -31,6 +30,7 @@ Done: - Bulk indent/dedent. - Large pastes. - tabs. +- Colourise file name. Shelved: diff --git a/diff_edit/LS_COLORS.sh b/diff_edit/LS_COLORS.sh new file mode 100755 index 0000000..83b2331 --- /dev/null +++ b/diff_edit/LS_COLORS.sh @@ -0,0 +1,2 @@ +LS_COLORS='bd=38;5;68:ca=38;5;17:cd=38;5;113;1:di=38;5;30:do=38;5;127:ex=38;5;208;1:pi=38;5;126:fi=0:ln=target:mh=38;5;222;1:no=0:or=48;5;196;38;5;232;1:ow=38;5;220;1:sg=48;5;3;38;5;0:su=38;5;220;1;3;100;1:so=38;5;197:st=38;5;86;48;5;234:tw=48;5;235;38;5;139;3:*LS_COLORS=48;5;89;38;5;197;1;3;4;7:*README=38;5;220;1:*README.rst=38;5;220;1:*README.md=38;5;220;1:*LICENSE=38;5;220;1:*COPYING=38;5;220;1:*INSTALL=38;5;220;1:*COPYRIGHT=38;5;220;1:*AUTHORS=38;5;220;1:*HISTORY=38;5;220;1:*CONTRIBUTORS=38;5;220;1:*PATENTS=38;5;220;1:*VERSION=38;5;220;1:*NOTICE=38;5;220;1:*CHANGES=38;5;220;1:*.log=38;5;190:*.txt=38;5;253:*.etx=38;5;184:*.info=38;5;184:*.markdown=38;5;184:*.md=38;5;184:*.mkd=38;5;184:*.nfo=38;5;184:*.pod=38;5;184:*.rst=38;5;184:*.tex=38;5;184:*.textile=38;5;184:*.bib=38;5;178:*.json=38;5;178:*.jsonl=38;5;178:*.msg=38;5;178:*.pgn=38;5;178:*.rss=38;5;178:*.xml=38;5;178:*.toml=38;5;178:*.yaml=38;5;178:*.yml=38;5;178:*.RData=38;5;178:*.rdata=38;5;178:*.cbr=38;5;141:*.cbz=38;5;141:*.chm=38;5;141:*.djvu=38;5;141:*.pdf=38;5;141:*.PDF=38;5;141:*.mobi=38;5;141:*.epub=38;5;141:*.docm=38;5;111;4:*.doc=38;5;111:*.docx=38;5;111:*.eps=38;5;111:*.ps=38;5;111:*.odb=38;5;111:*.odt=38;5;111:*.rtf=38;5;111:*.odp=38;5;166:*.pps=38;5;166:*.ppt=38;5;166:*.pptx=38;5;166:*.ppts=38;5;166:*.pptxm=38;5;166;4:*.pptsm=38;5;166;4:*.csv=38;5;78:*.tsv=38;5;78:*.ods=38;5;112:*.xla=38;5;76:*.xls=38;5;112:*.xlsx=38;5;112:*.xlsxm=38;5;112;4:*.xltm=38;5;73;4:*.xltx=38;5;73:*config=1:*cfg=1:*conf=1:*rc=1:*authorized_keys=1:*known_hosts=1:*.ini=1:*.plist=1:*.viminfo=1:*.pcf=1:*.psf=1:*.git=38;5;197:*.gitignore=38;5;240:*.gitattributes=38;5;240:*.gitmodules=38;5;240:*.awk=38;5;172:*.bash=38;5;172:*.bat=38;5;172:*.BAT=38;5;172:*.sed=38;5;172:*.sh=38;5;172:*.zsh=38;5;172:*.vim=38;5;172:*.ahk=38;5;41:*.py=38;5;41:*.ipynb=38;5;41:*.rb=38;5;41:*.gemspec=38;5;41:*.pl=38;5;208:*.PL=38;5;160:*.t=38;5;114:*.msql=38;5;222:*.mysql=38;5;222:*.pgsql=38;5;222:*.sql=38;5;222:*.tcl=38;5;64;1:*.r=38;5;49:*.R=38;5;49:*.gs=38;5;81:*.clj=38;5;41:*.cljs=38;5;41:*.cljc=38;5;41:*.cljw=38;5;41:*.scala=38;5;41:*.dart=38;5;51:*.asm=38;5;81:*.cl=38;5;81:*.lisp=38;5;81:*.lua=38;5;81:*.moon=38;5;81:*.c=38;5;81:*.C=38;5;81:*.h=38;5;110:*.H=38;5;110:*.tcc=38;5;110:*.c++=38;5;81:*.h++=38;5;110:*.hpp=38;5;110:*.hxx=38;5;110:*.ii=38;5;110:*.M=38;5;110:*.m=38;5;110:*.cc=38;5;81:*.cs=38;5;81:*.cp=38;5;81:*.cpp=38;5;81:*.cxx=38;5;81:*.cr=38;5;81:*.go=38;5;81:*.f=38;5;81:*.F=38;5;81:*.for=38;5;81:*.ftn=38;5;81:*.f90=38;5;81:*.F90=38;5;81:*.f95=38;5;81:*.F95=38;5;81:*.f03=38;5;81:*.F03=38;5;81:*.f08=38;5;81:*.F08=38;5;81:*.nim=38;5;81:*.nimble=38;5;81:*.s=38;5;110:*.S=38;5;110:*.rs=38;5;81:*.swift=38;5;219:*.sx=38;5;81:*.vala=38;5;81:*.vapi=38;5;81:*.hi=38;5;110:*.hs=38;5;81:*.lhs=38;5;81:*.agda=38;5;81:*.lagda=38;5;81:*.lagda.tex=38;5;81:*.lagda.rst=38;5;81:*.lagda.md=38;5;81:*.agdai=38;5;110:*.pyc=38;5;240:*.tf=38;5;168:*.tfstate=38;5;168:*.tfvars=38;5;168:*.css=38;5;125;1:*.less=38;5;125;1:*.sass=38;5;125;1:*.scss=38;5;125;1:*.htm=38;5;125;1:*.html=38;5;125;1:*.jhtm=38;5;125;1:*.mht=38;5;125;1:*.eml=38;5;125;1:*.mustache=38;5;125;1:*.coffee=38;5;074;1:*.java=38;5;074;1:*.js=38;5;074;1:*.mjs=38;5;074;1:*.jsm=38;5;074;1:*.jsm=38;5;074;1:*.jsp=38;5;074;1:*.php=38;5;81:*.ctp=38;5;81:*.twig=38;5;81:*.vb=38;5;81:*.vba=38;5;81:*.vbs=38;5;81:*Dockerfile=38;5;155:*.dockerignore=38;5;240:*Makefile=38;5;155:*MANIFEST=38;5;243:*pm_to_blib=38;5;240:*.nix=38;5;155:*.dhall=38;5;178:*.rake=38;5;155:*.am=38;5;242:*.in=38;5;242:*.hin=38;5;242:*.scan=38;5;242:*.m4=38;5;242:*.old=38;5;242:*.out=38;5;242:*.SKIP=38;5;244:*.diff=48;5;197;38;5;232:*.patch=48;5;197;38;5;232;1:*.bmp=38;5;97:*.dicom=38;5;97:*.tiff=38;5;97:*.tif=38;5;97:*.TIFF=38;5;97:*.cdr=38;5;97:*.flif=38;5;97:*.gif=38;5;97:*.ico=38;5;97:*.jpeg=38;5;97:*.JPG=38;5;97:*.jpg=38;5;97:*.nth=38;5;97:*.png=38;5;97:*.psd=38;5;97:*.xpm=38;5;97:*.webp=38;5;97:*.ai=38;5;99:*.eps=38;5;99:*.epsf=38;5;99:*.drw=38;5;99:*.ps=38;5;99:*.svg=38;5;99:*.avi=38;5;114:*.divx=38;5;114:*.IFO=38;5;114:*.m2v=38;5;114:*.m4v=38;5;114:*.mkv=38;5;114:*.MOV=38;5;114:*.mov=38;5;114:*.mp4=38;5;114:*.mpeg=38;5;114:*.mpg=38;5;114:*.ogm=38;5;114:*.rmvb=38;5;114:*.sample=38;5;114:*.wmv=38;5;114:*.3g2=38;5;115:*.3gp=38;5;115:*.gp3=38;5;115:*.webm=38;5;115:*.gp4=38;5;115:*.asf=38;5;115:*.flv=38;5;115:*.ts=38;5;115:*.ogv=38;5;115:*.f4v=38;5;115:*.VOB=38;5;115;1:*.vob=38;5;115;1:*.3ga=38;5;137;1:*.S3M=38;5;137;1:*.aac=38;5;137;1:*.au=38;5;137;1:*.dat=38;5;137;1:*.dts=38;5;137;1:*.fcm=38;5;137;1:*.m4a=38;5;137;1:*.mid=38;5;137;1:*.midi=38;5;137;1:*.mod=38;5;137;1:*.mp3=38;5;137;1:*.mp4a=38;5;137;1:*.oga=38;5;137;1:*.ogg=38;5;137;1:*.opus=38;5;137;1:*.s3m=38;5;137;1:*.sid=38;5;137;1:*.wma=38;5;137;1:*.ape=38;5;136;1:*.aiff=38;5;136;1:*.cda=38;5;136;1:*.flac=38;5;136;1:*.alac=38;5;136;1:*.midi=38;5;136;1:*.pcm=38;5;136;1:*.wav=38;5;136;1:*.wv=38;5;136;1:*.wvc=38;5;136;1:*.afm=38;5;66:*.fon=38;5;66:*.fnt=38;5;66:*.pfb=38;5;66:*.pfm=38;5;66:*.ttf=38;5;66:*.otf=38;5;66:*.PFA=38;5;66:*.pfa=38;5;66:*.7z=38;5;40:*.a=38;5;40:*.arj=38;5;40:*.bz2=38;5;40:*.cpio=38;5;40:*.gz=38;5;40:*.lrz=38;5;40:*.lz=38;5;40:*.lzma=38;5;40:*.lzo=38;5;40:*.rar=38;5;40:*.s7z=38;5;40:*.sz=38;5;40:*.tar=38;5;40:*.tgz=38;5;40:*.xz=38;5;40:*.z=38;5;40:*.zip=38;5;40:*.zipx=38;5;40:*.zoo=38;5;40:*.zpaq=38;5;40:*.zst=38;5;40:*.zz=38;5;40:*.apk=38;5;215:*.deb=38;5;215:*.rpm=38;5;215:*.jad=38;5;215:*.jar=38;5;215:*.cab=38;5;215:*.pak=38;5;215:*.pk3=38;5;215:*.vdf=38;5;215:*.vpk=38;5;215:*.bsp=38;5;215:*.dmg=38;5;215:*.r[0-9]{0,2}=38;5;239:*.zx[0-9]{0,2}=38;5;239:*.z[0-9]{0,2}=38;5;239:*.part=38;5;239:*.dmg=38;5;124:*.iso=38;5;124:*.bin=38;5;124:*.nrg=38;5;124:*.qcow=38;5;124:*.sparseimage=38;5;124:*.toast=38;5;124:*.vcd=38;5;124:*.vmdk=38;5;124:*.accdb=38;5;60:*.accde=38;5;60:*.accdr=38;5;60:*.accdt=38;5;60:*.db=38;5;60:*.fmp12=38;5;60:*.fp7=38;5;60:*.localstorage=38;5;60:*.mdb=38;5;60:*.mde=38;5;60:*.sqlite=38;5;60:*.typelib=38;5;60:*.nc=38;5;60:*.pacnew=38;5;33:*.un~=38;5;241:*.orig=38;5;241:*.BUP=38;5;241:*.bak=38;5;241:*.o=38;5;241:*core=38;5;241:*.rlib=38;5;241:*.swp=38;5;244:*.swo=38;5;244:*.tmp=38;5;244:*.sassc=38;5;244:*.pid=38;5;248:*.state=38;5;248:*lockfile=38;5;248:*lock=38;5;248:*.err=38;5;160;1:*.error=38;5;160;1:*.stderr=38;5;160;1:*.aria2=38;5;241:*.dump=38;5;241:*.stackdump=38;5;241:*.zcompdump=38;5;241:*.zwc=38;5;241:*.pcap=38;5;29:*.cap=38;5;29:*.dmp=38;5;29:*.DS_Store=38;5;239:*.localized=38;5;239:*.CFUserTextEncoding=38;5;239:*.allow=38;5;112:*.deny=38;5;196:*.service=38;5;45:*@.service=38;5;45:*.socket=38;5;45:*.swap=38;5;45:*.device=38;5;45:*.mount=38;5;45:*.automount=38;5;45:*.target=38;5;45:*.path=38;5;45:*.timer=38;5;45:*.snapshot=38;5;45:*.application=38;5;116:*.cue=38;5;116:*.description=38;5;116:*.directory=38;5;116:*.m3u=38;5;116:*.m3u8=38;5;116:*.md5=38;5;116:*.properties=38;5;116:*.sfv=38;5;116:*.srt=38;5;116:*.sub=38;5;116:*.theme=38;5;116:*.torrent=38;5;116:*.urlview=38;5;116:*.asc=38;5;192;3:*.bfe=38;5;192;3:*.enc=38;5;192;3:*.gpg=38;5;192;3:*.signature=38;5;192;3:*.sig=38;5;192;3:*.p12=38;5;192;3:*.pem=38;5;192;3:*.pgp=38;5;192;3:*.asc=38;5;192;3:*.enc=38;5;192;3:*.sig=38;5;192;3:*.p7s=38;5;192;3:*id_dsa=38;5;192;3:*id_rsa=38;5;192;3:*id_ecdsa=38;5;192;3:*id_ed25519=38;5;192;3:*.32x=38;5;213:*.cdi=38;5;213:*.fm2=38;5;213:*.rom=38;5;213:*.sav=38;5;213:*.st=38;5;213:*.a00=38;5;213:*.a52=38;5;213:*.A64=38;5;213:*.a64=38;5;213:*.a78=38;5;213:*.adf=38;5;213:*.atr=38;5;213:*.gb=38;5;213:*.gba=38;5;213:*.gbc=38;5;213:*.gel=38;5;213:*.gg=38;5;213:*.ggl=38;5;213:*.ipk=38;5;213:*.j64=38;5;213:*.nds=38;5;213:*.nes=38;5;213:*.sms=38;5;213:*.pot=38;5;7:*.pcb=38;5;7:*.mm=38;5;7:*.pod=38;5;7:*.gbr=38;5;7:*.scm=38;5;7:*.xcf=38;5;7:*.spl=38;5;7:*.Rproj=38;5;11:*.sis=38;5;7:*.1p=38;5;7:*.3p=38;5;7:*.cnc=38;5;7:*.def=38;5;7:*.ex=38;5;7:*.example=38;5;7:*.feature=38;5;7:*.ger=38;5;7:*.map=38;5;7:*.mf=38;5;7:*.mfasl=38;5;7:*.mi=38;5;7:*.mtx=38;5;7:*.pc=38;5;7:*.pi=38;5;7:*.plt=38;5;7:*.pm=38;5;7:*.rdf=38;5;7:*.ru=38;5;7:*.sch=38;5;7:*.sty=38;5;7:*.sug=38;5;7:*.t=38;5;7:*.tdy=38;5;7:*.tfm=38;5;7:*.tfnt=38;5;7:*.tg=38;5;7:*.vcard=38;5;7:*.vcf=38;5;7:*.xln=38;5;7:*.iml=38;5;166:*.xcconfig=1:*.entitlements=1:*.strings=1:*.storyboard=38;5;196:*.xcsettings=1:*.xib=38;5;208:'; +export LS_COLORS diff --git a/diff_edit/__init__.py b/diff_edit/__init__.py index e81264b..e9f3413 100755 --- a/diff_edit/__init__.py +++ b/diff_edit/__init__.py @@ -60,8 +60,8 @@ def union_box_line(a_line, b_line): def highlight_str(line, bg_color, transparency): def blend_style(style): return termstr.CharStyle( - termstr.blend_color(style.fg_color, bg_color, transparency), - termstr.blend_color(style.bg_color, bg_color, transparency), + termstr.blend_color(style.fg_rgb_color, bg_color, transparency), + termstr.blend_color(style.bg_rgb_color, bg_color, transparency), is_bold=style.is_bold, is_italic=style.is_italic, is_underlined=style.is_underlined) return termstr.TermStr(line).transform_style(blend_style) diff --git a/diff_edit/editor.py b/diff_edit/editor.py index fc24b80..6212128 100755 --- a/diff_edit/editor.py +++ b/diff_edit/editor.py @@ -6,12 +6,16 @@ import asyncio import contextlib import enum import functools +import importlib +import importlib.resources import os import string import sys +import diff_edit import fill3 import fill3.terminal as terminal +import lscolors import pygments import pygments.lexers import pygments.styles @@ -20,6 +24,40 @@ import termstr import cwcwidth +def get_ls_color_codes(): + with importlib.resources.open_text(diff_edit, "LS_COLORS.sh") as lscolors_file: + codes = lscolors_file.readline().strip()[len("LS_COLORS='"):-len("';")] + return lscolors._parse_ls_colors(codes) + + +_LS_COLOR_CODES = get_ls_color_codes() + + +def _charstyle_of_path(path): + color_code = lscolors.color_code_for_path(path, _LS_COLOR_CODES) + if color_code is None: + return termstr.CharStyle() + term_text = termstr.ESC + "[" + color_code + "m-" + return termstr.TermStr.from_term(term_text).style[0] + + +@functools.lru_cache(maxsize=100) +def path_colored(path): + char_style = _charstyle_of_path(path) + if path.startswith("./"): + path = path[2:] + dirname, basename = os.path.split(path) + if dirname == "": + return termstr.TermStr(basename, char_style) + else: + dirname = dirname + os.path.sep + dir_style = _charstyle_of_path(os.path.sep) + parts = [termstr.TermStr(part, dir_style) for part in dirname.split(os.path.sep)] + path_sep = termstr.TermStr(os.path.sep).fg_color(termstr.Color.grey_150) + dir_name = fill3.join(path_sep, parts) + return dir_name + termstr.TermStr(basename, char_style) + + @functools.lru_cache(maxsize=100) def highlight_str(line, bg_color, transparency=0.6): def blend_style(style): @@ -852,15 +890,14 @@ class Editor: def appearance(self): return self.decor_widget.appearance() - _HEADER_STYLE = termstr.CharStyle(fg_color=termstr.Color.white, bg_color=termstr.Color.green) - @functools.lru_cache(maxsize=100) def get_header(self, path, width, cursor_x, cursor_y, is_changed): change_marker = "*" if is_changed else "" - cursor_position = f"Line {cursor_y+1} Column {cursor_x+1:<3}" - path_part = (path + change_marker).ljust(width - len(cursor_position) - 2) - return (termstr.TermStr(" " + path_part, self._HEADER_STYLE).bold() + - termstr.TermStr(cursor_position + " ", self._HEADER_STYLE)) + cursor_position = termstr.TermStr( + f"Line {cursor_y+1} Column {cursor_x+1:<3}").fg_color(termstr.Color.grey_100) + path_part = (path_colored(path) + change_marker).ljust(width - len(cursor_position) - 2) + header = " " + path_part + cursor_position + " " + return termstr.TermStr(header).bg_color(termstr.Color.grey_30) def appearance_for(self, dimensions): width, height = dimensions diff --git a/setup.py b/setup.py index 28ddd37..02e692b 100755 --- a/setup.py +++ b/setup.py @@ -18,4 +18,5 @@ setup(name="diff-edit", entry_points={"console_scripts": ["diff-edit=diff_edit:main"]}, install_requires=[ "pygments==2.10.0", "docopt==0.6.2", - "fill3 @ git+https://github.com/ahamilton/eris@v2022.04.18#subdirectory=fill3"]) + "fill3 @ git+https://github.com/ahamilton/eris@v2022.04.30#subdirectory=fill3", + "lscolors @ git+https://github.com/ahamilton/eris@v2022.04.30#subdirectory=lscolors"])